@intutic/cli 0.1.1 → 1.0.4

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 (166) hide show
  1. package/dist/cli.js +376 -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 +414 -80
  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/skill.d.ts +27 -0
  51. package/dist/commands/skill.d.ts.map +1 -0
  52. package/dist/commands/skill.js +289 -0
  53. package/dist/commands/skill.js.map +1 -0
  54. package/dist/commands/sop-audit.d.ts +17 -0
  55. package/dist/commands/sop-audit.d.ts.map +1 -0
  56. package/dist/commands/sop-audit.js +136 -0
  57. package/dist/commands/sop-audit.js.map +1 -0
  58. package/dist/commands/status.d.ts.map +1 -1
  59. package/dist/commands/status.js +53 -1
  60. package/dist/commands/status.js.map +1 -1
  61. package/dist/commands/syncContext.d.ts +18 -0
  62. package/dist/commands/syncContext.d.ts.map +1 -0
  63. package/dist/commands/syncContext.js +37 -0
  64. package/dist/commands/syncContext.js.map +1 -0
  65. package/dist/commands/traces.d.ts +13 -0
  66. package/dist/commands/traces.d.ts.map +1 -1
  67. package/dist/commands/traces.js +96 -2
  68. package/dist/commands/traces.js.map +1 -1
  69. package/dist/commands/whoami.js +1 -1
  70. package/dist/commands/whoami.js.map +1 -1
  71. package/dist/config/keychain.d.ts +28 -0
  72. package/dist/config/keychain.d.ts.map +1 -0
  73. package/dist/config/keychain.js +99 -0
  74. package/dist/config/keychain.js.map +1 -0
  75. package/dist/config/store.d.ts +3 -3
  76. package/dist/config/store.d.ts.map +1 -1
  77. package/dist/config/store.js +30 -6
  78. package/dist/config/store.js.map +1 -1
  79. package/dist/harness/aider.d.ts +4 -3
  80. package/dist/harness/aider.d.ts.map +1 -1
  81. package/dist/harness/aider.js +13 -27
  82. package/dist/harness/aider.js.map +1 -1
  83. package/dist/harness/claudeDesktop.d.ts +18 -0
  84. package/dist/harness/claudeDesktop.d.ts.map +1 -0
  85. package/dist/harness/claudeDesktop.js +69 -0
  86. package/dist/harness/claudeDesktop.js.map +1 -0
  87. package/dist/harness/cline.d.ts +13 -0
  88. package/dist/harness/cline.d.ts.map +1 -0
  89. package/dist/harness/cline.js +75 -0
  90. package/dist/harness/cline.js.map +1 -0
  91. package/dist/harness/codex.d.ts +4 -4
  92. package/dist/harness/codex.d.ts.map +1 -1
  93. package/dist/harness/codex.js +33 -21
  94. package/dist/harness/codex.js.map +1 -1
  95. package/dist/harness/continue.d.ts +14 -0
  96. package/dist/harness/continue.d.ts.map +1 -0
  97. package/dist/harness/continue.js +97 -0
  98. package/dist/harness/continue.js.map +1 -0
  99. package/dist/harness/cursor.d.ts +13 -1
  100. package/dist/harness/cursor.d.ts.map +1 -1
  101. package/dist/harness/cursor.js +59 -3
  102. package/dist/harness/cursor.js.map +1 -1
  103. package/dist/harness/detector.d.ts +1 -1
  104. package/dist/harness/detector.d.ts.map +1 -1
  105. package/dist/harness/detector.js +13 -1
  106. package/dist/harness/detector.js.map +1 -1
  107. package/dist/harness/goose.d.ts +13 -0
  108. package/dist/harness/goose.d.ts.map +1 -0
  109. package/dist/harness/goose.js +45 -0
  110. package/dist/harness/goose.js.map +1 -0
  111. package/dist/harness/n8n.d.ts +8 -4
  112. package/dist/harness/n8n.d.ts.map +1 -1
  113. package/dist/harness/n8n.js +108 -13
  114. package/dist/harness/n8n.js.map +1 -1
  115. package/dist/harness/openWebUI.d.ts +13 -0
  116. package/dist/harness/openWebUI.d.ts.map +1 -0
  117. package/dist/harness/openWebUI.js +25 -0
  118. package/dist/harness/openWebUI.js.map +1 -0
  119. package/dist/harness/openhands.d.ts +3 -3
  120. package/dist/harness/openhands.d.ts.map +1 -1
  121. package/dist/harness/openhands.js +13 -9
  122. package/dist/harness/openhands.js.map +1 -1
  123. package/dist/harness/rooCode.d.ts +14 -0
  124. package/dist/harness/rooCode.d.ts.map +1 -0
  125. package/dist/harness/rooCode.js +77 -0
  126. package/dist/harness/rooCode.js.map +1 -0
  127. package/dist/harness/types.d.ts.map +1 -1
  128. package/dist/harness/types.js +6 -0
  129. package/dist/harness/types.js.map +1 -1
  130. package/dist/harness/vscodeSettingsWriter.d.ts +40 -0
  131. package/dist/harness/vscodeSettingsWriter.d.ts.map +1 -0
  132. package/dist/harness/vscodeSettingsWriter.js +116 -0
  133. package/dist/harness/vscodeSettingsWriter.js.map +1 -0
  134. package/dist/harness/windsurf.d.ts +13 -1
  135. package/dist/harness/windsurf.d.ts.map +1 -1
  136. package/dist/harness/windsurf.js +58 -3
  137. package/dist/harness/windsurf.js.map +1 -1
  138. package/dist/lib/api.d.ts +2 -0
  139. package/dist/lib/api.d.ts.map +1 -1
  140. package/dist/lib/api.js +71 -1
  141. package/dist/lib/api.js.map +1 -1
  142. package/dist/lib/envInjector.d.ts +24 -0
  143. package/dist/lib/envInjector.d.ts.map +1 -0
  144. package/dist/lib/envInjector.js +146 -0
  145. package/dist/lib/envInjector.js.map +1 -0
  146. package/dist/lib/envInjector.test.d.ts +2 -0
  147. package/dist/lib/envInjector.test.d.ts.map +1 -0
  148. package/dist/lib/envInjector.test.js +32 -0
  149. package/dist/lib/envInjector.test.js.map +1 -0
  150. package/dist/lib/gitHooks.d.ts +19 -0
  151. package/dist/lib/gitHooks.d.ts.map +1 -0
  152. package/dist/lib/gitHooks.js +58 -0
  153. package/dist/lib/gitHooks.js.map +1 -0
  154. package/dist/lib/onboarding.d.ts +17 -0
  155. package/dist/lib/onboarding.d.ts.map +1 -0
  156. package/dist/lib/onboarding.js +164 -0
  157. package/dist/lib/onboarding.js.map +1 -0
  158. package/dist/lib/process.d.ts +53 -0
  159. package/dist/lib/process.d.ts.map +1 -0
  160. package/dist/lib/process.js +181 -0
  161. package/dist/lib/process.js.map +1 -0
  162. package/dist/lib/process.test.d.ts +2 -0
  163. package/dist/lib/process.test.d.ts.map +1 -0
  164. package/dist/lib/process.test.js +44 -0
  165. package/dist/lib/process.test.js.map +1 -0
  166. package/package.json +22 -33
@@ -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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"}
@@ -1,18 +1,20 @@
1
1
  /**
2
2
  * `intutic connect` — Start the sync daemon.
3
3
  *
4
- * Runs a 30-second polling loop that:
5
- * 1. Fetches config from control plane (active SOPs, proxy URL)
6
- * 2. Writes SOP content to harness config files
7
- * 3. Computes SHA-256 hashes of written files
8
- * 4. Reports hashes + status to control plane
4
+ * Runs a persistent WebSocket client for real-time config updates,
5
+ * a real-time filesystem watcher for configuration drift detection,
6
+ * and a 30-second HTTP polling loop as a secondary fallback.
9
7
  *
8
+ * LLD #14 — connect.ts
10
9
  * HLD §3.14 — Real-Time State Mirroring
11
- * LLD #8 — Sync Daemon / CLI
10
+ *
12
11
  * @module
13
12
  */
14
13
  export declare function runConnect(opts: {
15
14
  dev?: boolean;
16
15
  interval?: string;
16
+ workspaceId?: string;
17
+ apiKey?: string;
18
+ controlPlaneUrl?: string;
17
19
  }): Promise<void>;
18
20
  //# sourceMappingURL=connect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAcH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgK1F"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAuDH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgfhB"}