@the-open-engine/zeroshot 6.38.1 → 6.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/cli/event-copy.js +8 -7
- package/cli/event-copy.ts +12 -0
- package/cli/index.js +67 -48
- package/cli/json-export.js +61 -64
- package/cli/json-export.ts +112 -0
- package/cli/message-formatter-utils.js +68 -56
- package/cli/message-formatter-utils.ts +121 -0
- package/cli/message-formatters-normal.js +124 -259
- package/cli/message-formatters-normal.ts +250 -0
- package/cli/message-formatters-watch.js +81 -84
- package/cli/message-formatters-watch.ts +189 -0
- package/lib/cluster/generated/protocol-schema.cjs +1 -1
- package/lib/cluster/generated/protocol-schema.mjs +1 -1
- package/lib/cluster/generated/protocol.d.cts +8 -0
- package/lib/cluster/generated/protocol.d.mts +8 -0
- package/lib/cluster/generated/protocol.d.ts +8 -0
- package/lib/clusters-registry.d.ts +23 -0
- package/lib/clusters-registry.js +17 -29
- package/lib/completion.d.ts +12 -0
- package/lib/completion.js +84 -94
- package/lib/compose-utils.d.ts +32 -0
- package/lib/compose-utils.js +57 -72
- package/lib/detached-startup.d.ts +84 -0
- package/lib/detached-startup.js +232 -302
- package/lib/docker-config.d.ts +43 -0
- package/lib/docker-config.js +150 -325
- package/lib/docker-env-auth.d.ts +17 -0
- package/lib/docker-env-auth.js +75 -0
- package/lib/git-remote-utils.d.ts +48 -0
- package/lib/git-remote-utils.js +147 -213
- package/lib/id-detector.d.ts +15 -0
- package/lib/id-detector.js +37 -41
- package/lib/path-check.d.ts +30 -0
- package/lib/path-check.js +42 -45
- package/lib/process-liveness.d.ts +16 -0
- package/lib/process-liveness.js +19 -12
- package/lib/provider-credential-path.d.ts +16 -0
- package/lib/provider-credential-path.js +31 -29
- package/lib/provider-defaults.d.ts +30 -0
- package/lib/provider-defaults.js +47 -42
- package/lib/provider-detection.d.ts +11 -0
- package/lib/provider-detection.js +91 -54
- package/lib/provider-names.d.ts +38 -0
- package/lib/provider-names.js +56 -64
- package/lib/repo-settings.d.ts +28 -0
- package/lib/repo-settings.js +83 -59
- package/lib/run-mode.d.ts +21 -0
- package/lib/run-mode.js +21 -20
- package/lib/run-plan.d.ts +28 -0
- package/lib/run-plan.js +17 -16
- package/lib/settings/claude-auth.d.ts +35 -0
- package/lib/settings/claude-auth.js +30 -47
- package/lib/settings-defaults.d.ts +20 -0
- package/lib/settings-defaults.js +149 -0
- package/lib/settings-error.d.ts +7 -0
- package/lib/settings-error.js +8 -0
- package/lib/settings-issue-providers.d.ts +10 -0
- package/lib/settings-issue-providers.js +12 -0
- package/lib/settings-models.d.ts +22 -0
- package/lib/settings-models.js +93 -0
- package/lib/settings-storage.d.ts +23 -0
- package/lib/settings-storage.js +205 -0
- package/lib/settings-validation.d.ts +7 -0
- package/lib/settings-validation.js +182 -0
- package/lib/settings.d.ts +29 -0
- package/lib/settings.js +41 -736
- package/lib/setup-apply-types.d.ts +66 -0
- package/lib/setup-apply-types.js +2 -0
- package/lib/setup-apply.d.ts +39 -0
- package/lib/setup-apply.js +267 -264
- package/lib/setup-journal.d.ts +41 -0
- package/lib/setup-journal.js +119 -76
- package/lib/setup-plan-types.d.ts +102 -0
- package/lib/setup-plan-types.js +2 -0
- package/lib/setup-plan.d.ts +30 -0
- package/lib/setup-plan.js +300 -324
- package/lib/setup-undo.d.ts +44 -0
- package/lib/setup-undo.js +61 -74
- package/lib/start-cluster-config.d.ts +26 -0
- package/lib/start-cluster-config.js +56 -0
- package/lib/start-cluster-environment.d.ts +41 -0
- package/lib/start-cluster-environment.js +134 -0
- package/lib/start-cluster-run-options.d.ts +54 -0
- package/lib/start-cluster-run-options.js +148 -0
- package/lib/start-cluster.d.ts +64 -0
- package/lib/start-cluster.js +98 -454
- package/lib/stream-json-parser.d.ts +17 -0
- package/lib/stream-json-parser.js +51 -52
- package/npm-shrinkwrap.json +6 -8
- package/package.json +14 -8
- package/scripts/postinstall.js +27 -0
- package/scripts/rust-distribution.js +36 -45
- package/src/agent/agent-command-proofs-context.js +35 -45
- package/src/agent/agent-command-proofs-context.ts +87 -0
- package/src/agent/agent-config-settings.js +19 -0
- package/src/agent/agent-config-settings.ts +41 -0
- package/src/agent/agent-config.js +122 -231
- package/src/agent/agent-config.ts +285 -0
- package/src/agent/agent-context-builder.js +38 -273
- package/src/agent/agent-context-builder.ts +51 -0
- package/src/agent/agent-context-environment-sections.js +105 -0
- package/src/agent/agent-context-environment-sections.ts +134 -0
- package/src/agent/agent-context-packs.js +165 -0
- package/src/agent/agent-context-packs.ts +296 -0
- package/src/agent/agent-context-prompt-sections.js +100 -0
- package/src/agent/agent-context-prompt-sections.ts +148 -0
- package/src/agent/agent-context-sections.js +25 -334
- package/src/agent/agent-context-sections.ts +36 -0
- package/src/agent/agent-context-sources.js +96 -149
- package/src/agent/agent-context-sources.ts +253 -0
- package/src/agent/agent-context-types.js +2 -0
- package/src/agent/agent-context-types.ts +132 -0
- package/src/agent/agent-context-validation-sections.js +73 -0
- package/src/agent/agent-context-validation-sections.ts +129 -0
- package/src/agent/agent-input-injector.js +99 -118
- package/src/agent/agent-input-injector.ts +195 -0
- package/src/agent/agent-liveness-poll.js +74 -78
- package/src/agent/agent-liveness-poll.ts +163 -0
- package/src/agent/agent-quality-gate-schema.js +77 -86
- package/src/agent/agent-quality-gate-schema.ts +135 -0
- package/src/agent/agent-quality-gates-context.js +44 -50
- package/src/agent/agent-quality-gates-context.ts +91 -0
- package/src/agent/agent-stuck-detector.js +171 -239
- package/src/agent/agent-stuck-detector.ts +288 -0
- package/src/agent/agent-trigger-evaluator.js +29 -46
- package/src/agent/agent-trigger-evaluator.ts +98 -0
- package/src/agent/context-metrics.js +110 -141
- package/src/agent/context-metrics.ts +261 -0
- package/src/agent/context-pack-builder.js +72 -358
- package/src/agent/context-pack-builder.ts +105 -0
- package/src/agent/context-pack-core.js +70 -0
- package/src/agent/context-pack-core.ts +96 -0
- package/src/agent/context-pack-selection.js +119 -0
- package/src/agent/context-pack-selection.ts +187 -0
- package/src/agent/context-pack-truncation.js +139 -0
- package/src/agent/context-pack-truncation.ts +208 -0
- package/src/agent/context-pack-types.js +2 -0
- package/src/agent/context-pack-types.ts +98 -0
- package/src/agent/context-replay-policy.js +30 -39
- package/src/agent/context-replay-policy.ts +71 -0
- package/src/agent/critical-agent-policy.js +6 -10
- package/src/agent/critical-agent-policy.ts +20 -0
- package/src/agent/guidance-queue.js +74 -87
- package/src/agent/guidance-queue.ts +166 -0
- package/src/agent/output-extraction-error-detail.js +45 -0
- package/src/agent/output-extraction-error-detail.ts +49 -0
- package/src/agent/output-extraction-failures.js +125 -0
- package/src/agent/output-extraction-failures.ts +149 -0
- package/src/agent/output-extraction-json.js +234 -0
- package/src/agent/output-extraction-json.ts +235 -0
- package/src/agent/output-extraction-pi.js +124 -0
- package/src/agent/output-extraction-pi.ts +137 -0
- package/src/agent/output-extraction-types.js +2 -0
- package/src/agent/output-extraction-types.ts +49 -0
- package/src/agent/output-extraction.js +17 -617
- package/src/agent/output-extraction.ts +30 -0
- package/src/agent/output-reformatter-errors.js +83 -0
- package/src/agent/output-reformatter-errors.ts +106 -0
- package/src/agent/output-reformatter-types.js +2 -0
- package/src/agent/output-reformatter-types.ts +86 -0
- package/src/agent/output-reformatter.js +140 -185
- package/src/agent/output-reformatter.ts +238 -0
- package/src/agent/pi-terminal-lifecycle-types.js +2 -0
- package/src/agent/pi-terminal-lifecycle-types.ts +41 -0
- package/src/agent/pi-terminal-lifecycle.js +186 -206
- package/src/agent/pi-terminal-lifecycle.ts +297 -0
- package/src/agent/provider-control-plane.js +22 -21
- package/src/agent/provider-control-plane.ts +52 -0
- package/src/agent/provider-terminal-failure-types.js +2 -0
- package/src/agent/provider-terminal-failure-types.ts +60 -0
- package/src/agent/provider-terminal-failure.js +194 -191
- package/src/agent/provider-terminal-failure.ts +262 -0
- package/src/agent/rate-limit-backoff.js +31 -74
- package/src/agent/rate-limit-backoff.ts +71 -0
- package/src/agent/schema-utils.js +85 -125
- package/src/agent/schema-utils.ts +148 -0
- package/src/agent/structured-output-error.js +34 -33
- package/src/agent/structured-output-error.ts +105 -0
- package/src/agent/validation-platform.js +27 -27
- package/src/agent/validation-platform.ts +49 -0
- package/src/agents/git-pusher-template.js +17 -34
- package/src/attach/attach-client.js +232 -405
- package/src/attach/attach-client.ts +300 -0
- package/src/attach/attach-server-cleanup.js +43 -0
- package/src/attach/attach-server-cleanup.ts +39 -0
- package/src/attach/attach-server-clients.js +117 -0
- package/src/attach/attach-server-clients.ts +122 -0
- package/src/attach/attach-server-events.js +38 -0
- package/src/attach/attach-server-events.ts +36 -0
- package/src/attach/attach-server-pty.js +45 -0
- package/src/attach/attach-server-pty.ts +64 -0
- package/src/attach/attach-server-runtime.js +73 -0
- package/src/attach/attach-server-runtime.ts +62 -0
- package/src/attach/attach-server-socket.js +28 -0
- package/src/attach/attach-server-socket.ts +23 -0
- package/src/attach/attach-server-types.js +2 -0
- package/src/attach/attach-server-types.ts +82 -0
- package/src/attach/attach-server.js +106 -523
- package/src/attach/attach-server.ts +158 -0
- package/src/attach/index.js +18 -35
- package/src/attach/index.ts +18 -0
- package/src/attach/protocol.js +95 -184
- package/src/attach/protocol.ts +181 -0
- package/src/attach/ring-buffer.js +76 -102
- package/src/attach/ring-buffer.ts +109 -0
- package/src/attach/send-input.js +64 -75
- package/src/attach/send-input.ts +94 -0
- package/src/attach/socket-discovery.js +164 -218
- package/src/attach/socket-discovery.ts +230 -0
- package/src/attach/socket-paths.js +42 -61
- package/src/attach/socket-paths.ts +81 -0
- package/src/claude-credentials.js +51 -54
- package/src/claude-credentials.ts +89 -0
- package/src/cluster/generated/protocol-schema.ts +1 -1
- package/src/cluster/generated/protocol.ts +2 -1
- package/src/command-proofs.js +110 -141
- package/src/command-proofs.ts +216 -0
- package/src/config-router.js +81 -73
- package/src/config-router.ts +131 -0
- package/src/copy-containment.js +191 -0
- package/src/copy-containment.ts +259 -0
- package/src/copy-worker.js +53 -30
- package/src/copy-worker.ts +88 -0
- package/src/darwin-keychain-boundary.js +80 -111
- package/src/darwin-keychain-boundary.ts +148 -0
- package/src/guidance-topics.js +4 -5
- package/src/guidance-topics.ts +10 -0
- package/src/input-helpers.js +33 -54
- package/src/input-helpers.ts +58 -0
- package/src/isolation-manager.js +59 -20
- package/src/ledger-sequence.js +45 -48
- package/src/ledger-sequence.ts +63 -0
- package/src/legacy-lib/clusters-registry.ts +40 -0
- package/src/legacy-lib/completion.ts +148 -0
- package/src/legacy-lib/compose-utils.ts +102 -0
- package/src/legacy-lib/detached-startup.ts +451 -0
- package/src/legacy-lib/docker-config.ts +282 -0
- package/src/legacy-lib/docker-env-auth.ts +116 -0
- package/src/legacy-lib/git-remote-utils.ts +244 -0
- package/src/legacy-lib/id-detector.ts +57 -0
- package/src/legacy-lib/js-yaml.d.ts +3 -0
- package/src/legacy-lib/omelette.d.ts +15 -0
- package/src/legacy-lib/path-check.ts +89 -0
- package/src/legacy-lib/process-liveness.ts +36 -0
- package/src/legacy-lib/provider-credential-path.ts +57 -0
- package/src/legacy-lib/provider-defaults.ts +114 -0
- package/src/legacy-lib/provider-detection.ts +67 -0
- package/src/legacy-lib/provider-names.ts +126 -0
- package/src/legacy-lib/repo-settings.ts +88 -0
- package/src/legacy-lib/run-mode.ts +58 -0
- package/src/legacy-lib/run-plan.ts +49 -0
- package/src/legacy-lib/settings/claude-auth.ts +80 -0
- package/src/legacy-lib/settings-defaults.ts +212 -0
- package/src/legacy-lib/settings-error.ts +8 -0
- package/src/legacy-lib/settings-issue-providers.ts +18 -0
- package/src/legacy-lib/settings-models.ts +124 -0
- package/src/legacy-lib/settings-storage.ts +277 -0
- package/src/legacy-lib/settings-validation.ts +220 -0
- package/src/legacy-lib/settings.ts +87 -0
- package/src/legacy-lib/setup-apply-types.ts +70 -0
- package/src/legacy-lib/setup-apply.ts +456 -0
- package/src/legacy-lib/setup-journal.ts +185 -0
- package/src/legacy-lib/setup-plan-types.ts +96 -0
- package/src/legacy-lib/setup-plan.ts +500 -0
- package/src/legacy-lib/setup-undo.ts +142 -0
- package/src/legacy-lib/start-cluster-config.ts +124 -0
- package/src/legacy-lib/start-cluster-environment.ts +166 -0
- package/src/legacy-lib/start-cluster-run-options.ts +281 -0
- package/src/legacy-lib/start-cluster.ts +237 -0
- package/src/legacy-lib/stream-json-parser.ts +88 -0
- package/src/message-buffer.js +55 -71
- package/src/message-buffer.ts +107 -0
- package/src/message-bus-bridge.js +92 -133
- package/src/message-bus-bridge.ts +149 -0
- package/src/name-generator-shared.js +220 -0
- package/src/name-generator-shared.ts +231 -0
- package/src/name-generator.js +8 -217
- package/src/name-generator.ts +27 -0
- package/src/omp-blob-root.js +83 -64
- package/src/omp-blob-root.ts +116 -0
- package/src/omp-config-overlay.js +65 -38
- package/src/omp-config-overlay.ts +110 -0
- package/src/omp-execution-fingerprint.js +38 -43
- package/src/omp-execution-fingerprint.ts +92 -0
- package/src/omp-session-limits.js +10 -15
- package/src/omp-session-limits.ts +53 -0
- package/src/omp-session-partition.js +2 -2
- package/src/omp-session-verifier.js +1 -1
- package/src/orchestrator.js +32 -7
- package/src/pr-body-template.js +71 -0
- package/src/providers/anthropic/index.js +3 -1
- package/src/providers/anthropic/index.ts +13 -0
- package/src/providers/capabilities.js +19 -27
- package/src/providers/capabilities.ts +44 -0
- package/src/providers/google/index.js +3 -1
- package/src/providers/google/index.ts +13 -0
- package/src/providers/openai/index.js +3 -1
- package/src/providers/openai/index.ts +13 -0
- package/src/providers/opencode/index.js +3 -1
- package/src/providers/opencode/index.ts +13 -0
- package/src/quality-gates.js +67 -127
- package/src/quality-gates.ts +149 -0
- package/src/repo-settings-access.js +40 -0
- package/src/repo-settings-access.ts +64 -0
- package/src/schemas/sub-cluster.js +127 -183
- package/src/schemas/sub-cluster.ts +238 -0
- package/src/state-snapshot-normalization.js +224 -0
- package/src/state-snapshot-normalization.ts +222 -0
- package/src/state-snapshot.js +192 -359
- package/src/state-snapshot.ts +291 -0
- package/src/state-snapshotter.js +118 -130
- package/src/state-snapshotter.ts +167 -0
- package/src/sub-cluster-wrapper.js +4 -13
- package/src/task-run-model-args.js +87 -124
- package/src/task-run-model-args.ts +204 -0
- package/src/task-runner.js +5 -25
- package/src/task-runner.ts +28 -0
- package/src/task-startup-error.js +73 -58
- package/src/task-startup-error.ts +126 -0
- package/src/template-validation/consensus-gate-contracts.js +2 -0
- package/src/template-validation/consensus-gate-contracts.ts +70 -0
- package/src/template-validation/consensus-gate-scenarios.js +76 -0
- package/src/template-validation/consensus-gate-scenarios.ts +130 -0
- package/src/template-validation/consensus-gate-stage.js +34 -0
- package/src/template-validation/consensus-gate-stage.ts +56 -0
- package/src/template-validation/random-topology-contracts.js +2 -0
- package/src/template-validation/random-topology-contracts.ts +54 -0
- package/src/template-validation/random-topology-dispatch.js +25 -0
- package/src/template-validation/random-topology-dispatch.ts +33 -0
- package/src/template-validation/random-topology-message-loop.js +53 -0
- package/src/template-validation/random-topology-message-loop.ts +73 -0
- package/src/template-validation/random-topology-operations.js +79 -0
- package/src/template-validation/random-topology-operations.ts +101 -0
- package/src/template-validation/random-topology-runtime.js +25 -0
- package/src/template-validation/random-topology-runtime.ts +43 -0
- package/src/template-validation/random-topology-scenario.js +52 -0
- package/src/template-validation/random-topology-scenario.ts +57 -0
- package/src/template-validation/random-topology-schema.js +159 -0
- package/src/template-validation/random-topology-schema.ts +190 -0
- package/src/template-validation/random-topology-state.js +28 -0
- package/src/template-validation/random-topology-state.ts +30 -0
- package/src/template-validation/random-topology-trigger-evaluation.js +45 -0
- package/src/template-validation/random-topology-trigger-evaluation.ts +65 -0
- package/src/template-validation/random-topology-trigger.js +75 -0
- package/src/template-validation/random-topology-trigger.ts +88 -0
- package/src/template-validation/report-formatter.js +40 -46
- package/src/template-validation/report-formatter.ts +101 -0
- package/src/template-validation/simulate-consensus-gates.js +111 -302
- package/src/template-validation/simulate-consensus-gates.ts +196 -0
- package/src/template-validation/simulate-random-topology.js +26 -519
- package/src/template-validation/simulate-random-topology.ts +57 -0
- package/src/template-validation/simulate-two-stage-validation.js +41 -265
- package/src/template-validation/simulate-two-stage-validation.ts +55 -0
- package/src/template-validation/simulation-agent-runtime.js +25 -0
- package/src/template-validation/simulation-agent-runtime.ts +40 -0
- package/src/template-validation/simulation-agent.js +29 -0
- package/src/template-validation/simulation-agent.ts +73 -0
- package/src/template-validation/simulation-runtime.js +34 -0
- package/src/template-validation/simulation-runtime.ts +72 -0
- package/src/template-validation/two-stage-contracts.js +2 -0
- package/src/template-validation/two-stage-contracts.ts +41 -0
- package/src/template-validation/two-stage-inputs.js +21 -0
- package/src/template-validation/two-stage-inputs.ts +29 -0
- package/src/template-validation/two-stage-results.js +30 -0
- package/src/template-validation/two-stage-results.ts +40 -0
- package/src/template-validation/two-stage-scenario.js +86 -0
- package/src/template-validation/two-stage-scenario.ts +120 -0
- package/src/worktree-claude-config.js +182 -220
- package/src/worktree-claude-config.ts +272 -0
- package/src/worktree-tooling-env.js +103 -125
- package/src/worktree-tooling-env.ts +142 -0
- package/task-lib/completion.js +2 -3
- package/task-lib/completion.ts +9 -0
- package/task-lib/config.js +1 -4
- package/task-lib/config.ts +11 -0
- package/task-lib/name-generator.js +4 -226
- package/task-lib/name-generator.ts +11 -0
- package/task-lib/omp-session-cleanup.js +1 -1
- package/task-lib/omp-storage-root.js +8 -12
- package/task-lib/omp-storage-root.ts +62 -0
- package/task-lib/process-termination.js +143 -166
- package/task-lib/process-termination.ts +268 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const validationPlatform = require("./validation-platform");
|
|
3
|
+
const { isPlatformMismatchReason } = validationPlatform;
|
|
4
|
+
function shouldKeepCannotValidate(criteria, ignoreReason, seenIds) {
|
|
5
|
+
if (criteria.status !== 'CANNOT_VALIDATE' || !criteria.id) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
if (ignoreReason && ignoreReason(criteria.reason)) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if (seenIds.has(criteria.id)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
function isValidationCriteria(value) {
|
|
17
|
+
return Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
function collectCannotValidateCriteria(prevValidations, options = {}) {
|
|
20
|
+
const cannotValidateCriteria = [];
|
|
21
|
+
const seenIds = new Set();
|
|
22
|
+
const ignoreReason = options.ignoreReason;
|
|
23
|
+
for (const msg of prevValidations) {
|
|
24
|
+
const criteriaResults = msg.content?.data?.criteriaResults;
|
|
25
|
+
if (!isValidationCriteria(criteriaResults)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
for (const criteria of criteriaResults) {
|
|
29
|
+
if (!shouldKeepCannotValidate(criteria, ignoreReason, seenIds)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
seenIds.add(criteria.id);
|
|
33
|
+
cannotValidateCriteria.push({
|
|
34
|
+
id: criteria.id,
|
|
35
|
+
reason: criteria.reason || 'No reason provided',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return cannotValidateCriteria;
|
|
40
|
+
}
|
|
41
|
+
function buildCannotValidateSection(cannotValidateCriteria) {
|
|
42
|
+
if (cannotValidateCriteria.length === 0) {
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
return [
|
|
46
|
+
'',
|
|
47
|
+
'## ⚠️ Permanently Unverifiable Criteria (SKIP THESE)',
|
|
48
|
+
'',
|
|
49
|
+
'The following criteria have PERMANENT environmental limitations (missing tools, no access).',
|
|
50
|
+
'These limitations have not changed. Do NOT re-attempt verification.',
|
|
51
|
+
'Mark these as CANNOT_VALIDATE again with the same reason.',
|
|
52
|
+
'',
|
|
53
|
+
...cannotValidateCriteria.map((criteria) => `- **${criteria.id}**: ${criteria.reason}`),
|
|
54
|
+
'',
|
|
55
|
+
].join('\n');
|
|
56
|
+
}
|
|
57
|
+
function buildValidatorSkipSection({ role, messageBus, cluster, isolation, }) {
|
|
58
|
+
if (role !== 'validator') {
|
|
59
|
+
return '';
|
|
60
|
+
}
|
|
61
|
+
const prevValidations = messageBus.query({
|
|
62
|
+
cluster_id: cluster.id,
|
|
63
|
+
topic: 'VALIDATION_RESULT',
|
|
64
|
+
since: cluster.createdAt,
|
|
65
|
+
limit: 50,
|
|
66
|
+
});
|
|
67
|
+
const ignoreReason = isolation?.enabled ? isPlatformMismatchReason : null;
|
|
68
|
+
const cannotValidateCriteria = collectCannotValidateCriteria(prevValidations, { ignoreReason });
|
|
69
|
+
return buildCannotValidateSection(cannotValidateCriteria);
|
|
70
|
+
}
|
|
71
|
+
module.exports = {
|
|
72
|
+
buildValidatorSkipSection,
|
|
73
|
+
};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import validationPlatform = require('./validation-platform');
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
ContextCluster,
|
|
5
|
+
ContextMessage,
|
|
6
|
+
ContextMessageBus,
|
|
7
|
+
IsolationContext,
|
|
8
|
+
ValidationCriterion,
|
|
9
|
+
} from './agent-context-types';
|
|
10
|
+
|
|
11
|
+
interface CannotValidateCriterion {
|
|
12
|
+
id: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface CannotValidateOptions {
|
|
17
|
+
ignoreReason?: ((reason: string | undefined) => boolean) | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface ValidatorSkipParams {
|
|
21
|
+
role: string;
|
|
22
|
+
messageBus: ContextMessageBus;
|
|
23
|
+
cluster: ContextCluster;
|
|
24
|
+
isolation?: IsolationContext | null | undefined;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const { isPlatformMismatchReason } = validationPlatform;
|
|
28
|
+
|
|
29
|
+
function shouldKeepCannotValidate(
|
|
30
|
+
criteria: ValidationCriterion,
|
|
31
|
+
ignoreReason: CannotValidateOptions['ignoreReason'],
|
|
32
|
+
seenIds: ReadonlySet<string>
|
|
33
|
+
): criteria is ValidationCriterion & { id: string } {
|
|
34
|
+
if (criteria.status !== 'CANNOT_VALIDATE' || !criteria.id) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (ignoreReason && ignoreReason(criteria.reason)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (seenIds.has(criteria.id)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function isValidationCriteria(
|
|
50
|
+
value: readonly ValidationCriterion[] | null | undefined
|
|
51
|
+
): value is readonly ValidationCriterion[] {
|
|
52
|
+
return Array.isArray(value);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function collectCannotValidateCriteria(
|
|
56
|
+
prevValidations: readonly ContextMessage[],
|
|
57
|
+
options: CannotValidateOptions = {}
|
|
58
|
+
): CannotValidateCriterion[] {
|
|
59
|
+
const cannotValidateCriteria: CannotValidateCriterion[] = [];
|
|
60
|
+
const seenIds = new Set<string>();
|
|
61
|
+
const ignoreReason = options.ignoreReason;
|
|
62
|
+
|
|
63
|
+
for (const msg of prevValidations) {
|
|
64
|
+
const criteriaResults = msg.content?.data?.criteriaResults;
|
|
65
|
+
if (!isValidationCriteria(criteriaResults)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
for (const criteria of criteriaResults) {
|
|
70
|
+
if (!shouldKeepCannotValidate(criteria, ignoreReason, seenIds)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
seenIds.add(criteria.id);
|
|
75
|
+
cannotValidateCriteria.push({
|
|
76
|
+
id: criteria.id,
|
|
77
|
+
reason: criteria.reason || 'No reason provided',
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return cannotValidateCriteria;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function buildCannotValidateSection(
|
|
86
|
+
cannotValidateCriteria: readonly CannotValidateCriterion[]
|
|
87
|
+
): string {
|
|
88
|
+
if (cannotValidateCriteria.length === 0) {
|
|
89
|
+
return '';
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return [
|
|
93
|
+
'',
|
|
94
|
+
'## ⚠️ Permanently Unverifiable Criteria (SKIP THESE)',
|
|
95
|
+
'',
|
|
96
|
+
'The following criteria have PERMANENT environmental limitations (missing tools, no access).',
|
|
97
|
+
'These limitations have not changed. Do NOT re-attempt verification.',
|
|
98
|
+
'Mark these as CANNOT_VALIDATE again with the same reason.',
|
|
99
|
+
'',
|
|
100
|
+
...cannotValidateCriteria.map((criteria) => `- **${criteria.id}**: ${criteria.reason}`),
|
|
101
|
+
'',
|
|
102
|
+
].join('\n');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function buildValidatorSkipSection({
|
|
106
|
+
role,
|
|
107
|
+
messageBus,
|
|
108
|
+
cluster,
|
|
109
|
+
isolation,
|
|
110
|
+
}: ValidatorSkipParams): string {
|
|
111
|
+
if (role !== 'validator') {
|
|
112
|
+
return '';
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const prevValidations = messageBus.query({
|
|
116
|
+
cluster_id: cluster.id,
|
|
117
|
+
topic: 'VALIDATION_RESULT',
|
|
118
|
+
since: cluster.createdAt,
|
|
119
|
+
limit: 50,
|
|
120
|
+
});
|
|
121
|
+
const ignoreReason = isolation?.enabled ? isPlatformMismatchReason : null;
|
|
122
|
+
const cannotValidateCriteria = collectCannotValidateCriteria(prevValidations, { ignoreReason });
|
|
123
|
+
|
|
124
|
+
return buildCannotValidateSection(cannotValidateCriteria);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export = {
|
|
128
|
+
buildValidatorSkipSection,
|
|
129
|
+
};
|
|
@@ -1,141 +1,122 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
function isTaskStoreModule(value) {
|
|
6
|
+
return (typeof value === 'object' &&
|
|
7
|
+
value !== null &&
|
|
8
|
+
'getTask' in value &&
|
|
9
|
+
typeof value.getTask === 'function');
|
|
10
|
+
}
|
|
11
|
+
const taskStoreModule = require('../../task-lib/store.js');
|
|
12
|
+
if (!isTaskStoreModule(taskStoreModule)) {
|
|
13
|
+
throw new TypeError('task store must export getTask');
|
|
14
|
+
}
|
|
15
|
+
const getTask = taskStoreModule.getTask;
|
|
16
|
+
const send_input_1 = __importDefault(require("../attach/send-input"));
|
|
17
|
+
const { sendInput } = send_input_1.default;
|
|
18
|
+
const socket_discovery_1 = __importDefault(require("../attach/socket-discovery"));
|
|
19
|
+
const { isSocketAlive } = socket_discovery_1.default;
|
|
12
20
|
const DEFAULT_TIMEOUT_MS = 1500;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
+
function buildResult({ status, reason = null, method = null, taskId = null, }) {
|
|
22
|
+
return {
|
|
23
|
+
status,
|
|
24
|
+
reason,
|
|
25
|
+
method,
|
|
26
|
+
taskId,
|
|
27
|
+
};
|
|
21
28
|
}
|
|
22
|
-
|
|
23
29
|
function ensureValidInputs(agent, text) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
if (!agent) {
|
|
31
|
+
throw new Error('AgentInputInjector: agent is required');
|
|
32
|
+
}
|
|
33
|
+
if (typeof text !== 'string') {
|
|
34
|
+
throw new Error('AgentInputInjector: text must be a string');
|
|
35
|
+
}
|
|
36
|
+
if (!text.trim()) {
|
|
37
|
+
throw new Error('AgentInputInjector: text cannot be empty');
|
|
38
|
+
}
|
|
39
|
+
return { agent, text };
|
|
33
40
|
}
|
|
34
|
-
|
|
35
41
|
function buildUnsupported(reason, taskId) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
return buildResult({
|
|
43
|
+
status: 'unsupported',
|
|
44
|
+
reason,
|
|
45
|
+
taskId,
|
|
46
|
+
});
|
|
41
47
|
}
|
|
42
|
-
|
|
43
48
|
function getTaskId(agent) {
|
|
44
|
-
|
|
49
|
+
return agent.currentTaskId || null;
|
|
45
50
|
}
|
|
46
|
-
|
|
47
51
|
function checkIsolation(agent, taskId) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function checkTaskId(taskId) {
|
|
55
|
-
if (!taskId) {
|
|
56
|
-
return buildUnsupported('no-current-task', null);
|
|
57
|
-
}
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function checkTaskInfo(taskInfo, taskId) {
|
|
62
|
-
if (!taskInfo) {
|
|
63
|
-
return buildUnsupported('task-not-found', taskId);
|
|
64
|
-
}
|
|
65
|
-
if (!taskInfo.socketPath) {
|
|
66
|
-
return buildUnsupported('no-socket', taskId);
|
|
67
|
-
}
|
|
68
|
-
if (!taskInfo.attachable) {
|
|
69
|
-
return buildUnsupported('task-not-attachable', taskId);
|
|
70
|
-
}
|
|
71
|
-
return null;
|
|
52
|
+
if (agent.isolation?.enabled) {
|
|
53
|
+
return buildUnsupported('isolation-enabled', taskId);
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
72
56
|
}
|
|
73
|
-
|
|
74
57
|
async function checkSocketAlive(socketPath, taskId) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
58
|
+
const socketAlive = await isSocketAlive(socketPath);
|
|
59
|
+
if (!socketAlive) {
|
|
60
|
+
return buildUnsupported('socket-not-alive', taskId);
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
80
63
|
}
|
|
81
|
-
|
|
82
64
|
function normalizePayload(text) {
|
|
83
|
-
|
|
65
|
+
return text.endsWith('\n') ? text : `${text}\n`;
|
|
84
66
|
}
|
|
85
|
-
|
|
86
67
|
function resolveTimeout(options) {
|
|
87
|
-
|
|
68
|
+
return options.timeoutMs || DEFAULT_TIMEOUT_MS;
|
|
88
69
|
}
|
|
89
|
-
|
|
90
70
|
function buildInjected(taskId) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
71
|
+
return buildResult({
|
|
72
|
+
status: 'injected',
|
|
73
|
+
method: 'pty',
|
|
74
|
+
taskId,
|
|
75
|
+
});
|
|
96
76
|
}
|
|
97
|
-
|
|
98
77
|
function buildSendFailure(reason, taskId) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
78
|
+
return buildResult({
|
|
79
|
+
status: 'unsupported',
|
|
80
|
+
reason: reason || 'send-failed',
|
|
81
|
+
method: 'pty',
|
|
82
|
+
taskId,
|
|
83
|
+
});
|
|
105
84
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
85
|
+
async function injectInput(agentValue, textValue, options = {}) {
|
|
86
|
+
const { agent, text } = ensureValidInputs(agentValue, textValue);
|
|
87
|
+
const taskId = getTaskId(agent);
|
|
88
|
+
const isolationResult = checkIsolation(agent, taskId);
|
|
89
|
+
if (isolationResult)
|
|
90
|
+
return isolationResult;
|
|
91
|
+
if (!taskId) {
|
|
92
|
+
return buildUnsupported('no-current-task', null);
|
|
93
|
+
}
|
|
94
|
+
const taskInfo = getTask(taskId);
|
|
95
|
+
if (!taskInfo) {
|
|
96
|
+
return buildUnsupported('task-not-found', taskId);
|
|
97
|
+
}
|
|
98
|
+
if (!taskInfo.socketPath) {
|
|
99
|
+
return buildUnsupported('no-socket', taskId);
|
|
100
|
+
}
|
|
101
|
+
if (!taskInfo.attachable) {
|
|
102
|
+
return buildUnsupported('task-not-attachable', taskId);
|
|
103
|
+
}
|
|
104
|
+
const socketPath = taskInfo.socketPath;
|
|
105
|
+
const socketResult = await checkSocketAlive(socketPath, taskId);
|
|
106
|
+
if (socketResult)
|
|
107
|
+
return socketResult;
|
|
108
|
+
const payload = normalizePayload(text);
|
|
109
|
+
const timeoutMs = resolveTimeout(options);
|
|
110
|
+
const result = await sendInput({
|
|
111
|
+
socketPath,
|
|
112
|
+
data: payload,
|
|
113
|
+
timeoutMs,
|
|
114
|
+
});
|
|
115
|
+
if (!result.ok) {
|
|
116
|
+
return buildSendFailure(result.error, taskId);
|
|
117
|
+
}
|
|
118
|
+
return buildInjected(taskId);
|
|
137
119
|
}
|
|
138
|
-
|
|
139
120
|
module.exports = {
|
|
140
|
-
|
|
121
|
+
injectInput,
|
|
141
122
|
};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
type InjectionStatus = 'unsupported' | 'injected';
|
|
2
|
+
type InjectionMethod = 'pty';
|
|
3
|
+
|
|
4
|
+
interface InjectionResult {
|
|
5
|
+
status: InjectionStatus;
|
|
6
|
+
reason: string | null;
|
|
7
|
+
method: InjectionMethod | null;
|
|
8
|
+
taskId: string | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface BuildResultParams {
|
|
12
|
+
status: InjectionStatus;
|
|
13
|
+
reason?: string | null | undefined;
|
|
14
|
+
method?: InjectionMethod | null | undefined;
|
|
15
|
+
taskId?: string | null | undefined;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface AgentInputTarget {
|
|
19
|
+
currentTaskId?: string | null;
|
|
20
|
+
isolation?: {
|
|
21
|
+
enabled?: unknown;
|
|
22
|
+
} | null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface TaskInfo {
|
|
26
|
+
socketPath?: string | null;
|
|
27
|
+
attachable?: unknown;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface TaskStoreModule {
|
|
31
|
+
getTask(taskId: string): TaskInfo | null | undefined;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface InjectInputOptions {
|
|
35
|
+
timeoutMs?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function isTaskStoreModule(value: unknown): value is TaskStoreModule {
|
|
39
|
+
return (
|
|
40
|
+
typeof value === 'object' &&
|
|
41
|
+
value !== null &&
|
|
42
|
+
'getTask' in value &&
|
|
43
|
+
typeof value.getTask === 'function'
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const taskStoreModule: unknown = require('../../task-lib/store.js');
|
|
48
|
+
if (!isTaskStoreModule(taskStoreModule)) {
|
|
49
|
+
throw new TypeError('task store must export getTask');
|
|
50
|
+
}
|
|
51
|
+
const getTask = taskStoreModule.getTask;
|
|
52
|
+
|
|
53
|
+
import sendInputModule from '../attach/send-input';
|
|
54
|
+
|
|
55
|
+
const { sendInput } = sendInputModule;
|
|
56
|
+
|
|
57
|
+
import socketDiscovery from '../attach/socket-discovery';
|
|
58
|
+
|
|
59
|
+
const { isSocketAlive } = socketDiscovery;
|
|
60
|
+
|
|
61
|
+
const DEFAULT_TIMEOUT_MS = 1500;
|
|
62
|
+
|
|
63
|
+
function buildResult({
|
|
64
|
+
status,
|
|
65
|
+
reason = null,
|
|
66
|
+
method = null,
|
|
67
|
+
taskId = null,
|
|
68
|
+
}: BuildResultParams): InjectionResult {
|
|
69
|
+
return {
|
|
70
|
+
status,
|
|
71
|
+
reason,
|
|
72
|
+
method,
|
|
73
|
+
taskId,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function ensureValidInputs(
|
|
78
|
+
agent: AgentInputTarget | null | undefined,
|
|
79
|
+
text: unknown
|
|
80
|
+
): { agent: AgentInputTarget; text: string } {
|
|
81
|
+
if (!agent) {
|
|
82
|
+
throw new Error('AgentInputInjector: agent is required');
|
|
83
|
+
}
|
|
84
|
+
if (typeof text !== 'string') {
|
|
85
|
+
throw new Error('AgentInputInjector: text must be a string');
|
|
86
|
+
}
|
|
87
|
+
if (!text.trim()) {
|
|
88
|
+
throw new Error('AgentInputInjector: text cannot be empty');
|
|
89
|
+
}
|
|
90
|
+
return { agent, text };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function buildUnsupported(reason: string, taskId: string | null): InjectionResult {
|
|
94
|
+
return buildResult({
|
|
95
|
+
status: 'unsupported',
|
|
96
|
+
reason,
|
|
97
|
+
taskId,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function getTaskId(agent: AgentInputTarget): string | null {
|
|
102
|
+
return agent.currentTaskId || null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function checkIsolation(agent: AgentInputTarget, taskId: string | null): InjectionResult | null {
|
|
106
|
+
if (agent.isolation?.enabled) {
|
|
107
|
+
return buildUnsupported('isolation-enabled', taskId);
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async function checkSocketAlive(
|
|
113
|
+
socketPath: string,
|
|
114
|
+
taskId: string
|
|
115
|
+
): Promise<InjectionResult | null> {
|
|
116
|
+
const socketAlive = await isSocketAlive(socketPath);
|
|
117
|
+
if (!socketAlive) {
|
|
118
|
+
return buildUnsupported('socket-not-alive', taskId);
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function normalizePayload(text: string): string {
|
|
124
|
+
return text.endsWith('\n') ? text : `${text}\n`;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function resolveTimeout(options: InjectInputOptions): number {
|
|
128
|
+
return options.timeoutMs || DEFAULT_TIMEOUT_MS;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function buildInjected(taskId: string): InjectionResult {
|
|
132
|
+
return buildResult({
|
|
133
|
+
status: 'injected',
|
|
134
|
+
method: 'pty',
|
|
135
|
+
taskId,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function buildSendFailure(reason: string | null | undefined, taskId: string): InjectionResult {
|
|
140
|
+
return buildResult({
|
|
141
|
+
status: 'unsupported',
|
|
142
|
+
reason: reason || 'send-failed',
|
|
143
|
+
method: 'pty',
|
|
144
|
+
taskId,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
async function injectInput(
|
|
149
|
+
agentValue: AgentInputTarget | null | undefined,
|
|
150
|
+
textValue: unknown,
|
|
151
|
+
options: InjectInputOptions = {}
|
|
152
|
+
): Promise<InjectionResult> {
|
|
153
|
+
const { agent, text } = ensureValidInputs(agentValue, textValue);
|
|
154
|
+
|
|
155
|
+
const taskId = getTaskId(agent);
|
|
156
|
+
const isolationResult = checkIsolation(agent, taskId);
|
|
157
|
+
if (isolationResult) return isolationResult;
|
|
158
|
+
|
|
159
|
+
if (!taskId) {
|
|
160
|
+
return buildUnsupported('no-current-task', null);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const taskInfo = getTask(taskId);
|
|
164
|
+
if (!taskInfo) {
|
|
165
|
+
return buildUnsupported('task-not-found', taskId);
|
|
166
|
+
}
|
|
167
|
+
if (!taskInfo.socketPath) {
|
|
168
|
+
return buildUnsupported('no-socket', taskId);
|
|
169
|
+
}
|
|
170
|
+
if (!taskInfo.attachable) {
|
|
171
|
+
return buildUnsupported('task-not-attachable', taskId);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const socketPath = taskInfo.socketPath;
|
|
175
|
+
const socketResult = await checkSocketAlive(socketPath, taskId);
|
|
176
|
+
if (socketResult) return socketResult;
|
|
177
|
+
|
|
178
|
+
const payload = normalizePayload(text);
|
|
179
|
+
const timeoutMs = resolveTimeout(options);
|
|
180
|
+
const result = await sendInput({
|
|
181
|
+
socketPath,
|
|
182
|
+
data: payload,
|
|
183
|
+
timeoutMs,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
if (!result.ok) {
|
|
187
|
+
return buildSendFailure(result.error, taskId);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return buildInjected(taskId);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export = {
|
|
194
|
+
injectInput,
|
|
195
|
+
};
|