@intutic/cli 1.3.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.
- package/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +348 -0
- package/dist/cli.js.map +1 -0
- 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/budget.d.ts +7 -0
- package/dist/commands/budget.d.ts.map +1 -0
- package/dist/commands/budget.js +68 -0
- package/dist/commands/budget.js.map +1 -0
- package/dist/commands/budgetCompatibility.test.d.ts +2 -0
- package/dist/commands/budgetCompatibility.test.d.ts.map +1 -0
- package/dist/commands/budgetCompatibility.test.js +19 -0
- package/dist/commands/budgetCompatibility.test.js.map +1 -0
- package/dist/commands/connect.d.ts +20 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +1010 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/doctor.d.ts +23 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +429 -0
- package/dist/commands/doctor.js.map +1 -0
- 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 +13 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +110 -0
- package/dist/commands/init.js.map +1 -0
- 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 +696 -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.d.ts +14 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +121 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +13 -0
- package/dist/commands/logout.js.map +1 -0
- 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/policy.d.ts +19 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +232 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/prompt.d.ts +11 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/prompt.js +71 -0
- package/dist/commands/prompt.js.map +1 -0
- package/dist/commands/skill.d.ts +31 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +349 -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/sops.d.ts +4 -0
- package/dist/commands/sops.d.ts.map +1 -0
- package/dist/commands/sops.js +88 -0
- package/dist/commands/sops.js.map +1 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +107 -0
- package/dist/commands/status.js.map +1 -0
- 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 +32 -0
- package/dist/commands/traces.d.ts.map +1 -0
- package/dist/commands/traces.js +207 -0
- package/dist/commands/traces.js.map +1 -0
- package/dist/commands/whoami.d.ts +12 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +34 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config/keychain.d.ts +28 -0
- package/dist/config/keychain.d.ts.map +1 -0
- package/dist/config/keychain.js +98 -0
- package/dist/config/keychain.js.map +1 -0
- package/dist/config/paths.d.ts +30 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +53 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/store.d.ts +25 -0
- package/dist/config/store.d.ts.map +1 -0
- package/dist/config/store.js +93 -0
- package/dist/config/store.js.map +1 -0
- package/dist/harness/aider.d.ts +13 -0
- package/dist/harness/aider.d.ts.map +1 -0
- package/dist/harness/aider.js +48 -0
- package/dist/harness/aider.js.map +1 -0
- package/dist/harness/antigravity.d.ts +12 -0
- package/dist/harness/antigravity.d.ts.map +1 -0
- package/dist/harness/antigravity.js +69 -0
- package/dist/harness/antigravity.js.map +1 -0
- package/dist/harness/base.d.ts +20 -0
- package/dist/harness/base.d.ts.map +1 -0
- package/dist/harness/base.js +73 -0
- package/dist/harness/base.js.map +1 -0
- package/dist/harness/claudeCode.d.ts +2 -0
- package/dist/harness/claudeCode.d.ts.map +1 -0
- package/dist/harness/claudeCode.js +9 -0
- package/dist/harness/claudeCode.js.map +1 -0
- 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 +13 -0
- package/dist/harness/codex.d.ts.map +1 -0
- package/dist/harness/codex.js +86 -0
- package/dist/harness/codex.js.map +1 -0
- 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 +14 -0
- package/dist/harness/cursor.d.ts.map +1 -0
- package/dist/harness/cursor.js +65 -0
- package/dist/harness/cursor.js.map +1 -0
- package/dist/harness/detector.d.ts +29 -0
- package/dist/harness/detector.d.ts.map +1 -0
- package/dist/harness/detector.js +81 -0
- package/dist/harness/detector.js.map +1 -0
- package/dist/harness/githubCopilot.d.ts +12 -0
- package/dist/harness/githubCopilot.d.ts.map +1 -0
- package/dist/harness/githubCopilot.js +54 -0
- package/dist/harness/githubCopilot.js.map +1 -0
- 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/hermes.d.ts +12 -0
- package/dist/harness/hermes.d.ts.map +1 -0
- package/dist/harness/hermes.js +51 -0
- package/dist/harness/hermes.js.map +1 -0
- package/dist/harness/n8n.d.ts +17 -0
- package/dist/harness/n8n.d.ts.map +1 -0
- package/dist/harness/n8n.js +125 -0
- package/dist/harness/n8n.js.map +1 -0
- 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/openclaw.d.ts +12 -0
- package/dist/harness/openclaw.d.ts.map +1 -0
- package/dist/harness/openclaw.js +51 -0
- package/dist/harness/openclaw.js.map +1 -0
- package/dist/harness/openhands.d.ts +12 -0
- package/dist/harness/openhands.d.ts.map +1 -0
- package/dist/harness/openhands.js +67 -0
- package/dist/harness/openhands.js.map +1 -0
- package/dist/harness/pi.d.ts +12 -0
- package/dist/harness/pi.d.ts.map +1 -0
- package/dist/harness/pi.js +51 -0
- package/dist/harness/pi.js.map +1 -0
- 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 +30 -0
- package/dist/harness/types.d.ts.map +1 -0
- package/dist/harness/types.js +32 -0
- package/dist/harness/types.js.map +1 -0
- 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 +14 -0
- package/dist/harness/windsurf.d.ts.map +1 -0
- package/dist/harness/windsurf.js +64 -0
- package/dist/harness/windsurf.js.map +1 -0
- package/dist/lib/api.d.ts +48 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +128 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/envInjector.d.ts +24 -0
- package/dist/lib/envInjector.d.ts.map +1 -0
- package/dist/lib/envInjector.js +149 -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/hash.d.ts +11 -0
- package/dist/lib/hash.d.ts.map +1 -0
- package/dist/lib/hash.js +18 -0
- package/dist/lib/hash.js.map +1 -0
- package/dist/lib/logger.d.ts +18 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +33 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/onboarding.d.ts +10 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +178 -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 +55 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* rooCode.ts — Roo Code adapter (full implementation).
|
|
3
|
+
*
|
|
4
|
+
* Detects the Roo Code VS Code extension, writes Intutic governance rules
|
|
5
|
+
* as .roorules, and configures the proxy base URL via VS Code settings +
|
|
6
|
+
* .env.intutic sidecar. Roo Code's notification hooks are not yet blocking
|
|
7
|
+
* so we rely on proxy (Vector B) and drift guard (Vector C).
|
|
8
|
+
*
|
|
9
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { access, readdir, writeFile, rename, mkdir } from 'node:fs/promises';
|
|
13
|
+
import { join, dirname } from 'node:path';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { HarnessType } from '@intutic/shared-types';
|
|
16
|
+
import { hashFile } from '../lib/hash.js';
|
|
17
|
+
import { newIso } from '@intutic/id';
|
|
18
|
+
import { injectRooCodeProxySettings } from './vscodeSettingsWriter.js';
|
|
19
|
+
const CONFIG_FILE = '.roorules';
|
|
20
|
+
export const rooCodeAdapter = {
|
|
21
|
+
type: HarnessType.ROO_CODE,
|
|
22
|
+
configFileName: CONFIG_FILE,
|
|
23
|
+
async detect(workspaceRoot) {
|
|
24
|
+
// Check for .roomodes or .roorules in workspace
|
|
25
|
+
for (const marker of ['.roomodes', '.roorules']) {
|
|
26
|
+
try {
|
|
27
|
+
await access(join(workspaceRoot, marker));
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// fall through
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Check for VS Code extension directory
|
|
35
|
+
try {
|
|
36
|
+
const extensionsDir = join(homedir(), '.vscode', 'extensions');
|
|
37
|
+
const entries = await readdir(extensionsDir);
|
|
38
|
+
return entries.some((entry) => entry.startsWith('rooveterinaryinc.roo-cline-'));
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
async writeConfig(workspaceRoot, sops, proxyUrl) {
|
|
45
|
+
// 1. Write .roorules governance text
|
|
46
|
+
const filePath = join(workspaceRoot, CONFIG_FILE);
|
|
47
|
+
const instructions = sops.length > 0
|
|
48
|
+
? sops.map((sop) => `## ${sop.title}\n\n${sop.content}`).join('\n\n---\n\n')
|
|
49
|
+
: '# Intutic governance active — no SOP rules configured yet.';
|
|
50
|
+
const content = [
|
|
51
|
+
'# Intutic Governance Rules (auto-generated)',
|
|
52
|
+
'# DO NOT EDIT — managed by intutic sync daemon',
|
|
53
|
+
`# Last sync: ${newIso()}`,
|
|
54
|
+
'# NOTE: Roo Code notification hooks are not blocking.',
|
|
55
|
+
'# Governance is enforced via proxy (Vector B) and drift guard (Vector C).',
|
|
56
|
+
'',
|
|
57
|
+
instructions,
|
|
58
|
+
'',
|
|
59
|
+
].join('\n');
|
|
60
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
61
|
+
const tmp = filePath + '.intutic-tmp';
|
|
62
|
+
await writeFile(tmp, content, 'utf-8');
|
|
63
|
+
await rename(tmp, filePath);
|
|
64
|
+
// 2. Inject proxy URL into VS Code settings + .env.intutic sidecar
|
|
65
|
+
await injectRooCodeProxySettings(workspaceRoot, proxyUrl);
|
|
66
|
+
return filePath;
|
|
67
|
+
},
|
|
68
|
+
async readCurrentHash(workspaceRoot) {
|
|
69
|
+
try {
|
|
70
|
+
return await hashFile(join(workspaceRoot, CONFIG_FILE));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=rooCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rooCode.js","sourceRoot":"","sources":["../../src/harness/rooCode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness adapter interface — contract for all harness integrations.
|
|
3
|
+
*
|
|
4
|
+
* Each adapter knows how to detect its harness, write governance
|
|
5
|
+
* config to its native config file, and read the current file hash.
|
|
6
|
+
*
|
|
7
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
8
|
+
* LLD #8 — Sync Daemon / CLI
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import type { HarnessType, SyncSopEntry } from '@intutic/shared-types';
|
|
12
|
+
/** Contract implemented by each harness adapter. */
|
|
13
|
+
export interface IHarnessAdapter {
|
|
14
|
+
/** Harness type identifier. */
|
|
15
|
+
readonly type: HarnessType;
|
|
16
|
+
/** Config file name relative to workspace root. */
|
|
17
|
+
readonly configFileName: string;
|
|
18
|
+
/** Detect whether this harness is present in the workspace. */
|
|
19
|
+
detect(workspaceRoot: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Write governance config to the harness's native config file.
|
|
22
|
+
* Returns the absolute path written, or null if skipped.
|
|
23
|
+
*/
|
|
24
|
+
writeConfig(workspaceRoot: string, sops: SyncSopEntry[], proxyUrl: string): Promise<string | null>;
|
|
25
|
+
/** Read SHA-256 hash of current config file content. Returns null if file doesn't exist. */
|
|
26
|
+
readCurrentHash(workspaceRoot: string): Promise<string | null>;
|
|
27
|
+
}
|
|
28
|
+
/** Harness config file mapping for file-based harnesses. */
|
|
29
|
+
export declare const HARNESS_CONFIG_FILES: Record<HarnessType, string>;
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEtE,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,+DAA+D;IAC/D,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C;;;OAGG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAClG,4FAA4F;IAC5F,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC/D;AAED,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAmB5D,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness adapter interface — contract for all harness integrations.
|
|
3
|
+
*
|
|
4
|
+
* Each adapter knows how to detect its harness, write governance
|
|
5
|
+
* config to its native config file, and read the current file hash.
|
|
6
|
+
*
|
|
7
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
8
|
+
* LLD #8 — Sync Daemon / CLI
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
/** Harness config file mapping for file-based harnesses. */
|
|
12
|
+
export const HARNESS_CONFIG_FILES = {
|
|
13
|
+
'cursor': '.cursorrules',
|
|
14
|
+
'claude-code': 'CLAUDE.md',
|
|
15
|
+
'antigravity': '.gemini/settings.json',
|
|
16
|
+
'windsurf': '.windsurfrules',
|
|
17
|
+
'aider': '.aider.conf.yml',
|
|
18
|
+
'openhands': 'config.toml',
|
|
19
|
+
'codex': '.env.intutic',
|
|
20
|
+
'n8n': '', // Phase 2 — TD-037: API call, not file write
|
|
21
|
+
'openclaw': '.openclaw/openclaw.json',
|
|
22
|
+
'hermes': '.hermes/config.yaml',
|
|
23
|
+
'pi': '.pi/hooks.json',
|
|
24
|
+
'github-copilot': '.github/copilot-instructions.md',
|
|
25
|
+
'cline': '',
|
|
26
|
+
'roo-code': '',
|
|
27
|
+
'continue': '',
|
|
28
|
+
'claude-desktop': '',
|
|
29
|
+
'goose': '',
|
|
30
|
+
'open-webui': '',
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAgC;IAC/D,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,WAAW;IAC1B,aAAa,EAAE,uBAAuB;IACtC,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,EAAE,EAAE,6CAA6C;IACxD,UAAU,EAAE,yBAAyB;IACrC,QAAQ,EAAE,qBAAqB;IAC/B,IAAI,EAAE,gBAAgB;IACtB,gBAAgB,EAAE,iCAAiC;IACnD,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,EAAE;IACpB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;CACjB,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vscodeSettingsWriter.ts — VS Code settings.json proxy injection.
|
|
3
|
+
*
|
|
4
|
+
* Shared by the Cline and Roo Code adapters. Merges Intutic proxy
|
|
5
|
+
* API base URL keys into:
|
|
6
|
+
* - macOS: ~/Library/Application Support/Code/User/settings.json
|
|
7
|
+
* - Linux: ~/.config/Code/User/settings.json
|
|
8
|
+
* - Workspace: <workspaceRoot>/.vscode/settings.json
|
|
9
|
+
*
|
|
10
|
+
* Also writes ~/.intutic/.env.intutic with exported env vars for
|
|
11
|
+
* shells that source it before launching VS Code.
|
|
12
|
+
*
|
|
13
|
+
* LLD #14 — Phase 3 cross-harness defence
|
|
14
|
+
* HLD §3.14 — Three-Tier Defense Cascade
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Settings keys injected for each harness.
|
|
20
|
+
* These are checked during drift detection and restored on tamper.
|
|
21
|
+
*/
|
|
22
|
+
export declare const CLINE_PROXY_KEYS: readonly ["cline.apiBase", "cline.openAiBaseUrl"];
|
|
23
|
+
export declare const ROO_CODE_PROXY_KEYS: readonly ["roo-cline.openAiBaseUrl", "roo-cline.apiBase"];
|
|
24
|
+
/**
|
|
25
|
+
* Merge Intutic proxy URL into VS Code user + workspace settings.json
|
|
26
|
+
* for the Cline extension.
|
|
27
|
+
*/
|
|
28
|
+
export declare function injectClineProxySettings(workspaceRoot: string, proxyUrl: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Merge Intutic proxy URL into VS Code user + workspace settings.json
|
|
31
|
+
* for the Roo Code extension.
|
|
32
|
+
*/
|
|
33
|
+
export declare function injectRooCodeProxySettings(workspaceRoot: string, proxyUrl: string): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Write (or update) ~/.intutic/.env.intutic with proxy env vars.
|
|
36
|
+
* Users/CI pipelines can `source ~/.intutic/.env.intutic` to get proxy routing
|
|
37
|
+
* for any harness that respects OPENAI_BASE_URL / ANTHROPIC_BASE_URL.
|
|
38
|
+
*/
|
|
39
|
+
export declare function writeEnvSidecar(proxyUrl: string): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=vscodeSettingsWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscodeSettingsWriter.d.ts","sourceRoot":"","sources":["../../src/harness/vscodeSettingsWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAsBH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,mDAAoD,CAAA;AACjF,eAAO,MAAM,mBAAmB,2DAA4D,CAAA;AAE5F;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBrE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vscodeSettingsWriter.ts — VS Code settings.json proxy injection.
|
|
3
|
+
*
|
|
4
|
+
* Shared by the Cline and Roo Code adapters. Merges Intutic proxy
|
|
5
|
+
* API base URL keys into:
|
|
6
|
+
* - macOS: ~/Library/Application Support/Code/User/settings.json
|
|
7
|
+
* - Linux: ~/.config/Code/User/settings.json
|
|
8
|
+
* - Workspace: <workspaceRoot>/.vscode/settings.json
|
|
9
|
+
*
|
|
10
|
+
* Also writes ~/.intutic/.env.intutic with exported env vars for
|
|
11
|
+
* shells that source it before launching VS Code.
|
|
12
|
+
*
|
|
13
|
+
* LLD #14 — Phase 3 cross-harness defence
|
|
14
|
+
* HLD §3.14 — Three-Tier Defense Cascade
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
17
|
+
*/
|
|
18
|
+
import * as fs from 'node:fs/promises';
|
|
19
|
+
import * as path from 'node:path';
|
|
20
|
+
import * as os from 'node:os';
|
|
21
|
+
import { createLogger } from '@intutic/logger';
|
|
22
|
+
import { newIso } from '@intutic/id';
|
|
23
|
+
const log = createLogger('sync-vscode-writer');
|
|
24
|
+
/** VS Code user settings path by platform. */
|
|
25
|
+
function getVscodeUserSettingsPath() {
|
|
26
|
+
switch (process.platform) {
|
|
27
|
+
case 'darwin':
|
|
28
|
+
return path.join(os.homedir(), 'Library', 'Application Support', 'Code', 'User', 'settings.json');
|
|
29
|
+
case 'win32':
|
|
30
|
+
return path.join(process.env.APPDATA ?? os.homedir(), 'Code', 'User', 'settings.json');
|
|
31
|
+
default: // linux
|
|
32
|
+
return path.join(os.homedir(), '.config', 'Code', 'User', 'settings.json');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Settings keys injected for each harness.
|
|
37
|
+
* These are checked during drift detection and restored on tamper.
|
|
38
|
+
*/
|
|
39
|
+
export const CLINE_PROXY_KEYS = ['cline.apiBase', 'cline.openAiBaseUrl'];
|
|
40
|
+
export const ROO_CODE_PROXY_KEYS = ['roo-cline.openAiBaseUrl', 'roo-cline.apiBase'];
|
|
41
|
+
/**
|
|
42
|
+
* Merge Intutic proxy URL into VS Code user + workspace settings.json
|
|
43
|
+
* for the Cline extension.
|
|
44
|
+
*/
|
|
45
|
+
export async function injectClineProxySettings(workspaceRoot, proxyUrl) {
|
|
46
|
+
const keys = {};
|
|
47
|
+
for (const k of CLINE_PROXY_KEYS) {
|
|
48
|
+
keys[k] = proxyUrl;
|
|
49
|
+
}
|
|
50
|
+
await mergeVscodeSettings(getVscodeUserSettingsPath(), keys);
|
|
51
|
+
await mergeVscodeSettings(path.join(workspaceRoot, '.vscode', 'settings.json'), keys);
|
|
52
|
+
await writeEnvSidecar(proxyUrl);
|
|
53
|
+
log.info({ action: 'cline_proxy_injected', proxyUrl }, 'Cline proxy keys injected into VS Code settings');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Merge Intutic proxy URL into VS Code user + workspace settings.json
|
|
57
|
+
* for the Roo Code extension.
|
|
58
|
+
*/
|
|
59
|
+
export async function injectRooCodeProxySettings(workspaceRoot, proxyUrl) {
|
|
60
|
+
const keys = {};
|
|
61
|
+
for (const k of ROO_CODE_PROXY_KEYS) {
|
|
62
|
+
keys[k] = proxyUrl;
|
|
63
|
+
}
|
|
64
|
+
await mergeVscodeSettings(getVscodeUserSettingsPath(), keys);
|
|
65
|
+
await mergeVscodeSettings(path.join(workspaceRoot, '.vscode', 'settings.json'), keys);
|
|
66
|
+
await writeEnvSidecar(proxyUrl);
|
|
67
|
+
log.info({ action: 'roo_code_proxy_injected', proxyUrl }, 'Roo Code proxy keys injected into VS Code settings');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Write (or update) ~/.intutic/.env.intutic with proxy env vars.
|
|
71
|
+
* Users/CI pipelines can `source ~/.intutic/.env.intutic` to get proxy routing
|
|
72
|
+
* for any harness that respects OPENAI_BASE_URL / ANTHROPIC_BASE_URL.
|
|
73
|
+
*/
|
|
74
|
+
export async function writeEnvSidecar(proxyUrl) {
|
|
75
|
+
const intuticDir = path.join(os.homedir(), '.intutic');
|
|
76
|
+
await fs.mkdir(intuticDir, { recursive: true });
|
|
77
|
+
const envPath = path.join(intuticDir, '.env.intutic');
|
|
78
|
+
const content = [
|
|
79
|
+
`# Intutic proxy env vars — auto-generated by intutic sync daemon`,
|
|
80
|
+
`# Source this file in your shell rc: source ~/.intutic/.env.intutic`,
|
|
81
|
+
`# Last sync: ${newIso()}`,
|
|
82
|
+
'',
|
|
83
|
+
`export ANTHROPIC_BASE_URL="${proxyUrl}"`,
|
|
84
|
+
`export OPENAI_BASE_URL="${proxyUrl}"`,
|
|
85
|
+
`export OPENAI_API_BASE="${proxyUrl}"`,
|
|
86
|
+
`export CLINE_API_BASE="${proxyUrl}"`,
|
|
87
|
+
`export AIDER_OPENAI_API_BASE="${proxyUrl}"`,
|
|
88
|
+
`export GOOSE_OPENAI_HOST="${proxyUrl}"`,
|
|
89
|
+
`export LLM_BASE_URL="${proxyUrl}"`,
|
|
90
|
+
'',
|
|
91
|
+
].join('\n');
|
|
92
|
+
const tmp = envPath + '.intutic-tmp';
|
|
93
|
+
await fs.writeFile(tmp, content, 'utf-8');
|
|
94
|
+
await fs.rename(tmp, envPath);
|
|
95
|
+
log.info({ action: 'env_sidecar_written', path: envPath }, '.env.intutic sidecar written');
|
|
96
|
+
}
|
|
97
|
+
// ─── Internal ────────────────────────────────────────────────────────
|
|
98
|
+
async function mergeVscodeSettings(settingsPath, keys) {
|
|
99
|
+
let existing = {};
|
|
100
|
+
try {
|
|
101
|
+
const raw = await fs.readFile(settingsPath, 'utf-8');
|
|
102
|
+
// Strip JSON5-style comments before parsing
|
|
103
|
+
const stripped = raw.replace(/\/\/[^\n]*/g, '').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
104
|
+
existing = JSON.parse(stripped);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// No file or parse error — start fresh
|
|
108
|
+
}
|
|
109
|
+
const merged = { ...existing, ...keys };
|
|
110
|
+
await fs.mkdir(path.dirname(settingsPath), { recursive: true });
|
|
111
|
+
const tmp = settingsPath + '.intutic-tmp';
|
|
112
|
+
await fs.writeFile(tmp, JSON.stringify(merged, null, 2) + '\n', 'utf-8');
|
|
113
|
+
await fs.rename(tmp, settingsPath);
|
|
114
|
+
log.debug({ action: 'vscode_settings_merged', path: settingsPath }, 'VS Code settings merged');
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=vscodeSettingsWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscodeSettingsWriter.js","sourceRoot":"","sources":["../../src/harness/vscodeSettingsWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,GAAG,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAA;AAE9C,8CAA8C;AAC9C,SAAS,yBAAyB;IAChC,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAA;QACnG,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAA;QACxF,SAAS,QAAQ;YACf,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAA;IAC9E,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,eAAe,EAAE,qBAAqB,CAAU,CAAA;AACjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,yBAAyB,EAAE,mBAAmB,CAAU,CAAA;AAE5F;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,aAAqB,EACrB,QAAgB;IAEhB,MAAM,IAAI,GAA2B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAA;IACpB,CAAC;IACD,MAAM,mBAAmB,CAAC,yBAAyB,EAAE,EAAE,IAAI,CAAC,CAAA;IAC5D,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAA;IACrF,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,QAAQ,EAAE,EAAE,iDAAiD,CAAC,CAAA;AAC3G,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,aAAqB,EACrB,QAAgB;IAEhB,MAAM,IAAI,GAA2B,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,mBAAmB,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAA;IACpB,CAAC;IACD,MAAM,mBAAmB,CAAC,yBAAyB,EAAE,EAAE,IAAI,CAAC,CAAA;IAC5D,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,CAAA;IACrF,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,EAAE,oDAAoD,CAAC,CAAA;AACjH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;IACtD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;IAErD,MAAM,OAAO,GAAG;QACd,kEAAkE;QAClE,qEAAqE;QACrE,gBAAgB,MAAM,EAAE,EAAE;QAC1B,EAAE;QACF,8BAA8B,QAAQ,GAAG;QACzC,2BAA2B,QAAQ,GAAG;QACtC,2BAA2B,QAAQ,GAAG;QACtC,0BAA0B,QAAQ,GAAG;QACrC,iCAAiC,QAAQ,GAAG;QAC5C,6BAA6B,QAAQ,GAAG;QACxC,wBAAwB,QAAQ,GAAG;QACnC,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEZ,MAAM,GAAG,GAAG,OAAO,GAAG,cAAc,CAAA;IACpC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACzC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,8BAA8B,CAAC,CAAA;AAC5F,CAAC;AAED,wEAAwE;AAExE,KAAK,UAAU,mBAAmB,CAChC,YAAoB,EACpB,IAA4B;IAE5B,IAAI,QAAQ,GAA4B,EAAE,CAAA;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QACpD,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QAChF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAA;IAEvC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/D,MAAM,GAAG,GAAG,YAAY,GAAG,cAAc,CAAA;IACzC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;IACxE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IAClC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,yBAAyB,CAAC,CAAA;AAChG,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* windsurf.ts — Windsurf adapter (full implementation with hooks + TLS MITM proxy config).
|
|
3
|
+
*
|
|
4
|
+
* Writes .windsurfrules governance text and injects Cascade hook scripts
|
|
5
|
+
* at user-level (~/.codeium/windsurf/hooks.json) and workspace-level
|
|
6
|
+
* (.windsurf/hooks.json). Also writes HTTP proxy settings so Windsurf
|
|
7
|
+
* routes its AI traffic through the Intutic TLS MITM proxy.
|
|
8
|
+
*
|
|
9
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import type { IHarnessAdapter } from './types.js';
|
|
13
|
+
export declare const windsurfAdapter: IHarnessAdapter;
|
|
14
|
+
//# sourceMappingURL=windsurf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/harness/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAUjD,eAAO,MAAM,eAAe,EAAE,eA8B7B,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* windsurf.ts — Windsurf adapter (full implementation with hooks + TLS MITM proxy config).
|
|
3
|
+
*
|
|
4
|
+
* Writes .windsurfrules governance text and injects Cascade hook scripts
|
|
5
|
+
* at user-level (~/.codeium/windsurf/hooks.json) and workspace-level
|
|
6
|
+
* (.windsurf/hooks.json). Also writes HTTP proxy settings so Windsurf
|
|
7
|
+
* routes its AI traffic through the Intutic TLS MITM proxy.
|
|
8
|
+
*
|
|
9
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { access } from 'node:fs/promises';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { HarnessType } from '@intutic/shared-types';
|
|
16
|
+
import { hashFile } from '../lib/hash.js';
|
|
17
|
+
import { buildMarkdownContent } from './base.js';
|
|
18
|
+
import { writeWindsurfHooks } from '@intutic/sync-daemon/harness/windsurfHooks';
|
|
19
|
+
import { writeFile, rename, mkdir } from 'node:fs/promises';
|
|
20
|
+
import { dirname } from 'node:path';
|
|
21
|
+
const CONFIG_FILE = '.windsurfrules';
|
|
22
|
+
const WINDSURF_USER_DIR = join(homedir(), '.codeium', 'windsurf');
|
|
23
|
+
export const windsurfAdapter = {
|
|
24
|
+
type: HarnessType.WINDSURF,
|
|
25
|
+
configFileName: CONFIG_FILE,
|
|
26
|
+
async detect(workspaceRoot) {
|
|
27
|
+
for (const marker of [CONFIG_FILE, '.windsurf']) {
|
|
28
|
+
try {
|
|
29
|
+
await access(join(workspaceRoot, marker));
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch { /* fall through */ }
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
await access(WINDSURF_USER_DIR);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
async writeConfig(workspaceRoot, sops, proxyUrl) {
|
|
43
|
+
// 1. Write .windsurfrules markdown governance text
|
|
44
|
+
const filePath = join(workspaceRoot, CONFIG_FILE);
|
|
45
|
+
const content = buildMarkdownContent(sops, proxyUrl);
|
|
46
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
47
|
+
const tmp = filePath + '.intutic-tmp';
|
|
48
|
+
await writeFile(tmp, content, 'utf-8');
|
|
49
|
+
await rename(tmp, filePath);
|
|
50
|
+
// 2. Write Cascade hooks.json at user + workspace level, configure TLS MITM proxy
|
|
51
|
+
const proxyPort = parseInt(process.env.INTUTIC_PROXY_PORT ?? '8877', 10);
|
|
52
|
+
await writeWindsurfHooks(workspaceRoot, proxyUrl, proxyPort);
|
|
53
|
+
return filePath;
|
|
54
|
+
},
|
|
55
|
+
async readCurrentHash(workspaceRoot) {
|
|
56
|
+
try {
|
|
57
|
+
return await hashFile(join(workspaceRoot, CONFIG_FILE));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=windsurf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/harness/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAA;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,WAAW,GAAG,gBAAgB,CAAA;AACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,KAAK,MAAM,MAAM,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC;gBAAC,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;gBAAC,OAAO,IAAI,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAAC,OAAO,IAAI,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAA;QAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,mDAAmD;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACpD,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,GAAG,GAAG,QAAQ,GAAG,cAAc,CAAA;QACrC,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QACtC,MAAM,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAE3B,kFAAkF;QAClF,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAA;QACxE,MAAM,kBAAkB,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAE5D,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,IAAI,CAAC;YAAC,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAA;QAAC,CAAC;IACvF,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client for Intutic control plane API.
|
|
3
|
+
*
|
|
4
|
+
* Uses native fetch() (Node 18+). All requests include
|
|
5
|
+
* Authorization: Bearer <apiKey> header.
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import type { SyncConfigPayload, DaemonStatus, SopHashReport } from '@intutic/shared-types';
|
|
11
|
+
/** API client for control plane communication. */
|
|
12
|
+
export interface ApiClient {
|
|
13
|
+
fetchConfig(workspaceId: string): Promise<SyncConfigPayload>;
|
|
14
|
+
reportStatus(status: DaemonStatus): Promise<{
|
|
15
|
+
ack: boolean;
|
|
16
|
+
configVersion: number;
|
|
17
|
+
}>;
|
|
18
|
+
reportHashes(report: SopHashReport): Promise<{
|
|
19
|
+
driftCount: number;
|
|
20
|
+
}>;
|
|
21
|
+
getMe(): Promise<{
|
|
22
|
+
email: string;
|
|
23
|
+
memberId: string;
|
|
24
|
+
workspaceId: string;
|
|
25
|
+
role: string;
|
|
26
|
+
}>;
|
|
27
|
+
login(email: string, password: string): Promise<{
|
|
28
|
+
accessToken: string;
|
|
29
|
+
refreshToken: string;
|
|
30
|
+
workspaceId: string;
|
|
31
|
+
email: string;
|
|
32
|
+
memberId: string;
|
|
33
|
+
}>;
|
|
34
|
+
/** Generic GET request for arbitrary API paths. */
|
|
35
|
+
get<T>(path: string): Promise<T>;
|
|
36
|
+
/** Generic POST request for arbitrary API paths. */
|
|
37
|
+
post<T>(path: string, body?: unknown): Promise<T>;
|
|
38
|
+
/** Generic PUT request for arbitrary API paths. */
|
|
39
|
+
put<T>(path: string, body?: unknown): Promise<T>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create an API client bound to a control plane URL and API key.
|
|
43
|
+
*
|
|
44
|
+
* @param controlPlaneUrl - Base URL (e.g., http://localhost:3001 or https://api.intutic.ai)
|
|
45
|
+
* @param apiKey - API key (vk_*) or JWT access token
|
|
46
|
+
*/
|
|
47
|
+
export declare function createApiClient(controlPlaneUrl: string, apiKey: string): ApiClient;
|
|
48
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,uBAAuB,CAAA;AAE9B,kDAAkD;AAClD,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC5D,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpF,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,KAAK,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxF,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpJ,mDAAmD;IACnD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAChC,oDAAoD;IACpD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACjD,mDAAmD;IACnD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACjD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAuElF"}
|
package/dist/lib/api.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client for Intutic control plane API.
|
|
3
|
+
*
|
|
4
|
+
* Uses native fetch() (Node 18+). All requests include
|
|
5
|
+
* Authorization: Bearer <apiKey> header.
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Create an API client bound to a control plane URL and API key.
|
|
12
|
+
*
|
|
13
|
+
* @param controlPlaneUrl - Base URL (e.g., http://localhost:3001 or https://api.intutic.ai)
|
|
14
|
+
* @param apiKey - API key (vk_*) or JWT access token
|
|
15
|
+
*/
|
|
16
|
+
export function createApiClient(controlPlaneUrl, apiKey) {
|
|
17
|
+
const headers = {
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
20
|
+
};
|
|
21
|
+
async function request(method, path, body) {
|
|
22
|
+
const url = `${controlPlaneUrl}${path}`;
|
|
23
|
+
const res = await fetch(url, {
|
|
24
|
+
method,
|
|
25
|
+
headers,
|
|
26
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
27
|
+
});
|
|
28
|
+
if (!res.ok) {
|
|
29
|
+
const text = await res.text().catch(() => 'Unknown error');
|
|
30
|
+
throw new Error(`API ${method} ${path} failed (${res.status}): ${text}`);
|
|
31
|
+
}
|
|
32
|
+
const data = await res.json();
|
|
33
|
+
if (data &&
|
|
34
|
+
typeof data === 'object' &&
|
|
35
|
+
'format' in data &&
|
|
36
|
+
data.format === 'toon' &&
|
|
37
|
+
typeof data.data === 'string' &&
|
|
38
|
+
typeof data.listProperty === 'string') {
|
|
39
|
+
const decoded = toonDecode(data.data);
|
|
40
|
+
data[data.listProperty] = decoded;
|
|
41
|
+
delete data.format;
|
|
42
|
+
delete data.data;
|
|
43
|
+
delete data.listProperty;
|
|
44
|
+
}
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
async fetchConfig(workspaceId) {
|
|
49
|
+
return request('POST', '/api/v1/sync/config', { workspaceId });
|
|
50
|
+
},
|
|
51
|
+
async reportStatus(status) {
|
|
52
|
+
return request('POST', '/api/v1/sync/status', status);
|
|
53
|
+
},
|
|
54
|
+
async reportHashes(report) {
|
|
55
|
+
return request('POST', '/api/v1/sync/sop-hash', report);
|
|
56
|
+
},
|
|
57
|
+
async getMe() {
|
|
58
|
+
return request('GET', '/api/v1/auth/me');
|
|
59
|
+
},
|
|
60
|
+
async login(email, password) {
|
|
61
|
+
return request('POST', '/api/v1/auth/login', { email, password });
|
|
62
|
+
},
|
|
63
|
+
async get(path) {
|
|
64
|
+
return request('GET', path);
|
|
65
|
+
},
|
|
66
|
+
async post(path, body) {
|
|
67
|
+
return request('POST', path, body);
|
|
68
|
+
},
|
|
69
|
+
async put(path, body) {
|
|
70
|
+
return request('PUT', path, body);
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function toonDecode(toon) {
|
|
75
|
+
const lines = toon.trimEnd().split('\n');
|
|
76
|
+
if (lines.length < 1)
|
|
77
|
+
return [];
|
|
78
|
+
const header = lines[0];
|
|
79
|
+
if (!header.startsWith('TOON|'))
|
|
80
|
+
return [];
|
|
81
|
+
const colsStr = header.slice(5); // 'TOON|'.length
|
|
82
|
+
if (colsStr === '(empty)')
|
|
83
|
+
return [];
|
|
84
|
+
const cols = colsStr.split(',');
|
|
85
|
+
const rows = [];
|
|
86
|
+
for (const line of lines.slice(1)) {
|
|
87
|
+
if (!line.trim())
|
|
88
|
+
continue;
|
|
89
|
+
const cells = line
|
|
90
|
+
.replace(/\\\|/g, '\x00')
|
|
91
|
+
.split('|')
|
|
92
|
+
.map((c) => c.split('\x00').join('|').replace(/\\n/g, '\n'));
|
|
93
|
+
const obj = {};
|
|
94
|
+
for (let i = 0; i < cols.length; i++) {
|
|
95
|
+
const raw = cells[i] ?? '-';
|
|
96
|
+
if (raw === '-') {
|
|
97
|
+
obj[cols[i]] = null;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (raw === 't') {
|
|
101
|
+
obj[cols[i]] = true;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (raw === 'f') {
|
|
105
|
+
obj[cols[i]] = false;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const num = Number(raw);
|
|
109
|
+
if (!isNaN(num) && raw !== '') {
|
|
110
|
+
obj[cols[i]] = num;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (raw.startsWith('{') || raw.startsWith('[')) {
|
|
114
|
+
try {
|
|
115
|
+
obj[cols[i]] = JSON.parse(raw);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
/* fall through */
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
obj[cols[i]] = raw;
|
|
123
|
+
}
|
|
124
|
+
rows.push(obj);
|
|
125
|
+
}
|
|
126
|
+
return rows;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface InjectionResult {
|
|
2
|
+
platform: NodeJS.Platform;
|
|
3
|
+
scope: 'system' | 'user';
|
|
4
|
+
vars: string[];
|
|
5
|
+
method: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class PlatformNotSupportedError extends Error {
|
|
8
|
+
constructor(platform: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class ElevationRequiredError extends Error {
|
|
11
|
+
constructor(path: string);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Injects ANTHROPIC_BASE_URL and OPENAI_BASE_URL as persistent env vars.
|
|
15
|
+
*
|
|
16
|
+
* @param proxyUrl - The Intutic proxy URL (e.g. https://proxy.acme.intutic.ai)
|
|
17
|
+
* @returns InjectionResult describing what was done
|
|
18
|
+
*/
|
|
19
|
+
export declare function injectBaseUrlEnvVars(proxyUrl: string): Promise<InjectionResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Removes the injected base URL env vars.
|
|
22
|
+
*/
|
|
23
|
+
export declare function removeBaseUrlEnvVars(): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=envInjector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envInjector.d.ts","sourceRoot":"","sources":["../../src/lib/envInjector.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAG,MAAM,CAAC,QAAQ,CAAA;IAC1B,KAAK,EAAM,QAAQ,GAAG,MAAM,CAAA;IAC5B,IAAI,EAAO,MAAM,EAAE,CAAA;IACnB,MAAM,EAAK,MAAM,CAAA;CAClB;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,QAAQ,EAAE,MAAM;CAI7B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,IAAI,EAAE,MAAM;CAIzB;AA8CD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAwCrF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB1D"}
|