@intutic/sync-daemon 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agentReporter.d.ts +1 -0
- package/dist/agentReporter.d.ts.map +1 -1
- package/dist/configReader.d.ts +44 -22
- package/dist/configReader.d.ts.map +1 -1
- package/dist/configReader.js +70 -44
- package/dist/configReader.js.map +1 -1
- package/dist/configWriter.d.ts +29 -41
- package/dist/configWriter.d.ts.map +1 -1
- package/dist/configWriter.js +26 -637
- package/dist/configWriter.js.map +1 -1
- package/dist/disconnect/harnesses.d.ts +31 -0
- package/dist/disconnect/harnesses.d.ts.map +1 -0
- package/dist/disconnect/harnesses.js +728 -0
- package/dist/disconnect/harnesses.js.map +1 -0
- package/dist/disconnect/index.d.ts +25 -0
- package/dist/disconnect/index.d.ts.map +1 -0
- package/dist/disconnect/index.js +82 -0
- package/dist/disconnect/index.js.map +1 -0
- package/dist/disconnect/mcp.d.ts +60 -0
- package/dist/disconnect/mcp.d.ts.map +1 -0
- package/dist/disconnect/mcp.js +283 -0
- package/dist/disconnect/mcp.js.map +1 -0
- package/dist/disconnect/originals.d.ts +88 -0
- package/dist/disconnect/originals.d.ts.map +1 -0
- package/dist/disconnect/originals.js +257 -0
- package/dist/disconnect/originals.js.map +1 -0
- package/dist/disconnect/plan.d.ts +175 -0
- package/dist/disconnect/plan.d.ts.map +1 -0
- package/dist/disconnect/plan.js +580 -0
- package/dist/disconnect/plan.js.map +1 -0
- package/dist/disconnect/recognise.d.ts +43 -0
- package/dist/disconnect/recognise.d.ts.map +1 -0
- package/dist/disconnect/recognise.js +98 -0
- package/dist/disconnect/recognise.js.map +1 -0
- package/dist/disconnect/tomlLines.d.ts +39 -0
- package/dist/disconnect/tomlLines.d.ts.map +1 -0
- package/dist/disconnect/tomlLines.js +105 -0
- package/dist/disconnect/tomlLines.js.map +1 -0
- package/dist/harness/aiderConfigMerger.d.ts +1 -0
- package/dist/harness/aiderConfigMerger.d.ts.map +1 -1
- package/dist/harness/aiderConfigMerger.js +4 -1
- package/dist/harness/aiderConfigMerger.js.map +1 -1
- package/dist/harness/antigravityHooks.d.ts.map +1 -1
- package/dist/harness/antigravityHooks.js +2 -0
- package/dist/harness/antigravityHooks.js.map +1 -1
- package/dist/harness/claudeCodeHooks.d.ts +1 -2
- package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
- package/dist/harness/claudeCodeHooks.js +19 -6
- package/dist/harness/claudeCodeHooks.js.map +1 -1
- package/dist/harness/claudeDesktopHooks.d.ts +3 -0
- package/dist/harness/claudeDesktopHooks.d.ts.map +1 -1
- package/dist/harness/claudeDesktopHooks.js +3 -1
- package/dist/harness/claudeDesktopHooks.js.map +1 -1
- package/dist/harness/claudeProjectApproval.d.ts +53 -0
- package/dist/harness/claudeProjectApproval.d.ts.map +1 -0
- package/dist/harness/claudeProjectApproval.js +159 -0
- package/dist/harness/claudeProjectApproval.js.map +1 -0
- package/dist/harness/clineHooks.d.ts.map +1 -1
- package/dist/harness/clineHooks.js +3 -0
- package/dist/harness/clineHooks.js.map +1 -1
- package/dist/harness/codexConfigMerger.d.ts.map +1 -1
- package/dist/harness/codexConfigMerger.js +4 -0
- package/dist/harness/codexConfigMerger.js.map +1 -1
- package/dist/harness/codexHooks.d.ts.map +1 -1
- package/dist/harness/codexHooks.js +3 -0
- package/dist/harness/codexHooks.js.map +1 -1
- package/dist/harness/continueConfigMerger.d.ts.map +1 -1
- package/dist/harness/continueConfigMerger.js +4 -0
- package/dist/harness/continueConfigMerger.js.map +1 -1
- package/dist/harness/continueHooks.d.ts.map +1 -1
- package/dist/harness/continueHooks.js +3 -0
- package/dist/harness/continueHooks.js.map +1 -1
- package/dist/harness/cursorHooks.d.ts.map +1 -1
- package/dist/harness/cursorHooks.js +3 -0
- package/dist/harness/cursorHooks.js.map +1 -1
- package/dist/harness/dshHooks.d.ts.map +1 -1
- package/dist/harness/dshHooks.js +7 -0
- package/dist/harness/dshHooks.js.map +1 -1
- package/dist/harness/gateBody.d.ts +11 -2
- package/dist/harness/gateBody.d.ts.map +1 -1
- package/dist/harness/gateBody.js +33 -6
- package/dist/harness/gateBody.js.map +1 -1
- package/dist/harness/githubCopilotHooks.d.ts.map +1 -1
- package/dist/harness/githubCopilotHooks.js +4 -9
- package/dist/harness/githubCopilotHooks.js.map +1 -1
- package/dist/harness/gooseHooks.d.ts +15 -0
- package/dist/harness/gooseHooks.d.ts.map +1 -1
- package/dist/harness/gooseHooks.js +55 -43
- package/dist/harness/gooseHooks.js.map +1 -1
- package/dist/harness/grokHooks.d.ts.map +1 -1
- package/dist/harness/grokHooks.js +9 -12
- package/dist/harness/grokHooks.js.map +1 -1
- package/dist/harness/hermesHooks.d.ts.map +1 -1
- package/dist/harness/hermesHooks.js +7 -2
- package/dist/harness/hermesHooks.js.map +1 -1
- package/dist/harness/holdRedaction.d.ts +4 -1
- package/dist/harness/holdRedaction.d.ts.map +1 -1
- package/dist/harness/holdRedaction.js +32 -8
- package/dist/harness/holdRedaction.js.map +1 -1
- package/dist/harness/jetbrainsXmlConfig.d.ts +20 -0
- package/dist/harness/jetbrainsXmlConfig.d.ts.map +1 -1
- package/dist/harness/jetbrainsXmlConfig.js +39 -18
- package/dist/harness/jetbrainsXmlConfig.js.map +1 -1
- package/dist/harness/mcpAutoWrite.d.ts +39 -17
- package/dist/harness/mcpAutoWrite.d.ts.map +1 -1
- package/dist/harness/mcpAutoWrite.js +189 -71
- package/dist/harness/mcpAutoWrite.js.map +1 -1
- package/dist/harness/museHooks.d.ts.map +1 -1
- package/dist/harness/museHooks.js +6 -2
- package/dist/harness/museHooks.js.map +1 -1
- package/dist/harness/openCodeHooks.d.ts.map +1 -1
- package/dist/harness/openCodeHooks.js +2 -5
- package/dist/harness/openCodeHooks.js.map +1 -1
- package/dist/harness/openWebuiHooks.d.ts.map +1 -1
- package/dist/harness/openWebuiHooks.js +6 -2
- package/dist/harness/openWebuiHooks.js.map +1 -1
- package/dist/harness/openclawHooks.d.ts +5 -0
- package/dist/harness/openclawHooks.d.ts.map +1 -1
- package/dist/harness/openclawHooks.js +3 -1
- package/dist/harness/openclawHooks.js.map +1 -1
- package/dist/harness/openhandsHooks.d.ts +13 -1
- package/dist/harness/openhandsHooks.d.ts.map +1 -1
- package/dist/harness/openhandsHooks.js +106 -56
- package/dist/harness/openhandsHooks.js.map +1 -1
- package/dist/harness/piHooks.d.ts.map +1 -1
- package/dist/harness/piHooks.js +3 -0
- package/dist/harness/piHooks.js.map +1 -1
- package/dist/harness/rooCodeHooks.d.ts.map +1 -1
- package/dist/harness/rooCodeHooks.js +5 -10
- package/dist/harness/rooCodeHooks.js.map +1 -1
- package/dist/harness/windsurfHooks.d.ts +18 -2
- package/dist/harness/windsurfHooks.d.ts.map +1 -1
- package/dist/harness/windsurfHooks.js +37 -7
- package/dist/harness/windsurfHooks.js.map +1 -1
- package/dist/harness/windsurfJetBrainsProxy.d.ts +1 -1
- package/dist/harness/windsurfJetBrainsProxy.d.ts.map +1 -1
- package/dist/harness/windsurfJetBrainsProxy.js +5 -1
- package/dist/harness/windsurfJetBrainsProxy.js.map +1 -1
- package/dist/index.d.ts +9 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/decisionsDigest.d.ts +1 -1
- package/dist/lib/decisionsDigest.js +1 -1
- package/dist/lib/policySnapshot.d.ts +18 -0
- package/dist/lib/policySnapshot.d.ts.map +1 -1
- package/dist/lib/policySnapshot.js +142 -7
- package/dist/lib/policySnapshot.js.map +1 -1
- package/dist/sessionReporter.d.ts +2 -2
- package/dist/sessionReporter.js +2 -2
- package/dist/syncCycle.d.ts +142 -0
- package/dist/syncCycle.d.ts.map +1 -0
- package/dist/syncCycle.js +315 -0
- package/dist/syncCycle.js.map +1 -0
- package/dist/trajectoryMonitor.d.ts +1 -1
- package/dist/trajectoryMonitor.d.ts.map +1 -1
- package/dist/trajectoryMonitor.js +1 -1
- package/dist/trajectoryMonitor.js.map +1 -1
- package/dist/watcher/settingsGuard.d.ts +4 -1
- package/dist/watcher/settingsGuard.d.ts.map +1 -1
- package/dist/watcher/settingsGuard.js +28 -3
- package/dist/watcher/settingsGuard.js.map +1 -1
- package/package.json +5 -5
- package/dist/hashReporter.d.ts +0 -33
- package/dist/hashReporter.d.ts.map +0 -1
- package/dist/hashReporter.js +0 -69
- package/dist/hashReporter.js.map +0 -1
- package/dist/integrityStore.d.ts +0 -35
- package/dist/integrityStore.d.ts.map +0 -1
- package/dist/integrityStore.js +0 -71
- package/dist/integrityStore.js.map +0 -1
- package/dist/lib/gitWorktrees.d.ts +0 -140
- package/dist/lib/gitWorktrees.d.ts.map +0 -1
- package/dist/lib/gitWorktrees.js +0 -191
- package/dist/lib/gitWorktrees.js.map +0 -1
- package/dist/syncLoop.d.ts +0 -172
- package/dist/syncLoop.d.ts.map +0 -1
- package/dist/syncLoop.js +0 -878
- package/dist/syncLoop.js.map +0 -1
|
@@ -20,6 +20,7 @@ import * as fs from 'node:fs/promises';
|
|
|
20
20
|
import * as path from 'node:path';
|
|
21
21
|
import * as os from 'node:os';
|
|
22
22
|
import { createLogger } from '@intutic/logger';
|
|
23
|
+
import { keepOriginal, noteWritten } from '../disconnect/originals.js';
|
|
23
24
|
import { parseDocument, isMap } from 'yaml';
|
|
24
25
|
import { newIso } from '@intutic/id';
|
|
25
26
|
import { emitShellGate, SHELL_EXTRACT, SHELL_FAIL_CLOSED } from './gateBody.js';
|
|
@@ -179,6 +180,9 @@ export async function writeHermesHooks(workspaceRoot, proxyUrl, workspaceId = ''
|
|
|
179
180
|
const envDir = path.join(workspaceRoot, '.intutic', 'env');
|
|
180
181
|
const hermesDir = path.join(os.homedir(), '.hermes');
|
|
181
182
|
const skillsDir = path.join(hermesDir, 'skills', 'intutic-governance');
|
|
183
|
+
const skillPath = path.join(skillsDir, 'SKILL.md');
|
|
184
|
+
await keepOriginal(HERMES_CONFIG, workspaceRoot);
|
|
185
|
+
await keepOriginal(skillPath, workspaceRoot);
|
|
182
186
|
await Promise.all([
|
|
183
187
|
fs.mkdir(globalHookDir, { recursive: true }),
|
|
184
188
|
fs.mkdir(hookEventsDir, { recursive: true }),
|
|
@@ -197,10 +201,11 @@ export async function writeHermesHooks(workspaceRoot, proxyUrl, workspaceId = ''
|
|
|
197
201
|
await mergeHermesConfig(hookScriptPath);
|
|
198
202
|
log.info({ action: 'hermes_config_merged', path: HERMES_CONFIG }, 'Merged Intutic hook into ~/.hermes/config.yaml');
|
|
199
203
|
// ── 4. Write governance skill ──────────────────────────────────────────────
|
|
200
|
-
const
|
|
204
|
+
const skill = buildGovernanceSkill(proxyUrl);
|
|
201
205
|
const tmpSkill = skillPath + '.intutic-tmp';
|
|
202
|
-
await fs.writeFile(tmpSkill,
|
|
206
|
+
await fs.writeFile(tmpSkill, skill, 'utf-8');
|
|
203
207
|
await fs.rename(tmpSkill, skillPath);
|
|
208
|
+
await noteWritten(skillPath, workspaceRoot, skill);
|
|
204
209
|
log.info({ action: 'hermes_skill_written', path: skillPath }, 'Hermes governance skill written');
|
|
205
210
|
// ── 5. Write env snippet ───────────────────────────────────────────────────
|
|
206
211
|
const envSnippet = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermesHooks.js","sourceRoot":"","sources":["../../src/harness/hermesHooks.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hermesHooks.js","sourceRoot":"","sources":["../../src/harness/hermesHooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,11 +42,14 @@ export declare const MAX_SNAPSHOT_BYTES = 32768;
|
|
|
42
42
|
/**
|
|
43
43
|
* Returns a redacted, size-capped copy of `value`.
|
|
44
44
|
*
|
|
45
|
+
* `maxString` caps each string (the middle is dropped); config capture passes
|
|
46
|
+
* `Infinity`, because a captured file is uploaded whole or not at all.
|
|
47
|
+
*
|
|
45
48
|
* Self-contained by contract — see the module docstring. Do not add imports or
|
|
46
49
|
* outer-scope references to this function; `emitRedactor()` asserts it stays
|
|
47
50
|
* closed over nothing.
|
|
48
51
|
*/
|
|
49
|
-
export declare function redactSecrets(value: unknown, depth?: number): unknown;
|
|
52
|
+
export declare function redactSecrets(value: unknown, depth?: number, maxString?: number): unknown;
|
|
50
53
|
/**
|
|
51
54
|
* Emits both functions as standalone JavaScript for the generated hook.
|
|
52
55
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"holdRedaction.d.ts","sourceRoot":"","sources":["../../src/harness/holdRedaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,kFAAkF;AAClF,eAAO,MAAM,UAAU,OAAQ,CAAA;AAC/B,yEAAyE;AACzE,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,gCAAgC;AAChC,eAAO,MAAM,SAAS,KAAK,CAAA;AAC3B,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,QAAS,CAAA;AAExC
|
|
1
|
+
{"version":3,"file":"holdRedaction.d.ts","sourceRoot":"","sources":["../../src/harness/holdRedaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,kFAAkF;AAClF,eAAO,MAAM,UAAU,OAAQ,CAAA;AAC/B,yEAAyE;AACzE,eAAO,MAAM,SAAS,IAAI,CAAA;AAC1B,gCAAgC;AAChC,eAAO,MAAM,SAAS,KAAK,CAAA;AAC3B,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,QAAS,CAAA;AAExC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,EAAE,SAAS,SAAa,GAAG,OAAO,CA6HxF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAsBrC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkB1B"}
|
|
@@ -42,11 +42,14 @@ export const MAX_SNAPSHOT_BYTES = 32_768;
|
|
|
42
42
|
/**
|
|
43
43
|
* Returns a redacted, size-capped copy of `value`.
|
|
44
44
|
*
|
|
45
|
+
* `maxString` caps each string (the middle is dropped); config capture passes
|
|
46
|
+
* `Infinity`, because a captured file is uploaded whole or not at all.
|
|
47
|
+
*
|
|
45
48
|
* Self-contained by contract — see the module docstring. Do not add imports or
|
|
46
49
|
* outer-scope references to this function; `emitRedactor()` asserts it stays
|
|
47
50
|
* closed over nothing.
|
|
48
51
|
*/
|
|
49
|
-
export function redactSecrets(value, depth = 0) {
|
|
52
|
+
export function redactSecrets(value, depth = 0, maxString = MAX_STRING) {
|
|
50
53
|
// Keys whose value is a credential regardless of what it looks like. Matched
|
|
51
54
|
// loosely on purpose: `apiKey`, `api_key`, `X-Api-Key` and `apikey` all occur.
|
|
52
55
|
const SECRET_KEY = /(pass(word|phrase)?|secret|token|api[-_ ]?key|auth(orization)?|credential|private[-_ ]?key|session[-_ ]?id|cookie)/i;
|
|
@@ -62,7 +65,7 @@ export function redactSecrets(value, depth = 0) {
|
|
|
62
65
|
/xox[abprs]-[A-Za-z0-9-]{10,}/g, // Slack
|
|
63
66
|
/AIza[0-9A-Za-z_-]{30,}/g, // Google
|
|
64
67
|
/eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g, // JWT
|
|
65
|
-
|
|
68
|
+
// PEM private keys are handled by redactPem below, not a pattern here.
|
|
66
69
|
// Bare basic-auth in a URL.
|
|
67
70
|
/\/\/[^/\s:@]+:[^/\s:@]+@/g,
|
|
68
71
|
];
|
|
@@ -116,17 +119,38 @@ export function redactSecrets(value, depth = 0) {
|
|
|
116
119
|
// `[redacted]` swallowing the key name does not.
|
|
117
120
|
return copied === 0 ? s : out + s.slice(copied);
|
|
118
121
|
};
|
|
122
|
+
// A PEM private key, header to footer. Scanned rather than matched with one
|
|
123
|
+
// lazy `BEGIN[\s\S]*?END` pattern, which rescans to the end of the text from
|
|
124
|
+
// every header that has no footer: quadratic, and this runs before any
|
|
125
|
+
// length cap. A header with no footer is redacted to the end of the text,
|
|
126
|
+
// because a truncated key is still a key.
|
|
127
|
+
const redactPem = (s) => {
|
|
128
|
+
const BEGIN = /-----BEGIN[A-Z ]*PRIVATE KEY-----/g;
|
|
129
|
+
const END = /-----END[A-Z ]*PRIVATE KEY-----/g;
|
|
130
|
+
let out = '';
|
|
131
|
+
let copied = 0;
|
|
132
|
+
let m;
|
|
133
|
+
while ((m = BEGIN.exec(s)) !== null) {
|
|
134
|
+
out += s.slice(copied, m.index) + '[redacted]';
|
|
135
|
+
END.lastIndex = BEGIN.lastIndex;
|
|
136
|
+
if (END.exec(s) === null)
|
|
137
|
+
return out;
|
|
138
|
+
copied = END.lastIndex;
|
|
139
|
+
BEGIN.lastIndex = copied;
|
|
140
|
+
}
|
|
141
|
+
return copied === 0 ? s : out + s.slice(copied);
|
|
142
|
+
};
|
|
119
143
|
const scrub = (s) => {
|
|
120
|
-
let out = s;
|
|
144
|
+
let out = redactPem(s);
|
|
121
145
|
for (const re of SECRET_VALUE)
|
|
122
146
|
out = out.replace(re, '[redacted]');
|
|
123
147
|
out = redactAssignments(out);
|
|
124
|
-
if (out.length >
|
|
148
|
+
if (out.length > maxString) {
|
|
125
149
|
// Keep both ends. A command's verb is at the front and its target is at
|
|
126
150
|
// the back; truncating the tail throws away the half that identifies what
|
|
127
151
|
// the hold was about.
|
|
128
|
-
const half = Math.floor(
|
|
129
|
-
out = `${out.slice(0, half)}…[${out.length -
|
|
152
|
+
const half = Math.floor(maxString / 2);
|
|
153
|
+
out = `${out.slice(0, half)}…[${out.length - maxString} chars elided]…${out.slice(-half)}`;
|
|
130
154
|
}
|
|
131
155
|
return out;
|
|
132
156
|
};
|
|
@@ -139,7 +163,7 @@ export function redactSecrets(value, depth = 0) {
|
|
|
139
163
|
if (typeof value === 'number' || typeof value === 'boolean')
|
|
140
164
|
return value;
|
|
141
165
|
if (Array.isArray(value)) {
|
|
142
|
-
const kept = value.slice(0, MAX_ARRAY).map((v) => redactSecrets(v, depth + 1));
|
|
166
|
+
const kept = value.slice(0, MAX_ARRAY).map((v) => redactSecrets(v, depth + 1, maxString));
|
|
143
167
|
if (value.length > MAX_ARRAY)
|
|
144
168
|
kept.push(`[${value.length - MAX_ARRAY} more elided]`);
|
|
145
169
|
return kept;
|
|
@@ -147,7 +171,7 @@ export function redactSecrets(value, depth = 0) {
|
|
|
147
171
|
if (typeof value === 'object') {
|
|
148
172
|
const out = {};
|
|
149
173
|
for (const [k, v] of Object.entries(value)) {
|
|
150
|
-
out[k] = SECRET_KEY.test(k) ? '[redacted]' : redactSecrets(v, depth + 1);
|
|
174
|
+
out[k] = SECRET_KEY.test(k) ? '[redacted]' : redactSecrets(v, depth + 1, maxString);
|
|
151
175
|
}
|
|
152
176
|
return out;
|
|
153
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"holdRedaction.js","sourceRoot":"","sources":["../../src/harness/holdRedaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAA;AAC/B,yEAAyE;AACzE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAA;AAC1B,gCAAgC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAA;AAC3B,+CAA+C;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAExC
|
|
1
|
+
{"version":3,"file":"holdRedaction.js","sourceRoot":"","sources":["../../src/harness/holdRedaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,4 +48,24 @@
|
|
|
48
48
|
* at all — refusal, not a guess.
|
|
49
49
|
*/
|
|
50
50
|
export declare function mergeXmlComponentOptions(filePath: string, componentName: string, desiredOptions: Readonly<Record<string, string | boolean>>, readFile: (path: string) => Promise<string | null>, writeFileAtomic: (path: string, content: string) => Promise<void>): Promise<boolean>;
|
|
51
|
+
/** One settings file as {@link parseComponentOptions} reads it. */
|
|
52
|
+
export interface ComponentOptionsFile {
|
|
53
|
+
/** The named component's simple options. */
|
|
54
|
+
options: Record<string, string>;
|
|
55
|
+
/** Everything else inside that component, verbatim (normalised whitespace). */
|
|
56
|
+
extra?: string;
|
|
57
|
+
/** Every other component's block, verbatim, by name. */
|
|
58
|
+
others: Record<string, string>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Reads `componentName`'s simple options from a settings file's text
|
|
62
|
+
* (`null` or empty: a file that does not exist yet). Returns null when the
|
|
63
|
+
* file is not the `<application><component>` shape this module understands.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseComponentOptions(raw: string | null, componentName: string): ComponentOptionsFile | null;
|
|
66
|
+
/**
|
|
67
|
+
* Writes a settings file back in the layout {@link mergeXmlComponentOptions}
|
|
68
|
+
* uses. A component left with no options and nothing else is dropped.
|
|
69
|
+
*/
|
|
70
|
+
export declare function serializeComponentOptions(file: ComponentOptionsFile, componentName: string): string;
|
|
51
71
|
//# sourceMappingURL=jetbrainsXmlConfig.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jetbrainsXmlConfig.d.ts","sourceRoot":"","sources":["../../src/harness/jetbrainsXmlConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAwGH;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAC1D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAClD,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAChE,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"jetbrainsXmlConfig.d.ts","sourceRoot":"","sources":["../../src/harness/jetbrainsXmlConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAwGH;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAC1D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAClD,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAChE,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAS5G;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAanG"}
|
|
@@ -125,27 +125,48 @@ function parseApplicationXml(raw, targetComponentName) {
|
|
|
125
125
|
* at all — refusal, not a guess.
|
|
126
126
|
*/
|
|
127
127
|
export async function mergeXmlComponentOptions(filePath, componentName, desiredOptions, readFile, writeFileAtomic) {
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
if (!parsed.ok)
|
|
128
|
+
const parsed = parseComponentOptions(await readFile(filePath), componentName);
|
|
129
|
+
if (parsed === null)
|
|
131
130
|
return false;
|
|
132
|
-
const options = parsed.target?.simpleOptions ?? new Map();
|
|
133
131
|
for (const [key, value] of Object.entries(desiredOptions)) {
|
|
134
|
-
options
|
|
132
|
+
parsed.options[key] = typeof value === 'boolean' ? String(value) : value;
|
|
135
133
|
}
|
|
136
|
-
|
|
137
|
-
.sort(([a], [b]) => a.localeCompare(b))
|
|
138
|
-
.map(([key, value]) => ` <option name="${escapeXmlAttr(key)}" value="${escapeXmlAttr(value)}" />`)
|
|
139
|
-
.join('\n');
|
|
140
|
-
const extra = parsed.target?.extra;
|
|
141
|
-
const componentBody = extra ? `${optionLines}\n${extra.split('\n').map((l) => ` ${l}`).join('\n')}` : optionLines;
|
|
142
|
-
const componentBlock = ` <component name="${escapeXmlAttr(componentName)}">\n${componentBody}\n </component>`;
|
|
143
|
-
const otherBlocks = [...parsed.otherComponents.entries()]
|
|
144
|
-
.sort(([a], [b]) => a.localeCompare(b))
|
|
145
|
-
.map(([, block]) => ` ${block}`);
|
|
146
|
-
const body = [componentBlock, ...otherBlocks].join('\n');
|
|
147
|
-
const serialized = `<application>\n${body}\n</application>\n`;
|
|
148
|
-
await writeFileAtomic(filePath, serialized);
|
|
134
|
+
await writeFileAtomic(filePath, serializeComponentOptions(parsed, componentName));
|
|
149
135
|
return true;
|
|
150
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Reads `componentName`'s simple options from a settings file's text
|
|
139
|
+
* (`null` or empty: a file that does not exist yet). Returns null when the
|
|
140
|
+
* file is not the `<application><component>` shape this module understands.
|
|
141
|
+
*/
|
|
142
|
+
export function parseComponentOptions(raw, componentName) {
|
|
143
|
+
const parsed = parseApplicationXml(raw, componentName);
|
|
144
|
+
if (!parsed.ok)
|
|
145
|
+
return null;
|
|
146
|
+
const out = {
|
|
147
|
+
options: Object.fromEntries(parsed.target?.simpleOptions ?? new Map()),
|
|
148
|
+
others: Object.fromEntries(parsed.otherComponents),
|
|
149
|
+
};
|
|
150
|
+
if (parsed.target?.extra)
|
|
151
|
+
out.extra = parsed.target.extra;
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Writes a settings file back in the layout {@link mergeXmlComponentOptions}
|
|
156
|
+
* uses. A component left with no options and nothing else is dropped.
|
|
157
|
+
*/
|
|
158
|
+
export function serializeComponentOptions(file, componentName) {
|
|
159
|
+
const optionLines = Object.entries(file.options)
|
|
160
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
161
|
+
.map(([key, value]) => ` <option name="${escapeXmlAttr(key)}" value="${escapeXmlAttr(value)}" />`);
|
|
162
|
+
const extraLines = file.extra ? file.extra.split('\n').map((l) => ` ${l}`) : [];
|
|
163
|
+
const blocks = Object.entries(file.others).map(([name, block]) => [name, ` ${block}`]);
|
|
164
|
+
if (optionLines.length + extraLines.length > 0) {
|
|
165
|
+
const componentBody = [...optionLines, ...extraLines].join('\n');
|
|
166
|
+
blocks.push([componentName, ` <component name="${escapeXmlAttr(componentName)}">\n${componentBody}\n </component>`]);
|
|
167
|
+
}
|
|
168
|
+
// The target component first, then the rest by name: the order the merge has always written.
|
|
169
|
+
blocks.sort(([a], [b]) => (a === componentName ? -1 : b === componentName ? 1 : a.localeCompare(b)));
|
|
170
|
+
return `<application>\n${blocks.map(([, block]) => block).join('\n')}\n</application>\n`;
|
|
171
|
+
}
|
|
151
172
|
//# sourceMappingURL=jetbrainsXmlConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jetbrainsXmlConfig.js","sourceRoot":"","sources":["../../src/harness/jetbrainsXmlConfig.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"jetbrainsXmlConfig.js","sourceRoot":"","sources":["../../src/harness/jetbrainsXmlConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Injects and proxy-wraps MCP server entries in:
|
|
6
6
|
* - Claude Code: ~/.claude.json (user-scope `mcpServers`, and the
|
|
7
|
-
* local-scope `projects[<workspaceRoot>].mcpServers
|
|
7
|
+
* local-scope `projects[<workspaceRoot>].mcpServers`,
|
|
8
|
+
* where the approved servers of the project's
|
|
9
|
+
* `.mcp.json` also get wrapped shadows — the shared
|
|
10
|
+
* `.mcp.json` itself is only read)
|
|
8
11
|
* - Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json
|
|
9
12
|
* - Cursor (global): ~/Library/Application Support/Cursor/User/globalSettings.json
|
|
10
13
|
* - Cursor (project): <workspaceRoot>/.cursor/mcp.json
|
|
@@ -22,8 +25,8 @@
|
|
|
22
25
|
* That is 14 config paths across 11 `HarnessType` values (Cursor, Grok
|
|
23
26
|
* Build and OpenCode each own two paths — global/project for Cursor and
|
|
24
27
|
* OpenCode, user/project for Grok Build). `discoverMcpServers` below reads
|
|
25
|
-
* all fourteen read-only, for reporting
|
|
26
|
-
* thing that writes.
|
|
28
|
+
* all fourteen read-only, for reporting, plus Claude Code's project
|
|
29
|
+
* `.mcp.json`; the injectors above are the only thing that writes.
|
|
27
30
|
*
|
|
28
31
|
* # Grok Build's compat-path overlap — dedup, not a bug
|
|
29
32
|
*
|
|
@@ -69,15 +72,13 @@
|
|
|
69
72
|
* comment used to describe as "left untouched": the entry is rewritten to
|
|
70
73
|
* spawn the SAME proxy binary in bridge mode (`--remote-url`/
|
|
71
74
|
* `--remote-transport`, headers riding in `INTUTIC_REMOTE_HEADERS` env, not
|
|
72
|
-
* argv — `ps` visibility). `__intutic_original`
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* `intutic connect` (tools/cli) AND once per sync-loop iteration
|
|
80
|
-
* (services/sync-daemon/src/syncLoop.ts), so a server a user adds to a harness
|
|
75
|
+
* argv — `ps` visibility). `__intutic_original` keeps the whole pre-wrap
|
|
76
|
+
* entry, stdio or remote, so `classifyEntry` can report the TRUE transport
|
|
77
|
+
* of what got wrapped and `intutic disconnect` can put the entry back
|
|
78
|
+
* exactly.
|
|
79
|
+
*
|
|
80
|
+
* Continuous invariant, not one-shot: `intutic connect` (tools/cli) calls
|
|
81
|
+
* `injectMcpServer` on every sync cycle, so a server a user adds to a harness
|
|
81
82
|
* config after their first `connect` still gets wrapped on the next sync
|
|
82
83
|
* cycle rather than staying invisible to governance forever. Running this
|
|
83
84
|
* every ~30s only works because `writeJsonFile` below is write-if-changed —
|
|
@@ -95,6 +96,12 @@ export interface DiscoveredMcpServer {
|
|
|
95
96
|
harness: string;
|
|
96
97
|
transport: 'stdio' | 'http' | 'sse' | 'unknown';
|
|
97
98
|
wrapped: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Set on a server the harness will start but the proxy cannot govern, with
|
|
101
|
+
* the reason. Today: an approved Claude Code project server that gets no
|
|
102
|
+
* local-scope copy (see `shadowBlocker` and `projectServerApproval`).
|
|
103
|
+
*/
|
|
104
|
+
ungovernedReason?: string;
|
|
98
105
|
}
|
|
99
106
|
/**
|
|
100
107
|
* Resolve the path to the @intutic/mcp-governance-proxy entry point.
|
|
@@ -114,6 +121,19 @@ export interface DiscoveredMcpServer {
|
|
|
114
121
|
* hot path.
|
|
115
122
|
*/
|
|
116
123
|
export declare function resolveProxyBin(workspaceRoot: string): string;
|
|
124
|
+
export declare function claudeDesktopConfigPath(): string;
|
|
125
|
+
export declare function cursorGlobalConfigPath(): string;
|
|
126
|
+
export declare function windsurfConfigPath(): string;
|
|
127
|
+
export declare function continueConfigPath(): string;
|
|
128
|
+
export declare function gooseConfigPath(): string;
|
|
129
|
+
export declare function museConfigPath(): string;
|
|
130
|
+
export declare function grokUserConfigPath(): string;
|
|
131
|
+
/** OpenCode's global config: `$XDG_CONFIG_HOME/opencode/opencode.json`, which
|
|
132
|
+
* is `~/.config/opencode/opencode.json` unless XDG_CONFIG_HOME is set (OpenCode
|
|
133
|
+
* resolves it through xdg-basedir). Only the `.json` spelling — see `injectOpenCode`. */
|
|
134
|
+
export declare function openCodeGlobalConfigPath(): string;
|
|
135
|
+
/** The proxy binary path `resolveProxyBin` returns, in either of its two forms. */
|
|
136
|
+
export declare const PROXY_BIN_PATTERN: RegExp;
|
|
117
137
|
/**
|
|
118
138
|
* Discover every MCP server declared in any harness config this daemon knows
|
|
119
139
|
* how to parse — the same 14 config paths / 11 harnesses `injectMcpServer`
|
|
@@ -139,16 +159,18 @@ export declare function discoverMcpServers(workspaceRoot: string): Promise<Disco
|
|
|
139
159
|
*
|
|
140
160
|
* Non-fatal: a failure in one harness does not prevent other harnesses from being updated.
|
|
141
161
|
*
|
|
142
|
-
* Called
|
|
143
|
-
*
|
|
144
|
-
* (services/sync-daemon/src/syncLoop.ts) so it is a continuous invariant
|
|
145
|
-
* rather than a one-shot — a server a user adds after their first `connect`
|
|
162
|
+
* Called by `intutic connect` (tools/cli) on every sync cycle, so it is a
|
|
163
|
+
* continuous invariant rather than a one-shot — a server a user adds after their first `connect`
|
|
146
164
|
* still gets wrapped on the next cycle. Safe to call every cycle because
|
|
147
165
|
* `writeJsonFile` is write-if-changed: an already-wrapped, unchanged config
|
|
148
166
|
* writes zero bytes.
|
|
149
167
|
*
|
|
150
168
|
* @param workspaceId - The workspace ID for policy lookups and event attribution.
|
|
151
169
|
* @param workspaceRoot - Absolute path to the project workspace root.
|
|
170
|
+
* @param options.skip - Harness ids to leave alone: the ones `intutic
|
|
171
|
+
* disconnect --harness` took out.
|
|
152
172
|
*/
|
|
153
|
-
export declare function injectMcpServer(workspaceRoot: string, workspaceId?: string
|
|
173
|
+
export declare function injectMcpServer(workspaceRoot: string, workspaceId?: string, options?: {
|
|
174
|
+
skip?: readonly string[];
|
|
175
|
+
}): Promise<void>;
|
|
154
176
|
//# sourceMappingURL=mcpAutoWrite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpAutoWrite.d.ts","sourceRoot":"","sources":["../../src/harness/mcpAutoWrite.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcpAutoWrite.d.ts","sourceRoot":"","sources":["../../src/harness/mcpAutoWrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AAgEH;gEACgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAc7D;AAgBD,wBAAgB,uBAAuB,IAAI,MAAM,CAQhD;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAQ/C;AAUD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAMD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAMD;;0FAE0F;AAC1F,wBAAgB,wBAAwB,IAAI,MAAM,CAGjD;AA6yBD,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,QAAoG,CAAA;AA6YlI;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgB9F;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,WAAW,SAAY,EACvB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAO,GACzC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|