@songsid/agend 2.3.2-beta.15 → 2.3.2-beta.17

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 (92) hide show
  1. package/README.md +2 -0
  2. package/README.zh-TW.md +2 -0
  3. package/dist/backend/claude-code.js +23 -1
  4. package/dist/backend/claude-code.js.map +1 -1
  5. package/dist/backend/kiro.d.ts +2 -0
  6. package/dist/backend/kiro.js +7 -0
  7. package/dist/backend/kiro.js.map +1 -1
  8. package/dist/cache-service.d.ts +13 -1
  9. package/dist/cache-service.js +45 -2
  10. package/dist/cache-service.js.map +1 -1
  11. package/dist/channel/mcp-tools.js +4 -4
  12. package/dist/channel/mcp-tools.js.map +1 -1
  13. package/dist/config-validator.js +4 -1
  14. package/dist/config-validator.js.map +1 -1
  15. package/dist/fleet-manager.d.ts +14 -0
  16. package/dist/fleet-manager.js +36 -5
  17. package/dist/fleet-manager.js.map +1 -1
  18. package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -3
  19. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
  20. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +24 -0
  21. package/dist/general-knowledge/skills/session-management/SKILL.md +1 -1
  22. package/dist/general-knowledge/skills/tui-effort/SKILL.md +1 -1
  23. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +3 -1
  24. package/dist/general-knowledge/skills/web-appearance/SKILL.md +3 -1
  25. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +27 -13
  26. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +27 -13
  27. package/dist/instance-config-impact.js +1 -0
  28. package/dist/instance-config-impact.js.map +1 -1
  29. package/dist/kiro-reconcile.js +11 -3
  30. package/dist/kiro-reconcile.js.map +1 -1
  31. package/dist/locale.js +4 -0
  32. package/dist/locale.js.map +1 -1
  33. package/dist/office-levels.d.ts +64 -0
  34. package/dist/office-levels.js +66 -0
  35. package/dist/office-levels.js.map +1 -0
  36. package/dist/office-share-page.js +1 -1
  37. package/dist/office-share-page.js.map +1 -1
  38. package/dist/office-share.d.ts +18 -2
  39. package/dist/office-share.js +22 -4
  40. package/dist/office-share.js.map +1 -1
  41. package/dist/public-web-gateway.js +1 -1
  42. package/dist/public-web-gateway.js.map +1 -1
  43. package/dist/scheduler/task-board.d.ts +28 -6
  44. package/dist/scheduler/task-board.js +66 -11
  45. package/dist/scheduler/task-board.js.map +1 -1
  46. package/dist/settings-api.js +4 -0
  47. package/dist/settings-api.js.map +1 -1
  48. package/dist/settings-change.js +2 -0
  49. package/dist/settings-change.js.map +1 -1
  50. package/dist/settings-effect.js +2 -0
  51. package/dist/settings-effect.js.map +1 -1
  52. package/dist/task-board-waker.js +7 -2
  53. package/dist/task-board-waker.js.map +1 -1
  54. package/dist/types.d.ts +5 -0
  55. package/dist/ui/fleet-office-card.js +114 -0
  56. package/dist/ui/fleet-office-editor.js +27 -7
  57. package/dist/ui/fleet-office-levels.js +105 -0
  58. package/dist/ui/fleet-office-model.js +9 -1
  59. package/dist/ui/fleet-office-pack.d.ts +2 -0
  60. package/dist/ui/fleet-office-pack.js +48 -2
  61. package/dist/ui/fleet-office-skin.js +39 -3
  62. package/dist/ui/fleet-office-store.js +13 -0
  63. package/dist/ui/fleet-office.js +172 -26
  64. package/dist/ui/fleet-org.js +2 -0
  65. package/dist/ui/fleet-task-card.js +2 -2
  66. package/dist/ui/fleet-task-common.js +30 -7
  67. package/dist/ui/fleet-task-work.js +2 -2
  68. package/dist/ui/fleet-tasks.js +10 -11
  69. package/dist/ui/office-share-page.js +1 -0
  70. package/dist/ui/panel-settings.js +7 -1
  71. package/dist/ui/settings-registry.js +1 -0
  72. package/dist/ui/settings-strings.js +2 -0
  73. package/dist/ui/shared/app.css +44 -0
  74. package/dist/usage-rollup.d.ts +34 -3
  75. package/dist/usage-rollup.js +56 -3
  76. package/dist/usage-rollup.js.map +1 -1
  77. package/dist/web-api.d.ts +5 -0
  78. package/dist/web-api.js +42 -10
  79. package/dist/web-api.js.map +1 -1
  80. package/dist/web-auth.js +1 -1
  81. package/dist/web-auth.js.map +1 -1
  82. package/dist/web-office-acts.d.ts +5 -2
  83. package/dist/web-office-acts.js +7 -2
  84. package/dist/web-office-acts.js.map +1 -1
  85. package/dist/web-office-store.d.ts +6 -1
  86. package/dist/web-office-store.js +5 -0
  87. package/dist/web-office-store.js.map +1 -1
  88. package/dist/web-settings-patch.d.ts +3 -1
  89. package/dist/web-settings-patch.js +4 -1
  90. package/dist/web-settings-patch.js.map +1 -1
  91. package/dist/workflow-templates/default.md +1 -1
  92. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { getCachedKiroCliCompatibility, kiroV1DbPath, kiroV2SessionsDir } from "./backend/kiro.js";
1
+ import { supportsVerifiedKiroMigration, getCachedKiroCliCompatibility, kiroV1DbPath, kiroV2SessionsDir } from "./backend/kiro.js";
2
2
  import { listKiroV1Sessions, readKiroClassicLinks } from "./backend/kiro-identity.js";
3
3
  import { readKiroV1SavedModel } from "./backend/kiro-retired-model.js";
4
4
  import { sharedKiroV2StoreLane } from "./backend/kiro-v2-store.js";
@@ -1223,6 +1223,7 @@ export class FleetManager {
1223
1223
  needs: () => this.needsYouItems().map(i => i.instance),
1224
1224
  hidden: name => crossInstanceVisibility(this.fleetConfig, name) === "hidden",
1225
1225
  skins: this.officeSkins,
1226
+ levels: () => this.officeLevelsSnapshot(),
1226
1227
  },
1227
1228
  manager: new ManagedTunnel({ dataDir: join(this.dataDir, OFFICE_SHARE_TUNNEL_DIR), log: () => this.logger.warn("Office share tunnel cleanup requires attention") }),
1228
1229
  ensure: signal => ensureCloudflared({ dataDir: this.dataDir, pinnedOnly: true, signal }),
@@ -1365,7 +1366,10 @@ export class FleetManager {
1365
1366
  needs.set(item.instance, (needs.get(item.instance) ?? 0) + 1);
1366
1367
  const classicRooms = new Map((this.classicChannels?.getAll() ?? []).map(ch => [ch.instanceName, ch]));
1367
1368
  let profiles = null;
1369
+ // #2661: the levels as last worked out (never waits; none while off or not worked out yet).
1370
+ const levels = this.officeLevelsSnapshot();
1368
1371
  return {
1372
+ level: name => (levels && Object.prototype.hasOwnProperty.call(levels, name) ? levels[name].level : undefined),
1369
1373
  stateOf: name => {
1370
1374
  if (!this.isKnownInstance(name))
1371
1375
  return "missing";
@@ -1939,8 +1943,7 @@ export class FleetManager {
1939
1943
  },
1940
1944
  preflight: async (name, plan) => {
1941
1945
  const compat = getCachedKiroCliCompatibility(resolveBinary("kiro-cli"));
1942
- if (!compat.supportsTui || !compat.supportsInstanceAgent || !compat.agentEngines?.includes("v2")
1943
- || !/^2\.(?:3[4-9]|[4-9]\d|\d{3,})\./.test(compat.version ?? ""))
1946
+ if (!supportsVerifiedKiroMigration(compat))
1944
1947
  throw new Error(t("kiro_migrate.version_required"));
1945
1948
  const daemon = this.daemons.get(name);
1946
1949
  if (this.getInstanceStatus(name) === "running" && (!daemon || !await daemon.kiroMigrationIdle()))
@@ -2125,7 +2128,7 @@ export class FleetManager {
2125
2128
  this.notifyFleetError(t("kiro_reconcile.audit_failed"));
2126
2129
  return true;
2127
2130
  }
2128
- await this.retireNonceButtons(entry, entry.messageId ?? data.messageId, t("kiro_migrate.applying", plan.name));
2131
+ await this.retireNonceButtons(entry, entry.messageId ?? data.messageId, t("kiro_reconcile.applying", plan.name));
2129
2132
  outcome = await applyKiroReconciliation(this.kiroReconcileDeps(), plan, `${adapterId}:${data.userId}`);
2130
2133
  try {
2131
2134
  this.eventLog.insert(plan.name, "kiro_reconcile", { phase: outcome.ok ? "completed" : "failed", userId: data.userId, receipt: outcome.receipt, message: outcome.text });
@@ -14401,7 +14404,7 @@ export class FleetManager {
14401
14404
  return;
14402
14405
  const read = board.summaryRead(since.toISOString(), until.toISOString(), this.dispatcherGone);
14403
14406
  const projects = board.listProjects(true);
14404
- const stats = board.projectStats();
14407
+ const stats = board.projectStats(this.dispatcherGone);
14405
14408
  const names = new Map(projects.map((p) => [p.id, p.name]));
14406
14409
  const configured = this.getPrimaryAdapterId();
14407
14410
  const primary = configured !== undefined && this.worlds.has(configured) ? configured : this.worlds.keys().next().value;
@@ -15040,6 +15043,34 @@ export class FleetManager {
15040
15043
  messages: messages.filter(m => keep(m.instance)),
15041
15044
  });
15042
15045
  }
15046
+ /** #2661: the Office levels as last worked out, and the work in flight (officeLevels). */
15047
+ officeLevelsMemo = null;
15048
+ officeLevelsRun = null;
15049
+ /**
15050
+ * #2661: every instance's Office level (office-levels.ts) — worked out by the cache service from the usage store, at
15051
+ * most once per OFFICE_LEVELS_TTL_MS however many pages and share links ask (one run at a time). Null when
15052
+ * web.office_levels is false.
15053
+ */
15054
+ async officeLevels() {
15055
+ if (this.fleetConfig?.web?.office_levels === false)
15056
+ return null;
15057
+ const { OFFICE_LEVELS_TTL_MS } = await import("./office-levels.js");
15058
+ const memo = this.officeLevelsMemo;
15059
+ if (memo && performance.now() - memo.at < OFFICE_LEVELS_TTL_MS)
15060
+ return memo.levels;
15061
+ this.officeLevelsRun ??= this.cacheServiceFor().officeLevels(Date.now()).then((levels) => { this.officeLevelsMemo = { at: performance.now(), levels }; return levels; }).finally(() => { this.officeLevelsRun = null; });
15062
+ return this.officeLevelsRun;
15063
+ }
15064
+ /**
15065
+ * #2661: the levels as last worked out, for a synchronous reader (a share link's gateway): never waits; a stale or
15066
+ * missing set starts the next run. Null when web.office_levels is false or none has been worked out yet.
15067
+ */
15068
+ officeLevelsSnapshot() {
15069
+ if (this.fleetConfig?.web?.office_levels === false)
15070
+ return null;
15071
+ void this.officeLevels().catch(() => { });
15072
+ return this.officeLevelsMemo?.levels ?? null;
15073
+ }
15043
15074
  /** #2001: get_cache_report's — the same report, as last worked out (reused for a minute, until the next pass). */
15044
15075
  cacheReportPublished(window) {
15045
15076
  return this.cacheServiceFor().published(cacheWindow(window));