@songsid/agend 2.1.1-beta.2 → 2.1.1-beta.21
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 +1 -0
- package/README.zh-TW.md +1 -0
- package/dist/access-path.js +15 -6
- package/dist/access-path.js.map +1 -1
- package/dist/agent-cli-instructions.md +9 -0
- package/dist/backend/antigravity.d.ts +4 -1
- package/dist/backend/antigravity.js +24 -13
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +37 -0
- package/dist/backend/claude-code.js +47 -8
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex.d.ts +17 -0
- package/dist/backend/codex.js +279 -62
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/gemini-cli.js +4 -7
- package/dist/backend/gemini-cli.js.map +1 -1
- package/dist/backend/grok.d.ts +24 -0
- package/dist/backend/grok.js +57 -8
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +27 -0
- package/dist/backend/kiro.js +96 -15
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/opencode.js +4 -7
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/types.d.ts +44 -0
- package/dist/backend/types.js +3 -3
- package/dist/backend/types.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +15 -0
- package/dist/channel/adapters/discord.js +94 -6
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +21 -0
- package/dist/channel/adapters/telegram.js +132 -15
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/ipc-bridge.d.ts +17 -1
- package/dist/channel/ipc-bridge.js +53 -17
- package/dist/channel/ipc-bridge.js.map +1 -1
- package/dist/channel/ipc-timeouts.d.ts +40 -0
- package/dist/channel/ipc-timeouts.js +58 -0
- package/dist/channel/ipc-timeouts.js.map +1 -0
- package/dist/channel/mcp-server.js +30 -14
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.js +28 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-queue.d.ts +1 -0
- package/dist/channel/message-queue.js +49 -17
- package/dist/channel/message-queue.js.map +1 -1
- package/dist/channel/reconnect-backoff.d.ts +17 -0
- package/dist/channel/reconnect-backoff.js +21 -0
- package/dist/channel/reconnect-backoff.js.map +1 -0
- package/dist/channel/types.d.ts +29 -0
- package/dist/classic-channel-manager.js +1 -5
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +148 -60
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +27 -0
- package/dist/completion.js +121 -0
- package/dist/completion.js.map +1 -0
- package/dist/config-validator.js +27 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/cost-guard.d.ts +3 -1
- package/dist/cost-guard.js +3 -1
- package/dist/cost-guard.js.map +1 -1
- package/dist/daemon.d.ts +230 -13
- package/dist/daemon.js +975 -335
- package/dist/daemon.js.map +1 -1
- package/dist/event-log.d.ts +31 -0
- package/dist/event-log.js +96 -0
- package/dist/event-log.js.map +1 -1
- package/dist/fleet-context.d.ts +2 -0
- package/dist/fleet-manager.d.ts +209 -4
- package/dist/fleet-manager.js +813 -84
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +22 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +14 -23
- package/dist/general-knowledge/skills/session-management/SKILL.md +15 -34
- package/dist/hang-detector.d.ts +19 -13
- package/dist/hang-detector.js +19 -49
- package/dist/hang-detector.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +21 -1
- package/dist/instance-lifecycle.js +141 -7
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +5 -0
- package/dist/instructions.js +10 -5
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +3 -0
- package/dist/locale.js.map +1 -1
- package/dist/logger.js +14 -0
- package/dist/logger.js.map +1 -1
- package/dist/mcp-liveness.d.ts +21 -0
- package/dist/mcp-liveness.js +27 -0
- package/dist/mcp-liveness.js.map +1 -0
- package/dist/outbound-handlers.d.ts +16 -0
- package/dist/outbound-handlers.js +121 -27
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +7 -2
- package/dist/outbound-schemas.js +13 -2
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/pane-write-lock.d.ts +48 -0
- package/dist/pane-write-lock.js +73 -0
- package/dist/pane-write-lock.js.map +1 -0
- package/dist/process-memory.d.ts +31 -0
- package/dist/process-memory.js +79 -0
- package/dist/process-memory.js.map +1 -0
- package/dist/quickstart.js +17 -16
- package/dist/quickstart.js.map +1 -1
- package/dist/scheduler/db.js +3 -0
- package/dist/scheduler/db.js.map +1 -1
- package/dist/sd-notify.d.ts +45 -0
- package/dist/sd-notify.js +74 -3
- package/dist/sd-notify.js.map +1 -1
- package/dist/secret-file.d.ts +33 -0
- package/dist/secret-file.js +36 -0
- package/dist/secret-file.js.map +1 -0
- package/dist/setup-wizard.js +9 -7
- package/dist/setup-wizard.js.map +1 -1
- package/dist/tmux-control.d.ts +58 -5
- package/dist/tmux-control.js +107 -13
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-manager.d.ts +47 -2
- package/dist/tmux-manager.js +103 -8
- package/dist/tmux-manager.js.map +1 -1
- package/dist/topic-commands.d.ts +43 -1
- package/dist/topic-commands.js +196 -66
- package/dist/topic-commands.js.map +1 -1
- package/dist/tui-glyphs.d.ts +25 -0
- package/dist/tui-glyphs.js +26 -0
- package/dist/tui-glyphs.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/ui/view.html +291 -33
- package/dist/update-check.d.ts +22 -0
- package/dist/update-check.js +44 -0
- package/dist/update-check.js.map +1 -0
- package/dist/usage/providers.d.ts +50 -0
- package/dist/usage/providers.js +611 -0
- package/dist/usage/providers.js.map +1 -0
- package/dist/usage/usage-api.d.ts +50 -0
- package/dist/usage/usage-api.js +111 -0
- package/dist/usage/usage-api.js.map +1 -0
- package/dist/view-api.d.ts +10 -0
- package/dist/view-api.js +67 -14
- package/dist/view-api.js.map +1 -1
- package/dist/web-api.js +5 -2
- package/dist/web-api.js.map +1 -1
- package/package.json +4 -1
- package/templates/systemd.service.ejs +9 -1
- package/dist/channel/tool-tracker.d.ts +0 -13
- package/dist/channel/tool-tracker.js +0 -58
- package/dist/channel/tool-tracker.js.map +0 -1
- package/dist/daemon-entry.d.ts +0 -1
- package/dist/daemon-entry.js +0 -30
- package/dist/daemon-entry.js.map +0 -1
- package/dist/fleet-system-prompt.d.ts +0 -11
- package/dist/fleet-system-prompt.js +0 -61
- package/dist/fleet-system-prompt.js.map +0 -1
package/README.md
CHANGED
|
@@ -146,6 +146,7 @@ graph LR
|
|
|
146
146
|
- [CLI Reference](docs/cli.md) — all commands and options
|
|
147
147
|
- [Configuration](docs/configuration.md) — fleet.yaml complete reference
|
|
148
148
|
- [Security](SECURITY.md) — trust model and hardening
|
|
149
|
+
- [Development Setup](docs/development.md) — working on AgEnD itself
|
|
149
150
|
|
|
150
151
|
## Discord ClassicBot
|
|
151
152
|
|
package/README.zh-TW.md
CHANGED
package/dist/access-path.js
CHANGED
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Constraint on an instance name when it is going to be used as a path segment.
|
|
4
|
+
* Unicode is deliberately allowed (instance names may be non-ASCII), but path
|
|
5
|
+
* separators, traversal, and control characters are not: a NUL or other control
|
|
6
|
+
* byte has no legitimate use in a filename and behaves inconsistently across
|
|
7
|
+
* syscalls, so it is rejected here rather than reaching the filesystem.
|
|
8
|
+
*
|
|
9
|
+
* Empty / pure-`.` / pure-`..` / anything containing `..` is rejected so we cannot
|
|
10
|
+
* escape `dataDir/instances/`.
|
|
6
11
|
*
|
|
7
12
|
* Defence-in-depth: callers (CLI / fleet config loader) already constrain
|
|
8
13
|
* instance names, but `resolveAccessPathFromConfig` is invoked from several
|
|
9
14
|
* entry points and the consequence of a traversal here is reading or writing
|
|
10
15
|
* an attacker-supplied file path.
|
|
11
16
|
*/
|
|
12
|
-
const
|
|
17
|
+
const PATH_SEPARATOR_OR_CONTROL = /[/\\\u0000-\u001f\u007f]/;
|
|
13
18
|
function assertSafeInstanceName(instance) {
|
|
14
|
-
if (!instance
|
|
15
|
-
|
|
19
|
+
if (!instance
|
|
20
|
+
|| PATH_SEPARATOR_OR_CONTROL.test(instance)
|
|
21
|
+
|| instance === "."
|
|
22
|
+
|| instance === ".."
|
|
23
|
+
|| instance.includes("..")) {
|
|
24
|
+
throw new Error(`Invalid instance name "${instance}" — must not contain path separators, traversal, or control characters`);
|
|
16
25
|
}
|
|
17
26
|
}
|
|
18
27
|
/**
|
package/dist/access-path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-path.js","sourceRoot":"","sources":["../src/access-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC
|
|
1
|
+
{"version":3,"file":"access-path.js","sourceRoot":"","sources":["../src/access-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;;;;;GAcG;AACH,MAAM,yBAAyB,GAAG,0BAA0B,CAAC;AAE7D,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,IACE,CAAC,QAAQ;WACN,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC;WACxC,QAAQ,KAAK,GAAG;WAChB,QAAQ,KAAK,IAAI;WACjB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,wEAAwE,CAAC,CAAC;IAC9H,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAe,EACf,QAAgB,EAChB,YAA2C;IAE3C,IAAI,YAAY,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;IAChD,CAAC;IACD,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -46,5 +46,14 @@ agend-agent decision-list # List decisions
|
|
|
46
46
|
|
|
47
47
|
- `[user:... via telegram]` → use `agend-agent reply` (NOT `agend-agent send`)
|
|
48
48
|
- `[from:INSTANCE]` → use `agend-agent send` (NOT `agend-agent reply`)
|
|
49
|
+
- Everything for a human user goes inside the `agend-agent reply` command. Your final
|
|
50
|
+
terminal text is NOT delivered to their chat — it only reaches local logs and
|
|
51
|
+
`/view`. After the command succeeds, end the turn with final text of exactly `.`
|
|
52
|
+
(some backends such as Kiro CLI error on a turn with no text at all). Only
|
|
53
|
+
exception: if the command fails, say so in the final text so the failure is visible
|
|
54
|
+
to the operator.
|
|
55
|
+
- For cross-instance responses, put the response in `agend-agent send` or
|
|
56
|
+
`agend-agent report`. After the command succeeds, likewise end the turn with exactly
|
|
57
|
+
`.`; if it fails, put the failure in the final text so the operator can diagnose it.
|
|
49
58
|
- Task flow: `agend-agent delegate` → silent work → `agend-agent report`. Zero messages in between.
|
|
50
59
|
- Never send acknowledgment-only messages. Only send messages with actionable content.
|
|
@@ -27,7 +27,9 @@ export declare class AntigravityBackend implements CliBackend {
|
|
|
27
27
|
getReadyPattern(): RegExp;
|
|
28
28
|
getContextUsage(): number | null;
|
|
29
29
|
getSessionId(): string | null;
|
|
30
|
-
getQuitCommand():
|
|
30
|
+
getQuitCommand(): null;
|
|
31
|
+
getQuitKey(): string;
|
|
32
|
+
getQuitKeyPresses(): number;
|
|
31
33
|
getCompactCommand(): string;
|
|
32
34
|
getCancelKey(): string;
|
|
33
35
|
getModelSwitchStrategy(): "runtime" | "restart";
|
|
@@ -35,6 +37,7 @@ export declare class AntigravityBackend implements CliBackend {
|
|
|
35
37
|
probeCLIEnv(): Promise<{
|
|
36
38
|
version: string | undefined;
|
|
37
39
|
models: import("./types.js").ModelOption[];
|
|
40
|
+
currentModel: string | undefined;
|
|
38
41
|
}>;
|
|
39
42
|
getErrorPatterns(): ErrorPattern[];
|
|
40
43
|
getStartupDialogs(): StartupDialog[];
|
|
@@ -2,9 +2,10 @@ import { join } from "node:path";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { execFileSync } from "node:child_process";
|
|
4
4
|
import { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
5
|
-
import {
|
|
5
|
+
import { resolveBinary, shellQuote, warnIfModelMismatch } from "./types.js";
|
|
6
6
|
import { appendWithMarker } from "./marker-utils.js";
|
|
7
7
|
import { getAgendHome } from "../paths.js";
|
|
8
|
+
import { PIE_CLASS } from "../tui-glyphs.js";
|
|
8
9
|
/** Parse `agy models`, which may emit slugs or human-readable display names. */
|
|
9
10
|
export function parseAntigravityModelsOutput(output) {
|
|
10
11
|
const models = [];
|
|
@@ -34,14 +35,9 @@ export class AntigravityBackend {
|
|
|
34
35
|
if (!config.skipResume)
|
|
35
36
|
cmd += " --continue";
|
|
36
37
|
if (config.model) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
cmd += ` --model ${config.model.replace(/[^a-zA-Z0-9_./ ()-]/g, "")}`;
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
console.warn(`[agend] model "${config.model}" is not compatible with antigravity — skipping --model, using the CLI's default`);
|
|
44
|
-
}
|
|
38
|
+
warnIfModelMismatch("antigravity", config.model);
|
|
39
|
+
// agy may expose human-readable model names containing spaces/parens.
|
|
40
|
+
cmd += ` --model ${shellQuote(config.model)}`;
|
|
45
41
|
}
|
|
46
42
|
return cmd;
|
|
47
43
|
}
|
|
@@ -140,8 +136,10 @@ node -e "let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{t
|
|
|
140
136
|
}
|
|
141
137
|
getReadyPattern() {
|
|
142
138
|
// Startup/header: Gemini shortcut text. Daily prompts observed in the TUI
|
|
143
|
-
// are either "
|
|
144
|
-
|
|
139
|
+
// are either a pie context reading ("◑ 42%") on its own footer line, or a
|
|
140
|
+
// standalone ">" between separators. Pie branch is line-anchored so agent
|
|
141
|
+
// prose like "● 45% 完成" cannot false-ready the pane (● is in PIE_CLASS).
|
|
142
|
+
return new RegExp(`\\? for shortcuts|Gemini|^\\s*${PIE_CLASS}\\s*\\d+%|^>\\s*$`, "m");
|
|
145
143
|
}
|
|
146
144
|
getContextUsage() {
|
|
147
145
|
return null;
|
|
@@ -155,7 +153,11 @@ node -e "let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{t
|
|
|
155
153
|
return null;
|
|
156
154
|
}
|
|
157
155
|
}
|
|
158
|
-
|
|
156
|
+
// agy does not implement /quit — it treats it as a normal chat message.
|
|
157
|
+
// Verified with agy 1.1.8: two Ctrl+C presses exit the idle TUI cleanly.
|
|
158
|
+
getQuitCommand() { return null; }
|
|
159
|
+
getQuitKey() { return "C-c"; }
|
|
160
|
+
getQuitKeyPresses() { return 2; }
|
|
159
161
|
// agy has no summarizing /compact — "/clear" is the only manual context reset
|
|
160
162
|
// (full reset; agy also auto-summarizes at a token threshold).
|
|
161
163
|
getCompactCommand() { return "/clear"; }
|
|
@@ -179,7 +181,16 @@ node -e "let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{t
|
|
|
179
181
|
}
|
|
180
182
|
async probeCLIEnv() {
|
|
181
183
|
const { probeCliVersion } = await import("./types.js");
|
|
182
|
-
|
|
184
|
+
// agy stores the selected model in its own settings.json (the same file the
|
|
185
|
+
// statusline hook lives in), e.g. "model": "Gemini 3.5 Flash (Medium)".
|
|
186
|
+
let currentModel;
|
|
187
|
+
try {
|
|
188
|
+
const s = JSON.parse(readFileSync(join(homedir(), ".gemini", "antigravity-cli", "settings.json"), "utf-8"));
|
|
189
|
+
if (typeof s?.model === "string" && s.model.trim())
|
|
190
|
+
currentModel = s.model.trim();
|
|
191
|
+
}
|
|
192
|
+
catch { /* no settings / unreadable */ }
|
|
193
|
+
return { version: probeCliVersion(this.binaryPath), models: await this.listModels(), currentModel };
|
|
183
194
|
}
|
|
184
195
|
getErrorPatterns() {
|
|
185
196
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/backend/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChG,OAAO,EAAiF,
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/backend/antigravity.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,44 @@ export declare class ClaudeCodeBackend implements CliBackend {
|
|
|
7
7
|
constructor(instanceDir: string);
|
|
8
8
|
buildCommand(config: CliBackendConfig): string;
|
|
9
9
|
writeConfig(config: CliBackendConfig): void;
|
|
10
|
+
/**
|
|
11
|
+
* `❯` is the input box, which Claude Code renders persistently — it is on screen
|
|
12
|
+
* while the agent works, not only when it is waiting. So this marks "the TUI has
|
|
13
|
+
* finished starting up", not "the agent is idle"; `getBusyPattern()` is what
|
|
14
|
+
* separates those two. Startup dialogs are matched before this (see
|
|
15
|
+
* getStartupDialogs) because `❯ 1. Resume from summary` would satisfy it.
|
|
16
|
+
*
|
|
17
|
+
* `ok\s*$` used to be the second alternative here and has been removed. `ok` is
|
|
18
|
+
* what *AgEnD's own* statusline script prints (see writeStatusLineScript), so the
|
|
19
|
+
* pattern was matching a line this file writes — permanently true, and true for
|
|
20
|
+
* reasons that had nothing to do with the CLI's state.
|
|
21
|
+
*/
|
|
10
22
|
getReadyPattern(): RegExp;
|
|
23
|
+
/**
|
|
24
|
+
* The live spinner line, which is on screen only while generating. Captured from
|
|
25
|
+
* two running panes:
|
|
26
|
+
*
|
|
27
|
+
* working → `✢ Accomplishing… (11m 26s · ↓ 38.0k tokens)`
|
|
28
|
+
* idle → `✻ Worked for 6m 49s`
|
|
29
|
+
*
|
|
30
|
+
* Both panes also showed `❯` and the `ok` statusline, which is why neither of
|
|
31
|
+
* those can carry the distinction. The discriminator is the ellipsis followed by
|
|
32
|
+
* a parenthesised live elapsed counter; the completed line is past tense with no
|
|
33
|
+
* `…` and no counter. The verb and the glyph both rotate, so neither is matched.
|
|
34
|
+
*
|
|
35
|
+
* Deliberately narrow, because the cost is asymmetric. Missing the spinner just
|
|
36
|
+
* restores today's behaviour; matching prose that happens to sit on a *stable*
|
|
37
|
+
* pane would hold the instance in `working` forever — no auto-pause, no cancel
|
|
38
|
+
* button retirement, and eventually a bogus hang alert. So the line must start
|
|
39
|
+
* with a non-ASCII, non-letter glyph and carry a single word ending in `…`:
|
|
40
|
+
* `- Something… (5s)` and `I waited… (30s) for the build` are both rejected.
|
|
41
|
+
*
|
|
42
|
+
* Note when this actually decides anything: while the CLI really is generating,
|
|
43
|
+
* the elapsed counter ticks, the pane changes, and motion already reports
|
|
44
|
+
* `working`. The veto only bites on a *frozen* pane whose last frame still shows
|
|
45
|
+
* an in-progress spinner — which is exactly the hang this is meant to surface.
|
|
46
|
+
*/
|
|
47
|
+
getBusyPattern(): RegExp;
|
|
11
48
|
getContextUsage(): number | null;
|
|
12
49
|
getSessionId(): string | null;
|
|
13
50
|
getErrorPatterns(): ErrorPattern[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
-
import {
|
|
4
|
+
import { resolveBinary, shellQuote, validateModel, warnIfModelMismatch } from "./types.js";
|
|
5
5
|
export class ClaudeCodeBackend {
|
|
6
6
|
instanceDir;
|
|
7
7
|
binaryName = "claude";
|
|
@@ -28,12 +28,9 @@ export class ClaudeCodeBackend {
|
|
|
28
28
|
cmd += " --continue";
|
|
29
29
|
}
|
|
30
30
|
if (config.model) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
console.warn(`[agend] model "${config.model}" is not compatible with claude-code — skipping --model, using the CLI's default`);
|
|
36
|
-
}
|
|
31
|
+
const model = validateModel(config.model);
|
|
32
|
+
warnIfModelMismatch("claude-code", model);
|
|
33
|
+
cmd += ` --model ${model}`;
|
|
37
34
|
}
|
|
38
35
|
// Additive system prompt: append fleet instructions without overriding Claude's built-in prompt
|
|
39
36
|
const instrFile = join(this.instanceDir, "fleet-instructions.md");
|
|
@@ -67,8 +64,47 @@ export class ClaudeCodeBackend {
|
|
|
67
64
|
catch { /* best effort */ }
|
|
68
65
|
}
|
|
69
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* `❯` is the input box, which Claude Code renders persistently — it is on screen
|
|
69
|
+
* while the agent works, not only when it is waiting. So this marks "the TUI has
|
|
70
|
+
* finished starting up", not "the agent is idle"; `getBusyPattern()` is what
|
|
71
|
+
* separates those two. Startup dialogs are matched before this (see
|
|
72
|
+
* getStartupDialogs) because `❯ 1. Resume from summary` would satisfy it.
|
|
73
|
+
*
|
|
74
|
+
* `ok\s*$` used to be the second alternative here and has been removed. `ok` is
|
|
75
|
+
* what *AgEnD's own* statusline script prints (see writeStatusLineScript), so the
|
|
76
|
+
* pattern was matching a line this file writes — permanently true, and true for
|
|
77
|
+
* reasons that had nothing to do with the CLI's state.
|
|
78
|
+
*/
|
|
70
79
|
getReadyPattern() {
|
|
71
|
-
return
|
|
80
|
+
return /❯/;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The live spinner line, which is on screen only while generating. Captured from
|
|
84
|
+
* two running panes:
|
|
85
|
+
*
|
|
86
|
+
* working → `✢ Accomplishing… (11m 26s · ↓ 38.0k tokens)`
|
|
87
|
+
* idle → `✻ Worked for 6m 49s`
|
|
88
|
+
*
|
|
89
|
+
* Both panes also showed `❯` and the `ok` statusline, which is why neither of
|
|
90
|
+
* those can carry the distinction. The discriminator is the ellipsis followed by
|
|
91
|
+
* a parenthesised live elapsed counter; the completed line is past tense with no
|
|
92
|
+
* `…` and no counter. The verb and the glyph both rotate, so neither is matched.
|
|
93
|
+
*
|
|
94
|
+
* Deliberately narrow, because the cost is asymmetric. Missing the spinner just
|
|
95
|
+
* restores today's behaviour; matching prose that happens to sit on a *stable*
|
|
96
|
+
* pane would hold the instance in `working` forever — no auto-pause, no cancel
|
|
97
|
+
* button retirement, and eventually a bogus hang alert. So the line must start
|
|
98
|
+
* with a non-ASCII, non-letter glyph and carry a single word ending in `…`:
|
|
99
|
+
* `- Something… (5s)` and `I waited… (30s) for the build` are both rejected.
|
|
100
|
+
*
|
|
101
|
+
* Note when this actually decides anything: while the CLI really is generating,
|
|
102
|
+
* the elapsed counter ticks, the pane changes, and motion already reports
|
|
103
|
+
* `working`. The veto only bites on a *frozen* pane whose last frame still shows
|
|
104
|
+
* an in-progress spinner — which is exactly the hang this is meant to surface.
|
|
105
|
+
*/
|
|
106
|
+
getBusyPattern() {
|
|
107
|
+
return /^[ \t]*[^\x00-\x7F\p{L}\p{N}\s]\s+\p{L}+…\s*\(\d+[hms]\b/mu;
|
|
72
108
|
}
|
|
73
109
|
getContextUsage() {
|
|
74
110
|
try {
|
|
@@ -133,6 +169,9 @@ export class ClaudeCodeBackend {
|
|
|
133
169
|
{ id: "opus", label: "opus" },
|
|
134
170
|
{ id: "haiku", label: "haiku" },
|
|
135
171
|
{ id: "opusplan", label: "opusplan", description: "opus plans, sonnet executes" },
|
|
172
|
+
// Capitalised because that is the form verified to work with
|
|
173
|
+
// `claude --model Fable`; the lowercase alias is unconfirmed.
|
|
174
|
+
{ id: "Fable", label: "Fable", description: "Claude Fable 5" },
|
|
136
175
|
];
|
|
137
176
|
}
|
|
138
177
|
async probeCLIEnv() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/backend/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAqG,
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/backend/claude-code.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/codex.d.ts
CHANGED
|
@@ -3,7 +3,10 @@ export declare class CodexBackend implements CliBackend {
|
|
|
3
3
|
private instanceDir;
|
|
4
4
|
readonly binaryName = "codex";
|
|
5
5
|
private binaryPath;
|
|
6
|
+
private readonly sharedCodexHome;
|
|
7
|
+
private readonly isolatedCodexHome;
|
|
6
8
|
constructor(instanceDir: string);
|
|
9
|
+
supportsQueuedInput(): boolean;
|
|
7
10
|
buildCommand(config: CliBackendConfig): string;
|
|
8
11
|
writeConfig(config: CliBackendConfig): void;
|
|
9
12
|
/**
|
|
@@ -20,6 +23,19 @@ export declare class CodexBackend implements CliBackend {
|
|
|
20
23
|
*/
|
|
21
24
|
private enableContextStatusLine;
|
|
22
25
|
preTrust(workDir: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Preserve Codex login/session/cache behavior while isolating config.toml.
|
|
28
|
+
* Before this fix all instances shared CODEX_HOME, so sharing these runtime
|
|
29
|
+
* files is intentionally unchanged. Only config.toml (which contains MCP
|
|
30
|
+
* capabilities and AGEND_DECISIONS) becomes private to this instance.
|
|
31
|
+
*/
|
|
32
|
+
private prepareIsolatedHome;
|
|
33
|
+
/**
|
|
34
|
+
* One-time migration for installations polluted by the old global `codex
|
|
35
|
+
* mcp add` path. The lock protects separate fleet processes/upgrades, and
|
|
36
|
+
* atomic rename prevents readers from observing a truncated config.
|
|
37
|
+
*/
|
|
38
|
+
private cleanSharedConfig;
|
|
23
39
|
getReadyPattern(): RegExp;
|
|
24
40
|
getErrorPatterns(): ErrorPattern[];
|
|
25
41
|
getStartupDialogs(): StartupDialog[];
|
|
@@ -39,6 +55,7 @@ export declare class CodexBackend implements CliBackend {
|
|
|
39
55
|
probeCLIEnv(): Promise<{
|
|
40
56
|
version?: string;
|
|
41
57
|
models: ModelOption[];
|
|
58
|
+
currentModel?: string;
|
|
42
59
|
}>;
|
|
43
60
|
cleanup(config: CliBackendConfig): void;
|
|
44
61
|
}
|