nolo-cli 0.14.0-alpha.1 → 0.14.0-alpha.3

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 (70) hide show
  1. package/README.md +5 -2
  2. package/{_executeModel-SQVV6CXR.js → _executeModel-ERQQ5SO5.js} +16 -16
  3. package/{action-Q5CBVUV5.js → action-N3KXFO5V.js} +3 -3
  4. package/{addContentAction-ZCJJ3XOL.js → addContentAction-4Z762DMR.js} +2 -2
  5. package/{addDialogAgentAction-ROUQPBVI.js → addDialogAgentAction-FALLEKPR.js} +1 -1
  6. package/{agentDeleteCommand-TSY5OSG7.js → agentDeleteCommand-AZDVM4HQ.js} +9 -9
  7. package/{agentEmailCommands-YX57M3P7.js → agentEmailCommands-SBGSPBSS.js} +20 -20
  8. package/agentGrantCommands-B4MB23VQ.js +239 -0
  9. package/{agentListCommands-S65H4AVT.js → agentListCommands-OJLOXSKL.js} +10 -10
  10. package/{agentMachineCommands-ELNLSTE4.js → agentMachineCommands-Y7RXBTEY.js} +9 -9
  11. package/{agentRecordCommands-HVCGO2XK.js → agentRecordCommands-LFQ3RK24.js} +20 -20
  12. package/{agentRunCommand-EOFDKKFI.js → agentRunCommand-WARBRXRP.js} +20 -20
  13. package/{agentRuntimeLocal-F4FWS5Z4.js → agentRuntimeLocal-DSUBT77I.js} +6 -6
  14. package/{agentSlice-R3WAV3VG.js → agentSlice-F23RHRVB.js} +2 -2
  15. package/{authCommand-O7SL3WW5.js → authCommand-66ME4KZX.js} +8 -4
  16. package/{chunk-BRODTPXY.js → chunk-33K5FKRL.js} +1 -1
  17. package/{chunk-SJQVOEIV.js → chunk-3B2LFO6R.js} +5 -2
  18. package/{chunk-2MW6QFIQ.js → chunk-3FCSMQAC.js} +1 -1
  19. package/{chunk-IVOFAQ5R.js → chunk-4GTGSUMH.js} +3 -3
  20. package/{chunk-BHKOPLWJ.js → chunk-4QUXYE7J.js} +4 -4
  21. package/{chunk-YX4H7EP4.js → chunk-4UUJFFMK.js} +1 -1
  22. package/{chunk-TSJBYH7X.js → chunk-5R73BS7Y.js} +1 -1
  23. package/{chunk-K4S6CYKK.js → chunk-7EVWUQJZ.js} +65 -13
  24. package/{chunk-V6PGKRZC.js → chunk-A5V7UEZJ.js} +1 -1
  25. package/{chunk-CFX7LP6W.js → chunk-BHK5ZAW7.js} +1 -1
  26. package/{chunk-ACPNKI3V.js → chunk-CBLNDNYI.js} +3 -3
  27. package/{chunk-3DKS6UER.js → chunk-KPUM5RIE.js} +105 -47
  28. package/{chunk-HXPBV44X.js → chunk-LAVVL3GH.js} +142 -23
  29. package/{chunk-ZEYSZ5WG.js → chunk-NARL6TJS.js} +18 -18
  30. package/{chunk-XZY4TCZO.js → chunk-NFRS3JW4.js} +1 -1
  31. package/{chunk-AEMXZOAK.js → chunk-NVV3ABII.js} +9 -8
  32. package/{chunk-7ULBTAQK.js → chunk-PBP4KPF7.js} +9 -9
  33. package/{chunk-CANREHJB.js → chunk-RLOKCZNX.js} +1 -1
  34. package/{chunk-QRBZS6G4.js → chunk-RZALKBP4.js} +2 -2
  35. package/{chunk-EC2EU2F4.js → chunk-S5UACFUP.js} +54 -2
  36. package/{chunk-DSCG2DY5.js → chunk-T3X232L6.js} +1 -1
  37. package/{chunk-AGUNTRZV.js → chunk-TLNEQI2R.js} +1 -1
  38. package/{chunk-FLY6L3KA.js → chunk-TQCONXQ3.js} +1 -1
  39. package/{chunk-QV25QXE2.js → chunk-V6VXDXGY.js} +2 -2
  40. package/{chunk-O2S35KSZ.js → chunk-VIPFEPO4.js} +2 -2
  41. package/{chunk-7H3O7ZA2.js → chunk-VQFY3VXW.js} +1 -1
  42. package/{chunk-2KNEWIDU.js → chunk-X7NITNY4.js} +2 -2
  43. package/{chunk-4GXQ74DF.js → chunk-XIDYAII4.js} +2 -2
  44. package/{createAgentAutomationAction-LL2UAZL3.js → createAgentAutomationAction-YCBXLFWW.js} +7 -7
  45. package/{createDialogAction-MSMUS4NO.js → createDialogAction-LOE4IBWI.js} +8 -8
  46. package/{createPageAction-MGN4CQWL.js → createPageAction-MQPKRYSZ.js} +7 -7
  47. package/{dbSlice-35VY6LYX.js → dbSlice-7Q23HSWH.js} +1 -1
  48. package/{dialogCommands-7EKKHEGO.js → dialogCommands-BQDGLVMO.js} +10 -10
  49. package/{dialogSlice-ZRYCGVVH.js → dialogSlice-MLJL22KB.js} +7 -7
  50. package/{docCreateCommands-YCU2BINI.js → docCreateCommands-K2MPMXYF.js} +9 -9
  51. package/{docDeleteCommands-CEB54GNO.js → docDeleteCommands-NBAARB77.js} +10 -10
  52. package/{docReadCommands-Z2OZTAIA.js → docReadCommands-S3MO5RPS.js} +9 -9
  53. package/{docStore-AYLR7HES.js → docStore-CRULGCHQ.js} +8 -8
  54. package/{docUpdateCommands-VU2TNBPM.js → docUpdateCommands-EHEI7FCE.js} +9 -9
  55. package/{handleSendMessageAction-D4UALBU5.js → handleSendMessageAction-JSJC7RWU.js} +34 -8
  56. package/index.js +53 -41
  57. package/{machineCommands-65QZPPET.js → machineCommands-7WHQPMXF.js} +19 -19
  58. package/{machineWsRunDispatch-35QVFHKA.js → machineWsRunDispatch-EZ2IOYWT.js} +19 -19
  59. package/package.json +1 -1
  60. package/{readlineWorkspace-U4PN6GH2.js → readlineWorkspace-2KIRBLOS.js} +154 -40
  61. package/{removeDialogAgentAction-DPSDJL5F.js → removeDialogAgentAction-WKHZT6VJ.js} +3 -3
  62. package/{runAgentClientLoop-HND2XKNI.js → runAgentClientLoop-GFC2XHEC.js} +13 -13
  63. package/{setDialogExtraReferencesAction-6UPTOPJA.js → setDialogExtraReferencesAction-GCI5QU6E.js} +1 -1
  64. package/{setPrimaryDialogAgentAction-PFDHN53I.js → setPrimaryDialogAgentAction-NRO57AS6.js} +3 -3
  65. package/{settingSlice-6M2BKFW5.js → settingSlice-FTWZ5ZHT.js} +4 -2
  66. package/{spaceCommands-NP75DOJW.js → spaceCommands-4R63UST3.js} +9 -9
  67. package/{spaceSlice-J44RNCGS.js → spaceSlice-IYTGSETI.js} +7 -7
  68. package/{streamAgentChatTurn-MNBTNJDU.js → streamAgentChatTurn-42SBHJ6F.js} +28 -22
  69. package/{tools-R2M77NZJ.js → tools-BBNP7OHL.js} +11 -11
  70. package/{updateDialogTitleAction-ERVV47T7.js → updateDialogTitleAction-UOULZ7J2.js} +7 -7
package/README.md CHANGED
@@ -231,8 +231,11 @@ nolo table add-column --table meta-0e95801d90-01KWSK4Q4TESXQ06SW39JN2TTJ --schem
231
231
  - `nolo agent email bind <agent> --email <address>` 将已有地址绑定到 agent。
232
232
  - `nolo agent email create-and-provision <slug> --name <display> [--local-part pay] [--copy-provider-from <agent>]` 一步创建 agent 并开通邮箱。
233
233
  - `nolo auth cloudflare [--client-id <id>] [--generate-token] [--zone-name <domain>] [--write-to-env [path]]` 通过 Cloudflare 自托管 OAuth 授权并可选生成 `Zone:Email Routing:Edit` 的 API Token,还可直接写入 `.env`。
234
- - `nolo auth claude [--no-browser] [--sync-to-server]` 通过 PKCE + `localhost:54545` 回调授权 Claude Pro/Max;`--no-browser` 时可粘贴最终回调 URL/授权码。凭据保存到 `~/.nolo/credentials/claude.json`。Agent 使用 `provider: "anthropic"`、`apiKeyRef: "claude"`。
235
- - `nolo auth cursor [--no-browser] [--sync-to-server]` 通过 poll-based device flow 授权 Cursor Pro(无需回调端口)。打开 `https://cursor.com/loginDeepControl` 并轮询 `api2.cursor.sh/auth/poll` 获取 token。凭据保存到 `~/.nolo/credentials/cursor.json`。Agent 使用 `provider: "cursor"`、`apiKeyRef: "cursor"`,模型如 `cursor-grok-4.5-high`(Cursor Models 池;裸 `cursor-grok-4.5` 会由 provider 兼容映射到 high)。
234
+ - `nolo auth claude [--no-browser] [--sync-to-server|--no-sync-to-server]` 通过 PKCE + `localhost:54545` 回调授权 Claude Pro/Max;`--no-browser` 时可粘贴最终回调 URL/授权码。凭据保存到 `~/.nolo/credentials/claude.json`。若已配置 `NOLO_SERVER`+`AUTH_TOKEN`(或 profile),登录成功后会自动 sync 到 server;可用 `--no-sync-to-server` 或 `NOLO_OAUTH_AUTO_SYNC=0` 关闭。Agent 使用 `provider: "anthropic"`、`apiKeyRef: "claude"`。
235
+ - `nolo auth cursor [--no-browser] [--sync-to-server|--no-sync-to-server]` 通过 poll-based device flow 授权 Cursor Pro(无需回调端口)。打开 `https://cursor.com/loginDeepControl` 并轮询 `api2.cursor.sh/auth/poll` 获取 token。凭据保存到 `~/.nolo/credentials/cursor.json`。同样在 server 配置存在时自动 sync。Agent 使用 `provider: "cursor"`、`apiKeyRef: "cursor"`,模型如 `cursor-grok-4.5-high`(Cursor Models 池;裸 `cursor-grok-4.5` 会由 provider 兼容映射到 high)。
236
+ - `nolo agent grant <agent> --to <userId>` 给对方发点对点额度授权(收藏 ≠ 授权;公共/跨空间需要)。
237
+ - `nolo agent grants <agent>` 列出该 agent 的有效授权。
238
+ - `nolo agent revoke-grant <agent> --from <userId>` 撤销授权。
236
239
 
237
240
  账户所有权对私有 agent 维护很重要。默认的新测试、验证 dialogs、任务板写入、机器绑定的 agent 运行和用户可见的结果应写入当前操作员账户 `0e95801d90`。原有的 `b2e06f801f` / platform-demo 账户已删除,仅在极少数维护旧公开/共享记录场景时保留。使用 `nolo agent read`、`nolo agent update` 和仓库原生助手作为正常入口点;只有明确针对旧记录的所有者专属操作才应使用维护的 platform-demo token(来自 `scripts/testUtils.ts`)或重新生成的 token(来自 `scripts/generateToken.ts`)。不要将 token 字符串复制到文档、日志或提示词中。
238
241
 
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  fetchAgentContexts
3
- } from "./chunk-XZY4TCZO.js";
3
+ } from "./chunk-NFRS3JW4.js";
4
4
  import {
5
5
  filterAndCleanMessages,
6
6
  sendOpenAICompletionsRequest
7
- } from "./chunk-7ULBTAQK.js";
7
+ } from "./chunk-PBP4KPF7.js";
8
8
  import "./chunk-JEXVIMYZ.js";
9
- import "./chunk-CANREHJB.js";
9
+ import "./chunk-RLOKCZNX.js";
10
10
  import {
11
11
  generateRequestBody,
12
12
  mergeReferences,
13
13
  performFetchRequest
14
- } from "./chunk-AEMXZOAK.js";
14
+ } from "./chunk-NVV3ABII.js";
15
15
  import "./chunk-OIMX7MM4.js";
16
16
  import "./chunk-VIDPVFP3.js";
17
- import "./chunk-HXPBV44X.js";
17
+ import "./chunk-LAVVL3GH.js";
18
18
  import "./chunk-RQSOAMPJ.js";
19
19
  import "./chunk-OOIN7HSO.js";
20
20
  import "./chunk-KQHGZWSV.js";
@@ -23,29 +23,29 @@ import "./chunk-3LY4F7SV.js";
23
23
  import "./chunk-VP4WJWKW.js";
24
24
  import "./chunk-63W5N6P3.js";
25
25
  import "./chunk-VF4K2QE6.js";
26
- import "./chunk-IVOFAQ5R.js";
27
- import "./chunk-2KNEWIDU.js";
26
+ import "./chunk-4GTGSUMH.js";
27
+ import "./chunk-X7NITNY4.js";
28
28
  import "./chunk-VC6OZXO5.js";
29
29
  import {
30
30
  selectAllMsgs,
31
31
  selectCurrentDialogConfig,
32
32
  updateTokensAction
33
- } from "./chunk-ZEYSZ5WG.js";
33
+ } from "./chunk-NARL6TJS.js";
34
34
  import "./chunk-V2J635L5.js";
35
35
  import "./chunk-MRC4Q34M.js";
36
36
  import "./chunk-MTU75CZ2.js";
37
37
  import "./chunk-CWMSB67P.js";
38
- import "./chunk-BHKOPLWJ.js";
39
- import "./chunk-QV25QXE2.js";
38
+ import "./chunk-4QUXYE7J.js";
39
+ import "./chunk-V6VXDXGY.js";
40
40
  import "./chunk-Z4NR32XR.js";
41
41
  import "./chunk-M76ECQRD.js";
42
42
  import "./chunk-WZSRQNQG.js";
43
- import "./chunk-7H3O7ZA2.js";
43
+ import "./chunk-VQFY3VXW.js";
44
44
  import "./chunk-3WGLLTK4.js";
45
45
  import "./chunk-UW3WOIWJ.js";
46
46
  import "./chunk-KTFJUPDW.js";
47
47
  import "./chunk-B4KT7RN2.js";
48
- import "./chunk-SJQVOEIV.js";
48
+ import "./chunk-3B2LFO6R.js";
49
49
  import "./chunk-5MMAK75Q.js";
50
50
  import {
51
51
  getApiEndpoint
@@ -65,16 +65,16 @@ import "./chunk-HNMXYYJR.js";
65
65
  import "./chunk-SOTZ6RDN.js";
66
66
  import "./chunk-IKXL2HZ3.js";
67
67
  import "./chunk-524BDL33.js";
68
- import "./chunk-CFX7LP6W.js";
68
+ import "./chunk-BHK5ZAW7.js";
69
69
  import {
70
70
  selectCurrentServer
71
- } from "./chunk-EC2EU2F4.js";
71
+ } from "./chunk-S5UACFUP.js";
72
72
  import "./chunk-Y5GCAMGP.js";
73
73
  import "./chunk-KX6YBIHG.js";
74
- import "./chunk-2MW6QFIQ.js";
74
+ import "./chunk-3FCSMQAC.js";
75
75
  import {
76
76
  read
77
- } from "./chunk-V6PGKRZC.js";
77
+ } from "./chunk-A5V7UEZJ.js";
78
78
  import "./chunk-O4BU24WZ.js";
79
79
  import "./chunk-I42VC5KR.js";
80
80
  import "./chunk-WWC7I6TA.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  shareResourceAction
3
- } from "./chunk-CFX7LP6W.js";
4
- import "./chunk-EC2EU2F4.js";
3
+ } from "./chunk-BHK5ZAW7.js";
4
+ import "./chunk-S5UACFUP.js";
5
5
  import "./chunk-Y5GCAMGP.js";
6
6
  import "./chunk-KX6YBIHG.js";
7
- import "./chunk-V6PGKRZC.js";
7
+ import "./chunk-A5V7UEZJ.js";
8
8
  import "./chunk-O4BU24WZ.js";
9
9
  import "./chunk-I42VC5KR.js";
10
10
  import "./chunk-WWC7I6TA.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  addContentAction
3
- } from "./chunk-2MW6QFIQ.js";
4
- import "./chunk-V6PGKRZC.js";
3
+ } from "./chunk-3FCSMQAC.js";
4
+ import "./chunk-A5V7UEZJ.js";
5
5
  import "./chunk-O4BU24WZ.js";
6
6
  import "./chunk-I42VC5KR.js";
7
7
  import "./chunk-WWC7I6TA.js";
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  patch,
12
12
  selectById
13
- } from "./chunk-V6PGKRZC.js";
13
+ } from "./chunk-A5V7UEZJ.js";
14
14
  import "./chunk-O4BU24WZ.js";
15
15
  import "./chunk-I42VC5KR.js";
16
16
  import "./chunk-WWC7I6TA.js";
@@ -1,27 +1,27 @@
1
1
  import {
2
2
  deleteDbRecordOnServers
3
- } from "./chunk-YX4H7EP4.js";
3
+ } from "./chunk-4UUJFFMK.js";
4
4
  import {
5
5
  getReadableCliDb
6
6
  } from "./chunk-W4NVOSFF.js";
7
7
  import {
8
8
  resolveAgentRecordFromHybridStore
9
- } from "./chunk-TSJBYH7X.js";
10
- import "./chunk-FLY6L3KA.js";
9
+ } from "./chunk-5R73BS7Y.js";
10
+ import "./chunk-TQCONXQ3.js";
11
11
  import {
12
12
  resolveCliAgentKeyInput
13
13
  } from "./chunk-VHBWHNVT.js";
14
14
  import "./chunk-KQHGZWSV.js";
15
- import "./chunk-BRODTPXY.js";
16
- import "./chunk-PB2DHBEQ.js";
15
+ import "./chunk-33K5FKRL.js";
17
16
  import "./chunk-ZNFJWEN4.js";
17
+ import "./chunk-PB2DHBEQ.js";
18
18
  import "./chunk-OIQPORYI.js";
19
- import "./chunk-7H3O7ZA2.js";
19
+ import "./chunk-VQFY3VXW.js";
20
20
  import "./chunk-3WGLLTK4.js";
21
21
  import "./chunk-UW3WOIWJ.js";
22
22
  import "./chunk-KTFJUPDW.js";
23
23
  import "./chunk-B4KT7RN2.js";
24
- import "./chunk-SJQVOEIV.js";
24
+ import "./chunk-3B2LFO6R.js";
25
25
  import "./chunk-5MMAK75Q.js";
26
26
  import "./chunk-OGGHETUE.js";
27
27
  import "./chunk-5CS33IBL.js";
@@ -40,8 +40,8 @@ import "./chunk-IDZTNRP2.js";
40
40
  import "./chunk-IKXL2HZ3.js";
41
41
  import "./chunk-524BDL33.js";
42
42
  import "./chunk-KX6YBIHG.js";
43
- import "./chunk-2MW6QFIQ.js";
44
- import "./chunk-V6PGKRZC.js";
43
+ import "./chunk-3FCSMQAC.js";
44
+ import "./chunk-A5V7UEZJ.js";
45
45
  import "./chunk-O4BU24WZ.js";
46
46
  import "./chunk-I42VC5KR.js";
47
47
  import "./chunk-WWC7I6TA.js";
@@ -8,8 +8,8 @@ import {
8
8
  } from "./chunk-3QAF2LTL.js";
9
9
  import {
10
10
  runAgentCreateCommand
11
- } from "./chunk-O2S35KSZ.js";
12
- import "./chunk-3DKS6UER.js";
11
+ } from "./chunk-VIPFEPO4.js";
12
+ import "./chunk-KPUM5RIE.js";
13
13
  import "./chunk-EHLHSX7R.js";
14
14
  import "./chunk-CMKUBIGW.js";
15
15
  import "./chunk-JBTJAPUF.js";
@@ -19,16 +19,16 @@ import {
19
19
  import {
20
20
  fetchWithTransportFallback,
21
21
  resolveAgentRecordFromHybridStore
22
- } from "./chunk-TSJBYH7X.js";
23
- import "./chunk-FLY6L3KA.js";
22
+ } from "./chunk-5R73BS7Y.js";
23
+ import "./chunk-TQCONXQ3.js";
24
24
  import {
25
25
  resolveCliAgentKeyInput
26
26
  } from "./chunk-VHBWHNVT.js";
27
- import "./chunk-DSCG2DY5.js";
27
+ import "./chunk-T3X232L6.js";
28
28
  import "./chunk-ATNTHIZI.js";
29
- import "./chunk-CANREHJB.js";
29
+ import "./chunk-RLOKCZNX.js";
30
30
  import "./chunk-OIMX7MM4.js";
31
- import "./chunk-HXPBV44X.js";
31
+ import "./chunk-LAVVL3GH.js";
32
32
  import "./chunk-RQSOAMPJ.js";
33
33
  import "./chunk-OOIN7HSO.js";
34
34
  import "./chunk-KQHGZWSV.js";
@@ -37,30 +37,30 @@ import "./chunk-3LY4F7SV.js";
37
37
  import "./chunk-VP4WJWKW.js";
38
38
  import "./chunk-63W5N6P3.js";
39
39
  import "./chunk-VF4K2QE6.js";
40
- import "./chunk-IVOFAQ5R.js";
41
- import "./chunk-2KNEWIDU.js";
40
+ import "./chunk-4GTGSUMH.js";
41
+ import "./chunk-X7NITNY4.js";
42
42
  import "./chunk-VC6OZXO5.js";
43
43
  import "./chunk-OWOHNGCN.js";
44
- import "./chunk-ZEYSZ5WG.js";
44
+ import "./chunk-NARL6TJS.js";
45
45
  import "./chunk-V2J635L5.js";
46
46
  import "./chunk-MRC4Q34M.js";
47
47
  import "./chunk-MTU75CZ2.js";
48
48
  import "./chunk-CWMSB67P.js";
49
- import "./chunk-BHKOPLWJ.js";
50
- import "./chunk-QV25QXE2.js";
49
+ import "./chunk-4QUXYE7J.js";
50
+ import "./chunk-V6VXDXGY.js";
51
51
  import "./chunk-Z4NR32XR.js";
52
52
  import "./chunk-M76ECQRD.js";
53
53
  import "./chunk-WZSRQNQG.js";
54
- import "./chunk-BRODTPXY.js";
55
- import "./chunk-PB2DHBEQ.js";
54
+ import "./chunk-33K5FKRL.js";
56
55
  import "./chunk-ZNFJWEN4.js";
56
+ import "./chunk-PB2DHBEQ.js";
57
57
  import "./chunk-OIQPORYI.js";
58
- import "./chunk-7H3O7ZA2.js";
58
+ import "./chunk-VQFY3VXW.js";
59
59
  import "./chunk-3WGLLTK4.js";
60
60
  import "./chunk-UW3WOIWJ.js";
61
61
  import "./chunk-KTFJUPDW.js";
62
62
  import "./chunk-B4KT7RN2.js";
63
- import "./chunk-SJQVOEIV.js";
63
+ import "./chunk-3B2LFO6R.js";
64
64
  import "./chunk-5MMAK75Q.js";
65
65
  import "./chunk-OGGHETUE.js";
66
66
  import "./chunk-5CS33IBL.js";
@@ -84,12 +84,12 @@ import "./chunk-SOTZ6RDN.js";
84
84
  import "./chunk-IDZTNRP2.js";
85
85
  import "./chunk-IKXL2HZ3.js";
86
86
  import "./chunk-524BDL33.js";
87
- import "./chunk-CFX7LP6W.js";
88
- import "./chunk-EC2EU2F4.js";
87
+ import "./chunk-BHK5ZAW7.js";
88
+ import "./chunk-S5UACFUP.js";
89
89
  import "./chunk-Y5GCAMGP.js";
90
90
  import "./chunk-KX6YBIHG.js";
91
- import "./chunk-2MW6QFIQ.js";
92
- import "./chunk-V6PGKRZC.js";
91
+ import "./chunk-3FCSMQAC.js";
92
+ import "./chunk-A5V7UEZJ.js";
93
93
  import {
94
94
  createAgentKey
95
95
  } from "./chunk-O4BU24WZ.js";
@@ -0,0 +1,239 @@
1
+ import {
2
+ resolveCliAgentKeyInput
3
+ } from "./chunk-VHBWHNVT.js";
4
+ import {
5
+ toErrorMessage
6
+ } from "./chunk-HNMXYYJR.js";
7
+ import "./chunk-QSJ3HFEF.js";
8
+ import {
9
+ parseUserIdFromAuthToken,
10
+ readOption,
11
+ resolveAuthToken,
12
+ resolveServerUrl
13
+ } from "./chunk-5NBHQD4D.js";
14
+ import "./chunk-OLZBQWZU.js";
15
+ import "./chunk-LCBAMY2M.js";
16
+ import "./chunk-4SN6J65J.js";
17
+ import "./chunk-CF7PE763.js";
18
+ import {
19
+ asOptionalTrimmedString
20
+ } from "./chunk-G3SUCT4W.js";
21
+ import "./chunk-4VNS5WPM.js";
22
+
23
+ // packages/cli/agentGrantCommands.ts
24
+ function wantsHelp(args) {
25
+ return args.includes("--help") || args.includes("-h");
26
+ }
27
+ function wantsJson(args) {
28
+ return args.includes("--json");
29
+ }
30
+ function positionalArgs(args) {
31
+ const values = [];
32
+ for (let index = 0; index < args.length; index += 1) {
33
+ const arg = args[index];
34
+ if (!arg) continue;
35
+ if (arg.startsWith("--")) {
36
+ if (arg.includes("=")) continue;
37
+ if (args[index + 1] && !args[index + 1].startsWith("--")) index += 1;
38
+ continue;
39
+ }
40
+ values.push(arg);
41
+ }
42
+ return values;
43
+ }
44
+ function writeGrantHelp(output) {
45
+ output.write(
46
+ "Usage:\n nolo agent grant <agent> --to <userId> [--json]\n nolo agent grants <agent> [--json] [--include-revoked]\n nolo agent revoke-grant <agent> --from <userId> [--json]\n\nGrant lets another user burn this agent's owner OAuth/custom credentials\nvia the server proxy. Favorite is NOT a grant.\nPrivate agents already share OAuth with same-space members; use grants for\npublic agents or cross-space people.\n"
47
+ );
48
+ }
49
+ async function resolveAgentKeyOrFail(args) {
50
+ const raw = asOptionalTrimmedString(args.raw);
51
+ if (!raw) {
52
+ args.output.write("[nolo] agent key is required.\n");
53
+ writeGrantHelp(args.output);
54
+ return null;
55
+ }
56
+ return resolveCliAgentKeyInput(raw);
57
+ }
58
+ async function callGrantApi(args) {
59
+ const url = new URL("/api/agent-grants", args.serverUrl);
60
+ if (args.method === "GET") {
61
+ url.searchParams.set("agentKey", args.agentKey);
62
+ if (args.includeRevoked) url.searchParams.set("includeRevoked", "1");
63
+ }
64
+ const res = await args.fetchImpl(url.toString(), {
65
+ method: args.method,
66
+ headers: {
67
+ Authorization: `Bearer ${args.authToken}`,
68
+ ...args.method === "GET" ? {} : { "Content-Type": "application/json" }
69
+ },
70
+ ...args.method === "GET" ? {} : {
71
+ body: JSON.stringify({
72
+ agentKey: args.agentKey,
73
+ granteeUserId: args.granteeUserId
74
+ })
75
+ }
76
+ });
77
+ const body = await res.json().catch(() => ({}));
78
+ if (!res.ok) {
79
+ throw new Error(
80
+ typeof body?.error === "string" ? body.error : `HTTP ${res.status} ${JSON.stringify(body)}`
81
+ );
82
+ }
83
+ return body;
84
+ }
85
+ async function runAgentGrantCommand(args, deps = {}) {
86
+ const env = deps.env ?? process.env;
87
+ const output = deps.output ?? process.stdout;
88
+ if (wantsHelp(args)) {
89
+ writeGrantHelp(output);
90
+ return 0;
91
+ }
92
+ const authToken = resolveAuthToken(args, env);
93
+ if (!authToken) {
94
+ output.write("[nolo] agent grant requires an auth token. Run `nolo login` or set AUTH_TOKEN.\n");
95
+ return 1;
96
+ }
97
+ if (!parseUserIdFromAuthToken(authToken)) {
98
+ output.write("[nolo] agent grant could not read userId from AUTH_TOKEN.\n");
99
+ return 1;
100
+ }
101
+ const agentKey = await resolveAgentKeyOrFail({
102
+ raw: positionalArgs(args)[0],
103
+ output
104
+ });
105
+ if (!agentKey) return 1;
106
+ const granteeUserId = asOptionalTrimmedString(readOption(args, "--to")) || asOptionalTrimmedString(readOption(args, "--grantee"));
107
+ if (!granteeUserId) {
108
+ output.write("[nolo] --to <userId> is required.\n");
109
+ writeGrantHelp(output);
110
+ return 1;
111
+ }
112
+ try {
113
+ const body = await callGrantApi({
114
+ method: "POST",
115
+ serverUrl: resolveServerUrl(args, env),
116
+ authToken,
117
+ fetchImpl: deps.fetchImpl ?? fetch,
118
+ agentKey,
119
+ granteeUserId
120
+ });
121
+ if (wantsJson(args)) {
122
+ output.write(`${JSON.stringify(body, null, 2)}
123
+ `);
124
+ } else {
125
+ output.write(
126
+ `Granted ${agentKey} \u2192 ${granteeUserId} (owner ${body?.grant?.ownerUserId ?? "?"})
127
+ `
128
+ );
129
+ }
130
+ return 0;
131
+ } catch (error) {
132
+ output.write(`[nolo] agent grant failed: ${toErrorMessage(error)}
133
+ `);
134
+ return 1;
135
+ }
136
+ }
137
+ async function runAgentGrantsListCommand(args, deps = {}) {
138
+ const env = deps.env ?? process.env;
139
+ const output = deps.output ?? process.stdout;
140
+ if (wantsHelp(args)) {
141
+ writeGrantHelp(output);
142
+ return 0;
143
+ }
144
+ const authToken = resolveAuthToken(args, env);
145
+ if (!authToken) {
146
+ output.write("[nolo] agent grants requires an auth token. Run `nolo login` or set AUTH_TOKEN.\n");
147
+ return 1;
148
+ }
149
+ const agentKey = await resolveAgentKeyOrFail({
150
+ raw: positionalArgs(args)[0],
151
+ output
152
+ });
153
+ if (!agentKey) return 1;
154
+ try {
155
+ const body = await callGrantApi({
156
+ method: "GET",
157
+ serverUrl: resolveServerUrl(args, env),
158
+ authToken,
159
+ fetchImpl: deps.fetchImpl ?? fetch,
160
+ agentKey,
161
+ includeRevoked: args.includes("--include-revoked")
162
+ });
163
+ if (wantsJson(args)) {
164
+ output.write(`${JSON.stringify(body, null, 2)}
165
+ `);
166
+ return 0;
167
+ }
168
+ const grants = Array.isArray(body?.grants) ? body.grants : [];
169
+ if (grants.length === 0) {
170
+ output.write(`No active grants for ${agentKey}.
171
+ `);
172
+ return 0;
173
+ }
174
+ output.write(`Grants for ${agentKey}:
175
+ `);
176
+ for (const grant of grants) {
177
+ output.write(
178
+ ` - ${grant.granteeUserId}` + (grant.revokedAt ? ` (revoked ${grant.revokedAt})` : "") + `
179
+ `
180
+ );
181
+ }
182
+ return 0;
183
+ } catch (error) {
184
+ output.write(`[nolo] agent grants failed: ${toErrorMessage(error)}
185
+ `);
186
+ return 1;
187
+ }
188
+ }
189
+ async function runAgentRevokeGrantCommand(args, deps = {}) {
190
+ const env = deps.env ?? process.env;
191
+ const output = deps.output ?? process.stdout;
192
+ if (wantsHelp(args)) {
193
+ writeGrantHelp(output);
194
+ return 0;
195
+ }
196
+ const authToken = resolveAuthToken(args, env);
197
+ if (!authToken) {
198
+ output.write("[nolo] agent revoke-grant requires an auth token. Run `nolo login` or set AUTH_TOKEN.\n");
199
+ return 1;
200
+ }
201
+ const agentKey = await resolveAgentKeyOrFail({
202
+ raw: positionalArgs(args)[0],
203
+ output
204
+ });
205
+ if (!agentKey) return 1;
206
+ const granteeUserId = asOptionalTrimmedString(readOption(args, "--from")) || asOptionalTrimmedString(readOption(args, "--grantee"));
207
+ if (!granteeUserId) {
208
+ output.write("[nolo] --from <userId> is required.\n");
209
+ writeGrantHelp(output);
210
+ return 1;
211
+ }
212
+ try {
213
+ const body = await callGrantApi({
214
+ method: "DELETE",
215
+ serverUrl: resolveServerUrl(args, env),
216
+ authToken,
217
+ fetchImpl: deps.fetchImpl ?? fetch,
218
+ agentKey,
219
+ granteeUserId
220
+ });
221
+ if (wantsJson(args)) {
222
+ output.write(`${JSON.stringify(body, null, 2)}
223
+ `);
224
+ } else {
225
+ output.write(`Revoked grant ${agentKey} \u2715 ${granteeUserId}
226
+ `);
227
+ }
228
+ return 0;
229
+ } catch (error) {
230
+ output.write(`[nolo] agent revoke-grant failed: ${toErrorMessage(error)}
231
+ `);
232
+ return 1;
233
+ }
234
+ }
235
+ export {
236
+ runAgentGrantCommand,
237
+ runAgentGrantsListCommand,
238
+ runAgentRevokeGrantCommand
239
+ };
@@ -7,38 +7,38 @@ import {
7
7
  normalizeListedAgent,
8
8
  parseAgentListArgs,
9
9
  toSafeListedAgentSummary
10
- } from "./chunk-QRBZS6G4.js";
10
+ } from "./chunk-RZALKBP4.js";
11
11
  import {
12
12
  buildSpaceLookup,
13
13
  getSpaceContentKeys
14
14
  } from "./chunk-ID4G2MAR.js";
15
15
  import {
16
16
  readLiveDbRecordAfterTombstoneMerge
17
- } from "./chunk-YX4H7EP4.js";
17
+ } from "./chunk-4UUJFFMK.js";
18
18
  import {
19
19
  getReadableCliDb
20
20
  } from "./chunk-W4NVOSFF.js";
21
21
  import {
22
22
  queryUserRecords,
23
23
  readDbRecord
24
- } from "./chunk-TSJBYH7X.js";
25
- import "./chunk-FLY6L3KA.js";
24
+ } from "./chunk-5R73BS7Y.js";
25
+ import "./chunk-TQCONXQ3.js";
26
26
  import "./chunk-VHBWHNVT.js";
27
27
  import {
28
28
  sortSafeAgentSummaries,
29
29
  toSafeAgentSummary
30
30
  } from "./chunk-OOIN7HSO.js";
31
31
  import "./chunk-KQHGZWSV.js";
32
- import "./chunk-BRODTPXY.js";
33
- import "./chunk-PB2DHBEQ.js";
32
+ import "./chunk-33K5FKRL.js";
34
33
  import "./chunk-ZNFJWEN4.js";
34
+ import "./chunk-PB2DHBEQ.js";
35
35
  import "./chunk-OIQPORYI.js";
36
- import "./chunk-7H3O7ZA2.js";
36
+ import "./chunk-VQFY3VXW.js";
37
37
  import "./chunk-3WGLLTK4.js";
38
38
  import "./chunk-UW3WOIWJ.js";
39
39
  import "./chunk-KTFJUPDW.js";
40
40
  import "./chunk-B4KT7RN2.js";
41
- import "./chunk-SJQVOEIV.js";
41
+ import "./chunk-3B2LFO6R.js";
42
42
  import "./chunk-5MMAK75Q.js";
43
43
  import "./chunk-OGGHETUE.js";
44
44
  import "./chunk-5CS33IBL.js";
@@ -54,8 +54,8 @@ import "./chunk-IDZTNRP2.js";
54
54
  import "./chunk-IKXL2HZ3.js";
55
55
  import "./chunk-524BDL33.js";
56
56
  import "./chunk-KX6YBIHG.js";
57
- import "./chunk-2MW6QFIQ.js";
58
- import "./chunk-V6PGKRZC.js";
57
+ import "./chunk-3FCSMQAC.js";
58
+ import "./chunk-A5V7UEZJ.js";
59
59
  import "./chunk-O4BU24WZ.js";
60
60
  import "./chunk-I42VC5KR.js";
61
61
  import "./chunk-WWC7I6TA.js";
@@ -8,22 +8,22 @@ import {
8
8
  readAgentRecord,
9
9
  resolveAgentRecordFromHybridStore,
10
10
  writeAgentRecord
11
- } from "./chunk-TSJBYH7X.js";
12
- import "./chunk-FLY6L3KA.js";
11
+ } from "./chunk-5R73BS7Y.js";
12
+ import "./chunk-TQCONXQ3.js";
13
13
  import {
14
14
  resolveCliAgentKeyInput
15
15
  } from "./chunk-VHBWHNVT.js";
16
16
  import "./chunk-RQSOAMPJ.js";
17
- import "./chunk-BRODTPXY.js";
18
- import "./chunk-PB2DHBEQ.js";
17
+ import "./chunk-33K5FKRL.js";
19
18
  import "./chunk-ZNFJWEN4.js";
19
+ import "./chunk-PB2DHBEQ.js";
20
20
  import "./chunk-OIQPORYI.js";
21
- import "./chunk-7H3O7ZA2.js";
21
+ import "./chunk-VQFY3VXW.js";
22
22
  import "./chunk-3WGLLTK4.js";
23
23
  import "./chunk-UW3WOIWJ.js";
24
24
  import "./chunk-KTFJUPDW.js";
25
25
  import "./chunk-B4KT7RN2.js";
26
- import "./chunk-SJQVOEIV.js";
26
+ import "./chunk-3B2LFO6R.js";
27
27
  import "./chunk-5MMAK75Q.js";
28
28
  import "./chunk-OGGHETUE.js";
29
29
  import "./chunk-5CS33IBL.js";
@@ -41,8 +41,8 @@ import "./chunk-524BDL33.js";
41
41
  import {
42
42
  asRecordOrEmpty
43
43
  } from "./chunk-KX6YBIHG.js";
44
- import "./chunk-2MW6QFIQ.js";
45
- import "./chunk-V6PGKRZC.js";
44
+ import "./chunk-3FCSMQAC.js";
45
+ import "./chunk-A5V7UEZJ.js";
46
46
  import "./chunk-O4BU24WZ.js";
47
47
  import "./chunk-I42VC5KR.js";
48
48
  import "./chunk-WWC7I6TA.js";
@@ -76,7 +76,7 @@ async function defaultExecuteCli(provider, prompt, options) {
76
76
  return executeCli(provider, prompt, options);
77
77
  }
78
78
  async function forwardConnectorRunMessage(machine, message, pushMessage, executeCli, env, fetchImpl) {
79
- const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-35QVFHKA.js");
79
+ const { handleConnectorRunMessage } = await import("./machineWsRunDispatch-EZ2IOYWT.js");
80
80
  return handleConnectorRunMessage(message, pushMessage, executeCli, env, fetchImpl);
81
81
  }
82
82
  async function detectLaunchableMachineInfo() {