@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.
Files changed (79) hide show
  1. package/dist/agend-home.d.ts +13 -0
  2. package/dist/agend-home.js +42 -0
  3. package/dist/agend-home.js.map +1 -1
  4. package/dist/auth-api.js +2 -2
  5. package/dist/auth-api.js.map +1 -1
  6. package/dist/backend/claude-code.d.ts +3 -0
  7. package/dist/backend/claude-code.js +88 -3
  8. package/dist/backend/claude-code.js.map +1 -1
  9. package/dist/backend/kiro-identity.d.ts +2 -0
  10. package/dist/backend/kiro-identity.js +13 -6
  11. package/dist/backend/kiro-identity.js.map +1 -1
  12. package/dist/backend/kiro.js +18 -3
  13. package/dist/backend/kiro.js.map +1 -1
  14. package/dist/backend-availability.d.ts +6 -0
  15. package/dist/backend-availability.js +13 -5
  16. package/dist/backend-availability.js.map +1 -1
  17. package/dist/channel/mcp-tools.js +1 -1
  18. package/dist/channel/mcp-tools.js.map +1 -1
  19. package/dist/cli.js +4 -6
  20. package/dist/cli.js.map +1 -1
  21. package/dist/daemon.js +48 -8
  22. package/dist/daemon.js.map +1 -1
  23. package/dist/fleet-manager.d.ts +30 -7
  24. package/dist/fleet-manager.js +182 -66
  25. package/dist/fleet-manager.js.map +1 -1
  26. package/dist/fleet-yaml-patch.d.ts +3 -0
  27. package/dist/fleet-yaml-patch.js +103 -0
  28. package/dist/fleet-yaml-patch.js.map +1 -0
  29. package/dist/general-knowledge/skills/model-discovery/SKILL.md +2 -0
  30. package/dist/instance-lifecycle.js +12 -4
  31. package/dist/instance-lifecycle.js.map +1 -1
  32. package/dist/kiro-resume-summary.d.ts +37 -0
  33. package/dist/kiro-resume-summary.js +85 -0
  34. package/dist/kiro-resume-summary.js.map +1 -0
  35. package/dist/locale.js +8 -0
  36. package/dist/locale.js.map +1 -1
  37. package/dist/login-controller.js +9 -1
  38. package/dist/login-controller.js.map +1 -1
  39. package/dist/package-preimage.js +27 -2
  40. package/dist/package-preimage.js.map +1 -1
  41. package/dist/reply-buttons-controller.js +10 -0
  42. package/dist/reply-buttons-controller.js.map +1 -1
  43. package/dist/stall-reporter.d.ts +21 -0
  44. package/dist/stall-reporter.js +82 -0
  45. package/dist/stall-reporter.js.map +1 -0
  46. package/dist/tmux-control.d.ts +2 -2
  47. package/dist/tmux-control.js +4 -2
  48. package/dist/tmux-control.js.map +1 -1
  49. package/dist/tmux-exec-helper.d.ts +6 -3
  50. package/dist/tmux-exec-helper.js +115 -53
  51. package/dist/tmux-exec-helper.js.map +1 -1
  52. package/dist/tunnel/cloudflared-install.d.ts +4 -0
  53. package/dist/tunnel/cloudflared-install.js +20 -1
  54. package/dist/tunnel/cloudflared-install.js.map +1 -1
  55. package/dist/tunnel/cloudflared.d.ts +8 -1
  56. package/dist/tunnel/cloudflared.js +34 -6
  57. package/dist/tunnel/cloudflared.js.map +1 -1
  58. package/dist/tunnel/lease.d.ts +3 -3
  59. package/dist/tunnel/lease.js +23 -19
  60. package/dist/tunnel/lease.js.map +1 -1
  61. package/dist/tunnel/manager.js +6 -7
  62. package/dist/tunnel/manager.js.map +1 -1
  63. package/dist/ui/shared/app.css +16 -1
  64. package/dist/ui/shared/panel-view.js +266 -17
  65. package/dist/ui/shared/view-strings.js +26 -0
  66. package/dist/unattended-install.d.ts +1 -1
  67. package/dist/unattended-install.js +19 -5
  68. package/dist/unattended-install.js.map +1 -1
  69. package/dist/view-api.d.ts +15 -0
  70. package/dist/view-api.js +94 -33
  71. package/dist/view-api.js.map +1 -1
  72. package/dist/web-login.d.ts +4 -3
  73. package/dist/web-login.js +23 -14
  74. package/dist/web-login.js.map +1 -1
  75. package/dist/web-session.d.ts +5 -0
  76. package/dist/web-session.js +20 -8
  77. package/dist/web-session.js.map +1 -1
  78. package/launcher/agend-install.cjs +16 -2
  79. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import type { RawConfigPatch } from "./settings-api.js";
2
+ /** Apply explicit leaf patches to the on-disk YAML document. No-op when nothing changes. */
3
+ export declare function applyFleetYamlPatches(configPath: string, patches: RawConfigPatch[]): void;
@@ -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 && !checkBinaryInstalled(installation.binary)) {
1466
- this.ctx.logger.error({ binary: installation.binary, backend: backendName, instance: name }, `Backend binary "${installation.binary}" not found in PATH`);
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)