@songsid/agend 2.2.0-beta.1 → 2.2.0-beta.2

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 (172) hide show
  1. package/README.md +1 -1
  2. package/README.zh-TW.md +1 -1
  3. package/dist/agent-cli-instructions.md +10 -7
  4. package/dist/agent-endpoint.js +21 -9
  5. package/dist/agent-endpoint.js.map +1 -1
  6. package/dist/agent-whats-new.d.ts +47 -0
  7. package/dist/agent-whats-new.js +141 -0
  8. package/dist/agent-whats-new.js.map +1 -0
  9. package/dist/auth-api.d.ts +2 -2
  10. package/dist/auth-api.js +2 -2
  11. package/dist/auth-api.js.map +1 -1
  12. package/dist/backend/kiro-engine-ledger.d.ts +5 -0
  13. package/dist/backend/kiro-engine-ledger.js +20 -0
  14. package/dist/backend/kiro-engine-ledger.js.map +1 -1
  15. package/dist/backend/kiro-identity.d.ts +6 -0
  16. package/dist/backend/kiro-identity.js +19 -5
  17. package/dist/backend/kiro-identity.js.map +1 -1
  18. package/dist/backend/kiro.d.ts +14 -2
  19. package/dist/backend/kiro.js +84 -9
  20. package/dist/backend/kiro.js.map +1 -1
  21. package/dist/backend/types.d.ts +4 -2
  22. package/dist/backend/types.js.map +1 -1
  23. package/dist/channel/adapters/discord.d.ts +11 -1
  24. package/dist/channel/adapters/discord.js +23 -1
  25. package/dist/channel/adapters/discord.js.map +1 -1
  26. package/dist/channel/adapters/telegram.d.ts +9 -1
  27. package/dist/channel/adapters/telegram.js +22 -2
  28. package/dist/channel/adapters/telegram.js.map +1 -1
  29. package/dist/channel/mcp-server.js +9 -1
  30. package/dist/channel/mcp-server.js.map +1 -1
  31. package/dist/channel/mcp-tools.d.ts +11 -0
  32. package/dist/channel/mcp-tools.js +23 -12
  33. package/dist/channel/mcp-tools.js.map +1 -1
  34. package/dist/channel/tool-router.js +7 -2
  35. package/dist/channel/tool-router.js.map +1 -1
  36. package/dist/channel/types.d.ts +11 -1
  37. package/dist/cli.js +55 -16
  38. package/dist/cli.js.map +1 -1
  39. package/dist/command-table.js +1 -1
  40. package/dist/command-table.js.map +1 -1
  41. package/dist/config-validator.js +48 -0
  42. package/dist/config-validator.js.map +1 -1
  43. package/dist/cross-instance-envelope.d.ts +15 -2
  44. package/dist/cross-instance-envelope.js +27 -5
  45. package/dist/cross-instance-envelope.js.map +1 -1
  46. package/dist/daemon.d.ts +36 -0
  47. package/dist/daemon.js +157 -6
  48. package/dist/daemon.js.map +1 -1
  49. package/dist/delivery-outbox.d.ts +6 -0
  50. package/dist/delivery-outbox.js.map +1 -1
  51. package/dist/fleet-manager.d.ts +41 -0
  52. package/dist/fleet-manager.js +218 -5
  53. package/dist/fleet-manager.js.map +1 -1
  54. package/dist/general-knowledge/skills/backend-providers/SKILL.md +1 -1
  55. package/dist/general-knowledge/skills/credential-profiles/SKILL.md +9 -6
  56. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +11 -2
  57. package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +8 -8
  58. package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -5
  59. package/dist/general-knowledge/skills/fleet-health/SKILL.md +4 -4
  60. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +13 -13
  61. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -2
  62. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +6 -0
  63. package/dist/general-knowledge/skills/model-discovery/SKILL.md +9 -9
  64. package/dist/general-knowledge/skills/multi-channel/SKILL.md +8 -2
  65. package/dist/general-knowledge/skills/scheduling/SKILL.md +5 -3
  66. package/dist/general-knowledge/skills/session-management/SKILL.md +6 -5
  67. package/dist/general-knowledge/skills/tui-effort/SKILL.md +2 -2
  68. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +4 -3
  69. package/dist/general-knowledge/steering/core-rules.md +8 -7
  70. package/dist/instance-avatar.d.ts +36 -0
  71. package/dist/instance-avatar.js +57 -0
  72. package/dist/instance-avatar.js.map +1 -0
  73. package/dist/instance-config-impact.js +5 -0
  74. package/dist/instance-config-impact.js.map +1 -1
  75. package/dist/instance-lifecycle.d.ts +4 -0
  76. package/dist/instance-lifecycle.js +3 -1
  77. package/dist/instance-lifecycle.js.map +1 -1
  78. package/dist/instructions.d.ts +2 -0
  79. package/dist/instructions.js +10 -7
  80. package/dist/instructions.js.map +1 -1
  81. package/dist/locale.js +32 -26
  82. package/dist/locale.js.map +1 -1
  83. package/dist/next-steps.js +1 -1
  84. package/dist/next-steps.js.map +1 -1
  85. package/dist/outbound-handlers.js +7 -4
  86. package/dist/outbound-handlers.js.map +1 -1
  87. package/dist/outbound-schemas.d.ts +8 -0
  88. package/dist/outbound-schemas.js +15 -5
  89. package/dist/outbound-schemas.js.map +1 -1
  90. package/dist/public-web-gateway.js +3 -0
  91. package/dist/public-web-gateway.js.map +1 -1
  92. package/dist/service-activation.js +4 -3
  93. package/dist/service-activation.js.map +1 -1
  94. package/dist/settings-api.js +71 -21
  95. package/dist/settings-api.js.map +1 -1
  96. package/dist/settings-change.js +70 -1
  97. package/dist/settings-change.js.map +1 -1
  98. package/dist/settings-effect.js +26 -4
  99. package/dist/settings-effect.js.map +1 -1
  100. package/dist/settings-http-confirmation.js +7 -0
  101. package/dist/settings-http-confirmation.js.map +1 -1
  102. package/dist/setup-form.d.ts +1 -1
  103. package/dist/setup-form.js +1 -1
  104. package/dist/status-emojis.d.ts +10 -3
  105. package/dist/status-emojis.js +11 -2
  106. package/dist/status-emojis.js.map +1 -1
  107. package/dist/tips.js +4 -4
  108. package/dist/tips.js.map +1 -1
  109. package/dist/transcript-monitor.d.ts +8 -0
  110. package/dist/transcript-monitor.js +26 -2
  111. package/dist/transcript-monitor.js.map +1 -1
  112. package/dist/transcript-sources.d.ts +54 -0
  113. package/dist/transcript-sources.js +188 -27
  114. package/dist/transcript-sources.js.map +1 -1
  115. package/dist/transcript-turns.d.ts +15 -2
  116. package/dist/transcript-turns.js +15 -2
  117. package/dist/transcript-turns.js.map +1 -1
  118. package/dist/types.d.ts +11 -0
  119. package/dist/ui/chat-emojis.js +33 -0
  120. package/dist/ui/chat-render.js +12 -0
  121. package/dist/ui/chat-thread.js +1 -1
  122. package/dist/ui/panel-chat.js +13 -3
  123. package/dist/ui/panel-needs.js +5 -2
  124. package/dist/ui/panel-settings.js +117 -26
  125. package/dist/ui/settings-dialogs.js +7 -2
  126. package/dist/ui/settings-model.js +2 -1
  127. package/dist/ui/settings-strings.js +38 -2
  128. package/dist/ui/shared/app-i18n.js +2 -2
  129. package/dist/ui/shared/app-route.js +1 -1
  130. package/dist/ui/shared/app.css +25 -0
  131. package/dist/ui/shared/instance-nav.js +77 -8
  132. package/dist/ui/shared/signin.js +7 -7
  133. package/dist/ui/shared/view-strings.js +2 -2
  134. package/dist/ui/signin.html +1 -1
  135. package/dist/update-install.d.ts +15 -1
  136. package/dist/update-install.js +6 -0
  137. package/dist/update-install.js.map +1 -1
  138. package/dist/update-preflight.d.ts +100 -0
  139. package/dist/update-preflight.js +264 -0
  140. package/dist/update-preflight.js.map +1 -0
  141. package/dist/updater-caller.d.ts +31 -0
  142. package/dist/updater-caller.js +109 -0
  143. package/dist/updater-caller.js.map +1 -0
  144. package/dist/view-api.d.ts +1 -1
  145. package/dist/view-api.js +33 -8
  146. package/dist/view-api.js.map +1 -1
  147. package/dist/wake-coordinator.d.ts +11 -0
  148. package/dist/wake-coordinator.js +38 -4
  149. package/dist/wake-coordinator.js.map +1 -1
  150. package/dist/web-api.d.ts +11 -0
  151. package/dist/web-api.js +54 -0
  152. package/dist/web-api.js.map +1 -1
  153. package/dist/web-auth.d.ts +2 -2
  154. package/dist/web-auth.js +5 -3
  155. package/dist/web-auth.js.map +1 -1
  156. package/dist/web-host-guard.d.ts +3 -11
  157. package/dist/web-host-guard.js +3 -12
  158. package/dist/web-host-guard.js.map +1 -1
  159. package/dist/web-images.d.ts +47 -0
  160. package/dist/web-images.js +169 -0
  161. package/dist/web-images.js.map +1 -0
  162. package/dist/web-session.d.ts +36 -1
  163. package/dist/web-session.js +52 -5
  164. package/dist/web-session.js.map +1 -1
  165. package/dist/web-settings-patch.d.ts +21 -0
  166. package/dist/web-settings-patch.js +74 -0
  167. package/dist/web-settings-patch.js.map +1 -0
  168. package/dist/web-shell-routes.d.ts +1 -1
  169. package/dist/web-shell-routes.js +1 -1
  170. package/dist/web-shell-routes.js.map +1 -1
  171. package/dist/workflow-templates/default.md +1 -1
  172. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1546,7 +1546,8 @@ program
1546
1546
  catch {
1547
1547
  return false;
1548
1548
  } },
1549
- // `agend install` activates by default; the update owns stop/start, so only the file is refreshed here.
1549
+ // `agend install` activates by default; the update owns stop/start, so only the file is refreshed here. Only
1550
+ // an existing service is refreshed: a detached fleet's update never calls this (#1631).
1550
1551
  refresh: () => {
1551
1552
  const result = capture(newAgend.command, [...newAgend.args, "install", "--no-activate"]);
1552
1553
  if (result.status === 0)
@@ -1663,6 +1664,42 @@ program
1663
1664
  process.exitCode = 1;
1664
1665
  return;
1665
1666
  }
1667
+ // ── Check if npm global needs sudo (read-only; decides the nvm path the preflight judges) ──
1668
+ let needsSudo = false;
1669
+ try {
1670
+ const prefix = execSync("npm config get prefix", { encoding: "utf-8" }).trim();
1671
+ const { accessSync, constants } = await import("node:fs");
1672
+ try {
1673
+ accessSync(prefix, constants.W_OK);
1674
+ }
1675
+ catch {
1676
+ needsSudo = true;
1677
+ }
1678
+ }
1679
+ catch { /* assume no sudo needed */ }
1680
+ // ── #1441 B: can the target run here, on the Node it will actually run on? ──
1681
+ // Read where the install runs (#1623 review): a direct install runs `npm` and the release's `node` from this
1682
+ // environment, so it is decided now, before anything is touched. An nvm install runs nvm's npm and Node 22, which
1683
+ // exist only once nvm has selected them: runUpdateInstall decides it there, before the lock and npm.
1684
+ const preflight = targetVersion ? await import("./update-preflight.js") : null;
1685
+ if (preflight && targetVersion && !needsSudo) {
1686
+ const verdict = preflight.preflightUpdate({
1687
+ run: (argv, timeoutMs) => {
1688
+ const r = spawnSync(argv[0], argv.slice(1), { encoding: "utf-8", timeout: timeoutMs, stdio: ["ignore", "pipe", "ignore"] });
1689
+ return { status: r.status, stdout: r.stdout ?? "" };
1690
+ },
1691
+ npm: "npm",
1692
+ }, pkg, targetVersion, "the `node` on PATH");
1693
+ if (verdict.kind === "refuse") {
1694
+ console.error(`\n${verdict.message}\n`);
1695
+ // A chat-started /update (Discord, Telegram, an agent) is waiting on this: the reason is its outcome.
1696
+ setUpdateProgressStage(DATA_DIR, "failed", { error: `Not updated: ${verdict.summary}. Nothing was changed.` });
1697
+ process.exitCode = 1;
1698
+ return;
1699
+ }
1700
+ if (verdict.kind === "unknown")
1701
+ console.log(verdict.note);
1702
+ }
1666
1703
  if (targetVersion) {
1667
1704
  console.log(`\n Updating AgEnD v${pkgVersion} → v${targetVersion}...\n`);
1668
1705
  }
@@ -1684,19 +1721,6 @@ program
1684
1721
  process.exit(1);
1685
1722
  };
1686
1723
  setUpdateProgressStage(DATA_DIR, "downloading");
1687
- // ── Check if npm global needs sudo ──
1688
- let needsSudo = false;
1689
- try {
1690
- const prefix = execSync("npm config get prefix", { encoding: "utf-8" }).trim();
1691
- const { accessSync, constants } = await import("node:fs");
1692
- try {
1693
- accessSync(prefix, constants.W_OK);
1694
- }
1695
- catch {
1696
- needsSudo = true;
1697
- }
1698
- }
1699
- catch { /* assume no sudo needed */ }
1700
1724
  if (needsSudo) {
1701
1725
  // ── nvm path: install without sudo ──
1702
1726
  if (!existsSync(nvmSh)) {
@@ -1728,6 +1752,9 @@ program
1728
1752
  process.once("exit", () => releaseLock());
1729
1753
  const installed = runUpdateInstall({
1730
1754
  pkg, targetVersion, viaNvm: needsSudo, nvmSh, rollback: true,
1755
+ ...(preflight && targetVersion && needsSudo
1756
+ ? { preflight: preflight.installPreflight(pkg, targetVersion, "the Node 22 nvm selected", { log: m => console.log(m), error: m => console.error(m) }) }
1757
+ : {}),
1731
1758
  lock: prefix => {
1732
1759
  const lock = acquireInstallLock(prefix, { spec: pkg, agendHome: DATA_DIR }, {
1733
1760
  pid: process.pid, processStart: admission.processStart, newToken: () => randomBytes(16).toString("hex"),
@@ -1786,7 +1813,19 @@ program
1786
1813
  .option("--activate", "Deprecated; service activation is now the default")
1787
1814
  .option("--no-activate", "Write the service file without activating it")
1788
1815
  .action(async (opts) => {
1789
- const { installService, activateService, detectPlatform, renderLaunchdPlist, launchdPlistPath } = await import("./service-installer.js");
1816
+ const { installService, activateService, detectPlatform, renderLaunchdPlist, launchdPlistPath, getServicePath, getSystemServicePath } = await import("./service-installer.js");
1817
+ // #1631 B: an older updater (2.2.0-beta.1 and before) refreshes a hand-started fleet's service too, through this
1818
+ // command — which would CREATE a unit or plist, and every later update would then take a manager it may not reach
1819
+ // as the authority. When no service exists and it is certain this is that updater's refresh, write nothing. A
1820
+ // manual `agend install` (with or without --no-activate) creates the service as always.
1821
+ if (opts.activate === false && getServicePath() === null && getSystemServicePath() === null) {
1822
+ const { startedByUpdater, systemUpdaterCallerProbe } = await import("./updater-caller.js");
1823
+ const caller = startedByUpdater(systemUpdaterCallerProbe(DATA_DIR, pkgVersion));
1824
+ if (caller.updater) {
1825
+ console.log(" No service to refresh: this update runs a hand-started fleet, so none was created (`agend install` creates one).");
1826
+ return;
1827
+ }
1828
+ }
1790
1829
  const execPath = canonicalCliEntry();
1791
1830
  const serviceVars = {
1792
1831
  label: "com.agend.fleet",
@@ -2578,7 +2617,7 @@ program
2578
2617
  console.log("Web token rotated.");
2579
2618
  console.log("Every previously issued dashboard link and browser session is now rejected.");
2580
2619
  console.log("A running fleet picks this up immediately — no restart needed.");
2581
- console.log("Sign in again with `agend web` (prints a one-time code), or /dashboard in your chat channel.");
2620
+ console.log("Sign in again with `agend web` (prints a one-time code), or /web in your chat channel.");
2582
2621
  });
2583
2622
  program
2584
2623
  .command("view")