@pickle-pee/runtime 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -0
- package/dist/adapters/index.d.ts +3 -0
- package/dist/adapters/index.js +10 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/kernel-session-adapter.d.ts +73 -0
- package/dist/adapters/kernel-session-adapter.js +10 -0
- package/dist/adapters/kernel-session-adapter.js.map +1 -0
- package/dist/adapters/pi-mono-event-bridge.d.ts +54 -0
- package/dist/adapters/pi-mono-event-bridge.js +159 -0
- package/dist/adapters/pi-mono-event-bridge.js.map +1 -0
- package/dist/adapters/pi-mono-session-adapter.d.ts +75 -0
- package/dist/adapters/pi-mono-session-adapter.js +490 -0
- package/dist/adapters/pi-mono-session-adapter.js.map +1 -0
- package/dist/create-app-runtime.d.ts +52 -0
- package/dist/create-app-runtime.js +163 -0
- package/dist/create-app-runtime.js.map +1 -0
- package/dist/domain/index.d.ts +1 -0
- package/dist/domain/index.js +5 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/events/event-bus.d.ts +23 -0
- package/dist/events/event-bus.js +85 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.js +6 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/runtime-event.d.ts +158 -0
- package/dist/events/runtime-event.js +13 -0
- package/dist/events/runtime-event.js.map +1 -0
- package/dist/governance/tool-governor.d.ts +63 -0
- package/dist/governance/tool-governor.js +639 -0
- package/dist/governance/tool-governor.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/planning/index.d.ts +6 -0
- package/dist/planning/index.js +16 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/plan-engine.d.ts +49 -0
- package/dist/planning/plan-engine.js +174 -0
- package/dist/planning/plan-engine.js.map +1 -0
- package/dist/planning/plan-events.d.ts +14 -0
- package/dist/planning/plan-events.js +94 -0
- package/dist/planning/plan-events.js.map +1 -0
- package/dist/planning/plan-orchestrator.d.ts +56 -0
- package/dist/planning/plan-orchestrator.js +167 -0
- package/dist/planning/plan-orchestrator.js.map +1 -0
- package/dist/planning/plan-types.d.ts +36 -0
- package/dist/planning/plan-types.js +9 -0
- package/dist/planning/plan-types.js.map +1 -0
- package/dist/runtime-context.d.ts +21 -0
- package/dist/runtime-context.js +37 -0
- package/dist/runtime-context.js.map +1 -0
- package/dist/services/event-normalizer.d.ts +22 -0
- package/dist/services/event-normalizer.js +162 -0
- package/dist/services/event-normalizer.js.map +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +7 -0
- package/dist/services/index.js.map +1 -0
- package/dist/session/session-events.d.ts +11 -0
- package/dist/session/session-events.js +52 -0
- package/dist/session/session-events.js.map +1 -0
- package/dist/session/session-facade.d.ts +88 -0
- package/dist/session/session-facade.js +439 -0
- package/dist/session/session-facade.js.map +1 -0
- package/dist/session/session-state.d.ts +14 -0
- package/dist/session/session-state.js +75 -0
- package/dist/session/session-state.js.map +1 -0
- package/dist/subagent/aggregation.d.ts +25 -0
- package/dist/subagent/aggregation.js +124 -0
- package/dist/subagent/aggregation.js.map +1 -0
- package/dist/subagent/index.d.ts +10 -0
- package/dist/subagent/index.js +29 -0
- package/dist/subagent/index.js.map +1 -0
- package/dist/subagent/path-scope.d.ts +24 -0
- package/dist/subagent/path-scope.js +86 -0
- package/dist/subagent/path-scope.js.map +1 -0
- package/dist/subagent/result-types.d.ts +61 -0
- package/dist/subagent/result-types.js +9 -0
- package/dist/subagent/result-types.js.map +1 -0
- package/dist/subagent/stop-condition.d.ts +34 -0
- package/dist/subagent/stop-condition.js +76 -0
- package/dist/subagent/stop-condition.js.map +1 -0
- package/dist/subagent/task-types.d.ts +48 -0
- package/dist/subagent/task-types.js +10 -0
- package/dist/subagent/task-types.js.map +1 -0
- package/dist/subagent/task-validator.d.ts +22 -0
- package/dist/subagent/task-validator.js +79 -0
- package/dist/subagent/task-validator.js.map +1 -0
- package/dist/subagent/verification.d.ts +22 -0
- package/dist/subagent/verification.js +55 -0
- package/dist/subagent/verification.js.map +1 -0
- package/dist/test/aggregation.test.d.ts +1 -0
- package/dist/test/aggregation.test.js +201 -0
- package/dist/test/aggregation.test.js.map +1 -0
- package/dist/test/create-app-runtime.test.d.ts +1 -0
- package/dist/test/create-app-runtime.test.js +286 -0
- package/dist/test/create-app-runtime.test.js.map +1 -0
- package/dist/test/event-bus.test.d.ts +1 -0
- package/dist/test/event-bus.test.js +81 -0
- package/dist/test/event-bus.test.js.map +1 -0
- package/dist/test/event-normalizer.test.d.ts +1 -0
- package/dist/test/event-normalizer.test.js +143 -0
- package/dist/test/event-normalizer.test.js.map +1 -0
- package/dist/test/path-scope.test.d.ts +1 -0
- package/dist/test/path-scope.test.js +71 -0
- package/dist/test/path-scope.test.js.map +1 -0
- package/dist/test/pi-mono-event-bridge.test.d.ts +1 -0
- package/dist/test/pi-mono-event-bridge.test.js +125 -0
- package/dist/test/pi-mono-event-bridge.test.js.map +1 -0
- package/dist/test/pi-mono-live.test.d.ts +1 -0
- package/dist/test/pi-mono-live.test.js +289 -0
- package/dist/test/pi-mono-live.test.js.map +1 -0
- package/dist/test/pi-mono-session-adapter.test.d.ts +1 -0
- package/dist/test/pi-mono-session-adapter.test.js +260 -0
- package/dist/test/pi-mono-session-adapter.test.js.map +1 -0
- package/dist/test/plan-engine.test.d.ts +1 -0
- package/dist/test/plan-engine.test.js +235 -0
- package/dist/test/plan-engine.test.js.map +1 -0
- package/dist/test/plan-events.test.d.ts +1 -0
- package/dist/test/plan-events.test.js +81 -0
- package/dist/test/plan-events.test.js.map +1 -0
- package/dist/test/plan-orchestrator.test.d.ts +1 -0
- package/dist/test/plan-orchestrator.test.js +324 -0
- package/dist/test/plan-orchestrator.test.js.map +1 -0
- package/dist/test/runtime-context.test.d.ts +1 -0
- package/dist/test/runtime-context.test.js +70 -0
- package/dist/test/runtime-context.test.js.map +1 -0
- package/dist/test/session-facade.test.d.ts +1 -0
- package/dist/test/session-facade.test.js +1011 -0
- package/dist/test/session-facade.test.js.map +1 -0
- package/dist/test/session-state.test.d.ts +1 -0
- package/dist/test/session-state.test.js +118 -0
- package/dist/test/session-state.test.js.map +1 -0
- package/dist/test/stop-condition.test.d.ts +1 -0
- package/dist/test/stop-condition.test.js +105 -0
- package/dist/test/stop-condition.test.js.map +1 -0
- package/dist/test/stubs/stub-kernel-session-adapter.d.ts +45 -0
- package/dist/test/stubs/stub-kernel-session-adapter.js +186 -0
- package/dist/test/stubs/stub-kernel-session-adapter.js.map +1 -0
- package/dist/test/task-validator.test.d.ts +1 -0
- package/dist/test/task-validator.test.js +97 -0
- package/dist/test/task-validator.test.js.map +1 -0
- package/dist/test/tool-governor.test.d.ts +1 -0
- package/dist/test/tool-governor.test.js +379 -0
- package/dist/test/tool-governor.test.js.map +1 -0
- package/dist/types/index.d.ts +77 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +28 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Plan orchestration runtime integration.
|
|
4
|
+
*
|
|
5
|
+
* Connects the plan engine, path scope checking, stop condition evaluation,
|
|
6
|
+
* and result aggregation into a single service that enforces all P4 safety
|
|
7
|
+
* guarantees. This is the runtime integration point — external callers
|
|
8
|
+
* (CLI commands, plan execution drivers) interact with plans through this.
|
|
9
|
+
*
|
|
10
|
+
* Safety guarantees enforced by submitResult():
|
|
11
|
+
* 1. Boundary check: modifiedPaths are validated against the assigned task's scope
|
|
12
|
+
* 2. Stop condition check: runtime state is evaluated against stop conditions
|
|
13
|
+
* 3. Both checks cause auto-fail before completeStep is called
|
|
14
|
+
* 4. Rework decisions are made automatically for failed steps
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.createPlanOrchestrator = createPlanOrchestrator;
|
|
18
|
+
const aggregation_js_1 = require("../subagent/aggregation.js");
|
|
19
|
+
const path_scope_js_1 = require("../subagent/path-scope.js");
|
|
20
|
+
const stop_condition_js_1 = require("../subagent/stop-condition.js");
|
|
21
|
+
const task_validator_js_1 = require("../subagent/task-validator.js");
|
|
22
|
+
const plan_events_js_1 = require("./plan-events.js");
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Factory
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
function createPlanOrchestrator(engine, sessionBus, globalBus, sessionId) {
|
|
27
|
+
let activePlan = null;
|
|
28
|
+
const assignedTasks = new Map();
|
|
29
|
+
const runtimeStates = new Map();
|
|
30
|
+
function emit(event) {
|
|
31
|
+
sessionBus.emit(event);
|
|
32
|
+
globalBus.emit(event);
|
|
33
|
+
}
|
|
34
|
+
function handleStepFailure(plan, stepIndex, reason, result, task) {
|
|
35
|
+
const step = plan.steps[stepIndex];
|
|
36
|
+
const decision = (0, aggregation_js_1.decideRework)(task, result, plan.maxReworkAttempts, step.reworkCount);
|
|
37
|
+
const failed = engine.failStep(plan, stepIndex, result);
|
|
38
|
+
emit((0, plan_events_js_1.planStepFailed)(sessionId, plan.planId, step.stepId, reason, decision.type === "rework"));
|
|
39
|
+
if (decision.type === "rework") {
|
|
40
|
+
emit((0, plan_events_js_1.planRework)(sessionId, plan.planId, step.stepId, step.reworkCount + 1, decision.focusAreas));
|
|
41
|
+
}
|
|
42
|
+
// If plan failed entirely, emit plan_completed
|
|
43
|
+
if (failed.status === "failed") {
|
|
44
|
+
emit((0, plan_events_js_1.planCompleted)(sessionId, failed.planId, failed.goal, false, engine.summarize(failed)));
|
|
45
|
+
}
|
|
46
|
+
activePlan = failed;
|
|
47
|
+
return failed;
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
get engine() {
|
|
51
|
+
return engine;
|
|
52
|
+
},
|
|
53
|
+
get activePlan() {
|
|
54
|
+
return activePlan;
|
|
55
|
+
},
|
|
56
|
+
createAndActivate(planId, goal, steps) {
|
|
57
|
+
const draft = engine.createDraft(planId, goal, steps);
|
|
58
|
+
activePlan = engine.activate(draft);
|
|
59
|
+
emit((0, plan_events_js_1.planCreated)(sessionId, planId, goal, steps.length));
|
|
60
|
+
return activePlan;
|
|
61
|
+
},
|
|
62
|
+
assignTask(stepIndex, task) {
|
|
63
|
+
if (!activePlan || activePlan.status !== "active") {
|
|
64
|
+
throw new Error("No active plan to assign task to");
|
|
65
|
+
}
|
|
66
|
+
// Validate the task contract
|
|
67
|
+
const validation = (0, task_validator_js_1.validateTask)(task);
|
|
68
|
+
if (!validation.valid) {
|
|
69
|
+
throw new Error(`Invalid task: ${validation.errors.join("; ")}`);
|
|
70
|
+
}
|
|
71
|
+
const step = activePlan.steps[stepIndex];
|
|
72
|
+
if (!step) {
|
|
73
|
+
throw new Error(`Step index ${stepIndex} out of range`);
|
|
74
|
+
}
|
|
75
|
+
// Start the step
|
|
76
|
+
activePlan = engine.startStep(activePlan, stepIndex, task.taskId);
|
|
77
|
+
// Track task and runtime state
|
|
78
|
+
assignedTasks.set(stepIndex, task);
|
|
79
|
+
runtimeStates.set(stepIndex, (0, stop_condition_js_1.createInitialRuntimeState)());
|
|
80
|
+
emit((0, plan_events_js_1.planStepStarted)(sessionId, activePlan.planId, step.stepId, step.description));
|
|
81
|
+
return activePlan;
|
|
82
|
+
},
|
|
83
|
+
submitResult(stepIndex, result) {
|
|
84
|
+
if (!activePlan || activePlan.status !== "active") {
|
|
85
|
+
throw new Error("No active plan to submit result to");
|
|
86
|
+
}
|
|
87
|
+
const task = assignedTasks.get(stepIndex);
|
|
88
|
+
if (!task) {
|
|
89
|
+
throw new Error(`No task assigned to step ${stepIndex}. Call assignTask first.`);
|
|
90
|
+
}
|
|
91
|
+
const step = activePlan.steps[stepIndex];
|
|
92
|
+
if (step.status !== "in_progress") {
|
|
93
|
+
throw new Error(`Step ${stepIndex} is ${step.status}, expected in_progress`);
|
|
94
|
+
}
|
|
95
|
+
if (result.taskId !== task.taskId || result.taskId !== step.taskId) {
|
|
96
|
+
throw new Error(`Result taskId "${result.taskId}" does not match assigned task "${task.taskId}" for step ${stepIndex}`);
|
|
97
|
+
}
|
|
98
|
+
// --- Safety Gate ---
|
|
99
|
+
if (result.status === "completed") {
|
|
100
|
+
// 1. Boundary check
|
|
101
|
+
const boundaryViolations = result.modifiedPaths.filter((p) => (0, path_scope_js_1.wouldViolateBoundary)(task.scope, p));
|
|
102
|
+
if (boundaryViolations.length > 0) {
|
|
103
|
+
const violationResult = {
|
|
104
|
+
...result,
|
|
105
|
+
status: "boundary_violation",
|
|
106
|
+
};
|
|
107
|
+
return handleStepFailure(activePlan, stepIndex, "boundary_violation", violationResult, task);
|
|
108
|
+
}
|
|
109
|
+
// 2. Stop condition check
|
|
110
|
+
let rtState = runtimeStates.get(stepIndex) ?? (0, stop_condition_js_1.createInitialRuntimeState)();
|
|
111
|
+
for (const p of result.modifiedPaths) {
|
|
112
|
+
rtState = (0, stop_condition_js_1.recordModification)(rtState, p);
|
|
113
|
+
}
|
|
114
|
+
rtState = {
|
|
115
|
+
...rtState,
|
|
116
|
+
elapsedMs: Math.max(rtState.elapsedMs, result.runtime?.elapsedMs ?? 0),
|
|
117
|
+
errorCount: rtState.errorCount + Math.max(0, result.runtime?.errorCount ?? 0),
|
|
118
|
+
boundaryViolations: rtState.boundaryViolations + Math.max(0, result.runtime?.boundaryViolations ?? 0),
|
|
119
|
+
};
|
|
120
|
+
runtimeStates.set(stepIndex, rtState);
|
|
121
|
+
const stopEval = (0, stop_condition_js_1.evaluateStopConditions)(task.stopConditions, rtState);
|
|
122
|
+
if (stopEval.triggered) {
|
|
123
|
+
const stopResult = {
|
|
124
|
+
...result,
|
|
125
|
+
status: "stop_condition_triggered",
|
|
126
|
+
};
|
|
127
|
+
return handleStepFailure(activePlan, stepIndex, `stop_condition: ${stopEval.triggeredCondition?.type ?? "unknown"}`, stopResult, task);
|
|
128
|
+
}
|
|
129
|
+
// 3. All checks passed — complete the step
|
|
130
|
+
activePlan = engine.completeStep(activePlan, stepIndex, result);
|
|
131
|
+
emit((0, plan_events_js_1.planStepCompleted)(sessionId, activePlan.planId, step.stepId, true));
|
|
132
|
+
// 4. Check plan completion
|
|
133
|
+
if (activePlan.status === "completed") {
|
|
134
|
+
emit((0, plan_events_js_1.planCompleted)(sessionId, activePlan.planId, activePlan.goal, true, engine.summarize(activePlan)));
|
|
135
|
+
}
|
|
136
|
+
return activePlan;
|
|
137
|
+
}
|
|
138
|
+
// Non-completed result → fail
|
|
139
|
+
return handleStepFailure(activePlan, stepIndex, result.status, result, task);
|
|
140
|
+
},
|
|
141
|
+
skipStep(stepIndex) {
|
|
142
|
+
if (!activePlan) {
|
|
143
|
+
throw new Error("No active plan");
|
|
144
|
+
}
|
|
145
|
+
activePlan = engine.skipStep(activePlan, stepIndex);
|
|
146
|
+
// Check plan completion after skip
|
|
147
|
+
if (activePlan.status === "completed") {
|
|
148
|
+
emit((0, plan_events_js_1.planCompleted)(sessionId, activePlan.planId, activePlan.goal, true, engine.summarize(activePlan)));
|
|
149
|
+
}
|
|
150
|
+
return activePlan;
|
|
151
|
+
},
|
|
152
|
+
abandonPlan(_reason) {
|
|
153
|
+
if (!activePlan) {
|
|
154
|
+
throw new Error("No active plan");
|
|
155
|
+
}
|
|
156
|
+
activePlan = engine.abandon(activePlan, "user_abandoned");
|
|
157
|
+
emit((0, plan_events_js_1.planCompleted)(sessionId, activePlan.planId, activePlan.goal, false, engine.summarize(activePlan)));
|
|
158
|
+
return activePlan;
|
|
159
|
+
},
|
|
160
|
+
summarize() {
|
|
161
|
+
if (!activePlan)
|
|
162
|
+
return null;
|
|
163
|
+
return engine.summarize(activePlan);
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=plan-orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-orchestrator.js","sourceRoot":"","sources":["../../src/planning/plan-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan domain types.
|
|
3
|
+
*
|
|
4
|
+
* Foundation types for the plan state machine and subagent task orchestration.
|
|
5
|
+
* The plan engine itself is in plan-engine.ts; event factories are in plan-events.ts.
|
|
6
|
+
*/
|
|
7
|
+
import type { SubagentResult } from "../subagent/result-types.js";
|
|
8
|
+
/** Status of a plan in its lifecycle. */
|
|
9
|
+
export type PlanStatus = "draft" | "active" | "completed" | "failed" | "abandoned";
|
|
10
|
+
/** The reason a plan reached a terminal state, if applicable. */
|
|
11
|
+
export type PlanOutcomeReason = "all_steps_completed" | "step_failed" | "user_abandoned" | "boundary_violation" | "stop_condition_triggered" | "rework_limit_exceeded";
|
|
12
|
+
/** Status of a single plan step. */
|
|
13
|
+
export type PlanStepStatus = "pending" | "in_progress" | "completed" | "failed" | "skipped";
|
|
14
|
+
/** A step in a plan — minimal representation for summaries. */
|
|
15
|
+
export interface PlanStep {
|
|
16
|
+
readonly stepId: string;
|
|
17
|
+
readonly description: string;
|
|
18
|
+
readonly status: PlanStepStatus;
|
|
19
|
+
}
|
|
20
|
+
/** Rich plan step with subagent task linkage. */
|
|
21
|
+
export interface PlanStepDetail extends PlanStep {
|
|
22
|
+
/** The subagent task this step corresponds to, if dispatched. */
|
|
23
|
+
readonly taskId?: string;
|
|
24
|
+
/** The result returned by the subagent, if completed. */
|
|
25
|
+
readonly result?: SubagentResult;
|
|
26
|
+
/** Number of rework attempts for this step. */
|
|
27
|
+
readonly reworkCount: number;
|
|
28
|
+
}
|
|
29
|
+
/** Lightweight plan summary for embedding in session state. */
|
|
30
|
+
export interface PlanSummary {
|
|
31
|
+
readonly planId: string;
|
|
32
|
+
readonly goal: string;
|
|
33
|
+
readonly status: PlanStatus;
|
|
34
|
+
readonly stepCount: number;
|
|
35
|
+
readonly completedSteps: number;
|
|
36
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Plan domain types.
|
|
4
|
+
*
|
|
5
|
+
* Foundation types for the plan state machine and subagent task orchestration.
|
|
6
|
+
* The plan engine itself is in plan-engine.ts; event factories are in plan-events.ts.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
//# sourceMappingURL=plan-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-types.js","sourceRoot":"","sources":["../../src/planning/plan-types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RuntimeContext factory and helpers.
|
|
3
|
+
*
|
|
4
|
+
* RuntimeContext is an immutable value object that holds the execution context
|
|
5
|
+
* available to all runtime consumers. State changes produce new instances.
|
|
6
|
+
*/
|
|
7
|
+
import type { CliMode, ModelDescriptor, RuntimeContext, SessionId, TaskState, ToolSetDescriptor } from "./types/index.js";
|
|
8
|
+
export interface RuntimeContextParams {
|
|
9
|
+
readonly sessionId: SessionId;
|
|
10
|
+
readonly workingDirectory: string;
|
|
11
|
+
readonly agentDir?: string;
|
|
12
|
+
readonly configSources?: Readonly<Record<string, {
|
|
13
|
+
layer: string;
|
|
14
|
+
detail: string;
|
|
15
|
+
}>>;
|
|
16
|
+
readonly mode: CliMode;
|
|
17
|
+
readonly model: ModelDescriptor;
|
|
18
|
+
readonly toolSet: ToolSetDescriptor;
|
|
19
|
+
}
|
|
20
|
+
export declare function createRuntimeContext(params: RuntimeContextParams): RuntimeContext;
|
|
21
|
+
export declare function updateTaskState(context: RuntimeContext, taskState: TaskState): RuntimeContext;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RuntimeContext factory and helpers.
|
|
4
|
+
*
|
|
5
|
+
* RuntimeContext is an immutable value object that holds the execution context
|
|
6
|
+
* available to all runtime consumers. State changes produce new instances.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createRuntimeContext = createRuntimeContext;
|
|
10
|
+
exports.updateTaskState = updateTaskState;
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Factory
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
const IDLE_TASK = {
|
|
15
|
+
status: "idle",
|
|
16
|
+
currentTaskId: null,
|
|
17
|
+
startedAt: null,
|
|
18
|
+
};
|
|
19
|
+
function createRuntimeContext(params) {
|
|
20
|
+
return {
|
|
21
|
+
sessionId: params.sessionId,
|
|
22
|
+
workingDirectory: params.workingDirectory,
|
|
23
|
+
agentDir: params.agentDir,
|
|
24
|
+
configSources: params.configSources,
|
|
25
|
+
mode: params.mode,
|
|
26
|
+
model: params.model,
|
|
27
|
+
toolSet: params.toolSet,
|
|
28
|
+
taskState: IDLE_TASK,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Updaters — return new instances
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
function updateTaskState(context, taskState) {
|
|
35
|
+
return { ...context, taskState };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=runtime-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-context.js","sourceRoot":"","sources":["../src/runtime-context.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAmCH,oDAWC;AAMD,0CAEC;AA7BD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,SAAS,GAAc;IAC5B,MAAM,EAAE,MAAM;IACd,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,IAAI;CACN,CAAC;AAEX,SAAgB,oBAAoB,CAAC,MAA4B;IAChE,OAAO;QACN,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,SAAS;KACpB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,SAAgB,eAAe,CAAC,OAAuB,EAAE,SAAoB;IAC5E,OAAO,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translates raw upstream events into standardized product-layer RuntimeEvents.
|
|
3
|
+
*
|
|
4
|
+
* This is the single point of translation. Unrecognized raw events return `null`
|
|
5
|
+
* and are silently dropped — they are never leaked to consumers.
|
|
6
|
+
*
|
|
7
|
+
* The mapping table is a P2 skeleton. It will be refined when pi-mono is
|
|
8
|
+
* integrated and the actual upstream event types are known.
|
|
9
|
+
*/
|
|
10
|
+
import type { RawUpstreamEvent } from "../adapters/kernel-session-adapter.js";
|
|
11
|
+
import type { RuntimeEvent } from "../events/runtime-event.js";
|
|
12
|
+
import type { SessionId } from "../types/index.js";
|
|
13
|
+
export declare class EventNormalizer {
|
|
14
|
+
private readonly sessionId;
|
|
15
|
+
constructor(sessionId: SessionId);
|
|
16
|
+
/**
|
|
17
|
+
* Map a raw upstream event to a product-layer RuntimeEvent.
|
|
18
|
+
*
|
|
19
|
+
* Returns `null` for unrecognized events (they are silently dropped).
|
|
20
|
+
*/
|
|
21
|
+
normalize(raw: RawUpstreamEvent): RuntimeEvent | null;
|
|
22
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Translates raw upstream events into standardized product-layer RuntimeEvents.
|
|
4
|
+
*
|
|
5
|
+
* This is the single point of translation. Unrecognized raw events return `null`
|
|
6
|
+
* and are silently dropped — they are never leaked to consumers.
|
|
7
|
+
*
|
|
8
|
+
* The mapping table is a P2 skeleton. It will be refined when pi-mono is
|
|
9
|
+
* integrated and the actual upstream event types are known.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EventNormalizer = void 0;
|
|
13
|
+
const session_events_js_1 = require("../session/session-events.js");
|
|
14
|
+
class EventNormalizer {
|
|
15
|
+
sessionId;
|
|
16
|
+
constructor(sessionId) {
|
|
17
|
+
this.sessionId = sessionId;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Map a raw upstream event to a product-layer RuntimeEvent.
|
|
21
|
+
*
|
|
22
|
+
* Returns `null` for unrecognized events (they are silently dropped).
|
|
23
|
+
*/
|
|
24
|
+
normalize(raw) {
|
|
25
|
+
const base = {
|
|
26
|
+
id: (0, session_events_js_1.generateEventId)(),
|
|
27
|
+
timestamp: raw.timestamp,
|
|
28
|
+
sessionId: this.sessionId,
|
|
29
|
+
};
|
|
30
|
+
switch (raw.type) {
|
|
31
|
+
// -- Session lifecycle --
|
|
32
|
+
case "agent_start":
|
|
33
|
+
return {
|
|
34
|
+
...base,
|
|
35
|
+
category: "session",
|
|
36
|
+
type: "session_created",
|
|
37
|
+
model: raw.payload?.model ?? {
|
|
38
|
+
id: "unknown",
|
|
39
|
+
provider: "unknown",
|
|
40
|
+
},
|
|
41
|
+
toolSet: raw.payload?.toolSet ?? [],
|
|
42
|
+
};
|
|
43
|
+
case "agent_end":
|
|
44
|
+
return {
|
|
45
|
+
...base,
|
|
46
|
+
category: "session",
|
|
47
|
+
type: "session_closed",
|
|
48
|
+
recoveryData: {
|
|
49
|
+
sessionId: this.sessionId,
|
|
50
|
+
model: { id: "unknown", provider: "unknown" },
|
|
51
|
+
toolSet: [],
|
|
52
|
+
planSummary: null,
|
|
53
|
+
compactionSummary: null,
|
|
54
|
+
taskState: { status: "idle", currentTaskId: null, startedAt: null },
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
// -- Tool execution --
|
|
58
|
+
case "tool_execution_start":
|
|
59
|
+
return {
|
|
60
|
+
...base,
|
|
61
|
+
category: "tool",
|
|
62
|
+
type: "tool_started",
|
|
63
|
+
toolName: raw.payload?.toolName ?? "unknown",
|
|
64
|
+
toolCallId: raw.payload?.toolCallId ?? "",
|
|
65
|
+
parameters: raw.payload?.parameters ?? {},
|
|
66
|
+
};
|
|
67
|
+
case "tool_execution_update":
|
|
68
|
+
return {
|
|
69
|
+
...base,
|
|
70
|
+
category: "tool",
|
|
71
|
+
type: "tool_update",
|
|
72
|
+
toolName: raw.payload?.toolName ?? "unknown",
|
|
73
|
+
toolCallId: raw.payload?.toolCallId ?? "",
|
|
74
|
+
update: raw.payload?.update ?? "",
|
|
75
|
+
};
|
|
76
|
+
case "tool_execution_end": {
|
|
77
|
+
const status = raw.payload?.status ?? "success";
|
|
78
|
+
return {
|
|
79
|
+
...base,
|
|
80
|
+
category: "tool",
|
|
81
|
+
type: "tool_completed",
|
|
82
|
+
toolName: raw.payload?.toolName ?? "unknown",
|
|
83
|
+
toolCallId: raw.payload?.toolCallId ?? "",
|
|
84
|
+
status,
|
|
85
|
+
result: raw.payload?.result,
|
|
86
|
+
durationMs: raw.payload?.durationMs ?? 0,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
case "tool_execution_denied":
|
|
90
|
+
return {
|
|
91
|
+
...base,
|
|
92
|
+
category: "tool",
|
|
93
|
+
type: "tool_denied",
|
|
94
|
+
toolName: raw.payload?.toolName ?? "unknown",
|
|
95
|
+
toolCallId: raw.payload?.toolCallId ?? "",
|
|
96
|
+
reason: raw.payload?.reason ?? "Tool execution denied",
|
|
97
|
+
};
|
|
98
|
+
// -- Compaction --
|
|
99
|
+
case "compaction_start":
|
|
100
|
+
return {
|
|
101
|
+
...base,
|
|
102
|
+
category: "compaction",
|
|
103
|
+
type: "compaction_started",
|
|
104
|
+
};
|
|
105
|
+
case "compaction_end":
|
|
106
|
+
return {
|
|
107
|
+
...base,
|
|
108
|
+
category: "compaction",
|
|
109
|
+
type: "compaction_completed",
|
|
110
|
+
summary: {
|
|
111
|
+
compressedAt: raw.timestamp,
|
|
112
|
+
originalMessageCount: raw.payload?.originalMessageCount ?? 0,
|
|
113
|
+
retainedMessageCount: raw.payload?.retainedMessageCount ?? 0,
|
|
114
|
+
estimatedTokensSaved: raw.payload?.estimatedTokensSaved ?? 0,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
// -- Text stream --
|
|
118
|
+
case "message_update": {
|
|
119
|
+
const kind = raw.payload?.kind;
|
|
120
|
+
if (kind === "thinking") {
|
|
121
|
+
return {
|
|
122
|
+
...base,
|
|
123
|
+
category: "text",
|
|
124
|
+
type: "thinking_delta",
|
|
125
|
+
content: raw.payload?.content ?? "",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
...base,
|
|
130
|
+
category: "text",
|
|
131
|
+
type: "text_delta",
|
|
132
|
+
content: raw.payload?.content ?? "",
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// -- Permission --
|
|
136
|
+
case "permission_request":
|
|
137
|
+
return {
|
|
138
|
+
...base,
|
|
139
|
+
category: "permission",
|
|
140
|
+
type: "permission_requested",
|
|
141
|
+
toolName: raw.payload?.toolName ?? "unknown",
|
|
142
|
+
toolCallId: raw.payload?.toolCallId ?? "",
|
|
143
|
+
riskLevel: raw.payload?.riskLevel ?? "L0",
|
|
144
|
+
reason: raw.payload?.reason,
|
|
145
|
+
targetPath: raw.payload?.targetPath,
|
|
146
|
+
};
|
|
147
|
+
case "permission_resolve":
|
|
148
|
+
return {
|
|
149
|
+
...base,
|
|
150
|
+
category: "permission",
|
|
151
|
+
type: "permission_resolved",
|
|
152
|
+
toolName: raw.payload?.toolName ?? "unknown",
|
|
153
|
+
toolCallId: raw.payload?.toolCallId ?? "",
|
|
154
|
+
decision: raw.payload?.decision ?? "deny",
|
|
155
|
+
};
|
|
156
|
+
default:
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.EventNormalizer = EventNormalizer;
|
|
162
|
+
//# sourceMappingURL=event-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-normalizer.js","sourceRoot":"","sources":["../../src/services/event-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { EventNormalizer } from "./event-normalizer.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// services/ — Business logic combining domain models and adapters.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.EventNormalizer = void 0;
|
|
5
|
+
var event_normalizer_js_1 = require("./event-normalizer.js");
|
|
6
|
+
Object.defineProperty(exports, "EventNormalizer", { enumerable: true, get: function () { return event_normalizer_js_1.EventNormalizer; } });
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";AAAA,mEAAmE;;;AAEnE,6DAAwD;AAA/C,sHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory functions for session lifecycle events.
|
|
3
|
+
*
|
|
4
|
+
* Auto-fills `id` and `timestamp` so callers don't repeat boilerplate.
|
|
5
|
+
*/
|
|
6
|
+
import type { SessionClosedEvent, SessionCreatedEvent, SessionResumedEvent } from "../events/runtime-event.js";
|
|
7
|
+
import type { ModelDescriptor, SessionId, SessionRecoveryData } from "../types/index.js";
|
|
8
|
+
export declare function generateEventId(): string;
|
|
9
|
+
export declare function sessionCreated(sessionId: SessionId, model: ModelDescriptor, toolSet: readonly string[]): SessionCreatedEvent;
|
|
10
|
+
export declare function sessionResumed(sessionId: SessionId, recoveryData: SessionRecoveryData): SessionResumedEvent;
|
|
11
|
+
export declare function sessionClosed(sessionId: SessionId, recoveryData: SessionRecoveryData): SessionClosedEvent;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Factory functions for session lifecycle events.
|
|
4
|
+
*
|
|
5
|
+
* Auto-fills `id` and `timestamp` so callers don't repeat boilerplate.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.generateEventId = generateEventId;
|
|
9
|
+
exports.sessionCreated = sessionCreated;
|
|
10
|
+
exports.sessionResumed = sessionResumed;
|
|
11
|
+
exports.sessionClosed = sessionClosed;
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// ID generation
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
function generateEventId() {
|
|
16
|
+
return crypto.randomUUID();
|
|
17
|
+
}
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Event factories
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
function sessionCreated(sessionId, model, toolSet) {
|
|
22
|
+
return {
|
|
23
|
+
id: generateEventId(),
|
|
24
|
+
timestamp: Date.now(),
|
|
25
|
+
sessionId,
|
|
26
|
+
category: "session",
|
|
27
|
+
type: "session_created",
|
|
28
|
+
model,
|
|
29
|
+
toolSet,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function sessionResumed(sessionId, recoveryData) {
|
|
33
|
+
return {
|
|
34
|
+
id: generateEventId(),
|
|
35
|
+
timestamp: Date.now(),
|
|
36
|
+
sessionId,
|
|
37
|
+
category: "session",
|
|
38
|
+
type: "session_resumed",
|
|
39
|
+
recoveryData,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function sessionClosed(sessionId, recoveryData) {
|
|
43
|
+
return {
|
|
44
|
+
id: generateEventId(),
|
|
45
|
+
timestamp: Date.now(),
|
|
46
|
+
sessionId,
|
|
47
|
+
category: "session",
|
|
48
|
+
type: "session_closed",
|
|
49
|
+
recoveryData,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=session-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-events.js","sourceRoot":"","sources":["../../src/session/session-events.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AASH,0CAEC;AAMD,wCAcC;AAED,wCASC;AAED,sCASC;AAhDD,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,SAAgB,eAAe;IAC9B,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAgB,cAAc,CAC7B,SAAoB,EACpB,KAAsB,EACtB,OAA0B;IAE1B,OAAO;QACN,EAAE,EAAE,eAAe,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,iBAAiB;QACvB,KAAK;QACL,OAAO;KACP,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,SAAoB,EAAE,YAAiC;IACrF,OAAO;QACN,EAAE,EAAE,eAAe,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,iBAAiB;QACvB,YAAY;KACZ,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAAC,SAAoB,EAAE,YAAiC;IACpF,OAAO;QACN,EAAE,EAAE,eAAe,EAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,gBAAgB;QACtB,YAAY;KACZ,CAAC;AACH,CAAC"}
|