atomism 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +210 -0
- package/dist/chunk-34O5KJWR.js +81 -0
- package/dist/chunk-34O5KJWR.js.map +1 -0
- package/dist/chunk-55AP34JO.js +116 -0
- package/dist/chunk-55AP34JO.js.map +1 -0
- package/dist/chunk-6MDHM2B4.js +17 -0
- package/dist/chunk-6MDHM2B4.js.map +1 -0
- package/dist/chunk-GU2R4KLP.js +43 -0
- package/dist/chunk-GU2R4KLP.js.map +1 -0
- package/dist/chunk-H7WC3NXZ.js +39 -0
- package/dist/chunk-H7WC3NXZ.js.map +1 -0
- package/dist/chunk-P33CQFMY.js +329 -0
- package/dist/chunk-P33CQFMY.js.map +1 -0
- package/dist/chunk-P6X7T4KA.js +200 -0
- package/dist/chunk-P6X7T4KA.js.map +1 -0
- package/dist/chunk-PLQJM2KT.js +9 -0
- package/dist/chunk-PLQJM2KT.js.map +1 -0
- package/dist/chunk-RS2IEGW3.js +10 -0
- package/dist/chunk-RS2IEGW3.js.map +1 -0
- package/dist/chunk-S6Z5G5DB.js +84 -0
- package/dist/chunk-S6Z5G5DB.js.map +1 -0
- package/dist/chunk-UVUDQ4XP.js +259 -0
- package/dist/chunk-UVUDQ4XP.js.map +1 -0
- package/dist/chunk-UWVZQSP4.js +597 -0
- package/dist/chunk-UWVZQSP4.js.map +1 -0
- package/dist/chunk-YKJO3ZFY.js +308 -0
- package/dist/chunk-YKJO3ZFY.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +152 -0
- package/dist/cli.js.map +1 -0
- package/dist/create-atom-AXPDBYQL.js +153 -0
- package/dist/create-atom-AXPDBYQL.js.map +1 -0
- package/dist/escalate-BTEJT5NL.js +211 -0
- package/dist/escalate-BTEJT5NL.js.map +1 -0
- package/dist/extract-RPKCTINT.js +514 -0
- package/dist/extract-RPKCTINT.js.map +1 -0
- package/dist/graduate-453M7ZRQ.js +222 -0
- package/dist/graduate-453M7ZRQ.js.map +1 -0
- package/dist/helpers-PJPFPYBQ.js +11 -0
- package/dist/helpers-PJPFPYBQ.js.map +1 -0
- package/dist/history-OPD7NLZW.js +258 -0
- package/dist/history-OPD7NLZW.js.map +1 -0
- package/dist/import-generator-4CKRBMTE.js +1864 -0
- package/dist/import-generator-4CKRBMTE.js.map +1 -0
- package/dist/index.d.ts +230 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/init-2FINDMYK.js +741 -0
- package/dist/init-2FINDMYK.js.map +1 -0
- package/dist/list-NEBVBGG3.js +71 -0
- package/dist/list-NEBVBGG3.js.map +1 -0
- package/dist/parser-3BILOSOO.js +157 -0
- package/dist/parser-3BILOSOO.js.map +1 -0
- package/dist/plan-DNVARHWH.js +249 -0
- package/dist/plan-DNVARHWH.js.map +1 -0
- package/dist/register-XTRMSH7Y.js +91 -0
- package/dist/register-XTRMSH7Y.js.map +1 -0
- package/dist/revert-J4CRDE2K.js +87 -0
- package/dist/revert-J4CRDE2K.js.map +1 -0
- package/dist/run-3GI3SBYL.js +188 -0
- package/dist/run-3GI3SBYL.js.map +1 -0
- package/dist/scan-generators-ST4TBEY7.js +375 -0
- package/dist/scan-generators-ST4TBEY7.js.map +1 -0
- package/dist/signatures-K5QIL4WG.js +258 -0
- package/dist/signatures-K5QIL4WG.js.map +1 -0
- package/dist/skills-assign-IHOXX4AI.js +182 -0
- package/dist/skills-assign-IHOXX4AI.js.map +1 -0
- package/dist/skills-load-JSD5UG2K.js +20 -0
- package/dist/skills-load-JSD5UG2K.js.map +1 -0
- package/dist/skills-scan-WACJFRJN.js +25 -0
- package/dist/skills-scan-WACJFRJN.js.map +1 -0
- package/dist/skills-suggest-JFI2NUJI.js +269 -0
- package/dist/skills-suggest-JFI2NUJI.js.map +1 -0
- package/dist/status-KQVSAZFR.js +111 -0
- package/dist/status-KQVSAZFR.js.map +1 -0
- package/dist/suggest-IFFJQFIW.js +183 -0
- package/dist/suggest-IFFJQFIW.js.map +1 -0
- package/dist/test-HP3FG3MO.js +152 -0
- package/dist/test-HP3FG3MO.js.map +1 -0
- package/dist/test-gen-2ZGPOP35.js +347 -0
- package/dist/test-gen-2ZGPOP35.js.map +1 -0
- package/dist/trust-4R26DULG.js +248 -0
- package/dist/trust-4R26DULG.js.map +1 -0
- package/dist/validate-generator-46H2LYYQ.js +410 -0
- package/dist/validate-generator-46H2LYYQ.js.map +1 -0
- package/dist/workflow-5UVLBS7J.js +655 -0
- package/dist/workflow-5UVLBS7J.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/workflow.ts"],"sourcesContent":["/**\n * Workflow command implementation for the atomic CLI.\n *\n * This module implements workflow execution commands including\n * `atomic workflow run` with dependency resolution and progress display.\n *\n * @module commands/workflow\n */\n\nimport { join } from 'node:path';\nimport { readFile, readdir } from 'node:fs/promises';\nimport { z } from 'zod';\nimport { ATOMIC_DIR, fileExists } from '../storage/index.js';\nimport { executeAtom } from '../atom/execute.js';\nimport {\n AtomWithArtifacts,\n createArtifactCache,\n resolveDependencies,\n formatDependencyChain,\n type ResolvedAtom,\n type ResolutionResult,\n} from '../workflow/index.js';\nimport {\n saveRunState,\n loadRunState,\n updateAtomState,\n getResumableAtoms,\n getLastFailedRun,\n createRunState,\n type WorkflowRunState,\n type BeadOptions,\n} from '../workflow/run-state.js';\nimport {\n isBeadsAvailable,\n isBeadsInitialized,\n createWorkflowBeads,\n updateAtomBead,\n updateWorkflowBead,\n} from '../workflow/beads.js';\nimport { WorkflowDefinition } from '../schemas/workflow.js';\nimport { fmt } from '../cli/format.js';\nimport { toErrorMessage } from '../utils/errors.js';\n\ntype AtomWithArtifactsType = z.infer<typeof AtomWithArtifacts>;\ntype WorkflowDefinitionType = z.infer<typeof WorkflowDefinition>;\n\n/**\n * Result accumulator for the shared execution loop.\n * Both run and resume commands populate this during atom execution.\n */\ninterface ExecutionAccumulator {\n success: boolean;\n executed: string[];\n errors: Array<{ atom: string; error: string }>;\n /** Optional artifact tracking (used by run, not by resume) */\n artifacts?: Record<string, string[]>;\n}\n\n/**\n * Execute a sequence of workflow atoms, updating run state and beads as each completes.\n *\n * This is the shared execution loop used by both `workflowRunCommand` and\n * `workflowResumeCommand`. Each caller sets up its own initialization\n * (fresh state vs loaded state) and calls this function for the actual execution.\n *\n * @param atomIds - Ordered list of atom IDs to execute\n * @param atoms - Full atom definitions (used to look up atom names and artifact declarations)\n * @param runState - Mutable run state, updated in place as atoms execute\n * @param accumulator - Mutable result accumulator, updated in place\n * @param options - Display options\n * @param resolvedAtoms - Optional resolved atoms from dependency resolution (provides per-atom artifact inputs)\n */\nasync function executeWorkflowAtoms(\n atomIds: string[],\n atoms: AtomWithArtifactsType[],\n runState: WorkflowRunState,\n accumulator: ExecutionAccumulator,\n options: { json?: boolean },\n resolvedAtoms?: ResolvedAtom[],\n): Promise<void> {\n for (const id of atomIds) {\n const atom = atoms.find((a) => (a.alias ?? a.atom) === id);\n const atomState = runState.atoms.find((a) => a.id === id);\n\n if (!options.json) {\n process.stdout.write(` ${fmt.gray('○')} ${id}...`);\n }\n\n // Update bead to in_progress\n if (runState.beadsEnabled && atomState?.beadId) {\n await updateAtomBead(atomState.beadId, 'in_progress');\n }\n\n // Update run state to running\n updateAtomState(runState, id, {\n status: 'running',\n startedAt: new Date().toISOString(),\n });\n await saveRunState(runState);\n\n try {\n // Build per-atom input from resolved artifact dependencies.\n // Each resolved atom carries an `inputs` map (field name -> CachedArtifact);\n // we extract the `content` from each artifact to form the input object.\n const resolvedForAtom = resolvedAtoms?.find((r) => r.id === id);\n const atomInput: Record<string, unknown> = {};\n if (resolvedForAtom) {\n for (const [fieldName, cachedArtifact] of resolvedForAtom.inputs) {\n atomInput[fieldName] = cachedArtifact.content;\n }\n }\n\n const atomResult = await executeAtom(\n atom?.atom ?? id,\n atomInput,\n process.cwd()\n );\n\n if (!atomResult.success) {\n throw new Error(atomResult.error ?? 'Atom execution failed');\n }\n\n accumulator.executed.push(id);\n\n // Record actual artifacts from execution\n const producedArtifacts = atom?.produces?.map((p) => p.artifact);\n if (accumulator.artifacts && producedArtifacts && producedArtifacts.length > 0) {\n accumulator.artifacts[id] = producedArtifacts;\n }\n\n // Update run state to completed\n updateAtomState(runState, id, {\n status: 'completed',\n completedAt: new Date().toISOString(),\n artifacts: producedArtifacts,\n });\n await saveRunState(runState);\n\n // Update bead to completed\n if (runState.beadsEnabled && atomState?.beadId) {\n await updateAtomBead(atomState.beadId, 'completed');\n }\n\n if (!options.json) {\n // Clear the line and show success\n process.stdout.write(`\\r ${fmt.green('✓')} ${id} \\n`);\n }\n } catch (err) {\n const errMsg = toErrorMessage(err);\n accumulator.success = false;\n accumulator.errors.push({\n atom: id,\n error: errMsg,\n });\n\n // Update run state to failed\n updateAtomState(runState, id, {\n status: 'failed',\n error: errMsg,\n });\n runState.status = 'failed';\n runState.failedAtom = id;\n runState.error = errMsg;\n await saveRunState(runState);\n\n // Update bead to failed\n if (runState.beadsEnabled && atomState?.beadId) {\n await updateAtomBead(atomState.beadId, 'failed', errMsg);\n }\n\n if (!options.json) {\n // Clear the line and show failure\n process.stdout.write(`\\r ${fmt.red('✗')} ${id}: ${errMsg} \\n`);\n }\n\n // Stop execution on failure\n break;\n }\n }\n}\n\n/**\n * Options for the workflow run command.\n */\nexport interface WorkflowRunOptions {\n dryRun?: boolean;\n json?: boolean;\n forceRebuild?: string;\n forceRebuildAll?: boolean;\n /** Beads tracking (default: true, use --no-beads to disable) */\n beads?: boolean;\n}\n\n/**\n * Workflow file stored in .atomic/workflows/\n */\ninterface StoredWorkflow {\n definition: WorkflowDefinitionType;\n atoms: AtomWithArtifactsType[];\n}\n\n/**\n * Result of workflow execution.\n */\nexport interface WorkflowRunResult {\n success: boolean;\n workflow: string;\n executionOrder: string[];\n skipped: string[];\n executed: string[];\n artifacts: Record<string, string[]>;\n errors: Array<{ atom: string; error: string }>;\n duration: number;\n}\n\nconst WORKFLOWS_DIR = 'workflows';\nconst WORKFLOW_EXT = '.workflow.json';\n\n/**\n * Load a workflow from the .atomic/workflows/ directory.\n */\nasync function loadWorkflow(name: string): Promise<StoredWorkflow> {\n const projectRoot = process.cwd();\n const workflowPath = join(\n projectRoot,\n ATOMIC_DIR,\n WORKFLOWS_DIR,\n `${name}${WORKFLOW_EXT}`\n );\n\n if (!(await fileExists(workflowPath))) {\n throw new Error(\n `Workflow '${name}' not found.\\n` +\n `Expected file: ${workflowPath}`\n );\n }\n\n const content = await readFile(workflowPath, 'utf-8');\n\n // Parse JSON with clear error message\n let data: unknown;\n try {\n data = JSON.parse(content);\n } catch (err) {\n throw new Error(\n `Workflow '${name}' contains invalid JSON: ${toErrorMessage(err)}`\n );\n }\n\n // Validate the workflow definition\n const parsed = data as { definition?: unknown; atoms?: unknown; capabilities?: unknown };\n const definition = WorkflowDefinition.parse(parsed.definition);\n\n // Support both 'atoms' (new) and 'capabilities' (deprecated) for migration\n const atomsData = parsed.atoms ?? parsed.capabilities;\n\n // Validate atoms array exists\n if (!Array.isArray(atomsData)) {\n throw new Error(`Workflow '${name}' has invalid atoms structure`);\n }\n\n // Validate each atom using the schema\n const atoms = atomsData.map((atom: unknown, index: number) => {\n try {\n return AtomWithArtifacts.parse(atom);\n } catch (err) {\n throw new Error(\n `Workflow '${name}' has invalid atom at index ${index}: ${toErrorMessage(err)}`\n );\n }\n });\n\n return { definition, atoms };\n}\n\n/**\n * Convert workflow atoms to resolver format.\n */\nfunction convertToResolverAtoms(\n workflow: WorkflowDefinitionType,\n atoms: AtomWithArtifactsType[]\n): AtomWithArtifactsType[] {\n // If atoms are provided, use them directly\n if (atoms.length > 0) {\n return atoms;\n }\n\n // Otherwise, convert from WorkflowDefinition format\n return workflow.atoms.map((a) => ({\n atom: a.atom,\n dependsOn: a.dependsOn,\n alias: a.alias,\n description: a.description,\n requires: [],\n produces: [],\n }));\n}\n\n/**\n * Format workflow run result for display.\n */\nfunction formatWorkflowResult(result: WorkflowRunResult): string {\n const lines: string[] = [];\n\n if (result.success) {\n lines.push(\n fmt.green('✓') + fmt.bold(` Workflow '${result.workflow}' completed`)\n );\n } else {\n lines.push(\n fmt.red('✗') + fmt.bold(` Workflow '${result.workflow}' failed`)\n );\n }\n\n lines.push('');\n lines.push(fmt.gray(`Duration: ${result.duration}ms`));\n lines.push('');\n\n // Execution summary\n lines.push(fmt.bold('Execution Summary:'));\n lines.push(` Executed: ${result.executed.length} atoms`);\n lines.push(` Skipped: ${result.skipped.length} atoms (cached)`);\n\n if (result.executed.length > 0) {\n lines.push('');\n lines.push(fmt.bold('Executed:'));\n for (const atomId of result.executed) {\n lines.push(` ${fmt.green('✓')} ${atomId}`);\n }\n }\n\n if (result.skipped.length > 0) {\n lines.push('');\n lines.push(fmt.bold('Skipped (cached):'));\n for (const atomId of result.skipped) {\n lines.push(` ${fmt.gray('○')} ${atomId}`);\n }\n }\n\n if (result.errors.length > 0) {\n lines.push('');\n lines.push(fmt.bold(fmt.red('Errors:')));\n for (const { atom, error } of result.errors) {\n lines.push(` ${fmt.red('✗')} ${atom}: ${error}`);\n }\n }\n\n // Artifacts produced\n const artifactCount = Object.values(result.artifacts).flat().length;\n if (artifactCount > 0) {\n lines.push('');\n lines.push(fmt.bold(`Artifacts Produced (${artifactCount}):`));\n for (const [atomId, artifacts] of Object.entries(result.artifacts)) {\n for (const artifact of artifacts) {\n lines.push(` ${fmt.cyan('→')} ${atomId}/${artifact}`);\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format dry-run output for display.\n */\nfunction formatDryRun(\n workflow: string,\n resolution: ResolutionResult,\n atoms: AtomWithArtifactsType[]\n): string {\n const lines: string[] = [];\n\n lines.push(fmt.bold(`Dry Run: Workflow '${workflow}'`));\n lines.push('');\n\n // Show dependency chain\n lines.push(fmt.bold('Resolving dependencies:'));\n lines.push(` ${formatDependencyChain(resolution.toExecute)}`);\n lines.push('');\n\n // Execution plan\n lines.push(fmt.bold('Execution Plan:'));\n let step = 1;\n for (const id of resolution.toExecute) {\n const resolved = resolution.resolved.find((r) => r.id === id);\n const atom = atoms.find(\n (a) => (a.alias ?? a.atom) === id\n );\n const reason = resolved?.reason ?? 'Will execute';\n lines.push(` ${step}. ${fmt.cyan(id)}`);\n if (atom?.description) {\n lines.push(` ${fmt.gray(atom.description)}`);\n }\n lines.push(` ${fmt.gray(`Reason: ${reason}`)}`);\n step++;\n }\n\n // Skipped atoms\n if (resolution.skipped.length > 0) {\n lines.push('');\n lines.push(fmt.bold('Will Skip (cached):'));\n for (const id of resolution.skipped) {\n const resolved = resolution.resolved.find((r) => r.id === id);\n lines.push(` ${fmt.gray('○')} ${id} - ${resolved?.reason ?? 'Cached'}`);\n }\n }\n\n // Artifacts that will be produced\n lines.push('');\n lines.push(fmt.bold('Expected Artifacts:'));\n for (const atom of atoms) {\n const id = atom.alias ?? atom.atom;\n if (atom.produces.length > 0 && resolution.toExecute.includes(id)) {\n for (const prod of atom.produces) {\n lines.push(` ${fmt.cyan('→')} ${id}/${prod.artifact}`);\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Execute a workflow with the given name.\n *\n * @param name - The workflow name to execute\n * @param options - Execution options\n */\nexport async function workflowRunCommand(\n name: string,\n options: WorkflowRunOptions\n): Promise<void> {\n const startTime = Date.now();\n\n try {\n // Load workflow\n const { definition, atoms: storedAtoms } =\n await loadWorkflow(name);\n const atoms = convertToResolverAtoms(\n definition,\n storedAtoms\n );\n\n // Create cache (in-memory for now)\n const cache = createArtifactCache();\n\n // Parse forceRebuild option, filtering empty strings from trailing commas\n const forceRebuild = options.forceRebuild\n ? options.forceRebuild\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0)\n : [];\n\n // Resolve dependencies\n const resolution = resolveDependencies(atoms, {\n cache,\n forceRebuild,\n forceRebuildAll: options.forceRebuildAll,\n });\n\n // Dry run mode - just show the plan\n if (options.dryRun) {\n if (options.json) {\n const dryRunResult = {\n workflow: name,\n dryRun: true,\n executionOrder: resolution.toExecute,\n skipped: resolution.skipped,\n resolved: resolution.resolved.map((r) => ({\n id: r.id,\n canSkip: r.canSkip,\n reason: r.reason,\n inputs: Array.from(r.inputs.keys()),\n })),\n };\n console.log(JSON.stringify(dryRunResult, null, 2));\n } else {\n console.log(formatDryRun(name, resolution, atoms));\n }\n return;\n }\n\n // Setup beads tracking (default: enabled, unless --no-beads or dry-run)\n const beadsEnabled = options.beads !== false && !options.dryRun;\n let beadOptions: BeadOptions | undefined;\n\n if (beadsEnabled) {\n // Check if beads is available and initialized\n if (!(await isBeadsAvailable())) {\n if (!options.json) {\n console.log(fmt.yellow('⚠'), fmt.gray('Beads CLI not found, skipping tracking'));\n }\n } else if (!(await isBeadsInitialized())) {\n if (!options.json) {\n console.log(fmt.yellow('⚠'), fmt.gray('Beads not initialized, skipping tracking'));\n }\n } else {\n // Create workflow beads\n const beadsResult = await createWorkflowBeads({\n workflow: name,\n description: definition.description,\n atoms: resolution.toExecute,\n });\n\n if (beadsResult.success) {\n beadOptions = {\n enabled: true,\n parentId: beadsResult.parentId,\n atomBeadIds: beadsResult.childIds,\n };\n if (!options.json) {\n console.log(fmt.cyan('⊙'), fmt.gray(`Beads tracking: ${beadsResult.parentId}`));\n }\n } else if (!options.json) {\n console.log(fmt.yellow('⚠'), fmt.gray(`Beads error: ${beadsResult.error}`));\n }\n }\n }\n\n // Create run state for tracking\n const runState = createRunState(\n name,\n resolution.toExecute,\n resolution.skipped,\n beadOptions\n );\n await saveRunState(runState);\n\n // Execute workflow\n const result: WorkflowRunResult = {\n success: true,\n workflow: name,\n executionOrder: resolution.toExecute,\n skipped: resolution.skipped,\n executed: [],\n artifacts: {},\n errors: [],\n duration: 0,\n };\n\n // Show progress header\n if (!options.json) {\n console.log(fmt.bold(`Executing Workflow: ${name}`));\n console.log(\n `${fmt.gray('Resolving dependencies:')} ${formatDependencyChain(resolution.toExecute)}`\n );\n console.log('');\n }\n\n // Execute each atom in order, passing resolved artifact inputs\n await executeWorkflowAtoms(\n resolution.toExecute,\n atoms,\n runState,\n result,\n { json: options.json },\n resolution.resolved,\n );\n\n // Update final run state\n if (result.success) {\n runState.status = 'completed';\n runState.completedAt = new Date().toISOString();\n }\n await saveRunState(runState);\n\n // Update workflow bead\n if (runState.beadParentId) {\n await updateWorkflowBead(runState.beadParentId, result.success, runState.failedAtom);\n }\n\n result.duration = Date.now() - startTime;\n\n // Output result\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log('');\n console.log(formatWorkflowResult(result));\n }\n\n if (!result.success) {\n process.exit(1);\n }\n } catch (err) {\n const duration = Date.now() - startTime;\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n success: false,\n workflow: name,\n error: toErrorMessage(err),\n duration,\n },\n null,\n 2\n )\n );\n } else {\n console.error(\n fmt.red('Error:'),\n toErrorMessage(err)\n );\n }\n process.exit(1);\n }\n}\n\n/**\n * List available workflows.\n */\nexport async function workflowListCommand(options: {\n json?: boolean;\n}): Promise<void> {\n const projectRoot = process.cwd();\n const workflowsDir = join(projectRoot, ATOMIC_DIR, WORKFLOWS_DIR);\n\n try {\n if (!(await fileExists(workflowsDir))) {\n if (options.json) {\n console.log(JSON.stringify({ workflows: [] }, null, 2));\n } else {\n console.log(fmt.gray('No workflows directory found.'));\n console.log(\n fmt.gray(`Create workflows in ${ATOMIC_DIR}/${WORKFLOWS_DIR}/`)\n );\n }\n return;\n }\n\n // Read workflow files\n const files = await readdir(workflowsDir);\n const workflowFiles = files.filter((f) => f.endsWith(WORKFLOW_EXT));\n\n if (workflowFiles.length === 0) {\n if (options.json) {\n console.log(JSON.stringify({ workflows: [] }, null, 2));\n } else {\n console.log(fmt.gray('No workflows found.'));\n }\n return;\n }\n\n // Load workflow metadata\n const workflows: Array<{\n name: string;\n description: string;\n atoms: number;\n }> = [];\n\n for (const file of workflowFiles) {\n const name = file.replace(WORKFLOW_EXT, '');\n try {\n const { definition } = await loadWorkflow(name);\n workflows.push({\n name,\n description: definition.description,\n atoms: definition.atoms.length,\n });\n } catch (err) {\n // Log warning for invalid workflows (unless JSON mode)\n if (!options.json) {\n console.error(\n fmt.yellow('Warning:'),\n `Could not load workflow '${name}': ${toErrorMessage(err)}`\n );\n }\n }\n }\n\n if (options.json) {\n console.log(JSON.stringify({ workflows }, null, 2));\n } else {\n console.log(fmt.bold('Available Workflows:'));\n console.log('');\n for (const wf of workflows) {\n console.log(` ${fmt.cyan(wf.name)}`);\n console.log(` ${wf.description}`);\n console.log(` ${fmt.gray(`${wf.atoms} atoms`)}`);\n console.log('');\n }\n }\n } catch (err) {\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n error: toErrorMessage(err),\n },\n null,\n 2\n )\n );\n } else {\n console.error(\n fmt.red('Error:'),\n toErrorMessage(err)\n );\n }\n process.exit(1);\n }\n}\n\n/**\n * Options for the workflow resume command.\n */\nexport interface WorkflowResumeOptions {\n run?: string;\n from?: string;\n json?: boolean;\n /** Beads tracking (default: true, use --no-beads to disable) */\n beads?: boolean;\n}\n\n/**\n * Resume result for JSON output.\n */\nexport interface WorkflowResumeResult {\n success: boolean;\n workflow: string;\n runId: string;\n resumedFrom: string;\n executed: string[];\n skipped: string[];\n errors: Array<{ atom: string; error: string }>;\n duration: number;\n}\n\n/**\n * Resume a failed or partial workflow execution.\n *\n * @param name - The workflow name to resume\n * @param options - Resume options\n */\nexport async function workflowResumeCommand(\n name: string,\n options: WorkflowResumeOptions\n): Promise<void> {\n const startTime = Date.now();\n\n try {\n // Load workflow definition\n const { definition, atoms: storedAtoms } =\n await loadWorkflow(name);\n const atoms = convertToResolverAtoms(\n definition,\n storedAtoms\n );\n\n // Find the run state to resume\n let runState: WorkflowRunState | null = null;\n\n if (options.run) {\n runState = await loadRunState(options.run);\n if (!runState) {\n throw new Error(`Run '${options.run}' not found`);\n }\n if (runState.workflow !== name) {\n throw new Error(\n `Run '${options.run}' is for workflow '${runState.workflow}', not '${name}'`\n );\n }\n } else {\n // Find the last failed run for this workflow\n runState = await getLastFailedRun(name);\n if (!runState) {\n throw new Error(\n `No failed runs found for workflow '${name}'. Use --run to specify a run ID.`\n );\n }\n }\n\n // Determine which atoms to execute\n const toExecute = getResumableAtoms(runState, options.from);\n\n if (toExecute.length === 0) {\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n workflow: name,\n runId: runState.runId,\n message: 'No atoms need to be executed',\n },\n null,\n 2\n )\n );\n } else {\n console.log(\n fmt.green('✓'),\n `Workflow '${name}' has no atoms to resume`\n );\n }\n return;\n }\n\n // Determine what was already completed\n const alreadyCompleted = runState.executionOrder.filter(\n (id) => !toExecute.includes(id)\n );\n\n // Handle beads tracking for resume\n // If --no-beads, disable beads regardless of original run\n // If original run had beads, reuse them\n // If original run didn't have beads and --no-beads not set, create new ones\n const beadsDisabled = options.beads === false;\n\n if (!beadsDisabled && !runState.beadsEnabled) {\n // Original run didn't have beads, try to create new ones\n if ((await isBeadsAvailable()) && (await isBeadsInitialized())) {\n const beadsResult = await createWorkflowBeads({\n workflow: name,\n description: definition.description,\n atoms: toExecute,\n });\n\n if (beadsResult.success) {\n runState.beadsEnabled = true;\n runState.beadParentId = beadsResult.parentId;\n // Update atom bead IDs\n for (const id of toExecute) {\n const beadId = beadsResult.childIds.get(id);\n if (beadId) {\n updateAtomState(runState, id, { beadId });\n }\n }\n if (!options.json) {\n console.log(fmt.cyan('⊙'), fmt.gray(`Beads tracking: ${beadsResult.parentId}`));\n }\n }\n }\n } else if (!beadsDisabled && runState.beadsEnabled) {\n // Reuse existing beads\n if (!options.json && runState.beadParentId) {\n console.log(fmt.cyan('⊙'), fmt.gray(`Beads tracking: ${runState.beadParentId} (resumed)`));\n }\n }\n\n const result: WorkflowResumeResult = {\n success: true,\n workflow: name,\n runId: runState.runId,\n resumedFrom: toExecute[0]!,\n executed: [],\n skipped: alreadyCompleted,\n errors: [],\n duration: 0,\n };\n\n // Show progress header\n if (!options.json) {\n console.log(fmt.bold(`Resuming Workflow: ${name}`));\n console.log(`${fmt.gray('Run ID:')} ${runState.runId}`);\n console.log(\n `${fmt.gray('Skipping completed:')} ${alreadyCompleted.length > 0 ? alreadyCompleted.join(', ') : 'none'}`\n );\n console.log(`${fmt.gray('Resuming from:')} ${toExecute[0]}`);\n console.log('');\n }\n\n // Update run state to running\n runState.status = 'running';\n await saveRunState(runState);\n\n // Execute remaining atoms\n await executeWorkflowAtoms(\n toExecute,\n atoms,\n runState,\n result,\n { json: options.json },\n );\n\n // Update final run state\n if (result.success) {\n runState.status = 'completed';\n runState.completedAt = new Date().toISOString();\n }\n await saveRunState(runState);\n\n // Update workflow bead\n if (runState.beadsEnabled && runState.beadParentId) {\n await updateWorkflowBead(runState.beadParentId, result.success, runState.failedAtom);\n }\n\n result.duration = Date.now() - startTime;\n\n // Output result\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n console.log('');\n if (result.success) {\n console.log(\n fmt.green('✓') + fmt.bold(` Workflow '${name}' resumed successfully`)\n );\n } else {\n console.log(\n fmt.red('✗') + fmt.bold(` Workflow '${name}' resume failed`)\n );\n }\n console.log('');\n console.log(fmt.gray(`Duration: ${result.duration}ms`));\n console.log(\n fmt.gray(`Skipped: ${result.skipped.length} (already completed)`)\n );\n console.log(fmt.gray(`Executed: ${result.executed.length}`));\n\n if (result.errors.length > 0) {\n console.log('');\n console.log(fmt.bold(fmt.red('Errors:')));\n for (const { atom, error } of result.errors) {\n console.log(` ${fmt.red('✗')} ${atom}: ${error}`);\n }\n }\n }\n\n if (!result.success) {\n process.exit(1);\n }\n } catch (err) {\n const duration = Date.now() - startTime;\n\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n success: false,\n workflow: name,\n error: toErrorMessage(err),\n duration,\n },\n null,\n 2\n )\n );\n } else {\n console.error(\n fmt.red('Error:'),\n toErrorMessage(err)\n );\n }\n process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "atomism",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Schema-first agent swarm orchestration framework",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"atomic": "dist/cli.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsup",
|
|
24
|
+
"dev": "tsx src/cli.ts",
|
|
25
|
+
"docs:dev": "vitepress dev docs",
|
|
26
|
+
"docs:build": "vitepress build docs",
|
|
27
|
+
"docs:preview": "vitepress preview docs",
|
|
28
|
+
"lint": "eslint src/",
|
|
29
|
+
"lint:fix": "eslint src/ --fix",
|
|
30
|
+
"test": "vitest",
|
|
31
|
+
"typecheck": "tsc --noEmit"
|
|
32
|
+
},
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/Trust-Will/atomic-explore.git"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"cli",
|
|
39
|
+
"agent",
|
|
40
|
+
"swarm",
|
|
41
|
+
"orchestration",
|
|
42
|
+
"schema",
|
|
43
|
+
"zod",
|
|
44
|
+
"ai",
|
|
45
|
+
"llm",
|
|
46
|
+
"workflow",
|
|
47
|
+
"automation",
|
|
48
|
+
"claude",
|
|
49
|
+
"atoms"
|
|
50
|
+
],
|
|
51
|
+
"author": "",
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"bugs": {
|
|
54
|
+
"url": "https://github.com/Trust-Will/atomic-explore/issues"
|
|
55
|
+
},
|
|
56
|
+
"homepage": "https://github.com/Trust-Will/atomic-explore#readme",
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">=18"
|
|
59
|
+
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"@tursodatabase/database": "^0.4.4",
|
|
62
|
+
"@vscode/tree-sitter-wasm": "^0.3.0",
|
|
63
|
+
"commander": "^14.0.2",
|
|
64
|
+
"edit-distance": "^1.0.5",
|
|
65
|
+
"jiti": "^2.6.1",
|
|
66
|
+
"oxc-parser": "^0.111.0",
|
|
67
|
+
"web-tree-sitter": "^0.26.3",
|
|
68
|
+
"zod": "^4.3.6",
|
|
69
|
+
"zod-to-json-schema": "^3.25.1"
|
|
70
|
+
},
|
|
71
|
+
"devDependencies": {
|
|
72
|
+
"@eslint/js": "^9.39.2",
|
|
73
|
+
"@types/node": "^25.1.0",
|
|
74
|
+
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
75
|
+
"@typescript-eslint/parser": "^8.54.0",
|
|
76
|
+
"eslint": "^9.39.2",
|
|
77
|
+
"tsup": "^8.5.1",
|
|
78
|
+
"tsx": "^4.21.0",
|
|
79
|
+
"typescript": "^5.9.3",
|
|
80
|
+
"typescript-eslint": "^8.54.0",
|
|
81
|
+
"vitepress": "^1.6.4",
|
|
82
|
+
"vitest": "^4.0.18"
|
|
83
|
+
}
|
|
84
|
+
}
|