@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,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform path resolution for Intutic CLI config.
|
|
3
|
+
*
|
|
4
|
+
* - macOS/Linux: ~/.intutic/
|
|
5
|
+
* - Windows: %APPDATA%\intutic\
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Returns the Intutic config directory path.
|
|
12
|
+
* - macOS/Linux: ~/.intutic/
|
|
13
|
+
* - Windows: %APPDATA%\intutic\
|
|
14
|
+
*/
|
|
15
|
+
export declare function getIntuticDir(): string;
|
|
16
|
+
/** Path to credentials file (~/.intutic/credentials.json). */
|
|
17
|
+
export declare function getCredentialsPath(): string;
|
|
18
|
+
/** Path to workspace config file (~/.intutic/config.json). */
|
|
19
|
+
export declare function getConfigPath(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Path to local integrity store (per-workspace).
|
|
22
|
+
* Located at <workspaceRoot>/.intutic/integrity.json
|
|
23
|
+
*/
|
|
24
|
+
export declare function getIntegrityPath(workspaceRoot: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the control plane URL.
|
|
27
|
+
* If --dev flag or INTUTIC_DEV=1 env var, use localhost:3001.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveControlPlaneUrl(devMode?: boolean): string;
|
|
30
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAStC;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAKhE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform path resolution for Intutic CLI config.
|
|
3
|
+
*
|
|
4
|
+
* - macOS/Linux: ~/.intutic/
|
|
5
|
+
* - Windows: %APPDATA%\intutic\
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { homedir } from 'node:os';
|
|
12
|
+
/**
|
|
13
|
+
* Returns the Intutic config directory path.
|
|
14
|
+
* - macOS/Linux: ~/.intutic/
|
|
15
|
+
* - Windows: %APPDATA%\intutic\
|
|
16
|
+
*/
|
|
17
|
+
export function getIntuticDir() {
|
|
18
|
+
if (process.platform === 'win32') {
|
|
19
|
+
const appData = process.env.APPDATA;
|
|
20
|
+
if (appData)
|
|
21
|
+
return join(appData, 'intutic');
|
|
22
|
+
// Fallback for Windows if APPDATA is not set
|
|
23
|
+
return join(homedir(), 'AppData', 'Roaming', 'intutic');
|
|
24
|
+
}
|
|
25
|
+
// macOS and Linux
|
|
26
|
+
return join(homedir(), '.intutic');
|
|
27
|
+
}
|
|
28
|
+
/** Path to credentials file (~/.intutic/credentials.json). */
|
|
29
|
+
export function getCredentialsPath() {
|
|
30
|
+
return join(getIntuticDir(), 'credentials.json');
|
|
31
|
+
}
|
|
32
|
+
/** Path to workspace config file (~/.intutic/config.json). */
|
|
33
|
+
export function getConfigPath() {
|
|
34
|
+
return join(getIntuticDir(), 'config.json');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Path to local integrity store (per-workspace).
|
|
38
|
+
* Located at <workspaceRoot>/.intutic/integrity.json
|
|
39
|
+
*/
|
|
40
|
+
export function getIntegrityPath(workspaceRoot) {
|
|
41
|
+
return join(workspaceRoot, '.intutic', 'integrity.json');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the control plane URL.
|
|
45
|
+
* If --dev flag or INTUTIC_DEV=1 env var, use localhost:3001.
|
|
46
|
+
*/
|
|
47
|
+
export function resolveControlPlaneUrl(devMode) {
|
|
48
|
+
const isDev = devMode || process.env.INTUTIC_DEV === '1';
|
|
49
|
+
return isDev
|
|
50
|
+
? 'http://localhost:3001'
|
|
51
|
+
: 'https://api.intutic.ai';
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAA;QACnC,IAAI,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAC5C,6CAA6C;QAC7C,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC;IACD,kBAAkB;IAClB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;AACpC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,kBAAkB,CAAC,CAAA;AAClD,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa,CAAC,CAAA;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,aAAqB;IACpD,OAAO,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAA;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAiB;IACtD,MAAM,KAAK,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAA;IACxD,OAAO,KAAK;QACV,CAAC,CAAC,uBAAuB;QACzB,CAAC,CAAC,wBAAwB,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential and config store — reads/writes ~/.intutic/ files.
|
|
3
|
+
*
|
|
4
|
+
* Credentials are stored with mode 0o600 (owner-only read/write).
|
|
5
|
+
* Parent directories are created automatically.
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import type { IntuticCredentials, IntuticConfig, IntegrityStore } from '@intutic/shared-types';
|
|
11
|
+
/** Load stored credentials. Returns null if not found. */
|
|
12
|
+
export declare function loadCredentials(): Promise<IntuticCredentials | null>;
|
|
13
|
+
/** Save credentials with restricted permissions (0o600). */
|
|
14
|
+
export declare function saveCredentials(creds: IntuticCredentials): Promise<void>;
|
|
15
|
+
/** Delete credentials file. */
|
|
16
|
+
export declare function clearCredentials(): Promise<void>;
|
|
17
|
+
/** Load workspace config. Returns null if not found. */
|
|
18
|
+
export declare function loadConfig(): IntuticConfig | null;
|
|
19
|
+
/** Save workspace config. */
|
|
20
|
+
export declare function saveConfig(config: IntuticConfig): void;
|
|
21
|
+
/** Load per-workspace integrity store. Returns null if not found. */
|
|
22
|
+
export declare function loadIntegrity(workspaceRoot: string): IntegrityStore | null;
|
|
23
|
+
/** Save per-workspace integrity store. */
|
|
24
|
+
export declare function saveIntegrity(workspaceRoot: string, store: IntegrityStore): void;
|
|
25
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AA6B9F,0DAA0D;AAC1D,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAW1E;AAED,4DAA4D;AAC5D,wBAAsB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9E;AAED,+BAA+B;AAC/B,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CActD;AAID,wDAAwD;AACxD,wBAAgB,UAAU,IAAI,aAAa,GAAG,IAAI,CAEjD;AAED,6BAA6B;AAC7B,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAEtD;AAID,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAE1E;AAED,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAEhF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential and config store — reads/writes ~/.intutic/ files.
|
|
3
|
+
*
|
|
4
|
+
* Credentials are stored with mode 0o600 (owner-only read/write).
|
|
5
|
+
* Parent directories are created automatically.
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync, writeFileSync, unlinkSync, mkdirSync } from 'node:fs';
|
|
11
|
+
import { dirname } from 'node:path';
|
|
12
|
+
import { getCredentialsPath, getConfigPath, getIntegrityPath } from './paths.js';
|
|
13
|
+
import { storeToken, retrieveToken, deleteToken } from './keychain.js';
|
|
14
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
15
|
+
function ensureDir(filePath) {
|
|
16
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
17
|
+
}
|
|
18
|
+
function readJsonFile(filePath) {
|
|
19
|
+
try {
|
|
20
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
21
|
+
return JSON.parse(content);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function writeJsonFile(filePath, data, mode) {
|
|
28
|
+
ensureDir(filePath);
|
|
29
|
+
writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n', {
|
|
30
|
+
encoding: 'utf-8',
|
|
31
|
+
mode: mode ?? 0o644,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// ─── Credentials ─────────────────────────────────────────────────────
|
|
35
|
+
/** Load stored credentials. Returns null if not found. */
|
|
36
|
+
export async function loadCredentials() {
|
|
37
|
+
const creds = readJsonFile(getCredentialsPath());
|
|
38
|
+
if (!creds)
|
|
39
|
+
return null;
|
|
40
|
+
if (creds.apiKey === 'keychain') {
|
|
41
|
+
const token = await retrieveToken(creds.workspaceId);
|
|
42
|
+
if (token) {
|
|
43
|
+
creds.apiKey = token;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return creds;
|
|
47
|
+
}
|
|
48
|
+
/** Save credentials with restricted permissions (0o600). */
|
|
49
|
+
export async function saveCredentials(creds) {
|
|
50
|
+
const savedToKeychain = await storeToken(creds.workspaceId, creds.apiKey);
|
|
51
|
+
const credsToSave = { ...creds };
|
|
52
|
+
if (savedToKeychain) {
|
|
53
|
+
credsToSave.apiKey = 'keychain';
|
|
54
|
+
}
|
|
55
|
+
writeJsonFile(getCredentialsPath(), credsToSave, 0o600);
|
|
56
|
+
}
|
|
57
|
+
/** Delete credentials file. */
|
|
58
|
+
export async function clearCredentials() {
|
|
59
|
+
try {
|
|
60
|
+
const creds = readJsonFile(getCredentialsPath());
|
|
61
|
+
if (creds) {
|
|
62
|
+
await deleteToken(creds.workspaceId);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Ignore keychain deletion failures
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
unlinkSync(getCredentialsPath());
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// File may not exist — safe to ignore
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// ─── Workspace Config ────────────────────────────────────────────────
|
|
76
|
+
/** Load workspace config. Returns null if not found. */
|
|
77
|
+
export function loadConfig() {
|
|
78
|
+
return readJsonFile(getConfigPath());
|
|
79
|
+
}
|
|
80
|
+
/** Save workspace config. */
|
|
81
|
+
export function saveConfig(config) {
|
|
82
|
+
writeJsonFile(getConfigPath(), config);
|
|
83
|
+
}
|
|
84
|
+
// ─── Integrity Store ─────────────────────────────────────────────────
|
|
85
|
+
/** Load per-workspace integrity store. Returns null if not found. */
|
|
86
|
+
export function loadIntegrity(workspaceRoot) {
|
|
87
|
+
return readJsonFile(getIntegrityPath(workspaceRoot));
|
|
88
|
+
}
|
|
89
|
+
/** Save per-workspace integrity store. */
|
|
90
|
+
export function saveIntegrity(workspaceRoot, store) {
|
|
91
|
+
writeJsonFile(getIntegrityPath(workspaceRoot), store);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* aider.ts — Aider adapter (full implementation with safe YAML merge).
|
|
3
|
+
*
|
|
4
|
+
* Writes SOP content into .aider.conf.yml using the aiderConfigMerger
|
|
5
|
+
* which safely merges proxy keys and strips dangerous auto-exec keys
|
|
6
|
+
* (test-cmd, lint-cmd) that Aider auto-executes on startup.
|
|
7
|
+
*
|
|
8
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import type { IHarnessAdapter } from './types.js';
|
|
12
|
+
export declare const aiderAdapter: IHarnessAdapter;
|
|
13
|
+
//# sourceMappingURL=aider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aider.d.ts","sourceRoot":"","sources":["../../src/harness/aider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAMjD,eAAO,MAAM,YAAY,EAAE,eAiC1B,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* aider.ts — Aider adapter (full implementation with safe YAML merge).
|
|
3
|
+
*
|
|
4
|
+
* Writes SOP content into .aider.conf.yml using the aiderConfigMerger
|
|
5
|
+
* which safely merges proxy keys and strips dangerous auto-exec keys
|
|
6
|
+
* (test-cmd, lint-cmd) that Aider auto-executes on startup.
|
|
7
|
+
*
|
|
8
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { access } from 'node:fs/promises';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { HarnessType } from '@intutic/shared-types';
|
|
14
|
+
import { hashFile } from '../lib/hash.js';
|
|
15
|
+
import { mergeAiderConfig } from '@intutic/sync-daemon/harness/aiderConfigMerger';
|
|
16
|
+
const CONFIG_FILE = '.aider.conf.yml';
|
|
17
|
+
export const aiderAdapter = {
|
|
18
|
+
type: HarnessType.AIDER,
|
|
19
|
+
configFileName: CONFIG_FILE,
|
|
20
|
+
async detect(workspaceRoot) {
|
|
21
|
+
try {
|
|
22
|
+
await access(join(workspaceRoot, CONFIG_FILE));
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
async writeConfig(workspaceRoot, sops, proxyUrl) {
|
|
30
|
+
const filePath = join(workspaceRoot, CONFIG_FILE);
|
|
31
|
+
const sopsText = sops.length > 0
|
|
32
|
+
? sops.map((sop) => `## ${sop.title}\n\n${sop.content}`).join('\n\n---\n\n')
|
|
33
|
+
: undefined;
|
|
34
|
+
// Safe merge: strips test-cmd/lint-cmd, preserves all other user keys,
|
|
35
|
+
// injects proxy URL as openai-api-base and anthropic-api-base
|
|
36
|
+
await mergeAiderConfig(filePath, proxyUrl, sopsText);
|
|
37
|
+
return filePath;
|
|
38
|
+
},
|
|
39
|
+
async readCurrentHash(workspaceRoot) {
|
|
40
|
+
try {
|
|
41
|
+
return await hashFile(join(workspaceRoot, CONFIG_FILE));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=aider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aider.js","sourceRoot":"","sources":["../../src/harness/aider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AAEjF,MAAM,WAAW,GAAG,iBAAiB,CAAA;AAErC,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,IAAI,EAAE,WAAW,CAAC,KAAK;IACvB,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QAEjD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;YAC5E,CAAC,CAAC,SAAS,CAAA;QAEb,uEAAuE;QACvE,8DAA8D;QAC9D,MAAM,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACpD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Antigravity adapter — .gemini/settings.json
|
|
3
|
+
*
|
|
4
|
+
* Merges SOP content into the customInstructions field of the
|
|
5
|
+
* Gemini settings JSON file.
|
|
6
|
+
*
|
|
7
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import type { IHarnessAdapter } from './types.js';
|
|
11
|
+
export declare const antigravityAdapter: IHarnessAdapter;
|
|
12
|
+
//# sourceMappingURL=antigravity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../src/harness/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAMjD,eAAO,MAAM,kBAAkB,EAAE,eAsDhC,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Antigravity adapter — .gemini/settings.json
|
|
3
|
+
*
|
|
4
|
+
* Merges SOP content into the customInstructions field of the
|
|
5
|
+
* Gemini settings JSON file.
|
|
6
|
+
*
|
|
7
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { access, readFile, writeFile, rename, mkdir } from 'node:fs/promises';
|
|
12
|
+
import { dirname } from 'node:path';
|
|
13
|
+
import { HarnessType } from '@intutic/shared-types';
|
|
14
|
+
import { hashFile } from '../lib/hash.js';
|
|
15
|
+
import { newIso } from '@intutic/id';
|
|
16
|
+
const CONFIG_FILE = '.gemini/settings.json';
|
|
17
|
+
export const antigravityAdapter = {
|
|
18
|
+
type: HarnessType.ANTIGRAVITY,
|
|
19
|
+
configFileName: CONFIG_FILE,
|
|
20
|
+
async detect(workspaceRoot) {
|
|
21
|
+
try {
|
|
22
|
+
await access(join(workspaceRoot, '.gemini'));
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
async writeConfig(workspaceRoot, sops, proxyUrl) {
|
|
30
|
+
if (sops.length === 0)
|
|
31
|
+
return null;
|
|
32
|
+
const filePath = join(workspaceRoot, CONFIG_FILE);
|
|
33
|
+
const tmpPath = filePath + '.intutic-tmp';
|
|
34
|
+
// Read existing settings or start fresh
|
|
35
|
+
let settings = {};
|
|
36
|
+
try {
|
|
37
|
+
const existing = await readFile(filePath, 'utf-8');
|
|
38
|
+
settings = JSON.parse(existing);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// No existing file — start fresh
|
|
42
|
+
}
|
|
43
|
+
// Merge governance instructions
|
|
44
|
+
const instructions = sops
|
|
45
|
+
.map((sop) => `## ${sop.title}\n\n${sop.content}`)
|
|
46
|
+
.join('\n\n---\n\n');
|
|
47
|
+
settings.customInstructions = [
|
|
48
|
+
'# Intutic Governance Rules (auto-generated)',
|
|
49
|
+
`# DO NOT EDIT — managed by intutic sync daemon`,
|
|
50
|
+
`# Last sync: ${newIso()}`,
|
|
51
|
+
`# Proxy URL: ${proxyUrl}`,
|
|
52
|
+
'',
|
|
53
|
+
instructions,
|
|
54
|
+
].join('\n');
|
|
55
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
56
|
+
await writeFile(tmpPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
57
|
+
await rename(tmpPath, filePath);
|
|
58
|
+
return filePath;
|
|
59
|
+
},
|
|
60
|
+
async readCurrentHash(workspaceRoot) {
|
|
61
|
+
try {
|
|
62
|
+
return await hashFile(join(workspaceRoot, CONFIG_FILE));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=antigravity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/harness/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,GAAG,uBAAuB,CAAA;AAE3C,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,IAAI,EAAE,WAAW,CAAC,WAAW;IAC7B,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAA;QAEzC,wCAAwC;QACxC,IAAI,QAAQ,GAA4B,EAAE,CAAA;QAC1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAClD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;QAED,gCAAgC;QAChC,MAAM,YAAY,GAAG,IAAI;aACtB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;aACjD,IAAI,CAAC,aAAa,CAAC,CAAA;QAEtB,QAAQ,CAAC,kBAAkB,GAAG;YAC5B,6CAA6C;YAC7C,gDAAgD;YAChD,gBAAgB,MAAM,EAAE,EAAE;YAC1B,gBAAgB,QAAQ,EAAE;YAC1B,EAAE;YACF,YAAY;SACb,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;QAC3E,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC/B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base adapter — shared logic for file-write harnesses.
|
|
3
|
+
*
|
|
4
|
+
* Cursor, Claude Code, Windsurf, and Aider all follow the same
|
|
5
|
+
* pattern: detect by file existence, write markdown/text, hash file.
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import type { HarnessType, SyncSopEntry } from '@intutic/shared-types';
|
|
11
|
+
import type { IHarnessAdapter } from './types.js';
|
|
12
|
+
/** Build markdown content from SOPs (Cursor, Claude Code, Windsurf). */
|
|
13
|
+
export declare function buildMarkdownContent(sops: SyncSopEntry[], proxyUrl: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Create a file-based harness adapter for markdown-style config files.
|
|
16
|
+
*
|
|
17
|
+
* Used by: Cursor (.cursorrules), Claude Code (CLAUDE.md), Windsurf (.windsurfrules)
|
|
18
|
+
*/
|
|
19
|
+
export declare function createMarkdownAdapter(type: HarnessType, configFileName: string): IHarnessAdapter;
|
|
20
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/harness/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAejD,wEAAwE;AACxE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOnF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EACjB,cAAc,EAAE,MAAM,GACrB,eAAe,CAiCjB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base adapter — shared logic for file-write harnesses.
|
|
3
|
+
*
|
|
4
|
+
* Cursor, Claude Code, Windsurf, and Aider all follow the same
|
|
5
|
+
* pattern: detect by file existence, write markdown/text, hash file.
|
|
6
|
+
*
|
|
7
|
+
* LLD #8 — Sync Daemon / CLI
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { access, writeFile, rename, mkdir } from 'node:fs/promises';
|
|
12
|
+
import { dirname } from 'node:path';
|
|
13
|
+
import { hashFile } from '../lib/hash.js';
|
|
14
|
+
import { newIso } from '@intutic/id';
|
|
15
|
+
/** Header prepended to all governance config files. */
|
|
16
|
+
function buildHeader() {
|
|
17
|
+
return [
|
|
18
|
+
'# Intutic Governance Rules (auto-generated)',
|
|
19
|
+
'# DO NOT EDIT — managed by intutic sync daemon',
|
|
20
|
+
`# Last sync: ${newIso()}`,
|
|
21
|
+
'',
|
|
22
|
+
'',
|
|
23
|
+
].join('\n');
|
|
24
|
+
}
|
|
25
|
+
/** Build markdown content from SOPs (Cursor, Claude Code, Windsurf). */
|
|
26
|
+
export function buildMarkdownContent(sops, proxyUrl) {
|
|
27
|
+
const header = buildHeader();
|
|
28
|
+
const proxySection = `> **Proxy URL:** \`${proxyUrl}\`\n\n`;
|
|
29
|
+
const sopSections = sops
|
|
30
|
+
.map((sop) => `## ${sop.title}\n\n${sop.content}`)
|
|
31
|
+
.join('\n\n---\n\n');
|
|
32
|
+
return header + proxySection + sopSections + '\n';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a file-based harness adapter for markdown-style config files.
|
|
36
|
+
*
|
|
37
|
+
* Used by: Cursor (.cursorrules), Claude Code (CLAUDE.md), Windsurf (.windsurfrules)
|
|
38
|
+
*/
|
|
39
|
+
export function createMarkdownAdapter(type, configFileName) {
|
|
40
|
+
return {
|
|
41
|
+
type,
|
|
42
|
+
configFileName,
|
|
43
|
+
async detect(workspaceRoot) {
|
|
44
|
+
try {
|
|
45
|
+
await access(join(workspaceRoot, configFileName));
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
async writeConfig(workspaceRoot, sops, proxyUrl) {
|
|
53
|
+
if (sops.length === 0)
|
|
54
|
+
return null;
|
|
55
|
+
const filePath = join(workspaceRoot, configFileName);
|
|
56
|
+
const tmpPath = filePath + '.intutic-tmp';
|
|
57
|
+
const content = buildMarkdownContent(sops, proxyUrl);
|
|
58
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
59
|
+
await writeFile(tmpPath, content, 'utf-8');
|
|
60
|
+
await rename(tmpPath, filePath);
|
|
61
|
+
return filePath;
|
|
62
|
+
},
|
|
63
|
+
async readCurrentHash(workspaceRoot) {
|
|
64
|
+
try {
|
|
65
|
+
return await hashFile(join(workspaceRoot, configFileName));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/harness/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAY,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,uDAAuD;AACvD,SAAS,WAAW;IAClB,OAAO;QACL,6CAA6C;QAC7C,gDAAgD;QAChD,gBAAgB,MAAM,EAAE,EAAE;QAC1B,EAAE;QACF,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,oBAAoB,CAAC,IAAoB,EAAE,QAAgB;IACzE,MAAM,MAAM,GAAG,WAAW,EAAE,CAAA;IAC5B,MAAM,YAAY,GAAG,sBAAsB,QAAQ,QAAQ,CAAA;IAC3D,MAAM,WAAW,GAAG,IAAI;SACrB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;SACjD,IAAI,CAAC,aAAa,CAAC,CAAA;IACtB,OAAO,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,IAAI,CAAA;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAiB,EACjB,cAAsB;IAEtB,OAAO;QACL,IAAI;QACJ,cAAc;QAEd,KAAK,CAAC,MAAM,CAAC,aAAqB;YAChC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAA;gBACjD,OAAO,IAAI,CAAA;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;YAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;YACpD,MAAM,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAA;YACzC,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACpD,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACnD,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC1C,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YAC/B,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,aAAqB;YACzC,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAA;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeCode.d.ts","sourceRoot":"","sources":["../../src/harness/claudeCode.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,iBAAiB,sCAA8D,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code adapter — CLAUDE.md
|
|
3
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { HarnessType } from '@intutic/shared-types';
|
|
7
|
+
import { createMarkdownAdapter } from './base.js';
|
|
8
|
+
export const claudeCodeAdapter = createMarkdownAdapter(HarnessType.CLAUDE_CODE, 'CLAUDE.md');
|
|
9
|
+
//# sourceMappingURL=claudeCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeCode.js","sourceRoot":"","sources":["../../src/harness/claudeCode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAEjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* claudeDesktop.ts — Claude Desktop adapter (drift guard only).
|
|
3
|
+
*
|
|
4
|
+
* Claude Desktop has no hook system and no proxy override capability.
|
|
5
|
+
* Its config file (claude_desktop_config.json) is writable by any user
|
|
6
|
+
* process, so we register it with the drift watcher to detect tampering
|
|
7
|
+
* (e.g., a malicious MCP server added by another tool).
|
|
8
|
+
*
|
|
9
|
+
* writeConfig() returns null — no governance content can be injected.
|
|
10
|
+
* readCurrentHash() returns the hash of the config file so the drift
|
|
11
|
+
* watcher can detect changes and emit a governance_drift incident.
|
|
12
|
+
*
|
|
13
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import type { IHarnessAdapter } from './types.js';
|
|
17
|
+
export declare const claudeDesktopAdapter: IHarnessAdapter;
|
|
18
|
+
//# sourceMappingURL=claudeDesktop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeDesktop.d.ts","sourceRoot":"","sources":["../../src/harness/claudeDesktop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAiBjD,eAAO,MAAM,oBAAoB,EAAE,eA2BlC,CAAA"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* claudeDesktop.ts — Claude Desktop adapter (drift guard only).
|
|
3
|
+
*
|
|
4
|
+
* Claude Desktop has no hook system and no proxy override capability.
|
|
5
|
+
* Its config file (claude_desktop_config.json) is writable by any user
|
|
6
|
+
* process, so we register it with the drift watcher to detect tampering
|
|
7
|
+
* (e.g., a malicious MCP server added by another tool).
|
|
8
|
+
*
|
|
9
|
+
* writeConfig() returns null — no governance content can be injected.
|
|
10
|
+
* readCurrentHash() returns the hash of the config file so the drift
|
|
11
|
+
* watcher can detect changes and emit a governance_drift incident.
|
|
12
|
+
*
|
|
13
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { access } from 'node:fs/promises';
|
|
17
|
+
import { join } from 'node:path';
|
|
18
|
+
import { homedir } from 'node:os';
|
|
19
|
+
import { HarnessType } from '@intutic/shared-types';
|
|
20
|
+
import { hashFile } from '../lib/hash.js';
|
|
21
|
+
/** Platform-specific path to claude_desktop_config.json. */
|
|
22
|
+
function getClaudeDesktopConfigPath() {
|
|
23
|
+
switch (process.platform) {
|
|
24
|
+
case 'darwin':
|
|
25
|
+
return join(homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
|
|
26
|
+
case 'win32':
|
|
27
|
+
return join(process.env.APPDATA ?? homedir(), 'Claude', 'claude_desktop_config.json');
|
|
28
|
+
default: // linux / WSL
|
|
29
|
+
return join(homedir(), '.config', 'Claude', 'claude_desktop_config.json');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const CONFIG_PATH = getClaudeDesktopConfigPath();
|
|
33
|
+
export const claudeDesktopAdapter = {
|
|
34
|
+
type: HarnessType.CLAUDE_DESKTOP,
|
|
35
|
+
configFileName: CONFIG_PATH,
|
|
36
|
+
async detect(_workspaceRoot) {
|
|
37
|
+
// Check for /Applications/Claude.app (macOS)
|
|
38
|
+
try {
|
|
39
|
+
await access('/Applications/Claude.app');
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch { /* fall through */ }
|
|
43
|
+
// Check for the config file directly
|
|
44
|
+
try {
|
|
45
|
+
await access(CONFIG_PATH);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
/** No governance content can be injected into Claude Desktop. */
|
|
53
|
+
async writeConfig() {
|
|
54
|
+
return null;
|
|
55
|
+
},
|
|
56
|
+
/**
|
|
57
|
+
* Hash the config file so the drift watcher can detect if an
|
|
58
|
+
* unauthorized MCP server entry is added between sync cycles.
|
|
59
|
+
*/
|
|
60
|
+
async readCurrentHash(_workspaceRoot) {
|
|
61
|
+
try {
|
|
62
|
+
return await hashFile(CONFIG_PATH);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=claudeDesktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeDesktop.js","sourceRoot":"","sources":["../../src/harness/claudeDesktop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;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;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,4DAA4D;AAC5D,SAAS,0BAA0B;IACjC,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAA;QAClG,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAA;QACvF,SAAS,cAAc;YACrB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAA;IAC7E,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAG,0BAA0B,EAAE,CAAA;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD,IAAI,EAAE,WAAW,CAAC,cAAc;IAChC,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,cAAsB;QACjC,6CAA6C;QAC7C,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;YAAC,OAAO,IAAI,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC1F,qCAAqC;QACrC,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAAC,OAAO,IAAI,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAA;QAAC,CAAC;IACvE,CAAC;IAED,iEAAiE;IACjE,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,cAAsB;QAC1C,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAA;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cline.ts — Cline adapter (full implementation).
|
|
3
|
+
*
|
|
4
|
+
* Detects the Cline VS Code extension, writes Intutic governance rules
|
|
5
|
+
* as .clinerules (flat file), injects the PreToolUse blocking hook into .cline/hooks/,
|
|
6
|
+
* and configures the proxy base URL via VS Code settings + .env.intutic sidecar.
|
|
7
|
+
*
|
|
8
|
+
* HLD §3.14 — Harness Onboarding Matrix
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import type { IHarnessAdapter } from './types.js';
|
|
12
|
+
export declare const clineAdapter: IHarnessAdapter;
|
|
13
|
+
//# sourceMappingURL=cline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cline.d.ts","sourceRoot":"","sources":["../../src/harness/cline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQjD,eAAO,MAAM,YAAY,EAAE,eA4D1B,CAAA"}
|