@intutic/sync-daemon 2.2.0 → 2.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/README.md +1 -1
- package/dist/agentReporter.d.ts +23 -11
- package/dist/agentReporter.d.ts.map +1 -1
- package/dist/agentReporter.js +20 -13
- package/dist/agentReporter.js.map +1 -1
- package/dist/configReader.d.ts +1 -3
- package/dist/configReader.d.ts.map +1 -1
- package/dist/configReader.js +0 -2
- package/dist/configReader.js.map +1 -1
- package/dist/configWriter.d.ts +11 -12
- package/dist/configWriter.d.ts.map +1 -1
- package/dist/configWriter.js +35 -58
- package/dist/configWriter.js.map +1 -1
- package/dist/disconnect/harnesses.d.ts +0 -2
- package/dist/disconnect/harnesses.d.ts.map +1 -1
- package/dist/disconnect/harnesses.js +157 -80
- package/dist/disconnect/harnesses.js.map +1 -1
- package/dist/disconnect/index.d.ts.map +1 -1
- package/dist/disconnect/index.js +11 -1
- package/dist/disconnect/index.js.map +1 -1
- package/dist/disconnect/mcp.d.ts +21 -0
- package/dist/disconnect/mcp.d.ts.map +1 -1
- package/dist/disconnect/mcp.js +71 -0
- package/dist/disconnect/mcp.js.map +1 -1
- package/dist/disconnect/recognise.d.ts +2 -2
- package/dist/disconnect/recognise.d.ts.map +1 -1
- package/dist/disconnect/recognise.js +15 -5
- package/dist/disconnect/recognise.js.map +1 -1
- package/dist/harness/aiderConfigMerger.d.ts +28 -8
- package/dist/harness/aiderConfigMerger.d.ts.map +1 -1
- package/dist/harness/aiderConfigMerger.js +59 -11
- package/dist/harness/aiderConfigMerger.js.map +1 -1
- package/dist/harness/antigravityCliHooks.d.ts +61 -0
- package/dist/harness/antigravityCliHooks.d.ts.map +1 -0
- package/dist/harness/antigravityCliHooks.js +207 -0
- package/dist/harness/antigravityCliHooks.js.map +1 -0
- package/dist/harness/antigravityHooks.d.ts +12 -2
- package/dist/harness/antigravityHooks.d.ts.map +1 -1
- package/dist/harness/antigravityHooks.js +36 -16
- package/dist/harness/antigravityHooks.js.map +1 -1
- package/dist/harness/antigravityProducts.d.ts +40 -0
- package/dist/harness/antigravityProducts.d.ts.map +1 -0
- package/dist/harness/antigravityProducts.js +109 -0
- package/dist/harness/antigravityProducts.js.map +1 -0
- package/dist/harness/claudeAgentsMd.d.ts +29 -0
- package/dist/harness/claudeAgentsMd.d.ts.map +1 -0
- package/dist/harness/claudeAgentsMd.js +80 -0
- package/dist/harness/claudeAgentsMd.js.map +1 -0
- package/dist/harness/claudeCodeHooks.d.ts +6 -5
- package/dist/harness/claudeCodeHooks.d.ts.map +1 -1
- package/dist/harness/claudeCodeHooks.js +98 -24
- package/dist/harness/claudeCodeHooks.js.map +1 -1
- package/dist/harness/clineHooks.d.ts +0 -1
- package/dist/harness/clineHooks.d.ts.map +1 -1
- package/dist/harness/clineHooks.js +10 -4
- package/dist/harness/clineHooks.js.map +1 -1
- package/dist/harness/codexHooks.d.ts +2 -0
- package/dist/harness/codexHooks.d.ts.map +1 -1
- package/dist/harness/codexHooks.js +12 -4
- package/dist/harness/codexHooks.js.map +1 -1
- package/dist/harness/cursorHooks.d.ts +5 -2
- package/dist/harness/cursorHooks.d.ts.map +1 -1
- package/dist/harness/cursorHooks.js +9 -3
- package/dist/harness/cursorHooks.js.map +1 -1
- package/dist/harness/dshHooks.d.ts +5 -5
- package/dist/harness/dshHooks.d.ts.map +1 -1
- package/dist/harness/dshHooks.js +5 -5
- package/dist/harness/gateArtifacts.d.ts +35 -0
- package/dist/harness/gateArtifacts.d.ts.map +1 -0
- package/dist/harness/gateArtifacts.js +88 -0
- package/dist/harness/gateArtifacts.js.map +1 -0
- package/dist/harness/gateBody.d.ts +186 -69
- package/dist/harness/gateBody.d.ts.map +1 -1
- package/dist/harness/gateBody.js +820 -182
- package/dist/harness/gateBody.js.map +1 -1
- package/dist/harness/gateSightings.d.ts +47 -0
- package/dist/harness/gateSightings.d.ts.map +1 -0
- package/dist/harness/gateSightings.js +159 -0
- package/dist/harness/gateSightings.js.map +1 -0
- package/dist/harness/githubCopilotHooks.d.ts.map +1 -1
- package/dist/harness/githubCopilotHooks.js +7 -1
- package/dist/harness/githubCopilotHooks.js.map +1 -1
- package/dist/harness/gooseHardener.d.ts +0 -1
- package/dist/harness/gooseHardener.d.ts.map +1 -1
- package/dist/harness/gooseHardener.js +1 -1
- package/dist/harness/gooseHardener.js.map +1 -1
- package/dist/harness/gooseHooks.d.ts +14 -1
- package/dist/harness/gooseHooks.d.ts.map +1 -1
- package/dist/harness/gooseHooks.js +55 -29
- package/dist/harness/gooseHooks.js.map +1 -1
- package/dist/harness/grokHooks.d.ts +2 -2
- package/dist/harness/grokHooks.d.ts.map +1 -1
- package/dist/harness/grokHooks.js +11 -6
- package/dist/harness/grokHooks.js.map +1 -1
- package/dist/harness/hermesHooks.d.ts +18 -8
- package/dist/harness/hermesHooks.d.ts.map +1 -1
- package/dist/harness/hermesHooks.js +48 -17
- package/dist/harness/hermesHooks.js.map +1 -1
- package/dist/harness/mcpAutoWrite.d.ts +24 -9
- package/dist/harness/mcpAutoWrite.d.ts.map +1 -1
- package/dist/harness/mcpAutoWrite.js +218 -25
- package/dist/harness/mcpAutoWrite.js.map +1 -1
- package/dist/harness/museHooks.d.ts +3 -3
- package/dist/harness/museHooks.d.ts.map +1 -1
- package/dist/harness/museHooks.js +9 -5
- package/dist/harness/museHooks.js.map +1 -1
- package/dist/harness/n8nHooks.d.ts +0 -1
- package/dist/harness/n8nHooks.d.ts.map +1 -1
- package/dist/harness/n8nHooks.js +4 -1
- package/dist/harness/n8nHooks.js.map +1 -1
- package/dist/harness/openCodeHooks.d.ts +2 -2
- package/dist/harness/openCodeHooks.d.ts.map +1 -1
- package/dist/harness/openCodeHooks.js +7 -3
- package/dist/harness/openCodeHooks.js.map +1 -1
- package/dist/harness/openWebuiHooks.d.ts +0 -1
- package/dist/harness/openWebuiHooks.d.ts.map +1 -1
- package/dist/harness/openWebuiHooks.js +5 -1
- package/dist/harness/openWebuiHooks.js.map +1 -1
- package/dist/harness/openclawHooks.d.ts +70 -18
- package/dist/harness/openclawHooks.d.ts.map +1 -1
- package/dist/harness/openclawHooks.js +213 -161
- package/dist/harness/openclawHooks.js.map +1 -1
- package/dist/harness/openhandsHooks.d.ts +24 -10
- package/dist/harness/openhandsHooks.d.ts.map +1 -1
- package/dist/harness/openhandsHooks.js +49 -48
- package/dist/harness/openhandsHooks.js.map +1 -1
- package/dist/harness/piHooks.d.ts +52 -17
- package/dist/harness/piHooks.d.ts.map +1 -1
- package/dist/harness/piHooks.js +177 -166
- package/dist/harness/piHooks.js.map +1 -1
- package/dist/harness/protectedPaths.d.ts +107 -25
- package/dist/harness/protectedPaths.d.ts.map +1 -1
- package/dist/harness/protectedPaths.js +342 -48
- package/dist/harness/protectedPaths.js.map +1 -1
- package/dist/harness/rulesSection.d.ts +62 -0
- package/dist/harness/rulesSection.d.ts.map +1 -0
- package/dist/harness/rulesSection.js +145 -0
- package/dist/harness/rulesSection.js.map +1 -0
- package/dist/harness/windsurfHooks.d.ts +0 -1
- package/dist/harness/windsurfHooks.d.ts.map +1 -1
- package/dist/harness/windsurfHooks.js +4 -1
- package/dist/harness/windsurfHooks.js.map +1 -1
- package/dist/index.d.ts +12 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -9
- package/dist/index.js.map +1 -1
- package/dist/inventory.d.ts +53 -0
- package/dist/inventory.d.ts.map +1 -0
- package/dist/inventory.js +133 -0
- package/dist/inventory.js.map +1 -0
- package/dist/lib/complianceProbes.d.ts +2 -1
- package/dist/lib/complianceProbes.d.ts.map +1 -1
- package/dist/lib/complianceProbes.js +1 -1
- package/dist/lib/complianceProbes.js.map +1 -1
- package/dist/lib/decisionsDigest.d.ts +34 -16
- package/dist/lib/decisionsDigest.d.ts.map +1 -1
- package/dist/lib/decisionsDigest.js +105 -46
- package/dist/lib/decisionsDigest.js.map +1 -1
- package/dist/lib/egressPolicy.d.ts +2 -2
- package/dist/lib/egressPolicy.js +2 -2
- package/dist/lib/mcpRegistryPy.d.ts +11 -0
- package/dist/lib/mcpRegistryPy.d.ts.map +1 -0
- package/dist/lib/mcpRegistryPy.js +173 -0
- package/dist/lib/mcpRegistryPy.js.map +1 -0
- package/dist/lib/phrasesPy.d.ts +11 -0
- package/dist/lib/phrasesPy.d.ts.map +1 -0
- package/dist/lib/phrasesPy.js +351 -0
- package/dist/lib/phrasesPy.js.map +1 -0
- package/dist/lib/policySnapshot.d.ts +46 -10
- package/dist/lib/policySnapshot.d.ts.map +1 -1
- package/dist/lib/policySnapshot.js +136 -47
- package/dist/lib/policySnapshot.js.map +1 -1
- package/dist/lib/processPoller.d.ts.map +1 -1
- package/dist/lib/processPoller.js +9 -2
- package/dist/lib/processPoller.js.map +1 -1
- package/dist/lib/regexLinearity.d.ts +43 -0
- package/dist/lib/regexLinearity.d.ts.map +1 -0
- package/dist/lib/regexLinearity.js +275 -0
- package/dist/lib/regexLinearity.js.map +1 -0
- package/dist/lib/runtimeEnv.d.ts +1 -3
- package/dist/lib/runtimeEnv.d.ts.map +1 -1
- package/dist/lib/runtimeEnv.js +0 -2
- package/dist/lib/runtimeEnv.js.map +1 -1
- package/dist/lib/sequencePy.d.ts +10 -0
- package/dist/lib/sequencePy.d.ts.map +1 -0
- package/dist/lib/sequencePy.js +102 -0
- package/dist/lib/sequencePy.js.map +1 -0
- package/dist/sessionReporter.d.ts +17 -11
- package/dist/sessionReporter.d.ts.map +1 -1
- package/dist/sessionReporter.js +36 -23
- package/dist/sessionReporter.js.map +1 -1
- package/dist/skillWriter.d.ts +23 -5
- package/dist/skillWriter.d.ts.map +1 -1
- package/dist/skillWriter.js +159 -16
- package/dist/skillWriter.js.map +1 -1
- package/dist/syncCycle.d.ts.map +1 -1
- package/dist/syncCycle.js +21 -9
- package/dist/syncCycle.js.map +1 -1
- package/dist/trajectoryMonitor.d.ts +1 -3
- package/dist/trajectoryMonitor.d.ts.map +1 -1
- package/dist/trajectoryMonitor.js +1 -4
- package/dist/trajectoryMonitor.js.map +1 -1
- package/dist/watcher/driftWatcher.d.ts +0 -1
- package/dist/watcher/driftWatcher.d.ts.map +1 -1
- package/dist/watcher/driftWatcher.js +1 -2
- package/dist/watcher/driftWatcher.js.map +1 -1
- package/dist/watcher/settingsGuard.d.ts +33 -7
- package/dist/watcher/settingsGuard.d.ts.map +1 -1
- package/dist/watcher/settingsGuard.js +373 -61
- package/dist/watcher/settingsGuard.js.map +1 -1
- package/dist/watcher/vscodeHookSettings.d.ts +30 -0
- package/dist/watcher/vscodeHookSettings.d.ts.map +1 -0
- package/dist/watcher/vscodeHookSettings.js +170 -0
- package/dist/watcher/vscodeHookSettings.js.map +1 -0
- package/dist/wsClient.d.ts +0 -1
- package/dist/wsClient.d.ts.map +1 -1
- package/dist/wsClient.js +0 -1
- package/dist/wsClient.js.map +1 -1
- package/package.json +5 -5
- package/dist/harness/claudeDesktopHooks.d.ts +0 -33
- package/dist/harness/claudeDesktopHooks.d.ts.map +0 -1
- package/dist/harness/claudeDesktopHooks.js +0 -256
- package/dist/harness/claudeDesktopHooks.js.map +0 -1
- package/dist/harness/continueHooks.d.ts +0 -63
- package/dist/harness/continueHooks.d.ts.map +0 -1
- package/dist/harness/continueHooks.js +0 -250
- package/dist/harness/continueHooks.js.map +0 -1
- package/dist/harness/gateKind.d.ts +0 -164
- package/dist/harness/gateKind.d.ts.map +0 -1
- package/dist/harness/gateKind.js +0 -144
- package/dist/harness/gateKind.js.map +0 -1
- package/dist/harness/rooCodeHooks.d.ts +0 -31
- package/dist/harness/rooCodeHooks.d.ts.map +0 -1
- package/dist/harness/rooCodeHooks.js +0 -281
- package/dist/harness/rooCodeHooks.js.map +0 -1
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* The hooks file lives within the agent's sandbox working directory,
|
|
8
8
|
* so we also register it with the drift watcher.
|
|
9
9
|
*
|
|
10
|
-
* LLD #14 — Phase 3 cross-harness defence
|
|
11
10
|
* HLD §3.14 — Three-Tier Defense Cascade
|
|
12
11
|
*
|
|
13
12
|
* @module
|
|
@@ -18,10 +17,29 @@ import * as os from 'node:os';
|
|
|
18
17
|
import { createLogger } from '@intutic/logger';
|
|
19
18
|
import { keepOriginal, noteWritten } from '../disconnect/originals.js';
|
|
20
19
|
import { newIso } from '@intutic/id';
|
|
21
|
-
import { emitShellGate, SHELL_EXTRACT,
|
|
20
|
+
import { emitShellGate, SHELL_EXTRACT, emitShellFailClosed } from './gateBody.js';
|
|
22
21
|
import { parse as parseToml } from 'smol-toml';
|
|
23
|
-
import { anthropicBaseUrl, openaiBaseUrl } from '@intutic/shared-types';
|
|
22
|
+
import { anthropicBaseUrl, openaiBaseUrl, HOOK_TIMEOUT_SECONDS } from '@intutic/shared-types';
|
|
24
23
|
const log = createLogger('sync-openhands-hooks');
|
|
24
|
+
/**
|
|
25
|
+
* `.openhands/hooks.json` in the OpenHands SDK's schema (\`HookConfig\`): each
|
|
26
|
+
* event a list of matchers, each with its hook definitions. Earlier versions
|
|
27
|
+
* wrote a flat list of \`{type: 'PreToolUse', command, failClosed}\`, which the
|
|
28
|
+
* SDK cannot load, and had extra top-level keys beside \`hooks\`, which it
|
|
29
|
+
* drops with a warning; the marker that tells disconnect the file is ours is
|
|
30
|
+
* now each hook's \`name\`. OpenHands runs a call whose hook times out, and
|
|
31
|
+
* has no setting to refuse instead, so the gate refuses at its own deadline,
|
|
32
|
+
* inside the \`timeout\` set here (default 60 s).
|
|
33
|
+
*/
|
|
34
|
+
export function openHandsHooksConfig(hookScriptPath) {
|
|
35
|
+
const hook = (command) => ({ type: 'command', name: 'Intutic governance hook', command, timeout: HOOK_TIMEOUT_SECONDS });
|
|
36
|
+
return {
|
|
37
|
+
hooks: {
|
|
38
|
+
PreToolUse: [{ matcher: '*', hooks: [hook(hookScriptPath)] }],
|
|
39
|
+
Stop: [{ matcher: '*', hooks: [hook(`${hookScriptPath} --event stop`)] }],
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
25
43
|
/**
|
|
26
44
|
* Write .openhands/hooks.json and the pre-tool-check shell script.
|
|
27
45
|
* Also points `[llm] base_url` in ~/.openhands/config.toml at the proxy when
|
|
@@ -52,7 +70,7 @@ export async function writeOpenHandsHooks(workspaceRoot, proxyUrl, workspaceId =
|
|
|
52
70
|
# Proxy: ${proxyUrl}
|
|
53
71
|
# Generated: ${newIso()}
|
|
54
72
|
set -euo pipefail
|
|
55
|
-
${
|
|
73
|
+
${emitShellFailClosed('openhands')}
|
|
56
74
|
INPUT="$(cat)"
|
|
57
75
|
${SHELL_EXTRACT}
|
|
58
76
|
|
|
@@ -92,7 +110,11 @@ log_event() {
|
|
|
92
110
|
ws="\${ws//\\\\/\\\\\\\\}"; ws="\${ws//\\"/\\\\\\"}"; ws="\${ws//[\$'\\x01'-\$'\\x1f']/ }"
|
|
93
111
|
local ts; ts="\$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
94
112
|
local incident_id; incident_id="\$(printf '%s' "\${ts}\${tool}\${INTUTIC_WORKSPACE_ID}" | sha1sum 2>/dev/null | cut -c1-16 || echo \"\$(date +%s)\")"
|
|
95
|
-
|
|
113
|
+
# The event's id: random, made once here, and resent with the line it is
|
|
114
|
+
# written into, so the control plane processes the event once.
|
|
115
|
+
local event_id; event_id="\$(od -An -N16 -tx1 /dev/urandom 2>/dev/null | tr -d ' \\n' || true)"
|
|
116
|
+
[ -n "\$event_id" ] || event_id="\$(date +%s)\$\$\${RANDOM}\${RANDOM}\${RANDOM}"
|
|
117
|
+
local entry="{\\"event\\":\\"\${verdict}\\",\\"toolName\\":\\"\${tool}\\",\\"reason\\":\\"\${reason}\\",\\"workspaceId\\":\\"\${ws}\\",\\"harnessType\\":\\"openhands\\",\\"timestamp\\":\\"\${ts}\\",\\"incidentId\\":\\"\${incident_id}\\",\\"eventId\\":\\"\${event_id}\\"}"
|
|
96
118
|
# Path B: reliable file append
|
|
97
119
|
printf '%s\\n' "\$entry" >> "\$HOOK_EVENTS_LOG" 2>/dev/null || true
|
|
98
120
|
# Path A: fire-and-forget HTTP (non-blocking, near-real-time)
|
|
@@ -114,23 +136,7 @@ exit 0
|
|
|
114
136
|
await fs.rename(tmpScript, hookScriptPath);
|
|
115
137
|
await fs.chmod(hookScriptPath, 0o755);
|
|
116
138
|
// ── .openhands/hooks.json ──────────────────────────────────────────
|
|
117
|
-
const
|
|
118
|
-
_comment: 'Intutic governance hooks — auto-generated. DO NOT EDIT.',
|
|
119
|
-
_lastSync: newIso(),
|
|
120
|
-
hooks: [
|
|
121
|
-
{
|
|
122
|
-
type: 'PreToolUse',
|
|
123
|
-
command: hookScriptPath,
|
|
124
|
-
failClosed: true,
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
type: 'Stop',
|
|
128
|
-
command: `${hookScriptPath} --event stop`,
|
|
129
|
-
failClosed: false,
|
|
130
|
-
},
|
|
131
|
-
],
|
|
132
|
-
};
|
|
133
|
-
const hooksJson = JSON.stringify(hooksConfig, null, 2) + '\n';
|
|
139
|
+
const hooksJson = JSON.stringify(openHandsHooksConfig(hookScriptPath), null, 2) + '\n';
|
|
134
140
|
const tmpHooks = hooksPath + '.intutic-tmp';
|
|
135
141
|
await fs.writeFile(tmpHooks, hooksJson, 'utf-8');
|
|
136
142
|
await fs.rename(tmpHooks, hooksPath);
|
|
@@ -138,7 +144,7 @@ exit 0
|
|
|
138
144
|
log.info({ action: 'openhands_hooks_written', path: hooksPath }, 'OpenHands hooks written');
|
|
139
145
|
// ── user-level config.toml llm.base_url ───────────────────────────
|
|
140
146
|
// The workspace config.toml is the adapter's: it merges `[llm] base_url`
|
|
141
|
-
//
|
|
147
|
+
// there (`mergeOpenHandsToml`).
|
|
142
148
|
await mergeUserOpenHandsConfig(proxyUrl);
|
|
143
149
|
}
|
|
144
150
|
/**
|
|
@@ -256,37 +262,32 @@ export function mergeOpenHandsBaseUrl(raw, proxyUrl) {
|
|
|
256
262
|
return next;
|
|
257
263
|
}
|
|
258
264
|
/**
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
*
|
|
265
|
+
* Point `[llm] base_url` in the workspace's OpenHands `config.toml` at the
|
|
266
|
+
* proxy, in the form the configured model's SDK expects (LiteLLM appends
|
|
267
|
+
* `/v1/messages` to an Anthropic base and `/chat/completions` to an
|
|
268
|
+
* OpenAI-style one), and keep the rest of the file.
|
|
269
|
+
*
|
|
270
|
+
* Earlier versions also wrote the rule sets into an `[intutic]` table, which
|
|
271
|
+
* OpenHands never reads (the rules now go into a microagent, see the
|
|
272
|
+
* adapter); that table is dropped. Earlier still, versions replaced the
|
|
273
|
+
* whole file, so a file starting with their header holds nothing of the
|
|
274
|
+
* user's and is regenerated.
|
|
264
275
|
*
|
|
265
276
|
* Edited line by line so the user's own settings and comments survive; the
|
|
266
|
-
* result is parsed before it is returned.
|
|
267
|
-
* file
|
|
268
|
-
* is regenerated. Returns `null` when the existing file is not valid TOML.
|
|
277
|
+
* result is parsed before it is returned. Returns `null` when the existing
|
|
278
|
+
* file is not valid TOML.
|
|
269
279
|
*/
|
|
270
|
-
export function mergeOpenHandsToml(raw, proxyUrl
|
|
280
|
+
export function mergeOpenHandsToml(raw, proxyUrl) {
|
|
271
281
|
const source = raw.startsWith(LEGACY_HEADER) ? '' : raw;
|
|
272
|
-
|
|
273
|
-
if (parsed === null)
|
|
282
|
+
if (parsesAsToml(source) === null)
|
|
274
283
|
return null;
|
|
275
|
-
const
|
|
276
|
-
let lines = source.split('\n');
|
|
277
|
-
// Drop the previous [intutic] table; it is rewritten whole below.
|
|
284
|
+
const lines = source.split('\n');
|
|
278
285
|
const oldIntutic = tableStart(lines, 'intutic');
|
|
279
|
-
if (oldIntutic !== -1)
|
|
286
|
+
if (oldIntutic !== -1) {
|
|
280
287
|
lines.splice(oldIntutic, tableEnd(lines, oldIntutic) - oldIntutic);
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
lines = [...lines, '', '[intutic]', `proxy_url = ${JSON.stringify(proxyUrl)}`, `instructions = """\n${escaped}\n"""`, ''];
|
|
286
|
-
const next = (lines[0] === '' ? lines.slice(1) : lines).join('\n');
|
|
287
|
-
const check = parsesAsToml(next);
|
|
288
|
-
if (check === null || check['llm']?.['base_url'] !== baseUrl)
|
|
289
|
-
return null;
|
|
290
|
-
return next;
|
|
288
|
+
while (lines.length > 1 && lines[lines.length - 1].trim() === '' && lines[lines.length - 2].trim() === '')
|
|
289
|
+
lines.pop();
|
|
290
|
+
}
|
|
291
|
+
return mergeOpenHandsBaseUrl(lines.join('\n'), proxyUrl);
|
|
291
292
|
}
|
|
292
293
|
//# sourceMappingURL=openhandsHooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openhandsHooks.js","sourceRoot":"","sources":["../../src/harness/openhandsHooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"openhandsHooks.js","sourceRoot":"","sources":["../../src/harness/openhandsHooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,54 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* piHooks.ts — Pi (earendil-works/pi)
|
|
2
|
+
* piHooks.ts — Pi (earendil-works/pi) extension gate and provider routing.
|
|
3
3
|
*
|
|
4
|
-
* Pi
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Pi has no hook file. Its hooks are extensions: TypeScript or JavaScript
|
|
5
|
+
* modules it loads into its own process from `~/.pi/agent/extensions/` (and a
|
|
6
|
+
* trusted project's `.pi/extensions/`), each a default-exported factory that
|
|
7
|
+
* receives the `ExtensionAPI`. Earlier versions of this writer registered a
|
|
8
|
+
* Claude-Code-style `PreToolUse` hook in `~/.pi/hooks.json`, a file Pi never
|
|
9
|
+
* reads, and pointed providers at the proxy in `~/.pi/models.json`, where Pi
|
|
10
|
+
* does not look either: both live in the agent directory, `~/.pi/agent`.
|
|
11
|
+
* Sources, at earendil-works/pi 6fb2e7815167e6b19006fc526d1a5d0f5f998787:
|
|
7
12
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
+
* - discovery: `packages/coding-agent/src/core/extensions/loader.ts`
|
|
14
|
+
* (`discoverExtensionsInDir`: direct `*.ts`/`*.js` files, or `<dir>/index.*`;
|
|
15
|
+
* loaded with jiti, `{ default: true }`, and the default export must be a
|
|
16
|
+
* function), `packages/coding-agent/docs/configuration.md` (the agent
|
|
17
|
+
* directory and `models.json`);
|
|
18
|
+
* - the hook: `pi.on("tool_call", handler)`, with
|
|
19
|
+
* `event = { type: "tool_call", toolName, toolCallId, input }`, refused by
|
|
20
|
+
* returning `{ block: true, reason }` (`core/extensions/types.ts`,
|
|
21
|
+
* `ToolCallEventResult`). The agent loop turns the reason into the error
|
|
22
|
+
* result the model reads (`packages/agent/src/agent-loop.ts`).
|
|
23
|
+
* - failure: "A `tool_call` handler failure blocks the tool as a fail-safe"
|
|
24
|
+
* (`docs/extensions.md`); `ExtensionRunner.emitToolCall` awaits each
|
|
25
|
+
* handler with no timeout (`core/extensions/runner.ts`), so a handler that
|
|
26
|
+
* hangs hangs Pi. The gate body therefore runs under its own deadline
|
|
27
|
+
* (`gateDeadlineMs('pi')`), from the start of each call, and refuses past it.
|
|
13
28
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
29
|
+
* The extension embeds the shared `emitJsGate` body (`'throw'` contract) and
|
|
30
|
+
* returns Pi's block result for the refusal it throws; any other fault is a
|
|
31
|
+
* block too. Pi names MCP tools `mcp__<server>__<tool>` already
|
|
32
|
+
* (`docs/mcp.md`), and calls a tool makes through `ctx.executeTool()` pass
|
|
33
|
+
* through `tool_call` handlers like the model's own (`docs/extensions.md`).
|
|
34
|
+
*
|
|
35
|
+
* The file is ESM with `createRequire`, the shape the OpenCode plugin uses:
|
|
36
|
+
* Node (Pi needs 22.19 or later) detects the module syntax, and jiti
|
|
37
|
+
* transforms the file where native loading fails and in Pi's compiled binary
|
|
38
|
+
* (`core/extensions/jiti-loader.ts`, `loader.ts`).
|
|
39
|
+
*
|
|
40
|
+
* Only the default agent directory is written. A user who moves it with
|
|
41
|
+
* `PI_CODING_AGENT_DIR` copies the extension there (the Pi integration page
|
|
42
|
+
* says so).
|
|
17
43
|
*
|
|
18
44
|
* @module
|
|
19
45
|
*/
|
|
46
|
+
/** Pi's default agent directory, relative to the home directory. */
|
|
47
|
+
export declare const PI_AGENT_DIR: string;
|
|
48
|
+
/** The extension file, relative to the home directory. */
|
|
49
|
+
export declare const PI_EXTENSION_FILE: string;
|
|
50
|
+
/** The first line of the extension's header, which disconnect recognises it by. */
|
|
51
|
+
export declare const PI_EXTENSION_MARKER = "Intutic Pi governance extension.";
|
|
20
52
|
interface PiProvider {
|
|
21
53
|
baseUrl?: string;
|
|
22
54
|
[key: string]: unknown;
|
|
@@ -25,20 +57,23 @@ interface PiModelsConfig {
|
|
|
25
57
|
providers?: Record<string, PiProvider>;
|
|
26
58
|
[key: string]: unknown;
|
|
27
59
|
}
|
|
60
|
+
export declare function buildPiExtension(proxyUrl: string, workspaceRoot: string, workspaceId: string): string;
|
|
28
61
|
/**
|
|
29
62
|
* Merge Pi models.json — point the anthropic and openai providers at the
|
|
30
63
|
* proxy, each with the base URL its SDK expects (the Anthropic SDK appends
|
|
31
64
|
* `/v1/messages`, the OpenAI one `/chat/completions`). Google is left alone:
|
|
32
65
|
* the proxy does not serve the Gemini API, so routing it there would break it.
|
|
33
|
-
* Every other provider and key is kept.
|
|
66
|
+
* Every other provider and key is kept. A provider entry may carry `baseUrl`
|
|
67
|
+
* alone (`ProviderConfigSchema` in `packages/coding-agent/src/core/model-config.ts`).
|
|
34
68
|
*/
|
|
35
69
|
export declare function mergePiModels(existing: PiModelsConfig, proxyUrl: string): PiModelsConfig;
|
|
36
70
|
/**
|
|
37
|
-
* Write the Pi governance
|
|
38
|
-
*
|
|
71
|
+
* Write the Pi governance extension into `~/.pi/agent/extensions/` and merge
|
|
72
|
+
* the proxy routing into `~/.pi/agent/models.json`.
|
|
39
73
|
*
|
|
40
|
-
* Safe to call repeatedly
|
|
41
|
-
*
|
|
74
|
+
* Safe to call repeatedly: atomic renames and a fixed file name, so repeated
|
|
75
|
+
* syncs replace rather than stack. Pi discovers the extension by scanning the
|
|
76
|
+
* directory; nothing registers it.
|
|
42
77
|
*
|
|
43
78
|
* @param workspaceRoot - Absolute workspace root path.
|
|
44
79
|
* @param proxyUrl - Intutic proxy URL for LLM provider routing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"piHooks.d.ts","sourceRoot":"","sources":["../../src/harness/piHooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"piHooks.d.ts","sourceRoot":"","sources":["../../src/harness/piHooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAcH,oEAAoE;AACpE,eAAO,MAAM,YAAY,QAA4B,CAAA;AAErD,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,QAAiE,CAAA;AAE/F,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,qCAAqC,CAAA;AAErE,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAyHrG;AAID;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAmBxF;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAK,GACf,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|