@jinn-network/client 0.1.8 → 0.1.9-canary.023faefb
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/CONTRIBUTING.md +2 -2
- package/README.md +6 -0
- package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +3 -3
- package/deployments/deployment-stolas-l2-baseSepolia-fast.json +23 -3
- package/deployments/deployment-task-coordinator-router-v3-baseSepolia-fast.json +34 -6
- package/dist/adapters/mech/adapter.d.ts +31 -1
- package/dist/adapters/mech/adapter.js +126 -53
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.d.ts +174 -13
- package/dist/adapters/mech/contracts.js +99 -49
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +4 -0
- package/dist/adapters/mech/safe-revert.js +5 -1
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/safe.js +77 -1
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/types.d.ts +5 -130
- package/dist/adapters/mech/types.js +9 -65
- package/dist/adapters/mech/types.js.map +1 -1
- package/dist/adapters/mech/verdict-code.js +1 -1
- package/dist/adapters/mech/verdict-code.js.map +1 -1
- package/dist/api/bootstrap-endpoint.d.ts +19 -3
- package/dist/api/bootstrap-endpoint.js +4 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/discovery-endpoint.d.ts +1 -0
- package/dist/api/discovery-endpoint.js +24 -0
- package/dist/api/discovery-endpoint.js.map +1 -1
- package/dist/api/fleet-build.d.ts +1 -7
- package/dist/api/fleet-build.js +0 -7
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +26 -17
- package/dist/api/gather-status.js +62 -520
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/harness-auth-status-endpoint.d.ts +21 -0
- package/dist/api/harness-auth-status-endpoint.js +17 -0
- package/dist/api/harness-auth-status-endpoint.js.map +1 -0
- package/dist/api/launcher-endpoints.js +6 -1
- package/dist/api/launcher-endpoints.js.map +1 -1
- package/dist/api/launcher-status.d.ts +2 -0
- package/dist/api/launcher-status.js.map +1 -1
- package/dist/api/launcher-tasks.d.ts +47 -0
- package/dist/api/launcher-tasks.js +88 -3
- package/dist/api/launcher-tasks.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +79 -0
- package/dist/api/loop-completion-build.js +154 -0
- package/dist/api/loop-completion-build.js.map +1 -0
- package/dist/api/operator-artifacts-endpoint.js +1 -1
- package/dist/api/operator-artifacts-endpoint.js.map +1 -1
- package/dist/api/portfolio-v0-build.d.ts +2 -1
- package/dist/api/portfolio-v0-build.js +5 -7
- package/dist/api/portfolio-v0-build.js.map +1 -1
- package/dist/api/prediction-v1-build.d.ts +2 -2
- package/dist/api/prediction-v1-build.js +5 -7
- package/dist/api/prediction-v1-build.js.map +1 -1
- package/dist/api/rewards-build.d.ts +8 -1
- package/dist/api/rewards-build.js +32 -4
- package/dist/api/rewards-build.js.map +1 -1
- package/dist/api/rewards-endpoint.d.ts +12 -0
- package/dist/api/rewards-endpoint.js +46 -0
- package/dist/api/rewards-endpoint.js.map +1 -0
- package/dist/api/server.d.ts +6 -16
- package/dist/api/server.js +29 -26
- package/dist/api/server.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +45 -0
- package/dist/api/setup-endpoints.js +271 -52
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/solvernets-endpoints.js +4 -1
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +71 -94
- package/dist/api/status-build.js +11 -77
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-rollup-build.d.ts +0 -4
- package/dist/api/status-rollup-build.js +0 -4
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/api/stop-hook.d.ts +1 -1
- package/dist/api/stop-hook.js +1 -1
- package/dist/api/stop-hook.js.map +1 -1
- package/dist/api/task-run-routing.d.ts +1 -1
- package/dist/api/task-runs-build.d.ts +2 -2
- package/dist/api/task-runs-build.js +5 -7
- package/dist/api/task-runs-build.js.map +1 -1
- package/dist/bin/jinn-distil-mcp.js +813 -0
- package/dist/bin/jinn-layer.js +12568 -0
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/captures/distil-export.d.ts +54 -0
- package/dist/captures/distil-export.js +135 -0
- package/dist/captures/distil-export.js.map +1 -0
- package/dist/captures/ingest.d.ts +21 -0
- package/dist/captures/ingest.js +144 -0
- package/dist/captures/ingest.js.map +1 -0
- package/dist/captures/live-publisher.d.ts +9 -0
- package/dist/captures/live-publisher.js +5 -3
- package/dist/captures/live-publisher.js.map +1 -1
- package/dist/captures/publish.d.ts +15 -0
- package/dist/captures/publish.js +17 -7
- package/dist/captures/publish.js.map +1 -1
- package/dist/cli/commands/codedigest-revert-check.js +6 -2
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +36 -4
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +87 -0
- package/dist/cli/commands/eval.js +481 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/rewards.d.ts +2 -0
- package/dist/cli/commands/rewards.js +39 -10
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +68 -0
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/status.js +0 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/update.js +8 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/version.js +4 -0
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/execution-context.js +2 -1
- package/dist/cli/execution-context.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/introspection-context.js +0 -3
- package/dist/cli/introspection-context.js.map +1 -1
- package/dist/config.d.ts +158 -541
- package/dist/config.js +190 -197
- package/dist/config.js.map +1 -1
- package/dist/contracts/abis.d.ts +100 -0
- package/dist/contracts/abis.js +58 -0
- package/dist/contracts/abis.js.map +1 -0
- package/dist/contracts/addresses.d.ts +36 -0
- package/dist/contracts/addresses.js +60 -0
- package/dist/contracts/addresses.js.map +1 -0
- package/dist/corpus/acquire.d.ts +7 -6
- package/dist/corpus/acquire.js +10 -10
- package/dist/corpus/acquire.js.map +1 -1
- package/dist/corpus/fetch-artifact.d.ts +21 -0
- package/dist/corpus/fetch-artifact.js +33 -0
- package/dist/corpus/fetch-artifact.js.map +1 -0
- package/dist/corpus/index.d.ts +2 -2
- package/dist/corpus/onchain-query.d.ts +0 -1
- package/dist/corpus/onchain-query.js +2 -5
- package/dist/corpus/onchain-query.js.map +1 -1
- package/dist/corpus/route-resolver.d.ts +3 -3
- package/dist/corpus/route-resolver.js +3 -3
- package/dist/daemon/ai-units-gate.d.ts +6 -6
- package/dist/daemon/ai-units-gate.js +11 -10
- package/dist/daemon/ai-units-gate.js.map +1 -1
- package/dist/daemon/balance-topup-loop.js +27 -9
- package/dist/daemon/balance-topup-loop.js.map +1 -1
- package/dist/daemon/checkpoint-loop.js +2 -2
- package/dist/daemon/creator.d.ts +1 -0
- package/dist/daemon/creator.js +39 -25
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +15 -10
- package/dist/daemon/daemon.js +95 -41
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/delivery-watcher.d.ts +9 -0
- package/dist/daemon/delivery-watcher.js +24 -1
- package/dist/daemon/delivery-watcher.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +7 -0
- package/dist/daemon/eviction-loop.js +19 -3
- package/dist/daemon/eviction-loop.js.map +1 -1
- package/dist/daemon/join-applier.d.ts +35 -0
- package/dist/daemon/join-applier.js +49 -0
- package/dist/daemon/join-applier.js.map +1 -0
- package/dist/daemon/loop-heartbeat.d.ts +89 -0
- package/dist/daemon/loop-heartbeat.js +75 -0
- package/dist/daemon/loop-heartbeat.js.map +1 -0
- package/dist/{api/peers.js → daemon/peer-sync.js} +3 -1
- package/dist/daemon/peer-sync.js.map +1 -0
- package/dist/daemon/reward-claim-loop.js +28 -10
- package/dist/daemon/reward-claim-loop.js.map +1 -1
- package/dist/daemon/skip-log-dedup.d.ts +1 -1
- package/dist/daemon/skip-log-dedup.js +3 -0
- package/dist/daemon/skip-log-dedup.js.map +1 -1
- package/dist/daemon/spend-cap-gate.d.ts +0 -6
- package/dist/daemon/spend-cap-gate.js +1 -8
- package/dist/daemon/spend-cap-gate.js.map +1 -1
- package/dist/daemon/watchdog-loop.d.ts +84 -0
- package/dist/daemon/watchdog-loop.js +91 -0
- package/dist/daemon/watchdog-loop.js.map +1 -0
- package/dist/dashboard/assets/index-B_5Cb-ZH.js +161 -0
- package/dist/dashboard/assets/index-D7rvJRNa.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.d.ts +17 -0
- package/dist/discovery/http.js +378 -26
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +174 -10
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +149 -0
- package/dist/discovery/types.js +40 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +24 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap-run.d.ts +25 -0
- package/dist/earning/bootstrap-run.js +315 -0
- package/dist/earning/bootstrap-run.js.map +1 -0
- package/dist/earning/bootstrap.d.ts +31 -11
- package/dist/earning/bootstrap.js +123 -212
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/contracts.d.ts +2 -232
- package/dist/earning/contracts.js +16 -205
- package/dist/earning/contracts.js.map +1 -1
- package/dist/earning/faucet-topup-store.d.ts +41 -0
- package/dist/earning/faucet-topup-store.js +89 -0
- package/dist/earning/faucet-topup-store.js.map +1 -0
- package/dist/earning/faucet.d.ts +1 -1
- package/dist/earning/faucet.js +2 -2
- package/dist/earning/faucet.js.map +1 -1
- package/dist/earning/safe-adapter.js +12 -45
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/earning/steps/context.d.ts +42 -0
- package/dist/earning/steps/context.js +4 -0
- package/dist/earning/steps/context.js.map +1 -0
- package/dist/earning/steps/fleet-identity-register.d.ts +4 -0
- package/dist/earning/steps/fleet-identity-register.js +65 -0
- package/dist/earning/steps/fleet-identity-register.js.map +1 -0
- package/dist/earning/steps/fleet-safe-deploy.d.ts +4 -0
- package/dist/earning/steps/fleet-safe-deploy.js +62 -0
- package/dist/earning/steps/fleet-safe-deploy.js.map +1 -0
- package/dist/earning/steps/fleet-safe-predict.d.ts +4 -0
- package/dist/earning/steps/fleet-safe-predict.js +18 -0
- package/dist/earning/steps/fleet-safe-predict.js.map +1 -0
- package/dist/earning/steps/receipt-parsing.d.ts +12 -0
- package/dist/earning/steps/receipt-parsing.js +71 -0
- package/dist/earning/steps/receipt-parsing.js.map +1 -0
- package/dist/earning/stolas-claim.js +8 -8
- package/dist/earning/stolas-claim.js.map +1 -1
- package/dist/earning/{jinn-rewards.d.ts → stolas-staking.d.ts} +4 -8
- package/dist/earning/{jinn-rewards.js → stolas-staking.js} +6 -10
- package/dist/earning/stolas-staking.js.map +1 -0
- package/dist/earning/testnet-setup-migration.d.ts +1 -0
- package/dist/earning/testnet-setup-migration.js +7 -2
- package/dist/earning/testnet-setup-migration.js.map +1 -1
- package/dist/earning/types.d.ts +1 -1
- package/dist/earning/types.js +1 -1
- package/dist/earning/types.js.map +1 -1
- package/dist/earning/viem-clients.d.ts +3 -19
- package/dist/earning/viem-clients.js +4 -31
- package/dist/earning/viem-clients.js.map +1 -1
- package/dist/erc8004/addresses.d.ts +6 -5
- package/dist/erc8004/addresses.js +7 -5
- package/dist/erc8004/addresses.js.map +1 -1
- package/dist/erc8004/identity.d.ts +12 -1
- package/dist/erc8004/identity.js +31 -0
- package/dist/erc8004/identity.js.map +1 -1
- package/dist/erc8004/index.d.ts +1 -1
- package/dist/erc8004/index.js +1 -1
- package/dist/erc8004/index.js.map +1 -1
- package/dist/eval/capability-slate.d.ts +54 -0
- package/dist/eval/capability-slate.js +116 -0
- package/dist/eval/capability-slate.js.map +1 -0
- package/dist/eval/capability-stats.d.ts +39 -0
- package/dist/eval/capability-stats.js +123 -0
- package/dist/eval/capability-stats.js.map +1 -0
- package/dist/eval/contested-band.d.ts +18 -0
- package/dist/eval/contested-band.js +19 -0
- package/dist/eval/contested-band.js.map +1 -0
- package/dist/eval/corpus-index.d.ts +21 -0
- package/dist/eval/corpus-index.js +55 -0
- package/dist/eval/corpus-index.js.map +1 -0
- package/dist/eval/disjointness.d.ts +26 -0
- package/dist/eval/disjointness.js +67 -0
- package/dist/eval/disjointness.js.map +1 -0
- package/dist/eval/eval-harness-run.d.ts +63 -0
- package/dist/eval/eval-harness-run.js +123 -0
- package/dist/eval/eval-harness-run.js.map +1 -0
- package/dist/eval/mcnemar-power.d.ts +14 -0
- package/dist/eval/mcnemar-power.js +40 -0
- package/dist/eval/mcnemar-power.js.map +1 -0
- package/dist/eval/orchestrator.d.ts +224 -0
- package/dist/eval/orchestrator.js +250 -0
- package/dist/eval/orchestrator.js.map +1 -0
- package/dist/eval/paired.d.ts +68 -0
- package/dist/eval/paired.js +93 -0
- package/dist/eval/paired.js.map +1 -0
- package/dist/eval/resolve-slate-tasks.d.ts +35 -0
- package/dist/eval/resolve-slate-tasks.js +56 -0
- package/dist/eval/resolve-slate-tasks.js.map +1 -0
- package/dist/eval/screen-discovery.d.ts +22 -0
- package/dist/eval/screen-discovery.js +71 -0
- package/dist/eval/screen-discovery.js.map +1 -0
- package/dist/eval/screen-progress.d.ts +41 -0
- package/dist/eval/screen-progress.js +60 -0
- package/dist/eval/screen-progress.js.map +1 -0
- package/dist/eval/screen-runner.d.ts +30 -0
- package/dist/eval/screen-runner.js +289 -0
- package/dist/eval/screen-runner.js.map +1 -0
- package/dist/eval/screen.d.ts +107 -0
- package/dist/eval/screen.js +159 -0
- package/dist/eval/screen.js.map +1 -0
- package/dist/eval/slope.d.ts +29 -0
- package/dist/eval/slope.js +46 -0
- package/dist/eval/slope.js.map +1 -0
- package/dist/eval/train-sequence.d.ts +35 -0
- package/dist/eval/train-sequence.js +59 -0
- package/dist/eval/train-sequence.js.map +1 -0
- package/dist/eval/wilson.d.ts +45 -0
- package/dist/eval/wilson.js +48 -0
- package/dist/eval/wilson.js.map +1 -0
- package/dist/events/types.d.ts +1 -1
- package/dist/events/types.js +1 -1
- package/dist/events/types.js.map +1 -1
- package/dist/harnesses/auth-source.d.ts +51 -0
- package/dist/harnesses/auth-source.js +155 -0
- package/dist/harnesses/auth-source.js.map +1 -0
- package/dist/harnesses/engine/canonical-json.js +5 -3
- package/dist/harnesses/engine/canonical-json.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +34 -1
- package/dist/harnesses/engine/engine.js +91 -11
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/packaging.js +5 -5
- package/dist/harnesses/engine/packaging.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +19 -61
- package/dist/harnesses/engine/persistence.js +28 -0
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/impls/_evaluator-base.d.ts +48 -0
- package/dist/harnesses/impls/_evaluator-base.js +35 -0
- package/dist/harnesses/impls/_evaluator-base.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +1 -1
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js +1 -1
- package/dist/harnesses/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/index.d.ts +2 -3
- package/dist/harnesses/impls/claude-mcp-prediction/index.js +29 -99
- package/dist/harnesses/impls/claude-mcp-prediction/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js +4 -21
- package/dist/harnesses/impls/claude-mcp-prediction/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.d.ts +2 -0
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js +30 -79
- package/dist/harnesses/impls/claude-mcp-prediction-apy/index.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js +4 -19
- package/dist/harnesses/impls/claude-mcp-prediction-apy/mcp-tools.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.d.ts +2 -0
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js +1 -1
- package/dist/harnesses/impls/claude-mcp-prediction-apy/session-orchestrator.js.map +1 -1
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.d.ts +39 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.js +62 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server-script.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.d.ts +40 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.js +44 -0
- package/dist/harnesses/impls/claude-mcp-shared/mcp-server.js.map +1 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.d.ts +56 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.js +79 -0
- package/dist/harnesses/impls/claude-mcp-shared/single-session-harness.js.map +1 -0
- package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +6 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +25 -3
- package/dist/harnesses/impls/hermes-agent/harness.js +89 -5
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/index.d.ts +2 -0
- package/dist/harnesses/impls/index.js +10 -1
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.d.ts +34 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.js +111 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/eval-runner.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.d.ts +24 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.js +19 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/evaluator.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.d.ts +64 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.js +125 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/harness.js.map +1 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.d.ts +32 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.js +73 -0
- package/dist/harnesses/impls/jinn-repo-evaluator/repro.js.map +1 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js +5 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.d.ts +11 -1
- package/dist/harnesses/impls/learner/adapters/codex-code.js +130 -15
- package/dist/harnesses/impls/learner/adapters/codex-code.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +29 -1
- package/dist/harnesses/impls/learner/harness.js +85 -1
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +2 -0
- package/dist/harnesses/impls/learner/harvest.js +51 -1
- package/dist/harnesses/impls/learner/harvest.js.map +1 -1
- package/dist/harnesses/impls/learner/plugin-path.js +1 -0
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js +10 -29
- package/dist/harnesses/impls/portfolio-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js +10 -23
- package/dist/harnesses/impls/prediction-apy-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/prediction-v0-evaluator/index.d.ts +5 -15
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js +10 -25
- package/dist/harnesses/impls/prediction-v0-evaluator/index.js.map +1 -1
- package/dist/harnesses/impls/stub.d.ts +2 -2
- package/dist/harnesses/impls/stub.js +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js +8 -0
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/eval-runner.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
- package/dist/harnesses/readiness-registry.d.ts +16 -0
- package/dist/harnesses/readiness-registry.js +28 -6
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/harnesses/types.d.ts +26 -0
- package/dist/learner/revert-decision.d.ts +16 -1
- package/dist/learner/revert-decision.js +38 -18
- package/dist/learner/revert-decision.js.map +1 -1
- package/dist/learner/revert-stats.d.ts +14 -0
- package/dist/learner/revert-stats.js +42 -0
- package/dist/learner/revert-stats.js.map +1 -1
- package/dist/learner/verification-gate.d.ts +53 -0
- package/dist/learner/verification-gate.js +80 -0
- package/dist/learner/verification-gate.js.map +1 -0
- package/dist/local-provider-url.d.ts +3 -0
- package/dist/local-provider-url.js +28 -0
- package/dist/local-provider-url.js.map +1 -0
- package/dist/main.js +188 -566
- package/dist/main.js.map +1 -1
- package/dist/mcp/acquire-artifact.d.ts +3 -3
- package/dist/mcp/acquire-artifact.js +3 -3
- package/dist/mcp/operator-server.js +1 -1
- package/dist/mcp/operator-server.js.map +1 -1
- package/dist/mcp/server.js +5 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/monitoring/net-liveness.d.ts +143 -0
- package/dist/monitoring/net-liveness.js +301 -0
- package/dist/monitoring/net-liveness.js.map +1 -0
- package/dist/observability/emit-event.d.ts +1 -1
- package/dist/observability/emit-event.js +0 -4
- package/dist/observability/emit-event.js.map +1 -1
- package/dist/observability/progress.d.ts +11 -0
- package/dist/observability/progress.js +16 -0
- package/dist/observability/progress.js.map +1 -0
- package/dist/pilot/cost.d.ts +19 -0
- package/dist/pilot/cost.js +31 -0
- package/dist/pilot/cost.js.map +1 -0
- package/dist/pilot/instance.d.ts +20 -0
- package/dist/pilot/instance.js +19 -0
- package/dist/pilot/instance.js.map +1 -0
- package/dist/pilot/repo.d.ts +31 -0
- package/dist/pilot/repo.js +42 -0
- package/dist/pilot/repo.js.map +1 -0
- package/dist/pilot/solve.d.ts +22 -0
- package/dist/pilot/solve.js +37 -0
- package/dist/pilot/solve.js.map +1 -0
- package/dist/pilot/tally.d.ts +35 -0
- package/dist/pilot/tally.js +61 -0
- package/dist/pilot/tally.js.map +1 -0
- package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/dist/plugins/learner/hooks/session-start +30 -1
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/dist/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/dist/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/dist/plugins/local-trace-distiller/.mcp.json +8 -0
- package/dist/plugins/local-trace-distiller/README.md +27 -0
- package/dist/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/dist/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/dist/preflight/deployment-readiness.d.ts +127 -0
- package/dist/preflight/deployment-readiness.js +308 -0
- package/dist/preflight/deployment-readiness.js.map +1 -0
- package/dist/preflight/pidfile-liveness.d.ts +7 -1
- package/dist/preflight/pidfile-liveness.js +14 -0
- package/dist/preflight/pidfile-liveness.js.map +1 -1
- package/dist/preflight/rpc-network.d.ts +10 -3
- package/dist/preflight/rpc-network.js +46 -13
- package/dist/preflight/rpc-network.js.map +1 -1
- package/dist/preflight/stable-cwd.d.ts +29 -0
- package/dist/preflight/stable-cwd.js +98 -0
- package/dist/preflight/stable-cwd.js.map +1 -0
- package/dist/rpc/transport.d.ts +43 -5
- package/dist/rpc/transport.js +131 -30
- package/dist/rpc/transport.js.map +1 -1
- package/dist/scripts/swe-rebench-v2-seed-pool.json +2 -1
- package/dist/solver-nets/registry.d.ts +19 -0
- package/dist/solver-nets/registry.js +95 -66
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_jinn-repo-pool.d.ts +27 -0
- package/dist/solver-types/_jinn-repo-pool.js +27 -0
- package/dist/solver-types/_jinn-repo-pool.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-state.d.ts +9 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +14 -0
- package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +30 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +40 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/index.js +2 -0
- package/dist/solver-types/index.js.map +1 -1
- package/dist/solver-types/jinn-repo-admit.d.ts +17 -0
- package/dist/solver-types/jinn-repo-admit.js +16 -0
- package/dist/solver-types/jinn-repo-admit.js.map +1 -0
- package/dist/solver-types/jinn-repo-auto.d.ts +60 -0
- package/dist/solver-types/jinn-repo-auto.js +163 -0
- package/dist/solver-types/jinn-repo-auto.js.map +1 -0
- package/dist/solver-types/jinn-repo-definition.d.ts +15 -0
- package/dist/solver-types/jinn-repo-definition.js +34 -0
- package/dist/solver-types/jinn-repo-definition.js.map +1 -0
- package/dist/solver-types/jinn-repo-extract.d.ts +16 -0
- package/dist/solver-types/jinn-repo-extract.js +32 -0
- package/dist/solver-types/jinn-repo-extract.js.map +1 -0
- package/dist/solver-types/jinn-repo.d.ts +21 -0
- package/dist/solver-types/jinn-repo.js +23 -0
- package/dist/solver-types/jinn-repo.js.map +1 -0
- package/dist/solver-types/learner-loop-test.js +1 -1
- package/dist/solver-types/learner-loop-test.js.map +1 -1
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
- package/dist/solver-types/solver-type.d.ts +8 -0
- package/dist/solver-types/swe-rebench-v2.d.ts +2 -0
- package/dist/solver-types/swe-rebench-v2.js +115 -10
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.d.ts +5 -0
- package/dist/solvernets/launched-record-dispatcher.js +14 -1
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/registry-client-erc8004.js +29 -37
- package/dist/solvernets/registry-client-erc8004.js.map +1 -1
- package/dist/solvernets/registry-client.d.ts +6 -0
- package/dist/solvernets/store.d.ts +1 -1
- package/dist/solvernets/store.js +8 -3
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/ai-units-config.d.ts +10 -0
- package/dist/spend/ai-units-config.js +7 -1
- package/dist/spend/ai-units-config.js.map +1 -1
- package/dist/spend/ai-units.d.ts +51 -0
- package/dist/spend/ai-units.js +73 -0
- package/dist/spend/ai-units.js.map +1 -1
- package/dist/spend/credential.d.ts +2 -2
- package/dist/spend/credential.js +9 -3
- package/dist/spend/credential.js.map +1 -1
- package/dist/spend/record.js +12 -5
- package/dist/spend/record.js.map +1 -1
- package/dist/spend/spend-cap.d.ts +10 -0
- package/dist/spend/spend-cap.js +13 -0
- package/dist/spend/spend-cap.js.map +1 -0
- package/dist/spend/usage.js +39 -3
- package/dist/spend/usage.js.map +1 -1
- package/dist/store/store.d.ts +106 -5
- package/dist/store/store.js +194 -8
- package/dist/store/store.js.map +1 -1
- package/dist/trajectory/emit.d.ts +6 -0
- package/dist/trajectory/emit.js +9 -1
- package/dist/trajectory/emit.js.map +1 -1
- package/dist/trajectory/harness-bundle-schema.d.ts +1 -1
- package/dist/trajectory/harness-bundle-schema.js +1 -1
- package/dist/trajectory/harness-bundle-schema.js.map +1 -1
- package/dist/trajectory/processors/identity-scrub.js +22 -3
- package/dist/trajectory/processors/identity-scrub.js.map +1 -1
- package/dist/trajectory/schema.d.ts +1 -1
- package/dist/trajectory/schema.js +1 -1
- package/dist/trajectory/schema.js.map +1 -1
- package/dist/trajectory/scrub/build.d.ts +46 -0
- package/dist/trajectory/scrub/build.js +76 -0
- package/dist/trajectory/scrub/build.js.map +1 -0
- package/dist/trajectory/scrub/emit-scrub.d.ts +41 -0
- package/dist/trajectory/scrub/emit-scrub.js +88 -0
- package/dist/trajectory/scrub/emit-scrub.js.map +1 -0
- package/dist/trajectory/scrub/key-policy.d.ts +20 -0
- package/dist/trajectory/scrub/key-policy.js +43 -0
- package/dist/trajectory/scrub/key-policy.js.map +1 -0
- package/dist/trajectory/scrub/layer2.d.ts +23 -0
- package/dist/trajectory/scrub/layer2.js +33 -0
- package/dist/trajectory/scrub/layer2.js.map +1 -0
- package/dist/trajectory/scrub/ml-pii-stage.d.ts +24 -0
- package/dist/trajectory/scrub/ml-pii-stage.js +43 -0
- package/dist/trajectory/scrub/ml-pii-stage.js.map +1 -0
- package/dist/trajectory/scrub/openredaction-stage.d.ts +178 -0
- package/dist/trajectory/scrub/openredaction-stage.js +269 -0
- package/dist/trajectory/scrub/openredaction-stage.js.map +1 -0
- package/dist/trajectory/scrub/pii-build.d.ts +31 -0
- package/dist/trajectory/scrub/pii-build.js +64 -0
- package/dist/trajectory/scrub/pii-build.js.map +1 -0
- package/dist/trajectory/scrub/pipeline.d.ts +37 -0
- package/dist/trajectory/scrub/pipeline.js +83 -0
- package/dist/trajectory/scrub/pipeline.js.map +1 -0
- package/dist/trajectory/scrub/plain-patterns-stage.d.ts +31 -0
- package/dist/trajectory/scrub/plain-patterns-stage.js +85 -0
- package/dist/trajectory/scrub/plain-patterns-stage.js.map +1 -0
- package/dist/trajectory/scrub/secretlint-stage.d.ts +35 -0
- package/dist/trajectory/scrub/secretlint-stage.js +250 -0
- package/dist/trajectory/scrub/secretlint-stage.js.map +1 -0
- package/dist/trajectory/scrub/transformers-detector.d.ts +35 -0
- package/dist/trajectory/scrub/transformers-detector.js +68 -0
- package/dist/trajectory/scrub/transformers-detector.js.map +1 -0
- package/dist/trajectory/scrub/types.d.ts +25 -0
- package/dist/trajectory/scrub/types.js +2 -0
- package/dist/trajectory/scrub/types.js.map +1 -0
- package/dist/trajectory/transcript-parsers/types.d.ts +1 -1
- package/dist/trajectory/transcript-parsers/types.js +1 -1
- package/dist/trajectory/transcript-parsers/types.js.map +1 -1
- package/dist/trajectory/transcript-watcher.d.ts +26 -0
- package/dist/trajectory/transcript-watcher.js +33 -0
- package/dist/trajectory/transcript-watcher.js.map +1 -1
- package/dist/tx-retry.d.ts +12 -0
- package/dist/tx-retry.js +41 -12
- package/dist/tx-retry.js.map +1 -1
- package/dist/types/envelope.d.ts +1 -1
- package/dist/types/envelope.js +1 -1
- package/dist/types/envelope.js.map +1 -1
- package/dist/types/payloads/index.d.ts +1 -1
- package/dist/types/payloads/index.js +7 -1
- package/dist/types/payloads/index.js.map +1 -1
- package/dist/types/payloads/portfolio-v0.d.ts +1 -1
- package/dist/types/payloads/portfolio-v0.js +1 -1
- package/dist/types/payloads/portfolio-v0.js.map +1 -1
- package/dist/types/payloads/prediction-apy-v0.d.ts +1 -1
- package/dist/types/payloads/prediction-apy-v0.js +1 -1
- package/dist/types/payloads/prediction-apy-v0.js.map +1 -1
- package/dist/types/payloads/prediction-v0.d.ts +1 -1
- package/dist/types/payloads/prediction-v0.js +1 -1
- package/dist/types/payloads/prediction-v0.js.map +1 -1
- package/dist/types/portfolio.d.ts +1 -1
- package/dist/types/portfolio.js +1 -1
- package/dist/types/portfolio.js.map +1 -1
- package/dist/types/prediction-apy.d.ts +1 -1
- package/dist/types/prediction-apy.js +1 -1
- package/dist/types/prediction-apy.js.map +1 -1
- package/dist/types/prediction.d.ts +1 -1
- package/dist/types/prediction.js +1 -1
- package/dist/types/prediction.js.map +1 -1
- package/dist/types/session-provenance.d.ts +1 -1
- package/dist/types/session-provenance.js +1 -1
- package/dist/types/session-provenance.js.map +1 -1
- package/dist/types/skill-artifact.d.ts +442 -0
- package/dist/types/skill-artifact.js +137 -0
- package/dist/types/skill-artifact.js.map +1 -0
- package/dist/types/task-document.d.ts +315 -1
- package/dist/types/task-document.js +9 -1
- package/dist/types/task-document.js.map +1 -1
- package/dist/types/task-run-read-model.d.ts +21 -0
- package/dist/types/task-run-read-model.js +2 -0
- package/dist/types/task-run-read-model.js.map +1 -0
- package/dist/types/task-run.d.ts +75 -0
- package/dist/types/task-run.js +2 -0
- package/dist/types/task-run.js.map +1 -0
- package/dist/types/task.d.ts +29 -1
- package/dist/types/task.js +1 -1
- package/dist/types/task.js.map +1 -1
- package/dist/types/window.d.ts +1 -1
- package/dist/types/window.js +1 -1
- package/dist/types/window.js.map +1 -1
- package/dist/util/redact-rpc-urls.d.ts +1 -1
- package/dist/util/redact-rpc-urls.js +57 -2
- package/dist/util/redact-rpc-urls.js.map +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/checkpoint.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/checkpoint.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/contracts.d.ts +3 -2
- package/dist/vendor/@jinn-network/sdk/dist/contracts.js +49 -0
- package/dist/vendor/@jinn-network/sdk/dist/jinn-repo.d.ts +44 -0
- package/dist/vendor/@jinn-network/sdk/dist/jinn-repo.js +25 -0
- package/dist/vendor/@jinn-network/sdk/dist/json-schema.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/json-schema.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/jinn-repo.d.ts +38 -0
- package/dist/vendor/@jinn-network/sdk/dist/payloads/jinn-repo.js +22 -0
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/prediction-v1.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/session-derived.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/session-derived.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +109 -2
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +26 -2
- package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/prediction-v1.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/jinn-repo.d.ts +4 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/jinn-repo.js +2 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/manifest-schema.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/swe-rebench-v2.d.ts +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/package.json +9 -1
- package/docker-compose.yml +3 -2
- package/package.json +43 -28
- package/plugins/jinn-repo-runtime/.claude-plugin/plugin.json +5 -0
- package/plugins/jinn-repo-runtime/.codex-plugin/plugin.json +39 -0
- package/plugins/jinn-repo-runtime/README.md +27 -0
- package/plugins/jinn-repo-runtime/hooks/hooks.json +16 -0
- package/plugins/jinn-repo-runtime/hooks/session-start +73 -0
- package/plugins/jinn-repo-runtime/jinn.plugin.json +11 -0
- package/plugins/jinn-repo-runtime/skills/task/SKILL.md +92 -0
- package/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/plugins/learner/hooks/session-start +30 -1
- package/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/plugins/local-trace-distiller/.claude-plugin/plugin.json +9 -0
- package/plugins/local-trace-distiller/.codex-plugin/plugin.json +41 -0
- package/plugins/local-trace-distiller/.mcp.json +8 -0
- package/plugins/local-trace-distiller/README.md +27 -0
- package/plugins/local-trace-distiller/jinn.plugin.json +36 -0
- package/plugins/local-trace-distiller/skills/distill/SKILL.md +51 -0
- package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
- package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
- package/deployments/deployment-jinn-mvi-l1-sepolia-fast.json +0 -55
- package/deployments/deployment-jinn-mvi-l1-sepolia.json +0 -55
- package/deployments/deployment-jinn-mvi-l2-baseSepolia.json +0 -13
- package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +0 -15
- package/dist/api/peers.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-canonical.d.ts +0 -207
- package/dist/daemon/jinn-claim-loop-canonical.js +0 -296
- package/dist/daemon/jinn-claim-loop-canonical.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-mock.d.ts +0 -61
- package/dist/daemon/jinn-claim-loop-mock.js +0 -122
- package/dist/daemon/jinn-claim-loop-mock.js.map +0 -1
- package/dist/daemon/jinn-claim-loop-wiring.d.ts +0 -33
- package/dist/daemon/jinn-claim-loop-wiring.js +0 -40
- package/dist/daemon/jinn-claim-loop-wiring.js.map +0 -1
- package/dist/daemon/jinn-claim-loop.d.ts +0 -130
- package/dist/daemon/jinn-claim-loop.js +0 -328
- package/dist/daemon/jinn-claim-loop.js.map +0 -1
- package/dist/dashboard/assets/index-CzKxvMcU.css +0 -32
- package/dist/dashboard/assets/index-yVemxHot.js +0 -351
- package/dist/earning/jinn-rewards.js.map +0 -1
- package/dist/scripts/donation-consumption-acceptance.d.ts +0 -85
- package/dist/scripts/donation-consumption-acceptance.js +0 -1382
- package/dist/scripts/donation-consumption-acceptance.js.map +0 -1
- package/dist/x402/acquire.d.ts +0 -17
- package/dist/x402/acquire.js +0 -49
- package/dist/x402/acquire.js.map +0 -1
- package/dist/x402/facilitator.d.ts +0 -11
- package/dist/x402/facilitator.js +0 -52
- package/dist/x402/facilitator.js.map +0 -1
- package/dist/x402/handler.d.ts +0 -27
- package/dist/x402/handler.js +0 -236
- package/dist/x402/handler.js.map +0 -1
- /package/dist/{api/peers.d.ts → daemon/peer-sync.d.ts} +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { computeGenesisHash, computePrevSpanHash } from '../hash-chain.js';
|
|
2
|
+
/**
|
|
3
|
+
* Seller-side scrub applied at emit time, before a trajectory is signed and
|
|
4
|
+
* published. Runs every span's attributes (and each event's attributes) through
|
|
5
|
+
* the pipeline, rebuilds the prev-span hash chain over the scrubbed spans, and
|
|
6
|
+
* produces the redaction manifest (one entry per span listing the keys touched;
|
|
7
|
+
* `event.<key>` for event-attribute redactions).
|
|
8
|
+
*/
|
|
9
|
+
export async function scrubSpansForEmit(spans, pipeline, taskCid) {
|
|
10
|
+
const out = [];
|
|
11
|
+
const manifestSpans = [];
|
|
12
|
+
let total = 0;
|
|
13
|
+
let prev = computeGenesisHash(taskCid);
|
|
14
|
+
for (const span of spans) {
|
|
15
|
+
const redactedKeys = new Set();
|
|
16
|
+
const attrResult = await pipeline.run(span.attributes ?? {});
|
|
17
|
+
for (const r of attrResult.redactions)
|
|
18
|
+
redactedKeys.add(r.key);
|
|
19
|
+
const events = [];
|
|
20
|
+
for (const event of span.events) {
|
|
21
|
+
if (event.attributes && Object.keys(event.attributes).length > 0) {
|
|
22
|
+
const evResult = await pipeline.run(event.attributes);
|
|
23
|
+
events.push({ ...event, attributes: evResult.attributes });
|
|
24
|
+
for (const r of evResult.redactions)
|
|
25
|
+
redactedKeys.add(`event.${r.key}`);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
events.push(event);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const scrubbed = {
|
|
32
|
+
...span,
|
|
33
|
+
attributes: { ...attrResult.attributes, 'jinn.prevSpanHash': prev },
|
|
34
|
+
events,
|
|
35
|
+
};
|
|
36
|
+
out.push(scrubbed);
|
|
37
|
+
prev = computePrevSpanHash(scrubbed);
|
|
38
|
+
if (redactedKeys.size > 0) {
|
|
39
|
+
const keys = [...redactedKeys];
|
|
40
|
+
manifestSpans.push({ spanId: span.spanId, redactedKeys: keys });
|
|
41
|
+
total += keys.length;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return { spans: out, redactionManifest: { spans: manifestSpans, totalRedactions: total } };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Seller-side scrub for capture spans, applied at publish time before the
|
|
48
|
+
* capture trajectory is uploaded. Runs each span's attributes through the
|
|
49
|
+
* pipeline, replacing them with the scrubbed values, and unions the pipeline's
|
|
50
|
+
* redactions into the span's existing `redactedKeys`. Unlike
|
|
51
|
+
* {@link scrubSpansForEmit} it does NOT touch events or inject a hash chain —
|
|
52
|
+
* capture spans carry neither. Generic over the span type so the concrete
|
|
53
|
+
* `SpanRow` (with its extra columns) is returned unchanged apart from
|
|
54
|
+
* `attributes` and `redactedKeys`.
|
|
55
|
+
*/
|
|
56
|
+
export async function scrubCaptureSpans(spans, pipeline) {
|
|
57
|
+
const out = [];
|
|
58
|
+
for (const span of spans) {
|
|
59
|
+
const result = await pipeline.run(span.attributes ?? {});
|
|
60
|
+
const redactedKeys = new Set(span.redactedKeys);
|
|
61
|
+
for (const r of result.redactions)
|
|
62
|
+
redactedKeys.add(r.key);
|
|
63
|
+
out.push({ ...span, attributes: result.attributes, redactedKeys: [...redactedKeys] });
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Unions two redaction manifests by spanId (dedup redactedKeys per span). Used
|
|
69
|
+
* when an ingestion-time manifest (e.g. a capture's stored redactedKeys) is
|
|
70
|
+
* combined with the emit-time pipeline manifest. Keeps the
|
|
71
|
+
* `totalRedactions === sum(redactedKeys)` invariant the schema enforces.
|
|
72
|
+
*/
|
|
73
|
+
export function mergeRedactionManifests(a, b) {
|
|
74
|
+
const bySpan = new Map();
|
|
75
|
+
for (const m of [a, b]) {
|
|
76
|
+
for (const s of m.spans) {
|
|
77
|
+
const set = bySpan.get(s.spanId) ?? new Set();
|
|
78
|
+
for (const k of s.redactedKeys)
|
|
79
|
+
set.add(k);
|
|
80
|
+
bySpan.set(s.spanId, set);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const spans = [...bySpan]
|
|
84
|
+
.map(([spanId, keys]) => ({ spanId, redactedKeys: [...keys] }))
|
|
85
|
+
.filter((s) => s.redactedKeys.length > 0);
|
|
86
|
+
return { spans, totalRedactions: spans.reduce((n, s) => n + s.redactedKeys.length, 0) };
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=emit-scrub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-scrub.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/emit-scrub.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ScrubStage } from './types.js';
|
|
2
|
+
export interface KeyPolicy {
|
|
3
|
+
/** keys whose values are structural and safe to publish raw */
|
|
4
|
+
safe: string[];
|
|
5
|
+
/** keys to delete entirely (never published) */
|
|
6
|
+
drop: string[];
|
|
7
|
+
}
|
|
8
|
+
export type KeyClass = 'safe' | 'content' | 'drop';
|
|
9
|
+
/**
|
|
10
|
+
* Classify an attribute key against the policy. `drop` wins over `safe` (a key
|
|
11
|
+
* matching both is dropped — fail safe). Unmatched keys are `content` and flow
|
|
12
|
+
* to the value-scrubbing stages.
|
|
13
|
+
*/
|
|
14
|
+
export declare function classifyKey(key: string, policy: KeyPolicy): KeyClass;
|
|
15
|
+
/**
|
|
16
|
+
* Structural key-policy stage: deletes `drop` keys outright (recording a
|
|
17
|
+
* redaction) and passes `safe` + `content` keys through unchanged. Value-level
|
|
18
|
+
* scrubbing of `content` keys is handled by later stages.
|
|
19
|
+
*/
|
|
20
|
+
export declare function keyPolicyStage(policy: KeyPolicy): ScrubStage;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const VERSION = '0.1.0';
|
|
2
|
+
/** Exact match, or prefix match when the pattern ends with `*`. */
|
|
3
|
+
function matches(key, pattern) {
|
|
4
|
+
if (pattern.endsWith('*'))
|
|
5
|
+
return key.startsWith(pattern.slice(0, -1));
|
|
6
|
+
return key === pattern;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Classify an attribute key against the policy. `drop` wins over `safe` (a key
|
|
10
|
+
* matching both is dropped — fail safe). Unmatched keys are `content` and flow
|
|
11
|
+
* to the value-scrubbing stages.
|
|
12
|
+
*/
|
|
13
|
+
export function classifyKey(key, policy) {
|
|
14
|
+
if (policy.drop.some((p) => matches(key, p)))
|
|
15
|
+
return 'drop';
|
|
16
|
+
if (policy.safe.some((p) => matches(key, p)))
|
|
17
|
+
return 'safe';
|
|
18
|
+
return 'content';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Structural key-policy stage: deletes `drop` keys outright (recording a
|
|
22
|
+
* redaction) and passes `safe` + `content` keys through unchanged. Value-level
|
|
23
|
+
* scrubbing of `content` keys is handled by later stages.
|
|
24
|
+
*/
|
|
25
|
+
export function keyPolicyStage(policy) {
|
|
26
|
+
return {
|
|
27
|
+
name: 'key-policy',
|
|
28
|
+
version: VERSION,
|
|
29
|
+
scrub(attributes) {
|
|
30
|
+
const out = {};
|
|
31
|
+
const redactions = [];
|
|
32
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
33
|
+
if (classifyKey(key, policy) === 'drop') {
|
|
34
|
+
redactions.push({ key, stage: 'key-policy', kind: 'dropped-key' });
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
out[key] = value;
|
|
38
|
+
}
|
|
39
|
+
return { attributes: out, redactions };
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=key-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-policy.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/key-policy.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,mEAAmE;AACnE,SAAS,OAAO,CAAC,GAAW,EAAE,OAAe;IAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,GAAG,KAAK,OAAO,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,MAAiB;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5D,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;QAChB,KAAK,CAAC,UAAsB;YAC1B,MAAM,GAAG,GAAe,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAsB,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;oBACxC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;oBACnE,SAAS;gBACX,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ScrubPipeline } from './pipeline.js';
|
|
2
|
+
import { type KeyPolicy } from './key-policy.js';
|
|
3
|
+
/**
|
|
4
|
+
* The layer-2 / public / derived-content scrub altitude
|
|
5
|
+
* (spec/2026-07-06-distillation-v1.md §10, D6; reconciled 2026-07-07 with the
|
|
6
|
+
* shipped #1409 seed profile).
|
|
7
|
+
*
|
|
8
|
+
* Secret-only: the structural key policy + deterministic plain-patterns
|
|
9
|
+
* (emails, home-dir paths, credential-ID prefixes — #1330/#1415) + the FULL
|
|
10
|
+
* secretlint stage (including its Pass-2 entropy secret-shape fallback). It
|
|
11
|
+
* deliberately DROPS openredaction and ML-PII — the stages whose PII
|
|
12
|
+
* shape-matching and trigger-word behaviour deface ordinary public prose
|
|
13
|
+
* (#1409).
|
|
14
|
+
*
|
|
15
|
+
* Mode note vs the seed profile (`buildSeedScrubPipeline`): seeds are
|
|
16
|
+
* REDACT-mode (the scrubbed output is published, so prose must survive →
|
|
17
|
+
* entropy fallback OFF there). This pipeline serves CHECK-mode consumers —
|
|
18
|
+
* `distillClusters` REJECTS a skill on any scrub change rather than publishing
|
|
19
|
+
* a redacted body — so a false positive costs one re-distill, never defaces
|
|
20
|
+
* published content, and the entropy fallback stays ON as the stricter net for
|
|
21
|
+
* a fresh secret surface (DR-2026-07-06 decision 3).
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildLayer2ScrubPipeline(policy?: KeyPolicy): ScrubPipeline;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ScrubPipeline } from './pipeline.js';
|
|
2
|
+
import { keyPolicyStage } from './key-policy.js';
|
|
3
|
+
import { secretlintStage } from './secretlint-stage.js';
|
|
4
|
+
import { plainPatternsStage } from './plain-patterns-stage.js';
|
|
5
|
+
import { DEFAULT_KEY_POLICY } from './build.js';
|
|
6
|
+
/**
|
|
7
|
+
* The layer-2 / public / derived-content scrub altitude
|
|
8
|
+
* (spec/2026-07-06-distillation-v1.md §10, D6; reconciled 2026-07-07 with the
|
|
9
|
+
* shipped #1409 seed profile).
|
|
10
|
+
*
|
|
11
|
+
* Secret-only: the structural key policy + deterministic plain-patterns
|
|
12
|
+
* (emails, home-dir paths, credential-ID prefixes — #1330/#1415) + the FULL
|
|
13
|
+
* secretlint stage (including its Pass-2 entropy secret-shape fallback). It
|
|
14
|
+
* deliberately DROPS openredaction and ML-PII — the stages whose PII
|
|
15
|
+
* shape-matching and trigger-word behaviour deface ordinary public prose
|
|
16
|
+
* (#1409).
|
|
17
|
+
*
|
|
18
|
+
* Mode note vs the seed profile (`buildSeedScrubPipeline`): seeds are
|
|
19
|
+
* REDACT-mode (the scrubbed output is published, so prose must survive →
|
|
20
|
+
* entropy fallback OFF there). This pipeline serves CHECK-mode consumers —
|
|
21
|
+
* `distillClusters` REJECTS a skill on any scrub change rather than publishing
|
|
22
|
+
* a redacted body — so a false positive costs one re-distill, never defaces
|
|
23
|
+
* published content, and the entropy fallback stays ON as the stricter net for
|
|
24
|
+
* a fresh secret surface (DR-2026-07-06 decision 3).
|
|
25
|
+
*/
|
|
26
|
+
export function buildLayer2ScrubPipeline(policy = DEFAULT_KEY_POLICY) {
|
|
27
|
+
return new ScrubPipeline([
|
|
28
|
+
keyPolicyStage(policy),
|
|
29
|
+
plainPatternsStage(policy, { credentialIds: true }),
|
|
30
|
+
secretlintStage(policy),
|
|
31
|
+
]);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=layer2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer2.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/layer2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAoB,kBAAkB;IAC7E,OAAO,IAAI,aAAa,CAAC;QACvB,cAAc,CAAC,MAAM,CAAC;QACtB,kBAAkB,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACnD,eAAe,CAAC,MAAM,CAAC;KACxB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type KeyPolicy } from './key-policy.js';
|
|
2
|
+
import type { ScrubStage } from './types.js';
|
|
3
|
+
/** A PII entity detected in text: a label (PER/ORG/LOC/…) and the matched span text. */
|
|
4
|
+
export interface PiiEntity {
|
|
5
|
+
label: string;
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* ML PII detector seam. The production implementation wraps a Transformers.js
|
|
10
|
+
* token-classification (NER) model; tests inject a deterministic fake. Kept
|
|
11
|
+
* behind an interface so the stage logic is unit-tested without loading a model.
|
|
12
|
+
*/
|
|
13
|
+
export interface PiiDetector {
|
|
14
|
+
detect(text: string): Promise<PiiEntity[]>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* ML PII stage. Runs the injected NER detector over each `content`-classified
|
|
18
|
+
* string value and replaces whole-word occurrences of each detected entity with
|
|
19
|
+
* `[PII:<label>]` (word-boundary matching so substrings aren't corrupted — e.g.
|
|
20
|
+
* detecting "London" leaves "Londoner" intact). `safe` and non-string values
|
|
21
|
+
* pass through untouched. The detector returns matched text rather than offsets
|
|
22
|
+
* because the Transformers.js NER pipeline does not surface character offsets.
|
|
23
|
+
*/
|
|
24
|
+
export declare function mlPiiStage(policy: KeyPolicy, detector: PiiDetector): ScrubStage;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { classifyKey } from './key-policy.js';
|
|
2
|
+
const VERSION = '0.1.0';
|
|
3
|
+
function escapeRegExp(s) {
|
|
4
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* ML PII stage. Runs the injected NER detector over each `content`-classified
|
|
8
|
+
* string value and replaces whole-word occurrences of each detected entity with
|
|
9
|
+
* `[PII:<label>]` (word-boundary matching so substrings aren't corrupted — e.g.
|
|
10
|
+
* detecting "London" leaves "Londoner" intact). `safe` and non-string values
|
|
11
|
+
* pass through untouched. The detector returns matched text rather than offsets
|
|
12
|
+
* because the Transformers.js NER pipeline does not surface character offsets.
|
|
13
|
+
*/
|
|
14
|
+
export function mlPiiStage(policy, detector) {
|
|
15
|
+
return {
|
|
16
|
+
name: 'ml-pii',
|
|
17
|
+
version: VERSION,
|
|
18
|
+
async scrub(attributes) {
|
|
19
|
+
const out = {};
|
|
20
|
+
const redactions = [];
|
|
21
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
22
|
+
if (typeof value !== 'string' || classifyKey(key, policy) !== 'content') {
|
|
23
|
+
out[key] = value;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
let text = value;
|
|
27
|
+
for (const ent of await detector.detect(value)) {
|
|
28
|
+
if (!ent.text)
|
|
29
|
+
continue;
|
|
30
|
+
const re = new RegExp(`\\b${escapeRegExp(ent.text)}\\b`, 'g');
|
|
31
|
+
const replaced = text.replace(re, `[PII:${ent.label}]`);
|
|
32
|
+
if (replaced !== text) {
|
|
33
|
+
redactions.push({ key, stage: 'ml-pii', kind: 'pii', detail: ent.label });
|
|
34
|
+
text = replaced;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
out[key] = text;
|
|
38
|
+
}
|
|
39
|
+
return { attributes: out, redactions };
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ml-pii-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ml-pii-stage.js","sourceRoot":"","sources":["../../../src/trajectory/scrub/ml-pii-stage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAkB9D,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,MAAiB,EAAE,QAAqB;IACjE,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO;QAChB,KAAK,CAAC,KAAK,CAAC,UAAsB;YAChC,MAAM,GAAG,GAAe,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAsB,EAAE,CAAC;YAEzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;oBACxE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBACjB,SAAS;gBACX,CAAC;gBAED,IAAI,IAAI,GAAG,KAAK,CAAC;gBACjB,KAAK,MAAM,GAAG,IAAI,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/C,IAAI,CAAC,GAAG,CAAC,IAAI;wBAAE,SAAS;oBACxB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;oBACxD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;wBACtB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;wBAC1E,IAAI,GAAG,QAAQ,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAClB,CAAC;YAED,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { OpenRedaction } from 'openredaction';
|
|
2
|
+
import { type KeyPolicy } from './key-policy.js';
|
|
3
|
+
import type { ScrubStage } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Patterns excluded from the default detector (#1331). All three ship with a
|
|
6
|
+
* bare-word regex (`\b[a-zA-Z0-9._]{3,30}\b` or equivalent) that matches
|
|
7
|
+
* nearly every token of ordinary technical prose — "Update the staging
|
|
8
|
+
* bucket config" came back as `[IG_USER_…] the staging [IG_USER_…]
|
|
9
|
+
* [IG_USER_…]`, destroying the readability and distillation value of every
|
|
10
|
+
* published trajectory. A social handle has no shape of its own outside its
|
|
11
|
+
* platform context, so dropping these loses no genuine coverage: emails,
|
|
12
|
+
* keys, cards, SSNs, phones etc. all keep their dedicated patterns (pinned
|
|
13
|
+
* by test/trajectory/scrub/openredaction-tuning.test.ts and the
|
|
14
|
+
* harness-layer seeded-secrets fixture).
|
|
15
|
+
*
|
|
16
|
+
* `NAME` is denylisted for the same reason with an acknowledged trade-off:
|
|
17
|
+
* its follower branch accepts lowercase words (`[A-Z][a-z…]+ (\s+[a-z…]+){1,3}`),
|
|
18
|
+
* so ANY sentence-initial capitalised word plus 1–3 words matches — "Fix the
|
|
19
|
+
* failing test" is a "name" to it, which mangles the first sentence of
|
|
20
|
+
* essentially every task summary. Person-name detection is the ML PII
|
|
21
|
+
* stage's job (GLiNER, `mlPiiStage`), which the daemon wires when the model
|
|
22
|
+
* is available; a bare unlabelled name in prose is not regex-detectable at
|
|
23
|
+
* acceptable precision.
|
|
24
|
+
*
|
|
25
|
+
* `LAB_TEST_ID` and `EXAM_ID` are denylisted for the same reason (#1348):
|
|
26
|
+
* both trigger on ubiquitous software words (`\b(?:LAB|TEST|SAMPLE)…` and
|
|
27
|
+
* `\b(?:EXAM|TEST|QUIZ|ASSESSMENT)…`, case-insensitive, same bare
|
|
28
|
+
* `[A-Z0-9]{6,12}` tail) — "test-driven-development" came back as
|
|
29
|
+
* `test-[LAB_8465]-development` — and lab-specimen / exam IDs are not
|
|
30
|
+
* plausible in agent-trajectory content. Nothing in the seeded-secrets
|
|
31
|
+
* fixture pins either pattern.
|
|
32
|
+
*
|
|
33
|
+
* #1391 additions (full 42-seed characterisation) — bare-SHAPE patterns
|
|
34
|
+
* whose regex matches ordinary technical tokens with no trigger word at all:
|
|
35
|
+
*
|
|
36
|
+
* - `ZIP_CODE_US` — `\b\d{5}(…)?\b`: ANY 5-digit number. Fired on GitHub
|
|
37
|
+
* issue numbers ("#26251", "#41417"), millisecond values ("60000"), quota
|
|
38
|
+
* figures ("25000"), Lark error codes ("41050"). A bare 5-digit number in
|
|
39
|
+
* trajectory content is overwhelmingly a count, id, or port, not a home
|
|
40
|
+
* address component; street-level address detection is the ML PII stage's
|
|
41
|
+
* job, where the surrounding words disambiguate.
|
|
42
|
+
* - `POSTCODE_UK` — matches hex colour literals ("#FF00FF" → `[POSTCODE]`).
|
|
43
|
+
* Same rationale: a bare alphanumeric cluster is not a location without
|
|
44
|
+
* context, which the ML PII stage has and this regex does not.
|
|
45
|
+
* - `SWIFT_BIC` — `\b[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?\b`: ANY 8- or 11-char
|
|
46
|
+
* uppercase word ("REQUIRED", from an HTTP header name). BIC codes are
|
|
47
|
+
* public bank identifiers, not secrets, and the shape is indistinguishable
|
|
48
|
+
* from an all-caps word.
|
|
49
|
+
* - `TIKTOK_USERNAME` / `SOCIAL_MEDIA_HANDLE` — the #1331 social-handle
|
|
50
|
+
* family: `@`-prefixed bare words. Fired on npm scoped packages
|
|
51
|
+
* ("@n8n/n8n-nodes-langchain…", "@github/copilot-sdk"), which are
|
|
52
|
+
* ubiquitous in technical prose.
|
|
53
|
+
*/
|
|
54
|
+
export declare const BARE_WORD_PATTERN_DENYLIST: readonly string[];
|
|
55
|
+
/**
|
|
56
|
+
* Trigger-word patterns excluded for #1372 (kept as a separate block from the
|
|
57
|
+
* bare-word denylist above so parallel denylist additions merge cleanly).
|
|
58
|
+
*
|
|
59
|
+
* These share one pathology: an ordinary English trigger word (`TO`,
|
|
60
|
+
* `APPROVAL`, `PROJECT`, `ORDER`, `REVIEW`, `PASS`, `LOT`, `SO`, `REG`, `WO`,
|
|
61
|
+
* `MISSING`, `RETURN`, `user`, `prod`, `ice`…), case-insensitive, followed by
|
|
62
|
+
* a bare `[A-Z0-9]{n,m}` tail with no intrinsic shape. On the published seed
|
|
63
|
+
* skills' SKILL.md prose every one of them fired — all 42 seed bodies were
|
|
64
|
+
* defaced ("project context" → `project [PROJECT_3875]`, "get your approval
|
|
65
|
+
* before" → `approval [AUTH_5211]`), several mid-word ("something" →
|
|
66
|
+
* `so[SO_1826]`, "workflow" → `wo[WO_3602]`, "regressions" →
|
|
67
|
+
* `[REG]ressions`). Observed trigger words per pattern, from the #1372
|
|
68
|
+
* characterisation over five real seed bodies:
|
|
69
|
+
*
|
|
70
|
+
* - `USERNAME` — "user intent", "user has"; a bare word after "user"/"login"
|
|
71
|
+
* is not a credential. Credentials keep their shaped patterns; person
|
|
72
|
+
* names are the ML PII stage's job (see the `NAME` note above).
|
|
73
|
+
* - `PROJECT_CODE` — "project context", "project goes through".
|
|
74
|
+
* - `CARD_AUTH_CODE` — "approval before" (card auth codes travel with card
|
|
75
|
+
* numbers, which `CREDIT_CARD` still catches).
|
|
76
|
+
* - `IATA_AIRPORT_CODE` — "to use" ("TO" + any 3 capitalisable letters).
|
|
77
|
+
* - `JUDGMENT_NUMBER` — "order should".
|
|
78
|
+
* - `STANDING_ORDER_REF` — "SO" matches inside "something"/"solution".
|
|
79
|
+
* - `PRODUCTION_ID` — "production classes"; nested self-replacement
|
|
80
|
+
* corrupted "NO PRODUCTION CODE" into `PROD[PROD[PROD…`.
|
|
81
|
+
* - `WORK_ORDER_NUMBER` — "wo" matches inside "workflow"/"worktree".
|
|
82
|
+
* - `PERFORMANCE_REVIEW_ID` — "performance problems", "evaluation between".
|
|
83
|
+
* - `TNT_TRACKING` — every clause optional except the tail, so ANY 9- or
|
|
84
|
+
* 13-character word matches ("variation", "statement").
|
|
85
|
+
* - `THEME_PARK_TICKET` — "pass immediately".
|
|
86
|
+
* - `TOURNAMENT_REGISTRATION_ID` — "REG" matches inside "regressions".
|
|
87
|
+
* - `MISSING_PERSON_CASE` — "missing requirements".
|
|
88
|
+
* - `RMA_NUMBER` — "return expected".
|
|
89
|
+
* - `BATCH_LOT_NUMBER` — "a lot faster".
|
|
90
|
+
* - `EMERGENCY_CONTACT` — "ice" (unanchored, matches inside "practice")
|
|
91
|
+
* followed by any 2–4 words.
|
|
92
|
+
*
|
|
93
|
+
* Lab-grade coverage loss is acceptable: these label niche reference numbers
|
|
94
|
+
* (parcel tracking, theme-park tickets, tournament brackets, standing
|
|
95
|
+
* orders, RMAs…) that are implausible in agent-trajectory content and carry
|
|
96
|
+
* no shape of their own beyond the trigger word. Genuinely secret-shaped
|
|
97
|
+
* content keeps its dedicated patterns (emails, cards, SSNs, API keys —
|
|
98
|
+
* pinned below and by the harness-layer seeded-secrets fixture), and the
|
|
99
|
+
* secretlint + plain-patterns stages still run behind this one.
|
|
100
|
+
*
|
|
101
|
+
* #1391 additions — the #1372 characterisation ran 5 sample bodies; the
|
|
102
|
+
* full-42-seed sweep surfaced the longer tail below (same pathology, same
|
|
103
|
+
* fix, observed trigger words in parentheses). One aggravator worth naming:
|
|
104
|
+
* openredaction substitutes a detection's captured VALUE case-insensitively
|
|
105
|
+
* across the whole document, so a single trigger FP defaces every other
|
|
106
|
+
* occurrence of that value. Every seed's frontmatter contains
|
|
107
|
+
* `license: MIT` — LICENSE_PLATE captures `MIT`, and every "limit(s)" /
|
|
108
|
+
* "submit" in the body came back as `li[PLATE_2299]s` / `Sub[PLATE_2299]`.
|
|
109
|
+
*
|
|
110
|
+
* - `LICENSE_PLATE` — "license: MIT" (frontmatter, all 42 seeds); `REG`
|
|
111
|
+
* trigger mid-word ("registers" → `[PLATE]isters`).
|
|
112
|
+
* - `US_LICENSE_PLATE` / `INTERNATIONAL_LICENSE_PLATE` — same trigger family
|
|
113
|
+
* (`PLATE|LICENSE|TAG|REGISTRATION`): "tag-driven", "tagged as data".
|
|
114
|
+
* - `EDITORIAL_TICKET` — "edit existing", "edit endpoints" (`EDIT` trigger).
|
|
115
|
+
* - `TRANSACTION_ID` — `TRANS` trigger mid-word: "transformations" →
|
|
116
|
+
* `[TXN]formations`.
|
|
117
|
+
* - `AIRLINE_BOOKING_REFERENCE` — "reference images", "reference videos",
|
|
118
|
+
* "node reference syntax" (`REFERENCE` trigger).
|
|
119
|
+
* - `SOURCE_ID` — "source images", "source directory", "multi-source
|
|
120
|
+
* aggregation".
|
|
121
|
+
* - `SERVICE_REQUEST_NUMBER` — "service discovery", "app-service assessment".
|
|
122
|
+
* - `TERMINAL_ID` — "terminal status"; `POS` trigger mid-word: "false
|
|
123
|
+
* positives", "PostToolUse".
|
|
124
|
+
* - `EXIT_INTERVIEW_ID` — "termination criterion/oracle", "separation
|
|
125
|
+
* exists" (`EXIT|TERMINATION|SEPARATION` triggers).
|
|
126
|
+
* - `HOTEL_LOYALTY_NUMBER` — "member-remove" (wiki commands), "rewards
|
|
127
|
+
* padding" (`MEMBER|LOYALTY|REWARDS` triggers).
|
|
128
|
+
* - `SEARCH_RESCUE_MISSION_ID` — "search operations", "web/search results"
|
|
129
|
+
* (`SEARCH|RESCUE|MISSION` triggers).
|
|
130
|
+
* - `APPLICATION_ID` / `JOB_APPLICATION_ID` — "application gateway",
|
|
131
|
+
* "candidate contradicts", "candidate regions" (`APPLICATION|CANDIDATE|
|
|
132
|
+
* APPLICANT` triggers).
|
|
133
|
+
* - `ARTICLE_ID` — "user story should", "user-story-example" (`STORY`
|
|
134
|
+
* trigger).
|
|
135
|
+
* - `EMERGENCY_CALL_REF` — "incident investigation" (`INCIDENT` trigger).
|
|
136
|
+
* - `CAMPAIGN_CODE` — "brand campaigns", "brand campaign jingle".
|
|
137
|
+
* - `INSTALLATION_REF` — "brew install imagemagick", "apt-get install".
|
|
138
|
+
* - `PRODUCT_SKU` — "SKU changes", "SKU upgrades" (Azure sizing prose).
|
|
139
|
+
* - `BAR_NUMBER` — "raises the bar because" (`BAR` trigger).
|
|
140
|
+
* - `PREMIUM_PAYMENT_REF` — "premium commercial cuts", "premium brand".
|
|
141
|
+
* - `HOUSING_ASSIGNMENT` — "ambient room tone" (`ROOM` trigger).
|
|
142
|
+
* - `MANUSCRIPT_ID` — `MS` trigger: "0.8 ms overhead" → `[MANUSCRIPT]`.
|
|
143
|
+
* - `STATEMENT_REF` — "return statement exists".
|
|
144
|
+
* - `QUOTE_REFERENCE` — "quote shortest decisive line".
|
|
145
|
+
* - `RESUME_ID` — "Resume caveman after" (`RESUME|CV` triggers).
|
|
146
|
+
* - `PAYMENT_REFERENCE` — `PAY` trigger mid-word: "paymentGateway" →
|
|
147
|
+
* `pay[PAY_REF]`.
|
|
148
|
+
* - `ROUTING_NUMBER_MFG` — "routing convention".
|
|
149
|
+
* - `MICROSOFT_CERTIFICATION` — "Microsoft documentation" (`MICROSOFT|MS`
|
|
150
|
+
* triggers).
|
|
151
|
+
*
|
|
152
|
+
* Revealed at fixpoint (iteration 2 — patterns previously shadowed by a
|
|
153
|
+
* higher-priority pattern that the first pass denylisted):
|
|
154
|
+
* - `INCIDENT_REPORT_NUMBER` — "Incident Investigation" (`INCIDENT` trigger,
|
|
155
|
+
* surfaced once EMERGENCY_CALL_REF was gone).
|
|
156
|
+
* - `ENROLLMENT_NUMBER` — "registration succeeds" (`REGISTRATION` trigger).
|
|
157
|
+
* - `HOTEL_RESERVATION` — "Capacity Reservation Groups" (`RESERVATION`
|
|
158
|
+
* trigger, surfaced once AIRLINE_BOOKING_REFERENCE was gone).
|
|
159
|
+
*/
|
|
160
|
+
export declare const PROSE_TRIGGER_PATTERN_DENYLIST: readonly string[];
|
|
161
|
+
/**
|
|
162
|
+
* Default detector: openredaction's full pattern set minus the audited
|
|
163
|
+
* bare-word matchers. Built via the `patterns` whitelist option (the
|
|
164
|
+
* library has no exclude option), so a version bump that renames patterns
|
|
165
|
+
* fails loudly in the tuning tests rather than silently re-enabling junk.
|
|
166
|
+
*/
|
|
167
|
+
export declare function buildDefaultDetector(): OpenRedaction;
|
|
168
|
+
/**
|
|
169
|
+
* Structured-PII stage backed by `openredaction` (570+ curated regex patterns +
|
|
170
|
+
* checksum validation, e.g. Luhn for cards). Runs only on `content`-classified
|
|
171
|
+
* string attributes; `safe` and non-string values pass through untouched. Each
|
|
172
|
+
* detection is replaced inline (openredaction's placeholder substitution) and
|
|
173
|
+
* recorded as a `pii` redaction for the provenance manifest.
|
|
174
|
+
*
|
|
175
|
+
* The detector is constructed once at factory time and reused across spans
|
|
176
|
+
* (pattern compilation is not free).
|
|
177
|
+
*/
|
|
178
|
+
export declare function openredactionStage(policy: KeyPolicy, detector?: OpenRedaction): ScrubStage;
|