@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.
- package/dist/cli.js +376 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/benchmark.d.ts +31 -0
- package/dist/commands/benchmark.d.ts.map +1 -0
- package/dist/commands/benchmark.js +211 -0
- package/dist/commands/benchmark.js.map +1 -0
- package/dist/commands/connect.d.ts +8 -6
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +414 -80
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/enterprise-install.d.ts +36 -0
- package/dist/commands/enterprise-install.d.ts.map +1 -0
- package/dist/commands/enterprise-install.js +289 -0
- package/dist/commands/enterprise-install.js.map +1 -0
- package/dist/commands/eval.d.ts +13 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +67 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/exec.d.ts +34 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +114 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/exec.test.d.ts +2 -0
- package/dist/commands/exec.test.d.ts.map +1 -0
- package/dist/commands/exec.test.js +29 -0
- package/dist/commands/exec.test.js.map +1 -0
- package/dist/commands/export.d.ts +21 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +116 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +28 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install-daemon.d.ts +61 -0
- package/dist/commands/install-daemon.d.ts.map +1 -0
- package/dist/commands/install-daemon.js +691 -0
- package/dist/commands/install-daemon.js.map +1 -0
- package/dist/commands/install-daemon.test.d.ts +2 -0
- package/dist/commands/install-daemon.test.d.ts.map +1 -0
- package/dist/commands/install-daemon.test.js +93 -0
- package/dist/commands/install-daemon.test.js.map +1 -0
- package/dist/commands/login.js +2 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/mdm.d.ts +23 -0
- package/dist/commands/mdm.d.ts.map +1 -0
- package/dist/commands/mdm.js +134 -0
- package/dist/commands/mdm.js.map +1 -0
- package/dist/commands/skill.d.ts +27 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +289 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/sop-audit.d.ts +17 -0
- package/dist/commands/sop-audit.d.ts.map +1 -0
- package/dist/commands/sop-audit.js +136 -0
- package/dist/commands/sop-audit.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +53 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/syncContext.d.ts +18 -0
- package/dist/commands/syncContext.d.ts.map +1 -0
- package/dist/commands/syncContext.js +37 -0
- package/dist/commands/syncContext.js.map +1 -0
- package/dist/commands/traces.d.ts +13 -0
- package/dist/commands/traces.d.ts.map +1 -1
- package/dist/commands/traces.js +96 -2
- package/dist/commands/traces.js.map +1 -1
- package/dist/commands/whoami.js +1 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config/keychain.d.ts +28 -0
- package/dist/config/keychain.d.ts.map +1 -0
- package/dist/config/keychain.js +99 -0
- package/dist/config/keychain.js.map +1 -0
- package/dist/config/store.d.ts +3 -3
- package/dist/config/store.d.ts.map +1 -1
- package/dist/config/store.js +30 -6
- package/dist/config/store.js.map +1 -1
- package/dist/harness/aider.d.ts +4 -3
- package/dist/harness/aider.d.ts.map +1 -1
- package/dist/harness/aider.js +13 -27
- package/dist/harness/aider.js.map +1 -1
- package/dist/harness/claudeDesktop.d.ts +18 -0
- package/dist/harness/claudeDesktop.d.ts.map +1 -0
- package/dist/harness/claudeDesktop.js +69 -0
- package/dist/harness/claudeDesktop.js.map +1 -0
- package/dist/harness/cline.d.ts +13 -0
- package/dist/harness/cline.d.ts.map +1 -0
- package/dist/harness/cline.js +75 -0
- package/dist/harness/cline.js.map +1 -0
- package/dist/harness/codex.d.ts +4 -4
- package/dist/harness/codex.d.ts.map +1 -1
- package/dist/harness/codex.js +33 -21
- package/dist/harness/codex.js.map +1 -1
- package/dist/harness/continue.d.ts +14 -0
- package/dist/harness/continue.d.ts.map +1 -0
- package/dist/harness/continue.js +97 -0
- package/dist/harness/continue.js.map +1 -0
- package/dist/harness/cursor.d.ts +13 -1
- package/dist/harness/cursor.d.ts.map +1 -1
- package/dist/harness/cursor.js +59 -3
- package/dist/harness/cursor.js.map +1 -1
- package/dist/harness/detector.d.ts +1 -1
- package/dist/harness/detector.d.ts.map +1 -1
- package/dist/harness/detector.js +13 -1
- package/dist/harness/detector.js.map +1 -1
- package/dist/harness/goose.d.ts +13 -0
- package/dist/harness/goose.d.ts.map +1 -0
- package/dist/harness/goose.js +45 -0
- package/dist/harness/goose.js.map +1 -0
- package/dist/harness/n8n.d.ts +8 -4
- package/dist/harness/n8n.d.ts.map +1 -1
- package/dist/harness/n8n.js +108 -13
- package/dist/harness/n8n.js.map +1 -1
- package/dist/harness/openWebUI.d.ts +13 -0
- package/dist/harness/openWebUI.d.ts.map +1 -0
- package/dist/harness/openWebUI.js +25 -0
- package/dist/harness/openWebUI.js.map +1 -0
- package/dist/harness/openhands.d.ts +3 -3
- package/dist/harness/openhands.d.ts.map +1 -1
- package/dist/harness/openhands.js +13 -9
- package/dist/harness/openhands.js.map +1 -1
- package/dist/harness/rooCode.d.ts +14 -0
- package/dist/harness/rooCode.d.ts.map +1 -0
- package/dist/harness/rooCode.js +77 -0
- package/dist/harness/rooCode.js.map +1 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js +6 -0
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/vscodeSettingsWriter.d.ts +40 -0
- package/dist/harness/vscodeSettingsWriter.d.ts.map +1 -0
- package/dist/harness/vscodeSettingsWriter.js +116 -0
- package/dist/harness/vscodeSettingsWriter.js.map +1 -0
- package/dist/harness/windsurf.d.ts +13 -1
- package/dist/harness/windsurf.d.ts.map +1 -1
- package/dist/harness/windsurf.js +58 -3
- package/dist/harness/windsurf.js.map +1 -1
- package/dist/lib/api.d.ts +2 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +71 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/envInjector.d.ts +24 -0
- package/dist/lib/envInjector.d.ts.map +1 -0
- package/dist/lib/envInjector.js +146 -0
- package/dist/lib/envInjector.js.map +1 -0
- package/dist/lib/envInjector.test.d.ts +2 -0
- package/dist/lib/envInjector.test.d.ts.map +1 -0
- package/dist/lib/envInjector.test.js +32 -0
- package/dist/lib/envInjector.test.js.map +1 -0
- package/dist/lib/gitHooks.d.ts +19 -0
- package/dist/lib/gitHooks.d.ts.map +1 -0
- package/dist/lib/gitHooks.js +58 -0
- package/dist/lib/gitHooks.js.map +1 -0
- package/dist/lib/onboarding.d.ts +17 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +164 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/process.d.ts +53 -0
- package/dist/lib/process.d.ts.map +1 -0
- package/dist/lib/process.js +181 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/lib/process.test.d.ts +2 -0
- package/dist/lib/process.test.d.ts.map +1 -0
- package/dist/lib/process.test.js +44 -0
- package/dist/lib/process.test.js.map +1 -0
- package/package.json +22 -33
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intutic CLI — Skill Management and Loop Engineering Governance Commands.
|
|
3
|
+
*
|
|
4
|
+
* LLD Phase 8 — Loop Engineering & Ingestion Proposals
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
import * as fs from 'node:fs/promises';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { spawn } from 'node:child_process';
|
|
10
|
+
import { log } from '../lib/logger.js';
|
|
11
|
+
import { loadCredentials, loadConfig } from '../config/store.js';
|
|
12
|
+
import { resolveControlPlaneUrl } from '../config/paths.js';
|
|
13
|
+
import { createApiClient } from '../lib/api.js';
|
|
14
|
+
import pc from 'picocolors';
|
|
15
|
+
// ─── Skill Commands ──────────────────────────────────────────────────
|
|
16
|
+
export async function runSkillList() {
|
|
17
|
+
log.header('Intutic — Skill Discovery');
|
|
18
|
+
const config = loadConfig();
|
|
19
|
+
const workspaceRoot = config?.workspaceRoot ?? process.cwd();
|
|
20
|
+
const filesToScan = [
|
|
21
|
+
'.cursorrules',
|
|
22
|
+
'CLAUDE.md',
|
|
23
|
+
'.windsurfrules',
|
|
24
|
+
'.clauderules',
|
|
25
|
+
'rules.md',
|
|
26
|
+
];
|
|
27
|
+
const skillsReport = [];
|
|
28
|
+
let found = 0;
|
|
29
|
+
for (const file of filesToScan) {
|
|
30
|
+
const fullPath = join(workspaceRoot, file);
|
|
31
|
+
if (existsSync(fullPath)) {
|
|
32
|
+
found++;
|
|
33
|
+
const content = await fs.readFile(fullPath, 'utf8');
|
|
34
|
+
const lines = content.split('\n');
|
|
35
|
+
console.log(` ${pc.green('✔')} ${pc.bold(file)} (${lines.length} lines)`);
|
|
36
|
+
skillsReport.push({
|
|
37
|
+
filePath: file,
|
|
38
|
+
linesCount: lines.length,
|
|
39
|
+
issuesDetected: 0,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (found === 0) {
|
|
44
|
+
log.info('No active skill or rule files found in workspace root.');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
log.success(`Discovered ${found} local harness configuration/skill files.`);
|
|
48
|
+
}
|
|
49
|
+
// Report discovered skills to the Control Plane
|
|
50
|
+
const creds = await loadCredentials().catch(() => null);
|
|
51
|
+
if (creds && skillsReport.length > 0) {
|
|
52
|
+
try {
|
|
53
|
+
const client = await getClient(config?.devMode);
|
|
54
|
+
await client.post(`/api/v1/workspaces/${creds.workspaceId}/skills/report`, { skills: skillsReport });
|
|
55
|
+
log.dim('Reported local skills to Intutic control plane.');
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
// Non-blocking
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export async function runSkillAudit() {
|
|
63
|
+
log.header('Intutic — Skill Security Audit');
|
|
64
|
+
const config = loadConfig();
|
|
65
|
+
const workspaceRoot = config?.workspaceRoot ?? process.cwd();
|
|
66
|
+
const creds = await loadCredentials().catch(() => null);
|
|
67
|
+
let enableLocalSkillAuditDelete = false;
|
|
68
|
+
// Fetch workspace settings to see if auto-delete is enabled
|
|
69
|
+
if (creds) {
|
|
70
|
+
try {
|
|
71
|
+
const client = await getClient(config?.devMode);
|
|
72
|
+
const syncConfig = await client.fetchConfig(creds.workspaceId);
|
|
73
|
+
enableLocalSkillAuditDelete = syncConfig.settings?.enableLocalSkillAuditDelete ?? false;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// fallback to false
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const filesToScan = [
|
|
80
|
+
'.cursorrules',
|
|
81
|
+
'CLAUDE.md',
|
|
82
|
+
'.windsurfrules',
|
|
83
|
+
'.clauderules',
|
|
84
|
+
];
|
|
85
|
+
let issues = 0;
|
|
86
|
+
const skillsReport = [];
|
|
87
|
+
for (const file of filesToScan) {
|
|
88
|
+
const fullPath = join(workspaceRoot, file);
|
|
89
|
+
if (existsSync(fullPath)) {
|
|
90
|
+
const content = await fs.readFile(fullPath, 'utf8');
|
|
91
|
+
let fileIssues = 0;
|
|
92
|
+
let contentLines = content.split('\n');
|
|
93
|
+
let fileUpdated = false;
|
|
94
|
+
// 1. Audit for secrets (AWS, Intutic, generic keys)
|
|
95
|
+
if (content.match(/vk_[a-zA-Z0-9]{30,}/)) {
|
|
96
|
+
log.error(`[${file}] Hardcoded Intutic virtual key prefix detected.`);
|
|
97
|
+
fileIssues++;
|
|
98
|
+
}
|
|
99
|
+
if (content.match(/sk-live-[a-zA-Z0-9]{30,}/)) {
|
|
100
|
+
log.error(`[${file}] Hardcoded API secrets detected.`);
|
|
101
|
+
fileIssues++;
|
|
102
|
+
}
|
|
103
|
+
// 2. Audit for unsafe wildcard commands (e.g. rm -rf *, sh *)
|
|
104
|
+
if (content.match(/rm\s+-rf\s+[\*\/]/)) {
|
|
105
|
+
log.warn(`[${file}] Unsafe recursive delete wildcard patterns (rm -rf *) found.`);
|
|
106
|
+
fileIssues++;
|
|
107
|
+
}
|
|
108
|
+
if (content.match(/curl\s+|wget\s+/)) {
|
|
109
|
+
log.warn(`[${file}] Network retrieval commands (curl, wget) found inside rules instructions.`);
|
|
110
|
+
fileIssues++;
|
|
111
|
+
}
|
|
112
|
+
// 3. Auto-delete/prune unsafe lines if setting is enabled
|
|
113
|
+
if (fileIssues > 0 && enableLocalSkillAuditDelete) {
|
|
114
|
+
const filteredLines = contentLines.filter((line) => {
|
|
115
|
+
const isSecret = line.match(/vk_[a-zA-Z0-9]{30,}/) || line.match(/sk-live-[a-zA-Z0-9]{30,}/);
|
|
116
|
+
const isUnsafeCmd = line.match(/rm\s+-rf\s+[\*\/]/) || line.match(/curl\s+|wget\s+/);
|
|
117
|
+
if (isSecret || isUnsafeCmd) {
|
|
118
|
+
fileUpdated = true;
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
return true;
|
|
122
|
+
});
|
|
123
|
+
if (fileUpdated) {
|
|
124
|
+
await fs.writeFile(fullPath, filteredLines.join('\n'), 'utf8');
|
|
125
|
+
log.success(`[${file}] Auto-pruned unsafe lines/rules during security audit.`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
issues += fileIssues;
|
|
129
|
+
skillsReport.push({
|
|
130
|
+
filePath: file,
|
|
131
|
+
linesCount: contentLines.length,
|
|
132
|
+
issuesDetected: fileIssues,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (issues === 0) {
|
|
137
|
+
log.success('Skill security audit passed. No credentials or critical safety risks detected.');
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
log.warn(`Security audit completed with ${issues} findings. Review warnings above.`);
|
|
141
|
+
}
|
|
142
|
+
// Report findings to Control Plane
|
|
143
|
+
if (creds && skillsReport.length > 0) {
|
|
144
|
+
try {
|
|
145
|
+
const client = await getClient(config?.devMode);
|
|
146
|
+
await client.post(`/api/v1/workspaces/${creds.workspaceId}/skills/report`, { skills: skillsReport });
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Non-blocking
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ─── Loop Commands ───────────────────────────────────────────────────
|
|
154
|
+
async function getClient(dev) {
|
|
155
|
+
const creds = await loadCredentials();
|
|
156
|
+
if (!creds) {
|
|
157
|
+
log.error('Not authenticated. Run `intutic login` first.');
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
const devMode = dev || process.env.INTUTIC_DEV === '1';
|
|
161
|
+
const controlPlaneUrl = resolveControlPlaneUrl(devMode);
|
|
162
|
+
return createApiClient(controlPlaneUrl, creds.apiKey);
|
|
163
|
+
}
|
|
164
|
+
export async function runLoopStart(opts) {
|
|
165
|
+
log.header('Intutic — Start Loop Run');
|
|
166
|
+
if (!opts.name) {
|
|
167
|
+
log.error('Loop run name is required (--name <name>)');
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
const client = await getClient(opts.dev);
|
|
171
|
+
try {
|
|
172
|
+
const res = await client.post('/api/v1/loops/start', { name: opts.name, budgetLimitUsd: opts.budget });
|
|
173
|
+
if (res.ok && res.loop) {
|
|
174
|
+
log.success(`Loop run active: ${pc.bold(res.loop.loopRunId)}`);
|
|
175
|
+
log.info(`Budget limit: $${res.loop.budgetLimitUsd} USD`);
|
|
176
|
+
// Write loop env file locally
|
|
177
|
+
const loopEnvPath = join(process.env.HOME || '', '.intutic', 'env', 'loop.env');
|
|
178
|
+
await fs.mkdir(dirname(loopEnvPath), { recursive: true }).catch(() => { });
|
|
179
|
+
await fs.writeFile(loopEnvPath, `INTUTIC_LOOP_RUN_ID=${res.loop.loopRunId}\n`);
|
|
180
|
+
log.dim(`Wrote run context to ~/.intutic/env/loop.env`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
log.error(`Failed to register loop: ${err.message}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
export async function runLoopComplete(loopRunId, opts) {
|
|
188
|
+
log.header('Intutic — Complete Loop');
|
|
189
|
+
const client = await getClient(opts.dev);
|
|
190
|
+
try {
|
|
191
|
+
const res = await client.post(`/api/v1/loops/${loopRunId}/complete`);
|
|
192
|
+
if (res.ok) {
|
|
193
|
+
log.success(`Loop run ${loopRunId} completed.`);
|
|
194
|
+
// Clean env
|
|
195
|
+
const loopEnvPath = join(process.env.HOME || '', '.intutic', 'env', 'loop.env');
|
|
196
|
+
await fs.rm(loopEnvPath, { force: true });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
log.error(`Failed to complete loop: ${err.message}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
export async function runLoopKill(loopRunId, opts) {
|
|
204
|
+
log.header('Intutic — Kill Loop');
|
|
205
|
+
const client = await getClient(opts.dev);
|
|
206
|
+
try {
|
|
207
|
+
const res = await client.post(`/api/v1/loops/${loopRunId}/kill`);
|
|
208
|
+
if (res.ok) {
|
|
209
|
+
log.warn(`Loop run ${loopRunId} marked as KILLED.`);
|
|
210
|
+
const loopEnvPath = join(process.env.HOME || '', '.intutic', 'env', 'loop.env');
|
|
211
|
+
await fs.rm(loopEnvPath, { force: true });
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
log.error(`Failed to kill loop: ${err.message}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
export async function runLoopList(opts) {
|
|
219
|
+
log.header('Intutic — Workspace Loop Runs');
|
|
220
|
+
const client = await getClient(opts.dev);
|
|
221
|
+
try {
|
|
222
|
+
const res = await client.get('/api/v1/loops');
|
|
223
|
+
if (res.ok && res.loops) {
|
|
224
|
+
console.log(` ${pc.bold('Loop Run ID')} | ${pc.bold('Name')} | ${pc.bold('Status')} | ${pc.bold('Token Spend')} | ${pc.bold('Budget Limit')}`);
|
|
225
|
+
console.log(' ' + '-'.repeat(85));
|
|
226
|
+
for (const loop of res.loops) {
|
|
227
|
+
const statusStr = loop.status === 'ACTIVE' ? pc.green(loop.status) : loop.status === 'COMPLETED' ? pc.cyan(loop.status) : pc.red(loop.status);
|
|
228
|
+
console.log(` ${loop.loopRunId.padEnd(21)} | ${loop.name.padEnd(14)} | ${statusStr.padEnd(17)} | $${parseFloat(loop.totalTokenCostUsd).toFixed(4).padEnd(10)} | $${parseFloat(loop.budgetLimitUsd).toFixed(2)}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
log.error(`Failed to list loops: ${err.message}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
export async function runLoopExec(commandAndArgs, opts) {
|
|
237
|
+
if (commandAndArgs.length === 0) {
|
|
238
|
+
log.error('No command provided. Use: intutic loop exec -- <command> [args...]');
|
|
239
|
+
process.exit(1);
|
|
240
|
+
}
|
|
241
|
+
const loopName = opts.name || `exec-${commandAndArgs[0]}`;
|
|
242
|
+
const client = await getClient(opts.dev);
|
|
243
|
+
log.header(`Intutic — Execute Loop Wrapper: ${loopName}`);
|
|
244
|
+
try {
|
|
245
|
+
const res = await client.post('/api/v1/loops/start', { name: loopName, budgetLimitUsd: opts.budget });
|
|
246
|
+
if (!res.ok || !res.loop) {
|
|
247
|
+
log.error('Failed to start loop wrapper');
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
const loopRunId = res.loop.loopRunId;
|
|
251
|
+
log.success(`Loop run registered: ${loopRunId}`);
|
|
252
|
+
// Execute process with INTUTIC_LOOP_RUN_ID in environment
|
|
253
|
+
const childEnv = {
|
|
254
|
+
...process.env,
|
|
255
|
+
INTUTIC_LOOP_RUN_ID: loopRunId,
|
|
256
|
+
// For dynamic header routing
|
|
257
|
+
HTTP_X_LOOP_RUN_ID: loopRunId,
|
|
258
|
+
};
|
|
259
|
+
const command = commandAndArgs[0];
|
|
260
|
+
const args = commandAndArgs.slice(1);
|
|
261
|
+
log.info(`Executing wrapper command: ${command} ${args.join(' ')}`);
|
|
262
|
+
const child = spawn(command, args, {
|
|
263
|
+
env: childEnv,
|
|
264
|
+
stdio: 'inherit',
|
|
265
|
+
shell: true,
|
|
266
|
+
});
|
|
267
|
+
child.on('close', async (code) => {
|
|
268
|
+
if (code === 0) {
|
|
269
|
+
await client.post(`/api/v1/loops/${loopRunId}/complete`).catch(() => { });
|
|
270
|
+
log.success(`Loop command execution succeeded. Wrapper loop marked COMPLETED.`);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
await client.post(`/api/v1/loops/${loopRunId}/kill`).catch(() => { });
|
|
274
|
+
log.warn(`Loop command execution exited with code ${code}. Wrapper loop marked KILLED.`);
|
|
275
|
+
}
|
|
276
|
+
process.exit(code || 0);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
log.error(`Loop execution wrapper failed: ${err.message}`);
|
|
281
|
+
process.exit(1);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
function dirname(filePath) {
|
|
285
|
+
const parts = filePath.split('/');
|
|
286
|
+
parts.pop();
|
|
287
|
+
return parts.join('/');
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `intutic sop audit` — SOP health, dependency graph, and drift report.
|
|
3
|
+
*
|
|
4
|
+
* Fetches:
|
|
5
|
+
* 1. GET /api/v1/sop/dependency-graph — SOP nodes + cross-reference edges
|
|
6
|
+
* 2. GET /api/v1/sync/report — drift data per harness
|
|
7
|
+
*
|
|
8
|
+
* Outputs a formatted table: SOP ID | Title | Status | Edges | Drift
|
|
9
|
+
* Exits with code 1 if any SOP shows DRIFTED status or if drift is detected.
|
|
10
|
+
*
|
|
11
|
+
* TD-124: CLI intutic sop audit command
|
|
12
|
+
* LLD #8 — Sync Daemon / CLI
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
export declare function runSopAudit(): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=sop-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sop-audit.d.ts","sourceRoot":"","sources":["../../src/commands/sop-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiCH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyIjD"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `intutic sop audit` — SOP health, dependency graph, and drift report.
|
|
3
|
+
*
|
|
4
|
+
* Fetches:
|
|
5
|
+
* 1. GET /api/v1/sop/dependency-graph — SOP nodes + cross-reference edges
|
|
6
|
+
* 2. GET /api/v1/sync/report — drift data per harness
|
|
7
|
+
*
|
|
8
|
+
* Outputs a formatted table: SOP ID | Title | Status | Edges | Drift
|
|
9
|
+
* Exits with code 1 if any SOP shows DRIFTED status or if drift is detected.
|
|
10
|
+
*
|
|
11
|
+
* TD-124: CLI intutic sop audit command
|
|
12
|
+
* LLD #8 — Sync Daemon / CLI
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import pc from 'picocolors';
|
|
17
|
+
import { log } from '../lib/logger.js';
|
|
18
|
+
import { loadCredentials } from '../config/store.js';
|
|
19
|
+
export async function runSopAudit() {
|
|
20
|
+
log.header('Intutic — SOP Audit');
|
|
21
|
+
const creds = await loadCredentials();
|
|
22
|
+
if (!creds) {
|
|
23
|
+
log.error('Not authenticated. Run `intutic login` first.');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const baseUrl = creds.controlPlaneUrl ?? 'https://api.intutic.ai';
|
|
27
|
+
const headers = {
|
|
28
|
+
Authorization: `Bearer ${creds.apiKey}`,
|
|
29
|
+
'x-workspace-id': creds.workspaceId ?? '',
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
};
|
|
32
|
+
// ── 1. Fetch dependency graph ──────────────────────────────────────
|
|
33
|
+
let graph = { ok: false, nodes: [], edges: [] };
|
|
34
|
+
try {
|
|
35
|
+
const resp = await fetch(`${baseUrl}/api/v1/sop/dependency-graph`, { headers });
|
|
36
|
+
if (resp.ok) {
|
|
37
|
+
graph = (await resp.json());
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
log.warn(`Dependency graph fetch failed: HTTP ${resp.status}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
log.warn(`Dependency graph unreachable: ${err instanceof Error ? err.message : String(err)}`);
|
|
45
|
+
}
|
|
46
|
+
// ── 2. Fetch sync/drift report ─────────────────────────────────────
|
|
47
|
+
let syncReport = {};
|
|
48
|
+
try {
|
|
49
|
+
const resp = await fetch(`${baseUrl}/api/v1/sync/report`, { headers });
|
|
50
|
+
if (resp.ok) {
|
|
51
|
+
syncReport = (await resp.json());
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
log.warn(`Sync report fetch failed: HTTP ${resp.status}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
log.warn(`Sync report unreachable: ${err instanceof Error ? err.message : String(err)}`);
|
|
59
|
+
}
|
|
60
|
+
// Build edge count map
|
|
61
|
+
const edgesFrom = new Map();
|
|
62
|
+
for (const edge of graph.edges) {
|
|
63
|
+
edgesFrom.set(edge.from, (edgesFrom.get(edge.from) ?? 0) + 1);
|
|
64
|
+
}
|
|
65
|
+
// Global drift flag from sync report
|
|
66
|
+
const hasDrift = (syncReport.harnesses ?? []).some((h) => h.drifted);
|
|
67
|
+
// ── 3. Print table ─────────────────────────────────────────────────
|
|
68
|
+
const COL_ID = 22;
|
|
69
|
+
const COL_TITLE = 36;
|
|
70
|
+
const COL_STATUS = 14;
|
|
71
|
+
const COL_EDGES = 7;
|
|
72
|
+
const COL_DRIFT = 8;
|
|
73
|
+
const padR = (s, n) => s.slice(0, n).padEnd(n);
|
|
74
|
+
const padL = (s, n) => s.slice(0, n).padStart(n);
|
|
75
|
+
const header = pc.bold(padR('SOP ID', COL_ID)) +
|
|
76
|
+
' ' +
|
|
77
|
+
pc.bold(padR('Title', COL_TITLE)) +
|
|
78
|
+
' ' +
|
|
79
|
+
pc.bold(padR('Status', COL_STATUS)) +
|
|
80
|
+
' ' +
|
|
81
|
+
pc.bold(padL('Refs', COL_EDGES)) +
|
|
82
|
+
' ' +
|
|
83
|
+
pc.bold(padL('Drift', COL_DRIFT));
|
|
84
|
+
const divider = '─'.repeat(COL_ID + COL_TITLE + COL_STATUS + COL_EDGES + COL_DRIFT + 8);
|
|
85
|
+
console.log('\n' + header);
|
|
86
|
+
console.log(pc.dim(divider));
|
|
87
|
+
let hasSopIssues = false;
|
|
88
|
+
if (graph.nodes.length === 0) {
|
|
89
|
+
console.log(pc.dim(' (no SOPs found in workspace)'));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
for (const node of graph.nodes) {
|
|
93
|
+
const refs = edgesFrom.get(node.id) ?? 0;
|
|
94
|
+
const isDrifted = node.status === 'DRIFTED' || node.status === 'DEPRECATED';
|
|
95
|
+
const driftStr = hasDrift ? pc.yellow('⚠ yes') : pc.green(' ok');
|
|
96
|
+
if (isDrifted)
|
|
97
|
+
hasSopIssues = true;
|
|
98
|
+
const statusStr = isDrifted
|
|
99
|
+
? pc.yellow(padR(node.status, COL_STATUS))
|
|
100
|
+
: node.status === 'ACTIVE'
|
|
101
|
+
? pc.green(padR(node.status, COL_STATUS))
|
|
102
|
+
: pc.dim(padR(node.status, COL_STATUS));
|
|
103
|
+
console.log(padR(node.id, COL_ID) +
|
|
104
|
+
' ' +
|
|
105
|
+
padR(node.title, COL_TITLE) +
|
|
106
|
+
' ' +
|
|
107
|
+
statusStr +
|
|
108
|
+
' ' +
|
|
109
|
+
padL(String(refs), COL_EDGES) +
|
|
110
|
+
' ' +
|
|
111
|
+
driftStr);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
console.log(pc.dim(divider));
|
|
115
|
+
console.log();
|
|
116
|
+
// ── 4. Summary ─────────────────────────────────────────────────────
|
|
117
|
+
log.field('Total SOPs', String(graph.nodes.length));
|
|
118
|
+
log.field('Cross-references', String(graph.edges.length));
|
|
119
|
+
if (syncReport.harnesses && syncReport.harnesses.length > 0) {
|
|
120
|
+
const driftedHarnesses = syncReport.harnesses.filter((h) => h.drifted);
|
|
121
|
+
log.field('Harness drift', driftedHarnesses.length > 0
|
|
122
|
+
? pc.yellow(`${driftedHarnesses.length} drifted (${driftedHarnesses.map((h) => h.harnessType).join(', ')})`)
|
|
123
|
+
: pc.green('none'));
|
|
124
|
+
}
|
|
125
|
+
const exitCode = hasSopIssues || hasDrift ? 1 : 0;
|
|
126
|
+
if (exitCode === 1) {
|
|
127
|
+
console.log();
|
|
128
|
+
log.error('Audit failed — drift or deprecated SOPs detected. Review and remediate.');
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.log();
|
|
132
|
+
log.success('Audit passed — all SOPs healthy.');
|
|
133
|
+
}
|
|
134
|
+
process.exit(exitCode);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=sop-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sop-audit.js","sourceRoot":"","sources":["../../src/commands/sop-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyBH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAgF/C"}
|
package/dist/commands/status.js
CHANGED
|
@@ -9,11 +9,29 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { log } from '../lib/logger.js';
|
|
11
11
|
import { loadCredentials, loadConfig, loadIntegrity } from '../config/store.js';
|
|
12
|
+
import { getActiveAgentProcesses, isSyncDaemonRunning } from '../lib/process.js';
|
|
12
13
|
import pc from 'picocolors';
|
|
14
|
+
const HARNESS_TO_PROCESS_NAME = {
|
|
15
|
+
cursor: ['Cursor'],
|
|
16
|
+
'claude-code': ['Claude Code'],
|
|
17
|
+
antigravity: ['Antigravity'],
|
|
18
|
+
n8n: ['n8n'],
|
|
19
|
+
codex: ['Codex'],
|
|
20
|
+
windsurf: ['Windsurf'],
|
|
21
|
+
aider: ['Aider'],
|
|
22
|
+
openhands: ['OpenHands'],
|
|
23
|
+
openclaw: ['OpenClaw'],
|
|
24
|
+
cline: ['VS Code'],
|
|
25
|
+
'roo-code': ['VS Code'],
|
|
26
|
+
continue: ['VS Code', 'JetBrains IDE'],
|
|
27
|
+
'claude-desktop': ['Claude Desktop'],
|
|
28
|
+
goose: ['Goose'],
|
|
29
|
+
'open-webui': ['OpenWebUI'],
|
|
30
|
+
};
|
|
13
31
|
export async function runStatus() {
|
|
14
32
|
log.header('Intutic — Workspace Status');
|
|
15
33
|
// Auth
|
|
16
|
-
const creds = loadCredentials();
|
|
34
|
+
const creds = await loadCredentials();
|
|
17
35
|
if (creds) {
|
|
18
36
|
log.field('Email', creds.email);
|
|
19
37
|
log.field('Workspace', creds.workspaceId);
|
|
@@ -47,6 +65,40 @@ export async function runStatus() {
|
|
|
47
65
|
else {
|
|
48
66
|
log.dim(' No sync data yet. Run `intutic connect` to start syncing.');
|
|
49
67
|
}
|
|
68
|
+
// Active Processes
|
|
69
|
+
const activeProcs = getActiveAgentProcesses();
|
|
70
|
+
const daemonRunning = isSyncDaemonRunning();
|
|
71
|
+
console.log('');
|
|
72
|
+
log.info('Active Running Processes:');
|
|
73
|
+
if (activeProcs.length === 0) {
|
|
74
|
+
log.dim(' (none detected)');
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
for (const p of activeProcs) {
|
|
78
|
+
console.log(` ${pc.yellow('●')} ${pc.bold(p.name)} (PID: ${p.pid}) — ${pc.dim(p.command)}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
console.log('');
|
|
82
|
+
log.field('Sync Daemon State', daemonRunning ? pc.green('Running') : pc.red('Stopped'));
|
|
83
|
+
// Warning highlights
|
|
84
|
+
if (!daemonRunning && activeProcs.length > 0) {
|
|
85
|
+
const runningNames = new Set(activeProcs.map(p => p.name));
|
|
86
|
+
const configuredHarnesses = config.harnesses;
|
|
87
|
+
let runningConfiguredHarness = false;
|
|
88
|
+
for (const h of configuredHarnesses) {
|
|
89
|
+
const procNames = HARNESS_TO_PROCESS_NAME[h] || [];
|
|
90
|
+
if (procNames.some(name => runningNames.has(name))) {
|
|
91
|
+
runningConfiguredHarness = true;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (runningConfiguredHarness) {
|
|
96
|
+
console.log('');
|
|
97
|
+
log.warn(pc.yellow(pc.bold('Active agent process(es) detected, but the sync daemon ("intutic connect") is NOT running.')));
|
|
98
|
+
log.dim(' Configuration changes or SOP rules will not be synced to these agents until you start the daemon.');
|
|
99
|
+
log.dim(' Run `intutic connect` to start the sync daemon.');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
50
102
|
}
|
|
51
103
|
else {
|
|
52
104
|
log.warn('Not initialized. Run `intutic init` first.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,GAAG,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAA;IAExC,OAAO;IACP,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* syncContext.ts — CLI command to sync Git context (branch, commit) to daemon.
|
|
3
|
+
*
|
|
4
|
+
* Saves current Git status details locally to `.intutic/git-context.json`
|
|
5
|
+
* which is picked up by the sync daemon and reported to the control plane.
|
|
6
|
+
*
|
|
7
|
+
* LLD #14 — gitHooks.ts & syncContext.ts
|
|
8
|
+
* HLD §3.14 — Real-Time State Mirroring (Git hooks context integration)
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
export interface SyncContextOpts {
|
|
13
|
+
git?: boolean;
|
|
14
|
+
branch?: string;
|
|
15
|
+
commit?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function runSyncContext(opts: SyncContextOpts): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=syncContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncContext.d.ts","sourceRoot":"","sources":["../../src/commands/syncContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBzE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* syncContext.ts — CLI command to sync Git context (branch, commit) to daemon.
|
|
3
|
+
*
|
|
4
|
+
* Saves current Git status details locally to `.intutic/git-context.json`
|
|
5
|
+
* which is picked up by the sync daemon and reported to the control plane.
|
|
6
|
+
*
|
|
7
|
+
* LLD #14 — gitHooks.ts & syncContext.ts
|
|
8
|
+
* HLD §3.14 — Real-Time State Mirroring (Git hooks context integration)
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import * as node_fs from 'node:fs/promises';
|
|
13
|
+
import * as node_path from 'node:path';
|
|
14
|
+
import { log } from '../lib/logger.js';
|
|
15
|
+
import { newIso } from '@intutic/id';
|
|
16
|
+
export async function runSyncContext(opts) {
|
|
17
|
+
const workspaceRoot = process.cwd();
|
|
18
|
+
const intuticDir = node_path.join(workspaceRoot, '.intutic');
|
|
19
|
+
try {
|
|
20
|
+
await node_fs.mkdir(intuticDir, { recursive: true });
|
|
21
|
+
const contextPath = node_path.join(intuticDir, 'git-context.json');
|
|
22
|
+
const contextData = {
|
|
23
|
+
git: {
|
|
24
|
+
branch: opts.branch || '',
|
|
25
|
+
commit: opts.commit || '',
|
|
26
|
+
},
|
|
27
|
+
updatedAt: newIso(),
|
|
28
|
+
};
|
|
29
|
+
await node_fs.writeFile(contextPath, JSON.stringify(contextData, null, 2) + '\n', 'utf-8');
|
|
30
|
+
log.dim(`Saved Git context to .intutic/git-context.json: branch=${opts.branch}, commit=${opts.commit}`);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
log.error(`Failed to write Git context: ${err instanceof Error ? err.message : String(err)}`);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=syncContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncContext.js","sourceRoot":"","sources":["../../src/commands/syncContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAQpC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAqB;IACxD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACnC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IAE5D,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;QAElE,MAAM,WAAW,GAAG;YAClB,GAAG,EAAE;gBACH,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;aAC1B;YACD,SAAS,EAAE,MAAM,EAAE;SACpB,CAAA;QAED,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1F,GAAG,CAAC,GAAG,CAAC,0DAA0D,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IACzG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
|