agim-cli 1.1.8 → 1.1.10

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 (46) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/dist/cli-ui/entry-menu.d.ts +2 -0
  3. package/dist/cli-ui/entry-menu.d.ts.map +1 -1
  4. package/dist/cli-ui/entry-menu.js +2 -1
  5. package/dist/cli-ui/entry-menu.js.map +1 -1
  6. package/dist/cli-ui/i18n.d.ts +14 -0
  7. package/dist/cli-ui/i18n.d.ts.map +1 -1
  8. package/dist/cli-ui/i18n.js +30 -0
  9. package/dist/cli-ui/i18n.js.map +1 -1
  10. package/dist/cli-ui/token-menu.d.ts +3 -0
  11. package/dist/cli-ui/token-menu.d.ts.map +1 -0
  12. package/dist/cli-ui/token-menu.js +127 -0
  13. package/dist/cli-ui/token-menu.js.map +1 -0
  14. package/dist/cli.js +90 -11
  15. package/dist/cli.js.map +1 -1
  16. package/dist/core/a2a-notify.d.ts +35 -0
  17. package/dist/core/a2a-notify.d.ts.map +1 -0
  18. package/dist/core/a2a-notify.js +265 -0
  19. package/dist/core/a2a-notify.js.map +1 -0
  20. package/dist/core/a2a.d.ts +5 -0
  21. package/dist/core/a2a.d.ts.map +1 -1
  22. package/dist/core/a2a.js +59 -3
  23. package/dist/core/a2a.js.map +1 -1
  24. package/dist/core/access-token.d.ts +41 -0
  25. package/dist/core/access-token.d.ts.map +1 -0
  26. package/dist/core/access-token.js +179 -0
  27. package/dist/core/access-token.js.map +1 -0
  28. package/dist/core/agent-base.d.ts.map +1 -1
  29. package/dist/core/agent-base.js +4 -1
  30. package/dist/core/agent-base.js.map +1 -1
  31. package/dist/core/message-sink.d.ts +14 -0
  32. package/dist/core/message-sink.d.ts.map +1 -1
  33. package/dist/core/message-sink.js +7 -5
  34. package/dist/core/message-sink.js.map +1 -1
  35. package/dist/core/restart-flow.d.ts.map +1 -1
  36. package/dist/core/restart-flow.js +50 -12
  37. package/dist/core/restart-flow.js.map +1 -1
  38. package/dist/core/types.d.ts +6 -0
  39. package/dist/core/types.d.ts.map +1 -1
  40. package/dist/web/public/_app.js +59 -0
  41. package/dist/web/public/login.html +196 -0
  42. package/dist/web/public/settings.html +140 -1
  43. package/dist/web/server.d.ts.map +1 -1
  44. package/dist/web/server.js +190 -8
  45. package/dist/web/server.js.map +1 -1
  46. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,116 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.1.10] - 2026-05-16
8
+
9
+ ### Added — Web console token authentication
10
+
11
+ Web console used to ship with **no built-in auth**: anyone who could reach
12
+ the port (after a reverse-proxy / tunnel) had full dashboard access. v1.1.10
13
+ adds token-gated login.
14
+
15
+ - **`agim token` CLI**: `create [label]` / `list` / `revoke <id>`.
16
+ Bootstrap token auto-generated at first start and printed to stdout +
17
+ `journalctl -u agim` so the operator can copy it from logs.
18
+ - **Interactive menu**: bare `agim` → "Manage web access tokens" submenu
19
+ (create / list / revoke). Mirrors the CLI flow for non-power-users.
20
+ - **`/login` page** (bilingual EN/中文) with step-by-step instructions
21
+ for getting a token from the terminal.
22
+ - **Auth gate** in `web/server.ts`:
23
+ - Loopback peers (127.0.0.1 / ::1) bypass (local dev unaffected).
24
+ - Public paths bypass: `/v/:id` viewer pages, `/loc` location capture,
25
+ `/l/<token>` short links, `/api/health`, `/api/loc{,/*}` (single-use
26
+ location token still required by the loc layer itself).
27
+ - All other paths require an `Authorization: Bearer <token>`, an
28
+ `agim_token` cookie, or `?token=` query (for WS upgrade).
29
+ - 401 for `/api/*`; 302 → `/login?next=…` for HTML routes.
30
+ - **Storage**: `~/.agim/tokens.json` (chmod 600). Server only stores
31
+ SHA-256; raw token is shown once at create time.
32
+ - **Cookie**: 30-day `agim_token` cookie set on successful login;
33
+ `SameSite=Strict`, `Path=/`. Logout via `POST /api/auth/logout`.
34
+ - **Disable**: `IMHUB_WEB_AUTH=off` reverts to pre-1.1.10 open access
35
+ (for ops who do auth at the reverse proxy layer).
36
+ - **Global fetch interceptor** in `_app.js` auto-attaches `Authorization`
37
+ + redirects to `/login` on 401. Existing pages keep working without
38
+ changes; new tabs get auth transparently.
39
+
40
+ ### Changed — A2A robustness
41
+
42
+ The HSTECH / Lens debate sessions surfaced two pain points:
43
+
44
+ - **Default timeout raised from 10 min → 30 min** (`IMHUB_A2A_TIMEOUT_DEFAULT_MS`).
45
+ Codex routinely takes 15-25 min for a 4-API-pull + writing-a-report job;
46
+ the old 10 min cutoff killed it mid-flight and left orphan files in
47
+ `_agim-output/`. New `IMHUB_A2A_MAX_TIMEOUT_MS` (default 1h) caps the
48
+ ceiling so an agent can't accidentally write `timeoutMs: 86400000`.
49
+ - **Abort on timeout** — `AgentSendOpts.signal` plumbed through `sendPrompt`
50
+ → `spawnStream` so callees actually get SIGTERM'd when A2A gives up.
51
+ No more orphan child processes writing into shared output dirs.
52
+ - **New `src/core/a2a-notify.ts`** pushes 4 lifecycle events to the
53
+ caller's IM thread so users see what's happening downstream:
54
+ - `🔀 转给 codex (#jobId · depth N)` — start
55
+ - `✓ codex 完成 (耗时 5m20s) 📎 file.md 🔗 viewer-link` — complete
56
+ with auto-snapshot of the first `.md` output as a viewer paste
57
+ - `⌛ codex 超时 (10m 未返回) — 子进程已停` — timeout
58
+ - `❌ codex 失败 ... <err>` — failure
59
+ - **Verbose heartbeat mode** detects file changes in `_agim-output/`
60
+ every `IMHUB_A2A_HEARTBEAT_MIN` minutes (default 5):
61
+ - With change: lists new files + links the first new `.md` once.
62
+ - Without change: "still thinking" note.
63
+ - **Notify scope**: source='system' (never routes through viewer);
64
+ default mode 'essential' (start + terminal events only); depth ≤1
65
+ by default (no spam on deep call chains).
66
+ - **Settings UI** has a new 🔀 A2A Notifications card (timeouts in
67
+ minutes, mode dropdown, depth, heartbeat interval — bilingual).
68
+
69
+ ### Fixed
70
+
71
+ - **Restart message order**: `/restart` used to send "🔄 重启中…" via the
72
+ outbox queue, which the dying process never drained — the new process's
73
+ high-priority "✅ 已重启完成…" then arrived first. Now `initiateRestart()`
74
+ delivers the in-flight ack synchronously (`priority: 'high'`) before
75
+ spawning `systemctl restart`. Command return becomes `''` so the
76
+ pipeline doesn't double-deliver.
77
+ - **Slash command outputs no longer route through viewer**: `cli.ts`
78
+ string-branch was incorrectly tagged `source: 'agent'` in 1.1.9.
79
+ Corrected to `source: 'system'` so `/job list`, `/a2a tree`, `/outbox`,
80
+ `/audit` etc always render inline regardless of length.
81
+
82
+ ### Migration
83
+
84
+ - After upgrade, **set up at least one access token** before exposing the
85
+ web port publicly. First start auto-creates a bootstrap token — copy
86
+ the value from `journalctl -u agim` or `agim status` output.
87
+ - Existing users on a reverse proxy with their own auth: set
88
+ `IMHUB_WEB_AUTH=off` if you don't want a second factor.
89
+ - Local-only / loopback users: nothing changes (auth bypassed on
90
+ 127.0.0.1).
91
+
92
+ ## [1.1.9] - 2026-05-16
93
+
94
+ ### Fixed — Viewer no longer steals operational/system replies
95
+
96
+ Memo confirmations, reminder fires, approval cards, restart notices,
97
+ error blurbs and command outputs all run through `sink.deliver()` —
98
+ and v1.1.6's viewer router happily picked them up the moment their
99
+ char count crossed the threshold (the encoded Baidu map URL in a memo
100
+ confirmation is enough to do it). The result: a `✅ 已记下'<地点>'`
101
+ reply got hidden behind a `📎 https://…/v/<uuid>` link, defeating the
102
+ point — the user wanted to *see* the operational outcome in chat.
103
+
104
+ **Fix**: `SinkPayload` gains a `source: 'agent' | 'system'` field,
105
+ defaulting to `'system'`. The viewer router now only fires when
106
+ `source === 'agent'`. Updated the two freeform-LLM callsites in
107
+ `cli.ts` to pass `source: 'agent'`; every other call path keeps the
108
+ default and stays inline. Future system message types stay inline
109
+ automatically — no opt-out needed.
110
+
111
+ This means anything from `/memo`, `/remind`, `/approval`, `/restart`,
112
+ `/job`, `/outbox`, `/a2a`, queued / error / recovery / restart-completion
113
+ notices, web `/api/notify` pushes, and the location-capture
114
+ confirmation now always render in full inside the IM thread,
115
+ regardless of length.
116
+
7
117
  ## [1.1.8] - 2026-05-16
8
118
 
9
119
  ### Added — Viewer auto-tunnel (cloudflared quick mode)
@@ -10,6 +10,8 @@ export type EntryAction = {
10
10
  kind: 'restart';
11
11
  } | {
12
12
  kind: 'stop';
13
+ } | {
14
+ kind: 'token';
13
15
  } | {
14
16
  kind: 'uninstall';
15
17
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"entry-menu.d.ts","sourceRoot":"","sources":["../../src/cli-ui/entry-menu.ts"],"names":[],"mappings":"AAWA,OAAO,EAAK,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpB;;;;;GAKG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CA2BjF"}
1
+ {"version":3,"file":"entry-menu.d.ts","sourceRoot":"","sources":["../../src/cli-ui/entry-menu.ts"],"names":[],"mappings":"AAWA,OAAO,EAAK,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpB;;;;;GAKG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,CA4BjF"}
@@ -31,7 +31,8 @@ export async function runEntryMenu() {
31
31
  { value: 'start_bg', name: t(lang, 'menu.start_bg') },
32
32
  { value: 'restart', name: t(lang, 'menu.restart') },
33
33
  { value: 'stop', name: t(lang, 'menu.stop') },
34
- { value: 'uninstall', name: t(lang, 'menu.uninstall'), separatorBefore: true },
34
+ { value: 'token', name: t(lang, 'menu.token'), separatorBefore: true },
35
+ { value: 'uninstall', name: t(lang, 'menu.uninstall') },
35
36
  { value: 'quit', name: t(lang, 'menu.quit'), separatorBefore: true },
36
37
  ],
37
38
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"entry-menu.js","sourceRoot":"","sources":["../../src/cli-ui/entry-menu.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,oEAAoE;AACpE,wDAAwD;AACxD,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,iEAAiE;AACjE,4CAA4C;AAE5C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,CAAC,EAAa,MAAM,WAAW,CAAA;AAWxC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAA;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAmC;YAC3D,IAAI;YACJ,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC;YACjC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,QAAQ,EAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE;gBACpD,EAAE,KAAK,EAAE,QAAQ,EAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,EAAK,eAAe,EAAE,IAAI,EAAE;gBAC9E,EAAE,KAAK,EAAE,OAAO,EAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE;gBACnD,EAAE,KAAK,EAAE,UAAU,EAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE;gBACtD,EAAE,KAAK,EAAE,SAAS,EAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE;gBACrD,EAAE,KAAK,EAAE,MAAM,EAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;gBAClD,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;gBAC9E,EAAE,KAAK,EAAE,MAAM,EAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAO,eAAe,EAAE,IAAI,EAAE;aAC/E;SACF,CAAC,CAAqC,CAAA;QACvC,IAAI,MAAM,KAAK,UAAU;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAA;QAC/E,IAAI,MAAM,KAAK,OAAO;YAAK,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAA;QAChF,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAiB,EAAE,IAAI,EAAE,CAAA;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,cAAc;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAA;QAC5E,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"entry-menu.js","sourceRoot":"","sources":["../../src/cli-ui/entry-menu.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,oEAAoE;AACpE,wDAAwD;AACxD,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,iEAAiE;AACjE,4CAA4C;AAE5C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,CAAC,EAAa,MAAM,WAAW,CAAA;AAYxC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAA;IAC7B,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAmC;YAC3D,IAAI;YACJ,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC;YACjC,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,QAAQ,EAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE;gBACpD,EAAE,KAAK,EAAE,QAAQ,EAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,EAAK,eAAe,EAAE,IAAI,EAAE;gBAC9E,EAAE,KAAK,EAAE,OAAO,EAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE;gBACnD,EAAE,KAAK,EAAE,UAAU,EAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE;gBACtD,EAAE,KAAK,EAAE,SAAS,EAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE;gBACrD,EAAE,KAAK,EAAE,MAAM,EAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;gBAClD,EAAE,KAAK,EAAE,OAAO,EAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,EAAM,eAAe,EAAE,IAAI,EAAE;gBAC9E,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE;gBACvD,EAAE,KAAK,EAAE,MAAM,EAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAO,eAAe,EAAE,IAAI,EAAE;aAC/E;SACF,CAAC,CAAqC,CAAA;QACvC,IAAI,MAAM,KAAK,UAAU;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAA;QAC/E,IAAI,MAAM,KAAK,OAAO;YAAK,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAA;QAChF,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAiB,EAAE,IAAI,EAAE,CAAA;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,cAAc;YAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAA;QAC5E,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -12,8 +12,22 @@ declare const en: {
12
12
  readonly 'menu.start_bg': "Start the service (background)";
13
13
  readonly 'menu.restart': "Restart the service";
14
14
  readonly 'menu.stop': "Stop the service";
15
+ readonly 'menu.token': "Manage web access tokens";
15
16
  readonly 'menu.uninstall': "Uninstall Agim (keeps workspaces)";
16
17
  readonly 'menu.quit': "Quit";
18
+ readonly 'token.title': "Web access tokens";
19
+ readonly 'token.subtitle': "Tokens grant access to the web console at http://<host>:3000/.";
20
+ readonly 'token.choice.create': "Generate a new token";
21
+ readonly 'token.choice.list': "List existing tokens";
22
+ readonly 'token.choice.revoke': "Revoke a token";
23
+ readonly 'token.choice.back': "← Back";
24
+ readonly 'token.create.label_prompt': "Optional label (e.g. \"macbook\"):";
25
+ readonly 'token.create.printed': "Save this token now — the raw value is not recoverable later:";
26
+ readonly 'token.list.empty': "(no tokens yet)";
27
+ readonly 'token.revoke.prompt': "Pick a token to revoke:";
28
+ readonly 'token.revoke.confirm': "Revoke {label} ({id})?";
29
+ readonly 'token.revoke.success': "✓ token revoked";
30
+ readonly 'token.revoke.not_found': "✗ token not found";
17
31
  readonly 'config.title': "Agim · config";
18
32
  readonly 'config.subtitle': "Pick a section to edit. Each section has a Back option.";
19
33
  readonly 'config.section.messengers': "Messengers (WeChat / Telegram / Feishu / Discord / Email)";
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/cli-ui/i18n.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAI9B,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2OE,CAAA;AAEV,MAAM,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAA;AAkPjC,0FAA0F;AAC1F,wBAAgB,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAAG,MAAM,CAM1F;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,IAAI,IAAI,GAAG,IAAI,CAM3C;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAOzC;AAED,eAAO,MAAM,cAAc,QAAY,CAAA"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/cli-ui/i18n.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAI9B,QAAA,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2PE,CAAA;AAEV,MAAM,MAAM,GAAG,GAAG,MAAM,OAAO,EAAE,CAAA;AAkQjC,0FAA0F;AAC1F,wBAAgB,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAAG,MAAM,CAM1F;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,IAAI,IAAI,GAAG,IAAI,CAM3C;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAOzC;AAED,eAAO,MAAM,cAAc,QAAY,CAAA"}
@@ -26,8 +26,23 @@ const en = {
26
26
  'menu.start_bg': 'Start the service (background)',
27
27
  'menu.restart': 'Restart the service',
28
28
  'menu.stop': 'Stop the service',
29
+ 'menu.token': 'Manage web access tokens',
29
30
  'menu.uninstall': 'Uninstall Agim (keeps workspaces)',
30
31
  'menu.quit': 'Quit',
32
+ // ─── token management submenu ────────────────────────────────────────
33
+ 'token.title': 'Web access tokens',
34
+ 'token.subtitle': 'Tokens grant access to the web console at http://<host>:3000/.',
35
+ 'token.choice.create': 'Generate a new token',
36
+ 'token.choice.list': 'List existing tokens',
37
+ 'token.choice.revoke': 'Revoke a token',
38
+ 'token.choice.back': '← Back',
39
+ 'token.create.label_prompt': 'Optional label (e.g. "macbook"):',
40
+ 'token.create.printed': 'Save this token now — the raw value is not recoverable later:',
41
+ 'token.list.empty': '(no tokens yet)',
42
+ 'token.revoke.prompt': 'Pick a token to revoke:',
43
+ 'token.revoke.confirm': 'Revoke {label} ({id})?',
44
+ 'token.revoke.success': '✓ token revoked',
45
+ 'token.revoke.not_found': '✗ token not found',
31
46
  // ─── config root ─────────────────────────────────────────────────────
32
47
  'config.title': 'Agim · config',
33
48
  'config.subtitle': 'Pick a section to edit. Each section has a Back option.',
@@ -244,8 +259,23 @@ const zh = {
244
259
  'menu.start_bg': '启动服务(后台)',
245
260
  'menu.restart': '重启服务',
246
261
  'menu.stop': '停止服务',
262
+ 'menu.token': '管理 Web 访问 Token',
247
263
  'menu.uninstall': '卸载阿吉姆(保留 workspaces)',
248
264
  'menu.quit': '退出',
265
+ // ─── token management submenu ────────────────────────────────────
266
+ 'token.title': 'Web 访问 Token',
267
+ 'token.subtitle': 'Token 用于登录 Web 控制台(http://<主机>:3000/)。',
268
+ 'token.choice.create': '生成新 Token',
269
+ 'token.choice.list': '查看现有 Token',
270
+ 'token.choice.revoke': '撤销 Token',
271
+ 'token.choice.back': '← 返回',
272
+ 'token.create.label_prompt': '可选 label(例如 "macbook"):',
273
+ 'token.create.printed': '请立即保存这个 Token —— 原文不可再次找回:',
274
+ 'token.list.empty': '(暂无 Token)',
275
+ 'token.revoke.prompt': '选择要撤销的 Token:',
276
+ 'token.revoke.confirm': '撤销 {label} ({id})?',
277
+ 'token.revoke.success': '✓ Token 已撤销',
278
+ 'token.revoke.not_found': '✗ 找不到对应 Token',
249
279
  // ─── config root ─────────────────────────────────────────────────
250
280
  'config.title': '阿吉姆 · 配置',
251
281
  'config.subtitle': '选要编辑的分类。每个分类内部都能 Back 回上一层。',
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/cli-ui/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/cli-ui/i18n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Lang } from './i18n.js';
2
+ export declare function runTokenMenu(lang: Lang): Promise<void>;
3
+ //# sourceMappingURL=token-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-menu.d.ts","sourceRoot":"","sources":["../../src/cli-ui/token-menu.ts"],"names":[],"mappings":"AAOA,OAAO,EAAK,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAaxC,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B5D"}
@@ -0,0 +1,127 @@
1
+ // cli-ui/token-menu.ts — interactive menu the entry-menu dispatches to
2
+ // when the user picks "Manage web access tokens".
3
+ //
4
+ // Wraps src/core/access-token.ts CRUD with a small terminal UI that
5
+ // matches the rest of the agim wizard look (menu / input / confirm).
6
+ import { menu, inputText, yesNo, BACK, UserAbortError } from './prompts.js';
7
+ import { t } from './i18n.js';
8
+ import { createToken, listTokens, revokeToken, TOKENS_FILE_PATH, } from '../core/access-token.js';
9
+ function fmtDate(unix) {
10
+ if (!unix)
11
+ return '(never)';
12
+ return new Date(unix * 1000).toISOString().replace('T', ' ').slice(0, 19);
13
+ }
14
+ export async function runTokenMenu(lang) {
15
+ while (true) {
16
+ console.log('');
17
+ console.log(t(lang, 'token.title'));
18
+ console.log(t(lang, 'token.subtitle'));
19
+ console.log(` ${TOKENS_FILE_PATH}`);
20
+ console.log('');
21
+ let pick;
22
+ try {
23
+ pick = await menu({
24
+ lang,
25
+ message: '?',
26
+ choices: [
27
+ { value: 'create', name: t(lang, 'token.choice.create') },
28
+ { value: 'list', name: t(lang, 'token.choice.list') },
29
+ { value: 'revoke', name: t(lang, 'token.choice.revoke') },
30
+ { value: 'back', name: t(lang, 'token.choice.back'), separatorBefore: true },
31
+ ],
32
+ });
33
+ }
34
+ catch (err) {
35
+ if (err instanceof UserAbortError)
36
+ return;
37
+ throw err;
38
+ }
39
+ if (pick === 'back' || pick === BACK)
40
+ return;
41
+ if (pick === 'create')
42
+ await handleCreate(lang);
43
+ else if (pick === 'list')
44
+ await handleList(lang);
45
+ else if (pick === 'revoke')
46
+ await handleRevoke(lang);
47
+ }
48
+ }
49
+ async function handleCreate(lang) {
50
+ let label = '';
51
+ try {
52
+ label = await inputText({ message: t(lang, 'token.create.label_prompt') });
53
+ }
54
+ catch (err) {
55
+ if (err instanceof UserAbortError)
56
+ return;
57
+ throw err;
58
+ }
59
+ const r = createToken(label.trim());
60
+ console.log('');
61
+ console.log(t(lang, 'token.create.printed'));
62
+ console.log('');
63
+ console.log(` id : ${r.id}`);
64
+ console.log(` label : ${label.trim() || '(unlabeled)'}`);
65
+ console.log(` token : ${r.raw}`);
66
+ console.log('');
67
+ }
68
+ async function handleList(lang) {
69
+ const rows = listTokens();
70
+ console.log('');
71
+ if (rows.length === 0) {
72
+ console.log(t(lang, 'token.list.empty'));
73
+ return;
74
+ }
75
+ for (const r of rows) {
76
+ console.log(` ${r.id} label=${r.label || '(unlabeled)'} created=${fmtDate(r.created_at)} last_used=${fmtDate(r.last_used_at)}`);
77
+ }
78
+ }
79
+ async function handleRevoke(lang) {
80
+ const rows = listTokens();
81
+ if (rows.length === 0) {
82
+ console.log(t(lang, 'token.list.empty'));
83
+ return;
84
+ }
85
+ let pickId;
86
+ try {
87
+ pickId = await menu({
88
+ lang,
89
+ message: t(lang, 'token.revoke.prompt'),
90
+ choices: rows.map((r) => ({
91
+ value: r.id,
92
+ name: `${r.id} ${r.label || '(unlabeled)'} (created ${fmtDate(r.created_at)})`,
93
+ })),
94
+ });
95
+ }
96
+ catch (err) {
97
+ if (err instanceof UserAbortError)
98
+ return;
99
+ throw err;
100
+ }
101
+ if (pickId === BACK)
102
+ return;
103
+ const row = rows.find((r) => r.id === pickId);
104
+ if (!row)
105
+ return;
106
+ let ok = false;
107
+ try {
108
+ ok = await yesNo({
109
+ message: t(lang, 'token.revoke.confirm')
110
+ .replace('{label}', row.label || '(unlabeled)')
111
+ .replace('{id}', row.id),
112
+ default: false,
113
+ });
114
+ }
115
+ catch (err) {
116
+ if (err instanceof UserAbortError)
117
+ return;
118
+ throw err;
119
+ }
120
+ if (!ok)
121
+ return;
122
+ if (revokeToken(row.id))
123
+ console.log(t(lang, 'token.revoke.success'));
124
+ else
125
+ console.log(t(lang, 'token.revoke.not_found'));
126
+ }
127
+ //# sourceMappingURL=token-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-menu.js","sourceRoot":"","sources":["../../src/cli-ui/token-menu.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -424,10 +424,16 @@ program
424
424
  reply = await handleStopCommand('', routeCtx);
425
425
  else
426
426
  reply = await handleStatusCommand('', routeCtx);
427
- await sink.deliver({
428
- platform: ctx.platform, channelId: ctx.channelId, threadId: ctx.message.threadId,
429
- payload: reply, kind: 'text',
430
- });
427
+ // v1.1.10: /restart now delivers its "重启中…" ack synchronously
428
+ // from inside initiateRestart() to win the race against the new
429
+ // process's "✅ 已重启完成…" push. In that case the handler
430
+ // returns an empty string — skip the duplicate sink call.
431
+ if (reply && reply.length > 0) {
432
+ await sink.deliver({
433
+ platform: ctx.platform, channelId: ctx.channelId, threadId: ctx.message.threadId,
434
+ payload: reply, kind: 'text',
435
+ });
436
+ }
431
437
  return;
432
438
  }
433
439
  }
@@ -918,13 +924,27 @@ async function handleMessage(ctx, defaultAgent) {
918
924
  await stopTyping();
919
925
  await dismiss();
920
926
  markJobCompleted(inlineJobId, result);
921
- const sinkRes = await sink.deliver({
922
- platform, channelId: ctx.channelId, threadId: message.threadId,
923
- payload: await maybePrefix(result), kind: 'text',
924
- jobId: inlineJobId > 0 ? inlineJobId : undefined,
925
- });
926
- if (sinkRes.outboxId > 0)
927
- linkJobOutbox(inlineJobId, sinkRes.outboxId);
927
+ // v1.1.10: string branch is the slash-command path (e.g. /job list,
928
+ // /a2a tree, /outbox status, /restart, /audit). These are
929
+ // operational replies and must stay inline regardless of length —
930
+ // truncating a /job list table behind a viewer link defeats the
931
+ // command. Only the streaming-generator branch below is true
932
+ // freeform agent output and gets source: 'agent'.
933
+ //
934
+ // Empty-string return signals "I already delivered the reply
935
+ // myself" — used by /restart which pushes its in-flight ack via
936
+ // sink with priority='high' to win the race against the new
937
+ // process's completion push. Skip the duplicate sink call.
938
+ if (result.length > 0) {
939
+ const sinkRes = await sink.deliver({
940
+ platform, channelId: ctx.channelId, threadId: message.threadId,
941
+ payload: await maybePrefix(result), kind: 'text',
942
+ jobId: inlineJobId > 0 ? inlineJobId : undefined,
943
+ source: 'system',
944
+ });
945
+ if (sinkRes.outboxId > 0)
946
+ linkJobOutbox(inlineJobId, sinkRes.outboxId);
947
+ }
928
948
  logger.info({ event: 'message.sent', responseLen: result.length });
929
949
  }
930
950
  else {
@@ -941,6 +961,7 @@ async function handleMessage(ctx, defaultAgent) {
941
961
  platform, channelId: ctx.channelId, threadId: message.threadId,
942
962
  payload: await maybePrefix(fullResponse), kind: 'text',
943
963
  jobId: inlineJobId > 0 ? inlineJobId : undefined,
964
+ source: 'agent', // freeform LLM output → eligible for viewer routing
944
965
  });
945
966
  if (sinkRes.outboxId > 0)
946
967
  linkJobOutbox(inlineJobId, sinkRes.outboxId);
@@ -1446,6 +1467,59 @@ program
1446
1467
  const { cmdUninstall } = await import('./cli-ui/cmd-handlers.js');
1447
1468
  await cmdUninstall();
1448
1469
  });
1470
+ // ─── access tokens for the web console (v1.1.10+) ───────────────────
1471
+ //
1472
+ // Generates / lists / revokes tokens stored under ~/.agim/tokens.json.
1473
+ // Required to log into the web UI when bound to a non-loopback address.
1474
+ // See src/core/access-token.ts for storage details + bootstrap behavior.
1475
+ const tokenCmd = program.command('token').description('Manage web console access tokens');
1476
+ tokenCmd
1477
+ .command('create [label]')
1478
+ .description('Create a new web access token (raw value printed once)')
1479
+ .action(async (label) => {
1480
+ const { createToken } = await import('./core/access-token.js');
1481
+ const t = createToken(label || '');
1482
+ console.log('');
1483
+ console.log('✓ New access token created.');
1484
+ console.log(` id : ${t.id}`);
1485
+ console.log(` label : ${label || '(unlabeled)'}`);
1486
+ console.log(` token : ${t.raw}`);
1487
+ console.log('');
1488
+ console.log('⚠️ This is the only time the raw value is shown. Save it now.');
1489
+ console.log(' Paste it at the /login page or send it as an "Authorization: Bearer <token>" header.');
1490
+ });
1491
+ tokenCmd
1492
+ .command('list')
1493
+ .description('List existing tokens (no secrets shown)')
1494
+ .action(async () => {
1495
+ const { listTokens, TOKENS_FILE_PATH } = await import('./core/access-token.js');
1496
+ const rows = listTokens();
1497
+ console.log(`Stored at: ${TOKENS_FILE_PATH}`);
1498
+ if (rows.length === 0) {
1499
+ console.log('(no tokens — run `agim token create` to create one)');
1500
+ return;
1501
+ }
1502
+ for (const r of rows) {
1503
+ const created = new Date(r.created_at * 1000).toISOString().replace('T', ' ').slice(0, 19);
1504
+ const lastUsed = r.last_used_at
1505
+ ? new Date(r.last_used_at * 1000).toISOString().replace('T', ' ').slice(0, 19)
1506
+ : '(never)';
1507
+ console.log(` ${r.id} label=${r.label} created=${created} last_used=${lastUsed}`);
1508
+ }
1509
+ });
1510
+ tokenCmd
1511
+ .command('revoke <id>')
1512
+ .description('Revoke (delete) a token by id')
1513
+ .action(async (id) => {
1514
+ const { revokeToken } = await import('./core/access-token.js');
1515
+ const ok = revokeToken(id);
1516
+ if (ok)
1517
+ console.log(`✓ token ${id} revoked.`);
1518
+ else {
1519
+ console.log(`✗ token ${id} not found.`);
1520
+ process.exit(1);
1521
+ }
1522
+ });
1449
1523
  // ─── bare `agim` → entry menu (v0.5.0+) ─────────────────────────────
1450
1524
  // If the user invoked us with no args (just `agim`), drop them at
1451
1525
  // the language picker + maintenance menu instead of dumping --help text.
@@ -1498,6 +1572,11 @@ async function maybeRunEntryMenu() {
1498
1572
  case 'stop':
1499
1573
  await cmdStop();
1500
1574
  return true;
1575
+ case 'token': {
1576
+ const { runTokenMenu } = await import('./cli-ui/token-menu.js');
1577
+ await runTokenMenu(lang);
1578
+ return true;
1579
+ }
1501
1580
  case 'uninstall':
1502
1581
  await cmdUninstall();
1503
1582
  return true;