@vm0/cli 9.226.2 → 9.228.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/{agent-36KUIJCS.js → agent-AVRAE7H3.js} +4 -4
  2. package/{banking-S4AGLKIK.js → banking-VNDPFJ7G.js} +2 -2
  3. package/chat-QYR23VL5.js +251 -0
  4. package/chat-QYR23VL5.js.map +1 -0
  5. package/{chunk-7JYIXSUB.js → chunk-LZA5YDVV.js} +3 -3
  6. package/{chunk-CNVZC4Y4.js → chunk-LZL6Y6FZ.js} +13 -2
  7. package/chunk-LZL6Y6FZ.js.map +1 -0
  8. package/{chunk-ZKCEXAW3.js → chunk-N4DJI7YN.js} +2 -2
  9. package/{chunk-7CEXOKPL.js → chunk-R6O57E6O.js} +2 -2
  10. package/{chunk-VFM3WEQU.js → chunk-S7AF6RZT.js} +3 -3
  11. package/{chunk-PW7WFZ4T.js → chunk-TBPRMHWZ.js} +2 -2
  12. package/{chunk-EQ4GJMSF.js → chunk-VVEDO2AJ.js} +2 -2
  13. package/{chunk-HR4J3EDW.js → chunk-WHUOCWWJ.js} +202 -8
  14. package/chunk-WHUOCWWJ.js.map +1 -0
  15. package/{chunk-OSLFTEBH.js → chunk-Y53PSHSE.js} +400 -255
  16. package/chunk-Y53PSHSE.js.map +1 -0
  17. package/{computer-use-FY33UITI.js → computer-use-DZTEGWNI.js} +2 -2
  18. package/{connector-RE2QSFZO.js → connector-TNHNZV37.js} +2 -2
  19. package/{credit-6RTYNDHA.js → credit-2H2TE25G.js} +2 -2
  20. package/{developer-support-2O4DJ46M.js → developer-support-BIONYRPW.js} +2 -2
  21. package/{doctor-MNKUDIQ2.js → doctor-C24PE4CN.js} +44 -9
  22. package/doctor-C24PE4CN.js.map +1 -0
  23. package/{generate-7UQ3BMDO.js → generate-OIQ4ULPQ.js} +2 -2
  24. package/{github-VL2XRXXX.js → github-A5N72AOS.js} +2 -2
  25. package/{goal-M7U2XRBX.js → goal-EF3CEJ5W.js} +2 -2
  26. package/{host-Q6S5UZFP.js → host-3EFN2UW5.js} +2 -2
  27. package/index.js +13 -13
  28. package/{logs-HA4DC2VQ.js → logs-UO3Q4N52.js} +6 -6
  29. package/{maps-7WODQNR2.js → maps-36PXQ4UC.js} +2 -2
  30. package/{model-3HBNYDFX.js → model-2R73XQB3.js} +3 -3
  31. package/{model-provider-XGE72NUU.js → model-provider-6NY5M3SX.js} +3 -3
  32. package/{org-VNT2IFVT.js → org-OJUPCMZD.js} +2 -2
  33. package/package.json +1 -1
  34. package/{phone-LNQM75EU.js → phone-3RAJ7CI5.js} +2 -2
  35. package/playstation.generated-EO2KTNGH.js +56 -0
  36. package/playstation.generated-EO2KTNGH.js.map +1 -0
  37. package/playstation.generated-VUP5P7ES.js +111 -0
  38. package/playstation.generated-VUP5P7ES.js.map +1 -0
  39. package/{preference-H5QZXCOZ.js → preference-27LSVG3G.js} +2 -2
  40. package/{relationship-UWCN35XA.js → relationship-ZDXQRSMT.js} +2 -2
  41. package/{resource-JG3TLIBU.js → resource-S4S7WL4V.js} +2 -2
  42. package/{search-AECSZYRS.js → search-T2YSO5PV.js} +6 -6
  43. package/{secret-LHHFTS4C.js → secret-XGKRNEKZ.js} +3 -3
  44. package/{slack-G7M54QDB.js → slack-TL56Y7MM.js} +2 -2
  45. package/{telegram-RABHSIEN.js → telegram-I3FWSYPK.js} +2 -2
  46. package/{variable-REPSLXQI.js → variable-ZLXF6KGW.js} +2 -2
  47. package/{web-PZKV6H6Z.js → web-HMW5IP25.js} +2 -2
  48. package/{whoami-UO4XVGSP.js → whoami-MHYDLS5U.js} +4 -4
  49. package/{workflow-KK4X547Z.js → workflow-DPC6GNHX.js} +120 -4
  50. package/workflow-DPC6GNHX.js.map +1 -0
  51. package/zero.js +31 -31
  52. package/chat-GBNVHPMG.js +0 -123
  53. package/chat-GBNVHPMG.js.map +0 -1
  54. package/chunk-CNVZC4Y4.js.map +0 -1
  55. package/chunk-HR4J3EDW.js.map +0 -1
  56. package/chunk-OSLFTEBH.js.map +0 -1
  57. package/doctor-MNKUDIQ2.js.map +0 -1
  58. package/workflow-KK4X547Z.js.map +0 -1
  59. /package/{agent-36KUIJCS.js.map → agent-AVRAE7H3.js.map} +0 -0
  60. /package/{banking-S4AGLKIK.js.map → banking-VNDPFJ7G.js.map} +0 -0
  61. /package/{chunk-7JYIXSUB.js.map → chunk-LZA5YDVV.js.map} +0 -0
  62. /package/{chunk-ZKCEXAW3.js.map → chunk-N4DJI7YN.js.map} +0 -0
  63. /package/{chunk-7CEXOKPL.js.map → chunk-R6O57E6O.js.map} +0 -0
  64. /package/{chunk-VFM3WEQU.js.map → chunk-S7AF6RZT.js.map} +0 -0
  65. /package/{chunk-PW7WFZ4T.js.map → chunk-TBPRMHWZ.js.map} +0 -0
  66. /package/{chunk-EQ4GJMSF.js.map → chunk-VVEDO2AJ.js.map} +0 -0
  67. /package/{computer-use-FY33UITI.js.map → computer-use-DZTEGWNI.js.map} +0 -0
  68. /package/{connector-RE2QSFZO.js.map → connector-TNHNZV37.js.map} +0 -0
  69. /package/{credit-6RTYNDHA.js.map → credit-2H2TE25G.js.map} +0 -0
  70. /package/{developer-support-2O4DJ46M.js.map → developer-support-BIONYRPW.js.map} +0 -0
  71. /package/{generate-7UQ3BMDO.js.map → generate-OIQ4ULPQ.js.map} +0 -0
  72. /package/{github-VL2XRXXX.js.map → github-A5N72AOS.js.map} +0 -0
  73. /package/{goal-M7U2XRBX.js.map → goal-EF3CEJ5W.js.map} +0 -0
  74. /package/{host-Q6S5UZFP.js.map → host-3EFN2UW5.js.map} +0 -0
  75. /package/{logs-HA4DC2VQ.js.map → logs-UO3Q4N52.js.map} +0 -0
  76. /package/{maps-7WODQNR2.js.map → maps-36PXQ4UC.js.map} +0 -0
  77. /package/{model-3HBNYDFX.js.map → model-2R73XQB3.js.map} +0 -0
  78. /package/{model-provider-XGE72NUU.js.map → model-provider-6NY5M3SX.js.map} +0 -0
  79. /package/{org-VNT2IFVT.js.map → org-OJUPCMZD.js.map} +0 -0
  80. /package/{phone-LNQM75EU.js.map → phone-3RAJ7CI5.js.map} +0 -0
  81. /package/{preference-H5QZXCOZ.js.map → preference-27LSVG3G.js.map} +0 -0
  82. /package/{relationship-UWCN35XA.js.map → relationship-ZDXQRSMT.js.map} +0 -0
  83. /package/{resource-JG3TLIBU.js.map → resource-S4S7WL4V.js.map} +0 -0
  84. /package/{search-AECSZYRS.js.map → search-T2YSO5PV.js.map} +0 -0
  85. /package/{secret-LHHFTS4C.js.map → secret-XGKRNEKZ.js.map} +0 -0
  86. /package/{slack-G7M54QDB.js.map → slack-TL56Y7MM.js.map} +0 -0
  87. /package/{telegram-RABHSIEN.js.map → telegram-I3FWSYPK.js.map} +0 -0
  88. /package/{variable-REPSLXQI.js.map → variable-ZLXF6KGW.js.map} +0 -0
  89. /package/{web-PZKV6H6Z.js.map → web-HMW5IP25.js.map} +0 -0
  90. /package/{whoami-UO4XVGSP.js.map → whoami-MHYDLS5U.js.map} +0 -0
@@ -4,10 +4,10 @@ const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  loadConnectorPermissionInfos,
6
6
  policyIcon
7
- } from "./chunk-7CEXOKPL.js";
7
+ } from "./chunk-R6O57E6O.js";
8
8
  import {
9
9
  permissionGrantsToFirewallPolicies
10
- } from "./chunk-CNVZC4Y4.js";
10
+ } from "./chunk-LZL6Y6FZ.js";
11
11
  import {
12
12
  isInteractive,
13
13
  promptConfirm
@@ -23,7 +23,7 @@ import {
23
23
  listZeroUserPermissionGrants,
24
24
  updateZeroAgent,
25
25
  updateZeroAgentInstructions
26
- } from "./chunk-HR4J3EDW.js";
26
+ } from "./chunk-WHUOCWWJ.js";
27
27
  import "./chunk-LTDQISD7.js";
28
28
  import {
29
29
  withErrorHandler
@@ -595,4 +595,4 @@ Notes:
595
595
  export {
596
596
  zeroAgentCommand
597
597
  };
598
- //# sourceMappingURL=agent-36KUIJCS.js.map
598
+ //# sourceMappingURL=agent-AVRAE7H3.js.map
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  callZeroBanking
6
- } from "./chunk-HR4J3EDW.js";
6
+ } from "./chunk-WHUOCWWJ.js";
7
7
  import "./chunk-LTDQISD7.js";
8
8
  import {
9
9
  withErrorHandler
@@ -115,4 +115,4 @@ Notes:
115
115
  export {
116
116
  zeroBankingCommand
117
117
  };
118
- //# sourceMappingURL=banking-S4AGLKIK.js.map
118
+ //# sourceMappingURL=banking-VNDPFJ7G.js.map
@@ -0,0 +1,251 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "node:module";
3
+ const require = __createRequire(import.meta.url);
4
+ import {
5
+ formatModelProviderRoute
6
+ } from "./chunk-VVEDO2AJ.js";
7
+ import {
8
+ MODEL_FIRST_SELECTION_PROVIDER_ID,
9
+ getZeroChatThread,
10
+ listZeroModelPolicies,
11
+ renameZeroChatThread,
12
+ updateZeroChatThreadModelSelection
13
+ } from "./chunk-WHUOCWWJ.js";
14
+ import "./chunk-LTDQISD7.js";
15
+ import {
16
+ withErrorHandler
17
+ } from "./chunk-3F4RFLPX.js";
18
+ import {
19
+ source_default
20
+ } from "./chunk-JUTUEPIR.js";
21
+ import "./chunk-LRHXR7JT.js";
22
+ import {
23
+ Command
24
+ } from "./chunk-B3W2RUBP.js";
25
+ import {
26
+ init_esm_shims
27
+ } from "./chunk-DIRAZ3YX.js";
28
+
29
+ // src/commands/zero/chat/index.ts
30
+ init_esm_shims();
31
+
32
+ // src/commands/zero/chat/get.ts
33
+ init_esm_shims();
34
+ function getCurrentChatThreadId() {
35
+ return process.env.ZERO_CHAT_THREAD_ID?.trim() || void 0;
36
+ }
37
+ function printUsageError(message, hint) {
38
+ console.error(source_default.red(`\u2717 ${message}`));
39
+ console.error(source_default.dim(` ${hint}`));
40
+ process.exit(1);
41
+ }
42
+ var getCommand = new Command().name("get").description("Show the current web chat thread").option("--json", "Print machine-readable JSON").addHelpText(
43
+ "after",
44
+ `
45
+ Examples:
46
+ Show this chat: zero chat get
47
+ Print JSON: zero chat get --json
48
+
49
+ Notes:
50
+ - Uses ZERO_CHAT_THREAD_ID from the current web chat thread
51
+ - Authenticates via ZERO_TOKEN (requires chat-thread:read capability)`
52
+ ).action(
53
+ withErrorHandler(async (options) => {
54
+ const threadId = getCurrentChatThreadId();
55
+ if (!threadId) {
56
+ printUsageError(
57
+ "ZERO_CHAT_THREAD_ID is not set",
58
+ "Run this command from a Zero web chat thread."
59
+ );
60
+ }
61
+ const thread = await getZeroChatThread({ threadId });
62
+ if (options.json) {
63
+ console.log(JSON.stringify(thread));
64
+ return;
65
+ }
66
+ console.log(source_default.green("\u2713 Chat thread loaded"));
67
+ console.log(source_default.dim(` Thread: ${thread.id}`));
68
+ console.log(source_default.dim(` Title: ${thread.title ?? "(untitled)"}`));
69
+ console.log(
70
+ source_default.dim(` Model: ${thread.selectedModel ?? "(default)"}`)
71
+ );
72
+ })
73
+ );
74
+
75
+ // src/commands/zero/chat/model.ts
76
+ init_esm_shims();
77
+ function getCurrentChatThreadId2() {
78
+ return process.env.ZERO_CHAT_THREAD_ID?.trim() || void 0;
79
+ }
80
+ function printUsageError2(message, hint) {
81
+ console.error(source_default.red(`\u2717 ${message}`));
82
+ console.error(source_default.dim(` ${hint}`));
83
+ process.exit(1);
84
+ }
85
+ function switchablePolicies(policies) {
86
+ return policies.filter((policy) => {
87
+ return policy.routeStatus === "valid";
88
+ });
89
+ }
90
+ function formatModelName(policy) {
91
+ return `${policy.modelLabel} ${source_default.dim(`(${policy.model})`)}`;
92
+ }
93
+ function printSwitchableModels(policies) {
94
+ const switchable = switchablePolicies(policies);
95
+ if (switchable.length === 0) {
96
+ console.log(source_default.dim("No switchable models are available for this user"));
97
+ return;
98
+ }
99
+ for (const policy of switchable) {
100
+ const defaultMarker = policy.isDefault ? source_default.dim(" (default)") : "";
101
+ console.log(` - ${formatModelName(policy)}${defaultMarker}`);
102
+ console.log(` provider: ${formatModelProviderRoute(policy)}`);
103
+ }
104
+ }
105
+ function printCurrentModel(thread) {
106
+ console.log(source_default.green("\u2713 Chat thread loaded"));
107
+ console.log(source_default.dim(` Thread: ${thread.id}`));
108
+ console.log(source_default.dim(` Title: ${thread.title ?? "(untitled)"}`));
109
+ console.log(source_default.dim(` Model: ${thread.selectedModel ?? "(default)"}`));
110
+ }
111
+ async function printModelHelp(command) {
112
+ const result = await listZeroModelPolicies();
113
+ console.log(command.helpInformation().trimEnd());
114
+ console.log();
115
+ console.log(source_default.bold("Switchable models:"));
116
+ printSwitchableModels(result.policies);
117
+ console.log();
118
+ console.log("Use the model id in parentheses:");
119
+ console.log(source_default.cyan(" zero chat model <model>"));
120
+ }
121
+ async function printCurrentModelAndChoices(threadId) {
122
+ const [thread, result] = await Promise.all([
123
+ getZeroChatThread({ threadId }),
124
+ listZeroModelPolicies()
125
+ ]);
126
+ printCurrentModel(thread);
127
+ console.log();
128
+ console.log(source_default.bold("Switchable models:"));
129
+ printSwitchableModels(result.policies);
130
+ console.log();
131
+ console.log("Switch models:");
132
+ console.log(source_default.cyan(" zero chat model <model>"));
133
+ }
134
+ async function switchModel(threadId, model) {
135
+ const result = await listZeroModelPolicies();
136
+ const policy = result.policies.find((candidate) => {
137
+ return candidate.model === model;
138
+ });
139
+ if (!policy) {
140
+ printUsageError2(`Unknown model: ${model}`, "Run: zero chat model --help");
141
+ }
142
+ if (policy.routeStatus !== "valid") {
143
+ const reason = policy.routeStatusReason ? ` (${policy.routeStatusReason})` : "";
144
+ printUsageError2(
145
+ `Model is not switchable: ${model}${reason}`,
146
+ "Run: zero chat model --help"
147
+ );
148
+ }
149
+ const updated = await updateZeroChatThreadModelSelection({
150
+ threadId,
151
+ modelSelection: {
152
+ modelProviderId: MODEL_FIRST_SELECTION_PROVIDER_ID,
153
+ selectedModel: model
154
+ }
155
+ });
156
+ console.log(source_default.green("\u2713 Chat model updated"));
157
+ console.log(source_default.dim(` Thread: ${updated.threadId}`));
158
+ console.log(source_default.dim(` Model: ${policy.modelLabel} (${model})`));
159
+ }
160
+ var modelCommand = new Command().name("model").description("Show or switch the current web chat thread model").argument("[model]", "Model id to use for this chat thread").helpOption(false).option("-h, --help", "Show help with switchable models").addHelpText(
161
+ "after",
162
+ `
163
+ Examples:
164
+ Show this chat model: zero chat model
165
+ Switch this model: zero chat model claude-sonnet-5
166
+
167
+ Notes:
168
+ - Uses ZERO_CHAT_THREAD_ID from the current web chat thread
169
+ - Authenticates via ZERO_TOKEN (requires chat-thread:write capability to switch)`
170
+ ).action(
171
+ withErrorHandler(
172
+ async (model, options) => {
173
+ if (options.help) {
174
+ await printModelHelp(modelCommand);
175
+ return;
176
+ }
177
+ const threadId = getCurrentChatThreadId2();
178
+ if (!threadId) {
179
+ printUsageError2(
180
+ "ZERO_CHAT_THREAD_ID is not set",
181
+ "Run this command from a Zero web chat thread."
182
+ );
183
+ }
184
+ if (!model) {
185
+ await printCurrentModelAndChoices(threadId);
186
+ return;
187
+ }
188
+ await switchModel(threadId, model);
189
+ }
190
+ )
191
+ );
192
+
193
+ // src/commands/zero/chat/rename.ts
194
+ init_esm_shims();
195
+ function getCurrentChatThreadId3() {
196
+ return process.env.ZERO_CHAT_THREAD_ID?.trim() || void 0;
197
+ }
198
+ function printUsageError3(message, hint) {
199
+ console.error(source_default.red(`\u2717 ${message}`));
200
+ console.error(source_default.dim(` ${hint}`));
201
+ process.exit(1);
202
+ }
203
+ var renameCommand = new Command().name("rename").description("Rename the current web chat thread").argument("<title...>", "New chat title").option("--json", "Print machine-readable JSON").addHelpText(
204
+ "after",
205
+ `
206
+ Examples:
207
+ Rename this chat: zero chat rename "Launch plan"
208
+
209
+ Notes:
210
+ - Uses ZERO_CHAT_THREAD_ID from the current web chat thread
211
+ - Authenticates via ZERO_TOKEN (requires chat-thread:write capability)`
212
+ ).action(
213
+ withErrorHandler(async (titleParts, options) => {
214
+ const title = titleParts.join(" ").trim();
215
+ if (!title) {
216
+ printUsageError3(
217
+ "Title is required",
218
+ 'Run: zero chat rename "New title"'
219
+ );
220
+ }
221
+ const threadId = getCurrentChatThreadId3();
222
+ if (!threadId) {
223
+ printUsageError3(
224
+ "ZERO_CHAT_THREAD_ID is not set",
225
+ "Run this command from a Zero web chat thread."
226
+ );
227
+ }
228
+ const result = await renameZeroChatThread({ threadId, title });
229
+ if (options.json) {
230
+ console.log(JSON.stringify(result));
231
+ return;
232
+ }
233
+ console.log(source_default.green("\u2713 Chat title updated"));
234
+ console.log(source_default.dim(` Thread: ${result.threadId}`));
235
+ console.log(source_default.dim(` Title: ${result.title}`));
236
+ })
237
+ );
238
+
239
+ // src/commands/zero/chat/index.ts
240
+ var zeroChatCommand = new Command().name("chat").description("Manage the current web chat thread").addCommand(getCommand).addCommand(modelCommand).addCommand(renameCommand).addHelpText(
241
+ "after",
242
+ `
243
+ Examples:
244
+ Show this chat: zero chat get
245
+ Switch model: zero chat model claude-sonnet-5
246
+ Rename this chat: zero chat rename "Launch plan"`
247
+ );
248
+ export {
249
+ zeroChatCommand
250
+ };
251
+ //# sourceMappingURL=chat-QYR23VL5.js.map
@@ -0,0 +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 {\n MODEL_FIRST_SELECTION_PROVIDER_ID,\n type ChatThreadMetadata,\n} 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 modelSelection: {\n modelProviderId: MODEL_FIRST_SELECTION_PROVIDER_ID,\n selectedModel: model,\n },\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"]}
@@ -10,10 +10,10 @@ import {
10
10
  parseBoundedLogCount,
11
11
  parseSearchQuery,
12
12
  parseTime
13
- } from "./chunk-OSLFTEBH.js";
13
+ } from "./chunk-Y53PSHSE.js";
14
14
  import {
15
15
  searchZeroLogs
16
- } from "./chunk-HR4J3EDW.js";
16
+ } from "./chunk-WHUOCWWJ.js";
17
17
  import {
18
18
  withErrorHandler
19
19
  } from "./chunk-3F4RFLPX.js";
@@ -176,4 +176,4 @@ export {
176
176
  runLogsSearch,
177
177
  searchCommand
178
178
  };
179
- //# sourceMappingURL=chunk-7JYIXSUB.js.map
179
+ //# sourceMappingURL=chunk-LZA5YDVV.js.map
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
4
  import {
5
5
  UNKNOWN_PERMISSION_GRANT
6
- } from "./chunk-HR4J3EDW.js";
6
+ } from "./chunk-WHUOCWWJ.js";
7
7
  import {
8
8
  init_esm_shims
9
9
  } from "./chunk-DIRAZ3YX.js";
@@ -683,6 +683,9 @@ var FIREWALL_PERMISSION_METADATA_LOADERS = Object.assign(/* @__PURE__ */ Object.
683
683
  ["plausible"]: async () => {
684
684
  return (await import("./plausible.generated-TQ5SDBMJ.js"))["firewallPermissionMetadata"];
685
685
  },
686
+ ["playstation"]: async () => {
687
+ return (await import("./playstation.generated-EO2KTNGH.js"))["firewallPermissionMetadata"];
688
+ },
686
689
  ["podchaser"]: async () => {
687
690
  return (await import("./podchaser.generated-NESGJBNX.js"))["firewallPermissionMetadata"];
688
691
  },
@@ -2416,6 +2419,14 @@ var FIREWALL_PERMISSION_METADATA_SUMMARIES = {
2416
2419
  "hasCategories": false,
2417
2420
  "hasDefaultPolicyOverrides": false
2418
2421
  },
2422
+ "playstation": {
2423
+ "type": "playstation",
2424
+ "label": "PlayStation",
2425
+ "hasPermissions": true,
2426
+ "permissionCount": 8,
2427
+ "hasCategories": false,
2428
+ "hasDefaultPolicyOverrides": true
2429
+ },
2419
2430
  "podchaser": {
2420
2431
  "type": "podchaser",
2421
2432
  "label": "Podchaser",
@@ -3109,4 +3120,4 @@ export {
3109
3120
  getFirewallPermissionSummary,
3110
3121
  loadFirewallPermissionMetadata
3111
3122
  };
3112
- //# sourceMappingURL=chunk-CNVZC4Y4.js.map
3123
+ //# sourceMappingURL=chunk-LZL6Y6FZ.js.map