[Init] Initial commit - NetMesh terminal manager
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled

This commit is contained in:
2026-09-13 18:24:01 +08:00
commit 3c72efcb7f
3255 changed files with 907009 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import type { ModelMessage } from 'ai';
import { MockLanguageModelV4 } from 'ai/test';
import { ToolOutputStore } from './toolOutputStore';
import { storeCompactionArchive, storeCompactionArtifact } from './compactionArtifacts';
import { buildCompactionFailureArchiveNotice, compactCattyMessages } from './cattyRuntime';
test('compaction artifacts retain exact searchable history and summary output', () => {
const store = new ToolOutputStore();
const archive = storeCompactionArchive(store, 'chat-1', 'exact E_CONN_RESET_7319 evidence');
const artifact = storeCompactionArtifact(store, 'chat-1', {
trigger: '413-retry',
modelId: 'model-1',
archiveHandleId: archive.id,
formattedHistory: 'exact E_CONN_RESET_7319 evidence',
summary: 'network failure found',
});
assert.match(store.read({ handleId: archive.id, mode: 'search', query: 'E_CONN_RESET_7319' }, 'chat-1') ?? '', /E_CONN_RESET_7319/);
assert.match(store.read({ handleId: artifact.id, mode: 'full' }, 'chat-1') ?? '', /network failure found/);
});
test('compaction failure notice keeps the newly created archive discoverable', () => {
assert.match(
buildCompactionFailureArchiveNotice('tool-output-archive', false) ?? '',
/tool-output-archive/,
);
assert.equal(buildCompactionFailureArchiveNotice(undefined, false), undefined);
});
test('compaction archive preserves tool evidence from before stale-result pruning', async () => {
const evidence = 'UNIQUE_OLD_TOOL_EVIDENCE_7319';
const messages: ModelMessage[] = [
{ role: 'user', content: 'inspect the old failure' },
{
role: 'assistant',
content: [{
type: 'tool-call',
toolCallId: 'old-call',
toolName: 'terminal_execute',
input: { sessionId: 'session-1', command: 'inspect failure' },
}],
},
{
role: 'tool',
content: [{
type: 'tool-result',
toolCallId: 'old-call',
toolName: 'terminal_execute',
output: { type: 'text', value: evidence },
}],
},
...Array.from({ length: 24 }, (_, index) => ({
role: index % 2 === 0 ? 'user' : 'assistant',
content: `later message ${index}`,
} as ModelMessage)),
];
const store = new ToolOutputStore();
const model = new MockLanguageModelV4({
doGenerate: async () => ({
content: [{ type: 'text', text: 'summary' }],
finishReason: { unified: 'stop', raw: undefined },
usage: {
inputTokens: { total: 10, noCache: 10, cacheRead: undefined, cacheWrite: undefined },
outputTokens: { total: 2, text: 2, reasoning: undefined },
},
warnings: [],
}),
});
const result = await compactCattyMessages({
messages,
sessionId: 'chat-archive',
chatSessionId: 'chat-archive',
model,
abortSignal: new AbortController().signal,
force: true,
trigger: 'force',
toolOutputStore: store,
});
const handleId = result.trace?.archiveHandleId;
assert.ok(handleId);
assert.match(
store.read({ handleId, mode: 'search', query: evidence }, 'chat-archive') ?? '',
new RegExp(evidence),
);
});