@b00dea/cockpit 0.0.0-bootstrap.0 → 0.1.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 +375 -0
- package/LICENSE +21 -0
- package/README.md +21 -1
- package/bin/cockpit.mjs +33 -0
- package/cockpit.schema.json +2574 -0
- package/dist/autonomy.d.ts +44 -0
- package/dist/autonomy.js +156 -0
- package/dist/bounded-read.d.ts +14 -0
- package/dist/bounded-read.js +42 -0
- package/dist/browser/commands.d.ts +62 -0
- package/dist/browser/commands.js +349 -0
- package/dist/browser/package-paths.d.ts +1 -0
- package/dist/browser/package-paths.js +6 -0
- package/dist/browser/proxy.d.ts +22 -0
- package/dist/browser/proxy.js +37 -0
- package/dist/browser/runtime.d.ts +117 -0
- package/dist/browser/runtime.js +183 -0
- package/dist/browser/surfaces.d.ts +141 -0
- package/dist/browser/surfaces.js +556 -0
- package/dist/browser/ui-gate.d.ts +15 -0
- package/dist/browser/ui-gate.js +18 -0
- package/dist/cli-guard.d.ts +5 -0
- package/dist/cli-guard.js +71 -0
- package/dist/cli-main.d.ts +139 -0
- package/dist/cli-main.js +1405 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +16 -0
- package/dist/command-table.d.ts +113 -0
- package/dist/command-table.js +512 -0
- package/dist/config/load.d.ts +171 -0
- package/dist/config/load.js +345 -0
- package/dist/config/sibling-toml.d.ts +48 -0
- package/dist/config/sibling-toml.js +160 -0
- package/dist/config/surface-tools-toml.d.ts +9 -0
- package/dist/config/surface-tools-toml.js +37 -0
- package/dist/config/verified-write.d.ts +43 -0
- package/dist/config/verified-write.js +89 -0
- package/dist/diagnostics.d.ts +26 -0
- package/dist/diagnostics.js +335 -0
- package/dist/emit.d.ts +22 -0
- package/dist/emit.js +43 -0
- package/dist/entrypoint-kinds.d.ts +3 -0
- package/dist/entrypoint-kinds.js +11 -0
- package/dist/environment/application/destructive.d.ts +6 -0
- package/dist/environment/application/destructive.js +425 -0
- package/dist/environment/application/doctor.d.ts +89 -0
- package/dist/environment/application/doctor.js +235 -0
- package/dist/environment/application/guard.d.ts +43 -0
- package/dist/environment/application/guard.js +622 -0
- package/dist/environment/application/health.d.ts +134 -0
- package/dist/environment/application/health.js +379 -0
- package/dist/environment/application/lifecycle-context.d.ts +228 -0
- package/dist/environment/application/lifecycle-context.js +154 -0
- package/dist/environment/application/lifecycle-state.d.ts +25 -0
- package/dist/environment/application/lifecycle-state.js +201 -0
- package/dist/environment/application/lifecycle.d.ts +17 -0
- package/dist/environment/application/lifecycle.js +729 -0
- package/dist/environment/application/logs.d.ts +45 -0
- package/dist/environment/application/logs.js +127 -0
- package/dist/environment/application/setup.d.ts +129 -0
- package/dist/environment/application/setup.js +741 -0
- package/dist/environment/application/shared.d.ts +11 -0
- package/dist/environment/application/shared.js +61 -0
- package/dist/environment/claims.d.ts +389 -0
- package/dist/environment/claims.js +1709 -0
- package/dist/environment/codex-hook-trust.d.ts +11 -0
- package/dist/environment/codex-hook-trust.js +185 -0
- package/dist/environment/compose-environment.d.ts +1 -0
- package/dist/environment/compose-environment.js +6 -0
- package/dist/environment/compose-ownership.d.ts +21 -0
- package/dist/environment/compose-ownership.js +117 -0
- package/dist/environment/compose-topology.d.ts +117 -0
- package/dist/environment/compose-topology.js +413 -0
- package/dist/environment/contract.d.ts +489 -0
- package/dist/environment/contract.js +761 -0
- package/dist/environment/declaration.d.ts +14 -0
- package/dist/environment/declaration.js +39 -0
- package/dist/environment/destructive-composition.d.ts +29 -0
- package/dist/environment/destructive-composition.js +333 -0
- package/dist/environment/docker-daemon.d.ts +30 -0
- package/dist/environment/docker-daemon.js +78 -0
- package/dist/environment/docker-endpoint.d.ts +10 -0
- package/dist/environment/docker-endpoint.js +19 -0
- package/dist/environment/env-schema-observation.d.ts +46 -0
- package/dist/environment/env-schema-observation.js +241 -0
- package/dist/environment/evidence.d.ts +136 -0
- package/dist/environment/evidence.js +437 -0
- package/dist/environment/executable.d.ts +26 -0
- package/dist/environment/executable.js +167 -0
- package/dist/environment/generated-application/authorities.d.ts +5 -0
- package/dist/environment/generated-application/authorities.js +61 -0
- package/dist/environment/generated-application/bootstrap-skill.d.ts +16 -0
- package/dist/environment/generated-application/bootstrap-skill.js +328 -0
- package/dist/environment/generated-application/check.d.ts +13 -0
- package/dist/environment/generated-application/check.js +189 -0
- package/dist/environment/generated-application/custom-surface.d.ts +26 -0
- package/dist/environment/generated-application/custom-surface.js +289 -0
- package/dist/environment/generated-application/prepare.d.ts +29 -0
- package/dist/environment/generated-application/prepare.js +276 -0
- package/dist/environment/generated-application/publication.d.ts +33 -0
- package/dist/environment/generated-application/publication.js +547 -0
- package/dist/environment/generated-application/shared.d.ts +484 -0
- package/dist/environment/generated-application/shared.js +349 -0
- package/dist/environment/generated-application/surface-observation.d.ts +4 -0
- package/dist/environment/generated-application/surface-observation.js +69 -0
- package/dist/environment/generated-application/surface-outputs.d.ts +71 -0
- package/dist/environment/generated-application/surface-outputs.js +389 -0
- package/dist/environment/generated-application/surfaces.d.ts +3 -0
- package/dist/environment/generated-application/surfaces.js +699 -0
- package/dist/environment/generated-application/sync.d.ts +6 -0
- package/dist/environment/generated-application/sync.js +109 -0
- package/dist/environment/git-observation.d.ts +183 -0
- package/dist/environment/git-observation.js +544 -0
- package/dist/environment/health-composition.d.ts +11 -0
- package/dist/environment/health-composition.js +628 -0
- package/dist/environment/host-observation.d.ts +56 -0
- package/dist/environment/host-observation.js +52 -0
- package/dist/environment/identity.d.ts +48 -0
- package/dist/environment/identity.js +85 -0
- package/dist/environment/init-application.d.ts +308 -0
- package/dist/environment/init-application.js +697 -0
- package/dist/environment/install-policy-observation.d.ts +71 -0
- package/dist/environment/install-policy-observation.js +284 -0
- package/dist/environment/install-policy.d.ts +48 -0
- package/dist/environment/install-policy.js +96 -0
- package/dist/environment/instance.d.ts +33 -0
- package/dist/environment/instance.js +122 -0
- package/dist/environment/instruction-pointer.d.ts +19 -0
- package/dist/environment/instruction-pointer.js +144 -0
- package/dist/environment/lifecycle-composition.d.ts +29 -0
- package/dist/environment/lifecycle-composition.js +675 -0
- package/dist/environment/lifecycle-stage.d.ts +115 -0
- package/dist/environment/lifecycle-stage.js +398 -0
- package/dist/environment/lifecycle.d.ts +75 -0
- package/dist/environment/lifecycle.js +354 -0
- package/dist/environment/logs.d.ts +132 -0
- package/dist/environment/logs.js +519 -0
- package/dist/environment/observations.d.ts +46 -0
- package/dist/environment/observations.js +344 -0
- package/dist/environment/operator-application.d.ts +50 -0
- package/dist/environment/operator-application.js +155 -0
- package/dist/environment/ports.d.ts +182 -0
- package/dist/environment/ports.js +1205 -0
- package/dist/environment/posture-observation.d.ts +68 -0
- package/dist/environment/posture-observation.js +253 -0
- package/dist/environment/read-composition.d.ts +27 -0
- package/dist/environment/read-composition.js +352 -0
- package/dist/environment/readiness-composition.d.ts +38 -0
- package/dist/environment/readiness-composition.js +130 -0
- package/dist/environment/reclaim.d.ts +333 -0
- package/dist/environment/reclaim.js +1835 -0
- package/dist/environment/repository-identity.d.ts +13 -0
- package/dist/environment/repository-identity.js +108 -0
- package/dist/environment/runtime-measurement-record.d.ts +38 -0
- package/dist/environment/runtime-measurement-record.js +111 -0
- package/dist/environment/runtime-measurement.d.ts +27 -0
- package/dist/environment/runtime-measurement.js +224 -0
- package/dist/environment/runtime-probe-residue.d.ts +43 -0
- package/dist/environment/runtime-probe-residue.js +148 -0
- package/dist/environment/runtime-probe.d.ts +72 -0
- package/dist/environment/runtime-probe.js +725 -0
- package/dist/environment/runtime.d.ts +505 -0
- package/dist/environment/runtime.js +2335 -0
- package/dist/environment/seed.d.ts +16 -0
- package/dist/environment/seed.js +43 -0
- package/dist/environment/selftest-application.d.ts +86 -0
- package/dist/environment/selftest-application.js +713 -0
- package/dist/environment/sensitive.d.ts +3 -0
- package/dist/environment/sensitive.js +48 -0
- package/dist/environment/setup-observation.d.ts +62 -0
- package/dist/environment/setup-observation.js +1473 -0
- package/dist/environment/setup.d.ts +43 -0
- package/dist/environment/setup.js +176 -0
- package/dist/environment/sibling-instructions.d.ts +33 -0
- package/dist/environment/sibling-instructions.js +224 -0
- package/dist/environment/sibling-registration.d.ts +45 -0
- package/dist/environment/sibling-registration.js +538 -0
- package/dist/environment/state.d.ts +371 -0
- package/dist/environment/state.js +2013 -0
- package/dist/environment/templates.d.ts +140 -0
- package/dist/environment/templates.js +685 -0
- package/dist/environment/tool-registration.d.ts +9 -0
- package/dist/environment/tool-registration.js +96 -0
- package/dist/environment/upgrade-application.d.ts +19 -0
- package/dist/environment/upgrade-application.js +175 -0
- package/dist/environment-exec/execute.d.ts +102 -0
- package/dist/environment-exec/execute.js +1175 -0
- package/dist/environment-exec/libexec-program.d.ts +6 -0
- package/dist/environment-exec/libexec-program.js +22 -0
- package/dist/environment-exec/verified-digest.d.ts +4 -0
- package/dist/environment-exec/verified-digest.js +16 -0
- package/dist/exact-keys.d.ts +7 -0
- package/dist/exact-keys.js +15 -0
- package/dist/fix-catalogue.d.ts +32 -0
- package/dist/fix-catalogue.js +60 -0
- package/dist/freshness.d.ts +29 -0
- package/dist/freshness.js +75 -0
- package/dist/generated-environment/adopt.d.ts +16 -0
- package/dist/generated-environment/adopt.js +275 -0
- package/dist/generated-environment/command.d.ts +47 -0
- package/dist/generated-environment/command.js +75 -0
- package/dist/generated-environment/transaction.d.ts +186 -0
- package/dist/generated-environment/transaction.js +1770 -0
- package/dist/grading/evaluate.d.ts +71 -0
- package/dist/grading/evaluate.js +403 -0
- package/dist/grading/grade.d.ts +33 -0
- package/dist/grading/grade.js +57 -0
- package/dist/guards/evaluator.d.ts +113 -0
- package/dist/guards/evaluator.js +1226 -0
- package/dist/guards/harness-adapter.d.ts +17 -0
- package/dist/guards/harness-adapter.js +57 -0
- package/dist/guards/host.d.ts +8 -0
- package/dist/guards/host.js +10 -0
- package/dist/guards/invocation-parser.d.ts +66 -0
- package/dist/guards/invocation-parser.js +595 -0
- package/dist/guards/local-identity.d.ts +40 -0
- package/dist/guards/local-identity.js +123 -0
- package/dist/guards/policy-pin.d.ts +13 -0
- package/dist/guards/policy-pin.js +175 -0
- package/dist/guards/protected-locations.d.ts +62 -0
- package/dist/guards/protected-locations.js +461 -0
- package/dist/guards/read-only.d.ts +37 -0
- package/dist/guards/read-only.js +315 -0
- package/dist/init/command.d.ts +40 -0
- package/dist/init/command.js +310 -0
- package/dist/init/derive.d.ts +51 -0
- package/dist/init/derive.js +715 -0
- package/dist/init/draft.d.ts +138 -0
- package/dist/init/draft.js +1205 -0
- package/dist/init/render.d.ts +35 -0
- package/dist/init/render.js +82 -0
- package/dist/init/scaffold.d.ts +53 -0
- package/dist/init/scaffold.js +121 -0
- package/dist/invocation.d.ts +13 -0
- package/dist/invocation.js +20 -0
- package/dist/package-metadata.d.ts +9 -0
- package/dist/package-metadata.js +19 -0
- package/dist/readiness.d.ts +53 -0
- package/dist/readiness.js +88 -0
- package/dist/references/named.d.ts +24 -0
- package/dist/references/named.js +27 -0
- package/dist/refusal.d.ts +15 -0
- package/dist/refusal.js +7 -0
- package/dist/registry-derivation.d.ts +31 -0
- package/dist/registry-derivation.js +32 -0
- package/dist/registry-resolve/command.d.ts +47 -0
- package/dist/registry-resolve/command.js +226 -0
- package/dist/registry-resolve/registry.d.ts +68 -0
- package/dist/registry-resolve/registry.js +292 -0
- package/dist/registry-resolve/render-shell.d.ts +18 -0
- package/dist/registry-resolve/render-shell.js +36 -0
- package/dist/repair.d.ts +29 -0
- package/dist/repair.js +8 -0
- package/dist/schema-json.d.ts +1 -0
- package/dist/schema-json.js +177 -0
- package/dist/schema.d.ts +1322 -0
- package/dist/schema.js +934 -0
- package/dist/setup/command.d.ts +4 -0
- package/dist/setup/command.js +4 -0
- package/dist/sha256.d.ts +1 -0
- package/dist/sha256.js +4 -0
- package/dist/surfaces/adoption.d.ts +41 -0
- package/dist/surfaces/adoption.js +217 -0
- package/dist/surfaces/consumer-instructions.d.ts +20 -0
- package/dist/surfaces/consumer-instructions.js +43 -0
- package/dist/surfaces/contract.d.ts +42 -0
- package/dist/surfaces/contract.js +169 -0
- package/dist/surfaces/core-declarations.d.ts +24 -0
- package/dist/surfaces/core-declarations.js +79 -0
- package/dist/surfaces/development-markers.d.ts +1 -0
- package/dist/surfaces/development-markers.js +18 -0
- package/dist/surfaces/generator-adapter.d.ts +71 -0
- package/dist/surfaces/generator-adapter.js +809 -0
- package/dist/surfaces/harness-registry.d.ts +180 -0
- package/dist/surfaces/harness-registry.js +117 -0
- package/dist/surfaces/mcp.d.ts +95 -0
- package/dist/surfaces/mcp.js +186 -0
- package/dist/surfaces/merge.d.ts +30 -0
- package/dist/surfaces/merge.js +105 -0
- package/dist/surfaces/ownership.d.ts +190 -0
- package/dist/surfaces/ownership.js +795 -0
- package/dist/surfaces/projection.d.ts +136 -0
- package/dist/surfaces/projection.js +681 -0
- package/dist/surfaces/render.d.ts +118 -0
- package/dist/surfaces/render.js +633 -0
- package/dist/surfaces/restrictions.d.ts +130 -0
- package/dist/surfaces/restrictions.js +447 -0
- package/dist/surfaces/selftest.d.ts +162 -0
- package/dist/surfaces/selftest.js +393 -0
- package/dist/surfaces/skill-contract.d.ts +85 -0
- package/dist/surfaces/skill-contract.js +449 -0
- package/dist/surfaces/sync.d.ts +57 -0
- package/dist/surfaces/sync.js +164 -0
- package/dist/team-metadata.d.ts +41 -0
- package/dist/team-metadata.js +512 -0
- package/dist/testing/gates.d.ts +91 -0
- package/dist/testing/gates.js +182 -0
- package/dist/testing/hooks.d.ts +59 -0
- package/dist/testing/hooks.js +139 -0
- package/dist/testing/verdict.d.ts +29 -0
- package/dist/testing/verdict.js +62 -0
- package/dist/work-orders/application.d.ts +99 -0
- package/dist/work-orders/application.js +383 -0
- package/dist/work-orders/composition.d.ts +124 -0
- package/dist/work-orders/composition.js +1010 -0
- package/dist/work-orders/contract.d.ts +61 -0
- package/dist/work-orders/contract.js +122 -0
- package/dist/work-orders/store.d.ts +158 -0
- package/dist/work-orders/store.js +197 -0
- package/docs/README.md +65 -0
- package/docs/architecture.md +136 -0
- package/docs/capability-matrix.md +50 -0
- package/docs/cli-reference.md +599 -0
- package/docs/command-list.md +51 -0
- package/docs/compose-patterns.md +99 -0
- package/docs/concepts.md +171 -0
- package/docs/configuration-essentials.md +172 -0
- package/docs/configuration-reference.md +621 -0
- package/docs/environment.md +760 -0
- package/docs/extending.md +43 -0
- package/docs/faq.md +111 -0
- package/docs/getting-started.md +608 -0
- package/docs/harness-surfaces.md +433 -0
- package/docs/joining-a-team.md +76 -0
- package/docs/release-policy.md +49 -0
- package/docs/safety-and-autonomy.md +419 -0
- package/docs/troubleshooting.md +361 -0
- package/docs/tutorial.md +170 -0
- package/docs/work-and-browser.md +254 -0
- package/libexec/browser-operation.cjs +186 -0
- package/libexec/fence-marker.cjs +101 -0
- package/libexec/fence-marker.d.cts +24 -0
- package/libexec/fenced-group-runner.cjs +77 -0
- package/libexec/fenced-supervisor.cjs +137 -0
- package/libexec/generated-filesystem.cjs +731 -0
- package/libexec/install-filesystem.cjs +225 -0
- package/libexec/rulesync-generator.NOTICE.md +1112 -0
- package/libexec/rulesync-generator.cjs +743 -0
- package/libexec/surface-generator-worker.cjs +266 -0
- package/libexec/surface-output-reader.cjs +99 -0
- package/libexec/surface-scratch-cleanup.cjs +14 -0
- package/libexec/validate-harness-evidence.d.mts +183 -0
- package/libexec/validate-harness-evidence.mjs +1312 -0
- package/package.json +76 -1
- package/surfaces/README.md +33 -0
- package/surfaces/agents/evaluator.agent.md +76 -0
- package/surfaces/guards/bash-guard.sh +48 -0
- package/surfaces/guards/claude.adapter.json +25 -0
- package/surfaces/guards/codex.adapter.json +24 -0
- package/surfaces/guards/opencode.adapter.json +25 -0
- package/surfaces/references/browser.md +63 -0
- package/surfaces/references/test-data-and-personas.md +84 -0
- package/surfaces/references/testing-tiers.md +11 -0
- package/surfaces/skills/cockpit-browser.skill.md +54 -0
- package/surfaces/skills/cockpit-explain.skill.md +32 -0
- package/surfaces/skills/cockpit-fix.skill.md +37 -0
- package/surfaces/skills/cockpit-setup.skill.md +39 -0
- package/surfaces/skills/cockpit-work.skill.md +34 -0
- package/surfaces/skills/collection.json +5 -0
- package/surfaces/skills/procedures/explain.md +61 -0
- package/surfaces/skills/procedures/fix.md +81 -0
- package/surfaces/skills/procedures/setup.md +379 -0
- package/surfaces/skills/procedures/work.md +105 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type JsonSnapshotObject } from '../environment/contract.js';
|
|
2
|
+
import { type GuardSurfaceTarget } from '../surfaces/harness-registry.js';
|
|
3
|
+
import type { GuardDecision } from './evaluator.js';
|
|
4
|
+
export declare const GUARD_HANDLER_ARGV: readonly ["guard-evaluate"];
|
|
5
|
+
export interface NativeGuardOutput {
|
|
6
|
+
readonly target: GuardSurfaceTarget | null;
|
|
7
|
+
readonly capability: 'instructed';
|
|
8
|
+
readonly decision: GuardDecision['decision'];
|
|
9
|
+
readonly exitCode: 0 | 2;
|
|
10
|
+
readonly stdout: string;
|
|
11
|
+
readonly stderr: string;
|
|
12
|
+
}
|
|
13
|
+
/** Native spelling cannot add grants or change the evaluator's hard boundaries. */
|
|
14
|
+
export declare function adaptGuardDecision(harness: unknown, input: unknown): NativeGuardOutput;
|
|
15
|
+
/** Only measured field-name normalization; shell and patch grammar belong to the parser. */
|
|
16
|
+
export declare function normalizeOpenCodeInput(input: unknown): JsonSnapshotObject | undefined;
|
|
17
|
+
/** The application binds this data to the shared process executor; no handler is installed here. */
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { posix } from 'node:path';
|
|
2
|
+
import { exactKeys } from '../exact-keys.js';
|
|
3
|
+
import { snapshotJson } from '../environment/contract.js';
|
|
4
|
+
import { GUARD_SURFACE_TARGETS } from '../surfaces/harness-registry.js';
|
|
5
|
+
import { GUARD_INPUT_LIMITS } from './invocation-parser.js';
|
|
6
|
+
export const GUARD_HANDLER_ARGV = Object.freeze(['guard-evaluate']);
|
|
7
|
+
function target(value) { return typeof value === 'string' && GUARD_SURFACE_TARGETS.some((item) => item === value); }
|
|
8
|
+
function record(value) { return value !== null && typeof value === 'object' && !Array.isArray(value); }
|
|
9
|
+
function text(value, limit) { return typeof value === 'string' && Buffer.byteLength(value) <= limit && !/[\uD800-\uDFFF]/u.test(value); }
|
|
10
|
+
function absolute(value) {
|
|
11
|
+
return text(value, GUARD_INPUT_LIMITS.pathBytes) && value.startsWith('/') && value !== '/' && !value.endsWith('/')
|
|
12
|
+
&& posix.normalize(value) === value && !/[\x00-\x1f\x7f\\]/.test(value);
|
|
13
|
+
}
|
|
14
|
+
function decision(value) {
|
|
15
|
+
const captured = snapshotJson(value);
|
|
16
|
+
if (!record(captured) || !exactKeys(captured, ['decision', 'reason']) || !['allow', 'ask', 'deny', 'unavailable'].includes(String(captured.decision))
|
|
17
|
+
|| !text(captured.reason, 4096) || !captured.reason.trim() || /[\x00-\x1f\x7f-\x9f\u061c\u200e\u200f\u2028-\u202e\u2066-\u2069]/.test(captured.reason))
|
|
18
|
+
return undefined;
|
|
19
|
+
return captured;
|
|
20
|
+
}
|
|
21
|
+
/** Native spelling cannot add grants or change the evaluator's hard boundaries. */
|
|
22
|
+
export function adaptGuardDecision(harness, input) {
|
|
23
|
+
const resolved = decision(input);
|
|
24
|
+
const native = target(harness) ? harness : null;
|
|
25
|
+
const selected = resolved && native ? resolved : { decision: 'unavailable', reason: 'Guard adapter received an invalid harness or closed decision.' };
|
|
26
|
+
const verdict = selected.decision === 'ask' && native !== 'claudecode' ? 'deny' : selected.decision;
|
|
27
|
+
let stdout = '';
|
|
28
|
+
let stderr = '';
|
|
29
|
+
let exitCode = 0;
|
|
30
|
+
if (verdict === 'unavailable' || native === 'opencode' && verdict !== 'allow') {
|
|
31
|
+
exitCode = 2;
|
|
32
|
+
stderr = `cockpit guard: ${selected.reason}\n`;
|
|
33
|
+
}
|
|
34
|
+
else if (verdict !== 'allow') {
|
|
35
|
+
stdout = JSON.stringify({ hookSpecificOutput: {
|
|
36
|
+
hookEventName: 'PreToolUse', permissionDecision: verdict, permissionDecisionReason: selected.reason,
|
|
37
|
+
} }) + '\n';
|
|
38
|
+
}
|
|
39
|
+
return { target: native, capability: 'instructed', decision: verdict, exitCode, stdout, stderr };
|
|
40
|
+
}
|
|
41
|
+
/** Only measured field-name normalization; shell and patch grammar belong to the parser. */
|
|
42
|
+
export function normalizeOpenCodeInput(input) {
|
|
43
|
+
const value = snapshotJson(input);
|
|
44
|
+
if (!record(value) || !exactKeys(value, ['tool', 'args', 'cwd']) || typeof value.tool !== 'string' || !record(value.args) || !absolute(value.cwd))
|
|
45
|
+
return undefined;
|
|
46
|
+
const tools = { bash: 'Bash', edit: 'Edit', write: 'Write', apply_patch: 'apply_patch' };
|
|
47
|
+
const tool = Object.hasOwn(tools, value.tool) ? tools[value.tool] : undefined;
|
|
48
|
+
if (!tool)
|
|
49
|
+
return undefined;
|
|
50
|
+
const field = tool === 'Bash' ? value.args.command : tool === 'apply_patch' ? value.args.patchText : value.args.filePath ?? value.args.path ?? value.args.file;
|
|
51
|
+
if (typeof field !== 'string')
|
|
52
|
+
return undefined;
|
|
53
|
+
const result = snapshotJson({ hook_event_name: 'PreToolUse', tool_name: tool, cwd: value.cwd,
|
|
54
|
+
tool_input: tool === 'Bash' || tool === 'apply_patch' ? { command: field } : { file_path: field } });
|
|
55
|
+
return record(result) && Buffer.byteLength(JSON.stringify(result)) <= GUARD_INPUT_LIMITS.inputBytes ? result : undefined;
|
|
56
|
+
}
|
|
57
|
+
/** The application binds this data to the shared process executor; no handler is installed here. */
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const GUARD_HOST_LIMITS: Readonly<{
|
|
2
|
+
hostnameBytes: 253;
|
|
3
|
+
labelBytes: 63;
|
|
4
|
+
rows: 128;
|
|
5
|
+
}>;
|
|
6
|
+
export declare const GUARD_HOST_PATTERN: RegExp;
|
|
7
|
+
export declare function isGuardHost(value: unknown): value is string;
|
|
8
|
+
export declare function normalizeGuardHost(value: string): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const GUARD_HOST_LIMITS = Object.freeze({ hostnameBytes: 253, labelBytes: 63, rows: 128 });
|
|
2
|
+
const label = `[a-z0-9](?:[a-z0-9-]{0,${GUARD_HOST_LIMITS.labelBytes - 2}}[a-z0-9])?`;
|
|
3
|
+
// ASCII makes these character bounds identical to UTF-8 byte bounds, including in editor schemas.
|
|
4
|
+
export const GUARD_HOST_PATTERN = new RegExp(`^(?:\\*\\.)?(?=[a-z0-9.-]{1,${GUARD_HOST_LIMITS.hostnameBytes}}(?![\\s\\S]))${label}(?:\\.${label})*(?![\\s\\S])`);
|
|
5
|
+
export function isGuardHost(value) {
|
|
6
|
+
return typeof value === 'string' && GUARD_HOST_PATTERN.test(value);
|
|
7
|
+
}
|
|
8
|
+
export function normalizeGuardHost(value) {
|
|
9
|
+
return value.startsWith('*.') ? value.slice(2) : value;
|
|
10
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export declare const GUARD_INPUT_LIMITS: Readonly<{
|
|
2
|
+
inputBytes: 65536;
|
|
3
|
+
invocations: 256;
|
|
4
|
+
words: 4096;
|
|
5
|
+
wordBytes: 4096;
|
|
6
|
+
paths: 256;
|
|
7
|
+
pathBytes: 4096;
|
|
8
|
+
}>;
|
|
9
|
+
export type InvocationRole = 'executable' | 'argument' | 'environment-assignment-value' | 'wrapper-option-value' | 'redirect-target' | 'heredoc-body' | 'comment' | 'definition' | 'directory';
|
|
10
|
+
export interface InvocationWord {
|
|
11
|
+
readonly role: InvocationRole;
|
|
12
|
+
readonly value: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ParsedInvocation {
|
|
15
|
+
readonly executable: string | null;
|
|
16
|
+
readonly argv: readonly string[];
|
|
17
|
+
readonly cwd: string;
|
|
18
|
+
readonly wrapped: boolean;
|
|
19
|
+
readonly words: readonly InvocationWord[];
|
|
20
|
+
/** `truncate` marks `>` and `>|`, which empty an existing file before anything is written. */
|
|
21
|
+
readonly redirects: readonly {
|
|
22
|
+
readonly target: string;
|
|
23
|
+
readonly write: boolean;
|
|
24
|
+
readonly truncate: boolean;
|
|
25
|
+
}[];
|
|
26
|
+
/**
|
|
27
|
+
* An argument, assignment or wrapper option holds `$?`, the previous command's exit status. It expands to digits the guard
|
|
28
|
+
* cannot see, so a word holding it is never proven to name a path.
|
|
29
|
+
*/
|
|
30
|
+
readonly expandsStatus?: true;
|
|
31
|
+
}
|
|
32
|
+
/** The new text a file tool call carries, as the payload spells it, kept so the policy pin can apply it. */
|
|
33
|
+
export type GuardFileContent = Readonly<{
|
|
34
|
+
kind: 'replace';
|
|
35
|
+
path: string;
|
|
36
|
+
old: string;
|
|
37
|
+
new: string;
|
|
38
|
+
all: boolean;
|
|
39
|
+
}> | Readonly<{
|
|
40
|
+
kind: 'write';
|
|
41
|
+
path: string;
|
|
42
|
+
content: string;
|
|
43
|
+
}> | Readonly<{
|
|
44
|
+
kind: 'patch';
|
|
45
|
+
text: string;
|
|
46
|
+
}>;
|
|
47
|
+
export type GuardParseResult = {
|
|
48
|
+
readonly status: 'parsed';
|
|
49
|
+
readonly tool: 'Bash' | 'Edit' | 'Write' | 'NotebookEdit' | 'apply_patch';
|
|
50
|
+
readonly cwd: string;
|
|
51
|
+
readonly invocations: readonly ParsedInvocation[];
|
|
52
|
+
readonly paths: readonly string[];
|
|
53
|
+
/** Targets deleted, moved away from or emptied, as opposed to edited in place. */
|
|
54
|
+
readonly removed: readonly string[];
|
|
55
|
+
readonly content?: GuardFileContent;
|
|
56
|
+
} | {
|
|
57
|
+
readonly status: 'unavailable';
|
|
58
|
+
readonly reason: string;
|
|
59
|
+
};
|
|
60
|
+
export declare function isParsedGuardInput(value: unknown): value is Extract<GuardParseResult, {
|
|
61
|
+
status: 'parsed';
|
|
62
|
+
}>;
|
|
63
|
+
/** A word as a refusal quotes it: JSON-escaped, with the controls a harness rejects in a reason escaped too, and bounded. */
|
|
64
|
+
export declare function shownGuardWord(word: string): string;
|
|
65
|
+
/** Capture once: the evaluator never consumes native payloads or reparses shell text. */
|
|
66
|
+
export declare function parseGuardInput(input: unknown): GuardParseResult;
|