agim-cli 1.1.9 → 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 (42) hide show
  1. package/CHANGELOG.md +85 -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 +89 -12
  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/restart-flow.d.ts.map +1 -1
  32. package/dist/core/restart-flow.js +50 -12
  33. package/dist/core/restart-flow.js.map +1 -1
  34. package/dist/core/types.d.ts +6 -0
  35. package/dist/core/types.d.ts.map +1 -1
  36. package/dist/web/public/_app.js +59 -0
  37. package/dist/web/public/login.html +196 -0
  38. package/dist/web/public/settings.html +140 -1
  39. package/dist/web/server.d.ts.map +1 -1
  40. package/dist/web/server.js +190 -8
  41. package/dist/web/server.js.map +1 -1
  42. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,91 @@ 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
+
7
92
  ## [1.1.9] - 2026-05-16
8
93
 
9
94
  ### Fixed — Viewer no longer steals operational/system replies
@@ -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":"AAAA,uEAAuE;AACvE,kDAAkD;AAClD,EAAE;AACF,oEAAoE;AACpE,qEAAqE;AAErE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EAAE,CAAC,EAAa,MAAM,WAAW,CAAA;AACxC,OAAO,EACL,WAAW,EACX,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,MAAM,yBAAyB,CAAA;AAEhC,SAAS,OAAO,CAAC,IAAmB;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,OAAO,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAU;IAC3C,OAAO,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAA;QACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,gBAAgB,EAAE,CAAC,CAAA;QACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,IAAI,IAAyD,CAAA;QAC7D,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAwC;gBACvD,IAAI;gBACJ,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE;oBACzD,EAAE,KAAK,EAAE,MAAM,EAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE;oBACvD,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE;oBACzD,EAAE,KAAK,EAAE,MAAM,EAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;iBAC/E;aACF,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,cAAc;gBAAE,OAAM;YACzC,MAAM,GAAG,CAAA;QACX,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI;YAAE,OAAM;QAC5C,IAAI,IAAI,KAAK,QAAQ;YAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;aAC1C,IAAI,IAAI,KAAK,MAAM;YAAE,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;aAC3C,IAAI,IAAI,KAAK,QAAQ;YAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;IACtD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAU;IACpC,IAAI,KAAK,GAAG,EAAE,CAAA;IACd,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,2BAA2B,CAAC,EAAE,CAAC,CAAA;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,cAAc;YAAE,OAAM;QACzC,MAAM,GAAG,CAAA;IACX,CAAC;IACD,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACjC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC,CAAA;IAC1D,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAU;IAClC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAA;IACzB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAA;QACxC,OAAM;IACR,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,KAAK,IAAI,aAAa,aAAa,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IACrI,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAU;IACpC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAA;IACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAA;QACxC,OAAM;IACR,CAAC;IACD,IAAI,MAA4B,CAAA;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAS;YAC1B,IAAI;YACJ,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC;YACvC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxB,KAAK,EAAE,CAAC,CAAC,EAAE;gBACX,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,aAAa,cAAc,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG;aACjF,CAAC,CAAC;SACJ,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,cAAc;YAAE,OAAM;QACzC,MAAM,GAAG,CAAA;IACX,CAAC;IACD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAM;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAA;IAC7C,IAAI,CAAC,GAAG;QAAE,OAAM;IAChB,IAAI,EAAE,GAAG,KAAK,CAAA;IACd,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,KAAK,CAAC;YACf,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,sBAAsB,CAAC;iBACrC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,IAAI,aAAa,CAAC;iBAC9C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,cAAc;YAAE,OAAM;QACzC,MAAM,GAAG,CAAA;IACX,CAAC;IACD,IAAI,CAAC,EAAE;QAAE,OAAM;IACf,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAA;;QAChE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAA;AACrD,CAAC"}
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,14 +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
- source: 'agent', // freeform LLM output eligible for viewer routing
926
- });
927
- if (sinkRes.outboxId > 0)
928
- 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
+ }
929
948
  logger.info({ event: 'message.sent', responseLen: result.length });
930
949
  }
931
950
  else {
@@ -1448,6 +1467,59 @@ program
1448
1467
  const { cmdUninstall } = await import('./cli-ui/cmd-handlers.js');
1449
1468
  await cmdUninstall();
1450
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
+ });
1451
1523
  // ─── bare `agim` → entry menu (v0.5.0+) ─────────────────────────────
1452
1524
  // If the user invoked us with no args (just `agim`), drop them at
1453
1525
  // the language picker + maintenance menu instead of dumping --help text.
@@ -1500,6 +1572,11 @@ async function maybeRunEntryMenu() {
1500
1572
  case 'stop':
1501
1573
  await cmdStop();
1502
1574
  return true;
1575
+ case 'token': {
1576
+ const { runTokenMenu } = await import('./cli-ui/token-menu.js');
1577
+ await runTokenMenu(lang);
1578
+ return true;
1579
+ }
1503
1580
  case 'uninstall':
1504
1581
  await cmdUninstall();
1505
1582
  return true;