iosm-cli 0.2.4 → 0.2.5

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.
Files changed (65) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +23 -17
  3. package/dist/core/agent-profiles.d.ts +1 -0
  4. package/dist/core/agent-profiles.d.ts.map +1 -1
  5. package/dist/core/agent-profiles.js +10 -6
  6. package/dist/core/agent-profiles.js.map +1 -1
  7. package/dist/core/agent-session.d.ts +1 -1
  8. package/dist/core/agent-session.d.ts.map +1 -1
  9. package/dist/core/agent-session.js +6 -2
  10. package/dist/core/agent-session.js.map +1 -1
  11. package/dist/core/agent-teams.d.ts.map +1 -1
  12. package/dist/core/agent-teams.js +90 -19
  13. package/dist/core/agent-teams.js.map +1 -1
  14. package/dist/core/footer-data-provider.d.ts +6 -1
  15. package/dist/core/footer-data-provider.d.ts.map +1 -1
  16. package/dist/core/footer-data-provider.js +9 -0
  17. package/dist/core/footer-data-provider.js.map +1 -1
  18. package/dist/core/parallel-task-agent.d.ts +23 -1
  19. package/dist/core/parallel-task-agent.d.ts.map +1 -1
  20. package/dist/core/parallel-task-agent.js +110 -20
  21. package/dist/core/parallel-task-agent.js.map +1 -1
  22. package/dist/core/shared-memory.d.ts +2 -2
  23. package/dist/core/shared-memory.d.ts.map +1 -1
  24. package/dist/core/shared-memory.js +220 -91
  25. package/dist/core/shared-memory.js.map +1 -1
  26. package/dist/core/singular.d.ts.map +1 -1
  27. package/dist/core/singular.js +3 -1
  28. package/dist/core/singular.js.map +1 -1
  29. package/dist/core/subagents.d.ts +1 -1
  30. package/dist/core/subagents.d.ts.map +1 -1
  31. package/dist/core/subagents.js +11 -3
  32. package/dist/core/subagents.js.map +1 -1
  33. package/dist/core/swarm/planner.d.ts.map +1 -1
  34. package/dist/core/swarm/planner.js +200 -12
  35. package/dist/core/swarm/planner.js.map +1 -1
  36. package/dist/core/swarm/scheduler.d.ts +2 -0
  37. package/dist/core/swarm/scheduler.d.ts.map +1 -1
  38. package/dist/core/swarm/scheduler.js +87 -6
  39. package/dist/core/swarm/scheduler.js.map +1 -1
  40. package/dist/core/system-prompt.d.ts.map +1 -1
  41. package/dist/core/system-prompt.js +1 -0
  42. package/dist/core/system-prompt.js.map +1 -1
  43. package/dist/core/tools/ast-grep.d.ts.map +1 -1
  44. package/dist/core/tools/ast-grep.js +2 -0
  45. package/dist/core/tools/ast-grep.js.map +1 -1
  46. package/dist/core/tools/shared-memory.d.ts.map +1 -1
  47. package/dist/core/tools/shared-memory.js +34 -6
  48. package/dist/core/tools/shared-memory.js.map +1 -1
  49. package/dist/core/tools/task.d.ts.map +1 -1
  50. package/dist/core/tools/task.js +464 -73
  51. package/dist/core/tools/task.js.map +1 -1
  52. package/dist/core/tools/yq.d.ts.map +1 -1
  53. package/dist/core/tools/yq.js +2 -0
  54. package/dist/core/tools/yq.js.map +1 -1
  55. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  56. package/dist/modes/interactive/components/footer.js +2 -1
  57. package/dist/modes/interactive/components/footer.js.map +1 -1
  58. package/dist/modes/interactive/interactive-mode.d.ts +13 -0
  59. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  60. package/dist/modes/interactive/interactive-mode.js +756 -74
  61. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  62. package/docs/cli-reference.md +4 -0
  63. package/docs/interactive-mode.md +2 -0
  64. package/docs/orchestration-and-subagents.md +5 -0
  65. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/core/swarm/scheduler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EngineeringContract } from \"../contract.js\";\nimport { touchesConflict, HierarchicalLockManager } from \"./locks.js\";\nimport { evaluateRunGates, evaluateTaskGates } from \"./gates.js\";\nimport { DEFAULT_RETRY_POLICY, shouldRetry, type SwarmRetryPolicy } from \"./retry.js\";\nimport { SwarmSpawnQueue } from \"./spawn.js\";\nimport type {\n\tSwarmDispatchResult,\n\tSwarmEvent,\n\tSwarmGateResult,\n\tSwarmPlan,\n\tSwarmRunGateResult,\n\tSwarmRuntimeState,\n\tSwarmSchedulerResult,\n\tSwarmTaskPlan,\n\tSwarmTaskRuntimeState,\n} from \"./types.js\";\n\nconst TERMINAL_STATUSES = new Set<SwarmTaskRuntimeState[\"status\"]>([\"done\", \"error\", \"cancelled\", \"blocked\"]);\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nfunction compact(values: string[]): string[] {\n\treturn [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))];\n}\n\nfunction isTerminal(status: SwarmTaskRuntimeState[\"status\"]): boolean {\n\treturn TERMINAL_STATUSES.has(status);\n}\n\nfunction severityWeight(task: SwarmTaskPlan): number {\n\tif (task.severity === \"high\") return 3;\n\tif (task.severity === \"medium\") return 2;\n\treturn 1;\n}\n\nfunction collectDependents(plan: SwarmPlan): Map<string, number> {\n\tconst result = new Map<string, number>();\n\tfor (const task of plan.tasks) {\n\t\tfor (const dep of task.depends_on) {\n\t\t\tresult.set(dep, (result.get(dep) ?? 0) + 1);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction createTaskRuntimeState(task: SwarmTaskPlan): SwarmTaskRuntimeState {\n\treturn {\n\t\tid: task.id,\n\t\tstatus: task.depends_on.length === 0 ? \"ready\" : \"pending\",\n\t\tattempts: 0,\n\t\tdepends_on: [...task.depends_on],\n\t\ttouches: [...task.touches],\n\t\tscopes: [...task.scopes],\n\t};\n}\n\nfunction buildInitialState(input: {\n\trunId: string;\n\tplan: SwarmPlan;\n\tbudgetUsd?: number;\n\texistingState?: SwarmRuntimeState;\n}): SwarmRuntimeState {\n\tif (input.existingState) {\n\t\treturn {\n\t\t\t...input.existingState,\n\t\t\tupdatedAt: nowIso(),\n\t\t\tstatus: input.existingState.status === \"completed\" ? \"running\" : input.existingState.status,\n\t\t};\n\t}\n\n\tconst tasks: Record<string, SwarmTaskRuntimeState> = {};\n\tfor (const task of input.plan.tasks) {\n\t\ttasks[task.id] = createTaskRuntimeState(task);\n\t}\n\n\treturn {\n\t\trunId: input.runId,\n\t\tstatus: \"running\",\n\t\tcreatedAt: nowIso(),\n\t\tupdatedAt: nowIso(),\n\t\ttick: 0,\n\t\tnoProgressTicks: 0,\n\t\treadyQueue: Object.values(tasks)\n\t\t\t.filter((task) => task.status === \"ready\")\n\t\t\t.map((task) => task.id),\n\t\tblockedTasks: [],\n\t\ttasks,\n\t\tlocks: {},\n\t\tretries: {},\n\t\tbudget: {\n\t\t\tlimitUsd: input.budgetUsd,\n\t\t\tspentUsd: 0,\n\t\t\twarned80: false,\n\t\t\thardStopped: false,\n\t\t},\n\t};\n}\n\nfunction runHasOnlyBlockedTasks(state: SwarmRuntimeState): boolean {\n\tconst tasks = Object.values(state.tasks);\n\tconst unfinished = tasks.filter((task) => !isTerminal(task.status));\n\tif (unfinished.length > 0) return false;\n\treturn tasks.length > 0 && tasks.some((task) => task.status === \"blocked\");\n}\n\nfunction collectReadyTasks(state: SwarmRuntimeState, planById: Map<string, SwarmTaskPlan>): string[] {\n\tconst ready: string[] = [];\n\tfor (const [taskId, runtime] of Object.entries(state.tasks)) {\n\t\tif (runtime.status !== \"pending\" && runtime.status !== \"ready\") continue;\n\t\tconst plan = planById.get(taskId);\n\t\tif (!plan) continue;\n\t\tconst depsDone = plan.depends_on.every((dep) => state.tasks[dep]?.status === \"done\");\n\t\tif (!depsDone) {\n\t\t\truntime.status = \"pending\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (runtime.status !== \"ready\") {\n\t\t\truntime.status = \"ready\";\n\t\t}\n\t\tready.push(taskId);\n\t}\n\treturn ready;\n}\n\nfunction selectBatch(input: {\n\treadyTaskIds: string[];\n\tplanById: Map<string, SwarmTaskPlan>;\n\tmaxParallel: number;\n\tdependents: Map<string, number>;\n}): string[] {\n\tconst sorted = [...input.readyTaskIds].sort((a, b) => {\n\t\tconst taskA = input.planById.get(a);\n\t\tconst taskB = input.planById.get(b);\n\t\tif (!taskA || !taskB) return a.localeCompare(b);\n\t\tconst severityDelta = severityWeight(taskB) - severityWeight(taskA);\n\t\tif (severityDelta !== 0) return severityDelta;\n\t\tconst dependentDelta = (input.dependents.get(b) ?? 0) - (input.dependents.get(a) ?? 0);\n\t\tif (dependentDelta !== 0) return dependentDelta;\n\t\treturn a.localeCompare(b);\n\t});\n\n\tconst selected: string[] = [];\n\tfor (const taskId of sorted) {\n\t\tconst plan = input.planById.get(taskId);\n\t\tif (!plan) continue;\n\t\tconst hasConflictWithSelected = selected.some((existingId) => {\n\t\t\tconst existing = input.planById.get(existingId);\n\t\t\tif (!existing) return false;\n\t\t\treturn touchesConflict(existing.touches, plan.touches);\n\t\t});\n\t\tif (hasConflictWithSelected) continue;\n\t\tselected.push(taskId);\n\t\tif (selected.length >= Math.max(1, input.maxParallel)) break;\n\t}\n\treturn selected;\n}\n\nfunction progressScore(task: SwarmTaskPlan, dependents: Map<string, number>): number {\n\tconst dependentWeight = dependents.get(task.id) ?? 0;\n\tconst touchWeight = Math.min(3, Math.max(1, task.touches.length));\n\treturn severityWeight(task) * 3 + dependentWeight * 2 + touchWeight;\n}\n\nfunction applyProgressHeuristic(input: {\n\treadyTaskIds: string[];\n\tplanById: Map<string, SwarmTaskPlan>;\n\tdependents: Map<string, number>;\n\tstate: SwarmRuntimeState;\n\tactivateAfterNoProgressTicks: number;\n\tminScore: number;\n}): string[] {\n\tif (input.readyTaskIds.length <= 1) return input.readyTaskIds;\n\tif (input.state.noProgressTicks < input.activateAfterNoProgressTicks) return input.readyTaskIds;\n\n\tconst scored = input.readyTaskIds\n\t\t.map((taskId) => {\n\t\t\tconst plan = input.planById.get(taskId);\n\t\t\tif (!plan) return undefined;\n\t\t\treturn { taskId, score: progressScore(plan, input.dependents), severity: plan.severity };\n\t\t})\n\t\t.filter((item): item is { taskId: string; score: number; severity: SwarmTaskPlan[\"severity\"] } => item !== undefined)\n\t\t.sort((a, b) => b.score - a.score || a.taskId.localeCompare(b.taskId));\n\tif (scored.length === 0) return input.readyTaskIds;\n\n\tconst topScore = scored[0]!.score;\n\tconst threshold = Math.max(input.minScore, topScore - 2);\n\tconst filtered = scored\n\t\t.filter((item) => item.score >= threshold || item.severity === \"high\")\n\t\t.map((item) => item.taskId);\n\treturn filtered.length > 0 ? filtered : [scored[0]!.taskId];\n}\n\nfunction conflictDensity(input: { taskIds: string[]; planById: Map<string, SwarmTaskPlan> }): number {\n\tconst count = input.taskIds.length;\n\tif (count < 2) return 0;\n\tlet conflictingPairs = 0;\n\tlet totalPairs = 0;\n\tfor (let i = 0; i < count; i += 1) {\n\t\tconst a = input.planById.get(input.taskIds[i]!);\n\t\tif (!a) continue;\n\t\tfor (let j = i + 1; j < count; j += 1) {\n\t\t\tconst b = input.planById.get(input.taskIds[j]!);\n\t\t\tif (!b) continue;\n\t\t\ttotalPairs += 1;\n\t\t\tif (touchesConflict(a.touches, b.touches)) {\n\t\t\t\tconflictingPairs += 1;\n\t\t\t}\n\t\t}\n\t}\n\treturn totalPairs > 0 ? conflictingPairs / totalPairs : 0;\n}\n\nfunction applyConflictDensityGuard(input: {\n\treadyTaskIds: string[];\n\tplanById: Map<string, SwarmTaskPlan>;\n\tmaxParallel: number;\n\tthreshold: number;\n\tminParallel: number;\n}): { effectiveMaxParallel: number; density: number } {\n\tconst density = conflictDensity({ taskIds: input.readyTaskIds, planById: input.planById });\n\tif (density < input.threshold) {\n\t\treturn { effectiveMaxParallel: input.maxParallel, density };\n\t}\n\tconst scaled = Math.max(\n\t\tinput.minParallel,\n\t\tMath.floor(input.maxParallel * Math.max(0.2, 1 - density)),\n\t);\n\treturn {\n\t\teffectiveMaxParallel: Math.max(1, Math.min(input.maxParallel, scaled)),\n\t\tdensity,\n\t};\n}\n\nfunction shouldStopForBudget(state: SwarmRuntimeState): boolean {\n\tconst limit = state.budget.limitUsd;\n\tif (limit === undefined || limit <= 0) return false;\n\tif (!state.budget.warned80 && state.budget.spentUsd >= limit * 0.8) {\n\t\tstate.budget.warned80 = true;\n\t}\n\tif (state.budget.spentUsd >= limit) {\n\t\tstate.budget.hardStopped = true;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport interface RunSwarmSchedulerOptions {\n\trunId: string;\n\tplan: SwarmPlan;\n\tcontract: EngineeringContract;\n\tmaxParallel: number;\n\tbudgetUsd?: number;\n\texistingState?: SwarmRuntimeState;\n\tretryPolicy?: SwarmRetryPolicy;\n\tnoProgressTickLimit?: number;\n\tspawnCap?: number;\n\tprogressHeuristic?: {\n\t\tenabled?: boolean;\n\t\tactivateAfterNoProgressTicks?: number;\n\t\tminScore?: number;\n\t};\n\tconflictDensityGuard?: {\n\t\tenabled?: boolean;\n\t\tthreshold?: number;\n\t\tminParallel?: number;\n\t};\n\tconfirmSpawn?: (input: {\n\t\tcandidate: NonNullable<SwarmDispatchResult[\"spawnCandidates\"]>[number];\n\t\tparentTask: SwarmTaskPlan;\n\t\tparentTaskRuntime: SwarmTaskRuntimeState;\n\t\tstate: SwarmRuntimeState;\n\t}) => Promise<boolean>;\n\tdispatchTask: (input: {\n\t\ttask: SwarmTaskPlan;\n\t\truntime: SwarmTaskRuntimeState;\n\t\ttick: number;\n\t}) => Promise<SwarmDispatchResult>;\n\tonEvent?: (event: SwarmEvent, state: SwarmRuntimeState) => void;\n\tonStateChanged?: (state: SwarmRuntimeState) => void;\n\tshouldStop?: () => boolean;\n}\n\nexport interface RunSwarmSchedulerExtendedResult extends SwarmSchedulerResult {\n\tspawnBacklog: Array<{ fingerprint: string; description: string; path: string; changeType: string }>;\n}\n\nexport async function runSwarmScheduler(\n\toptions: RunSwarmSchedulerOptions,\n): Promise<RunSwarmSchedulerExtendedResult> {\n\tconst planById = new Map(options.plan.tasks.map((task) => [task.id, task]));\n\tconst dependents = collectDependents(options.plan);\n\tconst retryPolicy = options.retryPolicy ?? DEFAULT_RETRY_POLICY;\n\tconst noProgressLimit = Math.max(3, options.noProgressTickLimit ?? 8);\n\tconst spawnCap = Math.max(1, options.spawnCap ?? 30);\n\tconst progressHeuristicEnabled = options.progressHeuristic?.enabled !== false;\n\tconst progressHeuristicActivateAfter = Math.max(1, options.progressHeuristic?.activateAfterNoProgressTicks ?? 2);\n\tconst progressHeuristicMinScore = Math.max(1, options.progressHeuristic?.minScore ?? 4);\n\tconst conflictGuardEnabled = options.conflictDensityGuard?.enabled !== false;\n\tconst conflictGuardThreshold = Math.min(1, Math.max(0, options.conflictDensityGuard?.threshold ?? 0.45));\n\tconst conflictGuardMinParallel = Math.max(1, options.conflictDensityGuard?.minParallel ?? 1);\n\n\tconst state = buildInitialState({\n\t\trunId: options.runId,\n\t\tplan: options.plan,\n\t\tbudgetUsd: options.budgetUsd,\n\t\texistingState: options.existingState,\n\t});\n\tconst lockManager = new HierarchicalLockManager();\n\tconst taskGateByTaskId = new Map<string, SwarmGateResult>();\n\tconst spawned = new SwarmSpawnQueue();\n\tconst events: SwarmEvent[] = [];\n\n\tfor (const [taskId, taskState] of Object.entries(state.tasks)) {\n\t\tif (taskState.status === \"running\") {\n\t\t\ttaskState.status = \"pending\";\n\t\t\ttaskState.startedAt = undefined;\n\t\t}\n\t\tif (taskState.status === \"done\") {\n\t\t\tconst plan = planById.get(taskId);\n\t\t\tif (plan) {\n\t\t\t\ttaskGateByTaskId.set(taskId, evaluateTaskGates({ ...plan, touches: taskState.touches }, options.contract));\n\t\t\t}\n\t\t}\n\t}\n\n\tconst emit = (type: SwarmEvent[\"type\"], message: string, payload?: Record<string, unknown>, taskId?: string): void => {\n\t\tconst event: SwarmEvent = {\n\t\t\ttype,\n\t\t\ttimestamp: nowIso(),\n\t\t\trunId: options.runId,\n\t\t\ttick: state.tick,\n\t\t\tmessage,\n\t\t\tpayload,\n\t\t\t...(taskId ? { taskId } : {}),\n\t\t};\n\t\tevents.push(event);\n\t\toptions.onEvent?.(event, state);\n\t};\n\n\temit(\"run_started\", `Swarm run ${options.runId} started`, {\n\t\ttasks: options.plan.tasks.length,\n\t\tmaxParallel: options.maxParallel,\n\t\tbudgetUsd: options.budgetUsd,\n\t});\n\toptions.onStateChanged?.(state);\n\n\twhile (true) {\n\t\tif (options.shouldStop?.()) {\n\t\t\tstate.status = \"stopped\";\n\t\t\tstate.lastError = \"Run interrupted by user.\";\n\t\t\temit(\"run_stopped\", state.lastError);\n\t\t\tbreak;\n\t\t}\n\n\t\tstate.tick += 1;\n\t\tstate.updatedAt = nowIso();\n\t\temit(\"tick\", `scheduler_tick=${state.tick}`);\n\n\t\tif (shouldStopForBudget(state)) {\n\t\t\tstate.status = \"stopped\";\n\t\t\tstate.lastError = \"Budget hard-stop reached.\";\n\t\t\temit(\"run_stopped\", state.lastError, {\n\t\t\t\tbudgetLimitUsd: state.budget.limitUsd,\n\t\t\t\tspentUsd: state.budget.spentUsd,\n\t\t\t});\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tbreak;\n\t\t}\n\n\t\tconst readyTaskIds = collectReadyTasks(state, planById);\n\t\tstate.readyQueue = [...readyTaskIds];\n\t\tstate.blockedTasks = Object.values(state.tasks)\n\t\t\t.filter((task) => task.status === \"blocked\")\n\t\t\t.map((task) => task.id)\n\t\t\t.sort((a, b) => a.localeCompare(b));\n\n\t\tif (readyTaskIds.length === 0) {\n\t\t\tconst allTerminal = Object.values(state.tasks).every((task) => isTerminal(task.status));\n\t\t\tif (allTerminal) {\n\t\t\t\tconst runGate = evaluateRunGates({\n\t\t\t\t\ttaskStates: state.tasks,\n\t\t\t\t\ttaskGateResults: [...taskGateByTaskId.values()],\n\t\t\t\t\tcontract: options.contract,\n\t\t\t\t});\n\t\t\t\temit(\"gate_run\", runGate.pass ? \"run_gates_passed\" : \"run_gates_failed\", {\n\t\t\t\t\twarnings: runGate.warnings,\n\t\t\t\t\tfailures: runGate.failures,\n\t\t\t\t});\n\t\t\t\tif (runGate.pass && Object.values(state.tasks).every((task) => task.status === \"done\" || task.status === \"blocked\")) {\n\t\t\t\t\tstate.status = runHasOnlyBlockedTasks(state) ? \"blocked\" : \"completed\";\n\t\t\t\t\temit(state.status === \"completed\" ? \"run_completed\" : \"run_blocked\", `Swarm run ${state.status}`);\n\t\t\t\t} else {\n\t\t\t\t\tstate.status = \"failed\";\n\t\t\t\t\tstate.lastError = runGate.failures.join(\" | \") || \"Run gates failed.\";\n\t\t\t\t\temit(\"run_failed\", state.lastError);\n\t\t\t\t}\n\t\t\t\toptions.onStateChanged?.(state);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.noProgressTicks += 1;\n\t\t\tif (state.noProgressTicks >= noProgressLimit) {\n\t\t\t\tstate.status = \"blocked\";\n\t\t\t\tstate.lastError = \"No progress threshold reached.\";\n\t\t\t\temit(\"run_blocked\", state.lastError, { noProgressTicks: state.noProgressTicks });\n\t\t\t\toptions.onStateChanged?.(state);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst progressReady = progressHeuristicEnabled\n\t\t\t? applyProgressHeuristic({\n\t\t\t\treadyTaskIds,\n\t\t\t\tplanById,\n\t\t\t\tdependents,\n\t\t\t\tstate,\n\t\t\t\tactivateAfterNoProgressTicks: progressHeuristicActivateAfter,\n\t\t\t\tminScore: progressHeuristicMinScore,\n\t\t\t})\n\t\t\t: readyTaskIds;\n\n\t\tconst guard = conflictGuardEnabled\n\t\t\t? applyConflictDensityGuard({\n\t\t\t\treadyTaskIds: progressReady,\n\t\t\t\tplanById,\n\t\t\t\tmaxParallel: options.maxParallel,\n\t\t\t\tthreshold: conflictGuardThreshold,\n\t\t\t\tminParallel: conflictGuardMinParallel,\n\t\t\t})\n\t\t\t: { effectiveMaxParallel: options.maxParallel, density: conflictDensity({ taskIds: progressReady, planById }) };\n\t\temit(\"tick\", \"scheduler_guards\", {\n\t\t\tready: readyTaskIds.length,\n\t\t\tprogress_candidates: progressReady.length,\n\t\t\tconflict_density: Number(guard.density.toFixed(3)),\n\t\t\teffective_max_parallel: guard.effectiveMaxParallel,\n\t\t\tno_progress_ticks: state.noProgressTicks,\n\t\t});\n\n\t\tconst preselected = selectBatch({\n\t\t\treadyTaskIds: progressReady,\n\t\t\tplanById,\n\t\t\tmaxParallel: guard.effectiveMaxParallel,\n\t\t\tdependents,\n\t\t});\n\n\t\tconst selected: string[] = [];\n\t\tfor (const taskId of preselected) {\n\t\t\tconst plan = planById.get(taskId);\n\t\t\tif (!plan) continue;\n\t\t\tconst lockCheck = lockManager.canAcquire(taskId, plan.touches);\n\t\t\tif (!lockCheck.ok) {\n\t\t\t\tconst runtime = state.tasks[taskId];\n\t\t\t\tif (runtime) {\n\t\t\t\t\truntime.status = \"blocked\";\n\t\t\t\t\truntime.lastError = `Lock conflict: ${lockCheck.conflicts\n\t\t\t\t\t\t.map((conflict) => `${conflict.touch}<->${conflict.conflictingTouch}`)\n\t\t\t\t\t\t.join(\", \")}`;\n\t\t\t\t\temit(\"task_blocked\", runtime.lastError, { conflicts: lockCheck.conflicts }, taskId);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tselected.push(taskId);\n\t\t}\n\n\t\tif (selected.length === 0) {\n\t\t\tstate.noProgressTicks += 1;\n\t\t\tif (state.noProgressTicks >= noProgressLimit) {\n\t\t\t\tstate.status = \"blocked\";\n\t\t\t\tstate.lastError = \"No dispatch candidates after lock/budget filters.\";\n\t\t\t\temit(\"run_blocked\", state.lastError, { ready: readyTaskIds });\n\t\t\t\toptions.onStateChanged?.(state);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tcontinue;\n\t\t}\n\n\t\t\tlet progressThisTick = false;\n\t\t\tconst dispatchContexts: Array<{ taskId: string; plan: SwarmTaskPlan; runtime: SwarmTaskRuntimeState }> = [];\n\t\t\tfor (const taskId of selected) {\n\t\t\t\tconst plan = planById.get(taskId);\n\t\t\t\tconst runtime = state.tasks[taskId];\n\t\t\t\tif (!plan || !runtime) continue;\n\t\t\t\tlockManager.acquire(taskId, runtime.touches.length > 0 ? runtime.touches : plan.touches);\n\t\t\t\tstate.locks = lockManager.snapshot();\n\t\t\t\temit(\"lock_acquired\", `lock acquired for ${taskId}`, { touches: runtime.touches }, taskId);\n\n\t\t\t\truntime.status = \"running\";\n\t\t\t\truntime.attempts += 1;\n\t\t\t\truntime.startedAt = nowIso();\n\t\t\t\temit(\"task_running\", `task ${taskId} running`, { attempt: runtime.attempts }, taskId);\n\t\t\t\tdispatchContexts.push({ taskId, plan, runtime });\n\t\t\t}\n\t\t\toptions.onStateChanged?.(state);\n\n\t\t\tconst dispatchResults = await Promise.all(\n\t\t\t\tdispatchContexts.map(async ({ taskId, plan, runtime }) => {\n\t\t\t\t\tlet result: SwarmDispatchResult;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresult = await options.dispatchTask({\n\t\t\t\t\t\t\ttask: plan,\n\t\t\t\t\t\t\truntime,\n\t\t\t\t\t\t\ttick: state.tick,\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tresult = {\n\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn { taskId, plan, runtime, result };\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tfor (const { taskId, plan, runtime, result } of dispatchResults) {\n\t\t\t\tif (result.touchesRefined && result.touchesRefined.length > 0) {\n\t\t\t\t\truntime.touches = compact(result.touchesRefined);\n\t\t\t\t\tlockManager.downgrade(taskId, runtime.touches);\n\t\t\t\t\tstate.locks = lockManager.snapshot();\n\t\t\t\t}\n\n\t\t\t\tif (typeof result.costUsd === \"number\" && Number.isFinite(result.costUsd) && result.costUsd > 0) {\n\t\t\t\t\tstate.budget.spentUsd += result.costUsd;\n\t\t\t\t}\n\n\t\t\t\tif (result.status === \"done\") {\n\t\t\t\t\truntime.status = \"done\";\n\t\t\t\t\truntime.completedAt = nowIso();\n\t\t\t\t\truntime.lastError = undefined;\n\t\t\t\t\tprogressThisTick = true;\n\t\t\t\t\temit(\"task_done\", `task ${taskId} done`, undefined, taskId);\n\n\t\t\t\t\tconst gateResult = evaluateTaskGates({ ...plan, touches: runtime.touches }, options.contract);\n\t\t\t\t\ttaskGateByTaskId.set(taskId, gateResult);\n\t\t\t\t\temit(\n\t\t\t\t\t\t\"gate_task\",\n\t\t\t\t\t\tgateResult.pass ? \"task_gates_passed\" : \"task_gates_failed\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twarnings: gateResult.warnings,\n\t\t\t\t\t\t\tfailures: gateResult.failures,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttaskId,\n\t\t\t\t\t);\n\t\t\t\t} else if (result.status === \"blocked\") {\n\t\t\t\t\truntime.status = \"blocked\";\n\t\t\t\t\truntime.lastError = result.error ?? \"Task blocked by user input or policy.\";\n\t\t\t\t\temit(\"task_blocked\", runtime.lastError, undefined, taskId);\n\t\t\t\t} else {\n\t\t\t\t\tconst errorMessage = result.error ?? \"Unknown task failure.\";\n\t\t\t\t\tconst currentRetries = state.retries[taskId] ?? 0;\n\t\t\t\t\t\tconst retryDecision = shouldRetry({\n\t\t\t\t\t\t\terrorMessage,\n\t\t\t\t\t\t\tcurrentRetries,\n\t\t\t\t\t\t\tpolicy: retryPolicy,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (retryDecision.retry) {\n\t\t\t\t\t\t\tstate.retries[taskId] = currentRetries + 1;\n\t\t\t\t\t\t\truntime.status = \"ready\";\n\t\t\t\t\t\t\truntime.lastError = errorMessage;\n\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\"task_retry\",\n\t\t\t\t\t\t\t\t`retry ${state.retries[taskId]}/${retryDecision.max} for ${taskId} (${retryDecision.bucket})`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\terror: errorMessage,\n\t\t\t\t\t\t\t\t\tbucket: retryDecision.bucket,\n\t\t\t\t\t\t\t\t\tfailureCause: result.failureCause ?? retryDecision.bucket,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\truntime.status = \"error\";\n\t\t\t\t\t\t\truntime.completedAt = nowIso();\n\t\t\t\t\t\t\truntime.lastError = errorMessage;\n\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\"task_error\",\n\t\t\t\t\t\t\t\terrorMessage,\n\t\t\t\t\t\t\t\t{ bucket: retryDecision.bucket, failureCause: result.failureCause ?? retryDecision.bucket },\n\t\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\tfor (const candidate of result.spawnCandidates ?? []) {\n\t\t\t\t\tif (spawned.size() >= spawnCap) break;\n\t\t\t\t\tconst requiresConfirmation = candidate.severity === \"high\" || plan.spawn_policy === \"manual_high_risk\";\n\t\t\t\t\tif (requiresConfirmation && options.confirmSpawn) {\n\t\t\t\t\t\tconst approved = await options.confirmSpawn({\n\t\t\t\t\t\t\tcandidate,\n\t\t\t\t\t\t\tparentTask: plan,\n\t\t\t\t\t\t\tparentTaskRuntime: runtime,\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!approved) {\n\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\"spawn_rejected\",\n\t\t\t\t\t\t\t\t`spawn rejected from ${taskId}`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdescription: candidate.description,\n\t\t\t\t\t\t\t\t\tpath: candidate.path,\n\t\t\t\t\t\t\t\t\tchangeType: candidate.changeType,\n\t\t\t\t\t\t\t\t\tseverity: candidate.severity,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst queued = spawned.enqueue(candidate);\n\t\t\t\t\tif (!queued.accepted) continue;\n\t\t\t\t\temit(\n\t\t\t\t\t\t\"spawn_enqueued\",\n\t\t\t\t\t\t`spawn queued from ${taskId}`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfingerprint: queued.fingerprint,\n\t\t\t\t\t\t\tdescription: candidate.description,\n\t\t\t\t\t\t\tpath: candidate.path,\n\t\t\t\t\t\t\tchangeType: candidate.changeType,\n\t\t\t\t\t\t\tseverity: candidate.severity,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttaskId,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlockManager.release(taskId);\n\t\t\t\tstate.locks = lockManager.snapshot();\n\t\t\t\temit(\"lock_released\", `lock released for ${taskId}`, undefined, taskId);\n\t\t\t\toptions.onStateChanged?.(state);\n\t\t\t}\n\n\t\tif (shouldStopForBudget(state)) {\n\t\t\tstate.status = \"stopped\";\n\t\t\tstate.lastError = \"Budget hard-stop reached.\";\n\t\t\temit(\"run_stopped\", state.lastError, {\n\t\t\t\tbudgetLimitUsd: state.budget.limitUsd,\n\t\t\t\tspentUsd: state.budget.spentUsd,\n\t\t\t});\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tbreak;\n\t\t}\n\n\t\tstate.noProgressTicks = progressThisTick ? 0 : state.noProgressTicks + 1;\n\t\toptions.onStateChanged?.(state);\n\t\tif (!progressThisTick && state.noProgressTicks >= noProgressLimit) {\n\t\t\tstate.status = \"blocked\";\n\t\t\tstate.lastError = \"No measurable progress within scheduler threshold.\";\n\t\t\temit(\"run_blocked\", state.lastError, { noProgressTicks: state.noProgressTicks });\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst runGate: SwarmRunGateResult = evaluateRunGates({\n\t\ttaskStates: state.tasks,\n\t\ttaskGateResults: [...taskGateByTaskId.values()],\n\t\tcontract: options.contract,\n\t});\n\tif (state.status === \"completed\" && !runGate.pass) {\n\t\tstate.status = \"failed\";\n\t\tstate.lastError = runGate.failures.join(\" | \") || \"Run gates failed.\";\n\t\temit(\"run_failed\", state.lastError);\n\t}\n\n\tconst drainedSpawn = spawned.drain(spawnCap).map(({ fingerprint, candidate }) => ({\n\t\tfingerprint,\n\t\tdescription: candidate.description,\n\t\tpath: candidate.path,\n\t\tchangeType: candidate.changeType,\n\t}));\n\n\treturn {\n\t\tstate,\n\t\ttaskGates: [...taskGateByTaskId.values()],\n\t\trunGate,\n\t\tevents,\n\t\tspawnBacklog: drainedSpawn,\n\t};\n}\n"]}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/core/swarm/scheduler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EngineeringContract } from \"../contract.js\";\nimport { touchesConflict, HierarchicalLockManager } from \"./locks.js\";\nimport { evaluateRunGates, evaluateTaskGates } from \"./gates.js\";\nimport { DEFAULT_RETRY_POLICY, shouldRetry, type SwarmRetryPolicy } from \"./retry.js\";\nimport { SwarmSpawnQueue } from \"./spawn.js\";\nimport type {\n\tSwarmDispatchResult,\n\tSwarmEvent,\n\tSwarmGateResult,\n\tSwarmPlan,\n\tSwarmRunGateResult,\n\tSwarmRuntimeState,\n\tSwarmSchedulerResult,\n\tSwarmTaskPlan,\n\tSwarmTaskRuntimeState,\n} from \"./types.js\";\n\nconst TERMINAL_STATUSES = new Set<SwarmTaskRuntimeState[\"status\"]>([\"done\", \"error\", \"cancelled\", \"blocked\"]);\nconst FAILURE_STATUSES = new Set<SwarmTaskRuntimeState[\"status\"]>([\"error\", \"cancelled\"]);\n\nfunction nowIso(): string {\n\treturn new Date().toISOString();\n}\n\nfunction parseBoundedInt(raw: string | undefined, fallback: number, min: number, max: number): number {\n\tconst parsed = raw ? Number.parseInt(raw, 10) : fallback;\n\tif (!Number.isInteger(parsed)) return fallback;\n\treturn Math.max(min, Math.min(max, parsed));\n}\n\nfunction clampBoundedInt(value: number | undefined, fallback: number, min: number, max: number): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) return fallback;\n\treturn Math.max(min, Math.min(max, Math.floor(value)));\n}\n\nfunction compact(values: string[]): string[] {\n\treturn [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))];\n}\n\nfunction isTerminal(status: SwarmTaskRuntimeState[\"status\"]): boolean {\n\treturn TERMINAL_STATUSES.has(status);\n}\n\nfunction severityWeight(task: SwarmTaskPlan): number {\n\tif (task.severity === \"high\") return 3;\n\tif (task.severity === \"medium\") return 2;\n\treturn 1;\n}\n\nfunction collectDependents(plan: SwarmPlan): Map<string, number> {\n\tconst result = new Map<string, number>();\n\tfor (const task of plan.tasks) {\n\t\tfor (const dep of task.depends_on) {\n\t\t\tresult.set(dep, (result.get(dep) ?? 0) + 1);\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction createTaskRuntimeState(task: SwarmTaskPlan): SwarmTaskRuntimeState {\n\treturn {\n\t\tid: task.id,\n\t\tstatus: task.depends_on.length === 0 ? \"ready\" : \"pending\",\n\t\tattempts: 0,\n\t\tdepends_on: [...task.depends_on],\n\t\ttouches: [...task.touches],\n\t\tscopes: [...task.scopes],\n\t};\n}\n\nfunction buildInitialState(input: {\n\trunId: string;\n\tplan: SwarmPlan;\n\tbudgetUsd?: number;\n\texistingState?: SwarmRuntimeState;\n}): SwarmRuntimeState {\n\tif (input.existingState) {\n\t\treturn {\n\t\t\t...input.existingState,\n\t\t\tupdatedAt: nowIso(),\n\t\t\tstatus: input.existingState.status === \"completed\" ? \"running\" : input.existingState.status,\n\t\t};\n\t}\n\n\tconst tasks: Record<string, SwarmTaskRuntimeState> = {};\n\tfor (const task of input.plan.tasks) {\n\t\ttasks[task.id] = createTaskRuntimeState(task);\n\t}\n\n\treturn {\n\t\trunId: input.runId,\n\t\tstatus: \"running\",\n\t\tcreatedAt: nowIso(),\n\t\tupdatedAt: nowIso(),\n\t\ttick: 0,\n\t\tnoProgressTicks: 0,\n\t\treadyQueue: Object.values(tasks)\n\t\t\t.filter((task) => task.status === \"ready\")\n\t\t\t.map((task) => task.id),\n\t\tblockedTasks: [],\n\t\ttasks,\n\t\tlocks: {},\n\t\tretries: {},\n\t\tbudget: {\n\t\t\tlimitUsd: input.budgetUsd,\n\t\t\tspentUsd: 0,\n\t\t\twarned80: false,\n\t\t\thardStopped: false,\n\t\t},\n\t};\n}\n\nfunction runHasOnlyBlockedTasks(state: SwarmRuntimeState): boolean {\n\tconst tasks = Object.values(state.tasks);\n\tconst unfinished = tasks.filter((task) => !isTerminal(task.status));\n\tif (unfinished.length > 0) return false;\n\treturn tasks.length > 0 && tasks.some((task) => task.status === \"blocked\");\n}\n\nfunction collectReadyTasks(state: SwarmRuntimeState, planById: Map<string, SwarmTaskPlan>): string[] {\n\tconst ready: string[] = [];\n\tfor (const [taskId, runtime] of Object.entries(state.tasks)) {\n\t\tif (runtime.status !== \"pending\" && runtime.status !== \"ready\") continue;\n\t\tconst plan = planById.get(taskId);\n\t\tif (!plan) continue;\n\t\tconst depsDone = plan.depends_on.every((dep) => state.tasks[dep]?.status === \"done\");\n\t\tif (!depsDone) {\n\t\t\truntime.status = \"pending\";\n\t\t\tcontinue;\n\t\t}\n\t\tif (runtime.status !== \"ready\") {\n\t\t\truntime.status = \"ready\";\n\t\t}\n\t\tready.push(taskId);\n\t}\n\treturn ready;\n}\n\nfunction blockDependentsOfFailure(input: {\n\tfailedTaskId: string;\n\tstate: SwarmRuntimeState;\n\tplanById: Map<string, SwarmTaskPlan>;\n}): string[] {\n\tconst blocked: string[] = [];\n\tconst queue: string[] = [input.failedTaskId];\n\tconst seen = new Set<string>(queue);\n\n\twhile (queue.length > 0) {\n\t\tconst failedId = queue.shift();\n\t\tif (!failedId) break;\n\n\t\tfor (const [taskId, runtime] of Object.entries(input.state.tasks)) {\n\t\t\tif (runtime.status !== \"pending\" && runtime.status !== \"ready\") continue;\n\t\t\tconst plan = input.planById.get(taskId);\n\t\t\tif (!plan || !plan.depends_on.includes(failedId)) continue;\n\t\t\truntime.status = \"blocked\";\n\t\t\truntime.completedAt = nowIso();\n\t\t\truntime.lastError = `Dependency failed: ${failedId}`;\n\t\t\tblocked.push(taskId);\n\t\t\tif (!seen.has(taskId)) {\n\t\t\t\tseen.add(taskId);\n\t\t\t\tqueue.push(taskId);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn blocked;\n}\n\nfunction selectBatch(input: {\n\treadyTaskIds: string[];\n\tplanById: Map<string, SwarmTaskPlan>;\n\tmaxParallel: number;\n\tdependents: Map<string, number>;\n}): string[] {\n\tconst sorted = [...input.readyTaskIds].sort((a, b) => {\n\t\tconst taskA = input.planById.get(a);\n\t\tconst taskB = input.planById.get(b);\n\t\tif (!taskA || !taskB) return a.localeCompare(b);\n\t\tconst severityDelta = severityWeight(taskB) - severityWeight(taskA);\n\t\tif (severityDelta !== 0) return severityDelta;\n\t\tconst dependentDelta = (input.dependents.get(b) ?? 0) - (input.dependents.get(a) ?? 0);\n\t\tif (dependentDelta !== 0) return dependentDelta;\n\t\treturn a.localeCompare(b);\n\t});\n\n\tconst selected: string[] = [];\n\tfor (const taskId of sorted) {\n\t\tconst plan = input.planById.get(taskId);\n\t\tif (!plan) continue;\n\t\tconst hasConflictWithSelected = selected.some((existingId) => {\n\t\t\tconst existing = input.planById.get(existingId);\n\t\t\tif (!existing) return false;\n\t\t\treturn touchesConflict(existing.touches, plan.touches);\n\t\t});\n\t\tif (hasConflictWithSelected) continue;\n\t\tselected.push(taskId);\n\t\tif (selected.length >= Math.max(1, input.maxParallel)) break;\n\t}\n\treturn selected;\n}\n\nfunction progressScore(task: SwarmTaskPlan, dependents: Map<string, number>): number {\n\tconst dependentWeight = dependents.get(task.id) ?? 0;\n\tconst touchWeight = Math.min(3, Math.max(1, task.touches.length));\n\treturn severityWeight(task) * 3 + dependentWeight * 2 + touchWeight;\n}\n\nfunction applyProgressHeuristic(input: {\n\treadyTaskIds: string[];\n\tplanById: Map<string, SwarmTaskPlan>;\n\tdependents: Map<string, number>;\n\tstate: SwarmRuntimeState;\n\tactivateAfterNoProgressTicks: number;\n\tminScore: number;\n}): string[] {\n\tif (input.readyTaskIds.length <= 1) return input.readyTaskIds;\n\tif (input.state.noProgressTicks < input.activateAfterNoProgressTicks) return input.readyTaskIds;\n\n\tconst scored = input.readyTaskIds\n\t\t.map((taskId) => {\n\t\t\tconst plan = input.planById.get(taskId);\n\t\t\tif (!plan) return undefined;\n\t\t\treturn { taskId, score: progressScore(plan, input.dependents), severity: plan.severity };\n\t\t})\n\t\t.filter((item): item is { taskId: string; score: number; severity: SwarmTaskPlan[\"severity\"] } => item !== undefined)\n\t\t.sort((a, b) => b.score - a.score || a.taskId.localeCompare(b.taskId));\n\tif (scored.length === 0) return input.readyTaskIds;\n\n\tconst topScore = scored[0]!.score;\n\tconst threshold = Math.max(input.minScore, topScore - 2);\n\tconst filtered = scored\n\t\t.filter((item) => item.score >= threshold || item.severity === \"high\")\n\t\t.map((item) => item.taskId);\n\treturn filtered.length > 0 ? filtered : [scored[0]!.taskId];\n}\n\nfunction conflictDensity(input: { taskIds: string[]; planById: Map<string, SwarmTaskPlan> }): number {\n\tconst count = input.taskIds.length;\n\tif (count < 2) return 0;\n\tlet conflictingPairs = 0;\n\tlet totalPairs = 0;\n\tfor (let i = 0; i < count; i += 1) {\n\t\tconst a = input.planById.get(input.taskIds[i]!);\n\t\tif (!a) continue;\n\t\tfor (let j = i + 1; j < count; j += 1) {\n\t\t\tconst b = input.planById.get(input.taskIds[j]!);\n\t\t\tif (!b) continue;\n\t\t\ttotalPairs += 1;\n\t\t\tif (touchesConflict(a.touches, b.touches)) {\n\t\t\t\tconflictingPairs += 1;\n\t\t\t}\n\t\t}\n\t}\n\treturn totalPairs > 0 ? conflictingPairs / totalPairs : 0;\n}\n\nfunction applyConflictDensityGuard(input: {\n\treadyTaskIds: string[];\n\tplanById: Map<string, SwarmTaskPlan>;\n\tmaxParallel: number;\n\tthreshold: number;\n\tminParallel: number;\n}): { effectiveMaxParallel: number; density: number } {\n\tconst density = conflictDensity({ taskIds: input.readyTaskIds, planById: input.planById });\n\tif (density < input.threshold) {\n\t\treturn { effectiveMaxParallel: input.maxParallel, density };\n\t}\n\tconst scaled = Math.max(\n\t\tinput.minParallel,\n\t\tMath.floor(input.maxParallel * Math.max(0.2, 1 - density)),\n\t);\n\treturn {\n\t\teffectiveMaxParallel: Math.max(1, Math.min(input.maxParallel, scaled)),\n\t\tdensity,\n\t};\n}\n\nfunction shouldStopForBudget(state: SwarmRuntimeState): boolean {\n\tconst limit = state.budget.limitUsd;\n\tif (limit === undefined || limit <= 0) return false;\n\tif (!state.budget.warned80 && state.budget.spentUsd >= limit * 0.8) {\n\t\tstate.budget.warned80 = true;\n\t}\n\tif (state.budget.spentUsd >= limit) {\n\t\tstate.budget.hardStopped = true;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport interface RunSwarmSchedulerOptions {\n\trunId: string;\n\tplan: SwarmPlan;\n\tcontract: EngineeringContract;\n\tmaxParallel: number;\n\tbudgetUsd?: number;\n\texistingState?: SwarmRuntimeState;\n\tretryPolicy?: SwarmRetryPolicy;\n\t/** Max time for a single dispatch call in milliseconds. Defaults to IOSM_SWARM_DISPATCH_TIMEOUT_MS or 180000. */\n\tdispatchTimeoutMs?: number;\n\tnoProgressTickLimit?: number;\n\tspawnCap?: number;\n\tprogressHeuristic?: {\n\t\tenabled?: boolean;\n\t\tactivateAfterNoProgressTicks?: number;\n\t\tminScore?: number;\n\t};\n\tconflictDensityGuard?: {\n\t\tenabled?: boolean;\n\t\tthreshold?: number;\n\t\tminParallel?: number;\n\t};\n\tconfirmSpawn?: (input: {\n\t\tcandidate: NonNullable<SwarmDispatchResult[\"spawnCandidates\"]>[number];\n\t\tparentTask: SwarmTaskPlan;\n\t\tparentTaskRuntime: SwarmTaskRuntimeState;\n\t\tstate: SwarmRuntimeState;\n\t}) => Promise<boolean>;\n\tdispatchTask: (input: {\n\t\ttask: SwarmTaskPlan;\n\t\truntime: SwarmTaskRuntimeState;\n\t\ttick: number;\n\t}) => Promise<SwarmDispatchResult>;\n\tonEvent?: (event: SwarmEvent, state: SwarmRuntimeState) => void;\n\tonStateChanged?: (state: SwarmRuntimeState) => void;\n\tshouldStop?: () => boolean;\n}\n\nexport interface RunSwarmSchedulerExtendedResult extends SwarmSchedulerResult {\n\tspawnBacklog: Array<{ fingerprint: string; description: string; path: string; changeType: string }>;\n}\n\nexport async function runSwarmScheduler(\n\toptions: RunSwarmSchedulerOptions,\n): Promise<RunSwarmSchedulerExtendedResult> {\n\tconst planById = new Map(options.plan.tasks.map((task) => [task.id, task]));\n\tconst dependents = collectDependents(options.plan);\n\tconst retryPolicy = options.retryPolicy ?? DEFAULT_RETRY_POLICY;\n\tconst envDispatchTimeoutMs = parseBoundedInt(\n\t\tprocess.env.IOSM_SWARM_DISPATCH_TIMEOUT_MS,\n\t\t180_000,\n\t\t1_000,\n\t\t1_800_000,\n\t);\n\tconst dispatchTimeoutMs = clampBoundedInt(options.dispatchTimeoutMs, envDispatchTimeoutMs, 1_000, 1_800_000);\n\tconst noProgressLimit = Math.max(3, options.noProgressTickLimit ?? 8);\n\tconst spawnCap = Math.max(1, options.spawnCap ?? 30);\n\tconst progressHeuristicEnabled = options.progressHeuristic?.enabled !== false;\n\tconst progressHeuristicActivateAfter = Math.max(1, options.progressHeuristic?.activateAfterNoProgressTicks ?? 2);\n\tconst progressHeuristicMinScore = Math.max(1, options.progressHeuristic?.minScore ?? 4);\n\tconst conflictGuardEnabled = options.conflictDensityGuard?.enabled !== false;\n\tconst conflictGuardThreshold = Math.min(1, Math.max(0, options.conflictDensityGuard?.threshold ?? 0.45));\n\tconst conflictGuardMinParallel = Math.max(1, options.conflictDensityGuard?.minParallel ?? 1);\n\n\tconst state = buildInitialState({\n\t\trunId: options.runId,\n\t\tplan: options.plan,\n\t\tbudgetUsd: options.budgetUsd,\n\t\texistingState: options.existingState,\n\t});\n\tconst lockManager = new HierarchicalLockManager();\n\tconst taskGateByTaskId = new Map<string, SwarmGateResult>();\n\tconst spawned = new SwarmSpawnQueue();\n\tconst events: SwarmEvent[] = [];\n\n\tfor (const [taskId, taskState] of Object.entries(state.tasks)) {\n\t\tif (taskState.status === \"running\") {\n\t\t\ttaskState.status = \"pending\";\n\t\t\ttaskState.startedAt = undefined;\n\t\t}\n\t\tif (taskState.status === \"done\") {\n\t\t\tconst plan = planById.get(taskId);\n\t\t\tif (plan) {\n\t\t\t\ttaskGateByTaskId.set(taskId, evaluateTaskGates({ ...plan, touches: taskState.touches }, options.contract));\n\t\t\t}\n\t\t}\n\t}\n\n\tconst emit = (type: SwarmEvent[\"type\"], message: string, payload?: Record<string, unknown>, taskId?: string): void => {\n\t\tconst event: SwarmEvent = {\n\t\t\ttype,\n\t\t\ttimestamp: nowIso(),\n\t\t\trunId: options.runId,\n\t\t\ttick: state.tick,\n\t\t\tmessage,\n\t\t\tpayload,\n\t\t\t...(taskId ? { taskId } : {}),\n\t\t};\n\t\tevents.push(event);\n\t\toptions.onEvent?.(event, state);\n\t};\n\n\temit(\"run_started\", `Swarm run ${options.runId} started`, {\n\t\ttasks: options.plan.tasks.length,\n\t\tmaxParallel: options.maxParallel,\n\t\tbudgetUsd: options.budgetUsd,\n\t});\n\toptions.onStateChanged?.(state);\n\n\twhile (true) {\n\t\tif (options.shouldStop?.()) {\n\t\t\tstate.status = \"stopped\";\n\t\t\tstate.lastError = \"Run interrupted by user.\";\n\t\t\temit(\"run_stopped\", state.lastError);\n\t\t\tbreak;\n\t\t}\n\n\t\tstate.tick += 1;\n\t\tstate.updatedAt = nowIso();\n\t\temit(\"tick\", `scheduler_tick=${state.tick}`);\n\n\t\tif (shouldStopForBudget(state)) {\n\t\t\tstate.status = \"stopped\";\n\t\t\tstate.lastError = \"Budget hard-stop reached.\";\n\t\t\temit(\"run_stopped\", state.lastError, {\n\t\t\t\tbudgetLimitUsd: state.budget.limitUsd,\n\t\t\t\tspentUsd: state.budget.spentUsd,\n\t\t\t});\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tbreak;\n\t\t}\n\n\t\tconst readyTaskIds = collectReadyTasks(state, planById);\n\t\tstate.readyQueue = [...readyTaskIds];\n\t\tstate.blockedTasks = Object.values(state.tasks)\n\t\t\t.filter((task) => task.status === \"blocked\")\n\t\t\t.map((task) => task.id)\n\t\t\t.sort((a, b) => a.localeCompare(b));\n\n\t\tif (readyTaskIds.length === 0) {\n\t\t\tconst allTerminal = Object.values(state.tasks).every((task) => isTerminal(task.status));\n\t\t\tif (allTerminal) {\n\t\t\t\tconst runGate = evaluateRunGates({\n\t\t\t\t\ttaskStates: state.tasks,\n\t\t\t\t\ttaskGateResults: [...taskGateByTaskId.values()],\n\t\t\t\t\tcontract: options.contract,\n\t\t\t\t});\n\t\t\t\temit(\"gate_run\", runGate.pass ? \"run_gates_passed\" : \"run_gates_failed\", {\n\t\t\t\t\twarnings: runGate.warnings,\n\t\t\t\t\tfailures: runGate.failures,\n\t\t\t\t});\n\t\t\t\tif (runGate.pass && Object.values(state.tasks).every((task) => task.status === \"done\" || task.status === \"blocked\")) {\n\t\t\t\t\tstate.status = runHasOnlyBlockedTasks(state) ? \"blocked\" : \"completed\";\n\t\t\t\t\temit(state.status === \"completed\" ? \"run_completed\" : \"run_blocked\", `Swarm run ${state.status}`);\n\t\t\t\t} else {\n\t\t\t\t\tstate.status = \"failed\";\n\t\t\t\t\tstate.lastError = runGate.failures.join(\" | \") || \"Run gates failed.\";\n\t\t\t\t\temit(\"run_failed\", state.lastError);\n\t\t\t\t}\n\t\t\t\toptions.onStateChanged?.(state);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tstate.noProgressTicks += 1;\n\t\t\tif (state.noProgressTicks >= noProgressLimit) {\n\t\t\t\tstate.status = \"blocked\";\n\t\t\t\tstate.lastError = \"No progress threshold reached.\";\n\t\t\t\temit(\"run_blocked\", state.lastError, { noProgressTicks: state.noProgressTicks });\n\t\t\t\toptions.onStateChanged?.(state);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst progressReady = progressHeuristicEnabled\n\t\t\t? applyProgressHeuristic({\n\t\t\t\treadyTaskIds,\n\t\t\t\tplanById,\n\t\t\t\tdependents,\n\t\t\t\tstate,\n\t\t\t\tactivateAfterNoProgressTicks: progressHeuristicActivateAfter,\n\t\t\t\tminScore: progressHeuristicMinScore,\n\t\t\t})\n\t\t\t: readyTaskIds;\n\n\t\tconst guard = conflictGuardEnabled\n\t\t\t? applyConflictDensityGuard({\n\t\t\t\treadyTaskIds: progressReady,\n\t\t\t\tplanById,\n\t\t\t\tmaxParallel: options.maxParallel,\n\t\t\t\tthreshold: conflictGuardThreshold,\n\t\t\t\tminParallel: conflictGuardMinParallel,\n\t\t\t})\n\t\t\t: { effectiveMaxParallel: options.maxParallel, density: conflictDensity({ taskIds: progressReady, planById }) };\n\t\temit(\"tick\", \"scheduler_guards\", {\n\t\t\tready: readyTaskIds.length,\n\t\t\tprogress_candidates: progressReady.length,\n\t\t\tconflict_density: Number(guard.density.toFixed(3)),\n\t\t\teffective_max_parallel: guard.effectiveMaxParallel,\n\t\t\tno_progress_ticks: state.noProgressTicks,\n\t\t});\n\n\t\tconst preselected = selectBatch({\n\t\t\treadyTaskIds: progressReady,\n\t\t\tplanById,\n\t\t\tmaxParallel: guard.effectiveMaxParallel,\n\t\t\tdependents,\n\t\t});\n\n\t\tconst selected: string[] = [];\n\t\tfor (const taskId of preselected) {\n\t\t\tconst plan = planById.get(taskId);\n\t\t\tif (!plan) continue;\n\t\t\tconst lockCheck = lockManager.canAcquire(taskId, plan.touches);\n\t\t\tif (!lockCheck.ok) {\n\t\t\t\tconst runtime = state.tasks[taskId];\n\t\t\t\tif (runtime) {\n\t\t\t\t\truntime.status = \"blocked\";\n\t\t\t\t\truntime.lastError = `Lock conflict: ${lockCheck.conflicts\n\t\t\t\t\t\t.map((conflict) => `${conflict.touch}<->${conflict.conflictingTouch}`)\n\t\t\t\t\t\t.join(\", \")}`;\n\t\t\t\t\temit(\"task_blocked\", runtime.lastError, { conflicts: lockCheck.conflicts }, taskId);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tselected.push(taskId);\n\t\t}\n\n\t\tif (selected.length === 0) {\n\t\t\tstate.noProgressTicks += 1;\n\t\t\tif (state.noProgressTicks >= noProgressLimit) {\n\t\t\t\tstate.status = \"blocked\";\n\t\t\t\tstate.lastError = \"No dispatch candidates after lock/budget filters.\";\n\t\t\t\temit(\"run_blocked\", state.lastError, { ready: readyTaskIds });\n\t\t\t\toptions.onStateChanged?.(state);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tcontinue;\n\t\t}\n\n\t\t\tlet progressThisTick = false;\n\t\t\tconst dispatchContexts: Array<{ taskId: string; plan: SwarmTaskPlan; runtime: SwarmTaskRuntimeState }> = [];\n\t\t\tfor (const taskId of selected) {\n\t\t\t\tconst plan = planById.get(taskId);\n\t\t\t\tconst runtime = state.tasks[taskId];\n\t\t\t\tif (!plan || !runtime) continue;\n\t\t\t\tlockManager.acquire(taskId, runtime.touches.length > 0 ? runtime.touches : plan.touches);\n\t\t\t\tstate.locks = lockManager.snapshot();\n\t\t\t\temit(\"lock_acquired\", `lock acquired for ${taskId}`, { touches: runtime.touches }, taskId);\n\n\t\t\t\truntime.status = \"running\";\n\t\t\t\truntime.attempts += 1;\n\t\t\t\truntime.startedAt = nowIso();\n\t\t\t\temit(\"task_running\", `task ${taskId} running`, { attempt: runtime.attempts }, taskId);\n\t\t\t\tdispatchContexts.push({ taskId, plan, runtime });\n\t\t\t}\n\t\t\toptions.onStateChanged?.(state);\n\n\t\t\tconst dispatchResults = await Promise.all(\n\t\t\t\tdispatchContexts.map(async ({ taskId, plan, runtime }) => {\n\t\t\t\t\tlet result: SwarmDispatchResult;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst dispatchPromise = options.dispatchTask({\n\t\t\t\t\t\t\ttask: plan,\n\t\t\t\t\t\t\truntime,\n\t\t\t\t\t\t\ttick: state.tick,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Prevent unhandled rejections when timeout wins the race.\n\t\t\t\t\t\tvoid dispatchPromise.catch(() => {\n\t\t\t\t\t\t\t// handled by timeout race path\n\t\t\t\t\t\t});\n\t\t\t\t\t\tlet timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\t\t\tconst timeoutPromise = new Promise<SwarmDispatchResult>((resolve) => {\n\t\t\t\t\t\t\ttimeoutHandle = setTimeout(() => {\n\t\t\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\t\t\t\terror: `Dispatch timed out after ${dispatchTimeoutMs}ms.`,\n\t\t\t\t\t\t\t\t\tfailureCause: \"timeout\",\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, dispatchTimeoutMs);\n\t\t\t\t\t\t});\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresult = await Promise.race([dispatchPromise, timeoutPromise]);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (timeoutHandle) {\n\t\t\t\t\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tresult = {\n\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn { taskId, plan, runtime, result };\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tfor (const { taskId, plan, runtime, result } of dispatchResults) {\n\t\t\t\tif (result.touchesRefined && result.touchesRefined.length > 0) {\n\t\t\t\t\truntime.touches = compact(result.touchesRefined);\n\t\t\t\t\tlockManager.downgrade(taskId, runtime.touches);\n\t\t\t\t\tstate.locks = lockManager.snapshot();\n\t\t\t\t}\n\n\t\t\t\tif (typeof result.costUsd === \"number\" && Number.isFinite(result.costUsd) && result.costUsd > 0) {\n\t\t\t\t\tstate.budget.spentUsd += result.costUsd;\n\t\t\t\t}\n\n\t\t\t\tif (result.status === \"done\") {\n\t\t\t\t\truntime.status = \"done\";\n\t\t\t\t\truntime.completedAt = nowIso();\n\t\t\t\t\truntime.lastError = undefined;\n\t\t\t\t\tprogressThisTick = true;\n\t\t\t\t\temit(\"task_done\", `task ${taskId} done`, undefined, taskId);\n\n\t\t\t\t\tconst gateResult = evaluateTaskGates({ ...plan, touches: runtime.touches }, options.contract);\n\t\t\t\t\ttaskGateByTaskId.set(taskId, gateResult);\n\t\t\t\t\temit(\n\t\t\t\t\t\t\"gate_task\",\n\t\t\t\t\t\tgateResult.pass ? \"task_gates_passed\" : \"task_gates_failed\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twarnings: gateResult.warnings,\n\t\t\t\t\t\t\tfailures: gateResult.failures,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttaskId,\n\t\t\t\t\t);\n\t\t\t\t} else if (result.status === \"blocked\") {\n\t\t\t\t\truntime.status = \"blocked\";\n\t\t\t\t\truntime.lastError = result.error ?? \"Task blocked by user input or policy.\";\n\t\t\t\t\truntime.completedAt = nowIso();\n\t\t\t\t\temit(\"task_blocked\", runtime.lastError, undefined, taskId);\n\t\t\t\t} else {\n\t\t\t\t\tconst errorMessage = result.error ?? \"Unknown task failure.\";\n\t\t\t\t\tconst currentRetries = state.retries[taskId] ?? 0;\n\t\t\t\t\tconst nonRetryableFailure =\n\t\t\t\t\t\tresult.failureCause === \"protocol_violation\" || result.failureCause === \"interrupted\";\n\t\t\t\t\tconst retryDecision = nonRetryableFailure\n\t\t\t\t\t\t? { retry: false, bucket: \"unknown\" as const, max: 0 }\n\t\t\t\t\t\t: shouldRetry({\n\t\t\t\t\t\t\t\terrorMessage,\n\t\t\t\t\t\t\t\tcurrentRetries,\n\t\t\t\t\t\t\t\tpolicy: retryPolicy,\n\t\t\t\t\t\t\t});\n\t\t\t\t\tif (retryDecision.retry) {\n\t\t\t\t\t\tstate.retries[taskId] = currentRetries + 1;\n\t\t\t\t\t\truntime.status = \"ready\";\n\t\t\t\t\t\truntime.lastError = errorMessage;\n\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\"task_retry\",\n\t\t\t\t\t\t\t`retry ${state.retries[taskId]}/${retryDecision.max} for ${taskId} (${retryDecision.bucket})`,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\terror: errorMessage,\n\t\t\t\t\t\t\t\tbucket: retryDecision.bucket,\n\t\t\t\t\t\t\t\tfailureCause: result.failureCause ?? retryDecision.bucket,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\truntime.status = \"error\";\n\t\t\t\t\t\truntime.completedAt = nowIso();\n\t\t\t\t\t\truntime.lastError = errorMessage;\n\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\"task_error\",\n\t\t\t\t\t\t\terrorMessage,\n\t\t\t\t\t\t\t{ bucket: retryDecision.bucket, failureCause: result.failureCause ?? retryDecision.bucket },\n\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (FAILURE_STATUSES.has(runtime.status)) {\n\t\t\t\t\t\t\tconst blockedDependents = blockDependentsOfFailure({\n\t\t\t\t\t\t\t\tfailedTaskId: taskId,\n\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\tplanById,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfor (const blockedTaskId of blockedDependents) {\n\t\t\t\t\t\t\t\tconst blockedRuntime = state.tasks[blockedTaskId];\n\t\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\t\"task_blocked\",\n\t\t\t\t\t\t\t\t\tblockedRuntime?.lastError ?? `Dependency failed: ${taskId}`,\n\t\t\t\t\t\t\t\t\t{ dependency: taskId },\n\t\t\t\t\t\t\t\t\tblockedTaskId,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (blockedDependents.length > 0) {\n\t\t\t\t\t\t\t\tprogressThisTick = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (const candidate of result.spawnCandidates ?? []) {\n\t\t\t\t\tif (spawned.size() >= spawnCap) break;\n\t\t\t\t\tconst requiresConfirmation = candidate.severity === \"high\" || plan.spawn_policy === \"manual_high_risk\";\n\t\t\t\t\tif (requiresConfirmation && options.confirmSpawn) {\n\t\t\t\t\t\tconst approved = await options.confirmSpawn({\n\t\t\t\t\t\t\tcandidate,\n\t\t\t\t\t\t\tparentTask: plan,\n\t\t\t\t\t\t\tparentTaskRuntime: runtime,\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!approved) {\n\t\t\t\t\t\t\temit(\n\t\t\t\t\t\t\t\t\"spawn_rejected\",\n\t\t\t\t\t\t\t\t`spawn rejected from ${taskId}`,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdescription: candidate.description,\n\t\t\t\t\t\t\t\t\tpath: candidate.path,\n\t\t\t\t\t\t\t\t\tchangeType: candidate.changeType,\n\t\t\t\t\t\t\t\t\tseverity: candidate.severity,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst queued = spawned.enqueue(candidate);\n\t\t\t\t\tif (!queued.accepted) continue;\n\t\t\t\t\temit(\n\t\t\t\t\t\t\"spawn_enqueued\",\n\t\t\t\t\t\t`spawn queued from ${taskId}`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfingerprint: queued.fingerprint,\n\t\t\t\t\t\t\tdescription: candidate.description,\n\t\t\t\t\t\t\tpath: candidate.path,\n\t\t\t\t\t\t\tchangeType: candidate.changeType,\n\t\t\t\t\t\t\tseverity: candidate.severity,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttaskId,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlockManager.release(taskId);\n\t\t\t\tstate.locks = lockManager.snapshot();\n\t\t\t\temit(\"lock_released\", `lock released for ${taskId}`, undefined, taskId);\n\t\t\t\toptions.onStateChanged?.(state);\n\t\t\t}\n\n\t\tif (shouldStopForBudget(state)) {\n\t\t\tstate.status = \"stopped\";\n\t\t\tstate.lastError = \"Budget hard-stop reached.\";\n\t\t\temit(\"run_stopped\", state.lastError, {\n\t\t\t\tbudgetLimitUsd: state.budget.limitUsd,\n\t\t\t\tspentUsd: state.budget.spentUsd,\n\t\t\t});\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tbreak;\n\t\t}\n\n\t\tstate.noProgressTicks = progressThisTick ? 0 : state.noProgressTicks + 1;\n\t\toptions.onStateChanged?.(state);\n\t\tif (!progressThisTick && state.noProgressTicks >= noProgressLimit) {\n\t\t\tstate.status = \"blocked\";\n\t\t\tstate.lastError = \"No measurable progress within scheduler threshold.\";\n\t\t\temit(\"run_blocked\", state.lastError, { noProgressTicks: state.noProgressTicks });\n\t\t\toptions.onStateChanged?.(state);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst runGate: SwarmRunGateResult = evaluateRunGates({\n\t\ttaskStates: state.tasks,\n\t\ttaskGateResults: [...taskGateByTaskId.values()],\n\t\tcontract: options.contract,\n\t});\n\tif (state.status === \"completed\" && !runGate.pass) {\n\t\tstate.status = \"failed\";\n\t\tstate.lastError = runGate.failures.join(\" | \") || \"Run gates failed.\";\n\t\temit(\"run_failed\", state.lastError);\n\t}\n\n\tconst drainedSpawn = spawned.drain(spawnCap).map(({ fingerprint, candidate }) => ({\n\t\tfingerprint,\n\t\tdescription: candidate.description,\n\t\tpath: candidate.path,\n\t\tchangeType: candidate.changeType,\n\t}));\n\n\treturn {\n\t\tstate,\n\t\ttaskGates: [...taskGateByTaskId.values()],\n\t\trunGate,\n\t\tevents,\n\t\tspawnBacklog: drainedSpawn,\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AA0BhE,MAAM,WAAW,wBAAwB;IACxC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,uCAAuC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,yBAAyB;IACzB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,MAAM,CAwRhF"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AA0BhE,MAAM,WAAW,wBAAwB;IACxC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,uCAAuC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,yBAAyB;IACzB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,MAAM,CAyRhF"}
@@ -214,6 +214,7 @@ Operating defaults:
214
214
  - If orchestration constraints are ambiguous or conflict, ask one concise clarification (or use ask_user when available) before launching subagents.
215
215
  - When the user provides an <orchestrate ...>...</orchestrate> block, treat it as an execution contract and follow its mode/agents/profile/cwd assignments strictly.
216
216
  - When orchestration assignments include run_id/task_id/lock_key or depends_on, enforce them in task calls (run_id/task_id for team tracking, lock_key for serialization domains, depends_on for ordering).
217
+ - For delegated parallel runs, use shared_memory_* tools as the primary coordination channel: namespaced keys, read-before-write, and CAS (if_version) for contested updates; reserve append mode for timeline/log keys.
217
218
  - For write-heavy parallel orchestration, prefer isolation=worktree to reduce cross-agent interference when the repository is git-backed.
218
219
  - If the user message includes @<custom-agent-name>, treat it as an explicit agent selection and call task with agent set to that custom agent name.
219
220
 
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * System prompt construction and project context loading\n */\n\nimport { getDocsPath, getExamplesPath, getReadmePath } from \"../config.js\";\nimport { formatSkillsForPrompt, type Skill } from \"./skills.js\";\n\n/** Tool descriptions for system prompt */\nconst toolDescriptions: Record<string, string> = {\n\tread: \"Read file contents\",\n\tbash: \"Execute bash commands (ls, grep, find, etc.)\",\n\tedit: \"Make surgical edits to files (find exact text and replace)\",\n\twrite: \"Create or overwrite files\",\n\tgrep: \"Search file contents for patterns (respects .gitignore)\",\n\tfind: \"Find files by glob pattern (respects .gitignore)\",\n\tls: \"List directory contents\",\n\trg: \"Run ripgrep directly for advanced regex search (prefer explicit path args, e.g. -n pattern .)\",\n\tfd: \"Run fd directly for fast file discovery\",\n\tast_grep:\n\t\t\"Run ast-grep for AST/syntax-aware structural code search (prefer run --pattern; retry with scan/-p on older versions)\",\n\tcomby:\n\t\t\"Run comby for structural pattern search/rewrite previews (prefer explicit -matcher; no in-place edits)\",\n\tjq: \"Run jq for JSON querying/transformation\",\n\tyq: \"Run yq for YAML/JSON/TOML querying/transformation\",\n\tsemgrep: \"Run semgrep for structural/static security checks\",\n\tsed: \"Run sed for stream editing/extraction previews (no in-place edits)\",\n\tsemantic_search:\n\t\t\"Semantic embeddings search over the project index (actions: status, index, rebuild, query)\",\n\ttask: \"Run a specialized subagent (supports profile, cwd, lock_key for optional write serialization, run_id/task_id, model override, background mode for detached runs, and agent=<custom name from .iosm/agents>)\",\n};\n\nexport interface BuildSystemPromptOptions {\n\t/** Custom system prompt (replaces default). */\n\tcustomPrompt?: string;\n\t/** Tools to include in prompt. Default: [read, bash, edit, write] */\n\tselectedTools?: string[];\n\t/** Optional one-line tool snippets keyed by tool name. */\n\ttoolSnippets?: Record<string, string>;\n\t/** Additional guideline bullets appended to the default system prompt guidelines. */\n\tpromptGuidelines?: string[];\n\t/** Text to append to system prompt. */\n\tappendSystemPrompt?: string;\n\t/** Working directory. Default: process.cwd() */\n\tcwd?: string;\n\t/** Pre-loaded context files. */\n\tcontextFiles?: Array<{ path: string; content: string }>;\n\t/** Pre-loaded skills. */\n\tskills?: Skill[];\n}\n\n/** Build the system prompt with tools, guidelines, and context */\nexport function buildSystemPrompt(options: BuildSystemPromptOptions = {}): string {\n\tconst {\n\t\tcustomPrompt,\n\t\tselectedTools,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t\tappendSystemPrompt,\n\t\tcwd,\n\t\tcontextFiles: providedContextFiles,\n\t\tskills: providedSkills,\n\t} = options;\n\tconst resolvedCwd = cwd ?? process.cwd();\n\n\tconst now = new Date();\n\tconst dateTime = now.toLocaleString(\"en-US\", {\n\t\tweekday: \"long\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\tday: \"numeric\",\n\t\thour: \"2-digit\",\n\t\tminute: \"2-digit\",\n\t\tsecond: \"2-digit\",\n\t\ttimeZoneName: \"short\",\n\t});\n\n\tconst appendSection = appendSystemPrompt ? `\\n\\n${appendSystemPrompt}` : \"\";\n\n\tconst contextFiles = providedContextFiles ?? [];\n\tconst skills = providedSkills ?? [];\n\n\tif (customPrompt) {\n\t\tlet prompt = customPrompt;\n\n\t\tif (appendSection) {\n\t\t\tprompt += appendSection;\n\t\t}\n\n\t\t// Append project context files\n\t\tif (contextFiles.length > 0) {\n\t\t\tprompt += \"\\n\\n# Project Context\\n\\n\";\n\t\t\tprompt += \"Project-specific instructions and guidelines:\\n\\n\";\n\t\t\tfor (const { path: filePath, content } of contextFiles) {\n\t\t\t\tprompt += `## ${filePath}\\n\\n${content}\\n\\n`;\n\t\t\t}\n\t\t}\n\n\t\t// Append skills section (only if read tool is available)\n\t\tconst customPromptHasRead = !selectedTools || selectedTools.includes(\"read\");\n\t\tif (customPromptHasRead && skills.length > 0) {\n\t\t\tprompt += formatSkillsForPrompt(skills);\n\t\t}\n\n\t\t// Add date/time and working directory last\n\t\tprompt += `\\nCurrent date and time: ${dateTime}`;\n\t\tprompt += `\\nCurrent working directory: ${resolvedCwd}`;\n\n\t\treturn prompt;\n\t}\n\n\t// Get absolute paths to documentation and examples\n\tconst readmePath = getReadmePath();\n\tconst docsPath = getDocsPath();\n\tconst examplesPath = getExamplesPath();\n\n\t// Build tools list based on selected tools.\n\t// Built-ins use toolDescriptions. Custom tools can provide one-line snippets.\n\tconst tools = selectedTools || [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst toolsList =\n\t\ttools.length > 0\n\t\t\t? tools\n\t\t\t\t\t.map((name) => {\n\t\t\t\t\t\tconst snippet = toolSnippets?.[name] ?? toolDescriptions[name] ?? name;\n\t\t\t\t\t\treturn `- ${name}: ${snippet}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\")\n\t\t\t: \"(none)\";\n\n\t// Build guidelines based on which tools are actually available\n\tconst guidelinesList: string[] = [];\n\tconst guidelinesSet = new Set<string>();\n\tconst addGuideline = (guideline: string): void => {\n\t\tif (guidelinesSet.has(guideline)) {\n\t\t\treturn;\n\t\t}\n\t\tguidelinesSet.add(guideline);\n\t\tguidelinesList.push(guideline);\n\t};\n\n\tconst hasBash = tools.includes(\"bash\");\n\tconst hasEdit = tools.includes(\"edit\");\n\tconst hasWrite = tools.includes(\"write\");\n\tconst hasGrep = tools.includes(\"grep\");\n\tconst hasFind = tools.includes(\"find\");\n\tconst hasLs = tools.includes(\"ls\");\n\tconst hasRg = tools.includes(\"rg\");\n\tconst hasFd = tools.includes(\"fd\");\n\tconst hasAstGrep = tools.includes(\"ast_grep\");\n\tconst hasComby = tools.includes(\"comby\");\n\tconst hasJq = tools.includes(\"jq\");\n\tconst hasYq = tools.includes(\"yq\");\n\tconst hasSemgrep = tools.includes(\"semgrep\");\n\tconst hasSed = tools.includes(\"sed\");\n\tconst hasSemanticSearch = tools.includes(\"semantic_search\");\n\tconst hasRead = tools.includes(\"read\");\n\n\t// File exploration guidelines\n\tif (hasBash && !hasGrep && !hasFind && !hasLs && !hasRg && !hasFd) {\n\t\taddGuideline(\"Use bash for file operations like ls, rg, find; prefer rg for targeted search when available\");\n\t} else if (hasBash && (hasGrep || hasFind || hasLs || hasRg || hasFd)) {\n\t\taddGuideline(\"Prefer grep/find/ls/rg/fd tools over bash for codebase exploration (faster and less noisy)\");\n\t}\n\n\tif (hasRg || hasFd || hasAstGrep || hasComby || hasJq || hasYq || hasSemgrep || hasSed || hasSemanticSearch) {\n\t\taddGuideline(\n\t\t\t\"Route work to specialized tools first: rg/fd (search/discovery), semantic_search (concept-level retrieval), ast_grep/comby (structural code queries), jq/yq (data/config transforms), semgrep (risk scans), sed (stream extraction)\",\n\t\t);\n\t}\n\n\tif (hasAstGrep || hasComby) {\n\t\taddGuideline(\"Use ast_grep/comby for syntax-aware structural queries before falling back to broad regex\");\n\t}\n\n\tif (hasComby) {\n\t\taddGuideline(\"Use comby to preview structural rewrite matches first, then apply final changes via edit/write\");\n\t}\n\n\tif (hasJq || hasYq) {\n\t\taddGuideline(\"Prefer jq/yq over ad-hoc shell parsing when extracting or transforming JSON/YAML/TOML\");\n\t}\n\n\tif (hasSemgrep) {\n\t\taddGuideline(\"Use semgrep for rule-based risk scans and structural security checks when relevant\");\n\t}\n\n\tif (hasSed) {\n\t\taddGuideline(\"Use sed for preview/extraction workflows only; perform final file edits with edit/write\");\n\t}\n\n\tif (hasSemanticSearch) {\n\t\taddGuideline(\n\t\t\t\"Use semantic_search for intent/meaning queries that are hard to express with regex; use rg/ast_grep for exact symbol and syntax matches\",\n\t\t);\n\t\taddGuideline(\n\t\t\t\"semantic_search query can auto-refresh stale indexes when semantic auto-index is enabled (default); if disabled or if provider/chunk/filter changes require it, run semantic_search index/rebuild explicitly\",\n\t\t);\n\t}\n\n\tif (hasRg || hasAstGrep || hasComby) {\n\t\taddGuideline(\n\t\t\t\"For rg/ast_grep/comby, pass explicit target paths to avoid cwd ambiguity; if syntax errors occur (especially ast_grep), retry once with version-compatible command forms before concluding no matches\",\n\t\t);\n\t}\n\n\tif (\n\t\thasBash &&\n\t\t(hasRg || hasFd || hasAstGrep || hasComby || hasJq || hasYq || hasSemgrep || hasSed || hasSemanticSearch)\n\t) {\n\t\taddGuideline(\n\t\t\t\"If a required CLI tool is missing, install it first when permitted (rg/fd can be auto-managed; others via brew/apt/pipx/npm), then continue with that tool instead of broad bash fallback. For semantic_search, configure provider/index first via /semantic setup.\",\n\t\t);\n\t}\n\n\t// Read before edit guideline\n\tif (hasRead && hasEdit) {\n\t\taddGuideline(\"Use read to examine files before editing. You must use this tool instead of cat or sed.\");\n\t}\n\n\t// Edit guideline\n\tif (hasEdit) {\n\t\taddGuideline(\"Use edit for precise changes (old text must match exactly)\");\n\t}\n\n\t// Write guideline\n\tif (hasWrite) {\n\t\taddGuideline(\"Use write only for new files or complete rewrites\");\n\t}\n\n\t// Output guideline (only when actually writing or executing)\n\tif (hasEdit || hasWrite) {\n\t\taddGuideline(\n\t\t\t\"When summarizing your actions, output plain text directly - do NOT use cat or bash to display what you did\",\n\t\t);\n\t}\n\n\taddGuideline(\"Inspect the relevant files before editing and keep exploration bounded to the task\");\n\taddGuideline(\"Make reasonable assumptions and continue unless a risky ambiguity blocks the work\");\n\taddGuideline(\"Classify requests as simple vs complex: execute simple work immediately, use a step plan for complex work\");\n\taddGuideline(\"For complex work, publish a short step plan before edits and keep step statuses current while executing\");\n\taddGuideline(\"If a meaningful architecture or product fork changes implementation, ask a concise clarification before editing\");\n\taddGuideline(\"After changes, run the smallest relevant verification and report the concrete result\");\n\taddGuideline(\"Do not claim success without evidence; if you could not verify, say so explicitly\");\n\taddGuideline(\"Complete the requested task end-to-end when possible instead of stopping at analysis\");\n\taddGuideline(\"For code review requests, lead with findings and risks before summaries\");\n\taddGuideline(\n\t\t\"When an active engineering contract is present in context, treat its constraints, quality gates, and definition_of_done as execution requirements unless user overrides them.\",\n\t);\n\taddGuideline(\"For major feature forks, run a /singular feasibility pass before coding to compare implementation options.\");\n\n\tfor (const guideline of promptGuidelines ?? []) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\taddGuideline(normalized);\n\t\t}\n\t}\n\n\t// Always include these\n\taddGuideline(\"Be concise in your responses\");\n\taddGuideline(\"Show file paths clearly when working with files\");\n\n\tconst guidelines = guidelinesList.map((g) => `- ${g}`).join(\"\\n\");\n\n\tlet prompt = `You are a professional software engineering agent operating inside iosm-cli. Help users inspect systems, change code, run commands, maintain project artifacts when needed, and explain results clearly.\n\nAvailable tools:\n${toolsList}\n\nIn addition to the tools above, you may have access to other custom tools depending on the project.\n\nGuidelines:\n${guidelines}\n\nOperating defaults:\n- Summarize work in standard engineering language first: what you inspected, what you changed, what you verified, and any remaining risk or blocker.\n- Do NOT start by reading documentation unless the user asks for documentation help, asks about harness internals, or implementation is blocked without it.\n- Start implementation turns with a quick repository scan of the files most likely to matter before proposing or editing.\n- Prefer targeted reads and searches over broad dumps; keep command output bounded and focused.\n- For complex tasks, include a machine-readable plan block before edits and update it when statuses change:\n <task_plan complexity=\"complex\">\n - [in_progress] Current step\n - [pending] Next step\n </task_plan>\n- Skip plan blocks for simple one-shot tasks.\n- When a material architecture fork exists, pause and ask one concise clarification (or use ask_user when available) before implementation.\n- Treat verification as mandatory after edits: tests, type checks, linters, or a precise explanation of why verification was not possible.\n- For complex requests, execute plan steps in order, close each step explicitly, and finish the full plan unless blocked.\n- If the user explicitly asks for subagents/agents orchestration, you MUST use the task tool rather than doing all work in the main agent.\n- For explicit subagent/orchestration requests, execute at least one task tool call before giving a final prose-only answer.\n- Do not expose internal orchestration scaffolding to the user (for example: [ORCHESTRATION_DIRECTIVE], pseudo tool-call JSON, or raw task arguments).\n- When invoking tools, call them directly without preambles like \"I will now call tool X\"; only report outcomes that matter to the user.\n\t- Respect orchestration constraints from the user exactly: count, parallel vs sequential execution, per-agent profile, and per-agent working directory (cwd) when provided.\n\t- Treat explicit orchestration requests in any language as constraints (including non-English text and minor typos).\n\t- For explicit parallel orchestration requests, issue multiple independent task tool calls to match the requested agent count; do not collapse to a single subagent unless the user asks for one.\n- For explicit parallel orchestration requests, emit independent task calls in a single assistant turn whenever possible so they can be launched together.\n- Runtime note: when parallel orchestration is requested, emit independent task calls in one assistant turn so they can run concurrently; avoid background mode unless the user explicitly asks for detached async runs.\n- If orchestration constraints are ambiguous or conflict, ask one concise clarification (or use ask_user when available) before launching subagents.\n- When the user provides an <orchestrate ...>...</orchestrate> block, treat it as an execution contract and follow its mode/agents/profile/cwd assignments strictly.\n- When orchestration assignments include run_id/task_id/lock_key or depends_on, enforce them in task calls (run_id/task_id for team tracking, lock_key for serialization domains, depends_on for ordering).\n- For write-heavy parallel orchestration, prefer isolation=worktree to reduce cross-agent interference when the repository is git-backed.\n- If the user message includes @<custom-agent-name>, treat it as an explicit agent selection and call task with agent set to that custom agent name.\n\niosm-cli reference docs (use when needed):\n- Main documentation: ${readmePath}\n- Additional docs: ${docsPath}\n- Examples: ${examplesPath} (extensions, custom tools, SDK)\n- When asked about: extensions (docs/extensions.md, examples/extensions/), themes (docs/themes.md), skills (docs/skills.md), prompt templates (docs/prompt-templates.md), TUI components (docs/tui.md), keybindings (docs/keybindings.md), SDK integrations (docs/sdk.md), custom providers (docs/custom-provider.md), adding models (docs/models.md), package composition (docs/packages.md)\n- When working on harness internals, read the relevant docs/examples before implementing`;\n\n\tif (appendSection) {\n\t\tprompt += appendSection;\n\t}\n\n\t// Append project context files\n\tif (contextFiles.length > 0) {\n\t\tprompt += \"\\n\\n# Project Context\\n\\n\";\n\t\tprompt += \"Project-specific instructions and guidelines:\\n\\n\";\n\t\tfor (const { path: filePath, content } of contextFiles) {\n\t\t\tprompt += `## ${filePath}\\n\\n${content}\\n\\n`;\n\t\t}\n\t}\n\n\t// Append skills section (only if read tool is available)\n\tif (hasRead && skills.length > 0) {\n\t\tprompt += formatSkillsForPrompt(skills);\n\t}\n\n\t// Add date/time and working directory last\n\tprompt += `\\nCurrent date and time: ${dateTime}`;\n\tprompt += `\\nCurrent working directory: ${resolvedCwd}`;\n\n\treturn prompt;\n}\n"]}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * System prompt construction and project context loading\n */\n\nimport { getDocsPath, getExamplesPath, getReadmePath } from \"../config.js\";\nimport { formatSkillsForPrompt, type Skill } from \"./skills.js\";\n\n/** Tool descriptions for system prompt */\nconst toolDescriptions: Record<string, string> = {\n\tread: \"Read file contents\",\n\tbash: \"Execute bash commands (ls, grep, find, etc.)\",\n\tedit: \"Make surgical edits to files (find exact text and replace)\",\n\twrite: \"Create or overwrite files\",\n\tgrep: \"Search file contents for patterns (respects .gitignore)\",\n\tfind: \"Find files by glob pattern (respects .gitignore)\",\n\tls: \"List directory contents\",\n\trg: \"Run ripgrep directly for advanced regex search (prefer explicit path args, e.g. -n pattern .)\",\n\tfd: \"Run fd directly for fast file discovery\",\n\tast_grep:\n\t\t\"Run ast-grep for AST/syntax-aware structural code search (prefer run --pattern; retry with scan/-p on older versions)\",\n\tcomby:\n\t\t\"Run comby for structural pattern search/rewrite previews (prefer explicit -matcher; no in-place edits)\",\n\tjq: \"Run jq for JSON querying/transformation\",\n\tyq: \"Run yq for YAML/JSON/TOML querying/transformation\",\n\tsemgrep: \"Run semgrep for structural/static security checks\",\n\tsed: \"Run sed for stream editing/extraction previews (no in-place edits)\",\n\tsemantic_search:\n\t\t\"Semantic embeddings search over the project index (actions: status, index, rebuild, query)\",\n\ttask: \"Run a specialized subagent (supports profile, cwd, lock_key for optional write serialization, run_id/task_id, model override, background mode for detached runs, and agent=<custom name from .iosm/agents>)\",\n};\n\nexport interface BuildSystemPromptOptions {\n\t/** Custom system prompt (replaces default). */\n\tcustomPrompt?: string;\n\t/** Tools to include in prompt. Default: [read, bash, edit, write] */\n\tselectedTools?: string[];\n\t/** Optional one-line tool snippets keyed by tool name. */\n\ttoolSnippets?: Record<string, string>;\n\t/** Additional guideline bullets appended to the default system prompt guidelines. */\n\tpromptGuidelines?: string[];\n\t/** Text to append to system prompt. */\n\tappendSystemPrompt?: string;\n\t/** Working directory. Default: process.cwd() */\n\tcwd?: string;\n\t/** Pre-loaded context files. */\n\tcontextFiles?: Array<{ path: string; content: string }>;\n\t/** Pre-loaded skills. */\n\tskills?: Skill[];\n}\n\n/** Build the system prompt with tools, guidelines, and context */\nexport function buildSystemPrompt(options: BuildSystemPromptOptions = {}): string {\n\tconst {\n\t\tcustomPrompt,\n\t\tselectedTools,\n\t\ttoolSnippets,\n\t\tpromptGuidelines,\n\t\tappendSystemPrompt,\n\t\tcwd,\n\t\tcontextFiles: providedContextFiles,\n\t\tskills: providedSkills,\n\t} = options;\n\tconst resolvedCwd = cwd ?? process.cwd();\n\n\tconst now = new Date();\n\tconst dateTime = now.toLocaleString(\"en-US\", {\n\t\tweekday: \"long\",\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\tday: \"numeric\",\n\t\thour: \"2-digit\",\n\t\tminute: \"2-digit\",\n\t\tsecond: \"2-digit\",\n\t\ttimeZoneName: \"short\",\n\t});\n\n\tconst appendSection = appendSystemPrompt ? `\\n\\n${appendSystemPrompt}` : \"\";\n\n\tconst contextFiles = providedContextFiles ?? [];\n\tconst skills = providedSkills ?? [];\n\n\tif (customPrompt) {\n\t\tlet prompt = customPrompt;\n\n\t\tif (appendSection) {\n\t\t\tprompt += appendSection;\n\t\t}\n\n\t\t// Append project context files\n\t\tif (contextFiles.length > 0) {\n\t\t\tprompt += \"\\n\\n# Project Context\\n\\n\";\n\t\t\tprompt += \"Project-specific instructions and guidelines:\\n\\n\";\n\t\t\tfor (const { path: filePath, content } of contextFiles) {\n\t\t\t\tprompt += `## ${filePath}\\n\\n${content}\\n\\n`;\n\t\t\t}\n\t\t}\n\n\t\t// Append skills section (only if read tool is available)\n\t\tconst customPromptHasRead = !selectedTools || selectedTools.includes(\"read\");\n\t\tif (customPromptHasRead && skills.length > 0) {\n\t\t\tprompt += formatSkillsForPrompt(skills);\n\t\t}\n\n\t\t// Add date/time and working directory last\n\t\tprompt += `\\nCurrent date and time: ${dateTime}`;\n\t\tprompt += `\\nCurrent working directory: ${resolvedCwd}`;\n\n\t\treturn prompt;\n\t}\n\n\t// Get absolute paths to documentation and examples\n\tconst readmePath = getReadmePath();\n\tconst docsPath = getDocsPath();\n\tconst examplesPath = getExamplesPath();\n\n\t// Build tools list based on selected tools.\n\t// Built-ins use toolDescriptions. Custom tools can provide one-line snippets.\n\tconst tools = selectedTools || [\"read\", \"bash\", \"edit\", \"write\"];\n\tconst toolsList =\n\t\ttools.length > 0\n\t\t\t? tools\n\t\t\t\t\t.map((name) => {\n\t\t\t\t\t\tconst snippet = toolSnippets?.[name] ?? toolDescriptions[name] ?? name;\n\t\t\t\t\t\treturn `- ${name}: ${snippet}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\\n\")\n\t\t\t: \"(none)\";\n\n\t// Build guidelines based on which tools are actually available\n\tconst guidelinesList: string[] = [];\n\tconst guidelinesSet = new Set<string>();\n\tconst addGuideline = (guideline: string): void => {\n\t\tif (guidelinesSet.has(guideline)) {\n\t\t\treturn;\n\t\t}\n\t\tguidelinesSet.add(guideline);\n\t\tguidelinesList.push(guideline);\n\t};\n\n\tconst hasBash = tools.includes(\"bash\");\n\tconst hasEdit = tools.includes(\"edit\");\n\tconst hasWrite = tools.includes(\"write\");\n\tconst hasGrep = tools.includes(\"grep\");\n\tconst hasFind = tools.includes(\"find\");\n\tconst hasLs = tools.includes(\"ls\");\n\tconst hasRg = tools.includes(\"rg\");\n\tconst hasFd = tools.includes(\"fd\");\n\tconst hasAstGrep = tools.includes(\"ast_grep\");\n\tconst hasComby = tools.includes(\"comby\");\n\tconst hasJq = tools.includes(\"jq\");\n\tconst hasYq = tools.includes(\"yq\");\n\tconst hasSemgrep = tools.includes(\"semgrep\");\n\tconst hasSed = tools.includes(\"sed\");\n\tconst hasSemanticSearch = tools.includes(\"semantic_search\");\n\tconst hasRead = tools.includes(\"read\");\n\n\t// File exploration guidelines\n\tif (hasBash && !hasGrep && !hasFind && !hasLs && !hasRg && !hasFd) {\n\t\taddGuideline(\"Use bash for file operations like ls, rg, find; prefer rg for targeted search when available\");\n\t} else if (hasBash && (hasGrep || hasFind || hasLs || hasRg || hasFd)) {\n\t\taddGuideline(\"Prefer grep/find/ls/rg/fd tools over bash for codebase exploration (faster and less noisy)\");\n\t}\n\n\tif (hasRg || hasFd || hasAstGrep || hasComby || hasJq || hasYq || hasSemgrep || hasSed || hasSemanticSearch) {\n\t\taddGuideline(\n\t\t\t\"Route work to specialized tools first: rg/fd (search/discovery), semantic_search (concept-level retrieval), ast_grep/comby (structural code queries), jq/yq (data/config transforms), semgrep (risk scans), sed (stream extraction)\",\n\t\t);\n\t}\n\n\tif (hasAstGrep || hasComby) {\n\t\taddGuideline(\"Use ast_grep/comby for syntax-aware structural queries before falling back to broad regex\");\n\t}\n\n\tif (hasComby) {\n\t\taddGuideline(\"Use comby to preview structural rewrite matches first, then apply final changes via edit/write\");\n\t}\n\n\tif (hasJq || hasYq) {\n\t\taddGuideline(\"Prefer jq/yq over ad-hoc shell parsing when extracting or transforming JSON/YAML/TOML\");\n\t}\n\n\tif (hasSemgrep) {\n\t\taddGuideline(\"Use semgrep for rule-based risk scans and structural security checks when relevant\");\n\t}\n\n\tif (hasSed) {\n\t\taddGuideline(\"Use sed for preview/extraction workflows only; perform final file edits with edit/write\");\n\t}\n\n\tif (hasSemanticSearch) {\n\t\taddGuideline(\n\t\t\t\"Use semantic_search for intent/meaning queries that are hard to express with regex; use rg/ast_grep for exact symbol and syntax matches\",\n\t\t);\n\t\taddGuideline(\n\t\t\t\"semantic_search query can auto-refresh stale indexes when semantic auto-index is enabled (default); if disabled or if provider/chunk/filter changes require it, run semantic_search index/rebuild explicitly\",\n\t\t);\n\t}\n\n\tif (hasRg || hasAstGrep || hasComby) {\n\t\taddGuideline(\n\t\t\t\"For rg/ast_grep/comby, pass explicit target paths to avoid cwd ambiguity; if syntax errors occur (especially ast_grep), retry once with version-compatible command forms before concluding no matches\",\n\t\t);\n\t}\n\n\tif (\n\t\thasBash &&\n\t\t(hasRg || hasFd || hasAstGrep || hasComby || hasJq || hasYq || hasSemgrep || hasSed || hasSemanticSearch)\n\t) {\n\t\taddGuideline(\n\t\t\t\"If a required CLI tool is missing, install it first when permitted (rg/fd can be auto-managed; others via brew/apt/pipx/npm), then continue with that tool instead of broad bash fallback. For semantic_search, configure provider/index first via /semantic setup.\",\n\t\t);\n\t}\n\n\t// Read before edit guideline\n\tif (hasRead && hasEdit) {\n\t\taddGuideline(\"Use read to examine files before editing. You must use this tool instead of cat or sed.\");\n\t}\n\n\t// Edit guideline\n\tif (hasEdit) {\n\t\taddGuideline(\"Use edit for precise changes (old text must match exactly)\");\n\t}\n\n\t// Write guideline\n\tif (hasWrite) {\n\t\taddGuideline(\"Use write only for new files or complete rewrites\");\n\t}\n\n\t// Output guideline (only when actually writing or executing)\n\tif (hasEdit || hasWrite) {\n\t\taddGuideline(\n\t\t\t\"When summarizing your actions, output plain text directly - do NOT use cat or bash to display what you did\",\n\t\t);\n\t}\n\n\taddGuideline(\"Inspect the relevant files before editing and keep exploration bounded to the task\");\n\taddGuideline(\"Make reasonable assumptions and continue unless a risky ambiguity blocks the work\");\n\taddGuideline(\"Classify requests as simple vs complex: execute simple work immediately, use a step plan for complex work\");\n\taddGuideline(\"For complex work, publish a short step plan before edits and keep step statuses current while executing\");\n\taddGuideline(\"If a meaningful architecture or product fork changes implementation, ask a concise clarification before editing\");\n\taddGuideline(\"After changes, run the smallest relevant verification and report the concrete result\");\n\taddGuideline(\"Do not claim success without evidence; if you could not verify, say so explicitly\");\n\taddGuideline(\"Complete the requested task end-to-end when possible instead of stopping at analysis\");\n\taddGuideline(\"For code review requests, lead with findings and risks before summaries\");\n\taddGuideline(\n\t\t\"When an active engineering contract is present in context, treat its constraints, quality gates, and definition_of_done as execution requirements unless user overrides them.\",\n\t);\n\taddGuideline(\"For major feature forks, run a /singular feasibility pass before coding to compare implementation options.\");\n\n\tfor (const guideline of promptGuidelines ?? []) {\n\t\tconst normalized = guideline.trim();\n\t\tif (normalized.length > 0) {\n\t\t\taddGuideline(normalized);\n\t\t}\n\t}\n\n\t// Always include these\n\taddGuideline(\"Be concise in your responses\");\n\taddGuideline(\"Show file paths clearly when working with files\");\n\n\tconst guidelines = guidelinesList.map((g) => `- ${g}`).join(\"\\n\");\n\n\tlet prompt = `You are a professional software engineering agent operating inside iosm-cli. Help users inspect systems, change code, run commands, maintain project artifacts when needed, and explain results clearly.\n\nAvailable tools:\n${toolsList}\n\nIn addition to the tools above, you may have access to other custom tools depending on the project.\n\nGuidelines:\n${guidelines}\n\nOperating defaults:\n- Summarize work in standard engineering language first: what you inspected, what you changed, what you verified, and any remaining risk or blocker.\n- Do NOT start by reading documentation unless the user asks for documentation help, asks about harness internals, or implementation is blocked without it.\n- Start implementation turns with a quick repository scan of the files most likely to matter before proposing or editing.\n- Prefer targeted reads and searches over broad dumps; keep command output bounded and focused.\n- For complex tasks, include a machine-readable plan block before edits and update it when statuses change:\n <task_plan complexity=\"complex\">\n - [in_progress] Current step\n - [pending] Next step\n </task_plan>\n- Skip plan blocks for simple one-shot tasks.\n- When a material architecture fork exists, pause and ask one concise clarification (or use ask_user when available) before implementation.\n- Treat verification as mandatory after edits: tests, type checks, linters, or a precise explanation of why verification was not possible.\n- For complex requests, execute plan steps in order, close each step explicitly, and finish the full plan unless blocked.\n- If the user explicitly asks for subagents/agents orchestration, you MUST use the task tool rather than doing all work in the main agent.\n- For explicit subagent/orchestration requests, execute at least one task tool call before giving a final prose-only answer.\n- Do not expose internal orchestration scaffolding to the user (for example: [ORCHESTRATION_DIRECTIVE], pseudo tool-call JSON, or raw task arguments).\n- When invoking tools, call them directly without preambles like \"I will now call tool X\"; only report outcomes that matter to the user.\n\t- Respect orchestration constraints from the user exactly: count, parallel vs sequential execution, per-agent profile, and per-agent working directory (cwd) when provided.\n\t- Treat explicit orchestration requests in any language as constraints (including non-English text and minor typos).\n\t- For explicit parallel orchestration requests, issue multiple independent task tool calls to match the requested agent count; do not collapse to a single subagent unless the user asks for one.\n- For explicit parallel orchestration requests, emit independent task calls in a single assistant turn whenever possible so they can be launched together.\n- Runtime note: when parallel orchestration is requested, emit independent task calls in one assistant turn so they can run concurrently; avoid background mode unless the user explicitly asks for detached async runs.\n- If orchestration constraints are ambiguous or conflict, ask one concise clarification (or use ask_user when available) before launching subagents.\n- When the user provides an <orchestrate ...>...</orchestrate> block, treat it as an execution contract and follow its mode/agents/profile/cwd assignments strictly.\n- When orchestration assignments include run_id/task_id/lock_key or depends_on, enforce them in task calls (run_id/task_id for team tracking, lock_key for serialization domains, depends_on for ordering).\n- For delegated parallel runs, use shared_memory_* tools as the primary coordination channel: namespaced keys, read-before-write, and CAS (if_version) for contested updates; reserve append mode for timeline/log keys.\n- For write-heavy parallel orchestration, prefer isolation=worktree to reduce cross-agent interference when the repository is git-backed.\n- If the user message includes @<custom-agent-name>, treat it as an explicit agent selection and call task with agent set to that custom agent name.\n\niosm-cli reference docs (use when needed):\n- Main documentation: ${readmePath}\n- Additional docs: ${docsPath}\n- Examples: ${examplesPath} (extensions, custom tools, SDK)\n- When asked about: extensions (docs/extensions.md, examples/extensions/), themes (docs/themes.md), skills (docs/skills.md), prompt templates (docs/prompt-templates.md), TUI components (docs/tui.md), keybindings (docs/keybindings.md), SDK integrations (docs/sdk.md), custom providers (docs/custom-provider.md), adding models (docs/models.md), package composition (docs/packages.md)\n- When working on harness internals, read the relevant docs/examples before implementing`;\n\n\tif (appendSection) {\n\t\tprompt += appendSection;\n\t}\n\n\t// Append project context files\n\tif (contextFiles.length > 0) {\n\t\tprompt += \"\\n\\n# Project Context\\n\\n\";\n\t\tprompt += \"Project-specific instructions and guidelines:\\n\\n\";\n\t\tfor (const { path: filePath, content } of contextFiles) {\n\t\t\tprompt += `## ${filePath}\\n\\n${content}\\n\\n`;\n\t\t}\n\t}\n\n\t// Append skills section (only if read tool is available)\n\tif (hasRead && skills.length > 0) {\n\t\tprompt += formatSkillsForPrompt(skills);\n\t}\n\n\t// Add date/time and working directory last\n\tprompt += `\\nCurrent date and time: ${dateTime}`;\n\tprompt += `\\nCurrent working directory: ${resolvedCwd}`;\n\n\treturn prompt;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ast-grep.d.ts","sourceRoot":"","sources":["../../../src/core/tools/ast-grep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAyB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEhE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,iBAAiB,CAAC,CASlF;AAED,eAAO,MAAM,WAAW;;;;;QAAmC,CAAC"}
1
+ {"version":3,"file":"ast-grep.d.ts","sourceRoot":"","sources":["../../../src/core/tools/ast-grep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAyB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEhE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,iBAAiB,CAAC,CAWlF;AAED,eAAO,MAAM,WAAW;;;;;QAAmC,CAAC"}
@@ -6,6 +6,8 @@ export function createAstGrepTool(cwd) {
6
6
  description: "Run ast-grep (sg) for syntax-aware code queries. Pass CLI args directly. Preferred form: [\"run\",\"--pattern\",\"console.log($A)\",\"--lang\",\"javascript\",\"src\"]. If version syntax differs, retry with scan/-p equivalents.",
7
7
  commandCandidates: ["ast-grep", "sg"],
8
8
  missingInstallHint: "Install ast-grep (brew install ast-grep or npm i -g @ast-grep/cli).",
9
+ forbiddenArgs: ["-i", "--interactive", "-U", "--update-all"],
10
+ forbiddenArgPrefixes: ["--update-all="],
9
11
  });
10
12
  }
11
13
  export const astGrepTool = createAstGrepTool(process.cwd());
@@ -1 +1 @@
1
- {"version":3,"file":"ast-grep.js","sourceRoot":"","sources":["../../../src/core/tools/ast-grep.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAqB,MAAM,mBAAmB,CAAC;AAI7E,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC5C,OAAO,qBAAqB,CAAC,GAAG,EAAE;QACjC,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EACV,oOAAoO;QACrO,iBAAiB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC;QACrC,kBAAkB,EAAE,qEAAqE;KACzF,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC","sourcesContent":["import type { AgentTool } from \"@mariozechner/pi-agent-core\";\nimport type { Static } from \"@sinclair/typebox\";\nimport { createExternalCliTool, externalCliSchema } from \"./external-cli.js\";\n\nexport type AstGrepToolInput = Static<typeof externalCliSchema>;\n\nexport function createAstGrepTool(cwd: string): AgentTool<typeof externalCliSchema> {\n\treturn createExternalCliTool(cwd, {\n\t\tname: \"ast_grep\",\n\t\tlabel: \"ast-grep\",\n\t\tdescription:\n\t\t\t\"Run ast-grep (sg) for syntax-aware code queries. Pass CLI args directly. Preferred form: [\\\"run\\\",\\\"--pattern\\\",\\\"console.log($A)\\\",\\\"--lang\\\",\\\"javascript\\\",\\\"src\\\"]. If version syntax differs, retry with scan/-p equivalents.\",\n\t\tcommandCandidates: [\"ast-grep\", \"sg\"],\n\t\tmissingInstallHint: \"Install ast-grep (brew install ast-grep or npm i -g @ast-grep/cli).\",\n\t});\n}\n\nexport const astGrepTool = createAstGrepTool(process.cwd());\n"]}
1
+ {"version":3,"file":"ast-grep.js","sourceRoot":"","sources":["../../../src/core/tools/ast-grep.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAqB,MAAM,mBAAmB,CAAC;AAI7E,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC5C,OAAO,qBAAqB,CAAC,GAAG,EAAE;QACjC,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EACV,oOAAoO;QACrO,iBAAiB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC;QACrC,kBAAkB,EAAE,qEAAqE;QACzF,aAAa,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,CAAC;QAC5D,oBAAoB,EAAE,CAAC,eAAe,CAAC;KACvC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC","sourcesContent":["import type { AgentTool } from \"@mariozechner/pi-agent-core\";\nimport type { Static } from \"@sinclair/typebox\";\nimport { createExternalCliTool, externalCliSchema } from \"./external-cli.js\";\n\nexport type AstGrepToolInput = Static<typeof externalCliSchema>;\n\nexport function createAstGrepTool(cwd: string): AgentTool<typeof externalCliSchema> {\n\treturn createExternalCliTool(cwd, {\n\t\tname: \"ast_grep\",\n\t\tlabel: \"ast-grep\",\n\t\tdescription:\n\t\t\t\"Run ast-grep (sg) for syntax-aware code queries. Pass CLI args directly. Preferred form: [\\\"run\\\",\\\"--pattern\\\",\\\"console.log($A)\\\",\\\"--lang\\\",\\\"javascript\\\",\\\"src\\\"]. If version syntax differs, retry with scan/-p equivalents.\",\n\t\tcommandCandidates: [\"ast-grep\", \"sg\"],\n\t\tmissingInstallHint: \"Install ast-grep (brew install ast-grep or npm i -g @ast-grep/cli).\",\n\t\tforbiddenArgs: [\"-i\", \"--interactive\", \"-U\", \"--update-all\"],\n\t\tforbiddenArgPrefixes: [\"--update-all=\"],\n\t});\n}\n\nexport const astGrepTool = createAstGrepTool(process.cwd());\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shared-memory.d.ts","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAEN,KAAK,mBAAmB,EAIxB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,uBAAuB;;;;;;EAwB3B,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;EA8B1B,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC5E,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAwB1E,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC,OAAO,uBAAuB,CAAC,CA+BnH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC,OAAO,sBAAsB,CAAC,CA4CjH"}
1
+ {"version":3,"file":"shared-memory.d.ts","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAEN,KAAK,mBAAmB,EAIxB,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,uBAAuB;;;;;;EAwB3B,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;;;;EA8B1B,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC5E,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAyD1E,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC,OAAO,uBAAuB,CAAC,CA+BnH;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC,OAAO,sBAAsB,CAAC,CAiDjH"}
@@ -37,9 +37,32 @@ const sharedMemoryReadSchema = Type.Object({
37
37
  description: "Maximum entries to return (default 20).",
38
38
  })),
39
39
  include_values: Type.Optional(Type.Boolean({
40
- description: "When false, returns only metadata (key/version/writer).",
40
+ description: "When false (default), returns only metadata (key/version/writer).",
41
41
  })),
42
42
  });
43
+ function summarizeSharedMemoryItemForDetails(item, includeValuePreview) {
44
+ const base = {
45
+ key: item.key,
46
+ scope: item.scope,
47
+ version: item.version,
48
+ updatedAt: item.updatedAt,
49
+ writer: item.writer,
50
+ };
51
+ if (typeof item.value !== "string")
52
+ return base;
53
+ const valueLength = item.value.length;
54
+ if (!includeValuePreview) {
55
+ return {
56
+ ...base,
57
+ valueLength,
58
+ };
59
+ }
60
+ return {
61
+ ...base,
62
+ valueLength,
63
+ valuePreview: item.value.length > 200 ? `${item.value.slice(0, 197)}...` : item.value,
64
+ };
65
+ }
43
66
  function ensureContext(context) {
44
67
  if (!context.runId || !context.runId.trim()) {
45
68
  throw new Error("shared memory is unavailable: missing run_id context");
@@ -73,7 +96,7 @@ export function createSharedMemoryWriteTool(context) {
73
96
  scope: normalizeScope(input.scope),
74
97
  mode: normalizeMode(input.mode),
75
98
  ifVersion: input.if_version,
76
- });
99
+ }, _signal);
77
100
  return {
78
101
  content: [
79
102
  {
@@ -83,7 +106,7 @@ export function createSharedMemoryWriteTool(context) {
83
106
  ],
84
107
  details: {
85
108
  runId: ensured.runId,
86
- item: result,
109
+ item: summarizeSharedMemoryItemForDetails(result, false),
87
110
  },
88
111
  };
89
112
  },
@@ -106,8 +129,8 @@ export function createSharedMemoryReadTool(context) {
106
129
  key: input.key,
107
130
  prefix: input.prefix,
108
131
  limit: input.limit,
109
- includeValues: input.include_values ?? true,
110
- });
132
+ includeValues: input.include_values ?? false,
133
+ }, _signal);
111
134
  const header = `shared memory ${result.scope}: ${result.items.length}/${result.totalMatched}`;
112
135
  const lines = result.items.length === 0
113
136
  ? ["(no entries)"]
@@ -126,7 +149,12 @@ export function createSharedMemoryReadTool(context) {
126
149
  });
127
150
  return {
128
151
  content: [{ type: "text", text: [header, ...lines].join("\n") }],
129
- details: result,
152
+ details: {
153
+ runId: result.runId,
154
+ scope: result.scope,
155
+ totalMatched: result.totalMatched,
156
+ items: result.items.map((item) => summarizeSharedMemoryItemForDetails(item, input.include_values === true)),
157
+ },
130
158
  };
131
159
  },
132
160
  };
@@ -1 +1 @@
1
- {"version":3,"file":"shared-memory.js","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@mariozechner/pi-agent-core\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport {\n\treadSharedMemory,\n\ttype SharedMemoryContext,\n\ttype SharedMemoryScope,\n\ttype SharedMemoryWriteMode,\n\twriteSharedMemory,\n} from \"../shared-memory.js\";\n\nconst sharedMemoryWriteSchema = Type.Object({\n\tkey: Type.String({\n\t\tminLength: 1,\n\t\tdescription: \"Logical key for shared data within the current run (for example: findings/auth).\",\n\t}),\n\tvalue: Type.String({\n\t\tdescription: \"Text payload to store.\",\n\t}),\n\tscope: Type.Optional(\n\t\tType.Union([Type.Literal(\"run\"), Type.Literal(\"task\")], {\n\t\t\tdescription: \"run = visible to all tasks in run_id; task = isolated to current task_id.\",\n\t\t}),\n\t),\n\tmode: Type.Optional(\n\t\tType.Union([Type.Literal(\"set\"), Type.Literal(\"append\")], {\n\t\t\tdescription: \"set replaces value; append concatenates to existing value.\",\n\t\t}),\n\t),\n\tif_version: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tdescription: \"Optional CAS guard. Write succeeds only when current version matches this value.\",\n\t\t}),\n\t),\n});\n\nconst sharedMemoryReadSchema = Type.Object({\n\tkey: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Exact key to read. Mutually exclusive with prefix.\",\n\t\t}),\n\t),\n\tprefix: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Prefix filter for keys (for example: findings/).\",\n\t\t}),\n\t),\n\tscope: Type.Optional(\n\t\tType.Union([Type.Literal(\"run\"), Type.Literal(\"task\")], {\n\t\t\tdescription: \"run = visible to all tasks in run_id; task = isolated to current task_id.\",\n\t\t}),\n\t),\n\tlimit: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: 100,\n\t\t\tdescription: \"Maximum entries to return (default 20).\",\n\t\t}),\n\t),\n\tinclude_values: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"When false, returns only metadata (key/version/writer).\",\n\t\t}),\n\t),\n});\n\nexport type SharedMemoryWriteInput = Static<typeof sharedMemoryWriteSchema>;\nexport type SharedMemoryReadInput = Static<typeof sharedMemoryReadSchema>;\n\nfunction ensureContext(context: SharedMemoryContext): SharedMemoryContext {\n\tif (!context.runId || !context.runId.trim()) {\n\t\tthrow new Error(\"shared memory is unavailable: missing run_id context\");\n\t}\n\treturn context;\n}\n\nfunction summarizeWriter(context: SharedMemoryContext): string {\n\tconst parts = [context.taskId ? `task=${context.taskId}` : undefined, context.delegateId ? `delegate=${context.delegateId}` : undefined]\n\t\t.filter((item): item is string => Boolean(item))\n\t\t.join(\" \");\n\treturn parts.length > 0 ? parts : \"root\";\n}\n\nfunction normalizeScope(scope: SharedMemoryScope | undefined): SharedMemoryScope {\n\treturn scope ?? \"task\";\n}\n\nfunction normalizeMode(mode: SharedMemoryWriteMode | undefined): SharedMemoryWriteMode {\n\treturn mode ?? \"set\";\n}\n\nexport function createSharedMemoryWriteTool(context: SharedMemoryContext): AgentTool<typeof sharedMemoryWriteSchema> {\n\treturn {\n\t\tname: \"shared_memory_write\",\n\t\tlabel: \"shared_memory_write\",\n\t\tdescription:\n\t\t\t\"Write intermediate data into run-scoped shared memory so parallel agents/delegates can exchange state.\",\n\t\tparameters: sharedMemoryWriteSchema,\n\t\texecute: async (_toolCallId: string, params: unknown, _signal?: AbortSignal) => {\n\t\t\tconst input = params as SharedMemoryWriteInput;\n\t\t\tconst ensured = ensureContext(context);\n\t\t\tconst result = await writeSharedMemory(ensured, {\n\t\t\t\tkey: input.key,\n\t\t\t\tvalue: input.value,\n\t\t\t\tscope: normalizeScope(input.scope),\n\t\t\t\tmode: normalizeMode(input.mode),\n\t\t\t\tifVersion: input.if_version,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\ttext: `shared memory updated (${result.scope}:${result.key} v${result.version} by ${summarizeWriter(ensured)})`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: {\n\t\t\t\t\trunId: ensured.runId,\n\t\t\t\t\titem: result,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function createSharedMemoryReadTool(context: SharedMemoryContext): AgentTool<typeof sharedMemoryReadSchema> {\n\treturn {\n\t\tname: \"shared_memory_read\",\n\t\tlabel: \"shared_memory_read\",\n\t\tdescription:\n\t\t\t\"Read intermediate data from run-scoped shared memory (task-local or run-global view).\",\n\t\tparameters: sharedMemoryReadSchema,\n\t\texecute: async (_toolCallId: string, params: unknown, _signal?: AbortSignal) => {\n\t\t\tconst input = params as SharedMemoryReadInput;\n\t\t\tif (input.key && input.prefix) {\n\t\t\t\tthrow new Error(\"shared_memory_read accepts either key or prefix, not both\");\n\t\t\t}\n\t\t\tconst ensured = ensureContext(context);\n\t\t\tconst result = await readSharedMemory(ensured, {\n\t\t\t\tscope: normalizeScope(input.scope),\n\t\t\t\tkey: input.key,\n\t\t\t\tprefix: input.prefix,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tincludeValues: input.include_values ?? true,\n\t\t\t});\n\t\t\tconst header = `shared memory ${result.scope}: ${result.items.length}/${result.totalMatched}`;\n\t\t\tconst lines =\n\t\t\t\tresult.items.length === 0\n\t\t\t\t\t? [\"(no entries)\"]\n\t\t\t\t\t: result.items.map((item) => {\n\t\t\t\t\t\t\tconst writer = [\n\t\t\t\t\t\t\t\titem.writer.taskId ? `task=${item.writer.taskId}` : undefined,\n\t\t\t\t\t\t\t\titem.writer.delegateId ? `delegate=${item.writer.delegateId}` : undefined,\n\t\t\t\t\t\t\t\titem.writer.profile ? `profile=${item.writer.profile}` : undefined,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter((value): value is string => Boolean(value))\n\t\t\t\t\t\t\t\t.join(\" \");\n\t\t\t\t\t\t\tconst valuePart =\n\t\t\t\t\t\t\t\titem.value === undefined\n\t\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t\t: ` value=${item.value.length > 80 ? `${item.value.slice(0, 77)}...` : item.value}`;\n\t\t\t\t\t\t\treturn `- ${item.key} v${item.version}${writer ? ` (${writer})` : \"\"}${valuePart}`;\n\t\t\t\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\" as const, text: [header, ...lines].join(\"\\n\") }],\n\t\t\t\tdetails: result,\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"shared-memory.js","sourceRoot":"","sources":["../../../src/core/tools/shared-memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACN,gBAAgB,EAIhB,iBAAiB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QAChB,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,kFAAkF;KAC/F,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,wBAAwB;KACrC,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACvD,WAAW,EAAE,2EAA2E;KACxF,CAAC,CACF;IACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;QACzD,WAAW,EAAE,4DAA4D;KACzE,CAAC,CACF;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,OAAO,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,kFAAkF;KAC/F,CAAC,CACF;CACD,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1C,GAAG,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,MAAM,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,oDAAoD;KACjE,CAAC,CACF;IACD,MAAM,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,MAAM,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,kDAAkD;KAC/D,CAAC,CACF;IACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;QACvD,WAAW,EAAE,2EAA2E;KACxF,CAAC,CACF;IACD,KAAK,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,GAAG;QACZ,WAAW,EAAE,yCAAyC;KACtD,CAAC,CACF;IACD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC5B,IAAI,CAAC,OAAO,CAAC;QACZ,WAAW,EAAE,mEAAmE;KAChF,CAAC,CACF;CACD,CAAC,CAAC;AAKH,SAAS,mCAAmC,CAC3C,IAOC,EACD,mBAA4B;IAE5B,MAAM,IAAI,GAA4B;QACrC,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;KACnB,CAAC;IACF,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC1B,OAAO;YACN,GAAG,IAAI;YACP,WAAW;SACX,CAAC;IACH,CAAC;IACD,OAAO;QACN,GAAG,IAAI;QACP,WAAW;QACX,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK;KACrF,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAA4B;IAClD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,OAA4B;IACpD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;SACtI,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,KAAoC;IAC3D,OAAO,KAAK,IAAI,MAAM,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,IAAuC;IAC7D,OAAO,IAAI,IAAI,KAAK,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAA4B;IACvE,OAAO;QACN,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACV,wGAAwG;QACzG,UAAU,EAAE,uBAAuB;QACnC,OAAO,EAAE,KAAK,EAAE,WAAmB,EAAE,MAAe,EAAE,OAAqB,EAAE,EAAE;YAC9E,MAAM,KAAK,GAAG,MAAgC,CAAC;YAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE;gBAC/C,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;gBAClC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC/B,SAAS,EAAE,KAAK,CAAC,UAAU;aAC3B,EAAE,OAAO,CAAC,CAAC;YACZ,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,0BAA0B,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,OAAO,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;qBAC/G;iBACD;gBACD,OAAO,EAAE;oBACR,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,mCAAmC,CAAC,MAAM,EAAE,KAAK,CAAC;iBACxD;aACD,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAA4B;IACtE,OAAO;QACN,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACV,uFAAuF;QACxF,UAAU,EAAE,sBAAsB;QAClC,OAAO,EAAE,KAAK,EAAE,WAAmB,EAAE,MAAe,EAAE,OAAqB,EAAE,EAAE;YAC9E,MAAM,KAAK,GAAG,MAA+B,CAAC;YAC9C,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE;gBAC9C,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;gBAClC,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,aAAa,EAAE,KAAK,CAAC,cAAc,IAAI,KAAK;aAC5C,EAAE,OAAO,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,iBAAiB,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC9F,MAAM,KAAK,GACV,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBACxB,CAAC,CAAC,CAAC,cAAc,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC1B,MAAM,MAAM,GAAG;wBACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;wBAC7D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;wBACzE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;qBAClE;yBACC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;yBAClD,IAAI,CAAC,GAAG,CAAC,CAAC;oBACZ,MAAM,SAAS,GACd,IAAI,CAAC,KAAK,KAAK,SAAS;wBACvB,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACtF,OAAO,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;gBACpF,CAAC,CAAC,CAAC;YACN,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzE,OAAO,EAAE;oBACR,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC;iBAC3G;aACD,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC","sourcesContent":["import type { AgentTool } from \"@mariozechner/pi-agent-core\";\nimport { type Static, Type } from \"@sinclair/typebox\";\nimport {\n\treadSharedMemory,\n\ttype SharedMemoryContext,\n\ttype SharedMemoryScope,\n\ttype SharedMemoryWriteMode,\n\twriteSharedMemory,\n} from \"../shared-memory.js\";\n\nconst sharedMemoryWriteSchema = Type.Object({\n\tkey: Type.String({\n\t\tminLength: 1,\n\t\tdescription: \"Logical key for shared data within the current run (for example: findings/auth).\",\n\t}),\n\tvalue: Type.String({\n\t\tdescription: \"Text payload to store.\",\n\t}),\n\tscope: Type.Optional(\n\t\tType.Union([Type.Literal(\"run\"), Type.Literal(\"task\")], {\n\t\t\tdescription: \"run = visible to all tasks in run_id; task = isolated to current task_id.\",\n\t\t}),\n\t),\n\tmode: Type.Optional(\n\t\tType.Union([Type.Literal(\"set\"), Type.Literal(\"append\")], {\n\t\t\tdescription: \"set replaces value; append concatenates to existing value.\",\n\t\t}),\n\t),\n\tif_version: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tdescription: \"Optional CAS guard. Write succeeds only when current version matches this value.\",\n\t\t}),\n\t),\n});\n\nconst sharedMemoryReadSchema = Type.Object({\n\tkey: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Exact key to read. Mutually exclusive with prefix.\",\n\t\t}),\n\t),\n\tprefix: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tdescription: \"Prefix filter for keys (for example: findings/).\",\n\t\t}),\n\t),\n\tscope: Type.Optional(\n\t\tType.Union([Type.Literal(\"run\"), Type.Literal(\"task\")], {\n\t\t\tdescription: \"run = visible to all tasks in run_id; task = isolated to current task_id.\",\n\t\t}),\n\t),\n\tlimit: Type.Optional(\n\t\tType.Integer({\n\t\t\tminimum: 1,\n\t\t\tmaximum: 100,\n\t\t\tdescription: \"Maximum entries to return (default 20).\",\n\t\t}),\n\t),\n\tinclude_values: Type.Optional(\n\t\tType.Boolean({\n\t\t\tdescription: \"When false (default), returns only metadata (key/version/writer).\",\n\t\t}),\n\t),\n});\n\nexport type SharedMemoryWriteInput = Static<typeof sharedMemoryWriteSchema>;\nexport type SharedMemoryReadInput = Static<typeof sharedMemoryReadSchema>;\n\nfunction summarizeSharedMemoryItemForDetails(\n\titem: {\n\t\tkey: string;\n\t\tscope: SharedMemoryScope;\n\t\tversion: number;\n\t\tupdatedAt: string;\n\t\twriter: { taskId?: string; delegateId?: string; profile?: string };\n\t\tvalue?: string;\n\t},\n\tincludeValuePreview: boolean,\n): Record<string, unknown> {\n\tconst base: Record<string, unknown> = {\n\t\tkey: item.key,\n\t\tscope: item.scope,\n\t\tversion: item.version,\n\t\tupdatedAt: item.updatedAt,\n\t\twriter: item.writer,\n\t};\n\tif (typeof item.value !== \"string\") return base;\n\tconst valueLength = item.value.length;\n\tif (!includeValuePreview) {\n\t\treturn {\n\t\t\t...base,\n\t\t\tvalueLength,\n\t\t};\n\t}\n\treturn {\n\t\t...base,\n\t\tvalueLength,\n\t\tvaluePreview: item.value.length > 200 ? `${item.value.slice(0, 197)}...` : item.value,\n\t};\n}\n\nfunction ensureContext(context: SharedMemoryContext): SharedMemoryContext {\n\tif (!context.runId || !context.runId.trim()) {\n\t\tthrow new Error(\"shared memory is unavailable: missing run_id context\");\n\t}\n\treturn context;\n}\n\nfunction summarizeWriter(context: SharedMemoryContext): string {\n\tconst parts = [context.taskId ? `task=${context.taskId}` : undefined, context.delegateId ? `delegate=${context.delegateId}` : undefined]\n\t\t.filter((item): item is string => Boolean(item))\n\t\t.join(\" \");\n\treturn parts.length > 0 ? parts : \"root\";\n}\n\nfunction normalizeScope(scope: SharedMemoryScope | undefined): SharedMemoryScope {\n\treturn scope ?? \"task\";\n}\n\nfunction normalizeMode(mode: SharedMemoryWriteMode | undefined): SharedMemoryWriteMode {\n\treturn mode ?? \"set\";\n}\n\nexport function createSharedMemoryWriteTool(context: SharedMemoryContext): AgentTool<typeof sharedMemoryWriteSchema> {\n\treturn {\n\t\tname: \"shared_memory_write\",\n\t\tlabel: \"shared_memory_write\",\n\t\tdescription:\n\t\t\t\"Write intermediate data into run-scoped shared memory so parallel agents/delegates can exchange state.\",\n\t\tparameters: sharedMemoryWriteSchema,\n\t\texecute: async (_toolCallId: string, params: unknown, _signal?: AbortSignal) => {\n\t\t\tconst input = params as SharedMemoryWriteInput;\n\t\t\tconst ensured = ensureContext(context);\n\t\t\tconst result = await writeSharedMemory(ensured, {\n\t\t\t\tkey: input.key,\n\t\t\t\tvalue: input.value,\n\t\t\t\tscope: normalizeScope(input.scope),\n\t\t\t\tmode: normalizeMode(input.mode),\n\t\t\t\tifVersion: input.if_version,\n\t\t\t}, _signal);\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\ttext: `shared memory updated (${result.scope}:${result.key} v${result.version} by ${summarizeWriter(ensured)})`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: {\n\t\t\t\t\trunId: ensured.runId,\n\t\t\t\t\titem: summarizeSharedMemoryItemForDetails(result, false),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport function createSharedMemoryReadTool(context: SharedMemoryContext): AgentTool<typeof sharedMemoryReadSchema> {\n\treturn {\n\t\tname: \"shared_memory_read\",\n\t\tlabel: \"shared_memory_read\",\n\t\tdescription:\n\t\t\t\"Read intermediate data from run-scoped shared memory (task-local or run-global view).\",\n\t\tparameters: sharedMemoryReadSchema,\n\t\texecute: async (_toolCallId: string, params: unknown, _signal?: AbortSignal) => {\n\t\t\tconst input = params as SharedMemoryReadInput;\n\t\t\tif (input.key && input.prefix) {\n\t\t\t\tthrow new Error(\"shared_memory_read accepts either key or prefix, not both\");\n\t\t\t}\n\t\t\tconst ensured = ensureContext(context);\n\t\t\tconst result = await readSharedMemory(ensured, {\n\t\t\t\tscope: normalizeScope(input.scope),\n\t\t\t\tkey: input.key,\n\t\t\t\tprefix: input.prefix,\n\t\t\t\tlimit: input.limit,\n\t\t\t\tincludeValues: input.include_values ?? false,\n\t\t\t}, _signal);\n\t\t\tconst header = `shared memory ${result.scope}: ${result.items.length}/${result.totalMatched}`;\n\t\t\tconst lines =\n\t\t\t\tresult.items.length === 0\n\t\t\t\t\t? [\"(no entries)\"]\n\t\t\t\t\t: result.items.map((item) => {\n\t\t\t\t\t\t\tconst writer = [\n\t\t\t\t\t\t\t\titem.writer.taskId ? `task=${item.writer.taskId}` : undefined,\n\t\t\t\t\t\t\t\titem.writer.delegateId ? `delegate=${item.writer.delegateId}` : undefined,\n\t\t\t\t\t\t\t\titem.writer.profile ? `profile=${item.writer.profile}` : undefined,\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t.filter((value): value is string => Boolean(value))\n\t\t\t\t\t\t\t\t.join(\" \");\n\t\t\t\t\t\t\tconst valuePart =\n\t\t\t\t\t\t\t\titem.value === undefined\n\t\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t\t: ` value=${item.value.length > 80 ? `${item.value.slice(0, 77)}...` : item.value}`;\n\t\t\t\t\t\t\treturn `- ${item.key} v${item.version}${writer ? ` (${writer})` : \"\"}${valuePart}`;\n\t\t\t\t\t\t});\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\" as const, text: [header, ...lines].join(\"\\n\") }],\n\t\t\t\tdetails: {\n\t\t\t\t\trunId: result.runId,\n\t\t\t\t\tscope: result.scope,\n\t\t\t\t\ttotalMatched: result.totalMatched,\n\t\t\t\t\titems: result.items.map((item) => summarizeSharedMemoryItemForDetails(item, input.include_values === true)),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/core/tools/task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/core/tools/task.ts"],"names":[],"mappings":"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"}