@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/tui/types.d.ts
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* the React/Ink layer.
|
|
5
5
|
*/
|
|
6
6
|
import type { AuthorizationRule } from '@namzu/sdk';
|
|
7
|
-
import type {
|
|
7
|
+
import type { ConfigDebugSnapshot } from '../config/debug.js';
|
|
8
|
+
import type { PluginConfig, SandboxConfig, TuiConfig } from '../config/schema.js';
|
|
8
9
|
import type { McpServersConfig } from '../integrations/mcp/servers.js';
|
|
9
10
|
import type { ResolvedLogging } from '../logging.js';
|
|
10
11
|
export type MessageRole = 'user' | 'assistant' | 'system' | 'tool';
|
|
@@ -48,7 +49,14 @@ export interface TranscriptMessage {
|
|
|
48
49
|
export interface TuiContext {
|
|
49
50
|
readonly cwd: string;
|
|
50
51
|
readonly version: string;
|
|
51
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Values-free launch-time config provenance for `/debug-config`.
|
|
54
|
+
*
|
|
55
|
+
* Optional for embedded callers and the many hand-built App fixtures. The
|
|
56
|
+
* standalone CLI always supplies it; the command says when an embed did not.
|
|
57
|
+
*/
|
|
58
|
+
readonly configDebug?: ConfigDebugSnapshot;
|
|
59
|
+
/** Initial TUI mode is auto (--dangerously-skip-permissions / --yolo); /permissions may narrow it. */
|
|
52
60
|
readonly skipPermissions?: boolean;
|
|
53
61
|
/**
|
|
54
62
|
* The operator's `permissions` table, compiled to kernel rules.
|
|
@@ -67,12 +75,16 @@ export interface TuiContext {
|
|
|
67
75
|
* they declared has to be there whichever way they started namzu.
|
|
68
76
|
*/
|
|
69
77
|
readonly mcpServers?: McpServersConfig;
|
|
78
|
+
/** Executable plugins from the trusted, project-aware config. */
|
|
79
|
+
readonly plugins?: PluginConfig;
|
|
70
80
|
/**
|
|
71
81
|
* Isolation config, by the same reasoning as the two above: it belongs
|
|
72
82
|
* to the user, not to a command, so it has to reach the session
|
|
73
83
|
* whichever way namzu was started.
|
|
74
84
|
*/
|
|
75
85
|
readonly sandbox?: SandboxConfig;
|
|
86
|
+
/** Opted-in terminal notification settings from the resolved CLI config. */
|
|
87
|
+
readonly tui?: TuiConfig;
|
|
76
88
|
/**
|
|
77
89
|
* --verbose/--quiet/NAMZU_LOG_LEVEL and --log-format/NAMZU_LOG_FORMAT,
|
|
78
90
|
* resolved once in `cli.ts` before the TUI launches. Optional for the
|
package/dist/tui/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAA;AAElE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CACjC;AAED,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,mBAAmB,CAAA;IAC1C,sGAAsG;IACtG,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;IACtC,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAA;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAA;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAClC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface WorkspaceDiff {
|
|
2
|
+
/** `git diff --stat`, one line per file. Empty when nothing changed. */
|
|
3
|
+
readonly stat: string;
|
|
4
|
+
/** The patch body, possibly truncated — see `truncated`. */
|
|
5
|
+
readonly patch: string;
|
|
6
|
+
readonly truncated: boolean;
|
|
7
|
+
/** Paths git knows nothing about yet, which no diff would show. */
|
|
8
|
+
readonly untracked: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* What is uncommitted in this working tree.
|
|
12
|
+
*
|
|
13
|
+
* **Not "what this session changed", and the command says so.** The CLI cannot
|
|
14
|
+
* tell the agent's edits from the operator's: the tool events carry a
|
|
15
|
+
* human-readable summary rather than a path, and parsing a path back out of
|
|
16
|
+
* prose would be a guess dressed as attribution. Reporting the working tree and
|
|
17
|
+
* naming it accurately is the answer that is true.
|
|
18
|
+
*
|
|
19
|
+
* `null` means "I cannot tell" — not a repository, no git, a timeout — and a
|
|
20
|
+
* caller must say that rather than render an empty diff, which reads as
|
|
21
|
+
* "nothing changed" and is a different claim entirely. The same contract
|
|
22
|
+
* `fingerprintWorkspace` holds, for the same reason.
|
|
23
|
+
*
|
|
24
|
+
* Untracked files are listed separately because `git diff` does not show them
|
|
25
|
+
* at all: a session whose entire output is new files would otherwise report
|
|
26
|
+
* that it changed nothing.
|
|
27
|
+
*/
|
|
28
|
+
export declare function workspaceDiff(cwd: string): Promise<WorkspaceDiff | null>;
|
|
29
|
+
/**
|
|
30
|
+
* The diff as transcript lines: a short answer, with the patch underneath.
|
|
31
|
+
*
|
|
32
|
+
* Returned as `{ summary, detail }` rather than one blob so the caller can put
|
|
33
|
+
* the body in a collapsed block — the same treatment a tool's output gets, and
|
|
34
|
+
* for the same reason.
|
|
35
|
+
*/
|
|
36
|
+
export declare function renderWorkspaceDiff(diff: WorkspaceDiff | null): {
|
|
37
|
+
summary: string;
|
|
38
|
+
detail: readonly string[];
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=workspace-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-diff.d.ts","sourceRoot":"","sources":["../../src/tui/workspace-diff.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,aAAa;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA4B9E;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG;IAChE,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CACzB,CAoCA"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const run = promisify(execFile);
|
|
4
|
+
/** Long enough for a large repository, short enough not to hang a keystroke. */
|
|
5
|
+
const DIFF_TIMEOUT_MS = 10_000;
|
|
6
|
+
/**
|
|
7
|
+
* Bytes of patch body to show before saying how much was left out.
|
|
8
|
+
*
|
|
9
|
+
* A transcript is not a pager. A diff that scrolls the session away answers
|
|
10
|
+
* "what changed" by making the answer unreadable, and the operator's next move
|
|
11
|
+
* is `git diff` in another terminal anyway — so the cap is generous enough for
|
|
12
|
+
* an ordinary change and honest about the rest.
|
|
13
|
+
*/
|
|
14
|
+
const DIFF_MAX_BYTES = 24_000;
|
|
15
|
+
/**
|
|
16
|
+
* What is uncommitted in this working tree.
|
|
17
|
+
*
|
|
18
|
+
* **Not "what this session changed", and the command says so.** The CLI cannot
|
|
19
|
+
* tell the agent's edits from the operator's: the tool events carry a
|
|
20
|
+
* human-readable summary rather than a path, and parsing a path back out of
|
|
21
|
+
* prose would be a guess dressed as attribution. Reporting the working tree and
|
|
22
|
+
* naming it accurately is the answer that is true.
|
|
23
|
+
*
|
|
24
|
+
* `null` means "I cannot tell" — not a repository, no git, a timeout — and a
|
|
25
|
+
* caller must say that rather than render an empty diff, which reads as
|
|
26
|
+
* "nothing changed" and is a different claim entirely. The same contract
|
|
27
|
+
* `fingerprintWorkspace` holds, for the same reason.
|
|
28
|
+
*
|
|
29
|
+
* Untracked files are listed separately because `git diff` does not show them
|
|
30
|
+
* at all: a session whose entire output is new files would otherwise report
|
|
31
|
+
* that it changed nothing.
|
|
32
|
+
*/
|
|
33
|
+
export async function workspaceDiff(cwd) {
|
|
34
|
+
const git = async (args) => {
|
|
35
|
+
try {
|
|
36
|
+
const { stdout } = await run('git', [...args], {
|
|
37
|
+
cwd,
|
|
38
|
+
timeout: DIFF_TIMEOUT_MS,
|
|
39
|
+
maxBuffer: 1024 * 1024 * 8,
|
|
40
|
+
});
|
|
41
|
+
return stdout;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Not a repository, git absent, timeout, or a buffer overrun. All of
|
|
45
|
+
// them mean the same thing here: no basis for an answer.
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
// Tracked changes only — `--` guards a branch or file named like a flag.
|
|
50
|
+
const stat = await git(['diff', '--stat', 'HEAD', '--']);
|
|
51
|
+
if (stat === null)
|
|
52
|
+
return null;
|
|
53
|
+
const patchRaw = (await git(['diff', 'HEAD', '--'])) ?? '';
|
|
54
|
+
const truncated = Buffer.byteLength(patchRaw, 'utf8') > DIFF_MAX_BYTES;
|
|
55
|
+
const patch = truncated ? patchRaw.slice(0, DIFF_MAX_BYTES) : patchRaw;
|
|
56
|
+
const untrackedRaw = (await git(['ls-files', '--others', '--exclude-standard'])) ?? '';
|
|
57
|
+
const untracked = untrackedRaw.split('\n').filter((line) => line.length > 0);
|
|
58
|
+
return { stat: stat.trimEnd(), patch, truncated, untracked };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The diff as transcript lines: a short answer, with the patch underneath.
|
|
62
|
+
*
|
|
63
|
+
* Returned as `{ summary, detail }` rather than one blob so the caller can put
|
|
64
|
+
* the body in a collapsed block — the same treatment a tool's output gets, and
|
|
65
|
+
* for the same reason.
|
|
66
|
+
*/
|
|
67
|
+
export function renderWorkspaceDiff(diff) {
|
|
68
|
+
if (diff === null) {
|
|
69
|
+
return {
|
|
70
|
+
summary: 'Cannot read a diff here — this is not a git repository, or git is unavailable.',
|
|
71
|
+
detail: [],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const nothingTracked = diff.stat.length === 0;
|
|
75
|
+
if (nothingTracked && diff.untracked.length === 0) {
|
|
76
|
+
return { summary: 'Working tree clean — nothing uncommitted.', detail: [] };
|
|
77
|
+
}
|
|
78
|
+
const parts = [];
|
|
79
|
+
if (!nothingTracked)
|
|
80
|
+
parts.push(diff.stat);
|
|
81
|
+
if (diff.untracked.length > 0) {
|
|
82
|
+
parts.push('');
|
|
83
|
+
parts.push(`Untracked (${diff.untracked.length}), which no diff shows:`);
|
|
84
|
+
for (const path of diff.untracked)
|
|
85
|
+
parts.push(` ${path}`);
|
|
86
|
+
}
|
|
87
|
+
const detail = [];
|
|
88
|
+
if (diff.patch.length > 0) {
|
|
89
|
+
detail.push(...diff.patch.split('\n'));
|
|
90
|
+
if (diff.truncated) {
|
|
91
|
+
detail.push('');
|
|
92
|
+
detail.push('… truncated. Run `git diff` for the rest.');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Stated on every non-empty answer, because the alternative is an operator
|
|
96
|
+
// reading their own uncommitted work as the agent's.
|
|
97
|
+
parts.push('');
|
|
98
|
+
parts.push('This is the whole working tree, not only what the agent changed.');
|
|
99
|
+
return { summary: parts.join('\n'), detail };
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=workspace-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-diff.js","sourceRoot":"","sources":["../../src/tui/workspace-diff.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@namzu/cli",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "14.0.0",
|
|
4
|
+
"description": "Interactive and headless terminal agent for Namzu, with provider discovery, durable sessions, tools and diagnostics.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"namzu",
|
|
7
7
|
"ai",
|
|
@@ -44,13 +44,13 @@
|
|
|
44
44
|
"ink": "^7.0.3",
|
|
45
45
|
"react": "^19.2.6",
|
|
46
46
|
"yaml": "^2.9.0",
|
|
47
|
-
"@namzu/
|
|
48
|
-
"@namzu/deepseek": "^0.1.0",
|
|
49
|
-
"@namzu/ollama": "2.2.0",
|
|
50
|
-
"@namzu/openai": "1.3.0",
|
|
51
|
-
"@namzu/openrouter": "2.3.0",
|
|
47
|
+
"@namzu/deepseek": "^1.0.0",
|
|
52
48
|
"@namzu/files": "1.1.0",
|
|
53
|
-
"@namzu/
|
|
49
|
+
"@namzu/openai": "1.5.0",
|
|
50
|
+
"@namzu/openrouter": "2.3.1",
|
|
51
|
+
"@namzu/anthropic": "4.0.0",
|
|
52
|
+
"@namzu/ollama": "2.2.1",
|
|
53
|
+
"@namzu/sdk": "^31.0.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@biomejs/biome": "^1.9.4",
|