clinkx 0.3.0 → 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 +82 -26
- 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/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 +41 -0
- package/dist/allowed-roots.js +125 -3
- package/dist/allowed-roots.js.map +1 -1
- 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 +1 -0
- package/dist/context-builder/anchors.js +3 -0
- package/dist/context-builder/anchors.js.map +1 -1
- package/dist/context-builder/bundle.d.ts +35 -2
- package/dist/context-builder/bundle.js +342 -2417
- package/dist/context-builder/bundle.js.map +1 -1
- package/dist/context-builder/codemap.d.ts +5 -0
- package/dist/context-builder/codemap.js +387 -13
- package/dist/context-builder/codemap.js.map +1 -1
- package/dist/context-builder/config.d.ts +1 -0
- package/dist/context-builder/config.js +12 -0
- package/dist/context-builder/config.js.map +1 -1
- 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 +37 -0
- package/dist/context-builder/delegate-packet.js +359 -67
- package/dist/context-builder/delegate-packet.js.map +1 -1
- package/dist/context-builder/delegate-validation.d.ts +10 -1
- package/dist/context-builder/delegate-validation.js +153 -41
- package/dist/context-builder/delegate-validation.js.map +1 -1
- package/dist/context-builder/delegate.d.ts +2 -0
- package/dist/context-builder/delegate.js +1 -0
- package/dist/context-builder/delegate.js.map +1 -1
- package/dist/context-builder/diagnostics.d.ts +11 -2
- package/dist/context-builder/diagnostics.js +39 -6
- package/dist/context-builder/diagnostics.js.map +1 -1
- package/dist/context-builder/discovery.d.ts +29 -1
- package/dist/context-builder/discovery.js +475 -175
- package/dist/context-builder/discovery.js.map +1 -1
- package/dist/context-builder/globs.js +10 -10
- package/dist/context-builder/globs.js.map +1 -1
- package/dist/context-builder/handler.d.ts +26 -2
- package/dist/context-builder/handler.js +1158 -2416
- package/dist/context-builder/handler.js.map +1 -1
- 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.js +9 -5
- package/dist/context-builder/path-signals.js.map +1 -1
- package/dist/context-builder/progress.d.ts +3 -1
- package/dist/context-builder/progress.js +23 -0
- package/dist/context-builder/progress.js.map +1 -1
- package/dist/context-builder/receipt.d.ts +6 -4
- package/dist/context-builder/receipt.js +12 -1
- package/dist/context-builder/receipt.js.map +1 -1
- 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/schema.d.ts +239 -1
- package/dist/context-builder/schema.js +112 -6
- package/dist/context-builder/schema.js.map +1 -1
- package/dist/context-builder/secrets.d.ts +28 -0
- package/dist/context-builder/secrets.js +1473 -44
- package/dist/context-builder/secrets.js.map +1 -1
- package/dist/context-builder/selection.d.ts +7 -3
- package/dist/context-builder/selection.js +200 -738
- package/dist/context-builder/selection.js.map +1 -1
- 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 +22 -1
- package/dist/context-builder/status.js +59 -4
- package/dist/context-builder/status.js.map +1 -1
- package/dist/context-builder/storage.d.ts +35 -2
- package/dist/context-builder/storage.js +271 -14
- package/dist/context-builder/storage.js.map +1 -1
- package/dist/context-builder/token-estimate.d.ts +13 -2
- package/dist/context-builder/token-estimate.js +77 -4
- package/dist/context-builder/token-estimate.js.map +1 -1
- 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/pipeline.d.ts +4 -0
- package/dist/pipeline.js +129 -8
- 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 +1 -0
- package/dist/server.js +359 -17
- 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 +46 -5
- package/conf/adapters/gemini.json +0 -44
- package/conf/adapters/hapi/gemini.json +0 -47
- 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,585 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { realpathSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { dirname, isAbsolute, join, parse, relative, resolve, } from "node:path";
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
6
|
+
import { createDashboardServer, DashboardBearerCapabilitySchema, formatDashboardRemoteFragment, generateDashboardAgentInstanceId, generateDashboardCapability, } from "../clinkx-workflows/dist/dashboard/index.js";
|
|
7
|
+
import { createDashboardPasskeyAuth, } from "../clinkx-workflows/dist/dashboard/auth/controller.js";
|
|
8
|
+
import { createDashboardServerPair, } from "../clinkx-workflows/dist/dashboard/server-factory.js";
|
|
9
|
+
import { DEFAULT_DASHBOARD_PORT, resolveDashboardAuthConfig, resolveDashboardAuthMode, resolveDashboardCredentialDirectory, getChildConfigPath, getDashboardMaxStateBytes, getDashboardPort, getResolvedWorkflowsPath, getRunsDir, getStateDir, getTemplatesPath, parseCanonicalHttpsOrigin, resolveDashboardPublicAccess, resolveWorkspaceRoot, } from "../clinkx-workflows/dist/config.js";
|
|
10
|
+
import { projectDashboardAdapterCatalog } from "./dashboard-adapter-catalog.js";
|
|
11
|
+
import { AdapterRegistry } from "./registry.js";
|
|
12
|
+
import { contextBuilderRunsDirFromEnv } from "./context-builder/config.js";
|
|
13
|
+
import { DashboardGatewayClient } from "./dashboard-companion/client.js";
|
|
14
|
+
import { resolveDashboardGatewayConfig } from "./dashboard-companion/config.js";
|
|
15
|
+
const defaultDependencies = {
|
|
16
|
+
getChildConfigPath,
|
|
17
|
+
getContextBuilderRunsDir: async () => contextBuilderRunsRootForDashboard(),
|
|
18
|
+
getDashboardMaxStateBytes,
|
|
19
|
+
getRunsDir,
|
|
20
|
+
getStateDir,
|
|
21
|
+
getTemplatesPath,
|
|
22
|
+
getWorkflowsPath: getResolvedWorkflowsPath,
|
|
23
|
+
resolveWorkspaceRoot,
|
|
24
|
+
loadRegistry: () => AdapterRegistry.load(),
|
|
25
|
+
loadRegistryFromPath: (configPath) => AdapterRegistry.loadFromPath(configPath),
|
|
26
|
+
createDashboardServer,
|
|
27
|
+
createDashboardServerPair,
|
|
28
|
+
createDashboardPasskeyAuth,
|
|
29
|
+
};
|
|
30
|
+
function contextBuilderRunsRootForDashboard() {
|
|
31
|
+
const requested = contextBuilderRunsDirFromEnv();
|
|
32
|
+
const home = resolve(homedir());
|
|
33
|
+
const expanded = requested === "~"
|
|
34
|
+
? home
|
|
35
|
+
: requested.startsWith("~/")
|
|
36
|
+
? join(home, requested.slice(2))
|
|
37
|
+
: requested;
|
|
38
|
+
const runsDir = resolve(expanded);
|
|
39
|
+
const cwd = resolve(process.cwd());
|
|
40
|
+
const relationToCwd = relative(runsDir, cwd);
|
|
41
|
+
if (runsDir === parse(runsDir).root) {
|
|
42
|
+
throw new Error("context_builder runs_dir must not be filesystem root");
|
|
43
|
+
}
|
|
44
|
+
if (runsDir === home) {
|
|
45
|
+
throw new Error("context_builder runs_dir must not be the home directory");
|
|
46
|
+
}
|
|
47
|
+
if (process.platform === "darwin" && dirname(runsDir) === "/Volumes") {
|
|
48
|
+
throw new Error("context_builder runs_dir must not be a volume root");
|
|
49
|
+
}
|
|
50
|
+
if (relationToCwd === "" ||
|
|
51
|
+
(!relationToCwd.startsWith("..") && !isAbsolute(relationToCwd))) {
|
|
52
|
+
throw new Error("context_builder runs_dir must not be the workspace root or an ancestor");
|
|
53
|
+
}
|
|
54
|
+
return runsDir;
|
|
55
|
+
}
|
|
56
|
+
const DASHBOARD_HELP = `Usage: clinkx-workflows-dashboard [--port <0..65535>] [--bootstrap-port <1..65535>]
|
|
57
|
+
[--public-api-origin <https-origin> --ui-origin <https-origin>] [--help]
|
|
58
|
+
|
|
59
|
+
Starts the read-only dashboard. Passkey mode is the default. Local mode binds
|
|
60
|
+
127.0.0.1 and ::1 on one port and prints http://localhost:PORT. An empty
|
|
61
|
+
credential store also prints one transient enrollment code. Cloud passkey mode
|
|
62
|
+
requires one canonical HTTPS origin. Direct mode binds the container interface
|
|
63
|
+
for a private Traefik network; gateway mode keeps the backend on Mac loopback
|
|
64
|
+
and dials the public gateway outbound.
|
|
65
|
+
|
|
66
|
+
Options:
|
|
67
|
+
--port <0..65535> Listener port; overrides CLINKX_WORKFLOWS_DASHBOARD_PORT (default 4180)
|
|
68
|
+
--bootstrap-port <1..65535> Browser-facing port printed in the local bootstrap URL; never changes the listener
|
|
69
|
+
--public-api-origin <url> Canonical HTTPS origin the browser calls for /api/* (remote mode)
|
|
70
|
+
--ui-origin <url> Canonical HTTPS origin the static UI is served from (remote mode)
|
|
71
|
+
--help Show this help
|
|
72
|
+
|
|
73
|
+
The two origin flags are atomic: pass both to enable remote mode, or neither.
|
|
74
|
+
Bootstrap-port is local-mode only. Each CLI port flag overrides its environment
|
|
75
|
+
fallback, including an invalid fallback value.
|
|
76
|
+
|
|
77
|
+
Environment:
|
|
78
|
+
CLINKX_WORKFLOWS_STATE_DIR Absolute root; must match the workflow server
|
|
79
|
+
XDG_STATE_HOME Absolute fallback base when state root is unset
|
|
80
|
+
CLINKX_WORKFLOWS_DASHBOARD_PORT Default listener port (0 requests an ephemeral port)
|
|
81
|
+
CLINKX_WORKFLOWS_DASHBOARD_BOOTSTRAP_PORT Browser-facing local bootstrap port (1..65535)
|
|
82
|
+
CLINKX_WORKFLOWS_DASHBOARD_AUTH_MODE passkey (default) or bearer (temporary rollback)
|
|
83
|
+
CLINKX_WORKFLOWS_DASHBOARD_CREDENTIAL_DIR Passkey credential directory (absolute, non-root; defaults below workflow state)
|
|
84
|
+
CLINKX_WORKFLOWS_DASHBOARD_RP_NAME WebAuthn RP display name (default ClinkX Dashboard)
|
|
85
|
+
CLINKX_WORKFLOWS_DASHBOARD_SESSION_TTL_SECONDS Absolute session TTL (default 43200)
|
|
86
|
+
CLINKX_WORKFLOWS_DASHBOARD_TOKEN Pin the bearer capability (43-char base64url) so the local sign-in token is stable across restarts; local-mode only
|
|
87
|
+
CLINKX_WORKFLOWS_DASHBOARD_MAX_STATE_BYTES Per-run state cap (1048576..67108864; default 16777216)
|
|
88
|
+
CLINKX_WORKFLOWS_DASHBOARD_PUBLIC_API_ORIGIN Canonical HTTPS API origin (remote mode; pair with UI origin)
|
|
89
|
+
CLINKX_WORKFLOWS_DASHBOARD_UI_ORIGIN Canonical HTTPS UI origin (remote mode; pair with API origin)
|
|
90
|
+
CLINKX_DASHBOARD_GATEWAY_URL HTTPS/WSS gateway agent endpoint (gateway mode)
|
|
91
|
+
CLINKX_DASHBOARD_GATEWAY_TOKEN 43-character base64url pairing secret; environment only
|
|
92
|
+
CLINKX_CONTEXT_BUILDER_RUNS_DIR Context Run journal/artifact root (same as producers)
|
|
93
|
+
CLINKX_DASHBOARD_ACTIVITY_RETAIN_RESULT Persist bounded final activity output when exactly "true"
|
|
94
|
+
|
|
95
|
+
Remote access:
|
|
96
|
+
In passkey mode, the two origin flags must be identical. Without gateway
|
|
97
|
+
configuration, route that origin directly to the dashboard container on a
|
|
98
|
+
private Traefik network. With gateway configuration, route the same origin's
|
|
99
|
+
/api and /agent paths to the public gateway while the dashboard backend stays
|
|
100
|
+
bound to Mac loopback. Bearer gateway rollback may retain split origins.
|
|
101
|
+
`;
|
|
102
|
+
const USAGE = "usage: clinkx-workflows-dashboard [--port <0..65535>] [--bootstrap-port <1..65535>] " +
|
|
103
|
+
"[--public-api-origin <https-origin> --ui-origin <https-origin>] [--help]";
|
|
104
|
+
function parsePortToken(raw) {
|
|
105
|
+
const port = Number(raw);
|
|
106
|
+
if (!/^(?:0|[1-9]\d*)$/.test(raw) || !Number.isSafeInteger(port) || port > 65_535) {
|
|
107
|
+
throw new Error("--port must be an integer from 0 through 65535");
|
|
108
|
+
}
|
|
109
|
+
return port;
|
|
110
|
+
}
|
|
111
|
+
const DASHBOARD_BOOTSTRAP_PORT_ENV = "CLINKX_WORKFLOWS_DASHBOARD_BOOTSTRAP_PORT";
|
|
112
|
+
const DASHBOARD_TOKEN_ENV = "CLINKX_WORKFLOWS_DASHBOARD_TOKEN";
|
|
113
|
+
/**
|
|
114
|
+
* Resolve a pinned bearer capability from the environment. When set, the same
|
|
115
|
+
* `#token=` fragment survives every rebuild/recreate so the local bootstrap URL
|
|
116
|
+
* is stable (npm-run-dev style); when unset the launch mints a fresh random
|
|
117
|
+
* capability as before. The value must be a canonical 43-char base64url token
|
|
118
|
+
* (a `randomBytes(32)` capability); anything else fails loud rather than
|
|
119
|
+
* silently downgrading to a weak or malformed secret.
|
|
120
|
+
*/
|
|
121
|
+
export function resolvePinnedCapability(env = process.env) {
|
|
122
|
+
const raw = env[DASHBOARD_TOKEN_ENV];
|
|
123
|
+
if (raw === undefined || raw === "")
|
|
124
|
+
return undefined;
|
|
125
|
+
const parsed = DashboardBearerCapabilitySchema.safeParse(raw);
|
|
126
|
+
if (!parsed.success) {
|
|
127
|
+
throw new Error(`${DASHBOARD_TOKEN_ENV} must be a 43-character base64url token ` +
|
|
128
|
+
"(e.g. `node -e \"console.log(require('crypto').randomBytes(32).toString('base64url'))\"`)");
|
|
129
|
+
}
|
|
130
|
+
return parsed.data;
|
|
131
|
+
}
|
|
132
|
+
function parseBootstrapPortToken(raw, label = "--bootstrap-port") {
|
|
133
|
+
const port = Number(raw);
|
|
134
|
+
if (!/^[1-9]\d*$/.test(raw) || !Number.isSafeInteger(port) || port > 65_535) {
|
|
135
|
+
throw new Error(`${label} must be an integer from 1 through 65535`);
|
|
136
|
+
}
|
|
137
|
+
return port;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Parse the dashboard CLI argv into a command. Flags are order-independent and
|
|
141
|
+
* each take exactly one value. The origin pair is atomic (both or neither) and
|
|
142
|
+
* each origin is validated with the canonical HTTPS parser shared with config.
|
|
143
|
+
*/
|
|
144
|
+
export function parseDashboardCliArgs(args, fallbackPort) {
|
|
145
|
+
if (args.length === 0)
|
|
146
|
+
return { kind: "start", port: fallbackPort };
|
|
147
|
+
if (args.length === 1 && args[0] === "--help")
|
|
148
|
+
return { kind: "help" };
|
|
149
|
+
let port;
|
|
150
|
+
let bootstrapPort;
|
|
151
|
+
let apiOrigin;
|
|
152
|
+
let uiOrigin;
|
|
153
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
154
|
+
const flag = args[i];
|
|
155
|
+
const value = args[i + 1];
|
|
156
|
+
if (value === undefined)
|
|
157
|
+
throw new Error(USAGE);
|
|
158
|
+
switch (flag) {
|
|
159
|
+
case "--port":
|
|
160
|
+
if (port !== undefined)
|
|
161
|
+
throw new Error("--port was specified more than once");
|
|
162
|
+
port = parsePortToken(value);
|
|
163
|
+
break;
|
|
164
|
+
case "--bootstrap-port":
|
|
165
|
+
if (bootstrapPort !== undefined) {
|
|
166
|
+
throw new Error("--bootstrap-port was specified more than once");
|
|
167
|
+
}
|
|
168
|
+
bootstrapPort = parseBootstrapPortToken(value);
|
|
169
|
+
break;
|
|
170
|
+
case "--public-api-origin":
|
|
171
|
+
if (apiOrigin !== undefined) {
|
|
172
|
+
throw new Error("--public-api-origin was specified more than once");
|
|
173
|
+
}
|
|
174
|
+
apiOrigin = parseCanonicalHttpsOrigin(value, "--public-api-origin").origin;
|
|
175
|
+
break;
|
|
176
|
+
case "--ui-origin":
|
|
177
|
+
if (uiOrigin !== undefined) {
|
|
178
|
+
throw new Error("--ui-origin was specified more than once");
|
|
179
|
+
}
|
|
180
|
+
uiOrigin = parseCanonicalHttpsOrigin(value, "--ui-origin").origin;
|
|
181
|
+
break;
|
|
182
|
+
default:
|
|
183
|
+
throw new Error(USAGE);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if ((apiOrigin === undefined) !== (uiOrigin === undefined)) {
|
|
187
|
+
throw new Error("--public-api-origin and --ui-origin must be provided together (both for remote mode, or neither)");
|
|
188
|
+
}
|
|
189
|
+
const resolvedPort = port ?? fallbackPort;
|
|
190
|
+
if (apiOrigin !== undefined && uiOrigin !== undefined) {
|
|
191
|
+
return {
|
|
192
|
+
kind: "start",
|
|
193
|
+
port: resolvedPort,
|
|
194
|
+
...(bootstrapPort === undefined
|
|
195
|
+
? {}
|
|
196
|
+
: { bootstrapPortOverride: bootstrapPort }),
|
|
197
|
+
remoteOverride: { apiOrigin, uiOrigin },
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
kind: "start",
|
|
202
|
+
port: resolvedPort,
|
|
203
|
+
...(bootstrapPort === undefined ? {} : { bootstrapPortOverride: bootstrapPort }),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Resolve the effective remote-access config for the server: the atomic CLI
|
|
208
|
+
* origin pair takes precedence over the environment pair, with no partial
|
|
209
|
+
* mixing. Returns `undefined` for local mode (loopback + SSH, unchanged).
|
|
210
|
+
*/
|
|
211
|
+
export function resolveEffectiveRemoteAccess(command, env = process.env) {
|
|
212
|
+
if (command.remoteOverride !== undefined) {
|
|
213
|
+
return {
|
|
214
|
+
apiOrigin: command.remoteOverride.apiOrigin,
|
|
215
|
+
uiOrigin: command.remoteOverride.uiOrigin,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
const access = resolveDashboardPublicAccess(env);
|
|
219
|
+
if (access.mode === "local")
|
|
220
|
+
return undefined;
|
|
221
|
+
return { apiOrigin: access.publicApiOrigin, uiOrigin: access.uiOrigin };
|
|
222
|
+
}
|
|
223
|
+
/** Resolve the presentation-only browser port with CLI-over-environment precedence. */
|
|
224
|
+
export function resolveEffectiveBootstrapPort(command, env = process.env) {
|
|
225
|
+
if (command.bootstrapPortOverride !== undefined) {
|
|
226
|
+
return command.bootstrapPortOverride;
|
|
227
|
+
}
|
|
228
|
+
const raw = env[DASHBOARD_BOOTSTRAP_PORT_ENV];
|
|
229
|
+
if (raw === undefined)
|
|
230
|
+
return undefined;
|
|
231
|
+
return parseBootstrapPortToken(raw, DASHBOARD_BOOTSTRAP_PORT_ENV);
|
|
232
|
+
}
|
|
233
|
+
async function composeDashboardServerOptions(dependencies = defaultDependencies, overrides = {}) {
|
|
234
|
+
const childConfigPath = dependencies.getChildConfigPath();
|
|
235
|
+
const registry = childConfigPath == null
|
|
236
|
+
? dependencies.loadRegistry()
|
|
237
|
+
: dependencies.loadRegistryFromPath(childConfigPath);
|
|
238
|
+
const adapterCatalog = projectDashboardAdapterCatalog(registry);
|
|
239
|
+
const stateDir = dependencies.getStateDir();
|
|
240
|
+
if (!isAbsolute(stateDir)) {
|
|
241
|
+
throw new Error(`dashboard state directory must be absolute; got ${JSON.stringify(stateDir)}`);
|
|
242
|
+
}
|
|
243
|
+
const runsRoot = resolve(dependencies.getRunsDir());
|
|
244
|
+
const contextRunsRoot = await dependencies.getContextBuilderRunsDir();
|
|
245
|
+
const activitiesRoot = join(stateDir, "activities");
|
|
246
|
+
const progressReportsRoot = join(stateDir, "progress-reports");
|
|
247
|
+
const workflowsPath = dependencies.getWorkflowsPath();
|
|
248
|
+
const api = {
|
|
249
|
+
maxStateBytes: dependencies.getDashboardMaxStateBytes(),
|
|
250
|
+
activitiesRoot,
|
|
251
|
+
progressReportsRoot,
|
|
252
|
+
contextRunsRoot,
|
|
253
|
+
runsRoot,
|
|
254
|
+
workflowsPath,
|
|
255
|
+
environment: {
|
|
256
|
+
stateDir,
|
|
257
|
+
activitiesRoot,
|
|
258
|
+
progressReportsRoot,
|
|
259
|
+
runsRoot,
|
|
260
|
+
workspaceRoot: dependencies.resolveWorkspaceRoot(),
|
|
261
|
+
workflowsPath,
|
|
262
|
+
templatesPath: dependencies.getTemplatesPath(),
|
|
263
|
+
childConfig: childConfigPath == null
|
|
264
|
+
? { source: "ambient", configured: false }
|
|
265
|
+
: { source: "explicit", configured: true, path: childConfigPath },
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
const options = {
|
|
269
|
+
adapterCatalog,
|
|
270
|
+
api,
|
|
271
|
+
...(overrides.capability == null ? {} : { capability: overrides.capability }),
|
|
272
|
+
...(overrides.remoteAccess == null ? {} : { remoteAccess: overrides.remoteAccess }),
|
|
273
|
+
...(overrides.agentInstanceId == null
|
|
274
|
+
? {}
|
|
275
|
+
: { agentInstanceId: overrides.agentInstanceId }),
|
|
276
|
+
...(overrides.passkeyAuth == null ? {} : { passkeyAuth: overrides.passkeyAuth }),
|
|
277
|
+
...(overrides.staticRoot == null ? {} : { staticRoot: overrides.staticRoot }),
|
|
278
|
+
...(overrides.staticResponseLoader == null
|
|
279
|
+
? {}
|
|
280
|
+
: { staticResponseLoader: overrides.staticResponseLoader }),
|
|
281
|
+
};
|
|
282
|
+
return options;
|
|
283
|
+
}
|
|
284
|
+
/** Compose the standalone dashboard from root-owned adapter configuration. */
|
|
285
|
+
export async function composeDashboardServer(dependencies = defaultDependencies, overrides = {}) {
|
|
286
|
+
return dependencies.createDashboardServer(await composeDashboardServerOptions(dependencies, overrides));
|
|
287
|
+
}
|
|
288
|
+
async function composeDashboardServerPair(dependencies, overrides) {
|
|
289
|
+
const options = await composeDashboardServerOptions(dependencies, overrides);
|
|
290
|
+
return (dependencies.createDashboardServerPair ?? createDashboardServerPair)(options);
|
|
291
|
+
}
|
|
292
|
+
async function listenOnHost(server, port, host) {
|
|
293
|
+
await new Promise((resolve, reject) => {
|
|
294
|
+
const onError = (error) => {
|
|
295
|
+
server.off("listening", onListening);
|
|
296
|
+
if (error.code === "EADDRINUSE") {
|
|
297
|
+
reject(new Error(`port ${String(port)} is already in use on ${host}`));
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
reject(error);
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
const onListening = () => {
|
|
304
|
+
server.off("error", onError);
|
|
305
|
+
resolve();
|
|
306
|
+
};
|
|
307
|
+
server.once("error", onError);
|
|
308
|
+
server.once("listening", onListening);
|
|
309
|
+
server.listen(port, host);
|
|
310
|
+
});
|
|
311
|
+
return server.address().port;
|
|
312
|
+
}
|
|
313
|
+
async function closeServer(server) {
|
|
314
|
+
if (!server.listening)
|
|
315
|
+
return;
|
|
316
|
+
await new Promise((resolveClose, reject) => {
|
|
317
|
+
server.close((error) => error == null ? resolveClose() : reject(error));
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
export async function listenOnDualLoopback(servers, port, afterFirstBind) {
|
|
321
|
+
const activePort = await listenOnHost(servers[0], port, "127.0.0.1");
|
|
322
|
+
try {
|
|
323
|
+
await afterFirstBind?.(activePort);
|
|
324
|
+
await listenOnHost(servers[1], activePort, "::1");
|
|
325
|
+
return activePort;
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
await closeServer(servers[1]).catch(() => { });
|
|
329
|
+
await closeServer(servers[0]).catch(() => { });
|
|
330
|
+
throw error;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
export async function closeDashboardListenersAndResources(servers, closeResources) {
|
|
334
|
+
const listenerResults = await Promise.allSettled(servers.map(closeServer));
|
|
335
|
+
const resourceResults = closeResources == null
|
|
336
|
+
? []
|
|
337
|
+
: await Promise.allSettled([Promise.resolve().then(closeResources)]);
|
|
338
|
+
const failures = [...listenerResults, ...resourceResults]
|
|
339
|
+
.filter((result) => result.status === "rejected")
|
|
340
|
+
.map((result) => result.reason);
|
|
341
|
+
if (failures.length > 0) {
|
|
342
|
+
throw new AggregateError(failures, "one or more dashboard listeners or resources failed to close");
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
function installDashboardShutdownHandlers(servers, closeResources) {
|
|
346
|
+
let closing = false;
|
|
347
|
+
const shutdown = () => {
|
|
348
|
+
if (closing)
|
|
349
|
+
return;
|
|
350
|
+
closing = true;
|
|
351
|
+
void closeDashboardListenersAndResources(servers, closeResources).catch((error) => {
|
|
352
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
353
|
+
process.stderr.write(`clinkx-workflows-dashboard: shutdown failed: ${message}\n`);
|
|
354
|
+
process.exitCode = 1;
|
|
355
|
+
});
|
|
356
|
+
};
|
|
357
|
+
process.once("SIGINT", shutdown);
|
|
358
|
+
process.once("SIGTERM", shutdown);
|
|
359
|
+
}
|
|
360
|
+
class DeferredDashboardPasskeyAuth {
|
|
361
|
+
mode = "passkey";
|
|
362
|
+
#delegate;
|
|
363
|
+
get expectedHost() {
|
|
364
|
+
return this.#delegate?.expectedHost;
|
|
365
|
+
}
|
|
366
|
+
get expectedOrigin() {
|
|
367
|
+
return this.#delegate?.expectedOrigin;
|
|
368
|
+
}
|
|
369
|
+
attach(delegate) {
|
|
370
|
+
if (this.#delegate != null) {
|
|
371
|
+
throw new Error("dashboard passkey authority was initialized more than once");
|
|
372
|
+
}
|
|
373
|
+
this.#delegate = delegate;
|
|
374
|
+
}
|
|
375
|
+
takeEnrollmentCodeForDisplay() {
|
|
376
|
+
return this.#delegate?.takeEnrollmentCodeForDisplay();
|
|
377
|
+
}
|
|
378
|
+
isAuthenticated(request) {
|
|
379
|
+
return this.#delegate?.isAuthenticated(request) ?? false;
|
|
380
|
+
}
|
|
381
|
+
handle(...args) {
|
|
382
|
+
if (this.#delegate == null) {
|
|
383
|
+
return Promise.reject(new Error("dashboard passkey authority is not initialized"));
|
|
384
|
+
}
|
|
385
|
+
return this.#delegate.handle(...args);
|
|
386
|
+
}
|
|
387
|
+
async close() {
|
|
388
|
+
await this.#delegate?.close();
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
function isCliEntrypoint() {
|
|
392
|
+
const entry = process.argv[1];
|
|
393
|
+
if (entry == null)
|
|
394
|
+
return false;
|
|
395
|
+
try {
|
|
396
|
+
return realpathSync(entry) === realpathSync(fileURLToPath(import.meta.url));
|
|
397
|
+
}
|
|
398
|
+
catch {
|
|
399
|
+
return import.meta.url === pathToFileURL(entry).href;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/** Run the dashboard CLI, including the optional outbound gateway companion. */
|
|
403
|
+
export async function runDashboardCli(args = process.argv.slice(2), env = process.env, runtime = {}) {
|
|
404
|
+
// Only resolve the env port when it will actually be used as the fallback:
|
|
405
|
+
// an explicit --port (or --help) overrides it, so an invalid env value that
|
|
406
|
+
// the caller is overriding must not throw.
|
|
407
|
+
const wantsHelp = args.length === 1 && args[0] === "--help";
|
|
408
|
+
const portExplicit = args.includes("--port");
|
|
409
|
+
const fallbackPort = wantsHelp || portExplicit
|
|
410
|
+
? DEFAULT_DASHBOARD_PORT
|
|
411
|
+
: getDashboardPort();
|
|
412
|
+
const command = parseDashboardCliArgs(args, fallbackPort);
|
|
413
|
+
if (command.kind === "help") {
|
|
414
|
+
process.stderr.write(DASHBOARD_HELP);
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const remoteAccess = resolveEffectiveRemoteAccess(command, env);
|
|
418
|
+
const gatewayConfig = resolveDashboardGatewayConfig(env);
|
|
419
|
+
const bootstrapPort = resolveEffectiveBootstrapPort(command, env);
|
|
420
|
+
const localMode = remoteAccess === undefined && gatewayConfig === undefined;
|
|
421
|
+
if (bootstrapPort !== undefined && !localMode) {
|
|
422
|
+
throw new Error("--bootstrap-port and CLINKX_WORKFLOWS_DASHBOARD_BOOTSTRAP_PORT are local-mode only");
|
|
423
|
+
}
|
|
424
|
+
const authMode = resolveDashboardAuthMode(env);
|
|
425
|
+
if (authMode === "passkey") {
|
|
426
|
+
if ((env[DASHBOARD_TOKEN_ENV] ?? "") !== "") {
|
|
427
|
+
throw new Error(`${DASHBOARD_TOKEN_ENV} is valid only in bearer auth mode`);
|
|
428
|
+
}
|
|
429
|
+
if (gatewayConfig !== undefined && remoteAccess === undefined) {
|
|
430
|
+
throw new Error("gateway mode requires the dashboard public API and UI origin pair");
|
|
431
|
+
}
|
|
432
|
+
const credentialDirectory = resolveDashboardCredentialDirectory(env, defaultDependencies.getStateDir());
|
|
433
|
+
const createPasskeyAuth = defaultDependencies.createDashboardPasskeyAuth
|
|
434
|
+
?? createDashboardPasskeyAuth;
|
|
435
|
+
if (remoteAccess !== undefined) {
|
|
436
|
+
const publicAccess = {
|
|
437
|
+
mode: "remote",
|
|
438
|
+
publicApiOrigin: remoteAccess.apiOrigin,
|
|
439
|
+
uiOrigin: remoteAccess.uiOrigin,
|
|
440
|
+
publicHost: new URL(remoteAccess.apiOrigin).host,
|
|
441
|
+
};
|
|
442
|
+
const authConfig = resolveDashboardAuthConfig({
|
|
443
|
+
publicAccess,
|
|
444
|
+
credentialDirectory,
|
|
445
|
+
env,
|
|
446
|
+
});
|
|
447
|
+
const passkeyAuth = await createPasskeyAuth(authConfig);
|
|
448
|
+
let passkeyServer;
|
|
449
|
+
let gatewayClient;
|
|
450
|
+
try {
|
|
451
|
+
passkeyServer = await composeDashboardServer(defaultDependencies, {
|
|
452
|
+
remoteAccess,
|
|
453
|
+
passkeyAuth,
|
|
454
|
+
...(runtime.staticRoot === undefined ? {} : { staticRoot: runtime.staticRoot }),
|
|
455
|
+
...(runtime.staticResponseLoader === undefined
|
|
456
|
+
? {}
|
|
457
|
+
: { staticResponseLoader: runtime.staticResponseLoader }),
|
|
458
|
+
});
|
|
459
|
+
const activePort = await listenOnHost(passkeyServer, command.port, gatewayConfig === undefined ? "0.0.0.0" : "127.0.0.1");
|
|
460
|
+
if (gatewayConfig !== undefined) {
|
|
461
|
+
gatewayClient = new DashboardGatewayClient({
|
|
462
|
+
url: gatewayConfig.url,
|
|
463
|
+
token: gatewayConfig.token,
|
|
464
|
+
localPort: activePort,
|
|
465
|
+
protocol: "v2",
|
|
466
|
+
});
|
|
467
|
+
gatewayClient.start();
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
catch (error) {
|
|
471
|
+
await gatewayClient?.close().catch(() => { });
|
|
472
|
+
await passkeyAuth.close().catch(() => { });
|
|
473
|
+
await (passkeyServer == null ? Promise.resolve() : closeServer(passkeyServer))
|
|
474
|
+
.catch(() => { });
|
|
475
|
+
throw error;
|
|
476
|
+
}
|
|
477
|
+
installDashboardShutdownHandlers([passkeyServer], async () => {
|
|
478
|
+
const results = await Promise.allSettled([
|
|
479
|
+
gatewayClient?.close() ?? Promise.resolve(),
|
|
480
|
+
passkeyAuth.close(),
|
|
481
|
+
]);
|
|
482
|
+
const failures = results
|
|
483
|
+
.filter((result) => result.status === "rejected")
|
|
484
|
+
.map((result) => result.reason);
|
|
485
|
+
if (failures.length > 0) {
|
|
486
|
+
throw new AggregateError(failures, "one or more passkey gateway resources failed to close");
|
|
487
|
+
}
|
|
488
|
+
});
|
|
489
|
+
const enrollmentCode = passkeyAuth.takeEnrollmentCodeForDisplay();
|
|
490
|
+
process.stderr.write(enrollmentCode == null
|
|
491
|
+
? `ClinkX dashboard: ${remoteAccess.uiOrigin}\n`
|
|
492
|
+
: `ClinkX dashboard: ${remoteAccess.uiOrigin}\nEnrollment code: ${enrollmentCode}\n`);
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
const deferredAuth = new DeferredDashboardPasskeyAuth();
|
|
496
|
+
const passkeyServers = await composeDashboardServerPair(defaultDependencies, {
|
|
497
|
+
passkeyAuth: deferredAuth,
|
|
498
|
+
...(runtime.staticRoot === undefined ? {} : { staticRoot: runtime.staticRoot }),
|
|
499
|
+
...(runtime.staticResponseLoader === undefined
|
|
500
|
+
? {}
|
|
501
|
+
: { staticResponseLoader: runtime.staticResponseLoader }),
|
|
502
|
+
});
|
|
503
|
+
let activePort;
|
|
504
|
+
try {
|
|
505
|
+
activePort = await listenOnDualLoopback(passkeyServers, command.port, async (selectedPort) => {
|
|
506
|
+
const browserPort = bootstrapPort ?? selectedPort;
|
|
507
|
+
const authConfig = resolveDashboardAuthConfig({
|
|
508
|
+
publicAccess: { mode: "local" },
|
|
509
|
+
localPort: browserPort,
|
|
510
|
+
credentialDirectory,
|
|
511
|
+
env,
|
|
512
|
+
});
|
|
513
|
+
deferredAuth.attach(await createPasskeyAuth(authConfig));
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
catch (error) {
|
|
517
|
+
await deferredAuth.close().catch(() => { });
|
|
518
|
+
throw error;
|
|
519
|
+
}
|
|
520
|
+
installDashboardShutdownHandlers(passkeyServers, async () => deferredAuth.close());
|
|
521
|
+
const origin = `http://localhost:${String(bootstrapPort ?? activePort)}`;
|
|
522
|
+
const enrollmentCode = deferredAuth.takeEnrollmentCodeForDisplay();
|
|
523
|
+
process.stderr.write(enrollmentCode == null
|
|
524
|
+
? `ClinkX dashboard: ${origin}\n`
|
|
525
|
+
: `ClinkX dashboard: ${origin}\nEnrollment code: ${enrollmentCode}\n`);
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
// Local-mode-only guard on PRESENCE (valid or malformed): a stray token in
|
|
529
|
+
// remote/gateway mode fails with the mode message, and the token is only
|
|
530
|
+
// parsed/validated in local mode. resolvePinnedCapability still fails loud on
|
|
531
|
+
// a malformed LOCAL token.
|
|
532
|
+
if ((env[DASHBOARD_TOKEN_ENV] ?? "") !== "" && !localMode) {
|
|
533
|
+
throw new Error(`${DASHBOARD_TOKEN_ENV} is local-mode only; remote/gateway mode mints a fresh capability per launch`);
|
|
534
|
+
}
|
|
535
|
+
const pinnedCapability = localMode ? resolvePinnedCapability(env) : undefined;
|
|
536
|
+
const capability = pinnedCapability ?? generateDashboardCapability();
|
|
537
|
+
if (gatewayConfig !== undefined && remoteAccess === undefined) {
|
|
538
|
+
throw new Error("gateway mode requires the dashboard public API and UI origin pair");
|
|
539
|
+
}
|
|
540
|
+
const agentInstanceId = remoteAccess === undefined
|
|
541
|
+
? undefined
|
|
542
|
+
: generateDashboardAgentInstanceId();
|
|
543
|
+
const server = await composeDashboardServer(defaultDependencies, {
|
|
544
|
+
capability,
|
|
545
|
+
...(remoteAccess === undefined ? {} : { remoteAccess }),
|
|
546
|
+
...(agentInstanceId === undefined ? {} : { agentInstanceId }),
|
|
547
|
+
...(runtime.staticRoot === undefined ? {} : { staticRoot: runtime.staticRoot }),
|
|
548
|
+
...(runtime.staticResponseLoader === undefined
|
|
549
|
+
? {}
|
|
550
|
+
: { staticResponseLoader: runtime.staticResponseLoader }),
|
|
551
|
+
});
|
|
552
|
+
const activePort = await listenOnHost(server, command.port, "127.0.0.1");
|
|
553
|
+
const gatewayClient = gatewayConfig === undefined
|
|
554
|
+
? undefined
|
|
555
|
+
: new DashboardGatewayClient({
|
|
556
|
+
url: gatewayConfig.url,
|
|
557
|
+
token: gatewayConfig.token,
|
|
558
|
+
localPort: activePort,
|
|
559
|
+
});
|
|
560
|
+
gatewayClient?.start();
|
|
561
|
+
installDashboardShutdownHandlers([server], gatewayClient === undefined ? undefined : async () => gatewayClient.close());
|
|
562
|
+
if (remoteAccess === undefined) {
|
|
563
|
+
// Local mode: print the bare origin plus the access token on its own line.
|
|
564
|
+
// Open the origin and paste the token into the sign-in card — no more
|
|
565
|
+
// appending a #token= fragment. The capability appears exactly once.
|
|
566
|
+
const origin = `http://127.0.0.1:${String(bootstrapPort ?? activePort)}`;
|
|
567
|
+
process.stderr.write(`ClinkX dashboard: ${origin}\nAccess token: ${capability}\n`);
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
const fragment = formatDashboardRemoteFragment({
|
|
571
|
+
apiOrigin: remoteAccess.apiOrigin,
|
|
572
|
+
agentInstanceId: agentInstanceId,
|
|
573
|
+
token: capability,
|
|
574
|
+
});
|
|
575
|
+
process.stderr.write(`${remoteAccess.uiOrigin}/${fragment}\n`);
|
|
576
|
+
}
|
|
577
|
+
if (process.env["CLINKX_DASHBOARD_STANDALONE_ENTRY"] !== "1"
|
|
578
|
+
&& isCliEntrypoint()) {
|
|
579
|
+
runDashboardCli().catch((error) => {
|
|
580
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
581
|
+
process.stderr.write(`clinkx-workflows-dashboard: ${message}\n`);
|
|
582
|
+
process.exitCode = 1;
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
//# sourceMappingURL=dashboard-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-cli.js","sourceRoot":"","sources":["../src/dashboard-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface DashboardGatewayReconnectOptions {
|
|
2
|
+
readonly minimumMs?: number;
|
|
3
|
+
readonly maximumMs?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface DashboardGatewayClientOptions {
|
|
6
|
+
readonly url: string;
|
|
7
|
+
readonly token: string;
|
|
8
|
+
readonly localPort: number;
|
|
9
|
+
readonly protocol?: "v1" | "v2";
|
|
10
|
+
readonly reconnect?: DashboardGatewayReconnectOptions;
|
|
11
|
+
readonly random?: () => number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Maintains the companion's single outbound authenticated WebSocket and
|
|
15
|
+
* transports the negotiated bounded request/response protocol to the loopback API.
|
|
16
|
+
*/
|
|
17
|
+
export declare class DashboardGatewayClient {
|
|
18
|
+
private readonly options;
|
|
19
|
+
private readonly minimumReconnectMs;
|
|
20
|
+
private readonly maximumReconnectMs;
|
|
21
|
+
private readonly random;
|
|
22
|
+
private readonly recentRequestIds;
|
|
23
|
+
private socket;
|
|
24
|
+
private reconnectTimer;
|
|
25
|
+
private reconnectAttempt;
|
|
26
|
+
private inFlightRequests;
|
|
27
|
+
private started;
|
|
28
|
+
private closed;
|
|
29
|
+
constructor(options: DashboardGatewayClientOptions);
|
|
30
|
+
start(): void;
|
|
31
|
+
close(): Promise<void>;
|
|
32
|
+
private connect;
|
|
33
|
+
private handleMessage;
|
|
34
|
+
private sendResponse;
|
|
35
|
+
private scheduleReconnect;
|
|
36
|
+
}
|