@lannguyensi/harness 0.37.0 → 0.39.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/CHANGELOG.md +35 -1
- package/dist/cli/add/index.js +10 -2
- package/dist/cli/add/index.js.map +1 -1
- package/dist/cli/add/mutate.d.ts +2 -0
- package/dist/cli/add/mutate.js.map +1 -1
- package/dist/cli/adopt/derive.d.ts +11 -1
- package/dist/cli/adopt/derive.js +28 -2
- package/dist/cli/adopt/derive.js.map +1 -1
- package/dist/cli/adopt/index.js +21 -13
- package/dist/cli/adopt/index.js.map +1 -1
- package/dist/cli/apply/apply.js +31 -3
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/apply/generate-settings.d.ts +43 -0
- package/dist/cli/apply/generate-settings.js +53 -0
- package/dist/cli/apply/generate-settings.js.map +1 -1
- package/dist/cli/audit.d.ts +7 -0
- package/dist/cli/audit.js +11 -1
- package/dist/cli/audit.js.map +1 -1
- package/dist/cli/diff/git.d.ts +13 -0
- package/dist/cli/diff/git.js +25 -0
- package/dist/cli/diff/git.js.map +1 -1
- package/dist/cli/diff/index.d.ts +7 -0
- package/dist/cli/diff/index.js +82 -7
- package/dist/cli/diff/index.js.map +1 -1
- package/dist/cli/doctor/format.js +21 -0
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/index.d.ts +33 -0
- package/dist/cli/doctor/index.js +103 -35
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +23 -0
- package/dist/cli/explain.js +7 -0
- package/dist/cli/explain.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/profiles.d.ts +1 -1
- package/dist/cli/init/profiles.js +9 -0
- package/dist/cli/init/profiles.js.map +1 -1
- package/dist/cli/init/templates.d.ts +1 -1
- package/dist/cli/init/templates.js +19 -0
- package/dist/cli/init/templates.js.map +1 -1
- package/dist/cli/loader.js +9 -1
- package/dist/cli/loader.js.map +1 -1
- package/dist/cli/pack/hook-bootstrap.d.ts +60 -0
- package/dist/cli/pack/hook-bootstrap.js +116 -0
- package/dist/cli/pack/hook-bootstrap.js.map +1 -0
- package/dist/cli/pack/hook-branch-protection.js +14 -53
- package/dist/cli/pack/hook-branch-protection.js.map +1 -1
- package/dist/cli/pack/hook-codex-pre-tool-use.js +20 -50
- package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -1
- package/dist/cli/pack/hook-codex-stop.js +2 -13
- package/dist/cli/pack/hook-codex-stop.js.map +1 -1
- package/dist/cli/pack/hook-codex-user-prompt-submit.js +2 -13
- package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +1 -1
- package/dist/cli/pack/hook-post-tool-use.js +4 -32
- package/dist/cli/pack/hook-post-tool-use.js.map +1 -1
- package/dist/cli/pack/hook-pre-tool-use.js +32 -93
- package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
- package/dist/cli/pack/hook-runtime-reality.js +3 -13
- package/dist/cli/pack/hook-runtime-reality.js.map +1 -1
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js +2 -13
- package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +1 -1
- package/dist/cli/pack/hook-solution-acceptance.js +25 -57
- package/dist/cli/pack/hook-solution-acceptance.js.map +1 -1
- package/dist/cli/pack/hook-stay-in-scope.js +3 -23
- package/dist/cli/pack/hook-stay-in-scope.js.map +1 -1
- package/dist/cli/pack/hook-track-active-claim.js +4 -32
- package/dist/cli/pack/hook-track-active-claim.js.map +1 -1
- package/dist/cli/policy/intercept.d.ts +10 -0
- package/dist/cli/policy/intercept.js +60 -24
- package/dist/cli/policy/intercept.js.map +1 -1
- package/dist/cli/validate/checks.d.ts +24 -0
- package/dist/cli/validate/checks.js +138 -0
- package/dist/cli/validate/checks.js.map +1 -1
- package/dist/io/merge-settings.d.ts +23 -1
- package/dist/io/merge-settings.js +120 -10
- package/dist/io/merge-settings.js.map +1 -1
- package/dist/io/read-regular-file.d.ts +32 -0
- package/dist/io/read-regular-file.js +34 -0
- package/dist/io/read-regular-file.js.map +1 -0
- package/dist/policies/index.d.ts +1 -1
- package/dist/policies/index.js +1 -1
- package/dist/policies/index.js.map +1 -1
- package/dist/policies/ledger-client.d.ts +41 -0
- package/dist/policies/ledger-client.js +199 -94
- package/dist/policies/ledger-client.js.map +1 -1
- package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +4 -3
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js +11 -20
- package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +21 -0
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +44 -20
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution.d.ts +2 -2
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/intercept.d.ts +18 -0
- package/dist/runtime/intercept.js +53 -9
- package/dist/runtime/intercept.js.map +1 -1
- package/dist/runtime/ledger-record.d.ts +24 -0
- package/dist/runtime/ledger-record.js +50 -0
- package/dist/runtime/ledger-record.js.map +1 -1
- package/dist/schema/grounding.js +22 -0
- package/dist/schema/grounding.js.map +1 -1
- package/dist/schema/index.js +41 -4
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/memory.js +9 -0
- package/dist/schema/memory.js.map +1 -1
- package/dist/schema/risk.js +10 -6
- package/dist/schema/risk.js.map +1 -1
- package/package.json +5 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
1
2
|
import * as fs from "node:fs";
|
|
2
3
|
import * as os from "node:os";
|
|
3
4
|
import * as path from "node:path";
|
|
@@ -274,6 +275,140 @@ export function checkSolutionAcceptanceProducer(manifest) {
|
|
|
274
275
|
}
|
|
275
276
|
return [];
|
|
276
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* The orchestrator-workflow knob the grounding-mcp producer reads
|
|
280
|
+
* (`resolveOwKnob`). Repo-relative on purpose: the knob belongs to the
|
|
281
|
+
* repository whose completions the OW arm gates.
|
|
282
|
+
*/
|
|
283
|
+
export const OW_KNOB_REL_PATH = ".ai/solution-acceptance.json";
|
|
284
|
+
export function createDefaultGitIgnoreProbe(cwd) {
|
|
285
|
+
return (relPath) => {
|
|
286
|
+
const res = spawnSync("git", ["check-ignore", "-q", "--", relPath], {
|
|
287
|
+
cwd: cwd ?? process.cwd(),
|
|
288
|
+
stdio: "ignore",
|
|
289
|
+
});
|
|
290
|
+
if (res.error)
|
|
291
|
+
return null;
|
|
292
|
+
if (res.status === 0)
|
|
293
|
+
return true;
|
|
294
|
+
if (res.status === 1)
|
|
295
|
+
return false;
|
|
296
|
+
return null; // 128: not a git repository (or another fatal git error)
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
// Knob-reachability lint (task 24f6ceb9, ow-review-2026-07-01). The OW arm
|
|
300
|
+
// of solution-acceptance reads repo state: the knob above plus run
|
|
301
|
+
// completeness under `.ai/runs/`. When the knob path is git-ignored the
|
|
302
|
+
// repo CANNOT commit its enforcement posture, so in a fresh clone or a git
|
|
303
|
+
// worktree `.ai/runs/` is absent, the default `auto` knob silently skips
|
|
304
|
+
// the OW arm, and the gate that exists to prevent process skipping is
|
|
305
|
+
// itself skipped exactly where process skipping happens. Warn (not error):
|
|
306
|
+
// the preflight floor still gates every completion; only the OW arm is
|
|
307
|
+
// affected. A `null` probe answer (non-repo cwd, git missing) skips the
|
|
308
|
+
// check — validate must stay usable for pure home-config linting.
|
|
309
|
+
export function checkSolutionAcceptanceKnobIgnored(manifest, probe) {
|
|
310
|
+
const pack = manifest.policy_packs.find((p) => p.name === "solution-acceptance");
|
|
311
|
+
if (!pack || !pack.enabled)
|
|
312
|
+
return [];
|
|
313
|
+
if (probe(OW_KNOB_REL_PATH) !== true)
|
|
314
|
+
return [];
|
|
315
|
+
return [
|
|
316
|
+
{
|
|
317
|
+
severity: "warning",
|
|
318
|
+
path: "policy_packs",
|
|
319
|
+
message: `solution-acceptance: the orchestrator-workflow knob ${OW_KNOB_REL_PATH} ` +
|
|
320
|
+
`is git-ignored in this repository, so the OW enforcement posture cannot ` +
|
|
321
|
+
`be committed. In a fresh clone or git worktree .ai/runs/ is absent and ` +
|
|
322
|
+
`the default "auto" knob silently skips the OW arm — exactly where ` +
|
|
323
|
+
`process skipping happens. Narrow the ignore to .ai/runs/ (run state ` +
|
|
324
|
+
`stays local) and commit ${OW_KNOB_REL_PATH}; see ` +
|
|
325
|
+
`docs/policy-packs/solution-acceptance.md ("Repo state and gitignore").`,
|
|
326
|
+
},
|
|
327
|
+
];
|
|
328
|
+
}
|
|
329
|
+
// Self-attestation disclosure (task 43b107f2, harness-review-2026-07-01).
|
|
330
|
+
// The generic `requires:`/`ledger_tag` engine matches substrings in ledger
|
|
331
|
+
// content that the GATED AGENT can write directly via
|
|
332
|
+
// `mcp__agent-grounding__ledger_add` — whoever can write the ledger can open
|
|
333
|
+
// the gate. The two builtin packs were hardened to filesystem markers after
|
|
334
|
+
// exactly this class of self-approval bug (docs/CLI.md, branch-protection),
|
|
335
|
+
// but a custom block-policy is only as strong as its evidence producer.
|
|
336
|
+
//
|
|
337
|
+
// Heuristic: warn only when a `block` policy declares NO `producers:` at
|
|
338
|
+
// all — the evidence source is then undocumented and the operator has made
|
|
339
|
+
// no visible trust decision. A declared producer, even an agent-executable
|
|
340
|
+
// `mcp`/`bash` one, IS the schema's way of stating the intended evidence
|
|
341
|
+
// flow (same philosophy as the doctor producer-gap refinement, task
|
|
342
|
+
// f97e152f): the full/team templates deliberately ship mcp-producer
|
|
343
|
+
// process-gates whose purpose is forcing a review-subagent step, and
|
|
344
|
+
// warning on every one of them would train operators to ignore warnings.
|
|
345
|
+
// What an agent-executable producer MEANS for the trust model (advisory
|
|
346
|
+
// against the gated agent) is taught by the tripwire in
|
|
347
|
+
// docs/writing-custom-policies.md, which the producer docs link to.
|
|
348
|
+
export function checkPolicySelfAttestation(manifest) {
|
|
349
|
+
const diags = [];
|
|
350
|
+
for (let i = 0; i < manifest.policies.length; i++) {
|
|
351
|
+
const p = manifest.policies[i];
|
|
352
|
+
// block-only on purpose: a require_approval policy's canonical unblock
|
|
353
|
+
// path is the operator verb (`harness approve risk`), an ask-semantics
|
|
354
|
+
// flow that exists independent of producers:, so absence of producers
|
|
355
|
+
// there does not mean the evidence source is undocumented.
|
|
356
|
+
if (p === undefined || p.enforcement !== "block")
|
|
357
|
+
continue;
|
|
358
|
+
if (p.producers !== undefined && p.producers.length > 0)
|
|
359
|
+
continue;
|
|
360
|
+
diags.push({
|
|
361
|
+
severity: "warning",
|
|
362
|
+
path: `policies[${i}]`,
|
|
363
|
+
message: `policy "${p.name}" blocks on requires.ledger_tag but declares no ` +
|
|
364
|
+
`producers: — the evidence source is undocumented, and the tag is ` +
|
|
365
|
+
`satisfied by ANY ledger writer, including the gated agent itself ` +
|
|
366
|
+
`via mcp__agent-grounding__ledger_add (advisory against the agent ` +
|
|
367
|
+
`it gates). Declare a producers: entry naming the intended evidence ` +
|
|
368
|
+
`flow — an ask-kind producer for operator-in-the-loop approval ` +
|
|
369
|
+
`(alongside the mcp recovery producer the schema requires), or an ` +
|
|
370
|
+
`agent recipe if the gate is a deliberate process gate. See ` +
|
|
371
|
+
`docs/writing-custom-policies.md ("The trust model").`,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
return diags;
|
|
375
|
+
}
|
|
376
|
+
// M7 validate lint: a policy that gates on risk.* / action.reversible clauses
|
|
377
|
+
// WITHOUT an environment.name clause fires on EVERY unclassified command in
|
|
378
|
+
// EVERY environment because those three clauses fail-closed to matched=true
|
|
379
|
+
// when the action is unclassified ("unknown is not safe"). This is almost
|
|
380
|
+
// never what the operator intends: an unscoped risk policy becomes a blanket
|
|
381
|
+
// gate on any command the classifier does not recognise. See docs/risk-gate.md.
|
|
382
|
+
export function checkPolicyRiskWithoutEnvScope(manifest) {
|
|
383
|
+
const diags = [];
|
|
384
|
+
for (let i = 0; i < manifest.policies.length; i++) {
|
|
385
|
+
const p = manifest.policies[i];
|
|
386
|
+
if (!p?.when)
|
|
387
|
+
continue;
|
|
388
|
+
const when = p.when;
|
|
389
|
+
// The three clauses that fail-closed to matched=true for an unclassified
|
|
390
|
+
// action. An environment.name clause constrains the scope, so we only
|
|
391
|
+
// warn when it is absent.
|
|
392
|
+
const hasUnclassifiedFallbackClause = when["risk.severity_at_least"] !== undefined ||
|
|
393
|
+
when["risk.category_in"] !== undefined ||
|
|
394
|
+
when["action.reversible"] !== undefined;
|
|
395
|
+
const hasEnvNameScope = when["environment.name"] !== undefined;
|
|
396
|
+
if (hasUnclassifiedFallbackClause && !hasEnvNameScope) {
|
|
397
|
+
diags.push({
|
|
398
|
+
severity: "warning",
|
|
399
|
+
path: `policies[${i}]`,
|
|
400
|
+
message: `policy "${p.name}" declares a when: block with ` +
|
|
401
|
+
`risk.severity_at_least / risk.category_in / action.reversible ` +
|
|
402
|
+
`but no environment.name scope: those clauses fail-closed to ` +
|
|
403
|
+
`matched=true for any unclassified command, so this policy fires ` +
|
|
404
|
+
`on every unclassified action in every environment. ` +
|
|
405
|
+
`Add an environment.name clause to scope the policy to a specific ` +
|
|
406
|
+
`environment. See docs/risk-gate.md.`,
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return diags;
|
|
411
|
+
}
|
|
277
412
|
// Phase 6 #2: surface pack-resolution problems at lint time, not at
|
|
278
413
|
// `harness apply` time. Delegates to the shared `checkPolicyPackSources`
|
|
279
414
|
// so the apply path (which now also fails loudly on these conditions)
|
|
@@ -317,8 +452,11 @@ export function runAssetChecks(manifest, opts = {}) {
|
|
|
317
452
|
...checkBuiltinDrift(manifest, opts),
|
|
318
453
|
...checkPolicyGroundingMcp(manifest),
|
|
319
454
|
...checkSolutionAcceptanceProducer(manifest),
|
|
455
|
+
...checkSolutionAcceptanceKnobIgnored(manifest, opts.gitIgnoreProbe ?? createDefaultGitIgnoreProbe()),
|
|
320
456
|
...checkPolicyPacks(manifest),
|
|
321
457
|
...checkPolicyPackConfigsAsDiagnostics(manifest),
|
|
458
|
+
...checkPolicyRiskWithoutEnvScope(manifest),
|
|
459
|
+
...checkPolicySelfAttestation(manifest),
|
|
322
460
|
];
|
|
323
461
|
}
|
|
324
462
|
export const __testables = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/cli/validate/checks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/cli/validate/checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,30 @@
|
|
|
1
|
+
export interface MergeOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Server names harness itself wrote into the generated settings.json
|
|
4
|
+
* on the PREVIOUS apply (from `.last-apply`). Used to tell "operator
|
|
5
|
+
* hand-added" apart from "harness-written before, since removed or
|
|
6
|
+
* disabled in the manifest". Omit when no prior apply is recorded.
|
|
7
|
+
*/
|
|
8
|
+
previouslyGeneratedMcpNames?: ReadonlySet<string>;
|
|
9
|
+
}
|
|
1
10
|
export interface MergeResult {
|
|
2
11
|
merged: Record<string, unknown>;
|
|
3
12
|
replacedKeys: string[];
|
|
4
13
|
preservedKeys: string[];
|
|
5
14
|
addedKeys: string[];
|
|
15
|
+
/** Owned keys that were deep-merged instead of wholesale-replaced. */
|
|
16
|
+
deepMergedKeys: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Server names inside `mcpServers` that exist only in the target file
|
|
19
|
+
* (operator hand-adds) and survived the deep merge.
|
|
20
|
+
*/
|
|
21
|
+
preservedMcpServers: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Server names dropped because harness wrote them on a previous apply
|
|
24
|
+
* but the current manifest no longer emits them (removed or
|
|
25
|
+
* `enabled: false`).
|
|
26
|
+
*/
|
|
27
|
+
removedMcpServers: string[];
|
|
6
28
|
}
|
|
7
|
-
export declare function mergeSettings(existing: Record<string, unknown> | null, generated: Record<string, unknown
|
|
29
|
+
export declare function mergeSettings(existing: Record<string, unknown> | null, generated: Record<string, unknown>, opts?: MergeOptions): MergeResult;
|
|
8
30
|
export declare function summarizeMerge(target: string, r: MergeResult): string;
|
|
@@ -1,22 +1,87 @@
|
|
|
1
1
|
// 3-way merge for `harness apply --target <path> --merge`.
|
|
2
2
|
//
|
|
3
3
|
// Merge semantics: harness owns whichever top-level keys appear in the
|
|
4
|
-
// generated output (today: `hooks
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// generated output (today: `hooks` and `mcpServers`). Owned keys are
|
|
5
|
+
// replaced wholesale — EXCEPT `mcpServers`, which is deep-merged by
|
|
6
|
+
// server name (task 059b669c, operator decision 2026-07-02). Per name:
|
|
7
|
+
//
|
|
8
|
+
// - declared in the current generated output → generated value wins
|
|
9
|
+
// (the manifest stays the source of truth for what it declares);
|
|
10
|
+
// - absent from the generated output but recorded as harness-written
|
|
11
|
+
// on a PREVIOUS apply (`previouslyGeneratedMcpNames`, derived from
|
|
12
|
+
// `.last-apply`) → DROPPED: the operator removed or disabled the
|
|
13
|
+
// server in the manifest, and `enabled: false` must stay an
|
|
14
|
+
// effective kill switch on --merge targets;
|
|
15
|
+
// - absent from both → operator hand-add, preserved verbatim.
|
|
16
|
+
//
|
|
17
|
+
// Without the provenance set (no `.last-apply` yet, a record with no
|
|
18
|
+
// settings.json entry, or a corrupt record), unknown names are
|
|
19
|
+
// preserved — the conservative reading, since dropping could destroy
|
|
20
|
+
// an operator hand-add.
|
|
21
|
+
//
|
|
22
|
+
// `hooks` stays wholesale-owned: its nested array-of-groups shape has
|
|
23
|
+
// no stable identity key to merge on, so partial ownership would be
|
|
24
|
+
// ambiguous; hand-added hooks belong in the manifest (documented in
|
|
25
|
+
// docs/for-humans.md).
|
|
7
26
|
//
|
|
8
27
|
// Insertion order: existing keys first (stable diff against the prior
|
|
9
28
|
// file), then any new generated keys appended at the end. Owned keys
|
|
10
29
|
// keep their existing position so a re-apply doesn't churn on-disk
|
|
11
|
-
// ordering.
|
|
12
|
-
|
|
30
|
+
// ordering. Inside a deep-merged mcpServers block the same rule holds.
|
|
31
|
+
//
|
|
32
|
+
// Accumulators are null-prototype objects: a server literally named
|
|
33
|
+
// `__proto__` in the target file must round-trip as an own property,
|
|
34
|
+
// not hit the inherited prototype setter.
|
|
35
|
+
function isRecord(x) {
|
|
36
|
+
return typeof x === "object" && x !== null && !Array.isArray(x);
|
|
37
|
+
}
|
|
38
|
+
export function mergeSettings(existing, generated, opts = {}) {
|
|
13
39
|
const replaced = [];
|
|
14
40
|
const added = [];
|
|
15
41
|
const preserved = [];
|
|
16
|
-
const
|
|
42
|
+
const deepMerged = [];
|
|
43
|
+
const preservedMcpServers = [];
|
|
44
|
+
const removedMcpServers = [];
|
|
45
|
+
const out = Object.create(null);
|
|
17
46
|
if (existing) {
|
|
18
47
|
for (const k of Object.keys(existing)) {
|
|
19
|
-
if (k
|
|
48
|
+
if (k === "mcpServers" && isRecord(existing[k])) {
|
|
49
|
+
const inGenerated = Object.prototype.hasOwnProperty.call(generated, k);
|
|
50
|
+
if (inGenerated && !isRecord(generated[k])) {
|
|
51
|
+
// Malformed generated side: wholesale, generated wins.
|
|
52
|
+
out[k] = generated[k];
|
|
53
|
+
replaced.push(k);
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (!inGenerated && opts.previouslyGeneratedMcpNames === undefined) {
|
|
57
|
+
// The manifest emits no servers AND no provenance is
|
|
58
|
+
// available: nothing here is provably harness-written, so the
|
|
59
|
+
// key is not ours to touch.
|
|
60
|
+
out[k] = existing[k];
|
|
61
|
+
preserved.push(k);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Deep merge — also when the generated output has NO mcpServers
|
|
65
|
+
// key at all (every declared server removed or disabled): the
|
|
66
|
+
// provenance set still identifies the harness-written leftovers
|
|
67
|
+
// that must be dropped so enabled:false stays a kill switch.
|
|
68
|
+
const r = mergeMcpServers(existing[k], inGenerated ? generated[k] : {}, opts.previouslyGeneratedMcpNames);
|
|
69
|
+
preservedMcpServers.push(...r.operatorNames);
|
|
70
|
+
removedMcpServers.push(...r.removedNames);
|
|
71
|
+
if (inGenerated || Object.keys(r.merged).length > 0) {
|
|
72
|
+
out[k] = r.merged;
|
|
73
|
+
}
|
|
74
|
+
// else: every entry was harness-written and dropped, and the
|
|
75
|
+
// generated output has no mcpServers key — omit it, mirroring
|
|
76
|
+
// what a fresh (non-merge) apply would write.
|
|
77
|
+
deepMerged.push(k);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (Object.prototype.hasOwnProperty.call(generated, k)) {
|
|
81
|
+
// Wholesale replace: harness owns the key. Also the fallback
|
|
82
|
+
// when the existing mcpServers is not an object (malformed
|
|
83
|
+
// target) — the generated shape wins rather than merging into
|
|
84
|
+
// a corrupt value.
|
|
20
85
|
out[k] = generated[k];
|
|
21
86
|
replaced.push(k);
|
|
22
87
|
}
|
|
@@ -27,21 +92,66 @@ export function mergeSettings(existing, generated) {
|
|
|
27
92
|
}
|
|
28
93
|
}
|
|
29
94
|
for (const k of Object.keys(generated)) {
|
|
30
|
-
if (existing && k
|
|
95
|
+
if (existing && Object.prototype.hasOwnProperty.call(existing, k))
|
|
31
96
|
continue;
|
|
32
97
|
out[k] = generated[k];
|
|
33
98
|
added.push(k);
|
|
34
99
|
}
|
|
35
|
-
return {
|
|
100
|
+
return {
|
|
101
|
+
merged: out,
|
|
102
|
+
replacedKeys: replaced,
|
|
103
|
+
preservedKeys: preserved,
|
|
104
|
+
addedKeys: added,
|
|
105
|
+
deepMergedKeys: deepMerged,
|
|
106
|
+
preservedMcpServers,
|
|
107
|
+
removedMcpServers,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Union by server name with provenance (see the module header for the
|
|
112
|
+
* three per-name cases). Existing insertion order is kept, new
|
|
113
|
+
* generated names are appended in their generated (lexical) order.
|
|
114
|
+
*/
|
|
115
|
+
function mergeMcpServers(existing, generated, previouslyGenerated) {
|
|
116
|
+
const merged = Object.create(null);
|
|
117
|
+
const operatorNames = [];
|
|
118
|
+
const removedNames = [];
|
|
119
|
+
for (const name of Object.keys(existing)) {
|
|
120
|
+
if (Object.prototype.hasOwnProperty.call(generated, name)) {
|
|
121
|
+
merged[name] = generated[name];
|
|
122
|
+
}
|
|
123
|
+
else if (previouslyGenerated?.has(name)) {
|
|
124
|
+
removedNames.push(name);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
merged[name] = existing[name];
|
|
128
|
+
operatorNames.push(name);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
for (const name of Object.keys(generated)) {
|
|
132
|
+
if (Object.prototype.hasOwnProperty.call(existing, name))
|
|
133
|
+
continue;
|
|
134
|
+
merged[name] = generated[name];
|
|
135
|
+
}
|
|
136
|
+
return { merged, operatorNames, removedNames };
|
|
36
137
|
}
|
|
37
138
|
export function summarizeMerge(target, r) {
|
|
38
139
|
const replacedFrag = r.replacedKeys.length
|
|
39
140
|
? `replaced ${r.replacedKeys.length} owned key${r.replacedKeys.length === 1 ? "" : "s"} (${r.replacedKeys.join(", ")})`
|
|
40
141
|
: "replaced 0 owned keys";
|
|
142
|
+
const deepMergedFrag = r.deepMergedKeys.length
|
|
143
|
+
? `, deep-merged ${r.deepMergedKeys.join(", ")}`
|
|
144
|
+
: "";
|
|
41
145
|
const addedFrag = r.addedKeys.length
|
|
42
146
|
? `, added ${r.addedKeys.length} (${r.addedKeys.join(", ")})`
|
|
43
147
|
: "";
|
|
44
148
|
const preservedFrag = `, preserved ${r.preservedKeys.length} other key${r.preservedKeys.length === 1 ? "" : "s"}`;
|
|
45
|
-
|
|
149
|
+
const keptFrag = r.preservedMcpServers.length
|
|
150
|
+
? `, kept ${r.preservedMcpServers.length} operator-added mcpServer${r.preservedMcpServers.length === 1 ? "" : "s"} (${r.preservedMcpServers.join(", ")})`
|
|
151
|
+
: "";
|
|
152
|
+
const droppedFrag = r.removedMcpServers.length
|
|
153
|
+
? `, dropped ${r.removedMcpServers.length} manifest-removed mcpServer${r.removedMcpServers.length === 1 ? "" : "s"} (${r.removedMcpServers.join(", ")})`
|
|
154
|
+
: "";
|
|
155
|
+
return `merged into ${target}: ${replacedFrag}${deepMergedFrag}${addedFrag}${preservedFrag}${keptFrag}${droppedFrag}`;
|
|
46
156
|
}
|
|
47
157
|
//# sourceMappingURL=merge-settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-settings.js","sourceRoot":"","sources":["../../src/io/merge-settings.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"merge-settings.js","sourceRoot":"","sources":["../../src/io/merge-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of a symlink-rejecting regular-file read. The kinds are deliberately
|
|
3
|
+
* fine-grained because the gate readers need to keep their distinct deny
|
|
4
|
+
* details (missing vs symlink vs not-regular) and one caller treats
|
|
5
|
+
* exists-but-unreadable as "existence already satisfied the gate".
|
|
6
|
+
*/
|
|
7
|
+
export type RegularFileRead = {
|
|
8
|
+
kind: "ok";
|
|
9
|
+
content: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "missing";
|
|
12
|
+
} | {
|
|
13
|
+
kind: "symlink";
|
|
14
|
+
} | {
|
|
15
|
+
kind: "not-regular";
|
|
16
|
+
} | {
|
|
17
|
+
kind: "unreadable";
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Read a marker/verdict file as utf8, refusing symlinks and non-regular
|
|
21
|
+
* files. lstat (NOT stat): defense-in-depth against a symlink at the marker
|
|
22
|
+
* path pointing at an arbitrary target the agent controls. In today's threat
|
|
23
|
+
* model the agent has no Edit / Write / Bash path to plant such a symlink
|
|
24
|
+
* (the same PreToolUse hook gates all three), but the gate contract is to
|
|
25
|
+
* assume the agent is hostile, so the lstat reject is cheap insurance
|
|
26
|
+
* (agent-tasks/d39f160e).
|
|
27
|
+
*
|
|
28
|
+
* This is THE shared implementation for every gate-marker read; a future
|
|
29
|
+
* defensive fix (e.g. closing the lstat/read race with O_NOFOLLOW, ENOTDIR
|
|
30
|
+
* handling) belongs here and nowhere else.
|
|
31
|
+
*/
|
|
32
|
+
export declare function readRegularFileRejectingSymlink(filePath: string): RegularFileRead;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
/**
|
|
3
|
+
* Read a marker/verdict file as utf8, refusing symlinks and non-regular
|
|
4
|
+
* files. lstat (NOT stat): defense-in-depth against a symlink at the marker
|
|
5
|
+
* path pointing at an arbitrary target the agent controls. In today's threat
|
|
6
|
+
* model the agent has no Edit / Write / Bash path to plant such a symlink
|
|
7
|
+
* (the same PreToolUse hook gates all three), but the gate contract is to
|
|
8
|
+
* assume the agent is hostile, so the lstat reject is cheap insurance
|
|
9
|
+
* (agent-tasks/d39f160e).
|
|
10
|
+
*
|
|
11
|
+
* This is THE shared implementation for every gate-marker read; a future
|
|
12
|
+
* defensive fix (e.g. closing the lstat/read race with O_NOFOLLOW, ENOTDIR
|
|
13
|
+
* handling) belongs here and nowhere else.
|
|
14
|
+
*/
|
|
15
|
+
export function readRegularFileRejectingSymlink(filePath) {
|
|
16
|
+
let stat;
|
|
17
|
+
try {
|
|
18
|
+
stat = fs.lstatSync(filePath);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return { kind: "missing" };
|
|
22
|
+
}
|
|
23
|
+
if (stat.isSymbolicLink())
|
|
24
|
+
return { kind: "symlink" };
|
|
25
|
+
if (!stat.isFile())
|
|
26
|
+
return { kind: "not-regular" };
|
|
27
|
+
try {
|
|
28
|
+
return { kind: "ok", content: fs.readFileSync(filePath, "utf8") };
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return { kind: "unreadable" };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=read-regular-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-regular-file.js","sourceRoot":"","sources":["../../src/io/read-regular-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAe9B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,+BAA+B,CAAC,QAAgB;IAC9D,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACnD,IAAI,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
|
package/dist/policies/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { buildRecordHint, evaluateRequires, RequiresEvaluationError, type EvaluateRequiresOptions, type LedgerEntry, type RequiresEvaluation, type RequiresTrace, } from "./requires.js";
|
|
2
2
|
export { parseDurationSeconds, InvalidDurationError } from "./duration.js";
|
|
3
3
|
export { parseLedgerTimestamp } from "./timestamp.js";
|
|
4
|
-
export { queryLedgerByTag, type LedgerClientOptions, type LedgerQueryResult, type QueryLedgerOptions, } from "./ledger-client.js";
|
|
4
|
+
export { openLedgerSession, queryLedgerByTag, type LedgerClientOptions, type LedgerQueryResult, type LedgerSession, type LedgerSessionCallResult, type LedgerSessionQuery, type QueryLedgerOptions, } from "./ledger-client.js";
|
|
5
5
|
export { validateExtractGrammar, parseExtractExpression, evaluateExtract, substituteTemplate, ExtractGrammarError, type ExtractBuiltins, type ExtractEventContext, type ExtractEvaluation, type ExtractPath, type ExtractSegment, type ExtractTraceEntry, type ExtractTraceSource, type SubstituteTemplateResult, } from "./extract.js";
|
package/dist/policies/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { buildRecordHint, evaluateRequires, RequiresEvaluationError, } from "./requires.js";
|
|
2
2
|
export { parseDurationSeconds, InvalidDurationError } from "./duration.js";
|
|
3
3
|
export { parseLedgerTimestamp } from "./timestamp.js";
|
|
4
|
-
export { queryLedgerByTag, } from "./ledger-client.js";
|
|
4
|
+
export { openLedgerSession, queryLedgerByTag, } from "./ledger-client.js";
|
|
5
5
|
export { validateExtractGrammar, parseExtractExpression, evaluateExtract, substituteTemplate, ExtractGrammarError, } from "./extract.js";
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GAKxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GAKxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAOjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,GASpB,MAAM,cAAc,CAAC"}
|
|
@@ -36,4 +36,45 @@ export type LedgerQueryResult = {
|
|
|
36
36
|
kind: "degraded";
|
|
37
37
|
reason: string;
|
|
38
38
|
};
|
|
39
|
+
/** Arguments to `LedgerSession.querySummary` — per-call, unlike the
|
|
40
|
+
* connection-scoped `LedgerClientOptions`. */
|
|
41
|
+
export interface LedgerSessionQuery {
|
|
42
|
+
sessionId: string;
|
|
43
|
+
sinceIso?: string;
|
|
44
|
+
contentPrefix?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Result of a generic `LedgerSession.callTool` round-trip. Three-way so a
|
|
48
|
+
* caller can distinguish a server-side JSON-RPC error (retryable with a
|
|
49
|
+
* different payload — the `policy_decision` → `fact` fallback) from a
|
|
50
|
+
* degraded transport (spawn failure / exit / timeout — nothing to retry).
|
|
51
|
+
*/
|
|
52
|
+
export type LedgerSessionCallResult = {
|
|
53
|
+
status: "ok";
|
|
54
|
+
payload: unknown;
|
|
55
|
+
} | {
|
|
56
|
+
status: "error";
|
|
57
|
+
errorMessage: string;
|
|
58
|
+
} | {
|
|
59
|
+
status: "degraded";
|
|
60
|
+
reason: string;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* One grounding-mcp connection serving multiple calls.
|
|
64
|
+
*
|
|
65
|
+
* The PreToolUse runtime gate evaluates K policies per tool event, and each
|
|
66
|
+
* used to spawn its own subprocess for the query plus a second one for the
|
|
67
|
+
* audit record — 2K sequential spawns per event, the fail-open-under-load
|
|
68
|
+
* risk the 2026-07-01 review flagged against the 30s hook budget. A session
|
|
69
|
+
* spawns ONE subprocess lazily on first use, performs the initialize
|
|
70
|
+
* handshake once, and multiplexes every subsequent `ledger_summary` /
|
|
71
|
+
* `ledger_add` over the same stdio pipe. `dispose()` terminates the child;
|
|
72
|
+
* the owner (e.g. the intercept CLI wrapper) MUST call it when done.
|
|
73
|
+
*/
|
|
74
|
+
export interface LedgerSession {
|
|
75
|
+
querySummary(query: LedgerSessionQuery): Promise<LedgerQueryResult>;
|
|
76
|
+
callTool(name: string, args: Record<string, unknown>): Promise<LedgerSessionCallResult>;
|
|
77
|
+
dispose(): void;
|
|
78
|
+
}
|
|
79
|
+
export declare function openLedgerSession(opts: LedgerClientOptions): LedgerSession;
|
|
39
80
|
export declare function queryLedgerByTag(opts: QueryLedgerOptions): Promise<LedgerQueryResult>;
|