opencode-plugin-flow 3.3.1 → 3.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/README.md +7 -6
- package/dist/cli.js +5 -5
- package/dist/index.js +56 -55
- package/dist/index.js.map +15 -12
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/distribution/skill-sync.ts", "../src/config-shared.ts", "../src/distribution/skill-markers.ts", "../src/distribution/update-notice.ts", "../src/adapters/opencode/config.ts", "../src/adapters/opencode/logging.ts", "../src/runtime/workspace-root.ts", "../src/runtime/
|
|
3
|
+
"sources": ["../src/distribution/skill-sync.ts", "../src/config-shared.ts", "../src/distribution/skill-markers.ts", "../src/distribution/update-notice.ts", "../src/adapters/opencode/config.ts", "../src/adapters/opencode/logging.ts", "../src/runtime/workspace-root.ts", "../src/runtime/errors.ts", "../src/runtime/session-history.ts", "../src/runtime/paths.ts", "../src/runtime/session-completed-storage.ts", "../src/runtime/util.ts", "../src/runtime/domain/workflow-policy.ts", "../src/runtime/domain/completion.ts", "../src/runtime/domain/plan-graph-validation.ts", "../src/runtime/domain/plan-projection.ts", "../src/runtime/domain/planning-context.ts", "../src/runtime/constants.ts", "../src/runtime/domain/review-decision.ts", "../src/runtime/domain/semantic-invariants.ts", "../src/runtime/render.ts", "../src/runtime/session-operator-state.ts", "../src/runtime/schema-evidence-packets.ts", "../src/runtime/schema-plan.ts", "../src/runtime/schema-planning-profiles.ts", "../src/runtime/schema-review-shared.ts", "../src/runtime/schema-review-decisions.ts", "../src/runtime/schema-session.ts", "../src/runtime/schema-worker-result.ts", "../src/runtime/schema-worker-result-refinements.ts", "../src/runtime/schema-worker-result-shared.ts", "../src/runtime/session-live-storage.ts", "../src/runtime/session-workspace-io.ts", "../src/runtime/json/strict-object.ts", "../src/runtime/recovery/session-recovery-service.ts", "../src/runtime/session-workspace.ts", "../src/runtime/session-workspace-gitignore.ts", "../src/runtime/session-workspace-locks.ts", "../src/runtime/session-lifecycle.ts", "../src/runtime/session-persistence.ts", "../src/runtime/application/action-engine.ts", "../src/runtime/summary-task-progress.ts", "../src/runtime/summary-projections.ts", "../src/runtime/summary.ts", "../src/runtime/transitions/execution-completion-normalization.ts", "../src/runtime/transitions/recovery.ts", "../src/runtime/transitions/shared.ts", "../src/runtime/transitions/execution-completion-validation.ts", "../src/runtime/transitions/execution-completion-finalization.ts", "../src/runtime/transitions/execution-selection.ts", "../src/runtime/transitions/execution.ts", "../src/runtime/transitions/plan.ts", "../src/runtime/transitions/review.ts", "../src/runtime/application/session-review-decision-normalization.ts", "../src/runtime/application/session-mutation-actions.ts", "../src/runtime/application/session-read-actions.ts", "../src/runtime/application/package-manager.ts", "../src/runtime/application/workspace-boundaries.ts", "../src/runtime/application/session-workspace-actions.ts", "../src/runtime/application/workspace-runtime.ts", "../src/runtime/application/action-dispatch.ts", "../src/runtime/application/doctor-checks.ts", "../src/runtime/application/doctor-report.ts", "../src/runtime/application/operator-presenters.ts", "../src/runtime/feature-doc-drilldown.ts", "../src/runtime/application/session-presenters.ts", "../src/adapters/opencode/system-context.ts", "../src/adapters/opencode/sdk.ts", "../src/adapters/opencode/tool-surface/next-command-policy.ts", "../src/adapters/opencode/tool-surface/parsed-tool.ts", "../src/adapters/opencode/tool-surface/schemas.ts", "../src/adapters/opencode/tool-surface/mutable-workspace-permission.ts", "../src/adapters/opencode/tool-surface/shared.ts", "../src/adapters/opencode/tool-surface/tool-registry.ts", "../src/adapters/opencode/tool-surface/plan-tools.ts", "../src/adapters/opencode/tool-surface/review-tool.ts", "../src/adapters/opencode/tool-surface/run-tools.ts", "../src/adapters/opencode/tool-surface/session-tool.ts", "../src/adapters/opencode/tool-surface/status-tool.ts", "../src/adapters/opencode/tools.ts", "../src/adapters/opencode/plugin.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, sep } from \"node:path\";\nimport flowSkillDoc from \"../../skills/flow/SKILL.md\" with { type: \"text\" };\nimport flowPlanPlanningExamplesDoc from \"../../skills/flow-plan/references/planning-examples.md\" with {\n\ttype: \"text\",\n};\nimport flowPlanSkillDoc from \"../../skills/flow-plan/SKILL.md\" with {\n\ttype: \"text\",\n};\nimport flowReviewReviewRubricDoc from \"../../skills/flow-review/references/review-rubric.md\" with {\n\ttype: \"text\",\n};\nimport flowReviewSkillDoc from \"../../skills/flow-review/SKILL.md\" with {\n\ttype: \"text\",\n};\nimport flowRunAuditRubricDoc from \"../../skills/flow-run/references/audit-rubric.md\" with {\n\ttype: \"text\",\n};\nimport flowRunValidationRubricDoc from \"../../skills/flow-run/references/validation-rubric.md\" with {\n\ttype: \"text\",\n};\nimport flowRunSkillDoc from \"../../skills/flow-run/SKILL.md\" with {\n\ttype: \"text\",\n};\nimport {\n\tFLOW_CORE_AGENTS,\n\tFLOW_CORE_COMMANDS,\n\ttype FlowAgentConfig,\n\ttype FlowCommandConfig,\n\tRETIRED_FLOW_COMMANDS,\n} from \"../config-shared\";\nimport {\n\tFLOW_AGENTS_DIRECTORY,\n\tFLOW_COMMANDS_DIRECTORY,\n\tFLOW_PRE_NPM_PLUGIN_OWNERSHIP_HEADER,\n\tFLOW_PRE_NPM_PLUGIN_RELATIVE_PATH,\n\tFLOW_SKILL_MARKER_FILENAME,\n\tFLOW_SKILLS_DIRECTORY,\n\ttype FlowManagedMarkdownKind,\n\ttype FlowManagedMarkdownMarker,\n\tinspectFlowSkillDocument,\n\tparseFlowManagedMarkdownMarker,\n\tparseFlowSkillFileHashes,\n\tparseFlowSkillFolderMarker,\n\trenderFlowManagedMarkdownMarker,\n\trenderFlowSkillFolderMarker,\n\tsha256,\n} from \"./skill-markers\";\n\nconst SKILL_DOCUMENT_FILENAME = \"SKILL.md\";\n\ntype FlowSkillFile = {\n\t/** Path inside the installed skill folder, `/`-separated. */\n\trelativePath: string;\n\tcontent: string;\n};\n\nexport type FlowSkillDefinition = {\n\tname: string;\n\tfiles: readonly FlowSkillFile[];\n};\n\n/**\n * The hand-authored skills shipped with the plugin. The markdown is embedded\n * at build time via Bun text imports so the bundled dist/index.js remains\n * self-contained. Source of truth: the `skills/` directory in the repo.\n */\nexport const FLOW_SKILL_DEFINITIONS: readonly FlowSkillDefinition[] = [\n\t{\n\t\tname: \"flow\",\n\t\tfiles: [{ relativePath: SKILL_DOCUMENT_FILENAME, content: flowSkillDoc }],\n\t},\n\t{\n\t\tname: \"flow-plan\",\n\t\tfiles: [\n\t\t\t{ relativePath: SKILL_DOCUMENT_FILENAME, content: flowPlanSkillDoc },\n\t\t\t{\n\t\t\t\trelativePath: \"references/planning-examples.md\",\n\t\t\t\tcontent: flowPlanPlanningExamplesDoc,\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"flow-run\",\n\t\tfiles: [\n\t\t\t{ relativePath: SKILL_DOCUMENT_FILENAME, content: flowRunSkillDoc },\n\t\t\t{\n\t\t\t\trelativePath: \"references/audit-rubric.md\",\n\t\t\t\tcontent: flowRunAuditRubricDoc,\n\t\t\t},\n\t\t\t{\n\t\t\t\trelativePath: \"references/validation-rubric.md\",\n\t\t\t\tcontent: flowRunValidationRubricDoc,\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tname: \"flow-review\",\n\t\tfiles: [\n\t\t\t{ relativePath: SKILL_DOCUMENT_FILENAME, content: flowReviewSkillDoc },\n\t\t\t{\n\t\t\t\trelativePath: \"references/review-rubric.md\",\n\t\t\t\tcontent: flowReviewReviewRubricDoc,\n\t\t\t},\n\t\t],\n\t},\n];\n\ntype FlowSkillSyncAction =\n\t| \"installed\"\n\t| \"updated\"\n\t| \"updated_with_backup\"\n\t| \"unchanged\"\n\t| \"skipped_foreign\";\n\ntype FlowSkillSyncResult = {\n\tname: string;\n\taction: FlowSkillSyncAction;\n\tskillPath: string;\n};\n\ntype FlowManagedMarkdownSyncResult = {\n\tname: string;\n\tkind: FlowManagedMarkdownKind;\n\taction: FlowSkillSyncAction | \"removed_retired\";\n\tpath: string;\n};\n\ntype FlowSkillSyncOptions = {\n\thomeDir?: string;\n\tversion: string;\n};\n\ntype FlowSkillSyncStateEntry = {\n\tname: string;\n\tstate: \"synced\" | \"stale\" | \"missing\" | \"foreign\";\n\tskillPath: string;\n};\n\ntype FlowManagedMarkdownSyncStateEntry = {\n\tname: string;\n\tkind: FlowManagedMarkdownKind;\n\tstate: \"synced\" | \"stale\" | \"missing\" | \"foreign\";\n\tpath: string;\n};\n\ntype PreNpmFlowPluginCopy = {\n\tpath: string;\n\tflowOwned: boolean;\n};\n\nexport function resolveFlowHomeDir(): string {\n\treturn process.env.HOME ?? homedir();\n}\n\n/**\n * In the published npm layout, package.json sits one directory above the\n * bundled dist/index.js. Reading it at runtime keeps the version out of the\n * bundle and immune to release-time drift; sandboxes without a version field\n * fall back to a sentinel.\n */\nexport function resolveFlowPluginVersion(): string {\n\ttry {\n\t\tconst require = createRequire(import.meta.url);\n\t\tconst manifest = require(\"../package.json\") as { version?: string };\n\t\treturn manifest.version ?? \"0.0.0\";\n\t} catch {\n\t\treturn \"0.0.0\";\n\t}\n}\n\nfunction resolveFlowSkillsRoot(homeDir: string): string {\n\treturn join(homeDir, FLOW_SKILLS_DIRECTORY);\n}\n\nfunction resolveFlowCommandsRoot(homeDir: string): string {\n\treturn join(homeDir, FLOW_COMMANDS_DIRECTORY);\n}\n\nfunction resolveFlowAgentsRoot(homeDir: string): string {\n\treturn join(homeDir, FLOW_AGENTS_DIRECTORY);\n}\n\nfunction resolveSkillFilePath(folder: string, relativePath: string): string {\n\treturn join(folder, ...relativePath.split(\"/\"));\n}\n\nfunction skillDocument(definition: FlowSkillDefinition): FlowSkillFile {\n\tconst document = definition.files.find(\n\t\t(file) => file.relativePath === SKILL_DOCUMENT_FILENAME,\n\t);\n\tif (!document) {\n\t\tthrow new Error(`Flow skill ${definition.name} is missing SKILL.md`);\n\t}\n\treturn document;\n}\n\nfunction renderDesiredMarker(\n\tdefinition: FlowSkillDefinition,\n\tversion: string,\n): string {\n\treturn renderFlowSkillFolderMarker({\n\t\tversion,\n\t\thash: sha256(skillDocument(definition).content),\n\t\tfiles: definition.files.map((file) => ({\n\t\t\trelativePath: file.relativePath,\n\t\t\thash: sha256(file.content),\n\t\t})),\n\t});\n}\n\n/**\n * Idempotent startup sync of the embedded hand-authored Flow skills into the\n * global OpenCode skill directory. Folder ownership is tracked with a\n * plugin-owned marker file (`.flow-skill-version`); pre-npm hash-locked\n * installs are recognized through their in-document marker and adopted.\n * Folders without either marker belong to the user (or another plugin) and\n * are never touched. A user-edited file in a Flow-owned folder is backed up\n * next to itself (`SKILL.md.backup`, `references/<name>.backup`) before being\n * replaced, never refused or silently lost. Reference files sync alongside\n * SKILL.md.\n */\nexport async function syncFlowSkills({\n\thomeDir = resolveFlowHomeDir(),\n\tversion,\n}: FlowSkillSyncOptions): Promise<FlowSkillSyncResult[]> {\n\tconst results: FlowSkillSyncResult[] = [];\n\tfor (const definition of FLOW_SKILL_DEFINITIONS) {\n\t\tconst folder = join(resolveFlowSkillsRoot(homeDir), definition.name);\n\t\tconst skillPath = join(folder, SKILL_DOCUMENT_FILENAME);\n\t\tconst markerPath = join(folder, FLOW_SKILL_MARKER_FILENAME);\n\t\tconst desiredMarker = renderDesiredMarker(definition, version);\n\n\t\tconst existingSkill = await readOptionalFile(skillPath);\n\t\tconst markerContent = await readOptionalFile(markerPath);\n\t\tconst marker =\n\t\t\tmarkerContent === null ? null : parseFlowSkillFolderMarker(markerContent);\n\t\tconst recordedFileHashes =\n\t\t\tmarkerContent === null\n\t\t\t\t? new Map<string, string>()\n\t\t\t\t: parseFlowSkillFileHashes(markerContent);\n\n\t\tif (existingSkill === null && marker === null) {\n\t\t\tawait writeSkillFiles(folder, definition);\n\t\t\tawait writeFile(markerPath, desiredMarker, \"utf8\");\n\t\t\tresults.push({ name: definition.name, action: \"installed\", skillPath });\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst owned =\n\t\t\tmarker !== null ||\n\t\t\t(existingSkill !== null &&\n\t\t\t\tinspectFlowSkillDocument(existingSkill).kind !== \"not_generated\");\n\t\tif (!owned) {\n\t\t\tresults.push({\n\t\t\t\tname: definition.name,\n\t\t\t\taction: \"skipped_foreign\",\n\t\t\t\tskillPath,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet changed = false;\n\t\tlet backedUp = false;\n\t\tfor (const file of definition.files) {\n\t\t\tconst filePath = resolveSkillFilePath(folder, file.relativePath);\n\t\t\tconst existing =\n\t\t\t\tfile.relativePath === SKILL_DOCUMENT_FILENAME\n\t\t\t\t\t? existingSkill\n\t\t\t\t\t: await readOptionalFile(filePath);\n\t\t\tif (existing === file.content) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tchanged = true;\n\t\t\tif (\n\t\t\t\texisting !== null &&\n\t\t\t\tisUserEdited({\n\t\t\t\t\trelativePath: file.relativePath,\n\t\t\t\t\texisting,\n\t\t\t\t\trecordedFileHashes,\n\t\t\t\t\tmarkerHash: marker?.hash ?? null,\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\tawait writeFile(`${filePath}.backup`, existing, \"utf8\");\n\t\t\t\tbackedUp = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!changed) {\n\t\t\tif (markerContent !== desiredMarker) {\n\t\t\t\tawait writeFile(markerPath, desiredMarker, \"utf8\");\n\t\t\t}\n\t\t\tresults.push({ name: definition.name, action: \"unchanged\", skillPath });\n\t\t\tcontinue;\n\t\t}\n\n\t\tawait writeSkillFiles(folder, definition);\n\t\tawait writeFile(markerPath, desiredMarker, \"utf8\");\n\t\tresults.push({\n\t\t\tname: definition.name,\n\t\t\taction: backedUp ? \"updated_with_backup\" : \"updated\",\n\t\t\tskillPath,\n\t\t});\n\t}\n\treturn results;\n}\n\nexport function renderFlowCommandMarkdown(command: FlowCommandConfig): string {\n\tconst frontmatter = [\n\t\t\"---\",\n\t\t`description: ${JSON.stringify(command.description)}`,\n\t\t...(command.agent ? [`agent: ${JSON.stringify(command.agent)}`] : []),\n\t\t...(command.subtask === undefined ? [] : [`subtask: ${command.subtask}`]),\n\t\t\"---\",\n\t];\n\treturn `${frontmatter.join(\"\\n\")}\\n\\n${command.template}\\n`;\n}\n\nexport function renderFlowAgentMarkdown(agent: FlowAgentConfig): string {\n\tconst frontmatter = [\n\t\t\"---\",\n\t\t`description: ${JSON.stringify(agent.description)}`,\n\t\t`mode: ${agent.mode}`,\n\t\t...(agent.reasoningEffort\n\t\t\t? [`reasoningEffort: ${agent.reasoningEffort}`]\n\t\t\t: []),\n\t\t...(agent.permission ? renderPermissionFrontmatter(agent.permission) : []),\n\t\t\"---\",\n\t];\n\treturn `${frontmatter.join(\"\\n\")}\\n\\n${agent.prompt}\\n`;\n}\n\nexport function flowCommandDefinitions(): Map<string, string> {\n\treturn new Map(\n\t\tObject.entries(FLOW_CORE_COMMANDS).map(([name, command]) => [\n\t\t\tname,\n\t\t\trenderFlowCommandMarkdown(command),\n\t\t]),\n\t);\n}\n\nexport function flowAgentDefinitions(): Map<string, string> {\n\treturn new Map(\n\t\tObject.entries(FLOW_CORE_AGENTS).map(([name, agent]) => [\n\t\t\tname,\n\t\t\trenderFlowAgentMarkdown(agent),\n\t\t]),\n\t);\n}\n\nexport async function syncFlowCommandsAndAgents({\n\thomeDir = resolveFlowHomeDir(),\n\tversion,\n}: FlowSkillSyncOptions): Promise<FlowManagedMarkdownSyncResult[]> {\n\tconst retired = await cleanupRetiredManagedMarkdownFiles({\n\t\tkind: \"command\",\n\t\troot: resolveFlowCommandsRoot(homeDir),\n\t\tnames: RETIRED_FLOW_COMMANDS,\n\t});\n\treturn [\n\t\t...retired.removed.map((path) => ({\n\t\t\tname: retiredNameFromPath(path),\n\t\t\tkind: \"command\" as const,\n\t\t\taction: \"removed_retired\" as const,\n\t\t\tpath,\n\t\t})),\n\t\t...(await syncManagedMarkdownFiles({\n\t\t\thomeDir,\n\t\t\tversion,\n\t\t\tkind: \"command\",\n\t\t\troot: resolveFlowCommandsRoot(homeDir),\n\t\t\tfiles: flowCommandDefinitions(),\n\t\t})),\n\t\t...(await syncManagedMarkdownFiles({\n\t\t\thomeDir,\n\t\t\tversion,\n\t\t\tkind: \"agent\",\n\t\t\troot: resolveFlowAgentsRoot(homeDir),\n\t\t\tfiles: flowAgentDefinitions(),\n\t\t})),\n\t];\n}\n\nfunction retiredNameFromPath(path: string): string {\n\tconst file = path.split(sep).at(-1) ?? path;\n\treturn file.endsWith(\".md\") ? file.slice(0, -\".md\".length) : file;\n}\n\n/**\n * Removes files a previous release synced for since-retired names. Only\n * marker-owned files whose content still matches the recorded hash are\n * deleted; user-edited or foreign files stay untouched.\n */\nexport async function cleanupRetiredManagedMarkdownFiles(input: {\n\tkind: FlowManagedMarkdownKind;\n\troot: string;\n\tnames: readonly string[];\n\tdryRun?: boolean;\n}): Promise<{ removed: string[]; keptUserEdited: string[] }> {\n\tconst removed: string[] = [];\n\tconst keptUserEdited: string[] = [];\n\tfor (const name of input.names) {\n\t\tconst path = join(input.root, `${name}.md`);\n\t\tconst markerPath = join(input.root, `.${name}.flow-version`);\n\t\tconst markerContent = await readOptionalFile(markerPath);\n\t\tconst marker =\n\t\t\tmarkerContent === null\n\t\t\t\t? null\n\t\t\t\t: parseFlowManagedMarkdownMarker(markerContent, input.kind, name);\n\t\tif (marker === null) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst content = await readOptionalFile(path);\n\t\tif (content !== null && sha256(content) !== marker.hash) {\n\t\t\tkeptUserEdited.push(path);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!input.dryRun) {\n\t\t\tawait rm(path, { force: true });\n\t\t\tawait rm(markerPath, { force: true });\n\t\t\tawait rm(`${path}.backup`, { force: true });\n\t\t}\n\t\tremoved.push(path);\n\t}\n\treturn { removed, keptUserEdited };\n}\n\n/**\n * A file is user-edited when its on-disk content matches neither the hash the\n * marker recorded at install time nor (for SKILL.md) a pristine pre-npm\n * generated document. Markers without per-file hashes (pre per-file tracking)\n * fall back to the top-level SKILL.md hash; anything unprovable is treated as\n * user-edited, which costs at most a redundant backup.\n */\nfunction isUserEdited(input: {\n\trelativePath: string;\n\texisting: string;\n\trecordedFileHashes: ReadonlyMap<string, string>;\n\tmarkerHash: string | null;\n}): boolean {\n\tconst existingHash = sha256(input.existing);\n\tconst recorded = input.recordedFileHashes.get(input.relativePath);\n\tif (recorded !== undefined) {\n\t\treturn existingHash !== recorded;\n\t}\n\tif (input.relativePath === SKILL_DOCUMENT_FILENAME) {\n\t\tif (input.markerHash !== null && existingHash === input.markerHash) {\n\t\t\treturn false;\n\t\t}\n\t\treturn inspectFlowSkillDocument(input.existing).kind !== \"valid_generated\";\n\t}\n\treturn true;\n}\n\nasync function writeSkillFiles(\n\tfolder: string,\n\tdefinition: FlowSkillDefinition,\n): Promise<void> {\n\tfor (const file of definition.files) {\n\t\tconst filePath = resolveSkillFilePath(folder, file.relativePath);\n\t\tawait mkdir(dirname(filePath), { recursive: true });\n\t\tawait writeFile(filePath, file.content, \"utf8\");\n\t}\n}\n\nexport async function inspectFlowSkillSyncState(\n\thomeDir = resolveFlowHomeDir(),\n): Promise<FlowSkillSyncStateEntry[]> {\n\tconst entries: FlowSkillSyncStateEntry[] = [];\n\tfor (const definition of FLOW_SKILL_DEFINITIONS) {\n\t\tconst folder = join(resolveFlowSkillsRoot(homeDir), definition.name);\n\t\tconst skillPath = join(folder, SKILL_DOCUMENT_FILENAME);\n\t\tconst existingSkill = await readOptionalFile(skillPath);\n\t\tif (existingSkill === null) {\n\t\t\tentries.push({ name: definition.name, state: \"missing\", skillPath });\n\t\t\tcontinue;\n\t\t}\n\t\tconst markerContent = await readOptionalFile(\n\t\t\tjoin(folder, FLOW_SKILL_MARKER_FILENAME),\n\t\t);\n\t\tconst owned =\n\t\t\t(markerContent !== null &&\n\t\t\t\tparseFlowSkillFolderMarker(markerContent) !== null) ||\n\t\t\tinspectFlowSkillDocument(existingSkill).kind !== \"not_generated\";\n\t\tif (!owned) {\n\t\t\tentries.push({ name: definition.name, state: \"foreign\", skillPath });\n\t\t\tcontinue;\n\t\t}\n\t\tlet synced = true;\n\t\tfor (const file of definition.files) {\n\t\t\tconst existing =\n\t\t\t\tfile.relativePath === SKILL_DOCUMENT_FILENAME\n\t\t\t\t\t? existingSkill\n\t\t\t\t\t: await readOptionalFile(\n\t\t\t\t\t\t\tresolveSkillFilePath(folder, file.relativePath),\n\t\t\t\t\t\t);\n\t\t\tif (existing !== file.content) {\n\t\t\t\tsynced = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tentries.push({\n\t\t\tname: definition.name,\n\t\t\tstate: synced ? \"synced\" : \"stale\",\n\t\t\tskillPath,\n\t\t});\n\t}\n\treturn entries;\n}\n\nexport async function inspectFlowCommandAgentSyncState(\n\thomeDir = resolveFlowHomeDir(),\n): Promise<FlowManagedMarkdownSyncStateEntry[]> {\n\treturn [\n\t\t...(await inspectManagedMarkdownSyncState({\n\t\t\tkind: \"command\",\n\t\t\troot: resolveFlowCommandsRoot(homeDir),\n\t\t\tfiles: flowCommandDefinitions(),\n\t\t})),\n\t\t...(await inspectManagedMarkdownSyncState({\n\t\t\tkind: \"agent\",\n\t\t\troot: resolveFlowAgentsRoot(homeDir),\n\t\t\tfiles: flowAgentDefinitions(),\n\t\t})),\n\t];\n}\n\nexport async function detectPreNpmFlowPlugin(\n\thomeDir = resolveFlowHomeDir(),\n): Promise<PreNpmFlowPluginCopy | null> {\n\tconst path = join(homeDir, FLOW_PRE_NPM_PLUGIN_RELATIVE_PATH);\n\tconst content = await readOptionalFile(path);\n\tif (content === null) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tpath,\n\t\tflowOwned: content.startsWith(FLOW_PRE_NPM_PLUGIN_OWNERSHIP_HEADER),\n\t};\n}\n\ntype FlowStartupLogger = (level: \"info\" | \"warn\", message: string) => void;\n\n/**\n * Best-effort startup hook: sync skills and surface the pre-npm-copy warning\n * without ever failing plugin initialization.\n */\nexport async function runFlowStartupSync(\n\tversion: string,\n\tlog: FlowStartupLogger,\n): Promise<void> {\n\ttry {\n\t\tconst results = await syncFlowSkills({ version });\n\t\tconst changed = results.filter(\n\t\t\t(result) =>\n\t\t\t\tresult.action !== \"unchanged\" && result.action !== \"skipped_foreign\",\n\t\t);\n\t\tif (changed.length > 0) {\n\t\t\tlog(\n\t\t\t\t\"info\",\n\t\t\t\t`Flow synced global skills (${changed\n\t\t\t\t\t.map((result) => `${result.name}: ${result.action}`)\n\t\t\t\t\t.join(\", \")}). Restart OpenCode once if skills were just installed.`,\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\tlog(\"warn\", `Flow skill sync failed: ${describeError(error)}`);\n\t}\n\n\ttry {\n\t\tconst results = await syncFlowCommandsAndAgents({ version });\n\t\tconst changed = results.filter(\n\t\t\t(result) =>\n\t\t\t\tresult.action !== \"unchanged\" && result.action !== \"skipped_foreign\",\n\t\t);\n\t\tif (changed.length > 0) {\n\t\t\tlog(\n\t\t\t\t\"info\",\n\t\t\t\t`Flow synced global commands/agents (${changed\n\t\t\t\t\t.map((result) => `${result.name}: ${result.action}`)\n\t\t\t\t\t.join(\n\t\t\t\t\t\t\", \",\n\t\t\t\t\t)}). Restart OpenCode once if commands were just installed.`,\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\tlog(\"warn\", `Flow command/agent sync failed: ${describeError(error)}`);\n\t}\n\n\ttry {\n\t\tconst preNpmCopy = await detectPreNpmFlowPlugin();\n\t\tif (preNpmCopy) {\n\t\t\tlog(\n\t\t\t\t\"warn\",\n\t\t\t\t`Stale pre-npm Flow plugin copy detected at ${preNpmCopy.path}. Flow now loads from npm via the opencode.json plugin array; remove the stale copy to avoid loading Flow twice (run \\`bunx opencode-plugin-flow uninstall\\`${preNpmCopy.flowOwned ? \"\" : \" or delete the file manually\"}).`,\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\tlog(\"warn\", `Flow pre-npm install check failed: ${describeError(error)}`);\n\t}\n}\n\nasync function readOptionalFile(path: string): Promise<string | null> {\n\ttry {\n\t\treturn await readFile(path, \"utf8\");\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn null;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction describeError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction renderPermissionFrontmatter(\n\tpermission: FlowAgentConfig[\"permission\"],\n) {\n\tif (!permission) {\n\t\treturn [];\n\t}\n\tconst lines = [\"permission:\"];\n\tfor (const [key, value] of Object.entries(permission)) {\n\t\tif (typeof value === \"string\") {\n\t\t\tlines.push(` ${JSON.stringify(key)}: ${JSON.stringify(value)}`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (value && typeof value === \"object\") {\n\t\t\tlines.push(` ${JSON.stringify(key)}:`);\n\t\t\tfor (const [nestedKey, nestedValue] of Object.entries(value)) {\n\t\t\t\tlines.push(\n\t\t\t\t\t` ${JSON.stringify(nestedKey)}: ${JSON.stringify(nestedValue)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\treturn lines;\n}\n\ntype SyncManagedMarkdownFilesInput = {\n\thomeDir: string;\n\tversion: string;\n\tkind: FlowManagedMarkdownKind;\n\troot: string;\n\tfiles: ReadonlyMap<string, string>;\n};\n\nasync function syncManagedMarkdownFiles({\n\tversion,\n\tkind,\n\troot,\n\tfiles,\n}: SyncManagedMarkdownFilesInput): Promise<FlowManagedMarkdownSyncResult[]> {\n\tconst results: FlowManagedMarkdownSyncResult[] = [];\n\tfor (const [name, content] of files) {\n\t\tconst path = join(root, `${name}.md`);\n\t\tconst markerPath = join(root, `.${name}.flow-version`);\n\t\tconst marker = await readManagedMarkdownMarker(markerPath, kind, name);\n\t\tconst existing = await readOptionalFile(path);\n\t\tconst desiredMarker = renderFlowManagedMarkdownMarker({\n\t\t\tkind,\n\t\t\tname,\n\t\t\tversion,\n\t\t\thash: sha256(content),\n\t\t});\n\n\t\tif (existing === null && marker === null) {\n\t\t\tawait mkdir(root, { recursive: true });\n\t\t\tawait writeFile(path, content, \"utf8\");\n\t\t\tawait writeFile(markerPath, desiredMarker, \"utf8\");\n\t\t\tresults.push({ name, kind, action: \"installed\", path });\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst owned = marker !== null || existing === content;\n\t\tif (!owned) {\n\t\t\tresults.push({ name, kind, action: \"skipped_foreign\", path });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (existing === content) {\n\t\t\tif ((await readOptionalFile(markerPath)) !== desiredMarker) {\n\t\t\t\tawait mkdir(root, { recursive: true });\n\t\t\t\tawait writeFile(markerPath, desiredMarker, \"utf8\");\n\t\t\t}\n\t\t\tresults.push({ name, kind, action: \"unchanged\", path });\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet backedUp = false;\n\t\tif (\n\t\t\texisting !== null &&\n\t\t\tmarker !== null &&\n\t\t\tsha256(existing) !== marker.hash\n\t\t) {\n\t\t\tawait writeFile(`${path}.backup`, existing, \"utf8\");\n\t\t\tbackedUp = true;\n\t\t}\n\t\tawait mkdir(root, { recursive: true });\n\t\tawait writeFile(path, content, \"utf8\");\n\t\tawait writeFile(markerPath, desiredMarker, \"utf8\");\n\t\tresults.push({\n\t\t\tname,\n\t\t\tkind,\n\t\t\taction: backedUp ? \"updated_with_backup\" : \"updated\",\n\t\t\tpath,\n\t\t});\n\t}\n\treturn results;\n}\n\nasync function inspectManagedMarkdownSyncState(input: {\n\tkind: FlowManagedMarkdownKind;\n\troot: string;\n\tfiles: ReadonlyMap<string, string>;\n}): Promise<FlowManagedMarkdownSyncStateEntry[]> {\n\tconst entries: FlowManagedMarkdownSyncStateEntry[] = [];\n\tfor (const [name, content] of input.files) {\n\t\tconst path = join(input.root, `${name}.md`);\n\t\tconst markerPath = join(input.root, `.${name}.flow-version`);\n\t\tconst existing = await readOptionalFile(path);\n\t\tconst marker = await readManagedMarkdownMarker(\n\t\t\tmarkerPath,\n\t\t\tinput.kind,\n\t\t\tname,\n\t\t);\n\t\tif (existing === null) {\n\t\t\tentries.push({ name, kind: input.kind, state: \"missing\", path });\n\t\t\tcontinue;\n\t\t}\n\t\tif (marker === null && existing !== content) {\n\t\t\tentries.push({ name, kind: input.kind, state: \"foreign\", path });\n\t\t\tcontinue;\n\t\t}\n\t\tentries.push({\n\t\t\tname,\n\t\t\tkind: input.kind,\n\t\t\tstate: existing === content ? \"synced\" : \"stale\",\n\t\t\tpath,\n\t\t});\n\t}\n\treturn entries;\n}\n\nasync function readManagedMarkdownMarker(\n\tpath: string,\n\tkind: FlowManagedMarkdownKind,\n\tname: string,\n): Promise<FlowManagedMarkdownMarker | null> {\n\tconst content = await readOptionalFile(path);\n\treturn content === null\n\t\t? null\n\t\t: parseFlowManagedMarkdownMarker(content, kind, name);\n}\n",
|
|
6
6
|
"export type FlowReasoningEffort = \"low\" | \"medium\" | \"high\";\n\nexport type FlowPermissionConfig = {\n\tedit?: string;\n\tbash?: string;\n\texternal_directory?: string;\n\ttask?: Record<string, string>;\n} & {\n\t// OpenCode per-agent permissions accept glob patterns against tool names\n\t// (e.g. \"flow_*\": \"deny\"), which platform-enforces read-only subagents.\n\t[toolPattern: string]: string | Record<string, string> | undefined;\n};\n\nexport type FlowAgentConfig = {\n\tmode: \"primary\" | \"all\";\n\tdescription: string;\n\tprompt: string;\n\tpermission?: FlowPermissionConfig;\n\treasoningEffort?: FlowReasoningEffort;\n};\n\nexport type FlowCommandConfig = {\n\tdescription: string;\n\ttemplate: string;\n\tagent?: string;\n\tsubtask?: boolean;\n};\n\nexport const FLOW_REASONING = {\n\tfast: \"low\",\n\tbalanced: \"medium\",\n\tdeep: \"high\",\n} as const satisfies Record<string, FlowReasoningEffort>;\n\nexport const FLOW_CORE_AGENTS = {\n\t\"flow-reviewer\": {\n\t\tmode: \"all\",\n\t\tdescription: \"Review Flow work read-only and record a reviewer decision.\",\n\t\tprompt:\n\t\t\t\"You are the Flow reviewer. Load the `flow-review` skill, review the requested work read-only, then record your decision with flow_review_record.\",\n\t\treasoningEffort: FLOW_REASONING.deep,\n\t\t// Read-only is platform-enforced: no edits, no shell, no subagents, and\n\t\t// no Flow tools except status reads and recording the review decision.\n\t\tpermission: {\n\t\t\tedit: \"deny\",\n\t\t\tbash: \"deny\",\n\t\t\ttask: { \"*\": \"deny\" },\n\t\t\t\"flow_*\": \"deny\",\n\t\t\tflow_status: \"allow\",\n\t\t\tflow_review_record: \"allow\",\n\t\t},\n\t},\n} satisfies Record<string, FlowAgentConfig>;\n\nexport const FLOW_CORE_COMMANDS = {\n\t\"flow-plan\": {\n\t\tdescription: \"Create, update, or approve a Flow plan\",\n\t\ttemplate: \"Load the `flow-plan` skill and plan: $ARGUMENTS\",\n\t},\n\t\"flow-run\": {\n\t\tdescription: \"Run one approved Flow feature\",\n\t\ttemplate:\n\t\t\t\"Load the `flow-run` skill and execute the next approved Flow feature. $ARGUMENTS\",\n\t},\n\t\"flow-auto\": {\n\t\tdescription:\n\t\t\t\"Drive the Flow loop autonomously until completion or a real blocker\",\n\t\ttemplate:\n\t\t\t\"Load the `flow` skill and drive the Flow loop (status, plan, run, review) until completion or a real blocker: $ARGUMENTS\",\n\t},\n\t\"flow-status\": {\n\t\tdescription: \"Inspect the active Flow session and workspace readiness\",\n\t\ttemplate:\n\t\t\t\"Call flow_status (detailed) and report session state, readiness checks, and the suggested next step.\",\n\t},\n\t\"flow-review\": {\n\t\tdescription: \"Run a read-only Flow review with a fresh context\",\n\t\tagent: \"flow-reviewer\",\n\t\tsubtask: true,\n\t\ttemplate: \"Load the `flow-review` skill and review: $ARGUMENTS\",\n\t},\n} satisfies Record<string, FlowCommandConfig>;\n\n// Commands retired in v3.1: each was either a duplicate of /flow-status or a\n// thin wrapper over a single tool call the skills already teach (flow_session\n// history/activate/close/show, flow_feature_complete reset). Startup sync and\n// uninstall remove the Flow-owned files earlier releases synced for them.\nexport const RETIRED_FLOW_COMMANDS = [\n\t\"flow-doctor\",\n\t\"flow-history\",\n\t\"flow-reset\",\n\t\"flow-session\",\n] as const;\n",
|
|
@@ -9,19 +9,19 @@
|
|
|
9
9
|
"import {\n\tFLOW_CORE_AGENTS,\n\tFLOW_CORE_COMMANDS,\n\ttype FlowAgentConfig,\n} from \"../../config-shared\";\n\ntype MutableConfig = {\n\tagent?: Record<string, unknown>;\n\tcommand?: Record<string, unknown>;\n};\n\nfunction cloneAgentConfig(agent: FlowAgentConfig) {\n\treturn {\n\t\t...agent,\n\t\t...(agent.permission\n\t\t\t? {\n\t\t\t\t\tpermission: {\n\t\t\t\t\t\t...agent.permission,\n\t\t\t\t\t\t...(agent.permission.task\n\t\t\t\t\t\t\t? { task: { ...agent.permission.task } }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n}\n\nexport function createFlowCoreConfigEntries() {\n\tconst agent = Object.fromEntries(\n\t\tObject.entries(FLOW_CORE_AGENTS).map(([name, item]) => [\n\t\t\tname,\n\t\t\tcloneAgentConfig(item),\n\t\t]),\n\t);\n\tconst command = Object.fromEntries(\n\t\tObject.entries(FLOW_CORE_COMMANDS).map(([name, item]) => [\n\t\t\tname,\n\t\t\t{ ...item },\n\t\t]),\n\t);\n\treturn { agent, command };\n}\n\nexport function applyFlowConfig(config: MutableConfig): void {\n\tconst entries = createFlowCoreConfigEntries();\n\tconfig.agent = {\n\t\t...(config.agent ?? {}),\n\t\t...entries.agent,\n\t};\n\tconfig.command = {\n\t\t...(config.command ?? {}),\n\t\t...entries.command,\n\t};\n}\n\nexport function createConfigHook(_ctx: unknown) {\n\treturn async (config: MutableConfig) => {\n\t\tapplyFlowConfig(config);\n\t};\n}\n",
|
|
10
10
|
"export type FlowLogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\ntype PluginLogContext = {\n\tclient?: {\n\t\tapp?: {\n\t\t\tlog(options: {\n\t\t\t\tbody: { service: string; level: FlowLogLevel; message: string };\n\t\t\t}): unknown;\n\t\t};\n\t};\n};\n\n// The SDK's app.log is a class method that reads this._client, so it must be\n// called through the app object. The entry also travels as options.body.\n// Logging stays best-effort: it must never break plugin initialization.\nexport function createFlowLog(\n\tctx: unknown,\n): (level: FlowLogLevel, message: string) => void {\n\tconst app = (ctx as PluginLogContext).client?.app;\n\tif (!app) {\n\t\treturn () => {};\n\t}\n\treturn (level, message) => {\n\t\ttry {\n\t\t\tvoid Promise.resolve(\n\t\t\t\tapp.log({\n\t\t\t\t\tbody: { service: \"opencode-plugin-flow\", level, message },\n\t\t\t\t}),\n\t\t\t).catch(() => {});\n\t\t} catch {\n\t\t\t// Host log transport failures must not break Flow.\n\t\t}\n\t};\n}\n",
|
|
11
11
|
"import { homedir } from \"node:os\";\nimport { delimiter, isAbsolute, parse, relative, resolve } from \"node:path\";\n\ndeclare const mutableWorkspaceRootBrand: unique symbol;\n\nexport type MutableWorkspaceRoot = string & {\n\treadonly [mutableWorkspaceRootBrand]: \"MutableWorkspaceRoot\";\n};\n\ntype MutableWorkspaceRootDetails = {\n\troot: string | null;\n\ttrusted: boolean;\n\trejectionReason: string | null;\n\tsource?: string | null;\n\tmutationAllowed?: boolean;\n\tusedFallback?: boolean;\n};\n\nconst TRUSTED_WORKSPACE_ROOTS_ENV = \"FLOW_TRUSTED_WORKSPACE_ROOTS\";\n\nexport class InvalidFlowWorkspaceRootError extends Error {\n\treadonly code = \"INVALID_FLOW_WORKSPACE_ROOT\";\n\treadonly summary: string;\n\treadonly remediation: string | null;\n\treadonly details: MutableWorkspaceRootDetails;\n\n\tconstructor({\n\t\tsummary,\n\t\tremediation,\n\t\tdetails,\n\t}: {\n\t\tsummary: string;\n\t\tremediation?: string | null;\n\t\tdetails: MutableWorkspaceRootDetails;\n\t}) {\n\t\tsuper(summary);\n\t\tthis.name = \"InvalidFlowWorkspaceRootError\";\n\t\tthis.summary = summary;\n\t\tthis.remediation = remediation ?? null;\n\t\tthis.details = details;\n\t}\n}\n\nexport function normalizeWorkspaceRoot(\n\trawPath: string | undefined,\n): string | null {\n\tconst path = rawPath?.trim();\n\tif (!path) {\n\t\treturn null;\n\t}\n\n\tconst normalized = resolve(path);\n\tif (parse(normalized).root === normalized) {\n\t\treturn null;\n\t}\n\n\treturn normalized;\n}\n\nfunction getTrustedWorkspaceRoots(): Set<string> {\n\tconst configured = process.env[TRUSTED_WORKSPACE_ROOTS_ENV]?.trim();\n\tif (!configured) {\n\t\treturn new Set();\n\t}\n\n\tconst trusted = new Set<string>();\n\tfor (const entry of configured.split(delimiter)) {\n\t\tconst next = entry.trim();\n\t\tif (!next || !isAbsolute(next)) {\n\t\t\tcontinue;\n\t\t}\n\t\ttrusted.add(resolve(next));\n\t}\n\n\treturn trusted;\n}\n\nfunction suspiciousWorkspaceReason(root: string): string | null {\n\tconst normalizedHome = resolve(process.env.HOME ?? homedir());\n\tif (root === normalizedHome) {\n\t\treturn \"Flow blocks using your home directory itself as a mutable workspace root.\";\n\t}\n\n\tconst rel = relative(normalizedHome, root);\n\tif (\n\t\trel === \"\" ||\n\t\trel === \"..\" ||\n\t\trel.startsWith(`..${\"/\"}`) ||\n\t\trel.startsWith(`..${\"\\\\\"}`) ||\n\t\tparse(rel).root === rel\n\t) {\n\t\treturn null;\n\t}\n\n\treturn null;\n}\n\nexport function inspectMutableWorkspaceRoot(\n\trawPath: string | undefined,\n): MutableWorkspaceRootDetails {\n\tconst root = normalizeWorkspaceRoot(rawPath);\n\tif (!root) {\n\t\treturn {\n\t\t\troot: null,\n\t\t\ttrusted: false,\n\t\t\trejectionReason:\n\t\t\t\t\"Flow requires a non-root workspace path for mutable session operations.\",\n\t\t};\n\t}\n\n\tconst trusted = getTrustedWorkspaceRoots().has(root);\n\treturn {\n\t\troot,\n\t\ttrusted,\n\t\trejectionReason: suspiciousWorkspaceReason(root),\n\t};\n}\n\nexport function assertMutableWorkspaceRoot(\n\trawPath: string,\n): MutableWorkspaceRoot {\n\tconst details = inspectMutableWorkspaceRoot(rawPath);\n\tif (details.root && !details.rejectionReason) {\n\t\treturn details.root as MutableWorkspaceRoot;\n\t}\n\n\tconst rootLabel = details.root\n\t\t? `'${details.root}'`\n\t\t: \"from the provided path\";\n\tthrow new InvalidFlowWorkspaceRootError({\n\t\tsummary: `Flow blocked mutable workspace root ${rootLabel}: ${details.rejectionReason ?? \"missing or root-like path.\"}`,\n\t\tremediation: details.root\n\t\t\t? \"Choose a project/worktree subdirectory instead of using $HOME directly so Flow can manage .flow state there.\"\n\t\t\t: \"Provide a non-root project/worktree directory so Flow can manage .flow state there.\",\n\t\tdetails,\n\t});\n}\n",
|
|
12
|
-
"
|
|
12
|
+
"import type { RuntimeToolResponse } from \"./application\";\n\nexport function errorResponse(\n\tsummary: string,\n\textra?: RuntimeToolResponse,\n): RuntimeToolResponse {\n\treturn {\n\t\tstatus: \"error\",\n\t\tsummary,\n\t\t...(extra ?? {}),\n\t};\n}\n",
|
|
13
|
+
"import { readdir } from \"node:fs/promises\";\nimport { relative } from \"node:path\";\nimport {\n\tgetActiveSessionDir,\n\tgetCompletedSessionDir,\n\tgetCompletedSessionPath,\n\tgetCompletedSessionsDir,\n\tgetSessionPath,\n\tgetStoredSessionDir,\n\tgetStoredSessionsDir,\n} from \"./paths\";\nimport {\n\tcompareCompletedDescending,\n\tfindNewestCompletedSession,\n\tparseCompletedDirectoryName,\n} from \"./recovery\";\nimport type { Session } from \"./schema\";\nimport { readActiveSessionId } from \"./session-workspace\";\nimport { readSessionFromPath } from \"./session-workspace-io\";\n\nexport type SessionHistoryEntry = {\n\tid: string;\n\tgoal: string | null;\n\tstatus: string;\n\tclosureKind: Session[\"closure\"] extends infer Closure\n\t\t? Closure extends { kind: infer Kind }\n\t\t\t? Kind | null\n\t\t\t: null\n\t\t: null;\n\tclosureSummary: string | null;\n\tapproval: string | null;\n\tcreatedAt: string | null;\n\tupdatedAt: string | null;\n\tcompletedAt: string | null;\n\tactive: boolean;\n\tpath: string;\n\tlatestFailedAttempt: Session[\"execution\"][\"lastFailedMutation\"] | null;\n\terror?: string;\n};\n\nexport type CompletedSessionHistoryEntry = SessionHistoryEntry & {\n\tcompletedPath: string;\n\tcompletedAt: string | null;\n};\n\nexport type StoredSessionLookup = {\n\tsession: Session;\n\tsource: \"active\" | \"stored\" | \"completed\";\n\tactive: boolean;\n\tpath: string;\n\tcompletedPath?: string;\n\tcompletedAt?: string | null;\n};\n\nfunction compareIsoDescending(\n\tleft: string | null,\n\tright: string | null,\n): number {\n\treturn (right ?? \"\").localeCompare(left ?? \"\");\n}\n\nfunction toHistoryEntry(\n\tworktree: string,\n\tsession: Session,\n\tpath: string,\n\tactiveSessionId: string | null,\n): SessionHistoryEntry {\n\treturn {\n\t\tid: session.id,\n\t\tgoal: session.goal,\n\t\tstatus: session.status,\n\t\tclosureKind: session.closure?.kind ?? null,\n\t\tclosureSummary: session.closure?.summary ?? null,\n\t\tapproval: session.approval,\n\t\tcreatedAt: session.timestamps.createdAt,\n\t\tupdatedAt: session.timestamps.updatedAt,\n\t\tcompletedAt: session.timestamps.completedAt,\n\t\tactive: session.id === activeSessionId,\n\t\tpath: relative(worktree, path),\n\t\tlatestFailedAttempt: session.execution.lastFailedMutation ?? null,\n\t};\n}\n\nfunction toInvalidHistoryEntry(\n\tworktree: string,\n\tid: string,\n\tpath: string,\n\terror: unknown,\n\tactiveSessionId: string | null,\n): SessionHistoryEntry {\n\treturn {\n\t\tid,\n\t\tgoal: null,\n\t\tstatus: \"invalid\",\n\t\tclosureKind: null,\n\t\tclosureSummary: null,\n\t\tapproval: null,\n\t\tcreatedAt: null,\n\t\tupdatedAt: null,\n\t\tcompletedAt: null,\n\t\tactive: id === activeSessionId,\n\t\tpath: relative(worktree, path),\n\t\tlatestFailedAttempt: null,\n\t\terror: error instanceof Error ? error.message : String(error),\n\t};\n}\n\nasync function readDirectoryEntries(\n\troot: string,\n): Promise<Array<{ isDirectory(): boolean; name: string }>> {\n\ttry {\n\t\treturn await readdir(root, { withFileTypes: true });\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn [];\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nexport async function loadStoredSession(\n\tworktree: string,\n\tsessionId: string,\n): Promise<StoredSessionLookup | null> {\n\tconst activeSessionId = await readActiveSessionId(worktree);\n\tlet activeReadError: unknown;\n\tif (activeSessionId === sessionId) {\n\t\ttry {\n\t\t\tconst session = await readSessionFromPath(\n\t\t\t\tgetSessionPath(worktree, sessionId, \"active\"),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tsession,\n\t\t\t\tsource: \"active\",\n\t\t\t\tactive: true,\n\t\t\t\tpath: relative(worktree, getActiveSessionDir(worktree, sessionId)),\n\t\t\t};\n\t\t} catch (error) {\n\t\t\t// A stale active pointer or corrupt active session should not hide a\n\t\t\t// recoverable stored/completed copy with the same id.\n\t\t\tactiveReadError = error;\n\t\t}\n\t}\n\n\ttry {\n\t\tconst session = await readSessionFromPath(\n\t\t\tgetSessionPath(worktree, sessionId, \"stored\"),\n\t\t);\n\t\treturn {\n\t\t\tsession,\n\t\t\tsource: \"stored\",\n\t\t\tactive: false,\n\t\t\tpath: relative(worktree, getStoredSessionDir(worktree, sessionId)),\n\t\t};\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst completed = await findNewestCompletedSession(worktree, sessionId);\n\tif (!completed) {\n\t\tif (activeReadError) {\n\t\t\tthrow activeReadError;\n\t\t}\n\t\treturn null;\n\t}\n\n\tconst session = await readSessionFromPath(\n\t\tgetCompletedSessionPath(worktree, completed.completedDirName),\n\t);\n\treturn {\n\t\tsession,\n\t\tsource: \"completed\",\n\t\tactive: false,\n\t\tpath: completed.completedTo,\n\t\tcompletedPath: completed.completedTo,\n\t\tcompletedAt: completed.completedAt,\n\t};\n}\n\nexport async function listSessionHistory(worktree: string): Promise<{\n\tactiveSessionId: string | null;\n\tactive: SessionHistoryEntry | null;\n\tstored: SessionHistoryEntry[];\n\tcompleted: CompletedSessionHistoryEntry[];\n}> {\n\tconst activeSessionId = await readActiveSessionId(worktree);\n\tlet active: SessionHistoryEntry | null = null;\n\tif (activeSessionId) {\n\t\ttry {\n\t\t\tconst session = await readSessionFromPath(\n\t\t\t\tgetSessionPath(worktree, activeSessionId, \"active\"),\n\t\t\t);\n\t\t\tactive = toHistoryEntry(\n\t\t\t\tworktree,\n\t\t\t\tsession,\n\t\t\t\tgetActiveSessionDir(worktree, activeSessionId),\n\t\t\t\tactiveSessionId,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tactive = toInvalidHistoryEntry(\n\t\t\t\tworktree,\n\t\t\t\tactiveSessionId,\n\t\t\t\tgetActiveSessionDir(worktree, activeSessionId),\n\t\t\t\terror,\n\t\t\t\tactiveSessionId,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst storedRoot = getStoredSessionsDir(worktree);\n\tconst completedRoot = getCompletedSessionsDir(worktree);\n\n\tconst stored: SessionHistoryEntry[] = [];\n\tfor (const entry of await readDirectoryEntries(storedRoot)) {\n\t\tif (!entry.isDirectory()) continue;\n\t\tconst sessionId = entry.name;\n\t\ttry {\n\t\t\tconst session = await readSessionFromPath(\n\t\t\t\tgetSessionPath(worktree, sessionId, \"stored\"),\n\t\t\t);\n\t\t\tstored.push(\n\t\t\t\ttoHistoryEntry(\n\t\t\t\t\tworktree,\n\t\t\t\t\tsession,\n\t\t\t\t\tgetStoredSessionDir(worktree, sessionId),\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tstored.push(\n\t\t\t\ttoInvalidHistoryEntry(\n\t\t\t\t\tworktree,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tgetStoredSessionDir(worktree, sessionId),\n\t\t\t\t\terror,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\tstored.sort((left, right) =>\n\t\tcompareIsoDescending(left.updatedAt, right.updatedAt),\n\t);\n\n\tconst completed: CompletedSessionHistoryEntry[] = [];\n\tfor (const entry of await readDirectoryEntries(completedRoot)) {\n\t\tif (!entry.isDirectory()) continue;\n\t\tconst completedDir = getCompletedSessionDir(worktree, entry.name);\n\t\tconst parsed = parseCompletedDirectoryName(entry.name);\n\t\ttry {\n\t\t\tconst session = await readSessionFromPath(\n\t\t\t\tgetCompletedSessionPath(worktree, entry.name),\n\t\t\t);\n\t\t\tcompleted.push({\n\t\t\t\t...toHistoryEntry(worktree, session, completedDir, null),\n\t\t\t\tcompletedPath: relative(worktree, completedDir),\n\t\t\t\tcompletedAt: parsed.completedAt,\n\t\t\t\tactive: false,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tcompleted.push({\n\t\t\t\t...toInvalidHistoryEntry(\n\t\t\t\t\tworktree,\n\t\t\t\t\tparsed.sessionId,\n\t\t\t\t\tcompletedDir,\n\t\t\t\t\terror,\n\t\t\t\t\tnull,\n\t\t\t\t),\n\t\t\t\tcompletedPath: relative(worktree, completedDir),\n\t\t\t\tcompletedAt: parsed.completedAt,\n\t\t\t\tactive: false,\n\t\t\t});\n\t\t}\n\t}\n\tcompleted.sort((left, right) =>\n\t\tcompareCompletedDescending(\n\t\t\tleft.completedAt ?? left.updatedAt,\n\t\t\tright.completedAt ?? right.updatedAt,\n\t\t),\n\t);\n\n\treturn { activeSessionId, active, stored, completed };\n}\n",
|
|
14
|
+
"import { join, relative } from \"node:path\";\n\nexport class InvalidFlowPathInputError extends Error {\n\treadonly code = \"INVALID_FLOW_PATH_INPUT\";\n\n\tconstructor(\n\t\tkind:\n\t\t\t| \"session\"\n\t\t\t| \"feature\"\n\t\t\t| \"completed\"\n\t\t\t| \"audit\"\n\t\t\t| \"event\"\n\t\t\t| \"checkpoint\"\n\t\t\t| \"projection\"\n\t\t\t| \"lock\",\n\t\tvalue: string,\n\t) {\n\t\tsuper(`Invalid ${kind} id '${value}'.`);\n\t\tthis.name = \"InvalidFlowPathInputError\";\n\t}\n}\n\nexport type LiveSessionLocation = \"active\" | \"stored\";\n\nfunction sanitizePathComponent(\n\tkind:\n\t\t| \"session\"\n\t\t| \"feature\"\n\t\t| \"completed\"\n\t\t| \"audit\"\n\t\t| \"event\"\n\t\t| \"checkpoint\"\n\t\t| \"projection\"\n\t\t| \"lock\",\n\tvalue: string,\n): string {\n\tif (\n\t\tvalue.length === 0 ||\n\t\tvalue === \".\" ||\n\t\tvalue === \"..\" ||\n\t\tvalue.includes(\"..\") ||\n\t\tvalue.startsWith(\"/\") ||\n\t\tvalue.includes(\"/\") ||\n\t\tvalue.includes(\"\\\\\") ||\n\t\tvalue.split(/[/\\\\]+/).includes(\"..\")\n\t) {\n\t\tthrow new InvalidFlowPathInputError(kind, value);\n\t}\n\n\treturn value;\n}\n\nexport function assertDescendant(base: string, target: string): string {\n\tconst rel = relative(base, target);\n\tif (\n\t\trel === \"..\" ||\n\t\trel.startsWith(`..${\"/\"}`) ||\n\t\trel.startsWith(`..${\"\\\\\"}`)\n\t) {\n\t\tthrow new InvalidFlowPathInputError(\"session\", target);\n\t}\n\n\treturn target;\n}\n\nexport function getFlowDir(worktree: string): string {\n\treturn join(worktree, \".flow\");\n}\n\nexport function getActiveSessionsDir(worktree: string): string {\n\treturn join(getFlowDir(worktree), \"active\");\n}\n\nexport function getStoredSessionsDir(worktree: string): string {\n\treturn join(getFlowDir(worktree), \"stored\");\n}\n\nexport function getCompletedSessionsDir(worktree: string): string {\n\treturn join(getFlowDir(worktree), \"completed\");\n}\n\nfunction getLiveSessionsDir(\n\tworktree: string,\n\tlocation: LiveSessionLocation,\n): string {\n\treturn location === \"active\"\n\t\t? getActiveSessionsDir(worktree)\n\t\t: getStoredSessionsDir(worktree);\n}\n\nexport function getSessionDir(\n\tworktree: string,\n\tsessionId: string,\n\tlocation: LiveSessionLocation = \"active\",\n): string {\n\tconst root = getLiveSessionsDir(worktree, location);\n\treturn assertDescendant(\n\t\troot,\n\t\tjoin(root, sanitizePathComponent(\"session\", sessionId)),\n\t);\n}\n\nexport function getActiveSessionDir(\n\tworktree: string,\n\tsessionId: string,\n): string {\n\treturn getSessionDir(worktree, sessionId, \"active\");\n}\n\nexport function getStoredSessionDir(\n\tworktree: string,\n\tsessionId: string,\n): string {\n\treturn getSessionDir(worktree, sessionId, \"stored\");\n}\n\nexport function getCompletedSessionDir(\n\tworktree: string,\n\tcompletedDirName: string,\n): string {\n\tconst completedRoot = getCompletedSessionsDir(worktree);\n\treturn assertDescendant(\n\t\tcompletedRoot,\n\t\tjoin(completedRoot, sanitizePathComponent(\"completed\", completedDirName)),\n\t);\n}\n\nexport function getSessionPath(\n\tworktree: string,\n\tsessionId: string,\n\tlocation: LiveSessionLocation = \"active\",\n): string {\n\treturn getSessionPathFromDir(getSessionDir(worktree, sessionId, location));\n}\n\nexport function getActiveSessionPath(\n\tworktree: string,\n\tsessionId: string,\n): string {\n\treturn getSessionPath(worktree, sessionId, \"active\");\n}\n\nexport function getCompletedSessionPath(\n\tworktree: string,\n\tcompletedDirName: string,\n): string {\n\treturn getSessionPathFromDir(\n\t\tgetCompletedSessionDir(worktree, completedDirName),\n\t);\n}\n\nexport function getSessionPathFromDir(sessionDir: string): string {\n\treturn join(sessionDir, \"session.json\");\n}\n\nfunction getDocsDirFromSessionDir(sessionDir: string): string {\n\treturn join(sessionDir, \"docs\");\n}\n\nexport function getFeaturesDocsDirFromSessionDir(sessionDir: string): string {\n\treturn join(getDocsDirFromSessionDir(sessionDir), \"features\");\n}\n\nexport function getIndexDocPath(\n\tworktree: string,\n\tsessionId: string,\n\tlocation: LiveSessionLocation = \"active\",\n): string {\n\treturn getIndexDocPathFromSessionDir(\n\t\tgetSessionDir(worktree, sessionId, location),\n\t);\n}\n\nexport function getIndexDocPathFromSessionDir(sessionDir: string): string {\n\treturn join(getDocsDirFromSessionDir(sessionDir), \"index.md\");\n}\n\nexport function getFeatureDocPath(\n\tworktree: string,\n\tsessionId: string,\n\tfeatureId: string,\n\tlocation: LiveSessionLocation = \"active\",\n): string {\n\treturn getFeatureDocPathFromSessionDir(\n\t\tgetSessionDir(worktree, sessionId, location),\n\t\tfeatureId,\n\t);\n}\n\nexport function getFeatureDocPathFromSessionDir(\n\tsessionDir: string,\n\tfeatureId: string,\n): string {\n\tconst featuresDir = getFeaturesDocsDirFromSessionDir(sessionDir);\n\treturn assertDescendant(\n\t\tfeaturesDir,\n\t\tjoin(featuresDir, `${sanitizePathComponent(\"feature\", featureId)}.md`),\n\t);\n}\n",
|
|
15
|
+
"import { readdir, rename, stat } from \"node:fs/promises\";\nimport { relative } from \"node:path\";\nimport { getCompletedSessionDir, getCompletedSessionsDir } from \"./paths\";\nimport type { Session } from \"./schema\";\nimport { toCompletedTimestamp } from \"./util\";\nimport type { MutableWorkspaceRoot } from \"./workspace-root\";\n\nexport type CompletedSessionLocation = {\n\tsessionId: string;\n\tcompletedAt: string | null;\n\tcompletedDirName: string;\n\tcompletedDir: string;\n\tcompletedTo: string;\n};\n\nfunction completedDirectoryName(\n\tsessionId: string,\n\tcompletedAt: string,\n\tattempt = 0,\n): string {\n\treturn `${sessionId}-${completedAt}${attempt === 0 ? \"\" : `-${attempt}`}`;\n}\n\nexport function completedTimestampForSession(session: Session): string {\n\treturn toCompletedTimestamp(\n\t\tsession.timestamps.completedAt ?? session.timestamps.updatedAt,\n\t);\n}\n\nexport function parseCompletedDirectoryName(directoryName: string): {\n\tsessionId: string;\n\tcompletedAt: string | null;\n} {\n\tconst match = directoryName.match(\n\t\t/^(.*)-(\\d{8}T\\d{6}(?:\\.\\d{3})?(?:-\\d+)?)$/,\n\t);\n\tif (!match) {\n\t\treturn { sessionId: directoryName, completedAt: null };\n\t}\n\n\treturn {\n\t\tsessionId: match[1] ?? directoryName,\n\t\tcompletedAt: match[2] ?? null,\n\t};\n}\n\nexport function compareCompletedDescending(\n\tleft: string | null,\n\tright: string | null,\n): number {\n\tconst normalize = (value: string | null): [string, number] => {\n\t\tif (!value) return [\"\", -1];\n\t\tconst match = value.match(/^(.*?)(?:-(\\d+))?$/);\n\t\treturn [\n\t\t\tmatch?.[1] ?? value,\n\t\t\tmatch?.[2] ? Number.parseInt(match[2], 10) : 0,\n\t\t];\n\t};\n\n\tconst [rightBase, rightSuffix] = normalize(right);\n\tconst [leftBase, leftSuffix] = normalize(left);\n\tconst baseComparison = rightBase.localeCompare(leftBase);\n\tif (baseComparison !== 0) {\n\t\treturn baseComparison;\n\t}\n\n\treturn rightSuffix - leftSuffix;\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n\ttry {\n\t\tawait stat(path);\n\t\treturn true;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nfunction buildCompletedSessionLocation(\n\tworktree: string,\n\tsessionId: string,\n\tcompletedDirName: string,\n\tcompletedAt: string | null,\n): CompletedSessionLocation {\n\tconst completedDir = getCompletedSessionDir(worktree, completedDirName);\n\treturn {\n\t\tsessionId,\n\t\tcompletedAt,\n\t\tcompletedDirName,\n\t\tcompletedDir,\n\t\tcompletedTo: relative(worktree, completedDir),\n\t};\n}\n\nexport async function allocateCompletedSessionLocation(\n\tworktree: MutableWorkspaceRoot,\n\tsessionId: string,\n\tcompletedAt: string,\n): Promise<CompletedSessionLocation> {\n\tfor (let attempt = 0; ; attempt += 1) {\n\t\tconst completedDirName = completedDirectoryName(\n\t\t\tsessionId,\n\t\t\tcompletedAt,\n\t\t\tattempt,\n\t\t);\n\t\tconst location = buildCompletedSessionLocation(\n\t\t\tworktree,\n\t\t\tsessionId,\n\t\t\tcompletedDirName,\n\t\t\tcompletedAt,\n\t\t);\n\t\tif (!(await pathExists(location.completedDir))) {\n\t\t\treturn location;\n\t\t}\n\t}\n}\n\nexport async function moveSessionDirToCompleted(\n\tworktree: MutableWorkspaceRoot,\n\tsessionId: string,\n\tsourceDir: string,\n\tcompletedAt: string,\n): Promise<CompletedSessionLocation | null> {\n\tfor (let attempt = 0; ; attempt += 1) {\n\t\tconst completedDirName = completedDirectoryName(\n\t\t\tsessionId,\n\t\t\tcompletedAt,\n\t\t\tattempt,\n\t\t);\n\t\tconst location = buildCompletedSessionLocation(\n\t\t\tworktree,\n\t\t\tsessionId,\n\t\t\tcompletedDirName,\n\t\t\tcompletedAt,\n\t\t);\n\n\t\ttry {\n\t\t\tawait rename(sourceDir, location.completedDir);\n\t\t\treturn location;\n\t\t} catch (error) {\n\t\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\t\tif (code === \"ENOENT\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (code === \"EEXIST\" || code === \"ENOTEMPTY\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nexport async function findNewestCompletedSession(\n\tworktree: string,\n\tsessionId: string,\n): Promise<CompletedSessionLocation | null> {\n\tconst completedRoot = getCompletedSessionsDir(worktree);\n\tconst matches: CompletedSessionLocation[] = [];\n\n\tlet entries: Array<{ isDirectory(): boolean; name: string }>;\n\ttry {\n\t\tentries = await readdir(completedRoot, { withFileTypes: true });\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn null;\n\t\t}\n\t\tthrow error;\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.isDirectory()) continue;\n\t\tconst parsed = parseCompletedDirectoryName(entry.name);\n\t\tif (parsed.sessionId !== sessionId) continue;\n\t\tmatches.push(\n\t\t\tbuildCompletedSessionLocation(\n\t\t\t\tworktree,\n\t\t\t\tsessionId,\n\t\t\t\tentry.name,\n\t\t\t\tparsed.completedAt,\n\t\t\t),\n\t\t);\n\t}\n\n\tmatches.sort((left, right) =>\n\t\tcompareCompletedDescending(left.completedAt, right.completedAt),\n\t);\n\treturn matches[0] ?? null;\n}\n",
|
|
16
|
+
"let nowIsoOverride: (() => string) | null = null;\n\nexport function setNowIsoOverride(fn: (() => string) | null): void {\n\tnowIsoOverride = fn;\n}\n\nexport function nowIso(): string {\n\treturn nowIsoOverride ? nowIsoOverride() : new Date().toISOString();\n}\n\nexport function toCompletedTimestamp(value: string): string {\n\treturn value.replace(/[-:]/g, \"\").replace(/Z$/, \"\");\n}\n\nexport function completedTimestampNow(): string {\n\treturn toCompletedTimestamp(nowIso());\n}\n",
|
|
13
17
|
"// Flow runtime policy owner: workflow completion targets and decision-gate semantics remain normative here.\n\nimport type { Feature, Plan, ReviewerDecision, Session } from \"../schema\";\n\ntype DeliveryPolicy = NonNullable<Plan[\"deliveryPolicy\"]>;\ntype FinalReviewPolicy = NonNullable<DeliveryPolicy[\"finalReviewPolicy\"]>;\ntype StopRule = NonNullable<DeliveryPolicy[\"stopRule\"]>;\ntype DecisionLogEntry = Session[\"planning\"][\"decisionLog\"][number];\ntype DecisionMode = DecisionLogEntry[\"decisionMode\"];\ntype DecisionGateStatus = \"recommend_confirm\" | \"human_required\";\ntype TargetStrategy = \"all_features\" | \"core_features\" | \"threshold\";\n\nconst DEFAULT_FINAL_REVIEW_POLICY: FinalReviewPolicy = \"detailed\";\nconst DEFAULT_CLEAN_STOP_RULE: StopRule = \"ship_when_clean\";\nconst DEFAULT_THRESHOLD_STOP_RULE: StopRule = \"ship_when_threshold_met\";\n\nconst STRICT_REVIEW_GOAL_MODES = new Set<Plan[\"goalMode\"]>([\n\t\"review\",\n\t\"review_and_fix\",\n]);\n\nconst REVIEWER_PURPOSE_BY_SCOPE: Record<\n\tReviewerDecision[\"scope\"],\n\tNonNullable<ReviewerDecision[\"reviewPurpose\"]>\n> = {\n\tfeature: \"execution_gate\",\n\tfinal: \"completion_gate\",\n};\n\nconst STOP_RULE_TARGET_STRATEGY: Record<StopRule, TargetStrategy> = {\n\tship_when_clean: \"all_features\",\n\tship_when_core_done: \"core_features\",\n\tship_when_threshold_met: \"threshold\",\n};\n\nconst DECISION_MODE_REQUIRES_PAUSE: Record<DecisionMode, boolean> = {\n\tautonomous_choice: false,\n\trecommend_confirm: true,\n\thuman_required: true,\n};\n\nconst DECISION_GATE_STATUS_BY_MODE: Partial<\n\tRecord<DecisionMode, DecisionGateStatus>\n> = {\n\trecommend_confirm: \"recommend_confirm\",\n\thuman_required: \"human_required\",\n};\n\nexport function finalReviewPolicyForPlan(\n\tplan: Plan | null | undefined,\n): FinalReviewPolicy {\n\treturn plan?.deliveryPolicy?.finalReviewPolicy ?? DEFAULT_FINAL_REVIEW_POLICY;\n}\n\nexport function strictReviewGovernanceRequiredForPlan(\n\tplan: Plan | null | undefined,\n): boolean {\n\treturn Boolean(\n\t\t(plan?.goalMode && STRICT_REVIEW_GOAL_MODES.has(plan.goalMode)) ||\n\t\t\tplan?.deliveryPolicy?.strictReview === true,\n\t);\n}\n\nexport function reviewerPurposeForScope(\n\tscope: ReviewerDecision[\"scope\"],\n): NonNullable<ReviewerDecision[\"reviewPurpose\"]> {\n\treturn REVIEWER_PURPOSE_BY_SCOPE[scope];\n}\n\nfunction thresholdTarget(plan: Plan): number {\n\treturn plan.completionPolicy?.minCompletedFeatures ?? plan.features.length;\n}\n\nexport function completionPolicyTargetError(plan: Plan): string | null {\n\tconst target = plan.completionPolicy?.minCompletedFeatures;\n\tif (target === undefined || target <= plan.features.length) {\n\t\treturn null;\n\t}\n\n\treturn `Plan validation failed: completionPolicy.minCompletedFeatures (${target}) cannot exceed the plan feature count (${plan.features.length}).`;\n}\n\nfunction coreFeatureTarget(plan: Plan): number {\n\tconst coreFeatures = plan.features.filter(\n\t\t(feature) => feature.priority !== \"nice_to_have\" && !feature.deferCandidate,\n\t);\n\treturn coreFeatures.length > 0 ? coreFeatures.length : thresholdTarget(plan);\n}\n\nfunction stopRuleForPlan(plan: Plan): StopRule {\n\treturn (\n\t\tplan.deliveryPolicy?.stopRule ??\n\t\t(plan.completionPolicy?.minCompletedFeatures !== undefined\n\t\t\t? DEFAULT_THRESHOLD_STOP_RULE\n\t\t\t: DEFAULT_CLEAN_STOP_RULE)\n\t);\n}\n\nfunction targetStrategyForPlan(plan: Plan): TargetStrategy {\n\tconst stopRule = stopRuleForPlan(plan);\n\tif (\n\t\tstopRule === \"ship_when_core_done\" &&\n\t\t!plan.deliveryPolicy?.deferAllowed\n\t) {\n\t\treturn \"threshold\";\n\t}\n\treturn STOP_RULE_TARGET_STRATEGY[stopRule];\n}\n\nconst TARGET_COUNT_BY_STRATEGY: Record<TargetStrategy, (plan: Plan) => number> =\n\t{\n\t\tall_features: (plan) => plan.features.length,\n\t\tcore_features: coreFeatureTarget,\n\t\tthreshold: thresholdTarget,\n\t};\n\nexport function targetCompletedFeatureCount(plan: Plan): number {\n\treturn TARGET_COUNT_BY_STRATEGY[targetStrategyForPlan(plan)](plan);\n}\n\nexport function completedFeatureCount(features: Feature[]): number {\n\treturn features.filter((feature) => feature.status === \"completed\").length;\n}\n\nexport function sessionCompletionReached(\n\tplan: Plan,\n\tfeatures: Feature[],\n): boolean {\n\treturn completedFeatureCount(features) >= targetCompletedFeatureCount(plan);\n}\n\nexport function decisionRequiresPause(mode: DecisionMode): boolean {\n\treturn DECISION_MODE_REQUIRES_PAUSE[mode];\n}\n\nfunction toDecisionGate(decision: DecisionLogEntry): {\n\tstatus: DecisionGateStatus;\n\tdomain: DecisionLogEntry[\"decisionDomain\"];\n\tquestion: string;\n\trecommendation: string;\n\trationale: string[];\n} | null {\n\tconst status = DECISION_GATE_STATUS_BY_MODE[decision.decisionMode];\n\treturn status\n\t\t? {\n\t\t\t\tstatus,\n\t\t\t\tdomain: decision.decisionDomain,\n\t\t\t\tquestion: decision.question,\n\t\t\t\trecommendation: decision.recommendation,\n\t\t\t\trationale: decision.rationale,\n\t\t\t}\n\t\t: null;\n}\n\nexport function activeDecisionGate(session: Session): {\n\tstatus: DecisionGateStatus;\n\tdomain: DecisionLogEntry[\"decisionDomain\"];\n\tquestion: string;\n\trecommendation: string;\n\trationale: string[];\n} | null {\n\tfor (\n\t\tlet index = session.planning.decisionLog.length - 1;\n\t\tindex >= 0;\n\t\tindex -= 1\n\t) {\n\t\tconst decision = session.planning.decisionLog[index];\n\t\tif (!decision) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst gate = toDecisionGate(decision);\n\t\tif (gate) {\n\t\t\treturn gate;\n\t\t}\n\t}\n\n\treturn null;\n}\n",
|
|
14
18
|
"import type { Plan, Session } from \"../schema\";\nimport {\n\tcompletedFeatureCount,\n\ttargetCompletedFeatureCount,\n} from \"./workflow-policy\";\n\nexport function featureWouldReachCompletion(\n\tplan: Plan,\n\tfeatureId: string,\n): boolean {\n\tconst target = targetCompletedFeatureCount(plan);\n\tconst projectedCompleted = plan.features.filter(\n\t\t(feature) => feature.status === \"completed\" || feature.id === featureId,\n\t).length;\n\treturn projectedCompleted >= target;\n}\n\nexport function summarizeCompletion(session: Session): {\n\tcompletedFeatures: number;\n\ttargetCompletedFeatures: number;\n\ttotalFeatures: number;\n\tcanCompleteWithPendingFeatures: boolean;\n\tactiveFeatureTriggersSessionCompletion: boolean;\n\tremainingBeyondTarget: number;\n} | null {\n\tconst plan = session.plan;\n\tif (!plan) {\n\t\treturn null;\n\t}\n\n\tconst completedFeatures = completedFeatureCount(plan.features);\n\tconst targetCompletedFeatures = targetCompletedFeatureCount(plan);\n\tconst totalFeatures = plan.features.length;\n\tconst activeFeatureId = session.execution.activeFeatureId;\n\n\treturn {\n\t\tcompletedFeatures,\n\t\ttargetCompletedFeatures,\n\t\ttotalFeatures,\n\t\tcanCompleteWithPendingFeatures: targetCompletedFeatures < totalFeatures,\n\t\tactiveFeatureTriggersSessionCompletion: activeFeatureId\n\t\t\t? featureWouldReachCompletion(plan, activeFeatureId)\n\t\t\t: false,\n\t\tremainingBeyondTarget: Math.max(totalFeatures - targetCompletedFeatures, 0),\n\t};\n}\n",
|
|
15
19
|
"import type { Plan, PlanningContext } from \"../schema\";\n\nexport const REVIEW_AND_FIX_FINDINGS_REQUIRED_MESSAGE =\n\t\"review_and_fix plans require concrete existing findings in planning.reviewFindings. For broad review/codebase-review goals without findings, apply a review-first plan with goalMode: review, run discovery/audit, then replan remediation after findings exist.\";\n\nexport function validateReviewAndFixFindingPrerequisite(\n\tplan: Plan,\n\tplanning: PlanningContext,\n): string | null {\n\tif (plan.goalMode !== \"review_and_fix\") {\n\t\treturn null;\n\t}\n\tif (planning.reviewFindings.length > 0) {\n\t\treturn null;\n\t}\n\treturn REVIEW_AND_FIX_FINDINGS_REQUIRED_MESSAGE;\n}\n\nexport function validatePlanGraph(plan: Plan): string | null {\n\tconst ids = new Set<string>();\n\n\tfor (const feature of plan.features) {\n\t\tif (ids.has(feature.id)) {\n\t\t\treturn `Plan validation failed: duplicate feature id '${feature.id}'.`;\n\t\t}\n\t\tids.add(feature.id);\n\t}\n\n\tconst byId = new Map(plan.features.map((feature) => [feature.id, feature]));\n\tfor (const feature of plan.features) {\n\t\tfor (const dependencyId of feature.dependsOn ?? []) {\n\t\t\tif (!ids.has(dependencyId)) {\n\t\t\t\treturn `Plan validation failed: feature '${feature.id}' depends on unknown feature '${dependencyId}'.`;\n\t\t\t}\n\t\t\tif (dependencyId === feature.id) {\n\t\t\t\treturn `Plan validation failed: feature '${feature.id}' cannot depend on itself.`;\n\t\t\t}\n\t\t}\n\n\t\tfor (const blockerId of feature.blockedBy ?? []) {\n\t\t\tif (!ids.has(blockerId)) {\n\t\t\t\treturn `Plan validation failed: feature '${feature.id}' is blocked by unknown feature '${blockerId}'.`;\n\t\t\t}\n\t\t\tif (blockerId === feature.id) {\n\t\t\t\treturn `Plan validation failed: feature '${feature.id}' cannot block itself.`;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst visitState = new Map<string, \"visiting\" | \"visited\">();\n\tconst visit = (featureId: string): boolean => {\n\t\tconst current = visitState.get(featureId);\n\t\tif (current === \"visiting\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (current === \"visited\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tvisitState.set(featureId, \"visiting\");\n\t\tconst feature = byId.get(featureId);\n\t\tif (!feature) {\n\t\t\tvisitState.set(featureId, \"visited\");\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (const edge of [\n\t\t\t...(feature.dependsOn ?? []),\n\t\t\t...(feature.blockedBy ?? []),\n\t\t]) {\n\t\t\tif (visit(edge)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tvisitState.set(featureId, \"visited\");\n\t\treturn false;\n\t};\n\n\tfor (const feature of plan.features) {\n\t\tif (visit(feature.id)) {\n\t\t\treturn \"Plan validation failed: the feature dependency graph contains a cycle.\";\n\t\t}\n\t}\n\n\treturn null;\n}\n",
|
|
16
20
|
"import type { Plan } from \"../schema\";\n\ntype FeatureSubsetResult =\n\t| { ok: true; value: Plan[\"features\"] }\n\t| { ok: false; error: string };\n\nfunction ensureRequestedFeatureIdsExist(\n\tfeatures: Plan[\"features\"],\n\trequestedIds: string[],\n): string | null {\n\tconst knownIds = new Set(features.map((feature) => feature.id));\n\tconst unknownIds = requestedIds.filter((id) => !knownIds.has(id));\n\treturn unknownIds.length > 0\n\t\t? `Unknown feature ids: ${unknownIds.join(\", \")}.`\n\t\t: null;\n}\n\nexport function selectProjectedFeatureSubset(\n\tfeatures: Plan[\"features\"],\n\tfeatureIds: string[],\n\tdependencyErrorMessage: (featureId: string) => string,\n\tpreserveCompleted: boolean,\n): FeatureSubsetResult {\n\tconst unknownIdsError = ensureRequestedFeatureIdsExist(features, featureIds);\n\tif (unknownIdsError) {\n\t\treturn { ok: false, error: unknownIdsError };\n\t}\n\n\tconst selectedIds = new Set(featureIds);\n\tconst filtered = features.filter((feature) => selectedIds.has(feature.id));\n\tif (filtered.length === 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: \"None of the requested feature ids matched the draft plan.\",\n\t\t};\n\t}\n\n\tconst filteredIds = new Set(filtered.map((feature) => feature.id));\n\tfor (const feature of filtered) {\n\t\tconst unresolvedDependsOn = (feature.dependsOn ?? []).filter(\n\t\t\t(id) => !filteredIds.has(id),\n\t\t);\n\t\tconst unresolvedBlockedBy = (feature.blockedBy ?? []).filter(\n\t\t\t(id) => !filteredIds.has(id),\n\t\t);\n\t\tif (unresolvedDependsOn.length > 0 || unresolvedBlockedBy.length > 0) {\n\t\t\treturn { ok: false, error: dependencyErrorMessage(feature.id) };\n\t\t}\n\t}\n\n\treturn {\n\t\tok: true,\n\t\tvalue: filtered.map((feature) => ({\n\t\t\t...feature,\n\t\t\tstatus:\n\t\t\t\tpreserveCompleted && feature.status === \"completed\"\n\t\t\t\t\t? \"completed\"\n\t\t\t\t\t: \"pending\",\n\t\t})),\n\t};\n}\n",
|
|
17
21
|
"import type {\n\tPlanningContext,\n\tReviewFindingPlanningContext,\n\tSession,\n} from \"../schema\";\nimport type { EvidencePacket } from \"../schema-evidence-packets\";\n\nfunction mergeUniqueStrings(\n\tcurrent: readonly string[] = [],\n\tnext?: readonly string[],\n): string[] {\n\treturn [...new Set([...current, ...(next ?? [])])];\n}\n\nfunction mergeUniqueBySerialized<T>(\n\tcurrent: readonly T[] = [],\n\tnext?: readonly T[],\n): T[] {\n\tconst seen = new Set<string>();\n\tconst merged: T[] = [];\n\tfor (const item of [...current, ...(next ?? [])]) {\n\t\tconst key = JSON.stringify(item);\n\t\tif (seen.has(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tseen.add(key);\n\t\tmerged.push(item);\n\t}\n\treturn merged;\n}\n\nfunction mergeEvidencePackets(\n\tcurrent?: readonly EvidencePacket[],\n\tnext?: readonly EvidencePacket[],\n): EvidencePacket[] | undefined {\n\tif (!current && !next) {\n\t\treturn undefined;\n\t}\n\n\tconst byId = new Map<string, EvidencePacket>();\n\tfor (const packet of current ?? []) {\n\t\tbyId.set(packet.id, packet);\n\t}\n\tfor (const packet of next ?? []) {\n\t\t// Same-id packets are refreshed wholesale so obsolete source refs,\n\t\t// selected/excluded context, and validation evidence can be retracted.\n\t\tbyId.set(packet.id, packet);\n\t}\n\treturn [...byId.values()];\n}\n\nfunction mergeReviewFindings(\n\tcurrent: readonly ReviewFindingPlanningContext[] = [],\n\tnext?: readonly ReviewFindingPlanningContext[],\n): ReviewFindingPlanningContext[] {\n\tif (next && next.length === 0) {\n\t\treturn [];\n\t}\n\tconst byRef = new Map<string, ReviewFindingPlanningContext>();\n\tfor (const finding of current) {\n\t\tbyRef.set(finding.findingRef, finding);\n\t}\n\tfor (const finding of next ?? []) {\n\t\tbyRef.set(finding.findingRef, finding);\n\t}\n\treturn [...byRef.values()];\n}\n\nfunction normalizeFindingRefs(\n\tfindings: readonly ReviewFindingPlanningContext[],\n): string[] {\n\treturn findings.map((finding) => finding.findingRef.trim()).filter(Boolean);\n}\n\nexport function describeReviewFindingsMutationFailure(\n\tsession: Pick<Session, \"plan\" | \"planning\">,\n\tnextPlanning: Partial<PlanningContext>,\n): string | null {\n\tif (session.plan?.goalMode !== \"review_and_fix\") {\n\t\treturn null;\n\t}\n\tif (!nextPlanning.reviewFindings) {\n\t\treturn null;\n\t}\n\n\tconst existingFindingRefs = normalizeFindingRefs(\n\t\tsession.planning.reviewFindings,\n\t);\n\tif (existingFindingRefs.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst nextFindingRefs = new Set(\n\t\tnormalizeFindingRefs(nextPlanning.reviewFindings),\n\t);\n\tconst missingFindingRefs = existingFindingRefs.filter(\n\t\t(findingRef) => !nextFindingRefs.has(findingRef),\n\t);\n\tif (missingFindingRefs.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn `Planning context update cannot remove review_and_fix findings while the active plan depends on them. Missing retained findingRefs: ${missingFindingRefs.join(\", \")}.`;\n}\n\nexport function mergePlanningContext(\n\tcurrent: PlanningContext,\n\tnext: Partial<PlanningContext> = {},\n): PlanningContext {\n\treturn {\n\t\trepoProfile: mergeUniqueStrings(current.repoProfile, next.repoProfile),\n\t\tpackageManager: next.packageManager ?? current.packageManager,\n\t\tpackageManagerAmbiguous:\n\t\t\tnext.packageManagerAmbiguous ?? current.packageManagerAmbiguous,\n\t\tstackProfile: next.stackProfile ?? current.stackProfile,\n\t\tstandardsProfile: next.standardsProfile ?? current.standardsProfile,\n\t\tresearch: mergeUniqueStrings(current.research, next.research),\n\t\timplementationApproach:\n\t\t\tnext.implementationApproach ?? current.implementationApproach,\n\t\tdecisionLog: next.decisionLog ?? current.decisionLog,\n\t\treplanLog: mergeUniqueBySerialized(current.replanLog, next.replanLog),\n\t\treviewFindings: mergeReviewFindings(\n\t\t\tcurrent.reviewFindings,\n\t\t\tnext.reviewFindings,\n\t\t),\n\t\tevidencePackets: mergeEvidencePackets(\n\t\t\tcurrent.evidencePackets,\n\t\t\tnext.evidencePackets,\n\t\t),\n\t};\n}\n",
|
|
22
|
+
"// Next-step hints surfaced in tool responses: a slash command where one\n// exists (the five v3 commands), otherwise the tool call the skills teach.\nexport const FLOW_PLAN_COMMAND = \"/flow-plan\";\nexport const FLOW_PLAN_WITH_GOAL_COMMAND = \"/flow-plan <goal>\";\nexport const FLOW_RUN_COMMAND = \"/flow-run\";\nexport const FLOW_STATUS_COMMAND = \"/flow-status\";\nexport const FLOW_HISTORY_COMMAND = \"flow_session history\";\nconst FLOW_RESET_FEATURE_COMMAND = \"flow_feature_complete reset\";\nconst FLOW_SESSION_ACTIVATE_COMMAND = \"flow_session activate\";\n\nexport const CANONICAL_RUNTIME_TOOL_NAMES = [\n\t\"flow_status\",\n\t\"flow_plan_save\",\n\t\"flow_plan_approve\",\n\t\"flow_run_start\",\n\t\"flow_feature_complete\",\n\t\"flow_review_record\",\n\t\"flow_session\",\n] as const;\n\nexport type CanonicalRuntimeToolName =\n\t(typeof CANONICAL_RUNTIME_TOOL_NAMES)[number];\n\nexport const VALIDATION_STATUSES = [\n\t\"passed\",\n\t\"failed\",\n\t\"failed_existing\",\n\t\"partial\",\n] as const;\nexport const REVIEW_STATUSES = [\"passed\", \"failed\", \"needs_followup\"] as const;\nexport const VERIFICATION_STATUSES = [\n\t\"passed\",\n\t\"partial\",\n\t\"failed\",\n\t\"not_recorded\",\n] as const;\nexport const GOAL_MODES = [\n\t\"implementation\",\n\t\"review\",\n\t\"review_and_fix\",\n] as const;\nexport const DECOMPOSITION_POLICIES = [\n\t\"atomic_feature\",\n\t\"iterative_refinement\",\n\t\"open_ended\",\n] as const;\nexport const DECISION_MODES = [\n\t\"autonomous_choice\",\n\t\"recommend_confirm\",\n\t\"human_required\",\n] as const;\nexport const DECISION_DOMAINS = [\n\t\"architecture\",\n\t\"product\",\n\t\"quality\",\n\t\"scope\",\n\t\"delivery\",\n] as const;\nexport const FEATURE_PRIORITIES = [\n\t\"critical\",\n\t\"important\",\n\t\"nice_to_have\",\n] as const;\nexport const PRIORITY_MODES = [\n\t\"strict_scope\",\n\t\"balanced\",\n\t\"quality_first\",\n] as const;\nexport const STOP_RULES = [\n\t\"ship_when_clean\",\n\t\"ship_when_core_done\",\n\t\"ship_when_threshold_met\",\n] as const;\nexport const FINAL_REVIEW_POLICIES = [\"broad\", \"detailed\"] as const;\nexport const FINAL_REVIEW_SURFACES = [\n\t\"changed_files\",\n\t\"integration_points\",\n\t\"shared_surfaces\",\n\t\"validation_evidence\",\n\t\"tests\",\n\t\"operator_surfaces\",\n\t\"docs_and_prompts\",\n\t\"tooling_and_config\",\n\t\"release_surface\",\n] as const;\nexport const REVIEW_PURPOSES = [\"execution_gate\", \"completion_gate\"] as const;\nexport const REVIEWER_DECISION_STATUSES = [\n\t\"approved\",\n\t\"needs_fix\",\n\t\"blocked\",\n] as const;\nexport const REVIEW_SCOPE_TARGET_KINDS = [\n\t\"file\",\n\t\"glob\",\n\t\"domain\",\n\t\"surface\",\n\t\"workflow\",\n\t\"custom\",\n] as const;\nexport const REPLAN_REASONS = [\n\t\"plan_too_broad\",\n\t\"hidden_dependency\",\n\t\"product_ambiguity\",\n\t\"validation_mismatch\",\n\t\"implementation_complexity\",\n\t\"review_disagreement\",\n] as const;\nexport const CLOSURE_KINDS = [\"completed\", \"deferred\", \"abandoned\"] as const;\nexport const OUTCOME_KINDS = [\n\t\"completed\",\n\t\"replan_required\",\n\t\"blocked_external\",\n\t\"needs_operator_input\",\n\t\"contract_error\",\n] as const;\nexport const NEEDS_INPUT_OUTCOME_KINDS = [\n\t\"replan_required\",\n\t\"blocked_external\",\n\t\"needs_operator_input\",\n\t\"contract_error\",\n] as const;\n\nexport const FEATURE_ID_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\nexport const FEATURE_ID_MESSAGE = \"Feature ids must be lowercase kebab-case\";\nexport const VALIDATION_SCOPES = [\"targeted\", \"broad\"] as const;\nexport function flowResetFeatureCommand(featureId: string): string {\n\treturn `${FLOW_RESET_FEATURE_COMMAND} ${featureId}`;\n}\n\nexport function flowSessionActivateCommand(sessionId: string): string {\n\treturn `${FLOW_SESSION_ACTIVATE_COMMAND} ${sessionId}`;\n}\n",
|
|
18
23
|
"// Reviewer decision domain: structural shape validation and normalization\n// only. Review depth, coverage, and evidence-quality judgment moved to the\n// flow-review skill rubric in v3.\n\nimport { FINAL_REVIEW_POLICIES } from \"../constants\";\nimport type { ReviewerDecision, Session } from \"../schema\";\nimport { reviewerPurposeForScope } from \"./workflow-policy\";\n\ntype FinalScopeReviewerDecision = Extract<ReviewerDecision, { scope: \"final\" }>;\ntype FinalReviewDepth = FinalScopeReviewerDecision[\"reviewDepth\"];\n\nexport type RecordReviewerDecisionInput = {\n\tscope: string;\n\treviewPurpose?: string | undefined;\n\tstatus: string;\n\tsummary: string;\n\tfeatureId?: string | undefined;\n\treviewDepth?: string | undefined;\n\treviewedSurfaces?: string[] | undefined;\n\tevidenceSummary?: string | undefined;\n\tvalidationAssessment?: string | undefined;\n\tremainingGaps?: string[] | undefined;\n\tevidenceRefs?:\n\t\t| {\n\t\t\t\tchangedArtifacts?: string[] | undefined;\n\t\t\t\tvalidationCommands?: string[] | undefined;\n\t\t }\n\t\t| undefined;\n\tblockingFindings?: ReviewerDecision[\"blockingFindings\"];\n\tfollowUps?: ReviewerDecision[\"followUps\"];\n\tsuggestedValidation?: ReviewerDecision[\"suggestedValidation\"];\n};\n\nfunction isFinalReviewDepth(value: string): value is FinalReviewDepth {\n\treturn (FINAL_REVIEW_POLICIES as readonly string[]).includes(value);\n}\n\nfunction describeReviewerDecisionShapeFailure(\n\tsession: Session,\n\tinput: RecordReviewerDecisionInput,\n): string | null {\n\tif (input.scope !== \"feature\" && input.scope !== \"final\") {\n\t\treturn `Reviewer decision validation failed: scope: expected \"feature\" or \"final\", received \"${input.scope}\".`;\n\t}\n\tif (input.scope === \"feature\" && !input.featureId) {\n\t\treturn \"Reviewer decision validation failed: featureId: feature-scope decisions must name the reviewed feature.\";\n\t}\n\tif (input.scope === \"final\" && input.featureId) {\n\t\treturn \"Reviewer decision validation failed: featureId: final-scope decisions must not name a single feature.\";\n\t}\n\tif (\n\t\tinput.scope === \"final\" &&\n\t\t(!input.reviewDepth || !isFinalReviewDepth(input.reviewDepth))\n\t) {\n\t\treturn 'Reviewer decision validation failed: reviewDepth: final-scope decisions must declare \"broad\" or \"detailed\".';\n\t}\n\tvoid session;\n\treturn null;\n}\n\nexport function buildReviewerDecision(\n\tinput: RecordReviewerDecisionInput,\n): ReviewerDecision {\n\tconst status = input.status as ReviewerDecision[\"status\"];\n\tif (input.scope === \"final\") {\n\t\tconst reviewDepth =\n\t\t\tinput.reviewDepth && isFinalReviewDepth(input.reviewDepth)\n\t\t\t\t? input.reviewDepth\n\t\t\t\t: \"broad\";\n\t\treturn {\n\t\t\tscope: \"final\",\n\t\t\treviewPurpose: reviewerPurposeForScope(\"final\"),\n\t\t\tstatus,\n\t\t\tsummary: input.summary,\n\t\t\tblockingFindings: input.blockingFindings ?? [],\n\t\t\tfollowUps: input.followUps ?? [],\n\t\t\tsuggestedValidation: input.suggestedValidation ?? [],\n\t\t\treviewDepth,\n\t\t\treviewedSurfaces: (input.reviewedSurfaces ??\n\t\t\t\t[]) as FinalScopeReviewerDecision[\"reviewedSurfaces\"],\n\t\t\t...(input.evidenceSummary\n\t\t\t\t? { evidenceSummary: input.evidenceSummary }\n\t\t\t\t: {}),\n\t\t\t...(input.validationAssessment\n\t\t\t\t? { validationAssessment: input.validationAssessment }\n\t\t\t\t: {}),\n\t\t\tremainingGaps: input.remainingGaps ?? [],\n\t\t\tevidenceRefs: {\n\t\t\t\tchangedArtifacts: input.evidenceRefs?.changedArtifacts ?? [],\n\t\t\t\tvalidationCommands: input.evidenceRefs?.validationCommands ?? [],\n\t\t\t},\n\t\t};\n\t}\n\treturn {\n\t\tscope: \"feature\",\n\t\tfeatureId: input.featureId ?? \"\",\n\t\treviewPurpose: reviewerPurposeForScope(\"feature\"),\n\t\tstatus,\n\t\tsummary: input.summary,\n\t\tblockingFindings: input.blockingFindings ?? [],\n\t\tfollowUps: input.followUps ?? [],\n\t\tsuggestedValidation: input.suggestedValidation ?? [],\n\t};\n}\n\nexport function validateReviewerDecisionInput(\n\tsession: Session,\n\tinput: RecordReviewerDecisionInput,\n): string | null {\n\treturn describeReviewerDecisionShapeFailure(session, input);\n}\n",
|
|
19
24
|
"import type { SemanticInvariantId } from \"../../core/protocols/semantic-invariants\";\nimport type { CompletionRecoveryKind } from \"../transitions/recovery\";\n\ntype SemanticInvariantOwnerReference = {\n\tfile: string;\n\tsymbols: readonly string[];\n};\n\ntype SemanticInvariantDescriptor = {\n\tid: SemanticInvariantId;\n\townerSummary: string;\n\townerReferences: readonly SemanticInvariantOwnerReference[];\n\tsemanticClaim: string;\n\tassertionType: string;\n\tstabilityRule: string;\n};\n\nconst SEMANTIC_INVARIANT_REGISTRY = {\n\t\"completion.gates.required_order\": {\n\t\tid: \"completion.gates.required_order\",\n\t\townerSummary:\n\t\t\t\"src/runtime/transitions/execution-completion-validation.ts::validateNormalizedSuccessfulCompletion\",\n\t\townerReferences: [\n\t\t\t{\n\t\t\t\tfile: \"src/runtime/transitions/execution-completion-validation.ts\",\n\t\t\t\tsymbols: [\"validateNormalizedSuccessfulCompletion\"],\n\t\t\t},\n\t\t],\n\t\tsemanticClaim:\n\t\t\t\"A feature cannot complete without recorded passing validation evidence, a passing featureReview, and — on the final completion path — a passing finalReview.\",\n\t\tassertionType: \"transition outcome assertions\",\n\t\tstabilityRule:\n\t\t\t\"Stable across refactors; behavior changes require semantic-suite updates.\",\n\t},\n\t\"completion.policy.min_completed_features\": {\n\t\tid: \"completion.policy.min_completed_features\",\n\t\townerSummary:\n\t\t\t\"src/runtime/domain/completion.ts::summarizeCompletion + src/runtime/domain/workflow-policy.ts::targetCompletedFeatureCount\",\n\t\townerReferences: [\n\t\t\t{\n\t\t\t\tfile: \"src/runtime/domain/completion.ts\",\n\t\t\t\tsymbols: [\"summarizeCompletion\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tfile: \"src/runtime/domain/workflow-policy.ts\",\n\t\t\t\tsymbols: [\"targetCompletedFeatureCount\"],\n\t\t\t},\n\t\t],\n\t\tsemanticClaim:\n\t\t\t\"Final completion respects completionPolicy.minCompletedFeatures and can finish with pending features when the target is lower than the total plan size.\",\n\t\tassertionType: \"summary and completion outcome assertions\",\n\t\tstabilityRule:\n\t\t\t\"Stable invariant ID; semantic threshold changes require migration notes.\",\n\t},\n\t\"decision_gate.planning_surface.binding\": {\n\t\tid: \"decision_gate.planning_surface.binding\",\n\t\townerSummary:\n\t\t\t\"src/runtime/domain/workflow-policy.ts::activeDecisionGate + src/runtime/summary.ts::explainSessionState\",\n\t\townerReferences: [\n\t\t\t{\n\t\t\t\tfile: \"src/runtime/domain/workflow-policy.ts\",\n\t\t\t\tsymbols: [\"activeDecisionGate\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tfile: \"src/runtime/summary.ts\",\n\t\t\t\tsymbols: [\"explainSessionState\", \"summarizeSession\"],\n\t\t\t},\n\t\t],\n\t\tsemanticClaim:\n\t\t\t\"Planning decisions that require pause are surfaced into session summaries and guidance as decisionGate payloads.\",\n\t\tassertionType: \"summary and guidance assertions\",\n\t\tstabilityRule:\n\t\t\t\"Stable invariant ID; pause/surface contract changes are breaking behavior.\",\n\t},\n\t\"review.scope.payload_binding\": {\n\t\tid: \"review.scope.payload_binding\",\n\t\townerSummary:\n\t\t\t\"src/runtime/schema.ts::FlowReviewRecordFeatureArgsSchema/FinalReviewerDecisionSchema\",\n\t\townerReferences: [\n\t\t\t{\n\t\t\t\tfile: \"src/runtime/schema.ts\",\n\t\t\t\tsymbols: [\n\t\t\t\t\t\"FlowReviewRecordFeatureArgsSchema\",\n\t\t\t\t\t\"FinalReviewerDecisionSchema\",\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tsemanticClaim:\n\t\t\t\"Feature and final review payload scopes stay distinct and invalid cross-scope payloads are rejected.\",\n\t\tassertionType: \"schema parse and runtime rejection assertions\",\n\t\tstabilityRule:\n\t\t\t\"Stable unless the review payload contract is intentionally changed.\",\n\t},\n\t\"recovery.next_action.binding\": {\n\t\tid: \"recovery.next_action.binding\",\n\t\townerSummary:\n\t\t\t\"src/runtime/transitions/recovery.ts::buildCompletionRecovery\",\n\t\townerReferences: [\n\t\t\t{\n\t\t\t\tfile: \"src/runtime/transitions/recovery.ts\",\n\t\t\t\tsymbols: [\"buildCompletionRecovery\"],\n\t\t\t},\n\t\t],\n\t\tsemanticClaim:\n\t\t\t\"Recovery emits canonical recovery-stage, prerequisite, nextCommand, and nextRuntimeTool bindings.\",\n\t\tassertionType: \"structured recovery metadata assertions\",\n\t\tstabilityRule:\n\t\t\t\"Stable ID; human-readable prose may vary if structured metadata keeps the same machine-readable bindings.\",\n\t},\n\t\"tools.canonical_surface.no_raw_wrappers\": {\n\t\tid: \"tools.canonical_surface.no_raw_wrappers\",\n\t\townerSummary:\n\t\t\t\"src/adapters/opencode/tools.ts::createTools + src/adapters/opencode/tool-surface/tool-registry.ts\",\n\t\townerReferences: [\n\t\t\t{\n\t\t\t\tfile: \"src/adapters/opencode/tools.ts\",\n\t\t\t\tsymbols: [\"createTools\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tfile: \"src/adapters/opencode/tool-surface/tool-registry.ts\",\n\t\t\t\tsymbols: [\"OPENCODE_TOOL_REGISTRY\"],\n\t\t\t},\n\t\t],\n\t\tsemanticClaim:\n\t\t\t\"The public tool surface remains registry-defined; only canonical tools and declared transition aliases are registered.\",\n\t\tassertionType: \"tool registration assertions\",\n\t\tstabilityRule: \"Stable; tool additions require registry updates.\",\n\t},\n} as const satisfies Record<SemanticInvariantId, SemanticInvariantDescriptor>;\n\nexport const SEMANTIC_INVARIANTS = Object.values(\n\tSEMANTIC_INVARIANT_REGISTRY,\n) as readonly SemanticInvariantDescriptor[];\n\nexport const SEMANTIC_INVARIANT_IDS = Object.keys(\n\tSEMANTIC_INVARIANT_REGISTRY,\n) as SemanticInvariantId[];\n\nexport const SEMANTIC_COMPLETION_POLICY_EXPECTATIONS = {\n\tpendingAllowedWhenTargetLessThanTotal: true,\n\tactiveFeatureCanTriggerCompletion: true,\n\tthresholdStopRule: \"ship_when_threshold_met\",\n} as const;\n\nexport const SEMANTIC_DECISION_GATE_EXPECTATIONS = {\n\tsurfaceKeys: [\n\t\t\"status\",\n\t\t\"domain\",\n\t\t\"question\",\n\t\t\"recommendation\",\n\t\t\"rationale\",\n\t] as const,\n\tpauseModes: [\"recommend_confirm\", \"human_required\"] as const,\n\tnonPauseModes: [\"autonomous_choice\"] as const,\n\tguidanceCategory: \"decision_gate\",\n} as const;\n\nexport const SEMANTIC_REVIEW_SCOPE_EXPECTATIONS = {\n\tfeatureScope: \"feature\",\n\tfinalScope: \"final\",\n\tfeatureRequiresFeatureId: true,\n\tfinalRejectsFeatureId: true,\n} as const;\n\nexport const SEMANTIC_RECOVERY_EXPECTATIONS = {\n\tresetFeatureKinds: [\n\t\t\"failing_validation\",\n\t\t\"failing_feature_review\",\n\t\t\"failing_final_review\",\n\t] as const satisfies readonly CompletionRecoveryKind[],\n\tstatusOnlyKinds: [\n\t\t\"missing_validation\",\n\t\t\"missing_reviewer_decision\",\n\t\t\"missing_validation_scope\",\n\t\t\"missing_final_review\",\n\t] as const satisfies readonly CompletionRecoveryKind[],\n\tstatusCommand: \"/flow-status\",\n\tresetCommandPrefix: \"flow_feature_complete reset \",\n\tresetRuntimeTool: \"flow_feature_complete\",\n} as const;\n\nexport function semanticInvariantById(id: SemanticInvariantId) {\n\treturn SEMANTIC_INVARIANT_REGISTRY[id] ?? null;\n}\n",
|
|
20
|
-
"import type { RuntimeToolResponse } from \"./application\";\n\nexport function errorResponse(\n\tsummary: string,\n\textra?: RuntimeToolResponse,\n): RuntimeToolResponse {\n\treturn {\n\t\tstatus: \"error\",\n\t\tsummary,\n\t\t...(extra ?? {}),\n\t};\n}\n",
|
|
21
|
-
"import { readdir } from \"node:fs/promises\";\nimport { relative } from \"node:path\";\nimport {\n\tgetActiveSessionDir,\n\tgetCompletedSessionDir,\n\tgetCompletedSessionPath,\n\tgetCompletedSessionsDir,\n\tgetSessionPath,\n\tgetStoredSessionDir,\n\tgetStoredSessionsDir,\n} from \"./paths\";\nimport {\n\tcompareCompletedDescending,\n\tfindNewestCompletedSession,\n\tparseCompletedDirectoryName,\n} from \"./recovery\";\nimport type { Session } from \"./schema\";\nimport { readActiveSessionId } from \"./session-workspace\";\nimport { readSessionFromPath } from \"./session-workspace-io\";\n\nexport type SessionHistoryEntry = {\n\tid: string;\n\tgoal: string | null;\n\tstatus: string;\n\tclosureKind: Session[\"closure\"] extends infer Closure\n\t\t? Closure extends { kind: infer Kind }\n\t\t\t? Kind | null\n\t\t\t: null\n\t\t: null;\n\tclosureSummary: string | null;\n\tapproval: string | null;\n\tcreatedAt: string | null;\n\tupdatedAt: string | null;\n\tcompletedAt: string | null;\n\tactive: boolean;\n\tpath: string;\n\tlatestFailedAttempt: Session[\"execution\"][\"lastFailedMutation\"] | null;\n\terror?: string;\n};\n\nexport type CompletedSessionHistoryEntry = SessionHistoryEntry & {\n\tcompletedPath: string;\n\tcompletedAt: string | null;\n};\n\nexport type StoredSessionLookup = {\n\tsession: Session;\n\tsource: \"active\" | \"stored\" | \"completed\";\n\tactive: boolean;\n\tpath: string;\n\tcompletedPath?: string;\n\tcompletedAt?: string | null;\n};\n\nfunction compareIsoDescending(\n\tleft: string | null,\n\tright: string | null,\n): number {\n\treturn (right ?? \"\").localeCompare(left ?? \"\");\n}\n\nfunction toHistoryEntry(\n\tworktree: string,\n\tsession: Session,\n\tpath: string,\n\tactiveSessionId: string | null,\n): SessionHistoryEntry {\n\treturn {\n\t\tid: session.id,\n\t\tgoal: session.goal,\n\t\tstatus: session.status,\n\t\tclosureKind: session.closure?.kind ?? null,\n\t\tclosureSummary: session.closure?.summary ?? null,\n\t\tapproval: session.approval,\n\t\tcreatedAt: session.timestamps.createdAt,\n\t\tupdatedAt: session.timestamps.updatedAt,\n\t\tcompletedAt: session.timestamps.completedAt,\n\t\tactive: session.id === activeSessionId,\n\t\tpath: relative(worktree, path),\n\t\tlatestFailedAttempt: session.execution.lastFailedMutation ?? null,\n\t};\n}\n\nfunction toInvalidHistoryEntry(\n\tworktree: string,\n\tid: string,\n\tpath: string,\n\terror: unknown,\n\tactiveSessionId: string | null,\n): SessionHistoryEntry {\n\treturn {\n\t\tid,\n\t\tgoal: null,\n\t\tstatus: \"invalid\",\n\t\tclosureKind: null,\n\t\tclosureSummary: null,\n\t\tapproval: null,\n\t\tcreatedAt: null,\n\t\tupdatedAt: null,\n\t\tcompletedAt: null,\n\t\tactive: id === activeSessionId,\n\t\tpath: relative(worktree, path),\n\t\tlatestFailedAttempt: null,\n\t\terror: error instanceof Error ? error.message : String(error),\n\t};\n}\n\nasync function readDirectoryEntries(\n\troot: string,\n): Promise<Array<{ isDirectory(): boolean; name: string }>> {\n\ttry {\n\t\treturn await readdir(root, { withFileTypes: true });\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn [];\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nexport async function loadStoredSession(\n\tworktree: string,\n\tsessionId: string,\n): Promise<StoredSessionLookup | null> {\n\tconst activeSessionId = await readActiveSessionId(worktree);\n\tlet activeReadError: unknown;\n\tif (activeSessionId === sessionId) {\n\t\ttry {\n\t\t\tconst session = await readSessionFromPath(\n\t\t\t\tgetSessionPath(worktree, sessionId, \"active\"),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tsession,\n\t\t\t\tsource: \"active\",\n\t\t\t\tactive: true,\n\t\t\t\tpath: relative(worktree, getActiveSessionDir(worktree, sessionId)),\n\t\t\t};\n\t\t} catch (error) {\n\t\t\t// A stale active pointer or corrupt active session should not hide a\n\t\t\t// recoverable stored/completed copy with the same id.\n\t\t\tactiveReadError = error;\n\t\t}\n\t}\n\n\ttry {\n\t\tconst session = await readSessionFromPath(\n\t\t\tgetSessionPath(worktree, sessionId, \"stored\"),\n\t\t);\n\t\treturn {\n\t\t\tsession,\n\t\t\tsource: \"stored\",\n\t\t\tactive: false,\n\t\t\tpath: relative(worktree, getStoredSessionDir(worktree, sessionId)),\n\t\t};\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst completed = await findNewestCompletedSession(worktree, sessionId);\n\tif (!completed) {\n\t\tif (activeReadError) {\n\t\t\tthrow activeReadError;\n\t\t}\n\t\treturn null;\n\t}\n\n\tconst session = await readSessionFromPath(\n\t\tgetCompletedSessionPath(worktree, completed.completedDirName),\n\t);\n\treturn {\n\t\tsession,\n\t\tsource: \"completed\",\n\t\tactive: false,\n\t\tpath: completed.completedTo,\n\t\tcompletedPath: completed.completedTo,\n\t\tcompletedAt: completed.completedAt,\n\t};\n}\n\nexport async function listSessionHistory(worktree: string): Promise<{\n\tactiveSessionId: string | null;\n\tactive: SessionHistoryEntry | null;\n\tstored: SessionHistoryEntry[];\n\tcompleted: CompletedSessionHistoryEntry[];\n}> {\n\tconst activeSessionId = await readActiveSessionId(worktree);\n\tlet active: SessionHistoryEntry | null = null;\n\tif (activeSessionId) {\n\t\ttry {\n\t\t\tconst session = await readSessionFromPath(\n\t\t\t\tgetSessionPath(worktree, activeSessionId, \"active\"),\n\t\t\t);\n\t\t\tactive = toHistoryEntry(\n\t\t\t\tworktree,\n\t\t\t\tsession,\n\t\t\t\tgetActiveSessionDir(worktree, activeSessionId),\n\t\t\t\tactiveSessionId,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tactive = toInvalidHistoryEntry(\n\t\t\t\tworktree,\n\t\t\t\tactiveSessionId,\n\t\t\t\tgetActiveSessionDir(worktree, activeSessionId),\n\t\t\t\terror,\n\t\t\t\tactiveSessionId,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst storedRoot = getStoredSessionsDir(worktree);\n\tconst completedRoot = getCompletedSessionsDir(worktree);\n\n\tconst stored: SessionHistoryEntry[] = [];\n\tfor (const entry of await readDirectoryEntries(storedRoot)) {\n\t\tif (!entry.isDirectory()) continue;\n\t\tconst sessionId = entry.name;\n\t\ttry {\n\t\t\tconst session = await readSessionFromPath(\n\t\t\t\tgetSessionPath(worktree, sessionId, \"stored\"),\n\t\t\t);\n\t\t\tstored.push(\n\t\t\t\ttoHistoryEntry(\n\t\t\t\t\tworktree,\n\t\t\t\t\tsession,\n\t\t\t\t\tgetStoredSessionDir(worktree, sessionId),\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tstored.push(\n\t\t\t\ttoInvalidHistoryEntry(\n\t\t\t\t\tworktree,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tgetStoredSessionDir(worktree, sessionId),\n\t\t\t\t\terror,\n\t\t\t\t\tactiveSessionId,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\tstored.sort((left, right) =>\n\t\tcompareIsoDescending(left.updatedAt, right.updatedAt),\n\t);\n\n\tconst completed: CompletedSessionHistoryEntry[] = [];\n\tfor (const entry of await readDirectoryEntries(completedRoot)) {\n\t\tif (!entry.isDirectory()) continue;\n\t\tconst completedDir = getCompletedSessionDir(worktree, entry.name);\n\t\tconst parsed = parseCompletedDirectoryName(entry.name);\n\t\ttry {\n\t\t\tconst session = await readSessionFromPath(\n\t\t\t\tgetCompletedSessionPath(worktree, entry.name),\n\t\t\t);\n\t\t\tcompleted.push({\n\t\t\t\t...toHistoryEntry(worktree, session, completedDir, null),\n\t\t\t\tcompletedPath: relative(worktree, completedDir),\n\t\t\t\tcompletedAt: parsed.completedAt,\n\t\t\t\tactive: false,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tcompleted.push({\n\t\t\t\t...toInvalidHistoryEntry(\n\t\t\t\t\tworktree,\n\t\t\t\t\tparsed.sessionId,\n\t\t\t\t\tcompletedDir,\n\t\t\t\t\terror,\n\t\t\t\t\tnull,\n\t\t\t\t),\n\t\t\t\tcompletedPath: relative(worktree, completedDir),\n\t\t\t\tcompletedAt: parsed.completedAt,\n\t\t\t\tactive: false,\n\t\t\t});\n\t\t}\n\t}\n\tcompleted.sort((left, right) =>\n\t\tcompareCompletedDescending(\n\t\t\tleft.completedAt ?? left.updatedAt,\n\t\t\tright.completedAt ?? right.updatedAt,\n\t\t),\n\t);\n\n\treturn { activeSessionId, active, stored, completed };\n}\n",
|
|
22
|
-
"import { join, relative } from \"node:path\";\n\nexport class InvalidFlowPathInputError extends Error {\n\treadonly code = \"INVALID_FLOW_PATH_INPUT\";\n\n\tconstructor(\n\t\tkind:\n\t\t\t| \"session\"\n\t\t\t| \"feature\"\n\t\t\t| \"completed\"\n\t\t\t| \"audit\"\n\t\t\t| \"event\"\n\t\t\t| \"checkpoint\"\n\t\t\t| \"projection\"\n\t\t\t| \"lock\",\n\t\tvalue: string,\n\t) {\n\t\tsuper(`Invalid ${kind} id '${value}'.`);\n\t\tthis.name = \"InvalidFlowPathInputError\";\n\t}\n}\n\nexport type LiveSessionLocation = \"active\" | \"stored\";\n\nfunction sanitizePathComponent(\n\tkind:\n\t\t| \"session\"\n\t\t| \"feature\"\n\t\t| \"completed\"\n\t\t| \"audit\"\n\t\t| \"event\"\n\t\t| \"checkpoint\"\n\t\t| \"projection\"\n\t\t| \"lock\",\n\tvalue: string,\n): string {\n\tif (\n\t\tvalue.length === 0 ||\n\t\tvalue === \".\" ||\n\t\tvalue === \"..\" ||\n\t\tvalue.includes(\"..\") ||\n\t\tvalue.startsWith(\"/\") ||\n\t\tvalue.includes(\"/\") ||\n\t\tvalue.includes(\"\\\\\") ||\n\t\tvalue.split(/[/\\\\]+/).includes(\"..\")\n\t) {\n\t\tthrow new InvalidFlowPathInputError(kind, value);\n\t}\n\n\treturn value;\n}\n\nexport function assertDescendant(base: string, target: string): string {\n\tconst rel = relative(base, target);\n\tif (\n\t\trel === \"..\" ||\n\t\trel.startsWith(`..${\"/\"}`) ||\n\t\trel.startsWith(`..${\"\\\\\"}`)\n\t) {\n\t\tthrow new InvalidFlowPathInputError(\"session\", target);\n\t}\n\n\treturn target;\n}\n\nexport function getFlowDir(worktree: string): string {\n\treturn join(worktree, \".flow\");\n}\n\nexport function getActiveSessionsDir(worktree: string): string {\n\treturn join(getFlowDir(worktree), \"active\");\n}\n\nexport function getStoredSessionsDir(worktree: string): string {\n\treturn join(getFlowDir(worktree), \"stored\");\n}\n\nexport function getCompletedSessionsDir(worktree: string): string {\n\treturn join(getFlowDir(worktree), \"completed\");\n}\n\nfunction getLiveSessionsDir(\n\tworktree: string,\n\tlocation: LiveSessionLocation,\n): string {\n\treturn location === \"active\"\n\t\t? getActiveSessionsDir(worktree)\n\t\t: getStoredSessionsDir(worktree);\n}\n\nexport function getSessionDir(\n\tworktree: string,\n\tsessionId: string,\n\tlocation: LiveSessionLocation = \"active\",\n): string {\n\tconst root = getLiveSessionsDir(worktree, location);\n\treturn assertDescendant(\n\t\troot,\n\t\tjoin(root, sanitizePathComponent(\"session\", sessionId)),\n\t);\n}\n\nexport function getActiveSessionDir(\n\tworktree: string,\n\tsessionId: string,\n): string {\n\treturn getSessionDir(worktree, sessionId, \"active\");\n}\n\nexport function getStoredSessionDir(\n\tworktree: string,\n\tsessionId: string,\n): string {\n\treturn getSessionDir(worktree, sessionId, \"stored\");\n}\n\nexport function getCompletedSessionDir(\n\tworktree: string,\n\tcompletedDirName: string,\n): string {\n\tconst completedRoot = getCompletedSessionsDir(worktree);\n\treturn assertDescendant(\n\t\tcompletedRoot,\n\t\tjoin(completedRoot, sanitizePathComponent(\"completed\", completedDirName)),\n\t);\n}\n\nexport function getSessionPath(\n\tworktree: string,\n\tsessionId: string,\n\tlocation: LiveSessionLocation = \"active\",\n): string {\n\treturn getSessionPathFromDir(getSessionDir(worktree, sessionId, location));\n}\n\nexport function getActiveSessionPath(\n\tworktree: string,\n\tsessionId: string,\n): string {\n\treturn getSessionPath(worktree, sessionId, \"active\");\n}\n\nexport function getCompletedSessionPath(\n\tworktree: string,\n\tcompletedDirName: string,\n): string {\n\treturn getSessionPathFromDir(\n\t\tgetCompletedSessionDir(worktree, completedDirName),\n\t);\n}\n\nexport function getSessionPathFromDir(sessionDir: string): string {\n\treturn join(sessionDir, \"session.json\");\n}\n\nfunction getDocsDirFromSessionDir(sessionDir: string): string {\n\treturn join(sessionDir, \"docs\");\n}\n\nexport function getFeaturesDocsDirFromSessionDir(sessionDir: string): string {\n\treturn join(getDocsDirFromSessionDir(sessionDir), \"features\");\n}\n\nexport function getIndexDocPath(\n\tworktree: string,\n\tsessionId: string,\n\tlocation: LiveSessionLocation = \"active\",\n): string {\n\treturn getIndexDocPathFromSessionDir(\n\t\tgetSessionDir(worktree, sessionId, location),\n\t);\n}\n\nexport function getIndexDocPathFromSessionDir(sessionDir: string): string {\n\treturn join(getDocsDirFromSessionDir(sessionDir), \"index.md\");\n}\n\nexport function getFeatureDocPath(\n\tworktree: string,\n\tsessionId: string,\n\tfeatureId: string,\n\tlocation: LiveSessionLocation = \"active\",\n): string {\n\treturn getFeatureDocPathFromSessionDir(\n\t\tgetSessionDir(worktree, sessionId, location),\n\t\tfeatureId,\n\t);\n}\n\nexport function getFeatureDocPathFromSessionDir(\n\tsessionDir: string,\n\tfeatureId: string,\n): string {\n\tconst featuresDir = getFeaturesDocsDirFromSessionDir(sessionDir);\n\treturn assertDescendant(\n\t\tfeaturesDir,\n\t\tjoin(featuresDir, `${sanitizePathComponent(\"feature\", featureId)}.md`),\n\t);\n}\n",
|
|
23
|
-
"import { readdir, rename, stat } from \"node:fs/promises\";\nimport { relative } from \"node:path\";\nimport { getCompletedSessionDir, getCompletedSessionsDir } from \"./paths\";\nimport type { Session } from \"./schema\";\nimport { toCompletedTimestamp } from \"./util\";\nimport type { MutableWorkspaceRoot } from \"./workspace-root\";\n\nexport type CompletedSessionLocation = {\n\tsessionId: string;\n\tcompletedAt: string | null;\n\tcompletedDirName: string;\n\tcompletedDir: string;\n\tcompletedTo: string;\n};\n\nfunction completedDirectoryName(\n\tsessionId: string,\n\tcompletedAt: string,\n\tattempt = 0,\n): string {\n\treturn `${sessionId}-${completedAt}${attempt === 0 ? \"\" : `-${attempt}`}`;\n}\n\nexport function completedTimestampForSession(session: Session): string {\n\treturn toCompletedTimestamp(\n\t\tsession.timestamps.completedAt ?? session.timestamps.updatedAt,\n\t);\n}\n\nexport function parseCompletedDirectoryName(directoryName: string): {\n\tsessionId: string;\n\tcompletedAt: string | null;\n} {\n\tconst match = directoryName.match(\n\t\t/^(.*)-(\\d{8}T\\d{6}(?:\\.\\d{3})?(?:-\\d+)?)$/,\n\t);\n\tif (!match) {\n\t\treturn { sessionId: directoryName, completedAt: null };\n\t}\n\n\treturn {\n\t\tsessionId: match[1] ?? directoryName,\n\t\tcompletedAt: match[2] ?? null,\n\t};\n}\n\nexport function compareCompletedDescending(\n\tleft: string | null,\n\tright: string | null,\n): number {\n\tconst normalize = (value: string | null): [string, number] => {\n\t\tif (!value) return [\"\", -1];\n\t\tconst match = value.match(/^(.*?)(?:-(\\d+))?$/);\n\t\treturn [\n\t\t\tmatch?.[1] ?? value,\n\t\t\tmatch?.[2] ? Number.parseInt(match[2], 10) : 0,\n\t\t];\n\t};\n\n\tconst [rightBase, rightSuffix] = normalize(right);\n\tconst [leftBase, leftSuffix] = normalize(left);\n\tconst baseComparison = rightBase.localeCompare(leftBase);\n\tif (baseComparison !== 0) {\n\t\treturn baseComparison;\n\t}\n\n\treturn rightSuffix - leftSuffix;\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n\ttry {\n\t\tawait stat(path);\n\t\treturn true;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nfunction buildCompletedSessionLocation(\n\tworktree: string,\n\tsessionId: string,\n\tcompletedDirName: string,\n\tcompletedAt: string | null,\n): CompletedSessionLocation {\n\tconst completedDir = getCompletedSessionDir(worktree, completedDirName);\n\treturn {\n\t\tsessionId,\n\t\tcompletedAt,\n\t\tcompletedDirName,\n\t\tcompletedDir,\n\t\tcompletedTo: relative(worktree, completedDir),\n\t};\n}\n\nexport async function allocateCompletedSessionLocation(\n\tworktree: MutableWorkspaceRoot,\n\tsessionId: string,\n\tcompletedAt: string,\n): Promise<CompletedSessionLocation> {\n\tfor (let attempt = 0; ; attempt += 1) {\n\t\tconst completedDirName = completedDirectoryName(\n\t\t\tsessionId,\n\t\t\tcompletedAt,\n\t\t\tattempt,\n\t\t);\n\t\tconst location = buildCompletedSessionLocation(\n\t\t\tworktree,\n\t\t\tsessionId,\n\t\t\tcompletedDirName,\n\t\t\tcompletedAt,\n\t\t);\n\t\tif (!(await pathExists(location.completedDir))) {\n\t\t\treturn location;\n\t\t}\n\t}\n}\n\nexport async function moveSessionDirToCompleted(\n\tworktree: MutableWorkspaceRoot,\n\tsessionId: string,\n\tsourceDir: string,\n\tcompletedAt: string,\n): Promise<CompletedSessionLocation | null> {\n\tfor (let attempt = 0; ; attempt += 1) {\n\t\tconst completedDirName = completedDirectoryName(\n\t\t\tsessionId,\n\t\t\tcompletedAt,\n\t\t\tattempt,\n\t\t);\n\t\tconst location = buildCompletedSessionLocation(\n\t\t\tworktree,\n\t\t\tsessionId,\n\t\t\tcompletedDirName,\n\t\t\tcompletedAt,\n\t\t);\n\n\t\ttry {\n\t\t\tawait rename(sourceDir, location.completedDir);\n\t\t\treturn location;\n\t\t} catch (error) {\n\t\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\t\tif (code === \"ENOENT\") {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (code === \"EEXIST\" || code === \"ENOTEMPTY\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nexport async function findNewestCompletedSession(\n\tworktree: string,\n\tsessionId: string,\n): Promise<CompletedSessionLocation | null> {\n\tconst completedRoot = getCompletedSessionsDir(worktree);\n\tconst matches: CompletedSessionLocation[] = [];\n\n\tlet entries: Array<{ isDirectory(): boolean; name: string }>;\n\ttry {\n\t\tentries = await readdir(completedRoot, { withFileTypes: true });\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn null;\n\t\t}\n\t\tthrow error;\n\t}\n\n\tfor (const entry of entries) {\n\t\tif (!entry.isDirectory()) continue;\n\t\tconst parsed = parseCompletedDirectoryName(entry.name);\n\t\tif (parsed.sessionId !== sessionId) continue;\n\t\tmatches.push(\n\t\t\tbuildCompletedSessionLocation(\n\t\t\t\tworktree,\n\t\t\t\tsessionId,\n\t\t\t\tentry.name,\n\t\t\t\tparsed.completedAt,\n\t\t\t),\n\t\t);\n\t}\n\n\tmatches.sort((left, right) =>\n\t\tcompareCompletedDescending(left.completedAt, right.completedAt),\n\t);\n\treturn matches[0] ?? null;\n}\n",
|
|
24
|
-
"let nowIsoOverride: (() => string) | null = null;\n\nexport function setNowIsoOverride(fn: (() => string) | null): void {\n\tnowIsoOverride = fn;\n}\n\nexport function nowIso(): string {\n\treturn nowIsoOverride ? nowIsoOverride() : new Date().toISOString();\n}\n\nexport function toCompletedTimestamp(value: string): string {\n\treturn value.replace(/[-:]/g, \"\").replace(/Z$/, \"\");\n}\n\nexport function completedTimestampNow(): string {\n\treturn toCompletedTimestamp(nowIso());\n}\n",
|
|
25
25
|
"/**\n * Session doc rendering: the markdown views Flow derives from a session\n * snapshot (`docs/index.md` plus one doc per feature) and the change-aware\n * IO that writes them. These docs back the feature drilldown paths surfaced\n * in flow_status output; the structured data itself lives in the session\n * JSON, so sections here stay deliberately compact.\n */\nimport {\n\tmkdir,\n\treaddir,\n\treadFile,\n\trm,\n\tstat,\n\twriteFile,\n} from \"node:fs/promises\";\nimport {\n\tactiveDecisionGate,\n\tdecisionRequiresPause,\n\tsummarizeCompletion,\n} from \"./domain\";\nimport {\n\tgetFeatureDocPathFromSessionDir,\n\tgetFeaturesDocsDirFromSessionDir,\n\tgetIndexDocPathFromSessionDir,\n\tgetSessionDir,\n\ttype LiveSessionLocation,\n} from \"./paths\";\nimport type { Feature, Session } from \"./schema\";\nimport { deriveNextCommand } from \"./session-operator-state\";\nimport { assertMutableWorkspaceRoot } from \"./workspace-root\";\n\n// ---------------------------------------------------------------------------\n// Text helpers\n// ---------------------------------------------------------------------------\n\nfunction toInlineText(value: string): string {\n\treturn value.replace(/\\r?\\n+/g, \" / \").trim();\n}\n\nfunction bulletList(items: string[]): string {\n\tif (items.length === 0) {\n\t\treturn \"- none\";\n\t}\n\n\treturn items.map((item) => `- ${toInlineText(item)}`).join(\"\\n\");\n}\n\nfunction joinSections(sections: string[]): string {\n\treturn `${sections.filter(Boolean).join(\"\\n\\n\")}\\n`;\n}\n\nfunction maybeSection(title: string, items: string[]): string {\n\tif (items.length === 0) {\n\t\treturn \"\";\n\t}\n\n\treturn `## ${title}\\n\\n${bulletList(items)}`;\n}\n\nfunction maybeTitledList(title: string, items: string[], level = \"##\"): string {\n\tif (items.length === 0) {\n\t\treturn \"\";\n\t}\n\n\treturn `${level} ${title}\\n\\n${bulletList(items)}`;\n}\n\nfunction toQuotedBlock(value: string): string {\n\tconst normalized = value.trim();\n\tif (!normalized) {\n\t\treturn \"> none\";\n\t}\n\n\treturn normalized\n\t\t.split(/\\r?\\n/)\n\t\t.map((line) => `> ${line}`)\n\t\t.join(\"\\n\");\n}\n\nfunction maybeQuotedSection(\n\ttitle: string,\n\tvalue: string | null | undefined,\n): string {\n\tif (!value) {\n\t\treturn \"\";\n\t}\n\n\treturn `## ${title}\\n\\n${toQuotedBlock(value)}`;\n}\n\nfunction formatFollowUpLines(\n\titems: Array<{ summary: string; severity?: string | undefined }>,\n): string[] {\n\treturn items.map((item) =>\n\t\titem.severity ? `${item.summary} (${item.severity})` : item.summary,\n\t);\n}\n\nfunction maybeListLine(label: string, items: string[] | undefined): string[] {\n\treturn items && items.length > 0\n\t\t? [`${label}: ${items.map(toInlineText).join(\", \")}`]\n\t\t: [];\n}\n\n// ---------------------------------------------------------------------------\n// Record line formatters\n// ---------------------------------------------------------------------------\n\ntype ArtifactRecord = Session[\"artifacts\"][number];\ntype ValidationRecord = Session[\"execution\"][\"lastValidationRun\"][number];\ntype ExecutionHistoryEntry = Session[\"execution\"][\"history\"][number];\ntype ReviewerDecision = NonNullable<ExecutionHistoryEntry[\"reviewerDecision\"]>;\n\nfunction renderArtifactLine(artifact: ArtifactRecord): string {\n\treturn artifact.kind ? `${artifact.path} (${artifact.kind})` : artifact.path;\n}\n\nfunction renderValidationLine(item: ValidationRecord): string {\n\treturn `${item.status} | ${item.command} | ${item.summary}`;\n}\n\nfunction renderExecutionHistoryLine(item: ExecutionHistoryEntry): string {\n\treturn `${item.recordedAt} | ${item.featureId} | ${item.status} | ${item.summary}`;\n}\n\nfunction renderOutcomeLines(\n\toutcome:\n\t\t| {\n\t\t\t\tkind: string;\n\t\t\t\tcategory?: string | undefined;\n\t\t\t\tsummary?: string | undefined;\n\t\t\t\tresolutionHint?: string | undefined;\n\t\t\t\tretryable?: boolean | undefined;\n\t\t\t\tautoResolvable?: boolean | undefined;\n\t\t\t\tneedsHuman?: boolean | undefined;\n\t\t }\n\t\t| null\n\t\t| undefined,\n): string[] {\n\tif (!outcome) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t`kind: ${outcome.kind}`,\n\t\t...(outcome.category\n\t\t\t? [`category: ${toInlineText(outcome.category)}`]\n\t\t\t: []),\n\t\t...(outcome.summary ? [`summary: ${toInlineText(outcome.summary)}`] : []),\n\t\t...(outcome.resolutionHint\n\t\t\t? [`resolution hint: ${toInlineText(outcome.resolutionHint)}`]\n\t\t\t: []),\n\t\t...(outcome.retryable !== undefined\n\t\t\t? [`retryable: ${outcome.retryable ? \"yes\" : \"no\"}`]\n\t\t\t: []),\n\t\t...(outcome.autoResolvable !== undefined\n\t\t\t? [`auto resolvable: ${outcome.autoResolvable ? \"yes\" : \"no\"}`]\n\t\t\t: []),\n\t\t...(outcome.needsHuman !== undefined\n\t\t\t? [`needs human: ${outcome.needsHuman ? \"yes\" : \"no\"}`]\n\t\t\t: []),\n\t];\n}\n\n// ---------------------------------------------------------------------------\n// Review rendering (shared between reviewer decisions and review payloads)\n// ---------------------------------------------------------------------------\n\ntype ReviewDetails = {\n\treviewDepth?: string | undefined;\n\treviewedSurfaces?: string[] | undefined;\n\tevidenceSummary?: string | undefined;\n\tvalidationAssessment?: string | undefined;\n\tevidenceRefs?:\n\t\t| {\n\t\t\t\tchangedArtifacts: string[];\n\t\t\t\tvalidationCommands: string[];\n\t\t }\n\t\t| undefined;\n\tintegrationChecks?: string[] | undefined;\n\tregressionChecks?: string[] | undefined;\n\tremainingGaps?: string[] | undefined;\n};\n\nfunction reviewDetailLines(review: ReviewDetails): string[] {\n\treturn [\n\t\t...(review.reviewDepth ? [`review depth: ${review.reviewDepth}`] : []),\n\t\t...maybeListLine(\"reviewed surfaces\", review.reviewedSurfaces),\n\t\t...(review.evidenceSummary\n\t\t\t? [`evidence: ${toInlineText(review.evidenceSummary)}`]\n\t\t\t: []),\n\t\t...(review.validationAssessment\n\t\t\t? [`validation assessment: ${toInlineText(review.validationAssessment)}`]\n\t\t\t: []),\n\t\t...maybeListLine(\n\t\t\t\"evidence changed artifacts\",\n\t\t\treview.evidenceRefs?.changedArtifacts,\n\t\t),\n\t\t...maybeListLine(\n\t\t\t\"evidence validation commands\",\n\t\t\treview.evidenceRefs?.validationCommands,\n\t\t),\n\t\t...maybeListLine(\"integration checks\", review.integrationChecks),\n\t\t...maybeListLine(\"regression checks\", review.regressionChecks),\n\t\t...maybeListLine(\"remaining gaps\", review.remainingGaps),\n\t];\n}\n\nfunction renderReviewerDecisionLines(decision: ReviewerDecision): string[] {\n\treturn [\n\t\t`scope: ${decision.scope}`,\n\t\t...(decision.scope === \"feature\"\n\t\t\t? [`feature id: ${decision.featureId}`]\n\t\t\t: reviewDetailLines(decision)),\n\t\t`status: ${decision.status}`,\n\t\t`summary: ${decision.summary}`,\n\t];\n}\n\nfunction renderReviewBlock(\n\ttitle: string,\n\treview:\n\t\t| (ReviewDetails & {\n\t\t\t\tstatus: string;\n\t\t\t\tsummary: string;\n\t\t\t\tblockingFindings: Array<{ summary: string }>;\n\t\t })\n\t\t| undefined,\n): string {\n\tif (!review) {\n\t\treturn \"\";\n\t}\n\n\tconst lines = [\n\t\t`- status: ${review.status}`,\n\t\t...reviewDetailLines(review).map((line) => `- ${line}`),\n\t\t`- summary: ${toInlineText(review.summary)}`,\n\t\t...(review.blockingFindings.length > 0\n\t\t\t? [bulletList(review.blockingFindings.map((item) => item.summary))]\n\t\t\t: []),\n\t];\n\n\treturn `#### ${title}\\n\\n${lines.join(\"\\n\")}`;\n}\n\n// ---------------------------------------------------------------------------\n// Feature doc\n// ---------------------------------------------------------------------------\n\nfunction renderFeatureHistoryEntrySections(\n\tentry: ExecutionHistoryEntry,\n): string[] {\n\treturn [\n\t\tmaybeTitledList(\n\t\t\t\"Changed Artifacts\",\n\t\t\tentry.artifactsChanged.map(renderArtifactLine),\n\t\t\t\"####\",\n\t\t),\n\t\tmaybeTitledList(\n\t\t\t\"Validation\",\n\t\t\tentry.validationRun.map(renderValidationLine),\n\t\t\t\"####\",\n\t\t),\n\t\tmaybeTitledList(\n\t\t\t\"Decisions\",\n\t\t\tentry.decisions.map((item) => item.summary),\n\t\t\t\"####\",\n\t\t),\n\t\tentry.reviewerDecision\n\t\t\t? maybeTitledList(\n\t\t\t\t\t\"Reviewer Decision\",\n\t\t\t\t\trenderReviewerDecisionLines(entry.reviewerDecision),\n\t\t\t\t\t\"####\",\n\t\t\t\t)\n\t\t\t: \"\",\n\t\tentry.outcome\n\t\t\t? maybeTitledList(\"Outcome\", renderOutcomeLines(entry.outcome), \"####\")\n\t\t\t: \"\",\n\t\tmaybeTitledList(\n\t\t\t\"Notes\",\n\t\t\tentry.featureResult?.notes?.map((item) => item.note) ?? [],\n\t\t\t\"####\",\n\t\t),\n\t\tmaybeTitledList(\n\t\t\t\"Follow Ups\",\n\t\t\tformatFollowUpLines(entry.featureResult?.followUps ?? []),\n\t\t\t\"####\",\n\t\t),\n\t\trenderReviewBlock(\"Feature Review\", entry.featureReview),\n\t\trenderReviewBlock(\"Final Review\", entry.finalReview),\n\t].filter(Boolean);\n}\n\nfunction renderFeatureHistory(session: Session, feature: Feature): string {\n\tconst entries = session.execution.history.filter(\n\t\t(entry) => entry.featureId === feature.id,\n\t);\n\tif (entries.length === 0) {\n\t\treturn \"## Execution History\\n\\n- none\";\n\t}\n\n\tconst renderedEntries = entries.map((entry) =>\n\t\tjoinSections([\n\t\t\t`### ${entry.recordedAt}\\n\\n- status: ${entry.status}\\n- outcome: ${entry.outcomeKind ?? \"none\"}\\n- summary: ${toInlineText(entry.summary)}\\n- next step: ${entry.nextStep ? toInlineText(entry.nextStep) : \"none\"}`,\n\t\t\t...renderFeatureHistoryEntrySections(entry),\n\t\t]).trimEnd(),\n\t);\n\n\treturn `## Execution History\\n\\n${renderedEntries.join(\"\\n\\n\")}`;\n}\n\nexport function renderFeatureDoc(session: Session, feature: Feature): string {\n\tconst isActive = session.execution.activeFeatureId === feature.id;\n\n\treturn joinSections([\n\t\t`# Feature ${feature.id}`,\n\t\t`## Summary\n\n- title: ${toInlineText(feature.title)}\n- status: ${feature.status}\n- active: ${isActive ? \"yes\" : \"no\"}\n- goal: ${toInlineText(session.goal)}`,\n\t\t`## Description\\n\\n${toQuotedBlock(feature.summary)}`,\n\t\tmaybeQuotedSection(\n\t\t\t\"Latest Runtime Summary\",\n\t\t\tsession.execution.lastFeatureId === feature.id\n\t\t\t\t? session.execution.lastSummary\n\t\t\t\t: null,\n\t\t),\n\t\t`## File Targets\\n\\n${bulletList(feature.fileTargets)}`,\n\t\t`## Verification\\n\\n${bulletList(feature.verification)}`,\n\t\tmaybeSection(\"Depends On\", feature.dependsOn ?? []),\n\t\tmaybeSection(\"Blocked By\", feature.blockedBy ?? []),\n\t\trenderFeatureHistory(session, feature),\n\t]);\n}\n\n// ---------------------------------------------------------------------------\n// Index doc\n// ---------------------------------------------------------------------------\n\nfunction renderIndexSummarySection(session: Session): string {\n\tconst reviewerDecision = session.execution.lastReviewerDecision;\n\tconst decisionGate = activeDecisionGate(session);\n\tconst summaryLines = [\n\t\t`- session id: ${session.id}`,\n\t\t`- goal: ${toInlineText(session.goal)}`,\n\t\t`- status: ${session.status}`,\n\t\t`- closure: ${session.closure ? `${session.closure.kind} | ${toInlineText(session.closure.summary)}` : \"open\"}`,\n\t\t`- approval: ${session.approval}`,\n\t\t`- next command: ${deriveNextCommand(session)}`,\n\t\t`- next step: ${session.execution.lastNextStep ? toInlineText(session.execution.lastNextStep) : \"none\"}`,\n\t\t...(decisionGate\n\t\t\t? [\n\t\t\t\t\t`- decision gate: ${decisionGate.status} | ${decisionGate.domain} | ${toInlineText(decisionGate.question)}`,\n\t\t\t\t]\n\t\t\t: []),\n\t\t`- reviewer decision: ${reviewerDecision ? `${reviewerDecision.scope} | ${reviewerDecision.reviewPurpose ?? \"inferred\"} | ${reviewerDecision.status} | ${toInlineText(reviewerDecision.summary)}` : \"none\"}`,\n\t\t`- created: ${session.timestamps.createdAt}`,\n\t];\n\n\treturn `## Summary\n\n${summaryLines.join(\"\\n\")}`;\n}\n\nfunction renderPlanOverviewLines(\n\tsession: Session,\n\tfeatures: Feature[],\n): string[] {\n\tconst plan = session.plan;\n\tconst activeFeature =\n\t\tfeatures.find(\n\t\t\t(feature) => feature.id === session.execution.activeFeatureId,\n\t\t) ?? null;\n\tconst completion = summarizeCompletion(session);\n\tconst completedCount =\n\t\tcompletion?.completedFeatures ??\n\t\tfeatures.filter((feature) => feature.status === \"completed\").length;\n\n\tconst planLines = [\n\t\t`- summary: ${toInlineText(plan?.summary ?? \"No plan yet.\")}`,\n\t\t`- overview: ${toInlineText(plan?.overview ?? \"No plan yet.\")}`,\n\t\t...(session.planning.packageManager\n\t\t\t? [`- package manager: ${session.planning.packageManager}`]\n\t\t\t: []),\n\t\t...(session.planning.packageManagerAmbiguous\n\t\t\t? [\n\t\t\t\t\t\"- package manager evidence: ambiguous (multiple lockfile families detected in the same directory)\",\n\t\t\t\t]\n\t\t\t: []),\n\t\t`- progress: ${completedCount}/${features.length} completed`,\n\t\t`- active feature: ${activeFeature ? activeFeature.id : \"none\"}`,\n\t];\n\n\tif (!completion) {\n\t\treturn planLines;\n\t}\n\n\treturn [\n\t\t...planLines,\n\t\t`- completion target: ${completion.targetCompletedFeatures}/${completion.totalFeatures} features`,\n\t\t`- stop rule: ${plan?.deliveryPolicy?.stopRule ?? \"ship_when_clean\"}`,\n\t\t`- priority mode: ${plan?.deliveryPolicy?.priorityMode ?? \"balanced\"}`,\n\t\t`- final review policy: ${plan?.deliveryPolicy?.finalReviewPolicy ?? \"detailed\"}`,\n\t\t`- defer allowed: ${plan?.deliveryPolicy?.deferAllowed ? \"yes\" : \"no\"}`,\n\t\t`- pending allowed at completion: ${completion.canCompleteWithPendingFeatures ? \"yes\" : \"no\"}`,\n\t\t`- active feature triggers session completion: ${completion.activeFeatureTriggersSessionCompletion ? \"yes\" : \"no\"}`,\n\t];\n}\n\nfunction maybeApproachSection(session: Session): string {\n\tconst approach = session.planning.implementationApproach;\n\tif (!approach) {\n\t\treturn \"\";\n\t}\n\n\treturn joinSections([\n\t\t\"## Implementation Approach\\n\\n\" +\n\t\t\t`- chosen direction: ${toInlineText(approach.chosenDirection)}`,\n\t\tmaybeTitledList(\"Key Constraints\", approach.keyConstraints, \"###\"),\n\t\tmaybeTitledList(\"Validation Signals\", approach.validationSignals, \"###\"),\n\t\tmaybeTitledList(\"Sources\", approach.sources, \"###\"),\n\t]).trimEnd();\n}\n\nfunction maybeDecisionLogSection(session: Session): string {\n\tconst decisions = session.planning.decisionLog;\n\tif (decisions.length === 0) {\n\t\treturn \"\";\n\t}\n\n\treturn `## Decision Log\\n\\n${bulletList(\n\t\tdecisions.map(\n\t\t\t(decision) =>\n\t\t\t\t`${decision.decisionDomain} | ${decision.decisionMode} | pause: ${decisionRequiresPause(decision.decisionMode) ? \"yes\" : \"no\"} | ${toInlineText(decision.question)} | recommended: ${toInlineText(decision.recommendation)} | options: ${decision.options.map((option) => toInlineText(option.label)).join(\", \")}`,\n\t\t),\n\t)}`;\n}\n\nfunction maybeReplanLogSection(session: Session): string {\n\tconst replans = session.planning.replanLog;\n\tif (replans.length === 0) {\n\t\treturn \"\";\n\t}\n\n\treturn `## Replan Log\\n\\n${bulletList(\n\t\treplans.map(\n\t\t\t(replan) =>\n\t\t\t\t`${replan.recordedAt} | ${replan.reason} | ${toInlineText(replan.summary)} | failed assumption: ${toInlineText(replan.failedAssumption)} | adjust: ${toInlineText(replan.recommendedAdjustment)}`,\n\t\t),\n\t)}`;\n}\n\nfunction maybeStackProfileSection(session: Session): string {\n\tconst profile = session.planning.stackProfile;\n\tif (!profile) {\n\t\treturn \"\";\n\t}\n\n\tconst sections: Array<{ label: string; entries: Array<{ name: string }> }> = [\n\t\t{ label: \"languages\", entries: profile.languages },\n\t\t{ label: \"frameworks\", entries: profile.frameworks },\n\t\t{ label: \"runtimes\", entries: profile.runtimes },\n\t\t{ label: \"package managers\", entries: profile.packageManagers },\n\t\t{ label: \"tools\", entries: profile.tools },\n\t];\n\n\tconst lines = sections\n\t\t.map(({ label, entries }) => {\n\t\t\tconst names = entries.map((entry) => entry.name);\n\t\t\treturn names.length > 0 ? `- ${label}: ${names.join(\", \")}` : \"\";\n\t\t})\n\t\t.filter(Boolean);\n\n\treturn lines.length === 0 ? \"\" : `## Stack Profile\\n\\n${lines.join(\"\\n\")}`;\n}\n\nfunction maybeStandardsProfileSection(session: Session): string {\n\tconst profile = session.planning.standardsProfile;\n\tif (!profile) {\n\t\treturn \"\";\n\t}\n\n\tconst lines = [\n\t\t...profile.precedence.map((item) => `- precedence: ${toInlineText(item)}`),\n\t\t...profile.localGuidelines.map(\n\t\t\t(item) => `- local: ${toInlineText(item.title)} | ${item.reference}`,\n\t\t),\n\t\t...profile.externalGuidance.map(\n\t\t\t(item) => `- external: ${toInlineText(item.title)} | ${item.reference}`,\n\t\t),\n\t\t...profile.rules.map((item) => `- rule: ${toInlineText(item.summary)}`),\n\t\t...profile.gaps.map(\n\t\t\t(item) =>\n\t\t\t\t`- gap: ${toInlineText(item.stackItem)} | ${toInlineText(item.reason)} | research: ${item.suggestedResearch.map(toInlineText).join(\", \")}`,\n\t\t),\n\t];\n\n\treturn lines.length === 0\n\t\t? \"\"\n\t\t: `## Standards Profile\\n\\n${lines.join(\"\\n\")}`;\n}\n\nfunction renderPlanSection(session: Session, features: Feature[]): string {\n\tconst plan = session.plan;\n\n\treturn joinSections([\n\t\t`## Plan\n\n${renderPlanOverviewLines(session, features).join(\"\\n\")}`,\n\t\tmaybeSection(\"Requirements\", plan?.requirements ?? []),\n\t\tmaybeSection(\"Architecture Decisions\", plan?.architectureDecisions ?? []),\n\t\tmaybeSection(\"Repo Profile\", session.planning.repoProfile),\n\t\tmaybeStackProfileSection(session),\n\t\tmaybeStandardsProfileSection(session),\n\t\tmaybeSection(\"Research\", session.planning.research),\n\t\tmaybeApproachSection(session),\n\t\tmaybeDecisionLogSection(session),\n\t\tmaybeReplanLogSection(session),\n\t]).trimEnd();\n}\n\nfunction renderFeatureResultDetails(\n\tfeatureResult: Session[\"execution\"][\"lastFeatureResult\"],\n): string {\n\tif (!featureResult) {\n\t\treturn \"\";\n\t}\n\n\tconst sections = [\n\t\tmaybeTitledList(\n\t\t\t\"Notes\",\n\t\t\tfeatureResult.notes?.map((item) => item.note) ?? [],\n\t\t\t\"###\",\n\t\t),\n\t\tmaybeTitledList(\n\t\t\t\"Follow Ups\",\n\t\t\tformatFollowUpLines(featureResult.followUps ?? []),\n\t\t\t\"###\",\n\t\t),\n\t].filter(Boolean);\n\n\treturn joinSections([\n\t\t`## Feature Result\\n\\n- feature id: ${featureResult.featureId}\\n- verification: ${featureResult.verificationStatus ?? \"not_recorded\"}`,\n\t\t...sections,\n\t]).trimEnd();\n}\n\nexport function renderIndexDoc(session: Session): string {\n\tconst features = session.plan?.features ?? [];\n\n\treturn joinSections([\n\t\t\"# Flow Session\",\n\t\trenderIndexSummarySection(session),\n\t\trenderPlanSection(session, features),\n\t\t`## Features\\n\\n${\n\t\t\tfeatures.length === 0\n\t\t\t\t? \"- none\"\n\t\t\t\t: features\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(feature) =>\n\t\t\t\t\t\t\t\t`- ${feature.id} | ${feature.status} | ${toInlineText(feature.title)}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"\\n\")\n\t\t}`,\n\t\tsession.execution.lastOutcome\n\t\t\t? `## Outcome\\n\\n${bulletList(renderOutcomeLines(session.execution.lastOutcome))}`\n\t\t\t: \"\",\n\t\trenderFeatureResultDetails(session.execution.lastFeatureResult),\n\t\tmaybeSection(\"Notes\", session.notes),\n\t\tsession.artifacts.length > 0\n\t\t\t? `## Changed Artifacts\\n\\n${bulletList(session.artifacts.map(renderArtifactLine))}`\n\t\t\t: \"\",\n\t\tsession.execution.lastValidationRun.length > 0\n\t\t\t? `## Last Validation Run\\n\\n${bulletList(session.execution.lastValidationRun.map(renderValidationLine))}`\n\t\t\t: \"\",\n\t\tsession.execution.history.length > 0\n\t\t\t? `## Execution History\\n\\n${bulletList(session.execution.history.map(renderExecutionHistoryLine))}`\n\t\t\t: \"\",\n\t]);\n}\n\n// ---------------------------------------------------------------------------\n// Doc IO\n// ---------------------------------------------------------------------------\n\ntype RenderedDoc = {\n\tpath: string;\n\tcontent: string;\n};\nconst preparedFeaturesDocsDirs = new Set<string>();\n\nfunction createContentHash(input: string): string {\n\tlet hash = 2166136261;\n\n\tfor (let index = 0; index < input.length; index += 1) {\n\t\thash ^= input.charCodeAt(index);\n\t\thash = Math.imul(hash, 16777619);\n\t}\n\n\treturn (hash >>> 0).toString(16).padStart(8, \"0\");\n}\n\nasync function writeDocIfChanged(doc: RenderedDoc): Promise<boolean> {\n\tconst nextHash = createContentHash(doc.content);\n\n\ttry {\n\t\tconst previousContent = await readFile(doc.path, \"utf8\");\n\t\tif (createContentHash(previousContent) === nextHash) {\n\t\t\treturn false;\n\t\t}\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tawait writeFile(doc.path, doc.content, \"utf8\");\n\treturn true;\n}\n\nasync function ensureSessionDocDirs(sessionDir: string): Promise<void> {\n\tconst featuresDir = getFeaturesDocsDirFromSessionDir(sessionDir);\n\tif (preparedFeaturesDocsDirs.has(featuresDir)) {\n\t\ttry {\n\t\t\tawait stat(featuresDir);\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\t\tpreparedFeaturesDocsDirs.delete(featuresDir);\n\t\t\t} else {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tawait mkdir(featuresDir, { recursive: true });\n\tpreparedFeaturesDocsDirs.add(featuresDir);\n}\n\nasync function pruneFeatureDocs(\n\tsessionDir: string,\n\tactiveFeatureIds: Set<string>,\n): Promise<void> {\n\tconst featuresDir = getFeaturesDocsDirFromSessionDir(sessionDir);\n\n\ttry {\n\t\tconst entries = await readdir(featuresDir, { withFileTypes: true });\n\t\tawait Promise.all(\n\t\t\tentries\n\t\t\t\t.filter((entry) => entry.isFile() && entry.name.endsWith(\".md\"))\n\t\t\t\t.filter((entry) => !activeFeatureIds.has(entry.name.slice(0, -3)))\n\t\t\t\t.map((entry) =>\n\t\t\t\t\trm(\n\t\t\t\t\t\tgetFeatureDocPathFromSessionDir(\n\t\t\t\t\t\t\tsessionDir,\n\t\t\t\t\t\t\tentry.name.slice(0, -3),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t);\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nexport async function renderSessionDocsAtDir(\n\tsessionDir: string,\n\tsession: Session,\n): Promise<void> {\n\tconst features = session.plan?.features ?? [];\n\n\tawait ensureSessionDocDirs(sessionDir);\n\tawait writeDocIfChanged({\n\t\tpath: getIndexDocPathFromSessionDir(sessionDir),\n\t\tcontent: renderIndexDoc(session),\n\t});\n\n\tawait Promise.all(\n\t\tfeatures.map((feature) =>\n\t\t\twriteDocIfChanged({\n\t\t\t\tpath: getFeatureDocPathFromSessionDir(sessionDir, feature.id),\n\t\t\t\tcontent: renderFeatureDoc(session, feature),\n\t\t\t}),\n\t\t),\n\t);\n\tawait pruneFeatureDocs(\n\t\tsessionDir,\n\t\tnew Set(features.map((feature) => feature.id)),\n\t);\n}\n\nexport async function renderSessionDocs(\n\tworktree: string,\n\tsession: Session,\n\tlocation: LiveSessionLocation = \"active\",\n): Promise<void> {\n\tawait renderSessionDocsAtDir(\n\t\tgetSessionDir(assertMutableWorkspaceRoot(worktree), session.id, location),\n\t\tsession,\n\t);\n}\n",
|
|
26
26
|
"import {\n\tFLOW_PLAN_COMMAND,\n\tFLOW_PLAN_WITH_GOAL_COMMAND,\n\tFLOW_RUN_COMMAND,\n\tFLOW_STATUS_COMMAND,\n\tflowResetFeatureCommand,\n} from \"./constants\";\nimport {\n\tactiveDecisionGate,\n\tfeatureWouldReachCompletion,\n\tfinalReviewPolicyForPlan,\n} from \"./domain\";\nimport type { Session } from \"./schema\";\n\nexport type SessionOperatorState = {\n\tphase:\n\t\t| \"idle\"\n\t\t| \"planning\"\n\t\t| \"decision\"\n\t\t| \"ready\"\n\t\t| \"executing\"\n\t\t| \"blocked\"\n\t\t| \"completed\";\n\tlane: \"lite\" | \"standard\" | \"strict\";\n\tlaneReason: string;\n\tblocker: string | null;\n\treason: string;\n\tnextStep: string;\n\tnextCommand: string;\n};\n\nexport function deriveExecutionLane(session: Session | null): {\n\tlane: SessionOperatorState[\"lane\"];\n\tlaneReason: string;\n} {\n\tif (!session?.plan) {\n\t\treturn {\n\t\t\tlane: \"lite\",\n\t\t\tlaneReason:\n\t\t\t\t\"Flow can stay in the lite lane until a non-trivial plan or risk signal appears.\",\n\t\t};\n\t}\n\n\tconst decisionGate = activeDecisionGate(session);\n\tconst hasStrictPolicy =\n\t\tBoolean(session.plan.completionPolicy?.minCompletedFeatures) ||\n\t\tsession.plan.deliveryPolicy?.stopRule !== undefined ||\n\t\tsession.plan.deliveryPolicy?.deferAllowed === true ||\n\t\tsession.plan.goalMode !== \"implementation\" ||\n\t\tsession.plan.decompositionPolicy !== \"atomic_feature\";\n\tconst blockedNeedsHuman = Boolean(\n\t\tsession.status === \"blocked\" &&\n\t\t\t(session.execution.lastOutcome?.needsHuman ||\n\t\t\t\tsession.execution.lastOutcome?.kind === \"replan_required\"),\n\t);\n\tif (\n\t\tdecisionGate ||\n\t\tsession.planning.replanLog.length > 0 ||\n\t\thasStrictPolicy ||\n\t\tblockedNeedsHuman\n\t) {\n\t\treturn {\n\t\t\tlane: \"strict\",\n\t\t\tlaneReason:\n\t\t\t\t\"Flow detected elevated coordination or recovery risk, so the strict lane is the safest fit.\",\n\t\t};\n\t}\n\n\tif (\n\t\tsession.plan.features.length <= 1 &&\n\t\tsession.planning.research.length === 0 &&\n\t\tsession.planning.decisionLog.length === 0 &&\n\t\tsession.planning.implementationApproach === undefined\n\t) {\n\t\treturn {\n\t\t\tlane: \"lite\",\n\t\t\tlaneReason:\n\t\t\t\t\"This looks like a small single-feature task, so Flow can stay in the lite lane.\",\n\t\t};\n\t}\n\n\treturn {\n\t\tlane: \"standard\",\n\t\tlaneReason:\n\t\t\t\"This session has multi-step work but no elevated risk signals, so the standard lane fits best.\",\n\t};\n}\n\nexport function deriveSessionOperatorState(\n\tsession: Session | null,\n): SessionOperatorState {\n\tconst lane = deriveExecutionLane(session);\n\tif (!session) {\n\t\treturn {\n\t\t\tphase: \"idle\",\n\t\t\tlane: lane.lane,\n\t\t\tlaneReason: lane.laneReason,\n\t\t\tblocker: \"No active Flow session exists for this workspace.\",\n\t\t\treason: \"Flow has not started a tracked session for this workspace yet.\",\n\t\t\tnextStep: \"Start a new Flow session with /flow-plan <goal>.\",\n\t\t\tnextCommand: FLOW_PLAN_WITH_GOAL_COMMAND,\n\t\t};\n\t}\n\n\tconst nextCommand = deriveNextCommand(session);\n\tconst decisionGate = activeDecisionGate(session);\n\tif (decisionGate) {\n\t\treturn {\n\t\t\tphase: \"decision\",\n\t\t\tlane: lane.lane,\n\t\t\tlaneReason: lane.laneReason,\n\t\t\tblocker: decisionGate.question,\n\t\t\treason:\n\t\t\t\t\"A meaningful planning decision is still open, so Flow should pause before continuing execution.\",\n\t\t\tnextStep: decisionGate.recommendation,\n\t\t\tnextCommand,\n\t\t};\n\t}\n\n\tif (session.status === \"planning\") {\n\t\tconst hasPlan = Boolean(session.plan);\n\t\treturn {\n\t\t\tphase: \"planning\",\n\t\t\tlane: lane.lane,\n\t\t\tlaneReason: lane.laneReason,\n\t\t\tblocker: hasPlan\n\t\t\t\t? \"The draft plan is not approved yet.\"\n\t\t\t\t: \"No draft plan exists yet.\",\n\t\t\treason: hasPlan\n\t\t\t\t? \"Planning is still active because execution is gated on reviewing or approving the draft plan.\"\n\t\t\t\t: \"Planning is still active because Flow does not have an execution-ready draft plan yet.\",\n\t\t\tnextStep: hasPlan\n\t\t\t\t? \"Review or refine the draft plan, then approve it when ready.\"\n\t\t\t\t: \"Create or refresh the draft plan for the current goal.\",\n\t\t\tnextCommand,\n\t\t};\n\t}\n\n\tif (session.status === \"blocked\") {\n\t\tconst outcome = session.execution.lastOutcome;\n\t\tconst reviewerDecision = session.execution.lastReviewerDecision;\n\t\treturn {\n\t\t\tphase: \"blocked\",\n\t\t\tlane: lane.lane,\n\t\t\tlaneReason: lane.laneReason,\n\t\t\tblocker:\n\t\t\t\toutcome?.summary ??\n\t\t\t\treviewerDecision?.summary ??\n\t\t\t\tsession.execution.lastSummary ??\n\t\t\t\t\"Flow is blocked and needs recovery before it can continue.\",\n\t\t\treason:\n\t\t\t\t\"The last execution result or review outcome requires recovery before Flow can continue.\",\n\t\t\tnextStep:\n\t\t\t\tsession.execution.lastNextStep ??\n\t\t\t\toutcome?.resolutionHint ??\n\t\t\t\t(outcome?.retryable || outcome?.autoResolvable\n\t\t\t\t\t? \"Address the blocking prerequisite, then retry the feature.\"\n\t\t\t\t\t: \"Inspect the blocker and decide whether to reset, replan, or stop.\"),\n\t\t\tnextCommand,\n\t\t};\n\t}\n\n\tif (session.status === \"ready\" || session.status === \"running\") {\n\t\tconst activeFeature = session.plan?.features.find(\n\t\t\t(feature) => feature.id === session.execution.activeFeatureId,\n\t\t);\n\t\tconst activeFeatureIsFinalPath = Boolean(\n\t\t\tsession.plan &&\n\t\t\t\tactiveFeature &&\n\t\t\t\tfeatureWouldReachCompletion(session.plan, activeFeature.id),\n\t\t);\n\t\tconst finalReviewPolicy = finalReviewPolicyForPlan(session.plan);\n\t\tconst defaultExecutionNextStep = activeFeature\n\t\t\t? activeFeatureIsFinalPath\n\t\t\t\t? `Continue the active feature through broad validation and the ${finalReviewPolicy === \"detailed\" ? \"detailed final cross-feature review\" : \"broad final review\"}.`\n\t\t\t\t: \"Continue the active feature through validation and review.\"\n\t\t\t: \"Run the next approved feature.\";\n\t\treturn {\n\t\t\tphase: session.status === \"running\" ? \"executing\" : \"ready\",\n\t\t\tlane: lane.lane,\n\t\t\tlaneReason: lane.laneReason,\n\t\t\tblocker: null,\n\t\t\treason: activeFeature\n\t\t\t\t? \"An approved feature is active, so Flow should stay in execution.\"\n\t\t\t\t: \"Planning is approved and Flow can run the next feature.\",\n\t\t\tnextStep: session.execution.lastNextStep ?? defaultExecutionNextStep,\n\t\t\tnextCommand,\n\t\t};\n\t}\n\n\treturn {\n\t\tphase: \"completed\",\n\t\tlane: lane.lane,\n\t\tlaneReason: lane.laneReason,\n\t\tblocker: null,\n\t\treason:\n\t\t\t\"The active session is complete, so Flow is no longer holding execution state for it.\",\n\t\tnextStep: \"Start a new goal when you are ready for more work.\",\n\t\tnextCommand,\n\t};\n}\n\nexport function deriveNextCommand(session: Session): string {\n\tif (!session.plan) {\n\t\treturn FLOW_PLAN_WITH_GOAL_COMMAND;\n\t}\n\tif (session.status === \"planning\") {\n\t\treturn FLOW_PLAN_COMMAND;\n\t}\n\tif (session.status === \"ready\" || session.status === \"running\") {\n\t\treturn FLOW_RUN_COMMAND;\n\t}\n\tif (session.status === \"blocked\") {\n\t\tconst lastFeatureId = session.execution.lastFeatureId;\n\t\tconst outcome = session.execution.lastOutcome;\n\n\t\tif (\n\t\t\tlastFeatureId &&\n\t\t\t!outcome?.needsHuman &&\n\t\t\t(outcome?.retryable ||\n\t\t\t\toutcome?.autoResolvable ||\n\t\t\t\toutcome?.kind === \"contract_error\")\n\t\t) {\n\t\t\treturn flowResetFeatureCommand(lastFeatureId);\n\t\t}\n\t}\n\tif (session.status === \"completed\") {\n\t\treturn FLOW_PLAN_WITH_GOAL_COMMAND;\n\t}\n\n\treturn FLOW_STATUS_COMMAND;\n}\n",
|
|
27
27
|
"import { z } from \"zod\";\nimport { VALIDATION_STATUSES } from \"./constants\";\n\nconst EvidencePacketValidationStatusSchema = z.enum([\n\t...VALIDATION_STATUSES,\n\t\"not_run\",\n] as const);\n\nconst EvidencePacketValidationRunSchema = z.object({\n\tcommand: z.string().min(1),\n\tstatus: EvidencePacketValidationStatusSchema,\n\tsummary: z.string().min(1),\n});\n\nconst EvidencePacketPurposeSchema = z.enum([\n\t\"planning\",\n\t\"review\",\n\t\"audit\",\n\t\"validation\",\n\t\"general\",\n]);\n\nconst FLOW_CONTEXT_PRODUCER_LANES = [\n\t\"planning\",\n\t\"auto_planning\",\n\t\"execution\",\n\t\"review\",\n] as const;\n\nconst FLOW_CONTEXT_CONSUMER_LANES = [\n\t\"status\",\n\t\"history\",\n\t\"session\",\n\t\"reset\",\n\t\"doctor\",\n\t\"control\",\n] as const;\n\nconst FLOW_CONTEXT_LANES = [\n\t...FLOW_CONTEXT_PRODUCER_LANES,\n\t...FLOW_CONTEXT_CONSUMER_LANES,\n] as const;\n\nconst FlowContextLaneSchema = z.enum(FLOW_CONTEXT_LANES);\n\nexport const EvidencePacketSchema = z\n\t.object({\n\t\tid: z.string().min(1),\n\t\tpurpose: EvidencePacketPurposeSchema.optional(),\n\t\tcontextLane: FlowContextLaneSchema.optional(),\n\t\tsummary: z.string().min(1),\n\t\tsourceRefs: z.array(z.string().min(1)).optional(),\n\t\thighlights: z.array(z.string().min(1)).optional(),\n\t\tselectedContext: z.array(z.string().min(1)).optional(),\n\t\texcludedContext: z.array(z.string().min(1)).optional(),\n\t\tcodemapSummaries: z.array(z.string().min(1)).optional(),\n\t\tsliceSummaries: z.array(z.string().min(1)).optional(),\n\t\trelationshipHypotheses: z.array(z.string().min(1)).optional(),\n\t\tambiguities: z.array(z.string().min(1)).optional(),\n\t\tknownExclusions: z.array(z.string().min(1)).optional(),\n\t\talreadyCoveredFindings: z.array(z.string().min(1)).optional(),\n\t\tvalidationEvidence: z.array(EvidencePacketValidationRunSchema).optional(),\n\t})\n\t.strict()\n\t.readonly();\n\nexport const EvidencePacketArraySchema = z.array(EvidencePacketSchema);\n\nexport type EvidencePacket = z.infer<typeof EvidencePacketSchema>;\n",
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"import { mkdir, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { setTimeout as sleep } from \"node:timers/promises\";\nimport { getFlowDir } from \"./paths\";\nimport type { MutableWorkspaceRoot } from \"./workspace-root\";\n\nconst sessionSaveQueues = new Map<string, Promise<void>>();\nconst SESSION_SAVE_LOCK_DIRECTORY_NAME = \"session-save.lock\";\nconst SESSION_SAVE_LOCK_RETRY_DELAY_MS = 25;\nconst SESSION_SAVE_LOCK_TIMEOUT_MS = 30_000;\n\nasync function acquireFilesystemSessionSaveLock(\n\tworktree: MutableWorkspaceRoot,\n): Promise<() => Promise<void>> {\n\tconst flowDir = getFlowDir(worktree);\n\tconst lockDir = join(flowDir, SESSION_SAVE_LOCK_DIRECTORY_NAME);\n\tconst startedAt = Date.now();\n\twhile (true) {\n\t\ttry {\n\t\t\tawait mkdir(lockDir);\n\t\t\treturn async () => {\n\t\t\t\tawait rm(lockDir, { recursive: true, force: true });\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\t\tif (code === \"ENOENT\") {\n\t\t\t\tawait mkdir(flowDir, { recursive: true });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (code !== \"EEXIST\") {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (Date.now() - startedAt >= SESSION_SAVE_LOCK_TIMEOUT_MS) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Timed out waiting for session save lock at ${lockDir}. If no Flow process is currently writing session state, remove this stale lock directory and retry.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait sleep(SESSION_SAVE_LOCK_RETRY_DELAY_MS);\n\t\t}\n\t}\n}\n\nexport async function withSessionSaveLock<T>(\n\tworktree: MutableWorkspaceRoot,\n\ttask: () => Promise<T>,\n): Promise<T> {\n\tconst previous = sessionSaveQueues.get(worktree) ?? Promise.resolve();\n\tlet release = () => {};\n\tconst current = new Promise<void>((resolve) => {\n\t\trelease = resolve;\n\t});\n\tconst previousSettled = previous.catch(() => undefined);\n\tconst queued = previousSettled.then(() => current);\n\tsessionSaveQueues.set(worktree, queued);\n\n\tlet releaseFilesystemLock: (() => Promise<void>) | undefined;\n\ttry {\n\t\tawait previousSettled;\n\t\treleaseFilesystemLock = await acquireFilesystemSessionSaveLock(worktree);\n\t\treturn await task();\n\t} finally {\n\t\ttry {\n\t\t\tif (releaseFilesystemLock) {\n\t\t\t\tawait releaseFilesystemLock();\n\t\t\t}\n\t\t} finally {\n\t\t\trelease();\n\t\t\tif (sessionSaveQueues.get(worktree) === queued) {\n\t\t\t\tsessionSaveQueues.delete(worktree);\n\t\t\t}\n\t\t}\n\t}\n}\n",
|
|
43
43
|
"import { randomUUID } from \"node:crypto\";\nimport { getSessionPath } from \"./paths\";\nimport {\n\ttype BlockedSessionClosure,\n\ttype ClosedSessionResult,\n\tcloseActiveSession,\n} from \"./recovery\";\nimport { type PlanningContext, type Session, SessionSchema } from \"./schema\";\nimport { activateStoredSessionBoundary } from \"./session-live-storage\";\nimport { readSessionFromPath } from \"./session-workspace-io\";\nimport { withSessionSaveLock } from \"./session-workspace-locks\";\nimport { nowIso } from \"./util\";\nimport { assertMutableWorkspaceRoot } from \"./workspace-root\";\n\nfunction readActiveSession(\n\tworktree: string,\n\tsessionId: string,\n): Promise<Session | null> {\n\treturn readSessionFromPath(getSessionPath(worktree, sessionId, \"active\"));\n}\n\nexport async function closeSession(\n\tworktree: string,\n\tkind: NonNullable<Session[\"closure\"]>[\"kind\"],\n\tsummary?: string,\n): Promise<ClosedSessionResult | BlockedSessionClosure | null> {\n\tconst mutableWorktree = assertMutableWorkspaceRoot(worktree);\n\treturn withSessionSaveLock(mutableWorktree, async () =>\n\t\tcloseActiveSession(mutableWorktree, kind, summary),\n\t);\n}\n\nexport async function activateSession(\n\tworktree: string,\n\tsessionId: string,\n): Promise<Session | null> {\n\tconst mutableWorktree = assertMutableWorkspaceRoot(worktree);\n\treturn withSessionSaveLock(mutableWorktree, async () => {\n\t\tconst activation = await activateStoredSessionBoundary(\n\t\t\tmutableWorktree,\n\t\t\tsessionId,\n\t\t);\n\t\tif (activation === \"missing\") {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn readActiveSession(mutableWorktree, sessionId);\n\t});\n}\n\nexport function createSession(\n\tgoal: string,\n\tplanning?: Partial<PlanningContext>,\n): Session {\n\tconst createdAt = nowIso();\n\n\treturn SessionSchema.parse({\n\t\tversion: 1,\n\t\tid: randomUUID(),\n\t\tgoal,\n\t\tstatus: \"planning\",\n\t\tapproval: \"pending\",\n\t\tplanning: {\n\t\t\trepoProfile: planning?.repoProfile ?? [],\n\t\t\tpackageManager: planning?.packageManager,\n\t\t\tpackageManagerAmbiguous: planning?.packageManagerAmbiguous ?? false,\n\t\t\tstackProfile: planning?.stackProfile,\n\t\t\tstandardsProfile: planning?.standardsProfile,\n\t\t\tresearch: planning?.research ?? [],\n\t\t\timplementationApproach: planning?.implementationApproach,\n\t\t\tdecisionLog: planning?.decisionLog ?? [],\n\t\t\treplanLog: planning?.replanLog ?? [],\n\t\t\treviewFindings: planning?.reviewFindings ?? [],\n\t\t\tevidencePackets: planning?.evidencePackets,\n\t\t},\n\t\tplan: null,\n\t\texecution: {\n\t\t\tactiveFeatureId: null,\n\t\t\tlastFeatureId: null,\n\t\t\tlastSummary: null,\n\t\t\tlastOutcomeKind: null,\n\t\t\tlastOutcome: null,\n\t\t\tlastNextStep: null,\n\t\t\tlastFeatureResult: null,\n\t\t\tlastReviewerDecision: null,\n\t\t\tlastValidationRun: [],\n\t\t\thistory: [],\n\t\t},\n\t\tclosure: null,\n\t\tnotes: [],\n\t\tartifacts: [],\n\t\ttimestamps: {\n\t\t\tcreatedAt,\n\t\t\tupdatedAt: createdAt,\n\t\t\tapprovedAt: null,\n\t\t\tcompletedAt: null,\n\t\t},\n\t});\n}\n",
|
|
44
44
|
"import { getSessionPath } from \"./paths\";\nimport {\n\tpersistCompletedSession,\n\tsyncCompletedSessionArtifacts,\n} from \"./recovery\";\nimport { renderSessionDocs } from \"./render\";\nimport type { Session } from \"./schema\";\nimport {\n\tmakeSessionActive,\n\tresolveActiveSessionId,\n} from \"./session-live-storage\";\nimport { writeSessionFile } from \"./session-workspace\";\nimport { readSessionFromPath } from \"./session-workspace-io\";\nimport { withSessionSaveLock } from \"./session-workspace-locks\";\nimport { nowIso } from \"./util\";\nimport {\n\tassertMutableWorkspaceRoot,\n\ttype MutableWorkspaceRoot,\n} from \"./workspace-root\";\n\nfunction refreshUpdatedAt(session: Session): Session {\n\treturn {\n\t\t...session,\n\t\ttimestamps: {\n\t\t\t...session.timestamps,\n\t\t\tupdatedAt: nowIso(),\n\t\t},\n\t};\n}\n\nasync function persistOpenSession(\n\tworktree: MutableWorkspaceRoot,\n\tsession: Session,\n\tincludeArtifacts: boolean,\n): Promise<void> {\n\tconst activeSessionId = await resolveActiveSessionId(worktree);\n\tconst targetLocation = activeSessionId === session.id ? \"active\" : \"stored\";\n\n\tawait writeSessionFile(worktree, session, targetLocation);\n\tif (includeArtifacts) {\n\t\tawait renderSessionDocs(worktree, session, targetLocation);\n\t}\n\n\tif (targetLocation === \"stored\") {\n\t\tawait makeSessionActive(worktree, session.id);\n\t}\n}\n\nasync function persistSessionByStatus(\n\tworktree: MutableWorkspaceRoot,\n\tsession: Session,\n\tincludeArtifacts: boolean,\n): Promise<void> {\n\tif (session.status === \"completed\") {\n\t\tawait persistCompletedSession(worktree, session, includeArtifacts);\n\t\treturn;\n\t}\n\n\tawait persistOpenSession(worktree, session, includeArtifacts);\n}\n\nasync function saveSessionWithArtifactsOption(\n\tworktree: MutableWorkspaceRoot,\n\tsession: Session,\n\tincludeArtifacts: boolean,\n): Promise<Session> {\n\treturn withSessionSaveLock(worktree, async () => {\n\t\tconst normalized = refreshUpdatedAt(session);\n\t\tawait persistSessionByStatus(worktree, normalized, includeArtifacts);\n\t\treturn normalized;\n\t});\n}\n\nexport async function loadSession(worktree: string): Promise<Session | null> {\n\tconst sessionId = await resolveActiveSessionId(worktree);\n\tif (!sessionId) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\treturn await readSessionFromPath(\n\t\t\tgetSessionPath(worktree, sessionId, \"active\"),\n\t\t);\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nexport async function saveSessionState(\n\tworktree: string,\n\tsession: Session,\n): Promise<Session> {\n\tconst mutableWorktree = assertMutableWorkspaceRoot(worktree);\n\treturn saveSessionWithArtifactsOption(mutableWorktree, session, false);\n}\n\nexport async function syncSessionArtifacts(\n\tworktree: string,\n\tsession: Session,\n): Promise<void> {\n\tconst mutableWorktree = assertMutableWorkspaceRoot(worktree);\n\tif (session.status === \"completed\") {\n\t\tawait syncCompletedSessionArtifacts(mutableWorktree, session);\n\t\treturn;\n\t}\n\n\tawait renderSessionDocs(mutableWorktree, session, \"active\");\n}\n\nexport async function saveSession(\n\tworktree: string,\n\tsession: Session,\n): Promise<Session> {\n\tconst mutableWorktree = assertMutableWorkspaceRoot(worktree);\n\treturn saveSessionWithArtifactsOption(mutableWorktree, session, true);\n}\n",
|
|
45
|
+
"/**\n * Flow action engine: the single load -> mutate -> validate -> persist ->\n * render pipeline shared by every session action. Handlers live in\n * `actions.ts`; this module owns runtime ports, result shapes, and\n * finalization (persistence + artifact sync + response shaping).\n */\nimport { errorResponse } from \"../errors\";\nimport {\n\tactivateSession,\n\tcloseSession,\n\tlistSessionHistory,\n\tloadSession,\n\tloadStoredSession,\n\tsaveSessionState,\n\tsyncSessionArtifacts,\n} from \"../lifecycle\";\nimport type { LatestFailedFlowAttempt, Session } from \"../schema\";\nimport type { TransitionResult } from \"../transitions\";\n\nexport type RuntimeToolResponse = Record<string, unknown>;\n\nexport interface SessionRuntimePort {\n\tloadSession: (worktree: string) => Promise<Session | null>;\n\tsaveSessionState: (worktree: string, session: Session) => Promise<Session>;\n\tsyncSessionArtifacts: (worktree: string, session: Session) => Promise<void>;\n}\n\nexport interface SessionReadRuntimePort {\n\tloadSession: (worktree: string) => Promise<Session | null>;\n\tlistSessionHistory: typeof listSessionHistory;\n\tloadStoredSession: typeof loadStoredSession;\n}\n\nexport interface SessionWorkspaceRuntimePort extends SessionRuntimePort {\n\tactivateSession: typeof activateSession;\n\tcloseSession: typeof closeSession;\n}\n\nexport const DEFAULT_SESSION_RUNTIME_PORT: SessionRuntimePort = {\n\tloadSession,\n\tsaveSessionState,\n\tsyncSessionArtifacts,\n};\n\nexport const DEFAULT_SESSION_READ_RUNTIME_PORT: SessionReadRuntimePort = {\n\tloadSession,\n\tlistSessionHistory,\n\tloadStoredSession,\n};\n\nexport const DEFAULT_SESSION_WORKSPACE_RUNTIME_PORT: SessionWorkspaceRuntimePort =\n\t{\n\t\tloadSession,\n\t\tsaveSessionState,\n\t\tsyncSessionArtifacts,\n\t\tactivateSession,\n\t\tcloseSession,\n\t};\n\nexport type FailedAttemptClearPolicy =\n\t| true\n\t| { tool: LatestFailedFlowAttempt[\"tool\"] };\n\nexport type SessionArtifactSyncFailure = {\n\tstatus: \"failed\";\n\terror: string;\n};\n\nexport type SessionMutationAction<T, Name extends string = string> = {\n\tname: Name;\n\trun: (session: Session) => TransitionResult<T>;\n\tgetSession: (value: T) => Session;\n\tonSuccess: (saved: Session, value: T) => RuntimeToolResponse;\n\tisNoopSuccess?: (value: T, originalSession: Session) => boolean;\n\tonNoopSuccess?: (saved: Session, value: T) => RuntimeToolResponse;\n\tmissingResponse?: RuntimeToolResponse;\n\tonError?: (\n\t\tresult: Extract<TransitionResult<T>, { ok: false }>,\n\t) => RuntimeToolResponse;\n\trecordFailure?: (\n\t\tsession: Session,\n\t\tresult: Extract<TransitionResult<T>, { ok: false }>,\n\t) => Session | null;\n\tclearFailedAttemptOnSuccess?: FailedAttemptClearPolicy;\n\tsyncArtifacts?: boolean;\n};\n\nexport type SessionMutationResult<T, Name extends string = string> =\n\t| { kind: \"missing\"; actionName: Name; response: RuntimeToolResponse }\n\t| {\n\t\t\tkind: \"success\";\n\t\t\tactionName: Name;\n\t\t\tvalue: T;\n\t\t\tsavedSession: Session;\n\t\t\tresponse: RuntimeToolResponse;\n\t }\n\t| {\n\t\t\tkind: \"success_artifact_sync_failed\";\n\t\t\tactionName: Name;\n\t\t\tvalue: T;\n\t\t\tsavedSession: Session;\n\t\t\tresponse: RuntimeToolResponse;\n\t\t\tartifactSync: SessionArtifactSyncFailure;\n\t }\n\t| {\n\t\t\tkind: \"failure\";\n\t\t\tactionName: Name;\n\t\t\tresponse: RuntimeToolResponse;\n\t\t\ttransition: Extract<TransitionResult<T>, { ok: false }>;\n\t\t\tsavedSession?: Session;\n\t\t\tartifactSync?: SessionArtifactSyncFailure;\n\t };\n\nexport type RuntimeAction<T, Name extends string, Port> = {\n\tname: Name;\n\trun: (worktree: string, runtime: Port) => Promise<T>;\n\tonSuccess: (value: T) => RuntimeToolResponse;\n};\n\nexport type RuntimeActionResult<T, Name extends string = string> = {\n\tactionName: Name;\n\tvalue: T;\n\tresponse: RuntimeToolResponse;\n};\n\nexport type SessionReadAction<T, Name extends string = string> = RuntimeAction<\n\tT,\n\tName,\n\tSessionReadRuntimePort\n>;\n\nexport type SessionReadResult<\n\tT,\n\tName extends string = string,\n> = RuntimeActionResult<T, Name>;\n\nexport type SessionWorkspaceAction<\n\tT,\n\tName extends string = string,\n> = RuntimeAction<T, Name, SessionWorkspaceRuntimePort>;\n\nexport type SessionWorkspaceResult<\n\tT,\n\tName extends string = string,\n> = RuntimeActionResult<T, Name>;\n\nexport async function runRuntimeActionAtRoot<T, Name extends string, Port>(\n\tworktree: string,\n\taction: RuntimeAction<T, Name, Port>,\n\truntime: Port,\n): Promise<RuntimeActionResult<T, Name>> {\n\tconst value = await action.run(worktree, runtime);\n\treturn { actionName: action.name, value, response: action.onSuccess(value) };\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error && error.message\n\t\t? error.message\n\t\t: String(error);\n}\n\nfunction applyFailedAttemptClearPolicy(\n\tsession: Session,\n\tpolicy: FailedAttemptClearPolicy | undefined,\n): Session {\n\tif (!policy) {\n\t\treturn session;\n\t}\n\tconst shouldClear =\n\t\tpolicy === true ||\n\t\tsession.execution.lastFailedMutation?.tool === policy.tool;\n\tif (!shouldClear) {\n\t\treturn session;\n\t}\n\treturn {\n\t\t...session,\n\t\texecution: {\n\t\t\t...session.execution,\n\t\t\tlastFailedMutation: null,\n\t\t},\n\t};\n}\n\nfunction valueWithSavedSession<T>(\n\tvalue: T,\n\tresultSession: Session,\n\tsavedSession: Session,\n): T {\n\tif (value === resultSession) {\n\t\treturn savedSession as T;\n\t}\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn value;\n\t}\n\tif (!Object.hasOwn(value, \"session\")) {\n\t\treturn value;\n\t}\n\tconst compositeValue = value as T & { session?: unknown };\n\tif (compositeValue.session !== resultSession) {\n\t\treturn value;\n\t}\n\treturn { ...compositeValue, session: savedSession } as T;\n}\n\nasync function syncArtifactsAfterPersistence(\n\tworktree: string,\n\tsession: Session,\n\tsyncArtifacts: boolean,\n\truntime: SessionRuntimePort,\n): Promise<SessionArtifactSyncFailure | null> {\n\tif (!syncArtifacts) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tawait runtime.syncSessionArtifacts(worktree, session);\n\t\treturn null;\n\t} catch (error) {\n\t\treturn { status: \"failed\", error: errorMessage(error) };\n\t}\n}\n\nexport async function runMutationActionAtRoot<T, Name extends string>(\n\tworktree: string,\n\taction: SessionMutationAction<T, Name>,\n\truntime: SessionRuntimePort = DEFAULT_SESSION_RUNTIME_PORT,\n): Promise<SessionMutationResult<T, Name>> {\n\tconst session = await runtime.loadSession(worktree);\n\tif (!session) {\n\t\treturn {\n\t\t\tkind: \"missing\",\n\t\t\tactionName: action.name,\n\t\t\tresponse: action.missingResponse ?? {\n\t\t\t\tstatus: \"missing_session\",\n\t\t\t\tsummary: \"No active Flow session exists.\",\n\t\t\t},\n\t\t};\n\t}\n\n\tlet result = action.run(session);\n\tif (!result.ok && action.recordFailure) {\n\t\tconst failureSession = action.recordFailure(\n\t\t\tresult.session ?? session,\n\t\t\tresult,\n\t\t);\n\t\tif (failureSession) {\n\t\t\tresult = { ...result, session: failureSession };\n\t\t}\n\t}\n\n\tconst syncArtifacts = action.syncArtifacts ?? true;\n\tconst onError =\n\t\taction.onError ??\n\t\t((failure: Extract<TransitionResult<T>, { ok: false }>) =>\n\t\t\terrorResponse(failure.message));\n\n\tif (\n\t\tresult.ok &&\n\t\taction.onNoopSuccess &&\n\t\taction.isNoopSuccess?.(result.value, session) === true\n\t) {\n\t\tconst artifactSync = await syncArtifactsAfterPersistence(\n\t\t\tworktree,\n\t\t\tsession,\n\t\t\tsyncArtifacts,\n\t\t\truntime,\n\t\t);\n\t\tconst response = action.onNoopSuccess(session, result.value);\n\t\tif (artifactSync) {\n\t\t\treturn {\n\t\t\t\tkind: \"success_artifact_sync_failed\",\n\t\t\t\tactionName: action.name,\n\t\t\t\tvalue: result.value,\n\t\t\t\tsavedSession: session,\n\t\t\t\tresponse: {\n\t\t\t\t\t...response,\n\t\t\t\t\tstatus: \"partial_success\",\n\t\t\t\t\tpersistedMutation: false,\n\t\t\t\t\tartifactSync,\n\t\t\t\t},\n\t\t\t\tartifactSync,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkind: \"success\",\n\t\t\tactionName: action.name,\n\t\t\tvalue: result.value,\n\t\t\tsavedSession: session,\n\t\t\tresponse,\n\t\t};\n\t}\n\n\tif (!result.ok) {\n\t\tif (!result.session) {\n\t\t\treturn {\n\t\t\t\tkind: \"failure\",\n\t\t\t\tactionName: action.name,\n\t\t\t\tresponse: onError(result),\n\t\t\t\ttransition: result,\n\t\t\t};\n\t\t}\n\t\tconst saved = await runtime.saveSessionState(worktree, result.session);\n\t\tconst artifactSync = await syncArtifactsAfterPersistence(\n\t\t\tworktree,\n\t\t\tsaved,\n\t\t\tsyncArtifacts,\n\t\t\truntime,\n\t\t);\n\t\tconst response = onError(result);\n\t\treturn {\n\t\t\tkind: \"failure\",\n\t\t\tactionName: action.name,\n\t\t\tresponse: artifactSync\n\t\t\t\t? { ...response, persistedMutation: true, artifactSync }\n\t\t\t\t: response,\n\t\t\ttransition: result,\n\t\t\tsavedSession: saved,\n\t\t\t...(artifactSync ? { artifactSync } : {}),\n\t\t};\n\t}\n\n\tconst resultSession = action.getSession(result.value);\n\tconst nextSession = applyFailedAttemptClearPolicy(\n\t\tresultSession,\n\t\taction.clearFailedAttemptOnSuccess,\n\t);\n\tconst saved = await runtime.saveSessionState(worktree, nextSession);\n\tconst responseValue = valueWithSavedSession(\n\t\tresult.value,\n\t\tresultSession,\n\t\tsaved,\n\t);\n\tconst artifactSync = await syncArtifactsAfterPersistence(\n\t\tworktree,\n\t\tsaved,\n\t\tsyncArtifacts,\n\t\truntime,\n\t);\n\tconst response = action.onSuccess(saved, responseValue);\n\tif (artifactSync) {\n\t\treturn {\n\t\t\tkind: \"success_artifact_sync_failed\",\n\t\t\tactionName: action.name,\n\t\t\tvalue: responseValue,\n\t\t\tsavedSession: saved,\n\t\t\tresponse: {\n\t\t\t\t...response,\n\t\t\t\tstatus: \"partial_success\",\n\t\t\t\tpersistedMutation: true,\n\t\t\t\tartifactSync,\n\t\t\t},\n\t\t\tartifactSync,\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"success\",\n\t\tactionName: action.name,\n\t\tvalue: responseValue,\n\t\tsavedSession: saved,\n\t\tresponse,\n\t};\n}\n",
|
|
45
46
|
"/**\n * Task-progress projection: derives the per-phase progress rows surfaced in\n * flow_status output (planning, per-feature execution, validation, review,\n * failed attempts), plus the selection policy that trims rows for the\n * compact operator summary.\n */\nimport {\n\tactiveDecisionGate,\n\tfinalReviewPolicyForPlan,\n\tsummarizeCompletion,\n} from \"./domain\";\nimport type { FeatureDocDrilldownTarget } from \"./feature-doc-drilldown\";\nimport type { Feature, ReviewerDecision, Session } from \"./schema\";\n\nexport type TaskProgressRow = {\n\tid: string;\n\tphase:\n\t\t| \"planning\"\n\t\t| \"execution\"\n\t\t| \"validation\"\n\t\t| \"review\"\n\t\t| \"final_review\"\n\t\t| \"recovery\"\n\t\t| \"session\";\n\townerRole: \"flow-planner\" | \"flow-worker\" | \"flow-reviewer\" | \"flow-runtime\";\n\tsubject: string;\n\tstatus:\n\t\t| \"pending\"\n\t\t| \"active\"\n\t\t| \"blocked\"\n\t\t| \"needs_fix\"\n\t\t| \"needs_input\"\n\t\t| \"completed\"\n\t\t| \"ready\";\n\tfeatureId?: string;\n\tfeatureDrilldown?: FeatureDocDrilldownTarget;\n\tevidence: string[];\n\tblocker: string | null;\n\tnext: string;\n\tsource:\n\t\t| \"planning\"\n\t\t| \"plan\"\n\t\t| \"execution\"\n\t\t| \"validation\"\n\t\t| \"reviewer_decision\"\n\t\t| \"operator\";\n};\n\ntype OperatorLike = {\n\tphase: string;\n\tnextStep: string;\n\tblocker: string | null;\n};\n\nfunction inlineText(value: string): string {\n\treturn value.replace(/\\r?\\n+/g, \" / \").trim();\n}\n\nfunction compactEvidence(items: Array<string | null | undefined>): string[] {\n\treturn items.filter((item): item is string => Boolean(item)).map(inlineText);\n}\n\nfunction projectFeatureStatus(\n\tstatus: Feature[\"status\"],\n): TaskProgressRow[\"status\"] {\n\tswitch (status) {\n\t\tcase \"in_progress\":\n\t\t\treturn \"active\";\n\t\tcase \"blocked\":\n\t\t\treturn \"blocked\";\n\t\tcase \"completed\":\n\t\t\treturn \"completed\";\n\t\tcase \"pending\":\n\t\t\treturn \"pending\";\n\t}\n}\n\nfunction planningRow(\n\tsession: Session,\n\toperator?: OperatorLike,\n): TaskProgressRow | null {\n\tif (session.status !== \"planning\" && !session.plan) {\n\t\treturn null;\n\t}\n\n\tconst plan = session.plan;\n\tconst decisionGate = activeDecisionGate(session);\n\tconst hasPlan = Boolean(plan);\n\tconst status: TaskProgressRow[\"status\"] = decisionGate\n\t\t? \"needs_input\"\n\t\t: hasPlan && session.approval === \"approved\"\n\t\t\t? \"completed\"\n\t\t\t: hasPlan\n\t\t\t\t? \"ready\"\n\t\t\t\t: \"active\";\n\n\treturn {\n\t\tid: \"planning\",\n\t\tphase: \"planning\",\n\t\townerRole: \"flow-planner\",\n\t\tsubject: \"Planning\",\n\t\tstatus,\n\t\tevidence: compactEvidence([\n\t\t\tplan ? `features: ${plan.features.length}` : null,\n\t\t\tsession.planning.research.length > 0\n\t\t\t\t? `research: ${session.planning.research.length}`\n\t\t\t\t: null,\n\t\t\tsession.planning.decisionLog.length > 0\n\t\t\t\t? `decisions: ${session.planning.decisionLog.length}`\n\t\t\t\t: null,\n\t\t\tsession.planning.evidencePackets\n\t\t\t\t? `evidence packets: ${session.planning.evidencePackets.length}`\n\t\t\t\t: null,\n\t\t]),\n\t\tblocker:\n\t\t\tdecisionGate?.question ??\n\t\t\t(operator?.phase === \"planning\" ? operator.blocker : null),\n\t\tnext:\n\t\t\tstatus === \"completed\"\n\t\t\t\t? \"Plan is approved; no planning action needed.\"\n\t\t\t\t: (decisionGate?.recommendation ??\n\t\t\t\t\toperator?.nextStep ??\n\t\t\t\t\t(hasPlan\n\t\t\t\t\t\t? \"Review or approve the draft plan.\"\n\t\t\t\t\t\t: \"Create a draft plan.\")),\n\t\tsource: hasPlan ? \"plan\" : \"planning\",\n\t};\n}\n\nfunction featureRow(\n\tsession: Session,\n\tfeature: Feature,\n\toperator?: OperatorLike,\n): TaskProgressRow {\n\tconst isActive = session.execution.activeFeatureId === feature.id;\n\tconst hasLastResultForFeature =\n\t\tsession.execution.lastFeatureResult?.featureId === feature.id;\n\tconst hasLastFeatureRecord = session.execution.lastFeatureId === feature.id;\n\tconst hasLastExecutionForFeature =\n\t\thasLastFeatureRecord || hasLastResultForFeature;\n\tconst outcome = hasLastFeatureRecord ? session.execution.lastOutcome : null;\n\tconst featureResult = hasLastResultForFeature\n\t\t? session.execution.lastFeatureResult\n\t\t: null;\n\tconst reviewerDecision =\n\t\tsession.execution.lastReviewerDecision?.scope === \"feature\" &&\n\t\tsession.execution.lastReviewerDecision.featureId === feature.id\n\t\t\t? session.execution.lastReviewerDecision\n\t\t\t: null;\n\tconst evidence = compactEvidence([\n\t\t`file targets: ${feature.fileTargets.length}`,\n\t\t`verification: ${feature.verification.length}`,\n\t\thasLastExecutionForFeature\n\t\t\t? `validation: ${session.execution.lastValidationRun.length}`\n\t\t\t: null,\n\t\toutcome ? `outcome: ${outcome.kind}` : null,\n\t\tfeatureResult?.verificationStatus\n\t\t\t? `verification status: ${featureResult.verificationStatus}`\n\t\t\t: null,\n\t\treviewerDecision ? `review: ${reviewerDecision.status}` : null,\n\t]);\n\n\treturn {\n\t\tid: `feature:${feature.id}`,\n\t\tphase: \"execution\",\n\t\townerRole: \"flow-worker\",\n\t\tsubject: `${feature.id} — ${feature.title}`,\n\t\tstatus: projectFeatureStatus(feature.status),\n\t\tfeatureId: feature.id,\n\t\tevidence,\n\t\tblocker:\n\t\t\tfeature.status === \"blocked\"\n\t\t\t\t? (outcome?.summary ??\n\t\t\t\t\treviewerDecision?.summary ??\n\t\t\t\t\tsession.execution.lastSummary ??\n\t\t\t\t\t\"Feature is blocked.\")\n\t\t\t\t: null,\n\t\tnext: isActive\n\t\t\t? (operator?.nextStep ?? \"Continue the active feature.\")\n\t\t\t: feature.status === \"blocked\"\n\t\t\t\t? (session.execution.lastNextStep ??\n\t\t\t\t\toutcome?.resolutionHint ??\n\t\t\t\t\t\"Resolve the blocker before retrying this feature.\")\n\t\t\t\t: feature.status === \"completed\"\n\t\t\t\t\t? \"No action needed.\"\n\t\t\t\t\t: \"Waiting for execution selection.\",\n\t\tsource: \"execution\",\n\t};\n}\n\nfunction projectValidationStatus(\n\tvalidationRun: Session[\"execution\"][\"lastValidationRun\"],\n): TaskProgressRow[\"status\"] {\n\tif (validationRun.every((item) => item.status === \"passed\")) {\n\t\treturn \"completed\";\n\t}\n\tif (\n\t\tvalidationRun.some(\n\t\t\t(item) => item.status === \"failed\" || item.status === \"failed_existing\",\n\t\t)\n\t) {\n\t\treturn \"blocked\";\n\t}\n\treturn \"needs_input\";\n}\n\nfunction validationRow(session: Session): TaskProgressRow | null {\n\tconst validationRun = session.execution.lastValidationRun;\n\tif (validationRun.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst featureId =\n\t\tsession.execution.lastFeatureResult?.featureId ??\n\t\tsession.execution.lastFeatureId ??\n\t\tundefined;\n\tconst status = projectValidationStatus(validationRun);\n\treturn {\n\t\tid: `validation:${featureId ?? \"session\"}`,\n\t\tphase: \"validation\",\n\t\townerRole: \"flow-worker\",\n\t\tsubject: `Validation for ${featureId ?? \"session\"}`,\n\t\tstatus,\n\t\t...(featureId ? { featureId } : {}),\n\t\tevidence: validationRun.map(\n\t\t\t(item) => `${item.status}: ${item.command} — ${item.summary}`,\n\t\t),\n\t\tblocker:\n\t\t\tstatus === \"blocked\"\n\t\t\t\t? (validationRun.find((item) => item.status !== \"passed\")?.summary ??\n\t\t\t\t\t\"Validation did not pass.\")\n\t\t\t\t: null,\n\t\tnext:\n\t\t\tstatus === \"completed\"\n\t\t\t\t? \"Validation is complete; continue review or completion.\"\n\t\t\t\t: \"Fix validation findings, then rerun validation.\",\n\t\tsource: \"validation\",\n\t};\n}\n\nfunction latestFailedAttemptRow(session: Session): TaskProgressRow | null {\n\tconst failure = session.execution.lastFailedMutation;\n\tif (!failure || session.status === \"completed\") {\n\t\treturn null;\n\t}\n\treturn {\n\t\tid: `failed:${failure.tool}:${failure.failureCategory}`,\n\t\tphase: failure.phase,\n\t\townerRole: \"flow-runtime\",\n\t\tsubject: `Latest failed attempt: ${failure.tool}`,\n\t\tstatus: \"blocked\",\n\t\tevidence: compactEvidence([\n\t\t\t`category: ${failure.failureCategory}`,\n\t\t\tfailure.sameCategoryFailureCount\n\t\t\t\t? `same-category attempts: ${failure.sameCategoryFailureCount}`\n\t\t\t\t: null,\n\t\t\tfailure.summary,\n\t\t]),\n\t\tblocker: failure.summary,\n\t\tnext:\n\t\t\tfailure.recoveryHint ??\n\t\t\t\"Inspect the failed tool JSON recovery details before retrying.\",\n\t\tsource: \"operator\",\n\t};\n}\n\nfunction projectReviewerStatus(\n\tstatus: ReviewerDecision[\"status\"],\n): TaskProgressRow[\"status\"] {\n\tswitch (status) {\n\t\tcase \"approved\":\n\t\t\treturn \"completed\";\n\t\tcase \"needs_fix\":\n\t\t\treturn \"needs_fix\";\n\t\tcase \"blocked\":\n\t\t\treturn \"blocked\";\n\t}\n}\n\nfunction reviewerRow(session: Session): TaskProgressRow | null {\n\tconst decision = session.execution.lastReviewerDecision;\n\tif (!decision) {\n\t\treturn null;\n\t}\n\n\tconst status = projectReviewerStatus(decision.status);\n\tconst isFinal = decision.scope === \"final\";\n\treturn {\n\t\tid: isFinal ? \"review:final\" : `review:${decision.featureId}`,\n\t\tphase: isFinal ? \"final_review\" : \"review\",\n\t\townerRole: \"flow-reviewer\",\n\t\tsubject: isFinal\n\t\t\t? \"Final session review\"\n\t\t\t: `Feature review: ${decision.featureId}`,\n\t\tstatus,\n\t\t...(isFinal ? {} : { featureId: decision.featureId }),\n\t\tevidence: compactEvidence([\n\t\t\t`decision: ${decision.status}`,\n\t\t\tdecision.reviewPurpose ? `purpose: ${decision.reviewPurpose}` : null,\n\t\t\tisFinal && decision.reviewDepth\n\t\t\t\t? `review depth: ${decision.reviewDepth}`\n\t\t\t\t: null,\n\t\t\tisFinal && decision.reviewedSurfaces\n\t\t\t\t? `reviewed surfaces: ${decision.reviewedSurfaces.length}`\n\t\t\t\t: null,\n\t\t\tdecision.summary,\n\t\t]),\n\t\tblocker: status === \"completed\" ? null : decision.summary,\n\t\tnext:\n\t\t\tstatus === \"completed\"\n\t\t\t\t? \"Review is complete; continue the next runtime step.\"\n\t\t\t\t: \"Address reviewer findings before continuing.\",\n\t\tsource: \"reviewer_decision\",\n\t};\n}\n\nfunction pendingFinalReviewRow(session: Session): TaskProgressRow | null {\n\tif (!session.plan) {\n\t\treturn null;\n\t}\n\tconst completion = summarizeCompletion(session);\n\tconst hasFinalDecision =\n\t\tsession.execution.lastReviewerDecision?.scope === \"final\";\n\tif (!completion?.activeFeatureTriggersSessionCompletion || hasFinalDecision) {\n\t\treturn null;\n\t}\n\n\tconst policy = finalReviewPolicyForPlan(session.plan);\n\treturn {\n\t\tid: \"review:final:pending\",\n\t\tphase: \"final_review\",\n\t\townerRole: \"flow-reviewer\",\n\t\tsubject: `Final ${policy} review`,\n\t\tstatus: \"pending\",\n\t\tevidence: compactEvidence([\n\t\t\t`completion target: ${completion.targetCompletedFeatures}/${completion.totalFeatures} features`,\n\t\t]),\n\t\tblocker: null,\n\t\tnext: `Run broad validation and record the ${policy} final review.`,\n\t\tsource: \"operator\",\n\t};\n}\n\nexport function projectTaskProgress(\n\tsession: Session,\n\toperator?: OperatorLike,\n): TaskProgressRow[] {\n\treturn [\n\t\tplanningRow(session, operator),\n\t\t...(session.plan?.features ?? []).map((feature) =>\n\t\t\tfeatureRow(session, feature, operator),\n\t\t),\n\t\tvalidationRow(session),\n\t\tlatestFailedAttemptRow(session),\n\t\treviewerRow(session),\n\t\tpendingFinalReviewRow(session),\n\t].filter((row): row is TaskProgressRow => Boolean(row));\n}\n\n// ---------------------------------------------------------------------------\n// Row selection for the compact operator summary\n// ---------------------------------------------------------------------------\n\nconst BLOCKED_OR_INPUT_STATUSES = new Set<TaskProgressRow[\"status\"]>([\n\t\"blocked\",\n\t\"needs_fix\",\n\t\"needs_input\",\n]);\n\nconst REVIEW_OR_VALIDATION_PHASES = new Set<TaskProgressRow[\"phase\"]>([\n\t\"validation\",\n\t\"review\",\n\t\"final_review\",\n]);\n\nconst OPERATOR_SELECTION_RULES: Array<{\n\tmatches: (row: TaskProgressRow) => boolean;\n\tlimit?: number;\n}> = [\n\t{ matches: (row) => row.status === \"active\" },\n\t{ matches: (row) => row.status === \"ready\" },\n\t{ matches: (row) => BLOCKED_OR_INPUT_STATUSES.has(row.status) },\n\t{ matches: (row) => REVIEW_OR_VALIDATION_PHASES.has(row.phase) },\n\t{ matches: (row) => row.status === \"pending\", limit: 1 },\n];\n\nconst OPERATOR_MAX_ROWS = 4;\n\nexport function selectOperatorTaskProgressRows(\n\trows: TaskProgressRow[],\n): TaskProgressRow[] {\n\tconst selected: TaskProgressRow[] = [];\n\tfor (const rule of OPERATOR_SELECTION_RULES) {\n\t\tconst candidates = rows.filter(rule.matches);\n\t\tfor (const row of rule.limit === undefined\n\t\t\t? candidates\n\t\t\t: candidates.slice(0, rule.limit)) {\n\t\t\tif (selected.length >= OPERATOR_MAX_ROWS) {\n\t\t\t\treturn selected;\n\t\t\t}\n\t\t\tif (!selected.some((item) => item.id === row.id)) {\n\t\t\t\tselected.push(row);\n\t\t\t}\n\t\t}\n\t}\n\treturn selected;\n}\n",
|
|
46
47
|
"import type { FeatureDocDrilldownTarget } from \"./feature-doc-drilldown\";\nimport type { Feature, Session } from \"./schema\";\n\nexport {\n\tprojectTaskProgress,\n\tselectOperatorTaskProgressRows,\n\ttype TaskProgressRow,\n} from \"./summary-task-progress\";\n\nexport type SummarizedFeature = {\n\tid: string;\n\ttitle: string;\n\tstatus: Feature[\"status\"];\n\tsummary: string;\n\tfeatureDrilldown?: FeatureDocDrilldownTarget;\n};\n\nexport type SummarizedPlanning = Pick<\n\tSession[\"planning\"],\n\t| \"repoProfile\"\n\t| \"stackProfile\"\n\t| \"standardsProfile\"\n\t| \"research\"\n\t| \"implementationApproach\"\n\t| \"decisionLog\"\n\t| \"replanLog\"\n\t| \"evidencePackets\"\n> & {\n\tpackageManager?: Session[\"planning\"][\"packageManager\"];\n\tpackageManagerAmbiguous?: true;\n};\n\nexport function summarizeFeature(feature: Feature): string {\n\treturn `${feature.id} (${feature.status}): ${feature.title}`;\n}\n\nexport function projectFeature(feature: Feature): SummarizedFeature {\n\treturn {\n\t\tid: feature.id,\n\t\ttitle: feature.title,\n\t\tstatus: feature.status,\n\t\tsummary: feature.summary,\n\t};\n}\n\nexport function projectActiveFeature(\n\tfeature: Feature | null,\n): SummarizedFeature | null {\n\treturn feature ? projectFeature(feature) : null;\n}\n\nexport function sessionFeatures(session: Session): Feature[] {\n\treturn session.plan?.features ?? [];\n}\n\nexport function summarizePlanning(session: Session): SummarizedPlanning {\n\treturn {\n\t\trepoProfile: session.planning.repoProfile,\n\t\tstackProfile: session.planning.stackProfile,\n\t\tstandardsProfile: session.planning.standardsProfile,\n\t\tresearch: session.planning.research,\n\t\timplementationApproach: session.planning.implementationApproach,\n\t\tdecisionLog: session.planning.decisionLog,\n\t\treplanLog: session.planning.replanLog,\n\t\t...(session.planning.packageManager\n\t\t\t? { packageManager: session.planning.packageManager }\n\t\t\t: {}),\n\t\t...(session.planning.packageManagerAmbiguous\n\t\t\t? { packageManagerAmbiguous: true as const }\n\t\t\t: {}),\n\t\t...(session.planning.evidencePackets\n\t\t\t? { evidencePackets: session.planning.evidencePackets }\n\t\t\t: {}),\n\t};\n}\n\nexport function activeFeatureForSession(\n\tsession: Session,\n\tfeatures: Feature[] = sessionFeatures(session),\n): Feature | null {\n\treturn (\n\t\tfeatures.find(\n\t\t\t(feature) => feature.id === session.execution.activeFeatureId,\n\t\t) ?? null\n\t);\n}\n",
|
|
47
48
|
"import {\n\tactiveDecisionGate,\n\tfinalReviewPolicyForPlan,\n\tsummarizeCompletion,\n} from \"./domain\";\nimport type { Session } from \"./schema\";\nimport {\n\tderiveNextCommand,\n\tderiveSessionOperatorState,\n\ttype SessionOperatorState,\n} from \"./session-operator-state\";\nimport {\n\tactiveFeatureForSession,\n\tprojectActiveFeature,\n\tprojectFeature,\n\ttype SummarizedFeature,\n\ttype SummarizedPlanning,\n\tsessionFeatures,\n\tsummarizeFeature,\n\tsummarizePlanning,\n} from \"./summary-projections\";\nimport {\n\tprojectTaskProgress,\n\ttype TaskProgressRow,\n} from \"./summary-task-progress\";\n\ntype SessionGuidance = {\n\tcategory:\n\t\t| \"no_session\"\n\t\t| \"planning\"\n\t\t| \"decision_gate\"\n\t\t| \"execution\"\n\t\t| \"blocked\"\n\t\t| \"completed\";\n\tstatus: string;\n\tsummary: string;\n\tphase:\n\t\t| \"idle\"\n\t\t| \"planning\"\n\t\t| \"decision\"\n\t\t| \"ready\"\n\t\t| \"executing\"\n\t\t| \"blocked\"\n\t\t| \"completed\";\n\tlane: \"lite\" | \"standard\" | \"strict\";\n\tlaneReason: string;\n\tblocker: string | null;\n\treason: string;\n\tnextStep: string;\n\tnextCommand: string;\n};\n\nexport type SummarizedSessionDetails = {\n\tid: string;\n\tgoal: string;\n\tapproval: Session[\"approval\"];\n\tstatus: Session[\"status\"];\n\tplanSummary: string | null;\n\tplanOverview: string | null;\n\tcompletion: ReturnType<typeof summarizeCompletion>;\n\tfinalReviewPolicy:\n\t\t| NonNullable<\n\t\t\t\tNonNullable<Session[\"plan\"]>[\"deliveryPolicy\"]\n\t\t >[\"finalReviewPolicy\"]\n\t\t| null;\n\tactiveFeature: SummarizedFeature | null;\n\tfeatureProgress: {\n\t\tcompleted: number;\n\t\ttotal: number;\n\t};\n\ttaskProgress: TaskProgressRow[];\n\tfeatures: SummarizedFeature[];\n\tnotes: Session[\"notes\"];\n\tartifacts: Session[\"artifacts\"];\n\tclosure: Session[\"closure\"];\n\tplanning: SummarizedPlanning;\n\tdecisionGate: ReturnType<typeof activeDecisionGate>;\n\tlastOutcome: Session[\"execution\"][\"lastOutcome\"];\n\tlastNextStep: Session[\"execution\"][\"lastNextStep\"];\n\tlastFeatureResult: Session[\"execution\"][\"lastFeatureResult\"];\n\tlastReviewerDecision: Session[\"execution\"][\"lastReviewerDecision\"];\n\tlastValidationRun: Session[\"execution\"][\"lastValidationRun\"];\n\tlatestFailedAttempt?: NonNullable<Session[\"execution\"][\"lastFailedMutation\"]>;\n\tlastOutcomeKind: Session[\"execution\"][\"lastOutcomeKind\"];\n\tnextCommand: string;\n\toperator: SessionOperatorState;\n\tfeatureLines: string[];\n};\n\ntype SessionViewModel = {\n\tstatus: string;\n\tsummary: string;\n\tsession: SummarizedSessionDetails | null;\n\tguidance: SessionGuidance;\n\toperator: SessionOperatorState;\n};\n\nconst NO_ACTIVE_SESSION_SUMMARY = \"No active Flow session found.\";\nconst NO_ACTIVE_SESSION_GUIDANCE_SUMMARY =\n\t\"No active Flow session exists for this workspace.\";\n\nfunction missingSessionGuidance(\n\toperator: SessionOperatorState,\n): SessionGuidance {\n\treturn {\n\t\tcategory: \"no_session\",\n\t\tstatus: \"missing\",\n\t\tsummary: NO_ACTIVE_SESSION_GUIDANCE_SUMMARY,\n\t\t...operator,\n\t};\n}\n\nfunction sessionSummaryText(session: Session): string {\n\treturn (\n\t\tsession.execution.lastSummary ??\n\t\tsession.plan?.summary ??\n\t\t\"Flow session is initialized.\"\n\t);\n}\n\nfunction buildSessionDetails(\n\tsession: Session,\n\toperator: SessionOperatorState,\n): SummarizedSessionDetails {\n\tconst features = sessionFeatures(session);\n\tconst completion = summarizeCompletion(session);\n\tconst decisionGate = activeDecisionGate(session);\n\n\treturn {\n\t\tid: session.id,\n\t\tgoal: session.goal,\n\t\tapproval: session.approval,\n\t\tstatus: session.status,\n\t\tplanSummary: session.plan?.summary ?? null,\n\t\tplanOverview: session.plan?.overview ?? null,\n\t\tcompletion,\n\t\tfinalReviewPolicy: session.plan\n\t\t\t? finalReviewPolicyForPlan(session.plan)\n\t\t\t: null,\n\t\tactiveFeature: projectActiveFeature(\n\t\t\tactiveFeatureForSession(session, features),\n\t\t),\n\t\tfeatureProgress: {\n\t\t\tcompleted: features.filter((feature) => feature.status === \"completed\")\n\t\t\t\t.length,\n\t\t\ttotal: features.length,\n\t\t},\n\t\ttaskProgress: projectTaskProgress(session, operator),\n\t\tfeatures: features.map(projectFeature),\n\t\tnotes: session.notes,\n\t\tartifacts: session.artifacts,\n\t\tclosure: session.closure,\n\t\tplanning: summarizePlanning(session),\n\t\tdecisionGate,\n\t\tlastOutcome: session.execution.lastOutcome,\n\t\tlastNextStep: session.execution.lastNextStep,\n\t\tlastFeatureResult: session.execution.lastFeatureResult,\n\t\tlastReviewerDecision: session.execution.lastReviewerDecision,\n\t\tlastValidationRun: session.execution.lastValidationRun,\n\t\t...(session.execution.lastFailedMutation\n\t\t\t? { latestFailedAttempt: session.execution.lastFailedMutation }\n\t\t\t: {}),\n\t\tlastOutcomeKind: session.execution.lastOutcomeKind,\n\t\tnextCommand: deriveNextCommand(session),\n\t\toperator,\n\t\tfeatureLines: features.map(summarizeFeature),\n\t};\n}\n\nfunction buildSessionGuidance(\n\tsession: Session | null,\n\toperator: SessionOperatorState,\n): SessionGuidance {\n\tif (!session) {\n\t\treturn missingSessionGuidance(operator);\n\t}\n\n\tswitch (operator.phase) {\n\t\tcase \"decision\": {\n\t\t\tconst decisionGate = activeDecisionGate(session);\n\t\t\treturn {\n\t\t\t\tcategory: \"decision_gate\",\n\t\t\t\tstatus: decisionGate?.status ?? session.status,\n\t\t\t\tsummary: decisionGate?.question ?? operator.blocker ?? session.status,\n\t\t\t\t...operator,\n\t\t\t};\n\t\t}\n\t\tcase \"planning\": {\n\t\t\tconst hasPlan = Boolean(session.plan);\n\t\t\treturn {\n\t\t\t\tcategory: \"planning\",\n\t\t\t\tstatus: session.status,\n\t\t\t\tsummary: hasPlan\n\t\t\t\t\t? \"Flow has a draft plan that still needs the next planning step.\"\n\t\t\t\t\t: \"Flow needs a draft plan before execution can begin.\",\n\t\t\t\t...operator,\n\t\t\t};\n\t\t}\n\t\tcase \"blocked\":\n\t\t\treturn {\n\t\t\t\tcategory: \"blocked\",\n\t\t\t\tstatus: session.status,\n\t\t\t\tsummary:\n\t\t\t\t\toperator.blocker ??\n\t\t\t\t\t\"Flow is blocked and needs recovery before it can continue.\",\n\t\t\t\t...operator,\n\t\t\t};\n\t\tcase \"ready\":\n\t\tcase \"executing\": {\n\t\t\tconst activeFeature = activeFeatureForSession(session);\n\t\t\treturn {\n\t\t\t\tcategory: \"execution\",\n\t\t\t\tstatus: session.status,\n\t\t\t\tsummary: activeFeature\n\t\t\t\t\t? `Flow is focused on feature '${activeFeature.id}'.`\n\t\t\t\t\t: \"Flow is ready to continue execution.\",\n\t\t\t\t...operator,\n\t\t\t};\n\t\t}\n\t\tcase \"completed\":\n\t\t\treturn {\n\t\t\t\tcategory: \"completed\",\n\t\t\t\tstatus: session.status,\n\t\t\t\tsummary:\n\t\t\t\t\tsession.closure?.summary ??\n\t\t\t\t\tsession.execution.lastSummary ??\n\t\t\t\t\t\"Flow has completed the active session.\",\n\t\t\t\t...operator,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn missingSessionGuidance(operator);\n\t}\n}\n\nexport function deriveSessionViewModel(\n\tsession: Session | null,\n): SessionViewModel {\n\tif (!session) {\n\t\tconst operator = deriveSessionOperatorState(null);\n\t\treturn {\n\t\t\tstatus: \"missing\",\n\t\t\tsummary: NO_ACTIVE_SESSION_SUMMARY,\n\t\t\tsession: null,\n\t\t\tguidance: missingSessionGuidance(operator),\n\t\t\toperator,\n\t\t};\n\t}\n\n\tconst operator = deriveSessionOperatorState(session);\n\n\treturn {\n\t\tstatus: session.status,\n\t\tsummary: sessionSummaryText(session),\n\t\tsession: buildSessionDetails(session, operator),\n\t\tguidance: buildSessionGuidance(session, operator),\n\t\toperator,\n\t};\n}\n\nexport function summarizeSession(session: Session | null) {\n\tconst viewModel = deriveSessionViewModel(session);\n\treturn viewModel.session\n\t\t? {\n\t\t\t\tstatus: viewModel.status,\n\t\t\t\tsummary: viewModel.summary,\n\t\t\t\tsession: viewModel.session,\n\t\t\t}\n\t\t: {\n\t\t\t\tstatus: viewModel.status,\n\t\t\t\tsummary: viewModel.summary,\n\t\t\t};\n}\n\nexport function explainSessionState(session: Session | null): SessionGuidance {\n\treturn deriveSessionViewModel(session).guidance;\n}\n\nexport type { SessionOperatorState } from \"./session-operator-state\";\nexport { deriveNextCommand } from \"./session-operator-state\";\n",
|
|
@@ -54,12 +55,14 @@
|
|
|
54
55
|
"import type { Feature, Session, WorkerResultArgs } from \"../schema\";\nimport {\n\tcompleteExecutionRun,\n\tmarkSessionCompleted,\n} from \"./execution-completion\";\nimport { startRun as startExecutionRun } from \"./execution-selection\";\nimport { fail, type TransitionResult } from \"./shared\";\n\nexport { validateSuccessfulCompletion } from \"./execution-completion\";\n\nexport function startRun(\n\tsession: Session,\n\trequestedId?: string,\n): TransitionResult<{\n\tsession: Session;\n\tfeature: Feature | null;\n\treason?: string;\n}> {\n\treturn startExecutionRun(session, requestedId, markSessionCompleted);\n}\n\nexport function completeRun(\n\tsession: Session,\n\tworker: WorkerResultArgs,\n): TransitionResult<Session> {\n\tif (!session.plan) {\n\t\treturn fail(\"There is no active plan to apply the worker result to.\");\n\t}\n\tif (!session.execution.activeFeatureId) {\n\t\treturn fail(\"There is no active feature to complete.\");\n\t}\n\tif (worker.featureResult.featureId !== session.execution.activeFeatureId) {\n\t\treturn fail(\n\t\t\t`Worker result feature '${worker.featureResult.featureId}' does not match active feature '${session.execution.activeFeatureId}'.`,\n\t\t);\n\t}\n\n\treturn completeExecutionRun(\n\t\tsession,\n\t\tsession.execution.activeFeatureId,\n\t\tworker,\n\t);\n}\n",
|
|
55
56
|
"import {\n\tcompletionPolicyTargetError,\n\tmergePlanningContext,\n\tselectProjectedFeatureSubset,\n\tvalidatePlanGraph,\n\tvalidateReviewAndFixFindingPrerequisite,\n} from \"../domain\";\nimport type { Plan, PlanInput, PlanningContext, Session } from \"../schema\";\nimport { nowIso } from \"../util\";\nimport { clearExecution, fail, succeed, type TransitionResult } from \"./shared\";\n\ntype DraftPlanEditMessages = {\n\tmissingPlan: string;\n\tactiveSession: string;\n};\n\ntype DraftPlanSession = Session & { plan: Plan };\ntype ApplyPlanInput = Omit<PlanInput, \"features\"> & {\n\tfeatures: readonly (\n\t\t| {\n\t\t\t\tid?: string;\n\t\t\t\ttitle?: string;\n\t\t\t\tsummary?: string;\n\t\t\t\tstatus?: PlanInput[\"features\"][number][\"status\"];\n\t\t\t\tpriority?: PlanInput[\"features\"][number][\"priority\"];\n\t\t\t\tdeferCandidate?: PlanInput[\"features\"][number][\"deferCandidate\"];\n\t\t\t\tfileTargets?: readonly string[] | undefined;\n\t\t\t\treviewScope?: PlanInput[\"features\"][number][\"reviewScope\"];\n\t\t\t\tverification?: readonly string[] | undefined;\n\t\t\t\tdependsOn?: readonly string[] | undefined;\n\t\t\t\tblockedBy?: readonly string[] | undefined;\n\t\t }\n\t\t| undefined\n\t)[];\n};\n\nfunction normalizePlan(planInput: ApplyPlanInput): Plan {\n\tconst features = [...planInput.features].filter(\n\t\t(feature): feature is NonNullable<typeof feature> => feature !== undefined,\n\t);\n\n\treturn {\n\t\tsummary: planInput.summary,\n\t\toverview: planInput.overview,\n\t\trequirements: [...(planInput.requirements ?? [])],\n\t\tarchitectureDecisions: [...(planInput.architectureDecisions ?? [])],\n\t\tgoalMode: planInput.goalMode ?? \"implementation\",\n\t\tdecompositionPolicy: planInput.decompositionPolicy ?? \"atomic_feature\",\n\t\tcompletionPolicy: planInput.completionPolicy,\n\t\tdeliveryPolicy: planInput.deliveryPolicy\n\t\t\t? {\n\t\t\t\t\tpriorityMode: planInput.deliveryPolicy.priorityMode ?? \"balanced\",\n\t\t\t\t\tstopRule: planInput.deliveryPolicy.stopRule ?? \"ship_when_clean\",\n\t\t\t\t\tdeferAllowed: planInput.deliveryPolicy.deferAllowed ?? false,\n\t\t\t\t\tfinalReviewPolicy:\n\t\t\t\t\t\tplanInput.deliveryPolicy.finalReviewPolicy ?? \"detailed\",\n\t\t\t\t\t...(planInput.deliveryPolicy.strictReview === true\n\t\t\t\t\t\t? { strictReview: true }\n\t\t\t\t\t\t: {}),\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tnotes: planInput.notes ? [...planInput.notes] : undefined,\n\t\tfeatures: features.map((feature) => ({\n\t\t\tid: feature.id ?? \"\",\n\t\t\ttitle: feature.title ?? \"\",\n\t\t\tsummary: feature.summary ?? \"\",\n\t\t\tfileTargets: [...(feature.fileTargets ?? [])],\n\t\t\t...(feature.reviewScope ? { reviewScope: [...feature.reviewScope] } : {}),\n\t\t\tverification: [...(feature.verification ?? [])],\n\t\t\t...(feature.dependsOn ? { dependsOn: [...feature.dependsOn] } : {}),\n\t\t\t...(feature.blockedBy ? { blockedBy: [...feature.blockedBy] } : {}),\n\t\t\tstatus: \"pending\",\n\t\t\tpriority: feature.priority ?? \"important\",\n\t\t\tdeferCandidate: feature.deferCandidate ?? false,\n\t\t})),\n\t};\n}\n\nfunction prepareDraftPlanEdit(\n\tsession: Session,\n\tmessages: DraftPlanEditMessages,\n): TransitionResult<DraftPlanSession> {\n\tconst { plan } = session;\n\tif (!plan) {\n\t\treturn fail(messages.missingPlan);\n\t}\n\tif (session.status !== \"planning\" || session.execution.activeFeatureId) {\n\t\treturn fail(messages.activeSession);\n\t}\n\n\treturn succeed({\n\t\t...session,\n\t\tplan: {\n\t\t\t...plan,\n\t\t\tfeatures: [...plan.features],\n\t\t},\n\t});\n}\n\nexport function applyPlan(\n\tsession: Session,\n\tplanInput: ApplyPlanInput,\n\tplanning?: Partial<PlanningContext>,\n): TransitionResult<Session> {\n\tconst plan = normalizePlan(planInput);\n\tconst nextPlanning = mergePlanningContext(session.planning, planning ?? {});\n\tconst planGraphError = validatePlanGraph(plan);\n\tif (planGraphError) {\n\t\treturn fail(planGraphError);\n\t}\n\tconst reviewAndFixFindingError = validateReviewAndFixFindingPrerequisite(\n\t\tplan,\n\t\tnextPlanning,\n\t);\n\tif (reviewAndFixFindingError) {\n\t\treturn fail(reviewAndFixFindingError);\n\t}\n\tconst completionPolicyError = completionPolicyTargetError(plan);\n\tif (completionPolicyError) {\n\t\treturn fail(completionPolicyError);\n\t}\n\n\tconst next: Session = {\n\t\t...session,\n\t\tplan,\n\t\tstatus: \"planning\",\n\t\tapproval: \"pending\",\n\t\tclosure: null,\n\t\ttimestamps: {\n\t\t\t...session.timestamps,\n\t\t\tapprovedAt: null,\n\t\t\tcompletedAt: null,\n\t\t},\n\t\tnotes: [],\n\t\tplanning: nextPlanning,\n\t\texecution: {\n\t\t\t...session.execution,\n\t\t},\n\t};\n\treturn succeed(clearExecution(next));\n}\n\nexport function isPlanApprovalAlreadyApplied(\n\tsession: Session,\n\tfeatureIds?: readonly string[],\n): boolean {\n\tconst { plan } = session;\n\tif (\n\t\t!plan ||\n\t\tsession.approval !== \"approved\" ||\n\t\tsession.status !== \"ready\" ||\n\t\tsession.execution.activeFeatureId !== null\n\t) {\n\t\treturn false;\n\t}\n\tif (!featureIds || featureIds.length === 0) {\n\t\treturn true;\n\t}\n\tif (featureIds.length !== plan.features.length) {\n\t\treturn false;\n\t}\n\n\tconst requestedFeatureIds = new Set(featureIds);\n\tif (requestedFeatureIds.size !== featureIds.length) {\n\t\treturn false;\n\t}\n\n\tconst approvedFeatureIds = new Set(\n\t\tplan.features.map((feature) => feature.id),\n\t);\n\treturn (\n\t\trequestedFeatureIds.size === approvedFeatureIds.size &&\n\t\t[...requestedFeatureIds].every((featureId) =>\n\t\t\tapprovedFeatureIds.has(featureId),\n\t\t)\n\t);\n}\n\nexport function approvePlan(\n\tsession: Session,\n\tfeatureIds?: string[],\n): TransitionResult<Session> {\n\tif (isPlanApprovalAlreadyApplied(session, featureIds)) {\n\t\treturn succeed(session);\n\t}\n\tif (\n\t\tsession.plan &&\n\t\tsession.approval === \"approved\" &&\n\t\tsession.status === \"ready\" &&\n\t\tsession.execution.activeFeatureId === null &&\n\t\tfeatureIds &&\n\t\tfeatureIds.length > 0\n\t) {\n\t\treturn fail(\n\t\t\t\"The plan is already approved; feature selection cannot be changed during approval.\",\n\t\t);\n\t}\n\n\tconst editable = prepareDraftPlanEdit(session, {\n\t\tmissingPlan: \"There is no draft plan to approve.\",\n\t\tactiveSession:\n\t\t\t\"The active session is already executing work. Replanning or approval is only allowed while reviewing a draft plan.\",\n\t});\n\tif (!editable.ok) {\n\t\treturn editable;\n\t}\n\n\tconst next = editable.value;\n\n\tif (featureIds && featureIds.length > 0) {\n\t\tconst subset = selectProjectedFeatureSubset(\n\t\t\tnext.plan.features,\n\t\t\tfeatureIds,\n\t\t\t(featureId) =>\n\t\t\t\t`Feature '${featureId}' depends on omitted features. Select a dependency-consistent set before approval.`,\n\t\t\tfalse,\n\t\t);\n\t\tif (!subset.ok) {\n\t\t\treturn fail(subset.error);\n\t\t}\n\n\t\tnext.plan.features = subset.value;\n\t\tconst completionPolicyError = completionPolicyTargetError(next.plan);\n\t\tif (completionPolicyError) {\n\t\t\treturn fail(completionPolicyError);\n\t\t}\n\t}\n\n\treturn succeed({\n\t\t...next,\n\t\tapproval: \"approved\",\n\t\tstatus: \"ready\",\n\t\ttimestamps: {\n\t\t\t...next.timestamps,\n\t\t\tapprovedAt: nowIso(),\n\t\t},\n\t});\n}\n\nexport function selectPlanFeatures(\n\tsession: Session,\n\tfeatureIds: string[],\n): TransitionResult<Session> {\n\tconst editable = prepareDraftPlanEdit(session, {\n\t\tmissingPlan: \"There is no draft plan to narrow.\",\n\t\tactiveSession:\n\t\t\t\"The active session is already executing work. Narrow the plan only while it is still a draft.\",\n\t});\n\tif (!editable.ok) {\n\t\treturn editable;\n\t}\n\tif (featureIds.length === 0) {\n\t\treturn fail(\"Provide at least one feature id to keep in the draft plan.\");\n\t}\n\n\tconst next = editable.value;\n\tconst subset = selectProjectedFeatureSubset(\n\t\tnext.plan.features,\n\t\tfeatureIds,\n\t\t(featureId) =>\n\t\t\t`Feature '${featureId}' depends on omitted features. Keep a dependency-consistent set.`,\n\t\ttrue,\n\t);\n\tif (!subset.ok) {\n\t\treturn fail(subset.error);\n\t}\n\n\tnext.plan.features = subset.value;\n\tconst completionPolicyError = completionPolicyTargetError(next.plan);\n\tif (completionPolicyError) {\n\t\treturn fail(completionPolicyError);\n\t}\n\treturn succeed({\n\t\t...clearExecution(next),\n\t\tapproval: \"pending\",\n\t\tstatus: \"planning\",\n\t});\n}\n",
|
|
56
57
|
"import {\n\tbuildReviewerDecision,\n\ttype RecordReviewerDecisionInput,\n\tvalidateReviewerDecisionInput,\n} from \"../domain\";\nimport type { Feature, ReviewerDecision, Session } from \"../schema\";\nimport { fail, succeed, type TransitionResult } from \"./shared\";\n\ntype FeatureScopeReviewerDecision = Extract<\n\tReviewerDecision,\n\t{ scope: \"feature\" }\n>;\n\nfunction collectDependents(\n\tfeatures: Feature[],\n\tfeatureId: string,\n): Set<string> {\n\tconst dependents = new Set<string>();\n\tlet changed = true;\n\n\twhile (changed) {\n\t\tchanged = false;\n\t\tfor (const feature of features) {\n\t\t\tif (feature.id === featureId || dependents.has(feature.id)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst dependencies = new Set([\n\t\t\t\t...(feature.dependsOn ?? []),\n\t\t\t\t...(feature.blockedBy ?? []),\n\t\t\t]);\n\t\t\tif (\n\t\t\t\tdependencies.has(featureId) ||\n\t\t\t\t[...dependents].some((id) => dependencies.has(id))\n\t\t\t) {\n\t\t\t\tdependents.add(feature.id);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dependents;\n}\n\nfunction resetAffectedFeatures(\n\tfeatures: Feature[],\n\taffected: Set<string>,\n): Feature[] {\n\treturn features.map((item) =>\n\t\taffected.has(item.id) ? { ...item, status: \"pending\" } : item,\n\t);\n}\n\nfunction clearLastRunProjection(\n\texecution: Session[\"execution\"],\n\tsession: Session,\n) {\n\texecution.lastFeatureId = null;\n\texecution.lastValidationRun = [];\n\texecution.lastOutcome = null;\n\texecution.lastNextStep = null;\n\texecution.lastFeatureResult = null;\n\texecution.lastReviewerDecision = null;\n\tsession.artifacts = [];\n\tsession.notes = [];\n}\n\nfunction buildResetSummary(featureId: string, affectedCount: number): string {\n\treturn affectedCount > 1\n\t\t? `Reset feature '${featureId}' and its dependent features to pending.`\n\t\t: `Reset feature '${featureId}' to pending.`;\n}\n\nfunction validateFeatureScopeReviewerDecision(\n\tsession: Session,\n\tdecision: FeatureScopeReviewerDecision,\n): TransitionResult<void> {\n\tif (!session.execution.activeFeatureId) {\n\t\treturn fail(\"There is no active feature to review.\");\n\t}\n\tif (decision.featureId !== session.execution.activeFeatureId) {\n\t\treturn fail(\n\t\t\t`Reviewer decision feature '${decision.featureId}' does not match active feature '${session.execution.activeFeatureId}'.`,\n\t\t);\n\t}\n\n\treturn succeed(undefined);\n}\n\nfunction isFeatureScopeReviewerDecision(\n\tdecision: ReviewerDecision,\n): decision is FeatureScopeReviewerDecision {\n\treturn decision.scope === \"feature\";\n}\n\nfunction canonicalizeDecisionValue(value: unknown): unknown {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(canonicalizeDecisionValue);\n\t}\n\tif (value && typeof value === \"object\") {\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(value)\n\t\t\t\t.filter(([, entryValue]) => entryValue !== undefined)\n\t\t\t\t.sort(([left], [right]) => left.localeCompare(right))\n\t\t\t\t.map(([key, entryValue]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tcanonicalizeDecisionValue(entryValue),\n\t\t\t\t]),\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction reviewerDecisionFingerprint(decision: ReviewerDecision): string {\n\treturn JSON.stringify(canonicalizeDecisionValue(decision));\n}\n\nfunction isSameReviewerDecision(\n\tcurrent: ReviewerDecision | null,\n\tnext: ReviewerDecision,\n): boolean {\n\treturn current\n\t\t? reviewerDecisionFingerprint(current) === reviewerDecisionFingerprint(next)\n\t\t: false;\n}\n\nexport function isReviewerDecisionAlreadyRecorded(\n\tsession: Session,\n\tinput: RecordReviewerDecisionInput,\n): boolean {\n\treturn isSameReviewerDecision(\n\t\tsession.execution.lastReviewerDecision,\n\t\tbuildReviewerDecision(input),\n\t);\n}\n\nexport function resetFeature(\n\tsession: Session,\n\tfeatureId: string,\n): TransitionResult<Session> {\n\tconst plan = session.plan;\n\tif (!plan) {\n\t\treturn fail(\"There is no active plan to reset.\");\n\t}\n\n\tconst feature = plan.features.find((item) => item.id === featureId);\n\tif (!feature) {\n\t\treturn fail(`Feature '${featureId}' was not found in the active plan.`);\n\t}\n\n\tconst affected = collectDependents(plan.features, featureId);\n\taffected.add(featureId);\n\n\tconst nextPlan = {\n\t\t...plan,\n\t\tfeatures: resetAffectedFeatures(plan.features, affected),\n\t};\n\tconst nextExecution = {\n\t\t...session.execution,\n\t\tactiveFeatureId:\n\t\t\tsession.execution.activeFeatureId &&\n\t\t\taffected.has(session.execution.activeFeatureId)\n\t\t\t\t? null\n\t\t\t\t: session.execution.activeFeatureId,\n\t\tlastSummary: buildResetSummary(featureId, affected.size),\n\t\tlastOutcomeKind: null,\n\t};\n\tconst next: Session = {\n\t\t...session,\n\t\tplan: nextPlan,\n\t\tstatus: session.approval === \"approved\" ? \"ready\" : \"planning\",\n\t\tclosure: null,\n\t\texecution: nextExecution,\n\t\ttimestamps: {\n\t\t\t...session.timestamps,\n\t\t\tcompletedAt: null,\n\t\t},\n\t};\n\n\tif (\n\t\tsession.execution.lastFeatureId &&\n\t\taffected.has(session.execution.lastFeatureId)\n\t) {\n\t\tclearLastRunProjection(next.execution, next);\n\t}\n\n\treturn succeed(next);\n}\n\nexport function recordReviewerDecision(\n\tsession: Session,\n\tinput: RecordReviewerDecisionInput,\n): TransitionResult<Session> {\n\tconst inputFailure = validateReviewerDecisionInput(session, input);\n\tif (inputFailure) {\n\t\treturn fail(inputFailure);\n\t}\n\n\tconst decision = buildReviewerDecision(input);\n\n\tif (isFeatureScopeReviewerDecision(decision)) {\n\t\tconst validation = validateFeatureScopeReviewerDecision(session, decision);\n\t\tif (!validation.ok) {\n\t\t\treturn validation;\n\t\t}\n\t}\n\n\tif (isReviewerDecisionAlreadyRecorded(session, input)) {\n\t\treturn succeed(session);\n\t}\n\n\treturn succeed({\n\t\t...session,\n\t\texecution: {\n\t\t\t...session.execution,\n\t\t\tlastReviewerDecision: decision,\n\t\t\tlastSummary: decision.summary,\n\t\t},\n\t});\n}\n",
|
|
57
|
-
"/**\n * Flow action engine: the single load -> mutate -> validate -> persist ->\n * render pipeline shared by every session action. Handlers live in\n * `actions.ts`; this module owns runtime ports, result shapes, and\n * finalization (persistence + artifact sync + response shaping).\n */\nimport { errorResponse } from \"../errors\";\nimport {\n\tactivateSession,\n\tcloseSession,\n\tlistSessionHistory,\n\tloadSession,\n\tloadStoredSession,\n\tsaveSessionState,\n\tsyncSessionArtifacts,\n} from \"../lifecycle\";\nimport type { LatestFailedFlowAttempt, Session } from \"../schema\";\nimport type { TransitionResult } from \"../transitions\";\n\nexport type RuntimeToolResponse = Record<string, unknown>;\n\nexport interface SessionRuntimePort {\n\tloadSession: (worktree: string) => Promise<Session | null>;\n\tsaveSessionState: (worktree: string, session: Session) => Promise<Session>;\n\tsyncSessionArtifacts: (worktree: string, session: Session) => Promise<void>;\n}\n\nexport interface SessionReadRuntimePort {\n\tloadSession: (worktree: string) => Promise<Session | null>;\n\tlistSessionHistory: typeof listSessionHistory;\n\tloadStoredSession: typeof loadStoredSession;\n}\n\nexport interface SessionWorkspaceRuntimePort extends SessionRuntimePort {\n\tactivateSession: typeof activateSession;\n\tcloseSession: typeof closeSession;\n}\n\nexport const DEFAULT_SESSION_RUNTIME_PORT: SessionRuntimePort = {\n\tloadSession,\n\tsaveSessionState,\n\tsyncSessionArtifacts,\n};\n\nexport const DEFAULT_SESSION_READ_RUNTIME_PORT: SessionReadRuntimePort = {\n\tloadSession,\n\tlistSessionHistory,\n\tloadStoredSession,\n};\n\nexport const DEFAULT_SESSION_WORKSPACE_RUNTIME_PORT: SessionWorkspaceRuntimePort =\n\t{\n\t\tloadSession,\n\t\tsaveSessionState,\n\t\tsyncSessionArtifacts,\n\t\tactivateSession,\n\t\tcloseSession,\n\t};\n\nexport type FailedAttemptClearPolicy =\n\t| true\n\t| { tool: LatestFailedFlowAttempt[\"tool\"] };\n\nexport type SessionArtifactSyncFailure = {\n\tstatus: \"failed\";\n\terror: string;\n};\n\nexport type SessionMutationAction<T, Name extends string = string> = {\n\tname: Name;\n\trun: (session: Session) => TransitionResult<T>;\n\tgetSession: (value: T) => Session;\n\tonSuccess: (saved: Session, value: T) => RuntimeToolResponse;\n\tisNoopSuccess?: (value: T, originalSession: Session) => boolean;\n\tonNoopSuccess?: (saved: Session, value: T) => RuntimeToolResponse;\n\tmissingResponse?: RuntimeToolResponse;\n\tonError?: (\n\t\tresult: Extract<TransitionResult<T>, { ok: false }>,\n\t) => RuntimeToolResponse;\n\trecordFailure?: (\n\t\tsession: Session,\n\t\tresult: Extract<TransitionResult<T>, { ok: false }>,\n\t) => Session | null;\n\tclearFailedAttemptOnSuccess?: FailedAttemptClearPolicy;\n\tsyncArtifacts?: boolean;\n};\n\nexport type SessionMutationResult<T, Name extends string = string> =\n\t| { kind: \"missing\"; actionName: Name; response: RuntimeToolResponse }\n\t| {\n\t\t\tkind: \"success\";\n\t\t\tactionName: Name;\n\t\t\tvalue: T;\n\t\t\tsavedSession: Session;\n\t\t\tresponse: RuntimeToolResponse;\n\t }\n\t| {\n\t\t\tkind: \"success_artifact_sync_failed\";\n\t\t\tactionName: Name;\n\t\t\tvalue: T;\n\t\t\tsavedSession: Session;\n\t\t\tresponse: RuntimeToolResponse;\n\t\t\tartifactSync: SessionArtifactSyncFailure;\n\t }\n\t| {\n\t\t\tkind: \"failure\";\n\t\t\tactionName: Name;\n\t\t\tresponse: RuntimeToolResponse;\n\t\t\ttransition: Extract<TransitionResult<T>, { ok: false }>;\n\t\t\tsavedSession?: Session;\n\t\t\tartifactSync?: SessionArtifactSyncFailure;\n\t };\n\nexport type RuntimeAction<T, Name extends string, Port> = {\n\tname: Name;\n\trun: (worktree: string, runtime: Port) => Promise<T>;\n\tonSuccess: (value: T) => RuntimeToolResponse;\n};\n\nexport type RuntimeActionResult<T, Name extends string = string> = {\n\tactionName: Name;\n\tvalue: T;\n\tresponse: RuntimeToolResponse;\n};\n\nexport type SessionReadAction<T, Name extends string = string> = RuntimeAction<\n\tT,\n\tName,\n\tSessionReadRuntimePort\n>;\n\nexport type SessionReadResult<\n\tT,\n\tName extends string = string,\n> = RuntimeActionResult<T, Name>;\n\nexport type SessionWorkspaceAction<\n\tT,\n\tName extends string = string,\n> = RuntimeAction<T, Name, SessionWorkspaceRuntimePort>;\n\nexport type SessionWorkspaceResult<\n\tT,\n\tName extends string = string,\n> = RuntimeActionResult<T, Name>;\n\nexport async function runRuntimeActionAtRoot<T, Name extends string, Port>(\n\tworktree: string,\n\taction: RuntimeAction<T, Name, Port>,\n\truntime: Port,\n): Promise<RuntimeActionResult<T, Name>> {\n\tconst value = await action.run(worktree, runtime);\n\treturn { actionName: action.name, value, response: action.onSuccess(value) };\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error && error.message\n\t\t? error.message\n\t\t: String(error);\n}\n\nfunction applyFailedAttemptClearPolicy(\n\tsession: Session,\n\tpolicy: FailedAttemptClearPolicy | undefined,\n): Session {\n\tif (!policy) {\n\t\treturn session;\n\t}\n\tconst shouldClear =\n\t\tpolicy === true ||\n\t\tsession.execution.lastFailedMutation?.tool === policy.tool;\n\tif (!shouldClear) {\n\t\treturn session;\n\t}\n\treturn {\n\t\t...session,\n\t\texecution: {\n\t\t\t...session.execution,\n\t\t\tlastFailedMutation: null,\n\t\t},\n\t};\n}\n\nfunction valueWithSavedSession<T>(\n\tvalue: T,\n\tresultSession: Session,\n\tsavedSession: Session,\n): T {\n\tif (value === resultSession) {\n\t\treturn savedSession as T;\n\t}\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn value;\n\t}\n\tif (!Object.hasOwn(value, \"session\")) {\n\t\treturn value;\n\t}\n\tconst compositeValue = value as T & { session?: unknown };\n\tif (compositeValue.session !== resultSession) {\n\t\treturn value;\n\t}\n\treturn { ...compositeValue, session: savedSession } as T;\n}\n\nasync function syncArtifactsAfterPersistence(\n\tworktree: string,\n\tsession: Session,\n\tsyncArtifacts: boolean,\n\truntime: SessionRuntimePort,\n): Promise<SessionArtifactSyncFailure | null> {\n\tif (!syncArtifacts) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tawait runtime.syncSessionArtifacts(worktree, session);\n\t\treturn null;\n\t} catch (error) {\n\t\treturn { status: \"failed\", error: errorMessage(error) };\n\t}\n}\n\nexport async function runMutationActionAtRoot<T, Name extends string>(\n\tworktree: string,\n\taction: SessionMutationAction<T, Name>,\n\truntime: SessionRuntimePort = DEFAULT_SESSION_RUNTIME_PORT,\n): Promise<SessionMutationResult<T, Name>> {\n\tconst session = await runtime.loadSession(worktree);\n\tif (!session) {\n\t\treturn {\n\t\t\tkind: \"missing\",\n\t\t\tactionName: action.name,\n\t\t\tresponse: action.missingResponse ?? {\n\t\t\t\tstatus: \"missing_session\",\n\t\t\t\tsummary: \"No active Flow session exists.\",\n\t\t\t},\n\t\t};\n\t}\n\n\tlet result = action.run(session);\n\tif (!result.ok && action.recordFailure) {\n\t\tconst failureSession = action.recordFailure(\n\t\t\tresult.session ?? session,\n\t\t\tresult,\n\t\t);\n\t\tif (failureSession) {\n\t\t\tresult = { ...result, session: failureSession };\n\t\t}\n\t}\n\n\tconst syncArtifacts = action.syncArtifacts ?? true;\n\tconst onError =\n\t\taction.onError ??\n\t\t((failure: Extract<TransitionResult<T>, { ok: false }>) =>\n\t\t\terrorResponse(failure.message));\n\n\tif (\n\t\tresult.ok &&\n\t\taction.onNoopSuccess &&\n\t\taction.isNoopSuccess?.(result.value, session) === true\n\t) {\n\t\tconst artifactSync = await syncArtifactsAfterPersistence(\n\t\t\tworktree,\n\t\t\tsession,\n\t\t\tsyncArtifacts,\n\t\t\truntime,\n\t\t);\n\t\tconst response = action.onNoopSuccess(session, result.value);\n\t\tif (artifactSync) {\n\t\t\treturn {\n\t\t\t\tkind: \"success_artifact_sync_failed\",\n\t\t\t\tactionName: action.name,\n\t\t\t\tvalue: result.value,\n\t\t\t\tsavedSession: session,\n\t\t\t\tresponse: {\n\t\t\t\t\t...response,\n\t\t\t\t\tstatus: \"partial_success\",\n\t\t\t\t\tpersistedMutation: false,\n\t\t\t\t\tartifactSync,\n\t\t\t\t},\n\t\t\t\tartifactSync,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkind: \"success\",\n\t\t\tactionName: action.name,\n\t\t\tvalue: result.value,\n\t\t\tsavedSession: session,\n\t\t\tresponse,\n\t\t};\n\t}\n\n\tif (!result.ok) {\n\t\tif (!result.session) {\n\t\t\treturn {\n\t\t\t\tkind: \"failure\",\n\t\t\t\tactionName: action.name,\n\t\t\t\tresponse: onError(result),\n\t\t\t\ttransition: result,\n\t\t\t};\n\t\t}\n\t\tconst saved = await runtime.saveSessionState(worktree, result.session);\n\t\tconst artifactSync = await syncArtifactsAfterPersistence(\n\t\t\tworktree,\n\t\t\tsaved,\n\t\t\tsyncArtifacts,\n\t\t\truntime,\n\t\t);\n\t\tconst response = onError(result);\n\t\treturn {\n\t\t\tkind: \"failure\",\n\t\t\tactionName: action.name,\n\t\t\tresponse: artifactSync\n\t\t\t\t? { ...response, persistedMutation: true, artifactSync }\n\t\t\t\t: response,\n\t\t\ttransition: result,\n\t\t\tsavedSession: saved,\n\t\t\t...(artifactSync ? { artifactSync } : {}),\n\t\t};\n\t}\n\n\tconst resultSession = action.getSession(result.value);\n\tconst nextSession = applyFailedAttemptClearPolicy(\n\t\tresultSession,\n\t\taction.clearFailedAttemptOnSuccess,\n\t);\n\tconst saved = await runtime.saveSessionState(worktree, nextSession);\n\tconst responseValue = valueWithSavedSession(\n\t\tresult.value,\n\t\tresultSession,\n\t\tsaved,\n\t);\n\tconst artifactSync = await syncArtifactsAfterPersistence(\n\t\tworktree,\n\t\tsaved,\n\t\tsyncArtifacts,\n\t\truntime,\n\t);\n\tconst response = action.onSuccess(saved, responseValue);\n\tif (artifactSync) {\n\t\treturn {\n\t\t\tkind: \"success_artifact_sync_failed\",\n\t\t\tactionName: action.name,\n\t\t\tvalue: responseValue,\n\t\t\tsavedSession: saved,\n\t\t\tresponse: {\n\t\t\t\t...response,\n\t\t\t\tstatus: \"partial_success\",\n\t\t\t\tpersistedMutation: true,\n\t\t\t\tartifactSync,\n\t\t\t},\n\t\t\tartifactSync,\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"success\",\n\t\tactionName: action.name,\n\t\tvalue: responseValue,\n\t\tsavedSession: saved,\n\t\tresponse,\n\t};\n}\n",
|
|
58
|
+
"import type { RecordReviewerDecisionInput } from \"../domain\";\nimport type {\n\tFlowReviewRecordFeatureArgs,\n\tFlowReviewRecordFinalArgs,\n} from \"../schema\";\n\nexport function normalizeFeatureReviewDecision(\n\tdecision: FlowReviewRecordFeatureArgs,\n): RecordReviewerDecisionInput {\n\treturn {\n\t\tscope: \"feature\" as const,\n\t\tfeatureId: decision.featureId,\n\t\tstatus: decision.status,\n\t\tsummary: decision.summary,\n\t\tblockingFindings: decision.blockingFindings ?? [],\n\t\tfollowUps: decision.followUps ?? [],\n\t\tsuggestedValidation: decision.suggestedValidation ?? [],\n\t\t...(decision.reviewPurpose\n\t\t\t? { reviewPurpose: decision.reviewPurpose }\n\t\t\t: {}),\n\t};\n}\n\nexport function normalizeFinalReviewDecision(\n\tdecision: FlowReviewRecordFinalArgs,\n): RecordReviewerDecisionInput {\n\treturn {\n\t\tscope: \"final\" as const,\n\t\tstatus: decision.status,\n\t\tsummary: decision.summary,\n\t\treviewDepth: decision.reviewDepth,\n\t\treviewedSurfaces: decision.reviewedSurfaces ?? [],\n\t\t...(decision.evidenceSummary\n\t\t\t? { evidenceSummary: decision.evidenceSummary }\n\t\t\t: {}),\n\t\t...(decision.validationAssessment\n\t\t\t? { validationAssessment: decision.validationAssessment }\n\t\t\t: {}),\n\t\tevidenceRefs: {\n\t\t\tchangedArtifacts: decision.evidenceRefs?.changedArtifacts ?? [],\n\t\t\tvalidationCommands: decision.evidenceRefs?.validationCommands ?? [],\n\t\t},\n\t\tremainingGaps: decision.remainingGaps ?? [],\n\t\tblockingFindings: decision.blockingFindings ?? [],\n\t\tfollowUps: decision.followUps ?? [],\n\t\tsuggestedValidation: decision.suggestedValidation ?? [],\n\t\t...(decision.reviewPurpose\n\t\t\t? { reviewPurpose: decision.reviewPurpose }\n\t\t\t: {}),\n\t};\n}\n",
|
|
59
|
+
"import { FLOW_PLAN_WITH_GOAL_COMMAND } from \"../constants\";\nimport { describeReviewFindingsMutationFailure } from \"../domain\";\nimport { mergePlanningContext } from \"../domain/planning-context\";\nimport { errorResponse } from \"../errors\";\nimport type {\n\tFeature,\n\tFlowReviewRecordFeatureArgs,\n\tFlowReviewRecordFinalArgs,\n\tLatestFailedFlowAttempt,\n\tPlanArgs,\n\tSession,\n\tWorkerResultArgs,\n} from \"../schema\";\nimport { summarizeSession } from \"../summary\";\nimport {\n\tapplyPlan,\n\tapprovePlan,\n\tcompleteRun,\n\tisPlanApprovalAlreadyApplied,\n\tisReviewerDecisionAlreadyRecorded,\n\tisRunStartAlreadyActive,\n\trecordReviewerDecision,\n\tresetFeature,\n\tselectPlanFeatures,\n\tstartRun,\n} from \"../transitions\";\nimport { fail, succeed, type TransitionRecovery } from \"../transitions/shared\";\nimport { nowIso } from \"../util\";\nimport type { SessionMutationAction } from \"./action-engine\";\nimport {\n\tnormalizeFeatureReviewDecision,\n\tnormalizeFinalReviewDecision,\n} from \"./session-review-decision-normalization\";\n\nconst MISSING_PLANNING_SESSION_RESPONSE = {\n\tstatus: \"missing_session\",\n\tsummary: \"No active Flow planning session exists.\",\n\tnextCommand: FLOW_PLAN_WITH_GOAL_COMMAND,\n} as const;\n\nconst MISSING_SESSION_RESPONSE = {\n\tstatus: \"missing_session\",\n\tsummary: \"No active Flow session exists.\",\n\tnextCommand: FLOW_PLAN_WITH_GOAL_COMMAND,\n} as const;\n\ntype FailedMutationActionName =\n\t| \"complete_run\"\n\t| \"record_feature_review\"\n\t| \"record_final_review\";\n\nconst FAILED_MUTATION_DESCRIPTORS: Record<\n\tFailedMutationActionName,\n\tPick<LatestFailedFlowAttempt, \"tool\" | \"phase\">\n> = {\n\tcomplete_run: { tool: \"flow_feature_complete\", phase: \"execution\" },\n\trecord_feature_review: { tool: \"flow_review_record\", phase: \"review\" },\n\trecord_final_review: { tool: \"flow_review_record\", phase: \"final_review\" },\n};\n\ntype FailedMutationResult = {\n\tmessage: string;\n\trecovery?: TransitionRecovery;\n};\n\nfunction withLatestFailedMutation(\n\tactionName: FailedMutationActionName,\n\tsession: Session,\n\tfailure: FailedMutationResult,\n): Session {\n\tconst descriptor = FAILED_MUTATION_DESCRIPTORS[actionName];\n\tconst failureCategory =\n\t\tfailure.recovery?.errorCode ?? \"transition_validation_failed\";\n\tconst previous = session.execution.lastFailedMutation;\n\tconst sameCategoryFailureCount =\n\t\tprevious?.tool === descriptor.tool &&\n\t\tprevious.failureCategory === failureCategory\n\t\t\t? (previous.sameCategoryFailureCount ?? 1) + 1\n\t\t\t: 1;\n\treturn {\n\t\t...session,\n\t\texecution: {\n\t\t\t...session.execution,\n\t\t\tlastFailedMutation: {\n\t\t\t\t...descriptor,\n\t\t\t\tstatus: \"error\",\n\t\t\t\tfailureCategory,\n\t\t\t\tsummary: failure.message,\n\t\t\t\t...(failure.recovery?.resolutionHint\n\t\t\t\t\t? { recoveryHint: failure.recovery.resolutionHint }\n\t\t\t\t\t: {}),\n\t\t\t\toccurredAt: nowIso(),\n\t\t\t\t...(sameCategoryFailureCount > 1 ? { sameCategoryFailureCount } : {}),\n\t\t\t},\n\t\t},\n\t\ttimestamps: {\n\t\t\t...session.timestamps,\n\t\t\tupdatedAt: nowIso(),\n\t\t},\n\t};\n}\n\nfunction summarizedSession(saved: Session) {\n\treturn summarizeSession(saved).session;\n}\n\nfunction okWithSession(saved: Session, summary: string) {\n\treturn {\n\t\tstatus: \"ok\" as const,\n\t\tsummary,\n\t\tsession: summarizedSession(saved),\n\t};\n}\n\nexport const SESSION_MUTATION_ACTION_NAMES = [\n\t\"record_planning_context\",\n\t\"apply_plan\",\n\t\"approve_plan\",\n\t\"auto_approve_lite_plan\",\n\t\"select_plan_features\",\n\t\"start_run\",\n\t\"complete_run\",\n\t\"reset_feature\",\n\t\"record_feature_review\",\n\t\"record_final_review\",\n] as const;\n\nexport type SessionMutationActionName =\n\t(typeof SESSION_MUTATION_ACTION_NAMES)[number];\n\nexport type SessionMutationPayloadMap = {\n\trecord_planning_context: Partial<Session[\"planning\"]>;\n\tapply_plan: {\n\t\tplan: PlanArgs;\n\t\tplanning?: Partial<Session[\"planning\"]>;\n\t};\n\tapprove_plan: {\n\t\tfeatureIds: string[];\n\t};\n\tauto_approve_lite_plan: undefined;\n\tselect_plan_features: {\n\t\tfeatureIds: string[];\n\t};\n\tstart_run: {\n\t\tfeatureId?: string;\n\t};\n\tcomplete_run: {\n\t\tworker: WorkerResultArgs;\n\t};\n\treset_feature: {\n\t\tfeatureId: string;\n\t};\n\trecord_feature_review: {\n\t\tdecision: FlowReviewRecordFeatureArgs;\n\t};\n\trecord_final_review: {\n\t\tdecision: FlowReviewRecordFinalArgs;\n\t};\n};\n\nexport type SessionMutationValueMap = {\n\trecord_planning_context: Session;\n\tapply_plan: {\n\t\tsession: Session;\n\t\tautoApproved: boolean;\n\t};\n\tapprove_plan: Session;\n\tauto_approve_lite_plan: Session;\n\tselect_plan_features: Session;\n\tstart_run: {\n\t\tsession: Session;\n\t\tfeature: Feature | null;\n\t\treason?: string;\n\t};\n\tcomplete_run: Session;\n\treset_feature: Session;\n\trecord_feature_review: Session;\n\trecord_final_review: Session;\n};\n\ntype SessionMutationActionHandlerMap = {\n\t[Name in SessionMutationActionName]: (\n\t\tpayload: SessionMutationPayloadMap[Name],\n\t) => SessionMutationAction<SessionMutationValueMap[Name]>;\n};\n\nfunction reviewDecisionErrorResponse(failure: {\n\tmessage: string;\n\trecovery?: unknown;\n\tsession?: Session;\n}) {\n\treturn errorResponse(failure.message, {\n\t\t...(failure.recovery ? { recovery: failure.recovery } : {}),\n\t\t...(failure.session?.execution.lastFailedMutation\n\t\t\t? { latestFailedAttempt: failure.session.execution.lastFailedMutation }\n\t\t\t: {}),\n\t});\n}\n\nfunction reviewerDecisionAction(\n\tname: \"record_feature_review\" | \"record_final_review\",\n\tnormalizedDecision: ReturnType<typeof normalizeFeatureReviewDecision>,\n): SessionMutationAction<Session> {\n\treturn {\n\t\tname,\n\t\trun: (session) => recordReviewerDecision(session, normalizedDecision),\n\t\tgetSession: (value) => value,\n\t\tonSuccess: (saved) => okWithSession(saved, \"Reviewer decision recorded.\"),\n\t\tisNoopSuccess: (value, originalSession) =>\n\t\t\tvalue === originalSession &&\n\t\t\tisReviewerDecisionAlreadyRecorded(originalSession, normalizedDecision),\n\t\tonNoopSuccess: (saved) =>\n\t\t\tokWithSession(\n\t\t\t\tsaved,\n\t\t\t\t\"Reviewer decision already recorded; no state change.\",\n\t\t\t),\n\t\tonError: reviewDecisionErrorResponse,\n\t\trecordFailure: (session, failure) =>\n\t\t\twithLatestFailedMutation(name, session, failure),\n\t\tclearFailedAttemptOnSuccess: {\n\t\t\ttool: \"flow_review_record\",\n\t\t},\n\t};\n}\n\nconst MUTATION_ACTION_HANDLERS: SessionMutationActionHandlerMap = {\n\trecord_planning_context(nextPlanning) {\n\t\treturn {\n\t\t\tname: \"record_planning_context\",\n\t\t\trun: (session) => {\n\t\t\t\tconst failure = describeReviewFindingsMutationFailure(\n\t\t\t\t\tsession,\n\t\t\t\t\tnextPlanning,\n\t\t\t\t);\n\t\t\t\tif (failure) {\n\t\t\t\t\treturn fail(failure);\n\t\t\t\t}\n\t\t\t\tconst updated: Session = {\n\t\t\t\t\t...session,\n\t\t\t\t\tplanning: mergePlanningContext(session.planning, nextPlanning),\n\t\t\t\t};\n\t\t\t\treturn succeed(updated);\n\t\t\t},\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => okWithSession(saved, \"Planning context recorded.\"),\n\t\t};\n\t},\n\n\tapply_plan({ plan, planning }) {\n\t\treturn {\n\t\t\tname: \"apply_plan\",\n\t\t\trun: (session) => {\n\t\t\t\tconst applied = applyPlan(session, { ...plan }, planning);\n\t\t\t\tif (!applied.ok) return applied;\n\t\t\t\tconst lane = summarizeSession(applied.value).session?.operator.lane;\n\t\t\t\tif (lane === \"lite\") {\n\t\t\t\t\tconst approved = approvePlan(applied.value);\n\t\t\t\t\tif (!approved.ok) return approved;\n\t\t\t\t\treturn succeed({ session: approved.value, autoApproved: true });\n\t\t\t\t}\n\t\t\t\treturn succeed({ session: applied.value, autoApproved: false });\n\t\t\t},\n\t\t\tgetSession: (value) => value.session,\n\t\t\tonSuccess: (saved, value) => ({\n\t\t\t\tstatus: \"ok\",\n\t\t\t\tsummary: value.autoApproved\n\t\t\t\t\t? \"Lite draft plan saved and auto-approved so execution can start immediately.\"\n\t\t\t\t\t: \"Draft plan saved.\",\n\t\t\t\tautoApproved: value.autoApproved,\n\t\t\t\tsession: summarizedSession(saved),\n\t\t\t}),\n\t\t\tmissingResponse: MISSING_PLANNING_SESSION_RESPONSE,\n\t\t};\n\t},\n\n\tauto_approve_lite_plan(_payload) {\n\t\treturn {\n\t\t\tname: \"auto_approve_lite_plan\",\n\t\t\trun: (session) => approvePlan(session),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => ({\n\t\t\t\tstatus: \"ok\",\n\t\t\t\tsummary:\n\t\t\t\t\t\"Lite draft plan saved and auto-approved so execution can start immediately.\",\n\t\t\t\tautoApproved: true,\n\t\t\t\tsession: summarizedSession(saved),\n\t\t\t}),\n\t\t\tmissingResponse: MISSING_PLANNING_SESSION_RESPONSE,\n\t\t};\n\t},\n\n\tapprove_plan({ featureIds }) {\n\t\treturn {\n\t\t\tname: \"approve_plan\",\n\t\t\trun: (session) => approvePlan(session, featureIds),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => okWithSession(saved, \"Plan approved.\"),\n\t\t\tisNoopSuccess: (value, originalSession) =>\n\t\t\t\tvalue === originalSession &&\n\t\t\t\tisPlanApprovalAlreadyApplied(originalSession, featureIds),\n\t\t\tonNoopSuccess: (saved) =>\n\t\t\t\tokWithSession(\n\t\t\t\t\tsaved,\n\t\t\t\t\t\"Plan approval already recorded; no state change.\",\n\t\t\t\t),\n\t\t};\n\t},\n\n\tselect_plan_features({ featureIds }) {\n\t\treturn {\n\t\t\tname: \"select_plan_features\",\n\t\t\trun: (session) => selectPlanFeatures(session, featureIds),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => okWithSession(saved, \"Draft plan narrowed.\"),\n\t\t};\n\t},\n\n\tstart_run({ featureId }) {\n\t\treturn {\n\t\t\tname: \"start_run\",\n\t\t\trun: (session) => startRun(session, featureId),\n\t\t\tgetSession: (value) => value.session,\n\t\t\tonSuccess: (saved, value) => {\n\t\t\t\tconst summary = summarizeSession(saved);\n\t\t\t\treturn {\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalue.reason === \"complete\"\n\t\t\t\t\t\t\t? \"complete\"\n\t\t\t\t\t\t\t: value.feature\n\t\t\t\t\t\t\t\t? \"ok\"\n\t\t\t\t\t\t\t\t: \"blocked\",\n\t\t\t\t\tsummary: summary.summary,\n\t\t\t\t\tsession: summary.session,\n\t\t\t\t\tfeature: value.feature,\n\t\t\t\t\treason: value.reason,\n\t\t\t\t};\n\t\t\t},\n\t\t\tisNoopSuccess: (value, originalSession) =>\n\t\t\t\tvalue.session === originalSession &&\n\t\t\t\tisRunStartAlreadyActive(originalSession, featureId),\n\t\t\tonNoopSuccess: (saved, value) =>\n\t\t\t\tokWithSession(\n\t\t\t\t\tsaved,\n\t\t\t\t\t`Feature '${value.feature?.id ?? featureId}' is already running; no state change.`,\n\t\t\t\t),\n\t\t\tmissingResponse: MISSING_SESSION_RESPONSE,\n\t\t};\n\t},\n\n\tcomplete_run({ worker }) {\n\t\treturn {\n\t\t\tname: \"complete_run\",\n\t\t\trun: (session) => completeRun(session, worker),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => {\n\t\t\t\tconst summary = summarizeSession(saved);\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"ok\" as const,\n\t\t\t\t\tsummary: summary.summary,\n\t\t\t\t\tsession: summary.session,\n\t\t\t\t};\n\t\t\t},\n\t\t\tonError: (failure) => ({\n\t\t\t\tstatus: \"error\",\n\t\t\t\tsummary: failure.message,\n\t\t\t\trecovery: failure.recovery,\n\t\t\t\t...(failure.session?.execution.lastFailedMutation\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tlatestFailedAttempt: failure.session.execution.lastFailedMutation,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t}),\n\t\t\trecordFailure: (session, failure) =>\n\t\t\t\twithLatestFailedMutation(\"complete_run\", session, failure),\n\t\t\tclearFailedAttemptOnSuccess: {\n\t\t\t\ttool: \"flow_feature_complete\",\n\t\t\t},\n\t\t};\n\t},\n\n\treset_feature({ featureId }) {\n\t\treturn {\n\t\t\tname: \"reset_feature\",\n\t\t\trun: (session) => resetFeature(session, featureId),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) =>\n\t\t\t\tokWithSession(saved, `Reset feature '${featureId}'.`),\n\t\t\tclearFailedAttemptOnSuccess: true,\n\t\t};\n\t},\n\n\trecord_feature_review({ decision }) {\n\t\treturn reviewerDecisionAction(\n\t\t\t\"record_feature_review\",\n\t\t\tnormalizeFeatureReviewDecision(decision),\n\t\t);\n\t},\n\n\trecord_final_review({ decision }) {\n\t\treturn reviewerDecisionAction(\n\t\t\t\"record_final_review\",\n\t\t\tnormalizeFinalReviewDecision(decision),\n\t\t);\n\t},\n};\n\nexport function buildMutationAction<Name extends SessionMutationActionName>(\n\tname: Name,\n\tpayload: SessionMutationPayloadMap[Name],\n): SessionMutationAction<SessionMutationValueMap[Name]> {\n\treturn MUTATION_ACTION_HANDLERS[name](payload);\n}\n",
|
|
60
|
+
"import type { listSessionHistory, loadStoredSession } from \"../lifecycle\";\nimport type { Session } from \"../schema\";\nimport type { SessionReadAction } from \"./action-engine\";\n\nexport const SESSION_READ_ACTION_NAMES = [\n\t\"load_status_session\",\n\t\"list_session_history\",\n\t\"load_history_session\",\n] as const;\n\nexport type SessionReadActionName = (typeof SESSION_READ_ACTION_NAMES)[number];\n\nexport type SessionReadPayloadMap = {\n\tload_status_session: undefined;\n\tlist_session_history: undefined;\n\tload_history_session: { sessionId: string };\n};\n\nexport type SessionReadValueMap = {\n\tload_status_session: Session | null;\n\tlist_session_history: Awaited<ReturnType<typeof listSessionHistory>>;\n\tload_history_session: Awaited<ReturnType<typeof loadStoredSession>>;\n};\n\ntype SessionReadActionHandlerMap = {\n\t[Name in SessionReadActionName]: (\n\t\tpayload: SessionReadPayloadMap[Name],\n\t) => SessionReadAction<SessionReadValueMap[Name], Name>;\n};\n\nconst READ_ACTION_HANDLERS: SessionReadActionHandlerMap = {\n\tload_status_session() {\n\t\treturn {\n\t\t\tname: \"load_status_session\",\n\t\t\trun: (worktree, runtime) => runtime.loadSession(worktree),\n\t\t\tonSuccess: (session) => ({\n\t\t\t\tstatus: session ? \"ok\" : \"missing_session\",\n\t\t\t\tsession,\n\t\t\t}),\n\t\t};\n\t},\n\tlist_session_history() {\n\t\treturn {\n\t\t\tname: \"list_session_history\",\n\t\t\trun: (worktree, runtime) => runtime.listSessionHistory(worktree),\n\t\t\tonSuccess: (history) => ({ status: \"ok\", history }),\n\t\t};\n\t},\n\tload_history_session({ sessionId }) {\n\t\treturn {\n\t\t\tname: \"load_history_session\",\n\t\t\trun: (worktree, runtime) =>\n\t\t\t\truntime.loadStoredSession(worktree, sessionId),\n\t\t\tonSuccess: (session) => ({\n\t\t\t\tstatus: session ? \"ok\" : \"missing_session\",\n\t\t\t\tsession,\n\t\t\t}),\n\t\t};\n\t},\n};\n\nexport function buildReadAction<Name extends SessionReadActionName>(\n\tname: Name,\n\tpayload: SessionReadPayloadMap[Name],\n): SessionReadAction<SessionReadValueMap[Name], Name> {\n\treturn READ_ACTION_HANDLERS[name](payload);\n}\n",
|
|
58
61
|
"import { access, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { PackageManager } from \"../schema\";\nimport { candidateWorkspaceDirectories } from \"./workspace-boundaries\";\n\nconst PACKAGE_MANAGER_LOCKFILES: Array<{\n\tmanager: PackageManager;\n\tfilenames: string[];\n}> = [\n\t{ manager: \"pnpm\", filenames: [\"pnpm-lock.yaml\"] },\n\t{ manager: \"npm\", filenames: [\"package-lock.json\", \"npm-shrinkwrap.json\"] },\n\t{ manager: \"yarn\", filenames: [\"yarn.lock\"] },\n\t{ manager: \"bun\", filenames: [\"bun.lock\", \"bun.lockb\"] },\n];\n\ntype PackageManagerDetection = {\n\tpackageManager?: PackageManager;\n\tambiguous: boolean;\n};\n\nexport async function detectPackageManager(\n\tworkspaceRoot: string,\n\tstartDirectory?: string,\n): Promise<PackageManagerDetection> {\n\tfor (const directory of candidateWorkspaceDirectories(\n\t\tworkspaceRoot,\n\t\tstartDirectory,\n\t)) {\n\t\tconst packageManagerFromManifest =\n\t\t\tawait detectPackageManagerFromManifest(directory);\n\t\tif (packageManagerFromManifest) {\n\t\t\treturn {\n\t\t\t\tpackageManager: packageManagerFromManifest,\n\t\t\t\tambiguous: false,\n\t\t\t};\n\t\t}\n\n\t\tconst lockfileDetection = await detectPackageManagerFromLockfile(directory);\n\t\tif (lockfileDetection.ambiguous || lockfileDetection.packageManager) {\n\t\t\treturn lockfileDetection;\n\t\t}\n\t}\n\n\treturn { ambiguous: false };\n}\n\nasync function detectPackageManagerFromManifest(\n\tdirectory: string,\n): Promise<PackageManager | undefined> {\n\tconst manifestPath = join(directory, \"package.json\");\n\tif (!(await pathExists(manifestPath))) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst packageJson = JSON.parse(await readFile(manifestPath, \"utf8\")) as {\n\t\t\tpackageManager?: unknown;\n\t\t};\n\t\treturn parsePackageManager(packageJson.packageManager);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nasync function detectPackageManagerFromLockfile(\n\tdirectory: string,\n): Promise<PackageManagerDetection> {\n\tconst detectedManagers = new Set<PackageManager>();\n\n\tfor (const candidate of PACKAGE_MANAGER_LOCKFILES) {\n\t\tfor (const filename of candidate.filenames) {\n\t\t\tif (await pathExists(join(directory, filename))) {\n\t\t\t\tdetectedManagers.add(candidate.manager);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (detectedManagers.size > 1) {\n\t\treturn { ambiguous: true };\n\t}\n\n\tconst packageManager = detectedManagers.values().next().value as\n\t\t| PackageManager\n\t\t| undefined;\n\treturn packageManager === undefined\n\t\t? { ambiguous: false }\n\t\t: { packageManager, ambiguous: false };\n}\n\nfunction parsePackageManager(value: unknown): PackageManager | undefined {\n\tif (typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\n\tconst normalized = value.trim().split(\"@\")[0];\n\tif (\n\t\tnormalized === \"npm\" ||\n\t\tnormalized === \"pnpm\" ||\n\t\tnormalized === \"yarn\" ||\n\t\tnormalized === \"bun\"\n\t) {\n\t\treturn normalized;\n\t}\n\n\treturn undefined;\n}\n\nasync function pathExists(target: string): Promise<boolean> {\n\ttry {\n\t\tawait access(target);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n",
|
|
59
62
|
"import { dirname, isAbsolute, relative, resolve, sep } from \"node:path\";\n\nexport function candidateWorkspaceDirectories(\n\tworkspaceRoot: string,\n\tstartDirectory?: string,\n): string[] {\n\tconst resolvedRoot = resolve(workspaceRoot);\n\tlet current = resolveWorkspaceStartDirectory(resolvedRoot, startDirectory);\n\tconst directories: string[] = [];\n\n\twhile (true) {\n\t\tdirectories.push(current);\n\t\tif (current === resolvedRoot) {\n\t\t\treturn directories;\n\t\t}\n\n\t\tconst parent = dirname(current);\n\t\tif (parent === current) {\n\t\t\treturn directories;\n\t\t}\n\t\tcurrent = parent;\n\t}\n}\n\nfunction resolveWorkspaceStartDirectory(\n\tresolvedRoot: string,\n\tstartDirectory?: string,\n): string {\n\tif (!startDirectory) {\n\t\treturn resolvedRoot;\n\t}\n\n\tconst resolvedStart = isAbsolute(startDirectory)\n\t\t? resolve(startDirectory)\n\t\t: resolve(resolvedRoot, startDirectory);\n\treturn isWithinWorkspaceRoot(resolvedRoot, resolvedStart)\n\t\t? resolvedStart\n\t\t: resolvedRoot;\n}\n\nfunction isWithinWorkspaceRoot(root: string, candidate: string): boolean {\n\tconst pathFromRoot = relative(root, candidate);\n\treturn (\n\t\tpathFromRoot === \"\" ||\n\t\t(pathFromRoot !== \"..\" &&\n\t\t\t!pathFromRoot.startsWith(`..${sep}`) &&\n\t\t\t!isAbsolute(pathFromRoot))\n\t);\n}\n",
|
|
60
|
-
"import
|
|
63
|
+
"import { FLOW_PLAN_WITH_GOAL_COMMAND, FLOW_STATUS_COMMAND } from \"../constants\";\nimport { mergePlanningContext } from \"../domain/planning-context\";\nimport { errorResponse } from \"../errors\";\nimport { type closeSession, createSession } from \"../lifecycle\";\nimport type { PlanningContext, Session } from \"../schema\";\nimport { deriveSessionOperatorState } from \"../session-operator-state\";\nimport { summarizeSession } from \"../summary\";\nimport type {\n\tSessionArtifactSyncFailure,\n\tSessionWorkspaceAction,\n} from \"./action-engine\";\nimport { detectPackageManager } from \"./package-manager\";\n\ntype ClosedSessionResult = Awaited<ReturnType<typeof closeSession>>;\n\ntype PlannedSessionResult =\n\t| {\n\t\t\tstatus: \"missing_goal\";\n\t\t\tnextCommand: string;\n\t }\n\t| {\n\t\t\tstatus: \"ok\";\n\t\t\tsession: Session;\n\t\t\tartifactSync?: SessionArtifactSyncFailure;\n\t };\n\nfunction buildPlannedSession(\n\texisting: Session | null,\n\tgoal: string,\n\tplanning?: Partial<PlanningContext>,\n) {\n\tconst isNewGoal = Boolean(existing && goal !== existing.goal);\n\n\tif (!existing || existing.status === \"completed\" || isNewGoal) {\n\t\treturn createSession(goal, planning);\n\t}\n\n\treturn {\n\t\t...existing,\n\t\tplanning: mergePlanningContext(existing.planning, planning ?? {}),\n\t};\n}\n\nexport const SESSION_WORKSPACE_ACTION_NAMES = [\n\t\"plan_save\",\n\t\"activate_session\",\n\t\"close_session\",\n] as const;\n\nexport type SessionWorkspaceActionName =\n\t(typeof SESSION_WORKSPACE_ACTION_NAMES)[number];\n\nexport type SessionWorkspacePayloadMap = {\n\tplan_save: {\n\t\tgoal?: string;\n\t\tplanning?: Partial<PlanningContext>;\n\t\tdirectory?: string;\n\t\tmissingGoalNextCommand?: string;\n\t};\n\tactivate_session: {\n\t\tsessionId: string;\n\t\tnextCommand?: string;\n\t\tmissingNextCommand?: string;\n\t};\n\tclose_session: {\n\t\tkind: NonNullable<Session[\"closure\"]>[\"kind\"];\n\t\tsummary?: string;\n\t\tnextCommand?: string;\n\t};\n};\n\nexport type SessionWorkspaceValueMap = {\n\tplan_save: PlannedSessionResult;\n\tactivate_session: Session | null;\n\tclose_session: ClosedSessionResult;\n};\n\ntype SessionWorkspaceActionHandlerMap = {\n\t[Name in SessionWorkspaceActionName]: (\n\t\tpayload: SessionWorkspacePayloadMap[Name],\n\t) => SessionWorkspaceAction<SessionWorkspaceValueMap[Name], Name>;\n};\n\nconst WORKSPACE_ACTION_HANDLERS: SessionWorkspaceActionHandlerMap = {\n\tplan_save({ goal, planning, directory, missingGoalNextCommand }) {\n\t\treturn {\n\t\t\tname: \"plan_save\",\n\t\t\trun: async (worktree, runtime) => {\n\t\t\t\tconst existing = await runtime.loadSession(worktree);\n\t\t\t\tconst resolvedGoal = goal ?? existing?.goal;\n\t\t\t\tif (!resolvedGoal) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"missing_goal\",\n\t\t\t\t\t\tnextCommand: missingGoalNextCommand ?? FLOW_PLAN_WITH_GOAL_COMMAND,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst packageManagerDetection = await detectPackageManager(\n\t\t\t\t\tworktree,\n\t\t\t\t\tdirectory,\n\t\t\t\t);\n\n\t\t\t\tconst session = await runtime.saveSessionState(\n\t\t\t\t\tworktree,\n\t\t\t\t\tbuildPlannedSession(existing, resolvedGoal, {\n\t\t\t\t\t\t...(planning ?? {}),\n\t\t\t\t\t\t...(packageManagerDetection.packageManager\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tpackageManager: packageManagerDetection.packageManager,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tpackageManagerAmbiguous: packageManagerDetection.ambiguous,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tawait runtime.syncSessionArtifacts(worktree, session);\n\t\t\t\t\treturn { status: \"ok\", session };\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tartifactSync: {\n\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\terror instanceof Error && error.message\n\t\t\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t\t\t: String(error),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\tonSuccess: (value) =>\n\t\t\t\tvalue.status === \"missing_goal\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tstatus: \"missing_goal\",\n\t\t\t\t\t\t\tsummary: \"Provide a goal to create a new Flow plan.\",\n\t\t\t\t\t\t\tnextCommand: value.nextCommand,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tstatus: value.artifactSync ? \"partial_success\" : \"ok\",\n\t\t\t\t\t\t\tsummary: `Planning session ready for goal: ${value.session.goal}`,\n\t\t\t\t\t\t\t...(value.artifactSync\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tpersistedMutation: true,\n\t\t\t\t\t\t\t\t\t\tartifactSync: value.artifactSync,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\tsession: summarizeSession(value.session).session,\n\t\t\t\t\t\t},\n\t\t};\n\t},\n\n\tactivate_session({ sessionId, nextCommand, missingNextCommand }) {\n\t\treturn {\n\t\t\tname: \"activate_session\",\n\t\t\trun: (worktree, runtime) => runtime.activateSession(worktree, sessionId),\n\t\t\tonSuccess: (session) => {\n\t\t\t\tif (!session) {\n\t\t\t\t\tconst operator = deriveSessionOperatorState(null);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"missing_session\",\n\t\t\t\t\t\tsummary: `No stored Flow session exists for id '${sessionId}'.`,\n\t\t\t\t\t\toperator,\n\t\t\t\t\t\tphase: operator.phase,\n\t\t\t\t\t\tlane: operator.lane,\n\t\t\t\t\t\tblocker: operator.blocker,\n\t\t\t\t\t\treason: operator.reason,\n\t\t\t\t\t\tnextCommand: missingNextCommand ?? FLOW_PLAN_WITH_GOAL_COMMAND,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\tsummary: `Activated Flow session: ${session.goal}`,\n\t\t\t\t\tphase: \"idle\",\n\t\t\t\t\tlane: \"lite\",\n\t\t\t\t\tblocker: null,\n\t\t\t\t\treason:\n\t\t\t\t\t\t\"Activation finished, so Flow is ready for the operator to inspect or continue the session.\",\n\t\t\t\t\tsession: summarizeSession(session).session,\n\t\t\t\t\tnextCommand: nextCommand ?? FLOW_STATUS_COMMAND,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t},\n\n\tclose_session({ kind, summary, nextCommand }) {\n\t\treturn {\n\t\t\tname: \"close_session\",\n\t\t\trun: (worktree, runtime) => runtime.closeSession(worktree, kind, summary),\n\t\t\tonSuccess: (completed) => {\n\t\t\t\tif (completed && \"blocked\" in completed) {\n\t\t\t\t\treturn errorResponse(completed.summary, {\n\t\t\t\t\t\tblocker: \"unfinished_features\",\n\t\t\t\t\t\tunfinishedFeatureIds: completed.unfinishedFeatureIds,\n\t\t\t\t\t\tsessionId: completed.sessionId,\n\t\t\t\t\t\tnextCommand: FLOW_STATUS_COMMAND,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst operator = deriveSessionOperatorState(null);\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\tsummary: completed\n\t\t\t\t\t\t? `Closed the active Flow session as ${completed.closureKind}.`\n\t\t\t\t\t\t: \"No active Flow session existed.\",\n\t\t\t\t\toperator,\n\t\t\t\t\tphase: operator.phase,\n\t\t\t\t\tlane: operator.lane,\n\t\t\t\t\tblocker: operator.blocker,\n\t\t\t\t\treason: operator.reason,\n\t\t\t\t\tcompletedSessionId: completed?.sessionId ?? null,\n\t\t\t\t\tcompletedTo: completed?.completedTo ?? null,\n\t\t\t\t\tclosureKind: completed?.closureKind ?? null,\n\t\t\t\t\tnextCommand: nextCommand ?? FLOW_PLAN_WITH_GOAL_COMMAND,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t},\n};\n\nexport function buildWorkspaceAction<Name extends SessionWorkspaceActionName>(\n\tname: Name,\n\tpayload: SessionWorkspacePayloadMap[Name],\n): SessionWorkspaceAction<SessionWorkspaceValueMap[Name], Name> {\n\treturn WORKSPACE_ACTION_HANDLERS[name](payload);\n}\n",
|
|
61
64
|
"import { homedir } from \"node:os\";\nimport { resolve } from \"node:path\";\nimport { errorResponse } from \"../errors\";\nimport {\n\tInvalidFlowWorkspaceRootError,\n\tinspectMutableWorkspaceRoot,\n\tnormalizeWorkspaceRoot,\n} from \"../workspace-root\";\n\nexport type WorkspaceContext = {\n\tworktree?: string;\n\tdirectory?: string;\n};\n\nexport type SessionRootSource = \"worktree\" | \"directory\" | \"cwd\";\nexport type SessionRootMode = \"read\" | \"mutate\";\nexport type ResolvedSessionRoot = {\n\troot: string;\n\tsource: SessionRootSource;\n\tmode: SessionRootMode;\n\ttrusted: boolean;\n\tusedFallback: boolean;\n};\nexport type WorkspaceContextSummary = {\n\troot: string | null;\n\tsource: SessionRootSource | null;\n\ttrusted: boolean;\n\tmutationAllowed: boolean;\n\tusedFallback: boolean;\n\trejectionReason: string | null;\n};\n\ntype ParseSchema<T> = {\n\tparse: (input: unknown) => T;\n};\n\ntype SessionRootCandidate = {\n\troot: string;\n\tsource: SessionRootSource;\n};\n\nconst READABLE_ROOT_MISSING_REASON =\n\t\"Flow could not resolve a readable workspace root from worktree, directory, or cwd.\";\n\nexport function toJson(value: unknown): string {\n\treturn JSON.stringify(value, null, 2);\n}\n\nexport function toCompactJson(value: unknown): string {\n\treturn JSON.stringify(value);\n}\n\nfunction asSessionRootCandidate(\n\trawPath: string | undefined,\n\tsource: SessionRootSource,\n): SessionRootCandidate | null {\n\tconst root = normalizeWorkspaceRoot(rawPath);\n\tif (!root) return null;\n\treturn { root, source };\n}\n\nfunction contextCandidates(\n\tcontext: WorkspaceContext,\n\tincludeCwdFallback: boolean,\n): SessionRootCandidate[] {\n\tconst candidates = [\n\t\tasSessionRootCandidate(context.worktree, \"worktree\"),\n\t\tasSessionRootCandidate(context.directory, \"directory\"),\n\t\t...(includeCwdFallback\n\t\t\t? [asSessionRootCandidate(process.cwd(), \"cwd\")]\n\t\t\t: []),\n\t];\n\treturn candidates.filter(\n\t\t(candidate): candidate is SessionRootCandidate => candidate !== null,\n\t);\n}\n\nfunction candidateFromContext(\n\tcontext: WorkspaceContext,\n\tmode: SessionRootMode,\n): SessionRootCandidate | null {\n\treturn contextCandidates(context, mode === \"read\").at(0) ?? null;\n}\n\nfunction mutableRootMissingError(): InvalidFlowWorkspaceRootError {\n\treturn new InvalidFlowWorkspaceRootError({\n\t\tsummary:\n\t\t\t\"Flow could not resolve a mutable workspace root from tool context. Provide a non-root worktree or directory.\",\n\t\tremediation:\n\t\t\t\"Run Flow from an actual project/worktree directory so it can manage .flow state there.\",\n\t\tdetails: {\n\t\t\troot: null,\n\t\t\tsource: null,\n\t\t\ttrusted: false,\n\t\t\tmutationAllowed: false,\n\t\t\tusedFallback: false,\n\t\t\trejectionReason:\n\t\t\t\t\"Missing non-root worktree/directory context for a mutating Flow action.\",\n\t\t},\n\t});\n}\n\nfunction readableRootMissingError(): Error {\n\treturn new Error(READABLE_ROOT_MISSING_REASON);\n}\n\nfunction workspaceSummaryFromRoot(\n\troot: string | null,\n\tsource: SessionRootSource | null,\n\toverrides: Partial<WorkspaceContextSummary>,\n): WorkspaceContextSummary {\n\treturn {\n\t\troot,\n\t\tsource,\n\t\ttrusted: false,\n\t\tmutationAllowed: false,\n\t\tusedFallback: false,\n\t\trejectionReason: null,\n\t\t...overrides,\n\t};\n}\n\nfunction resolveCandidate(\n\tcontext: WorkspaceContext,\n\tmode: SessionRootMode,\n): ResolvedSessionRoot {\n\tconst candidate = candidateFromContext(context, mode);\n\tif (!candidate) {\n\t\tthrow mode === \"mutate\"\n\t\t\t? mutableRootMissingError()\n\t\t\t: readableRootMissingError();\n\t}\n\tif (mode === \"read\") {\n\t\treturn {\n\t\t\troot: candidate.root,\n\t\t\tsource: candidate.source,\n\t\t\tmode,\n\t\t\ttrusted: false,\n\t\t\tusedFallback: candidate.source === \"cwd\",\n\t\t};\n\t}\n\tconst rootCheck = inspectMutableWorkspaceRoot(candidate.root);\n\tif (rootCheck.rejectionReason) {\n\t\tthrow new InvalidFlowWorkspaceRootError({\n\t\t\tsummary: `Flow blocked mutable workspace root '${candidate.root}' from ${candidate.source}: ${rootCheck.rejectionReason}`,\n\t\t\tremediation:\n\t\t\t\tcandidate.root === resolve(process.env.HOME ?? homedir())\n\t\t\t\t\t? \"Choose a project/worktree subdirectory instead of using $HOME directly so Flow can manage .flow state there.\"\n\t\t\t\t\t: `Trust this exact path intentionally by setting FLOW_TRUSTED_WORKSPACE_ROOTS=${candidate.root} before running Flow.`,\n\t\t\tdetails: {\n\t\t\t\troot: candidate.root,\n\t\t\t\tsource: candidate.source,\n\t\t\t\ttrusted: rootCheck.trusted,\n\t\t\t\tmutationAllowed: false,\n\t\t\t\tusedFallback: false,\n\t\t\t\trejectionReason: rootCheck.rejectionReason,\n\t\t\t},\n\t\t});\n\t}\n\treturn {\n\t\troot: candidate.root,\n\t\tsource: candidate.source,\n\t\tmode,\n\t\ttrusted: rootCheck.trusted,\n\t\tusedFallback: false,\n\t};\n}\n\nexport function resolveReadableSessionRoot(\n\tcontext: WorkspaceContext,\n): ResolvedSessionRoot {\n\treturn resolveCandidate(context, \"read\");\n}\n\nexport function resolveMutableSessionRoot(\n\tcontext: WorkspaceContext,\n): ResolvedSessionRoot {\n\treturn resolveCandidate(context, \"mutate\");\n}\n\nexport function inspectWorkspaceContext(\n\tcontext: WorkspaceContext,\n): WorkspaceContextSummary {\n\tlet readRoot: ResolvedSessionRoot | null = null;\n\ttry {\n\t\treadRoot = resolveReadableSessionRoot(context);\n\t} catch {\n\t\treturn workspaceSummaryFromRoot(null, null, {\n\t\t\trejectionReason: READABLE_ROOT_MISSING_REASON,\n\t\t});\n\t}\n\ttry {\n\t\tconst mutable = resolveMutableSessionRoot(context);\n\t\treturn workspaceSummaryFromRoot(mutable.root, mutable.source, {\n\t\t\ttrusted: mutable.trusted,\n\t\t\tmutationAllowed: true,\n\t\t\tusedFallback: readRoot.usedFallback,\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof InvalidFlowWorkspaceRootError) {\n\t\t\tconst source =\n\t\t\t\terror.details.source === \"worktree\" ||\n\t\t\t\terror.details.source === \"directory\" ||\n\t\t\t\terror.details.source === \"cwd\"\n\t\t\t\t\t? error.details.source\n\t\t\t\t\t: readRoot.source;\n\t\t\treturn workspaceSummaryFromRoot(\n\t\t\t\terror.details.root ?? readRoot.root,\n\t\t\t\tsource,\n\t\t\t\t{\n\t\t\t\t\ttrusted: error.details.trusted,\n\t\t\t\t\tusedFallback: readRoot.usedFallback,\n\t\t\t\t\trejectionReason: error.details.rejectionReason,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport function resolveSessionRoot(context: WorkspaceContext): string {\n\treturn resolveReadableSessionRoot(context).root;\n}\n\nexport function parseToolArgs<T>(\n\tschema: ParseSchema<T>,\n\targs: unknown,\n\tmessagePrefix = \"Tool argument validation failed\",\n): { ok: true; value: T } | { ok: false; response: string } {\n\tconst normalizedArgs = args ?? {};\n\ttry {\n\t\treturn { ok: true, value: schema.parse(normalizedArgs) };\n\t} catch (error) {\n\t\tconst issues = (\n\t\t\terror as { issues?: Array<{ path?: unknown[]; message?: string }> } | null\n\t\t)?.issues;\n\t\tconst first = Array.isArray(issues) && issues.length > 0 ? issues[0] : null;\n\t\tconst path =\n\t\t\tfirst?.path && first.path.length > 0\n\t\t\t\t? first.path.map(String).join(\".\")\n\t\t\t\t: \"args\";\n\t\tconst detail = first?.message ? `${path}: ${first.message}` : null;\n\t\tconst summary = detail\n\t\t\t? `${messagePrefix}: ${detail}`\n\t\t\t: `${messagePrefix}.`;\n\t\treturn { ok: false, response: toJson(errorResponse(summary)) };\n\t}\n}\n",
|
|
62
|
-
"/**\n * Flow action registry: one handler per session action, grouped into three\n * registries (mutations, workspace lifecycle, reads) plus the public\n * dispatch API (`runFlowCoreCommand` / `runFlowCoreQuery` and their\n * JSON-rendering `execute*` variants). The shared load -> mutate ->\n * validate -> persist -> render pipeline lives in `action-engine.ts`.\n */\nimport { FLOW_PLAN_WITH_GOAL_COMMAND, FLOW_STATUS_COMMAND } from \"../constants\";\nimport { describeReviewFindingsMutationFailure } from \"../domain\";\nimport { mergePlanningContext } from \"../domain/planning-context\";\nimport { errorResponse } from \"../errors\";\nimport {\n\ttype closeSession,\n\tcreateSession,\n\ttype listSessionHistory,\n\ttype loadStoredSession,\n} from \"../lifecycle\";\nimport type {\n\tFeature,\n\tFlowReviewRecordFeatureArgs,\n\tFlowReviewRecordFinalArgs,\n\tLatestFailedFlowAttempt,\n\tPlanArgs,\n\tPlanningContext,\n\tSession,\n\tWorkerResultArgs,\n} from \"../schema\";\nimport { deriveSessionOperatorState } from \"../session-operator-state\";\nimport { summarizeSession } from \"../summary\";\nimport {\n\tapplyPlan,\n\tapprovePlan,\n\tcompleteRun,\n\tisPlanApprovalAlreadyApplied,\n\tisReviewerDecisionAlreadyRecorded,\n\tisRunStartAlreadyActive,\n\trecordReviewerDecision,\n\tresetFeature,\n\tselectPlanFeatures,\n\tstartRun,\n} from \"../transitions\";\nimport { fail, succeed, type TransitionRecovery } from \"../transitions/shared\";\nimport { nowIso } from \"../util\";\nimport type { SessionArtifactSyncFailure } from \"./action-engine\";\nimport {\n\tDEFAULT_SESSION_READ_RUNTIME_PORT,\n\tDEFAULT_SESSION_RUNTIME_PORT,\n\tDEFAULT_SESSION_WORKSPACE_RUNTIME_PORT,\n\ttype RuntimeToolResponse,\n\trunMutationActionAtRoot,\n\trunRuntimeActionAtRoot,\n\ttype SessionMutationAction,\n\ttype SessionMutationResult,\n\ttype SessionReadAction,\n\ttype SessionReadResult,\n\ttype SessionReadRuntimePort,\n\ttype SessionRuntimePort,\n\ttype SessionWorkspaceAction,\n\ttype SessionWorkspaceResult,\n\ttype SessionWorkspaceRuntimePort,\n} from \"./action-engine\";\nimport { detectPackageManager } from \"./package-manager\";\nimport {\n\tnormalizeFeatureReviewDecision,\n\tnormalizeFinalReviewDecision,\n} from \"./session-review-decision-normalization\";\nimport {\n\tresolveMutableSessionRoot,\n\tresolveReadableSessionRoot,\n\ttype WorkspaceContext,\n} from \"./workspace-runtime\";\n\n// ---------------------------------------------------------------------------\n// Shared response helpers\n// ---------------------------------------------------------------------------\n\nconst MISSING_PLANNING_SESSION_RESPONSE = {\n\tstatus: \"missing_session\",\n\tsummary: \"No active Flow planning session exists.\",\n\tnextCommand: FLOW_PLAN_WITH_GOAL_COMMAND,\n} as const;\n\nconst MISSING_SESSION_RESPONSE = {\n\tstatus: \"missing_session\",\n\tsummary: \"No active Flow session exists.\",\n\tnextCommand: FLOW_PLAN_WITH_GOAL_COMMAND,\n} as const;\n\ntype FailedMutationActionName =\n\t| \"complete_run\"\n\t| \"record_feature_review\"\n\t| \"record_final_review\";\n\nconst FAILED_MUTATION_DESCRIPTORS: Record<\n\tFailedMutationActionName,\n\tPick<LatestFailedFlowAttempt, \"tool\" | \"phase\">\n> = {\n\tcomplete_run: { tool: \"flow_feature_complete\", phase: \"execution\" },\n\trecord_feature_review: { tool: \"flow_review_record\", phase: \"review\" },\n\trecord_final_review: { tool: \"flow_review_record\", phase: \"final_review\" },\n};\n\ntype FailedMutationResult = {\n\tmessage: string;\n\trecovery?: TransitionRecovery;\n};\n\nfunction withLatestFailedMutation(\n\tactionName: FailedMutationActionName,\n\tsession: Session,\n\tfailure: FailedMutationResult,\n): Session {\n\tconst descriptor = FAILED_MUTATION_DESCRIPTORS[actionName];\n\tconst failureCategory =\n\t\tfailure.recovery?.errorCode ?? \"transition_validation_failed\";\n\tconst previous = session.execution.lastFailedMutation;\n\tconst sameCategoryFailureCount =\n\t\tprevious?.tool === descriptor.tool &&\n\t\tprevious.failureCategory === failureCategory\n\t\t\t? (previous.sameCategoryFailureCount ?? 1) + 1\n\t\t\t: 1;\n\treturn {\n\t\t...session,\n\t\texecution: {\n\t\t\t...session.execution,\n\t\t\tlastFailedMutation: {\n\t\t\t\t...descriptor,\n\t\t\t\tstatus: \"error\",\n\t\t\t\tfailureCategory,\n\t\t\t\tsummary: failure.message,\n\t\t\t\t...(failure.recovery?.resolutionHint\n\t\t\t\t\t? { recoveryHint: failure.recovery.resolutionHint }\n\t\t\t\t\t: {}),\n\t\t\t\toccurredAt: nowIso(),\n\t\t\t\t...(sameCategoryFailureCount > 1 ? { sameCategoryFailureCount } : {}),\n\t\t\t},\n\t\t},\n\t\ttimestamps: {\n\t\t\t...session.timestamps,\n\t\t\tupdatedAt: nowIso(),\n\t\t},\n\t};\n}\n\nfunction summarizedSession(saved: Session) {\n\treturn summarizeSession(saved).session;\n}\n\nfunction okWithSession(saved: Session, summary: string) {\n\treturn {\n\t\tstatus: \"ok\" as const,\n\t\tsummary,\n\t\tsession: summarizedSession(saved),\n\t};\n}\n\n// ---------------------------------------------------------------------------\n// Mutation actions (load -> transition -> persist -> sync -> respond)\n// ---------------------------------------------------------------------------\n\nexport const SESSION_MUTATION_ACTION_NAMES = [\n\t\"record_planning_context\",\n\t\"apply_plan\",\n\t\"approve_plan\",\n\t\"auto_approve_lite_plan\",\n\t\"select_plan_features\",\n\t\"start_run\",\n\t\"complete_run\",\n\t\"reset_feature\",\n\t\"record_feature_review\",\n\t\"record_final_review\",\n] as const;\n\nexport type SessionMutationActionName =\n\t(typeof SESSION_MUTATION_ACTION_NAMES)[number];\n\nexport type SessionMutationPayloadMap = {\n\trecord_planning_context: Partial<Session[\"planning\"]>;\n\tapply_plan: {\n\t\tplan: PlanArgs;\n\t\tplanning?: Partial<Session[\"planning\"]>;\n\t};\n\tapprove_plan: {\n\t\tfeatureIds: string[];\n\t};\n\tauto_approve_lite_plan: undefined;\n\tselect_plan_features: {\n\t\tfeatureIds: string[];\n\t};\n\tstart_run: {\n\t\tfeatureId?: string;\n\t};\n\tcomplete_run: {\n\t\tworker: WorkerResultArgs;\n\t};\n\treset_feature: {\n\t\tfeatureId: string;\n\t};\n\trecord_feature_review: {\n\t\tdecision: FlowReviewRecordFeatureArgs;\n\t};\n\trecord_final_review: {\n\t\tdecision: FlowReviewRecordFinalArgs;\n\t};\n};\n\ntype SessionMutationValueMap = {\n\trecord_planning_context: Session;\n\tapply_plan: {\n\t\tsession: Session;\n\t\tautoApproved: boolean;\n\t};\n\tapprove_plan: Session;\n\tauto_approve_lite_plan: Session;\n\tselect_plan_features: Session;\n\tstart_run: {\n\t\tsession: Session;\n\t\tfeature: Feature | null;\n\t\treason?: string;\n\t};\n\tcomplete_run: Session;\n\treset_feature: Session;\n\trecord_feature_review: Session;\n\trecord_final_review: Session;\n};\n\ntype SessionMutationActionHandlerMap = {\n\t[Name in SessionMutationActionName]: (\n\t\tpayload: SessionMutationPayloadMap[Name],\n\t) => SessionMutationAction<SessionMutationValueMap[Name]>;\n};\n\nfunction reviewDecisionErrorResponse(failure: {\n\tmessage: string;\n\trecovery?: unknown;\n\tsession?: Session;\n}) {\n\treturn errorResponse(failure.message, {\n\t\t...(failure.recovery ? { recovery: failure.recovery } : {}),\n\t\t...(failure.session?.execution.lastFailedMutation\n\t\t\t? { latestFailedAttempt: failure.session.execution.lastFailedMutation }\n\t\t\t: {}),\n\t});\n}\n\nfunction reviewerDecisionAction(\n\tname: \"record_feature_review\" | \"record_final_review\",\n\tnormalizedDecision: ReturnType<typeof normalizeFeatureReviewDecision>,\n): SessionMutationAction<Session> {\n\treturn {\n\t\tname,\n\t\trun: (session) => recordReviewerDecision(session, normalizedDecision),\n\t\tgetSession: (value) => value,\n\t\tonSuccess: (saved) => okWithSession(saved, \"Reviewer decision recorded.\"),\n\t\tisNoopSuccess: (value, originalSession) =>\n\t\t\tvalue === originalSession &&\n\t\t\tisReviewerDecisionAlreadyRecorded(originalSession, normalizedDecision),\n\t\tonNoopSuccess: (saved) =>\n\t\t\tokWithSession(\n\t\t\t\tsaved,\n\t\t\t\t\"Reviewer decision already recorded; no state change.\",\n\t\t\t),\n\t\tonError: reviewDecisionErrorResponse,\n\t\trecordFailure: (session, failure) =>\n\t\t\twithLatestFailedMutation(name, session, failure),\n\t\tclearFailedAttemptOnSuccess: {\n\t\t\ttool: \"flow_review_record\",\n\t\t},\n\t};\n}\n\nconst MUTATION_ACTION_HANDLERS: SessionMutationActionHandlerMap = {\n\trecord_planning_context(nextPlanning) {\n\t\treturn {\n\t\t\tname: \"record_planning_context\",\n\t\t\trun: (session) => {\n\t\t\t\tconst failure = describeReviewFindingsMutationFailure(\n\t\t\t\t\tsession,\n\t\t\t\t\tnextPlanning,\n\t\t\t\t);\n\t\t\t\tif (failure) {\n\t\t\t\t\treturn fail(failure);\n\t\t\t\t}\n\t\t\t\tconst updated: Session = {\n\t\t\t\t\t...session,\n\t\t\t\t\tplanning: mergePlanningContext(session.planning, nextPlanning),\n\t\t\t\t};\n\t\t\t\treturn succeed(updated);\n\t\t\t},\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => okWithSession(saved, \"Planning context recorded.\"),\n\t\t};\n\t},\n\n\tapply_plan({ plan, planning }) {\n\t\treturn {\n\t\t\tname: \"apply_plan\",\n\t\t\trun: (session) => {\n\t\t\t\tconst applied = applyPlan(session, { ...plan }, planning);\n\t\t\t\tif (!applied.ok) return applied;\n\t\t\t\tconst lane = summarizeSession(applied.value).session?.operator.lane;\n\t\t\t\tif (lane === \"lite\") {\n\t\t\t\t\tconst approved = approvePlan(applied.value);\n\t\t\t\t\tif (!approved.ok) return approved;\n\t\t\t\t\treturn succeed({ session: approved.value, autoApproved: true });\n\t\t\t\t}\n\t\t\t\treturn succeed({ session: applied.value, autoApproved: false });\n\t\t\t},\n\t\t\tgetSession: (value) => value.session,\n\t\t\tonSuccess: (saved, value) => ({\n\t\t\t\tstatus: \"ok\",\n\t\t\t\tsummary: value.autoApproved\n\t\t\t\t\t? \"Lite draft plan saved and auto-approved so execution can start immediately.\"\n\t\t\t\t\t: \"Draft plan saved.\",\n\t\t\t\tautoApproved: value.autoApproved,\n\t\t\t\tsession: summarizedSession(saved),\n\t\t\t}),\n\t\t\tmissingResponse: MISSING_PLANNING_SESSION_RESPONSE,\n\t\t};\n\t},\n\n\tauto_approve_lite_plan(_payload) {\n\t\treturn {\n\t\t\tname: \"auto_approve_lite_plan\",\n\t\t\trun: (session) => approvePlan(session),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => ({\n\t\t\t\tstatus: \"ok\",\n\t\t\t\tsummary:\n\t\t\t\t\t\"Lite draft plan saved and auto-approved so execution can start immediately.\",\n\t\t\t\tautoApproved: true,\n\t\t\t\tsession: summarizedSession(saved),\n\t\t\t}),\n\t\t\tmissingResponse: MISSING_PLANNING_SESSION_RESPONSE,\n\t\t};\n\t},\n\n\tapprove_plan({ featureIds }) {\n\t\treturn {\n\t\t\tname: \"approve_plan\",\n\t\t\trun: (session) => approvePlan(session, featureIds),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => okWithSession(saved, \"Plan approved.\"),\n\t\t\tisNoopSuccess: (value, originalSession) =>\n\t\t\t\tvalue === originalSession &&\n\t\t\t\tisPlanApprovalAlreadyApplied(originalSession, featureIds),\n\t\t\tonNoopSuccess: (saved) =>\n\t\t\t\tokWithSession(\n\t\t\t\t\tsaved,\n\t\t\t\t\t\"Plan approval already recorded; no state change.\",\n\t\t\t\t),\n\t\t};\n\t},\n\n\tselect_plan_features({ featureIds }) {\n\t\treturn {\n\t\t\tname: \"select_plan_features\",\n\t\t\trun: (session) => selectPlanFeatures(session, featureIds),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => okWithSession(saved, \"Draft plan narrowed.\"),\n\t\t};\n\t},\n\n\tstart_run({ featureId }) {\n\t\treturn {\n\t\t\tname: \"start_run\",\n\t\t\trun: (session) => startRun(session, featureId),\n\t\t\tgetSession: (value) => value.session,\n\t\t\tonSuccess: (saved, value) => {\n\t\t\t\tconst summary = summarizeSession(saved);\n\t\t\t\treturn {\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalue.reason === \"complete\"\n\t\t\t\t\t\t\t? \"complete\"\n\t\t\t\t\t\t\t: value.feature\n\t\t\t\t\t\t\t\t? \"ok\"\n\t\t\t\t\t\t\t\t: \"blocked\",\n\t\t\t\t\tsummary: summary.summary,\n\t\t\t\t\tsession: summary.session,\n\t\t\t\t\tfeature: value.feature,\n\t\t\t\t\treason: value.reason,\n\t\t\t\t};\n\t\t\t},\n\t\t\tisNoopSuccess: (value, originalSession) =>\n\t\t\t\tvalue.session === originalSession &&\n\t\t\t\tisRunStartAlreadyActive(originalSession, featureId),\n\t\t\tonNoopSuccess: (saved, value) =>\n\t\t\t\tokWithSession(\n\t\t\t\t\tsaved,\n\t\t\t\t\t`Feature '${value.feature?.id ?? featureId}' is already running; no state change.`,\n\t\t\t\t),\n\t\t\tmissingResponse: MISSING_SESSION_RESPONSE,\n\t\t};\n\t},\n\n\tcomplete_run({ worker }) {\n\t\treturn {\n\t\t\tname: \"complete_run\",\n\t\t\trun: (session) => completeRun(session, worker),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) => {\n\t\t\t\tconst summary = summarizeSession(saved);\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"ok\" as const,\n\t\t\t\t\tsummary: summary.summary,\n\t\t\t\t\tsession: summary.session,\n\t\t\t\t};\n\t\t\t},\n\t\t\tonError: (failure) => ({\n\t\t\t\tstatus: \"error\",\n\t\t\t\tsummary: failure.message,\n\t\t\t\trecovery: failure.recovery,\n\t\t\t\t...(failure.session?.execution.lastFailedMutation\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tlatestFailedAttempt: failure.session.execution.lastFailedMutation,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t}),\n\t\t\trecordFailure: (session, failure) =>\n\t\t\t\twithLatestFailedMutation(\"complete_run\", session, failure),\n\t\t\tclearFailedAttemptOnSuccess: {\n\t\t\t\ttool: \"flow_feature_complete\",\n\t\t\t},\n\t\t};\n\t},\n\n\treset_feature({ featureId }) {\n\t\treturn {\n\t\t\tname: \"reset_feature\",\n\t\t\trun: (session) => resetFeature(session, featureId),\n\t\t\tgetSession: (value) => value,\n\t\t\tonSuccess: (saved) =>\n\t\t\t\tokWithSession(saved, `Reset feature '${featureId}'.`),\n\t\t\tclearFailedAttemptOnSuccess: true,\n\t\t};\n\t},\n\n\trecord_feature_review({ decision }) {\n\t\treturn reviewerDecisionAction(\n\t\t\t\"record_feature_review\",\n\t\t\tnormalizeFeatureReviewDecision(decision),\n\t\t);\n\t},\n\n\trecord_final_review({ decision }) {\n\t\treturn reviewerDecisionAction(\n\t\t\t\"record_final_review\",\n\t\t\tnormalizeFinalReviewDecision(decision),\n\t\t);\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Workspace lifecycle actions (create/activate/close at the workspace root)\n// ---------------------------------------------------------------------------\n\ntype ClosedSessionResult = Awaited<ReturnType<typeof closeSession>>;\n\ntype PlannedSessionResult =\n\t| {\n\t\t\tstatus: \"missing_goal\";\n\t\t\tnextCommand: string;\n\t }\n\t| {\n\t\t\tstatus: \"ok\";\n\t\t\tsession: Session;\n\t\t\tartifactSync?: SessionArtifactSyncFailure;\n\t };\n\nfunction buildPlannedSession(\n\texisting: Session | null,\n\tgoal: string,\n\tplanning?: Partial<PlanningContext>,\n) {\n\tconst isNewGoal = Boolean(existing && goal !== existing.goal);\n\n\tif (!existing || existing.status === \"completed\" || isNewGoal) {\n\t\treturn createSession(goal, planning);\n\t}\n\n\treturn {\n\t\t...existing,\n\t\tplanning: mergePlanningContext(existing.planning, planning ?? {}),\n\t};\n}\n\nexport const SESSION_WORKSPACE_ACTION_NAMES = [\n\t\"plan_save\",\n\t\"activate_session\",\n\t\"close_session\",\n] as const;\n\nexport type SessionWorkspaceActionName =\n\t(typeof SESSION_WORKSPACE_ACTION_NAMES)[number];\n\nexport type SessionWorkspacePayloadMap = {\n\tplan_save: {\n\t\tgoal?: string;\n\t\tplanning?: Partial<PlanningContext>;\n\t\tdirectory?: string;\n\t\tmissingGoalNextCommand?: string;\n\t};\n\tactivate_session: {\n\t\tsessionId: string;\n\t\tnextCommand?: string;\n\t\tmissingNextCommand?: string;\n\t};\n\tclose_session: {\n\t\tkind: NonNullable<Session[\"closure\"]>[\"kind\"];\n\t\tsummary?: string;\n\t\tnextCommand?: string;\n\t};\n};\n\nexport type SessionWorkspaceValueMap = {\n\tplan_save: PlannedSessionResult;\n\tactivate_session: Session | null;\n\tclose_session: ClosedSessionResult;\n};\n\ntype SessionWorkspaceActionHandlerMap = {\n\t[Name in SessionWorkspaceActionName]: (\n\t\tpayload: SessionWorkspacePayloadMap[Name],\n\t) => SessionWorkspaceAction<SessionWorkspaceValueMap[Name], Name>;\n};\n\nconst WORKSPACE_ACTION_HANDLERS: SessionWorkspaceActionHandlerMap = {\n\tplan_save({ goal, planning, directory, missingGoalNextCommand }) {\n\t\treturn {\n\t\t\tname: \"plan_save\",\n\t\t\trun: async (worktree, runtime) => {\n\t\t\t\tconst existing = await runtime.loadSession(worktree);\n\t\t\t\tconst resolvedGoal = goal ?? existing?.goal;\n\t\t\t\tif (!resolvedGoal) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"missing_goal\",\n\t\t\t\t\t\tnextCommand: missingGoalNextCommand ?? FLOW_PLAN_WITH_GOAL_COMMAND,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tconst packageManagerDetection = await detectPackageManager(\n\t\t\t\t\tworktree,\n\t\t\t\t\tdirectory,\n\t\t\t\t);\n\n\t\t\t\tconst session = await runtime.saveSessionState(\n\t\t\t\t\tworktree,\n\t\t\t\t\tbuildPlannedSession(existing, resolvedGoal, {\n\t\t\t\t\t\t...(planning ?? {}),\n\t\t\t\t\t\t...(packageManagerDetection.packageManager\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tpackageManager: packageManagerDetection.packageManager,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tpackageManagerAmbiguous: packageManagerDetection.ambiguous,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\ttry {\n\t\t\t\t\tawait runtime.syncSessionArtifacts(worktree, session);\n\t\t\t\t\treturn { status: \"ok\", session };\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tartifactSync: {\n\t\t\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\terror instanceof Error && error.message\n\t\t\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t\t\t: String(error),\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t},\n\t\t\tonSuccess: (value) =>\n\t\t\t\tvalue.status === \"missing_goal\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tstatus: \"missing_goal\",\n\t\t\t\t\t\t\tsummary: \"Provide a goal to create a new Flow plan.\",\n\t\t\t\t\t\t\tnextCommand: value.nextCommand,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tstatus: value.artifactSync ? \"partial_success\" : \"ok\",\n\t\t\t\t\t\t\tsummary: `Planning session ready for goal: ${value.session.goal}`,\n\t\t\t\t\t\t\t...(value.artifactSync\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tpersistedMutation: true,\n\t\t\t\t\t\t\t\t\t\tartifactSync: value.artifactSync,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\tsession: summarizeSession(value.session).session,\n\t\t\t\t\t\t},\n\t\t};\n\t},\n\n\tactivate_session({ sessionId, nextCommand, missingNextCommand }) {\n\t\treturn {\n\t\t\tname: \"activate_session\",\n\t\t\trun: (worktree, runtime) => runtime.activateSession(worktree, sessionId),\n\t\t\tonSuccess: (session) => {\n\t\t\t\tif (!session) {\n\t\t\t\t\tconst operator = deriveSessionOperatorState(null);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"missing_session\",\n\t\t\t\t\t\tsummary: `No stored Flow session exists for id '${sessionId}'.`,\n\t\t\t\t\t\toperator,\n\t\t\t\t\t\tphase: operator.phase,\n\t\t\t\t\t\tlane: operator.lane,\n\t\t\t\t\t\tblocker: operator.blocker,\n\t\t\t\t\t\treason: operator.reason,\n\t\t\t\t\t\tnextCommand: missingNextCommand ?? FLOW_PLAN_WITH_GOAL_COMMAND,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\tsummary: `Activated Flow session: ${session.goal}`,\n\t\t\t\t\tphase: \"idle\",\n\t\t\t\t\tlane: \"lite\",\n\t\t\t\t\tblocker: null,\n\t\t\t\t\treason:\n\t\t\t\t\t\t\"Activation finished, so Flow is ready for the operator to inspect or continue the session.\",\n\t\t\t\t\tsession: summarizeSession(session).session,\n\t\t\t\t\tnextCommand: nextCommand ?? FLOW_STATUS_COMMAND,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t},\n\n\tclose_session({ kind, summary, nextCommand }) {\n\t\treturn {\n\t\t\tname: \"close_session\",\n\t\t\trun: (worktree, runtime) => runtime.closeSession(worktree, kind, summary),\n\t\t\tonSuccess: (completed) => {\n\t\t\t\tif (completed && \"blocked\" in completed) {\n\t\t\t\t\treturn errorResponse(completed.summary, {\n\t\t\t\t\t\tblocker: \"unfinished_features\",\n\t\t\t\t\t\tunfinishedFeatureIds: completed.unfinishedFeatureIds,\n\t\t\t\t\t\tsessionId: completed.sessionId,\n\t\t\t\t\t\tnextCommand: FLOW_STATUS_COMMAND,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst operator = deriveSessionOperatorState(null);\n\t\t\t\treturn {\n\t\t\t\t\tstatus: \"ok\",\n\t\t\t\t\tsummary: completed\n\t\t\t\t\t\t? `Closed the active Flow session as ${completed.closureKind}.`\n\t\t\t\t\t\t: \"No active Flow session existed.\",\n\t\t\t\t\toperator,\n\t\t\t\t\tphase: operator.phase,\n\t\t\t\t\tlane: operator.lane,\n\t\t\t\t\tblocker: operator.blocker,\n\t\t\t\t\treason: operator.reason,\n\t\t\t\t\tcompletedSessionId: completed?.sessionId ?? null,\n\t\t\t\t\tcompletedTo: completed?.completedTo ?? null,\n\t\t\t\t\tclosureKind: completed?.closureKind ?? null,\n\t\t\t\t\tnextCommand: nextCommand ?? FLOW_PLAN_WITH_GOAL_COMMAND,\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Read actions\n// ---------------------------------------------------------------------------\n\nexport const SESSION_READ_ACTION_NAMES = [\n\t\"load_status_session\",\n\t\"list_session_history\",\n\t\"load_history_session\",\n] as const;\n\nexport type SessionReadActionName = (typeof SESSION_READ_ACTION_NAMES)[number];\n\nexport type SessionReadPayloadMap = {\n\tload_status_session: undefined;\n\tlist_session_history: undefined;\n\tload_history_session: { sessionId: string };\n};\n\nexport type SessionReadValueMap = {\n\tload_status_session: Session | null;\n\tlist_session_history: Awaited<ReturnType<typeof listSessionHistory>>;\n\tload_history_session: Awaited<ReturnType<typeof loadStoredSession>>;\n};\n\ntype SessionReadActionHandlerMap = {\n\t[Name in SessionReadActionName]: (\n\t\tpayload: SessionReadPayloadMap[Name],\n\t) => SessionReadAction<SessionReadValueMap[Name], Name>;\n};\n\nconst READ_ACTION_HANDLERS: SessionReadActionHandlerMap = {\n\tload_status_session() {\n\t\treturn {\n\t\t\tname: \"load_status_session\",\n\t\t\trun: (worktree, runtime) => runtime.loadSession(worktree),\n\t\t\tonSuccess: (session) => ({\n\t\t\t\tstatus: session ? \"ok\" : \"missing_session\",\n\t\t\t\tsession,\n\t\t\t}),\n\t\t};\n\t},\n\tlist_session_history() {\n\t\treturn {\n\t\t\tname: \"list_session_history\",\n\t\t\trun: (worktree, runtime) => runtime.listSessionHistory(worktree),\n\t\t\tonSuccess: (history) => ({ status: \"ok\", history }),\n\t\t};\n\t},\n\tload_history_session({ sessionId }) {\n\t\treturn {\n\t\t\tname: \"load_history_session\",\n\t\t\trun: (worktree, runtime) =>\n\t\t\t\truntime.loadStoredSession(worktree, sessionId),\n\t\t\tonSuccess: (session) => ({\n\t\t\t\tstatus: session ? \"ok\" : \"missing_session\",\n\t\t\t\tsession,\n\t\t\t}),\n\t\t};\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Dispatch API\n// ---------------------------------------------------------------------------\n\ntype FlowCoreCommandName =\n\t| SessionWorkspaceActionName\n\t| SessionMutationActionName;\n\nconst WORKSPACE_COMMAND_NAME_SET = new Set<string>(\n\tSESSION_WORKSPACE_ACTION_NAMES,\n);\nconst MUTATION_COMMAND_NAME_SET = new Set<string>(\n\tSESSION_MUTATION_ACTION_NAMES,\n);\n\nfunction isWorkspaceCommandName(\n\tname: string,\n): name is SessionWorkspaceActionName {\n\treturn WORKSPACE_COMMAND_NAME_SET.has(name);\n}\n\nfunction isMutationCommandName(\n\tname: string,\n): name is SessionMutationActionName {\n\treturn MUTATION_COMMAND_NAME_SET.has(name);\n}\n\nfunction buildMutationAction<Name extends SessionMutationActionName>(\n\tname: Name,\n\tpayload: SessionMutationPayloadMap[Name],\n): SessionMutationAction<SessionMutationValueMap[Name]> {\n\treturn MUTATION_ACTION_HANDLERS[name](payload);\n}\n\nfunction buildWorkspaceAction<Name extends SessionWorkspaceActionName>(\n\tname: Name,\n\tpayload: SessionWorkspacePayloadMap[Name],\n): SessionWorkspaceAction<SessionWorkspaceValueMap[Name], Name> {\n\treturn WORKSPACE_ACTION_HANDLERS[name](payload);\n}\n\nasync function runCommand(\n\tcontext: WorkspaceContext,\n\tname: FlowCoreCommandName,\n\tpayload: unknown,\n\truntime?: SessionWorkspaceRuntimePort | SessionRuntimePort,\n): Promise<\n\t| SessionWorkspaceResult<\n\t\t\tSessionWorkspaceValueMap[SessionWorkspaceActionName],\n\t\t\tSessionWorkspaceActionName\n\t >\n\t| SessionMutationResult<\n\t\t\tSessionMutationValueMap[SessionMutationActionName],\n\t\t\tSessionMutationActionName\n\t >\n> {\n\tconst root = resolveMutableSessionRoot(context).root;\n\tif (isWorkspaceCommandName(name)) {\n\t\treturn runRuntimeActionAtRoot(\n\t\t\troot,\n\t\t\tbuildWorkspaceAction(\n\t\t\t\tname,\n\t\t\t\tpayload as SessionWorkspacePayloadMap[typeof name],\n\t\t\t),\n\t\t\t(runtime as SessionWorkspaceRuntimePort | undefined) ??\n\t\t\t\tDEFAULT_SESSION_WORKSPACE_RUNTIME_PORT,\n\t\t);\n\t}\n\tif (!isMutationCommandName(name)) {\n\t\tthrow new Error(`Unknown Flow Core command '${name}'.`);\n\t}\n\treturn runMutationActionAtRoot(\n\t\troot,\n\t\tbuildMutationAction(\n\t\t\tname,\n\t\t\tpayload as SessionMutationPayloadMap[typeof name],\n\t\t),\n\t\t(runtime as SessionRuntimePort | undefined) ?? DEFAULT_SESSION_RUNTIME_PORT,\n\t) as Promise<\n\t\tSessionMutationResult<\n\t\t\tSessionMutationValueMap[SessionMutationActionName],\n\t\t\tSessionMutationActionName\n\t\t>\n\t>;\n}\n\nexport function runFlowCoreCommand<Name extends SessionWorkspaceActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionWorkspacePayloadMap[Name],\n\truntime?: SessionWorkspaceRuntimePort,\n): Promise<SessionWorkspaceResult<SessionWorkspaceValueMap[Name], Name>>;\nexport function runFlowCoreCommand<Name extends SessionMutationActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionMutationPayloadMap[Name],\n\truntime?: SessionRuntimePort,\n): Promise<SessionMutationResult<SessionMutationValueMap[Name], Name>>;\nexport async function runFlowCoreCommand(\n\tcontext: WorkspaceContext,\n\tname: FlowCoreCommandName,\n\tpayload: unknown,\n\truntime?: SessionWorkspaceRuntimePort | SessionRuntimePort,\n): Promise<unknown> {\n\treturn runCommand(context, name, payload, runtime);\n}\n\nexport function executeFlowCoreCommand<Name extends SessionWorkspaceActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionWorkspacePayloadMap[Name],\n\truntime?: SessionWorkspaceRuntimePort,\n): Promise<string>;\nexport function executeFlowCoreCommand<Name extends SessionMutationActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionMutationPayloadMap[Name],\n\truntime?: SessionRuntimePort,\n): Promise<string>;\nexport async function executeFlowCoreCommand(\n\tcontext: WorkspaceContext,\n\tname: FlowCoreCommandName,\n\tpayload: unknown,\n\truntime?: SessionWorkspaceRuntimePort | SessionRuntimePort,\n): Promise<string> {\n\tconst result = await runCommand(context, name, payload, runtime);\n\treturn JSON.stringify(result.response, null, 2);\n}\n\nexport async function runFlowCoreQuery<Name extends SessionReadActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionReadPayloadMap[Name],\n\truntime: SessionReadRuntimePort = DEFAULT_SESSION_READ_RUNTIME_PORT,\n): Promise<SessionReadResult<SessionReadValueMap[Name], Name>> {\n\treturn runRuntimeActionAtRoot(\n\t\tresolveReadableSessionRoot(context).root,\n\t\tREAD_ACTION_HANDLERS[name](payload),\n\t\truntime,\n\t);\n}\n\nexport async function executeFlowCoreQuery<Name extends SessionReadActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionReadPayloadMap[Name],\n\truntime?: SessionReadRuntimePort,\n): Promise<RuntimeToolResponse> {\n\treturn (await runFlowCoreQuery(context, name, payload, runtime)).response;\n}\n",
|
|
65
|
+
"import type {\n\tRuntimeToolResponse,\n\tSessionMutationResult,\n\tSessionReadResult,\n\tSessionReadRuntimePort,\n\tSessionRuntimePort,\n\tSessionWorkspaceResult,\n\tSessionWorkspaceRuntimePort,\n} from \"./action-engine\";\nimport {\n\tDEFAULT_SESSION_READ_RUNTIME_PORT,\n\tDEFAULT_SESSION_RUNTIME_PORT,\n\tDEFAULT_SESSION_WORKSPACE_RUNTIME_PORT,\n\trunMutationActionAtRoot,\n\trunRuntimeActionAtRoot,\n} from \"./action-engine\";\nimport {\n\tbuildMutationAction,\n\tSESSION_MUTATION_ACTION_NAMES,\n\ttype SessionMutationActionName,\n\ttype SessionMutationPayloadMap,\n\ttype SessionMutationValueMap,\n} from \"./session-mutation-actions\";\nimport {\n\tbuildReadAction,\n\ttype SessionReadActionName,\n\ttype SessionReadPayloadMap,\n\ttype SessionReadValueMap,\n} from \"./session-read-actions\";\nimport {\n\tbuildWorkspaceAction,\n\tSESSION_WORKSPACE_ACTION_NAMES,\n\ttype SessionWorkspaceActionName,\n\ttype SessionWorkspacePayloadMap,\n\ttype SessionWorkspaceValueMap,\n} from \"./session-workspace-actions\";\nimport {\n\tresolveMutableSessionRoot,\n\tresolveReadableSessionRoot,\n\ttype WorkspaceContext,\n} from \"./workspace-runtime\";\n\ntype FlowCoreCommandName =\n\t| SessionWorkspaceActionName\n\t| SessionMutationActionName;\n\nconst WORKSPACE_COMMAND_NAME_SET = new Set<string>(\n\tSESSION_WORKSPACE_ACTION_NAMES,\n);\nconst MUTATION_COMMAND_NAME_SET = new Set<string>(\n\tSESSION_MUTATION_ACTION_NAMES,\n);\n\nfunction isWorkspaceCommandName(\n\tname: string,\n): name is SessionWorkspaceActionName {\n\treturn WORKSPACE_COMMAND_NAME_SET.has(name);\n}\n\nfunction isMutationCommandName(\n\tname: string,\n): name is SessionMutationActionName {\n\treturn MUTATION_COMMAND_NAME_SET.has(name);\n}\n\nasync function runCommand(\n\tcontext: WorkspaceContext,\n\tname: FlowCoreCommandName,\n\tpayload: unknown,\n\truntime?: SessionWorkspaceRuntimePort | SessionRuntimePort,\n): Promise<\n\t| SessionWorkspaceResult<\n\t\t\tSessionWorkspaceValueMap[SessionWorkspaceActionName],\n\t\t\tSessionWorkspaceActionName\n\t >\n\t| SessionMutationResult<\n\t\t\tSessionMutationValueMap[SessionMutationActionName],\n\t\t\tSessionMutationActionName\n\t >\n> {\n\tconst root = resolveMutableSessionRoot(context).root;\n\tif (isWorkspaceCommandName(name)) {\n\t\treturn runRuntimeActionAtRoot(\n\t\t\troot,\n\t\t\tbuildWorkspaceAction(\n\t\t\t\tname,\n\t\t\t\tpayload as SessionWorkspacePayloadMap[typeof name],\n\t\t\t),\n\t\t\t(runtime as SessionWorkspaceRuntimePort | undefined) ??\n\t\t\t\tDEFAULT_SESSION_WORKSPACE_RUNTIME_PORT,\n\t\t);\n\t}\n\tif (!isMutationCommandName(name)) {\n\t\tthrow new Error(`Unknown Flow Core command '${name}'.`);\n\t}\n\treturn runMutationActionAtRoot(\n\t\troot,\n\t\tbuildMutationAction(\n\t\t\tname,\n\t\t\tpayload as SessionMutationPayloadMap[typeof name],\n\t\t),\n\t\t(runtime as SessionRuntimePort | undefined) ?? DEFAULT_SESSION_RUNTIME_PORT,\n\t) as Promise<\n\t\tSessionMutationResult<\n\t\t\tSessionMutationValueMap[SessionMutationActionName],\n\t\t\tSessionMutationActionName\n\t\t>\n\t>;\n}\n\nexport function runFlowCoreCommand<Name extends SessionWorkspaceActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionWorkspacePayloadMap[Name],\n\truntime?: SessionWorkspaceRuntimePort,\n): Promise<SessionWorkspaceResult<SessionWorkspaceValueMap[Name], Name>>;\nexport function runFlowCoreCommand<Name extends SessionMutationActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionMutationPayloadMap[Name],\n\truntime?: SessionRuntimePort,\n): Promise<SessionMutationResult<SessionMutationValueMap[Name], Name>>;\nexport async function runFlowCoreCommand(\n\tcontext: WorkspaceContext,\n\tname: FlowCoreCommandName,\n\tpayload: unknown,\n\truntime?: SessionWorkspaceRuntimePort | SessionRuntimePort,\n): Promise<unknown> {\n\treturn runCommand(context, name, payload, runtime);\n}\n\nexport function executeFlowCoreCommand<Name extends SessionWorkspaceActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionWorkspacePayloadMap[Name],\n\truntime?: SessionWorkspaceRuntimePort,\n): Promise<string>;\nexport function executeFlowCoreCommand<Name extends SessionMutationActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionMutationPayloadMap[Name],\n\truntime?: SessionRuntimePort,\n): Promise<string>;\nexport async function executeFlowCoreCommand(\n\tcontext: WorkspaceContext,\n\tname: FlowCoreCommandName,\n\tpayload: unknown,\n\truntime?: SessionWorkspaceRuntimePort | SessionRuntimePort,\n): Promise<string> {\n\tconst result = await runCommand(context, name, payload, runtime);\n\treturn JSON.stringify(result.response, null, 2);\n}\n\nexport async function runFlowCoreQuery<Name extends SessionReadActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionReadPayloadMap[Name],\n\truntime: SessionReadRuntimePort = DEFAULT_SESSION_READ_RUNTIME_PORT,\n): Promise<SessionReadResult<SessionReadValueMap[Name], Name>> {\n\treturn runRuntimeActionAtRoot(\n\t\tresolveReadableSessionRoot(context).root,\n\t\tbuildReadAction(name, payload),\n\t\truntime,\n\t);\n}\n\nexport async function executeFlowCoreQuery<Name extends SessionReadActionName>(\n\tcontext: WorkspaceContext,\n\tname: Name,\n\tpayload: SessionReadPayloadMap[Name],\n\truntime?: SessionReadRuntimePort,\n): Promise<RuntimeToolResponse> {\n\treturn (await runFlowCoreQuery(context, name, payload, runtime)).response;\n}\n",
|
|
63
66
|
"import { constants } from \"node:fs\";\nimport { access } from \"node:fs/promises\";\nimport { applyFlowConfig } from \"../../config\";\nimport {\n\tFLOW_CORE_COMMANDS,\n\tFLOW_REASONING,\n\ttype FlowReasoningEffort,\n} from \"../../config-shared\";\nimport {\n\tdetectPreNpmFlowPlugin,\n\tinspectFlowCommandAgentSyncState,\n\tinspectFlowSkillSyncState,\n\tresolveFlowHomeDir,\n\tresolveFlowPluginVersion,\n} from \"../../distribution/skill-sync\";\nimport {\n\tgetActiveSessionPath,\n\tgetIndexDocPath,\n\tInvalidFlowPathInputError,\n} from \"../paths\";\nimport type { Session } from \"../schema\";\nimport type { ResolvedSessionRoot } from \"./workspace-runtime\";\n\nexport type DoctorCheckStatus = \"pass\" | \"warn\" | \"fail\" | \"skip\";\n\nexport type DoctorCheck = {\n\tid: string;\n\tlabel: string;\n\tstatus: DoctorCheckStatus;\n\tsummary: string;\n\tremediation: string | null;\n\tdetails?: Record<string, unknown>;\n};\n\nexport type MutableConfig = {\n\tagent?: Record<\n\t\tstring,\n\t\t{\n\t\t\tagent?: string;\n\t\t\tdescription?: string;\n\t\t\treasoningEffort?: FlowReasoningEffort;\n\t\t}\n\t>;\n\tcommand?: Record<string, { agent?: string; description?: string }>;\n};\n\nconst EXPECTED_FLOW_AGENT_REASONING = {\n\t\"flow-reviewer\": FLOW_REASONING.deep,\n} as const satisfies Record<string, FlowReasoningEffort>;\n\nasync function pathExists(target: string, mode = constants.F_OK) {\n\ttry {\n\t\tawait access(target, mode);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport async function buildInstallCheck(): Promise<DoctorCheck> {\n\tconst homeDir = resolveFlowHomeDir();\n\tconst preNpmCopy = await detectPreNpmFlowPlugin(homeDir);\n\tconst skillState = await inspectFlowSkillSyncState(homeDir);\n\tconst commandAgentState = await inspectFlowCommandAgentSyncState(homeDir);\n\tconst unsyncedSkills = skillState.filter(\n\t\t(entry) => entry.state === \"missing\" || entry.state === \"stale\",\n\t);\n\tconst unsyncedCommandsAndAgents = commandAgentState.filter(\n\t\t(entry) => entry.state === \"missing\" || entry.state === \"stale\",\n\t);\n\tconst details = {\n\t\tdistribution: \"npm\",\n\t\t// OpenCode caches plugin installs per spec string and never re-resolves,\n\t\t// so the running version is the one fact a stale install can't hide.\n\t\tpluginVersion: resolveFlowPluginVersion(),\n\t\tpreNpmPluginPath: preNpmCopy?.path ?? null,\n\t\tskills: Object.fromEntries(\n\t\t\tskillState.map((entry) => [entry.name, entry.state]),\n\t\t),\n\t\tcommandsAndAgents: Object.fromEntries(\n\t\t\tcommandAgentState.map((entry) => [\n\t\t\t\t`${entry.kind}:${entry.name}`,\n\t\t\t\tentry.state,\n\t\t\t]),\n\t\t),\n\t};\n\n\tif (preNpmCopy) {\n\t\treturn {\n\t\t\tid: \"install\",\n\t\t\tlabel: \"Plugin distribution\",\n\t\t\tstatus: \"warn\",\n\t\t\tsummary: `A pre-npm Flow plugin copy exists at ${preNpmCopy.path}; Flow now loads from npm via the opencode.json plugin array, so the stale copy risks loading Flow twice.`,\n\t\t\tremediation:\n\t\t\t\t\"Run `bunx opencode-plugin-flow uninstall` (or delete the pre-npm file) and keep `opencode-plugin-flow` in the opencode.json plugin array.\",\n\t\t\tdetails,\n\t\t};\n\t}\n\n\tif (unsyncedSkills.length > 0) {\n\t\treturn {\n\t\t\tid: \"install\",\n\t\t\tlabel: \"Plugin distribution\",\n\t\t\tstatus: \"warn\",\n\t\t\tsummary: `Flow global skills are not in sync (${unsyncedSkills\n\t\t\t\t.map((entry) => `${entry.name}: ${entry.state}`)\n\t\t\t\t.join(\", \")}).`,\n\t\t\tremediation:\n\t\t\t\t\"Restart OpenCode so the Flow plugin re-syncs its global skills, and check that ~/.config/opencode/skills is writable.\",\n\t\t\tdetails,\n\t\t};\n\t}\n\n\tif (unsyncedCommandsAndAgents.length > 0) {\n\t\treturn {\n\t\t\tid: \"install\",\n\t\t\tlabel: \"Plugin distribution\",\n\t\t\tstatus: \"warn\",\n\t\t\tsummary: `Flow global commands or agents are not in sync (${unsyncedCommandsAndAgents\n\t\t\t\t.map((entry) => `${entry.kind}:${entry.name}: ${entry.state}`)\n\t\t\t\t.join(\", \")}).`,\n\t\t\tremediation:\n\t\t\t\t\"Restart OpenCode so the Flow plugin re-syncs its global commands and agents, and check that ~/.config/opencode/commands and ~/.config/opencode/agents are writable.\",\n\t\t\tdetails,\n\t\t};\n\t}\n\n\treturn {\n\t\tid: \"install\",\n\t\tlabel: \"Plugin distribution\",\n\t\tstatus: \"pass\",\n\t\tsummary: `Flow ${details.pluginVersion} is npm-distributed: no pre-npm plugin copy is present and Flow global skills, commands, and agents are in sync.`,\n\t\tremediation: null,\n\t\tdetails,\n\t};\n}\n\nexport function buildConfigCheck(): DoctorCheck {\n\tconst config: MutableConfig = {};\n\tapplyFlowConfig(config);\n\treturn evaluateConfigCheck(config);\n}\n\nexport function evaluateConfigCheck(config: MutableConfig): DoctorCheck {\n\tconst requiredAgents = Object.keys(EXPECTED_FLOW_AGENT_REASONING);\n\tconst requiredCommands = Object.keys(FLOW_CORE_COMMANDS);\n\tconst missingAgents = requiredAgents.filter((name) => !config.agent?.[name]);\n\tconst missingCommands = requiredCommands.filter(\n\t\t(name) => !config.command?.[name],\n\t);\n\tconst reviewAgent = config.command?.[\"flow-review\"]?.agent;\n\tconst agentReasoningEffort = Object.fromEntries(\n\t\trequiredAgents.map((name) => [\n\t\t\tname,\n\t\t\tconfig.agent?.[name]?.reasoningEffort ?? null,\n\t\t]),\n\t);\n\tconst reasoningMismatches = Object.entries(EXPECTED_FLOW_AGENT_REASONING)\n\t\t.filter(\n\t\t\t([name, expected]) => config.agent?.[name]?.reasoningEffort !== expected,\n\t\t)\n\t\t.map(([name, expected]) => ({\n\t\t\tagent: name,\n\t\t\texpected,\n\t\t\tactual: config.agent?.[name]?.reasoningEffort ?? null,\n\t\t}));\n\n\tif (\n\t\tmissingAgents.length === 0 &&\n\t\tmissingCommands.length === 0 &&\n\t\treviewAgent === \"flow-reviewer\" &&\n\t\treasoningMismatches.length === 0\n\t) {\n\t\treturn {\n\t\t\tid: \"config\",\n\t\t\tlabel: \"Command and agent injection\",\n\t\t\tstatus: \"pass\",\n\t\t\tsummary:\n\t\t\t\t\"Flow can inject the expected commands, agents, and Flow-owned reasoningEffort budgets.\",\n\t\t\tremediation: null,\n\t\t\tdetails: {\n\t\t\t\tagentCount: Object.keys(config.agent ?? {}).length,\n\t\t\t\tcommandCount: Object.keys(config.command ?? {}).length,\n\t\t\t\tcommandRouting: {\n\t\t\t\t\t\"flow-review\": reviewAgent,\n\t\t\t\t},\n\t\t\t\tagentReasoningEffort,\n\t\t\t},\n\t\t};\n\t}\n\n\treturn {\n\t\tid: \"config\",\n\t\tlabel: \"Command and agent injection\",\n\t\tstatus: \"fail\",\n\t\tsummary:\n\t\t\t\"Flow's injected command, agent, or Flow-owned reasoningEffort surface is incomplete or misrouted.\",\n\t\tremediation:\n\t\t\t\"Rebuild or reinstall Flow, then confirm /flow-review is routed through flow-reviewer and Flow agents carry the expected Flow-injected reasoningEffort budgets.\",\n\t\tdetails: {\n\t\t\tmissingAgents,\n\t\t\tmissingCommands,\n\t\t\tcommandRouting: {\n\t\t\t\t\"flow-review\": reviewAgent ?? null,\n\t\t\t},\n\t\t\tagentReasoningEffort,\n\t\t\treasoningMismatches,\n\t\t},\n\t};\n}\n\nexport async function buildWorkspaceCheck(\n\tworkspace: ResolvedSessionRoot,\n): Promise<DoctorCheck> {\n\tawait access(workspace.root, constants.W_OK);\n\treturn {\n\t\tid: \"workspace\",\n\t\tlabel: \"Writable workspace root\",\n\t\tstatus: \"pass\",\n\t\tsummary: workspace.trusted\n\t\t\t? `Flow can resolve and write to the trusted workspace root: ${workspace.root}.`\n\t\t\t: `Flow can resolve and write to the current workspace root: ${workspace.root}.`,\n\t\tremediation: null,\n\t\tdetails: {\n\t\t\tworkspaceRoot: workspace.root,\n\t\t\tworkspaceSource: workspace.source,\n\t\t\ttrusted: workspace.trusted,\n\t\t},\n\t};\n}\n\nexport async function buildSessionArtifactsCheck(\n\tworkspaceRoot: string | null,\n\tsession: Session | null,\n): Promise<DoctorCheck> {\n\tif (!workspaceRoot) {\n\t\treturn {\n\t\t\tid: \"session_artifacts\",\n\t\t\tlabel: \"Active session artifacts\",\n\t\t\tstatus: \"skip\",\n\t\t\tsummary:\n\t\t\t\t\"Skipped session artifact checks because Flow could not resolve the workspace root.\",\n\t\t\tremediation: null,\n\t\t};\n\t}\n\n\tif (!session) {\n\t\treturn {\n\t\t\tid: \"session_artifacts\",\n\t\t\tlabel: \"Active session artifacts\",\n\t\t\tstatus: \"skip\",\n\t\t\tsummary:\n\t\t\t\t\"No active Flow session exists, so there are no session artifacts to inspect.\",\n\t\t\tremediation: null,\n\t\t};\n\t}\n\n\tlet sessionPath: string;\n\tlet indexDocPath: string;\n\ttry {\n\t\tsessionPath = getActiveSessionPath(workspaceRoot, session.id);\n\t\tindexDocPath = getIndexDocPath(workspaceRoot, session.id);\n\t} catch (error) {\n\t\t// A persisted session with a malformed id must degrade to a failing\n\t\t// check; throwing here would make flow_status itself unreadable.\n\t\tif (error instanceof InvalidFlowPathInputError) {\n\t\t\treturn {\n\t\t\t\tid: \"session_artifacts\",\n\t\t\t\tlabel: \"Active session artifacts\",\n\t\t\t\tstatus: \"fail\",\n\t\t\t\tsummary: `The active session has a malformed id ('${session.id}'), so Flow cannot resolve its persisted artifacts.`,\n\t\t\t\tremediation:\n\t\t\t\t\t\"Inspect `.flow/active/` and repair the session file's id or remove the corrupted session before continuing.\",\n\t\t\t\tdetails: { sessionId: session.id },\n\t\t\t};\n\t\t}\n\t\tthrow error;\n\t}\n\tconst hasSessionPath = await pathExists(sessionPath, constants.R_OK);\n\tconst hasIndexDocPath = await pathExists(indexDocPath, constants.R_OK);\n\n\treturn hasSessionPath && hasIndexDocPath\n\t\t? {\n\t\t\t\tid: \"session_artifacts\",\n\t\t\t\tlabel: \"Active session artifacts\",\n\t\t\t\tstatus: \"pass\",\n\t\t\t\tsummary:\n\t\t\t\t\t\"Active session state and rendered docs are both present and readable.\",\n\t\t\t\tremediation: null,\n\t\t\t\tdetails: { sessionPath, indexDocPath, sessionId: session.id },\n\t\t\t}\n\t\t: {\n\t\t\t\tid: \"session_artifacts\",\n\t\t\t\tlabel: \"Active session artifacts\",\n\t\t\t\tstatus: \"fail\",\n\t\t\t\tsummary:\n\t\t\t\t\t\"Flow found an active session, but one or more persisted session artifacts are missing.\",\n\t\t\t\tremediation:\n\t\t\t\t\t\"Inspect the active session under `.flow/active/<session-id>/` and repair or recreate the missing artifact before continuing.\",\n\t\t\t\tdetails: {\n\t\t\t\t\tsessionId: session.id,\n\t\t\t\t\tsessionPath,\n\t\t\t\t\tsessionPathReadable: hasSessionPath,\n\t\t\t\t\tindexDocPath,\n\t\t\t\t\tindexDocReadable: hasIndexDocPath,\n\t\t\t\t},\n\t\t\t};\n}\n\nexport function summarizeDoctorChecks(checks: DoctorCheck[]) {\n\tconst counts = {\n\t\tpass: checks.filter((check) => check.status === \"pass\").length,\n\t\twarn: checks.filter((check) => check.status === \"warn\").length,\n\t\tfail: checks.filter((check) => check.status === \"fail\").length,\n\t\tskip: checks.filter((check) => check.status === \"skip\").length,\n\t};\n\n\tconst status = counts.fail > 0 ? \"fail\" : counts.warn > 0 ? \"warn\" : \"ok\";\n\tconst parts = [\n\t\t`${counts.pass} passing`,\n\t\t`${counts.warn} warning${counts.warn === 1 ? \"\" : \"s\"}`,\n\t\t`${counts.fail} failure${counts.fail === 1 ? \"\" : \"s\"}`,\n\t];\n\tif (counts.skip > 0) {\n\t\tparts.push(`${counts.skip} skipped`);\n\t}\n\n\treturn {\n\t\tstatus: status as \"ok\" | \"warn\" | \"fail\",\n\t\tsummary: `Flow readiness checks completed with ${parts.join(\", \")}.`,\n\t};\n}\n",
|
|
64
67
|
"import type { Session } from \"../schema\";\nimport { InvalidFlowWorkspaceRootError } from \"../workspace-root\";\nimport {\n\tbuildConfigCheck,\n\tbuildInstallCheck,\n\tbuildSessionArtifactsCheck,\n\tbuildWorkspaceCheck,\n\ttype DoctorCheck,\n\tsummarizeDoctorChecks,\n} from \"./doctor-checks\";\nimport {\n\tinspectWorkspaceContext,\n\tresolveMutableSessionRoot,\n\ttype WorkspaceContext,\n} from \"./workspace-runtime\";\n\nexport type WorkspaceReadiness = {\n\tstatus: \"ok\" | \"warn\" | \"fail\";\n\tsummary: string;\n\tchecks: DoctorCheck[];\n};\n\n/**\n * Doctor-style readiness checks folded into `flow_status` output: install\n * state, config injection, writable workspace root, and active session\n * artifacts. Non-destructive.\n */\nexport async function buildWorkspaceReadiness(\n\tcontext: WorkspaceContext,\n\tsession: Session | null,\n): Promise<WorkspaceReadiness> {\n\tconst installCheck = await buildInstallCheck();\n\tconst configCheck = buildConfigCheck();\n\tconst workspace = inspectWorkspaceContext(context);\n\n\tlet workspaceRoot: string | null = null;\n\tlet workspaceCheck: DoctorCheck;\n\n\ttry {\n\t\tconst mutableWorkspace = resolveMutableSessionRoot(context);\n\t\tworkspaceRoot = mutableWorkspace.root;\n\t\tworkspaceCheck = await buildWorkspaceCheck(mutableWorkspace);\n\t} catch (error: unknown) {\n\t\tconst workspaceDetails =\n\t\t\terror instanceof InvalidFlowWorkspaceRootError\n\t\t\t\t? {\n\t\t\t\t\t\tworkspaceRoot: error.details.root,\n\t\t\t\t\t\tworkspaceSource: error.details.source,\n\t\t\t\t\t\ttrusted: error.details.trusted,\n\t\t\t\t\t\trejectionReason: error.details.rejectionReason,\n\t\t\t\t\t}\n\t\t\t\t: workspace.root\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tworkspaceRoot: workspace.root,\n\t\t\t\t\t\t\tworkspaceSource: workspace.source,\n\t\t\t\t\t\t\ttrusted: workspace.trusted,\n\t\t\t\t\t\t\trejectionReason: workspace.rejectionReason,\n\t\t\t\t\t\t}\n\t\t\t\t\t: null;\n\t\tworkspaceCheck = {\n\t\t\tid: \"workspace\",\n\t\t\tlabel: \"Writable workspace root\",\n\t\t\tstatus: \"fail\",\n\t\t\tsummary:\n\t\t\t\terror instanceof InvalidFlowWorkspaceRootError\n\t\t\t\t\t? error.summary\n\t\t\t\t\t: error instanceof Error\n\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t: \"Flow could not resolve a writable workspace root.\",\n\t\t\tremediation:\n\t\t\t\terror instanceof InvalidFlowWorkspaceRootError\n\t\t\t\t\t? error.remediation\n\t\t\t\t\t: \"Run Flow from a writable project or worktree directory so it can manage .flow state.\",\n\t\t\t...(workspaceDetails ? { details: workspaceDetails } : {}),\n\t\t};\n\t}\n\n\tconst sessionArtifactsCheck = await buildSessionArtifactsCheck(\n\t\tworkspaceRoot,\n\t\tsession,\n\t);\n\n\tconst checks = [\n\t\tinstallCheck,\n\t\tconfigCheck,\n\t\tworkspaceCheck,\n\t\tsessionArtifactsCheck,\n\t];\n\tconst overall = summarizeDoctorChecks(checks);\n\treturn { status: overall.status, summary: overall.summary, checks };\n}\n\nexport function compactWorkspaceReadiness(readiness: WorkspaceReadiness) {\n\treturn {\n\t\tstatus: readiness.status,\n\t\tsummary: readiness.summary,\n\t\tissues: readiness.checks\n\t\t\t.filter((check) => check.status === \"warn\" || check.status === \"fail\")\n\t\t\t.map((check) => ({\n\t\t\t\tid: check.id,\n\t\t\t\tlabel: check.label,\n\t\t\t\tstatus: check.status,\n\t\t\t\tsummary: check.summary,\n\t\t\t\tremediation: check.remediation,\n\t\t\t})),\n\t};\n}\n",
|
|
65
68
|
"import type { LatestFailedFlowAttempt, Session } from \"../schema\";\nimport { deriveSessionViewModel } from \"../summary\";\nimport {\n\tselectOperatorTaskProgressRows,\n\ttype TaskProgressRow,\n} from \"../summary-projections\";\n\nfunction toInlineSummaryText(value: string, maxLength: number): string {\n\tconst inline = value\n\t\t.replace(/\\r?\\n+/g, \" / \")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\tif (inline.length <= maxLength) {\n\t\treturn inline;\n\t}\n\treturn `${inline.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n}\n\nfunction renderLatestFailedAttemptLines(\n\tfailure: LatestFailedFlowAttempt | null | undefined,\n): string[] {\n\tif (!failure) {\n\t\treturn [];\n\t}\n\tconst repeated = failure.sameCategoryFailureCount\n\t\t? ` (${failure.sameCategoryFailureCount} same-category attempts)`\n\t\t: \"\";\n\treturn [\n\t\t`Latest failed attempt: ${failure.tool} — ${failure.failureCategory}${repeated}.`,\n\t\t...(failure.recoveryHint\n\t\t\t? [`Fix: ${toInlineSummaryText(failure.recoveryHint, 160)}`]\n\t\t\t: []),\n\t];\n}\n\nfunction renderTaskProgressSummary(rows: TaskProgressRow[]): string[] {\n\tconst selected = selectOperatorTaskProgressRows(rows);\n\tif (selected.length === 0) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t\"Task progress:\",\n\t\t...selected.map((row) => {\n\t\t\tconst subject = toInlineSummaryText(row.subject, 55);\n\t\t\tconst next = toInlineSummaryText(row.next, 75);\n\t\t\treturn `- ${row.ownerRole} | ${row.phase} | ${row.status} | ${subject} | next: ${next}`;\n\t\t}),\n\t];\n}\n\nexport function renderSessionStatusSummary(\n\tsession: Session | null,\n\toptions?: {\n\t\tnextCommand?: string;\n\t\tnextStep?: string;\n\t\ttaskProgressOverride?: TaskProgressRow[];\n\t},\n): string {\n\tconst viewModel = deriveSessionViewModel(session);\n\tconst lines = [\n\t\t`Flow: ${viewModel.guidance.summary}`,\n\t\t`Next: ${options?.nextStep ?? viewModel.guidance.nextStep}`,\n\t\t`Command: ${options?.nextCommand ?? viewModel.guidance.nextCommand}`,\n\t];\n\n\tif (viewModel.guidance.blocker) {\n\t\tlines.splice(1, 0, `Blocker: ${viewModel.guidance.blocker}`);\n\t}\n\n\tlines.push(\n\t\t...renderLatestFailedAttemptLines(viewModel.session?.latestFailedAttempt),\n\t);\n\n\tif (viewModel.session?.activeFeature) {\n\t\tconst activeFeature = viewModel.session.activeFeature;\n\t\tlines.push(\n\t\t\t`Working on: ${activeFeature.id} — ${activeFeature.title} (${activeFeature.status})`,\n\t\t);\n\t}\n\n\tif (viewModel.session?.featureProgress) {\n\t\tlines.push(\n\t\t\t`Progress: ${viewModel.session.featureProgress.completed}/${viewModel.session.featureProgress.total} completed`,\n\t\t);\n\t}\n\n\tconst taskProgress =\n\t\toptions?.taskProgressOverride ?? viewModel.session?.taskProgress;\n\tif (taskProgress) {\n\t\tlines.push(...renderTaskProgressSummary(taskProgress));\n\t}\n\n\tif (viewModel.session?.finalReviewPolicy) {\n\t\tlines.push(`Final review policy: ${viewModel.session.finalReviewPolicy}`);\n\t}\n\n\tif (viewModel.session?.goal) {\n\t\tlines.push(`Goal: ${viewModel.session.goal}`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n",
|
|
@@ -81,7 +84,7 @@
|
|
|
81
84
|
"import { createFlowLog } from \"./logging\";\nimport { createPlanTools } from \"./tool-surface/plan-tools\";\nimport { createReviewTool } from \"./tool-surface/review-tool\";\nimport { createRunTools } from \"./tool-surface/run-tools\";\nimport { createSessionTool } from \"./tool-surface/session-tool\";\nimport { createStatusTool } from \"./tool-surface/status-tool\";\nimport { OPENCODE_TOOL_NAMES_FROM_REGISTRY } from \"./tool-surface/tool-registry\";\n\nfunction orderProjectedTools<T extends Record<string, unknown>>(tools: T): T {\n\tconst toolNames = new Set(Object.keys(tools));\n\tconst projectedNames = new Set<string>(OPENCODE_TOOL_NAMES_FROM_REGISTRY);\n\tconst missing = OPENCODE_TOOL_NAMES_FROM_REGISTRY.filter(\n\t\t(name) => !toolNames.has(name),\n\t);\n\tconst extra = [...toolNames].filter((name) => !projectedNames.has(name));\n\n\tif (missing.length > 0 || extra.length > 0) {\n\t\tthrow new Error(\n\t\t\t[\n\t\t\t\tmissing.length > 0\n\t\t\t\t\t? `Missing OpenCode registry tool(s): ${missing.join(\", \")}`\n\t\t\t\t\t: null,\n\t\t\t\textra.length > 0\n\t\t\t\t\t? `Unregistered OpenCode tool(s): ${extra.join(\", \")}`\n\t\t\t\t\t: null,\n\t\t\t]\n\t\t\t\t.filter((message): message is string => message !== null)\n\t\t\t\t.join(\"; \"),\n\t\t);\n\t}\n\n\treturn Object.fromEntries(\n\t\tOPENCODE_TOOL_NAMES_FROM_REGISTRY.map((name) => [name, tools[name]]),\n\t) as T;\n}\n\nfunction createCoreTools() {\n\treturn orderProjectedTools({\n\t\t...createStatusTool(),\n\t\t...createPlanTools(),\n\t\t...createRunTools(),\n\t\t...createReviewTool(),\n\t\t...createSessionTool(),\n\t});\n}\n\nexport function createTools(ctx: unknown) {\n\tcreateFlowLog(ctx)(\"info\", \"Creating Flow tool surface.\");\n\treturn createCoreTools();\n}\n",
|
|
82
85
|
"import {\n\tresolveFlowPluginVersion,\n\trunFlowStartupSync,\n} from \"../../distribution/skill-sync\";\nimport { scheduleFlowUpdateNotice } from \"../../distribution/update-notice\";\nimport { createConfigHook } from \"./config\";\nimport { createFlowLog } from \"./logging\";\nimport type { Hooks, Plugin } from \"./sdk\";\nimport {\n\tappendOpenCodeCompactCompactingContext,\n\tappendOpenCodeCompactSystemContext,\n} from \"./system-context\";\nimport type { ToolContext } from \"./tool-surface/schemas\";\nimport { createTools } from \"./tools\";\n\nfunction createFlowSystemTransformHook(\n\tctx: Pick<Parameters<Plugin>[0], \"worktree\" | \"directory\">,\n): NonNullable<Hooks[\"experimental.chat.system.transform\"]> {\n\treturn async (_input, output) => {\n\t\tawait appendOpenCodeCompactSystemContext(ctx, output);\n\t};\n}\n\nconst FlowPlugin: Plugin = async (ctx) => {\n\tconst log = createFlowLog(ctx);\n\tlog(\"info\", \"Flow plugin initialized.\");\n\n\tconst pluginVersion = resolveFlowPluginVersion();\n\tawait runFlowStartupSync(pluginVersion, log);\n\t// Best-effort, non-blocking: OpenCode never re-resolves cached plugin\n\t// installs, so tell the user when a newer release exists.\n\tscheduleFlowUpdateNotice(pluginVersion, log);\n\n\treturn {\n\t\tconfig: createConfigHook(ctx),\n\t\ttool: createTools(ctx),\n\t\thooks: {\n\t\t\t\"experimental.chat.system.transform\": createFlowSystemTransformHook(ctx),\n\t\t\t\"experimental.session.compacting\": async (\n\t\t\t\t_input: unknown,\n\t\t\t\tcontext: ToolContext,\n\t\t\t\toutput: { context?: string[]; prompt?: string },\n\t\t\t) => {\n\t\t\t\tawait appendOpenCodeCompactCompactingContext(context, output);\n\t\t\t},\n\t\t},\n\t};\n};\n\nexport default FlowPlugin;\n"
|
|
83
86
|
],
|
|
84
|
-
"mappings": "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B,CACvC,QAAS,uCAAuC,MAAc,EAAQ,iBAAmB,+BACzF,YAAa,EAAQ,KAClB,+GACA,sFACH,SACD,CAAC,ECrIK,IAAM,GAAoB,aACpB,EAA8B,oBAC9B,GAAmB,YACnB,EAAsB,eACtB,GAAuB,uBAI7B,IAAM,GAA+B,CAC3C,cACA,iBACA,oBACA,iBACA,wBACA,qBACA,cACD,EAKa,GAAsB,CAClC,SACA,SACA,kBACA,SACD,EACa,GAAkB,CAAC,SAAU,SAAU,gBAAgB,EACvD,GAAwB,CACpC,SACA,UACA,SACA,cACD,EACa,GAAa,CACzB,iBACA,SACA,gBACD,EACa,GAAyB,CACrC,iBACA,uBACA,YACD,EACa,GAAiB,CAC7B,oBACA,oBACA,gBACD,EACa,GAAmB,CAC/B,eACA,UACA,UACA,QACA,UACD,EACa,GAAqB,CACjC,WACA,YACA,cACD,EACa,GAAiB,CAC7B,eACA,WACA,eACD,EACa,GAAa,CACzB,kBACA,sBACA,yBACD,EACa,GAAwB,CAAC,QAAS,UAAU,EAC5C,GAAwB,CACpC,gBACA,qBACA,kBACA,sBACA,QACA,oBACA,mBACA,qBACA,iBACD,EACa,GAAkB,CAAC,iBAAkB,iBAAiB,EACtD,GAA6B,CACzC,WACA,YACA,SACD,EACa,GAA4B,CACxC,OACA,OACA,SACA,UACA,WACA,QACD,EACa,GAAiB,CAC7B,iBACA,oBACA,oBACA,sBACA,4BACA,qBACD,EACa,GAAgB,CAAC,YAAa,WAAY,WAAW,EACrD,GAAgB,CAC5B,YACA,kBACA,mBACA,uBACA,gBACD,EACa,GAA4B,CACxC,kBACA,mBACA,uBACA,gBACD,EAEa,GAAqB,6BACrB,GAAqB,2CACrB,GAAoB,CAAC,WAAY,OAAO,EAC9C,SAAS,EAAuB,CAAC,EAA2B,CAClE,MAAO,+BAAiC,IAGlC,SAAS,EAA0B,CAAC,EAA2B,CACrE,MAAO,yBAAoC,IClH5C,IAAM,GAA2B,IAAI,IAAsB,CAC1D,SACA,gBACD,CAAC,EAEK,GAGF,CACH,QAAS,iBACT,MAAO,iBACR,EAEM,GAA8D,CACnE,gBAAiB,eA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",
|
|
85
|
-
"debugId": "
|
|
87
|
+
"mappings": "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CAAC,EAC7C,UAAW,EAAM,WAAa,CAAC,EAC/B,oBAAqB,EAAM,qBAAuB,CAAC,CACpD,EAGM,SAAS,EAA6B,CAC5C,EACA,EACgB,CAChB,OAAO,GAAqC,EAAS,CAAK,EC5F3D,IAAM,GAA8B,CACnC,kCAAmC,CAClC,GAAI,kCACJ,aACC,qGACD,gBAAiB,CAChB,CACC,KAAM,6DACN,QAAS,CAAC,wCAAwC,CACnD,CACD,EACA,cACC,+JACD,cAAe,gCACf,cACC,2EACF,EACA,2CAA4C,CAC3C,GAAI,2CACJ,aACC,6HACD,gBAAiB,CAChB,CACC,KAAM,mCACN,QAAS,CAAC,qBAAqB,CAChC,EACA,CACC,KAAM,wCACN,QAAS,CAAC,6BAA6B,CACxC,CACD,EACA,cACC,0JACD,cAAe,4CACf,cACC,0EACF,EACA,yCAA0C,CACzC,GAAI,yCACJ,aACC,0GACD,gBAAiB,CAChB,CACC,KAAM,wCACN,QAAS,CAAC,oBAAoB,CAC/B,EACA,CACC,KAAM,yBACN,QAAS,CAAC,sBAAuB,kBAAkB,CACpD,CACD,EACA,cACC,mHACD,cAAe,kCACf,cACC,4EACF,EACA,+BAAgC,CAC/B,GAAI,+BACJ,aACC,uFACD,gBAAiB,CAChB,CACC,KAAM,wBACN,QAAS,CACR,oCACA,6BACD,CACD,CACD,EACA,cACC,uGACD,cAAe,gDACf,cACC,qEACF,EACA,+BAAgC,CAC/B,GAAI,+BACJ,aACC,+DACD,gBAAiB,CAChB,CACC,KAAM,sCACN,QAAS,CAAC,yBAAyB,CACpC,CACD,EACA,cACC,oGACD,cAAe,0CACf,cACC,2GACF,EACA,0CAA2C,CAC1C,GAAI,0CACJ,aACC,oGACD,gBAAiB,CAChB,CACC,KAAM,iCACN,QAAS,CAAC,aAAa,CACxB,EACA,CACC,KAAM,sDACN,QAAS,CAAC,wBAAwB,CACnC,CACD,EACA,cACC,yHACD,cAAe,+BACf,cAAe,kDAChB,CACD,EAEa,GAAsB,OAAO,OACzC,EACD,EAEa,GAAyB,OAAO,KAC5C,EACD,ECjIA,gBACC,cACA,eACA,SACA,WACA,gBACA,0BCkB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",
|
|
88
|
+
"debugId": "6D16F44255190C3164756E2164756E21",
|
|
86
89
|
"names": []
|
|
87
90
|
}
|