@webpresso/agent-kit 3.1.30 → 3.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 +53 -15
- package/bin/_run.js +183 -20
- package/catalog/AGENTS.md.tpl +3 -3
- package/catalog/agent/agents/implementer.md +45 -0
- package/catalog/agent/rules/parallel-orchestration-quota.md +100 -0
- package/catalog/agent/rules/pre-implementation.md +28 -1
- package/catalog/agent/rules/supported-agent-clis.md +9 -0
- package/catalog/agent/rules/typescript-version.md +50 -0
- package/catalog/agent/skills/codex/SKILL.md +25 -1
- package/catalog/agent/skills/verify/SKILL.md +4 -2
- package/catalog/docs/templates/blueprint.md +1 -1
- package/dist/esm/audit/agents.js +1 -0
- package/dist/esm/audit/blueprint-lifecycle-sql.d.ts +12 -0
- package/dist/esm/audit/blueprint-lifecycle-sql.js +23 -2
- package/dist/esm/audit/blueprint-pr-coverage.js +4 -0
- package/dist/esm/audit/blueprint-trust.js +14 -10
- package/dist/esm/audit/changeset-evidence.d.ts +23 -0
- package/dist/esm/audit/changeset-evidence.js +30 -0
- package/dist/esm/audit/changeset-required.d.ts +10 -0
- package/dist/esm/audit/changeset-required.js +73 -0
- package/dist/esm/audit/ci-guardrails-detection.d.ts +27 -0
- package/dist/esm/audit/ci-guardrails-detection.js +68 -0
- package/dist/esm/audit/ci-guardrails-wiring.d.ts +22 -0
- package/dist/esm/audit/ci-guardrails-wiring.js +80 -0
- package/dist/esm/audit/ci-test-perf.js +30 -0
- package/dist/esm/audit/command-surface.js +4 -2
- package/dist/esm/audit/host-substitution-risk.d.ts +2 -0
- package/dist/esm/audit/host-substitution-risk.js +256 -0
- package/dist/esm/audit/registry.d.ts +4 -4
- package/dist/esm/audit/registry.js +13 -1
- package/dist/esm/audit/toolchain-isolation.js +1 -2
- package/dist/esm/audit/typescript-version.d.ts +2 -0
- package/dist/esm/audit/typescript-version.js +123 -0
- package/dist/esm/blueprint/core/parser.js +101 -2
- package/dist/esm/blueprint/core/schema.d.ts +1 -0
- package/dist/esm/blueprint/core/schema.js +26 -0
- package/dist/esm/blueprint/core/validation/criteria.d.ts +14 -0
- package/dist/esm/blueprint/core/validation/criteria.js +41 -2
- package/dist/esm/blueprint/core/validation/state.js +25 -14
- package/dist/esm/blueprint/db/migrations/run.js +4 -2
- package/dist/esm/blueprint/lifecycle/audit.d.ts +20 -0
- package/dist/esm/blueprint/lifecycle/audit.js +87 -20
- package/dist/esm/blueprint/lifecycle/canonicalize.d.ts +6 -0
- package/dist/esm/blueprint/lifecycle/canonicalize.js +135 -0
- package/dist/esm/blueprint/lifecycle/local.d.ts +2 -1
- package/dist/esm/blueprint/lifecycle/local.js +19 -3
- package/dist/esm/blueprint/lifecycle/review-provenance.d.ts +6 -0
- package/dist/esm/blueprint/lifecycle/review-provenance.js +68 -12
- package/dist/esm/blueprint/lifecycle/rollout-anchor.d.ts +97 -0
- package/dist/esm/blueprint/lifecycle/rollout-anchor.js +161 -0
- package/dist/esm/blueprint/service/BlueprintCreationService.d.ts +1 -0
- package/dist/esm/blueprint/service/BlueprintCreationService.js +53 -4
- package/dist/esm/blueprint/service/blueprint-tech-debt-links.js +16 -2
- package/dist/esm/blueprint/sync/client.d.ts +2 -1
- package/dist/esm/blueprint/sync/client.js +1 -1
- package/dist/esm/blueprint/trust/command-runner.d.ts +26 -0
- package/dist/esm/blueprint/trust/command-runner.js +148 -0
- package/dist/esm/blueprint/trust/dossier.d.ts +1 -0
- package/dist/esm/blueprint/trust/dossier.js +40 -6
- package/dist/esm/blueprint/trust/gates.d.ts +7 -0
- package/dist/esm/blueprint/trust/gates.js +20 -0
- package/dist/esm/blueprint/trust/promotion.d.ts +8 -0
- package/dist/esm/blueprint/trust/promotion.js +74 -112
- package/dist/esm/blueprint/trust/scaffold.d.ts +19 -0
- package/dist/esm/blueprint/trust/scaffold.js +64 -0
- package/dist/esm/blueprint/trust/validator.d.ts +1 -0
- package/dist/esm/blueprint/trust/validator.js +7 -1
- package/dist/esm/blueprint/utils/archive.js +27 -5
- package/dist/esm/blueprint/utils/document-paths.d.ts +18 -0
- package/dist/esm/blueprint/utils/document-paths.js +45 -12
- package/dist/esm/build/cli-mcp-parity.js +15 -0
- package/dist/esm/cli/bundle/commands/blueprint.d.ts +1 -0
- package/dist/esm/cli/bundle/commands/blueprint.js +1 -0
- package/dist/esm/cli/cli.d.ts +1 -1
- package/dist/esm/cli/cli.js +43 -0
- package/dist/esm/cli/commands/agent-launch.d.ts +8 -1
- package/dist/esm/cli/commands/agent-launch.js +93 -4
- package/dist/esm/cli/commands/audit-core.d.ts +1 -1
- package/dist/esm/cli/commands/audit-core.js +8 -1
- package/dist/esm/cli/commands/audit.js +21 -5
- package/dist/esm/cli/commands/blueprint/execution.js +18 -6
- package/dist/esm/cli/commands/blueprint/mutations.js +59 -40
- package/dist/esm/cli/commands/blueprint/router-dispatch.d.ts +2 -1
- package/dist/esm/cli/commands/blueprint/router-dispatch.js +20 -1
- package/dist/esm/cli/commands/blueprint/router-output.d.ts +21 -0
- package/dist/esm/cli/commands/blueprint/router-output.js +48 -17
- package/dist/esm/cli/commands/blueprint/router.d.ts +7 -0
- package/dist/esm/cli/commands/blueprint/router.js +13 -1
- package/dist/esm/cli/commands/ci-preflight.d.ts +13 -2
- package/dist/esm/cli/commands/ci-preflight.js +30 -6
- package/dist/esm/cli/commands/compile.js +5 -31
- package/dist/esm/cli/commands/dash/delivery-status.d.ts +1 -0
- package/dist/esm/cli/commands/dash/delivery-status.js +11 -4
- package/dist/esm/cli/commands/doctor.js +5 -0
- package/dist/esm/cli/commands/hook.d.ts +5 -0
- package/dist/esm/cli/commands/hook.js +15 -9
- package/dist/esm/cli/commands/init/config.js +2 -2
- package/dist/esm/cli/commands/init/convergence-apply.d.ts +88 -0
- package/dist/esm/cli/commands/init/convergence-apply.js +325 -0
- package/dist/esm/cli/commands/init/convergence-state.d.ts +13 -0
- package/dist/esm/cli/commands/init/convergence-state.js +54 -0
- package/dist/esm/cli/commands/init/convergence.d.ts +23 -0
- package/dist/esm/cli/commands/init/convergence.js +57 -0
- package/dist/esm/cli/commands/init/git-convergence.d.ts +19 -0
- package/dist/esm/cli/commands/init/git-convergence.js +168 -0
- package/dist/esm/cli/commands/init/gitignore-patcher.js +2 -0
- package/dist/esm/cli/commands/init/grok-privacy-smoke.d.ts +52 -0
- package/dist/esm/cli/commands/init/grok-privacy-smoke.js +91 -0
- package/dist/esm/cli/commands/init/host-native-proof.d.ts +18 -0
- package/dist/esm/cli/commands/init/host-native-proof.js +88 -0
- package/dist/esm/cli/commands/init/host-visibility.d.ts +2 -2
- package/dist/esm/cli/commands/init/host-visibility.js +94 -5
- package/dist/esm/cli/commands/init/index.d.ts +3 -0
- package/dist/esm/cli/commands/init/index.js +326 -173
- package/dist/esm/cli/commands/init/mcp-spec.d.ts +57 -0
- package/dist/esm/cli/commands/init/mcp-spec.js +273 -0
- package/dist/esm/cli/commands/init/merge.d.ts +1 -0
- package/dist/esm/cli/commands/init/merge.js +30 -1
- package/dist/esm/cli/commands/init/package-root.d.ts +7 -0
- package/dist/esm/cli/commands/init/package-root.js +10 -2
- package/dist/esm/cli/commands/init/plugin-cache-prune.d.ts +0 -3
- package/dist/esm/cli/commands/init/plugin-cache-prune.js +0 -1
- package/dist/esm/cli/commands/init/scaffold-agents-md.d.ts +1 -1
- package/dist/esm/cli/commands/init/scaffold-agents-md.js +9 -3
- package/dist/esm/cli/commands/init/scaffold-base-kit.d.ts +20 -0
- package/dist/esm/cli/commands/init/scaffold-base-kit.js +61 -5
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/emitters/grok.d.ts +14 -8
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/emitters/grok.js +41 -24
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/index.d.ts +2 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/index.js +54 -24
- package/dist/esm/cli/commands/init/scaffolders/codex-mcp/index.d.ts +12 -31
- package/dist/esm/cli/commands/init/scaffolders/codex-mcp/index.js +288 -202
- package/dist/esm/cli/commands/init/scaffolders/file-transaction.d.ts +22 -0
- package/dist/esm/cli/commands/init/scaffolders/file-transaction.js +230 -0
- package/dist/esm/cli/commands/init/scaffolders/grok-mcp/index.d.ts +38 -0
- package/dist/esm/cli/commands/init/scaffolders/grok-mcp/index.js +73 -0
- package/dist/esm/cli/commands/init/scaffolders/opencode-plugin/index.d.ts +21 -0
- package/dist/esm/cli/commands/init/scaffolders/opencode-plugin/index.js +559 -63
- package/dist/esm/cli/commands/init/untracked-collision.d.ts +14 -0
- package/dist/esm/cli/commands/init/untracked-collision.js +42 -0
- package/dist/esm/cli/commands/opencode-probe.d.ts +107 -0
- package/dist/esm/cli/commands/opencode-probe.js +323 -0
- package/dist/esm/cli/commands/opencode-rotate.d.ts +72 -0
- package/dist/esm/cli/commands/opencode-rotate.js +147 -0
- package/dist/esm/cli/commands/public-readiness.d.ts +11 -0
- package/dist/esm/cli/commands/public-readiness.js +42 -0
- package/dist/esm/cli/commands/quality-runner.js +3 -3
- package/dist/esm/cli/commands/review.d.ts +35 -3
- package/dist/esm/cli/commands/review.js +751 -209
- package/dist/esm/cli/commands/run-wait.d.ts +2 -0
- package/dist/esm/cli/commands/run-wait.js +122 -0
- package/dist/esm/cli/commands/rust-check.d.ts +24 -0
- package/dist/esm/cli/commands/rust-check.js +110 -0
- package/dist/esm/cli/commands/setup-help.js +1 -1
- package/dist/esm/cli/commands/setup-repair-help.js +1 -1
- package/dist/esm/cli/commands/typecheck.d.ts +1 -0
- package/dist/esm/cli/commands/typecheck.js +30 -1
- package/dist/esm/cli/commands/worktree/router-dispatch.d.ts +6 -0
- package/dist/esm/cli/commands/worktree/router-dispatch.js +126 -9
- package/dist/esm/cli/commands/worktree/router.js +10 -0
- package/dist/esm/cli/direct-provider-launch.js +9 -5
- package/dist/esm/cli/optional-tool-freshness.d.ts +27 -0
- package/dist/esm/cli/optional-tool-freshness.js +219 -9
- package/dist/esm/daemon/domains/git-actions.d.ts +29 -0
- package/dist/esm/daemon/domains/git-actions.js +136 -0
- package/dist/esm/daemon/domains/run-registry-interop.d.ts +16 -0
- package/dist/esm/daemon/domains/run-registry-interop.js +45 -0
- package/dist/esm/daemon/domains/sessions-search.d.ts +11 -0
- package/dist/esm/daemon/domains/sessions-search.js +29 -0
- package/dist/esm/daemon/handlers/blueprints-handlers.d.ts +5 -0
- package/dist/esm/daemon/handlers/blueprints-handlers.js +36 -0
- package/dist/esm/daemon/handlers/deploy-handlers.d.ts +6 -0
- package/dist/esm/daemon/handlers/deploy-handlers.js +5 -0
- package/dist/esm/daemon/handlers/fleet-handlers.d.ts +15 -0
- package/dist/esm/daemon/handlers/fleet-handlers.js +91 -0
- package/dist/esm/daemon/handlers/git-handlers.d.ts +6 -0
- package/dist/esm/daemon/handlers/git-handlers.js +27 -0
- package/dist/esm/daemon/handlers/product.d.ts +7 -0
- package/dist/esm/daemon/handlers/product.js +10 -119
- package/dist/esm/daemon/handlers/sessions-handlers.d.ts +12 -0
- package/dist/esm/daemon/handlers/sessions-handlers.js +31 -0
- package/dist/esm/daemon/handlers/shared.d.ts +5 -0
- package/dist/esm/daemon/handlers/shared.js +16 -0
- package/dist/esm/daemon/methods.d.ts +8 -1
- package/dist/esm/daemon/methods.js +7 -0
- package/dist/esm/daemon/protocol/contract.d.ts +43 -0
- package/dist/esm/daemon/protocol/contract.js +26 -0
- package/dist/esm/daemon/protocol/index.d.ts +1 -1
- package/dist/esm/daemon/protocol/index.js +1 -1
- package/dist/esm/hooks/__conformance__/matrix.d.ts +6 -0
- package/dist/esm/hooks/__conformance__/matrix.js +137 -0
- package/dist/esm/hooks/conformance/batch.js +5 -0
- package/dist/esm/hooks/doctor.d.ts +5 -3
- package/dist/esm/hooks/doctor.js +67 -16
- package/dist/esm/hooks/permission-request/index.js +9 -3
- package/dist/esm/hooks/permission-request/policy.d.ts +9 -0
- package/dist/esm/hooks/permission-request/policy.js +13 -0
- package/dist/esm/hooks/pretool-guard/dev-routing.d.ts +9 -0
- package/dist/esm/hooks/pretool-guard/dev-routing.js +41 -5
- package/dist/esm/hooks/pretool-guard/logger.d.ts +7 -0
- package/dist/esm/hooks/pretool-guard/logger.js +16 -0
- package/dist/esm/hooks/pretool-guard/runner.d.ts +6 -0
- package/dist/esm/hooks/pretool-guard/runner.js +68 -16
- package/dist/esm/hooks/pretool-guard/validators/blueprint.js +30 -10
- package/dist/esm/hooks/pretool-guard/validators/forbidden-commands.js +54 -0
- package/dist/esm/hooks/pretool-guard/validators/index.d.ts +7 -0
- package/dist/esm/hooks/pretool-guard/validators/index.js +21 -0
- package/dist/esm/hooks/pretool-guard/validators/path-contract.d.ts +19 -0
- package/dist/esm/hooks/pretool-guard/validators/path-contract.js +25 -8
- package/dist/esm/hooks/pretool-guard/validators/worktree-discipline.js +6 -1
- package/dist/esm/hooks/shared/guard-outcome.d.ts +149 -0
- package/dist/esm/hooks/shared/guard-outcome.js +215 -0
- package/dist/esm/hooks/shared/hook-bootstrap.d.ts +26 -0
- package/dist/esm/hooks/shared/hook-bootstrap.js +64 -1
- package/dist/esm/hooks/shared/types.d.ts +8 -5
- package/dist/esm/hooks/shared/types.js +50 -9
- package/dist/esm/hooks/stop/qa-changed-files.d.ts +11 -0
- package/dist/esm/hooks/stop/qa-changed-files.js +92 -0
- package/dist/esm/mcp/blueprint/_shared/lifecycle.js +14 -1
- package/dist/esm/mcp/blueprint/handlers/document-mutations.d.ts +5 -0
- package/dist/esm/mcp/blueprint/handlers/document-mutations.js +109 -11
- package/dist/esm/mcp/blueprint/handlers/review-log.js +8 -1
- package/dist/esm/mcp/blueprint/handlers/task-advance.js +113 -54
- package/dist/esm/mcp/blueprint/handlers/task-verify.js +39 -19
- package/dist/esm/mcp/blueprint/registration.js +3 -2
- package/dist/esm/mcp/server.d.ts +1 -0
- package/dist/esm/mcp/server.js +27 -0
- package/dist/esm/mcp/tools/_names.d.ts +1 -1
- package/dist/esm/mcp/tools/_names.js +5 -0
- package/dist/esm/mcp/tools/_registry.js +10 -0
- package/dist/esm/mcp/tools/_shared/audit-kinds.d.ts +1 -1
- package/dist/esm/mcp/tools/_shared/result.js +44 -1
- package/dist/esm/mcp/tools/audit.d.ts +5 -1
- package/dist/esm/mcp/tools/audit.js +42 -0
- package/dist/esm/mcp/tools/audits.d.ts +4 -0
- package/dist/esm/mcp/tools/ci-preflight.d.ts +50 -0
- package/dist/esm/mcp/tools/ci-preflight.js +183 -0
- package/dist/esm/mcp/tools/pr-upsert.js +39 -1
- package/dist/esm/mcp/tools/review-run.d.ts +28 -0
- package/dist/esm/mcp/tools/review-run.js +216 -0
- package/dist/esm/mcp/tools/run-wait.d.ts +86 -0
- package/dist/esm/mcp/tools/run-wait.js +593 -0
- package/dist/esm/mcp/tools/session-fetch-and-index.d.ts +1 -1
- package/dist/esm/mcp/tools/session-id.d.ts +3 -0
- package/dist/esm/mcp/tools/session-id.js +45 -0
- package/dist/esm/mcp/tools/session-info.d.ts +3 -0
- package/dist/esm/mcp/tools/session-info.js +49 -0
- package/dist/esm/output-transforms/audit.d.ts +23 -0
- package/dist/esm/output-transforms/audit.js +47 -0
- package/dist/esm/output-transforms/index.js +2 -0
- package/dist/esm/package.json +2 -0
- package/dist/esm/platform/client.d.ts +7 -1
- package/dist/esm/platform/github-contract-source.d.ts +2 -1
- package/dist/esm/pr-description/contract.js +24 -4
- package/dist/esm/review/authority.js +27 -14
- package/dist/esm/review/availability.d.ts +33 -0
- package/dist/esm/review/availability.js +122 -20
- package/dist/esm/review/delivery-verifier.d.ts +27 -0
- package/dist/esm/review/delivery-verifier.js +115 -0
- package/dist/esm/review/events.d.ts +3 -2
- package/dist/esm/review/events.js +23 -3
- package/dist/esm/review/execution/adapters.d.ts +11 -1
- package/dist/esm/review/execution/adapters.js +36 -10
- package/dist/esm/review/execution/artifacts.d.ts +1 -1
- package/dist/esm/review/execution/output-policy.d.ts +2 -0
- package/dist/esm/review/execution/output-policy.js +12 -0
- package/dist/esm/review/execution/review-checkout.js +121 -21
- package/dist/esm/review/execution/supervisor.js +36 -4
- package/dist/esm/review/execution/types.d.ts +9 -0
- package/dist/esm/review/opencode-account.d.ts +24 -0
- package/dist/esm/review/opencode-account.js +68 -0
- package/dist/esm/review/opencode-auth.d.ts +33 -0
- package/dist/esm/review/opencode-auth.js +79 -0
- package/dist/esm/review/subject.d.ts +25 -0
- package/dist/esm/review/subject.js +116 -26
- package/dist/esm/runtime/opencode-account-materializer.d.ts +34 -0
- package/dist/esm/runtime/opencode-account-materializer.js +33 -0
- package/dist/esm/rust/affected-manifests.d.ts +38 -0
- package/dist/esm/rust/affected-manifests.js +69 -0
- package/dist/esm/session-memory/fetch-index.d.ts +1 -1
- package/dist/esm/status/snapshot.js +32 -25
- package/dist/esm/test/duration-sequencer.d.ts +20 -0
- package/dist/esm/test/duration-sequencer.js +54 -0
- package/dist/esm/test/shard-durations.json +922 -0
- package/dist/esm/test/worker-budget.d.ts +6 -0
- package/dist/esm/test/worker-budget.js +59 -1
- package/dist/esm/test-helpers/global-setup.d.ts +1 -2
- package/dist/esm/test-helpers/global-setup.js +79 -32
- package/dist/esm/typecheck/planner.d.ts +9 -1
- package/dist/esm/typecheck/planner.js +31 -0
- package/dist/esm/ultragoal/service.d.ts +7 -0
- package/dist/esm/ultragoal/service.js +42 -2
- package/dist/esm/utils/write-json-file.js +3 -1
- package/dist/esm/worktrees/codex-project-trust.d.ts +15 -0
- package/dist/esm/worktrees/codex-project-trust.js +56 -0
- package/dist/esm/worktrees/orphan-scan.d.ts +50 -0
- package/dist/esm/worktrees/orphan-scan.js +211 -0
- package/dist/esm/worktrees/registry.d.ts +8 -0
- package/dist/esm/worktrees/registry.js +18 -3
- package/package.json +18 -13
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface GrokPrivacyFlow {
|
|
2
|
+
readonly hostname: string;
|
|
3
|
+
readonly method: string;
|
|
4
|
+
readonly requestCount: number;
|
|
5
|
+
readonly requestBytes: number;
|
|
6
|
+
readonly responseBytes: number;
|
|
7
|
+
}
|
|
8
|
+
export interface GrokPrivacyBaseline {
|
|
9
|
+
readonly schemaVersion: 1;
|
|
10
|
+
readonly cliVersion: string;
|
|
11
|
+
readonly authMode: "local-session";
|
|
12
|
+
readonly transportVarianceBytes: number;
|
|
13
|
+
readonly maxAggregateRequestBytes: number;
|
|
14
|
+
readonly flows: readonly {
|
|
15
|
+
readonly hostname: string;
|
|
16
|
+
readonly method: string;
|
|
17
|
+
readonly maxRequestCount: number;
|
|
18
|
+
readonly maxRequestBytes: number;
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
export interface GrokPrivacyEvidence {
|
|
22
|
+
readonly schemaVersion: 1;
|
|
23
|
+
readonly host: "grok";
|
|
24
|
+
readonly cliVersion: string;
|
|
25
|
+
readonly authMode: "local-session";
|
|
26
|
+
readonly reviewedSha: string;
|
|
27
|
+
readonly traceSha256: string;
|
|
28
|
+
readonly sentinelObserved: false;
|
|
29
|
+
readonly native: {
|
|
30
|
+
readonly hooksTrusted: true;
|
|
31
|
+
readonly hookDenial: true;
|
|
32
|
+
readonly inspect: true;
|
|
33
|
+
readonly mcpList: true;
|
|
34
|
+
readonly mcpDoctor: true;
|
|
35
|
+
readonly localInference: true;
|
|
36
|
+
};
|
|
37
|
+
readonly flows: readonly GrokPrivacyFlow[];
|
|
38
|
+
}
|
|
39
|
+
export declare function buildGrokPrivacyEvidence(input: {
|
|
40
|
+
baseline: GrokPrivacyBaseline;
|
|
41
|
+
cliVersion: string;
|
|
42
|
+
reviewedSha: string;
|
|
43
|
+
sentinelObserved: boolean;
|
|
44
|
+
hooksTrusted: boolean;
|
|
45
|
+
hookDenialPassed: boolean;
|
|
46
|
+
inspectPassed: boolean;
|
|
47
|
+
mcpListPassed: boolean;
|
|
48
|
+
mcpDoctorPassed: boolean;
|
|
49
|
+
localInferencePassed: boolean;
|
|
50
|
+
flows: readonly GrokPrivacyFlow[];
|
|
51
|
+
}): GrokPrivacyEvidence;
|
|
52
|
+
export declare function serializeGrokPrivacyEvidence(evidence: GrokPrivacyEvidence): string;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
const EVIDENCE_KEYS = [
|
|
3
|
+
"schemaVersion",
|
|
4
|
+
"host",
|
|
5
|
+
"cliVersion",
|
|
6
|
+
"authMode",
|
|
7
|
+
"reviewedSha",
|
|
8
|
+
"traceSha256",
|
|
9
|
+
"sentinelObserved",
|
|
10
|
+
"native",
|
|
11
|
+
"flows",
|
|
12
|
+
];
|
|
13
|
+
function normalizedFlows(flows) {
|
|
14
|
+
return [...flows]
|
|
15
|
+
.map((flow) => ({
|
|
16
|
+
hostname: flow.hostname.toLowerCase(),
|
|
17
|
+
method: flow.method.toUpperCase(),
|
|
18
|
+
requestCount: flow.requestCount,
|
|
19
|
+
requestBytes: flow.requestBytes,
|
|
20
|
+
responseBytes: flow.responseBytes,
|
|
21
|
+
}))
|
|
22
|
+
.sort((a, b) => `${a.hostname}\0${a.method}`.localeCompare(`${b.hostname}\0${b.method}`));
|
|
23
|
+
}
|
|
24
|
+
export function buildGrokPrivacyEvidence(input) {
|
|
25
|
+
const { baseline } = input;
|
|
26
|
+
if (input.cliVersion !== baseline.cliVersion) {
|
|
27
|
+
throw new Error(`Grok privacy proof requires pinned CLI ${baseline.cliVersion}; observed ${input.cliVersion}`);
|
|
28
|
+
}
|
|
29
|
+
if (!/^[a-f0-9]{40}$/u.test(input.reviewedSha)) {
|
|
30
|
+
throw new Error("Grok privacy proof requires a full reviewed git SHA");
|
|
31
|
+
}
|
|
32
|
+
if (input.sentinelObserved) {
|
|
33
|
+
throw new Error("Grok privacy proof detected the fixture sentinel in an outbound request");
|
|
34
|
+
}
|
|
35
|
+
if (!input.hooksTrusted ||
|
|
36
|
+
!input.hookDenialPassed ||
|
|
37
|
+
!input.inspectPassed ||
|
|
38
|
+
!input.mcpListPassed ||
|
|
39
|
+
!input.mcpDoctorPassed ||
|
|
40
|
+
!input.localInferencePassed) {
|
|
41
|
+
throw new Error("Grok privacy proof requires trusted hooks and passing native discovery");
|
|
42
|
+
}
|
|
43
|
+
const flows = normalizedFlows(input.flows);
|
|
44
|
+
const allowed = new Map(baseline.flows.map((flow) => [
|
|
45
|
+
`${flow.hostname.toLowerCase()}\0${flow.method.toUpperCase()}`,
|
|
46
|
+
flow,
|
|
47
|
+
]));
|
|
48
|
+
for (const flow of flows) {
|
|
49
|
+
const expected = allowed.get(`${flow.hostname}\0${flow.method}`);
|
|
50
|
+
if (!expected) {
|
|
51
|
+
throw new Error(`Grok privacy proof observed unapproved flow ${flow.method} ${flow.hostname}`);
|
|
52
|
+
}
|
|
53
|
+
if (flow.requestCount > expected.maxRequestCount) {
|
|
54
|
+
throw new Error(`Grok privacy proof exceeded request count for ${flow.hostname}`);
|
|
55
|
+
}
|
|
56
|
+
if (flow.requestBytes > expected.maxRequestBytes + baseline.transportVarianceBytes) {
|
|
57
|
+
throw new Error(`Grok privacy proof exceeded request bytes for ${flow.hostname}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const aggregateRequestBytes = flows.reduce((total, flow) => total + flow.requestBytes, 0);
|
|
61
|
+
if (aggregateRequestBytes > baseline.maxAggregateRequestBytes + baseline.transportVarianceBytes) {
|
|
62
|
+
throw new Error("Grok privacy proof exceeded aggregate request bytes");
|
|
63
|
+
}
|
|
64
|
+
const trace = JSON.stringify(flows);
|
|
65
|
+
return {
|
|
66
|
+
schemaVersion: 1,
|
|
67
|
+
host: "grok",
|
|
68
|
+
cliVersion: input.cliVersion,
|
|
69
|
+
authMode: "local-session",
|
|
70
|
+
reviewedSha: input.reviewedSha,
|
|
71
|
+
traceSha256: createHash("sha256").update(trace).digest("hex"),
|
|
72
|
+
sentinelObserved: false,
|
|
73
|
+
native: {
|
|
74
|
+
hooksTrusted: true,
|
|
75
|
+
hookDenial: true,
|
|
76
|
+
inspect: true,
|
|
77
|
+
mcpList: true,
|
|
78
|
+
mcpDoctor: true,
|
|
79
|
+
localInference: true,
|
|
80
|
+
},
|
|
81
|
+
flows,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function serializeGrokPrivacyEvidence(evidence) {
|
|
85
|
+
const keys = Object.keys(evidence);
|
|
86
|
+
if (keys.length !== EVIDENCE_KEYS.length ||
|
|
87
|
+
keys.some((key) => !EVIDENCE_KEYS.includes(key))) {
|
|
88
|
+
throw new Error("Grok privacy evidence contains an unknown field");
|
|
89
|
+
}
|
|
90
|
+
return `${JSON.stringify(evidence, null, 2)}\n`;
|
|
91
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const CLAUDE_NATIVE_PROOF_TOOL = "mcp__plugin_agent-kit_webpresso__wp_session_stats";
|
|
2
|
+
type JsonRecord = Record<string, unknown>;
|
|
3
|
+
export interface ClaudeNativeProofRecord {
|
|
4
|
+
readonly host: "claude";
|
|
5
|
+
readonly cliVersion: string;
|
|
6
|
+
readonly toolName: typeof CLAUDE_NATIVE_PROOF_TOOL;
|
|
7
|
+
readonly emptyArguments: true;
|
|
8
|
+
readonly success: true;
|
|
9
|
+
readonly elapsedMs: number;
|
|
10
|
+
readonly terminalEventSha256: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function parseJsonLines(raw: string): JsonRecord[];
|
|
13
|
+
export declare function verifyClaudeNativeProof(events: readonly JsonRecord[], input: {
|
|
14
|
+
cliVersion: string;
|
|
15
|
+
elapsedMs: number;
|
|
16
|
+
}): ClaudeNativeProofRecord;
|
|
17
|
+
export declare function serializeClaudeNativeProof(record: ClaudeNativeProofRecord): string;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
export const CLAUDE_NATIVE_PROOF_TOOL = "mcp__plugin_agent-kit_webpresso__wp_session_stats";
|
|
3
|
+
function isRecord(value) {
|
|
4
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5
|
+
}
|
|
6
|
+
export function parseJsonLines(raw) {
|
|
7
|
+
return raw
|
|
8
|
+
.split(/\r?\n/u)
|
|
9
|
+
.filter((line) => line.trim() !== "")
|
|
10
|
+
.map((line) => {
|
|
11
|
+
const parsed = JSON.parse(line);
|
|
12
|
+
if (!isRecord(parsed))
|
|
13
|
+
throw new Error("Claude stream event must be a JSON object");
|
|
14
|
+
return parsed;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export function verifyClaudeNativeProof(events, input) {
|
|
18
|
+
const init = events.find((event) => event["type"] === "system" && event["subtype"] === "init");
|
|
19
|
+
if (!init)
|
|
20
|
+
throw new Error("Claude native proof missing system/init");
|
|
21
|
+
const pluginErrors = init["plugin_errors"];
|
|
22
|
+
if (Array.isArray(pluginErrors) && pluginErrors.length > 0) {
|
|
23
|
+
throw new Error("Claude native proof reported plugin load errors");
|
|
24
|
+
}
|
|
25
|
+
const plugins = Array.isArray(init["plugins"]) ? init["plugins"] : [];
|
|
26
|
+
const pluginNames = plugins
|
|
27
|
+
.map((plugin) => (isRecord(plugin) ? plugin["name"] : undefined))
|
|
28
|
+
.filter((name) => typeof name === "string");
|
|
29
|
+
if (pluginNames.length !== 1 || pluginNames[0] !== "agent-kit") {
|
|
30
|
+
throw new Error(`Claude native proof expected only agent-kit plugin; observed ${JSON.stringify(pluginNames)}`);
|
|
31
|
+
}
|
|
32
|
+
const tools = Array.isArray(init["tools"])
|
|
33
|
+
? init["tools"].filter((tool) => typeof tool === "string")
|
|
34
|
+
: [];
|
|
35
|
+
if (tools.length !== 1 || tools[0] !== CLAUDE_NATIVE_PROOF_TOOL) {
|
|
36
|
+
throw new Error(`Claude native proof expected exactly ${CLAUDE_NATIVE_PROOF_TOOL}; observed tools=${JSON.stringify(tools)} mcp_servers=${JSON.stringify(init["mcp_servers"] ?? [])}`);
|
|
37
|
+
}
|
|
38
|
+
const mcpServers = Array.isArray(init["mcp_servers"]) ? init["mcp_servers"] : [];
|
|
39
|
+
const expectedServers = mcpServers.filter((server) => isRecord(server) &&
|
|
40
|
+
server["name"] === "plugin:agent-kit:webpresso" &&
|
|
41
|
+
server["status"] === "connected");
|
|
42
|
+
if (expectedServers.length !== 1) {
|
|
43
|
+
throw new Error(`Claude native proof expected one connected Agent Kit MCP server; observed ${JSON.stringify(mcpServers)}`);
|
|
44
|
+
}
|
|
45
|
+
const toolUses = events.flatMap((event) => {
|
|
46
|
+
const message = isRecord(event["message"]) ? event["message"] : null;
|
|
47
|
+
const content = message && Array.isArray(message["content"]) ? message["content"] : [];
|
|
48
|
+
return content.filter((block) => isRecord(block) && block["type"] === "tool_use");
|
|
49
|
+
});
|
|
50
|
+
if (toolUses.length !== 1) {
|
|
51
|
+
throw new Error(`Claude native proof expected exactly one tool use; observed ${toolUses.length}`);
|
|
52
|
+
}
|
|
53
|
+
const toolUse = toolUses[0];
|
|
54
|
+
if (toolUse["name"] !== CLAUDE_NATIVE_PROOF_TOOL) {
|
|
55
|
+
throw new Error(`Claude native proof observed unexpected tool: ${String(toolUse["name"])}`);
|
|
56
|
+
}
|
|
57
|
+
if (!isRecord(toolUse["input"]) || Object.keys(toolUse["input"]).length !== 0) {
|
|
58
|
+
throw new Error("Claude native proof tool arguments must be an empty object");
|
|
59
|
+
}
|
|
60
|
+
const terminal = events.findLast((event) => event["type"] === "result");
|
|
61
|
+
if (!terminal || terminal["subtype"] !== "success" || terminal["is_error"] === true) {
|
|
62
|
+
throw new Error("Claude native proof missing successful terminal result");
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
host: "claude",
|
|
66
|
+
cliVersion: input.cliVersion,
|
|
67
|
+
toolName: CLAUDE_NATIVE_PROOF_TOOL,
|
|
68
|
+
emptyArguments: true,
|
|
69
|
+
success: true,
|
|
70
|
+
elapsedMs: Math.max(0, Math.min(Math.round(input.elapsedMs), 300_000)),
|
|
71
|
+
terminalEventSha256: createHash("sha256").update(JSON.stringify(terminal)).digest("hex"),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function serializeClaudeNativeProof(record) {
|
|
75
|
+
const allowedKeys = [
|
|
76
|
+
"host",
|
|
77
|
+
"cliVersion",
|
|
78
|
+
"toolName",
|
|
79
|
+
"emptyArguments",
|
|
80
|
+
"success",
|
|
81
|
+
"elapsedMs",
|
|
82
|
+
"terminalEventSha256",
|
|
83
|
+
];
|
|
84
|
+
if (Object.keys(record).some((key) => !allowedKeys.includes(key))) {
|
|
85
|
+
throw new Error("Claude native proof record contains an unknown field");
|
|
86
|
+
}
|
|
87
|
+
return `${JSON.stringify(record, null, 2)}\n`;
|
|
88
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const AGENT_HOSTS: readonly ["codex", "claude", "opencode"];
|
|
1
|
+
export declare const AGENT_HOSTS: readonly ["codex", "claude", "opencode", "grok"];
|
|
2
2
|
export type AgentHost = (typeof AGENT_HOSTS)[number];
|
|
3
3
|
export declare const REQUIRED_CORE_CAPABILITIES: readonly ["verify", "fix", "investigate", "ai-deslop", "plan-refine", "ralplan", "best-practice-research", "testing-philosophy", "tph", "claude", "codex", "grok", "opencode-go", "plan-eng-review", "plan-ceo-review", "plan-design-review", "plan-devex-review", "browse", "devex-review", "design-review", "hooks-doctor", "tech-debt", "lore-protocol", "deep-interview", "deep-research", "autoresearch", "ultragoal", "autopilot", "team"];
|
|
4
4
|
export declare const VISIBILITY_STATUSES: readonly ["visible-now", "visible-after-restart", "not-visible"];
|
|
@@ -21,7 +21,7 @@ export interface HostVisibilityAudit {
|
|
|
21
21
|
readonly requiredCapabilities: readonly string[];
|
|
22
22
|
readonly results: readonly HostSkillVisibility[];
|
|
23
23
|
}
|
|
24
|
-
export declare const SETUP_SURFACE_HOSTS: readonly ["claude", "codex", "opencode"];
|
|
24
|
+
export declare const SETUP_SURFACE_HOSTS: readonly ["claude", "codex", "opencode", "grok"];
|
|
25
25
|
export type SetupSurfaceHost = (typeof SETUP_SURFACE_HOSTS)[number];
|
|
26
26
|
export type SetupSurfaceArtifactStatus = "installed" | "missing" | "deferred";
|
|
27
27
|
export type SetupSurfaceActiveStatus = "managed" | "not-installed";
|
|
@@ -6,10 +6,10 @@ import { SHARED_FAVORITE_SKILLS } from "./scaffold-agent.js";
|
|
|
6
6
|
import { CLAUDE_DEV_ADAPTER_RELATIVE_PATH } from "./scaffolders/claude-plugin/index.js";
|
|
7
7
|
import { CODEX_DEV_ADAPTER_RELATIVE_PATH } from "./scaffolders/codex-plugin/index.js";
|
|
8
8
|
import { OPENCODE_PLUGIN_PACKAGE } from "./scaffolders/opencode-plugin/index.js";
|
|
9
|
-
export const AGENT_HOSTS = ["codex", "claude", "opencode"];
|
|
9
|
+
export const AGENT_HOSTS = ["codex", "claude", "opencode", "grok"];
|
|
10
10
|
export const REQUIRED_CORE_CAPABILITIES = SHARED_FAVORITE_SKILLS;
|
|
11
11
|
export const VISIBILITY_STATUSES = ["visible-now", "visible-after-restart", "not-visible"];
|
|
12
|
-
export const SETUP_SURFACE_HOSTS = ["claude", "codex", "opencode"];
|
|
12
|
+
export const SETUP_SURFACE_HOSTS = ["claude", "codex", "opencode", "grok"];
|
|
13
13
|
export function parseAgentHosts(value) {
|
|
14
14
|
if (value?.trim() === "none")
|
|
15
15
|
return [];
|
|
@@ -103,6 +103,18 @@ export function hostSkillRoots(repoRoot, host, homeDir = homedir()) {
|
|
|
103
103
|
],
|
|
104
104
|
global: [],
|
|
105
105
|
};
|
|
106
|
+
case "grok":
|
|
107
|
+
// Grok reads AGENTS.md/CLAUDE.md natively for instructions; skills are
|
|
108
|
+
// shared from the Claude/agents surfaces plus a native `.grok/skills`.
|
|
109
|
+
return {
|
|
110
|
+
project: [
|
|
111
|
+
join(repoRoot, ".grok", "skills"),
|
|
112
|
+
join(repoRoot, ".claude", "skills"),
|
|
113
|
+
join(repoRoot, ".agents", "skills"),
|
|
114
|
+
],
|
|
115
|
+
user: [join(homeDir, ".grok", "skills"), join(homeDir, ".claude", "skills")],
|
|
116
|
+
global: [],
|
|
117
|
+
};
|
|
106
118
|
}
|
|
107
119
|
}
|
|
108
120
|
export function auditHostSkillVisibility(input) {
|
|
@@ -164,11 +176,13 @@ function allExist(repoRoot, relativePaths) {
|
|
|
164
176
|
return relativePaths.every((relativePath) => existsSync(join(repoRoot, relativePath)));
|
|
165
177
|
}
|
|
166
178
|
function hasOpenCodePluginRegistration(repoRoot) {
|
|
167
|
-
const configPath = join(repoRoot, "opencode.json")
|
|
179
|
+
const configPath = existsSync(join(repoRoot, "opencode.json"))
|
|
180
|
+
? join(repoRoot, "opencode.json")
|
|
181
|
+
: join(repoRoot, "opencode.jsonc");
|
|
168
182
|
if (!existsSync(configPath))
|
|
169
183
|
return false;
|
|
170
184
|
try {
|
|
171
|
-
const parsed = JSON.parse(readFileSync(configPath, "utf8"));
|
|
185
|
+
const parsed = JSON.parse(stripJsonc(readFileSync(configPath, "utf8")));
|
|
172
186
|
return (Array.isArray(parsed.plugin) &&
|
|
173
187
|
parsed.plugin.some((entry) => entry === OPENCODE_PLUGIN_PACKAGE));
|
|
174
188
|
}
|
|
@@ -176,6 +190,71 @@ function hasOpenCodePluginRegistration(repoRoot) {
|
|
|
176
190
|
return false;
|
|
177
191
|
}
|
|
178
192
|
}
|
|
193
|
+
function stripJsonc(raw) {
|
|
194
|
+
let out = "";
|
|
195
|
+
let inString = false;
|
|
196
|
+
let quote = null;
|
|
197
|
+
let escaped = false;
|
|
198
|
+
for (let i = 0; i < raw.length; i += 1) {
|
|
199
|
+
const ch = raw[i];
|
|
200
|
+
const next = raw[i + 1];
|
|
201
|
+
if (inString) {
|
|
202
|
+
out += ch;
|
|
203
|
+
if (escaped)
|
|
204
|
+
escaped = false;
|
|
205
|
+
else if (ch === "\\")
|
|
206
|
+
escaped = true;
|
|
207
|
+
else if (ch === quote) {
|
|
208
|
+
inString = false;
|
|
209
|
+
quote = null;
|
|
210
|
+
}
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (ch === '"' || ch === "'") {
|
|
214
|
+
inString = true;
|
|
215
|
+
quote = ch;
|
|
216
|
+
out += ch;
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (ch === "/" && next === "/") {
|
|
220
|
+
while (i < raw.length && raw[i] !== "\n")
|
|
221
|
+
i += 1;
|
|
222
|
+
out += "\n";
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (ch === "/" && next === "*") {
|
|
226
|
+
i += 2;
|
|
227
|
+
while (i < raw.length && !(raw[i] === "*" && raw[i + 1] === "/"))
|
|
228
|
+
i += 1;
|
|
229
|
+
i += 1;
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
if (ch === ",") {
|
|
233
|
+
let j = i + 1;
|
|
234
|
+
while (j < raw.length) {
|
|
235
|
+
while (/\s/u.test(raw[j] ?? ""))
|
|
236
|
+
j += 1;
|
|
237
|
+
if (raw[j] === "/" && raw[j + 1] === "/") {
|
|
238
|
+
while (j < raw.length && raw[j] !== "\n")
|
|
239
|
+
j += 1;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (raw[j] === "/" && raw[j + 1] === "*") {
|
|
243
|
+
j += 2;
|
|
244
|
+
while (j < raw.length && !(raw[j] === "*" && raw[j + 1] === "/"))
|
|
245
|
+
j += 1;
|
|
246
|
+
j += 2;
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
if (raw[j] === "}" || raw[j] === "]")
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
out += ch;
|
|
255
|
+
}
|
|
256
|
+
return out;
|
|
257
|
+
}
|
|
179
258
|
export function auditHostSetupSurfaceVisibility(input) {
|
|
180
259
|
const { repoRoot, packageRoot } = input;
|
|
181
260
|
const opencodePluginRegistered = hasOpenCodePluginRegistration(repoRoot);
|
|
@@ -210,7 +289,17 @@ export function auditHostSetupSurfaceVisibility(input) {
|
|
|
210
289
|
active: opencodePluginRegistered ? "managed" : "not-installed",
|
|
211
290
|
support: "full",
|
|
212
291
|
required: false,
|
|
213
|
-
ownership: "native npm plugin registration via the opencode.json plugin entry @webpresso/opencode-plugin",
|
|
292
|
+
ownership: "native npm plugin registration via the opencode.json/opencode.jsonc plugin entry @webpresso/opencode-plugin",
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
host: "grok",
|
|
296
|
+
artifact: existsSync(join(repoRoot, ".grok", "config.toml")) ? "installed" : "deferred",
|
|
297
|
+
active: existsSync(join(repoRoot, ".grok", "hooks", "webpresso.json"))
|
|
298
|
+
? "managed"
|
|
299
|
+
: "not-installed",
|
|
300
|
+
support: "full",
|
|
301
|
+
required: false,
|
|
302
|
+
ownership: "native project .grok/config.toml MCP server plus .grok/hooks/webpresso.json; run /hooks-trust once to arm the hooks",
|
|
214
303
|
},
|
|
215
304
|
];
|
|
216
305
|
}
|
|
@@ -30,6 +30,7 @@ export interface InitFlags {
|
|
|
30
30
|
repair?: boolean;
|
|
31
31
|
profile?: string;
|
|
32
32
|
}
|
|
33
|
+
export declare function setupDeprecationWarnings(flags: InitFlags): string[];
|
|
33
34
|
/**
|
|
34
35
|
* Which tier surfaces a given adoption-ladder profile scaffolds. Strict
|
|
35
36
|
* supersets (see docs/adoption-ladder.md): quality ⊂ guarded ⊂ full.
|
|
@@ -83,6 +84,8 @@ export interface ResolveCatalogDirOptions {
|
|
|
83
84
|
readonly argv0?: string;
|
|
84
85
|
readonly argv1?: string;
|
|
85
86
|
readonly pathEnv?: string;
|
|
87
|
+
readonly pathExtEnv?: string;
|
|
88
|
+
readonly platform?: NodeJS.Platform;
|
|
86
89
|
}
|
|
87
90
|
export declare function resolveCatalogDir(options?: ResolveCatalogDirOptions): string;
|
|
88
91
|
export declare function formatHostSetupSurfaceVisibility(input: {
|