clinkx 0.2.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/LICENSE +10 -0
- package/README.md +113 -18
- package/clinkx-workflows/dist/allowed-roots.d.ts +1 -0
- package/clinkx-workflows/dist/allowed-roots.js +5 -0
- package/clinkx-workflows/dist/allowed-roots.js.map +1 -0
- package/clinkx-workflows/dist/artifacts.d.ts +20 -1
- package/clinkx-workflows/dist/artifacts.js +38 -9
- package/clinkx-workflows/dist/artifacts.js.map +1 -1
- package/clinkx-workflows/dist/backend.d.ts +4 -0
- package/clinkx-workflows/dist/citation-check.d.ts +40 -0
- package/clinkx-workflows/dist/citation-check.js +348 -0
- package/clinkx-workflows/dist/citation-check.js.map +1 -0
- package/clinkx-workflows/dist/clink-client.d.ts +2 -1
- package/clinkx-workflows/dist/clink-client.js +17 -4
- package/clinkx-workflows/dist/clink-client.js.map +1 -1
- package/clinkx-workflows/dist/config.d.ts +145 -16
- package/clinkx-workflows/dist/config.js +384 -26
- package/clinkx-workflows/dist/config.js.map +1 -1
- package/clinkx-workflows/dist/contained-file.d.ts +172 -0
- package/clinkx-workflows/dist/contained-file.js +483 -0
- package/clinkx-workflows/dist/contained-file.js.map +1 -0
- package/clinkx-workflows/dist/context-builder-lifecycle-contract.d.ts +416 -0
- package/clinkx-workflows/dist/context-builder-lifecycle-contract.js +328 -0
- package/clinkx-workflows/dist/context-builder-lifecycle-contract.js.map +1 -0
- package/clinkx-workflows/dist/context-builder-lifecycle-router.d.ts +24 -0
- package/clinkx-workflows/dist/context-builder-lifecycle-router.js +39 -0
- package/clinkx-workflows/dist/context-builder-lifecycle-router.js.map +1 -0
- package/clinkx-workflows/dist/context-cache-key.d.ts +53 -0
- package/clinkx-workflows/dist/context-cache-key.js +91 -0
- package/clinkx-workflows/dist/context-cache-key.js.map +1 -0
- package/clinkx-workflows/dist/context-mode-resolver.d.ts +27 -0
- package/clinkx-workflows/dist/context-mode-resolver.js +126 -0
- package/clinkx-workflows/dist/context-mode-resolver.js.map +1 -0
- package/clinkx-workflows/dist/context-preflight.d.ts +184 -0
- package/clinkx-workflows/dist/context-preflight.js +91 -0
- package/clinkx-workflows/dist/context-preflight.js.map +1 -0
- package/clinkx-workflows/dist/council-expander.d.ts +1 -1
- package/clinkx-workflows/dist/council-expander.js +2 -1
- package/clinkx-workflows/dist/council-expander.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/activity-contract.d.ts +165 -0
- package/clinkx-workflows/dist/dashboard/activity-contract.js +105 -0
- package/clinkx-workflows/dist/dashboard/activity-contract.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/activity-lease.d.ts +25 -0
- package/clinkx-workflows/dist/dashboard/activity-lease.js +34 -0
- package/clinkx-workflows/dist/dashboard/activity-lease.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/activity-reader.d.ts +86 -0
- package/clinkx-workflows/dist/dashboard/activity-reader.js +480 -0
- package/clinkx-workflows/dist/dashboard/activity-reader.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/api-routes.d.ts +36 -0
- package/clinkx-workflows/dist/dashboard/api-routes.js +1047 -0
- package/clinkx-workflows/dist/dashboard/api-routes.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/artifact-index.d.ts +37 -0
- package/clinkx-workflows/dist/dashboard/artifact-index.js +145 -0
- package/clinkx-workflows/dist/dashboard/artifact-index.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/auth/challenge-store.d.ts +31 -0
- package/clinkx-workflows/dist/dashboard/auth/challenge-store.js +65 -0
- package/clinkx-workflows/dist/dashboard/auth/challenge-store.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/auth/controller.d.ts +26 -0
- package/clinkx-workflows/dist/dashboard/auth/controller.js +596 -0
- package/clinkx-workflows/dist/dashboard/auth/controller.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/auth/credential-store.d.ts +60 -0
- package/clinkx-workflows/dist/dashboard/auth/credential-store.js +776 -0
- package/clinkx-workflows/dist/dashboard/auth/credential-store.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.d.ts +9 -0
- package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.js +44 -0
- package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/auth/session-store.d.ts +17 -0
- package/clinkx-workflows/dist/dashboard/auth/session-store.js +77 -0
- package/clinkx-workflows/dist/dashboard/auth/session-store.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/auth/webauthn-service.d.ts +25 -0
- package/clinkx-workflows/dist/dashboard/auth/webauthn-service.js +71 -0
- package/clinkx-workflows/dist/dashboard/auth/webauthn-service.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/context-run-liveness.d.ts +37 -0
- package/clinkx-workflows/dist/dashboard/context-run-liveness.js +49 -0
- package/clinkx-workflows/dist/dashboard/context-run-liveness.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/context-run-reader.d.ts +222 -0
- package/clinkx-workflows/dist/dashboard/context-run-reader.js +1178 -0
- package/clinkx-workflows/dist/dashboard/context-run-reader.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/contracts.d.ts +8936 -0
- package/clinkx-workflows/dist/dashboard/contracts.js +1157 -0
- package/clinkx-workflows/dist/dashboard/contracts.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/generation.d.ts +14 -0
- package/clinkx-workflows/dist/dashboard/generation.js +41 -0
- package/clinkx-workflows/dist/dashboard/generation.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/index.d.ts +28 -0
- package/clinkx-workflows/dist/dashboard/index.js +16 -0
- package/clinkx-workflows/dist/dashboard/index.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/lazy-content.d.ts +101 -0
- package/clinkx-workflows/dist/dashboard/lazy-content.js +748 -0
- package/clinkx-workflows/dist/dashboard/lazy-content.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/progress-report-contract.d.ts +303 -0
- package/clinkx-workflows/dist/dashboard/progress-report-contract.js +221 -0
- package/clinkx-workflows/dist/dashboard/progress-report-contract.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/progress-report-reader.d.ts +50 -0
- package/clinkx-workflows/dist/dashboard/progress-report-reader.js +581 -0
- package/clinkx-workflows/dist/dashboard/progress-report-reader.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.d.ts +89 -0
- package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.js +71 -0
- package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/progress-report-status-store.d.ts +28 -0
- package/clinkx-workflows/dist/dashboard/progress-report-status-store.js +110 -0
- package/clinkx-workflows/dist/dashboard/progress-report-status-store.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/read-model.d.ts +86 -0
- package/clinkx-workflows/dist/dashboard/read-model.js +440 -0
- package/clinkx-workflows/dist/dashboard/read-model.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/request-admission.d.ts +31 -0
- package/clinkx-workflows/dist/dashboard/request-admission.js +126 -0
- package/clinkx-workflows/dist/dashboard/request-admission.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/scanner.d.ts +75 -0
- package/clinkx-workflows/dist/dashboard/scanner.js +1110 -0
- package/clinkx-workflows/dist/dashboard/scanner.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/server-factory.d.ts +50 -0
- package/clinkx-workflows/dist/dashboard/server-factory.js +431 -0
- package/clinkx-workflows/dist/dashboard/server-factory.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/session-log-contract.d.ts +2611 -0
- package/clinkx-workflows/dist/dashboard/session-log-contract.js +480 -0
- package/clinkx-workflows/dist/dashboard/session-log-contract.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/session-log-identity.d.ts +21 -0
- package/clinkx-workflows/dist/dashboard/session-log-identity.js +101 -0
- package/clinkx-workflows/dist/dashboard/session-log-identity.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/session-log-journal.d.ts +43 -0
- package/clinkx-workflows/dist/dashboard/session-log-journal.js +522 -0
- package/clinkx-workflows/dist/dashboard/session-log-journal.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/session-log-reader.d.ts +61 -0
- package/clinkx-workflows/dist/dashboard/session-log-reader.js +378 -0
- package/clinkx-workflows/dist/dashboard/session-log-reader.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/session-log-redaction.d.ts +6 -0
- package/clinkx-workflows/dist/dashboard/session-log-redaction.js +367 -0
- package/clinkx-workflows/dist/dashboard/session-log-redaction.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/session-log-retention.d.ts +23 -0
- package/clinkx-workflows/dist/dashboard/session-log-retention.js +212 -0
- package/clinkx-workflows/dist/dashboard/session-log-retention.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/static-responses.d.ts +10 -0
- package/clinkx-workflows/dist/dashboard/static-responses.js +94 -0
- package/clinkx-workflows/dist/dashboard/static-responses.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/worker-lock-observer.d.ts +28 -0
- package/clinkx-workflows/dist/dashboard/worker-lock-observer.js +241 -0
- package/clinkx-workflows/dist/dashboard/worker-lock-observer.js.map +1 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/index-DOkMXTfB.js +25 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/style-ChJsn0KD.css +1 -0
- package/clinkx-workflows/dist/dashboard-ui/contracts/council-plan-review-input-v1.json +158 -0
- package/clinkx-workflows/dist/dashboard-ui/index.html +15 -0
- package/clinkx-workflows/dist/dashboard-ui/licenses/IBM-Plex-Mono-OFL.txt +93 -0
- package/clinkx-workflows/dist/dashboard-ui/licenses/IBM-Plex-Sans-OFL.txt +93 -0
- package/clinkx-workflows/dist/dashboard-ui/licenses/JetBrains-Mono-OFL.txt +93 -0
- package/clinkx-workflows/dist/dashboard-ui/licenses/NOTICE.md +32 -0
- package/clinkx-workflows/dist/dashboard-ui/theme-init.js +8 -0
- package/clinkx-workflows/dist/definition-normalizer.d.ts +19 -0
- package/clinkx-workflows/dist/definition-normalizer.js.map +1 -1
- package/clinkx-workflows/dist/delegate-validate.d.ts +78 -0
- package/clinkx-workflows/dist/delegate-validate.js +97 -0
- package/clinkx-workflows/dist/delegate-validate.js.map +1 -0
- package/clinkx-workflows/dist/engine.d.ts +141 -0
- package/clinkx-workflows/dist/engine.js +882 -28
- package/clinkx-workflows/dist/engine.js.map +1 -1
- package/clinkx-workflows/dist/errors.d.ts +2 -0
- package/clinkx-workflows/dist/errors.js.map +1 -1
- package/clinkx-workflows/dist/fingerprint.d.ts +1 -1
- package/clinkx-workflows/dist/fingerprint.js +1 -1
- package/clinkx-workflows/dist/index.d.ts +19 -0
- package/clinkx-workflows/dist/index.js +15 -0
- package/clinkx-workflows/dist/index.js.map +1 -1
- package/clinkx-workflows/dist/loader.d.ts +9 -3
- package/clinkx-workflows/dist/loader.js +92 -21
- package/clinkx-workflows/dist/loader.js.map +1 -1
- package/clinkx-workflows/dist/plan-review/admission.d.ts +160 -0
- package/clinkx-workflows/dist/plan-review/admission.js +290 -0
- package/clinkx-workflows/dist/plan-review/admission.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/context-policy.d.ts +55 -0
- package/clinkx-workflows/dist/plan-review/context-policy.js +146 -0
- package/clinkx-workflows/dist/plan-review/context-policy.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/contract.d.ts +763 -0
- package/clinkx-workflows/dist/plan-review/contract.js +289 -0
- package/clinkx-workflows/dist/plan-review/contract.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/digest.d.ts +68 -0
- package/clinkx-workflows/dist/plan-review/digest.js +241 -0
- package/clinkx-workflows/dist/plan-review/digest.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/discovery.d.ts +45 -0
- package/clinkx-workflows/dist/plan-review/discovery.js +36 -0
- package/clinkx-workflows/dist/plan-review/discovery.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/execution-contract.d.ts +298 -0
- package/clinkx-workflows/dist/plan-review/execution-contract.js +194 -0
- package/clinkx-workflows/dist/plan-review/execution-contract.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/expander.d.ts +48 -0
- package/clinkx-workflows/dist/plan-review/expander.js +243 -0
- package/clinkx-workflows/dist/plan-review/expander.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/projector.d.ts +126 -0
- package/clinkx-workflows/dist/plan-review/projector.js +437 -0
- package/clinkx-workflows/dist/plan-review/projector.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/publication.d.ts +95 -0
- package/clinkx-workflows/dist/plan-review/publication.js +182 -0
- package/clinkx-workflows/dist/plan-review/publication.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/ranking-reducer.d.ts +34 -0
- package/clinkx-workflows/dist/plan-review/ranking-reducer.js +139 -0
- package/clinkx-workflows/dist/plan-review/ranking-reducer.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/resume.d.ts +38 -0
- package/clinkx-workflows/dist/plan-review/resume.js +122 -0
- package/clinkx-workflows/dist/plan-review/resume.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/rubric.d.ts +7 -0
- package/clinkx-workflows/dist/plan-review/rubric.js +24 -0
- package/clinkx-workflows/dist/plan-review/rubric.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/run-state.d.ts +398 -0
- package/clinkx-workflows/dist/plan-review/run-state.js +183 -0
- package/clinkx-workflows/dist/plan-review/run-state.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/runtime-policy.d.ts +74 -0
- package/clinkx-workflows/dist/plan-review/runtime-policy.js +186 -0
- package/clinkx-workflows/dist/plan-review/runtime-policy.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/snapshot.d.ts +81 -0
- package/clinkx-workflows/dist/plan-review/snapshot.js +170 -0
- package/clinkx-workflows/dist/plan-review/snapshot.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/stage-error.d.ts +19 -0
- package/clinkx-workflows/dist/plan-review/stage-error.js +20 -0
- package/clinkx-workflows/dist/plan-review/stage-error.js.map +1 -0
- package/clinkx-workflows/dist/post-processors/index.d.ts +20 -0
- package/clinkx-workflows/dist/post-processors/index.js +21 -0
- package/clinkx-workflows/dist/post-processors/index.js.map +1 -0
- package/clinkx-workflows/dist/prompt-budget.d.ts +7 -0
- package/clinkx-workflows/dist/prompt-budget.js +7 -1
- package/clinkx-workflows/dist/prompt-budget.js.map +1 -1
- package/clinkx-workflows/dist/reducers/index.js +2 -0
- package/clinkx-workflows/dist/reducers/index.js.map +1 -1
- package/clinkx-workflows/dist/run-lock-heartbeat.d.ts +2 -0
- package/clinkx-workflows/dist/run-lock-heartbeat.js +3 -0
- package/clinkx-workflows/dist/run-lock-heartbeat.js.map +1 -0
- package/clinkx-workflows/dist/run-summary/cards/council-plan-review.d.ts +34 -0
- package/clinkx-workflows/dist/run-summary/cards/council-plan-review.js +74 -0
- package/clinkx-workflows/dist/run-summary/cards/council-plan-review.js.map +1 -0
- package/clinkx-workflows/dist/run-summary/cards/index.js +5 -0
- package/clinkx-workflows/dist/run-summary/cards/index.js.map +1 -1
- package/clinkx-workflows/dist/run-summary.d.ts +13 -0
- package/clinkx-workflows/dist/run-summary.js +29 -1
- package/clinkx-workflows/dist/run-summary.js.map +1 -1
- package/clinkx-workflows/dist/schema.d.ts +76 -21
- package/clinkx-workflows/dist/schema.js +10 -1
- package/clinkx-workflows/dist/schema.js.map +1 -1
- package/clinkx-workflows/dist/seed-terms.d.ts +30 -0
- package/clinkx-workflows/dist/seed-terms.js +176 -0
- package/clinkx-workflows/dist/seed-terms.js.map +1 -0
- package/clinkx-workflows/dist/server.d.ts +5 -2
- package/clinkx-workflows/dist/server.js +82 -52
- package/clinkx-workflows/dist/server.js.map +1 -1
- package/clinkx-workflows/dist/shutdown.d.ts +18 -20
- package/clinkx-workflows/dist/shutdown.js +43 -61
- package/clinkx-workflows/dist/shutdown.js.map +1 -1
- package/clinkx-workflows/dist/state-schema.d.ts +38 -0
- package/clinkx-workflows/dist/state.d.ts +170 -3
- package/clinkx-workflows/dist/state.js +1275 -28
- package/clinkx-workflows/dist/state.js.map +1 -1
- package/clinkx-workflows/dist/transport.d.ts +15 -0
- package/clinkx-workflows/dist/transport.js +19 -10
- package/clinkx-workflows/dist/transport.js.map +1 -1
- package/clinkx-workflows/dist/types.d.ts +14 -2
- package/clinkx-workflows/dist/validators/council.d.ts +318 -85
- package/clinkx-workflows/dist/validators/council.js +52 -13
- package/clinkx-workflows/dist/validators/council.js.map +1 -1
- package/clinkx-workflows/dist/validators/index.d.ts +1 -0
- package/clinkx-workflows/dist/validators/index.js +3 -0
- package/clinkx-workflows/dist/validators/index.js.map +1 -1
- package/clinkx-workflows/dist/validators/plan-review.d.ts +398 -0
- package/clinkx-workflows/dist/validators/plan-review.js +316 -0
- package/clinkx-workflows/dist/validators/plan-review.js.map +1 -0
- package/clinkx-workflows/dist/workflow-receipt.js +188 -4
- package/clinkx-workflows/dist/workflow-receipt.js.map +1 -1
- package/clinkx-workflows/dist/workflow-tools.d.ts +48 -3
- package/clinkx-workflows/dist/workflow-tools.js +1402 -59
- package/clinkx-workflows/dist/workflow-tools.js.map +1 -1
- package/clinkx-workflows/dist/workspace-signature.d.ts +16 -0
- package/clinkx-workflows/dist/workspace-signature.js +388 -0
- package/clinkx-workflows/dist/workspace-signature.js.map +1 -0
- package/clinkx-workflows/templates/council/answer-specialist.txt +2 -1
- package/clinkx-workflows/templates/council/code-review-chairman.txt +13 -0
- package/clinkx-workflows/templates/council/code-review-cross-reviewer.txt +4 -1
- package/clinkx-workflows/templates/council/code-review-reviewer.txt +19 -3
- package/clinkx-workflows/templates/council/debug-debugger.txt +2 -1
- package/clinkx-workflows/templates/council/discover-analyst.txt +2 -1
- package/clinkx-workflows/templates/council/member.txt +2 -1
- package/clinkx-workflows/templates/council/plan-review-chairman.txt +68 -0
- package/clinkx-workflows/templates/council/plan-review-cross-reviewer.txt +51 -0
- package/clinkx-workflows/templates/council/plan-review-reviewer.txt +60 -0
- package/clinkx-workflows/templates/plan-review/chairman.txt +48 -0
- package/clinkx-workflows/templates/plan-review/cross-review.txt +52 -0
- package/clinkx-workflows/templates/plan-review/ranking.txt +16 -0
- package/clinkx-workflows/templates/plan-review/reviewer.txt +57 -0
- package/clinkx-workflows/workflows/council-answer.yaml +97 -8
- package/clinkx-workflows/workflows/council-code-review.yaml +103 -8
- package/clinkx-workflows/workflows/council-debug.yaml +97 -8
- package/clinkx-workflows/workflows/council-default.yaml +97 -8
- package/clinkx-workflows/workflows/council-discover.yaml +97 -8
- package/clinkx-workflows/workflows/council-plan-review.yaml +250 -0
- package/clinkx-workflows/workflows/plan-review-receipts.yaml +230 -0
- package/conf/adapters/agy.json +49 -0
- package/conf/adapters/claude.json +5 -0
- package/conf/adapters/codex-app-server.json +44 -0
- package/conf/adapters/codex.json +7 -2
- package/conf/adapters/glm.json +5 -0
- package/conf/adapters/grok.json +60 -0
- package/conf/adapters/hapi/agy.json +52 -0
- package/conf/adapters/hapi/claude.json +5 -0
- package/conf/adapters/hapi/codex.json +7 -2
- package/conf/adapters/hapi/glm.json +5 -0
- package/conf/prompts/json-codereviewer.txt +1 -0
- package/conf/prompts/json.txt +1 -0
- package/dist/activity-journal.d.ts +42 -0
- package/dist/activity-journal.js +381 -0
- package/dist/activity-journal.js.map +1 -0
- package/dist/allowed-roots.d.ts +53 -0
- package/dist/allowed-roots.js +216 -0
- package/dist/allowed-roots.js.map +1 -0
- package/dist/codex/activity-session-log.d.ts +14 -0
- package/dist/codex/activity-session-log.js +206 -0
- package/dist/codex/activity-session-log.js.map +1 -0
- package/dist/codex/agent-tools.d.ts +23 -0
- package/dist/codex/agent-tools.js +1270 -0
- package/dist/codex/agent-tools.js.map +1 -0
- package/dist/codex/app-server-client.d.ts +76 -0
- package/dist/codex/app-server-client.js +582 -0
- package/dist/codex/app-server-client.js.map +1 -0
- package/dist/codex/app-server-registry.d.ts +389 -0
- package/dist/codex/app-server-registry.js +1407 -0
- package/dist/codex/app-server-registry.js.map +1 -0
- package/dist/codex/client-types.d.ts +109 -0
- package/dist/codex/client-types.js +2 -0
- package/dist/codex/client-types.js.map +1 -0
- package/dist/codex/protocol.d.ts +5375 -0
- package/dist/codex/protocol.js +614 -0
- package/dist/codex/protocol.js.map +1 -0
- package/dist/codex/session.d.ts +263 -0
- package/dist/codex/session.js +466 -0
- package/dist/codex/session.js.map +1 -0
- package/dist/config.d.ts +185 -19
- package/dist/config.js +82 -16
- package/dist/config.js.map +1 -1
- package/dist/context-builder/anchors.d.ts +12 -0
- package/dist/context-builder/anchors.js +22 -0
- package/dist/context-builder/anchors.js.map +1 -0
- package/dist/context-builder/bundle.d.ts +109 -0
- package/dist/context-builder/bundle.js +1498 -0
- package/dist/context-builder/bundle.js.map +1 -0
- package/dist/context-builder/codemap.d.ts +22 -0
- package/dist/context-builder/codemap.js +675 -0
- package/dist/context-builder/codemap.js.map +1 -0
- package/dist/context-builder/config.d.ts +61 -0
- package/dist/context-builder/config.js +216 -0
- package/dist/context-builder/config.js.map +1 -0
- package/dist/context-builder/context-run-catalog.d.ts +17 -0
- package/dist/context-builder/context-run-catalog.js +99 -0
- package/dist/context-builder/context-run-catalog.js.map +1 -0
- package/dist/context-builder/delegate-packet.d.ts +219 -0
- package/dist/context-builder/delegate-packet.js +1190 -0
- package/dist/context-builder/delegate-packet.js.map +1 -0
- package/dist/context-builder/delegate-reconstruction.d.ts +13 -0
- package/dist/context-builder/delegate-reconstruction.js +220 -0
- package/dist/context-builder/delegate-reconstruction.js.map +1 -0
- package/dist/context-builder/delegate-validation.d.ts +27 -0
- package/dist/context-builder/delegate-validation.js +479 -0
- package/dist/context-builder/delegate-validation.js.map +1 -0
- package/dist/context-builder/delegate.d.ts +26 -0
- package/dist/context-builder/delegate.js +134 -0
- package/dist/context-builder/delegate.js.map +1 -0
- package/dist/context-builder/diagnostics.d.ts +36 -0
- package/dist/context-builder/diagnostics.js +107 -0
- package/dist/context-builder/diagnostics.js.map +1 -0
- package/dist/context-builder/discovery.d.ts +146 -0
- package/dist/context-builder/discovery.js +2129 -0
- package/dist/context-builder/discovery.js.map +1 -0
- package/dist/context-builder/globs.d.ts +14 -0
- package/dist/context-builder/globs.js +175 -0
- package/dist/context-builder/globs.js.map +1 -0
- package/dist/context-builder/handler.d.ts +41 -0
- package/dist/context-builder/handler.js +2590 -0
- package/dist/context-builder/handler.js.map +1 -0
- package/dist/context-builder/lifecycle-contract.d.ts +424 -0
- package/dist/context-builder/lifecycle-contract.js +523 -0
- package/dist/context-builder/lifecycle-contract.js.map +1 -0
- package/dist/context-builder/lifecycle-journal.d.ts +62 -0
- package/dist/context-builder/lifecycle-journal.js +88 -0
- package/dist/context-builder/lifecycle-journal.js.map +1 -0
- package/dist/context-builder/lifecycle-observer.d.ts +102 -0
- package/dist/context-builder/lifecycle-observer.js +258 -0
- package/dist/context-builder/lifecycle-observer.js.map +1 -0
- package/dist/context-builder/lifecycle-reconcile.d.ts +32 -0
- package/dist/context-builder/lifecycle-reconcile.js +191 -0
- package/dist/context-builder/lifecycle-reconcile.js.map +1 -0
- package/dist/context-builder/lifecycle-recovery.d.ts +2 -0
- package/dist/context-builder/lifecycle-recovery.js +14 -0
- package/dist/context-builder/lifecycle-recovery.js.map +1 -0
- package/dist/context-builder/path-signals.d.ts +7 -0
- package/dist/context-builder/path-signals.js +70 -0
- package/dist/context-builder/path-signals.js.map +1 -0
- package/dist/context-builder/paths.d.ts +30 -0
- package/dist/context-builder/paths.js +153 -0
- package/dist/context-builder/paths.js.map +1 -0
- package/dist/context-builder/progress.d.ts +17 -0
- package/dist/context-builder/progress.js +93 -0
- package/dist/context-builder/progress.js.map +1 -0
- package/dist/context-builder/receipt.d.ts +91 -0
- package/dist/context-builder/receipt.js +180 -0
- package/dist/context-builder/receipt.js.map +1 -0
- package/dist/context-builder/refine-handler.d.ts +14 -0
- package/dist/context-builder/refine-handler.js +790 -0
- package/dist/context-builder/refine-handler.js.map +1 -0
- package/dist/context-builder/review-coverage.d.ts +84 -0
- package/dist/context-builder/review-coverage.js +437 -0
- package/dist/context-builder/review-coverage.js.map +1 -0
- package/dist/context-builder/run-id.d.ts +7 -0
- package/dist/context-builder/run-id.js +31 -0
- package/dist/context-builder/run-id.js.map +1 -0
- package/dist/context-builder/schema.d.ts +669 -0
- package/dist/context-builder/schema.js +399 -0
- package/dist/context-builder/schema.js.map +1 -0
- package/dist/context-builder/secrets.d.ts +41 -0
- package/dist/context-builder/secrets.js +1651 -0
- package/dist/context-builder/secrets.js.map +1 -0
- package/dist/context-builder/selection.d.ts +56 -0
- package/dist/context-builder/selection.js +1111 -0
- package/dist/context-builder/selection.js.map +1 -0
- package/dist/context-builder/session-log-identity.d.ts +1 -0
- package/dist/context-builder/session-log-identity.js +66 -0
- package/dist/context-builder/session-log-identity.js.map +1 -0
- package/dist/context-builder/slice-range-math.d.ts +16 -0
- package/dist/context-builder/slice-range-math.js +137 -0
- package/dist/context-builder/slice-range-math.js.map +1 -0
- package/dist/context-builder/status.d.ts +66 -0
- package/dist/context-builder/status.js +160 -0
- package/dist/context-builder/status.js.map +1 -0
- package/dist/context-builder/storage.d.ts +118 -0
- package/dist/context-builder/storage.js +1003 -0
- package/dist/context-builder/storage.js.map +1 -0
- package/dist/context-builder/token-estimate.d.ts +19 -0
- package/dist/context-builder/token-estimate.js +90 -0
- package/dist/context-builder/token-estimate.js.map +1 -0
- package/dist/context-builder/versions.d.ts +29 -0
- package/dist/context-builder/versions.js +30 -0
- package/dist/context-builder/versions.js.map +1 -0
- package/dist/context-builder/workflow-runner.d.ts +69 -0
- package/dist/context-builder/workflow-runner.js +1051 -0
- package/dist/context-builder/workflow-runner.js.map +1 -0
- package/dist/context-builder/write-watchdog.d.ts +14 -0
- package/dist/context-builder/write-watchdog.js +38 -0
- package/dist/context-builder/write-watchdog.js.map +1 -0
- package/dist/dashboard-adapter-catalog.d.ts +9 -0
- package/dist/dashboard-adapter-catalog.js +46 -0
- package/dist/dashboard-adapter-catalog.js.map +1 -0
- package/dist/dashboard-cli.d.ts +79 -0
- package/dist/dashboard-cli.js +585 -0
- package/dist/dashboard-cli.js.map +1 -0
- package/dist/dashboard-companion/client.d.ts +36 -0
- package/dist/dashboard-companion/client.js +210 -0
- package/dist/dashboard-companion/client.js.map +1 -0
- package/dist/dashboard-companion/config.d.ts +8 -0
- package/dist/dashboard-companion/config.js +52 -0
- package/dist/dashboard-companion/config.js.map +1 -0
- package/dist/dashboard-companion/http-proxy.d.ts +10 -0
- package/dist/dashboard-companion/http-proxy.js +234 -0
- package/dist/dashboard-companion/http-proxy.js.map +1 -0
- package/dist/dashboard-companion/protocol.d.ts +80 -0
- package/dist/dashboard-companion/protocol.js +455 -0
- package/dist/dashboard-companion/protocol.js.map +1 -0
- package/dist/dashboard-companion/standalone-assets.d.ts +12 -0
- package/dist/dashboard-companion/standalone-assets.js +72 -0
- package/dist/dashboard-companion/standalone-assets.js.map +1 -0
- package/dist/dashboard-companion/standalone-entry.d.ts +1 -0
- package/dist/dashboard-companion/standalone-entry.js +17 -0
- package/dist/dashboard-companion/standalone-entry.js.map +1 -0
- package/dist/dashboard-gateway/config.d.ts +9 -0
- package/dist/dashboard-gateway/config.js +44 -0
- package/dist/dashboard-gateway/config.js.map +1 -0
- package/dist/dashboard-gateway/index.d.ts +11 -0
- package/dist/dashboard-gateway/index.js +755 -0
- package/dist/dashboard-gateway/index.js.map +1 -0
- package/dist/dashboard-gateway/main.d.ts +1 -0
- package/dist/dashboard-gateway/main.js +25 -0
- package/dist/dashboard-gateway/main.js.map +1 -0
- package/dist/dashboard-pairing-token.d.ts +1 -0
- package/dist/dashboard-pairing-token.js +5 -0
- package/dist/dashboard-pairing-token.js.map +1 -0
- package/dist/elaris/client.d.ts +73 -0
- package/dist/elaris/client.js +825 -0
- package/dist/elaris/client.js.map +1 -0
- package/dist/elaris/config.d.ts +18 -0
- package/dist/elaris/config.js +75 -0
- package/dist/elaris/config.js.map +1 -0
- package/dist/elaris/errors.d.ts +41 -0
- package/dist/elaris/errors.js +205 -0
- package/dist/elaris/errors.js.map +1 -0
- package/dist/elaris/github-repo.d.ts +18 -0
- package/dist/elaris/github-repo.js +89 -0
- package/dist/elaris/github-repo.js.map +1 -0
- package/dist/elaris/index.d.ts +10 -0
- package/dist/elaris/index.js +11 -0
- package/dist/elaris/index.js.map +1 -0
- package/dist/elaris/redact.d.ts +89 -0
- package/dist/elaris/redact.js +423 -0
- package/dist/elaris/redact.js.map +1 -0
- package/dist/elaris/run-id.d.ts +5 -0
- package/dist/elaris/run-id.js +20 -0
- package/dist/elaris/run-id.js.map +1 -0
- package/dist/elaris/status.d.ts +45 -0
- package/dist/elaris/status.js +122 -0
- package/dist/elaris/status.js.map +1 -0
- package/dist/elaris/tool-schemas.d.ts +314 -0
- package/dist/elaris/tool-schemas.js +208 -0
- package/dist/elaris/tool-schemas.js.map +1 -0
- package/dist/elaris/tools.d.ts +73 -0
- package/dist/elaris/tools.js +1065 -0
- package/dist/elaris/tools.js.map +1 -0
- package/dist/elaris/types.d.ts +1541 -0
- package/dist/elaris/types.js +252 -0
- package/dist/elaris/types.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.js +19 -0
- package/dist/errors.js.map +1 -1
- package/dist/handler.d.ts +4 -0
- package/dist/handler.js +10 -1
- package/dist/handler.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/dist/local-clink-backend.d.ts +3 -0
- package/dist/local-clink-backend.js +4 -0
- package/dist/local-clink-backend.js.map +1 -1
- package/dist/package-info.d.ts +2 -0
- package/dist/package-info.js +18 -0
- package/dist/package-info.js.map +1 -0
- package/dist/parsers/codex-jsonl.js +48 -3
- package/dist/parsers/codex-jsonl.js.map +1 -1
- package/dist/parsers/extract.d.ts +10 -1
- package/dist/parsers/extract.js +11 -3
- package/dist/parsers/extract.js.map +1 -1
- package/dist/paths.d.ts +8 -0
- package/dist/paths.js +31 -43
- package/dist/paths.js.map +1 -1
- package/dist/pipeline.d.ts +51 -3
- package/dist/pipeline.js +264 -47
- package/dist/pipeline.js.map +1 -1
- package/dist/run-dir.d.ts +24 -0
- package/dist/run-dir.js +201 -2
- package/dist/run-dir.js.map +1 -1
- package/dist/runner.d.ts +13 -0
- package/dist/runner.js +184 -15
- package/dist/runner.js.map +1 -1
- package/dist/safety.d.ts +4 -4
- package/dist/safety.js +4 -4
- package/dist/schema.d.ts +7 -7
- package/dist/server.d.ts +2 -0
- package/dist/server.js +396 -24
- package/dist/server.js.map +1 -1
- package/dist/session-log-stream.d.ts +18 -0
- package/dist/session-log-stream.js +319 -0
- package/dist/session-log-stream.js.map +1 -0
- package/package.json +47 -5
- package/conf/adapters/gemini.json +0 -44
- package/conf/adapters/hapi/gemini.json +0 -47
- package/dist/artifacts.d.ts +0 -9
- package/dist/artifacts.js +0 -24
- package/dist/artifacts.js.map +0 -1
- package/dist/parsers/gemini-json.d.ts +0 -2
- package/dist/parsers/gemini-json.js +0 -72
- package/dist/parsers/gemini-json.js.map +0 -1
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { InvalidParamsError } from "../errors.js";
|
|
3
|
+
import { contextBuilderCandidateId } from "./delegate-packet.js";
|
|
4
|
+
import { normalizeContextBuilderPublicBudget, } from "./schema.js";
|
|
5
|
+
import { hasEmbeddedAbsolutePath, sanitizeDiagnosticText, } from "./diagnostics.js";
|
|
6
|
+
import { scanHighConfidenceSecretContent, scanSecretPath, } from "./secrets.js";
|
|
7
|
+
const MAX_TEXT_CHARS = 1_000;
|
|
8
|
+
const MAX_SELECTED = 100;
|
|
9
|
+
const MAX_RANGES_PER_SELECTION = 100;
|
|
10
|
+
const MAX_DIAGNOSTICS = 100;
|
|
11
|
+
const DELEGATE_PROSE_REDACTION_WARNING = "context_builder redacted unsafe text from delegate prose";
|
|
12
|
+
const SafeTextSchema = z.string().trim().min(1).max(MAX_TEXT_CHARS);
|
|
13
|
+
const CandidateIdSchema = z.string().trim().min(1).max(600);
|
|
14
|
+
const RangeSchema = z
|
|
15
|
+
.object({
|
|
16
|
+
start_line: z.number().int().positive(),
|
|
17
|
+
end_line: z.number().int().positive(),
|
|
18
|
+
reason: SafeTextSchema,
|
|
19
|
+
})
|
|
20
|
+
.strict();
|
|
21
|
+
const SelectionSchema = z
|
|
22
|
+
.object({
|
|
23
|
+
candidate_id: CandidateIdSchema,
|
|
24
|
+
ranges: z.array(RangeSchema).min(1).max(MAX_RANGES_PER_SELECTION),
|
|
25
|
+
reason: SafeTextSchema,
|
|
26
|
+
})
|
|
27
|
+
.strict();
|
|
28
|
+
const CuratorOutputSchema = z
|
|
29
|
+
.object({
|
|
30
|
+
selected: z.array(SelectionSchema).min(1).max(MAX_SELECTED),
|
|
31
|
+
warnings: z.array(SafeTextSchema).max(MAX_DIAGNOSTICS),
|
|
32
|
+
open_questions: z.array(SafeTextSchema).max(MAX_DIAGNOSTICS),
|
|
33
|
+
})
|
|
34
|
+
.strict();
|
|
35
|
+
const FinalizerOutputSchema = z
|
|
36
|
+
.object({
|
|
37
|
+
score: z.number().min(0).max(10),
|
|
38
|
+
approved: z.boolean(),
|
|
39
|
+
selected: z.array(SelectionSchema).min(1).max(MAX_SELECTED),
|
|
40
|
+
warnings: z.array(SafeTextSchema).max(MAX_DIAGNOSTICS),
|
|
41
|
+
omissions: z.array(SafeTextSchema).max(MAX_DIAGNOSTICS),
|
|
42
|
+
})
|
|
43
|
+
.strict();
|
|
44
|
+
const FORBIDDEN_PROVIDER_KEYS = new Set([
|
|
45
|
+
"absolute_path",
|
|
46
|
+
"content",
|
|
47
|
+
"contents",
|
|
48
|
+
"excerpt",
|
|
49
|
+
"preview",
|
|
50
|
+
"root_index",
|
|
51
|
+
"source",
|
|
52
|
+
"text",
|
|
53
|
+
]);
|
|
54
|
+
export function validateContextBuilderCuratorOutput(output, options) {
|
|
55
|
+
rejectProviderSuppliedSource(output);
|
|
56
|
+
rejectEmptySelectedArray(output, "curator");
|
|
57
|
+
const parsed = parseWithSchema(CuratorOutputSchema, output, "curator");
|
|
58
|
+
const allowSecrets = options.allowSecrets ?? false;
|
|
59
|
+
const candidates = buildCandidateIndex(options.candidates, allowSecrets);
|
|
60
|
+
validateSelections(parsed.selected, candidates, allowSecrets);
|
|
61
|
+
validateContextBuilderDelegateCoverageSelection(parsed.selected, options.candidates, options.coveragePolicy);
|
|
62
|
+
validateBudget(parsed.selected, options.budget);
|
|
63
|
+
const sanitized = sanitizeCuratorProposal(parsed);
|
|
64
|
+
return sanitized;
|
|
65
|
+
}
|
|
66
|
+
export function validateContextBuilderFinalizerOutput(output, options) {
|
|
67
|
+
rejectProviderSuppliedSource(output);
|
|
68
|
+
rejectEmptySelectedArray(output, "finalizer");
|
|
69
|
+
const parsed = parseWithSchema(FinalizerOutputSchema, output, "finalizer");
|
|
70
|
+
// Check `approved` before `score`. A finalizer that declines usually also
|
|
71
|
+
// reports a low score, so scoring first attributed every deliberate rejection
|
|
72
|
+
// to the score gate — the two failure modes were indistinguishable in the
|
|
73
|
+
// failure corpus, and tuning the score threshold could not be measured
|
|
74
|
+
// against them.
|
|
75
|
+
if (parsed.approved !== true) {
|
|
76
|
+
throw invalid("context_builder finalizer output must be approved");
|
|
77
|
+
}
|
|
78
|
+
if (parsed.score < options.minScore) {
|
|
79
|
+
throw invalid(`context_builder finalizer score ${parsed.score} is below minimum ${options.minScore}`);
|
|
80
|
+
}
|
|
81
|
+
if (parsed.omissions.length > 0) {
|
|
82
|
+
throw invalid("context_builder finalizer output cannot approve while reporting omissions");
|
|
83
|
+
}
|
|
84
|
+
const materialWarning = parsed.warnings.find(isMaterialEvidenceGapWarning);
|
|
85
|
+
if (materialWarning != null) {
|
|
86
|
+
throw invalid("context_builder finalizer output cannot hide required evidence gaps in warnings");
|
|
87
|
+
}
|
|
88
|
+
const allowSecrets = options.allowSecrets ?? false;
|
|
89
|
+
const candidates = buildCandidateIndex(options.candidates, allowSecrets);
|
|
90
|
+
validateSelections(parsed.selected, candidates, allowSecrets);
|
|
91
|
+
validateContextBuilderDelegateCoverageSelection(parsed.selected, options.candidates, options.coveragePolicy);
|
|
92
|
+
validateBudget(parsed.selected, options.budget);
|
|
93
|
+
const sanitized = sanitizeFinalizerProposal(parsed);
|
|
94
|
+
return {
|
|
95
|
+
...sanitized,
|
|
96
|
+
approved: true,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export function validateContextBuilderDelegateCoverageSelection(selected, candidates, coveragePolicy) {
|
|
100
|
+
if (coveragePolicy?.policy_id !== "review_deep_v1" ||
|
|
101
|
+
coveragePolicy.required_when_available.length === 0) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const obligations = coveragePolicy.obligations;
|
|
105
|
+
if (obligations != null) {
|
|
106
|
+
if (obligations.targets.length === 0) {
|
|
107
|
+
throw invalid("context_builder delegate output cannot satisfy review coverage without a review target obligation");
|
|
108
|
+
}
|
|
109
|
+
const selectedById = new Map(selected.map((selection) => [selection.candidate_id, selection.ranges ?? []]));
|
|
110
|
+
for (const target of obligations.targets) {
|
|
111
|
+
if (!selectionOverlapsObligation(selectedById, target.candidate_id, target.ranges)) {
|
|
112
|
+
throw invalid(`context_builder delegate output omits required review target obligation ${target.target_id}`);
|
|
113
|
+
}
|
|
114
|
+
if (target.regression_links.length > 0 &&
|
|
115
|
+
!target.regression_links.some((link) => selectionOverlapsObligation(selectedById, link.candidate_id, link.ranges))) {
|
|
116
|
+
throw invalid(`context_builder delegate output omits required regression range for target ${target.target_id}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const selectedIds = new Set(selected.map((selection) => selection.candidate_id));
|
|
122
|
+
for (const evidenceClass of coveragePolicy.required_when_available) {
|
|
123
|
+
const available = candidates.some((candidate) => candidate.evidence_classes.includes(evidenceClass));
|
|
124
|
+
const covered = candidates.some((candidate) => selectedIds.has(candidate.id) &&
|
|
125
|
+
candidate.evidence_classes.includes(evidenceClass));
|
|
126
|
+
if (available && !covered) {
|
|
127
|
+
throw invalid(`context_builder delegate output omits required available evidence class ${evidenceClass}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function selectionOverlapsObligation(selectedById, candidateId, requiredRanges) {
|
|
132
|
+
const selectedRanges = selectedById.get(candidateId) ?? [];
|
|
133
|
+
return (requiredRanges.length > 0 &&
|
|
134
|
+
requiredRanges.some((required) => selectedRanges.some((selected) => required.start_line <= selected.end_line &&
|
|
135
|
+
selected.start_line <= required.end_line)));
|
|
136
|
+
}
|
|
137
|
+
function rejectEmptySelectedArray(output, stage) {
|
|
138
|
+
if (output == null || typeof output !== "object" || Array.isArray(output)) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const selected = output["selected"];
|
|
142
|
+
if (Array.isArray(selected) && selected.length === 0) {
|
|
143
|
+
throw invalid(`Invalid context_builder ${stage} output: selected must contain at least one local candidate when candidates are available`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function parseWithSchema(schema, output, stage) {
|
|
147
|
+
const result = schema.safeParse(output);
|
|
148
|
+
if (!result.success) {
|
|
149
|
+
throw invalid(`Invalid context_builder ${stage} output: ${result.error.issues
|
|
150
|
+
.map(formatZodIssue)
|
|
151
|
+
.join("; ")}`);
|
|
152
|
+
}
|
|
153
|
+
return result.data;
|
|
154
|
+
}
|
|
155
|
+
function formatZodIssue(issue) {
|
|
156
|
+
const path = formatZodIssuePath(issue.path);
|
|
157
|
+
if (issue.code === "unrecognized_keys") {
|
|
158
|
+
return `${path}: unrecognized keys are not allowed`;
|
|
159
|
+
}
|
|
160
|
+
if (issue.code === "invalid_type") {
|
|
161
|
+
return `${path}: invalid_type expected=${issue.expected} received=${issue.received}`;
|
|
162
|
+
}
|
|
163
|
+
if (issue.code === "too_small" || issue.code === "too_big") {
|
|
164
|
+
return `${path}: ${issue.code} type=${issue.type}`;
|
|
165
|
+
}
|
|
166
|
+
return `${path}: ${issue.code}`;
|
|
167
|
+
}
|
|
168
|
+
function formatZodIssuePath(path) {
|
|
169
|
+
if (path.length === 0) {
|
|
170
|
+
return "root";
|
|
171
|
+
}
|
|
172
|
+
return path
|
|
173
|
+
.map((segment) => `[${typeof segment === "number" ? "#" : segment}]`)
|
|
174
|
+
.join("");
|
|
175
|
+
}
|
|
176
|
+
function buildCandidateIndex(candidates, allowSecrets) {
|
|
177
|
+
const byId = new Map();
|
|
178
|
+
for (const candidate of candidates) {
|
|
179
|
+
if (candidate.id.includes("\u0000") || byId.has(candidate.id)) {
|
|
180
|
+
throw invalid("context_builder delegate candidate universe is invalid");
|
|
181
|
+
}
|
|
182
|
+
if (!isSafeCandidatePath(candidate.path, allowSecrets)) {
|
|
183
|
+
throw invalid("context_builder delegate candidate path is unsafe");
|
|
184
|
+
}
|
|
185
|
+
assertCandidateIdentity(candidate);
|
|
186
|
+
byId.set(candidate.id, candidate);
|
|
187
|
+
}
|
|
188
|
+
return { byId };
|
|
189
|
+
}
|
|
190
|
+
function validateSelections(selections, candidates, allowSecrets) {
|
|
191
|
+
const seenCandidates = new Set();
|
|
192
|
+
for (const selection of selections) {
|
|
193
|
+
assertSafeCandidateId(selection.candidate_id, allowSecrets);
|
|
194
|
+
if (seenCandidates.has(selection.candidate_id)) {
|
|
195
|
+
throw invalid("context_builder delegate output has duplicate candidate_id");
|
|
196
|
+
}
|
|
197
|
+
seenCandidates.add(selection.candidate_id);
|
|
198
|
+
const candidate = candidates.byId.get(selection.candidate_id);
|
|
199
|
+
if (candidate == null) {
|
|
200
|
+
throw invalid("context_builder delegate output references unknown candidate_id");
|
|
201
|
+
}
|
|
202
|
+
if (selection.ranges.length === 0) {
|
|
203
|
+
throw invalid("context_builder delegate output has empty ranges");
|
|
204
|
+
}
|
|
205
|
+
const seenRanges = new Set();
|
|
206
|
+
for (const range of selection.ranges) {
|
|
207
|
+
const key = `${range.start_line}:${range.end_line}`;
|
|
208
|
+
if (seenRanges.has(key)) {
|
|
209
|
+
throw invalid("context_builder delegate output has duplicate range");
|
|
210
|
+
}
|
|
211
|
+
seenRanges.add(key);
|
|
212
|
+
validateRange(candidate, range);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function validateRange(candidate, range) {
|
|
217
|
+
if (candidate.line_count <= 0) {
|
|
218
|
+
throw invalid("context_builder delegate output selected a range from zero-line candidate");
|
|
219
|
+
}
|
|
220
|
+
if (range.start_line > range.end_line) {
|
|
221
|
+
throw invalid("context_builder delegate output has reversed range");
|
|
222
|
+
}
|
|
223
|
+
if (range.end_line > candidate.line_count) {
|
|
224
|
+
throw invalid("context_builder delegate output range exceeds local line count");
|
|
225
|
+
}
|
|
226
|
+
if (!isCoveredByCandidateRanges(candidate, range)) {
|
|
227
|
+
throw invalid("context_builder delegate output range is outside eligible packet ranges");
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
function validateBudget(selections, budget) {
|
|
231
|
+
const effectiveBudget = budget ?? normalizeContextBuilderPublicBudget();
|
|
232
|
+
if (selections.length > effectiveBudget.max_files) {
|
|
233
|
+
throw invalid("context_builder delegate output exceeds max_files budget");
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function sanitizeCuratorProposal(proposal) {
|
|
237
|
+
const selected = sanitizeDelegateSelections(proposal.selected);
|
|
238
|
+
const warnings = sanitizeDelegateTextArray(proposal.warnings);
|
|
239
|
+
const openQuestions = sanitizeDelegateTextArray(proposal.open_questions);
|
|
240
|
+
const redacted = selected.redacted || warnings.redacted || openQuestions.redacted;
|
|
241
|
+
return {
|
|
242
|
+
selected: selected.selected,
|
|
243
|
+
warnings: appendDelegateProseRedactionWarning(warnings.values, redacted),
|
|
244
|
+
open_questions: openQuestions.values,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function sanitizeFinalizerProposal(proposal) {
|
|
248
|
+
const selected = sanitizeDelegateSelections(proposal.selected);
|
|
249
|
+
const warnings = sanitizeDelegateTextArray(proposal.warnings);
|
|
250
|
+
// proposal.omissions is always [] here: validateContextBuilderFinalizerOutput
|
|
251
|
+
// rejects any approved finalizer output that reports omissions, so there is
|
|
252
|
+
// nothing to sanitize. Pass it straight through.
|
|
253
|
+
const redacted = selected.redacted || warnings.redacted;
|
|
254
|
+
return {
|
|
255
|
+
...proposal,
|
|
256
|
+
selected: selected.selected,
|
|
257
|
+
warnings: appendDelegateProseRedactionWarning(warnings.values, redacted),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function sanitizeDelegateSelections(selections) {
|
|
261
|
+
let redacted = false;
|
|
262
|
+
const selected = selections.map((selection) => {
|
|
263
|
+
const reason = sanitizeDelegateText(selection.reason);
|
|
264
|
+
redacted ||= reason.redacted;
|
|
265
|
+
const ranges = selection.ranges.map((range) => {
|
|
266
|
+
const rangeReason = sanitizeDelegateText(range.reason);
|
|
267
|
+
redacted ||= rangeReason.redacted;
|
|
268
|
+
return { ...range, reason: rangeReason.text };
|
|
269
|
+
});
|
|
270
|
+
return { ...selection, ranges, reason: reason.text };
|
|
271
|
+
});
|
|
272
|
+
return { selected, redacted };
|
|
273
|
+
}
|
|
274
|
+
function sanitizeDelegateTextArray(fields) {
|
|
275
|
+
let redacted = false;
|
|
276
|
+
const values = fields.map((field) => {
|
|
277
|
+
const sanitized = sanitizeDelegateText(field);
|
|
278
|
+
redacted ||= sanitized.redacted;
|
|
279
|
+
return sanitized.text;
|
|
280
|
+
});
|
|
281
|
+
return { values, redacted };
|
|
282
|
+
}
|
|
283
|
+
// Load-bearing: the absolute-path redactor in sanitizeDiagnosticText only
|
|
284
|
+
// neutralizes ABSOLUTE paths. The second isUnsafeDelegateText(cleaned) check and
|
|
285
|
+
// the whole-field "[redacted-unsafe-text]" sentinel are what guarantee no unsafe
|
|
286
|
+
// residue the redactor misses (relative traversal, file://, mixed-slash tokens,
|
|
287
|
+
// NUL bytes) is ever returned -- we drop the whole field rather than leak it.
|
|
288
|
+
function sanitizeDelegateText(text) {
|
|
289
|
+
if (!isUnsafeDelegateText(text)) {
|
|
290
|
+
return { text, redacted: false };
|
|
291
|
+
}
|
|
292
|
+
const cleaned = sanitizeDiagnosticText(text);
|
|
293
|
+
return {
|
|
294
|
+
text: isUnsafeDelegateText(cleaned) ? "[redacted-unsafe-text]" : cleaned,
|
|
295
|
+
redacted: true,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
function appendDelegateProseRedactionWarning(warnings, redacted) {
|
|
299
|
+
// Strip any pre-existing copies first so provenance reflects only redaction
|
|
300
|
+
// we actually performed (a delegate could spoof the literal warning string).
|
|
301
|
+
const nextWarnings = warnings.filter((warning) => warning !== DELEGATE_PROSE_REDACTION_WARNING);
|
|
302
|
+
if (!redacted) {
|
|
303
|
+
return nextWarnings;
|
|
304
|
+
}
|
|
305
|
+
// warnings is schema-capped at MAX_DIAGNOSTICS; the provenance signal takes
|
|
306
|
+
// precedence, so evict the last original warning to stay within the cap.
|
|
307
|
+
if (nextWarnings.length >= MAX_DIAGNOSTICS) {
|
|
308
|
+
nextWarnings.length = MAX_DIAGNOSTICS - 1;
|
|
309
|
+
}
|
|
310
|
+
nextWarnings.push(DELEGATE_PROSE_REDACTION_WARNING);
|
|
311
|
+
return nextWarnings;
|
|
312
|
+
}
|
|
313
|
+
function isUnsafeDelegateText(text) {
|
|
314
|
+
if (text.includes("\u0000") ||
|
|
315
|
+
// Prose-secret redaction here is deliberately UNCONDITIONAL and NOT gated by
|
|
316
|
+
// allow_secrets: delegate free-text (reasons/warnings) is not curated source,
|
|
317
|
+
// so it is always scanned even under allow_secrets:true.
|
|
318
|
+
scanHighConfidenceSecretContent(text).length > 0 ||
|
|
319
|
+
hasEmbeddedAbsolutePath(text)) {
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
const decodedText = decodePathToken(text);
|
|
323
|
+
if (decodedText !== text && hasEmbeddedAbsolutePath(decodedText)) {
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
// Split on runs of non-path characters (the complement of what a path can
|
|
327
|
+
// contain) so any path-like token is isolated regardless of the delimiters
|
|
328
|
+
// glued to it -- ASCII punctuation AND Unicode smart quotes act as separators,
|
|
329
|
+
// while file://, ../, C:\, UNC \\, and percent-encoding survive intact.
|
|
330
|
+
const tokens = decodedText.split(/[^\w.~:/\\%-]+/u).filter(Boolean);
|
|
331
|
+
return tokens.some((token) => isUnsafePathLikeToken(trimPunctuation(token)));
|
|
332
|
+
}
|
|
333
|
+
function isMaterialEvidenceGapWarning(message) {
|
|
334
|
+
const text = message.toLowerCase();
|
|
335
|
+
if (isNonBlockingDelegateWarning(text)) {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
return (/\b(required|requested|focus(?:ed)?)\b.{0,80}\b(missing|missed|incomplete|unavailable|insufficient|omitted|not selected|not selectable|unselectable|not present)\b/.test(text) ||
|
|
339
|
+
/\b(missing|missed|incomplete|unavailable|insufficient|omitted|not selected|not selectable|unselectable|not present)\b.{0,80}\b(required|requested|focus(?:ed)?)\b/.test(text) ||
|
|
340
|
+
/\bselected\b.{0,80}\b(not selectable|unselectable|not present)\b/.test(text) ||
|
|
341
|
+
/\boutside (?:the )?selected ranges?\b/.test(text));
|
|
342
|
+
}
|
|
343
|
+
function isNonBlockingDelegateWarning(text) {
|
|
344
|
+
return (/\bpacket evidence omitted full source excerpts\b/.test(text) ||
|
|
345
|
+
/\bfull source excerpts? (?:were )?omitted\b/.test(text) ||
|
|
346
|
+
/\bfull-file focus ranges?\b.{0,120}\b(?:excerpts?|full source)\b.{0,80}\b(?:omitted|truncated)\b/.test(text) ||
|
|
347
|
+
/\bfull source excerpts?\b.{0,80}\bunavailable\b.{0,120}\bwhole-file focus ranges?\b/.test(text) ||
|
|
348
|
+
/\bblank excerpts?\b.{0,80}\bpacket\b.{0,160}\bselected ranges?\b.{0,80}\bprioritize\b.{0,120}\b(?:deterministic focus ranges?|task-critical)\b/.test(text) ||
|
|
349
|
+
/\blarge integration files?\b.{0,120}\brepresented only by available packet slices\b.{0,160}\bavoid claiming coverage outside selected ranges\b/.test(text) ||
|
|
350
|
+
isSecretSafetyOmissionWarning(text) ||
|
|
351
|
+
/\bomitted from deterministic_selection\b.{0,120}\bbut selected\b/.test(text) ||
|
|
352
|
+
isFocusPreservingSkipWarning(text) ||
|
|
353
|
+
isDeterministicExpansionWarning(text));
|
|
354
|
+
}
|
|
355
|
+
function isSecretSafetyOmissionWarning(text) {
|
|
356
|
+
return (/\b(?:high-confidence secret|secret detection|secret safety|secret[- ]safe|redacted|redacted-safe|redaction)\b/.test(text) &&
|
|
357
|
+
/\b(?:omitted|excluded|not selected|not requested|should not be requested|unavailable)\b/.test(text));
|
|
358
|
+
}
|
|
359
|
+
function isFocusPreservingSkipWarning(text) {
|
|
360
|
+
return (/\b(?:unrelated|irrelevant|out-of-scope|low[- ]signal)\b.{0,120}\b(?:not selected|omitted|skipped)\b.{0,80}\bpreserve focus\b/.test(text) ||
|
|
361
|
+
/\b(?:not selected|omitted|skipped)\b.{0,120}\b(?:unrelated|irrelevant|out-of-scope|low[- ]signal)\b.{0,80}\bpreserve focus\b/.test(text));
|
|
362
|
+
}
|
|
363
|
+
function isDeterministicExpansionWarning(text) {
|
|
364
|
+
return (/\bselection\b.{0,80}\b(?:intentionally\s+)?(?:exceeds|exceeded|expands beyond|expanded beyond|extends beyond|extended beyond)\b.{0,120}\bdeterministic\b.{0,160}\binsufficient\b/.test(text) &&
|
|
365
|
+
!/\b(missing|missed|omitted|not selected|not selectable|unselectable|not present|unavailable)\b/.test(text));
|
|
366
|
+
}
|
|
367
|
+
function trimPunctuation(token) {
|
|
368
|
+
return token.replace(/^[("'`[{<,]+/, "").replace(/[)"'`,.;:\]}>]+$/, "");
|
|
369
|
+
}
|
|
370
|
+
function isUnsafePathLikeToken(token) {
|
|
371
|
+
const decoded = decodePathToken(token);
|
|
372
|
+
const values = decoded === token ? [token] : [token, decoded];
|
|
373
|
+
return values.some((value) => {
|
|
374
|
+
if (value.includes("\u0000")) {
|
|
375
|
+
return true;
|
|
376
|
+
}
|
|
377
|
+
if (value.startsWith("/") ||
|
|
378
|
+
value.startsWith("\\") ||
|
|
379
|
+
value.startsWith("~/") ||
|
|
380
|
+
/^[A-Za-z]:/.test(value) ||
|
|
381
|
+
/^file:\/\//i.test(value) ||
|
|
382
|
+
/^\\\\/.test(value)) {
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
if (value.includes("/") && value.includes("\\")) {
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
const slashNormalized = value.replaceAll("\\", "/");
|
|
389
|
+
return (slashNormalized === ".." ||
|
|
390
|
+
slashNormalized.startsWith("../") ||
|
|
391
|
+
slashNormalized.includes("/../") ||
|
|
392
|
+
slashNormalized.endsWith("/.."));
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
function decodePathToken(token) {
|
|
396
|
+
try {
|
|
397
|
+
return decodeURIComponent(token);
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
return token;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
function assertSafeCandidateId(candidateId, allowSecrets) {
|
|
404
|
+
const parsed = parseCandidateId(candidateId);
|
|
405
|
+
if (parsed == null ||
|
|
406
|
+
!isSafeCandidatePath(parsed.path, allowSecrets) ||
|
|
407
|
+
contextBuilderCandidateId(parsed.rootIndex, parsed.path) !== candidateId) {
|
|
408
|
+
throw invalid("context_builder delegate output has unsafe candidate_id");
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
function parseCandidateId(candidateId) {
|
|
412
|
+
const match = /^c:([0-9]+):(.+)$/.exec(candidateId);
|
|
413
|
+
if (match == null) {
|
|
414
|
+
return null;
|
|
415
|
+
}
|
|
416
|
+
const rawRootIndex = match[1];
|
|
417
|
+
const path = match[2];
|
|
418
|
+
if (rawRootIndex == null || path == null) {
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
const rootIndex = Number(rawRootIndex);
|
|
422
|
+
if (!Number.isSafeInteger(rootIndex)) {
|
|
423
|
+
return null;
|
|
424
|
+
}
|
|
425
|
+
return { rootIndex, path };
|
|
426
|
+
}
|
|
427
|
+
function assertCandidateIdentity(candidate) {
|
|
428
|
+
const expectedId = contextBuilderCandidateId(candidate.root_index, candidate.path);
|
|
429
|
+
if (candidate.id !== expectedId) {
|
|
430
|
+
throw invalid(`context_builder delegate candidate id mismatch: expected ${expectedId} for ${candidate.path}`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
function isCoveredByCandidateRanges(candidate, range) {
|
|
434
|
+
let nextLine = range.start_line;
|
|
435
|
+
for (const candidateRange of [...candidate.ranges].sort((left, right) => left.start_line - right.start_line || left.end_line - right.end_line)) {
|
|
436
|
+
if (candidateRange.end_line < nextLine) {
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
if (candidateRange.start_line > nextLine) {
|
|
440
|
+
return false;
|
|
441
|
+
}
|
|
442
|
+
nextLine = Math.max(nextLine, candidateRange.end_line + 1);
|
|
443
|
+
if (nextLine > range.end_line) {
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return false;
|
|
448
|
+
}
|
|
449
|
+
function isSafeCandidatePath(path, allowSecrets) {
|
|
450
|
+
const decoded = decodePathToken(path);
|
|
451
|
+
const values = decoded === path ? [path] : [path, decoded];
|
|
452
|
+
return (path.length > 0 &&
|
|
453
|
+
!isUnsafePathLikeToken(path) &&
|
|
454
|
+
(allowSecrets ||
|
|
455
|
+
values.every((value) => scanSecretPath(value).length === 0)));
|
|
456
|
+
}
|
|
457
|
+
function rejectProviderSuppliedSource(value) {
|
|
458
|
+
const stack = [value];
|
|
459
|
+
while (stack.length > 0) {
|
|
460
|
+
const current = stack.pop();
|
|
461
|
+
if (current == null || typeof current !== "object") {
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
if (Array.isArray(current)) {
|
|
465
|
+
stack.push(...current);
|
|
466
|
+
continue;
|
|
467
|
+
}
|
|
468
|
+
for (const [key, child] of Object.entries(current)) {
|
|
469
|
+
if (FORBIDDEN_PROVIDER_KEYS.has(key)) {
|
|
470
|
+
throw invalid(`context_builder delegate output must not include provider-supplied ${key}`);
|
|
471
|
+
}
|
|
472
|
+
stack.push(child);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
function invalid(message) {
|
|
477
|
+
return new InvalidParamsError(message);
|
|
478
|
+
}
|
|
479
|
+
//# sourceMappingURL=delegate-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegate-validation.js","sourceRoot":"","sources":["../../src/context-builder/delegate-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type PipelineResult } from "../pipeline.js";
|
|
2
|
+
import type { AdapterRegistry } from "../registry.js";
|
|
3
|
+
import type { ContextBuilderDelegateProviderConfig } from "./schema.js";
|
|
4
|
+
import type { SessionLogOwnerV1 } from "../../clinkx-workflows/dist/dashboard/session-log-contract.js";
|
|
5
|
+
export type ContextBuilderDelegateFailureReason = "pipeline_error" | "empty_output" | "timeout" | "strict_json_fidelity" | "invalid_json";
|
|
6
|
+
export type ContextBuilderDelegateCallInput = {
|
|
7
|
+
prompt: string;
|
|
8
|
+
provider: ContextBuilderDelegateProviderConfig;
|
|
9
|
+
registry: AdapterRegistry;
|
|
10
|
+
timeout_seconds: number;
|
|
11
|
+
max_response_chars: number;
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
sessionLogOwner?: SessionLogOwnerV1;
|
|
14
|
+
};
|
|
15
|
+
export type ContextBuilderDelegateCallResult = {
|
|
16
|
+
ok: true;
|
|
17
|
+
json: Record<string, unknown>;
|
|
18
|
+
raw: string;
|
|
19
|
+
pipeline: PipelineResult;
|
|
20
|
+
} | {
|
|
21
|
+
ok: false;
|
|
22
|
+
reason: ContextBuilderDelegateFailureReason;
|
|
23
|
+
message: string;
|
|
24
|
+
pipeline?: PipelineResult;
|
|
25
|
+
};
|
|
26
|
+
export declare function runContextBuilderDelegateCall(input: ContextBuilderDelegateCallInput): Promise<ContextBuilderDelegateCallResult>;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { CancellationError } from "../errors.js";
|
|
2
|
+
import { executePipeline } from "../pipeline.js";
|
|
3
|
+
export async function runContextBuilderDelegateCall(input) {
|
|
4
|
+
const child = new AbortController();
|
|
5
|
+
let timedOut = false;
|
|
6
|
+
let parentCancelled = input.signal?.aborted === true;
|
|
7
|
+
const timeoutMs = Math.max(0, Math.floor(input.timeout_seconds * 1_000));
|
|
8
|
+
const timeout = setTimeout(() => {
|
|
9
|
+
timedOut = true;
|
|
10
|
+
child.abort();
|
|
11
|
+
}, timeoutMs);
|
|
12
|
+
const abortFromParent = () => {
|
|
13
|
+
parentCancelled = true;
|
|
14
|
+
child.abort();
|
|
15
|
+
};
|
|
16
|
+
if (parentCancelled) {
|
|
17
|
+
child.abort();
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
input.signal?.addEventListener("abort", abortFromParent, { once: true });
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const clinkInput = {
|
|
24
|
+
prompt: input.prompt,
|
|
25
|
+
cli_name: input.provider.cli_name,
|
|
26
|
+
role: input.provider.role,
|
|
27
|
+
expect_json: true,
|
|
28
|
+
max_response_chars: input.max_response_chars,
|
|
29
|
+
timeout_seconds: input.timeout_seconds,
|
|
30
|
+
debug: false,
|
|
31
|
+
debug_keep_artifacts: false,
|
|
32
|
+
};
|
|
33
|
+
const pipeline = await executePipeline(clinkInput, input.registry, {
|
|
34
|
+
signal: child.signal,
|
|
35
|
+
jsonFidelity: "strict",
|
|
36
|
+
allowTimeoutBelowAdapter: true,
|
|
37
|
+
...(input.sessionLogOwner == null ? {} : { sessionLogOwner: input.sessionLogOwner }),
|
|
38
|
+
});
|
|
39
|
+
const termination = pipeline.jsonFidelity?.termination;
|
|
40
|
+
if (parentCancelled) {
|
|
41
|
+
throw new CancellationError();
|
|
42
|
+
}
|
|
43
|
+
if (termination?.timedOut === true || termination?.reason === "wall") {
|
|
44
|
+
return failure("timeout", "context_builder delegate call timed out", pipeline);
|
|
45
|
+
}
|
|
46
|
+
if (termination?.reason === "cancel") {
|
|
47
|
+
throw new CancellationError();
|
|
48
|
+
}
|
|
49
|
+
const fidelity = pipeline.jsonFidelity;
|
|
50
|
+
const strict = fidelity?.strict;
|
|
51
|
+
if (fidelity == null ||
|
|
52
|
+
fidelity.mode !== "strict" ||
|
|
53
|
+
strict?.acceptable !== true) {
|
|
54
|
+
return failure("strict_json_fidelity", strictJsonFidelityMessage(fidelity), pipeline);
|
|
55
|
+
}
|
|
56
|
+
if (pipeline.isError === true) {
|
|
57
|
+
return failure("pipeline_error", "context_builder delegate pipeline returned an error", pipeline);
|
|
58
|
+
}
|
|
59
|
+
const raw = pipeline.content[0]?.text?.trim() ?? "";
|
|
60
|
+
if (raw.length === 0 || raw === "(no output)") {
|
|
61
|
+
return failure("empty_output", "context_builder delegate returned empty output", pipeline);
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const parsed = JSON.parse(raw);
|
|
65
|
+
if (parsed == null ||
|
|
66
|
+
typeof parsed !== "object" ||
|
|
67
|
+
Array.isArray(parsed)) {
|
|
68
|
+
return failure("invalid_json", "context_builder delegate output must be one JSON object", pipeline);
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
ok: true,
|
|
72
|
+
json: parsed,
|
|
73
|
+
raw,
|
|
74
|
+
pipeline,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return failure("invalid_json", "context_builder delegate output was not valid JSON", pipeline);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (err instanceof CancellationError) {
|
|
83
|
+
if (parentCancelled) {
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
if (timedOut) {
|
|
87
|
+
return failure("timeout", "context_builder delegate call timed out");
|
|
88
|
+
}
|
|
89
|
+
throw err;
|
|
90
|
+
}
|
|
91
|
+
return failure("pipeline_error", err instanceof Error
|
|
92
|
+
? `context_builder delegate pipeline failed: ${err.message}`
|
|
93
|
+
: "context_builder delegate pipeline failed");
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
clearTimeout(timeout);
|
|
97
|
+
input.signal?.removeEventListener("abort", abortFromParent);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function failure(reason, message, pipeline) {
|
|
101
|
+
return {
|
|
102
|
+
ok: false,
|
|
103
|
+
reason,
|
|
104
|
+
message,
|
|
105
|
+
...(pipeline == null ? {} : { pipeline }),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function strictJsonFidelityMessage(fidelity) {
|
|
109
|
+
const details = [];
|
|
110
|
+
if (fidelity == null) {
|
|
111
|
+
details.push("missing jsonFidelity metadata");
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
if (fidelity.mode !== "strict") {
|
|
115
|
+
details.push(`mode=${fidelity.mode}`);
|
|
116
|
+
}
|
|
117
|
+
if (fidelity.rejectionReason != null) {
|
|
118
|
+
details.push(`rejection=${fidelity.rejectionReason}`);
|
|
119
|
+
}
|
|
120
|
+
if (fidelity.parseStatus != null) {
|
|
121
|
+
details.push(`parse=${fidelity.parseStatus}`);
|
|
122
|
+
}
|
|
123
|
+
if (fidelity.strict?.acceptable !== true) {
|
|
124
|
+
details.push("strict.acceptable is not true");
|
|
125
|
+
}
|
|
126
|
+
if ((fidelity.strict?.violations.length ?? 0) > 0) {
|
|
127
|
+
details.push(`violations=${fidelity.strict.violations.join(", ")}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return details.length === 0
|
|
131
|
+
? "context_builder delegate JSON fidelity rejected output"
|
|
132
|
+
: `context_builder delegate JSON fidelity rejected output: ${details.join("; ")}`;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=delegate.js.map
|