@intutic/sync-daemon 1.10.0 → 2.0.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/README.md +2 -2
- package/dist/agentReporter.d.ts +205 -0
- package/dist/agentReporter.d.ts.map +1 -0
- package/dist/agentReporter.js +394 -0
- package/dist/agentReporter.js.map +1 -0
- package/dist/configReader.d.ts +39 -2
- package/dist/configReader.d.ts.map +1 -1
- package/dist/configReader.js +56 -2
- package/dist/configReader.js.map +1 -1
- package/dist/configWriter.d.ts +51 -1
- package/dist/configWriter.d.ts.map +1 -1
- package/dist/configWriter.js +490 -63
- package/dist/configWriter.js.map +1 -1
- package/dist/harness/antigravityHooks.d.ts.map +1 -1
- package/dist/harness/antigravityHooks.js +33 -55
- package/dist/harness/antigravityHooks.js.map +1 -1
- package/dist/harness/claudeCodeHooks.d.ts +47 -13
- package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
- package/dist/harness/claudeCodeHooks.js +316 -54
- package/dist/harness/claudeCodeHooks.js.map +1 -1
- package/dist/harness/claudeDesktopHooks.d.ts.map +1 -1
- package/dist/harness/claudeDesktopHooks.js +35 -48
- package/dist/harness/claudeDesktopHooks.js.map +1 -1
- package/dist/harness/clineHooks.d.ts.map +1 -1
- package/dist/harness/clineHooks.js +42 -34
- package/dist/harness/clineHooks.js.map +1 -1
- package/dist/harness/codexHooks.d.ts +36 -0
- package/dist/harness/codexHooks.d.ts.map +1 -0
- package/dist/harness/codexHooks.js +227 -0
- package/dist/harness/codexHooks.js.map +1 -0
- package/dist/harness/continueHooks.d.ts +45 -5
- package/dist/harness/continueHooks.d.ts.map +1 -1
- package/dist/harness/continueHooks.js +225 -5
- package/dist/harness/continueHooks.js.map +1 -1
- package/dist/harness/cursorHooks.d.ts +31 -0
- package/dist/harness/cursorHooks.d.ts.map +1 -1
- package/dist/harness/cursorHooks.js +78 -49
- package/dist/harness/cursorHooks.js.map +1 -1
- package/dist/harness/dshHooks.d.ts +198 -0
- package/dist/harness/dshHooks.d.ts.map +1 -0
- package/dist/harness/dshHooks.js +569 -0
- package/dist/harness/dshHooks.js.map +1 -0
- package/dist/harness/gateBody.d.ts +422 -0
- package/dist/harness/gateBody.d.ts.map +1 -0
- package/dist/harness/gateBody.js +1816 -0
- package/dist/harness/gateBody.js.map +1 -0
- package/dist/harness/gateKind.d.ts +164 -0
- package/dist/harness/gateKind.d.ts.map +1 -0
- package/dist/harness/gateKind.js +143 -0
- package/dist/harness/gateKind.js.map +1 -0
- package/dist/harness/githubCopilotHooks.d.ts +54 -0
- package/dist/harness/githubCopilotHooks.d.ts.map +1 -0
- package/dist/harness/githubCopilotHooks.js +218 -0
- package/dist/harness/githubCopilotHooks.js.map +1 -0
- package/dist/harness/gooseHooks.d.ts.map +1 -1
- package/dist/harness/gooseHooks.js +67 -37
- package/dist/harness/gooseHooks.js.map +1 -1
- package/dist/harness/grokHooks.d.ts +77 -0
- package/dist/harness/grokHooks.d.ts.map +1 -0
- package/dist/harness/grokHooks.js +350 -0
- package/dist/harness/grokHooks.js.map +1 -0
- package/dist/harness/hermesHooks.d.ts.map +1 -1
- package/dist/harness/hermesHooks.js +26 -55
- package/dist/harness/hermesHooks.js.map +1 -1
- package/dist/harness/holdRedaction.d.ts +69 -0
- package/dist/harness/holdRedaction.d.ts.map +1 -0
- package/dist/harness/holdRedaction.js +211 -0
- package/dist/harness/holdRedaction.js.map +1 -0
- package/dist/harness/jetbrainsXmlConfig.d.ts +51 -0
- package/dist/harness/jetbrainsXmlConfig.d.ts.map +1 -0
- package/dist/harness/jetbrainsXmlConfig.js +151 -0
- package/dist/harness/jetbrainsXmlConfig.js.map +1 -0
- package/dist/harness/mcpAutoWrite.d.ts +100 -3
- package/dist/harness/mcpAutoWrite.d.ts.map +1 -1
- package/dist/harness/mcpAutoWrite.js +712 -90
- package/dist/harness/mcpAutoWrite.js.map +1 -1
- package/dist/harness/museHooks.d.ts +53 -0
- package/dist/harness/museHooks.d.ts.map +1 -0
- package/dist/harness/museHooks.js +273 -0
- package/dist/harness/museHooks.js.map +1 -0
- package/dist/harness/n8nHooks.d.ts +25 -9
- package/dist/harness/n8nHooks.d.ts.map +1 -1
- package/dist/harness/n8nHooks.js +174 -9
- package/dist/harness/n8nHooks.js.map +1 -1
- package/dist/harness/openCodeHooks.d.ts +93 -0
- package/dist/harness/openCodeHooks.d.ts.map +1 -0
- package/dist/harness/openCodeHooks.js +248 -0
- package/dist/harness/openCodeHooks.js.map +1 -0
- package/dist/harness/openWebuiHooks.d.ts.map +1 -1
- package/dist/harness/openWebuiHooks.js +56 -11
- package/dist/harness/openWebuiHooks.js.map +1 -1
- package/dist/harness/openclawHooks.d.ts.map +1 -1
- package/dist/harness/openclawHooks.js +30 -54
- package/dist/harness/openclawHooks.js.map +1 -1
- package/dist/harness/openhandsHooks.d.ts.map +1 -1
- package/dist/harness/openhandsHooks.js +35 -41
- package/dist/harness/openhandsHooks.js.map +1 -1
- package/dist/harness/piHooks.d.ts.map +1 -1
- package/dist/harness/piHooks.js +31 -58
- package/dist/harness/piHooks.js.map +1 -1
- package/dist/harness/protectedPaths.d.ts +353 -0
- package/dist/harness/protectedPaths.d.ts.map +1 -0
- package/dist/harness/protectedPaths.js +805 -0
- package/dist/harness/protectedPaths.js.map +1 -0
- package/dist/harness/rooCodeHooks.d.ts.map +1 -1
- package/dist/harness/rooCodeHooks.js +34 -48
- package/dist/harness/rooCodeHooks.js.map +1 -1
- package/dist/harness/windsurfHooks.d.ts +72 -0
- package/dist/harness/windsurfHooks.d.ts.map +1 -1
- package/dist/harness/windsurfHooks.js +172 -58
- package/dist/harness/windsurfHooks.js.map +1 -1
- package/dist/harness/windsurfJetBrainsProxy.d.ts +78 -0
- package/dist/harness/windsurfJetBrainsProxy.d.ts.map +1 -0
- package/dist/harness/windsurfJetBrainsProxy.js +159 -0
- package/dist/harness/windsurfJetBrainsProxy.js.map +1 -0
- package/dist/hashReporter.js +1 -1
- package/dist/hashReporter.js.map +1 -1
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/dist/integrityStore.d.ts +0 -8
- package/dist/integrityStore.d.ts.map +1 -1
- package/dist/integrityStore.js +6 -29
- package/dist/integrityStore.js.map +1 -1
- package/dist/lib/approvedBypasses.d.ts +76 -0
- package/dist/lib/approvedBypasses.d.ts.map +1 -0
- package/dist/lib/approvedBypasses.js +140 -0
- package/dist/lib/approvedBypasses.js.map +1 -0
- package/dist/lib/complianceProbes.d.ts.map +1 -1
- package/dist/lib/complianceProbes.js +5 -0
- package/dist/lib/complianceProbes.js.map +1 -1
- package/dist/lib/decisionsDigest.d.ts +99 -0
- package/dist/lib/decisionsDigest.d.ts.map +1 -0
- package/dist/lib/decisionsDigest.js +199 -0
- package/dist/lib/decisionsDigest.js.map +1 -0
- package/dist/lib/egressPolicy.d.ts +69 -0
- package/dist/lib/egressPolicy.d.ts.map +1 -0
- package/dist/lib/egressPolicy.js +126 -0
- package/dist/lib/egressPolicy.js.map +1 -0
- package/dist/lib/gitWorktrees.d.ts +140 -0
- package/dist/lib/gitWorktrees.d.ts.map +1 -0
- package/dist/lib/gitWorktrees.js +191 -0
- package/dist/lib/gitWorktrees.js.map +1 -0
- package/dist/lib/policySnapshot.d.ts +224 -0
- package/dist/lib/policySnapshot.d.ts.map +1 -0
- package/dist/lib/policySnapshot.js +637 -0
- package/dist/lib/policySnapshot.js.map +1 -0
- package/dist/lib/processPoller.d.ts +44 -0
- package/dist/lib/processPoller.d.ts.map +1 -1
- package/dist/lib/processPoller.js +176 -1
- package/dist/lib/processPoller.js.map +1 -1
- package/dist/lib/runtimeEnv.d.ts +8 -0
- package/dist/lib/runtimeEnv.d.ts.map +1 -1
- package/dist/lib/runtimeEnv.js +3 -0
- package/dist/lib/runtimeEnv.js.map +1 -1
- package/dist/localTrajectoryHeuristics.d.ts +51 -0
- package/dist/localTrajectoryHeuristics.d.ts.map +1 -0
- package/dist/localTrajectoryHeuristics.js +90 -0
- package/dist/localTrajectoryHeuristics.js.map +1 -0
- package/dist/sessionReporter.d.ts +70 -0
- package/dist/sessionReporter.d.ts.map +1 -0
- package/dist/sessionReporter.js +140 -0
- package/dist/sessionReporter.js.map +1 -0
- package/dist/skillWriter.d.ts +1 -1
- package/dist/skillWriter.d.ts.map +1 -1
- package/dist/skillWriter.js +5 -2
- package/dist/skillWriter.js.map +1 -1
- package/dist/syncLoop.d.ts +105 -3
- package/dist/syncLoop.d.ts.map +1 -1
- package/dist/syncLoop.js +397 -65
- package/dist/syncLoop.js.map +1 -1
- package/dist/trajectoryMonitor.d.ts +2 -0
- package/dist/trajectoryMonitor.d.ts.map +1 -1
- package/dist/trajectoryMonitor.js +57 -0
- package/dist/trajectoryMonitor.js.map +1 -1
- package/dist/watcher/driftWatcher.d.ts.map +1 -1
- package/dist/watcher/driftWatcher.js +12 -3
- package/dist/watcher/driftWatcher.js.map +1 -1
- package/dist/watcher/settingsGuard.d.ts +23 -0
- package/dist/watcher/settingsGuard.d.ts.map +1 -1
- package/dist/watcher/settingsGuard.js +202 -17
- package/dist/watcher/settingsGuard.js.map +1 -1
- package/package.json +37 -6
- package/dist/brainIndexer.d.ts +0 -51
- package/dist/brainIndexer.d.ts.map +0 -1
- package/dist/brainIndexer.js +0 -148
- package/dist/brainIndexer.js.map +0 -1
- package/dist/harness/cursorHooksJson.d.ts +0 -29
- package/dist/harness/cursorHooksJson.d.ts.map +0 -1
- package/dist/harness/cursorHooksJson.js +0 -130
- package/dist/harness/cursorHooksJson.js.map +0 -1
- package/dist/harness/gooseHooksWriter.d.ts +0 -27
- package/dist/harness/gooseHooksWriter.d.ts.map +0 -1
- package/dist/harness/gooseHooksWriter.js +0 -147
- package/dist/harness/gooseHooksWriter.js.map +0 -1
- package/dist/harness/openhandsHooksWriter.d.ts +0 -23
- package/dist/harness/openhandsHooksWriter.d.ts.map +0 -1
- package/dist/harness/openhandsHooksWriter.js +0 -146
- package/dist/harness/openhandsHooksWriter.js.map +0 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* windsurfJetBrainsProxy.ts — routes the Windsurf JetBrains plugin's
|
|
3
|
+
* Cascade AI traffic through Intutic's TLS MITM proxy, for every installed
|
|
4
|
+
* JetBrains product.
|
|
5
|
+
*
|
|
6
|
+
* # What this configures, and why it takes two files per IDE
|
|
7
|
+
*
|
|
8
|
+
* Unlike Desktop (one fixed `~/.codeium/windsurf/settings.json`), the
|
|
9
|
+
* JetBrains plugin has no config surface of its own for a manual proxy
|
|
10
|
+
* endpoint — confirmed by extracting the plugin's own compiled settings
|
|
11
|
+
* class (`com.codeium.intellij.settings.AppSettingsState`, decompiled from
|
|
12
|
+
* the real `codeium-2.12.27.jar` published on the JetBrains Marketplace,
|
|
13
|
+
* 2026-08-18): its only proxy-related field is `detectProxy` (boolean —
|
|
14
|
+
* exactly the "Detect proxy" toggle
|
|
15
|
+
* docs.devin.ai/desktop/troubleshooting/plugins-enterprise/jetbrains-proxy
|
|
16
|
+
* describes), persisted via `@State(name =
|
|
17
|
+
* "com.codeium.intellij.settings.AppSettingsState", storages =
|
|
18
|
+
* @Storage("CodeiumSettings.xml"))`. There is no `customProxyUrl`-shaped
|
|
19
|
+
* field alongside the plugin's OTHER custom-endpoint fields
|
|
20
|
+
* (`customApiServerUrl`/`customInferenceApiServerUrl`/`customWebsiteUrl`)
|
|
21
|
+
* — those exist, but redirecting to a custom API server is a materially
|
|
22
|
+
* different mechanism (a different backend, not transparent interception
|
|
23
|
+
* of the same traffic) than the TLS-MITM-via-system-proxy model this
|
|
24
|
+
* codebase already uses for every other harness, so this module does not
|
|
25
|
+
* use them.
|
|
26
|
+
*
|
|
27
|
+
* "Detect proxy" makes the plugin use the IDE PLATFORM's own HTTP proxy
|
|
28
|
+
* setting — a SEPARATE file, `proxy.settings.xml`, backing JetBrains
|
|
29
|
+
* Platform's `HttpConfigurable` state (`@Storage("proxy.settings.xml")`,
|
|
30
|
+
* still live in current `intellij-community` source despite being
|
|
31
|
+
* `@Deprecated(forRemoval = true)` in favor of a newer `ProxySettings`
|
|
32
|
+
* API — the deprecated class still persists to this same file today; see
|
|
33
|
+
* the module doc comment in `jetbrainsXmlConfig.ts` for why this module
|
|
34
|
+
* merges rather than overwrites it). So configuring the plugin needs
|
|
35
|
+
* BOTH: `detectProxy=true` in `CodeiumSettings.xml`, and a manual HTTP
|
|
36
|
+
* proxy pointed at Intutic's local port in `proxy.settings.xml`.
|
|
37
|
+
*
|
|
38
|
+
* # Discovery: no fixed path, unlike Desktop
|
|
39
|
+
*
|
|
40
|
+
* The JetBrains plugin ships for every JetBrains product (IntelliJ IDEA,
|
|
41
|
+
* PyCharm, WebStorm, GoLand, CLion, RubyMine, PhpStorm, RustRover,
|
|
42
|
+
* DataSpell, Rider, DataGrip, Android Studio, ...), each with its own
|
|
43
|
+
* `<Product><Version>` config directory under a shared JetBrains root
|
|
44
|
+
* (`~/Library/Application Support/JetBrains` on macOS, `~/.config/
|
|
45
|
+
* JetBrains` on Linux, `%APPDATA%\JetBrains` on Windows — confirmed
|
|
46
|
+
* against JetBrains' own support KB). This module does not enumerate
|
|
47
|
+
* product names; it lists that root's subdirectories and configures ONLY
|
|
48
|
+
* ones that already have an `options/` directory — the signal that this
|
|
49
|
+
* is a real, already-initialized IDE install, not a guess at a product
|
|
50
|
+
* name or version number this codebase should never invent.
|
|
51
|
+
*
|
|
52
|
+
* @module
|
|
53
|
+
*/
|
|
54
|
+
/** The shared JetBrains config root for this OS, or `null` on a platform
|
|
55
|
+
* this module has no confirmed path for (anything but darwin/linux/
|
|
56
|
+
* win32) — callers treat `null` as "nothing to configure," never guess a
|
|
57
|
+
* path. */
|
|
58
|
+
export declare function jetbrainsConfigRoot(): string | null;
|
|
59
|
+
/**
|
|
60
|
+
* Every `<Product><Version>/options` directory under the JetBrains config
|
|
61
|
+
* root that ALREADY EXISTS — never a guessed or newly-created product/
|
|
62
|
+
* version directory. Returns `[]` when the root itself is absent (no
|
|
63
|
+
* JetBrains product ever installed for this user) rather than treating
|
|
64
|
+
* that as an error.
|
|
65
|
+
*/
|
|
66
|
+
export declare function discoverJetBrainsOptionsDirs(): Promise<string[]>;
|
|
67
|
+
/**
|
|
68
|
+
* Configures every installed JetBrains product's HTTP proxy + the
|
|
69
|
+
* Windsurf plugin's `detectProxy` toggle to route through Intutic's local
|
|
70
|
+
* TLS MITM proxy. Never throws: a product whose settings files don't
|
|
71
|
+
* match the shape `jetbrainsXmlConfig.ts` understands is skipped and
|
|
72
|
+
* logged, not corrupted; a system with no JetBrains products installed at
|
|
73
|
+
* all is a normal, silent no-op (this integration is opt-in by
|
|
74
|
+
* installation, the same way the Cisco skill-scanner integration degrades
|
|
75
|
+
* when its binary is absent).
|
|
76
|
+
*/
|
|
77
|
+
export declare function configureJetBrainsWindsurfProxy(proxyPort: number): Promise<void>;
|
|
78
|
+
//# sourceMappingURL=windsurfJetBrainsProxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurfJetBrainsProxy.d.ts","sourceRoot":"","sources":["../../src/harness/windsurfJetBrainsProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAkBH;;;YAGY;AACZ,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAWnD;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBtE;AAgBD;;;;;;;;;GASG;AACH,wBAAsB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCtF"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* windsurfJetBrainsProxy.ts — routes the Windsurf JetBrains plugin's
|
|
3
|
+
* Cascade AI traffic through Intutic's TLS MITM proxy, for every installed
|
|
4
|
+
* JetBrains product.
|
|
5
|
+
*
|
|
6
|
+
* # What this configures, and why it takes two files per IDE
|
|
7
|
+
*
|
|
8
|
+
* Unlike Desktop (one fixed `~/.codeium/windsurf/settings.json`), the
|
|
9
|
+
* JetBrains plugin has no config surface of its own for a manual proxy
|
|
10
|
+
* endpoint — confirmed by extracting the plugin's own compiled settings
|
|
11
|
+
* class (`com.codeium.intellij.settings.AppSettingsState`, decompiled from
|
|
12
|
+
* the real `codeium-2.12.27.jar` published on the JetBrains Marketplace,
|
|
13
|
+
* 2026-08-18): its only proxy-related field is `detectProxy` (boolean —
|
|
14
|
+
* exactly the "Detect proxy" toggle
|
|
15
|
+
* docs.devin.ai/desktop/troubleshooting/plugins-enterprise/jetbrains-proxy
|
|
16
|
+
* describes), persisted via `@State(name =
|
|
17
|
+
* "com.codeium.intellij.settings.AppSettingsState", storages =
|
|
18
|
+
* @Storage("CodeiumSettings.xml"))`. There is no `customProxyUrl`-shaped
|
|
19
|
+
* field alongside the plugin's OTHER custom-endpoint fields
|
|
20
|
+
* (`customApiServerUrl`/`customInferenceApiServerUrl`/`customWebsiteUrl`)
|
|
21
|
+
* — those exist, but redirecting to a custom API server is a materially
|
|
22
|
+
* different mechanism (a different backend, not transparent interception
|
|
23
|
+
* of the same traffic) than the TLS-MITM-via-system-proxy model this
|
|
24
|
+
* codebase already uses for every other harness, so this module does not
|
|
25
|
+
* use them.
|
|
26
|
+
*
|
|
27
|
+
* "Detect proxy" makes the plugin use the IDE PLATFORM's own HTTP proxy
|
|
28
|
+
* setting — a SEPARATE file, `proxy.settings.xml`, backing JetBrains
|
|
29
|
+
* Platform's `HttpConfigurable` state (`@Storage("proxy.settings.xml")`,
|
|
30
|
+
* still live in current `intellij-community` source despite being
|
|
31
|
+
* `@Deprecated(forRemoval = true)` in favor of a newer `ProxySettings`
|
|
32
|
+
* API — the deprecated class still persists to this same file today; see
|
|
33
|
+
* the module doc comment in `jetbrainsXmlConfig.ts` for why this module
|
|
34
|
+
* merges rather than overwrites it). So configuring the plugin needs
|
|
35
|
+
* BOTH: `detectProxy=true` in `CodeiumSettings.xml`, and a manual HTTP
|
|
36
|
+
* proxy pointed at Intutic's local port in `proxy.settings.xml`.
|
|
37
|
+
*
|
|
38
|
+
* # Discovery: no fixed path, unlike Desktop
|
|
39
|
+
*
|
|
40
|
+
* The JetBrains plugin ships for every JetBrains product (IntelliJ IDEA,
|
|
41
|
+
* PyCharm, WebStorm, GoLand, CLion, RubyMine, PhpStorm, RustRover,
|
|
42
|
+
* DataSpell, Rider, DataGrip, Android Studio, ...), each with its own
|
|
43
|
+
* `<Product><Version>` config directory under a shared JetBrains root
|
|
44
|
+
* (`~/Library/Application Support/JetBrains` on macOS, `~/.config/
|
|
45
|
+
* JetBrains` on Linux, `%APPDATA%\JetBrains` on Windows — confirmed
|
|
46
|
+
* against JetBrains' own support KB). This module does not enumerate
|
|
47
|
+
* product names; it lists that root's subdirectories and configures ONLY
|
|
48
|
+
* ones that already have an `options/` directory — the signal that this
|
|
49
|
+
* is a real, already-initialized IDE install, not a guess at a product
|
|
50
|
+
* name or version number this codebase should never invent.
|
|
51
|
+
*
|
|
52
|
+
* @module
|
|
53
|
+
*/
|
|
54
|
+
import * as fs from 'node:fs/promises';
|
|
55
|
+
import * as path from 'node:path';
|
|
56
|
+
import * as os from 'node:os';
|
|
57
|
+
import { createLogger } from '@intutic/logger';
|
|
58
|
+
import { mergeXmlComponentOptions } from './jetbrainsXmlConfig.js';
|
|
59
|
+
const log = createLogger('sync-windsurf-jetbrains-proxy');
|
|
60
|
+
/** The Windsurf plugin's own settings component — see module doc comment. */
|
|
61
|
+
const CODEIUM_SETTINGS_COMPONENT = 'com.codeium.intellij.settings.AppSettingsState';
|
|
62
|
+
const CODEIUM_SETTINGS_FILE = 'CodeiumSettings.xml';
|
|
63
|
+
/** JetBrains Platform's own HTTP proxy state — see module doc comment. */
|
|
64
|
+
const HTTP_CONFIGURABLE_COMPONENT = 'HttpConfigurable';
|
|
65
|
+
const PROXY_SETTINGS_FILE = 'proxy.settings.xml';
|
|
66
|
+
/** The shared JetBrains config root for this OS, or `null` on a platform
|
|
67
|
+
* this module has no confirmed path for (anything but darwin/linux/
|
|
68
|
+
* win32) — callers treat `null` as "nothing to configure," never guess a
|
|
69
|
+
* path. */
|
|
70
|
+
export function jetbrainsConfigRoot() {
|
|
71
|
+
switch (process.platform) {
|
|
72
|
+
case 'darwin':
|
|
73
|
+
return path.join(os.homedir(), 'Library', 'Application Support', 'JetBrains');
|
|
74
|
+
case 'linux':
|
|
75
|
+
return path.join(os.homedir(), '.config', 'JetBrains');
|
|
76
|
+
case 'win32':
|
|
77
|
+
return process.env.APPDATA ? path.join(process.env.APPDATA, 'JetBrains') : null;
|
|
78
|
+
default:
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Every `<Product><Version>/options` directory under the JetBrains config
|
|
84
|
+
* root that ALREADY EXISTS — never a guessed or newly-created product/
|
|
85
|
+
* version directory. Returns `[]` when the root itself is absent (no
|
|
86
|
+
* JetBrains product ever installed for this user) rather than treating
|
|
87
|
+
* that as an error.
|
|
88
|
+
*/
|
|
89
|
+
export async function discoverJetBrainsOptionsDirs() {
|
|
90
|
+
const root = jetbrainsConfigRoot();
|
|
91
|
+
if (!root)
|
|
92
|
+
return [];
|
|
93
|
+
let entries;
|
|
94
|
+
try {
|
|
95
|
+
entries = await fs.readdir(root);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
const dirs = [];
|
|
101
|
+
for (const entry of entries) {
|
|
102
|
+
const optionsDir = path.join(root, entry, 'options');
|
|
103
|
+
try {
|
|
104
|
+
const stat = await fs.stat(optionsDir);
|
|
105
|
+
if (stat.isDirectory())
|
|
106
|
+
dirs.push(optionsDir);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Not a real IDE install (no options/ dir yet) — skip, don't create it.
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return dirs;
|
|
113
|
+
}
|
|
114
|
+
async function readFileOrNull(filePath) {
|
|
115
|
+
try {
|
|
116
|
+
return await fs.readFile(filePath, 'utf-8');
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async function writeFileAtomic(filePath, content) {
|
|
123
|
+
const tmp = filePath + '.intutic-tmp';
|
|
124
|
+
await fs.writeFile(tmp, content, 'utf-8');
|
|
125
|
+
await fs.rename(tmp, filePath);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Configures every installed JetBrains product's HTTP proxy + the
|
|
129
|
+
* Windsurf plugin's `detectProxy` toggle to route through Intutic's local
|
|
130
|
+
* TLS MITM proxy. Never throws: a product whose settings files don't
|
|
131
|
+
* match the shape `jetbrainsXmlConfig.ts` understands is skipped and
|
|
132
|
+
* logged, not corrupted; a system with no JetBrains products installed at
|
|
133
|
+
* all is a normal, silent no-op (this integration is opt-in by
|
|
134
|
+
* installation, the same way the Cisco skill-scanner integration degrades
|
|
135
|
+
* when its binary is absent).
|
|
136
|
+
*/
|
|
137
|
+
export async function configureJetBrainsWindsurfProxy(proxyPort) {
|
|
138
|
+
const optionsDirs = await discoverJetBrainsOptionsDirs();
|
|
139
|
+
if (optionsDirs.length === 0)
|
|
140
|
+
return;
|
|
141
|
+
for (const optionsDir of optionsDirs) {
|
|
142
|
+
const product = path.basename(path.dirname(optionsDir));
|
|
143
|
+
const proxyOk = await mergeXmlComponentOptions(path.join(optionsDir, PROXY_SETTINGS_FILE), HTTP_CONFIGURABLE_COMPONENT, {
|
|
144
|
+
USE_HTTP_PROXY: true,
|
|
145
|
+
USE_PROXY_PAC: false,
|
|
146
|
+
PROXY_TYPE_IS_SOCKS: false,
|
|
147
|
+
PROXY_HOST: '127.0.0.1',
|
|
148
|
+
PROXY_PORT: String(proxyPort),
|
|
149
|
+
}, readFileOrNull, writeFileAtomic);
|
|
150
|
+
const settingsOk = await mergeXmlComponentOptions(path.join(optionsDir, CODEIUM_SETTINGS_FILE), CODEIUM_SETTINGS_COMPONENT, { detectProxy: true }, readFileOrNull, writeFileAtomic);
|
|
151
|
+
if (proxyOk && settingsOk) {
|
|
152
|
+
log.info({ action: 'jetbrains_windsurf_proxy_configured', product, port: proxyPort }, 'Configured JetBrains platform proxy + Windsurf plugin detectProxy');
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
log.warn({ action: 'jetbrains_windsurf_proxy_skipped', product, proxyOk, settingsOk }, 'One or both JetBrains settings files did not match the expected shape — left untouched');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=windsurfJetBrainsProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurfJetBrainsProxy.js","sourceRoot":"","sources":["../../src/harness/windsurfJetBrainsProxy.ts"],"names":[],"mappings":"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"}
|
package/dist/hashReporter.js
CHANGED
package/dist/hashReporter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashReporter.js","sourceRoot":"","sources":["../src/hashReporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAAqB,EACrB,SAAwB,EACxB,eAAuC;IAEvC,MAAM,OAAO,GAAkB,EAAE,CAAA;IAEjC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,CAAC,QAAQ;YAAE,SAAQ,CAAC,mBAAmB;QAE3C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QAC1D,MAAM,YAAY,GAAG,QAAQ,CAAA;QAE7B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAA;YAC5C,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;YACrD,MAAM,OAAO,GAAG,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,SAAS,CAAA;YAE3D,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,YAAY;gBACtB,SAAS;gBACT,aAAa,EAAE,SAAS;gBACxB,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;QAAC,
|
|
1
|
+
{"version":3,"file":"hashReporter.js","sourceRoot":"","sources":["../src/hashReporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAAqB,EACrB,SAAwB,EACxB,eAAuC;IAEvC,MAAM,OAAO,GAAkB,EAAE,CAAA;IAEjC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,CAAC,QAAQ;YAAE,SAAQ,CAAC,mBAAmB;QAE3C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QAC1D,MAAM,YAAY,GAAG,QAAQ,CAAA;QAE7B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAA;YAC5C,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;YACrD,MAAM,OAAO,GAAG,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,SAAS,CAAA;YAE3D,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,YAAY;gBACtB,SAAS;gBACT,aAAa,EAAE,SAAS;gBACxB,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ,EAAE,YAAY;gBACtB,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE;gBAClD,OAAO,EAAE,KAAK;aACf,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACzD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACpE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,21 +12,22 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
|
-
export { startSyncLoop, syncOfflineTraces } from './syncLoop.js';
|
|
15
|
+
export { startSyncLoop, syncOfflineTraces, refreshGateCaches, localHoldTokensFor } from './syncLoop.js';
|
|
16
|
+
export { collectAgentReport, reportAgent, fetchLocalProxyInstanceId } from './agentReporter.js';
|
|
17
|
+
export { startHarnessSession, endAllOpenSessions, readGitInfo } from './sessionReporter.js';
|
|
16
18
|
export type { SyncLoopOptions, SyncResult } from './syncLoop.js';
|
|
17
|
-
export { writeConfigFiles } from './configWriter.js';
|
|
19
|
+
export { writeConfigFiles, loadLocalSopEntries } from './configWriter.js';
|
|
18
20
|
export type { WriteResult } from './configWriter.js';
|
|
19
21
|
export { computeFileHashes, hashFile } from './hashReporter.js';
|
|
20
|
-
export { loadIntegrity, saveIntegrity
|
|
21
|
-
export { BrainIndexer } from './brainIndexer.js';
|
|
22
|
+
export { loadIntegrity, saveIntegrity } from './integrityStore.js';
|
|
22
23
|
export { HARNESS_FILES } from './configWriter.js';
|
|
23
24
|
export { SyncWsClient } from './wsClient.js';
|
|
24
25
|
export type { WsClientOptions } from './wsClient.js';
|
|
25
26
|
export { startWatcher } from './watcher/driftWatcher.js';
|
|
26
|
-
export { updatePreToolUseHooks, parseSopConstraints, drainHookEvents } from './harness/claudeCodeHooks.js';
|
|
27
|
+
export { updatePreToolUseHooks, parseSopConstraints, drainHookEvents, drainReviewRequests, REVIEW_REQUESTS_LOG, REVIEW_REQUESTS_BASENAME, REVIEW_REQUEST_VERSION, } from './harness/claudeCodeHooks.js';
|
|
27
28
|
export type { SopHookConstraints } from './harness/claudeCodeHooks.js';
|
|
28
29
|
export { injectMcpServer } from './harness/mcpAutoWrite.js';
|
|
29
|
-
export { guardSettingsFile } from './watcher/settingsGuard.js';
|
|
30
|
+
export { guardSettingsFile, warnIfDshCoverageGap } from './watcher/settingsGuard.js';
|
|
30
31
|
export { writeAntigravityHooks } from './harness/antigravityHooks.js';
|
|
31
32
|
export { writeClaudeDesktopHooks } from './harness/claudeDesktopHooks.js';
|
|
32
33
|
export { writeRooCodeHooks } from './harness/rooCodeHooks.js';
|
|
@@ -36,8 +37,13 @@ export { writeN8nHooks } from './harness/n8nHooks.js';
|
|
|
36
37
|
export { writeHermesHooks } from './harness/hermesHooks.js';
|
|
37
38
|
export { writeOpenclawHooks } from './harness/openclawHooks.js';
|
|
38
39
|
export { writePiHooks } from './harness/piHooks.js';
|
|
40
|
+
export { writeCodexHooks } from './harness/codexHooks.js';
|
|
41
|
+
export { writeGithubCopilotHooks } from './harness/githubCopilotHooks.js';
|
|
39
42
|
export { writeRuntimeEnv } from './lib/runtimeEnv.js';
|
|
43
|
+
export { refreshPolicySnapshot, writePolicySnapshot, fetchResolvedPolicy, buildSnapshotRules, validateRule, DEFAULT_SNAPSHOT_DIR, DESTRUCTIVE_TIER_SEVERITY, } from './lib/policySnapshot.js';
|
|
40
44
|
export { runComplianceProbes } from './lib/complianceProbes.js';
|
|
41
45
|
export { getActiveAgentProcesses } from './lib/processPoller.js';
|
|
42
46
|
export { TrajectoryMonitor } from './trajectoryMonitor.js';
|
|
47
|
+
export { refreshDecisionsDigest, fetchDecisionsDigest, renderDecisionsMarkdown, renderBoundedSection, injectBoundedSection, DECISIONS_LOG_RELATIVE_PATH, } from './lib/decisionsDigest.js';
|
|
48
|
+
export type { DecisionsDigestEntry, DecisionsDigestResponse, DecisionsDigestOptions, } from './lib/decisionsDigest.js';
|
|
43
49
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEvG,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC3F,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAGpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAGrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAInD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAA;AACjC,YAAY,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,0BAA0B,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -12,17 +12,18 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
|
-
export { startSyncLoop, syncOfflineTraces } from './syncLoop.js';
|
|
16
|
-
export {
|
|
15
|
+
export { startSyncLoop, syncOfflineTraces, refreshGateCaches, localHoldTokensFor } from './syncLoop.js';
|
|
16
|
+
export { collectAgentReport, reportAgent, fetchLocalProxyInstanceId } from './agentReporter.js';
|
|
17
|
+
export { startHarnessSession, endAllOpenSessions, readGitInfo } from './sessionReporter.js';
|
|
18
|
+
export { writeConfigFiles, loadLocalSopEntries } from './configWriter.js';
|
|
17
19
|
export { computeFileHashes, hashFile } from './hashReporter.js';
|
|
18
|
-
export { loadIntegrity, saveIntegrity
|
|
19
|
-
export { BrainIndexer } from './brainIndexer.js';
|
|
20
|
+
export { loadIntegrity, saveIntegrity } from './integrityStore.js';
|
|
20
21
|
export { HARNESS_FILES } from './configWriter.js';
|
|
21
22
|
export { SyncWsClient } from './wsClient.js';
|
|
22
23
|
export { startWatcher } from './watcher/driftWatcher.js';
|
|
23
|
-
export { updatePreToolUseHooks, parseSopConstraints, drainHookEvents } from './harness/claudeCodeHooks.js';
|
|
24
|
+
export { updatePreToolUseHooks, parseSopConstraints, drainHookEvents, drainReviewRequests, REVIEW_REQUESTS_LOG, REVIEW_REQUESTS_BASENAME, REVIEW_REQUEST_VERSION, } from './harness/claudeCodeHooks.js';
|
|
24
25
|
export { injectMcpServer } from './harness/mcpAutoWrite.js';
|
|
25
|
-
export { guardSettingsFile } from './watcher/settingsGuard.js';
|
|
26
|
+
export { guardSettingsFile, warnIfDshCoverageGap } from './watcher/settingsGuard.js';
|
|
26
27
|
// Gap 3 fix — Antigravity (Gemini CLI) hook coverage
|
|
27
28
|
export { writeAntigravityHooks } from './harness/antigravityHooks.js';
|
|
28
29
|
// WS-B — new harness hook coverage (claude-desktop, roo-code, continue, open-webui, n8n)
|
|
@@ -35,9 +36,16 @@ export { writeN8nHooks } from './harness/n8nHooks.js';
|
|
|
35
36
|
export { writeHermesHooks } from './harness/hermesHooks.js';
|
|
36
37
|
export { writeOpenclawHooks } from './harness/openclawHooks.js';
|
|
37
38
|
export { writePiHooks } from './harness/piHooks.js';
|
|
39
|
+
// Formerly ungated harnesses with verified native mechanisms
|
|
40
|
+
// (codex: ~/.codex/hooks.json; github-copilot: VS Code agent hooks, Preview)
|
|
41
|
+
export { writeCodexHooks } from './harness/codexHooks.js';
|
|
42
|
+
export { writeGithubCopilotHooks } from './harness/githubCopilotHooks.js';
|
|
38
43
|
// WS-A & WS-F — runtime env writer and compliance probes
|
|
39
44
|
export { writeRuntimeEnv } from './lib/runtimeEnv.js';
|
|
45
|
+
export { refreshPolicySnapshot, writePolicySnapshot, fetchResolvedPolicy, buildSnapshotRules, validateRule, DEFAULT_SNAPSHOT_DIR, DESTRUCTIVE_TIER_SEVERITY, } from './lib/policySnapshot.js';
|
|
40
46
|
export { runComplianceProbes } from './lib/complianceProbes.js';
|
|
41
47
|
export { getActiveAgentProcesses } from './lib/processPoller.js';
|
|
42
48
|
export { TrajectoryMonitor } from './trajectoryMonitor.js';
|
|
49
|
+
// Phase 6 — governed decisions log
|
|
50
|
+
export { refreshDecisionsDigest, fetchDecisionsDigest, renderDecisionsMarkdown, renderBoundedSection, injectBoundedSection, DECISIONS_LOG_RELATIVE_PATH, } from './lib/decisionsDigest.js';
|
|
43
51
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAEvG,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAG3F,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAGzE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAEpF,qDAAqD;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAErE,yFAAyF;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,kEAAkE;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEnD,6DAA6D;AAC7D,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAEzE,yDAAyD;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,mCAAmC;AACnC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,0BAA0B,CAAA"}
|
package/dist/integrityStore.d.ts
CHANGED
|
@@ -32,12 +32,4 @@ export declare function loadIntegrity(workspaceRoot: string): Promise<IntegrityS
|
|
|
32
32
|
* @param store - The IntegrityStore to persist.
|
|
33
33
|
*/
|
|
34
34
|
export declare function saveIntegrity(workspaceRoot: string, store: IntegrityStore): Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Load the local context integrity store from `.intutic/context_integrity.json`.
|
|
37
|
-
*/
|
|
38
|
-
export declare function loadContextIntegrity(workspaceRoot: string): Promise<IntegrityStore | null>;
|
|
39
|
-
/**
|
|
40
|
-
* Save the context integrity store to `.intutic/context_integrity.json`.
|
|
41
|
-
*/
|
|
42
|
-
export declare function saveContextIntegrity(workspaceRoot: string, store: IntegrityStore): Promise<void>;
|
|
43
35
|
//# sourceMappingURL=integrityStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrityStore.d.ts","sourceRoot":"","sources":["../src/integrityStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAQ3D;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqBhC;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAUf
|
|
1
|
+
{"version":3,"file":"integrityStore.d.ts","sourceRoot":"","sources":["../src/integrityStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAQ3D;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqBhC;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
package/dist/integrityStore.js
CHANGED
|
@@ -62,33 +62,10 @@ export async function saveIntegrity(workspaceRoot, store) {
|
|
|
62
62
|
await node_fs.writeFile(tmpPath, content, 'utf-8');
|
|
63
63
|
await node_fs.rename(tmpPath, filePath);
|
|
64
64
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const raw = await node_fs.readFile(filePath, 'utf-8');
|
|
72
|
-
const parsed = JSON.parse(raw);
|
|
73
|
-
if (typeof parsed.files !== 'object') {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
return parsed;
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Save the context integrity store to `.intutic/context_integrity.json`.
|
|
84
|
-
*/
|
|
85
|
-
export async function saveContextIntegrity(workspaceRoot, store) {
|
|
86
|
-
const dir = node_path.join(workspaceRoot, INTUTIC_DIR);
|
|
87
|
-
await node_fs.mkdir(dir, { recursive: true });
|
|
88
|
-
const filePath = node_path.join(dir, 'context_integrity.json');
|
|
89
|
-
const tmpPath = `${filePath}.tmp`;
|
|
90
|
-
const content = JSON.stringify(store, null, 2) + '\n';
|
|
91
|
-
await node_fs.writeFile(tmpPath, content, 'utf-8');
|
|
92
|
-
await node_fs.rename(tmpPath, filePath);
|
|
93
|
-
}
|
|
65
|
+
// `loadContextIntegrity` / `saveContextIntegrity` were removed on 2026-07-30. They
|
|
66
|
+
// had no callers in either repo — not even tests — while
|
|
67
|
+
// `.intutic/context_integrity.json` sat in three harness hook denylists as a
|
|
68
|
+
// protected path. The file was never created, so those hooks guarded nothing. The
|
|
69
|
+
// config integrity store above already hashes every governed file `syncLoop` writes,
|
|
70
|
+
// which is what the second store would have duplicated.
|
|
94
71
|
//# sourceMappingURL=integrityStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrityStore.js","sourceRoot":"","sources":["../src/integrityStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAGtC,yEAAyE;AACzE,MAAM,cAAc,GAAG,gBAAgB,CAAA;AAEvC,8CAA8C;AAC9C,MAAM,WAAW,GAAG,UAAU,CAAA;AAE9B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB;IAErB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;IAE3E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAA;QAEhD,yBAAyB;QACzB,IACE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACrC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YACxC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAChC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,KAAqB;IAErB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE7C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;IAErD,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAClD,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzC,CAAC;
|
|
1
|
+
{"version":3,"file":"integrityStore.js","sourceRoot":"","sources":["../src/integrityStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,WAAW,CAAA;AAGtC,yEAAyE;AACzE,MAAM,cAAc,GAAG,gBAAgB,CAAA;AAEvC,8CAA8C;AAC9C,MAAM,WAAW,GAAG,UAAU,CAAA;AAE9B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB;IAErB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;IAE3E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAA;QAEhD,yBAAyB;QACzB,IACE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACrC,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YACxC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAChC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,KAAqB;IAErB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE7C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAA;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;IAErD,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAClD,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzC,CAAC;AAGD,mFAAmF;AACnF,yDAAyD;AACzD,6EAA6E;AAC7E,kFAAkF;AAClF,qFAAqF;AACrF,wDAAwD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* approvedBypasses.ts — ships approved `review_before` bypasses *to* the
|
|
3
|
+
* machine, mirroring how `policySnapshot.ts` ships policy.
|
|
4
|
+
*
|
|
5
|
+
* # Why a separate file from policySnapshot.ts
|
|
6
|
+
*
|
|
7
|
+
* A bypass entry is not a rule: it is a one-time, per-call approval keyed on
|
|
8
|
+
* (workspace, SOP rule id, normalised tool name, hashed command/target), with
|
|
9
|
+
* its own TTL, and it is additive in the *opposite* direction from a policy
|
|
10
|
+
* rule — a policy snapshot can only turn an allow into a block, this cache can
|
|
11
|
+
* only turn one already-held call into an allow, for the one caller who
|
|
12
|
+
* already approved it. Folding the two into one artifact would make either
|
|
13
|
+
* "what does this line do" or "is this additive in the safe direction"
|
|
14
|
+
* dependent on which column you are looking at.
|
|
15
|
+
*
|
|
16
|
+
* # The contract with the gate
|
|
17
|
+
*
|
|
18
|
+
* `.intutic/hooks/approved-bypasses.jsonl` — same directory as the policy
|
|
19
|
+
* snapshot, and for the same reason: `.intutic/hooks` is already in
|
|
20
|
+
* `UNIVERSAL_PROTECTED_PATHS`, so every gate already refuses an agent's own
|
|
21
|
+
* attempt to write here. Two header lines carry integrity, exactly like the
|
|
22
|
+
* `.rules` projection: `#digest` (sha256 of the JSONL body, first 32 hex
|
|
23
|
+
* chars) and `#workspace` (refused if it does not match the gate's own
|
|
24
|
+
* workspace id). Unlike the policy snapshot there is no `#generated` age
|
|
25
|
+
* check — each line carries its own `expiresAt`, and the gate compares that
|
|
26
|
+
* against wall-clock time on every read. A stale FILE degrades to "fewer
|
|
27
|
+
* valid bypasses" (fail closed toward the hold); it can never resurrect an
|
|
28
|
+
* entry whose own TTL has passed.
|
|
29
|
+
*
|
|
30
|
+
* Only `review_before` gates read this today (claudeCodeHooks.ts's
|
|
31
|
+
* `_intuticApprovedBypass`) — see that module's docstring for why the other
|
|
32
|
+
* harness writers are not wired to it: none of them implement `review_before`
|
|
33
|
+
* holds at all, so there is nothing for a bypass to apply to there yet.
|
|
34
|
+
*
|
|
35
|
+
* @module
|
|
36
|
+
*/
|
|
37
|
+
export declare const DEFAULT_BYPASS_CACHE_DIR: string;
|
|
38
|
+
export declare const APPROVED_BYPASSES_FILE = "approved-bypasses.jsonl";
|
|
39
|
+
/** One approved bypass, as `GET /api/v1/decisions/approved-bypasses` returns it. */
|
|
40
|
+
export interface ApprovedBypassEntry {
|
|
41
|
+
workspaceId: string;
|
|
42
|
+
sopRuleId: string;
|
|
43
|
+
toolNameNormalized: string;
|
|
44
|
+
targetHash: string;
|
|
45
|
+
holdId: string;
|
|
46
|
+
decidedBy: string;
|
|
47
|
+
decidedAt: string;
|
|
48
|
+
expiresAt: string;
|
|
49
|
+
}
|
|
50
|
+
export interface ApprovedBypassOptions {
|
|
51
|
+
controlPlaneUrl: string;
|
|
52
|
+
apiKey: string;
|
|
53
|
+
workspaceId: string;
|
|
54
|
+
/** Override the directory (tests). */
|
|
55
|
+
cacheDir?: string;
|
|
56
|
+
}
|
|
57
|
+
/** Fetches the workspace's currently-approved bypasses. Returns null on any
|
|
58
|
+
* failure — the caller keeps the previous cache file rather than replacing
|
|
59
|
+
* it with nothing, same rule `fetchResolvedPolicy` follows. */
|
|
60
|
+
export declare function fetchApprovedBypasses(opts: ApprovedBypassOptions): Promise<ApprovedBypassEntry[] | null>;
|
|
61
|
+
/** Writes the cache file atomically, digest and workspace header included —
|
|
62
|
+
* same convention as `writePolicySnapshot`. Exported so a test can assert
|
|
63
|
+
* the on-disk shape directly. */
|
|
64
|
+
export declare function writeApprovedBypasses(entries: ApprovedBypassEntry[], workspaceId: string, cacheDir?: string): Promise<{
|
|
65
|
+
digest: string;
|
|
66
|
+
count: number;
|
|
67
|
+
}>;
|
|
68
|
+
/** Fetch and write in one call. Safe to run on every sync cycle. Never
|
|
69
|
+
* throws — a failed poll must not take down the sync loop, and leaves the
|
|
70
|
+
* previous cache in place (stale bypasses still expire on their own TTL,
|
|
71
|
+
* which is what makes that safe). */
|
|
72
|
+
export declare function refreshApprovedBypasses(opts: ApprovedBypassOptions): Promise<{
|
|
73
|
+
digest: string;
|
|
74
|
+
count: number;
|
|
75
|
+
} | null>;
|
|
76
|
+
//# sourceMappingURL=approvedBypasses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvedBypasses.d.ts","sourceRoot":"","sources":["../../src/lib/approvedBypasses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAUH,eAAO,MAAM,wBAAwB,QAA+C,CAAA;AACpF,eAAO,MAAM,sBAAsB,4BAA4B,CAAA;AAE/D,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAmBD;;gEAEgE;AAChE,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,CAmCvC;AAED;;kCAEkC;AAClC,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAiC,GAC1C,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsB5C;AAED;;;sCAGsC;AACtC,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CASnD"}
|