@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
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export { bridgePiMonoEvent, createInitialBridgeState, type PiMonoBridgeResult, type PiMonoBridgeState, PiMonoSessionAdapter, type PiMonoSessionAdapterOptions, } from "./adapters/index.js";
|
|
2
|
+
export type { KernelSessionAdapter, RawUpstreamEvent } from "./adapters/kernel-session-adapter.js";
|
|
3
|
+
export type { AppRuntime, AppRuntimeConfig } from "./create-app-runtime.js";
|
|
4
|
+
export { createAppRuntime } from "./create-app-runtime.js";
|
|
5
|
+
export type { EventBus, EventListener, Unsubscribe } from "./events/event-bus.js";
|
|
6
|
+
export { createEventBus } from "./events/event-bus.js";
|
|
7
|
+
export type { BaseEvent, CompactionCompletedEvent, CompactionEvent, CompactionStartedEvent, PermissionDecisionEvent, PermissionRequestedEvent, PermissionResolvedEvent, PlanCompletedEvent, PlanCreatedEvent, PlanProgressEvent, PlanReworkEvent, PlanStepCompletedEvent, PlanStepFailedEvent, PlanStepStartedEvent, RuntimeEvent, SessionClosedEvent, SessionClosingEvent, SessionCreatedEvent, SessionLifecycleEvent, SessionResumedEvent, SessionSuspendedEvent, TextDeltaEvent, TextStreamEvent, ThinkingDeltaEvent, ToolCompletedEvent, ToolDeniedEvent, ToolExecutionEvent, ToolStartedEvent, ToolUpdateEvent, } from "./events/runtime-event.js";
|
|
8
|
+
export type { GovernorDecision, ToolExecutionContext, ToolExecutionResult, ToolGovernor, } from "./governance/tool-governor.js";
|
|
9
|
+
export { createToolGovernor } from "./governance/tool-governor.js";
|
|
10
|
+
export type { Plan, PlanEngine } from "./planning/plan-engine.js";
|
|
11
|
+
export { createPlanEngine } from "./planning/plan-engine.js";
|
|
12
|
+
export { planCompleted, planCreated, planRework, planStepCompleted, planStepFailed, planStepStarted, } from "./planning/plan-events.js";
|
|
13
|
+
export type { PlanOrchestrator } from "./planning/plan-orchestrator.js";
|
|
14
|
+
export { createPlanOrchestrator } from "./planning/plan-orchestrator.js";
|
|
15
|
+
export type { PlanOutcomeReason, PlanStatus, PlanStep, PlanStepDetail, PlanStepStatus, PlanSummary, } from "./planning/plan-types.js";
|
|
16
|
+
export type { RuntimeContextParams } from "./runtime-context.js";
|
|
17
|
+
export { createRuntimeContext, updateTaskState } from "./runtime-context.js";
|
|
18
|
+
export { EventNormalizer } from "./services/event-normalizer.js";
|
|
19
|
+
export { generateEventId, sessionClosed, sessionCreated, sessionResumed } from "./session/session-events.js";
|
|
20
|
+
export type { SessionFacade } from "./session/session-facade.js";
|
|
21
|
+
export { SessionFacadeImpl } from "./session/session-facade.js";
|
|
22
|
+
export { createInitialSessionState, recoverSessionState, serializeForRecovery, updateCompactionSummary, updatePlanSummary, updateSessionStatus, updateTaskState as updateSessionTaskState, } from "./session/session-state.js";
|
|
23
|
+
export { aggregateResults, decideRework } from "./subagent/aggregation.js";
|
|
24
|
+
export { isPathAllowed, isPathForbidden, scopesOverlap, wouldViolateBoundary } from "./subagent/path-scope.js";
|
|
25
|
+
export type { AggregationResult, ReworkDecision, SubagentResult, SubagentResultStatus, SubagentRuntimeSnapshot, TaskRisk, VerificationResult, } from "./subagent/result-types.js";
|
|
26
|
+
export type { SubagentRuntimeState } from "./subagent/stop-condition.js";
|
|
27
|
+
export { createInitialRuntimeState, evaluateStopConditions, recordBoundaryViolation, recordError, recordModification, updateElapsedTime, } from "./subagent/stop-condition.js";
|
|
28
|
+
export type { PathScope, StopCondition, StopConditionType, SubagentTask, TaskInputs, Verification, VerificationType, } from "./subagent/task-types.js";
|
|
29
|
+
export type { ValidationResult } from "./subagent/task-validator.js";
|
|
30
|
+
export { hasConsistentScope, hasRequiredFields, validateTask } from "./subagent/task-validator.js";
|
|
31
|
+
export type { VerificationEvaluation } from "./subagent/verification.js";
|
|
32
|
+
export { evaluateVerifications, isVerificationTrustworthy } from "./subagent/verification.js";
|
|
33
|
+
export type { CliMode, CompactionSummary, ModelDescriptor, RuntimeContext, SessionId, SessionRecoveryData, SessionState, SessionStatus, TaskState, TaskStatus, ToolSetDescriptor, } from "./types/index.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Runtime — the shared product-layer runtime.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.isVerificationTrustworthy = exports.evaluateVerifications = exports.validateTask = exports.hasRequiredFields = exports.hasConsistentScope = exports.updateElapsedTime = exports.recordModification = exports.recordError = exports.recordBoundaryViolation = exports.evaluateStopConditions = exports.createInitialRuntimeState = exports.wouldViolateBoundary = exports.scopesOverlap = exports.isPathForbidden = exports.isPathAllowed = exports.decideRework = exports.aggregateResults = exports.updateSessionTaskState = exports.updateSessionStatus = exports.updatePlanSummary = exports.updateCompactionSummary = exports.serializeForRecovery = exports.recoverSessionState = exports.createInitialSessionState = exports.SessionFacadeImpl = exports.sessionResumed = exports.sessionCreated = exports.sessionClosed = exports.generateEventId = exports.EventNormalizer = exports.updateTaskState = exports.createRuntimeContext = exports.createPlanOrchestrator = exports.planStepStarted = exports.planStepFailed = exports.planStepCompleted = exports.planRework = exports.planCreated = exports.planCompleted = exports.createPlanEngine = exports.createToolGovernor = exports.createEventBus = exports.createAppRuntime = exports.PiMonoSessionAdapter = exports.createInitialBridgeState = exports.bridgePiMonoEvent = void 0;
|
|
5
|
+
var index_js_1 = require("./adapters/index.js");
|
|
6
|
+
Object.defineProperty(exports, "bridgePiMonoEvent", { enumerable: true, get: function () { return index_js_1.bridgePiMonoEvent; } });
|
|
7
|
+
Object.defineProperty(exports, "createInitialBridgeState", { enumerable: true, get: function () { return index_js_1.createInitialBridgeState; } });
|
|
8
|
+
Object.defineProperty(exports, "PiMonoSessionAdapter", { enumerable: true, get: function () { return index_js_1.PiMonoSessionAdapter; } });
|
|
9
|
+
// Entry point
|
|
10
|
+
var create_app_runtime_js_1 = require("./create-app-runtime.js");
|
|
11
|
+
Object.defineProperty(exports, "createAppRuntime", { enumerable: true, get: function () { return create_app_runtime_js_1.createAppRuntime; } });
|
|
12
|
+
// Events
|
|
13
|
+
var event_bus_js_1 = require("./events/event-bus.js");
|
|
14
|
+
Object.defineProperty(exports, "createEventBus", { enumerable: true, get: function () { return event_bus_js_1.createEventBus; } });
|
|
15
|
+
// Governance
|
|
16
|
+
var tool_governor_js_1 = require("./governance/tool-governor.js");
|
|
17
|
+
Object.defineProperty(exports, "createToolGovernor", { enumerable: true, get: function () { return tool_governor_js_1.createToolGovernor; } });
|
|
18
|
+
// Planning
|
|
19
|
+
var plan_engine_js_1 = require("./planning/plan-engine.js");
|
|
20
|
+
Object.defineProperty(exports, "createPlanEngine", { enumerable: true, get: function () { return plan_engine_js_1.createPlanEngine; } });
|
|
21
|
+
var plan_events_js_1 = require("./planning/plan-events.js");
|
|
22
|
+
Object.defineProperty(exports, "planCompleted", { enumerable: true, get: function () { return plan_events_js_1.planCompleted; } });
|
|
23
|
+
Object.defineProperty(exports, "planCreated", { enumerable: true, get: function () { return plan_events_js_1.planCreated; } });
|
|
24
|
+
Object.defineProperty(exports, "planRework", { enumerable: true, get: function () { return plan_events_js_1.planRework; } });
|
|
25
|
+
Object.defineProperty(exports, "planStepCompleted", { enumerable: true, get: function () { return plan_events_js_1.planStepCompleted; } });
|
|
26
|
+
Object.defineProperty(exports, "planStepFailed", { enumerable: true, get: function () { return plan_events_js_1.planStepFailed; } });
|
|
27
|
+
Object.defineProperty(exports, "planStepStarted", { enumerable: true, get: function () { return plan_events_js_1.planStepStarted; } });
|
|
28
|
+
var plan_orchestrator_js_1 = require("./planning/plan-orchestrator.js");
|
|
29
|
+
Object.defineProperty(exports, "createPlanOrchestrator", { enumerable: true, get: function () { return plan_orchestrator_js_1.createPlanOrchestrator; } });
|
|
30
|
+
var runtime_context_js_1 = require("./runtime-context.js");
|
|
31
|
+
Object.defineProperty(exports, "createRuntimeContext", { enumerable: true, get: function () { return runtime_context_js_1.createRuntimeContext; } });
|
|
32
|
+
Object.defineProperty(exports, "updateTaskState", { enumerable: true, get: function () { return runtime_context_js_1.updateTaskState; } });
|
|
33
|
+
// Services
|
|
34
|
+
var event_normalizer_js_1 = require("./services/event-normalizer.js");
|
|
35
|
+
Object.defineProperty(exports, "EventNormalizer", { enumerable: true, get: function () { return event_normalizer_js_1.EventNormalizer; } });
|
|
36
|
+
// Session events
|
|
37
|
+
var session_events_js_1 = require("./session/session-events.js");
|
|
38
|
+
Object.defineProperty(exports, "generateEventId", { enumerable: true, get: function () { return session_events_js_1.generateEventId; } });
|
|
39
|
+
Object.defineProperty(exports, "sessionClosed", { enumerable: true, get: function () { return session_events_js_1.sessionClosed; } });
|
|
40
|
+
Object.defineProperty(exports, "sessionCreated", { enumerable: true, get: function () { return session_events_js_1.sessionCreated; } });
|
|
41
|
+
Object.defineProperty(exports, "sessionResumed", { enumerable: true, get: function () { return session_events_js_1.sessionResumed; } });
|
|
42
|
+
var session_facade_js_1 = require("./session/session-facade.js");
|
|
43
|
+
Object.defineProperty(exports, "SessionFacadeImpl", { enumerable: true, get: function () { return session_facade_js_1.SessionFacadeImpl; } });
|
|
44
|
+
var session_state_js_1 = require("./session/session-state.js");
|
|
45
|
+
Object.defineProperty(exports, "createInitialSessionState", { enumerable: true, get: function () { return session_state_js_1.createInitialSessionState; } });
|
|
46
|
+
Object.defineProperty(exports, "recoverSessionState", { enumerable: true, get: function () { return session_state_js_1.recoverSessionState; } });
|
|
47
|
+
Object.defineProperty(exports, "serializeForRecovery", { enumerable: true, get: function () { return session_state_js_1.serializeForRecovery; } });
|
|
48
|
+
Object.defineProperty(exports, "updateCompactionSummary", { enumerable: true, get: function () { return session_state_js_1.updateCompactionSummary; } });
|
|
49
|
+
Object.defineProperty(exports, "updatePlanSummary", { enumerable: true, get: function () { return session_state_js_1.updatePlanSummary; } });
|
|
50
|
+
Object.defineProperty(exports, "updateSessionStatus", { enumerable: true, get: function () { return session_state_js_1.updateSessionStatus; } });
|
|
51
|
+
Object.defineProperty(exports, "updateSessionTaskState", { enumerable: true, get: function () { return session_state_js_1.updateTaskState; } });
|
|
52
|
+
// Subagent — aggregation
|
|
53
|
+
var aggregation_js_1 = require("./subagent/aggregation.js");
|
|
54
|
+
Object.defineProperty(exports, "aggregateResults", { enumerable: true, get: function () { return aggregation_js_1.aggregateResults; } });
|
|
55
|
+
Object.defineProperty(exports, "decideRework", { enumerable: true, get: function () { return aggregation_js_1.decideRework; } });
|
|
56
|
+
// Subagent — path scope
|
|
57
|
+
var path_scope_js_1 = require("./subagent/path-scope.js");
|
|
58
|
+
Object.defineProperty(exports, "isPathAllowed", { enumerable: true, get: function () { return path_scope_js_1.isPathAllowed; } });
|
|
59
|
+
Object.defineProperty(exports, "isPathForbidden", { enumerable: true, get: function () { return path_scope_js_1.isPathForbidden; } });
|
|
60
|
+
Object.defineProperty(exports, "scopesOverlap", { enumerable: true, get: function () { return path_scope_js_1.scopesOverlap; } });
|
|
61
|
+
Object.defineProperty(exports, "wouldViolateBoundary", { enumerable: true, get: function () { return path_scope_js_1.wouldViolateBoundary; } });
|
|
62
|
+
var stop_condition_js_1 = require("./subagent/stop-condition.js");
|
|
63
|
+
Object.defineProperty(exports, "createInitialRuntimeState", { enumerable: true, get: function () { return stop_condition_js_1.createInitialRuntimeState; } });
|
|
64
|
+
Object.defineProperty(exports, "evaluateStopConditions", { enumerable: true, get: function () { return stop_condition_js_1.evaluateStopConditions; } });
|
|
65
|
+
Object.defineProperty(exports, "recordBoundaryViolation", { enumerable: true, get: function () { return stop_condition_js_1.recordBoundaryViolation; } });
|
|
66
|
+
Object.defineProperty(exports, "recordError", { enumerable: true, get: function () { return stop_condition_js_1.recordError; } });
|
|
67
|
+
Object.defineProperty(exports, "recordModification", { enumerable: true, get: function () { return stop_condition_js_1.recordModification; } });
|
|
68
|
+
Object.defineProperty(exports, "updateElapsedTime", { enumerable: true, get: function () { return stop_condition_js_1.updateElapsedTime; } });
|
|
69
|
+
var task_validator_js_1 = require("./subagent/task-validator.js");
|
|
70
|
+
Object.defineProperty(exports, "hasConsistentScope", { enumerable: true, get: function () { return task_validator_js_1.hasConsistentScope; } });
|
|
71
|
+
Object.defineProperty(exports, "hasRequiredFields", { enumerable: true, get: function () { return task_validator_js_1.hasRequiredFields; } });
|
|
72
|
+
Object.defineProperty(exports, "validateTask", { enumerable: true, get: function () { return task_validator_js_1.validateTask; } });
|
|
73
|
+
var verification_js_1 = require("./subagent/verification.js");
|
|
74
|
+
Object.defineProperty(exports, "evaluateVerifications", { enumerable: true, get: function () { return verification_js_1.evaluateVerifications; } });
|
|
75
|
+
Object.defineProperty(exports, "isVerificationTrustworthy", { enumerable: true, get: function () { return verification_js_1.isVerificationTrustworthy; } });
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,8CAA8C;;;AAE9C,gDAO6B;AAN5B,6GAAA,iBAAiB,OAAA;AACjB,oHAAA,wBAAwB,OAAA;AAGxB,gHAAA,oBAAoB,OAAA;AAMrB,cAAc;AACd,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AAEzB,SAAS;AACT,sDAAuD;AAA9C,8GAAA,cAAc,OAAA;AAuCvB,aAAa;AACb,kEAAmE;AAA1D,sHAAA,kBAAkB,OAAA;AAE3B,WAAW;AACX,4DAA6D;AAApD,kHAAA,gBAAgB,OAAA;AACzB,4DAOmC;AANlC,+GAAA,aAAa,OAAA;AACb,6GAAA,WAAW,OAAA;AACX,4GAAA,UAAU,OAAA;AACV,mHAAA,iBAAiB,OAAA;AACjB,gHAAA,cAAc,OAAA;AACd,iHAAA,eAAe,OAAA;AAGhB,wEAAyE;AAAhE,8HAAA,sBAAsB,OAAA;AAY/B,2DAA6E;AAApE,0HAAA,oBAAoB,OAAA;AAAE,qHAAA,eAAe,OAAA;AAC9C,WAAW;AACX,sEAAiE;AAAxD,sHAAA,eAAe,OAAA;AACxB,iBAAiB;AACjB,iEAA6G;AAApG,oHAAA,eAAe,OAAA;AAAE,kHAAA,aAAa,OAAA;AAAE,mHAAA,cAAc,OAAA;AAAE,mHAAA,cAAc,OAAA;AAGvE,iEAAgE;AAAvD,sHAAA,iBAAiB,OAAA;AAC1B,+DAQoC;AAPnC,6HAAA,yBAAyB,OAAA;AACzB,uHAAA,mBAAmB,OAAA;AACnB,wHAAA,oBAAoB,OAAA;AACpB,2HAAA,uBAAuB,OAAA;AACvB,qHAAA,iBAAiB,OAAA;AACjB,uHAAA,mBAAmB,OAAA;AACnB,0HAAA,eAAe,OAA0B;AAE1C,yBAAyB;AACzB,4DAA2E;AAAlE,kHAAA,gBAAgB,OAAA;AAAE,8GAAA,YAAY,OAAA;AACvC,wBAAwB;AACxB,0DAA+G;AAAtG,8GAAA,aAAa,OAAA;AAAE,gHAAA,eAAe,OAAA;AAAE,8GAAA,aAAa,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAa5E,kEAOsC;AANrC,8HAAA,yBAAyB,OAAA;AACzB,2HAAA,sBAAsB,OAAA;AACtB,4HAAA,uBAAuB,OAAA;AACvB,gHAAA,WAAW,OAAA;AACX,uHAAA,kBAAkB,OAAA;AAClB,sHAAA,iBAAiB,OAAA;AAalB,kEAAmG;AAA1F,uHAAA,kBAAkB,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AAAE,iHAAA,YAAY,OAAA;AAG5D,8DAA8F;AAArF,wHAAA,qBAAqB,OAAA;AAAE,4HAAA,yBAAyB,OAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { Plan, PlanEngine } from "./plan-engine.js";
|
|
2
|
+
export { createPlanEngine } from "./plan-engine.js";
|
|
3
|
+
export { planCompleted, planCreated, planRework, planStepCompleted, planStepFailed, planStepStarted, } from "./plan-events.js";
|
|
4
|
+
export type { PlanOrchestrator } from "./plan-orchestrator.js";
|
|
5
|
+
export { createPlanOrchestrator } from "./plan-orchestrator.js";
|
|
6
|
+
export type { PlanOutcomeReason, PlanStatus, PlanStep, PlanStepDetail, PlanStepStatus, PlanSummary, } from "./plan-types.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// planning/ — Plan engine, orchestrator, types, and event factories.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createPlanOrchestrator = exports.planStepStarted = exports.planStepFailed = exports.planStepCompleted = exports.planRework = exports.planCreated = exports.planCompleted = exports.createPlanEngine = void 0;
|
|
5
|
+
var plan_engine_js_1 = require("./plan-engine.js");
|
|
6
|
+
Object.defineProperty(exports, "createPlanEngine", { enumerable: true, get: function () { return plan_engine_js_1.createPlanEngine; } });
|
|
7
|
+
var plan_events_js_1 = require("./plan-events.js");
|
|
8
|
+
Object.defineProperty(exports, "planCompleted", { enumerable: true, get: function () { return plan_events_js_1.planCompleted; } });
|
|
9
|
+
Object.defineProperty(exports, "planCreated", { enumerable: true, get: function () { return plan_events_js_1.planCreated; } });
|
|
10
|
+
Object.defineProperty(exports, "planRework", { enumerable: true, get: function () { return plan_events_js_1.planRework; } });
|
|
11
|
+
Object.defineProperty(exports, "planStepCompleted", { enumerable: true, get: function () { return plan_events_js_1.planStepCompleted; } });
|
|
12
|
+
Object.defineProperty(exports, "planStepFailed", { enumerable: true, get: function () { return plan_events_js_1.planStepFailed; } });
|
|
13
|
+
Object.defineProperty(exports, "planStepStarted", { enumerable: true, get: function () { return plan_events_js_1.planStepStarted; } });
|
|
14
|
+
var plan_orchestrator_js_1 = require("./plan-orchestrator.js");
|
|
15
|
+
Object.defineProperty(exports, "createPlanOrchestrator", { enumerable: true, get: function () { return plan_orchestrator_js_1.createPlanOrchestrator; } });
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/planning/index.ts"],"names":[],"mappings":";AAAA,qEAAqE;;;AAGrE,mDAAoD;AAA3C,kHAAA,gBAAgB,OAAA;AACzB,mDAO0B;AANzB,+GAAA,aAAa,OAAA;AACb,6GAAA,WAAW,OAAA;AACX,4GAAA,UAAU,OAAA;AACV,mHAAA,iBAAiB,OAAA;AACjB,gHAAA,cAAc,OAAA;AACd,iHAAA,eAAe,OAAA;AAGhB,+DAAgE;AAAvD,8HAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan state machine and lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* Provides immutable state transitions for plan objects. Every method returns
|
|
5
|
+
* a new Plan instance — the input is never mutated. Invalid transitions throw
|
|
6
|
+
* descriptive errors so that bugs surface early during development.
|
|
7
|
+
*
|
|
8
|
+
* Lifecycle:
|
|
9
|
+
* draft → active → completed | failed | abandoned
|
|
10
|
+
* draft → abandoned
|
|
11
|
+
*
|
|
12
|
+
* Step lifecycle:
|
|
13
|
+
* pending → in_progress → completed | failed
|
|
14
|
+
* pending → skipped
|
|
15
|
+
* failed → in_progress (rework, if under limit)
|
|
16
|
+
*/
|
|
17
|
+
import type { SubagentResult } from "../subagent/result-types.js";
|
|
18
|
+
import type { PlanOutcomeReason, PlanStatus, PlanStepDetail, PlanSummary } from "./plan-types.js";
|
|
19
|
+
export interface Plan {
|
|
20
|
+
readonly planId: string;
|
|
21
|
+
readonly goal: string;
|
|
22
|
+
readonly status: PlanStatus;
|
|
23
|
+
readonly steps: readonly PlanStepDetail[];
|
|
24
|
+
readonly createdAt: number;
|
|
25
|
+
readonly updatedAt: number;
|
|
26
|
+
readonly outcomeReason?: PlanOutcomeReason;
|
|
27
|
+
readonly maxReworkAttempts: number;
|
|
28
|
+
}
|
|
29
|
+
export interface PlanEngine {
|
|
30
|
+
/** Create a new plan in "draft" status with the given step descriptions. */
|
|
31
|
+
createDraft(planId: string, goal: string, stepDescriptions: readonly string[]): Plan;
|
|
32
|
+
/** Transition plan from "draft" to "active". */
|
|
33
|
+
activate(plan: Plan): Plan;
|
|
34
|
+
/** Start a step: transitions to "in_progress" and links a subagent taskId. */
|
|
35
|
+
startStep(plan: Plan, stepIndex: number, taskId: string): Plan;
|
|
36
|
+
/** Complete a step successfully with the subagent result. */
|
|
37
|
+
completeStep(plan: Plan, stepIndex: number, result: SubagentResult): Plan;
|
|
38
|
+
/** Fail a step with the subagent result. */
|
|
39
|
+
failStep(plan: Plan, stepIndex: number, result: SubagentResult): Plan;
|
|
40
|
+
/** Skip a pending step. */
|
|
41
|
+
skipStep(plan: Plan, stepIndex: number): Plan;
|
|
42
|
+
/** Abandon the plan with a reason. */
|
|
43
|
+
abandon(plan: Plan, reason: PlanOutcomeReason): Plan;
|
|
44
|
+
/** Derive a lightweight PlanSummary from the current plan state. */
|
|
45
|
+
summarize(plan: Plan): PlanSummary;
|
|
46
|
+
/** Get the index of the next pending step, or null if none. */
|
|
47
|
+
nextPendingStep(plan: Plan): number | null;
|
|
48
|
+
}
|
|
49
|
+
export declare function createPlanEngine(maxReworkAttempts?: number): PlanEngine;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Plan state machine and lifecycle management.
|
|
4
|
+
*
|
|
5
|
+
* Provides immutable state transitions for plan objects. Every method returns
|
|
6
|
+
* a new Plan instance — the input is never mutated. Invalid transitions throw
|
|
7
|
+
* descriptive errors so that bugs surface early during development.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle:
|
|
10
|
+
* draft → active → completed | failed | abandoned
|
|
11
|
+
* draft → abandoned
|
|
12
|
+
*
|
|
13
|
+
* Step lifecycle:
|
|
14
|
+
* pending → in_progress → completed | failed
|
|
15
|
+
* pending → skipped
|
|
16
|
+
* failed → in_progress (rework, if under limit)
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.createPlanEngine = createPlanEngine;
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Factory
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
function createPlanEngine(maxReworkAttempts = 2) {
|
|
24
|
+
function assertStatus(plan, ...expected) {
|
|
25
|
+
if (!expected.includes(plan.status)) {
|
|
26
|
+
throw new Error(`Plan "${plan.planId}" is ${plan.status}, expected ${expected.join(" or ")}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function assertStepStatus(step, index, ...expected) {
|
|
30
|
+
if (!expected.includes(step.status)) {
|
|
31
|
+
throw new Error(`Step ${index} ("${step.stepId}") is ${step.status}, expected ${expected.join(" or ")}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function assertIndex(plan, stepIndex) {
|
|
35
|
+
if (stepIndex < 0 || stepIndex >= plan.steps.length) {
|
|
36
|
+
throw new Error(`Step index ${stepIndex} out of range [0, ${plan.steps.length})`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function updateSteps(plan, stepIndex, patcher) {
|
|
40
|
+
const steps = plan.steps.map((s, i) => (i === stepIndex ? patcher(s) : s));
|
|
41
|
+
return { ...plan, steps, updatedAt: Date.now() };
|
|
42
|
+
}
|
|
43
|
+
function isTerminal(plan) {
|
|
44
|
+
return plan.status === "completed" || plan.status === "failed" || plan.status === "abandoned";
|
|
45
|
+
}
|
|
46
|
+
function checkAutoComplete(plan) {
|
|
47
|
+
const allDone = plan.steps.every((s) => s.status === "completed" || s.status === "skipped");
|
|
48
|
+
if (allDone) {
|
|
49
|
+
return {
|
|
50
|
+
...plan,
|
|
51
|
+
status: "completed",
|
|
52
|
+
outcomeReason: "all_steps_completed",
|
|
53
|
+
updatedAt: Date.now(),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return plan;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
createDraft(planId, goal, stepDescriptions) {
|
|
60
|
+
if (!stepDescriptions || stepDescriptions.length === 0) {
|
|
61
|
+
throw new Error("Plan must have at least one step");
|
|
62
|
+
}
|
|
63
|
+
const now = Date.now();
|
|
64
|
+
const steps = stepDescriptions.map((desc, i) => ({
|
|
65
|
+
stepId: `${planId}-step-${i + 1}`,
|
|
66
|
+
description: desc,
|
|
67
|
+
status: "pending",
|
|
68
|
+
reworkCount: 0,
|
|
69
|
+
}));
|
|
70
|
+
return {
|
|
71
|
+
planId,
|
|
72
|
+
goal,
|
|
73
|
+
status: "draft",
|
|
74
|
+
steps,
|
|
75
|
+
createdAt: now,
|
|
76
|
+
updatedAt: now,
|
|
77
|
+
maxReworkAttempts,
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
activate(plan) {
|
|
81
|
+
assertStatus(plan, "draft");
|
|
82
|
+
return { ...plan, status: "active", updatedAt: Date.now() };
|
|
83
|
+
},
|
|
84
|
+
startStep(plan, stepIndex, taskId) {
|
|
85
|
+
assertStatus(plan, "active");
|
|
86
|
+
assertIndex(plan, stepIndex);
|
|
87
|
+
assertStepStatus(plan.steps[stepIndex], stepIndex, "pending", "failed");
|
|
88
|
+
const step = plan.steps[stepIndex];
|
|
89
|
+
// If reworking a failed step, increment rework count
|
|
90
|
+
const reworkCount = step.status === "failed" ? step.reworkCount + 1 : step.reworkCount;
|
|
91
|
+
if (step.status === "failed" && reworkCount > plan.maxReworkAttempts) {
|
|
92
|
+
throw new Error(`Step ${stepIndex} ("${step.stepId}") has exceeded max rework attempts (${plan.maxReworkAttempts})`);
|
|
93
|
+
}
|
|
94
|
+
return updateSteps(plan, stepIndex, (s) => ({
|
|
95
|
+
...s,
|
|
96
|
+
status: "in_progress",
|
|
97
|
+
taskId,
|
|
98
|
+
reworkCount,
|
|
99
|
+
result: undefined,
|
|
100
|
+
}));
|
|
101
|
+
},
|
|
102
|
+
completeStep(plan, stepIndex, result) {
|
|
103
|
+
assertStatus(plan, "active");
|
|
104
|
+
assertIndex(plan, stepIndex);
|
|
105
|
+
assertStepStatus(plan.steps[stepIndex], stepIndex, "in_progress");
|
|
106
|
+
if (result.status !== "completed") {
|
|
107
|
+
throw new Error(`completeStep requires result.status "completed", got "${result.status}". Use failStep for non-completed results.`);
|
|
108
|
+
}
|
|
109
|
+
const updated = updateSteps(plan, stepIndex, (s) => ({
|
|
110
|
+
...s,
|
|
111
|
+
status: "completed",
|
|
112
|
+
result,
|
|
113
|
+
}));
|
|
114
|
+
return checkAutoComplete(updated);
|
|
115
|
+
},
|
|
116
|
+
failStep(plan, stepIndex, result) {
|
|
117
|
+
assertStatus(plan, "active");
|
|
118
|
+
assertIndex(plan, stepIndex);
|
|
119
|
+
assertStepStatus(plan.steps[stepIndex], stepIndex, "in_progress");
|
|
120
|
+
const updated = updateSteps(plan, stepIndex, (s) => ({
|
|
121
|
+
...s,
|
|
122
|
+
status: "failed",
|
|
123
|
+
result,
|
|
124
|
+
}));
|
|
125
|
+
// If this step has exhausted rework attempts, fail the whole plan
|
|
126
|
+
const step = updated.steps[stepIndex];
|
|
127
|
+
if (step.reworkCount >= plan.maxReworkAttempts) {
|
|
128
|
+
return {
|
|
129
|
+
...updated,
|
|
130
|
+
status: "failed",
|
|
131
|
+
outcomeReason: "rework_limit_exceeded",
|
|
132
|
+
updatedAt: Date.now(),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return updated;
|
|
136
|
+
},
|
|
137
|
+
skipStep(plan, stepIndex) {
|
|
138
|
+
assertStatus(plan, "active");
|
|
139
|
+
assertIndex(plan, stepIndex);
|
|
140
|
+
assertStepStatus(plan.steps[stepIndex], stepIndex, "pending");
|
|
141
|
+
const updated = updateSteps(plan, stepIndex, (s) => ({
|
|
142
|
+
...s,
|
|
143
|
+
status: "skipped",
|
|
144
|
+
}));
|
|
145
|
+
return checkAutoComplete(updated);
|
|
146
|
+
},
|
|
147
|
+
abandon(plan, reason) {
|
|
148
|
+
if (isTerminal(plan)) {
|
|
149
|
+
throw new Error(`Plan "${plan.planId}" is already ${plan.status} and cannot be abandoned`);
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
...plan,
|
|
153
|
+
status: "abandoned",
|
|
154
|
+
outcomeReason: reason,
|
|
155
|
+
updatedAt: Date.now(),
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
summarize(plan) {
|
|
159
|
+
const completedSteps = plan.steps.filter((s) => s.status === "completed" || s.status === "skipped").length;
|
|
160
|
+
return {
|
|
161
|
+
planId: plan.planId,
|
|
162
|
+
goal: plan.goal,
|
|
163
|
+
status: plan.status,
|
|
164
|
+
stepCount: plan.steps.length,
|
|
165
|
+
completedSteps,
|
|
166
|
+
};
|
|
167
|
+
},
|
|
168
|
+
nextPendingStep(plan) {
|
|
169
|
+
const index = plan.steps.findIndex((s) => s.status === "pending");
|
|
170
|
+
return index === -1 ? null : index;
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=plan-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-engine.js","sourceRoot":"","sources":["../../src/planning/plan-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory functions for plan lifecycle events.
|
|
3
|
+
*
|
|
4
|
+
* Follows the same pattern as session-events.ts: auto-fills id and timestamp
|
|
5
|
+
* so callers don't repeat boilerplate.
|
|
6
|
+
*/
|
|
7
|
+
import type { PlanCompletedEvent, PlanCreatedEvent, PlanReworkEvent, PlanStepCompletedEvent, PlanStepFailedEvent, PlanStepStartedEvent } from "../events/runtime-event.js";
|
|
8
|
+
import type { PlanSummary, SessionId } from "../types/index.js";
|
|
9
|
+
export declare function planCreated(sessionId: SessionId, planId: string, goal: string, stepCount: number): PlanCreatedEvent;
|
|
10
|
+
export declare function planStepStarted(sessionId: SessionId, planId: string, stepId: string, stepDescription: string): PlanStepStartedEvent;
|
|
11
|
+
export declare function planStepCompleted(sessionId: SessionId, planId: string, stepId: string, success: boolean): PlanStepCompletedEvent;
|
|
12
|
+
export declare function planStepFailed(sessionId: SessionId, planId: string, stepId: string, reason: string, reworkScheduled: boolean): PlanStepFailedEvent;
|
|
13
|
+
export declare function planRework(sessionId: SessionId, planId: string, stepId: string, reworkAttempt: number, focusAreas: readonly string[]): PlanReworkEvent;
|
|
14
|
+
export declare function planCompleted(sessionId: SessionId, planId: string, goal: string, success: boolean, summary: PlanSummary): PlanCompletedEvent;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Factory functions for plan lifecycle events.
|
|
4
|
+
*
|
|
5
|
+
* Follows the same pattern as session-events.ts: auto-fills id and timestamp
|
|
6
|
+
* so callers don't repeat boilerplate.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.planCreated = planCreated;
|
|
10
|
+
exports.planStepStarted = planStepStarted;
|
|
11
|
+
exports.planStepCompleted = planStepCompleted;
|
|
12
|
+
exports.planStepFailed = planStepFailed;
|
|
13
|
+
exports.planRework = planRework;
|
|
14
|
+
exports.planCompleted = planCompleted;
|
|
15
|
+
const session_events_js_1 = require("../session/session-events.js");
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Event factories
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
function planCreated(sessionId, planId, goal, stepCount) {
|
|
20
|
+
return {
|
|
21
|
+
id: (0, session_events_js_1.generateEventId)(),
|
|
22
|
+
timestamp: Date.now(),
|
|
23
|
+
sessionId,
|
|
24
|
+
category: "plan",
|
|
25
|
+
type: "plan_created",
|
|
26
|
+
planId,
|
|
27
|
+
goal,
|
|
28
|
+
stepCount,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function planStepStarted(sessionId, planId, stepId, stepDescription) {
|
|
32
|
+
return {
|
|
33
|
+
id: (0, session_events_js_1.generateEventId)(),
|
|
34
|
+
timestamp: Date.now(),
|
|
35
|
+
sessionId,
|
|
36
|
+
category: "plan",
|
|
37
|
+
type: "plan_step_started",
|
|
38
|
+
planId,
|
|
39
|
+
stepId,
|
|
40
|
+
stepDescription,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function planStepCompleted(sessionId, planId, stepId, success) {
|
|
44
|
+
return {
|
|
45
|
+
id: (0, session_events_js_1.generateEventId)(),
|
|
46
|
+
timestamp: Date.now(),
|
|
47
|
+
sessionId,
|
|
48
|
+
category: "plan",
|
|
49
|
+
type: "plan_step_completed",
|
|
50
|
+
planId,
|
|
51
|
+
stepId,
|
|
52
|
+
success,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function planStepFailed(sessionId, planId, stepId, reason, reworkScheduled) {
|
|
56
|
+
return {
|
|
57
|
+
id: (0, session_events_js_1.generateEventId)(),
|
|
58
|
+
timestamp: Date.now(),
|
|
59
|
+
sessionId,
|
|
60
|
+
category: "plan",
|
|
61
|
+
type: "plan_step_failed",
|
|
62
|
+
planId,
|
|
63
|
+
stepId,
|
|
64
|
+
reason,
|
|
65
|
+
reworkScheduled,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function planRework(sessionId, planId, stepId, reworkAttempt, focusAreas) {
|
|
69
|
+
return {
|
|
70
|
+
id: (0, session_events_js_1.generateEventId)(),
|
|
71
|
+
timestamp: Date.now(),
|
|
72
|
+
sessionId,
|
|
73
|
+
category: "plan",
|
|
74
|
+
type: "plan_rework",
|
|
75
|
+
planId,
|
|
76
|
+
stepId,
|
|
77
|
+
reworkAttempt,
|
|
78
|
+
focusAreas,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function planCompleted(sessionId, planId, goal, success, summary) {
|
|
82
|
+
return {
|
|
83
|
+
id: (0, session_events_js_1.generateEventId)(),
|
|
84
|
+
timestamp: Date.now(),
|
|
85
|
+
sessionId,
|
|
86
|
+
category: "plan",
|
|
87
|
+
type: "plan_completed",
|
|
88
|
+
planId,
|
|
89
|
+
goal,
|
|
90
|
+
success,
|
|
91
|
+
summary,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=plan-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-events.js","sourceRoot":"","sources":["../../src/planning/plan-events.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAiBH,kCAWC;AAED,0CAgBC;AAED,8CAgBC;AAED,wCAkBC;AAED,gCAkBC;AAED,sCAkBC;AAlHD,oEAA+D;AAG/D,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAgB,WAAW,CAAC,SAAoB,EAAE,MAAc,EAAE,IAAY,EAAE,SAAiB;IAChG,OAAO;QACN,EAAE,EAAE,IAAA,mCAAe,GAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM;QACN,IAAI;QACJ,SAAS;KACT,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAC9B,SAAoB,EACpB,MAAc,EACd,MAAc,EACd,eAAuB;IAEvB,OAAO;QACN,EAAE,EAAE,IAAA,mCAAe,GAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,mBAAmB;QACzB,MAAM;QACN,MAAM;QACN,eAAe;KACf,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAChC,SAAoB,EACpB,MAAc,EACd,MAAc,EACd,OAAgB;IAEhB,OAAO;QACN,EAAE,EAAE,IAAA,mCAAe,GAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,qBAAqB;QAC3B,MAAM;QACN,MAAM;QACN,OAAO;KACP,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAC7B,SAAoB,EACpB,MAAc,EACd,MAAc,EACd,MAAc,EACd,eAAwB;IAExB,OAAO;QACN,EAAE,EAAE,IAAA,mCAAe,GAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,kBAAkB;QACxB,MAAM;QACN,MAAM;QACN,MAAM;QACN,eAAe;KACf,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CACzB,SAAoB,EACpB,MAAc,EACd,MAAc,EACd,aAAqB,EACrB,UAA6B;IAE7B,OAAO;QACN,EAAE,EAAE,IAAA,mCAAe,GAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,aAAa;QACnB,MAAM;QACN,MAAM;QACN,aAAa;QACb,UAAU;KACV,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAC5B,SAAoB,EACpB,MAAc,EACd,IAAY,EACZ,OAAgB,EAChB,OAAoB;IAEpB,OAAO;QACN,EAAE,EAAE,IAAA,mCAAe,GAAE;QACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS;QACT,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,gBAAgB;QACtB,MAAM;QACN,IAAI;QACJ,OAAO;QACP,OAAO;KACP,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan orchestration runtime integration.
|
|
3
|
+
*
|
|
4
|
+
* Connects the plan engine, path scope checking, stop condition evaluation,
|
|
5
|
+
* and result aggregation into a single service that enforces all P4 safety
|
|
6
|
+
* guarantees. This is the runtime integration point — external callers
|
|
7
|
+
* (CLI commands, plan execution drivers) interact with plans through this.
|
|
8
|
+
*
|
|
9
|
+
* Safety guarantees enforced by submitResult():
|
|
10
|
+
* 1. Boundary check: modifiedPaths are validated against the assigned task's scope
|
|
11
|
+
* 2. Stop condition check: runtime state is evaluated against stop conditions
|
|
12
|
+
* 3. Both checks cause auto-fail before completeStep is called
|
|
13
|
+
* 4. Rework decisions are made automatically for failed steps
|
|
14
|
+
*/
|
|
15
|
+
import type { EventBus } from "../events/event-bus.js";
|
|
16
|
+
import type { SubagentResult } from "../subagent/result-types.js";
|
|
17
|
+
import type { SubagentTask } from "../subagent/task-types.js";
|
|
18
|
+
import type { SessionId } from "../types/index.js";
|
|
19
|
+
import type { Plan, PlanEngine } from "./plan-engine.js";
|
|
20
|
+
import type { PlanSummary } from "./plan-types.js";
|
|
21
|
+
export interface PlanOrchestrator {
|
|
22
|
+
/** Underlying plan engine. */
|
|
23
|
+
readonly engine: PlanEngine;
|
|
24
|
+
/** Current active plan, or null if no plan has been created yet. */
|
|
25
|
+
readonly activePlan: Plan | null;
|
|
26
|
+
/**
|
|
27
|
+
* Create a draft plan and immediately activate it.
|
|
28
|
+
* Emits `plan_created` to both event buses.
|
|
29
|
+
*/
|
|
30
|
+
createAndActivate(planId: string, goal: string, steps: string[]): Plan;
|
|
31
|
+
/**
|
|
32
|
+
* Assign a SubagentTask to a step, validate it, and start the step.
|
|
33
|
+
* Emits `plan_step_started` to both event buses.
|
|
34
|
+
*/
|
|
35
|
+
assignTask(stepIndex: number, task: SubagentTask): Plan;
|
|
36
|
+
/**
|
|
37
|
+
* Submit a result for a step. This is the main safety gate:
|
|
38
|
+
*
|
|
39
|
+
* 1. If result.status === "completed":
|
|
40
|
+
* a. Check boundary violations on modifiedPaths
|
|
41
|
+
* b. Evaluate stop conditions
|
|
42
|
+
* c. If violations or stop conditions → auto-fail (never calls completeStep)
|
|
43
|
+
* d. Otherwise → complete step
|
|
44
|
+
* 2. If result.status !== "completed" → fail step
|
|
45
|
+
* 3. For failures: decideRework, emit plan_rework if scheduled
|
|
46
|
+
* 4. If plan auto-completes: emit plan_completed
|
|
47
|
+
*/
|
|
48
|
+
submitResult(stepIndex: number, result: SubagentResult): Plan;
|
|
49
|
+
/** Skip a pending step. */
|
|
50
|
+
skipStep(stepIndex: number): Plan;
|
|
51
|
+
/** Abandon the plan. Emits `plan_completed` with success=false. */
|
|
52
|
+
abandonPlan(reason: string): Plan;
|
|
53
|
+
/** Get current plan summary, or null if no active plan. */
|
|
54
|
+
summarize(): PlanSummary | null;
|
|
55
|
+
}
|
|
56
|
+
export declare function createPlanOrchestrator(engine: PlanEngine, sessionBus: EventBus, globalBus: EventBus, sessionId: SessionId): PlanOrchestrator;
|