@vm0/cli 9.249.0 → 9.249.2

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 (141) hide show
  1. package/{agent-J7UZFWFE.js → agent-TOFXTWYP.js} +11 -10
  2. package/{agent-J7UZFWFE.js.map → agent-TOFXTWYP.js.map} +1 -1
  3. package/{banking-TLHPJBS5.js → banking-U7I6EJUO.js} +8 -7
  4. package/{banking-TLHPJBS5.js.map → banking-U7I6EJUO.js.map} +1 -1
  5. package/{chat-PWHG42AL.js → chat-77EDGFMS.js} +9 -8
  6. package/{chat-PWHG42AL.js.map → chat-77EDGFMS.js.map} +1 -1
  7. package/{chunk-DIRAZ3YX.js → chunk-3VVCUQPB.js} +3 -3
  8. package/{chunk-DIRAZ3YX.js.map → chunk-3VVCUQPB.js.map} +1 -1
  9. package/{chunk-LDQPMTQY.js → chunk-4HN7U3JF.js} +103 -625
  10. package/chunk-4HN7U3JF.js.map +1 -0
  11. package/{chunk-ZJENFGWZ.js → chunk-5CZNUTFF.js} +3 -3
  12. package/chunk-A2NKQGRI.js +491 -0
  13. package/chunk-A2NKQGRI.js.map +1 -0
  14. package/{chunk-6IFIMWPY.js → chunk-AFNSFKAH.js} +5 -5
  15. package/{chunk-XE764T2N.js → chunk-BQOOTJNB.js} +27 -672
  16. package/chunk-BQOOTJNB.js.map +1 -0
  17. package/{chunk-KLIW3XK7.js → chunk-GPF7NSX7.js} +2 -2
  18. package/{chunk-HJOW32CJ.js → chunk-HSGQT7LT.js} +3 -3
  19. package/{chunk-PD3A7MGG.js → chunk-JCLLQRCI.js} +3 -3
  20. package/{chunk-B3W2RUBP.js → chunk-LD4ZVU4O.js} +2 -2
  21. package/chunk-N6TDQYGF.js +678 -0
  22. package/chunk-N6TDQYGF.js.map +1 -0
  23. package/{chunk-3QXK5RR7.js → chunk-ROB3OE37.js} +17 -113
  24. package/chunk-ROB3OE37.js.map +1 -0
  25. package/{chunk-LTDQISD7.js → chunk-SB7EZ2ZO.js} +2 -2
  26. package/{chunk-RTYT3CSZ.js → chunk-UG5XA6KU.js} +2 -2
  27. package/{chunk-ZKWCFMDV.js → chunk-UNQJRTJQ.js} +3 -3
  28. package/chunk-W75R7EZF.js +17 -0
  29. package/chunk-W75R7EZF.js.map +1 -0
  30. package/chunk-WDDZJGWL.js +32 -0
  31. package/chunk-WDDZJGWL.js.map +1 -0
  32. package/{chunk-JFY6GK7Y.js → chunk-X2545RBX.js} +2 -2
  33. package/{chunk-ZE2VIESK.js → chunk-X4DBCBU4.js} +2 -2
  34. package/{computer-use-EE6NPCXS.js → computer-use-BCGPVGWS.js} +7 -6
  35. package/{computer-use-EE6NPCXS.js.map → computer-use-BCGPVGWS.js.map} +1 -1
  36. package/{connector-SCLSWTMT.js → connector-CHZSI2LW.js} +14 -13
  37. package/{connector-SCLSWTMT.js.map → connector-CHZSI2LW.js.map} +1 -1
  38. package/credit-RWFBPKOS.js +166 -0
  39. package/credit-RWFBPKOS.js.map +1 -0
  40. package/{developer-support-V3N3BOYC.js → developer-support-IVR3HIP7.js} +8 -7
  41. package/{developer-support-V3N3BOYC.js.map → developer-support-IVR3HIP7.js.map} +1 -1
  42. package/{doctor-AQLFJCC6.js → doctor-KGWTXW2Q.js} +39 -13
  43. package/doctor-KGWTXW2Q.js.map +1 -0
  44. package/{esm-PZKPCIYJ.js → esm-GOCEMHJO.js} +3 -3
  45. package/{feishu-XHOLF32I.js → feishu-PLF4P5OG.js} +8 -7
  46. package/{feishu-XHOLF32I.js.map → feishu-PLF4P5OG.js.map} +1 -1
  47. package/{finance-TF5RU7FD.js → finance-LVFG3WWP.js} +8 -7
  48. package/{finance-TF5RU7FD.js.map → finance-LVFG3WWP.js.map} +1 -1
  49. package/{generate-GFFAZX7Y.js → generate-4FIBMMJO.js} +77 -22
  50. package/generate-4FIBMMJO.js.map +1 -0
  51. package/{getMachineId-bsd-L73QENVB.js → getMachineId-bsd-SB7C44VX.js} +4 -4
  52. package/{getMachineId-darwin-TCCWKQ2S.js → getMachineId-darwin-R4BWY3CQ.js} +4 -4
  53. package/{getMachineId-linux-TJYYUZVM.js → getMachineId-linux-BR4HVNPW.js} +3 -3
  54. package/{getMachineId-unsupported-DPRVLH4Y.js → getMachineId-unsupported-FPGM635L.js} +3 -3
  55. package/{getMachineId-win-7EE436CJ.js → getMachineId-win-RB4JMF33.js} +4 -4
  56. package/{github-V4ZW6TI4.js → github-WHNAVVG3.js} +8 -7
  57. package/{github-V4ZW6TI4.js.map → github-WHNAVVG3.js.map} +1 -1
  58. package/{goal-TED5FUYM.js → goal-G4J2BQ5Z.js} +8 -7
  59. package/{goal-TED5FUYM.js.map → goal-G4J2BQ5Z.js.map} +1 -1
  60. package/{host-HKDD3CHD.js → host-3W6U2ZUP.js} +8 -7
  61. package/{host-HKDD3CHD.js.map → host-3W6U2ZUP.js.map} +1 -1
  62. package/{intro-MIVVJG7M.js → intro-PMHOBGDL.js} +3 -3
  63. package/{logs-SBMQQM46.js → logs-P7JLTGXY.js} +10 -9
  64. package/{logs-SBMQQM46.js.map → logs-P7JLTGXY.js.map} +1 -1
  65. package/{mail-SF5JKA2F.js → mail-LIAOXDD4.js} +12 -11
  66. package/{mail-SF5JKA2F.js.map → mail-LIAOXDD4.js.map} +1 -1
  67. package/{maps-D5NKFEAD.js → maps-C4NOXSE7.js} +8 -7
  68. package/{maps-D5NKFEAD.js.map → maps-C4NOXSE7.js.map} +1 -1
  69. package/{model-S7CMGRIH.js → model-I2MNQ5KC.js} +9 -8
  70. package/{model-S7CMGRIH.js.map → model-I2MNQ5KC.js.map} +1 -1
  71. package/{model-provider-ATXIDNKM.js → model-provider-AOCCHEMP.js} +9 -8
  72. package/{model-provider-ATXIDNKM.js.map → model-provider-AOCCHEMP.js.map} +1 -1
  73. package/{org-6JBRK5NL.js → org-MVBG3WXZ.js} +9 -8
  74. package/{org-6JBRK5NL.js.map → org-MVBG3WXZ.js.map} +1 -1
  75. package/package.json +1 -1
  76. package/{phone-B3UWRGWF.js → phone-4OZQFYHU.js} +8 -7
  77. package/{phone-B3UWRGWF.js.map → phone-4OZQFYHU.js.map} +1 -1
  78. package/{preference-HRRRUEP3.js → preference-H2A3WBGQ.js} +9 -8
  79. package/{preference-HRRRUEP3.js.map → preference-H2A3WBGQ.js.map} +1 -1
  80. package/{resource-65P5D2LT.js → resource-CPCQ6V6M.js} +9 -8
  81. package/{resource-65P5D2LT.js.map → resource-CPCQ6V6M.js.map} +1 -1
  82. package/{scrape-N3AWNV2R.js → scrape-6RMFDYAT.js} +8 -7
  83. package/{scrape-N3AWNV2R.js.map → scrape-6RMFDYAT.js.map} +1 -1
  84. package/{search-T76RE67L.js → search-HSQVSQZY.js} +10 -9
  85. package/{search-T76RE67L.js.map → search-HSQVSQZY.js.map} +1 -1
  86. package/{secret-WALMH6S2.js → secret-S4D6CNOX.js} +9 -8
  87. package/{secret-WALMH6S2.js.map → secret-S4D6CNOX.js.map} +1 -1
  88. package/{slack-WXDCNAI2.js → slack-E3E2NIDZ.js} +50 -175
  89. package/slack-E3E2NIDZ.js.map +1 -0
  90. package/{teams-LAQBLRUR.js → teams-CLEWT2LQ.js} +8 -7
  91. package/{teams-LAQBLRUR.js.map → teams-CLEWT2LQ.js.map} +1 -1
  92. package/{telegram-5BASFBEA.js → telegram-35FKKA4K.js} +8 -7
  93. package/{telegram-5BASFBEA.js.map → telegram-35FKKA4K.js.map} +1 -1
  94. package/{undici-ZMFN7TNU.js → undici-YXSVPIYI.js} +2 -2
  95. package/upgrade-DNGUR42E.js +50 -0
  96. package/upgrade-DNGUR42E.js.map +1 -0
  97. package/{variable-GBVHKR6I.js → variable-C7RWUPV6.js} +9 -8
  98. package/{variable-GBVHKR6I.js.map → variable-C7RWUPV6.js.map} +1 -1
  99. package/{video-3FXQGBYB.js → video-JS5VOA2S.js} +9 -7
  100. package/{video-3FXQGBYB.js.map → video-JS5VOA2S.js.map} +1 -1
  101. package/{weather-JNMUODGJ.js → weather-5R2N5OX4.js} +8 -7
  102. package/{weather-JNMUODGJ.js.map → weather-5R2N5OX4.js.map} +1 -1
  103. package/{web-DZT26X4I.js → web-FXIIYCZ7.js} +10 -8
  104. package/{web-DZT26X4I.js.map → web-FXIIYCZ7.js.map} +1 -1
  105. package/{web-search-36UUSSUX.js → web-search-SZP7J4UM.js} +8 -7
  106. package/{web-search-36UUSSUX.js.map → web-search-SZP7J4UM.js.map} +1 -1
  107. package/{whoami-NXYCNII4.js → whoami-J4FRN67A.js} +10 -9
  108. package/{whoami-NXYCNII4.js.map → whoami-J4FRN67A.js.map} +1 -1
  109. package/{workflow-WHTBJCEF.js → workflow-HQHZKXB2.js} +9 -8
  110. package/{workflow-WHTBJCEF.js.map → workflow-HQHZKXB2.js.map} +1 -1
  111. package/zero.js +88 -61
  112. package/zero.js.map +1 -1
  113. package/chunk-3QXK5RR7.js.map +0 -1
  114. package/chunk-LDQPMTQY.js.map +0 -1
  115. package/chunk-LRHXR7JT.js +0 -33
  116. package/chunk-LRHXR7JT.js.map +0 -1
  117. package/chunk-XE764T2N.js.map +0 -1
  118. package/credit-2VN2PYRE.js +0 -128
  119. package/credit-2VN2PYRE.js.map +0 -1
  120. package/doctor-AQLFJCC6.js.map +0 -1
  121. package/generate-GFFAZX7Y.js.map +0 -1
  122. package/slack-WXDCNAI2.js.map +0 -1
  123. /package/{chunk-ZJENFGWZ.js.map → chunk-5CZNUTFF.js.map} +0 -0
  124. /package/{chunk-6IFIMWPY.js.map → chunk-AFNSFKAH.js.map} +0 -0
  125. /package/{chunk-KLIW3XK7.js.map → chunk-GPF7NSX7.js.map} +0 -0
  126. /package/{chunk-HJOW32CJ.js.map → chunk-HSGQT7LT.js.map} +0 -0
  127. /package/{chunk-PD3A7MGG.js.map → chunk-JCLLQRCI.js.map} +0 -0
  128. /package/{chunk-B3W2RUBP.js.map → chunk-LD4ZVU4O.js.map} +0 -0
  129. /package/{chunk-LTDQISD7.js.map → chunk-SB7EZ2ZO.js.map} +0 -0
  130. /package/{chunk-RTYT3CSZ.js.map → chunk-UG5XA6KU.js.map} +0 -0
  131. /package/{chunk-ZKWCFMDV.js.map → chunk-UNQJRTJQ.js.map} +0 -0
  132. /package/{chunk-JFY6GK7Y.js.map → chunk-X2545RBX.js.map} +0 -0
  133. /package/{chunk-ZE2VIESK.js.map → chunk-X4DBCBU4.js.map} +0 -0
  134. /package/{esm-PZKPCIYJ.js.map → esm-GOCEMHJO.js.map} +0 -0
  135. /package/{getMachineId-bsd-L73QENVB.js.map → getMachineId-bsd-SB7C44VX.js.map} +0 -0
  136. /package/{getMachineId-darwin-TCCWKQ2S.js.map → getMachineId-darwin-R4BWY3CQ.js.map} +0 -0
  137. /package/{getMachineId-linux-TJYYUZVM.js.map → getMachineId-linux-BR4HVNPW.js.map} +0 -0
  138. /package/{getMachineId-unsupported-DPRVLH4Y.js.map → getMachineId-unsupported-FPGM635L.js.map} +0 -0
  139. /package/{getMachineId-win-7EE436CJ.js.map → getMachineId-win-RB4JMF33.js.map} +0 -0
  140. /package/{intro-MIVVJG7M.js.map → intro-PMHOBGDL.js.map} +0 -0
  141. /package/{undici-ZMFN7TNU.js.map → undici-YXSVPIYI.js.map} +0 -0
@@ -4,14 +4,14 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  loadConnectorPermissionInfos,
6
6
  policyIcon
7
- } from "./chunk-6IFIMWPY.js";
7
+ } from "./chunk-AFNSFKAH.js";
8
8
  import {
9
9
  isInteractive,
10
10
  promptConfirm
11
- } from "./chunk-JFY6GK7Y.js";
11
+ } from "./chunk-X2545RBX.js";
12
12
  import {
13
13
  permissionGrantsToFirewallPolicies
14
- } from "./chunk-ZJENFGWZ.js";
14
+ } from "./chunk-5CZNUTFF.js";
15
15
  import {
16
16
  createZeroAgent,
17
17
  deleteZeroAgent,
@@ -23,19 +23,20 @@ import {
23
23
  listZeroUserPermissionGrants,
24
24
  updateZeroAgent,
25
25
  updateZeroAgentInstructions
26
- } from "./chunk-3QXK5RR7.js";
27
- import "./chunk-LTDQISD7.js";
26
+ } from "./chunk-ROB3OE37.js";
27
+ import "./chunk-N6TDQYGF.js";
28
+ import "./chunk-SB7EZ2ZO.js";
28
29
  import {
29
30
  source_default,
30
31
  withErrorHandler
31
- } from "./chunk-XE764T2N.js";
32
- import "./chunk-LRHXR7JT.js";
32
+ } from "./chunk-BQOOTJNB.js";
33
+ import "./chunk-A2NKQGRI.js";
33
34
  import {
34
35
  Command
35
- } from "./chunk-B3W2RUBP.js";
36
+ } from "./chunk-LD4ZVU4O.js";
36
37
  import {
37
38
  init_esm_shims
38
- } from "./chunk-DIRAZ3YX.js";
39
+ } from "./chunk-3VVCUQPB.js";
39
40
 
40
41
  // src/commands/zero/agent/index.ts
41
42
  init_esm_shims();
@@ -593,4 +594,4 @@ Notes:
593
594
  export {
594
595
  zeroAgentCommand
595
596
  };
596
- //# sourceMappingURL=agent-J7UZFWFE.js.map
597
+ //# sourceMappingURL=agent-TOFXTWYP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/zero/agent/index.ts","../src/commands/zero/agent/create.ts","../src/commands/zero/agent/avatar.ts","../src/commands/zero/agent/edit.ts","../src/commands/zero/agent/view.ts","../src/commands/zero/agent/list.ts","../src/commands/zero/agent/delete.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { createCommand } from \"./create\";\nimport { editCommand } from \"./edit\";\nimport { viewCommand } from \"./view\";\nimport { listCommand } from \"./list\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroAgentCommand = new Command(\"agent\")\n .description(\"View or manage zero agents\")\n .addCommand(createCommand)\n .addCommand(editCommand)\n .addCommand(viewCommand)\n .addCommand(listCommand)\n .addCommand(deleteCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Your agent ID is in $ZERO_AGENT_ID (or run: zero whoami)\n View your config: zero agent view $ZERO_AGENT_ID --instructions\n Update description: zero agent edit $ZERO_AGENT_ID --description \"new role\"\n Update tone: zero agent edit $ZERO_AGENT_ID --sound friendly\n Update instructions: zero agent edit $ZERO_AGENT_ID --instructions-file <path>\n Attach a workflow: zero workflow attach <name> --agent $ZERO_AGENT_ID\n\nNotes:\n Manage workflows with 'zero workflow --help'`,\n );\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport { createZeroAgent, updateZeroAgentInstructions } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { resolveAvatarUrl } from \"./avatar\";\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a new zero agent\")\n .option(\"--display-name <name>\", \"Agent display name\")\n .option(\"--description <text>\", \"Agent description\")\n .option(\n \"--sound <tone>\",\n \"Agent tone: professional, friendly, direct, supportive\",\n )\n .option(\"--avatar <preset>\", \"Avatar preset: preset:0 through preset:4\")\n .option(\n \"--avatar-rotation <1-5>\",\n \"Head angle: 1=far-left 3=center 5=far-right\",\n )\n .option(\n \"--avatar-skin <tone>\",\n \"Skin tone: light | light-medium | medium | medium-dark | dark\",\n )\n .option(\"--avatar-hair-style <1-5>\", \"Hair style: 1–5\")\n .option(\n \"--avatar-hair-color <color>\",\n \"Hair color: blonde | teal | grey | pink | brown\",\n )\n .option(\n \"--avatar-expression <expr>\",\n \"Expression: calm | content | neutral | pleasant | excited\",\n )\n .option(\"--avatar-intensity <level>\", \"Intensity: chill | normal | hyped\")\n .option(\"--instructions-file <path>\", \"Path to instructions file\")\n .addHelpText(\n \"after\",\n `\nAvatar:\n Quick presets (--avatar):\n preset:0 light skin, brown hair, calm, hyped\n preset:1 light-medium skin, grey hair, calm, normal\n preset:2 medium skin, pink hair, neutral, chill\n preset:3 medium-dark skin, blonde hair, pleasant, hyped\n preset:4 dark skin, teal hair, excited, normal\n\n Custom attributes (--avatar-* flags, omitted fields use defaults):\n --avatar-rotation 1=far-left 3=center(default) 5=far-right\n --avatar-skin light / light-medium / medium(default) / medium-dark / dark\n --avatar-hair-style 1–5 (default: 1)\n --avatar-hair-color blonde / teal / grey / pink / brown(default)\n --avatar-expression calm(default) / content / neutral / pleasant / excited\n --avatar-intensity chill / normal(default) / hyped\n\n Note: --avatar and --avatar-* cannot be used together.\n\nExamples:\n Minimal: zero agent create --display-name \"My Agent\"\n Quick preset: zero agent create --display-name \"My Agent\" --avatar preset:2\n Custom avatar: zero agent create --display-name \"My Agent\" --avatar-skin dark --avatar-hair-color teal --avatar-intensity hyped\n With instructions: zero agent create --display-name \"My Agent\" --instructions-file ./instructions.md`,\n )\n .action(\n withErrorHandler(\n async (options: {\n displayName?: string;\n description?: string;\n sound?: string;\n avatar?: string;\n avatarRotation?: string;\n avatarSkin?: string;\n avatarHairStyle?: string;\n avatarHairColor?: string;\n avatarExpression?: string;\n avatarIntensity?: string;\n instructionsFile?: string;\n }) => {\n const avatarUrl = resolveAvatarUrl(options);\n\n const agent = await createZeroAgent({\n displayName: options.displayName,\n description: options.description,\n sound: options.sound,\n avatarUrl,\n });\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agent.agentId, content);\n }\n\n console.log(chalk.green(`✓ Agent \"${agent.agentId}\" created`));\n console.log(` Agent ID: ${agent.agentId}`);\n if (agent.displayName) {\n console.log(` Display Name: ${agent.displayName}`);\n }\n\n console.log();\n console.log(\"Next steps to authorize connectors for this agent:\");\n console.log(\" - Search connectors this agent needs:\");\n console.log(\n ` zero connector search <keyword> --agent ${agent.agentId}`,\n );\n console.log(\n \" - Check authorization status (prints an authorize URL if not authorized):\",\n );\n console.log(\n ` zero connector status <type> --agent ${agent.agentId}`,\n );\n },\n ),\n );\n","const SKIN_MAP: Record<string, number> = {\n light: 0,\n \"light-medium\": 1,\n medium: 2,\n \"medium-dark\": 3,\n dark: 4,\n};\n\nconst HAIR_COLOR_MAP: Record<string, number> = {\n blonde: 1,\n teal: 2,\n grey: 3,\n pink: 4,\n brown: 5,\n};\n\nconst EXPRESSION_MAP: Record<string, number> = {\n calm: 1,\n content: 2,\n neutral: 3,\n pleasant: 4,\n excited: 5,\n};\n\nconst INTENSITY_MAP: Record<string, \"d\" | \"m\" | \"h\"> = {\n chill: \"d\",\n normal: \"m\",\n hyped: \"h\",\n};\n\nfunction lookupRequired<T>(\n value: string,\n map: Readonly<Record<string, T>>,\n flag: string,\n): T {\n if (!(value in map)) {\n throw new Error(\n `Invalid ${flag} \"${value}\". Must be one of: ${Object.keys(map).join(\", \")}`,\n );\n }\n return map[value]!;\n}\n\nfunction parseIntRange(\n value: string,\n flag: string,\n min: number,\n max: number,\n): number {\n const n = Number(value);\n if (!Number.isInteger(n) || n < min || n > max) {\n throw new Error(`Invalid ${flag} \"${value}\". Must be ${min}–${max}`);\n }\n return n;\n}\n\nfunction buildCustomSvgAvatar(opts: AvatarOptions): string {\n const r =\n opts.avatarRotation !== undefined\n ? parseIntRange(opts.avatarRotation, \"--avatar-rotation\", 1, 5)\n : 3;\n const h =\n opts.avatarHairStyle !== undefined\n ? parseIntRange(opts.avatarHairStyle, \"--avatar-hair-style\", 1, 5)\n : 1;\n const s =\n opts.avatarSkin !== undefined\n ? lookupRequired(opts.avatarSkin, SKIN_MAP, \"--avatar-skin\")\n : 2;\n const c =\n opts.avatarHairColor !== undefined\n ? lookupRequired(\n opts.avatarHairColor,\n HAIR_COLOR_MAP,\n \"--avatar-hair-color\",\n )\n : 5;\n const f =\n opts.avatarExpression !== undefined\n ? lookupRequired(\n opts.avatarExpression,\n EXPRESSION_MAP,\n \"--avatar-expression\",\n )\n : 1;\n const i =\n opts.avatarIntensity !== undefined\n ? lookupRequired(\n opts.avatarIntensity,\n INTENSITY_MAP,\n \"--avatar-intensity\",\n )\n : \"m\";\n return `svg:r${r}s${s}h${h}c${c}f${f}${i}`;\n}\n\nexport interface AvatarOptions {\n avatar?: string;\n avatarRotation?: string;\n avatarSkin?: string;\n avatarHairStyle?: string;\n avatarHairColor?: string;\n avatarExpression?: string;\n avatarIntensity?: string;\n}\n\nexport function resolveAvatarUrl(opts: AvatarOptions): string | undefined {\n const hasPreset = opts.avatar !== undefined;\n const hasCustom =\n opts.avatarRotation !== undefined ||\n opts.avatarSkin !== undefined ||\n opts.avatarHairStyle !== undefined ||\n opts.avatarHairColor !== undefined ||\n opts.avatarExpression !== undefined ||\n opts.avatarIntensity !== undefined;\n\n if (!hasPreset && !hasCustom) return undefined;\n\n if (hasPreset && hasCustom) {\n throw new Error(\n \"--avatar cannot be combined with --avatar-* attribute options\",\n );\n }\n\n if (hasPreset) {\n if (!/^preset:[0-4]$/.test(opts.avatar!)) {\n throw new Error(\n `Invalid --avatar \"${opts.avatar}\". Use preset:0 through preset:4`,\n );\n }\n return opts.avatar;\n }\n\n return buildCustomSvgAvatar(opts);\n}\n\nconst REVERSE_SKIN_MAP: Record<number, string> = {\n 0: \"light\",\n 1: \"light-medium\",\n 2: \"medium\",\n 3: \"medium-dark\",\n 4: \"dark\",\n};\n\nconst REVERSE_HAIR_COLOR_MAP: Record<number, string> = {\n 1: \"blonde\",\n 2: \"teal\",\n 3: \"grey\",\n 4: \"pink\",\n 5: \"brown\",\n};\n\nconst REVERSE_EXPRESSION_MAP: Record<number, string> = {\n 1: \"calm\",\n 2: \"content\",\n 3: \"neutral\",\n 4: \"pleasant\",\n 5: \"excited\",\n};\n\nconst REVERSE_INTENSITY_MAP: Record<string, string> = {\n d: \"chill\",\n m: \"normal\",\n h: \"hyped\",\n};\n\nconst PRESET_DESCRIPTIONS: Record<string, string> = {\n \"preset:0\": \"light skin, brown hair, calm, hyped\",\n \"preset:1\": \"light-medium skin, grey hair, calm, normal\",\n \"preset:2\": \"medium skin, pink hair, neutral, chill\",\n \"preset:3\": \"medium-dark skin, blonde hair, pleasant, hyped\",\n \"preset:4\": \"dark skin, teal hair, excited, normal\",\n};\n\nfunction parseSvgAvatar(svg: string): string | undefined {\n const match = svg.match(/^svg:r(\\d)s(\\d)h(\\d)c(\\d)f(\\d)([dmh])$/);\n if (!match) return undefined;\n\n const [, r, s, h, c, f, i] = match as RegExpExecArray;\n const parts: string[] = [];\n\n const skin = REVERSE_SKIN_MAP[Number(s)];\n if (skin) parts.push(`${skin} skin`);\n\n const hairColor = REVERSE_HAIR_COLOR_MAP[Number(c)];\n if (hairColor) parts.push(`${hairColor} hair`);\n\n const expression = REVERSE_EXPRESSION_MAP[Number(f)];\n if (expression) parts.push(expression);\n\n const intensity = REVERSE_INTENSITY_MAP[i!];\n if (intensity) parts.push(intensity);\n\n if (parts.length === 0) return undefined;\n\n let desc = parts.join(\", \");\n if (r !== \"3\") {\n const rotationLabels: Record<string, string> = {\n \"1\": \"far-left\",\n \"2\": \"left\",\n \"4\": \"right\",\n \"5\": \"far-right\",\n };\n const rot = rotationLabels[r!];\n if (rot) desc += `, ${rot}`;\n }\n if (h !== \"1\") {\n desc += `, hair style ${h}`;\n }\n\n return desc;\n}\n\nexport function formatAvatar(\n avatarUrl: string | null | undefined,\n): string | undefined {\n if (!avatarUrl) return undefined;\n\n if (avatarUrl.startsWith(\"preset:\")) {\n const desc = PRESET_DESCRIPTIONS[avatarUrl];\n return desc ? `${avatarUrl} (${desc})` : avatarUrl;\n }\n\n if (avatarUrl.startsWith(\"svg:\")) {\n const desc = parseSvgAvatar(avatarUrl);\n return desc ? `custom (${desc})` : avatarUrl;\n }\n\n return avatarUrl;\n}\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport {\n getZeroAgent,\n updateZeroAgent,\n updateZeroAgentInstructions,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { type AvatarOptions, resolveAvatarUrl } from \"./avatar\";\n\ninterface AgentEditOptions extends AvatarOptions {\n displayName?: string;\n description?: string;\n sound?: string;\n instructionsFile?: string;\n}\n\nfunction hasAvatarUpdate(options: AvatarOptions): boolean {\n return (\n options.avatar !== undefined ||\n options.avatarRotation !== undefined ||\n options.avatarSkin !== undefined ||\n options.avatarHairStyle !== undefined ||\n options.avatarHairColor !== undefined ||\n options.avatarExpression !== undefined ||\n options.avatarIntensity !== undefined\n );\n}\n\nfunction hasAgentFieldUpdate(options: AgentEditOptions): boolean {\n return (\n options.displayName !== undefined ||\n options.description !== undefined ||\n options.sound !== undefined ||\n hasAvatarUpdate(options)\n );\n}\n\nasync function applyAgentUpdate(\n agentId: string,\n options: AgentEditOptions,\n): Promise<void> {\n const hasAvatar = hasAvatarUpdate(options);\n const resolvedAvatarUrl = hasAvatar ? resolveAvatarUrl(options) : undefined;\n\n const current = await getZeroAgent(agentId);\n\n const avatarUrl = hasAvatar\n ? resolvedAvatarUrl\n : (current.avatarUrl ?? undefined);\n\n await updateZeroAgent(agentId, {\n displayName:\n options.displayName !== undefined\n ? options.displayName\n : (current.displayName ?? undefined),\n description:\n options.description !== undefined\n ? options.description\n : (current.description ?? undefined),\n sound:\n options.sound !== undefined\n ? options.sound\n : (current.sound ?? undefined),\n avatarUrl,\n });\n}\n\nexport const editCommand = new Command()\n .name(\"edit\")\n .description(\"Edit a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"--display-name <name>\", \"New display name\")\n .option(\"--description <text>\", \"New description\")\n .option(\n \"--sound <tone>\",\n \"New tone: professional, friendly, direct, supportive\",\n )\n .option(\"--avatar <preset>\", \"Avatar preset: preset:0 through preset:4\")\n .option(\n \"--avatar-rotation <1-5>\",\n \"Head angle: 1=far-left 3=center 5=far-right\",\n )\n .option(\n \"--avatar-skin <tone>\",\n \"Skin tone: light | light-medium | medium | medium-dark | dark\",\n )\n .option(\"--avatar-hair-style <1-5>\", \"Hair style: 1–5\")\n .option(\n \"--avatar-hair-color <color>\",\n \"Hair color: blonde | teal | grey | pink | brown\",\n )\n .option(\n \"--avatar-expression <expr>\",\n \"Expression: calm | content | neutral | pleasant | excited\",\n )\n .option(\"--avatar-intensity <level>\", \"Intensity: chill | normal | hyped\")\n .option(\"--instructions-file <path>\", \"Path to new instructions file\")\n .addHelpText(\n \"after\",\n `\nAvatar:\n Quick presets (--avatar):\n preset:0 light skin, brown hair, calm, hyped\n preset:1 light-medium skin, grey hair, calm, normal\n preset:2 medium skin, pink hair, neutral, chill\n preset:3 medium-dark skin, blonde hair, pleasant, hyped\n preset:4 dark skin, teal hair, excited, normal\n\n Custom attributes (--avatar-* flags, replace the entire avatar):\n --avatar-rotation 1=far-left 3=center(default) 5=far-right\n --avatar-skin light / light-medium / medium(default) / medium-dark / dark\n --avatar-hair-style 1–5 (default: 1)\n --avatar-hair-color blonde / teal / grey / pink / brown(default)\n --avatar-expression calm(default) / content / neutral / pleasant / excited\n --avatar-intensity chill / normal(default) / hyped\n\n Note: --avatar and --avatar-* cannot be used together.\n\nExamples:\n Update description: zero agent edit <agent-id> --description \"new role\"\n Update tone: zero agent edit <agent-id> --sound friendly\n Quick preset avatar: zero agent edit <agent-id> --avatar preset:2\n Custom avatar: zero agent edit <agent-id> --avatar-skin dark --avatar-hair-color teal --avatar-intensity hyped\n Update instructions: zero agent edit <agent-id> --instructions-file ./instructions.md\n Update yourself: zero agent edit $ZERO_AGENT_ID --description \"new role\"\n\nNotes:\n - At least one option is required\n - Unspecified fields are preserved (not cleared)\n - To attach workflows to agents, use: zero workflow attach --help`,\n )\n .action(\n withErrorHandler(async (agentId: string, options: AgentEditOptions) => {\n const hasAgentUpdate = hasAgentFieldUpdate(options);\n\n if (!hasAgentUpdate && !options.instructionsFile) {\n throw new Error(\n \"At least one option is required (--display-name, --description, --sound, --avatar, --avatar-*, --instructions-file)\",\n );\n }\n\n if (hasAgentUpdate) {\n await applyAgentUpdate(agentId, options);\n }\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agentId, content);\n }\n\n console.log(chalk.green(`✓ Agent \"${agentId}\" updated`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getZeroAgent,\n getZeroAgentInstructions,\n getZeroAgentUserConnectors,\n listZeroUserPermissionGrants,\n listZeroConnectors,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { permissionGrantsToFirewallPolicies } from \"@vm0/connectors/firewall-metadata/policy\";\nimport type { ConnectorResponse } from \"@vm0/api-contracts/contracts/connector-schemas\";\nimport { policyIcon } from \"../../../lib/utils/format-utils\";\nimport { formatAvatar } from \"./avatar\";\nimport {\n loadConnectorPermissionInfos,\n type ConnectorPermissionInfo,\n} from \"../shared/firewall-permissions\";\n\nfunction printDetailedPermissions(info: ConnectorPermissionInfo): void {\n if (!info.policies) {\n const icon = policyIcon(info.unknownPolicy);\n console.log(` ${icon} unknown endpoints`);\n return;\n }\n\n const nameWidth = Math.max(\n \"unknown endpoints\".length,\n ...info.permissions.map((p) => {\n return p.name.length;\n }),\n );\n\n for (const perm of info.permissions) {\n const policy = info.policies[perm.name] ?? \"deny\";\n const desc = perm.description ?? \"\";\n console.log(\n ` ${policyIcon(policy)} ${perm.name.padEnd(nameWidth)} ${desc}`,\n );\n }\n\n const unknownIcon = policyIcon(info.unknownPolicy);\n console.log(\n ` ${unknownIcon} ${\"unknown endpoints\".padEnd(nameWidth)} Endpoints not matching any rule`,\n );\n}\n\nfunction formatConnectorIdentity(\n connector: ConnectorResponse | undefined,\n): string {\n if (!connector) return \"\";\n if (connector.externalUsername) return `@${connector.externalUsername}`;\n if (connector.externalEmail) return connector.externalEmail;\n return \"\";\n}\n\nfunction formatConnectorSummary(\n info: ConnectorPermissionInfo,\n identity?: ConnectorResponse,\n): string {\n const id = formatConnectorIdentity(identity);\n const idStr = id ? ` ${id}` : \"\";\n if (!info.hasPermissions) return `${info.type}${idStr}`;\n if (!info.policies) return `${info.type}${idStr} (full access)`;\n return `${info.type}${idStr} (${info.allowed}/${info.total} allowed)`;\n}\n\nfunction formatDetailIdentity(\n connector: ConnectorResponse | undefined,\n): string {\n if (!connector) return \"\";\n let identity = \"\";\n if (connector.externalUsername && connector.externalEmail) {\n identity = `@${connector.externalUsername} (${connector.externalEmail})`;\n } else if (connector.externalUsername) {\n identity = `@${connector.externalUsername}`;\n } else if (connector.externalEmail) {\n identity = connector.externalEmail;\n }\n if (!identity) return \"\";\n if (connector.connectionStatus === \"reconnect-required\") {\n identity += ` ${chalk.yellow(\"(needs reconnect)\")}`;\n }\n return identity;\n}\n\nexport const viewCommand = new Command()\n .name(\"view\")\n .description(\"View a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"--instructions\", \"Also show instructions content\")\n .option(\"--permissions\", \"Show full permission details for each connector\")\n .addHelpText(\n \"after\",\n `\nExamples:\n View basic info: zero agent view <agent-id>\n Include instructions: zero agent view <agent-id> --instructions\n Show permissions: zero agent view <agent-id> --permissions\n View yourself: zero agent view $ZERO_AGENT_ID --instructions`,\n )\n .action(\n withErrorHandler(\n async (\n agentId: string,\n options: { instructions?: boolean; permissions?: boolean },\n ) => {\n const [agent, connectorTypes, connectorIdentities] = await Promise.all([\n getZeroAgent(agentId),\n getZeroAgentUserConnectors(agentId),\n listZeroConnectors().catch(() => {\n return { connectors: [] as ConnectorResponse[] };\n }),\n ]);\n\n const identityMap = new Map<string, ConnectorResponse>(\n connectorIdentities.connectors.map((c) => {\n return [c.type, c];\n }),\n );\n\n console.log(chalk.bold(agent.agentId));\n if (agent.displayName) console.log(chalk.dim(agent.displayName));\n console.log();\n console.log(`Agent ID: ${agent.agentId}`);\n\n const storedPolicies = options.permissions\n ? permissionGrantsToFirewallPolicies(\n await listZeroUserPermissionGrants(agent.agentId),\n )\n : null;\n const connectorInfos = await loadConnectorPermissionInfos({\n displayTypes: connectorTypes,\n defaultPolicyTypes: connectorTypes,\n storedPolicies,\n });\n\n if (connectorInfos.length > 0) {\n const summaries = connectorInfos.map((info) => {\n return formatConnectorSummary(info, identityMap.get(info.type));\n });\n console.log(`Connectors: ${summaries.join(\", \")}`);\n }\n\n if (agent.description)\n console.log(`Description: ${agent.description}`);\n if (agent.sound) console.log(`Sound: ${agent.sound}`);\n const avatar = formatAvatar(agent.avatarUrl);\n if (avatar) console.log(`Avatar: ${avatar}`);\n\n if (options.permissions && connectorInfos.length > 0) {\n console.log();\n console.log(chalk.bold(\"Connectors:\"));\n for (const info of connectorInfos) {\n const identity = formatDetailIdentity(identityMap.get(info.type));\n console.log(` ${info.type.padEnd(14)}${identity}`);\n if (info.hasPermissions) {\n printDetailedPermissions(info);\n }\n }\n }\n\n if (options.instructions) {\n console.log();\n const result = await getZeroAgentInstructions(agentId);\n if (result.content) {\n console.log(chalk.dim(\"── Instructions ──\"));\n console.log(result.content);\n } else {\n console.log(chalk.dim(\"No instructions set\"));\n }\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroAgents } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all zero agents\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero agent list\n\nNotes:\n - Use this to discover teammate agent IDs`,\n )\n .action(\n withErrorHandler(async () => {\n const agents = await listZeroAgents();\n\n if (agents.length === 0) {\n console.log(chalk.dim(\"No zero agents found\"));\n console.log(\n chalk.dim(\n ' Create one with: zero agent create --display-name \"My Agent\"',\n ),\n );\n return;\n }\n\n const idWidth = Math.max(\n 8,\n ...agents.map((a) => {\n return a.agentId.length;\n }),\n );\n const displayWidth = Math.max(\n 12,\n ...agents.map((a) => {\n return (a.displayName ?? \"\").length;\n }),\n );\n\n const header = [\n \"AGENT ID\".padEnd(idWidth),\n \"DISPLAY NAME\".padEnd(displayWidth),\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const agent of agents) {\n const row = [\n agent.agentId.padEnd(idWidth),\n (agent.displayName ?? \"-\").padEnd(displayWidth),\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroAgent, deleteZeroAgent } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero agent delete <agent-id>\n zero agent delete <agent-id> -y\n\nNotes:\n - Use -y to skip confirmation in non-interactive mode`,\n )\n .action(\n withErrorHandler(async (agentId: string, options: { yes?: boolean }) => {\n await getZeroAgent(agentId);\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete zero agent '${agentId}'?`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroAgent(agentId);\n console.log(chalk.green(`✓ Agent \"${agentId}\" deleted`));\n }),\n );\n"],"mappings":"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","names":["readFileSync","readFileSync"]}
1
+ {"version":3,"sources":["../src/commands/zero/agent/index.ts","../src/commands/zero/agent/create.ts","../src/commands/zero/agent/avatar.ts","../src/commands/zero/agent/edit.ts","../src/commands/zero/agent/view.ts","../src/commands/zero/agent/list.ts","../src/commands/zero/agent/delete.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { createCommand } from \"./create\";\nimport { editCommand } from \"./edit\";\nimport { viewCommand } from \"./view\";\nimport { listCommand } from \"./list\";\nimport { deleteCommand } from \"./delete\";\n\nexport const zeroAgentCommand = new Command(\"agent\")\n .description(\"View or manage zero agents\")\n .addCommand(createCommand)\n .addCommand(editCommand)\n .addCommand(viewCommand)\n .addCommand(listCommand)\n .addCommand(deleteCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Your agent ID is in $ZERO_AGENT_ID (or run: zero whoami)\n View your config: zero agent view $ZERO_AGENT_ID --instructions\n Update description: zero agent edit $ZERO_AGENT_ID --description \"new role\"\n Update tone: zero agent edit $ZERO_AGENT_ID --sound friendly\n Update instructions: zero agent edit $ZERO_AGENT_ID --instructions-file <path>\n Attach a workflow: zero workflow attach <name> --agent $ZERO_AGENT_ID\n\nNotes:\n Manage workflows with 'zero workflow --help'`,\n );\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport { createZeroAgent, updateZeroAgentInstructions } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { resolveAvatarUrl } from \"./avatar\";\n\nexport const createCommand = new Command()\n .name(\"create\")\n .description(\"Create a new zero agent\")\n .option(\"--display-name <name>\", \"Agent display name\")\n .option(\"--description <text>\", \"Agent description\")\n .option(\n \"--sound <tone>\",\n \"Agent tone: professional, friendly, direct, supportive\",\n )\n .option(\"--avatar <preset>\", \"Avatar preset: preset:0 through preset:4\")\n .option(\n \"--avatar-rotation <1-5>\",\n \"Head angle: 1=far-left 3=center 5=far-right\",\n )\n .option(\n \"--avatar-skin <tone>\",\n \"Skin tone: light | light-medium | medium | medium-dark | dark\",\n )\n .option(\"--avatar-hair-style <1-5>\", \"Hair style: 1–5\")\n .option(\n \"--avatar-hair-color <color>\",\n \"Hair color: blonde | teal | grey | pink | brown\",\n )\n .option(\n \"--avatar-expression <expr>\",\n \"Expression: calm | content | neutral | pleasant | excited\",\n )\n .option(\"--avatar-intensity <level>\", \"Intensity: chill | normal | hyped\")\n .option(\"--instructions-file <path>\", \"Path to instructions file\")\n .addHelpText(\n \"after\",\n `\nAvatar:\n Quick presets (--avatar):\n preset:0 light skin, brown hair, calm, hyped\n preset:1 light-medium skin, grey hair, calm, normal\n preset:2 medium skin, pink hair, neutral, chill\n preset:3 medium-dark skin, blonde hair, pleasant, hyped\n preset:4 dark skin, teal hair, excited, normal\n\n Custom attributes (--avatar-* flags, omitted fields use defaults):\n --avatar-rotation 1=far-left 3=center(default) 5=far-right\n --avatar-skin light / light-medium / medium(default) / medium-dark / dark\n --avatar-hair-style 1–5 (default: 1)\n --avatar-hair-color blonde / teal / grey / pink / brown(default)\n --avatar-expression calm(default) / content / neutral / pleasant / excited\n --avatar-intensity chill / normal(default) / hyped\n\n Note: --avatar and --avatar-* cannot be used together.\n\nExamples:\n Minimal: zero agent create --display-name \"My Agent\"\n Quick preset: zero agent create --display-name \"My Agent\" --avatar preset:2\n Custom avatar: zero agent create --display-name \"My Agent\" --avatar-skin dark --avatar-hair-color teal --avatar-intensity hyped\n With instructions: zero agent create --display-name \"My Agent\" --instructions-file ./instructions.md`,\n )\n .action(\n withErrorHandler(\n async (options: {\n displayName?: string;\n description?: string;\n sound?: string;\n avatar?: string;\n avatarRotation?: string;\n avatarSkin?: string;\n avatarHairStyle?: string;\n avatarHairColor?: string;\n avatarExpression?: string;\n avatarIntensity?: string;\n instructionsFile?: string;\n }) => {\n const avatarUrl = resolveAvatarUrl(options);\n\n const agent = await createZeroAgent({\n displayName: options.displayName,\n description: options.description,\n sound: options.sound,\n avatarUrl,\n });\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agent.agentId, content);\n }\n\n console.log(chalk.green(`✓ Agent \"${agent.agentId}\" created`));\n console.log(` Agent ID: ${agent.agentId}`);\n if (agent.displayName) {\n console.log(` Display Name: ${agent.displayName}`);\n }\n\n console.log();\n console.log(\"Next steps to authorize connectors for this agent:\");\n console.log(\" - Search connectors this agent needs:\");\n console.log(\n ` zero connector search <keyword> --agent ${agent.agentId}`,\n );\n console.log(\n \" - Check authorization status (prints an authorize URL if not authorized):\",\n );\n console.log(\n ` zero connector status <type> --agent ${agent.agentId}`,\n );\n },\n ),\n );\n","const SKIN_MAP: Record<string, number> = {\n light: 0,\n \"light-medium\": 1,\n medium: 2,\n \"medium-dark\": 3,\n dark: 4,\n};\n\nconst HAIR_COLOR_MAP: Record<string, number> = {\n blonde: 1,\n teal: 2,\n grey: 3,\n pink: 4,\n brown: 5,\n};\n\nconst EXPRESSION_MAP: Record<string, number> = {\n calm: 1,\n content: 2,\n neutral: 3,\n pleasant: 4,\n excited: 5,\n};\n\nconst INTENSITY_MAP: Record<string, \"d\" | \"m\" | \"h\"> = {\n chill: \"d\",\n normal: \"m\",\n hyped: \"h\",\n};\n\nfunction lookupRequired<T>(\n value: string,\n map: Readonly<Record<string, T>>,\n flag: string,\n): T {\n if (!(value in map)) {\n throw new Error(\n `Invalid ${flag} \"${value}\". Must be one of: ${Object.keys(map).join(\", \")}`,\n );\n }\n return map[value]!;\n}\n\nfunction parseIntRange(\n value: string,\n flag: string,\n min: number,\n max: number,\n): number {\n const n = Number(value);\n if (!Number.isInteger(n) || n < min || n > max) {\n throw new Error(`Invalid ${flag} \"${value}\". Must be ${min}–${max}`);\n }\n return n;\n}\n\nfunction buildCustomSvgAvatar(opts: AvatarOptions): string {\n const r =\n opts.avatarRotation !== undefined\n ? parseIntRange(opts.avatarRotation, \"--avatar-rotation\", 1, 5)\n : 3;\n const h =\n opts.avatarHairStyle !== undefined\n ? parseIntRange(opts.avatarHairStyle, \"--avatar-hair-style\", 1, 5)\n : 1;\n const s =\n opts.avatarSkin !== undefined\n ? lookupRequired(opts.avatarSkin, SKIN_MAP, \"--avatar-skin\")\n : 2;\n const c =\n opts.avatarHairColor !== undefined\n ? lookupRequired(\n opts.avatarHairColor,\n HAIR_COLOR_MAP,\n \"--avatar-hair-color\",\n )\n : 5;\n const f =\n opts.avatarExpression !== undefined\n ? lookupRequired(\n opts.avatarExpression,\n EXPRESSION_MAP,\n \"--avatar-expression\",\n )\n : 1;\n const i =\n opts.avatarIntensity !== undefined\n ? lookupRequired(\n opts.avatarIntensity,\n INTENSITY_MAP,\n \"--avatar-intensity\",\n )\n : \"m\";\n return `svg:r${r}s${s}h${h}c${c}f${f}${i}`;\n}\n\nexport interface AvatarOptions {\n avatar?: string;\n avatarRotation?: string;\n avatarSkin?: string;\n avatarHairStyle?: string;\n avatarHairColor?: string;\n avatarExpression?: string;\n avatarIntensity?: string;\n}\n\nexport function resolveAvatarUrl(opts: AvatarOptions): string | undefined {\n const hasPreset = opts.avatar !== undefined;\n const hasCustom =\n opts.avatarRotation !== undefined ||\n opts.avatarSkin !== undefined ||\n opts.avatarHairStyle !== undefined ||\n opts.avatarHairColor !== undefined ||\n opts.avatarExpression !== undefined ||\n opts.avatarIntensity !== undefined;\n\n if (!hasPreset && !hasCustom) return undefined;\n\n if (hasPreset && hasCustom) {\n throw new Error(\n \"--avatar cannot be combined with --avatar-* attribute options\",\n );\n }\n\n if (hasPreset) {\n if (!/^preset:[0-4]$/.test(opts.avatar!)) {\n throw new Error(\n `Invalid --avatar \"${opts.avatar}\". Use preset:0 through preset:4`,\n );\n }\n return opts.avatar;\n }\n\n return buildCustomSvgAvatar(opts);\n}\n\nconst REVERSE_SKIN_MAP: Record<number, string> = {\n 0: \"light\",\n 1: \"light-medium\",\n 2: \"medium\",\n 3: \"medium-dark\",\n 4: \"dark\",\n};\n\nconst REVERSE_HAIR_COLOR_MAP: Record<number, string> = {\n 1: \"blonde\",\n 2: \"teal\",\n 3: \"grey\",\n 4: \"pink\",\n 5: \"brown\",\n};\n\nconst REVERSE_EXPRESSION_MAP: Record<number, string> = {\n 1: \"calm\",\n 2: \"content\",\n 3: \"neutral\",\n 4: \"pleasant\",\n 5: \"excited\",\n};\n\nconst REVERSE_INTENSITY_MAP: Record<string, string> = {\n d: \"chill\",\n m: \"normal\",\n h: \"hyped\",\n};\n\nconst PRESET_DESCRIPTIONS: Record<string, string> = {\n \"preset:0\": \"light skin, brown hair, calm, hyped\",\n \"preset:1\": \"light-medium skin, grey hair, calm, normal\",\n \"preset:2\": \"medium skin, pink hair, neutral, chill\",\n \"preset:3\": \"medium-dark skin, blonde hair, pleasant, hyped\",\n \"preset:4\": \"dark skin, teal hair, excited, normal\",\n};\n\nfunction parseSvgAvatar(svg: string): string | undefined {\n const match = svg.match(/^svg:r(\\d)s(\\d)h(\\d)c(\\d)f(\\d)([dmh])$/);\n if (!match) return undefined;\n\n const [, r, s, h, c, f, i] = match as RegExpExecArray;\n const parts: string[] = [];\n\n const skin = REVERSE_SKIN_MAP[Number(s)];\n if (skin) parts.push(`${skin} skin`);\n\n const hairColor = REVERSE_HAIR_COLOR_MAP[Number(c)];\n if (hairColor) parts.push(`${hairColor} hair`);\n\n const expression = REVERSE_EXPRESSION_MAP[Number(f)];\n if (expression) parts.push(expression);\n\n const intensity = REVERSE_INTENSITY_MAP[i!];\n if (intensity) parts.push(intensity);\n\n if (parts.length === 0) return undefined;\n\n let desc = parts.join(\", \");\n if (r !== \"3\") {\n const rotationLabels: Record<string, string> = {\n \"1\": \"far-left\",\n \"2\": \"left\",\n \"4\": \"right\",\n \"5\": \"far-right\",\n };\n const rot = rotationLabels[r!];\n if (rot) desc += `, ${rot}`;\n }\n if (h !== \"1\") {\n desc += `, hair style ${h}`;\n }\n\n return desc;\n}\n\nexport function formatAvatar(\n avatarUrl: string | null | undefined,\n): string | undefined {\n if (!avatarUrl) return undefined;\n\n if (avatarUrl.startsWith(\"preset:\")) {\n const desc = PRESET_DESCRIPTIONS[avatarUrl];\n return desc ? `${avatarUrl} (${desc})` : avatarUrl;\n }\n\n if (avatarUrl.startsWith(\"svg:\")) {\n const desc = parseSvgAvatar(avatarUrl);\n return desc ? `custom (${desc})` : avatarUrl;\n }\n\n return avatarUrl;\n}\n","import { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport {\n getZeroAgent,\n updateZeroAgent,\n updateZeroAgentInstructions,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { type AvatarOptions, resolveAvatarUrl } from \"./avatar\";\n\ninterface AgentEditOptions extends AvatarOptions {\n displayName?: string;\n description?: string;\n sound?: string;\n instructionsFile?: string;\n}\n\nfunction hasAvatarUpdate(options: AvatarOptions): boolean {\n return (\n options.avatar !== undefined ||\n options.avatarRotation !== undefined ||\n options.avatarSkin !== undefined ||\n options.avatarHairStyle !== undefined ||\n options.avatarHairColor !== undefined ||\n options.avatarExpression !== undefined ||\n options.avatarIntensity !== undefined\n );\n}\n\nfunction hasAgentFieldUpdate(options: AgentEditOptions): boolean {\n return (\n options.displayName !== undefined ||\n options.description !== undefined ||\n options.sound !== undefined ||\n hasAvatarUpdate(options)\n );\n}\n\nasync function applyAgentUpdate(\n agentId: string,\n options: AgentEditOptions,\n): Promise<void> {\n const hasAvatar = hasAvatarUpdate(options);\n const resolvedAvatarUrl = hasAvatar ? resolveAvatarUrl(options) : undefined;\n\n const current = await getZeroAgent(agentId);\n\n const avatarUrl = hasAvatar\n ? resolvedAvatarUrl\n : (current.avatarUrl ?? undefined);\n\n await updateZeroAgent(agentId, {\n displayName:\n options.displayName !== undefined\n ? options.displayName\n : (current.displayName ?? undefined),\n description:\n options.description !== undefined\n ? options.description\n : (current.description ?? undefined),\n sound:\n options.sound !== undefined\n ? options.sound\n : (current.sound ?? undefined),\n avatarUrl,\n });\n}\n\nexport const editCommand = new Command()\n .name(\"edit\")\n .description(\"Edit a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"--display-name <name>\", \"New display name\")\n .option(\"--description <text>\", \"New description\")\n .option(\n \"--sound <tone>\",\n \"New tone: professional, friendly, direct, supportive\",\n )\n .option(\"--avatar <preset>\", \"Avatar preset: preset:0 through preset:4\")\n .option(\n \"--avatar-rotation <1-5>\",\n \"Head angle: 1=far-left 3=center 5=far-right\",\n )\n .option(\n \"--avatar-skin <tone>\",\n \"Skin tone: light | light-medium | medium | medium-dark | dark\",\n )\n .option(\"--avatar-hair-style <1-5>\", \"Hair style: 1–5\")\n .option(\n \"--avatar-hair-color <color>\",\n \"Hair color: blonde | teal | grey | pink | brown\",\n )\n .option(\n \"--avatar-expression <expr>\",\n \"Expression: calm | content | neutral | pleasant | excited\",\n )\n .option(\"--avatar-intensity <level>\", \"Intensity: chill | normal | hyped\")\n .option(\"--instructions-file <path>\", \"Path to new instructions file\")\n .addHelpText(\n \"after\",\n `\nAvatar:\n Quick presets (--avatar):\n preset:0 light skin, brown hair, calm, hyped\n preset:1 light-medium skin, grey hair, calm, normal\n preset:2 medium skin, pink hair, neutral, chill\n preset:3 medium-dark skin, blonde hair, pleasant, hyped\n preset:4 dark skin, teal hair, excited, normal\n\n Custom attributes (--avatar-* flags, replace the entire avatar):\n --avatar-rotation 1=far-left 3=center(default) 5=far-right\n --avatar-skin light / light-medium / medium(default) / medium-dark / dark\n --avatar-hair-style 1–5 (default: 1)\n --avatar-hair-color blonde / teal / grey / pink / brown(default)\n --avatar-expression calm(default) / content / neutral / pleasant / excited\n --avatar-intensity chill / normal(default) / hyped\n\n Note: --avatar and --avatar-* cannot be used together.\n\nExamples:\n Update description: zero agent edit <agent-id> --description \"new role\"\n Update tone: zero agent edit <agent-id> --sound friendly\n Quick preset avatar: zero agent edit <agent-id> --avatar preset:2\n Custom avatar: zero agent edit <agent-id> --avatar-skin dark --avatar-hair-color teal --avatar-intensity hyped\n Update instructions: zero agent edit <agent-id> --instructions-file ./instructions.md\n Update yourself: zero agent edit $ZERO_AGENT_ID --description \"new role\"\n\nNotes:\n - At least one option is required\n - Unspecified fields are preserved (not cleared)\n - To attach workflows to agents, use: zero workflow attach --help`,\n )\n .action(\n withErrorHandler(async (agentId: string, options: AgentEditOptions) => {\n const hasAgentUpdate = hasAgentFieldUpdate(options);\n\n if (!hasAgentUpdate && !options.instructionsFile) {\n throw new Error(\n \"At least one option is required (--display-name, --description, --sound, --avatar, --avatar-*, --instructions-file)\",\n );\n }\n\n if (hasAgentUpdate) {\n await applyAgentUpdate(agentId, options);\n }\n\n if (options.instructionsFile) {\n const content = readFileSync(options.instructionsFile, \"utf-8\");\n await updateZeroAgentInstructions(agentId, content);\n }\n\n console.log(chalk.green(`✓ Agent \"${agentId}\" updated`));\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n getZeroAgent,\n getZeroAgentInstructions,\n getZeroAgentUserConnectors,\n listZeroUserPermissionGrants,\n listZeroConnectors,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { permissionGrantsToFirewallPolicies } from \"@vm0/connectors/firewall-metadata/policy\";\nimport type { ConnectorResponse } from \"@vm0/api-contracts/contracts/connector-schemas\";\nimport { policyIcon } from \"../../../lib/utils/format-utils\";\nimport { formatAvatar } from \"./avatar\";\nimport {\n loadConnectorPermissionInfos,\n type ConnectorPermissionInfo,\n} from \"../shared/firewall-permissions\";\n\nfunction printDetailedPermissions(info: ConnectorPermissionInfo): void {\n if (!info.policies) {\n const icon = policyIcon(info.unknownPolicy);\n console.log(` ${icon} unknown endpoints`);\n return;\n }\n\n const nameWidth = Math.max(\n \"unknown endpoints\".length,\n ...info.permissions.map((p) => {\n return p.name.length;\n }),\n );\n\n for (const perm of info.permissions) {\n const policy = info.policies[perm.name] ?? \"deny\";\n const desc = perm.description ?? \"\";\n console.log(\n ` ${policyIcon(policy)} ${perm.name.padEnd(nameWidth)} ${desc}`,\n );\n }\n\n const unknownIcon = policyIcon(info.unknownPolicy);\n console.log(\n ` ${unknownIcon} ${\"unknown endpoints\".padEnd(nameWidth)} Endpoints not matching any rule`,\n );\n}\n\nfunction formatConnectorIdentity(\n connector: ConnectorResponse | undefined,\n): string {\n if (!connector) return \"\";\n if (connector.externalUsername) return `@${connector.externalUsername}`;\n if (connector.externalEmail) return connector.externalEmail;\n return \"\";\n}\n\nfunction formatConnectorSummary(\n info: ConnectorPermissionInfo,\n identity?: ConnectorResponse,\n): string {\n const id = formatConnectorIdentity(identity);\n const idStr = id ? ` ${id}` : \"\";\n if (!info.hasPermissions) return `${info.type}${idStr}`;\n if (!info.policies) return `${info.type}${idStr} (full access)`;\n return `${info.type}${idStr} (${info.allowed}/${info.total} allowed)`;\n}\n\nfunction formatDetailIdentity(\n connector: ConnectorResponse | undefined,\n): string {\n if (!connector) return \"\";\n let identity = \"\";\n if (connector.externalUsername && connector.externalEmail) {\n identity = `@${connector.externalUsername} (${connector.externalEmail})`;\n } else if (connector.externalUsername) {\n identity = `@${connector.externalUsername}`;\n } else if (connector.externalEmail) {\n identity = connector.externalEmail;\n }\n if (!identity) return \"\";\n if (connector.connectionStatus === \"reconnect-required\") {\n identity += ` ${chalk.yellow(\"(needs reconnect)\")}`;\n }\n return identity;\n}\n\nexport const viewCommand = new Command()\n .name(\"view\")\n .description(\"View a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"--instructions\", \"Also show instructions content\")\n .option(\"--permissions\", \"Show full permission details for each connector\")\n .addHelpText(\n \"after\",\n `\nExamples:\n View basic info: zero agent view <agent-id>\n Include instructions: zero agent view <agent-id> --instructions\n Show permissions: zero agent view <agent-id> --permissions\n View yourself: zero agent view $ZERO_AGENT_ID --instructions`,\n )\n .action(\n withErrorHandler(\n async (\n agentId: string,\n options: { instructions?: boolean; permissions?: boolean },\n ) => {\n const [agent, connectorTypes, connectorIdentities] = await Promise.all([\n getZeroAgent(agentId),\n getZeroAgentUserConnectors(agentId),\n listZeroConnectors().catch(() => {\n return { connectors: [] as ConnectorResponse[] };\n }),\n ]);\n\n const identityMap = new Map<string, ConnectorResponse>(\n connectorIdentities.connectors.map((c) => {\n return [c.type, c];\n }),\n );\n\n console.log(chalk.bold(agent.agentId));\n if (agent.displayName) console.log(chalk.dim(agent.displayName));\n console.log();\n console.log(`Agent ID: ${agent.agentId}`);\n\n const storedPolicies = options.permissions\n ? permissionGrantsToFirewallPolicies(\n await listZeroUserPermissionGrants(agent.agentId),\n )\n : null;\n const connectorInfos = await loadConnectorPermissionInfos({\n displayTypes: connectorTypes,\n defaultPolicyTypes: connectorTypes,\n storedPolicies,\n });\n\n if (connectorInfos.length > 0) {\n const summaries = connectorInfos.map((info) => {\n return formatConnectorSummary(info, identityMap.get(info.type));\n });\n console.log(`Connectors: ${summaries.join(\", \")}`);\n }\n\n if (agent.description)\n console.log(`Description: ${agent.description}`);\n if (agent.sound) console.log(`Sound: ${agent.sound}`);\n const avatar = formatAvatar(agent.avatarUrl);\n if (avatar) console.log(`Avatar: ${avatar}`);\n\n if (options.permissions && connectorInfos.length > 0) {\n console.log();\n console.log(chalk.bold(\"Connectors:\"));\n for (const info of connectorInfos) {\n const identity = formatDetailIdentity(identityMap.get(info.type));\n console.log(` ${info.type.padEnd(14)}${identity}`);\n if (info.hasPermissions) {\n printDetailedPermissions(info);\n }\n }\n }\n\n if (options.instructions) {\n console.log();\n const result = await getZeroAgentInstructions(agentId);\n if (result.content) {\n console.log(chalk.dim(\"── Instructions ──\"));\n console.log(result.content);\n } else {\n console.log(chalk.dim(\"No instructions set\"));\n }\n }\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroAgents } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List all zero agents\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero agent list\n\nNotes:\n - Use this to discover teammate agent IDs`,\n )\n .action(\n withErrorHandler(async () => {\n const agents = await listZeroAgents();\n\n if (agents.length === 0) {\n console.log(chalk.dim(\"No zero agents found\"));\n console.log(\n chalk.dim(\n ' Create one with: zero agent create --display-name \"My Agent\"',\n ),\n );\n return;\n }\n\n const idWidth = Math.max(\n 8,\n ...agents.map((a) => {\n return a.agentId.length;\n }),\n );\n const displayWidth = Math.max(\n 12,\n ...agents.map((a) => {\n return (a.displayName ?? \"\").length;\n }),\n );\n\n const header = [\n \"AGENT ID\".padEnd(idWidth),\n \"DISPLAY NAME\".padEnd(displayWidth),\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const agent of agents) {\n const row = [\n agent.agentId.padEnd(idWidth),\n (agent.displayName ?? \"-\").padEnd(displayWidth),\n ].join(\" \");\n console.log(row);\n }\n }),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroAgent, deleteZeroAgent } from \"../../../lib/api\";\nimport { isInteractive, promptConfirm } from \"../../../lib/utils/prompt-utils\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\nexport const deleteCommand = new Command()\n .name(\"delete\")\n .alias(\"rm\")\n .description(\"Delete a zero agent\")\n .argument(\"<agent-id>\", \"Agent ID\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero agent delete <agent-id>\n zero agent delete <agent-id> -y\n\nNotes:\n - Use -y to skip confirmation in non-interactive mode`,\n )\n .action(\n withErrorHandler(async (agentId: string, options: { yes?: boolean }) => {\n await getZeroAgent(agentId);\n\n if (!options.yes) {\n if (!isInteractive()) {\n throw new Error(\"--yes flag is required in non-interactive mode\");\n }\n const confirmed = await promptConfirm(\n `Delete zero agent '${agentId}'?`,\n false,\n );\n if (!confirmed) {\n console.log(chalk.dim(\"Cancelled\"));\n return;\n }\n }\n\n await deleteZeroAgent(agentId);\n console.log(chalk.green(`✓ Agent \"${agentId}\" deleted`));\n }),\n );\n"],"mappings":"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","names":["readFileSync","readFileSync"]}
@@ -3,20 +3,21 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  callZeroBanking
6
- } from "./chunk-3QXK5RR7.js";
7
- import "./chunk-LTDQISD7.js";
6
+ } from "./chunk-ROB3OE37.js";
7
+ import "./chunk-N6TDQYGF.js";
8
+ import "./chunk-SB7EZ2ZO.js";
8
9
  import {
9
10
  source_default,
10
11
  withErrorHandler
11
- } from "./chunk-XE764T2N.js";
12
- import "./chunk-LRHXR7JT.js";
12
+ } from "./chunk-BQOOTJNB.js";
13
+ import "./chunk-A2NKQGRI.js";
13
14
  import {
14
15
  Command,
15
16
  InvalidArgumentError
16
- } from "./chunk-B3W2RUBP.js";
17
+ } from "./chunk-LD4ZVU4O.js";
17
18
  import {
18
19
  init_esm_shims
19
- } from "./chunk-DIRAZ3YX.js";
20
+ } from "./chunk-3VVCUQPB.js";
20
21
 
21
22
  // src/commands/zero/banking/index.ts
22
23
  init_esm_shims();
@@ -113,4 +114,4 @@ Notes:
113
114
  export {
114
115
  zeroBankingCommand
115
116
  };
116
- //# sourceMappingURL=banking-TLHPJBS5.js.map
117
+ //# sourceMappingURL=banking-U7I6EJUO.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/zero/banking/index.ts"],"sourcesContent":["import { Command, InvalidArgumentError } from \"commander\";\nimport chalk from \"chalk\";\n\nimport { callZeroBanking, type ZeroBankingResponse } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\ninterface JsonOption {\n readonly json?: boolean;\n}\n\ninterface BalancesOptions extends JsonOption {\n readonly accountId: string;\n}\n\ninterface TransactionsOptions extends JsonOption {\n readonly accountId: string;\n readonly from: string;\n readonly to: string;\n readonly limit: number;\n}\n\nfunction parseLimit(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1 || parsed > 1000) {\n throw new InvalidArgumentError(\"limit must be between 1 and 1000\");\n }\n return parsed;\n}\n\nfunction parseDateOnly(value: string): string {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n throw new InvalidArgumentError(\"date must be formatted as YYYY-MM-DD\");\n }\n return value;\n}\n\nfunction renderBankingResponse(\n label: string,\n response: ZeroBankingResponse,\n): void {\n console.log(chalk.green(`✓ ${label}`));\n console.log(chalk.dim(` Provider: ${response.provider}`));\n\n if (response.accounts) {\n console.log(JSON.stringify(response.accounts, null, 2));\n return;\n }\n if (response.balance) {\n console.log(JSON.stringify(response.balance, null, 2));\n return;\n }\n console.log(JSON.stringify(response.transactions ?? [], null, 2));\n}\n\nasync function runBankingRequest(\n label: string,\n operation: \"accounts\" | \"balances\" | \"transactions\",\n payload: Record<string, unknown>,\n options: JsonOption,\n): Promise<void> {\n const response = await callZeroBanking(operation, payload);\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n renderBankingResponse(label, response);\n}\n\nconst accountsCommand = new Command()\n .name(\"accounts\")\n .description(\"List enabled banking accounts\")\n .option(\"--json\", \"Print the raw banking response as JSON\")\n .action(\n withErrorHandler(async (options: JsonOption) => {\n await runBankingRequest(\n \"Banking accounts loaded\",\n \"accounts\",\n {},\n options,\n );\n }),\n );\n\nconst balancesCommand = new Command()\n .name(\"balances\")\n .description(\"Read an enabled account balance\")\n .requiredOption(\"--account-id <id>\", \"Enabled provider account ID\")\n .option(\"--json\", \"Print the raw banking response as JSON\")\n .action(\n withErrorHandler(async (options: BalancesOptions) => {\n await runBankingRequest(\n \"Banking balance loaded\",\n \"balances\",\n { accountId: options.accountId },\n options,\n );\n }),\n );\n\nconst transactionsCommand = new Command()\n .name(\"transactions\")\n .description(\"Read transactions for an enabled account\")\n .requiredOption(\"--account-id <id>\", \"Enabled provider account ID\")\n .requiredOption(\n \"--from <date>\",\n \"Start date, formatted as YYYY-MM-DD\",\n parseDateOnly,\n )\n .requiredOption(\n \"--to <date>\",\n \"End date, formatted as YYYY-MM-DD\",\n parseDateOnly,\n )\n .option(\"--limit <n>\", \"Maximum transactions to return\", parseLimit, 100)\n .option(\"--json\", \"Print the raw banking response as JSON\")\n .action(\n withErrorHandler(async (options: TransactionsOptions) => {\n await runBankingRequest(\n \"Banking transactions loaded\",\n \"transactions\",\n {\n accountId: options.accountId,\n from: options.from,\n to: options.to,\n limit: options.limit,\n },\n options,\n );\n }),\n );\n\nexport const zeroBankingCommand = new Command()\n .name(\"banking\")\n .description(\"Use managed zero banking services\")\n .addCommand(accountsCommand)\n .addCommand(balancesCommand)\n .addCommand(transactionsCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n List accounts: zero banking accounts --json\n Get balance: zero banking balances --account-id <id> --json\n Get transactions: zero banking transactions --account-id <id> --from 2026-01-01 --to 2026-01-31 --json\n\nNotes:\n - Authenticates via ZERO_TOKEN (requires banking:read capability)\n - Finicity credentials and app tokens stay on the vm0 API server\n - Access is limited to accounts enabled for the current agent`,\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAqBA,SAAS,WAAW,OAAuB;AACzC,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,KAAK,SAAS,KAAM;AAC5D,UAAM,IAAI,qBAAqB,kCAAkC;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAAuB;AAC5C,MAAI,CAAC,sBAAsB,KAAK,KAAK,GAAG;AACtC,UAAM,IAAI,qBAAqB,sCAAsC;AAAA,EACvE;AACA,SAAO;AACT;AAEA,SAAS,sBACP,OACA,UACM;AACN,UAAQ,IAAI,eAAM,MAAM,UAAK,KAAK,EAAE,CAAC;AACrC,UAAQ,IAAI,eAAM,IAAI,eAAe,SAAS,QAAQ,EAAE,CAAC;AAEzD,MAAI,SAAS,UAAU;AACrB,YAAQ,IAAI,KAAK,UAAU,SAAS,UAAU,MAAM,CAAC,CAAC;AACtD;AAAA,EACF;AACA,MAAI,SAAS,SAAS;AACpB,YAAQ,IAAI,KAAK,UAAU,SAAS,SAAS,MAAM,CAAC,CAAC;AACrD;AAAA,EACF;AACA,UAAQ,IAAI,KAAK,UAAU,SAAS,gBAAgB,CAAC,GAAG,MAAM,CAAC,CAAC;AAClE;AAEA,eAAe,kBACb,OACA,WACA,SACA,SACe;AACf,QAAM,WAAW,MAAM,gBAAgB,WAAW,OAAO;AACzD,MAAI,QAAQ,MAAM;AAChB,YAAQ,IAAI,KAAK,UAAU,QAAQ,CAAC;AACpC;AAAA,EACF;AACA,wBAAsB,OAAO,QAAQ;AACvC;AAEA,IAAM,kBAAkB,IAAI,QAAQ,EACjC,KAAK,UAAU,EACf,YAAY,+BAA+B,EAC3C,OAAO,UAAU,wCAAwC,EACzD;AAAA,EACC,iBAAiB,OAAO,YAAwB;AAC9C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEF,IAAM,kBAAkB,IAAI,QAAQ,EACjC,KAAK,UAAU,EACf,YAAY,iCAAiC,EAC7C,eAAe,qBAAqB,6BAA6B,EACjE,OAAO,UAAU,wCAAwC,EACzD;AAAA,EACC,iBAAiB,OAAO,YAA6B;AACnD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,EAAE,WAAW,QAAQ,UAAU;AAAA,MAC/B;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEF,IAAM,sBAAsB,IAAI,QAAQ,EACrC,KAAK,cAAc,EACnB,YAAY,0CAA0C,EACtD,eAAe,qBAAqB,6BAA6B,EACjE;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACF,EACC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACF,EACC,OAAO,eAAe,kCAAkC,YAAY,GAAG,EACvE,OAAO,UAAU,wCAAwC,EACzD;AAAA,EACC,iBAAiB,OAAO,YAAiC;AACvD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,QACE,WAAW,QAAQ;AAAA,QACnB,MAAM,QAAQ;AAAA,QACd,IAAI,QAAQ;AAAA,QACZ,OAAO,QAAQ;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEK,IAAM,qBAAqB,IAAI,QAAQ,EAC3C,KAAK,SAAS,EACd,YAAY,mCAAmC,EAC/C,WAAW,eAAe,EAC1B,WAAW,eAAe,EAC1B,WAAW,mBAAmB,EAC9B;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUF;","names":[]}
1
+ {"version":3,"sources":["../src/commands/zero/banking/index.ts"],"sourcesContent":["import { Command, InvalidArgumentError } from \"commander\";\nimport chalk from \"chalk\";\n\nimport { callZeroBanking, type ZeroBankingResponse } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\ninterface JsonOption {\n readonly json?: boolean;\n}\n\ninterface BalancesOptions extends JsonOption {\n readonly accountId: string;\n}\n\ninterface TransactionsOptions extends JsonOption {\n readonly accountId: string;\n readonly from: string;\n readonly to: string;\n readonly limit: number;\n}\n\nfunction parseLimit(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1 || parsed > 1000) {\n throw new InvalidArgumentError(\"limit must be between 1 and 1000\");\n }\n return parsed;\n}\n\nfunction parseDateOnly(value: string): string {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n throw new InvalidArgumentError(\"date must be formatted as YYYY-MM-DD\");\n }\n return value;\n}\n\nfunction renderBankingResponse(\n label: string,\n response: ZeroBankingResponse,\n): void {\n console.log(chalk.green(`✓ ${label}`));\n console.log(chalk.dim(` Provider: ${response.provider}`));\n\n if (response.accounts) {\n console.log(JSON.stringify(response.accounts, null, 2));\n return;\n }\n if (response.balance) {\n console.log(JSON.stringify(response.balance, null, 2));\n return;\n }\n console.log(JSON.stringify(response.transactions ?? [], null, 2));\n}\n\nasync function runBankingRequest(\n label: string,\n operation: \"accounts\" | \"balances\" | \"transactions\",\n payload: Record<string, unknown>,\n options: JsonOption,\n): Promise<void> {\n const response = await callZeroBanking(operation, payload);\n if (options.json) {\n console.log(JSON.stringify(response));\n return;\n }\n renderBankingResponse(label, response);\n}\n\nconst accountsCommand = new Command()\n .name(\"accounts\")\n .description(\"List enabled banking accounts\")\n .option(\"--json\", \"Print the raw banking response as JSON\")\n .action(\n withErrorHandler(async (options: JsonOption) => {\n await runBankingRequest(\n \"Banking accounts loaded\",\n \"accounts\",\n {},\n options,\n );\n }),\n );\n\nconst balancesCommand = new Command()\n .name(\"balances\")\n .description(\"Read an enabled account balance\")\n .requiredOption(\"--account-id <id>\", \"Enabled provider account ID\")\n .option(\"--json\", \"Print the raw banking response as JSON\")\n .action(\n withErrorHandler(async (options: BalancesOptions) => {\n await runBankingRequest(\n \"Banking balance loaded\",\n \"balances\",\n { accountId: options.accountId },\n options,\n );\n }),\n );\n\nconst transactionsCommand = new Command()\n .name(\"transactions\")\n .description(\"Read transactions for an enabled account\")\n .requiredOption(\"--account-id <id>\", \"Enabled provider account ID\")\n .requiredOption(\n \"--from <date>\",\n \"Start date, formatted as YYYY-MM-DD\",\n parseDateOnly,\n )\n .requiredOption(\n \"--to <date>\",\n \"End date, formatted as YYYY-MM-DD\",\n parseDateOnly,\n )\n .option(\"--limit <n>\", \"Maximum transactions to return\", parseLimit, 100)\n .option(\"--json\", \"Print the raw banking response as JSON\")\n .action(\n withErrorHandler(async (options: TransactionsOptions) => {\n await runBankingRequest(\n \"Banking transactions loaded\",\n \"transactions\",\n {\n accountId: options.accountId,\n from: options.from,\n to: options.to,\n limit: options.limit,\n },\n options,\n );\n }),\n );\n\nexport const zeroBankingCommand = new Command()\n .name(\"banking\")\n .description(\"Use managed zero banking services\")\n .addCommand(accountsCommand)\n .addCommand(balancesCommand)\n .addCommand(transactionsCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n List accounts: zero banking accounts --json\n Get balance: zero banking balances --account-id <id> --json\n Get transactions: zero banking transactions --account-id <id> --from 2026-01-01 --to 2026-01-31 --json\n\nNotes:\n - Authenticates via ZERO_TOKEN (requires banking:read capability)\n - Finicity credentials and app tokens stay on the vm0 API server\n - Access is limited to accounts enabled for the current agent`,\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAqBA,SAAS,WAAW,OAAuB;AACzC,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,KAAK,SAAS,KAAM;AAC5D,UAAM,IAAI,qBAAqB,kCAAkC;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAAuB;AAC5C,MAAI,CAAC,sBAAsB,KAAK,KAAK,GAAG;AACtC,UAAM,IAAI,qBAAqB,sCAAsC;AAAA,EACvE;AACA,SAAO;AACT;AAEA,SAAS,sBACP,OACA,UACM;AACN,UAAQ,IAAI,eAAM,MAAM,UAAK,KAAK,EAAE,CAAC;AACrC,UAAQ,IAAI,eAAM,IAAI,eAAe,SAAS,QAAQ,EAAE,CAAC;AAEzD,MAAI,SAAS,UAAU;AACrB,YAAQ,IAAI,KAAK,UAAU,SAAS,UAAU,MAAM,CAAC,CAAC;AACtD;AAAA,EACF;AACA,MAAI,SAAS,SAAS;AACpB,YAAQ,IAAI,KAAK,UAAU,SAAS,SAAS,MAAM,CAAC,CAAC;AACrD;AAAA,EACF;AACA,UAAQ,IAAI,KAAK,UAAU,SAAS,gBAAgB,CAAC,GAAG,MAAM,CAAC,CAAC;AAClE;AAEA,eAAe,kBACb,OACA,WACA,SACA,SACe;AACf,QAAM,WAAW,MAAM,gBAAgB,WAAW,OAAO;AACzD,MAAI,QAAQ,MAAM;AAChB,YAAQ,IAAI,KAAK,UAAU,QAAQ,CAAC;AACpC;AAAA,EACF;AACA,wBAAsB,OAAO,QAAQ;AACvC;AAEA,IAAM,kBAAkB,IAAI,QAAQ,EACjC,KAAK,UAAU,EACf,YAAY,+BAA+B,EAC3C,OAAO,UAAU,wCAAwC,EACzD;AAAA,EACC,iBAAiB,OAAO,YAAwB;AAC9C,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEF,IAAM,kBAAkB,IAAI,QAAQ,EACjC,KAAK,UAAU,EACf,YAAY,iCAAiC,EAC7C,eAAe,qBAAqB,6BAA6B,EACjE,OAAO,UAAU,wCAAwC,EACzD;AAAA,EACC,iBAAiB,OAAO,YAA6B;AACnD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,EAAE,WAAW,QAAQ,UAAU;AAAA,MAC/B;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEF,IAAM,sBAAsB,IAAI,QAAQ,EACrC,KAAK,cAAc,EACnB,YAAY,0CAA0C,EACtD,eAAe,qBAAqB,6BAA6B,EACjE;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACF,EACC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACF,EACC,OAAO,eAAe,kCAAkC,YAAY,GAAG,EACvE,OAAO,UAAU,wCAAwC,EACzD;AAAA,EACC,iBAAiB,OAAO,YAAiC;AACvD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,QACE,WAAW,QAAQ;AAAA,QACnB,MAAM,QAAQ;AAAA,QACd,IAAI,QAAQ;AAAA,QACZ,OAAO,QAAQ;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEK,IAAM,qBAAqB,IAAI,QAAQ,EAC3C,KAAK,SAAS,EACd,YAAY,mCAAmC,EAC/C,WAAW,eAAe,EAC1B,WAAW,eAAe,EAC1B,WAAW,mBAAmB,EAC9B;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUF;","names":[]}
@@ -3,25 +3,26 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  formatModelProviderRoute
6
- } from "./chunk-HJOW32CJ.js";
6
+ } from "./chunk-HSGQT7LT.js";
7
7
  import {
8
8
  getZeroChatThread,
9
9
  listZeroModelPolicies,
10
10
  renameZeroChatThread,
11
11
  updateZeroChatThreadModelSelection
12
- } from "./chunk-3QXK5RR7.js";
13
- import "./chunk-LTDQISD7.js";
12
+ } from "./chunk-ROB3OE37.js";
13
+ import "./chunk-N6TDQYGF.js";
14
+ import "./chunk-SB7EZ2ZO.js";
14
15
  import {
15
16
  source_default,
16
17
  withErrorHandler
17
- } from "./chunk-XE764T2N.js";
18
- import "./chunk-LRHXR7JT.js";
18
+ } from "./chunk-BQOOTJNB.js";
19
+ import "./chunk-A2NKQGRI.js";
19
20
  import {
20
21
  Command
21
- } from "./chunk-B3W2RUBP.js";
22
+ } from "./chunk-LD4ZVU4O.js";
22
23
  import {
23
24
  init_esm_shims
24
- } from "./chunk-DIRAZ3YX.js";
25
+ } from "./chunk-3VVCUQPB.js";
25
26
 
26
27
  // src/commands/zero/chat/index.ts
27
28
  init_esm_shims();
@@ -242,4 +243,4 @@ Examples:
242
243
  export {
243
244
  zeroChatCommand
244
245
  };
245
- //# sourceMappingURL=chat-PWHG42AL.js.map
246
+ //# sourceMappingURL=chat-77EDGFMS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/zero/chat/index.ts","../src/commands/zero/chat/get.ts","../src/commands/zero/chat/model.ts","../src/commands/zero/chat/rename.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { getCommand } from \"./get\";\nimport { modelCommand } from \"./model\";\nimport { renameCommand } from \"./rename\";\n\nexport const zeroChatCommand = new Command()\n .name(\"chat\")\n .description(\"Manage the current web chat thread\")\n .addCommand(getCommand)\n .addCommand(modelCommand)\n .addCommand(renameCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Show this chat: zero chat get\n Switch model: zero chat model claude-sonnet-5\n Rename this chat: zero chat rename \"Launch plan\"`,\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nimport { getZeroChatThread } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\ninterface GetOptions {\n readonly json?: boolean;\n}\n\nfunction getCurrentChatThreadId(): string | undefined {\n return process.env.ZERO_CHAT_THREAD_ID?.trim() || undefined;\n}\n\nfunction printUsageError(message: string, hint: string): never {\n console.error(chalk.red(`✗ ${message}`));\n console.error(chalk.dim(` ${hint}`));\n process.exit(1);\n}\n\nexport const getCommand = new Command()\n .name(\"get\")\n .description(\"Show the current web chat thread\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Show this chat: zero chat get\n Print JSON: zero chat get --json\n\nNotes:\n - Uses ZERO_CHAT_THREAD_ID from the current web chat thread\n - Authenticates via ZERO_TOKEN (requires chat-thread:read capability)`,\n )\n .action(\n withErrorHandler(async (options: GetOptions) => {\n const threadId = getCurrentChatThreadId();\n if (!threadId) {\n printUsageError(\n \"ZERO_CHAT_THREAD_ID is not set\",\n \"Run this command from a Zero web chat thread.\",\n );\n }\n\n const thread = await getZeroChatThread({ threadId });\n if (options.json) {\n console.log(JSON.stringify(thread));\n return;\n }\n\n console.log(chalk.green(\"✓ Chat thread loaded\"));\n console.log(chalk.dim(` Thread: ${thread.id}`));\n console.log(chalk.dim(` Title: ${thread.title ?? \"(untitled)\"}`));\n console.log(\n chalk.dim(` Model: ${thread.selectedModel ?? \"(default)\"}`),\n );\n }),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type { ChatThreadMetadata } from \"@vm0/api-contracts/contracts/chat-threads\";\nimport type { OrgModelPolicy } from \"@vm0/api-contracts/contracts/model-providers\";\n\nimport {\n getZeroChatThread,\n listZeroModelPolicies,\n updateZeroChatThreadModelSelection,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { formatModelProviderRoute } from \"../../../lib/domain/model-policy-display\";\n\ninterface ModelOptions {\n readonly help?: boolean;\n}\n\nfunction getCurrentChatThreadId(): string | undefined {\n return process.env.ZERO_CHAT_THREAD_ID?.trim() || undefined;\n}\n\nfunction printUsageError(message: string, hint: string): never {\n console.error(chalk.red(`✗ ${message}`));\n console.error(chalk.dim(` ${hint}`));\n process.exit(1);\n}\n\nfunction switchablePolicies(policies: readonly OrgModelPolicy[]) {\n return policies.filter((policy) => {\n return policy.routeStatus === \"valid\";\n });\n}\n\nfunction formatModelName(policy: OrgModelPolicy): string {\n return `${policy.modelLabel} ${chalk.dim(`(${policy.model})`)}`;\n}\n\nfunction printSwitchableModels(policies: readonly OrgModelPolicy[]): void {\n const switchable = switchablePolicies(policies);\n if (switchable.length === 0) {\n console.log(chalk.dim(\"No switchable models are available for this user\"));\n return;\n }\n\n for (const policy of switchable) {\n const defaultMarker = policy.isDefault ? chalk.dim(\" (default)\") : \"\";\n console.log(` - ${formatModelName(policy)}${defaultMarker}`);\n console.log(` provider: ${formatModelProviderRoute(policy)}`);\n }\n}\n\nfunction printCurrentModel(thread: ChatThreadMetadata): void {\n console.log(chalk.green(\"✓ Chat thread loaded\"));\n console.log(chalk.dim(` Thread: ${thread.id}`));\n console.log(chalk.dim(` Title: ${thread.title ?? \"(untitled)\"}`));\n console.log(chalk.dim(` Model: ${thread.selectedModel ?? \"(default)\"}`));\n}\n\nasync function printModelHelp(command: Command): Promise<void> {\n const result = await listZeroModelPolicies();\n console.log(command.helpInformation().trimEnd());\n console.log();\n console.log(chalk.bold(\"Switchable models:\"));\n printSwitchableModels(result.policies);\n console.log();\n console.log(\"Use the model id in parentheses:\");\n console.log(chalk.cyan(\" zero chat model <model>\"));\n}\n\nasync function printCurrentModelAndChoices(threadId: string): Promise<void> {\n const [thread, result] = await Promise.all([\n getZeroChatThread({ threadId }),\n listZeroModelPolicies(),\n ]);\n\n printCurrentModel(thread);\n console.log();\n console.log(chalk.bold(\"Switchable models:\"));\n printSwitchableModels(result.policies);\n console.log();\n console.log(\"Switch models:\");\n console.log(chalk.cyan(\" zero chat model <model>\"));\n}\n\nasync function switchModel(threadId: string, model: string): Promise<void> {\n const result = await listZeroModelPolicies();\n const policy = result.policies.find((candidate) => {\n return candidate.model === model;\n });\n\n if (!policy) {\n printUsageError(`Unknown model: ${model}`, \"Run: zero chat model --help\");\n }\n\n if (policy.routeStatus !== \"valid\") {\n const reason = policy.routeStatusReason\n ? ` (${policy.routeStatusReason})`\n : \"\";\n printUsageError(\n `Model is not switchable: ${model}${reason}`,\n \"Run: zero chat model --help\",\n );\n }\n\n const updated = await updateZeroChatThreadModelSelection({\n threadId,\n model,\n });\n\n console.log(chalk.green(\"✓ Chat model updated\"));\n console.log(chalk.dim(` Thread: ${updated.threadId}`));\n console.log(chalk.dim(` Model: ${policy.modelLabel} (${model})`));\n}\n\nexport const modelCommand = new Command()\n .name(\"model\")\n .description(\"Show or switch the current web chat thread model\")\n .argument(\"[model]\", \"Model id to use for this chat thread\")\n .helpOption(false)\n .option(\"-h, --help\", \"Show help with switchable models\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Show this chat model: zero chat model\n Switch this model: zero chat model claude-sonnet-5\n\nNotes:\n - Uses ZERO_CHAT_THREAD_ID from the current web chat thread\n - Authenticates via ZERO_TOKEN (requires chat-thread:write capability to switch)`,\n )\n .action(\n withErrorHandler(\n async (model: string | undefined, options: ModelOptions) => {\n if (options.help) {\n await printModelHelp(modelCommand);\n return;\n }\n\n const threadId = getCurrentChatThreadId();\n if (!threadId) {\n printUsageError(\n \"ZERO_CHAT_THREAD_ID is not set\",\n \"Run this command from a Zero web chat thread.\",\n );\n }\n\n if (!model) {\n await printCurrentModelAndChoices(threadId);\n return;\n }\n\n await switchModel(threadId, model);\n },\n ),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nimport { renameZeroChatThread } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\ninterface RenameOptions {\n readonly json?: boolean;\n}\n\nfunction getCurrentChatThreadId(): string | undefined {\n return process.env.ZERO_CHAT_THREAD_ID?.trim() || undefined;\n}\n\nfunction printUsageError(message: string, hint: string): never {\n console.error(chalk.red(`✗ ${message}`));\n console.error(chalk.dim(` ${hint}`));\n process.exit(1);\n}\n\nexport const renameCommand = new Command()\n .name(\"rename\")\n .description(\"Rename the current web chat thread\")\n .argument(\"<title...>\", \"New chat title\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Rename this chat: zero chat rename \"Launch plan\"\n\nNotes:\n - Uses ZERO_CHAT_THREAD_ID from the current web chat thread\n - Authenticates via ZERO_TOKEN (requires chat-thread:write capability)`,\n )\n .action(\n withErrorHandler(async (titleParts: string[], options: RenameOptions) => {\n const title = titleParts.join(\" \").trim();\n if (!title) {\n printUsageError(\n \"Title is required\",\n 'Run: zero chat rename \"New title\"',\n );\n }\n\n const threadId = getCurrentChatThreadId();\n if (!threadId) {\n printUsageError(\n \"ZERO_CHAT_THREAD_ID is not set\",\n \"Run this command from a Zero web chat thread.\",\n );\n }\n\n const result = await renameZeroChatThread({ threadId, title });\n if (options.json) {\n console.log(JSON.stringify(result));\n return;\n }\n\n console.log(chalk.green(\"✓ Chat title updated\"));\n console.log(chalk.dim(` Thread: ${result.threadId}`));\n console.log(chalk.dim(` Title: ${result.title}`));\n }),\n );\n"],"mappings":"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","names":["getCurrentChatThreadId","printUsageError","getCurrentChatThreadId","printUsageError"]}
1
+ {"version":3,"sources":["../src/commands/zero/chat/index.ts","../src/commands/zero/chat/get.ts","../src/commands/zero/chat/model.ts","../src/commands/zero/chat/rename.ts"],"sourcesContent":["import { Command } from \"commander\";\n\nimport { getCommand } from \"./get\";\nimport { modelCommand } from \"./model\";\nimport { renameCommand } from \"./rename\";\n\nexport const zeroChatCommand = new Command()\n .name(\"chat\")\n .description(\"Manage the current web chat thread\")\n .addCommand(getCommand)\n .addCommand(modelCommand)\n .addCommand(renameCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Show this chat: zero chat get\n Switch model: zero chat model claude-sonnet-5\n Rename this chat: zero chat rename \"Launch plan\"`,\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nimport { getZeroChatThread } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\ninterface GetOptions {\n readonly json?: boolean;\n}\n\nfunction getCurrentChatThreadId(): string | undefined {\n return process.env.ZERO_CHAT_THREAD_ID?.trim() || undefined;\n}\n\nfunction printUsageError(message: string, hint: string): never {\n console.error(chalk.red(`✗ ${message}`));\n console.error(chalk.dim(` ${hint}`));\n process.exit(1);\n}\n\nexport const getCommand = new Command()\n .name(\"get\")\n .description(\"Show the current web chat thread\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Show this chat: zero chat get\n Print JSON: zero chat get --json\n\nNotes:\n - Uses ZERO_CHAT_THREAD_ID from the current web chat thread\n - Authenticates via ZERO_TOKEN (requires chat-thread:read capability)`,\n )\n .action(\n withErrorHandler(async (options: GetOptions) => {\n const threadId = getCurrentChatThreadId();\n if (!threadId) {\n printUsageError(\n \"ZERO_CHAT_THREAD_ID is not set\",\n \"Run this command from a Zero web chat thread.\",\n );\n }\n\n const thread = await getZeroChatThread({ threadId });\n if (options.json) {\n console.log(JSON.stringify(thread));\n return;\n }\n\n console.log(chalk.green(\"✓ Chat thread loaded\"));\n console.log(chalk.dim(` Thread: ${thread.id}`));\n console.log(chalk.dim(` Title: ${thread.title ?? \"(untitled)\"}`));\n console.log(\n chalk.dim(` Model: ${thread.selectedModel ?? \"(default)\"}`),\n );\n }),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type { ChatThreadMetadata } from \"@vm0/api-contracts/contracts/chat-threads\";\nimport type { OrgModelPolicy } from \"@vm0/api-contracts/contracts/model-providers\";\n\nimport {\n getZeroChatThread,\n listZeroModelPolicies,\n updateZeroChatThreadModelSelection,\n} from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { formatModelProviderRoute } from \"../../../lib/domain/model-policy-display\";\n\ninterface ModelOptions {\n readonly help?: boolean;\n}\n\nfunction getCurrentChatThreadId(): string | undefined {\n return process.env.ZERO_CHAT_THREAD_ID?.trim() || undefined;\n}\n\nfunction printUsageError(message: string, hint: string): never {\n console.error(chalk.red(`✗ ${message}`));\n console.error(chalk.dim(` ${hint}`));\n process.exit(1);\n}\n\nfunction switchablePolicies(policies: readonly OrgModelPolicy[]) {\n return policies.filter((policy) => {\n return policy.routeStatus === \"valid\";\n });\n}\n\nfunction formatModelName(policy: OrgModelPolicy): string {\n return `${policy.modelLabel} ${chalk.dim(`(${policy.model})`)}`;\n}\n\nfunction printSwitchableModels(policies: readonly OrgModelPolicy[]): void {\n const switchable = switchablePolicies(policies);\n if (switchable.length === 0) {\n console.log(chalk.dim(\"No switchable models are available for this user\"));\n return;\n }\n\n for (const policy of switchable) {\n const defaultMarker = policy.isDefault ? chalk.dim(\" (default)\") : \"\";\n console.log(` - ${formatModelName(policy)}${defaultMarker}`);\n console.log(` provider: ${formatModelProviderRoute(policy)}`);\n }\n}\n\nfunction printCurrentModel(thread: ChatThreadMetadata): void {\n console.log(chalk.green(\"✓ Chat thread loaded\"));\n console.log(chalk.dim(` Thread: ${thread.id}`));\n console.log(chalk.dim(` Title: ${thread.title ?? \"(untitled)\"}`));\n console.log(chalk.dim(` Model: ${thread.selectedModel ?? \"(default)\"}`));\n}\n\nasync function printModelHelp(command: Command): Promise<void> {\n const result = await listZeroModelPolicies();\n console.log(command.helpInformation().trimEnd());\n console.log();\n console.log(chalk.bold(\"Switchable models:\"));\n printSwitchableModels(result.policies);\n console.log();\n console.log(\"Use the model id in parentheses:\");\n console.log(chalk.cyan(\" zero chat model <model>\"));\n}\n\nasync function printCurrentModelAndChoices(threadId: string): Promise<void> {\n const [thread, result] = await Promise.all([\n getZeroChatThread({ threadId }),\n listZeroModelPolicies(),\n ]);\n\n printCurrentModel(thread);\n console.log();\n console.log(chalk.bold(\"Switchable models:\"));\n printSwitchableModels(result.policies);\n console.log();\n console.log(\"Switch models:\");\n console.log(chalk.cyan(\" zero chat model <model>\"));\n}\n\nasync function switchModel(threadId: string, model: string): Promise<void> {\n const result = await listZeroModelPolicies();\n const policy = result.policies.find((candidate) => {\n return candidate.model === model;\n });\n\n if (!policy) {\n printUsageError(`Unknown model: ${model}`, \"Run: zero chat model --help\");\n }\n\n if (policy.routeStatus !== \"valid\") {\n const reason = policy.routeStatusReason\n ? ` (${policy.routeStatusReason})`\n : \"\";\n printUsageError(\n `Model is not switchable: ${model}${reason}`,\n \"Run: zero chat model --help\",\n );\n }\n\n const updated = await updateZeroChatThreadModelSelection({\n threadId,\n model,\n });\n\n console.log(chalk.green(\"✓ Chat model updated\"));\n console.log(chalk.dim(` Thread: ${updated.threadId}`));\n console.log(chalk.dim(` Model: ${policy.modelLabel} (${model})`));\n}\n\nexport const modelCommand = new Command()\n .name(\"model\")\n .description(\"Show or switch the current web chat thread model\")\n .argument(\"[model]\", \"Model id to use for this chat thread\")\n .helpOption(false)\n .option(\"-h, --help\", \"Show help with switchable models\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Show this chat model: zero chat model\n Switch this model: zero chat model claude-sonnet-5\n\nNotes:\n - Uses ZERO_CHAT_THREAD_ID from the current web chat thread\n - Authenticates via ZERO_TOKEN (requires chat-thread:write capability to switch)`,\n )\n .action(\n withErrorHandler(\n async (model: string | undefined, options: ModelOptions) => {\n if (options.help) {\n await printModelHelp(modelCommand);\n return;\n }\n\n const threadId = getCurrentChatThreadId();\n if (!threadId) {\n printUsageError(\n \"ZERO_CHAT_THREAD_ID is not set\",\n \"Run this command from a Zero web chat thread.\",\n );\n }\n\n if (!model) {\n await printCurrentModelAndChoices(threadId);\n return;\n }\n\n await switchModel(threadId, model);\n },\n ),\n );\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nimport { renameZeroChatThread } from \"../../../lib/api\";\nimport { withErrorHandler } from \"../../../lib/command\";\n\ninterface RenameOptions {\n readonly json?: boolean;\n}\n\nfunction getCurrentChatThreadId(): string | undefined {\n return process.env.ZERO_CHAT_THREAD_ID?.trim() || undefined;\n}\n\nfunction printUsageError(message: string, hint: string): never {\n console.error(chalk.red(`✗ ${message}`));\n console.error(chalk.dim(` ${hint}`));\n process.exit(1);\n}\n\nexport const renameCommand = new Command()\n .name(\"rename\")\n .description(\"Rename the current web chat thread\")\n .argument(\"<title...>\", \"New chat title\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Rename this chat: zero chat rename \"Launch plan\"\n\nNotes:\n - Uses ZERO_CHAT_THREAD_ID from the current web chat thread\n - Authenticates via ZERO_TOKEN (requires chat-thread:write capability)`,\n )\n .action(\n withErrorHandler(async (titleParts: string[], options: RenameOptions) => {\n const title = titleParts.join(\" \").trim();\n if (!title) {\n printUsageError(\n \"Title is required\",\n 'Run: zero chat rename \"New title\"',\n );\n }\n\n const threadId = getCurrentChatThreadId();\n if (!threadId) {\n printUsageError(\n \"ZERO_CHAT_THREAD_ID is not set\",\n \"Run this command from a Zero web chat thread.\",\n );\n }\n\n const result = await renameZeroChatThread({ threadId, title });\n if (options.json) {\n console.log(JSON.stringify(result));\n return;\n }\n\n console.log(chalk.green(\"✓ Chat title updated\"));\n console.log(chalk.dim(` Thread: ${result.threadId}`));\n console.log(chalk.dim(` Title: ${result.title}`));\n }),\n );\n"],"mappings":"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","names":["getCurrentChatThreadId","printUsageError","getCurrentChatThreadId","printUsageError"]}
@@ -50,12 +50,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
50
50
  ));
51
51
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
52
52
 
53
- // ../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.15_tsx@4.21.0_typescript@6.0.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js
53
+ // ../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.22_tsx@4.21.0_typescript@6.0.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js
54
54
  import path from "path";
55
55
  import { fileURLToPath } from "url";
56
56
  var getFilename, __filename;
57
57
  var init_esm_shims = __esm({
58
- "../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.15_tsx@4.21.0_typescript@6.0.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js"() {
58
+ "../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.22_tsx@4.21.0_typescript@6.0.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js"() {
59
59
  "use strict";
60
60
  getFilename = () => fileURLToPath(import.meta.url);
61
61
  __filename = /* @__PURE__ */ getFilename();
@@ -72,4 +72,4 @@ export {
72
72
  __filename,
73
73
  init_esm_shims
74
74
  };
75
- //# sourceMappingURL=chunk-DIRAZ3YX.js.map
75
+ //# sourceMappingURL=chunk-3VVCUQPB.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.15_tsx@4.21.0_typescript@6.0.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAF9B,IAIM,aAIO;AARb;AAAA;AAAA;AAIA,IAAM,cAAc,MAAM,cAAc,YAAY,GAAG;AAIhD,IAAM,aAA6B,4BAAY;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.22_tsx@4.21.0_typescript@6.0.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAF9B,IAIM,aAIO;AARb;AAAA;AAAA;AAIA,IAAM,cAAc,MAAM,cAAc,YAAY,GAAG;AAIhD,IAAM,aAA6B,4BAAY;AAAA;AAAA;","names":[]}