@namzu/cli 12.1.0 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +119 -60
- package/dist/cli.js.map +1 -1
- package/dist/commands/acp.d.ts +24 -8
- package/dist/commands/acp.d.ts.map +1 -1
- package/dist/commands/acp.js +221 -80
- package/dist/commands/acp.js.map +1 -1
- package/dist/commands/drain.d.ts.map +1 -1
- package/dist/commands/drain.js +45 -9
- package/dist/commands/drain.js.map +1 -1
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +79 -21
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/prior-messages.d.ts +11 -0
- package/dist/commands/prior-messages.d.ts.map +1 -0
- package/dist/commands/prior-messages.js +280 -0
- package/dist/commands/prior-messages.js.map +1 -0
- package/dist/commands/resume.d.ts.map +1 -1
- package/dist/commands/resume.js +21 -19
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/run-stream.d.ts +5 -3
- package/dist/commands/run-stream.d.ts.map +1 -1
- package/dist/commands/run-stream.js +66 -62
- package/dist/commands/run-stream.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +50 -37
- package/dist/commands/run.js.map +1 -1
- package/dist/config/debug.d.ts +55 -0
- package/dist/config/debug.d.ts.map +1 -0
- package/dist/config/debug.js +126 -0
- package/dist/config/debug.js.map +1 -0
- package/dist/config/load.d.ts +88 -4
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +386 -56
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +87 -5
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +5 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/config/trusted-project-context.d.ts +11 -0
- package/dist/config/trusted-project-context.d.ts.map +1 -0
- package/dist/config/trusted-project-context.js +28 -0
- package/dist/config/trusted-project-context.js.map +1 -0
- package/dist/context/project-path.d.ts +3 -0
- package/dist/context/project-path.d.ts.map +1 -0
- package/dist/context/project-path.js +16 -0
- package/dist/context/project-path.js.map +1 -0
- package/dist/context/project-tracker.d.ts +30 -0
- package/dist/context/project-tracker.d.ts.map +1 -0
- package/dist/context/project-tracker.js +217 -0
- package/dist/context/project-tracker.js.map +1 -0
- package/dist/context/sandbox.d.ts +29 -9
- package/dist/context/sandbox.d.ts.map +1 -1
- package/dist/context/sandbox.js +8 -0
- package/dist/context/sandbox.js.map +1 -1
- package/dist/doctor/checks/credentials.d.ts.map +1 -1
- package/dist/doctor/checks/credentials.js +7 -1
- package/dist/doctor/checks/credentials.js.map +1 -1
- package/dist/exit-codes.d.ts +5 -4
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +5 -4
- package/dist/exit-codes.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/clipboard/text.d.ts +43 -0
- package/dist/integrations/clipboard/text.d.ts.map +1 -0
- package/dist/integrations/clipboard/text.js +43 -0
- package/dist/integrations/clipboard/text.js.map +1 -0
- package/dist/integrations/mcp/servers.d.ts +9 -0
- package/dist/integrations/mcp/servers.d.ts.map +1 -1
- package/dist/integrations/mcp/servers.js +11 -4
- package/dist/integrations/mcp/servers.js.map +1 -1
- package/dist/integrations/notifications/terminal.d.ts +32 -0
- package/dist/integrations/notifications/terminal.d.ts.map +1 -0
- package/dist/integrations/notifications/terminal.js +46 -0
- package/dist/integrations/notifications/terminal.js.map +1 -0
- package/dist/integrations/plugins/runtime.d.ts +17 -0
- package/dist/integrations/plugins/runtime.d.ts.map +1 -0
- package/dist/integrations/plugins/runtime.js +100 -0
- package/dist/integrations/plugins/runtime.js.map +1 -0
- package/dist/integrations/providers/codex-device-login.d.ts +27 -0
- package/dist/integrations/providers/codex-device-login.d.ts.map +1 -0
- package/dist/integrations/providers/codex-device-login.js +195 -0
- package/dist/integrations/providers/codex-device-login.js.map +1 -0
- package/dist/integrations/providers/codex-oauth.d.ts +10 -0
- package/dist/integrations/providers/codex-oauth.d.ts.map +1 -0
- package/dist/integrations/providers/codex-oauth.js +95 -0
- package/dist/integrations/providers/codex-oauth.js.map +1 -0
- package/dist/integrations/providers/credential-store.d.ts +40 -4
- package/dist/integrations/providers/credential-store.d.ts.map +1 -1
- package/dist/integrations/providers/credential-store.js +236 -18
- package/dist/integrations/providers/credential-store.js.map +1 -1
- package/dist/integrations/providers/discover.d.ts +25 -13
- package/dist/integrations/providers/discover.d.ts.map +1 -1
- package/dist/integrations/providers/discover.js +98 -44
- package/dist/integrations/providers/discover.js.map +1 -1
- package/dist/integrations/providers/harness-credentials.d.ts +36 -0
- package/dist/integrations/providers/harness-credentials.d.ts.map +1 -0
- package/dist/integrations/providers/harness-credentials.js +146 -0
- package/dist/integrations/providers/harness-credentials.js.map +1 -0
- package/dist/integrations/providers/identity.d.ts +8 -15
- package/dist/integrations/providers/identity.d.ts.map +1 -1
- package/dist/integrations/providers/identity.js +8 -15
- package/dist/integrations/providers/identity.js.map +1 -1
- package/dist/integrations/providers/index.d.ts +7 -4
- package/dist/integrations/providers/index.d.ts.map +1 -1
- package/dist/integrations/providers/index.js +6 -3
- package/dist/integrations/providers/index.js.map +1 -1
- package/dist/integrations/providers/keychain.d.ts +0 -13
- package/dist/integrations/providers/keychain.d.ts.map +1 -1
- package/dist/integrations/providers/keychain.js +0 -76
- package/dist/integrations/providers/keychain.js.map +1 -1
- package/dist/integrations/providers/oauth.d.ts +46 -17
- package/dist/integrations/providers/oauth.d.ts.map +1 -1
- package/dist/integrations/providers/oauth.js +175 -45
- package/dist/integrations/providers/oauth.js.map +1 -1
- package/dist/integrations/providers/register.d.ts.map +1 -1
- package/dist/integrations/providers/register.js +9 -1
- package/dist/integrations/providers/register.js.map +1 -1
- package/dist/integrations/providers/registry.d.ts +8 -1
- package/dist/integrations/providers/registry.d.ts.map +1 -1
- package/dist/integrations/providers/registry.js +29 -0
- package/dist/integrations/providers/registry.js.map +1 -1
- package/dist/integrations/providers/subscription-login.d.ts +2 -0
- package/dist/integrations/providers/subscription-login.d.ts.map +1 -1
- package/dist/integrations/providers/subscription-login.js +117 -14
- package/dist/integrations/providers/subscription-login.js.map +1 -1
- package/dist/integrations/sessions/store.d.ts +111 -1
- package/dist/integrations/sessions/store.d.ts.map +1 -1
- package/dist/integrations/sessions/store.js +400 -7
- package/dist/integrations/sessions/store.js.map +1 -1
- package/dist/integrations/sessions/transcript-export.d.ts +25 -0
- package/dist/integrations/sessions/transcript-export.d.ts.map +1 -0
- package/dist/integrations/sessions/transcript-export.js +441 -0
- package/dist/integrations/sessions/transcript-export.js.map +1 -0
- package/dist/integrations/sessions/turn-evidence.d.ts +138 -0
- package/dist/integrations/sessions/turn-evidence.d.ts.map +1 -0
- package/dist/integrations/sessions/turn-evidence.js +506 -0
- package/dist/integrations/sessions/turn-evidence.js.map +1 -0
- package/dist/integrations/subagents/runtime.d.ts +7 -12
- package/dist/integrations/subagents/runtime.d.ts.map +1 -1
- package/dist/integrations/subagents/runtime.js +19 -10
- package/dist/integrations/subagents/runtime.js.map +1 -1
- package/dist/integrations/trust/store.d.ts.map +1 -1
- package/dist/integrations/trust/store.js +27 -13
- package/dist/integrations/trust/store.js.map +1 -1
- package/dist/permissions/canonical-project.d.ts +9 -0
- package/dist/permissions/canonical-project.d.ts.map +1 -0
- package/dist/permissions/canonical-project.js +13 -0
- package/dist/permissions/canonical-project.js.map +1 -0
- package/dist/permissions/checks.d.ts +65 -0
- package/dist/permissions/checks.d.ts.map +1 -0
- package/dist/permissions/checks.js +122 -0
- package/dist/permissions/checks.js.map +1 -0
- package/dist/permissions/headless-trust.d.ts +9 -5
- package/dist/permissions/headless-trust.d.ts.map +1 -1
- package/dist/permissions/headless-trust.js +18 -4
- package/dist/permissions/headless-trust.js.map +1 -1
- package/dist/permissions/rules.d.ts +16 -7
- package/dist/permissions/rules.d.ts.map +1 -1
- package/dist/permissions/rules.js +78 -13
- package/dist/permissions/rules.js.map +1 -1
- package/dist/tui/App.d.ts +5 -2
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +1621 -196
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Composer.d.ts +14 -3
- package/dist/tui/Composer.d.ts.map +1 -1
- package/dist/tui/Composer.js +53 -15
- package/dist/tui/Composer.js.map +1 -1
- package/dist/tui/EditPromptPicker.d.ts +8 -0
- package/dist/tui/EditPromptPicker.d.ts.map +1 -0
- package/dist/tui/EditPromptPicker.js +18 -0
- package/dist/tui/EditPromptPicker.js.map +1 -0
- package/dist/tui/LiveActivity.d.ts.map +1 -1
- package/dist/tui/LiveActivity.js +2 -1
- package/dist/tui/LiveActivity.js.map +1 -1
- package/dist/tui/Markdown.d.ts.map +1 -1
- package/dist/tui/Markdown.js +2 -1
- package/dist/tui/Markdown.js.map +1 -1
- package/dist/tui/PermissionOverlay.d.ts.map +1 -1
- package/dist/tui/PermissionOverlay.js +7 -1
- package/dist/tui/PermissionOverlay.js.map +1 -1
- package/dist/tui/Picker.d.ts +8 -6
- package/dist/tui/Picker.d.ts.map +1 -1
- package/dist/tui/Picker.js +145 -18
- package/dist/tui/Picker.js.map +1 -1
- package/dist/tui/ResumePicker.d.ts.map +1 -1
- package/dist/tui/ResumePicker.js +1 -1
- package/dist/tui/ResumePicker.js.map +1 -1
- package/dist/tui/Transcript.d.ts +4 -2
- package/dist/tui/Transcript.d.ts.map +1 -1
- package/dist/tui/Transcript.js +31 -5
- package/dist/tui/Transcript.js.map +1 -1
- package/dist/tui/agent.d.ts +123 -19
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +757 -144
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/compact-transcript.d.ts +24 -0
- package/dist/tui/compact-transcript.d.ts.map +1 -0
- package/dist/tui/compact-transcript.js +46 -0
- package/dist/tui/compact-transcript.js.map +1 -0
- package/dist/tui/conversation-history.d.ts +33 -0
- package/dist/tui/conversation-history.d.ts.map +1 -0
- package/dist/tui/conversation-history.js +42 -0
- package/dist/tui/conversation-history.js.map +1 -0
- package/dist/tui/edit-prompts.d.ts +23 -0
- package/dist/tui/edit-prompts.d.ts.map +1 -0
- package/dist/tui/edit-prompts.js +35 -0
- package/dist/tui/edit-prompts.js.map +1 -0
- package/dist/tui/live-window.d.ts +3 -1
- package/dist/tui/live-window.d.ts.map +1 -1
- package/dist/tui/live-window.js +20 -8
- package/dist/tui/live-window.js.map +1 -1
- package/dist/tui/login-prompt.d.ts +5 -0
- package/dist/tui/login-prompt.d.ts.map +1 -1
- package/dist/tui/login-prompt.js +14 -0
- package/dist/tui/login-prompt.js.map +1 -1
- package/dist/tui/slashCommands.d.ts +178 -9
- package/dist/tui/slashCommands.d.ts.map +1 -1
- package/dist/tui/slashCommands.js +340 -16
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/terminal-display.d.ts +12 -0
- package/dist/tui/terminal-display.d.ts.map +1 -0
- package/dist/tui/terminal-display.js +65 -0
- package/dist/tui/terminal-display.js.map +1 -0
- package/dist/tui/types.d.ts +14 -2
- package/dist/tui/types.d.ts.map +1 -1
- package/dist/tui/workspace-diff.d.ts +40 -0
- package/dist/tui/workspace-diff.d.ts.map +1 -0
- package/dist/tui/workspace-diff.js +101 -0
- package/dist/tui/workspace-diff.js.map +1 -0
- package/package.json +8 -8
package/dist/commands/login.js
CHANGED
|
@@ -33,27 +33,30 @@
|
|
|
33
33
|
*/
|
|
34
34
|
import { createInterface } from 'node:readline';
|
|
35
35
|
import { EXIT_FAIL, EXIT_OK, EXIT_USAGE } from '../exit-codes.js';
|
|
36
|
-
import { beginSubscriptionLogin,
|
|
37
|
-
import { describeLoginOutcome, describeLoginStart, describeLogout } from '../tui/login-prompt.js';
|
|
36
|
+
import { beginCodexDeviceLogin, beginSubscriptionLogin, clearAllStoredCredentials, credentialsPath, readStoredCodexCredential, readStoredSubscriptionCredential, } from '../integrations/providers/index.js';
|
|
37
|
+
import { describeCodexDeviceLoginStart, describeLoginOutcome, describeLoginStart, describeLogout, } from '../tui/login-prompt.js';
|
|
38
38
|
import { openInBrowser } from '../tui/open-browser.js';
|
|
39
|
-
const LOGIN_HELP =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
--
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
address
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
39
|
+
const LOGIN_HELP = [
|
|
40
|
+
'Usage: namzu login <claude|codex> [options]',
|
|
41
|
+
'',
|
|
42
|
+
'Sign in with a provider subscription and store the credential on this machine.',
|
|
43
|
+
'',
|
|
44
|
+
'Options:',
|
|
45
|
+
' --no-browser Do not try to launch a browser; just print the address.',
|
|
46
|
+
' --timeout <seconds> Give up waiting after this long (default: 300).',
|
|
47
|
+
' -h, --help Show this help.',
|
|
48
|
+
'',
|
|
49
|
+
'Claude sign-in opens a browser callback; on a remote machine, paste the final',
|
|
50
|
+
'callback address into this terminal. Codex sign-in prints a device code and',
|
|
51
|
+
'polls while you approve it in the browser.',
|
|
52
|
+
'',
|
|
53
|
+
'The credential is written to ~/.namzu/credentials.json, readable only by your',
|
|
54
|
+
"account. Run 'namzu logout' to remove it.",
|
|
55
|
+
].join('\n');
|
|
54
56
|
const DEFAULT_TIMEOUT_SECONDS = 300;
|
|
55
57
|
export function parseLoginFlags(argv) {
|
|
56
58
|
let noBrowser = false;
|
|
59
|
+
let provider;
|
|
57
60
|
let timeoutMs = DEFAULT_TIMEOUT_SECONDS * 1_000;
|
|
58
61
|
const unknown = [];
|
|
59
62
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -76,10 +79,24 @@ export function parseLoginFlags(argv) {
|
|
|
76
79
|
timeoutMs = seconds * 1_000;
|
|
77
80
|
continue;
|
|
78
81
|
}
|
|
82
|
+
if (arg === 'claude' || arg === 'anthropic') {
|
|
83
|
+
if (provider)
|
|
84
|
+
unknown.push(arg);
|
|
85
|
+
else
|
|
86
|
+
provider = 'anthropic';
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (arg === 'codex' || arg === 'chatgpt') {
|
|
90
|
+
if (provider)
|
|
91
|
+
unknown.push(arg);
|
|
92
|
+
else
|
|
93
|
+
provider = 'codex';
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
79
96
|
if (arg !== undefined)
|
|
80
97
|
unknown.push(arg);
|
|
81
98
|
}
|
|
82
|
-
return { noBrowser, timeoutMs, unknown };
|
|
99
|
+
return { provider, noBrowser, timeoutMs, unknown };
|
|
83
100
|
}
|
|
84
101
|
/**
|
|
85
102
|
* Resolve with the first NON-BLANK line standard input offers, or never.
|
|
@@ -129,6 +146,44 @@ export const loginCommand = {
|
|
|
129
146
|
});
|
|
130
147
|
return EXIT_USAGE;
|
|
131
148
|
}
|
|
149
|
+
if (!flags.provider) {
|
|
150
|
+
ctx.formatter.print({
|
|
151
|
+
text: `Choose which subscription Namzu should own:\n namzu login claude\n namzu login codex\n\nAPI keys remain optional alternatives.\n\n${LOGIN_HELP}`,
|
|
152
|
+
});
|
|
153
|
+
return EXIT_USAGE;
|
|
154
|
+
}
|
|
155
|
+
if (flags.provider === 'codex') {
|
|
156
|
+
let login;
|
|
157
|
+
try {
|
|
158
|
+
login = await beginCodexDeviceLogin();
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
ctx.formatter.print({
|
|
162
|
+
text: `Could not start Codex sign-in: ${error instanceof Error ? error.message : String(error)}`,
|
|
163
|
+
});
|
|
164
|
+
return EXIT_FAIL;
|
|
165
|
+
}
|
|
166
|
+
ctx.formatter.print({
|
|
167
|
+
text: describeCodexDeviceLoginStart({
|
|
168
|
+
url: login.url,
|
|
169
|
+
userCode: login.userCode,
|
|
170
|
+
browserOpened: flags.noBrowser ? false : openInBrowser(login.url),
|
|
171
|
+
}),
|
|
172
|
+
});
|
|
173
|
+
const timeout = new Promise((resolve) => setTimeout(() => resolve({
|
|
174
|
+
ok: false,
|
|
175
|
+
reason: 'Timed out waiting for Codex sign-in. Nothing was stored.',
|
|
176
|
+
}), flags.timeoutMs).unref());
|
|
177
|
+
const outcome = await Promise.race([login.waitForCompletion(), timeout]);
|
|
178
|
+
login.cancel();
|
|
179
|
+
ctx.formatter.print({
|
|
180
|
+
text: describeLoginOutcome(outcome, {
|
|
181
|
+
retry: 'namzu login codex',
|
|
182
|
+
remove: 'namzu logout',
|
|
183
|
+
}),
|
|
184
|
+
});
|
|
185
|
+
return outcome.ok ? EXIT_OK : EXIT_FAIL;
|
|
186
|
+
}
|
|
132
187
|
let login;
|
|
133
188
|
try {
|
|
134
189
|
login = await beginSubscriptionLogin();
|
|
@@ -158,7 +213,10 @@ export const loginCommand = {
|
|
|
158
213
|
stop.abort();
|
|
159
214
|
login.cancel();
|
|
160
215
|
ctx.formatter.print({
|
|
161
|
-
text: describeLoginOutcome(outcome, {
|
|
216
|
+
text: describeLoginOutcome(outcome, {
|
|
217
|
+
retry: 'namzu login claude',
|
|
218
|
+
remove: 'namzu logout',
|
|
219
|
+
}),
|
|
162
220
|
});
|
|
163
221
|
return outcome.ok ? EXIT_OK : EXIT_FAIL;
|
|
164
222
|
},
|
|
@@ -168,9 +226,9 @@ export const logoutCommand = {
|
|
|
168
226
|
description: 'Remove the subscription credential namzu stored on this machine.',
|
|
169
227
|
handler: async ({ ctx }) => {
|
|
170
228
|
const path = credentialsPath();
|
|
171
|
-
const had = readStoredSubscriptionCredential() !== null;
|
|
229
|
+
const had = readStoredSubscriptionCredential() !== null || readStoredCodexCredential() !== null;
|
|
172
230
|
try {
|
|
173
|
-
|
|
231
|
+
clearAllStoredCredentials();
|
|
174
232
|
}
|
|
175
233
|
catch (err) {
|
|
176
234
|
ctx.formatter.print({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Message } from '@namzu/sdk';
|
|
2
|
+
export type PriorMessagesResult = {
|
|
3
|
+
readonly ok: true;
|
|
4
|
+
readonly messages: readonly Message[];
|
|
5
|
+
} | {
|
|
6
|
+
readonly ok: false;
|
|
7
|
+
readonly error: string;
|
|
8
|
+
};
|
|
9
|
+
/** Parse the stateless stdin contract without dropping or inventing message fields. */
|
|
10
|
+
export declare function parsePriorMessages(raw: string): PriorMessagesResult;
|
|
11
|
+
//# sourceMappingURL=prior-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prior-messages.d.ts","sourceRoot":"","sources":["../../src/commands/prior-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,OAAO,EAIZ,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,mBAAmB,GAC5B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAC5D;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAuTjD,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAoBnE"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { isCompactionMessage, isProjectInstructionMessageSource, isWorkingMemoryMessage, } from '@namzu/sdk';
|
|
2
|
+
const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3
|
+
const isFiniteNumber = (value) => typeof value === 'number' && Number.isFinite(value);
|
|
4
|
+
function optional(value, key, path, accepts, expected) {
|
|
5
|
+
const candidate = value[key];
|
|
6
|
+
return candidate === undefined || accepts(candidate) ? null : `${path}.${key} must be ${expected}`;
|
|
7
|
+
}
|
|
8
|
+
function stringField(value, key, path) {
|
|
9
|
+
return typeof value[key] === 'string' ? null : `${path}.${key} must be a string`;
|
|
10
|
+
}
|
|
11
|
+
function validateCommon(value, path) {
|
|
12
|
+
return (optional(value, 'timestamp', path, isFiniteNumber, 'a finite number') ??
|
|
13
|
+
optional(value, 'cacheHint', path, (candidate) => candidate === 'cache' || candidate === 'ephemeral' || candidate === 'none', '"cache", "ephemeral", or "none"') ??
|
|
14
|
+
optional(value, 'retain', path, (candidate) => typeof candidate === 'boolean', 'a boolean'));
|
|
15
|
+
}
|
|
16
|
+
function validateAttachment(value, path) {
|
|
17
|
+
if (!isObject(value))
|
|
18
|
+
return `${path} must be an attachment object`;
|
|
19
|
+
const type = value.type;
|
|
20
|
+
if (type === 'stored') {
|
|
21
|
+
return `${path} is a stored attachment reference, but stateless run-stream has no attachment store; send inline data instead`;
|
|
22
|
+
}
|
|
23
|
+
if (type === 'document') {
|
|
24
|
+
return (stringField(value, 'data', path) ??
|
|
25
|
+
stringField(value, 'mediaType', path) ??
|
|
26
|
+
optional(value, 'name', path, (candidate) => typeof candidate === 'string', 'a string') ??
|
|
27
|
+
optional(value, 'citations', path, (candidate) => typeof candidate === 'boolean', 'a boolean'));
|
|
28
|
+
}
|
|
29
|
+
if (type !== undefined && type !== 'image') {
|
|
30
|
+
return `${path}.type must be "image", "document", "stored", or absent`;
|
|
31
|
+
}
|
|
32
|
+
return stringField(value, 'data', path) ?? stringField(value, 'mediaType', path);
|
|
33
|
+
}
|
|
34
|
+
function validateAttachments(value, path) {
|
|
35
|
+
if (!Array.isArray(value))
|
|
36
|
+
return `${path} must be an array`;
|
|
37
|
+
for (let index = 0; index < value.length; index++) {
|
|
38
|
+
const error = validateAttachment(value[index], `${path}[${index}]`);
|
|
39
|
+
if (error)
|
|
40
|
+
return error;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
function validateUserSource(value, path) {
|
|
45
|
+
if (!isObject(value))
|
|
46
|
+
return `${path} must be a source object`;
|
|
47
|
+
if (value.type === 'project-instructions') {
|
|
48
|
+
return isProjectInstructionMessageSource(value)
|
|
49
|
+
? null
|
|
50
|
+
: `${path} must contain unique canonical project-relative AGENTS.md paths`;
|
|
51
|
+
}
|
|
52
|
+
if (value.type !== 'goal-round') {
|
|
53
|
+
return `${path}.type must be "goal-round" or "project-instructions"`;
|
|
54
|
+
}
|
|
55
|
+
return (stringField(value, 'goalId', path) ??
|
|
56
|
+
stringField(value, 'objective', path) ??
|
|
57
|
+
(isFiniteNumber(value.goalRevision) ? null : `${path}.goalRevision must be a finite number`) ??
|
|
58
|
+
(isFiniteNumber(value.round) ? null : `${path}.round must be a finite number`) ??
|
|
59
|
+
(isFiniteNumber(value.maxGoalRounds) ? null : `${path}.maxGoalRounds must be a finite number`));
|
|
60
|
+
}
|
|
61
|
+
function validateAssistantSource(value, path) {
|
|
62
|
+
if (!isObject(value))
|
|
63
|
+
return `${path} must be a source object`;
|
|
64
|
+
if (value.type !== 'model')
|
|
65
|
+
return `${path}.type must be "model"`;
|
|
66
|
+
return (stringField(value, 'providerId', path) ??
|
|
67
|
+
stringField(value, 'model', path) ??
|
|
68
|
+
(Number.isSafeInteger(value.chainIndex) && value.chainIndex >= 0
|
|
69
|
+
? null
|
|
70
|
+
: `${path}.chainIndex must be a non-negative safe integer`));
|
|
71
|
+
}
|
|
72
|
+
function validateToolCall(value, path) {
|
|
73
|
+
if (!isObject(value))
|
|
74
|
+
return `${path} must be a tool-call object`;
|
|
75
|
+
const fn = value.function;
|
|
76
|
+
if (!isObject(fn))
|
|
77
|
+
return `${path}.function must be an object`;
|
|
78
|
+
const metadata = value.metadata;
|
|
79
|
+
return (stringField(value, 'id', path) ??
|
|
80
|
+
(value.type === 'function' ? null : `${path}.type must be "function"`) ??
|
|
81
|
+
stringField(fn, 'name', `${path}.function`) ??
|
|
82
|
+
stringField(fn, 'arguments', `${path}.function`) ??
|
|
83
|
+
(metadata === undefined
|
|
84
|
+
? null
|
|
85
|
+
: !isObject(metadata)
|
|
86
|
+
? `${path}.metadata must be an object`
|
|
87
|
+
: (optional(metadata, 'inputTruncated', `${path}.metadata`, (candidate) => typeof candidate === 'boolean', 'a boolean') ??
|
|
88
|
+
optional(metadata, 'partialArguments', `${path}.metadata`, (candidate) => typeof candidate === 'string', 'a string'))));
|
|
89
|
+
}
|
|
90
|
+
function validateReasoning(value, path) {
|
|
91
|
+
if (!isObject(value))
|
|
92
|
+
return `${path} must be a reasoning object`;
|
|
93
|
+
return ((value.type === 'thinking' || value.type === 'redacted_thinking'
|
|
94
|
+
? null
|
|
95
|
+
: `${path}.type must be "thinking" or "redacted_thinking"`) ??
|
|
96
|
+
optional(value, 'text', path, (candidate) => typeof candidate === 'string', 'a string') ??
|
|
97
|
+
optional(value, 'signature', path, (candidate) => typeof candidate === 'string', 'a string') ??
|
|
98
|
+
optional(value, 'encrypted', path, (candidate) => typeof candidate === 'string', 'a string'));
|
|
99
|
+
}
|
|
100
|
+
function validateCitation(value, path) {
|
|
101
|
+
if (!isObject(value))
|
|
102
|
+
return `${path} must be a citation object`;
|
|
103
|
+
const location = value.location;
|
|
104
|
+
if (!isObject(location))
|
|
105
|
+
return `${path}.location must be an object`;
|
|
106
|
+
return (stringField(value, 'citedText', path) ??
|
|
107
|
+
(isFiniteNumber(value.documentIndex)
|
|
108
|
+
? null
|
|
109
|
+
: `${path}.documentIndex must be a finite number`) ??
|
|
110
|
+
optional(value, 'documentTitle', path, (candidate) => typeof candidate === 'string', 'a string') ??
|
|
111
|
+
(location.kind === 'page' || location.kind === 'char' || location.kind === 'block'
|
|
112
|
+
? null
|
|
113
|
+
: `${path}.location.kind must be "page", "char", or "block"`) ??
|
|
114
|
+
(isFiniteNumber(location.start) ? null : `${path}.location.start must be a finite number`) ??
|
|
115
|
+
(isFiniteNumber(location.end) ? null : `${path}.location.end must be a finite number`));
|
|
116
|
+
}
|
|
117
|
+
function validateToolResultBlock(value, path) {
|
|
118
|
+
if (!isObject(value))
|
|
119
|
+
return `${path} must be a tool-result block object`;
|
|
120
|
+
if (value.type === 'text')
|
|
121
|
+
return stringField(value, 'text', path);
|
|
122
|
+
if (value.type === 'image') {
|
|
123
|
+
return stringField(value, 'data', path) ?? stringField(value, 'mediaType', path);
|
|
124
|
+
}
|
|
125
|
+
if (value.type === 'document')
|
|
126
|
+
return validateAttachment(value, path);
|
|
127
|
+
return `${path}.type must be "text", "image", or "document"`;
|
|
128
|
+
}
|
|
129
|
+
function validateMessage(value, index) {
|
|
130
|
+
const path = `messages[${index}]`;
|
|
131
|
+
if (!isObject(value))
|
|
132
|
+
return `${path} must be an object`;
|
|
133
|
+
const common = validateCommon(value, path);
|
|
134
|
+
if (common)
|
|
135
|
+
return common;
|
|
136
|
+
if (value.role === 'system') {
|
|
137
|
+
if (typeof value.content !== 'string')
|
|
138
|
+
return `${path}.content must be a string`;
|
|
139
|
+
return isCompactionMessage(value.content) || isWorkingMemoryMessage(value.content)
|
|
140
|
+
? null
|
|
141
|
+
: `${path} is an arbitrary system prompt; stateless history accepts only compacted or working-memory conversation state`;
|
|
142
|
+
}
|
|
143
|
+
if (value.role === 'user') {
|
|
144
|
+
if (typeof value.content !== 'string')
|
|
145
|
+
return `${path}.content must be a string`;
|
|
146
|
+
return ((value.attachments === undefined
|
|
147
|
+
? null
|
|
148
|
+
: validateAttachments(value.attachments, `${path}.attachments`)) ??
|
|
149
|
+
(value.source === undefined ? null : validateUserSource(value.source, `${path}.source`)));
|
|
150
|
+
}
|
|
151
|
+
if (value.role === 'assistant') {
|
|
152
|
+
if (typeof value.content !== 'string' && value.content !== null) {
|
|
153
|
+
return `${path}.content must be a string or null`;
|
|
154
|
+
}
|
|
155
|
+
if (value.toolCalls !== undefined) {
|
|
156
|
+
if (!Array.isArray(value.toolCalls))
|
|
157
|
+
return `${path}.toolCalls must be an array`;
|
|
158
|
+
for (let callIndex = 0; callIndex < value.toolCalls.length; callIndex++) {
|
|
159
|
+
const error = validateToolCall(value.toolCalls[callIndex], `${path}.toolCalls[${callIndex}]`);
|
|
160
|
+
if (error)
|
|
161
|
+
return error;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (value.reasoning !== undefined) {
|
|
165
|
+
if (!Array.isArray(value.reasoning))
|
|
166
|
+
return `${path}.reasoning must be an array`;
|
|
167
|
+
for (let reasoningIndex = 0; reasoningIndex < value.reasoning.length; reasoningIndex++) {
|
|
168
|
+
const error = validateReasoning(value.reasoning[reasoningIndex], `${path}.reasoning[${reasoningIndex}]`);
|
|
169
|
+
if (error)
|
|
170
|
+
return error;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (value.citations !== undefined) {
|
|
174
|
+
if (!Array.isArray(value.citations))
|
|
175
|
+
return `${path}.citations must be an array`;
|
|
176
|
+
for (let citationIndex = 0; citationIndex < value.citations.length; citationIndex++) {
|
|
177
|
+
const error = validateCitation(value.citations[citationIndex], `${path}.citations[${citationIndex}]`);
|
|
178
|
+
if (error)
|
|
179
|
+
return error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return value.source === undefined
|
|
183
|
+
? null
|
|
184
|
+
: validateAssistantSource(value.source, `${path}.source`);
|
|
185
|
+
}
|
|
186
|
+
if (value.role === 'tool') {
|
|
187
|
+
if (typeof value.content !== 'string') {
|
|
188
|
+
if (!Array.isArray(value.content)) {
|
|
189
|
+
return `${path}.content must be a string or tool-result block array`;
|
|
190
|
+
}
|
|
191
|
+
for (let blockIndex = 0; blockIndex < value.content.length; blockIndex++) {
|
|
192
|
+
const error = validateToolResultBlock(value.content[blockIndex], `${path}.content[${blockIndex}]`);
|
|
193
|
+
if (error)
|
|
194
|
+
return error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return (stringField(value, 'toolCallId', path) ??
|
|
198
|
+
optional(value, 'isError', path, (candidate) => typeof candidate === 'boolean', 'a boolean'));
|
|
199
|
+
}
|
|
200
|
+
return `${path}.role must be "system", "user", "assistant", or "tool"`;
|
|
201
|
+
}
|
|
202
|
+
function validateSequence(messages) {
|
|
203
|
+
const seenCallIds = new Set();
|
|
204
|
+
let pending = null;
|
|
205
|
+
let sawConversation = false;
|
|
206
|
+
for (let index = 0; index < messages.length; index++) {
|
|
207
|
+
const message = messages[index];
|
|
208
|
+
if (!message)
|
|
209
|
+
continue;
|
|
210
|
+
if (pending) {
|
|
211
|
+
if (message.role !== 'tool') {
|
|
212
|
+
return `messages[${index}] cannot appear before every tool call from messages[${pending.openedAt}] has a result`;
|
|
213
|
+
}
|
|
214
|
+
if (!pending.ids.has(message.toolCallId)) {
|
|
215
|
+
return `messages[${index}].toolCallId does not match an unanswered call from messages[${pending.openedAt}]`;
|
|
216
|
+
}
|
|
217
|
+
pending.ids.delete(message.toolCallId);
|
|
218
|
+
if (pending.ids.size === 0)
|
|
219
|
+
pending = null;
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
if (message.role === 'system') {
|
|
223
|
+
if (sawConversation)
|
|
224
|
+
return `messages[${index}] is a system message after conversation began`;
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (!sawConversation) {
|
|
228
|
+
sawConversation = true;
|
|
229
|
+
if (message.role !== 'user') {
|
|
230
|
+
return `messages[${index}] must be a user message at the start of conversation history`;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (message.role === 'tool')
|
|
234
|
+
return `messages[${index}] is a tool result with no pending call`;
|
|
235
|
+
if (message.role !== 'assistant' || !message.toolCalls || message.toolCalls.length === 0) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const ids = new Set();
|
|
239
|
+
for (let callIndex = 0; callIndex < message.toolCalls.length; callIndex++) {
|
|
240
|
+
const id = message.toolCalls[callIndex]?.id;
|
|
241
|
+
if (!id)
|
|
242
|
+
continue;
|
|
243
|
+
if (seenCallIds.has(id) || ids.has(id)) {
|
|
244
|
+
return `messages[${index}].toolCalls[${callIndex}].id duplicates tool call id "${id}"`;
|
|
245
|
+
}
|
|
246
|
+
ids.add(id);
|
|
247
|
+
seenCallIds.add(id);
|
|
248
|
+
}
|
|
249
|
+
pending = { openedAt: index, ids };
|
|
250
|
+
}
|
|
251
|
+
if (pending) {
|
|
252
|
+
return `messages[${pending.openedAt}] has tool calls without immediate results for: ${[...pending.ids].join(', ')}`;
|
|
253
|
+
}
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
/** Parse the stateless stdin contract without dropping or inventing message fields. */
|
|
257
|
+
export function parsePriorMessages(raw) {
|
|
258
|
+
const trimmed = raw.trim();
|
|
259
|
+
if (!trimmed)
|
|
260
|
+
return { ok: true, messages: [] };
|
|
261
|
+
let parsed;
|
|
262
|
+
try {
|
|
263
|
+
parsed = JSON.parse(trimmed);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return { ok: false, error: 'stdin history is not valid JSON' };
|
|
267
|
+
}
|
|
268
|
+
if (!Array.isArray(parsed)) {
|
|
269
|
+
return { ok: false, error: 'stdin history must be a JSON Message[] array' };
|
|
270
|
+
}
|
|
271
|
+
for (let index = 0; index < parsed.length; index++) {
|
|
272
|
+
const error = validateMessage(parsed[index], index);
|
|
273
|
+
if (error)
|
|
274
|
+
return { ok: false, error };
|
|
275
|
+
}
|
|
276
|
+
const messages = parsed;
|
|
277
|
+
const sequenceError = validateSequence(messages);
|
|
278
|
+
return sequenceError ? { ok: false, error: sequenceError } : { ok: true, messages };
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=prior-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prior-messages.js","sourceRoot":"","sources":["../../src/commands/prior-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EACN,KAAK,WAAW,EAIhB,MAAM,mCAAmC,CAAA;AAE1C,MAAM,WAAW,aAAa;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,MAAM,aAAa,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAC/F;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAClC,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EACN,KAAK,WAAW,EAIhB,MAAM,mCAAmC,CAAA;AAE1C,MAAM,WAAW,aAAa;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,MAAM,aAAa,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,GAC/F;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAClC,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,aAAa,CAAC,CA4CxB"}
|
package/dist/commands/resume.js
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* If that is what you want, run the command with no flag. The absence of a
|
|
32
32
|
* thing must not be spellable as a silent widening of it.
|
|
33
33
|
*/
|
|
34
|
-
import { listRecent,
|
|
34
|
+
import { listRecent, loadResumableConversation, } from '../integrations/sessions/store.js';
|
|
35
35
|
/**
|
|
36
36
|
* Resolve what a `--continue` / `--resume` asked for.
|
|
37
37
|
*
|
|
@@ -54,8 +54,17 @@ export async function resolveResume(sessions, request, cwd) {
|
|
|
54
54
|
message: `no conversation store in ${cwd} — it could not be opened, so there is nothing to resume`,
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
|
-
const recent = await listRecent(sessions, 50);
|
|
58
57
|
if (request.continueLast) {
|
|
58
|
+
let recent;
|
|
59
|
+
try {
|
|
60
|
+
recent = await listRecent(sessions, 50);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
return {
|
|
64
|
+
kind: 'error',
|
|
65
|
+
message: `conversations in ${cwd} cannot be resumed: ${err instanceof Error ? err.message : String(err)}`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
59
68
|
const latest = recent[0];
|
|
60
69
|
if (!latest) {
|
|
61
70
|
// Its own sentence, because the cause is different from a bad id and
|
|
@@ -66,25 +75,18 @@ export async function resolveResume(sessions, request, cwd) {
|
|
|
66
75
|
message: `no previous conversation in ${cwd} — run without --continue to start one, or pass --cwd if you meant a different directory`,
|
|
67
76
|
};
|
|
68
77
|
}
|
|
69
|
-
return await load(sessions, latest);
|
|
78
|
+
return await load(sessions, latest.id, cwd);
|
|
70
79
|
}
|
|
71
80
|
const wanted = request.sessionId;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
kind: 'error',
|
|
77
|
-
message: known === 0
|
|
78
|
-
? `no conversation "${wanted}" in ${cwd}, and no others either — pass --cwd if you meant a different directory`
|
|
79
|
-
: `no conversation "${wanted}" in ${cwd}. ${known} other${known === 1 ? '' : 's'} here; \`namzu history\` lists them`,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
return await load(sessions, match);
|
|
81
|
+
// An exact id is not a request for a row in the recent picker. The previous
|
|
82
|
+
// implementation searched a 50-row list, so the 51st valid conversation was
|
|
83
|
+
// reported missing even though its durable record was intact.
|
|
84
|
+
return await load(sessions, wanted, cwd);
|
|
83
85
|
}
|
|
84
|
-
async function load(sessions,
|
|
86
|
+
async function load(sessions, sessionId, cwd) {
|
|
85
87
|
let messages;
|
|
86
88
|
try {
|
|
87
|
-
messages = await
|
|
89
|
+
messages = await loadResumableConversation(sessions, sessionId);
|
|
88
90
|
}
|
|
89
91
|
catch (err) {
|
|
90
92
|
// Reading the transcript failed after the conversation was found. NOT
|
|
@@ -93,15 +95,15 @@ async function load(sessions, conversation) {
|
|
|
93
95
|
// session that had been resumed.
|
|
94
96
|
return {
|
|
95
97
|
kind: 'error',
|
|
96
|
-
message: `conversation "${
|
|
98
|
+
message: `conversation "${sessionId}" could not be resumed in ${cwd}: ${err instanceof Error ? err.message : String(err)}`,
|
|
97
99
|
};
|
|
98
100
|
}
|
|
99
101
|
if (messages.length === 0) {
|
|
100
102
|
return {
|
|
101
103
|
kind: 'error',
|
|
102
|
-
message: `conversation "${
|
|
104
|
+
message: `conversation "${sessionId}" has no messages to resume — its transcript is empty`,
|
|
103
105
|
};
|
|
104
106
|
}
|
|
105
|
-
return { kind: 'resumed', sessionId
|
|
107
|
+
return { kind: 'resumed', sessionId, messages };
|
|
106
108
|
}
|
|
107
109
|
//# sourceMappingURL=resume.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,EAGN,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,EAGN,UAAU,EACV,yBAAyB,GACzB,MAAM,mCAAmC,CAAA;AAc1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,QAA4B,EAC5B,OAAsB,EACtB,GAAW;IAEX,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IACzE,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/C,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EACN,wIAAwI;SACzI,CAAA;IACF,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,4BAA4B,GAAG,0DAA0D;SAClG,CAAA;IACF,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,MAA4B,CAAA;QAChC,IAAI,CAAC;YACJ,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO;gBACN,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,oBAAoB,GAAG,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;aACzG,CAAA;QACF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,qEAAqE;YACrE,qEAAqE;YACrE,6DAA6D;YAC7D,OAAO;gBACN,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,+BAA+B,GAAG,0FAA0F;aACrI,CAAA;QACF,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,SAAmB,CAAA;IAC1C,4EAA4E;IAC5E,4EAA4E;IAC5E,8DAA8D;IAC9D,OAAO,MAAM,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;AACzC,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,QAAqB,EAAE,SAAiB,EAAE,GAAW;IACxE,IAAI,QAA4B,CAAA;IAChC,IAAI,CAAC;QACJ,QAAQ,GAAG,MAAM,yBAAyB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,sEAAsE;QACtE,gEAAgE;QAChE,kEAAkE;QAClE,iCAAiC;QACjC,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,iBAAiB,SAAS,6BAA6B,GAAG,KAClE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAChD,EAAE;SACF,CAAA;IACF,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,iBAAiB,SAAS,uDAAuD;SAC1F,CAAA;IACF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;AAChD,CAAC"}
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
*
|
|
10
10
|
* History: with `--session <key>` the turn is bound to a persisted
|
|
11
11
|
* conversation in the cwd's `.namzu` store (keyed by the embedder's own
|
|
12
|
-
* session id), so prior turns are loaded as context and the
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* session id), so prior turns are loaded as context and the kernel's exact
|
|
13
|
+
* settled conversation projection is published — including opaque reasoning
|
|
14
|
+
* and complete tool turns, excluding its fresh per-run system floor. That's
|
|
15
|
+
* what lets a reopened session show and replay its past messages (`namzu
|
|
16
|
+
* history --session <key>`). Without `--session`,
|
|
15
17
|
* prior history may be supplied on stdin as a JSON `Message[]` and nothing is
|
|
16
18
|
* persisted (stateless one-shot).
|
|
17
19
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../src/commands/run-stream.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../src/commands/run-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AA8BH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAoB5C,eAAO,MAAM,gBAAgB,EAAE,UAiV9B,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,UAkD5B,CAAA;AAMD,eAAO,MAAM,iBAAiB,EAAE,UAqC/B,CAAA;AAOD,eAAO,MAAM,oBAAoB,EAAE,UA8ClC,CAAA"}
|