harness-engineering-agent 0.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/LICENSE +21 -0
- package/README.md +191 -0
- package/dist/config/config-defaults.d.ts +32 -0
- package/dist/config/config-defaults.d.ts.map +1 -0
- package/dist/config/config-defaults.js +32 -0
- package/dist/config/config-defaults.js.map +1 -0
- package/dist/config/config-errors.d.ts +7 -0
- package/dist/config/config-errors.d.ts.map +1 -0
- package/dist/config/config-errors.js +11 -0
- package/dist/config/config-errors.js.map +1 -0
- package/dist/config/config-file.d.ts +3 -0
- package/dist/config/config-file.d.ts.map +1 -0
- package/dist/config/config-file.js +31 -0
- package/dist/config/config-file.js.map +1 -0
- package/dist/config/config-merge.d.ts +8 -0
- package/dist/config/config-merge.d.ts.map +1 -0
- package/dist/config/config-merge.js +50 -0
- package/dist/config/config-merge.js.map +1 -0
- package/dist/config/config-schema.d.ts +135 -0
- package/dist/config/config-schema.d.ts.map +1 -0
- package/dist/config/config-schema.js +94 -0
- package/dist/config/config-schema.js.map +1 -0
- package/dist/config/config-types.d.ts +21 -0
- package/dist/config/config-types.d.ts.map +1 -0
- package/dist/config/config-types.js +2 -0
- package/dist/config/config-types.js.map +1 -0
- package/dist/config/harness-config.d.ts +6 -0
- package/dist/config/harness-config.d.ts.map +1 -0
- package/dist/config/harness-config.js +4 -0
- package/dist/config/harness-config.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/load-harness-config.d.ts +9 -0
- package/dist/config/load-harness-config.d.ts.map +1 -0
- package/dist/config/load-harness-config.js +25 -0
- package/dist/config/load-harness-config.js.map +1 -0
- package/dist/controller/agent-output.d.ts +21 -0
- package/dist/controller/agent-output.d.ts.map +1 -0
- package/dist/controller/agent-output.js +75 -0
- package/dist/controller/agent-output.js.map +1 -0
- package/dist/controller/agent-session.d.ts +49 -0
- package/dist/controller/agent-session.d.ts.map +1 -0
- package/dist/controller/agent-session.js +220 -0
- package/dist/controller/agent-session.js.map +1 -0
- package/dist/controller/contracts.d.ts +65 -0
- package/dist/controller/contracts.d.ts.map +1 -0
- package/dist/controller/contracts.js +2 -0
- package/dist/controller/contracts.js.map +1 -0
- package/dist/controller/errors.d.ts +23 -0
- package/dist/controller/errors.d.ts.map +1 -0
- package/dist/controller/errors.js +37 -0
- package/dist/controller/errors.js.map +1 -0
- package/dist/controller/evidence-factory.d.ts +15 -0
- package/dist/controller/evidence-factory.d.ts.map +1 -0
- package/dist/controller/evidence-factory.js +38 -0
- package/dist/controller/evidence-factory.js.map +1 -0
- package/dist/controller/failure-analysis.d.ts +36 -0
- package/dist/controller/failure-analysis.d.ts.map +1 -0
- package/dist/controller/failure-analysis.js +175 -0
- package/dist/controller/failure-analysis.js.map +1 -0
- package/dist/controller/failure-factory.d.ts +85 -0
- package/dist/controller/failure-factory.d.ts.map +1 -0
- package/dist/controller/failure-factory.js +124 -0
- package/dist/controller/failure-factory.js.map +1 -0
- package/dist/controller/graph-validator.d.ts +4 -0
- package/dist/controller/graph-validator.d.ts.map +1 -0
- package/dist/controller/graph-validator.js +102 -0
- package/dist/controller/graph-validator.js.map +1 -0
- package/dist/controller/index.d.ts +15 -0
- package/dist/controller/index.d.ts.map +1 -0
- package/dist/controller/index.js +11 -0
- package/dist/controller/index.js.map +1 -0
- package/dist/controller/repair-loop.d.ts +42 -0
- package/dist/controller/repair-loop.d.ts.map +1 -0
- package/dist/controller/repair-loop.js +385 -0
- package/dist/controller/repair-loop.js.map +1 -0
- package/dist/controller/report-factory.d.ts +4 -0
- package/dist/controller/report-factory.d.ts.map +1 -0
- package/dist/controller/report-factory.js +107 -0
- package/dist/controller/report-factory.js.map +1 -0
- package/dist/controller/role-prompts.d.ts +8 -0
- package/dist/controller/role-prompts.d.ts.map +1 -0
- package/dist/controller/role-prompts.js +35 -0
- package/dist/controller/role-prompts.js.map +1 -0
- package/dist/controller/run-controller.d.ts +3 -0
- package/dist/controller/run-controller.d.ts.map +1 -0
- package/dist/controller/run-controller.js +291 -0
- package/dist/controller/run-controller.js.map +1 -0
- package/dist/controller/run-persistence.d.ts +15 -0
- package/dist/controller/run-persistence.d.ts.map +1 -0
- package/dist/controller/run-persistence.js +83 -0
- package/dist/controller/run-persistence.js.map +1 -0
- package/dist/controller/run-state.d.ts +61 -0
- package/dist/controller/run-state.d.ts.map +1 -0
- package/dist/controller/run-state.js +151 -0
- package/dist/controller/run-state.js.map +1 -0
- package/dist/controller/task-agent-output.d.ts +70 -0
- package/dist/controller/task-agent-output.d.ts.map +1 -0
- package/dist/controller/task-agent-output.js +256 -0
- package/dist/controller/task-agent-output.js.map +1 -0
- package/dist/controller/task-agent-schemas.d.ts +217 -0
- package/dist/controller/task-agent-schemas.d.ts.map +1 -0
- package/dist/controller/task-agent-schemas.js +171 -0
- package/dist/controller/task-agent-schemas.js.map +1 -0
- package/dist/controller/task-executor.d.ts +15 -0
- package/dist/controller/task-executor.d.ts.map +1 -0
- package/dist/controller/task-executor.js +751 -0
- package/dist/controller/task-executor.js.map +1 -0
- package/dist/controller/task-paths.d.ts +3 -0
- package/dist/controller/task-paths.d.ts.map +1 -0
- package/dist/controller/task-paths.js +20 -0
- package/dist/controller/task-paths.js.map +1 -0
- package/dist/controller/task-retry.d.ts +24 -0
- package/dist/controller/task-retry.d.ts.map +1 -0
- package/dist/controller/task-retry.js +42 -0
- package/dist/controller/task-retry.js.map +1 -0
- package/dist/controller/worktree-eligibility.d.ts +15 -0
- package/dist/controller/worktree-eligibility.d.ts.map +1 -0
- package/dist/controller/worktree-eligibility.js +38 -0
- package/dist/controller/worktree-eligibility.js.map +1 -0
- package/dist/controller/worktree-scheduler.d.ts +72 -0
- package/dist/controller/worktree-scheduler.d.ts.map +1 -0
- package/dist/controller/worktree-scheduler.js +142 -0
- package/dist/controller/worktree-scheduler.js.map +1 -0
- package/dist/domain/agent-result.d.ts +83 -0
- package/dist/domain/agent-result.d.ts.map +1 -0
- package/dist/domain/agent-result.js +44 -0
- package/dist/domain/agent-result.js.map +1 -0
- package/dist/domain/evidence.d.ts +97 -0
- package/dist/domain/evidence.d.ts.map +1 -0
- package/dist/domain/evidence.js +85 -0
- package/dist/domain/evidence.js.map +1 -0
- package/dist/domain/failure.d.ts +121 -0
- package/dist/domain/failure.d.ts.map +1 -0
- package/dist/domain/failure.js +72 -0
- package/dist/domain/failure.js.map +1 -0
- package/dist/domain/index.d.ts +19 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +10 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/report.d.ts +904 -0
- package/dist/domain/report.d.ts.map +1 -0
- package/dist/domain/report.js +90 -0
- package/dist/domain/report.js.map +1 -0
- package/dist/domain/requirement.d.ts +10 -0
- package/dist/domain/requirement.d.ts.map +1 -0
- package/dist/domain/requirement.js +12 -0
- package/dist/domain/requirement.js.map +1 -0
- package/dist/domain/run.d.ts +857 -0
- package/dist/domain/run.d.ts.map +1 -0
- package/dist/domain/run.js +129 -0
- package/dist/domain/run.js.map +1 -0
- package/dist/domain/shared.d.ts +60 -0
- package/dist/domain/shared.d.ts.map +1 -0
- package/dist/domain/shared.js +66 -0
- package/dist/domain/shared.js.map +1 -0
- package/dist/domain/task.d.ts +316 -0
- package/dist/domain/task.d.ts.map +1 -0
- package/dist/domain/task.js +116 -0
- package/dist/domain/task.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/path/workspace-path.d.ts +6 -0
- package/dist/path/workspace-path.d.ts.map +1 -0
- package/dist/path/workspace-path.js +36 -0
- package/dist/path/workspace-path.js.map +1 -0
- package/dist/plugin/create-harness-plugin.d.ts +40 -0
- package/dist/plugin/create-harness-plugin.d.ts.map +1 -0
- package/dist/plugin/create-harness-plugin.js +169 -0
- package/dist/plugin/create-harness-plugin.js.map +1 -0
- package/dist/plugin/harness-agent-config.d.ts +6 -0
- package/dist/plugin/harness-agent-config.d.ts.map +1 -0
- package/dist/plugin/harness-agent-config.js +130 -0
- package/dist/plugin/harness-agent-config.js.map +1 -0
- package/dist/plugin/harness-chat-hook.d.ts +27 -0
- package/dist/plugin/harness-chat-hook.d.ts.map +1 -0
- package/dist/plugin/harness-chat-hook.js +72 -0
- package/dist/plugin/harness-chat-hook.js.map +1 -0
- package/dist/plugin/harness-chat-parts.d.ts +10 -0
- package/dist/plugin/harness-chat-parts.d.ts.map +1 -0
- package/dist/plugin/harness-chat-parts.js +36 -0
- package/dist/plugin/harness-chat-parts.js.map +1 -0
- package/dist/plugin/harness-chat-protocol.d.ts +9 -0
- package/dist/plugin/harness-chat-protocol.d.ts.map +1 -0
- package/dist/plugin/harness-chat-protocol.js +23 -0
- package/dist/plugin/harness-chat-protocol.js.map +1 -0
- package/dist/plugin/harness-coordinator.d.ts +33 -0
- package/dist/plugin/harness-coordinator.d.ts.map +1 -0
- package/dist/plugin/harness-coordinator.js +188 -0
- package/dist/plugin/harness-coordinator.js.map +1 -0
- package/dist/plugin/harness-intake-prompt.d.ts +2 -0
- package/dist/plugin/harness-intake-prompt.d.ts.map +1 -0
- package/dist/plugin/harness-intake-prompt.js +52 -0
- package/dist/plugin/harness-intake-prompt.js.map +1 -0
- package/dist/plugin/harness-intent.d.ts +72 -0
- package/dist/plugin/harness-intent.d.ts.map +1 -0
- package/dist/plugin/harness-intent.js +82 -0
- package/dist/plugin/harness-intent.js.map +1 -0
- package/dist/plugin/harness-parent-session-dispatcher.d.ts +46 -0
- package/dist/plugin/harness-parent-session-dispatcher.d.ts.map +1 -0
- package/dist/plugin/harness-parent-session-dispatcher.js +33 -0
- package/dist/plugin/harness-parent-session-dispatcher.js.map +1 -0
- package/dist/plugin/harness-requirement.d.ts +4 -0
- package/dist/plugin/harness-requirement.d.ts.map +1 -0
- package/dist/plugin/harness-requirement.js +37 -0
- package/dist/plugin/harness-requirement.js.map +1 -0
- package/dist/session/contracts.d.ts +178 -0
- package/dist/session/contracts.d.ts.map +1 -0
- package/dist/session/contracts.js +28 -0
- package/dist/session/contracts.js.map +1 -0
- package/dist/session/fake-session-adapter.d.ts +22 -0
- package/dist/session/fake-session-adapter.d.ts.map +1 -0
- package/dist/session/fake-session-adapter.js +238 -0
- package/dist/session/fake-session-adapter.js.map +1 -0
- package/dist/session/fake-session-errors.d.ts +23 -0
- package/dist/session/fake-session-errors.d.ts.map +1 -0
- package/dist/session/fake-session-errors.js +37 -0
- package/dist/session/fake-session-errors.js.map +1 -0
- package/dist/session/harness-agent-names.d.ts +51 -0
- package/dist/session/harness-agent-names.d.ts.map +1 -0
- package/dist/session/harness-agent-names.js +98 -0
- package/dist/session/harness-agent-names.js.map +1 -0
- package/dist/session/index.d.ts +9 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +9 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/opencode-session-adapter.d.ts +9 -0
- package/dist/session/opencode-session-adapter.d.ts.map +1 -0
- package/dist/session/opencode-session-adapter.js +243 -0
- package/dist/session/opencode-session-adapter.js.map +1 -0
- package/dist/session/opencode-session-client.d.ts +58 -0
- package/dist/session/opencode-session-client.d.ts.map +1 -0
- package/dist/session/opencode-session-client.js +17 -0
- package/dist/session/opencode-session-client.js.map +1 -0
- package/dist/session/opencode-session-errors.d.ts +15 -0
- package/dist/session/opencode-session-errors.d.ts.map +1 -0
- package/dist/session/opencode-session-errors.js +19 -0
- package/dist/session/opencode-session-errors.js.map +1 -0
- package/dist/session/opencode-session-prompts.d.ts +12 -0
- package/dist/session/opencode-session-prompts.d.ts.map +1 -0
- package/dist/session/opencode-session-prompts.js +16 -0
- package/dist/session/opencode-session-prompts.js.map +1 -0
- package/dist/store/filesystem-run-store-io.d.ts +9 -0
- package/dist/store/filesystem-run-store-io.d.ts.map +1 -0
- package/dist/store/filesystem-run-store-io.js +85 -0
- package/dist/store/filesystem-run-store-io.js.map +1 -0
- package/dist/store/filesystem-run-store.d.ts +16 -0
- package/dist/store/filesystem-run-store.d.ts.map +1 -0
- package/dist/store/filesystem-run-store.js +286 -0
- package/dist/store/filesystem-run-store.js.map +1 -0
- package/dist/store/index.d.ts +5 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +4 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/run-event.d.ts +786 -0
- package/dist/store/run-event.d.ts.map +1 -0
- package/dist/store/run-event.js +24 -0
- package/dist/store/run-event.js.map +1 -0
- package/dist/store/run-store-errors.d.ts +38 -0
- package/dist/store/run-store-errors.d.ts.map +1 -0
- package/dist/store/run-store-errors.js +62 -0
- package/dist/store/run-store-errors.js.map +1 -0
- package/dist/tools/context7-client.d.ts +22 -0
- package/dist/tools/context7-client.d.ts.map +1 -0
- package/dist/tools/context7-client.js +108 -0
- package/dist/tools/context7-client.js.map +1 -0
- package/dist/tools/grep-app-client.d.ts +21 -0
- package/dist/tools/grep-app-client.d.ts.map +1 -0
- package/dist/tools/grep-app-client.js +136 -0
- package/dist/tools/grep-app-client.js.map +1 -0
- package/dist/tools/harness-research-tools.d.ts +21 -0
- package/dist/tools/harness-research-tools.d.ts.map +1 -0
- package/dist/tools/harness-research-tools.js +101 -0
- package/dist/tools/harness-research-tools.js.map +1 -0
- package/dist/tools/lsp-client.d.ts +32 -0
- package/dist/tools/lsp-client.d.ts.map +1 -0
- package/dist/tools/lsp-client.js +234 -0
- package/dist/tools/lsp-client.js.map +1 -0
- package/dist/tools/lsp-json-rpc.d.ts +13 -0
- package/dist/tools/lsp-json-rpc.d.ts.map +1 -0
- package/dist/tools/lsp-json-rpc.js +98 -0
- package/dist/tools/lsp-json-rpc.js.map +1 -0
- package/dist/verification/command-policy.d.ts +11 -0
- package/dist/verification/command-policy.d.ts.map +1 -0
- package/dist/verification/command-policy.js +262 -0
- package/dist/verification/command-policy.js.map +1 -0
- package/dist/verification/contracts.d.ts +82 -0
- package/dist/verification/contracts.d.ts.map +1 -0
- package/dist/verification/contracts.js +6 -0
- package/dist/verification/contracts.js.map +1 -0
- package/dist/verification/fake-process-runner.d.ts +16 -0
- package/dist/verification/fake-process-runner.d.ts.map +1 -0
- package/dist/verification/fake-process-runner.js +28 -0
- package/dist/verification/fake-process-runner.js.map +1 -0
- package/dist/verification/index.d.ts +6 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/verification/index.js +5 -0
- package/dist/verification/index.js.map +1 -0
- package/dist/verification/node-process-runner.d.ts +12 -0
- package/dist/verification/node-process-runner.d.ts.map +1 -0
- package/dist/verification/node-process-runner.js +103 -0
- package/dist/verification/node-process-runner.js.map +1 -0
- package/dist/verification/verification-runner.d.ts +3 -0
- package/dist/verification/verification-runner.d.ts.map +1 -0
- package/dist/verification/verification-runner.js +101 -0
- package/dist/verification/verification-runner.js.map +1 -0
- package/dist/workspace/git-baseline.d.ts +63 -0
- package/dist/workspace/git-baseline.d.ts.map +1 -0
- package/dist/workspace/git-baseline.js +53 -0
- package/dist/workspace/git-baseline.js.map +1 -0
- package/dist/workspace/git-workspace-adapter.d.ts +43 -0
- package/dist/workspace/git-workspace-adapter.d.ts.map +1 -0
- package/dist/workspace/git-workspace-adapter.js +279 -0
- package/dist/workspace/git-workspace-adapter.js.map +1 -0
- package/dist/workspace/git-worktree-adapter.d.ts +45 -0
- package/dist/workspace/git-worktree-adapter.d.ts.map +1 -0
- package/dist/workspace/git-worktree-adapter.js +104 -0
- package/dist/workspace/git-worktree-adapter.js.map +1 -0
- package/dist/workspace/index.d.ts +7 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +4 -0
- package/dist/workspace/index.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { SchemaVersionSchema, VerificationCommandSchema } from "../domain/index.js";
|
|
3
|
+
import { WorkspaceRelativePathSchema } from "../path/workspace-path.js";
|
|
4
|
+
const HarnessProfileInputSchema = z
|
|
5
|
+
.object({
|
|
6
|
+
provider: z.string().trim().min(1).optional(),
|
|
7
|
+
model: z.string().trim().min(1).optional(),
|
|
8
|
+
})
|
|
9
|
+
.strict()
|
|
10
|
+
.readonly();
|
|
11
|
+
export const HarnessConfigInputSchema = z
|
|
12
|
+
.object({
|
|
13
|
+
schemaVersion: SchemaVersionSchema.optional(),
|
|
14
|
+
enabled: z.boolean().optional(),
|
|
15
|
+
harness: HarnessProfileInputSchema.optional(),
|
|
16
|
+
planner: HarnessProfileInputSchema.optional(),
|
|
17
|
+
worker: HarnessProfileInputSchema.optional(),
|
|
18
|
+
verifier: HarnessProfileInputSchema.optional(),
|
|
19
|
+
acceptance: HarnessProfileInputSchema.optional(),
|
|
20
|
+
failureAnalyzer: HarnessProfileInputSchema.optional(),
|
|
21
|
+
verificationCommands: z.array(VerificationCommandSchema).readonly().optional(),
|
|
22
|
+
maxRunAttempts: z.number().int().positive().optional(),
|
|
23
|
+
stateDirectory: WorkspaceRelativePathSchema.optional(),
|
|
24
|
+
})
|
|
25
|
+
.strict()
|
|
26
|
+
.readonly();
|
|
27
|
+
export const HarnessProfileSchema = z
|
|
28
|
+
.object({
|
|
29
|
+
provider: z.string().trim().min(1),
|
|
30
|
+
model: z.string().trim().min(1),
|
|
31
|
+
})
|
|
32
|
+
.readonly();
|
|
33
|
+
export const HarnessConfigSchema = z
|
|
34
|
+
.object({
|
|
35
|
+
schemaVersion: SchemaVersionSchema,
|
|
36
|
+
enabled: z.boolean(),
|
|
37
|
+
harness: HarnessProfileSchema,
|
|
38
|
+
planner: HarnessProfileSchema,
|
|
39
|
+
worker: HarnessProfileSchema,
|
|
40
|
+
verifier: HarnessProfileSchema,
|
|
41
|
+
acceptance: HarnessProfileSchema,
|
|
42
|
+
failureAnalyzer: HarnessProfileSchema,
|
|
43
|
+
verificationCommands: z.array(VerificationCommandSchema).readonly(),
|
|
44
|
+
maxRunAttempts: z.number().int().positive(),
|
|
45
|
+
stateDirectory: WorkspaceRelativePathSchema,
|
|
46
|
+
})
|
|
47
|
+
.strict()
|
|
48
|
+
.readonly();
|
|
49
|
+
export const parseHarnessConfig = (config, availableModels) => {
|
|
50
|
+
const parsedConfig = HarnessConfigSchema.parse(config);
|
|
51
|
+
validateAvailableModels(parsedConfig, availableModels);
|
|
52
|
+
return parsedConfig;
|
|
53
|
+
};
|
|
54
|
+
const validateAvailableModels = (config, availableModels) => {
|
|
55
|
+
if (availableModels === undefined) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const issues = [
|
|
59
|
+
...validateProfileAvailability(config.harness, availableModels, "harness"),
|
|
60
|
+
...validateProfileAvailability(config.planner, availableModels, "planner"),
|
|
61
|
+
...validateProfileAvailability(config.worker, availableModels, "worker"),
|
|
62
|
+
...validateProfileAvailability(config.verifier, availableModels, "verifier"),
|
|
63
|
+
...validateProfileAvailability(config.acceptance, availableModels, "acceptance"),
|
|
64
|
+
...validateProfileAvailability(config.failureAnalyzer, availableModels, "failureAnalyzer"),
|
|
65
|
+
];
|
|
66
|
+
if (issues.length > 0) {
|
|
67
|
+
throw new z.ZodError(issues);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const validateProfileAvailability = (profile, availableModels, role) => {
|
|
71
|
+
const providerModels = availableModels[profile.provider];
|
|
72
|
+
if (providerModels === undefined) {
|
|
73
|
+
return [
|
|
74
|
+
{
|
|
75
|
+
code: "custom",
|
|
76
|
+
input: profile.provider,
|
|
77
|
+
message: `Unknown provider: ${profile.provider}`,
|
|
78
|
+
path: [role, "provider"],
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
}
|
|
82
|
+
if (!providerModels.includes(profile.model)) {
|
|
83
|
+
return [
|
|
84
|
+
{
|
|
85
|
+
code: "custom",
|
|
86
|
+
input: profile.model,
|
|
87
|
+
message: `Unknown model for provider ${profile.provider}: ${profile.model}`,
|
|
88
|
+
path: [role, "model"],
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
return [];
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=config-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config/config-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { VerificationCommandSchema } from "../domain/index.js";
|
|
3
|
+
export type AvailableModelRegistry = Readonly<Record<string, readonly string[]>>;
|
|
4
|
+
export type MergedHarnessProfile = {
|
|
5
|
+
readonly provider: string;
|
|
6
|
+
readonly model: string;
|
|
7
|
+
};
|
|
8
|
+
export type MergedHarnessConfig = {
|
|
9
|
+
readonly schemaVersion: string;
|
|
10
|
+
readonly enabled: boolean;
|
|
11
|
+
readonly harness: MergedHarnessProfile;
|
|
12
|
+
readonly planner: MergedHarnessProfile;
|
|
13
|
+
readonly worker: MergedHarnessProfile;
|
|
14
|
+
readonly verifier: MergedHarnessProfile;
|
|
15
|
+
readonly acceptance: MergedHarnessProfile;
|
|
16
|
+
readonly failureAnalyzer: MergedHarnessProfile;
|
|
17
|
+
readonly verificationCommands: readonly z.infer<typeof VerificationCommandSchema>[];
|
|
18
|
+
readonly maxRunAttempts: number;
|
|
19
|
+
readonly stateDirectory: string;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=config-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../../src/config/config-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAEnE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;AAEhF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAA;IACtC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAA;IACzC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,CAAA;IAC9C,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,EAAE,CAAA;IACnF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types.js","sourceRoot":"","sources":["../../src/config/config-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { HARNESS_CONFIG_DEFAULTS } from "./config-defaults.js";
|
|
2
|
+
export { ConfigLoadError } from "./config-errors.js";
|
|
3
|
+
export type { HarnessAgentProfile, HarnessConfig, HarnessConfigInput, HarnessProfileInput, } from "./config-schema.js";
|
|
4
|
+
export type { AvailableModelRegistry } from "./config-types.js";
|
|
5
|
+
export { type LoadHarnessConfigOptions, loadHarnessConfig, } from "./load-harness-config.js";
|
|
6
|
+
//# sourceMappingURL=harness-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-config.d.ts","sourceRoot":"","sources":["../../src/config/harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EACL,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-config.js","sourceRoot":"","sources":["../../src/config/harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAQpD,OAAO,EAEL,iBAAiB,GAClB,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { type AvailableModelRegistry, ConfigLoadError, HARNESS_CONFIG_DEFAULTS, type HarnessAgentProfile, type HarnessConfig, type HarnessConfigInput, type HarnessProfileInput, type LoadHarnessConfigOptions, loadHarnessConfig, } from "./harness-config.js";
|
|
2
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,eAAe,EACf,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,uBAAuB,EAMvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type HarnessConfig, type HarnessConfigInput } from "./config-schema.js";
|
|
2
|
+
import type { AvailableModelRegistry } from "./config-types.js";
|
|
3
|
+
export type LoadHarnessConfigOptions = {
|
|
4
|
+
readonly projectRoot: string;
|
|
5
|
+
readonly runOverride?: HarnessConfigInput;
|
|
6
|
+
readonly availableModels?: AvailableModelRegistry;
|
|
7
|
+
};
|
|
8
|
+
export declare const loadHarnessConfig: (options: LoadHarnessConfigOptions) => Promise<HarnessConfig>;
|
|
9
|
+
//# sourceMappingURL=load-harness-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-harness-config.d.ts","sourceRoot":"","sources":["../../src/config/load-harness-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAsB,MAAM,oBAAoB,CAAA;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE/D,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IACzC,QAAQ,CAAC,eAAe,CAAC,EAAE,sBAAsB,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,SAAS,wBAAwB,KAChC,OAAO,CAAC,aAAa,CAmBvB,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { HARNESS_CONFIG_DEFAULTS } from "./config-defaults.js";
|
|
3
|
+
import { ConfigLoadError } from "./config-errors.js";
|
|
4
|
+
import { readHarnessConfigFile } from "./config-file.js";
|
|
5
|
+
import { mergeHarnessConfig } from "./config-merge.js";
|
|
6
|
+
import { parseHarnessConfig } from "./config-schema.js";
|
|
7
|
+
export const loadHarnessConfig = async (options) => {
|
|
8
|
+
const sourcePath = join(options.projectRoot, ".harness", "config.yaml");
|
|
9
|
+
try {
|
|
10
|
+
const projectConfig = await readHarnessConfigFile(sourcePath);
|
|
11
|
+
const mergedConfig = mergeHarnessConfig({
|
|
12
|
+
defaults: HARNESS_CONFIG_DEFAULTS,
|
|
13
|
+
projectConfig,
|
|
14
|
+
runOverride: options.runOverride,
|
|
15
|
+
});
|
|
16
|
+
return parseHarnessConfig(mergedConfig, options.availableModels);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (error instanceof ConfigLoadError) {
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
throw new ConfigLoadError(sourcePath, error);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=load-harness-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-harness-config.js","sourceRoot":"","sources":["../../src/config/load-harness-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAA+C,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AASpG,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,OAAiC,EACT,EAAE;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;IAEvE,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,kBAAkB,CAAC;YACtC,QAAQ,EAAE,uBAAuB;YACjC,aAAa;YACb,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAA;QAEF,OAAO,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,MAAM,KAAK,CAAA;QACb,CAAC;QAED,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ZodType } from "zod";
|
|
2
|
+
import type { SessionRunResult } from "../session/index.js";
|
|
3
|
+
type StructuredAgentOutputErrorCode = "agent-status-transition-denied" | "unsupported-schema-version";
|
|
4
|
+
type StructuredAgentOutputErrorDetails = {
|
|
5
|
+
readonly role: string;
|
|
6
|
+
readonly suggestedStatus?: string;
|
|
7
|
+
readonly allowedStatuses?: readonly string[];
|
|
8
|
+
readonly schemaVersion?: string;
|
|
9
|
+
readonly supportedMajorVersion?: number;
|
|
10
|
+
};
|
|
11
|
+
export declare class StructuredAgentOutputError extends Error {
|
|
12
|
+
readonly code: StructuredAgentOutputErrorCode;
|
|
13
|
+
readonly details: StructuredAgentOutputErrorDetails;
|
|
14
|
+
readonly name = "StructuredAgentOutputError";
|
|
15
|
+
constructor(code: StructuredAgentOutputErrorCode, details: StructuredAgentOutputErrorDetails);
|
|
16
|
+
}
|
|
17
|
+
export declare const readAgentOutput: (result: SessionRunResult) => string;
|
|
18
|
+
export declare const parseAgentJson: <T>(text: string, schema: ZodType<T>, role: string) => T;
|
|
19
|
+
export declare const assertAgentSuggestedStatus: (role: string, suggestedStatus: string, allowedStatuses: readonly string[]) => void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=agent-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-output.d.ts","sourceRoot":"","sources":["../../src/controller/agent-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,KAAK,CAAA;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAK3D,KAAK,8BAA8B,GAC/B,gCAAgC,GAChC,4BAA4B,CAAA;AAEhC,KAAK,iCAAiC,GAAG;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CACxC,CAAA;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAIjD,QAAQ,CAAC,IAAI,EAAE,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,iCAAiC;IAJrD,QAAQ,CAAC,IAAI,gCAA+B;gBAGjC,IAAI,EAAE,8BAA8B,EACpC,OAAO,EAAE,iCAAiC;CAItD;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,gBAAgB,KAAG,MAS1D,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,MAAM,MAAM,EAAE,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,KAAG,CAclF,CAAA;AAED,eAAO,MAAM,0BAA0B,GACrC,MAAM,MAAM,EACZ,iBAAiB,MAAM,EACvB,iBAAiB,SAAS,MAAM,EAAE,KACjC,IASF,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ZodError } from "zod";
|
|
2
|
+
import { AgentOutputParseError, AgentRunFailedError, RunCancellationError } from "./errors.js";
|
|
3
|
+
const SUPPORTED_SCHEMA_MAJOR_VERSION = 1;
|
|
4
|
+
export class StructuredAgentOutputError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
details;
|
|
7
|
+
name = "StructuredAgentOutputError";
|
|
8
|
+
constructor(code, details) {
|
|
9
|
+
super(createStructuredErrorMessage(code, details));
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.details = details;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export const readAgentOutput = (result) => {
|
|
15
|
+
switch (result.kind) {
|
|
16
|
+
case "completed":
|
|
17
|
+
return result.outputText;
|
|
18
|
+
case "failed":
|
|
19
|
+
throw new AgentRunFailedError(result.role, result.error.message);
|
|
20
|
+
case "aborted":
|
|
21
|
+
throw new RunCancellationError(result.sessionId);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export const parseAgentJson = (text, schema, role) => {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(text);
|
|
27
|
+
assertSupportedSchemaVersion(parsed, role);
|
|
28
|
+
return schema.parse(parsed);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (error instanceof StructuredAgentOutputError) {
|
|
32
|
+
throw new AgentOutputParseError(role, error.message, { cause: error });
|
|
33
|
+
}
|
|
34
|
+
if (error instanceof ZodError || error instanceof SyntaxError) {
|
|
35
|
+
throw new AgentOutputParseError(role, error.message, { cause: error });
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export const assertAgentSuggestedStatus = (role, suggestedStatus, allowedStatuses) => {
|
|
41
|
+
if (allowedStatuses.includes(suggestedStatus)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
throw new StructuredAgentOutputError("agent-status-transition-denied", {
|
|
45
|
+
role,
|
|
46
|
+
suggestedStatus,
|
|
47
|
+
allowedStatuses,
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
const assertSupportedSchemaVersion = (value, role) => {
|
|
51
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const schemaVersion = Reflect.get(value, "schemaVersion");
|
|
55
|
+
if (typeof schemaVersion !== "string") {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const major = Number.parseInt(schemaVersion.split(".")[0] ?? "", 10);
|
|
59
|
+
if (major !== SUPPORTED_SCHEMA_MAJOR_VERSION) {
|
|
60
|
+
throw new StructuredAgentOutputError("unsupported-schema-version", {
|
|
61
|
+
role,
|
|
62
|
+
schemaVersion,
|
|
63
|
+
supportedMajorVersion: SUPPORTED_SCHEMA_MAJOR_VERSION,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const createStructuredErrorMessage = (code, details) => {
|
|
68
|
+
switch (code) {
|
|
69
|
+
case "agent-status-transition-denied":
|
|
70
|
+
return `${details.role} suggested unsupported status ${details.suggestedStatus}; allowed: ${details.allowedStatuses?.join(", ") ?? "none"}`;
|
|
71
|
+
case "unsupported-schema-version":
|
|
72
|
+
return `${details.role} returned unsupported schemaVersion ${details.schemaVersion}; supported major is ${details.supportedMajorVersion}`;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=agent-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-output.js","sourceRoot":"","sources":["../../src/controller/agent-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { RunId } from "../domain/index.js";
|
|
2
|
+
import type { HarnessSessionRole, SessionAdapter, SessionEvidenceReference, SessionOutputContract } from "../session/index.js";
|
|
3
|
+
import type { RunStore } from "../store/index.js";
|
|
4
|
+
import type { ControllerIdSource } from "./contracts.js";
|
|
5
|
+
export type SendAgentInput = {
|
|
6
|
+
readonly runId: RunId;
|
|
7
|
+
readonly role: HarnessSessionRole;
|
|
8
|
+
readonly title: string;
|
|
9
|
+
readonly brief: string;
|
|
10
|
+
readonly constraints: readonly string[];
|
|
11
|
+
readonly evidence: readonly SessionEvidenceReference[];
|
|
12
|
+
readonly outputContract: SessionOutputContract;
|
|
13
|
+
readonly messageLabel: string;
|
|
14
|
+
readonly systemPrompt?: string;
|
|
15
|
+
readonly timeoutMs?: number;
|
|
16
|
+
readonly parentSessionId?: string;
|
|
17
|
+
readonly workingDirectory?: string;
|
|
18
|
+
};
|
|
19
|
+
export type AgentSessionRuntime = {
|
|
20
|
+
readonly sendAgent: (input: SendAgentInput) => Promise<string>;
|
|
21
|
+
readonly abortActiveSession: (runId: RunId) => Promise<void>;
|
|
22
|
+
readonly hasActiveSession: (runId: RunId) => boolean;
|
|
23
|
+
readonly isCancelled: (runId: RunId) => boolean;
|
|
24
|
+
readonly markCancelled: (runId: RunId) => void;
|
|
25
|
+
readonly listOrphanSessions: () => Promise<readonly OrphanSession[]>;
|
|
26
|
+
readonly rebindSession: (input: RebindSessionInput) => Promise<void>;
|
|
27
|
+
readonly safeAbandonSession: (input: AbandonSessionInput) => Promise<void>;
|
|
28
|
+
};
|
|
29
|
+
export type OrphanSession = {
|
|
30
|
+
readonly runId: RunId;
|
|
31
|
+
readonly sessionId: string;
|
|
32
|
+
readonly role: HarnessSessionRole;
|
|
33
|
+
readonly state: "created" | "rebound";
|
|
34
|
+
};
|
|
35
|
+
export type RebindSessionInput = {
|
|
36
|
+
readonly runId: RunId;
|
|
37
|
+
readonly sessionId: string;
|
|
38
|
+
readonly actorId: string;
|
|
39
|
+
};
|
|
40
|
+
export type AbandonSessionInput = RebindSessionInput & {
|
|
41
|
+
readonly reason: string;
|
|
42
|
+
};
|
|
43
|
+
export declare const createAgentSessionRuntime: (input: {
|
|
44
|
+
readonly sessionAdapter: SessionAdapter;
|
|
45
|
+
readonly ids: ControllerIdSource;
|
|
46
|
+
readonly store: RunStore;
|
|
47
|
+
readonly workingDirectory: string;
|
|
48
|
+
}) => AgentSessionRuntime;
|
|
49
|
+
//# sourceMappingURL=agent-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EACxB,qBAAqB,EAEtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAIxD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,wBAAwB,EAAE,CAAA;IACtD,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAA;IAC9C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9D,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IACpD,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAA;IAC/C,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAA;IACpE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3E,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAOlF,eAAO,MAAM,yBAAyB,GAAI,OAAO;IAC/C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;IACvC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;IAChC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC,KAAG,mBAgOH,CAAA"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { readAgentOutput } from "./agent-output.js";
|
|
2
|
+
import { RunCancellationError } from "./errors.js";
|
|
3
|
+
import { roleSystemPrompt } from "./role-prompts.js";
|
|
4
|
+
export const createAgentSessionRuntime = (input) => {
|
|
5
|
+
const activeSessions = new Map();
|
|
6
|
+
const cancelledRunIds = new Set();
|
|
7
|
+
const throwIfCancelled = (runId) => {
|
|
8
|
+
if (cancelledRunIds.has(runId)) {
|
|
9
|
+
throw new RunCancellationError(runId);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const createPromptInput = (request) => ({
|
|
13
|
+
brief: request.brief,
|
|
14
|
+
constraints: request.constraints,
|
|
15
|
+
evidence: request.evidence,
|
|
16
|
+
outputContract: request.outputContract,
|
|
17
|
+
});
|
|
18
|
+
const appendSessionEvent = async (runId, type, sessionId, payload) => {
|
|
19
|
+
await input.store.appendEvents(runId, [
|
|
20
|
+
{
|
|
21
|
+
schemaVersion: "1.0.0",
|
|
22
|
+
eventId: input.ids.createEventId(`${type}-${runId}-${sessionId}`),
|
|
23
|
+
idempotencyKey: input.ids.createEventId(`session-${type}-${runId}-${sessionId}`),
|
|
24
|
+
runId,
|
|
25
|
+
type,
|
|
26
|
+
timestamp: new Date().toISOString(),
|
|
27
|
+
payload,
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
30
|
+
};
|
|
31
|
+
const setActiveSession = (runId, session) => {
|
|
32
|
+
const sessions = activeSessions.get(runId) ?? new Map();
|
|
33
|
+
sessions.set(session.sessionId, session);
|
|
34
|
+
activeSessions.set(runId, sessions);
|
|
35
|
+
};
|
|
36
|
+
const releaseActiveSession = async (runId, sessionId, reason) => {
|
|
37
|
+
const sessions = activeSessions.get(runId);
|
|
38
|
+
const activeSession = sessions?.get(sessionId);
|
|
39
|
+
if (activeSession === undefined) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (activeSession.timeoutId !== undefined) {
|
|
43
|
+
clearTimeout(activeSession.timeoutId);
|
|
44
|
+
}
|
|
45
|
+
sessions?.delete(sessionId);
|
|
46
|
+
if (sessions?.size === 0) {
|
|
47
|
+
activeSessions.delete(runId);
|
|
48
|
+
}
|
|
49
|
+
await input.sessionAdapter.release({ sessionId: activeSession.sessionId, reason });
|
|
50
|
+
};
|
|
51
|
+
const requireOrphanSession = async (runId, sessionId) => {
|
|
52
|
+
const orphanSession = (await listOrphanSessions()).find((candidate) => candidate.runId === runId && candidate.sessionId === sessionId);
|
|
53
|
+
if (orphanSession === undefined) {
|
|
54
|
+
throw new TypeError(`orphan session ${sessionId} for run ${runId} does not exist`);
|
|
55
|
+
}
|
|
56
|
+
return orphanSession;
|
|
57
|
+
};
|
|
58
|
+
const listOrphanSessions = async () => {
|
|
59
|
+
if (input.store.listRunIds === undefined) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
const orphanSessions = [];
|
|
63
|
+
for (const runId of await input.store.listRunIds()) {
|
|
64
|
+
const events = await input.store.listEvents(runId);
|
|
65
|
+
const sessions = new Map();
|
|
66
|
+
for (const event of events) {
|
|
67
|
+
const sessionId = readStringPayload(event.payload, "sessionId");
|
|
68
|
+
if (sessionId === undefined) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (event.type === "session.created") {
|
|
72
|
+
const role = readRolePayload(event.payload);
|
|
73
|
+
if (role !== undefined) {
|
|
74
|
+
sessions.set(sessionId, { runId, sessionId, role, state: "created" });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (event.type === "session.released" || event.type === "session.safe-abandoned") {
|
|
78
|
+
sessions.delete(sessionId);
|
|
79
|
+
}
|
|
80
|
+
else if (event.type === "session.rebound") {
|
|
81
|
+
const current = sessions.get(sessionId);
|
|
82
|
+
if (current !== undefined) {
|
|
83
|
+
sessions.set(sessionId, { ...current, state: "rebound" });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
orphanSessions.push(...sessions.values());
|
|
88
|
+
}
|
|
89
|
+
return orphanSessions;
|
|
90
|
+
};
|
|
91
|
+
const createTimeout = (runId, sessionId, timeoutMs) => {
|
|
92
|
+
if (timeoutMs === undefined) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
return setTimeout(() => {
|
|
96
|
+
void input.sessionAdapter.abort({ sessionId, reason: "timeout" }).catch(() => undefined);
|
|
97
|
+
void releaseActiveSession(runId, sessionId, "timeout");
|
|
98
|
+
}, timeoutMs);
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
async sendAgent(request) {
|
|
102
|
+
throwIfCancelled(request.runId);
|
|
103
|
+
const session = await input.sessionAdapter.create({
|
|
104
|
+
role: request.role,
|
|
105
|
+
title: request.title,
|
|
106
|
+
workingDirectory: request.workingDirectory ?? input.workingDirectory,
|
|
107
|
+
...(request.parentSessionId === undefined
|
|
108
|
+
? {}
|
|
109
|
+
: { parentSessionId: request.parentSessionId }),
|
|
110
|
+
promptInput: createPromptInput(request),
|
|
111
|
+
...(request.timeoutMs === undefined ? {} : { timeoutMs: request.timeoutMs }),
|
|
112
|
+
});
|
|
113
|
+
const timeoutId = createTimeout(request.runId, session.session.sessionId, request.timeoutMs);
|
|
114
|
+
setActiveSession(request.runId, timeoutId === undefined
|
|
115
|
+
? { sessionId: session.session.sessionId }
|
|
116
|
+
: { sessionId: session.session.sessionId, timeoutId });
|
|
117
|
+
await appendSessionEvent(request.runId, "session.created", session.session.sessionId, {
|
|
118
|
+
sessionId: session.session.sessionId,
|
|
119
|
+
role: request.role,
|
|
120
|
+
});
|
|
121
|
+
try {
|
|
122
|
+
const result = await input.sessionAdapter.send({
|
|
123
|
+
sessionId: session.session.sessionId,
|
|
124
|
+
messageId: input.ids.createMessageId(request.messageLabel),
|
|
125
|
+
prompt: request.brief,
|
|
126
|
+
promptInput: createPromptInput(request),
|
|
127
|
+
systemPrompt: request.systemPrompt ?? roleSystemPrompt(request.role),
|
|
128
|
+
});
|
|
129
|
+
throwIfCancelled(request.runId);
|
|
130
|
+
return readAgentOutput(result);
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
await appendSessionEvent(request.runId, "session.released", session.session.sessionId, {
|
|
134
|
+
sessionId: session.session.sessionId,
|
|
135
|
+
reason: "completed",
|
|
136
|
+
});
|
|
137
|
+
await releaseActiveSession(request.runId, session.session.sessionId, "completed");
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
async abortActiveSession(runId) {
|
|
141
|
+
cancelledRunIds.add(runId);
|
|
142
|
+
const sessions = activeSessions.get(runId);
|
|
143
|
+
if (sessions !== undefined) {
|
|
144
|
+
for (const activeSession of sessions.values()) {
|
|
145
|
+
await input.sessionAdapter.abort({
|
|
146
|
+
sessionId: activeSession.sessionId,
|
|
147
|
+
reason: "controller",
|
|
148
|
+
});
|
|
149
|
+
await releaseActiveSession(runId, activeSession.sessionId, "controller");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
hasActiveSession(runId) {
|
|
154
|
+
return (activeSessions.get(runId)?.size ?? 0) > 0;
|
|
155
|
+
},
|
|
156
|
+
isCancelled(runId) {
|
|
157
|
+
return cancelledRunIds.has(runId);
|
|
158
|
+
},
|
|
159
|
+
markCancelled(runId) {
|
|
160
|
+
cancelledRunIds.add(runId);
|
|
161
|
+
},
|
|
162
|
+
async listOrphanSessions() {
|
|
163
|
+
return listOrphanSessions();
|
|
164
|
+
},
|
|
165
|
+
async rebindSession(session) {
|
|
166
|
+
const orphanSession = await requireOrphanSession(session.runId, session.sessionId);
|
|
167
|
+
const snapshot = input.sessionAdapter.getSession(session.sessionId);
|
|
168
|
+
if (snapshot === undefined || snapshot.role !== orphanSession.role) {
|
|
169
|
+
throw new TypeError(`session ${session.sessionId} is not available for rebind`);
|
|
170
|
+
}
|
|
171
|
+
setActiveSession(session.runId, { sessionId: session.sessionId });
|
|
172
|
+
await appendSessionEvent(session.runId, "session.rebound", session.sessionId, {
|
|
173
|
+
sessionId: session.sessionId,
|
|
174
|
+
actorId: session.actorId,
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
async safeAbandonSession(session) {
|
|
178
|
+
await requireOrphanSession(session.runId, session.sessionId);
|
|
179
|
+
const sessions = activeSessions.get(session.runId);
|
|
180
|
+
if (sessions?.has(session.sessionId) === true) {
|
|
181
|
+
sessions.delete(session.sessionId);
|
|
182
|
+
if (sessions.size === 0) {
|
|
183
|
+
activeSessions.delete(session.runId);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
await input.sessionAdapter.release({
|
|
187
|
+
sessionId: session.sessionId,
|
|
188
|
+
reason: `safe-abandon:${session.reason}`,
|
|
189
|
+
});
|
|
190
|
+
await appendSessionEvent(session.runId, "session.safe-abandoned", session.sessionId, {
|
|
191
|
+
sessionId: session.sessionId,
|
|
192
|
+
actorId: session.actorId,
|
|
193
|
+
reason: session.reason,
|
|
194
|
+
});
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
const readStringPayload = (payload, key) => {
|
|
199
|
+
if (typeof payload !== "object" || payload === null || Array.isArray(payload)) {
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
const value = Reflect.get(payload, key);
|
|
203
|
+
return typeof value === "string" ? value : undefined;
|
|
204
|
+
};
|
|
205
|
+
const readRolePayload = (payload) => {
|
|
206
|
+
const role = readStringPayload(payload, "role");
|
|
207
|
+
switch (role) {
|
|
208
|
+
case "intake":
|
|
209
|
+
case "planner":
|
|
210
|
+
case "worker":
|
|
211
|
+
case "verifier":
|
|
212
|
+
case "acceptance":
|
|
213
|
+
case "failure-analyzer":
|
|
214
|
+
case "repair-worker":
|
|
215
|
+
return role;
|
|
216
|
+
default:
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=agent-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"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"}
|