harness-engineering-agent 0.1.7 → 0.1.9
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 +161 -62
- package/dist/agent/harness-agent-capabilities.d.ts +4 -0
- package/dist/agent/harness-agent-capabilities.d.ts.map +1 -0
- package/dist/agent/harness-agent-capabilities.js +4 -0
- package/dist/agent/harness-agent-capabilities.js.map +1 -0
- package/dist/agent/harness-agent-capability-builders.d.ts +11 -0
- package/dist/agent/harness-agent-capability-builders.d.ts.map +1 -0
- package/dist/agent/harness-agent-capability-builders.js +57 -0
- package/dist/agent/harness-agent-capability-builders.js.map +1 -0
- package/dist/agent/harness-agent-capability-data.d.ts +3 -0
- package/dist/agent/harness-agent-capability-data.d.ts.map +1 -0
- package/dist/agent/harness-agent-capability-data.js +23 -0
- package/dist/agent/harness-agent-capability-data.js.map +1 -0
- package/dist/agent/harness-agent-capability-types.d.ts +50 -0
- package/dist/agent/harness-agent-capability-types.d.ts.map +1 -0
- package/dist/agent/harness-agent-capability-types.js +3 -0
- package/dist/agent/harness-agent-capability-types.js.map +1 -0
- package/dist/agent/harness-role-capability-directory-data.d.ts +3 -0
- package/dist/agent/harness-role-capability-directory-data.d.ts.map +1 -0
- package/dist/agent/harness-role-capability-directory-data.js +208 -0
- package/dist/agent/harness-role-capability-directory-data.js.map +1 -0
- package/dist/agent/harness-role-capability-directory.d.ts +43 -0
- package/dist/agent/harness-role-capability-directory.d.ts.map +1 -0
- package/dist/agent/harness-role-capability-directory.js +57 -0
- package/dist/agent/harness-role-capability-directory.js.map +1 -0
- package/dist/agent/index.d.ts +7 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +6 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/config/config-defaults.d.ts +22 -0
- package/dist/config/config-defaults.d.ts.map +1 -1
- package/dist/config/config-defaults.js +22 -0
- package/dist/config/config-defaults.js.map +1 -1
- package/dist/config/config-merge.d.ts.map +1 -1
- package/dist/config/config-merge.js +30 -0
- package/dist/config/config-merge.js.map +1 -1
- package/dist/config/config-schema.d.ts +59 -0
- package/dist/config/config-schema.d.ts.map +1 -1
- package/dist/config/config-schema.js +18 -1
- package/dist/config/config-schema.js.map +1 -1
- package/dist/config/config-types.d.ts +5 -1
- package/dist/config/config-types.d.ts.map +1 -1
- package/dist/config/harness-config.d.ts +2 -1
- package/dist/config/harness-config.d.ts.map +1 -1
- package/dist/config/harness-config.js +1 -0
- package/dist/config/harness-config.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/opencode-compatibility.d.ts +37 -0
- package/dist/config/opencode-compatibility.d.ts.map +1 -0
- package/dist/config/opencode-compatibility.js +99 -0
- package/dist/config/opencode-compatibility.js.map +1 -0
- package/dist/controller/agent-output.d.ts +1 -1
- package/dist/controller/agent-output.d.ts.map +1 -1
- package/dist/controller/agent-output.js +18 -1
- package/dist/controller/agent-output.js.map +1 -1
- package/dist/controller/agent-session-types.d.ts +56 -0
- package/dist/controller/agent-session-types.d.ts.map +1 -0
- package/dist/controller/agent-session-types.js +2 -0
- package/dist/controller/agent-session-types.js.map +1 -0
- package/dist/controller/agent-session-utils.d.ts +52 -0
- package/dist/controller/agent-session-utils.d.ts.map +1 -0
- package/dist/controller/agent-session-utils.js +118 -0
- package/dist/controller/agent-session-utils.js.map +1 -0
- package/dist/controller/agent-session.d.ts +2 -40
- package/dist/controller/agent-session.d.ts.map +1 -1
- package/dist/controller/agent-session.js +126 -128
- package/dist/controller/agent-session.js.map +1 -1
- package/dist/controller/contracts.d.ts +4 -2
- package/dist/controller/contracts.d.ts.map +1 -1
- package/dist/controller/contracts.js.map +1 -1
- package/dist/controller/errors.d.ts +5 -0
- package/dist/controller/errors.d.ts.map +1 -1
- package/dist/controller/errors.js +8 -0
- package/dist/controller/errors.js.map +1 -1
- package/dist/controller/evidence-factory.js +7 -1
- package/dist/controller/evidence-factory.js.map +1 -1
- package/dist/controller/failure-analysis.d.ts +12 -0
- package/dist/controller/failure-analysis.d.ts.map +1 -1
- package/dist/controller/failure-analysis.js +41 -0
- package/dist/controller/failure-analysis.js.map +1 -1
- package/dist/controller/failure-analyzer-schemas.d.ts +87 -0
- package/dist/controller/failure-analyzer-schemas.d.ts.map +1 -0
- package/dist/controller/failure-analyzer-schemas.js +117 -0
- package/dist/controller/failure-analyzer-schemas.js.map +1 -0
- package/dist/controller/graph-validator.js +18 -4
- package/dist/controller/graph-validator.js.map +1 -1
- package/dist/controller/index.d.ts +7 -2
- package/dist/controller/index.d.ts.map +1 -1
- package/dist/controller/index.js +4 -1
- package/dist/controller/index.js.map +1 -1
- package/dist/controller/repair-loop.d.ts +1 -1
- package/dist/controller/repair-loop.d.ts.map +1 -1
- package/dist/controller/repair-loop.js +28 -0
- package/dist/controller/repair-loop.js.map +1 -1
- package/dist/controller/report-factory.d.ts.map +1 -1
- package/dist/controller/report-factory.js +49 -21
- package/dist/controller/report-factory.js.map +1 -1
- package/dist/controller/role-prompts.d.ts +2 -1
- package/dist/controller/role-prompts.d.ts.map +1 -1
- package/dist/controller/role-prompts.js +3 -9
- package/dist/controller/role-prompts.js.map +1 -1
- package/dist/controller/run-acceptance.d.ts +17 -0
- package/dist/controller/run-acceptance.d.ts.map +1 -0
- package/dist/controller/run-acceptance.js +179 -0
- package/dist/controller/run-acceptance.js.map +1 -0
- package/dist/controller/run-controller.d.ts.map +1 -1
- package/dist/controller/run-controller.js +379 -96
- package/dist/controller/run-controller.js.map +1 -1
- package/dist/controller/run-state.d.ts +1 -0
- package/dist/controller/run-state.d.ts.map +1 -1
- package/dist/controller/run-state.js +12 -0
- package/dist/controller/run-state.js.map +1 -1
- package/dist/controller/session-tool-authorization.d.ts +14 -0
- package/dist/controller/session-tool-authorization.d.ts.map +1 -0
- package/dist/controller/session-tool-authorization.js +88 -0
- package/dist/controller/session-tool-authorization.js.map +1 -0
- package/dist/controller/task-agent-output.d.ts +13 -2
- package/dist/controller/task-agent-output.d.ts.map +1 -1
- package/dist/controller/task-agent-output.js +58 -1
- package/dist/controller/task-agent-output.js.map +1 -1
- package/dist/controller/task-agent-schemas.d.ts +745 -26
- package/dist/controller/task-agent-schemas.d.ts.map +1 -1
- package/dist/controller/task-agent-schemas.js +70 -21
- package/dist/controller/task-agent-schemas.js.map +1 -1
- package/dist/controller/task-executor.d.ts +2 -1
- package/dist/controller/task-executor.d.ts.map +1 -1
- package/dist/controller/task-executor.js +304 -105
- package/dist/controller/task-executor.js.map +1 -1
- package/dist/doctor/cli.d.ts +3 -0
- package/dist/doctor/cli.d.ts.map +1 -0
- package/dist/doctor/cli.js +10 -0
- package/dist/doctor/cli.js.map +1 -0
- package/dist/doctor/index.d.ts +7 -0
- package/dist/doctor/index.d.ts.map +1 -0
- package/dist/doctor/index.js +16 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/local-mcp-probe.d.ts +3 -0
- package/dist/doctor/local-mcp-probe.d.ts.map +1 -0
- package/dist/doctor/local-mcp-probe.js +151 -0
- package/dist/doctor/local-mcp-probe.js.map +1 -0
- package/dist/doctor/opencode-config.d.ts +43 -0
- package/dist/doctor/opencode-config.d.ts.map +1 -0
- package/dist/doctor/opencode-config.js +103 -0
- package/dist/doctor/opencode-config.js.map +1 -0
- package/dist/doctor/run-harness-doctor.d.ts +23 -0
- package/dist/doctor/run-harness-doctor.d.ts.map +1 -0
- package/dist/doctor/run-harness-doctor.js +176 -0
- package/dist/doctor/run-harness-doctor.js.map +1 -0
- package/dist/doctor/types.d.ts +69 -0
- package/dist/doctor/types.d.ts.map +1 -0
- package/dist/doctor/types.js +8 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/domain/acceptance-criteria.d.ts +9 -0
- package/dist/domain/acceptance-criteria.d.ts.map +1 -0
- package/dist/domain/acceptance-criteria.js +38 -0
- package/dist/domain/acceptance-criteria.js.map +1 -0
- package/dist/domain/context-package.d.ts +43 -0
- package/dist/domain/context-package.d.ts.map +1 -0
- package/dist/domain/context-package.js +54 -0
- package/dist/domain/context-package.js.map +1 -0
- package/dist/domain/evidence.d.ts +1 -0
- package/dist/domain/evidence.d.ts.map +1 -1
- package/dist/domain/evidence.js +1 -2
- package/dist/domain/evidence.js.map +1 -1
- package/dist/domain/index.d.ts +12 -4
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +6 -2
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/plan-artifacts.d.ts +170 -0
- package/dist/domain/plan-artifacts.d.ts.map +1 -0
- package/dist/domain/plan-artifacts.js +187 -0
- package/dist/domain/plan-artifacts.js.map +1 -0
- package/dist/domain/report.d.ts +608 -11
- package/dist/domain/report.d.ts.map +1 -1
- package/dist/domain/report.js +6 -4
- package/dist/domain/report.js.map +1 -1
- package/dist/domain/requirement.d.ts +22 -2
- package/dist/domain/requirement.d.ts.map +1 -1
- package/dist/domain/requirement.js +26 -3
- package/dist/domain/requirement.js.map +1 -1
- package/dist/domain/run-acceptance.d.ts +33 -0
- package/dist/domain/run-acceptance.d.ts.map +1 -0
- package/dist/domain/run-acceptance.js +29 -0
- package/dist/domain/run-acceptance.js.map +1 -0
- package/dist/domain/run.d.ts +596 -7
- package/dist/domain/run.d.ts.map +1 -1
- package/dist/domain/run.js +58 -0
- package/dist/domain/run.js.map +1 -1
- package/dist/domain/shared.d.ts +40 -2
- package/dist/domain/shared.d.ts.map +1 -1
- package/dist/domain/shared.js +26 -0
- package/dist/domain/shared.js.map +1 -1
- package/dist/domain/task-review.d.ts +57 -0
- package/dist/domain/task-review.d.ts.map +1 -0
- package/dist/domain/task-review.js +63 -0
- package/dist/domain/task-review.js.map +1 -0
- package/dist/domain/task.d.ts +24 -2
- package/dist/domain/task.d.ts.map +1 -1
- package/dist/domain/task.js +20 -12
- package/dist/domain/task.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin/create-harness-plugin.d.ts +4 -28
- package/dist/plugin/create-harness-plugin.d.ts.map +1 -1
- package/dist/plugin/create-harness-plugin.js +33 -118
- package/dist/plugin/create-harness-plugin.js.map +1 -1
- package/dist/plugin/harness-agent-config.d.ts +7 -0
- package/dist/plugin/harness-agent-config.d.ts.map +1 -1
- package/dist/plugin/harness-agent-config.js +72 -118
- package/dist/plugin/harness-agent-config.js.map +1 -1
- package/dist/plugin/harness-chat-hook.d.ts +1 -1
- package/dist/plugin/harness-chat-hook.d.ts.map +1 -1
- package/dist/plugin/harness-chat-hook.js +15 -23
- package/dist/plugin/harness-chat-hook.js.map +1 -1
- package/dist/plugin/harness-chat-protocol.d.ts +2 -2
- package/dist/plugin/harness-chat-protocol.d.ts.map +1 -1
- package/dist/plugin/harness-chat-protocol.js +13 -2
- package/dist/plugin/harness-chat-protocol.js.map +1 -1
- package/dist/plugin/harness-coordinator.d.ts +4 -0
- package/dist/plugin/harness-coordinator.d.ts.map +1 -1
- package/dist/plugin/harness-coordinator.js +7 -1
- package/dist/plugin/harness-coordinator.js.map +1 -1
- package/dist/plugin/harness-plugin-identifiers.d.ts +5 -0
- package/dist/plugin/harness-plugin-identifiers.d.ts.map +1 -0
- package/dist/plugin/harness-plugin-identifiers.js +24 -0
- package/dist/plugin/harness-plugin-identifiers.js.map +1 -0
- package/dist/plugin/harness-plugin-runtime.d.ts +64 -0
- package/dist/plugin/harness-plugin-runtime.d.ts.map +1 -0
- package/dist/plugin/harness-plugin-runtime.js +125 -0
- package/dist/plugin/harness-plugin-runtime.js.map +1 -0
- package/dist/plugin/harness-plugin-scheduler.d.ts +16 -0
- package/dist/plugin/harness-plugin-scheduler.d.ts.map +1 -0
- package/dist/plugin/harness-plugin-scheduler.js +51 -0
- package/dist/plugin/harness-plugin-scheduler.js.map +1 -0
- package/dist/plugin/harness-request-router.d.ts.map +1 -1
- package/dist/plugin/harness-request-router.js +14 -23
- package/dist/plugin/harness-request-router.js.map +1 -1
- package/dist/plugin/harness-requirement.d.ts +1 -1
- package/dist/plugin/harness-requirement.d.ts.map +1 -1
- package/dist/plugin/harness-requirement.js +2 -3
- package/dist/plugin/harness-requirement.js.map +1 -1
- package/dist/session/contracts.d.ts +9 -0
- package/dist/session/contracts.d.ts.map +1 -1
- package/dist/session/contracts.js.map +1 -1
- package/dist/session/fake-session-adapter.d.ts.map +1 -1
- package/dist/session/fake-session-adapter.js +1 -0
- package/dist/session/fake-session-adapter.js.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js.map +1 -1
- package/dist/session/opencode-session-adapter.d.ts +2 -1
- package/dist/session/opencode-session-adapter.d.ts.map +1 -1
- package/dist/session/opencode-session-adapter.js +7 -2
- package/dist/session/opencode-session-adapter.js.map +1 -1
- package/dist/session/opencode-session-prompts.d.ts +2 -10
- package/dist/session/opencode-session-prompts.d.ts.map +1 -1
- package/dist/session/opencode-session-prompts.js +7 -9
- package/dist/session/opencode-session-prompts.js.map +1 -1
- package/dist/store/run-event.d.ts +596 -7
- package/dist/store/run-event.d.ts.map +1 -1
- package/dist/tools/harness-research-tools.d.ts +22 -0
- package/dist/tools/harness-research-tools.d.ts.map +1 -1
- package/dist/tools/harness-research-tools.js +173 -64
- package/dist/tools/harness-research-tools.js.map +1 -1
- package/dist/tools/harness-tool-capabilities.d.ts +342 -0
- package/dist/tools/harness-tool-capabilities.d.ts.map +1 -0
- package/dist/tools/harness-tool-capabilities.js +170 -0
- package/dist/tools/harness-tool-capabilities.js.map +1 -0
- package/dist/verification/command-policy.d.ts.map +1 -1
- package/dist/verification/command-policy.js +2 -2
- package/dist/verification/command-policy.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { RunId } from "../domain/index.js";
|
|
2
|
+
import type { HarnessSessionRole, SessionAdapter, SessionEvidenceReference, SessionOutputContract, SessionPromptInput } from "../session/index.js";
|
|
3
|
+
import type { RunEvent, RunStore } from "../store/index.js";
|
|
4
|
+
import type { ControllerIdSource } from "./contracts.js";
|
|
5
|
+
export type ActiveSession = {
|
|
6
|
+
readonly sessionId: string;
|
|
7
|
+
readonly timeoutId?: ReturnType<typeof setTimeout>;
|
|
8
|
+
};
|
|
9
|
+
export declare const createPromptInput: (request: {
|
|
10
|
+
readonly brief: string;
|
|
11
|
+
readonly constraints: readonly string[];
|
|
12
|
+
readonly evidence: readonly SessionEvidenceReference[];
|
|
13
|
+
readonly outputContract: SessionOutputContract;
|
|
14
|
+
}) => SessionPromptInput;
|
|
15
|
+
export declare const appendSessionEvent: (input: {
|
|
16
|
+
readonly runId: RunId;
|
|
17
|
+
readonly type: string;
|
|
18
|
+
readonly sessionId: string;
|
|
19
|
+
readonly payload: RunEvent["payload"];
|
|
20
|
+
readonly store: RunStore;
|
|
21
|
+
readonly ids: ControllerIdSource;
|
|
22
|
+
}) => Promise<void>;
|
|
23
|
+
export declare const releaseActiveSession: (input: {
|
|
24
|
+
readonly activeSessions: Map<RunId, Map<string, ActiveSession>>;
|
|
25
|
+
readonly runId: RunId;
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
readonly reason: string;
|
|
28
|
+
readonly sessionAdapter: SessionAdapter;
|
|
29
|
+
}) => Promise<void>;
|
|
30
|
+
export declare const requireOrphanSession: (input: {
|
|
31
|
+
readonly runId: RunId;
|
|
32
|
+
readonly sessionId: string;
|
|
33
|
+
readonly listOrphanSessions: () => Promise<readonly OrphanSession[]>;
|
|
34
|
+
}) => Promise<OrphanSession>;
|
|
35
|
+
export type OrphanSession = {
|
|
36
|
+
readonly runId: RunId;
|
|
37
|
+
readonly sessionId: string;
|
|
38
|
+
readonly role: HarnessSessionRole;
|
|
39
|
+
readonly state: "created" | "rebound";
|
|
40
|
+
};
|
|
41
|
+
export declare const listOrphanSessions: (input: {
|
|
42
|
+
readonly store: RunStore;
|
|
43
|
+
}) => Promise<readonly OrphanSession[]>;
|
|
44
|
+
export declare const createTimeout: (input: {
|
|
45
|
+
readonly runId: RunId;
|
|
46
|
+
readonly sessionId: string;
|
|
47
|
+
readonly timeoutMs: number | undefined;
|
|
48
|
+
readonly sessionAdapter: SessionAdapter;
|
|
49
|
+
readonly activeSessions: Map<RunId, Map<string, ActiveSession>>;
|
|
50
|
+
readonly releaseReason: string;
|
|
51
|
+
}) => ReturnType<typeof setTimeout> | undefined;
|
|
52
|
+
//# sourceMappingURL=agent-session-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session-utils.d.ts","sourceRoot":"","sources":["../../src/controller/agent-session-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
export const createPromptInput = (request) => ({
|
|
2
|
+
brief: request.brief,
|
|
3
|
+
constraints: request.constraints,
|
|
4
|
+
evidence: request.evidence,
|
|
5
|
+
outputContract: request.outputContract,
|
|
6
|
+
...(Reflect.get(request, "executionCategory") === undefined
|
|
7
|
+
? {}
|
|
8
|
+
: { executionCategory: Reflect.get(request, "executionCategory") }),
|
|
9
|
+
...(Reflect.get(request, "profileOverride") === undefined ||
|
|
10
|
+
typeof Reflect.get(request, "profileOverride") !== "object" ||
|
|
11
|
+
Reflect.get(Reflect.get(request, "profileOverride"), "skill") === undefined
|
|
12
|
+
? {}
|
|
13
|
+
: {
|
|
14
|
+
skill: Reflect.get(Reflect.get(request, "profileOverride"), "skill"),
|
|
15
|
+
}),
|
|
16
|
+
...(Reflect.get(request, "allowedPaths") === undefined
|
|
17
|
+
? {}
|
|
18
|
+
: { allowedPaths: Reflect.get(request, "allowedPaths") }),
|
|
19
|
+
});
|
|
20
|
+
export const appendSessionEvent = async (input) => {
|
|
21
|
+
await input.store.appendEvents(input.runId, [
|
|
22
|
+
{
|
|
23
|
+
schemaVersion: "1.0.0",
|
|
24
|
+
eventId: input.ids.createEventId(`${input.type}-${input.runId}-${input.sessionId}`),
|
|
25
|
+
idempotencyKey: input.ids.createEventId(`session-${input.type}-${input.runId}-${input.sessionId}`),
|
|
26
|
+
runId: input.runId,
|
|
27
|
+
type: input.type,
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
payload: input.payload,
|
|
30
|
+
},
|
|
31
|
+
]);
|
|
32
|
+
};
|
|
33
|
+
export const releaseActiveSession = async (input) => {
|
|
34
|
+
const sessions = input.activeSessions.get(input.runId);
|
|
35
|
+
const activeSession = sessions?.get(input.sessionId);
|
|
36
|
+
if (activeSession === undefined)
|
|
37
|
+
return;
|
|
38
|
+
if (activeSession.timeoutId !== undefined)
|
|
39
|
+
clearTimeout(activeSession.timeoutId);
|
|
40
|
+
sessions?.delete(input.sessionId);
|
|
41
|
+
if (sessions?.size === 0)
|
|
42
|
+
input.activeSessions.delete(input.runId);
|
|
43
|
+
await input.sessionAdapter.release({ sessionId: activeSession.sessionId, reason: input.reason });
|
|
44
|
+
};
|
|
45
|
+
export const requireOrphanSession = async (input) => {
|
|
46
|
+
const orphanSession = (await input.listOrphanSessions()).find((candidate) => candidate.runId === input.runId && candidate.sessionId === input.sessionId);
|
|
47
|
+
if (orphanSession === undefined) {
|
|
48
|
+
throw new TypeError(`orphan session ${input.sessionId} for run ${input.runId} does not exist`);
|
|
49
|
+
}
|
|
50
|
+
return orphanSession;
|
|
51
|
+
};
|
|
52
|
+
export const listOrphanSessions = async (input) => {
|
|
53
|
+
if (input.store.listRunIds === undefined)
|
|
54
|
+
return [];
|
|
55
|
+
const orphanSessions = [];
|
|
56
|
+
for (const runId of await input.store.listRunIds()) {
|
|
57
|
+
const events = await input.store.listEvents(runId);
|
|
58
|
+
const sessions = new Map();
|
|
59
|
+
for (const event of events) {
|
|
60
|
+
const sessionId = readStringPayload(event.payload, "sessionId");
|
|
61
|
+
if (sessionId === undefined)
|
|
62
|
+
continue;
|
|
63
|
+
if (event.type === "session.created") {
|
|
64
|
+
const role = readRolePayload(event.payload);
|
|
65
|
+
if (role !== undefined)
|
|
66
|
+
sessions.set(sessionId, { runId, sessionId, role, state: "created" });
|
|
67
|
+
}
|
|
68
|
+
else if (event.type === "session.released" || event.type === "session.safe-abandoned") {
|
|
69
|
+
sessions.delete(sessionId);
|
|
70
|
+
}
|
|
71
|
+
else if (event.type === "session.rebound") {
|
|
72
|
+
const current = sessions.get(sessionId);
|
|
73
|
+
if (current !== undefined)
|
|
74
|
+
sessions.set(sessionId, { ...current, state: "rebound" });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
orphanSessions.push(...sessions.values());
|
|
78
|
+
}
|
|
79
|
+
return orphanSessions;
|
|
80
|
+
};
|
|
81
|
+
export const createTimeout = (input) => {
|
|
82
|
+
if (input.timeoutMs === undefined)
|
|
83
|
+
return undefined;
|
|
84
|
+
return setTimeout(() => {
|
|
85
|
+
void input.sessionAdapter
|
|
86
|
+
.abort({ sessionId: input.sessionId, reason: "timeout" })
|
|
87
|
+
.catch(() => undefined);
|
|
88
|
+
void releaseActiveSession({
|
|
89
|
+
activeSessions: input.activeSessions,
|
|
90
|
+
runId: input.runId,
|
|
91
|
+
sessionId: input.sessionId,
|
|
92
|
+
reason: input.releaseReason,
|
|
93
|
+
sessionAdapter: input.sessionAdapter,
|
|
94
|
+
});
|
|
95
|
+
}, input.timeoutMs);
|
|
96
|
+
};
|
|
97
|
+
const readStringPayload = (payload, key) => {
|
|
98
|
+
if (typeof payload !== "object" || payload === null || Array.isArray(payload))
|
|
99
|
+
return undefined;
|
|
100
|
+
const value = Reflect.get(payload, key);
|
|
101
|
+
return typeof value === "string" ? value : undefined;
|
|
102
|
+
};
|
|
103
|
+
const readRolePayload = (payload) => {
|
|
104
|
+
const role = readStringPayload(payload, "role");
|
|
105
|
+
switch (role) {
|
|
106
|
+
case "intake":
|
|
107
|
+
case "planner":
|
|
108
|
+
case "worker":
|
|
109
|
+
case "verifier":
|
|
110
|
+
case "acceptance":
|
|
111
|
+
case "failure-analyzer":
|
|
112
|
+
case "repair-worker":
|
|
113
|
+
return role;
|
|
114
|
+
default:
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=agent-session-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session-utils.js","sourceRoot":"","sources":["../../src/controller/agent-session-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { HarnessSessionRole, SessionAdapter, SessionEvidenceReference, SessionOutputContract } from "../session/index.js";
|
|
1
|
+
import type { SessionAdapter } from "../session/index.js";
|
|
3
2
|
import type { RunStore } from "../store/index.js";
|
|
3
|
+
import type { AgentSessionRuntime } from "./agent-session-types.js";
|
|
4
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
5
|
export declare const createAgentSessionRuntime: (input: {
|
|
44
6
|
readonly sessionAdapter: SessionAdapter;
|
|
45
7
|
readonly ids: ControllerIdSource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAEV,mBAAmB,EAIpB,MAAM,0BAA0B,CAAA;AAUjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAIxD,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,mBAoOH,CAAA"}
|
|
@@ -1,102 +1,27 @@
|
|
|
1
|
+
import { buildSessionToolAllowlist } from "../agent/index.js";
|
|
1
2
|
import { readAgentOutput } from "./agent-output.js";
|
|
2
|
-
import {
|
|
3
|
+
import { appendSessionEvent, createPromptInput, createTimeout, listOrphanSessions, releaseActiveSession, requireOrphanSession, } from "./agent-session-utils.js";
|
|
4
|
+
import { RunCancellationError, RunPausedError } from "./errors.js";
|
|
3
5
|
import { roleSystemPrompt } from "./role-prompts.js";
|
|
4
6
|
export const createAgentSessionRuntime = (input) => {
|
|
5
7
|
const activeSessions = new Map();
|
|
6
|
-
const
|
|
8
|
+
const interruptedRuns = new Map();
|
|
7
9
|
const throwIfCancelled = (runId) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
const interruption = interruptedRuns.get(runId);
|
|
11
|
+
switch (interruption) {
|
|
12
|
+
case "cancelled":
|
|
13
|
+
throw new RunCancellationError(runId);
|
|
14
|
+
case "paused":
|
|
15
|
+
throw new RunPausedError(runId);
|
|
16
|
+
default:
|
|
17
|
+
return;
|
|
10
18
|
}
|
|
11
19
|
};
|
|
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
20
|
const setActiveSession = (runId, session) => {
|
|
32
21
|
const sessions = activeSessions.get(runId) ?? new Map();
|
|
33
22
|
sessions.set(session.sessionId, session);
|
|
34
23
|
activeSessions.set(runId, sessions);
|
|
35
24
|
};
|
|
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
25
|
return {
|
|
101
26
|
async sendAgent(request) {
|
|
102
27
|
throwIfCancelled(request.runId);
|
|
@@ -110,35 +35,60 @@ export const createAgentSessionRuntime = (input) => {
|
|
|
110
35
|
promptInput: createPromptInput(request),
|
|
111
36
|
...(request.timeoutMs === undefined ? {} : { timeoutMs: request.timeoutMs }),
|
|
112
37
|
});
|
|
113
|
-
const timeoutId = createTimeout(
|
|
38
|
+
const timeoutId = createTimeout({
|
|
39
|
+
runId: request.runId,
|
|
40
|
+
sessionId: session.session.sessionId,
|
|
41
|
+
timeoutMs: request.timeoutMs,
|
|
42
|
+
sessionAdapter: input.sessionAdapter,
|
|
43
|
+
activeSessions,
|
|
44
|
+
releaseReason: "timeout",
|
|
45
|
+
});
|
|
114
46
|
setActiveSession(request.runId, timeoutId === undefined
|
|
115
47
|
? { sessionId: session.session.sessionId }
|
|
116
48
|
: { sessionId: session.session.sessionId, timeoutId });
|
|
117
|
-
await appendSessionEvent(
|
|
49
|
+
await appendSessionEvent({
|
|
50
|
+
runId: request.runId,
|
|
51
|
+
type: "session.created",
|
|
118
52
|
sessionId: session.session.sessionId,
|
|
119
|
-
role: request.role,
|
|
53
|
+
payload: { sessionId: session.session.sessionId, role: request.role },
|
|
54
|
+
store: input.store,
|
|
55
|
+
ids: input.ids,
|
|
120
56
|
});
|
|
121
57
|
try {
|
|
58
|
+
const tools = buildSessionToolAllowlist(request.role);
|
|
122
59
|
const result = await input.sessionAdapter.send({
|
|
123
60
|
sessionId: session.session.sessionId,
|
|
124
61
|
messageId: input.ids.createMessageId(request.messageLabel),
|
|
125
62
|
prompt: request.brief,
|
|
126
63
|
promptInput: createPromptInput(request),
|
|
64
|
+
...(request.profileOverride === undefined
|
|
65
|
+
? {}
|
|
66
|
+
: { profileOverride: request.profileOverride }),
|
|
127
67
|
systemPrompt: request.systemPrompt ?? roleSystemPrompt(request.role),
|
|
68
|
+
...(tools === undefined ? {} : { tools }),
|
|
128
69
|
});
|
|
129
70
|
throwIfCancelled(request.runId);
|
|
130
71
|
return readAgentOutput(result);
|
|
131
72
|
}
|
|
132
73
|
finally {
|
|
133
|
-
await appendSessionEvent(
|
|
74
|
+
await appendSessionEvent({
|
|
75
|
+
runId: request.runId,
|
|
76
|
+
type: "session.released",
|
|
77
|
+
sessionId: session.session.sessionId,
|
|
78
|
+
payload: { sessionId: session.session.sessionId, reason: "completed" },
|
|
79
|
+
store: input.store,
|
|
80
|
+
ids: input.ids,
|
|
81
|
+
});
|
|
82
|
+
await releaseActiveSession({
|
|
83
|
+
activeSessions,
|
|
84
|
+
runId: request.runId,
|
|
134
85
|
sessionId: session.session.sessionId,
|
|
135
86
|
reason: "completed",
|
|
87
|
+
sessionAdapter: input.sessionAdapter,
|
|
136
88
|
});
|
|
137
|
-
await releaseActiveSession(request.runId, session.session.sessionId, "completed");
|
|
138
89
|
}
|
|
139
90
|
},
|
|
140
91
|
async abortActiveSession(runId) {
|
|
141
|
-
cancelledRunIds.add(runId);
|
|
142
92
|
const sessions = activeSessions.get(runId);
|
|
143
93
|
if (sessions !== undefined) {
|
|
144
94
|
for (const activeSession of sessions.values()) {
|
|
@@ -146,7 +96,13 @@ export const createAgentSessionRuntime = (input) => {
|
|
|
146
96
|
sessionId: activeSession.sessionId,
|
|
147
97
|
reason: "controller",
|
|
148
98
|
});
|
|
149
|
-
await releaseActiveSession(
|
|
99
|
+
await releaseActiveSession({
|
|
100
|
+
activeSessions,
|
|
101
|
+
runId,
|
|
102
|
+
sessionId: activeSession.sessionId,
|
|
103
|
+
reason: "controller",
|
|
104
|
+
sessionAdapter: input.sessionAdapter,
|
|
105
|
+
});
|
|
150
106
|
}
|
|
151
107
|
}
|
|
152
108
|
},
|
|
@@ -154,67 +110,109 @@ export const createAgentSessionRuntime = (input) => {
|
|
|
154
110
|
return (activeSessions.get(runId)?.size ?? 0) > 0;
|
|
155
111
|
},
|
|
156
112
|
isCancelled(runId) {
|
|
157
|
-
return
|
|
113
|
+
return interruptedRuns.get(runId) === "cancelled";
|
|
158
114
|
},
|
|
159
115
|
markCancelled(runId) {
|
|
160
|
-
|
|
116
|
+
interruptedRuns.set(runId, "cancelled");
|
|
117
|
+
},
|
|
118
|
+
markPaused(runId) {
|
|
119
|
+
interruptedRuns.set(runId, "paused");
|
|
120
|
+
},
|
|
121
|
+
clearInterruption(runId) {
|
|
122
|
+
interruptedRuns.delete(runId);
|
|
161
123
|
},
|
|
162
124
|
async listOrphanSessions() {
|
|
163
|
-
return listOrphanSessions();
|
|
125
|
+
return listOrphanSessions({ store: input.store });
|
|
164
126
|
},
|
|
165
127
|
async rebindSession(session) {
|
|
166
|
-
const orphanSession = await requireOrphanSession(
|
|
128
|
+
const orphanSession = await requireOrphanSession({
|
|
129
|
+
runId: session.runId,
|
|
130
|
+
sessionId: session.sessionId,
|
|
131
|
+
listOrphanSessions: () => listOrphanSessions({ store: input.store }),
|
|
132
|
+
});
|
|
167
133
|
const snapshot = input.sessionAdapter.getSession(session.sessionId);
|
|
168
134
|
if (snapshot === undefined || snapshot.role !== orphanSession.role) {
|
|
169
135
|
throw new TypeError(`session ${session.sessionId} is not available for rebind`);
|
|
170
136
|
}
|
|
171
137
|
setActiveSession(session.runId, { sessionId: session.sessionId });
|
|
172
|
-
await appendSessionEvent(
|
|
138
|
+
await appendSessionEvent({
|
|
139
|
+
runId: session.runId,
|
|
140
|
+
type: "session.rebound",
|
|
173
141
|
sessionId: session.sessionId,
|
|
174
|
-
actorId: session.actorId,
|
|
142
|
+
payload: { sessionId: session.sessionId, actorId: session.actorId },
|
|
143
|
+
store: input.store,
|
|
144
|
+
ids: input.ids,
|
|
175
145
|
});
|
|
176
146
|
},
|
|
177
147
|
async safeAbandonSession(session) {
|
|
178
|
-
await requireOrphanSession(
|
|
148
|
+
await requireOrphanSession({
|
|
149
|
+
runId: session.runId,
|
|
150
|
+
sessionId: session.sessionId,
|
|
151
|
+
listOrphanSessions: () => listOrphanSessions({ store: input.store }),
|
|
152
|
+
});
|
|
179
153
|
const sessions = activeSessions.get(session.runId);
|
|
180
154
|
if (sessions?.has(session.sessionId) === true) {
|
|
181
155
|
sessions.delete(session.sessionId);
|
|
182
|
-
if (sessions.size === 0)
|
|
156
|
+
if (sessions.size === 0)
|
|
183
157
|
activeSessions.delete(session.runId);
|
|
184
|
-
}
|
|
185
158
|
}
|
|
186
159
|
await input.sessionAdapter.release({
|
|
187
160
|
sessionId: session.sessionId,
|
|
188
161
|
reason: `safe-abandon:${session.reason}`,
|
|
189
162
|
});
|
|
190
|
-
await appendSessionEvent(
|
|
163
|
+
await appendSessionEvent({
|
|
164
|
+
runId: session.runId,
|
|
165
|
+
type: "session.safe-abandoned",
|
|
191
166
|
sessionId: session.sessionId,
|
|
192
|
-
|
|
193
|
-
|
|
167
|
+
payload: {
|
|
168
|
+
sessionId: session.sessionId,
|
|
169
|
+
actorId: session.actorId,
|
|
170
|
+
reason: session.reason,
|
|
171
|
+
},
|
|
172
|
+
store: input.store,
|
|
173
|
+
ids: input.ids,
|
|
194
174
|
});
|
|
195
175
|
},
|
|
176
|
+
async reconcileOrphanSessions(request) {
|
|
177
|
+
const orphanSessions = (await listOrphanSessions({ store: input.store })).filter((session) => session.runId === request.runId);
|
|
178
|
+
if (orphanSessions.length === 0)
|
|
179
|
+
return { kind: "none" };
|
|
180
|
+
const reboundSessionIds = [];
|
|
181
|
+
const abandonedSessionIds = [];
|
|
182
|
+
for (const orphanSession of orphanSessions) {
|
|
183
|
+
const snapshot = input.sessionAdapter.getSession(orphanSession.sessionId);
|
|
184
|
+
if (snapshot !== undefined && snapshot.role === orphanSession.role) {
|
|
185
|
+
setActiveSession(request.runId, { sessionId: orphanSession.sessionId });
|
|
186
|
+
await appendSessionEvent({
|
|
187
|
+
runId: request.runId,
|
|
188
|
+
type: "session.rebound",
|
|
189
|
+
sessionId: orphanSession.sessionId,
|
|
190
|
+
payload: { sessionId: orphanSession.sessionId, actorId: request.actorId },
|
|
191
|
+
store: input.store,
|
|
192
|
+
ids: input.ids,
|
|
193
|
+
});
|
|
194
|
+
reboundSessionIds.push(orphanSession.sessionId);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const reason = "session unavailable during run recovery";
|
|
198
|
+
await input.sessionAdapter.release({
|
|
199
|
+
sessionId: orphanSession.sessionId,
|
|
200
|
+
reason: `safe-abandon:${reason}`,
|
|
201
|
+
});
|
|
202
|
+
await appendSessionEvent({
|
|
203
|
+
runId: request.runId,
|
|
204
|
+
type: "session.safe-abandoned",
|
|
205
|
+
sessionId: orphanSession.sessionId,
|
|
206
|
+
payload: { sessionId: orphanSession.sessionId, actorId: request.actorId, reason },
|
|
207
|
+
store: input.store,
|
|
208
|
+
ids: input.ids,
|
|
209
|
+
});
|
|
210
|
+
abandonedSessionIds.push(orphanSession.sessionId);
|
|
211
|
+
}
|
|
212
|
+
return abandonedSessionIds.length > 0
|
|
213
|
+
? { kind: "abandoned", sessionIds: abandonedSessionIds }
|
|
214
|
+
: { kind: "rebound", sessionIds: reboundSessionIds };
|
|
215
|
+
},
|
|
196
216
|
};
|
|
197
217
|
};
|
|
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
218
|
//# sourceMappingURL=agent-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/controller/agent-session.ts"],"names":[],"mappings":"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"}
|