clinkx 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +86 -0
- package/README.md +72 -0
- package/clinkx-workflows/dist/chairman-knobs.d.ts +24 -0
- package/clinkx-workflows/dist/chairman-knobs.js +27 -0
- package/clinkx-workflows/dist/chairman-knobs.js.map +1 -0
- package/clinkx-workflows/dist/clink-client.d.ts +10 -0
- package/clinkx-workflows/dist/clink-client.js +39 -1
- package/clinkx-workflows/dist/clink-client.js.map +1 -1
- package/clinkx-workflows/dist/config.d.ts +29 -1
- package/clinkx-workflows/dist/config.js +35 -2
- package/clinkx-workflows/dist/config.js.map +1 -1
- package/clinkx-workflows/dist/context-preflight.d.ts +5 -0
- package/clinkx-workflows/dist/context-preflight.js.map +1 -1
- package/clinkx-workflows/dist/council-execution-policy.d.ts +68 -0
- package/clinkx-workflows/dist/council-execution-policy.js +110 -0
- package/clinkx-workflows/dist/council-execution-policy.js.map +1 -0
- package/clinkx-workflows/dist/council-expander.d.ts +9 -8
- package/clinkx-workflows/dist/council-expander.js +18 -9
- package/clinkx-workflows/dist/council-expander.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/activity-contract.d.ts +5557 -4
- package/clinkx-workflows/dist/dashboard/activity-contract.js +55 -3
- package/clinkx-workflows/dist/dashboard/activity-contract.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/activity-reader.d.ts +9 -5
- package/clinkx-workflows/dist/dashboard/activity-reader.js +15 -2
- package/clinkx-workflows/dist/dashboard/activity-reader.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/api-routes.d.ts +4 -0
- package/clinkx-workflows/dist/dashboard/api-routes.js +133 -25
- package/clinkx-workflows/dist/dashboard/api-routes.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/context-builder-invocation-contract.d.ts +3865 -0
- package/clinkx-workflows/dist/dashboard/context-builder-invocation-contract.js +69 -0
- package/clinkx-workflows/dist/dashboard/context-builder-invocation-contract.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/context-run-reader.d.ts +36 -2
- package/clinkx-workflows/dist/dashboard/context-run-reader.js +142 -19
- package/clinkx-workflows/dist/dashboard/context-run-reader.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/contracts.d.ts +20027 -480
- package/clinkx-workflows/dist/dashboard/contracts.js +133 -6
- package/clinkx-workflows/dist/dashboard/contracts.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/index.d.ts +4 -0
- package/clinkx-workflows/dist/dashboard/index.js +4 -0
- package/clinkx-workflows/dist/dashboard/index.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/invocation-contract.d.ts +786 -0
- package/clinkx-workflows/dist/dashboard/invocation-contract.js +201 -0
- package/clinkx-workflows/dist/dashboard/invocation-contract.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/lazy-content.d.ts +14 -1
- package/clinkx-workflows/dist/dashboard/lazy-content.js +53 -2
- package/clinkx-workflows/dist/dashboard/lazy-content.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/native-transcript/contract.d.ts +90 -0
- package/clinkx-workflows/dist/dashboard/native-transcript/contract.js +31 -0
- package/clinkx-workflows/dist/dashboard/native-transcript/contract.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/native-transcript/projection.d.ts +12 -0
- package/clinkx-workflows/dist/dashboard/native-transcript/projection.js +286 -0
- package/clinkx-workflows/dist/dashboard/native-transcript/projection.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/progress-report-contract.d.ts +147 -4
- package/clinkx-workflows/dist/dashboard/progress-report-contract.js +11 -11
- package/clinkx-workflows/dist/dashboard/progress-report-contract.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/progress-report-reader.js +4 -56
- package/clinkx-workflows/dist/dashboard/progress-report-reader.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/progress-report-status-store.d.ts +2 -1
- package/clinkx-workflows/dist/dashboard/progress-report-status-store.js +6 -5
- package/clinkx-workflows/dist/dashboard/progress-report-status-store.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/prompt-builder-library-contract.d.ts +194 -0
- package/clinkx-workflows/dist/dashboard/prompt-builder-library-contract.js +89 -0
- package/clinkx-workflows/dist/dashboard/prompt-builder-library-contract.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/prompt-builder-library-store.d.ts +26 -0
- package/clinkx-workflows/dist/dashboard/prompt-builder-library-store.js +102 -0
- package/clinkx-workflows/dist/dashboard/prompt-builder-library-store.js.map +1 -0
- package/clinkx-workflows/dist/dashboard/request-admission.js +4 -0
- package/clinkx-workflows/dist/dashboard/request-admission.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/scanner.d.ts +3 -0
- package/clinkx-workflows/dist/dashboard/scanner.js +52 -8
- package/clinkx-workflows/dist/dashboard/scanner.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/server-factory.d.ts +14 -1
- package/clinkx-workflows/dist/dashboard/server-factory.js +73 -21
- package/clinkx-workflows/dist/dashboard/server-factory.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/session-log-contract.d.ts +223 -56
- package/clinkx-workflows/dist/dashboard/session-log-contract.js +26 -0
- package/clinkx-workflows/dist/dashboard/session-log-contract.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/session-log-journal.js +10 -3
- package/clinkx-workflows/dist/dashboard/session-log-journal.js.map +1 -1
- package/clinkx-workflows/dist/dashboard/session-log-redaction.d.ts +9 -1
- package/clinkx-workflows/dist/dashboard/session-log-redaction.js +793 -59
- package/clinkx-workflows/dist/dashboard/session-log-redaction.js.map +1 -1
- package/clinkx-workflows/dist/dashboard-ui/assets/index-JPHQVtn9.js +106 -0
- package/clinkx-workflows/dist/dashboard-ui/assets/style-DOMHk-j6.css +1 -0
- package/clinkx-workflows/dist/dashboard-ui/index.html +2 -2
- package/clinkx-workflows/dist/delegate-finalizer-policy.d.ts +26 -0
- package/clinkx-workflows/dist/delegate-finalizer-policy.js +72 -0
- package/clinkx-workflows/dist/delegate-finalizer-policy.js.map +1 -0
- package/clinkx-workflows/dist/delegate-signature.d.ts +14 -0
- package/clinkx-workflows/dist/delegate-signature.js +14 -0
- package/clinkx-workflows/dist/delegate-signature.js.map +1 -0
- package/clinkx-workflows/dist/delegate-validate.d.ts +32 -2
- package/clinkx-workflows/dist/delegate-validate.js +51 -0
- package/clinkx-workflows/dist/delegate-validate.js.map +1 -1
- package/clinkx-workflows/dist/engine.d.ts +113 -3
- package/clinkx-workflows/dist/engine.js +476 -80
- package/clinkx-workflows/dist/engine.js.map +1 -1
- package/clinkx-workflows/dist/errors.d.ts +22 -2
- package/clinkx-workflows/dist/errors.js +30 -2
- package/clinkx-workflows/dist/errors.js.map +1 -1
- package/clinkx-workflows/dist/fidelity.d.ts +47 -1
- package/clinkx-workflows/dist/fidelity.js +54 -1
- package/clinkx-workflows/dist/fidelity.js.map +1 -1
- package/clinkx-workflows/dist/fingerprint.d.ts +24 -6
- package/clinkx-workflows/dist/fingerprint.js +32 -9
- package/clinkx-workflows/dist/fingerprint.js.map +1 -1
- package/clinkx-workflows/dist/index.js +53 -1
- package/clinkx-workflows/dist/index.js.map +1 -1
- package/clinkx-workflows/dist/logger.d.ts +1 -1
- package/clinkx-workflows/dist/logger.js +17 -3
- package/clinkx-workflows/dist/logger.js.map +1 -1
- package/clinkx-workflows/dist/monotonic-clock.d.ts +19 -0
- package/clinkx-workflows/dist/monotonic-clock.js +22 -0
- package/clinkx-workflows/dist/monotonic-clock.js.map +1 -0
- package/clinkx-workflows/dist/plan-review/contract.d.ts +52 -52
- package/clinkx-workflows/dist/plan-review/publication.d.ts +4 -4
- package/clinkx-workflows/dist/plan-review/run-state.d.ts +16 -16
- package/clinkx-workflows/dist/roster-contract.d.ts +889 -0
- package/clinkx-workflows/dist/roster-contract.js +180 -0
- package/clinkx-workflows/dist/roster-contract.js.map +1 -0
- package/clinkx-workflows/dist/rosters.d.ts +14 -0
- package/clinkx-workflows/dist/rosters.js +169 -0
- package/clinkx-workflows/dist/rosters.js.map +1 -0
- package/clinkx-workflows/dist/run-health.d.ts +7 -0
- package/clinkx-workflows/dist/run-health.js +25 -0
- package/clinkx-workflows/dist/run-health.js.map +1 -0
- package/clinkx-workflows/dist/schema.d.ts +64 -0
- package/clinkx-workflows/dist/schema.js +24 -0
- package/clinkx-workflows/dist/schema.js.map +1 -1
- package/clinkx-workflows/dist/server.js +2 -0
- package/clinkx-workflows/dist/server.js.map +1 -1
- package/clinkx-workflows/dist/shutdown.d.ts +15 -2
- package/clinkx-workflows/dist/shutdown.js +60 -16
- package/clinkx-workflows/dist/shutdown.js.map +1 -1
- package/clinkx-workflows/dist/state-schema.d.ts +23 -0
- package/clinkx-workflows/dist/state.d.ts +5 -0
- package/clinkx-workflows/dist/state.js +128 -21
- package/clinkx-workflows/dist/state.js.map +1 -1
- package/clinkx-workflows/dist/stdio-watchdog.d.ts +52 -0
- package/clinkx-workflows/dist/stdio-watchdog.js +212 -0
- package/clinkx-workflows/dist/stdio-watchdog.js.map +1 -0
- package/clinkx-workflows/dist/types.d.ts +6 -0
- package/clinkx-workflows/dist/validators/council.d.ts +50 -50
- package/clinkx-workflows/dist/validators/plan-review.d.ts +3 -3
- package/clinkx-workflows/dist/workflow-tools.d.ts +70 -0
- package/clinkx-workflows/dist/workflow-tools.js +760 -168
- package/clinkx-workflows/dist/workflow-tools.js.map +1 -1
- package/clinkx-workflows/templates/council/answer-chairman.txt +3 -0
- package/clinkx-workflows/templates/council/answer-cross-reviewer.txt +3 -0
- package/clinkx-workflows/templates/council/answer-specialist.txt +3 -0
- package/clinkx-workflows/templates/council/chairman.txt +3 -0
- package/clinkx-workflows/templates/council/code-review-chairman.txt +3 -0
- package/clinkx-workflows/templates/council/code-review-cross-reviewer.txt +3 -0
- package/clinkx-workflows/templates/council/code-review-reviewer.txt +3 -0
- package/clinkx-workflows/templates/council/debug-chairman.txt +3 -0
- package/clinkx-workflows/templates/council/debug-cross-reviewer.txt +3 -0
- package/clinkx-workflows/templates/council/debug-debugger.txt +3 -0
- package/clinkx-workflows/templates/council/discover-analyst.txt +3 -0
- package/clinkx-workflows/templates/council/discover-chairman.txt +3 -0
- package/clinkx-workflows/templates/council/discover-cross-reviewer.txt +3 -0
- package/clinkx-workflows/templates/council/member.txt +3 -0
- package/clinkx-workflows/templates/council/plan-review-chairman.txt +3 -0
- package/clinkx-workflows/templates/council/plan-review-cross-reviewer.txt +3 -0
- package/clinkx-workflows/templates/council/plan-review-reviewer.txt +3 -0
- package/clinkx-workflows/templates/council/reviewer.txt +3 -0
- package/clinkx-workflows/workflows/council-answer.yaml +3 -0
- package/clinkx-workflows/workflows/council-code-review.yaml +3 -0
- package/clinkx-workflows/workflows/council-debug.yaml +3 -0
- package/clinkx-workflows/workflows/council-default.yaml +7 -0
- package/clinkx-workflows/workflows/council-discover.yaml +3 -0
- package/clinkx-workflows/workflows/council-plan-review.yaml +3 -0
- package/conf/adapters/agy.json +9 -2
- package/conf/adapters/claude.json +7 -0
- package/conf/adapters/codex.json +7 -0
- package/conf/adapters/glm.json +19 -3
- package/conf/adapters/grok.json +9 -2
- package/conf/adapters/hapi/agy.json +9 -2
- package/conf/adapters/hapi/claude.json +7 -0
- package/conf/adapters/hapi/codex.json +7 -0
- package/conf/adapters/hapi/glm.json +20 -4
- package/conf/rosters/default-council.json +21 -0
- package/dist/activity-journal.d.ts +17 -3
- package/dist/activity-journal.js +404 -79
- package/dist/activity-journal.js.map +1 -1
- package/dist/codex/agent-tools.js +36 -0
- package/dist/codex/agent-tools.js.map +1 -1
- package/dist/codex/app-server-client.d.ts +3 -0
- package/dist/codex/app-server-client.js +11 -0
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/app-server-registry.d.ts +18 -0
- package/dist/codex/app-server-registry.js +88 -2
- package/dist/codex/app-server-registry.js.map +1 -1
- package/dist/codex/client-types.d.ts +7 -1
- package/dist/codex/protocol.d.ts +4 -4
- package/dist/config.d.ts +220 -23
- package/dist/config.js +104 -1
- package/dist/config.js.map +1 -1
- package/dist/context-builder/bundle.d.ts +13 -0
- package/dist/context-builder/bundle.js +46 -0
- package/dist/context-builder/bundle.js.map +1 -1
- package/dist/context-builder/delegate-finalizer-effective.d.ts +33 -0
- package/dist/context-builder/delegate-finalizer-effective.js +82 -0
- package/dist/context-builder/delegate-finalizer-effective.js.map +1 -0
- package/dist/context-builder/delegate-packet.d.ts +18 -0
- package/dist/context-builder/delegate-packet.js +73 -9
- package/dist/context-builder/delegate-packet.js.map +1 -1
- package/dist/context-builder/delegate-reconstruction.d.ts +29 -0
- package/dist/context-builder/delegate-reconstruction.js +110 -41
- package/dist/context-builder/delegate-reconstruction.js.map +1 -1
- package/dist/context-builder/delegate-validation.d.ts +31 -0
- package/dist/context-builder/delegate-validation.js +87 -10
- package/dist/context-builder/delegate-validation.js.map +1 -1
- package/dist/context-builder/delegate.d.ts +9 -0
- package/dist/context-builder/delegate.js +210 -59
- package/dist/context-builder/delegate.js.map +1 -1
- package/dist/context-builder/diagnostics.d.ts +1 -1
- package/dist/context-builder/diagnostics.js.map +1 -1
- package/dist/context-builder/discovery-progress.d.ts +25 -0
- package/dist/context-builder/discovery-progress.js +64 -0
- package/dist/context-builder/discovery-progress.js.map +1 -0
- package/dist/context-builder/discovery-watchdog.d.ts +15 -0
- package/dist/context-builder/discovery-watchdog.js +39 -0
- package/dist/context-builder/discovery-watchdog.js.map +1 -0
- package/dist/context-builder/discovery.d.ts +7 -0
- package/dist/context-builder/discovery.js +119 -7
- package/dist/context-builder/discovery.js.map +1 -1
- package/dist/context-builder/external-gaps.d.ts +73 -0
- package/dist/context-builder/external-gaps.js +248 -0
- package/dist/context-builder/external-gaps.js.map +1 -0
- package/dist/context-builder/globs.d.ts +1 -0
- package/dist/context-builder/globs.js +15 -0
- package/dist/context-builder/globs.js.map +1 -1
- package/dist/context-builder/handler.d.ts +42 -1
- package/dist/context-builder/handler.js +690 -62
- package/dist/context-builder/handler.js.map +1 -1
- package/dist/context-builder/invocation-sidecar.d.ts +41 -0
- package/dist/context-builder/invocation-sidecar.js +189 -0
- package/dist/context-builder/invocation-sidecar.js.map +1 -0
- package/dist/context-builder/lifecycle-contract.d.ts +51 -51
- package/dist/context-builder/mutation-lock.d.ts +32 -0
- package/dist/context-builder/mutation-lock.js +321 -0
- package/dist/context-builder/mutation-lock.js.map +1 -0
- package/dist/context-builder/review-coverage.d.ts +32 -0
- package/dist/context-builder/review-coverage.js +130 -23
- package/dist/context-builder/review-coverage.js.map +1 -1
- package/dist/context-builder/schema.d.ts +76 -1
- package/dist/context-builder/schema.js +21 -1
- package/dist/context-builder/schema.js.map +1 -1
- package/dist/context-builder/secrets.d.ts +31 -0
- package/dist/context-builder/secrets.js +865 -83
- package/dist/context-builder/secrets.js.map +1 -1
- package/dist/context-builder/status.d.ts +1 -1
- package/dist/context-builder/status.js +1 -0
- package/dist/context-builder/status.js.map +1 -1
- package/dist/context-builder/storage.d.ts +29 -5
- package/dist/context-builder/storage.js +311 -236
- package/dist/context-builder/storage.js.map +1 -1
- package/dist/context-builder/versions.d.ts +19 -4
- package/dist/context-builder/versions.js +19 -4
- package/dist/context-builder/versions.js.map +1 -1
- package/dist/context-builder/workflow-runner.d.ts +6 -0
- package/dist/context-builder/workflow-runner.js +363 -173
- package/dist/context-builder/workflow-runner.js.map +1 -1
- package/dist/dashboard-adapter-catalog.js +7 -0
- package/dist/dashboard-adapter-catalog.js.map +1 -1
- package/dist/dashboard-cli.d.ts +2 -0
- package/dist/dashboard-cli.js +40 -2
- package/dist/dashboard-cli.js.map +1 -1
- package/dist/dashboard-companion/client.d.ts +1 -0
- package/dist/dashboard-companion/client.js +22 -3
- package/dist/dashboard-companion/client.js.map +1 -1
- package/dist/dashboard-companion/protocol.js +4 -1
- package/dist/dashboard-companion/protocol.js.map +1 -1
- package/dist/dashboard-gateway/index.d.ts +1 -0
- package/dist/dashboard-gateway/index.js +33 -2
- package/dist/dashboard-gateway/index.js.map +1 -1
- package/dist/handler.js +5 -1
- package/dist/handler.js.map +1 -1
- package/dist/index.d.ts +18 -1
- package/dist/index.js +145 -7
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.js +18 -3
- package/dist/logger.js.map +1 -1
- package/dist/parsers/agy-stream-json.d.ts +14 -0
- package/dist/parsers/agy-stream-json.js +172 -0
- package/dist/parsers/agy-stream-json.js.map +1 -0
- package/dist/parsers/extract.js +5 -1
- package/dist/parsers/extract.js.map +1 -1
- package/dist/parsers/observed-invocation.d.ts +20 -0
- package/dist/parsers/observed-invocation.js +42 -0
- package/dist/parsers/observed-invocation.js.map +1 -0
- package/dist/pipeline.d.ts +13 -0
- package/dist/pipeline.js +60 -10
- package/dist/pipeline.js.map +1 -1
- package/dist/progress-report/lock.d.ts +74 -0
- package/dist/progress-report/lock.js +343 -0
- package/dist/progress-report/lock.js.map +1 -0
- package/dist/progress-report/schema.d.ts +808 -0
- package/dist/progress-report/schema.js +119 -0
- package/dist/progress-report/schema.js.map +1 -0
- package/dist/progress-report/store.d.ts +66 -0
- package/dist/progress-report/store.js +766 -0
- package/dist/progress-report/store.js.map +1 -0
- package/dist/progress-report/tools.d.ts +20 -0
- package/dist/progress-report/tools.js +141 -0
- package/dist/progress-report/tools.js.map +1 -0
- package/dist/prompt-mode.d.ts +1 -1
- package/dist/prompt-mode.js +7 -2
- package/dist/prompt-mode.js.map +1 -1
- package/dist/runner.d.ts +7 -0
- package/dist/runner.js +10 -3
- package/dist/runner.js.map +1 -1
- package/dist/safety.d.ts +50 -0
- package/dist/safety.js +182 -1
- package/dist/safety.js.map +1 -1
- package/dist/schema.d.ts +8 -0
- package/dist/schema.js +20 -0
- package/dist/schema.js.map +1 -1
- package/dist/server.d.ts +6 -1
- package/dist/server.js +94 -8
- package/dist/server.js.map +1 -1
- package/dist/session-log-stream.d.ts +1 -1
- package/dist/session-log-stream.js +280 -33
- package/dist/session-log-stream.js.map +1 -1
- package/dist/stdio-activity.d.ts +28 -0
- package/dist/stdio-activity.js +72 -0
- package/dist/stdio-activity.js.map +1 -0
- package/package.json +2 -1
- package/clinkx-workflows/dist/dashboard-ui/assets/index-DOkMXTfB.js +0 -25
- package/clinkx-workflows/dist/dashboard-ui/assets/style-ChJsn0KD.css +0 -1
package/dist/logger.js
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
import pino from "pino";
|
|
2
2
|
const LOG_LEVEL = process.env["CLINKX_LOG_LEVEL"] ?? "info";
|
|
3
|
-
//
|
|
4
|
-
|
|
3
|
+
// Use Node's stderr stream directly. SonicBoom's asynchronous destination
|
|
4
|
+
// installs a synchronous exit flush that can retry forever after a Darwin
|
|
5
|
+
// STDIO peer closes fd 2, blocking process.exit and every watchdog timer.
|
|
6
|
+
// Diagnostics remain best-effort; they must never prevent process teardown.
|
|
7
|
+
let stderrFailed = false;
|
|
8
|
+
process.stderr.on("error", () => {
|
|
9
|
+
// Keep the entrypoint's error listeners intact, but stop diagnostics from
|
|
10
|
+
// recursively producing EPIPE while those listeners initiate shutdown.
|
|
11
|
+
stderrFailed = true;
|
|
12
|
+
});
|
|
13
|
+
const stderrDestination = {
|
|
14
|
+
get fd() { return process.stderr.fd; },
|
|
15
|
+
write(message) {
|
|
16
|
+
if (!stderrFailed)
|
|
17
|
+
process.stderr.write(message);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
5
20
|
/**
|
|
6
21
|
* ClinkX logger — writes exclusively to stderr (fd 2).
|
|
7
22
|
*
|
|
@@ -16,7 +31,7 @@ export const logger = pino({
|
|
|
16
31
|
* Startup self-check: verify logger writes to stderr, not stdout.
|
|
17
32
|
* Fails fast if the invariant is violated.
|
|
18
33
|
*
|
|
19
|
-
* We inspect the
|
|
34
|
+
* We inspect the destination's `fd` property
|
|
20
35
|
* to confirm it points at fd 2 (stderr).
|
|
21
36
|
*/
|
|
22
37
|
export function assertStderrLogger() {
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC;AAE5D,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC;AAE5D,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IAC9B,0EAA0E;IAC1E,uEAAuE;IACvE,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC,CAAC,CAAC;AACH,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,KAAa,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAe;QACnB,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CACxB;IACE,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;CACjB,EACD,iBAAiB,CAClB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,iBAA+C,CAAC;IAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,EAAE,CAAC,4BAA4B;YACpE,mDAAmD,CACtD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Parser } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse agy `--output-format stream-json` NDJSON delivered over stdin.
|
|
4
|
+
*
|
|
5
|
+
* Discriminator is `event`, not Claude's `type`.
|
|
6
|
+
* Stream: init → step_update* → exactly one result (one-shot).
|
|
7
|
+
* Canonical text: event=result → result.response (first trimmed-nonempty string).
|
|
8
|
+
* Fallback: concatenate every agent_response text_delta in stream order.
|
|
9
|
+
* Also tolerate a single `--output-format json` object {status, response}
|
|
10
|
+
* with no wrapping `event`.
|
|
11
|
+
*
|
|
12
|
+
* Shipped invocation is stdin + `--output-format stream-json` (no `--print`).
|
|
13
|
+
*/
|
|
14
|
+
export declare const agyStreamJsonParser: Parser;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { preferredText } from "./utils.js";
|
|
2
|
+
const AGY_ERROR_MAX_CHARS = 4096;
|
|
3
|
+
function isRecord(value) {
|
|
4
|
+
return value != null && typeof value === "object" && !Array.isArray(value);
|
|
5
|
+
}
|
|
6
|
+
function sliceAgyError(value) {
|
|
7
|
+
if (typeof value !== "string" || value.trim().length === 0)
|
|
8
|
+
return undefined;
|
|
9
|
+
return value.slice(0, AGY_ERROR_MAX_CHARS);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse agy `--output-format stream-json` NDJSON delivered over stdin.
|
|
13
|
+
*
|
|
14
|
+
* Discriminator is `event`, not Claude's `type`.
|
|
15
|
+
* Stream: init → step_update* → exactly one result (one-shot).
|
|
16
|
+
* Canonical text: event=result → result.response (first trimmed-nonempty string).
|
|
17
|
+
* Fallback: concatenate every agent_response text_delta in stream order.
|
|
18
|
+
* Also tolerate a single `--output-format json` object {status, response}
|
|
19
|
+
* with no wrapping `event`.
|
|
20
|
+
*
|
|
21
|
+
* Shipped invocation is stdin + `--output-format stream-json` (no `--print`).
|
|
22
|
+
*/
|
|
23
|
+
export const agyStreamJsonParser = {
|
|
24
|
+
name: "agy_stream_json",
|
|
25
|
+
preferredBuffers: ["stdoutHead", "stdoutTail"],
|
|
26
|
+
parse(input) {
|
|
27
|
+
const text = preferredText(input, ["stdoutHead", "stdoutTail"]);
|
|
28
|
+
if (text.trim().length === 0)
|
|
29
|
+
return null;
|
|
30
|
+
const lines = text
|
|
31
|
+
.split("\n")
|
|
32
|
+
.map((l) => l.trim())
|
|
33
|
+
.filter((l) => l.length > 0);
|
|
34
|
+
let resultText = null;
|
|
35
|
+
let resultLatched = false;
|
|
36
|
+
let resultEventCount = 0;
|
|
37
|
+
let sawResultEvent = false;
|
|
38
|
+
let invalidResponse = false;
|
|
39
|
+
let agyStatus;
|
|
40
|
+
let agyError;
|
|
41
|
+
let assistantText = "";
|
|
42
|
+
let assistantEventCount = 0;
|
|
43
|
+
const applyResultPayload = (payload) => {
|
|
44
|
+
sawResultEvent = true;
|
|
45
|
+
resultEventCount++;
|
|
46
|
+
const status = payload["status"];
|
|
47
|
+
if (agyStatus === undefined && typeof status === "string") {
|
|
48
|
+
agyStatus = status;
|
|
49
|
+
}
|
|
50
|
+
if (agyError === undefined) {
|
|
51
|
+
const captured = sliceAgyError(payload["error"]);
|
|
52
|
+
if (captured !== undefined) {
|
|
53
|
+
agyError = captured;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Present non-string response: fail-closed only if no nonempty string
|
|
57
|
+
// has already won. Otherwise ignore the late malformed event (first-wins).
|
|
58
|
+
if ("response" in payload && typeof payload["response"] !== "string") {
|
|
59
|
+
if (resultText == null)
|
|
60
|
+
invalidResponse = true;
|
|
61
|
+
else
|
|
62
|
+
resultLatched = true;
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const response = payload["response"];
|
|
66
|
+
if (typeof response === "string" && response.trim().length > 0) {
|
|
67
|
+
if (resultText == null) {
|
|
68
|
+
resultText = response;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
resultLatched = true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Empty/whitespace SUCCESS does not occupy resultText (Claude latch split).
|
|
75
|
+
};
|
|
76
|
+
for (const line of lines) {
|
|
77
|
+
let parsed;
|
|
78
|
+
try {
|
|
79
|
+
parsed = JSON.parse(line);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (!isRecord(parsed))
|
|
85
|
+
continue;
|
|
86
|
+
if (parsed["event"] === "result" && isRecord(parsed["result"])) {
|
|
87
|
+
applyResultPayload(parsed["result"]);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (parsed["event"] !== "step_update")
|
|
91
|
+
continue;
|
|
92
|
+
const step = parsed["step_update"];
|
|
93
|
+
if (!isRecord(step))
|
|
94
|
+
continue;
|
|
95
|
+
if (step["step_type"] !== "agent_response")
|
|
96
|
+
continue;
|
|
97
|
+
const delta = step["text_delta"];
|
|
98
|
+
if (typeof delta !== "string")
|
|
99
|
+
continue;
|
|
100
|
+
assistantEventCount++;
|
|
101
|
+
assistantText += delta;
|
|
102
|
+
}
|
|
103
|
+
if (!sawResultEvent) {
|
|
104
|
+
let envelope;
|
|
105
|
+
try {
|
|
106
|
+
envelope = JSON.parse(text.trim());
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
envelope = undefined;
|
|
110
|
+
}
|
|
111
|
+
if (isRecord(envelope) &&
|
|
112
|
+
typeof envelope["response"] === "string" &&
|
|
113
|
+
typeof envelope["status"] === "string") {
|
|
114
|
+
applyResultPayload(envelope);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (!sawResultEvent) {
|
|
118
|
+
if (assistantText.length === 0)
|
|
119
|
+
return null;
|
|
120
|
+
return {
|
|
121
|
+
content: assistantText,
|
|
122
|
+
source: "parser",
|
|
123
|
+
metadata: {
|
|
124
|
+
parser: "agy_stream_json",
|
|
125
|
+
resultEventCount,
|
|
126
|
+
resultLatched,
|
|
127
|
+
assistantEventCount,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const metadata = {
|
|
132
|
+
parser: "agy_stream_json",
|
|
133
|
+
resultEventCount,
|
|
134
|
+
resultLatched,
|
|
135
|
+
assistantEventCount,
|
|
136
|
+
};
|
|
137
|
+
if (agyStatus !== undefined) {
|
|
138
|
+
metadata["agy_status"] = agyStatus;
|
|
139
|
+
}
|
|
140
|
+
if (agyError !== undefined) {
|
|
141
|
+
metadata["agy_error"] = agyError;
|
|
142
|
+
}
|
|
143
|
+
if (invalidResponse) {
|
|
144
|
+
metadata["parse_status"] = "invalid";
|
|
145
|
+
metadata["rejection_reason"] = "provider_result_invalid_response";
|
|
146
|
+
return {
|
|
147
|
+
content: agyError ?? "",
|
|
148
|
+
source: "parser",
|
|
149
|
+
metadata,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const content = resultText ?? "";
|
|
153
|
+
const contentEmpty = content.trim().length === 0;
|
|
154
|
+
if (contentEmpty &&
|
|
155
|
+
agyStatus !== undefined &&
|
|
156
|
+
agyStatus !== "SUCCESS") {
|
|
157
|
+
metadata["parse_status"] = "invalid";
|
|
158
|
+
metadata["rejection_reason"] = "provider_result_failed";
|
|
159
|
+
return {
|
|
160
|
+
content: agyError ?? "",
|
|
161
|
+
source: "parser",
|
|
162
|
+
metadata,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
content,
|
|
167
|
+
source: "parser",
|
|
168
|
+
metadata,
|
|
169
|
+
};
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
//# sourceMappingURL=agy-stream-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agy-stream-json.js","sourceRoot":"","sources":["../../src/parsers/agy-stream-json.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/extract.js
CHANGED
|
@@ -4,6 +4,7 @@ import { jsonExtractParser } from "./json-extract.js";
|
|
|
4
4
|
import { codexJsonlParser } from "./codex-jsonl.js";
|
|
5
5
|
import { claudeJsonParser } from "./claude-json.js";
|
|
6
6
|
import { claudeStreamJsonParser } from "./claude-stream-json.js";
|
|
7
|
+
import { agyStreamJsonParser } from "./agy-stream-json.js";
|
|
7
8
|
import { extractSummary } from "./summary.js";
|
|
8
9
|
import { readResultFile } from "../result-contract.js";
|
|
9
10
|
import { stripAnsi } from "../strip-ansi.js";
|
|
@@ -14,6 +15,7 @@ const PARSERS = [
|
|
|
14
15
|
codexJsonlParser,
|
|
15
16
|
claudeJsonParser,
|
|
16
17
|
claudeStreamJsonParser,
|
|
18
|
+
agyStreamJsonParser,
|
|
17
19
|
];
|
|
18
20
|
export function parserByName(name) {
|
|
19
21
|
return PARSERS.find((p) => p.name === name) ?? null;
|
|
@@ -37,7 +39,9 @@ async function tryReadResultContract(workdir, contract) {
|
|
|
37
39
|
}
|
|
38
40
|
function rawStdoutFallback(input) {
|
|
39
41
|
// JSONL adapters emit final events late; prefer tail.
|
|
40
|
-
const preferTailFirst = input.adapter.parser === "codex_jsonl" ||
|
|
42
|
+
const preferTailFirst = input.adapter.parser === "codex_jsonl" ||
|
|
43
|
+
input.adapter.parser === "claude_stream_json" ||
|
|
44
|
+
input.adapter.parser === "agy_stream_json";
|
|
41
45
|
const content = preferTailFirst
|
|
42
46
|
? input.stdoutTail.length > 0
|
|
43
47
|
? input.stdoutTail
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/parsers/extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAyD,MAAM,uBAAuB,CAAC;AAC9G,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAmBtC,MAAM,OAAO,GAAa;IACxB,UAAU;IACV,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/parsers/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PURE observer for the Claude-family stream-json `system/init` model.
|
|
3
|
+
*
|
|
4
|
+
* Extracts ONLY the model id from the first `type:"system"` + `subtype:"init"`
|
|
5
|
+
* event whose `model` is a non-empty string. Deliberately separate from
|
|
6
|
+
* `claudeStreamJsonParser`, whose result/assistant text extraction must not
|
|
7
|
+
* change: this is a side-effect-free read for invocation observability.
|
|
8
|
+
*
|
|
9
|
+
* Semantics:
|
|
10
|
+
* - split on newlines; each non-empty trimmed line is JSON.parse'd in a
|
|
11
|
+
* try/catch; unparseable lines are skipped
|
|
12
|
+
* - the first object with type==="system" AND subtype==="init" AND a
|
|
13
|
+
* non-empty string `model` WINS; later init events are ignored
|
|
14
|
+
* - assistant `message.model` and effort fields are ignored entirely
|
|
15
|
+
* - no match → {} (key omitted, never `model: undefined`)
|
|
16
|
+
* - never throws, even on truncated or adversarial input
|
|
17
|
+
*/
|
|
18
|
+
export declare function observeClaudeStreamJsonInit(text: string): {
|
|
19
|
+
readonly model?: string;
|
|
20
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PURE observer for the Claude-family stream-json `system/init` model.
|
|
3
|
+
*
|
|
4
|
+
* Extracts ONLY the model id from the first `type:"system"` + `subtype:"init"`
|
|
5
|
+
* event whose `model` is a non-empty string. Deliberately separate from
|
|
6
|
+
* `claudeStreamJsonParser`, whose result/assistant text extraction must not
|
|
7
|
+
* change: this is a side-effect-free read for invocation observability.
|
|
8
|
+
*
|
|
9
|
+
* Semantics:
|
|
10
|
+
* - split on newlines; each non-empty trimmed line is JSON.parse'd in a
|
|
11
|
+
* try/catch; unparseable lines are skipped
|
|
12
|
+
* - the first object with type==="system" AND subtype==="init" AND a
|
|
13
|
+
* non-empty string `model` WINS; later init events are ignored
|
|
14
|
+
* - assistant `message.model` and effort fields are ignored entirely
|
|
15
|
+
* - no match → {} (key omitted, never `model: undefined`)
|
|
16
|
+
* - never throws, even on truncated or adversarial input
|
|
17
|
+
*/
|
|
18
|
+
export function observeClaudeStreamJsonInit(text) {
|
|
19
|
+
for (const line of text.split("\n")) {
|
|
20
|
+
const trimmed = line.trim();
|
|
21
|
+
if (trimmed.length === 0)
|
|
22
|
+
continue;
|
|
23
|
+
let parsed;
|
|
24
|
+
try {
|
|
25
|
+
parsed = JSON.parse(trimmed);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (parsed == null || typeof parsed !== "object")
|
|
31
|
+
continue;
|
|
32
|
+
const rec = parsed;
|
|
33
|
+
if (rec["type"] !== "system" || rec["subtype"] !== "init")
|
|
34
|
+
continue;
|
|
35
|
+
const model = rec["model"];
|
|
36
|
+
if (typeof model !== "string" || model.length === 0)
|
|
37
|
+
continue;
|
|
38
|
+
return { model };
|
|
39
|
+
}
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=observed-invocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observed-invocation.js","sourceRoot":"","sources":["../../src/parsers/observed-invocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAY;IAGtD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEnC,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,SAAS;QAC3D,MAAM,GAAG,GAAG,MAAiC,CAAC;QAE9C,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM;YAAE,SAAS;QAEpE,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAE9D,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/dist/pipeline.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ClinkInput } from "./schema.js";
|
|
|
2
2
|
import type { AdapterRegistry } from "./registry.js";
|
|
3
3
|
import { type RunResult } from "./runner.js";
|
|
4
4
|
import type { SessionLogOwnerV1 } from "../clinkx-workflows/dist/dashboard/session-log-contract.js";
|
|
5
|
+
import type { ObservedInvocationV1 } from "../clinkx-workflows/dist/dashboard/invocation-contract.js";
|
|
5
6
|
import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
7
|
import type { ActivityJournal } from "./activity-journal.js";
|
|
7
8
|
export declare function pickPreferTail(head: string, tail: string): string;
|
|
@@ -30,6 +31,8 @@ export interface PipelineResult {
|
|
|
30
31
|
}>;
|
|
31
32
|
isError?: boolean;
|
|
32
33
|
jsonFidelity?: PipelineJsonFidelityMetadata;
|
|
34
|
+
/** Runtime-observed invocation knobs reported by the provider; omit-when-absent. */
|
|
35
|
+
observedInvocation?: ObservedInvocationV1;
|
|
33
36
|
}
|
|
34
37
|
export type PipelineJsonTopLevelType = "object" | "array" | "string" | "number" | "boolean" | "null";
|
|
35
38
|
export interface PipelineJsonFidelityMetadata {
|
|
@@ -65,6 +68,14 @@ export interface PipelineJsonFidelityMetadata {
|
|
|
65
68
|
readonly acceptable: boolean;
|
|
66
69
|
readonly violations: string[];
|
|
67
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* result.isError as it stood before the strict block, so a delegate caller
|
|
73
|
+
* can tell a provider failure (bad model, HTTP 402, non-zero exit) from a
|
|
74
|
+
* fidelity-only rejection, which the strict block also marks isError.
|
|
75
|
+
*/
|
|
76
|
+
readonly preStrictIsError: boolean;
|
|
77
|
+
/** Primary semantic failure reason (e.g. "invalid_json_output"), if any. */
|
|
78
|
+
readonly semanticFailureReason: string | null;
|
|
68
79
|
}
|
|
69
80
|
export declare function executePipeline(input: ClinkInput, registry: AdapterRegistry, options?: {
|
|
70
81
|
signal?: AbortSignal;
|
|
@@ -74,6 +85,8 @@ export declare function executePipeline(input: ClinkInput, registry: AdapterRegi
|
|
|
74
85
|
};
|
|
75
86
|
jsonFidelity?: "strict";
|
|
76
87
|
allowTimeoutBelowAdapter?: boolean;
|
|
88
|
+
/** Floor for the subprocess startup idle timeout (delegate calls only). */
|
|
89
|
+
minIdleStartupSeconds?: number;
|
|
77
90
|
activityJournal?: ActivityJournal;
|
|
78
91
|
sessionLogOwner?: SessionLogOwnerV1;
|
|
79
92
|
}): Promise<PipelineResult>;
|
package/dist/pipeline.js
CHANGED
|
@@ -6,10 +6,13 @@ import { runSubprocess } from "./runner.js";
|
|
|
6
6
|
import { directSessionLogsEnabled } from "./config.js";
|
|
7
7
|
import { Semaphore } from "./concurrency.js";
|
|
8
8
|
import { CancellationError, InvalidParamsError } from "./errors.js";
|
|
9
|
+
import { resolveInvocationApplication } from "./safety.js";
|
|
9
10
|
import { extractResult } from "./parsers/extract.js";
|
|
10
11
|
import { extractSummary } from "./parsers/summary.js";
|
|
11
12
|
import { findAllJsonBlocks } from "./parsers/utils.js";
|
|
13
|
+
import { observeClaudeStreamJsonInit } from "./parsers/observed-invocation.js";
|
|
12
14
|
import { stripAnsi } from "./strip-ansi.js";
|
|
15
|
+
import { buildObservedInvocationV1 } from "../clinkx-workflows/dist/dashboard/invocation-contract.js";
|
|
13
16
|
import { ProgressReporter } from "./progress.js";
|
|
14
17
|
import { logger } from "./logger.js";
|
|
15
18
|
const DEFAULT_MAX_RESPONSE_CHARS = 20_000;
|
|
@@ -259,8 +262,19 @@ export async function executePipeline(input, registry, options) {
|
|
|
259
262
|
const mergedArgs = roleConfig?.extra_args
|
|
260
263
|
? [...baseAdapter.args, ...roleConfig.extra_args]
|
|
261
264
|
: baseAdapter.args;
|
|
262
|
-
const
|
|
263
|
-
|
|
265
|
+
const knobs = {
|
|
266
|
+
...(input.model != null ? { model: input.model } : {}),
|
|
267
|
+
...(input.effort != null ? { effort: input.effort } : {}),
|
|
268
|
+
};
|
|
269
|
+
const invocationApplication = resolveInvocationApplication(baseAdapter, mergedArgs, knobs);
|
|
270
|
+
const effectiveArgs = invocationApplication.args;
|
|
271
|
+
const invocation = invocationApplication.audit;
|
|
272
|
+
// resolveInvocationApplication always returns a fresh argv array, even with no
|
|
273
|
+
// overrides — compare request/role intent, not array identity.
|
|
274
|
+
const adapter = effectiveParser !== baseAdapter.parser ||
|
|
275
|
+
roleConfig?.extra_args != null ||
|
|
276
|
+
input.model != null ||
|
|
277
|
+
input.effort != null
|
|
264
278
|
? { ...baseAdapter, parser: effectiveParser, args: effectiveArgs }
|
|
265
279
|
: baseAdapter;
|
|
266
280
|
// 1c. App-server backend boundary — the synchronous pipeline (reached by the
|
|
@@ -308,6 +322,7 @@ export async function executePipeline(input, registry, options) {
|
|
|
308
322
|
adapter: adapter.name,
|
|
309
323
|
role: input.role ?? "default",
|
|
310
324
|
projectFolders: [process.cwd()],
|
|
325
|
+
invocation,
|
|
311
326
|
});
|
|
312
327
|
}
|
|
313
328
|
if (options?.progress) {
|
|
@@ -349,6 +364,9 @@ export async function executePipeline(input, registry, options) {
|
|
|
349
364
|
if (adapter.idle_timeout_startup_seconds != null) {
|
|
350
365
|
runOptions.idleTimeoutStartupSeconds = adapter.idle_timeout_startup_seconds;
|
|
351
366
|
}
|
|
367
|
+
if (options?.minIdleStartupSeconds != null) {
|
|
368
|
+
runOptions.minIdleTimeoutStartupSeconds = options.minIdleStartupSeconds;
|
|
369
|
+
}
|
|
352
370
|
if (options?.signal != null) {
|
|
353
371
|
runOptions.signal = options.signal;
|
|
354
372
|
}
|
|
@@ -411,6 +429,22 @@ export async function executePipeline(input, registry, options) {
|
|
|
411
429
|
exitCode: runResult.exitCode,
|
|
412
430
|
tolerateNonzeroExitForParse: adapter.tolerate_nonzero_exit_for_parse,
|
|
413
431
|
});
|
|
432
|
+
// 7a. Runtime invocation observability — Claude-family stream-json emits
|
|
433
|
+
// the effective model in its first system/init event. Purely additive:
|
|
434
|
+
// observer trouble never fails the call.
|
|
435
|
+
let observedInvocation;
|
|
436
|
+
try {
|
|
437
|
+
if (adapter.parser === "claude_stream_json") {
|
|
438
|
+
const { model } = observeClaudeStreamJsonInit(runResult.stdoutHead);
|
|
439
|
+
observedInvocation = buildObservedInvocationV1("claude_stream_json_init", model === undefined ? {} : { model });
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
catch (error) {
|
|
443
|
+
logger.debug({
|
|
444
|
+
adapter: adapter.name,
|
|
445
|
+
err: error instanceof Error ? error.message : String(error),
|
|
446
|
+
}, "observed invocation extraction failed; continuing without it");
|
|
447
|
+
}
|
|
414
448
|
let output = extracted.result.content;
|
|
415
449
|
const parseMetadata = extracted.result.metadata;
|
|
416
450
|
const parseStatus = typeof parseMetadata?.["parse_status"] === "string"
|
|
@@ -704,7 +738,8 @@ export async function executePipeline(input, registry, options) {
|
|
|
704
738
|
if (runResult.terminationReason !== "none") {
|
|
705
739
|
violations.push("terminated");
|
|
706
740
|
}
|
|
707
|
-
|
|
741
|
+
const preStrictIsError = result.isError === true;
|
|
742
|
+
if (preStrictIsError) {
|
|
708
743
|
violations.push("pipeline_error");
|
|
709
744
|
}
|
|
710
745
|
const acceptable = violations.length === 0;
|
|
@@ -741,6 +776,8 @@ export async function executePipeline(input, registry, options) {
|
|
|
741
776
|
acceptable,
|
|
742
777
|
violations,
|
|
743
778
|
},
|
|
779
|
+
preStrictIsError,
|
|
780
|
+
semanticFailureReason,
|
|
744
781
|
};
|
|
745
782
|
if (!acceptable) {
|
|
746
783
|
result.isError = true;
|
|
@@ -750,6 +787,9 @@ export async function executePipeline(input, registry, options) {
|
|
|
750
787
|
if (input.continuation_id && output && !result.isError) {
|
|
751
788
|
continuationCache.set(input.continuation_id, output);
|
|
752
789
|
}
|
|
790
|
+
if (observedInvocation !== undefined) {
|
|
791
|
+
result.observedInvocation = observedInvocation;
|
|
792
|
+
}
|
|
753
793
|
// Debug metadata (only when debug=true)
|
|
754
794
|
if (input.debug) {
|
|
755
795
|
result.content.push({
|
|
@@ -779,6 +819,11 @@ export async function executePipeline(input, registry, options) {
|
|
|
779
819
|
adapter_config_path: registry.getAdapterSource(adapter.name) ?? null,
|
|
780
820
|
adapter_command: adapter.command,
|
|
781
821
|
adapter_parser: adapter.parser,
|
|
822
|
+
...(input.model !== undefined ? { requested_model: input.model } : {}),
|
|
823
|
+
...(input.effort !== undefined ? { requested_effort: input.effort } : {}),
|
|
824
|
+
...(observedInvocation === undefined
|
|
825
|
+
? {}
|
|
826
|
+
: { observed_invocation: observedInvocation }),
|
|
782
827
|
thread_id: threadId,
|
|
783
828
|
codex_panic_class: panicClass ?? null,
|
|
784
829
|
...(semanticFailureReason != null
|
|
@@ -792,13 +837,18 @@ export async function executePipeline(input, registry, options) {
|
|
|
792
837
|
}),
|
|
793
838
|
});
|
|
794
839
|
}
|
|
795
|
-
await activity?.complete(
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
840
|
+
await activity?.complete({
|
|
841
|
+
...(result.isError === true
|
|
842
|
+
? { status: "failed", outcomeKind: "error" }
|
|
843
|
+
: {
|
|
844
|
+
status: "succeeded",
|
|
845
|
+
outcomeKind: "success",
|
|
846
|
+
resultText: result.content[0]?.text ?? "",
|
|
847
|
+
}),
|
|
848
|
+
...(observedInvocation === undefined
|
|
849
|
+
? {}
|
|
850
|
+
: { observedInvocation }),
|
|
851
|
+
});
|
|
802
852
|
return result;
|
|
803
853
|
}
|
|
804
854
|
catch (error) {
|