@intutic/cli 0.1.1 → 0.2.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 (162) hide show
  1. package/dist/cli.js +309 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/benchmark.d.ts +31 -0
  4. package/dist/commands/benchmark.d.ts.map +1 -0
  5. package/dist/commands/benchmark.js +211 -0
  6. package/dist/commands/benchmark.js.map +1 -0
  7. package/dist/commands/connect.d.ts +8 -6
  8. package/dist/commands/connect.d.ts.map +1 -1
  9. package/dist/commands/connect.js +322 -82
  10. package/dist/commands/connect.js.map +1 -1
  11. package/dist/commands/enterprise-install.d.ts +36 -0
  12. package/dist/commands/enterprise-install.d.ts.map +1 -0
  13. package/dist/commands/enterprise-install.js +289 -0
  14. package/dist/commands/enterprise-install.js.map +1 -0
  15. package/dist/commands/eval.d.ts +13 -0
  16. package/dist/commands/eval.d.ts.map +1 -0
  17. package/dist/commands/eval.js +67 -0
  18. package/dist/commands/eval.js.map +1 -0
  19. package/dist/commands/exec.d.ts +34 -0
  20. package/dist/commands/exec.d.ts.map +1 -0
  21. package/dist/commands/exec.js +114 -0
  22. package/dist/commands/exec.js.map +1 -0
  23. package/dist/commands/exec.test.d.ts +2 -0
  24. package/dist/commands/exec.test.d.ts.map +1 -0
  25. package/dist/commands/exec.test.js +29 -0
  26. package/dist/commands/exec.test.js.map +1 -0
  27. package/dist/commands/export.d.ts +21 -0
  28. package/dist/commands/export.d.ts.map +1 -0
  29. package/dist/commands/export.js +116 -0
  30. package/dist/commands/export.js.map +1 -0
  31. package/dist/commands/init.d.ts.map +1 -1
  32. package/dist/commands/init.js +28 -2
  33. package/dist/commands/init.js.map +1 -1
  34. package/dist/commands/install-daemon.d.ts +61 -0
  35. package/dist/commands/install-daemon.d.ts.map +1 -0
  36. package/dist/commands/install-daemon.js +691 -0
  37. package/dist/commands/install-daemon.js.map +1 -0
  38. package/dist/commands/install-daemon.test.d.ts +2 -0
  39. package/dist/commands/install-daemon.test.d.ts.map +1 -0
  40. package/dist/commands/install-daemon.test.js +93 -0
  41. package/dist/commands/install-daemon.test.js.map +1 -0
  42. package/dist/commands/login.js +2 -2
  43. package/dist/commands/login.js.map +1 -1
  44. package/dist/commands/logout.js +1 -1
  45. package/dist/commands/logout.js.map +1 -1
  46. package/dist/commands/mdm.d.ts +23 -0
  47. package/dist/commands/mdm.d.ts.map +1 -0
  48. package/dist/commands/mdm.js +134 -0
  49. package/dist/commands/mdm.js.map +1 -0
  50. package/dist/commands/sop-audit.d.ts +17 -0
  51. package/dist/commands/sop-audit.d.ts.map +1 -0
  52. package/dist/commands/sop-audit.js +136 -0
  53. package/dist/commands/sop-audit.js.map +1 -0
  54. package/dist/commands/status.d.ts.map +1 -1
  55. package/dist/commands/status.js +53 -1
  56. package/dist/commands/status.js.map +1 -1
  57. package/dist/commands/syncContext.d.ts +18 -0
  58. package/dist/commands/syncContext.d.ts.map +1 -0
  59. package/dist/commands/syncContext.js +37 -0
  60. package/dist/commands/syncContext.js.map +1 -0
  61. package/dist/commands/traces.d.ts +13 -0
  62. package/dist/commands/traces.d.ts.map +1 -1
  63. package/dist/commands/traces.js +96 -2
  64. package/dist/commands/traces.js.map +1 -1
  65. package/dist/commands/whoami.js +1 -1
  66. package/dist/commands/whoami.js.map +1 -1
  67. package/dist/config/keychain.d.ts +28 -0
  68. package/dist/config/keychain.d.ts.map +1 -0
  69. package/dist/config/keychain.js +99 -0
  70. package/dist/config/keychain.js.map +1 -0
  71. package/dist/config/store.d.ts +3 -3
  72. package/dist/config/store.d.ts.map +1 -1
  73. package/dist/config/store.js +30 -6
  74. package/dist/config/store.js.map +1 -1
  75. package/dist/harness/aider.d.ts +4 -3
  76. package/dist/harness/aider.d.ts.map +1 -1
  77. package/dist/harness/aider.js +13 -27
  78. package/dist/harness/aider.js.map +1 -1
  79. package/dist/harness/claudeDesktop.d.ts +18 -0
  80. package/dist/harness/claudeDesktop.d.ts.map +1 -0
  81. package/dist/harness/claudeDesktop.js +69 -0
  82. package/dist/harness/claudeDesktop.js.map +1 -0
  83. package/dist/harness/cline.d.ts +13 -0
  84. package/dist/harness/cline.d.ts.map +1 -0
  85. package/dist/harness/cline.js +75 -0
  86. package/dist/harness/cline.js.map +1 -0
  87. package/dist/harness/codex.d.ts +4 -4
  88. package/dist/harness/codex.d.ts.map +1 -1
  89. package/dist/harness/codex.js +33 -21
  90. package/dist/harness/codex.js.map +1 -1
  91. package/dist/harness/continue.d.ts +14 -0
  92. package/dist/harness/continue.d.ts.map +1 -0
  93. package/dist/harness/continue.js +97 -0
  94. package/dist/harness/continue.js.map +1 -0
  95. package/dist/harness/cursor.d.ts +13 -1
  96. package/dist/harness/cursor.d.ts.map +1 -1
  97. package/dist/harness/cursor.js +59 -3
  98. package/dist/harness/cursor.js.map +1 -1
  99. package/dist/harness/detector.d.ts +1 -1
  100. package/dist/harness/detector.d.ts.map +1 -1
  101. package/dist/harness/detector.js +13 -1
  102. package/dist/harness/detector.js.map +1 -1
  103. package/dist/harness/goose.d.ts +13 -0
  104. package/dist/harness/goose.d.ts.map +1 -0
  105. package/dist/harness/goose.js +45 -0
  106. package/dist/harness/goose.js.map +1 -0
  107. package/dist/harness/n8n.d.ts +8 -4
  108. package/dist/harness/n8n.d.ts.map +1 -1
  109. package/dist/harness/n8n.js +108 -13
  110. package/dist/harness/n8n.js.map +1 -1
  111. package/dist/harness/openWebUI.d.ts +13 -0
  112. package/dist/harness/openWebUI.d.ts.map +1 -0
  113. package/dist/harness/openWebUI.js +25 -0
  114. package/dist/harness/openWebUI.js.map +1 -0
  115. package/dist/harness/openhands.d.ts +3 -3
  116. package/dist/harness/openhands.d.ts.map +1 -1
  117. package/dist/harness/openhands.js +13 -9
  118. package/dist/harness/openhands.js.map +1 -1
  119. package/dist/harness/rooCode.d.ts +14 -0
  120. package/dist/harness/rooCode.d.ts.map +1 -0
  121. package/dist/harness/rooCode.js +77 -0
  122. package/dist/harness/rooCode.js.map +1 -0
  123. package/dist/harness/types.d.ts.map +1 -1
  124. package/dist/harness/types.js +6 -0
  125. package/dist/harness/types.js.map +1 -1
  126. package/dist/harness/vscodeSettingsWriter.d.ts +40 -0
  127. package/dist/harness/vscodeSettingsWriter.d.ts.map +1 -0
  128. package/dist/harness/vscodeSettingsWriter.js +116 -0
  129. package/dist/harness/vscodeSettingsWriter.js.map +1 -0
  130. package/dist/harness/windsurf.d.ts +13 -1
  131. package/dist/harness/windsurf.d.ts.map +1 -1
  132. package/dist/harness/windsurf.js +58 -3
  133. package/dist/harness/windsurf.js.map +1 -1
  134. package/dist/lib/api.d.ts +2 -0
  135. package/dist/lib/api.d.ts.map +1 -1
  136. package/dist/lib/api.js +3 -0
  137. package/dist/lib/api.js.map +1 -1
  138. package/dist/lib/envInjector.d.ts +24 -0
  139. package/dist/lib/envInjector.d.ts.map +1 -0
  140. package/dist/lib/envInjector.js +146 -0
  141. package/dist/lib/envInjector.js.map +1 -0
  142. package/dist/lib/envInjector.test.d.ts +2 -0
  143. package/dist/lib/envInjector.test.d.ts.map +1 -0
  144. package/dist/lib/envInjector.test.js +32 -0
  145. package/dist/lib/envInjector.test.js.map +1 -0
  146. package/dist/lib/gitHooks.d.ts +19 -0
  147. package/dist/lib/gitHooks.d.ts.map +1 -0
  148. package/dist/lib/gitHooks.js +58 -0
  149. package/dist/lib/gitHooks.js.map +1 -0
  150. package/dist/lib/onboarding.d.ts +17 -0
  151. package/dist/lib/onboarding.d.ts.map +1 -0
  152. package/dist/lib/onboarding.js +164 -0
  153. package/dist/lib/onboarding.js.map +1 -0
  154. package/dist/lib/process.d.ts +53 -0
  155. package/dist/lib/process.d.ts.map +1 -0
  156. package/dist/lib/process.js +181 -0
  157. package/dist/lib/process.js.map +1 -0
  158. package/dist/lib/process.test.d.ts +2 -0
  159. package/dist/lib/process.test.d.ts.map +1 -0
  160. package/dist/lib/process.test.js +44 -0
  161. package/dist/lib/process.test.js.map +1 -0
  162. package/package.json +10 -5
package/dist/cli.js CHANGED
@@ -60,12 +60,56 @@ program
60
60
  .description('Start sync daemon — bidirectional config sync with control plane')
61
61
  .option('--dev', 'Use local control plane (http://localhost:3001)')
62
62
  .option('--interval <ms>', 'Poll interval in milliseconds', '30000')
63
+ .option('--workspace-id <id>', 'Workspace ID override')
64
+ .option('--api-key <key>', 'Workspace API key override')
65
+ .option('--control-plane-url <url>', 'Control plane URL override')
63
66
  .action(async (opts) => {
64
67
  const { runConnect } = await import('./commands/connect.js');
65
68
  await runConnect(opts);
66
69
  });
70
+ program
71
+ .command('sync-context')
72
+ .description('Sync Git context metadata to the local daemon')
73
+ .option('--git', 'Sync Git branch and commit information')
74
+ .option('--branch <name>', 'Current Git branch name')
75
+ .option('--commit <hash>', 'Current Git commit SHA')
76
+ .action(async (opts) => {
77
+ const { runSyncContext } = await import('./commands/syncContext.js');
78
+ await runSyncContext(opts);
79
+ });
80
+ program
81
+ .command('exec')
82
+ .description('Execute a command wrapped with Intutic proxy environment variables')
83
+ .argument('[command...]', 'Command and arguments to execute (e.g. -- claude)')
84
+ .action(async (commandAndArgs) => {
85
+ const { runExec } = await import('./commands/exec.js');
86
+ await runExec(commandAndArgs);
87
+ });
88
+ program
89
+ .command('enterprise-install')
90
+ .description('Install system-level hooks and inject CA certificate (requires root)')
91
+ .option('--proxy-url <url>', 'Proxy URL override', 'https://proxy.intutic.ai/v1')
92
+ .option('--generate-mdm-only', 'Generate MDM manifests only (no privilege required)')
93
+ .action(async (opts) => {
94
+ const { enterpriseInstall } = await import('./commands/enterprise-install.js');
95
+ await enterpriseInstall({
96
+ proxyUrl: opts.proxyUrl,
97
+ generateMdmOnly: opts.generateMdmOnly
98
+ });
99
+ });
100
+ const sop = program
101
+ .command('sop')
102
+ .description('SOP management and audit commands');
103
+ sop
104
+ .command('audit')
105
+ .description('Audit SOP health — dependency graph, status, and drift report')
106
+ .action(async () => {
107
+ const { runSopAudit } = await import('./commands/sop-audit.js');
108
+ await runSopAudit();
109
+ });
67
110
  const traces = program
68
111
  .command('traces')
112
+ .alias('trace')
69
113
  .description('Query execution traces — list, filter, and inspect');
70
114
  traces
71
115
  .command('list')
@@ -88,5 +132,270 @@ traces
88
132
  const { runTracesInspect } = await import('./commands/traces.js');
89
133
  await runTracesInspect(traceId, opts);
90
134
  });
135
+ traces
136
+ .command('fork <trace_id>')
137
+ .description('Fork a completed trace with a mutation')
138
+ .requiredOption('--from-step <id>', 'Step ID to fork from')
139
+ .requiredOption('--type <type>', 'Fork mutation type (tool_arg_mutation | sop_config_mutation | model_swap)')
140
+ .option('--args <json>', 'JSON string of tool arg overrides')
141
+ .option('--sop-threshold <val>', 'Override SOP threshold (float)')
142
+ .option('--model <name>', 'Model name for model swap')
143
+ .option('--label <text>', 'Label for this fork')
144
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
145
+ .action(async (traceId, opts) => {
146
+ const { runTracesFork } = await import('./commands/traces.js');
147
+ await runTracesFork(traceId, opts);
148
+ });
149
+ // ── Daemon persistence (WS-5 — Q3 Layer 4) ─────────────────────────────────
150
+ const daemon = program
151
+ .command('daemon')
152
+ .description('Manage the Intutic sync-daemon system service (LaunchAgent / systemd)');
153
+ daemon
154
+ .command('install')
155
+ .alias('install-daemon') // top-level alias for discoverability
156
+ .description('Install sync-daemon as a system service (auto-starts on login, restarts on any exit).\n' +
157
+ ' macOS: ~/Library/LaunchAgents/ai.intutic.sync-daemon.plist (KeepAlive: true)\n' +
158
+ ' Linux: ~/.config/systemd/user/intutic-sync-daemon.service (Restart=always)\n' +
159
+ '\n' +
160
+ ' NOTE: To stop the daemon you MUST use \'intutic daemon uninstall\' or \'launchctl unload\'.\n' +
161
+ ' \'intutic disconnect\' alone will NOT stop a daemon-installed service. (TD-154)')
162
+ .requiredOption('--workspace-id <id>', 'Workspace ID (e.g. ws_xxxx)')
163
+ .requiredOption('--api-key <key>', 'Workspace API key (e.g. vk_xxxx)')
164
+ .option('--control-plane-url <url>', 'Control plane URL', 'https://api.intutic.ai')
165
+ .option('--binary-path <path>', 'Path to intutic CLI binary (defaults to current process)')
166
+ .option('--dry-run', 'Print what would be done without writing files')
167
+ .option('--system', 'Install as a system-level service (LaunchDaemon on macOS, systemd system unit on Linux)')
168
+ .action(async (opts) => {
169
+ const { installDaemon } = await import('./commands/install-daemon.js');
170
+ await installDaemon({
171
+ workspaceId: opts.workspaceId,
172
+ apiKey: opts.apiKey,
173
+ controlPlaneUrl: opts.controlPlaneUrl,
174
+ binaryPath: opts.binaryPath,
175
+ dryRun: opts.dryRun,
176
+ system: opts.system,
177
+ });
178
+ });
179
+ daemon
180
+ .command('uninstall')
181
+ .alias('uninstall-daemon')
182
+ .description('Remove the sync-daemon system service and stop it permanently.')
183
+ .option('--dry-run', 'Print what would be done without writing files')
184
+ .option('--system', 'Uninstall the system-level service')
185
+ .action(async (opts) => {
186
+ const { uninstallDaemon } = await import('./commands/install-daemon.js');
187
+ await uninstallDaemon({ dryRun: opts.dryRun, system: opts.system });
188
+ });
189
+ daemon
190
+ .command('status')
191
+ .description('Show sync-daemon system service status.')
192
+ .action(async () => {
193
+ const { daemonStatus } = await import('./commands/install-daemon.js');
194
+ await daemonStatus();
195
+ });
196
+ daemon
197
+ .command('stop')
198
+ .description('Stop and unload the sync-daemon system service.')
199
+ .action(async () => {
200
+ const { daemonStop } = await import('./commands/install-daemon.js');
201
+ await daemonStop();
202
+ });
203
+ daemon
204
+ .command('start')
205
+ .description('Start and load the sync-daemon system service.')
206
+ .action(async () => {
207
+ const { daemonStart } = await import('./commands/install-daemon.js');
208
+ await daemonStart();
209
+ });
210
+ const mcpDaemon = daemon
211
+ .command('mcp')
212
+ .description('Manage the Intutic mcp-daemon system service');
213
+ mcpDaemon
214
+ .command('install')
215
+ .description('Install mcp-daemon as a system service')
216
+ .requiredOption('--workspace-id <id>', 'Workspace ID')
217
+ .requiredOption('--api-key <key>', 'Workspace API key')
218
+ .option('--control-plane-url <url>', 'Control plane URL', 'https://api.intutic.ai')
219
+ .option('--dry-run', 'Print what would be done without writing files')
220
+ .option('--system', 'Install as a system-level service (LaunchDaemon on macOS, systemd system unit on Linux)')
221
+ .action(async (opts) => {
222
+ const { installMcpDaemon } = await import('./commands/install-daemon.js');
223
+ await installMcpDaemon({
224
+ workspaceId: opts.workspaceId,
225
+ apiKey: opts.apiKey,
226
+ controlPlaneUrl: opts.controlPlaneUrl,
227
+ dryRun: opts.dryRun,
228
+ system: opts.system,
229
+ });
230
+ });
231
+ mcpDaemon
232
+ .command('uninstall')
233
+ .description('Remove the mcp-daemon system service')
234
+ .option('--dry-run', 'Print what would be done without writing files')
235
+ .option('--system', 'Uninstall the system-level service')
236
+ .action(async (opts) => {
237
+ const { uninstallMcpDaemon } = await import('./commands/install-daemon.js');
238
+ await uninstallMcpDaemon({ dryRun: opts.dryRun, system: opts.system });
239
+ });
240
+ mcpDaemon
241
+ .command('status')
242
+ .description('Show mcp-daemon status')
243
+ .action(async () => {
244
+ const { mcpDaemonStatus } = await import('./commands/install-daemon.js');
245
+ await mcpDaemonStatus();
246
+ });
247
+ mcpDaemon
248
+ .command('start')
249
+ .description('Start the mcp-daemon service')
250
+ .action(async () => {
251
+ const { mcpDaemonStart } = await import('./commands/install-daemon.js');
252
+ await mcpDaemonStart();
253
+ });
254
+ mcpDaemon
255
+ .command('stop')
256
+ .description('Stop the mcp-daemon service')
257
+ .action(async () => {
258
+ const { mcpDaemonStop } = await import('./commands/install-daemon.js');
259
+ await mcpDaemonStop();
260
+ });
261
+ // Top-level shortcuts (for discoverability)
262
+ program
263
+ .command('install-daemon', { hidden: false })
264
+ .description('Shortcut for \'intutic daemon install\' — install sync-daemon as system service')
265
+ .requiredOption('--workspace-id <id>', 'Workspace ID')
266
+ .requiredOption('--api-key <key>', 'Workspace API key')
267
+ .option('--control-plane-url <url>', 'Control plane URL', 'https://api.intutic.ai')
268
+ .option('--binary-path <path>', 'Path to intutic CLI binary')
269
+ .option('--dry-run', 'Print what would be done without writing files')
270
+ .option('--system', 'Install as a system-level service')
271
+ .action(async (opts) => {
272
+ const { installDaemon } = await import('./commands/install-daemon.js');
273
+ await installDaemon({
274
+ workspaceId: opts.workspaceId,
275
+ apiKey: opts.apiKey,
276
+ controlPlaneUrl: opts.controlPlaneUrl,
277
+ binaryPath: opts.binaryPath,
278
+ dryRun: opts.dryRun,
279
+ system: opts.system,
280
+ });
281
+ });
282
+ program
283
+ .command('uninstall-daemon', { hidden: false })
284
+ .description('Shortcut for \'intutic daemon uninstall\'')
285
+ .option('--dry-run', 'Print what would be done without writing files')
286
+ .option('--system', 'Uninstall the system-level service')
287
+ .action(async (opts) => {
288
+ const { uninstallDaemon } = await import('./commands/install-daemon.js');
289
+ await uninstallDaemon({ dryRun: opts.dryRun, system: opts.system });
290
+ });
291
+ // ─── PromptGrade Benchmarks subcommands ─────────────────────────────────────
292
+ const benchmark = program
293
+ .command('benchmark')
294
+ .description('PromptGrade™ benchmark and evaluation commands');
295
+ benchmark
296
+ .command('run')
297
+ .description('Run a benchmark suite against current workspace policies')
298
+ .requiredOption('--suite <id>', 'Benchmark suite ID to run')
299
+ .option('--harness <type>', 'Specific harness to evaluate (e.g. cursor, openhands)')
300
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
301
+ .action(async (opts) => {
302
+ const { runBenchmark } = await import('./commands/benchmark.js');
303
+ await runBenchmark(opts);
304
+ });
305
+ benchmark
306
+ .command('compare <runIdA> <runIdB>')
307
+ .description('Compare two benchmark runs side-by-side')
308
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
309
+ .action(async (runIdA, runIdB, opts) => {
310
+ const { compareBenchmarks } = await import('./commands/benchmark.js');
311
+ await compareBenchmarks(runIdA, runIdB, opts);
312
+ });
313
+ benchmark
314
+ .command('suites')
315
+ .description('List available benchmark suites')
316
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
317
+ .action(async (opts) => {
318
+ const { listSuites } = await import('./commands/benchmark.js');
319
+ await listSuites(opts);
320
+ });
321
+ benchmark
322
+ .command('export <runId>')
323
+ .description('Export benchmark results')
324
+ .option('--format <format>', 'Export format (csv|json)', 'csv')
325
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
326
+ .action(async (runId, opts) => {
327
+ const { exportBenchmark } = await import('./commands/benchmark.js');
328
+ await exportBenchmark(runId, opts);
329
+ });
330
+ const evalCmd = program
331
+ .command('eval')
332
+ .description('Evaluator Sandbox commands');
333
+ evalCmd
334
+ .command('run')
335
+ .description('Trigger a sandboxed evaluation run against a golden dataset')
336
+ .requiredOption('--dataset <id>', 'Dataset ID to evaluate')
337
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
338
+ .action(async (opts) => {
339
+ const { runEval } = await import('./commands/eval.js');
340
+ await runEval(opts);
341
+ });
342
+ const exportCmd = program
343
+ .command('export')
344
+ .description('Data warehouse export commands');
345
+ exportCmd
346
+ .command('config')
347
+ .description('List configured export targets, or add a new target bucket')
348
+ .option('--provider <gcs|s3>', 'Storage provider (gcs or s3)')
349
+ .option('--bucket <name>', 'Bucket name')
350
+ .option('--prefix <prefix>', 'Path prefix', 'intutic/exports/')
351
+ .option('--credentials <creds>', 'Plain credentials (GCS JSON or "key:secret" for S3)')
352
+ .option('--region <region>', 'S3 Region (if using AWS S3)')
353
+ .option('--format <csv|parquet|ndjson>', 'Default format')
354
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
355
+ .action(async (opts) => {
356
+ const { runExportConfig } = await import('./commands/export.js');
357
+ await runExportConfig(opts);
358
+ });
359
+ exportCmd
360
+ .command('status')
361
+ .description('List export jobs, or trigger a manual export job')
362
+ .option('--trigger <targetId>', 'Trigger a manual export job for targetId')
363
+ .option('--format <csv|parquet|ndjson>', 'Export format')
364
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
365
+ .action(async (opts) => {
366
+ const { runExportStatus } = await import('./commands/export.js');
367
+ await runExportStatus({
368
+ triggerTarget: opts.trigger,
369
+ format: opts.format,
370
+ dev: opts.dev,
371
+ });
372
+ });
373
+ // ── MDM device enrollment (Remediation Task 5) ─────────────────────────────
374
+ const mdm = program
375
+ .command('mdm')
376
+ .description('MDM device enrollment and network security commands');
377
+ mdm
378
+ .command('enroll')
379
+ .description('Enroll this local device into MDM security constraints')
380
+ .option('--proxy-version <version>', 'Proxy version to enroll', '1.0.0')
381
+ .option('--ca-installed', 'Force mark CA certificate as installed')
382
+ .option('--no-ca-installed', 'Force mark CA certificate as not installed')
383
+ .option('--dns-configured', 'Force mark DNS configuration as active')
384
+ .option('--no-dns-configured', 'Force mark DNS configuration as inactive')
385
+ .option('--firewall-configured', 'Force mark firewall rules as active')
386
+ .option('--no-firewall-configured', 'Force mark firewall rules as inactive')
387
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
388
+ .action(async (opts) => {
389
+ const { runMdmEnroll } = await import('./commands/mdm.js');
390
+ await runMdmEnroll(opts);
391
+ });
392
+ mdm
393
+ .command('status')
394
+ .description('Show local MDM device enrollment and configuration status')
395
+ .option('--dev', 'Use local control plane (http://localhost:3001)')
396
+ .action(async (opts) => {
397
+ const { runMdmStatus } = await import('./commands/mdm.js');
398
+ await runMdmStatus(opts);
399
+ });
91
400
  program.parse();
92
401
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * `intutic benchmark` — Run, compare, and manage PromptGrade™ benchmarks.
3
+ *
4
+ * Subcommands:
5
+ * - `intutic benchmark run --suite <id> [--harness <type>] [--dev]`
6
+ * - `intutic benchmark compare <runIdA> <runIdB> [--dev]`
7
+ * - `intutic benchmark suites [--dev]`
8
+ * - `intutic benchmark export <runId> [--format csv|json] [--dev]`
9
+ *
10
+ * WS-4E Advanced
11
+ */
12
+ interface BenchmarkRunCliOpts {
13
+ suite: string;
14
+ harness?: string;
15
+ dev?: boolean;
16
+ }
17
+ interface BenchmarkSuitesCliOpts {
18
+ dev?: boolean;
19
+ }
20
+ interface BenchmarkExportCliOpts {
21
+ format?: 'csv' | 'json';
22
+ dev?: boolean;
23
+ }
24
+ export declare function runBenchmark(opts: BenchmarkRunCliOpts): Promise<void>;
25
+ export declare function compareBenchmarks(runIdA: string, runIdB: string, opts: {
26
+ dev?: boolean;
27
+ }): Promise<void>;
28
+ export declare function listSuites(opts: BenchmarkSuitesCliOpts): Promise<void>;
29
+ export declare function exportBenchmark(runId: string, opts: BenchmarkExportCliOpts): Promise<void>;
30
+ export {};
31
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/commands/benchmark.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,UAAU,sBAAsB;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,UAAU,sBAAsB;IAC9B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAqCD,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsF3E;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC9G;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B5E;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhG"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * `intutic benchmark` — Run, compare, and manage PromptGrade™ benchmarks.
3
+ *
4
+ * Subcommands:
5
+ * - `intutic benchmark run --suite <id> [--harness <type>] [--dev]`
6
+ * - `intutic benchmark compare <runIdA> <runIdB> [--dev]`
7
+ * - `intutic benchmark suites [--dev]`
8
+ * - `intutic benchmark export <runId> [--format csv|json] [--dev]`
9
+ *
10
+ * WS-4E Advanced
11
+ */
12
+ import { log } from '../lib/logger.js';
13
+ import { loadCredentials } from '../config/store.js';
14
+ import { resolveControlPlaneUrl } from '../config/paths.js';
15
+ import { createApiClient } from '../lib/api.js';
16
+ import pc from 'picocolors';
17
+ function pad(str, width) {
18
+ if (str.length >= width)
19
+ return str.slice(0, width);
20
+ return str + ' '.repeat(width - str.length);
21
+ }
22
+ function renderTable(headers, widths, rows) {
23
+ // Draw header line
24
+ const headerLine = headers.map((h, i) => pad(pc.bold(h), widths[i])).join(' │ ');
25
+ console.log(headerLine);
26
+ console.log(widths.map((w) => '─'.repeat(w)).join('─┼─'));
27
+ // Draw rows
28
+ for (const row of rows) {
29
+ const rowLine = row.map((val, i) => pad(val, widths[i])).join(' │ ');
30
+ console.log(rowLine);
31
+ }
32
+ }
33
+ function colorOutcome(outcome, expected) {
34
+ if (outcome === expected) {
35
+ return pc.green(outcome);
36
+ }
37
+ return pc.red(`${outcome} (expected ${expected})`);
38
+ }
39
+ function getGradeColor(score) {
40
+ const num = parseFloat(score);
41
+ if (num >= 0.90)
42
+ return pc.bold(pc.green('A+'));
43
+ if (num >= 0.80)
44
+ return pc.bold(pc.green('A'));
45
+ if (num >= 0.70)
46
+ return pc.bold(pc.yellow('B'));
47
+ if (num >= 0.60)
48
+ return pc.bold(pc.yellow('C'));
49
+ if (num >= 0.50)
50
+ return pc.bold(pc.red('D'));
51
+ return pc.bold(pc.red('F'));
52
+ }
53
+ export async function runBenchmark(opts) {
54
+ const creds = await loadCredentials();
55
+ if (!creds) {
56
+ log.error('Not authenticated. Run `intutic login` first.');
57
+ process.exit(1);
58
+ }
59
+ const controlPlaneUrl = resolveControlPlaneUrl(opts.dev);
60
+ const client = createApiClient(controlPlaneUrl, creds.apiKey);
61
+ log.header(`Starting PromptGrade™ Run`);
62
+ log.info(`Suite ID: ${pc.bold(opts.suite)}`);
63
+ log.info(`Harness: ${pc.bold(opts.harness || 'generic')}`);
64
+ try {
65
+ // 1. Trigger the benchmark run
66
+ const result = await client.post('/api/v1/benchmarks/runs', {
67
+ workspaceId: creds.workspaceId,
68
+ suiteId: opts.suite,
69
+ triggeredBy: creds.email || 'cli',
70
+ harnessType: opts.harness || 'generic',
71
+ });
72
+ const runId = result.runId;
73
+ log.success(`Run created: ${pc.bold(runId)}. Executing tasks...`);
74
+ // 2. Poll for progress
75
+ let completed = false;
76
+ let attempts = 0;
77
+ const maxAttempts = 120; // 2 minutes max
78
+ while (!completed && attempts < maxAttempts) {
79
+ await new Promise((resolve) => setTimeout(resolve, 1500));
80
+ attempts++;
81
+ const { run } = await client.get(`/api/v1/benchmarks/runs/${runId}`);
82
+ if (run.status === 'completed' || run.status === 'failed') {
83
+ completed = true;
84
+ if (run.status === 'failed') {
85
+ log.error('Benchmark run failed.');
86
+ process.exit(1);
87
+ }
88
+ // Fetch task results
89
+ const { results } = await client.get(`/api/v1/benchmarks/runs/${runId}/tasks`);
90
+ log.header('Benchmark Tasks Completion Summary');
91
+ const headers = ['Task ID', 'Expected', 'Actual', 'Passed', 'Godel Score', 'Tokens', 'Cost'];
92
+ const widths = [24, 10, 10, 8, 12, 10, 10];
93
+ const rows = results.map((r) => [
94
+ r.taskId,
95
+ r.actualOutcome === 'BLOCK' ? 'BLOCK' : 'ALLOW', // dummy expected since task title not stored here
96
+ r.actualOutcome || 'ALLOW',
97
+ r.passed ? pc.green('✓') : pc.red('✗'),
98
+ parseFloat(r.godelScore || '0').toFixed(2),
99
+ String(r.tokensUsed || 0),
100
+ `$${parseFloat(r.costUsd || '0').toFixed(4)}`
101
+ ]);
102
+ renderTable(headers, widths, rows);
103
+ log.header('Overall Evaluation Results');
104
+ log.field('Composite Score', `${run.compositeScore || '0.0000'} (${getGradeColor(run.compositeScore || '0')})`);
105
+ log.field('Tasks Total', String(run.tasksTotal));
106
+ log.field('Tasks Passed', pc.green(String(run.tasksPassed)));
107
+ log.field('Tasks Failed', run.tasksFailed > 0 ? pc.red(String(run.tasksFailed)) : pc.green('0'));
108
+ log.field('Violations Blocked', pc.green(String(run.violationsCaught)));
109
+ log.field('Violations Missed', run.violationsMissed > 0 ? pc.red(String(run.violationsMissed)) : pc.green('0'));
110
+ log.field('Total Token Cost', `$${parseFloat(run.totalCostUsd).toFixed(4)}`);
111
+ log.field('Total Tokens', String(run.totalTokens));
112
+ }
113
+ else {
114
+ process.stdout.write(pc.dim('.'));
115
+ }
116
+ }
117
+ if (!completed) {
118
+ log.warn('Benchmark run execution timed out on the CLI. Check the dashboard for status.');
119
+ }
120
+ }
121
+ catch (err) {
122
+ log.error(`Failed to execute benchmark run: ${err instanceof Error ? err.message : String(err)}`);
123
+ process.exit(1);
124
+ }
125
+ }
126
+ export async function compareBenchmarks(runIdA, runIdB, opts) {
127
+ const creds = await loadCredentials();
128
+ if (!creds) {
129
+ log.error('Not authenticated. Run `intutic login` first.');
130
+ process.exit(1);
131
+ }
132
+ const controlPlaneUrl = resolveControlPlaneUrl(opts.dev);
133
+ const client = createApiClient(controlPlaneUrl, creds.apiKey);
134
+ log.header(`Comparing Run ${runIdA} vs Run ${runIdB}`);
135
+ try {
136
+ const report = await client.get(`/api/v1/benchmarks/compare/${runIdA}/${runIdB}`);
137
+ log.info(`Score Delta: ${report.scoreDelta >= 0 ? pc.green(`+${report.scoreDelta.toFixed(4)}`) : pc.red(report.scoreDelta.toFixed(4))}`);
138
+ log.field('Run A Composite Score', `${report.runA.compositeScore || '0.0000'} (${getGradeColor(report.runA.compositeScore || '0')})`);
139
+ log.field('Run B Composite Score', `${report.runB.compositeScore || '0.0000'} (${getGradeColor(report.runB.compositeScore || '0')})`);
140
+ log.header('Task Comparison Detail');
141
+ const headers = ['Task Title', 'Expected', 'Outcome A', 'Outcome B', 'Cost Delta', 'Tokens Delta'];
142
+ const widths = [30, 10, 24, 24, 12, 14];
143
+ const rows = report.taskComparisons.map((c) => [
144
+ c.title,
145
+ c.expectedOutcome,
146
+ colorOutcome(c.outcomeA, c.expectedOutcome),
147
+ colorOutcome(c.outcomeB, c.expectedOutcome),
148
+ c.costDelta === 0 ? '$0.0000' : (c.costDelta > 0 ? pc.red(`+$${c.costDelta.toFixed(4)}`) : pc.green(`-$${Math.abs(c.costDelta).toFixed(4)}`)),
149
+ c.tokenDelta === 0 ? '0' : (c.tokenDelta > 0 ? pc.red(`+${c.tokenDelta}`) : pc.green(`${c.tokenDelta}`))
150
+ ]);
151
+ renderTable(headers, widths, rows);
152
+ }
153
+ catch (err) {
154
+ log.error(`Failed to compare benchmarks: ${err instanceof Error ? err.message : String(err)}`);
155
+ process.exit(1);
156
+ }
157
+ }
158
+ export async function listSuites(opts) {
159
+ const creds = await loadCredentials();
160
+ if (!creds) {
161
+ log.error('Not authenticated. Run `intutic login` first.');
162
+ process.exit(1);
163
+ }
164
+ const controlPlaneUrl = resolveControlPlaneUrl(opts.dev);
165
+ const client = createApiClient(controlPlaneUrl, creds.apiKey);
166
+ log.header('PromptGrade™ Benchmark Suites');
167
+ try {
168
+ const { suites } = await client.get(`/api/v1/benchmarks/suites?workspaceId=${creds.workspaceId}`);
169
+ const headers = ['Suite ID', 'Name', 'Tasks', 'Type'];
170
+ const widths = [32, 30, 8, 12];
171
+ const rows = suites.map((s) => [
172
+ s.suiteId,
173
+ s.name,
174
+ String(s.taskCount),
175
+ s.isBuiltin ? pc.cyan('Built-in') : pc.yellow('Custom')
176
+ ]);
177
+ renderTable(headers, widths, rows);
178
+ }
179
+ catch (err) {
180
+ log.error(`Failed to list suites: ${err instanceof Error ? err.message : String(err)}`);
181
+ process.exit(1);
182
+ }
183
+ }
184
+ export async function exportBenchmark(runId, opts) {
185
+ const creds = await loadCredentials();
186
+ if (!creds) {
187
+ log.error('Not authenticated. Run `intutic login` first.');
188
+ process.exit(1);
189
+ }
190
+ const controlPlaneUrl = resolveControlPlaneUrl(opts.dev);
191
+ const client = createApiClient(controlPlaneUrl, creds.apiKey);
192
+ try {
193
+ const { run } = await client.get(`/api/v1/benchmarks/runs/${runId}`);
194
+ const { results } = await client.get(`/api/v1/benchmarks/runs/${runId}/tasks`);
195
+ if (opts.format === 'json') {
196
+ console.log(JSON.stringify({ run, results }, null, 2));
197
+ }
198
+ else {
199
+ // CSV format
200
+ console.log('Result ID,Task ID,Expected Outcome,Actual Outcome,Passed,Godel Score,Tokens Used,Cost USD,Latency MS,Error Detail');
201
+ for (const r of results) {
202
+ console.log(`"${r.resultId}","${r.taskId}","BLOCK","${r.actualOutcome || ''}","${r.passed ? 'true' : 'false'}","${r.godelScore || ''}","${r.tokensUsed || 0}","${r.costUsd || ''}","${r.latencyMs || 0}","${r.errorDetail || ''}"`);
203
+ }
204
+ }
205
+ }
206
+ catch (err) {
207
+ log.error(`Failed to export benchmark: ${err instanceof Error ? err.message : String(err)}`);
208
+ process.exit(1);
209
+ }
210
+ }
211
+ //# sourceMappingURL=benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/commands/benchmark.ts"],"names":[],"mappings":"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"}