@songsid/agend 2.3.4-beta.5 → 2.3.4-beta.7
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/dist/agend-home.d.ts +13 -0
- package/dist/agend-home.js +42 -0
- package/dist/agend-home.js.map +1 -1
- package/dist/auth-api.js +2 -2
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/claude-code.d.ts +3 -0
- package/dist/backend/claude-code.js +88 -3
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/kiro-identity.d.ts +2 -0
- package/dist/backend/kiro-identity.js +13 -6
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro.js +18 -3
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend-availability.d.ts +6 -0
- package/dist/backend-availability.js +13 -5
- package/dist/backend-availability.js.map +1 -1
- package/dist/channel/mcp-tools.js +1 -1
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/cli.js +4 -6
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +48 -8
- package/dist/daemon.js.map +1 -1
- package/dist/fleet-manager.d.ts +30 -7
- package/dist/fleet-manager.js +182 -66
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-yaml-patch.d.ts +3 -0
- package/dist/fleet-yaml-patch.js +103 -0
- package/dist/fleet-yaml-patch.js.map +1 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +2 -0
- package/dist/instance-lifecycle.js +12 -4
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/kiro-resume-summary.d.ts +37 -0
- package/dist/kiro-resume-summary.js +85 -0
- package/dist/kiro-resume-summary.js.map +1 -0
- package/dist/locale.js +8 -0
- package/dist/locale.js.map +1 -1
- package/dist/login-controller.js +9 -1
- package/dist/login-controller.js.map +1 -1
- package/dist/package-preimage.js +27 -2
- package/dist/package-preimage.js.map +1 -1
- package/dist/reply-buttons-controller.js +10 -0
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/stall-reporter.d.ts +21 -0
- package/dist/stall-reporter.js +82 -0
- package/dist/stall-reporter.js.map +1 -0
- package/dist/tmux-control.d.ts +2 -2
- package/dist/tmux-control.js +4 -2
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.d.ts +6 -3
- package/dist/tmux-exec-helper.js +115 -53
- package/dist/tmux-exec-helper.js.map +1 -1
- package/dist/tunnel/cloudflared-install.d.ts +4 -0
- package/dist/tunnel/cloudflared-install.js +20 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +8 -1
- package/dist/tunnel/cloudflared.js +34 -6
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/lease.d.ts +3 -3
- package/dist/tunnel/lease.js +23 -19
- package/dist/tunnel/lease.js.map +1 -1
- package/dist/tunnel/manager.js +6 -7
- package/dist/tunnel/manager.js.map +1 -1
- package/dist/ui/shared/app.css +16 -1
- package/dist/ui/shared/panel-view.js +266 -17
- package/dist/ui/shared/view-strings.js +26 -0
- package/dist/unattended-install.d.ts +1 -1
- package/dist/unattended-install.js +19 -5
- package/dist/unattended-install.js.map +1 -1
- package/dist/view-api.d.ts +15 -0
- package/dist/view-api.js +94 -33
- package/dist/view-api.js.map +1 -1
- package/dist/web-login.d.ts +4 -3
- package/dist/web-login.js +23 -14
- package/dist/web-login.js.map +1 -1
- package/dist/web-session.d.ts +5 -0
- package/dist/web-session.js +20 -8
- package/dist/web-session.js.map +1 -1
- package/launcher/agend-install.cjs +16 -2
- package/package.json +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Leaf-edit fleet.yaml the way Settings does: patch the raw YAML document, keep
|
|
3
|
+
* comments and a legacy `channel:`, then fsync+rename after the result still
|
|
4
|
+
* loads. CLI `topic bind/unbind` used to `yaml.dump` the defaults-expanded
|
|
5
|
+
* config (#1490 row 54).
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
8
|
+
import { isScalar, parseDocument } from "yaml";
|
|
9
|
+
import { atomicWriteFileSync } from "./atomic-write.js";
|
|
10
|
+
import { loadFleetConfig } from "./config.js";
|
|
11
|
+
import { validateFleetConfig } from "./config-validator.js";
|
|
12
|
+
import { changedOutside, detachForWrite } from "./yaml-shared-nodes.js";
|
|
13
|
+
function sameLeaf(before, after) {
|
|
14
|
+
if (Object.is(before, after))
|
|
15
|
+
return true;
|
|
16
|
+
if (before === undefined && after === undefined)
|
|
17
|
+
return true;
|
|
18
|
+
try {
|
|
19
|
+
return JSON.stringify(before) === JSON.stringify(after);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function leafValue(node) {
|
|
26
|
+
return isScalar(node) ? node.value : node;
|
|
27
|
+
}
|
|
28
|
+
function savedFleetYamlProblem(currentPath, candidate) {
|
|
29
|
+
let after;
|
|
30
|
+
try {
|
|
31
|
+
after = validateFleetConfig(loadFleetConfig(candidate));
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
return `Refusing to save fleet.yaml: the result would not load (${err.message})`;
|
|
35
|
+
}
|
|
36
|
+
let had = new Set();
|
|
37
|
+
try {
|
|
38
|
+
if (existsSync(currentPath)) {
|
|
39
|
+
had = new Set(validateFleetConfig(loadFleetConfig(currentPath)).errors.map(e => `${e.path}\u0000${e.message}`));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch { /* the current file does not load: every error of the result counts as new */ }
|
|
43
|
+
const introduced = after.errors.filter(e => !had.has(`${e.path}\u0000${e.message}`));
|
|
44
|
+
return introduced.length
|
|
45
|
+
? `Refusing to save fleet.yaml: it would be invalid (${introduced.map(e => `${e.path}: ${e.message}`).join("; ")})`
|
|
46
|
+
: null;
|
|
47
|
+
}
|
|
48
|
+
/** Apply explicit leaf patches to the on-disk YAML document. No-op when nothing changes. */
|
|
49
|
+
export function applyFleetYamlPatches(configPath, patches) {
|
|
50
|
+
if (!existsSync(configPath))
|
|
51
|
+
throw new Error(`fleet.yaml not found: ${configPath}`);
|
|
52
|
+
const source = readFileSync(configPath, "utf-8");
|
|
53
|
+
const document = parseDocument(source, { keepSourceTokens: true });
|
|
54
|
+
if (document.errors.length > 0) {
|
|
55
|
+
throw new Error(`Refusing to overwrite invalid fleet.yaml: ${document.errors[0].message}`);
|
|
56
|
+
}
|
|
57
|
+
// #2208: snapshot aliases expanded, unshare the place written, then refuse if
|
|
58
|
+
// anything else changed (a shared node the write still went through).
|
|
59
|
+
const fileBefore = document.toJS({ maxAliasCount: -1 });
|
|
60
|
+
const writes = [];
|
|
61
|
+
let changed = false;
|
|
62
|
+
for (const patch of patches) {
|
|
63
|
+
if (patch.remove) {
|
|
64
|
+
if (!document.hasIn(patch.path))
|
|
65
|
+
continue;
|
|
66
|
+
detachForWrite(document, patch.path);
|
|
67
|
+
writes.push([...patch.path]);
|
|
68
|
+
document.deleteIn(patch.path);
|
|
69
|
+
changed = true;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const before = leafValue(document.getIn(patch.path, true));
|
|
73
|
+
if (sameLeaf(before, patch.value))
|
|
74
|
+
continue;
|
|
75
|
+
detachForWrite(document, patch.path);
|
|
76
|
+
writes.push([...patch.path]);
|
|
77
|
+
const currentNode = document.getIn(patch.path, true);
|
|
78
|
+
if (isScalar(currentNode) && (patch.value === null || typeof patch.value !== "object")) {
|
|
79
|
+
currentNode.value = patch.value;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
document.setIn(patch.path, patch.value !== null && typeof patch.value === "object"
|
|
83
|
+
? document.createNode(patch.value)
|
|
84
|
+
: patch.value);
|
|
85
|
+
}
|
|
86
|
+
changed = true;
|
|
87
|
+
}
|
|
88
|
+
if (!changed)
|
|
89
|
+
return;
|
|
90
|
+
const stray = changedOutside(fileBefore, document.toJS({ maxAliasCount: -1 }), writes);
|
|
91
|
+
if (stray) {
|
|
92
|
+
throw new Error(`Refusing to save fleet.yaml: this change would also change ${stray}, which shares a value with what it edits. Give each its own value in fleet.yaml.`);
|
|
93
|
+
}
|
|
94
|
+
atomicWriteFileSync(configPath, String(document), {
|
|
95
|
+
mode: statSync(configPath).mode,
|
|
96
|
+
beforeRename: (tempPath) => {
|
|
97
|
+
const refusal = savedFleetYamlProblem(configPath, tempPath);
|
|
98
|
+
if (refusal)
|
|
99
|
+
throw new Error(refusal);
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=fleet-yaml-patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-yaml-patch.js","sourceRoot":"","sources":["../src/fleet-yaml-patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ capability (cheap/fast vs deep reasoning), or the backend needs one to behave
|
|
|
25
25
|
| codex | account default | |
|
|
26
26
|
| grok | account default | |
|
|
27
27
|
| antigravity | account default | |
|
|
28
|
+
| muse | account default | `list_models` reads the provider catalog muse caches on disk (no models subcommand) |
|
|
28
29
|
| opencode | provider default | ids are **`provider/model`**, as `opencode models` prints them |
|
|
29
30
|
|
|
30
31
|
## Discover real names
|
|
@@ -53,6 +54,7 @@ Underlying commands, if you need them by hand:
|
|
|
53
54
|
| antigravity | `agy models` |
|
|
54
55
|
| codex | `codex debug models` (with its CODEX_HOME set) — refreshes `models_cache.json` when it is older than a few minutes |
|
|
55
56
|
| claude-code | fixed alias set (no command) |
|
|
57
|
+
| muse | none (no models subcommand) — use `list_models`; it reads muse's on-disk `model-catalog/<provider>__<profile>.json` |
|
|
56
58
|
|
|
57
59
|
## Setting one on create_instance
|
|
58
60
|
|
|
@@ -12,7 +12,7 @@ import { getAgendHome, ensureWorkspaceGit } from "./paths.js";
|
|
|
12
12
|
import { DEFAULT_INSTANCE_CONFIG, getEffectiveInstanceDefaults, getTmuxSession, newInstanceKiroUi } from "./config.js";
|
|
13
13
|
import { readStatuslineModel, uniqueInstanceName } from "./topic-commands.js";
|
|
14
14
|
import { sanitizeInstanceName } from "./instance-names.js";
|
|
15
|
-
import { isModelCompatible } from "./backend/types.js";
|
|
15
|
+
import { isModelCompatible, noteResolvedBinary } from "./backend/types.js";
|
|
16
16
|
import { safeHandler } from "./safe-async.js";
|
|
17
17
|
import { t } from "./locale.js";
|
|
18
18
|
import { interactionCategory } from "./interaction-observation.js";
|
|
@@ -1460,10 +1460,18 @@ export class InstanceLifecycle {
|
|
|
1460
1460
|
this.ctx.notifyInstanceTopic(name, t("inst.backend_removed", name, backendName, REMOVED_BACKENDS[backendName].replacement));
|
|
1461
1461
|
return;
|
|
1462
1462
|
}
|
|
1463
|
-
// Verify backend binary is in PATH before spawning
|
|
1463
|
+
// Verify backend binary is in PATH before spawning. Off-loop resolve pins a
|
|
1464
|
+
// hint so createBackend's resolveBinary does not run synchronous `which`
|
|
1465
|
+
// (#1490 row 67). Missing still only logs; start continues.
|
|
1464
1466
|
const installation = BACKEND_INSTALLATION_INFO[backendName];
|
|
1465
|
-
if (installation
|
|
1466
|
-
|
|
1467
|
+
if (installation) {
|
|
1468
|
+
const { resolveBackendBinary } = await import("./backend-availability.js");
|
|
1469
|
+
const path = await resolveBackendBinary(backendName);
|
|
1470
|
+
noteResolvedBinary(installation.binary, path ?? installation.binary);
|
|
1471
|
+
check();
|
|
1472
|
+
if (!path) {
|
|
1473
|
+
this.ctx.logger.error({ binary: installation.binary, backend: backendName, instance: name }, `Backend binary "${installation.binary}" not found in PATH`);
|
|
1474
|
+
}
|
|
1467
1475
|
}
|
|
1468
1476
|
// claude-code refuses --dangerously-skip-permissions as root — fail fast
|
|
1469
1477
|
// Unless IS_SANDBOX=1 is set (recognized sandbox environment)
|