@songsid/agend 2.1.0-beta.9 → 2.1.0

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 (119) hide show
  1. package/README.md +1 -0
  2. package/README.zh-TW.md +2 -1
  3. package/dist/access-path.js +3 -3
  4. package/dist/access-path.js.map +1 -1
  5. package/dist/agent-cli.js +1 -1
  6. package/dist/agent-cli.js.map +1 -1
  7. package/dist/agent-endpoint.d.ts +8 -0
  8. package/dist/agent-endpoint.js +36 -8
  9. package/dist/agent-endpoint.js.map +1 -1
  10. package/dist/backend/antigravity.d.ts +8 -0
  11. package/dist/backend/antigravity.js +43 -1
  12. package/dist/backend/antigravity.js.map +1 -1
  13. package/dist/backend/claude-code.d.ts +6 -0
  14. package/dist/backend/claude-code.js +20 -4
  15. package/dist/backend/claude-code.js.map +1 -1
  16. package/dist/backend/codex.d.ts +12 -1
  17. package/dist/backend/codex.js +55 -1
  18. package/dist/backend/codex.js.map +1 -1
  19. package/dist/backend/factory.js +4 -1
  20. package/dist/backend/factory.js.map +1 -1
  21. package/dist/backend/grok.d.ts +59 -0
  22. package/dist/backend/grok.js +329 -0
  23. package/dist/backend/grok.js.map +1 -0
  24. package/dist/backend/kiro.d.ts +6 -0
  25. package/dist/backend/kiro.js +38 -3
  26. package/dist/backend/kiro.js.map +1 -1
  27. package/dist/backend/opencode.d.ts +5 -0
  28. package/dist/backend/opencode.js +18 -0
  29. package/dist/backend/opencode.js.map +1 -1
  30. package/dist/backend/types.d.ts +59 -3
  31. package/dist/backend/types.js +15 -2
  32. package/dist/backend/types.js.map +1 -1
  33. package/dist/channel/adapters/discord.d.ts +20 -0
  34. package/dist/channel/adapters/discord.js +88 -11
  35. package/dist/channel/adapters/discord.js.map +1 -1
  36. package/dist/channel/adapters/telegram.js +4 -1
  37. package/dist/channel/adapters/telegram.js.map +1 -1
  38. package/dist/channel/mcp-tools.js +18 -2
  39. package/dist/channel/mcp-tools.js.map +1 -1
  40. package/dist/chat-export.js +5 -2
  41. package/dist/chat-export.js.map +1 -1
  42. package/dist/classic-channel-manager.d.ts +16 -1
  43. package/dist/classic-channel-manager.js +76 -4
  44. package/dist/classic-channel-manager.js.map +1 -1
  45. package/dist/cli.js +82 -16
  46. package/dist/cli.js.map +1 -1
  47. package/dist/config-validator.js +70 -1
  48. package/dist/config-validator.js.map +1 -1
  49. package/dist/config.d.ts +3 -1
  50. package/dist/config.js +14 -1
  51. package/dist/config.js.map +1 -1
  52. package/dist/daemon.d.ts +67 -5
  53. package/dist/daemon.js +489 -180
  54. package/dist/daemon.js.map +1 -1
  55. package/dist/daily-summary.js +7 -2
  56. package/dist/daily-summary.js.map +1 -1
  57. package/dist/fleet-context.d.ts +11 -0
  58. package/dist/fleet-manager.d.ts +128 -7
  59. package/dist/fleet-manager.js +1116 -140
  60. package/dist/fleet-manager.js.map +1 -1
  61. package/dist/fleet-system-prompt.js +1 -1
  62. package/dist/general-knowledge/skills/fleet-config/SKILL.md +19 -13
  63. package/dist/general-knowledge/skills/fleet-health/SKILL.md +30 -51
  64. package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
  65. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +19 -13
  66. package/dist/general-knowledge/skills/model-discovery/SKILL.md +1 -5
  67. package/dist/general-knowledge/skills/scheduling/SKILL.md +41 -0
  68. package/dist/general-knowledge/skills/session-management/SKILL.md +29 -116
  69. package/dist/instance-lifecycle.d.ts +13 -0
  70. package/dist/instance-lifecycle.js +57 -18
  71. package/dist/instance-lifecycle.js.map +1 -1
  72. package/dist/locale.js +28 -2
  73. package/dist/locale.js.map +1 -1
  74. package/dist/logger.d.ts +6 -0
  75. package/dist/logger.js +23 -7
  76. package/dist/logger.js.map +1 -1
  77. package/dist/outbound-handlers.js +199 -11
  78. package/dist/outbound-handlers.js.map +1 -1
  79. package/dist/outbound-schemas.d.ts +44 -2
  80. package/dist/outbound-schemas.js +50 -3
  81. package/dist/outbound-schemas.js.map +1 -1
  82. package/dist/pause-marker.d.ts +5 -0
  83. package/dist/pause-marker.js +36 -0
  84. package/dist/pause-marker.js.map +1 -0
  85. package/dist/scheduler/db.d.ts +8 -0
  86. package/dist/scheduler/db.js +74 -5
  87. package/dist/scheduler/db.js.map +1 -1
  88. package/dist/scheduler/db.test.js +50 -0
  89. package/dist/scheduler/db.test.js.map +1 -1
  90. package/dist/scheduler/scheduler.d.ts +6 -0
  91. package/dist/scheduler/scheduler.js +99 -16
  92. package/dist/scheduler/scheduler.js.map +1 -1
  93. package/dist/scheduler/scheduler.test.js +131 -1
  94. package/dist/scheduler/scheduler.test.js.map +1 -1
  95. package/dist/scheduler/types.d.ts +9 -3
  96. package/dist/scheduler/types.js.map +1 -1
  97. package/dist/settings-api.d.ts +20 -2
  98. package/dist/settings-api.js +213 -9
  99. package/dist/settings-api.js.map +1 -1
  100. package/dist/setup-wizard.js +8 -0
  101. package/dist/setup-wizard.js.map +1 -1
  102. package/dist/tmux-control.d.ts +7 -0
  103. package/dist/tmux-control.js +22 -1
  104. package/dist/tmux-control.js.map +1 -1
  105. package/dist/tmux-manager.d.ts +1 -1
  106. package/dist/tmux-manager.js.map +1 -1
  107. package/dist/topic-commands.d.ts +14 -0
  108. package/dist/topic-commands.js +107 -15
  109. package/dist/topic-commands.js.map +1 -1
  110. package/dist/types.d.ts +29 -1
  111. package/dist/tz-utils.d.ts +26 -0
  112. package/dist/tz-utils.js +46 -0
  113. package/dist/tz-utils.js.map +1 -0
  114. package/dist/ui/dashboard.html +3 -3
  115. package/dist/ui/settings.html +453 -74
  116. package/dist/web-api.js +3 -1
  117. package/dist/web-api.js.map +1 -1
  118. package/dist/workflow-templates/default.md +0 -4
  119. package/package.json +2 -1
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Timezone helpers for event-db values.
3
+ *
4
+ * event-db (events/activity) stores timestamps as SQLite `datetime('now')` —
5
+ * "YYYY-MM-DD HH:MM:SS" in **UTC**, with no zone suffix. Storage stays UTC; these
6
+ * helpers convert only for DISPLAY (UTC→local) and QUERY BOUNDARIES (local→UTC),
7
+ * so user-facing times match the local convention used by chat-logs and fleet.log.
8
+ *
9
+ * TZ source matches the chat-log path: `process.env.TZ` override, else the
10
+ * system/Intl resolved zone.
11
+ */
12
+ export function resolveTz() {
13
+ return process.env.TZ || Intl.DateTimeFormat().resolvedOptions().timeZone;
14
+ }
15
+ /**
16
+ * Convert a UTC event-db datetime string ("YYYY-MM-DD HH:MM:SS") to the same
17
+ * format in local `tz`. Unparseable input is returned unchanged.
18
+ */
19
+ export function utcDbToLocal(utcDbStr, tz = resolveTz()) {
20
+ const d = new Date(utcDbStr.replace(" ", "T") + "Z");
21
+ if (Number.isNaN(d.getTime()))
22
+ return utcDbStr;
23
+ // sv-SE renders ISO-like "YYYY-MM-DD HH:MM:SS".
24
+ return d.toLocaleString("sv-SE", { timeZone: tz, hour12: false });
25
+ }
26
+ /**
27
+ * Convert a local wall-clock string ("YYYY-MM-DD HH:MM:SS", interpreted in `tz`)
28
+ * to the UTC "YYYY-MM-DD HH:MM:SS" string matching event-db storage — for use as
29
+ * a range-query boundary. DST-safe via an offset round-trip. Unparseable input is
30
+ * returned unchanged.
31
+ */
32
+ export function localWallToUtcDb(wall, tz = resolveTz()) {
33
+ const asIfUtc = new Date(wall.replace(" ", "T") + "Z").getTime();
34
+ if (Number.isNaN(asIfUtc))
35
+ return wall;
36
+ // Render that instant in tz; the gap back to "as-if-UTC" is the zone offset at
37
+ // that instant (handles DST because it is sampled near the target instant).
38
+ const shownInTz = new Date(asIfUtc).toLocaleString("sv-SE", { timeZone: tz, hour12: false });
39
+ const offset = new Date(shownInTz.replace(" ", "T") + "Z").getTime() - asIfUtc;
40
+ return new Date(asIfUtc - offset).toISOString().slice(0, 19).replace("T", " ");
41
+ }
42
+ /** Local "today" date ("YYYY-MM-DD") in `tz`. */
43
+ export function localTodayDate(tz = resolveTz()) {
44
+ return new Date().toLocaleString("sv-SE", { timeZone: tz, hour12: false }).slice(0, 10);
45
+ }
46
+ //# sourceMappingURL=tz-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tz-utils.js","sourceRoot":"","sources":["../src/tz-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,EAAE,GAAG,SAAS,EAAE;IAC7D,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,gDAAgD;IAChD,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,EAAE,GAAG,SAAS,EAAE;IAC7D,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACjE,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,+EAA+E;IAC/E,4EAA4E;IAC5E,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC;IAC/E,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACjF,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,cAAc,CAAC,EAAE,GAAG,SAAS,EAAE;IAC7C,OAAO,IAAI,IAAI,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1F,CAAC"}
@@ -425,7 +425,7 @@ async function loadDetail() {
425
425
  <div class="detail-row"><span class="detail-label">Rate 7d</span><span>${Math.round(rl7)}% <span class="progress-bar"><span class="progress-fill" style="width:${Math.min(rl7,100)}%;background:${rl7>90?'var(--error)':rl7>70?'var(--warn)':'var(--accent)'}"></span></span></span></div></div>`;
426
426
  if (d.recent_activity?.length) {
427
427
  h += `<div class="card"><h3>Recent Activity</h3>`;
428
- for (const a of d.recent_activity) { const t=a.timestamp?a.timestamp.slice(11,16):""; h+=`<div class="activity-item"><span class="act-time">${t}</span><span class="act-event">${esc(a.event)}</span>${esc(a.summary||"")}</div>`; }
428
+ for (const a of d.recent_activity) { const t=a.timestamp?new Date(a.timestamp.replace(" ","T")+"Z").toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):""; h+=`<div class="activity-item"><span class="act-time">${t}</span><span class="act-event">${esc(a.event)}</span>${esc(a.summary||"")}</div>`; }
429
429
  h += `</div>`;
430
430
  }
431
431
  el.innerHTML = h;
@@ -468,7 +468,7 @@ async function showCreateInstance() {
468
468
  const label = b.installed ? b.name : `${b.name} (not installed)`;
469
469
  return `<option value="${b.name}" ${b.installed ? "" : "disabled"} ${b.name === first?.name ? "selected" : ""}>${label}</option>`;
470
470
  }).join("");
471
- } catch { backendOpts += ["claude-code","codex","gemini-cli","opencode","kiro-cli"].map(b => `<option value="${b}">${b}</option>`).join(""); }
471
+ } catch { backendOpts += ["claude-code","codex","gemini-cli","opencode","kiro-cli","antigravity","grok"].map(b => `<option value="${b}">${b}</option>`).join(""); }
472
472
  ov.innerHTML = `<div class="form-card"><h2>Create Instance</h2>
473
473
  <div class="form-field"><label>Directory</label><input id="ci-dir" placeholder="Optional — auto-creates workspace if empty"></div>
474
474
  <div class="form-field"><label id="ci-topic-label">Topic Name</label><input id="ci-topic" placeholder="Auto from directory name"></div>
@@ -689,7 +689,7 @@ async function loadConfig() {
689
689
  <div class="card"><h3>Defaults</h3>
690
690
  <div class="form-field"><label>Backend</label>
691
691
  <select id="cfg-backend">
692
- ${["claude-code","codex","gemini-cli","opencode","kiro-cli"].map(b => `<option value="${b}" ${defs.backend===b?"selected":""}>${b}</option>`).join("")}
692
+ ${["claude-code","codex","gemini-cli","opencode","kiro-cli","antigravity","grok"].map(b => `<option value="${b}" ${defs.backend===b?"selected":""}>${b}</option>`).join("")}
693
693
  </select></div>
694
694
  </div>
695
695
  <div class="card"><h3>Project Roots</h3>