@songsid/agend 2.1.0-beta.2 → 2.1.0-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 +2 -1
- package/dist/access-path.js +3 -3
- package/dist/access-path.js.map +1 -1
- package/dist/agent-endpoint.d.ts +8 -0
- package/dist/agent-endpoint.js +36 -8
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/backend/antigravity.js +3 -2
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/factory.js +5 -1
- package/dist/backend/factory.js.map +1 -1
- package/dist/backend/grok.d.ts +41 -0
- package/dist/backend/grok.js +256 -0
- package/dist/backend/grok.js.map +1 -0
- package/dist/backend/kiro.js +3 -2
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/types.d.ts +12 -2
- package/dist/backend/types.js +1 -0
- package/dist/backend/types.js.map +1 -1
- package/dist/classic-channel-manager.js +1 -1
- package/dist/cli.js +56 -6
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +50 -1
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/context-guardian.d.ts +2 -0
- package/dist/context-guardian.js +10 -2
- package/dist/context-guardian.js.map +1 -1
- package/dist/daemon-entry.js +2 -1
- package/dist/daemon-entry.js.map +1 -1
- package/dist/daemon.d.ts +51 -3
- package/dist/daemon.js +380 -36
- package/dist/daemon.js.map +1 -1
- package/dist/fleet-context.d.ts +2 -1
- package/dist/fleet-manager.d.ts +23 -5
- package/dist/fleet-manager.js +229 -123
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +1 -1
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +1 -0
- package/dist/instance-lifecycle.d.ts +6 -1
- package/dist/instance-lifecycle.js +46 -3
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/logger.d.ts +6 -0
- package/dist/logger.js +29 -10
- package/dist/logger.js.map +1 -1
- package/dist/outbound-handlers.d.ts +5 -0
- package/dist/outbound-handlers.js +68 -16
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +1 -0
- package/dist/outbound-schemas.js +1 -1
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/settings-api.d.ts +17 -2
- package/dist/settings-api.js +105 -8
- package/dist/settings-api.js.map +1 -1
- package/dist/setup-wizard.js +8 -0
- package/dist/setup-wizard.js.map +1 -1
- package/dist/statusline-watcher.d.ts +1 -1
- package/dist/statusline-watcher.js +3 -2
- package/dist/statusline-watcher.js.map +1 -1
- package/dist/tmux-manager.d.ts +3 -1
- package/dist/tmux-manager.js +9 -0
- package/dist/tmux-manager.js.map +1 -1
- package/dist/topic-archiver.d.ts +1 -1
- package/dist/topic-commands.d.ts +14 -1
- package/dist/topic-commands.js +96 -25
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-monitor.js +2 -0
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/types.d.ts +18 -1
- package/dist/ui/dashboard.html +2 -2
- package/dist/ui/settings.html +251 -40
- package/dist/view-api.d.ts +1 -1
- package/dist/web-api.d.ts +2 -1
- package/dist/web-api.js +24 -15
- package/dist/web-api.js.map +1 -1
- package/package.json +2 -1
package/dist/backend/types.d.ts
CHANGED
|
@@ -92,8 +92,18 @@ export interface CliBackend {
|
|
|
92
92
|
preTrust?(workingDirectory: string): void;
|
|
93
93
|
/** Resolve working directory (e.g. create symlink to avoid hidden paths). Returns resolved path. */
|
|
94
94
|
resolveWorkingDirectory?(workingDirectory: string, instanceName?: string): string;
|
|
95
|
-
/**
|
|
96
|
-
|
|
95
|
+
/**
|
|
96
|
+
* Slash/text command to gracefully quit the CLI (e.g. "/exit", "/quit"),
|
|
97
|
+
* typed then followed by Enter. Return null when the CLI has no quit command
|
|
98
|
+
* and quits via a key chord instead — implement getQuitKey() in that case.
|
|
99
|
+
*/
|
|
100
|
+
getQuitCommand(): string | null;
|
|
101
|
+
/**
|
|
102
|
+
* The tmux key chord that quits the CLI, for backends whose quit is a keypress
|
|
103
|
+
* rather than a typed command (e.g. grok Ctrl+Q). Consulted only when
|
|
104
|
+
* getQuitCommand() returns null. Values are tmux send-keys names (e.g. "C-q").
|
|
105
|
+
*/
|
|
106
|
+
getQuitKey?(): string;
|
|
97
107
|
/**
|
|
98
108
|
* In-session command to compact/reset the conversation context. Most CLIs use
|
|
99
109
|
* "/compact"; some (e.g. Codex) use "/compact" too, OpenCode uses "/compact".
|
package/dist/backend/types.js
CHANGED
|
@@ -34,6 +34,7 @@ const BACKEND_MODEL_PATTERNS = {
|
|
|
34
34
|
"gemini-cli": /^gemini/i,
|
|
35
35
|
"opencode": /./, // opencode accepts anything (provider-dependent)
|
|
36
36
|
"antigravity": / /, // agy models always contain spaces (display names like "Gemini 3.5 Flash (High)")
|
|
37
|
+
"grok": /^grok/i, // grok-4.5, grok-4.3, grok-code, grok-build-0.1
|
|
37
38
|
};
|
|
38
39
|
/** Check if a model name is compatible with the given backend. */
|
|
39
40
|
export function isModelCompatible(backendName, model) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/backend/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/backend/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAqJlD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,wBAAwB;IACvC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAC5C,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,aAAa,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0GAA0G;AAC1G,MAAM,sBAAsB,GAA2B;IACrD,aAAa,EAAE,4CAA4C;IAC3D,UAAU,EAAE,8BAA8B;IAC1C,OAAO,EAAE,wBAAwB;IACjC,YAAY,EAAE,UAAU;IACxB,UAAU,EAAE,GAAG,EAAG,iDAAiD;IACnE,aAAa,EAAE,GAAG,EAAG,kFAAkF;IACvG,MAAM,EAAE,QAAQ,EAAG,gDAAgD;CACpE,CAAC;AAEF,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,KAAa;IAClE,MAAM,OAAO,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;IAC5D,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,KAAa;IACpE,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,kBAAkB,KAAK,uCAAuC,WAAW,0BAA0B,CAAC,CAAC;IACpH,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC"}
|
|
@@ -4,7 +4,7 @@ import yaml from "js-yaml";
|
|
|
4
4
|
import { getAgendHome } from "./paths.js";
|
|
5
5
|
import { sanitizeInstanceName } from "./topic-commands.js";
|
|
6
6
|
const YAML_HEADER = `# ClassicBot Configuration
|
|
7
|
-
# Available backends: claude-code, gemini-cli, codex, opencode, kiro-cli
|
|
7
|
+
# Available backends: claude-code, gemini-cli, codex, opencode, kiro-cli, antigravity, grok
|
|
8
8
|
`;
|
|
9
9
|
/**
|
|
10
10
|
* Derive instance name from channel name + last 4 digits of channelId.
|
package/dist/cli.js
CHANGED
|
@@ -1895,6 +1895,8 @@ function getInstanceStatusStandalone(name) {
|
|
|
1895
1895
|
const pid = parseInt(readFileSync(pidPath, "utf-8").trim(), 10);
|
|
1896
1896
|
try {
|
|
1897
1897
|
process.kill(pid, 0);
|
|
1898
|
+
if (existsSync(join(DATA_DIR, "instances", name, "paused-state.json")))
|
|
1899
|
+
return "paused";
|
|
1898
1900
|
return "running";
|
|
1899
1901
|
}
|
|
1900
1902
|
catch {
|
|
@@ -1936,6 +1938,7 @@ function formatTimeSince(isoStr) {
|
|
|
1936
1938
|
* kiro classic "8% !>" / TUI "◔ 1%" / bracket "[8%]" / prompt "8% ❯"
|
|
1937
1939
|
* codex "Context N% left" (remaining → 100-N) or "Context N% used"
|
|
1938
1940
|
* opencode "1.2K (6%)"
|
|
1941
|
+
* grok "12K / 500K" (used tokens / context window)
|
|
1939
1942
|
* Duplicated (not imported) so this CLI entry point stays free of the daemon's
|
|
1940
1943
|
* dependency graph. All returned values are context USED (low % = fresh).
|
|
1941
1944
|
*/
|
|
@@ -1946,6 +1949,18 @@ const defaultParser = (output) => {
|
|
|
1946
1949
|
const left = line.match(/Context\s+(\d+)%\s+left/i);
|
|
1947
1950
|
if (left)
|
|
1948
1951
|
return 100 - parseInt(left[1], 10);
|
|
1952
|
+
const ratio = line.match(/(\d+\.?\d*[KkMm]?)\s*\/\s*(\d+\.?\d*[KkMm]?)/);
|
|
1953
|
+
if (ratio) {
|
|
1954
|
+
const tokenCount = (value) => {
|
|
1955
|
+
const suffix = value.at(-1)?.toLowerCase();
|
|
1956
|
+
const multiplier = suffix === "k" ? 1_000 : suffix === "m" ? 1_000_000 : 1;
|
|
1957
|
+
return parseFloat(value) * multiplier;
|
|
1958
|
+
};
|
|
1959
|
+
const used = tokenCount(ratio[1]);
|
|
1960
|
+
const total = tokenCount(ratio[2]);
|
|
1961
|
+
if (Number.isFinite(used) && Number.isFinite(total) && total > 0)
|
|
1962
|
+
return used / total * 100;
|
|
1963
|
+
}
|
|
1949
1964
|
const m = line.match(/(\d+)%.*[!❯>]/)
|
|
1950
1965
|
|| line.match(/◔\s*(\d+)%/)
|
|
1951
1966
|
|| line.match(/\[(\d+)%\]/)
|
|
@@ -2103,8 +2118,13 @@ async function lsAction(opts) {
|
|
|
2103
2118
|
const apiData = await resp.json();
|
|
2104
2119
|
for (const inst of apiData.instances ?? []) {
|
|
2105
2120
|
const row = rows.find(r => r.name === inst.name);
|
|
2106
|
-
if (row)
|
|
2121
|
+
if (row) {
|
|
2107
2122
|
row.idle = inst.idle;
|
|
2123
|
+
if (inst.status)
|
|
2124
|
+
row.status = inst.status;
|
|
2125
|
+
if (inst.state)
|
|
2126
|
+
row.state = inst.state;
|
|
2127
|
+
}
|
|
2108
2128
|
}
|
|
2109
2129
|
}
|
|
2110
2130
|
catch { /* fleet not running or API unreachable */ }
|
|
@@ -2112,9 +2132,38 @@ async function lsAction(opts) {
|
|
|
2112
2132
|
console.log(JSON.stringify(rows, null, 2));
|
|
2113
2133
|
return;
|
|
2114
2134
|
}
|
|
2115
|
-
// Status icon
|
|
2116
|
-
const statusIcon = (s, idle) =>
|
|
2117
|
-
|
|
2135
|
+
// Status icon — prefer tri-state 'state' field, fall back to idle boolean
|
|
2136
|
+
const statusIcon = (s, idle, state) => {
|
|
2137
|
+
if (state === "stuck")
|
|
2138
|
+
return "\x1b[31m●\x1b[0m";
|
|
2139
|
+
if (state === "paused" || s === "paused")
|
|
2140
|
+
return "\x1b[33m⏸\x1b[0m";
|
|
2141
|
+
if (state === "working")
|
|
2142
|
+
return "\x1b[34m●\x1b[0m";
|
|
2143
|
+
if (state === "idle")
|
|
2144
|
+
return "\x1b[32m●\x1b[0m";
|
|
2145
|
+
// Fallback for when API is unreachable
|
|
2146
|
+
if (s === "running")
|
|
2147
|
+
return idle === false ? "\x1b[34m●\x1b[0m" : "\x1b[32m●\x1b[0m";
|
|
2148
|
+
if (s === "crashed")
|
|
2149
|
+
return "\x1b[31m●\x1b[0m";
|
|
2150
|
+
return "\x1b[90m○\x1b[0m";
|
|
2151
|
+
};
|
|
2152
|
+
const statusLabel = (s, idle, state) => {
|
|
2153
|
+
if (state === "stuck")
|
|
2154
|
+
return "Stuck";
|
|
2155
|
+
if (state === "paused" || s === "paused")
|
|
2156
|
+
return "Paused";
|
|
2157
|
+
if (state === "working")
|
|
2158
|
+
return "Working";
|
|
2159
|
+
if (state === "idle")
|
|
2160
|
+
return "Idle";
|
|
2161
|
+
if (s === "running")
|
|
2162
|
+
return idle === false ? "Busy" : "Idle";
|
|
2163
|
+
if (s === "crashed")
|
|
2164
|
+
return "Crashed";
|
|
2165
|
+
return "Stopped";
|
|
2166
|
+
};
|
|
2118
2167
|
/** Get display width accounting for fullwidth (CJK) characters */
|
|
2119
2168
|
const displayWidth = (s) => {
|
|
2120
2169
|
let w = 0;
|
|
@@ -2148,7 +2197,7 @@ async function lsAction(opts) {
|
|
|
2148
2197
|
const actStr = r.lastActivity ?? "-";
|
|
2149
2198
|
console.log(padDisplay(r.name, nameW) +
|
|
2150
2199
|
r.backend.padEnd(backendW) +
|
|
2151
|
-
statusIcon(r.status, r.idle) + " " + statusLabel(r.status, r.idle).padEnd(statusW - 2) +
|
|
2200
|
+
statusIcon(r.status, r.idle, r.state) + " " + statusLabel(r.status, r.idle, r.state).padEnd(statusW - 2) +
|
|
2152
2201
|
padDisplay(teamStr, teamW) +
|
|
2153
2202
|
r.source.padEnd(srcW) +
|
|
2154
2203
|
ctxStr.padEnd(ctxW) +
|
|
@@ -2158,9 +2207,10 @@ async function lsAction(opts) {
|
|
|
2158
2207
|
// System memory footer
|
|
2159
2208
|
const totalMemMb = rows.reduce((sum, r) => sum + (r.memMb ?? 0), 0);
|
|
2160
2209
|
const runningCount = rows.filter(r => r.status === "running").length;
|
|
2210
|
+
const pausedCount = rows.filter(r => r.status === "paused").length;
|
|
2161
2211
|
const totalGB = totalmem() / (1024 ** 3);
|
|
2162
2212
|
const usedGB = (totalmem() - freemem()) / (1024 ** 3);
|
|
2163
|
-
console.log(`\nInstances: ${runningCount} running | Fleet Mem: ${(totalMemMb / 1024).toFixed(1)} GB | System Memory: ${usedGB.toFixed(1)} / ${totalGB.toFixed(1)} GB`);
|
|
2213
|
+
console.log(`\nInstances: ${runningCount} running, ${pausedCount} paused | Fleet Mem: ${(totalMemMb / 1024).toFixed(1)} GB | System Memory: ${usedGB.toFixed(1)} / ${totalGB.toFixed(1)} GB`);
|
|
2164
2214
|
}
|
|
2165
2215
|
program
|
|
2166
2216
|
.command("ls")
|