chivgent 1.0.1 → 1.1.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 +102 -131
- package/README.zh-CN.md +97 -824
- package/dist/agent.d.ts +16 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +95 -43
- package/dist/agent.js.map +1 -1
- package/dist/auth/oauth.d.ts +51 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +444 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/cli-options.d.ts +8 -5
- package/dist/cli-options.d.ts.map +1 -1
- package/dist/cli-options.js +36 -3
- package/dist/cli-options.js.map +1 -1
- package/dist/cli-runtime.d.ts +9 -0
- package/dist/cli-runtime.d.ts.map +1 -1
- package/dist/cli-runtime.js +32 -6
- package/dist/cli-runtime.js.map +1 -1
- package/dist/cli.js +57 -10
- package/dist/cli.js.map +1 -1
- package/dist/context/context-manager.d.ts +21 -0
- package/dist/context/context-manager.d.ts.map +1 -1
- package/dist/context/context-manager.js +199 -35
- package/dist/context/context-manager.js.map +1 -1
- package/dist/evals/tools.d.ts.map +1 -1
- package/dist/evals/tools.js +4 -2
- package/dist/evals/tools.js.map +1 -1
- package/dist/events.d.ts +5 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/permissions.d.ts +35 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +89 -0
- package/dist/permissions.js.map +1 -0
- package/dist/prompts.d.ts +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +1 -0
- package/dist/prompts.js.map +1 -1
- package/dist/providers/client.d.ts +1 -1
- package/dist/providers/client.d.ts.map +1 -1
- package/dist/providers/client.js +19 -1
- package/dist/providers/client.js.map +1 -1
- package/dist/providers/definitions.d.ts +2 -0
- package/dist/providers/definitions.d.ts.map +1 -1
- package/dist/providers/definitions.js +3 -1
- package/dist/providers/definitions.js.map +1 -1
- package/dist/providers/interactive.d.ts +4 -0
- package/dist/providers/interactive.d.ts.map +1 -1
- package/dist/providers/interactive.js +86 -2
- package/dist/providers/interactive.js.map +1 -1
- package/dist/providers/oauth-client.d.ts +14 -0
- package/dist/providers/oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth-client.js +52 -0
- package/dist/providers/oauth-client.js.map +1 -0
- package/dist/providers/openai-compatible-chat.d.ts +1 -0
- package/dist/providers/openai-compatible-chat.d.ts.map +1 -1
- package/dist/providers/openai-compatible-chat.js +1 -0
- package/dist/providers/openai-compatible-chat.js.map +1 -1
- package/dist/providers/openai.d.ts +3 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +72 -10
- package/dist/providers/openai.js.map +1 -1
- package/dist/remote/repl.d.ts.map +1 -1
- package/dist/remote/repl.js +9 -0
- package/dist/remote/repl.js.map +1 -1
- package/dist/repl.d.ts +42 -1
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +255 -12
- package/dist/repl.js.map +1 -1
- package/dist/session-store.d.ts +22 -1
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js +80 -1
- package/dist/session-store.js.map +1 -1
- package/dist/session.d.ts +19 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +106 -4
- package/dist/session.js.map +1 -1
- package/dist/shell/approval.d.ts +2 -2
- package/dist/shell/approval.d.ts.map +1 -1
- package/dist/shell/approval.js +2 -2
- package/dist/shell/approval.js.map +1 -1
- package/dist/shell/docker.d.ts +2 -0
- package/dist/shell/docker.d.ts.map +1 -1
- package/dist/shell/docker.js +17 -3
- package/dist/shell/docker.js.map +1 -1
- package/dist/shell/factory.d.ts +9 -0
- package/dist/shell/factory.d.ts.map +1 -0
- package/dist/shell/factory.js +13 -0
- package/dist/shell/factory.js.map +1 -0
- package/dist/shell/local.d.ts +4 -0
- package/dist/shell/local.d.ts.map +1 -1
- package/dist/shell/local.js +16 -1
- package/dist/shell/local.js.map +1 -1
- package/dist/shell/native.d.ts +15 -0
- package/dist/shell/native.d.ts.map +1 -0
- package/dist/shell/native.js +99 -0
- package/dist/shell/native.js.map +1 -0
- package/dist/shell/types.d.ts +1 -0
- package/dist/shell/types.d.ts.map +1 -1
- package/dist/tools/bash.d.ts +19 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +30 -11
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit-file.d.ts.map +1 -1
- package/dist/tools/edit-file.js +1 -1
- package/dist/tools/edit-file.js.map +1 -1
- package/dist/tools/parallel.d.ts +2 -0
- package/dist/tools/parallel.d.ts.map +1 -1
- package/dist/tools/parallel.js +8 -0
- package/dist/tools/parallel.js.map +1 -1
- package/dist/tools/write-file.d.ts.map +1 -1
- package/dist/tools/write-file.js +1 -1
- package/dist/tools/write-file.js.map +1 -1
- package/dist/transcript-hash.d.ts +4 -0
- package/dist/transcript-hash.d.ts.map +1 -0
- package/dist/transcript-hash.js +6 -0
- package/dist/transcript-hash.js.map +1 -0
- package/dist/tui/activity.d.ts +1 -1
- package/dist/tui/activity.d.ts.map +1 -1
- package/dist/tui/activity.js +2 -2
- package/dist/tui/activity.js.map +1 -1
- package/dist/tui/live.d.ts +2 -0
- package/dist/tui/live.d.ts.map +1 -1
- package/dist/tui/live.js +5 -0
- package/dist/tui/live.js.map +1 -1
- package/dist/workspace/paths.d.ts.map +1 -1
- package/dist/workspace/paths.js +4 -0
- package/dist/workspace/paths.js.map +1 -1
- package/dist/workspace/types.d.ts +2 -2
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/types.js.map +1 -1
- package/dist/workspace.d.ts +2 -2
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +2 -2
- package/dist/workspace.js.map +1 -1
- package/package.json +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAmB5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/remote/repl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/remote/repl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAiBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAyFjB"}
|
package/dist/remote/repl.js
CHANGED
|
@@ -4,6 +4,12 @@ const HELP = `Commands:
|
|
|
4
4
|
/help Show this help
|
|
5
5
|
/session Show the served session's id, workspace and capabilities
|
|
6
6
|
/tools List the tools the server offers
|
|
7
|
+
/compact Unavailable for a remote connection
|
|
8
|
+
/plan Unavailable for a remote connection
|
|
9
|
+
/new Unavailable for a remote connection
|
|
10
|
+
/resume Unavailable for a remote connection
|
|
11
|
+
/rename Unavailable for a remote connection
|
|
12
|
+
/status Unavailable for a remote connection
|
|
7
13
|
/exit Leave this client (the server keeps running)
|
|
8
14
|
|
|
9
15
|
Anything else is sent to the server. Ctrl+C interrupts a running answer; at the prompt it detaches.
|
|
@@ -71,6 +77,9 @@ export async function runRemoteRepl(options) {
|
|
|
71
77
|
else if (command === "/tools") {
|
|
72
78
|
write(`${options.remote.toolNames.map((name) => ` ${name}`).join("\n")}\n`);
|
|
73
79
|
}
|
|
80
|
+
else if (["/compact", "/plan", "/new", "/resume", "/rename", "/status"].includes(command ?? "")) {
|
|
81
|
+
write(`${command} is unavailable over a remote connection. The command was not sent to the server.\n`);
|
|
82
|
+
}
|
|
74
83
|
else {
|
|
75
84
|
write(`Unknown command: ${trimmed}. Try /help.\n`);
|
|
76
85
|
}
|
package/dist/remote/repl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/remote/repl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAWzC,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/remote/repl.ts"],"names":[],"mappings":"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"}
|
package/dist/repl.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { OutputStream } from "./render.js";
|
|
|
4
4
|
import type { RegisteredCommand } from "./extensions/api.js";
|
|
5
5
|
import type { LiveRegion } from "./tui/live.js";
|
|
6
6
|
import type { ShellApprovalGate } from "./shell/approval.js";
|
|
7
|
+
import { type PermissionMode, type PermissionPolicy } from "./permissions.js";
|
|
7
8
|
export declare const REPL_PROMPT = "\u203A ";
|
|
8
9
|
export type SlashCommandOutcome = "handled" | "exit" | "not-a-command"
|
|
9
10
|
/** The REPL runs the sign-in flow, which needs to read from the terminal. */
|
|
@@ -19,6 +20,23 @@ export type SlashCommandOutcome = "handled" | "exit" | "not-a-command"
|
|
|
19
20
|
} | {
|
|
20
21
|
readonly kind: "endpoint";
|
|
21
22
|
readonly argument: string;
|
|
23
|
+
} | {
|
|
24
|
+
readonly kind: "compact";
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: "rename";
|
|
27
|
+
readonly title: string;
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: "plan";
|
|
30
|
+
readonly enabled: boolean;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: "permission-mode";
|
|
33
|
+
readonly mode: PermissionMode;
|
|
34
|
+
} | {
|
|
35
|
+
readonly kind: "new-session";
|
|
36
|
+
readonly title?: string;
|
|
37
|
+
} | {
|
|
38
|
+
readonly kind: "resume-session";
|
|
39
|
+
readonly id?: string;
|
|
22
40
|
}
|
|
23
41
|
/** An extension command matched; the REPL runs it, since it may be async. */
|
|
24
42
|
| {
|
|
@@ -37,6 +55,20 @@ export interface SlashCommandContext {
|
|
|
37
55
|
readonly providers?: ProviderControl;
|
|
38
56
|
readonly width?: number;
|
|
39
57
|
readonly color?: boolean;
|
|
58
|
+
readonly compactionEnabled?: boolean;
|
|
59
|
+
readonly providerName?: string;
|
|
60
|
+
readonly modelName?: string;
|
|
61
|
+
readonly permissions?: readonly string[];
|
|
62
|
+
readonly permissionPolicy?: PermissionPolicy;
|
|
63
|
+
readonly sessionOptions?: {
|
|
64
|
+
readonly list?: () => Promise<readonly {
|
|
65
|
+
readonly id: string;
|
|
66
|
+
readonly title?: string;
|
|
67
|
+
}[]>;
|
|
68
|
+
readonly create?: (title?: string) => Promise<AgentSession>;
|
|
69
|
+
readonly resume?: (id: string) => Promise<AgentSession | undefined>;
|
|
70
|
+
};
|
|
71
|
+
readonly sessionFileForSession?: (session: AgentSession) => string | undefined;
|
|
40
72
|
}
|
|
41
73
|
export interface ProviderSelection {
|
|
42
74
|
readonly ok: boolean;
|
|
@@ -61,9 +93,11 @@ export interface SignIn {
|
|
|
61
93
|
needsApiKey?(): Promise<boolean>;
|
|
62
94
|
/** Saves the key and puts it to use, or returns why it could not. */
|
|
63
95
|
submit(apiKey: string): Promise<string | undefined>;
|
|
96
|
+
oauth?(provider: "openai" | "xai", signal?: AbortSignal): Promise<string | undefined>;
|
|
97
|
+
signOut?(): Promise<string | undefined>;
|
|
64
98
|
unavailableMessage?(): string;
|
|
65
99
|
}
|
|
66
|
-
export declare const BUILT_IN_COMMANDS: readonly ["help", "session", "tools", "diff", "compose", "editor", "review", "gitdiff", "clear", "exit", "quit", "login", "provider", "model", "endpoint"];
|
|
100
|
+
export declare const BUILT_IN_COMMANDS: readonly ["help", "session", "status", "compact", "plan", "permissions", "new", "resume", "rename", "tools", "diff", "compose", "editor", "review", "gitdiff", "clear", "exit", "quit", "login", "logout", "provider", "model", "endpoint"];
|
|
67
101
|
/**
|
|
68
102
|
* Interprets one line of REPL input. Returns `not-a-command` when the line is
|
|
69
103
|
* an ordinary prompt for the model.
|
|
@@ -86,6 +120,13 @@ export interface ReplOptions {
|
|
|
86
120
|
readonly extensionCommands?: readonly RegisteredCommand[];
|
|
87
121
|
readonly signIn?: SignIn;
|
|
88
122
|
readonly providers?: ProviderControl;
|
|
123
|
+
readonly sessionOptions?: SlashCommandContext["sessionOptions"];
|
|
124
|
+
readonly compactionEnabled?: boolean;
|
|
125
|
+
readonly providerName?: string;
|
|
126
|
+
readonly modelName?: string;
|
|
127
|
+
readonly permissions?: readonly string[];
|
|
128
|
+
readonly permissionPolicy?: PermissionPolicy;
|
|
129
|
+
readonly sessionFileForSession?: SlashCommandContext["sessionFileForSession"];
|
|
89
130
|
}
|
|
90
131
|
/**
|
|
91
132
|
* Reads prompts until the user leaves. Ctrl+C cancels a running answer, keeping
|
package/dist/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAoB,MAAM,mBAAmB,CAAC;AAKtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"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"}
|
package/dist/repl.js
CHANGED
|
@@ -9,10 +9,19 @@ import { formatTokens } from "./providers/usage.js";
|
|
|
9
9
|
import { approvalPreview, commandReviewable } from "./tui/activity.js";
|
|
10
10
|
import { terminalWidth } from "./tui/live.js";
|
|
11
11
|
import { formatDiffPage, mostRecentSuccessfulPatch } from "./tui/diff.js";
|
|
12
|
+
import { describePermissionMode, parsePermissionMode } from "./permissions.js";
|
|
13
|
+
import { HeuristicTokenEstimator } from "./context/token-estimator.js";
|
|
12
14
|
export const REPL_PROMPT = "› ";
|
|
13
15
|
export const BUILT_IN_COMMANDS = [
|
|
14
16
|
"help",
|
|
15
17
|
"session",
|
|
18
|
+
"status",
|
|
19
|
+
"compact",
|
|
20
|
+
"plan",
|
|
21
|
+
"permissions",
|
|
22
|
+
"new",
|
|
23
|
+
"resume",
|
|
24
|
+
"rename",
|
|
16
25
|
"tools",
|
|
17
26
|
"diff",
|
|
18
27
|
"compose",
|
|
@@ -23,6 +32,7 @@ export const BUILT_IN_COMMANDS = [
|
|
|
23
32
|
"exit",
|
|
24
33
|
"quit",
|
|
25
34
|
"login",
|
|
35
|
+
"logout",
|
|
26
36
|
"provider",
|
|
27
37
|
"model",
|
|
28
38
|
"endpoint",
|
|
@@ -30,6 +40,13 @@ export const BUILT_IN_COMMANDS = [
|
|
|
30
40
|
const HELP = `Commands:
|
|
31
41
|
/help Show this help
|
|
32
42
|
/session Show the current session id, workspace, and size
|
|
43
|
+
/status Show live session, model, permissions, plan state, and usage
|
|
44
|
+
/compact Summarise older history for the model; keeps the full transcript
|
|
45
|
+
/plan [on|off] Toggle restricted read-only Plan Mode
|
|
46
|
+
/permissions [ask-first|workspace|unrestricted] Inspect or change this process's policy
|
|
47
|
+
/new [title] Save this session and start a fresh session
|
|
48
|
+
/resume [id] Switch to a saved session in this workspace
|
|
49
|
+
/rename TITLE Set the current session title
|
|
33
50
|
/tools List the tools available to the model
|
|
34
51
|
/diff [N] Review the latest successful apply_patch, page N
|
|
35
52
|
/compose Write a multi-line prompt (/send to submit, /cancel to discard)
|
|
@@ -41,6 +58,8 @@ const HELP = `Commands:
|
|
|
41
58
|
/model Show or change the current model: /model MODEL
|
|
42
59
|
/endpoint Set the URL for an OpenAI-compatible Provider
|
|
43
60
|
/login Store a key for the current Provider; /login NAME switches first
|
|
61
|
+
/login oauth [openai|xai] Sign in with a subscription
|
|
62
|
+
/logout Sign out of the current OAuth subscription
|
|
44
63
|
/exit Leave chivgent (Ctrl+C or Ctrl+D also works)
|
|
45
64
|
|
|
46
65
|
Anything else is sent to the model. Ctrl+C stops a running answer; at the prompt it exits.
|
|
@@ -73,6 +92,66 @@ export function handleSlashCommand(line, context) {
|
|
|
73
92
|
case "/session":
|
|
74
93
|
context.write(describeSession(context));
|
|
75
94
|
return "handled";
|
|
95
|
+
case "/status":
|
|
96
|
+
context.write(describeStatus(context));
|
|
97
|
+
return "handled";
|
|
98
|
+
case "/compact":
|
|
99
|
+
return { kind: "compact" };
|
|
100
|
+
case "/rename": {
|
|
101
|
+
const title = trimmed.slice("/rename".length).trim();
|
|
102
|
+
if (!title || title.length > 120 || /[\x00-\x1f\x7f]/.test(title)) {
|
|
103
|
+
context.write("Usage: /rename <title> (1–120 characters, no control characters)\n");
|
|
104
|
+
return "handled";
|
|
105
|
+
}
|
|
106
|
+
return { kind: "rename", title };
|
|
107
|
+
}
|
|
108
|
+
case "/plan": {
|
|
109
|
+
const argument = trimmed.slice("/plan".length).trim().toLowerCase();
|
|
110
|
+
if (argument && argument !== "on" && argument !== "off") {
|
|
111
|
+
context.write("Usage: /plan [on|off]\n");
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const enabled = argument === "on" ? true : argument === "off" ? false : !context.session.planMode;
|
|
115
|
+
return { kind: "plan", enabled };
|
|
116
|
+
}
|
|
117
|
+
return "handled";
|
|
118
|
+
}
|
|
119
|
+
case "/permissions": {
|
|
120
|
+
const argument = trimmed.slice("/permissions".length).trim().toLowerCase();
|
|
121
|
+
if (context.permissionPolicy === undefined) {
|
|
122
|
+
context.write("Named permission modes are unavailable because this session uses legacy capability flags. Start with --permission-mode to enable them.\n");
|
|
123
|
+
}
|
|
124
|
+
else if (!argument) {
|
|
125
|
+
context.write(`Permission mode: ${context.permissionPolicy.mode}\n${describePermissionMode(context.permissionPolicy.mode)}\nMode changes last for this process and are not restored from saved sessions.\n`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
try {
|
|
129
|
+
return { kind: "permission-mode", mode: parsePermissionMode(argument) };
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
context.write("Usage: /permissions [ask-first|workspace|unrestricted]\n");
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return "handled";
|
|
136
|
+
}
|
|
137
|
+
case "/new":
|
|
138
|
+
if (context.sessionOptions?.create === undefined)
|
|
139
|
+
context.write("/new is unavailable in this session.\n");
|
|
140
|
+
else {
|
|
141
|
+
const title = trimmed.slice("/new".length).trim();
|
|
142
|
+
if (title.length > 120 || /[\x00-\x1f\x7f]/.test(title)) {
|
|
143
|
+
context.write("Usage: /new [title] (title must be at most 120 characters, without control characters)\n");
|
|
144
|
+
return "handled";
|
|
145
|
+
}
|
|
146
|
+
return { kind: "new-session", ...(title ? { title } : {}) };
|
|
147
|
+
}
|
|
148
|
+
return "handled";
|
|
149
|
+
case "/resume":
|
|
150
|
+
if (context.sessionOptions?.resume === undefined)
|
|
151
|
+
context.write("/resume is unavailable in this session.\n");
|
|
152
|
+
else
|
|
153
|
+
return { kind: "resume-session", ...(trimmed.slice("/resume".length).trim() ? { id: trimmed.slice("/resume".length).trim() } : {}) };
|
|
154
|
+
return "handled";
|
|
76
155
|
case "/tools":
|
|
77
156
|
context.write(`${context.session.toolNames.map((name) => ` ${name}`).join("\n")}\n`);
|
|
78
157
|
return "handled";
|
|
@@ -143,6 +222,12 @@ export function handleSlashCommand(line, context) {
|
|
|
143
222
|
return "handled";
|
|
144
223
|
}
|
|
145
224
|
return { kind: "login", providerArgument: trimmed.slice("/login".length).trim() };
|
|
225
|
+
case "/logout":
|
|
226
|
+
if (context.signIn?.signOut === undefined) {
|
|
227
|
+
context.write("OAuth sign-out is unavailable in this session.\n");
|
|
228
|
+
return "handled";
|
|
229
|
+
}
|
|
230
|
+
return { kind: "login", providerArgument: "__logout__" };
|
|
146
231
|
case "/exit":
|
|
147
232
|
case "/quit":
|
|
148
233
|
return "exit";
|
|
@@ -184,9 +269,34 @@ function describeSession(context) {
|
|
|
184
269
|
`messages: ${context.session.messages.length}`,
|
|
185
270
|
...describeUsage(context),
|
|
186
271
|
];
|
|
187
|
-
|
|
188
|
-
|
|
272
|
+
const sessionFile = context.sessionFileForSession?.(context.session) ?? context.sessionFile;
|
|
273
|
+
if (sessionFile !== undefined) {
|
|
274
|
+
lines.push(`log: ${sessionFile}`);
|
|
275
|
+
}
|
|
276
|
+
return `${lines.join("\n")}\n`;
|
|
277
|
+
}
|
|
278
|
+
function describeStatus(context) {
|
|
279
|
+
const usage = describeUsage(context);
|
|
280
|
+
let contextEstimate = "unavailable";
|
|
281
|
+
try {
|
|
282
|
+
contextEstimate = `approximately ${new HeuristicTokenEstimator().estimateMessages(context.session.messages)} tokens (transcript only; excludes system prompt and tool schemas)`;
|
|
189
283
|
}
|
|
284
|
+
catch { /* inaccessible estimates are reported explicitly */ }
|
|
285
|
+
const lines = [
|
|
286
|
+
`provider: ${context.providers?.provider ?? context.providerName ?? "unavailable"}`,
|
|
287
|
+
`model: ${context.providers === undefined ? context.modelName ?? "unavailable" : context.providers.model ?? "unavailable"}`,
|
|
288
|
+
`cwd: ${context.session.cwd}`,
|
|
289
|
+
`session: ${context.session.id}${context.session.title ? ` · ${context.session.title}` : ""}`,
|
|
290
|
+
`plan: ${context.session.planMode ? "on (writes and Shell blocked for this session)" : "off"}`,
|
|
291
|
+
...(context.permissionPolicy === undefined ? [] : [`permissions: ${context.permissionPolicy.mode} (${describePermissionMode(context.permissionPolicy.mode)})`]),
|
|
292
|
+
...(context.permissionPolicy === undefined ? [
|
|
293
|
+
`file write grant: ${context.permissions === undefined ? "unavailable" : context.permissions.includes("file-write") ? "enabled" : "disabled"}`,
|
|
294
|
+
`Shell grant: ${context.permissions === undefined ? "unavailable" : context.permissions.includes("shell") ? "enabled" : "disabled"}`,
|
|
295
|
+
`network grant: ${context.permissions === undefined ? "unavailable" : !context.permissions.includes("shell") ? "unavailable (Shell disabled)" : context.permissions.includes("network") ? "enabled" : "disabled"}`,
|
|
296
|
+
] : []),
|
|
297
|
+
...usage,
|
|
298
|
+
`context: ${contextEstimate}`,
|
|
299
|
+
];
|
|
190
300
|
return `${lines.join("\n")}\n`;
|
|
191
301
|
}
|
|
192
302
|
/**
|
|
@@ -239,6 +349,7 @@ async function runSignIn(readline, readNextLine, write, signIn) {
|
|
|
239
349
|
* its transcript and log; at an idle prompt it closes the REPL.
|
|
240
350
|
*/
|
|
241
351
|
export async function runRepl(options) {
|
|
352
|
+
let activeSession = options.session;
|
|
242
353
|
const write = (text) => {
|
|
243
354
|
options.stderr.write(text);
|
|
244
355
|
};
|
|
@@ -410,7 +521,7 @@ export async function runRepl(options) {
|
|
|
410
521
|
};
|
|
411
522
|
// Approval and normal input share the same readline iterator.
|
|
412
523
|
if (options.shellApproval !== undefined) {
|
|
413
|
-
options.shellApproval.setHandler(async (command, signal) => {
|
|
524
|
+
options.shellApproval.setHandler(async (command, signal, context) => {
|
|
414
525
|
if (signal?.aborted)
|
|
415
526
|
return false;
|
|
416
527
|
menu?.clear();
|
|
@@ -419,7 +530,7 @@ export async function runRepl(options) {
|
|
|
419
530
|
tuiInput?.setBusy(false);
|
|
420
531
|
try {
|
|
421
532
|
const width = terminalWidth({ columns: options.output.columns });
|
|
422
|
-
write(approvalPreview(command, width));
|
|
533
|
+
write(approvalPreview(command, width, context ?? "Shell command"));
|
|
423
534
|
if (!commandReviewable(command, width)) {
|
|
424
535
|
write(" Denied: command cannot be fully reviewed at this width. Ask for a shorter command.\n");
|
|
425
536
|
return false;
|
|
@@ -510,7 +621,7 @@ export async function runRepl(options) {
|
|
|
510
621
|
let resolveDraft;
|
|
511
622
|
const pending = new Promise(resolve => { resolveDraft = resolve; });
|
|
512
623
|
const output = options.output;
|
|
513
|
-
const recent =
|
|
624
|
+
const recent = activeSession.messages
|
|
514
625
|
.filter((message) => message.role === "user")
|
|
515
626
|
.map(message => message.content)
|
|
516
627
|
.filter(message => message.length > 0)
|
|
@@ -546,7 +657,7 @@ export async function runRepl(options) {
|
|
|
546
657
|
};
|
|
547
658
|
/** Read-only patch viewer, safe and separate from the model's tool calls. */
|
|
548
659
|
const inspectPatch = async (override, label) => {
|
|
549
|
-
const patch = override ?? mostRecentSuccessfulPatch(
|
|
660
|
+
const patch = override ?? mostRecentSuccessfulPatch(activeSession.messages);
|
|
550
661
|
if (patch === undefined) {
|
|
551
662
|
write("No successfully applied patch found in this session.\n");
|
|
552
663
|
return;
|
|
@@ -586,7 +697,7 @@ export async function runRepl(options) {
|
|
|
586
697
|
}
|
|
587
698
|
const mode = line.endsWith("--staged") ? "staged" : "working";
|
|
588
699
|
// Explicit user confirmation before starting any local Git process.
|
|
589
|
-
const root = terminalText(
|
|
700
|
+
const root = terminalText(activeSession.cwd);
|
|
590
701
|
write(`\nRead-only local Git diff (${mode}) in:\n${root}\nNo network, hooks, external diff or file writes. Approve once? [y/N]\n`);
|
|
591
702
|
tuiInput.acceptLine();
|
|
592
703
|
tuiInput.setApprovalMode(true);
|
|
@@ -606,7 +717,7 @@ export async function runRepl(options) {
|
|
|
606
717
|
return;
|
|
607
718
|
}
|
|
608
719
|
try {
|
|
609
|
-
const diff = await (options.gitDiffReader ?? readLiveGitDiff)(
|
|
720
|
+
const diff = await (options.gitDiffReader ?? readLiveGitDiff)(activeSession.cwd, mode);
|
|
610
721
|
if (diff.trim().length === 0) {
|
|
611
722
|
write(`No ${mode} tracked Git changes found.\n`);
|
|
612
723
|
return;
|
|
@@ -681,23 +792,68 @@ export async function runRepl(options) {
|
|
|
681
792
|
line = draft;
|
|
682
793
|
}
|
|
683
794
|
const outcome = fromComposer || fromEditor ? "not-a-command" : handleSlashCommand(line, {
|
|
684
|
-
session:
|
|
795
|
+
session: activeSession,
|
|
685
796
|
write,
|
|
686
797
|
width: terminalWidth({ columns: options.output.columns }),
|
|
687
798
|
color: options.tui === true && process.env.NO_COLOR === undefined && process.env.TERM !== "dumb",
|
|
688
799
|
...(options.sessionFile === undefined
|
|
689
800
|
? {}
|
|
690
801
|
: { sessionFile: options.sessionFile }),
|
|
802
|
+
...(options.sessionFileForSession === undefined ? {} : { sessionFileForSession: options.sessionFileForSession }),
|
|
691
803
|
...(options.extensionCommands === undefined
|
|
692
804
|
? {}
|
|
693
805
|
: { extensionCommands: options.extensionCommands }),
|
|
694
806
|
...(options.signIn === undefined ? {} : { signIn: options.signIn }),
|
|
695
807
|
...(options.providers === undefined ? {} : { providers: options.providers }),
|
|
808
|
+
...(options.compactionEnabled === undefined ? {} : { compactionEnabled: options.compactionEnabled }),
|
|
809
|
+
...(options.providerName === undefined ? {} : { providerName: options.providerName }),
|
|
810
|
+
...(options.modelName === undefined ? {} : { modelName: options.modelName }),
|
|
811
|
+
...(options.permissions === undefined ? {} : { permissions: options.permissions }),
|
|
812
|
+
...(options.permissionPolicy === undefined ? {} : { permissionPolicy: options.permissionPolicy }),
|
|
813
|
+
...(options.sessionOptions === undefined ? {} : { sessionOptions: options.sessionOptions }),
|
|
696
814
|
});
|
|
697
815
|
if (outcome === "exit") {
|
|
698
816
|
break;
|
|
699
817
|
}
|
|
700
818
|
if (typeof outcome === "object" && outcome.kind === "login") {
|
|
819
|
+
if (outcome.providerArgument === "__logout__") {
|
|
820
|
+
const result = await options.signIn?.signOut?.();
|
|
821
|
+
write(`${result ?? "Signed out of the current OAuth subscription."}\n`);
|
|
822
|
+
showPrompt();
|
|
823
|
+
continue;
|
|
824
|
+
}
|
|
825
|
+
if (outcome.providerArgument === "oauth" || /^oauth\s+(openai|xai)$/.test(outcome.providerArgument)) {
|
|
826
|
+
const [, requested] = outcome.providerArgument.split(/\s+/, 2);
|
|
827
|
+
const target = requested ?? options.providers?.provider ?? options.providerName;
|
|
828
|
+
if (target !== "openai" && target !== "xai") {
|
|
829
|
+
write("Use /login oauth openai or /login oauth xai.\n");
|
|
830
|
+
showPrompt();
|
|
831
|
+
continue;
|
|
832
|
+
}
|
|
833
|
+
if (options.signIn?.oauth === undefined) {
|
|
834
|
+
write("OAuth sign-in is unavailable in this session.\n");
|
|
835
|
+
showPrompt();
|
|
836
|
+
continue;
|
|
837
|
+
}
|
|
838
|
+
if (options.providers && options.providers.provider !== target) {
|
|
839
|
+
const selected = await options.providers.select(target);
|
|
840
|
+
write(selected.message);
|
|
841
|
+
if (!selected.ok) {
|
|
842
|
+
showPrompt();
|
|
843
|
+
continue;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
controller = new AbortController();
|
|
847
|
+
try {
|
|
848
|
+
const failure = await options.signIn.oauth(target, controller.signal);
|
|
849
|
+
write(failure ?? `Signed in to ${target} subscription for this session. API keys remain preferred on the next launch.\n`);
|
|
850
|
+
}
|
|
851
|
+
finally {
|
|
852
|
+
controller = undefined;
|
|
853
|
+
}
|
|
854
|
+
showPrompt();
|
|
855
|
+
continue;
|
|
856
|
+
}
|
|
701
857
|
if (outcome.providerArgument.length > 0) {
|
|
702
858
|
if (options.providers === undefined) {
|
|
703
859
|
write("Provider switching is unavailable in this session.\n");
|
|
@@ -736,12 +892,99 @@ export async function runRepl(options) {
|
|
|
736
892
|
showPrompt();
|
|
737
893
|
continue;
|
|
738
894
|
}
|
|
739
|
-
if (typeof outcome === "object") {
|
|
895
|
+
if (typeof outcome === "object" && outcome.kind === "compact") {
|
|
896
|
+
if (options.compactionEnabled === false)
|
|
897
|
+
write("Manual compaction is unavailable because --no-compaction is active.\n");
|
|
898
|
+
else {
|
|
899
|
+
controller = new AbortController();
|
|
900
|
+
tuiInput?.setBusy(true);
|
|
901
|
+
write("Compacting older conversation history… Ctrl+C cancels.\n");
|
|
902
|
+
try {
|
|
903
|
+
const compacted = await activeSession.compact(controller.signal);
|
|
904
|
+
write(compacted ? "Compaction checkpoint saved. Full transcript retained.\n" : "Nothing new to compact; existing checkpoint retained.\n");
|
|
905
|
+
}
|
|
906
|
+
catch (error) {
|
|
907
|
+
write(`Compaction failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
908
|
+
}
|
|
909
|
+
finally {
|
|
910
|
+
controller = undefined;
|
|
911
|
+
tuiInput?.setBusy(false);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
showPrompt();
|
|
915
|
+
continue;
|
|
916
|
+
}
|
|
917
|
+
if (typeof outcome === "object" && outcome.kind === "rename") {
|
|
918
|
+
try {
|
|
919
|
+
await activeSession.rename(outcome.title);
|
|
920
|
+
write(`Session renamed: ${activeSession.title}\n`);
|
|
921
|
+
}
|
|
922
|
+
catch (error) {
|
|
923
|
+
write(`Rename failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
924
|
+
}
|
|
925
|
+
showPrompt();
|
|
926
|
+
continue;
|
|
927
|
+
}
|
|
928
|
+
if (typeof outcome === "object" && outcome.kind === "plan") {
|
|
929
|
+
try {
|
|
930
|
+
await activeSession.setPlanMode(outcome.enabled);
|
|
931
|
+
write(`Plan Mode ${activeSession.planMode ? "on" : "off"}. ${activeSession.planMode ? "Only built-in read tools and update_plan may execute." : "Session capabilities restored."}\n`);
|
|
932
|
+
}
|
|
933
|
+
catch (error) {
|
|
934
|
+
write(`Could not change Plan Mode: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
935
|
+
}
|
|
936
|
+
showPrompt();
|
|
937
|
+
continue;
|
|
938
|
+
}
|
|
939
|
+
if (typeof outcome === "object" && outcome.kind === "permission-mode") {
|
|
940
|
+
options.permissionPolicy?.setMode(outcome.mode);
|
|
941
|
+
write(`Permission mode set to ${outcome.mode}. ${describePermissionMode(outcome.mode)} This mode lasts for this process and will not be restored from a saved session.\n`);
|
|
942
|
+
showPrompt();
|
|
943
|
+
continue;
|
|
944
|
+
}
|
|
945
|
+
if (typeof outcome === "object" && outcome.kind === "new-session") {
|
|
946
|
+
try {
|
|
947
|
+
const next = await options.sessionOptions?.create?.(outcome.title);
|
|
948
|
+
if (next === undefined)
|
|
949
|
+
throw new Error("Session creation is unavailable.");
|
|
950
|
+
activeSession = next;
|
|
951
|
+
write(`Started session ${next.id}${next.title ? ` · ${next.title}` : ""}. Previous session saved.\n`);
|
|
952
|
+
}
|
|
953
|
+
catch (error) {
|
|
954
|
+
write(`Could not start a new session: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
955
|
+
}
|
|
956
|
+
showPrompt();
|
|
957
|
+
continue;
|
|
958
|
+
}
|
|
959
|
+
if (typeof outcome === "object" && outcome.kind === "resume-session") {
|
|
960
|
+
try {
|
|
961
|
+
let id = outcome.id;
|
|
962
|
+
if (!id) {
|
|
963
|
+
const items = await options.sessionOptions?.list?.();
|
|
964
|
+
if (!items?.length)
|
|
965
|
+
throw new Error("No saved sessions in this workspace.");
|
|
966
|
+
write(`Saved sessions in ${activeSession.cwd}:\n${items.map(item => ` ${item.id}${item.title ? ` · ${item.title}` : ""}`).join("\n")}\nUse /resume ID to switch.\n`);
|
|
967
|
+
}
|
|
968
|
+
else {
|
|
969
|
+
const next = await options.sessionOptions?.resume?.(id);
|
|
970
|
+
if (next === undefined)
|
|
971
|
+
throw new Error(`Unknown session in this workspace: ${id}`);
|
|
972
|
+
activeSession = next;
|
|
973
|
+
write(`Resumed session ${next.id}${next.title ? ` · ${next.title}` : ""}.\n`);
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
catch (error) {
|
|
977
|
+
write(`Could not resume session: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
978
|
+
}
|
|
979
|
+
showPrompt();
|
|
980
|
+
continue;
|
|
981
|
+
}
|
|
982
|
+
if (typeof outcome === "object" && outcome.kind === "extension") {
|
|
740
983
|
// An extension command runs here rather than inside the parser so it may
|
|
741
984
|
// be async, and so a throwing command cannot take the REPL down.
|
|
742
985
|
try {
|
|
743
986
|
await outcome.command.run({
|
|
744
|
-
session:
|
|
987
|
+
session: activeSession,
|
|
745
988
|
write,
|
|
746
989
|
argument: outcome.argument,
|
|
747
990
|
});
|
|
@@ -768,7 +1011,7 @@ export async function runRepl(options) {
|
|
|
768
1011
|
tuiInput?.setBusy(true);
|
|
769
1012
|
try {
|
|
770
1013
|
const signal = controller.signal;
|
|
771
|
-
const prompt = () =>
|
|
1014
|
+
const prompt = () => activeSession.prompt(line, { signal });
|
|
772
1015
|
if (options.tui)
|
|
773
1016
|
await withoutEcho(readline, prompt);
|
|
774
1017
|
else
|