agentic-forge 0.0.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +64 -24
  3. package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/SKILL.md +2 -2
  4. package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/references/REFERENCE.md +9 -3
  5. package/{src/claude → dist/authoring}/.claude/skills/workflow-builder/references/workflow-example.yaml +15 -8
  6. package/dist/checkpoints/manager.d.ts +5 -0
  7. package/dist/checkpoints/manager.js +87 -0
  8. package/dist/checkpoints/manager.js.map +1 -0
  9. package/{src → dist}/claude/.claude/skills/analyze/SKILL.md +1 -1
  10. package/{src → dist}/claude/.claude/skills/create-checkpoint/SKILL.md +1 -1
  11. package/{src → dist}/claude/.claude/skills/create-log/SKILL.md +1 -1
  12. package/{src → dist}/claude/.claude/skills/fix-analyze/SKILL.md +1 -1
  13. package/{src → dist}/claude/.claude/skills/git-branch/SKILL.md +1 -1
  14. package/{src → dist}/claude/.claude/skills/git-commit/SKILL.md +1 -1
  15. package/{src → dist}/claude/.claude/skills/git-pr/SKILL.md +1 -1
  16. package/{src → dist}/claude/.claude/skills/sdlc-plan/SKILL.md +1 -1
  17. package/{src → dist}/claude/.claude/skills/sdlc-review/SKILL.md +1 -1
  18. package/dist/cli.d.ts +3 -0
  19. package/dist/cli.js +173 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/commands/authoring-dir.d.ts +2 -0
  22. package/dist/commands/authoring-dir.js +9 -0
  23. package/dist/commands/authoring-dir.js.map +1 -0
  24. package/dist/commands/config-cmd.d.ts +2 -0
  25. package/dist/commands/config-cmd.js +30 -0
  26. package/dist/commands/config-cmd.js.map +1 -0
  27. package/{src/commands/index.ts → dist/commands/index.d.ts} +2 -10
  28. package/dist/commands/index.js +14 -0
  29. package/dist/commands/index.js.map +1 -0
  30. package/dist/commands/init.d.ts +6 -0
  31. package/dist/commands/init.js +83 -0
  32. package/dist/commands/init.js.map +1 -0
  33. package/dist/commands/release-notes.d.ts +5 -0
  34. package/dist/commands/release-notes.js +68 -0
  35. package/dist/commands/release-notes.js.map +1 -0
  36. package/dist/commands/resume.d.ts +5 -0
  37. package/dist/commands/resume.js +79 -0
  38. package/dist/commands/resume.js.map +1 -0
  39. package/dist/commands/run.d.ts +27 -0
  40. package/dist/commands/run.js +243 -0
  41. package/dist/commands/run.js.map +1 -0
  42. package/dist/commands/shortcuts.d.ts +2 -0
  43. package/dist/commands/shortcuts.js +11 -0
  44. package/dist/commands/shortcuts.js.map +1 -0
  45. package/dist/commands/skills-dir.d.ts +2 -0
  46. package/dist/commands/skills-dir.js +9 -0
  47. package/dist/commands/skills-dir.js.map +1 -0
  48. package/dist/commands/status.d.ts +4 -0
  49. package/dist/commands/status.js +99 -0
  50. package/dist/commands/status.js.map +1 -0
  51. package/dist/commands/update.d.ts +4 -0
  52. package/dist/commands/update.js +65 -0
  53. package/dist/commands/update.js.map +1 -0
  54. package/dist/commands/version.d.ts +3 -0
  55. package/dist/commands/version.js +26 -0
  56. package/dist/commands/version.js.map +1 -0
  57. package/dist/commands/workflows.d.ts +4 -0
  58. package/dist/commands/workflows.js +111 -0
  59. package/dist/commands/workflows.js.map +1 -0
  60. package/dist/config.d.ts +8 -0
  61. package/dist/config.js +110 -0
  62. package/dist/config.js.map +1 -0
  63. package/dist/console.d.ts +103 -0
  64. package/dist/console.js +670 -0
  65. package/dist/console.js.map +1 -0
  66. package/dist/executor.d.ts +27 -0
  67. package/dist/executor.js +236 -0
  68. package/dist/executor.js.map +1 -0
  69. package/dist/git/worktree.d.ts +23 -0
  70. package/dist/git/worktree.js +170 -0
  71. package/dist/git/worktree.js.map +1 -0
  72. package/dist/logging/logger.d.ts +27 -0
  73. package/dist/logging/logger.js +69 -0
  74. package/dist/logging/logger.js.map +1 -0
  75. package/dist/orchestrator.d.ts +44 -0
  76. package/dist/orchestrator.js +587 -0
  77. package/dist/orchestrator.js.map +1 -0
  78. package/dist/parser.d.ts +17 -0
  79. package/dist/parser.js +184 -0
  80. package/dist/parser.js.map +1 -0
  81. package/dist/progress.d.ts +29 -0
  82. package/dist/progress.js +275 -0
  83. package/dist/progress.js.map +1 -0
  84. package/dist/ralph-loop.d.ts +26 -0
  85. package/dist/ralph-loop.js +194 -0
  86. package/dist/ralph-loop.js.map +1 -0
  87. package/dist/renderer.d.ts +15 -0
  88. package/dist/renderer.js +123 -0
  89. package/dist/renderer.js.map +1 -0
  90. package/dist/runner.d.ts +84 -0
  91. package/dist/runner.js +529 -0
  92. package/dist/runner.js.map +1 -0
  93. package/dist/signal-manager.d.ts +16 -0
  94. package/dist/signal-manager.js +50 -0
  95. package/dist/signal-manager.js.map +1 -0
  96. package/dist/steps/base.d.ts +28 -0
  97. package/dist/steps/base.js +23 -0
  98. package/dist/steps/base.js.map +1 -0
  99. package/dist/steps/conditional-step.d.ts +12 -0
  100. package/dist/steps/conditional-step.js +106 -0
  101. package/dist/steps/conditional-step.js.map +1 -0
  102. package/{src/steps/index.ts → dist/steps/index.d.ts} +1 -9
  103. package/dist/steps/index.js +8 -0
  104. package/dist/steps/index.js.map +1 -0
  105. package/dist/steps/parallel-step.d.ts +11 -0
  106. package/dist/steps/parallel-step.js +166 -0
  107. package/dist/steps/parallel-step.js.map +1 -0
  108. package/dist/steps/prompt-step.d.ts +8 -0
  109. package/dist/steps/prompt-step.js +94 -0
  110. package/dist/steps/prompt-step.js.map +1 -0
  111. package/dist/steps/ralph-loop-step.d.ts +8 -0
  112. package/dist/steps/ralph-loop-step.js +132 -0
  113. package/dist/steps/ralph-loop-step.js.map +1 -0
  114. package/dist/steps/serial-step.d.ts +10 -0
  115. package/dist/steps/serial-step.js +57 -0
  116. package/dist/steps/serial-step.js.map +1 -0
  117. package/dist/types.d.ts +118 -0
  118. package/dist/types.js +10 -0
  119. package/dist/types.js.map +1 -0
  120. package/package.json +59 -2
  121. package/.gitattributes +0 -24
  122. package/.github/workflows/ci.yml +0 -70
  123. package/.markdownlint-cli2.jsonc +0 -16
  124. package/.prettierignore +0 -3
  125. package/.prettierrc +0 -6
  126. package/.vscode/agentic-forge.code-workspace +0 -26
  127. package/CHANGELOG.md +0 -100
  128. package/CLAUDE.md +0 -158
  129. package/CONTRIBUTING.md +0 -152
  130. package/biome.json +0 -21
  131. package/scripts/copy-assets.js +0 -21
  132. package/src/checkpoints/manager.ts +0 -119
  133. package/src/cli.ts +0 -182
  134. package/src/commands/config-cmd.ts +0 -28
  135. package/src/commands/init.ts +0 -96
  136. package/src/commands/release-notes.ts +0 -85
  137. package/src/commands/resume.ts +0 -103
  138. package/src/commands/run.ts +0 -234
  139. package/src/commands/shortcuts.ts +0 -11
  140. package/src/commands/skills-dir.ts +0 -11
  141. package/src/commands/status.ts +0 -112
  142. package/src/commands/update.ts +0 -64
  143. package/src/commands/version.ts +0 -27
  144. package/src/commands/workflows.ts +0 -129
  145. package/src/config.ts +0 -129
  146. package/src/console.ts +0 -790
  147. package/src/executor.ts +0 -354
  148. package/src/git/worktree.ts +0 -236
  149. package/src/logging/logger.ts +0 -95
  150. package/src/orchestrator.ts +0 -815
  151. package/src/parser.ts +0 -225
  152. package/src/progress.ts +0 -306
  153. package/src/ralph-loop.ts +0 -260
  154. package/src/renderer.ts +0 -164
  155. package/src/runner.ts +0 -634
  156. package/src/signal-manager.ts +0 -55
  157. package/src/steps/base.ts +0 -71
  158. package/src/steps/conditional-step.ts +0 -144
  159. package/src/steps/parallel-step.ts +0 -213
  160. package/src/steps/prompt-step.ts +0 -121
  161. package/src/steps/ralph-loop-step.ts +0 -186
  162. package/src/steps/serial-step.ts +0 -84
  163. package/src/types.ts +0 -141
  164. package/tests/config.test.ts +0 -219
  165. package/tests/console.test.ts +0 -506
  166. package/tests/executor.test.ts +0 -339
  167. package/tests/init.test.ts +0 -86
  168. package/tests/logger.test.ts +0 -110
  169. package/tests/parser.test.ts +0 -290
  170. package/tests/progress.test.ts +0 -345
  171. package/tests/ralph-loop.test.ts +0 -418
  172. package/tests/renderer.test.ts +0 -350
  173. package/tests/runner.test.ts +0 -497
  174. package/tests/setup.test.ts +0 -7
  175. package/tests/signal-manager.test.ts +0 -26
  176. package/tests/steps.test.ts +0 -412
  177. package/tests/worktree.test.ts +0 -411
  178. package/tsconfig.json +0 -18
  179. package/vitest.config.ts +0 -8
  180. /package/{src → dist}/agents/explorer.md +0 -0
  181. /package/{src → dist}/agents/reviewer.md +0 -0
  182. /package/{src → dist}/claude/.claude/skills/analyze/references/bug.md +0 -0
  183. /package/{src → dist}/claude/.claude/skills/analyze/references/debt.md +0 -0
  184. /package/{src → dist}/claude/.claude/skills/analyze/references/doc.md +0 -0
  185. /package/{src → dist}/claude/.claude/skills/analyze/references/security.md +0 -0
  186. /package/{src → dist}/claude/.claude/skills/analyze/references/style.md +0 -0
  187. /package/{src → dist}/claude/.claude/skills/orchestrate/SKILL.md +0 -0
  188. /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/bug.md +0 -0
  189. /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/chore.md +0 -0
  190. /package/{src → dist}/claude/.claude/skills/sdlc-plan/references/feature.md +0 -0
  191. /package/{src → dist}/prompts/agentic-system.md +0 -0
  192. /package/{src → dist}/templates/analysis/bug.md.j2 +0 -0
  193. /package/{src → dist}/templates/analysis/debt.md.j2 +0 -0
  194. /package/{src → dist}/templates/analysis/doc.md.j2 +0 -0
  195. /package/{src → dist}/templates/analysis/security.md.j2 +0 -0
  196. /package/{src → dist}/templates/analysis/style.md.j2 +0 -0
  197. /package/{src → dist}/templates/analysis-summary.md.j2 +0 -0
  198. /package/{src → dist}/templates/checkpoint.md.j2 +0 -0
  199. /package/{src → dist}/templates/implementation-report.md.j2 +0 -0
  200. /package/{src → dist}/templates/memory.md.j2 +0 -0
  201. /package/{src → dist}/templates/plan-bug.md.j2 +0 -0
  202. /package/{src → dist}/templates/plan-chore.md.j2 +0 -0
  203. /package/{src → dist}/templates/plan-feature.md.j2 +0 -0
  204. /package/{src → dist}/templates/progress.json.j2 +0 -0
  205. /package/{src → dist}/templates/ralph-report.md.j2 +0 -0
  206. /package/{src → dist}/workflows/analyze-codebase-merge.yaml +0 -0
  207. /package/{src → dist}/workflows/analyze-codebase.yaml +0 -0
  208. /package/{src → dist}/workflows/analyze-single.yaml +0 -0
  209. /package/{src → dist}/workflows/demo.yaml +0 -0
  210. /package/{src → dist}/workflows/one-shot.yaml +0 -0
  211. /package/{src → dist}/workflows/plan-build-review.yaml +0 -0
  212. /package/{src → dist}/workflows/ralph-loop.yaml +0 -0
package/CLAUDE.md DELETED
@@ -1,158 +0,0 @@
1
- # Claude Context: agentic-forge Repository
2
-
3
- ## Project Overview
4
-
5
- Agentic Forge is a TypeScript/Node.js package that provides YAML-based workflow orchestration for Claude Code. It bundles skills, agents, and prompts as package data, enabling autonomous multi-step task execution.
6
-
7
- ## Purpose
8
-
9
- The agentic-forge repository aims to:
10
-
11
- 1. **Share Best Practices**: Provide battle-tested automation patterns and workflows
12
- 2. **Accelerate Development**: Offer ready-to-use components that solve common problems
13
- 3. **Automate Development**: Offer reusable and flexible workflows that enable the automation of development tasks during the whole SDLC life-cycle
14
-
15
- ## Repository Structure
16
-
17
- ### `src/`
18
-
19
- TypeScript source code for the CLI and workflow orchestration engine.
20
-
21
- #### `agents/`
22
-
23
- Bundled sub-agent configurations for specialized, autonomous task execution (`explorer.md`, `reviewer.md`). Agents should be self-contained and focused on a specific domain or task.
24
-
25
- #### `claude/.claude/skills/`
26
-
27
- Bundled skills loaded via `--add-dir`. Skills are reusable Claude Code slash commands. Each skill is a directory in kebab-case containing a `SKILL.md` file.
28
-
29
- #### `commands/`
30
-
31
- CLI command implementations (`run`, `init`, `update`, `skills-dir`, `workflows`, etc.).
32
-
33
- #### `prompts/`
34
-
35
- System prompt templates used by the workflow runner.
36
-
37
- #### `steps/`
38
-
39
- Workflow step handlers (prompt, parallel, serial, conditional, ralph-loop).
40
-
41
- #### `workflows/`
42
-
43
- Bundled YAML workflow definitions (7 workflows: `plan-build-review`, `one-shot`, `ralph-loop`, `analyze-codebase`, `analyze-codebase-merge`, `analyze-single`, `demo`).
44
-
45
- ### `tests/`
46
-
47
- Vitest test suite for all TypeScript source code.
48
-
49
- ### `agentic/`
50
-
51
- Runtime directory for workflow configuration, outputs, and logs.
52
-
53
- ## Development Guidelines
54
-
55
- ### Language Style
56
-
57
- Use US English spelling in all code, comments, documentation, and UI strings when a word has both UK and US variants (e.g., "analyze" not "analyse", "color" not "colour", "canceled" not "cancelled").
58
-
59
- ### Naming Conventions
60
-
61
- - **Agents**: Use descriptive names with domain prefix (e.g., `explorer.md`, `reviewer.md`)
62
- - **Skills**: Directory name in kebab-case with `SKILL.md` inside (e.g., `analyze/SKILL.md`, `git-commit/SKILL.md`)
63
- - **Workflows**: Descriptive kebab-case YAML files (e.g., `plan-build-review.yaml`)
64
-
65
- ### Documentation Guidelines
66
-
67
- - **Character encoding**: Code files must use ASCII only. Documentation and markdown files (skills, agents, READMEs) may use minimal emojis where they add clarity (e.g., checkmarks, robot emoji for Claude attribution). Avoid decorative emoji use.
68
- - **Workflow diagrams**: Use arrow notation (`->`) for workflow documentation instead of long multi-line ASCII boxes. Example: `Plan -> Implement -> Review -> Output` is preferred over complex box diagrams
69
-
70
- ### File Formats
71
-
72
- - **Agents**: Markdown (`.md`) files in `src/agents/`
73
- - **Skills**: `SKILL.md` files in skill directories: `src/claude/.claude/skills/<skill-name>/SKILL.md`
74
- - **Workflows**: YAML files in `src/workflows/`
75
- - **TypeScript Source**: TypeScript modules in `src/` with root `package.json`
76
-
77
- **Placeholder Convention:**
78
-
79
- Prompt templates use **Mustache/Handlebars-style placeholders** with the following format:
80
-
81
- ```markdown
82
- ## {{section_title}}
83
-
84
- {{content}}
85
-
86
- <!--
87
- Instructions:
88
- - Replace {{content}} with the actual content
89
- - Additional guidance for this section
90
- - Suggested elements (include others as needed):
91
- - Element 1
92
- - Element 2
93
- -->
94
- ```
95
-
96
- **Key principles:**
97
-
98
- - Use `{{variable_name}}` for all placeholders (not `<placeholder>` or other formats)
99
- - Include HTML comments with instructions below each section
100
- - Mark suggested elements as "include others as needed" to allow flexibility
101
- - Required sections must be present; optional sections can be omitted
102
- - Section names must match the template exactly (case-sensitive)
103
-
104
- **Validation:**
105
-
106
- Use the `/normalize` command to validate prompt files against templates:
107
-
108
- ```bash
109
- # Validate all prompts in the repository
110
- /normalize
111
-
112
- # Validate specific files or directories
113
- /normalize src/claude/.claude/skills/
114
-
115
- # Auto-fix non-compliant files
116
- /normalize --autofix src/claude/.claude/skills/
117
- ```
118
-
119
- ### Shell Commands
120
-
121
- Run shell commands directly without prefixing with `cd` to the repository root. The working directory is already set correctly, and unnecessary `cd` prefixes create distinct command strings that trigger extra permission prompts.
122
-
123
- ```bash
124
- # Good
125
- git status
126
- pnpm test
127
-
128
- # Bad - unnecessary cd causes extra permission approval
129
- cd "c:/Repositories/agentic-forge" && git status
130
- ```
131
-
132
- ### Code Style and Formatting
133
-
134
- CI validates format, lint, and tests on all pull requests. Run locally before opening a pull request:
135
-
136
- ```bash
137
- pnpm check # Format and lint (biome)
138
- pnpm test # Vitest tests
139
- ```
140
-
141
- ## Technical Considerations
142
-
143
- ### Workflow Engine Changes
144
-
145
- When modifying the workflow engine in `src/`, you must update the workflow-builder skill reference files to keep them in sync:
146
-
147
- - `src/claude/.claude/skills/workflow-builder/references/REFERENCE.md` - Complete schema reference
148
- - `src/claude/.claude/skills/workflow-builder/references/workflow-example.yaml` - Annotated reference workflow
149
-
150
- Changes to workflow settings, step types, or features require updates to both files.
151
-
152
- ### Node.js Development
153
-
154
- - **Always use `pnpm` for package management**: This repository uses pnpm for all Node.js operations
155
- - **Building**: Use `pnpm build` (runs `tsc` + asset copy script)
156
- - **Testing**: Use `pnpm test` (runs Vitest)
157
- - **Linting**: Use `pnpm check` (runs Biome)
158
- - **Development**: Use `pnpm dev` for TypeScript watch mode
package/CONTRIBUTING.md DELETED
@@ -1,152 +0,0 @@
1
- # Contributing to Agentic Forge
2
-
3
- Thank you for your interest in contributing! This guide will help you get started.
4
-
5
- ## Ways to Contribute
6
-
7
- - **Report bugs** - Found something broken? [Open an issue](https://github.com/e-stpierre/agentic-forge/issues)
8
- - **Suggest features** - Have an idea for a new workflow or enhancement? [Let us know](https://github.com/e-stpierre/agentic-forge/issues)
9
- - **Improve docs** - Fix typos, clarify explanations, add examples
10
- - **Write code** - Bug fixes, new skills, improvements to existing ones
11
-
12
- ## Development Setup
13
-
14
- ### Prerequisites
15
-
16
- - [Claude Code](https://claude.ai/code) installed
17
- - Git
18
- - Node.js 20+
19
- - [pnpm](https://pnpm.io/) for package management
20
-
21
- ### Local Development
22
-
23
- ```bash
24
- # Clone the repo
25
- git clone https://github.com/e-stpierre/agentic-forge.git
26
- cd agentic-forge
27
-
28
- # Install dependencies
29
- pnpm install
30
-
31
- # Build
32
- pnpm build
33
-
34
- # Run tests
35
- pnpm test
36
-
37
- # Run format and lint checks
38
- pnpm check
39
- ```
40
-
41
- ## Making Changes
42
-
43
- ### Branch Naming
44
-
45
- - `feature/description` - New features
46
- - `fix/description` - Bug fixes
47
- - `doc/description` - Documentation updates
48
- - `refactor/description` - Refactoring
49
-
50
- ### Commit Messages
51
-
52
- Write clear, concise commit messages that describe the change. For example: `Add retry logic to workflow executor` or `Fix validation error in analyze skill`.
53
-
54
- ### Code Formatting
55
-
56
- Run format, lint, and test checks locally before submitting a PR:
57
-
58
- ```bash
59
- pnpm check # Format and lint (Biome)
60
- pnpm test # Vitest tests
61
- ```
62
-
63
- ## Internal Tools
64
-
65
- - **`/normalize`** - Validate prompt files and READMEs against templates. Use `--autofix` to auto-fix issues.
66
-
67
- ## Project Structure
68
-
69
- ```text
70
- src/
71
- agents/ # Sub-agent definitions (.md)
72
- claude/.claude/ # Skills loaded via --add-dir
73
- skills/ # Bundled skills (slash commands)
74
- commands/ # CLI command implementations
75
- prompts/ # System prompt templates
76
- steps/ # Workflow step handlers
77
- workflows/ # YAML workflow definitions
78
- *.ts # Core TypeScript modules
79
- tests/ # Vitest test suite
80
- ```
81
-
82
- ### Naming Conventions
83
-
84
- - **Agents**: descriptive with domain prefix (`explorer.md`, `reviewer.md`)
85
- - **Skills**: directory name in kebab-case with `SKILL.md` inside (`analyze/SKILL.md`, `git-commit/SKILL.md`)
86
- - **Workflows**: descriptive kebab-case YAML files (`plan-build-review.yaml`)
87
-
88
- ### Prompt Templates
89
-
90
- All prompts must follow the templates in the repository. Use the `/normalize` command inside Claude Code to validate.
91
-
92
- ```bash
93
- # Validate all prompts
94
- /normalize
95
-
96
- # Validate specific files
97
- /normalize src/claude/.claude/skills/my-skill/
98
-
99
- # Auto-fix non-compliant files
100
- /normalize --autofix src/claude/.claude/skills/
101
- ```
102
-
103
- ## Pull Request Process
104
-
105
- ### Workflow
106
-
107
- 1. Fork the repository
108
- 2. Create a feature branch (`git checkout -b feature/my-feature`)
109
- 3. Make your changes
110
- 4. Run `pnpm check` to verify formatting
111
- 5. Run `pnpm test` to run the test suite
112
- 6. Run `/normalize` (inside Claude Code) to validate prompt files
113
- 7. Commit your changes with clear messages
114
- 8. Push to your fork
115
- 9. Open a pull request
116
-
117
- ### PR Checklist
118
-
119
- - [ ] CI pipeline passes (format, lint, tests)
120
- - [ ] Prompt templates validated (`/normalize`)
121
- - [ ] CHANGELOG updated if applicable
122
- - [ ] Changes tested with Claude Code
123
-
124
- ## Reporting Issues
125
-
126
- ### Bug Reports
127
-
128
- Include:
129
-
130
- - Steps to reproduce
131
- - Expected vs actual behavior
132
- - Agentic Forge version
133
- - Claude Code version
134
-
135
- ### Feature Requests
136
-
137
- Include:
138
-
139
- - Description of the feature
140
- - Use case / motivation
141
-
142
- ## Code of Conduct
143
-
144
- Be respectful and constructive. We're all here to build useful tools together.
145
-
146
- ## Questions?
147
-
148
- [Open an issue](https://github.com/e-stpierre/agentic-forge/issues) with the `question` label.
149
-
150
- ---
151
-
152
- Thank you for contributing to Agentic Forge!
package/biome.json DELETED
@@ -1,21 +0,0 @@
1
- {
2
- "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
- "organizeImports": {
4
- "enabled": true
5
- },
6
- "linter": {
7
- "enabled": true,
8
- "rules": {
9
- "recommended": true
10
- }
11
- },
12
- "formatter": {
13
- "enabled": true,
14
- "indentStyle": "tab",
15
- "lineWidth": 100
16
- },
17
- "files": {
18
- "include": ["src/**/*.ts", "tests/**/*.ts", "scripts/**/*.js", "vitest.config.ts"],
19
- "ignore": ["node_modules", "dist", "src/agentic_forge"]
20
- }
21
- }
@@ -1,21 +0,0 @@
1
- import { cpSync, existsSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
-
5
- const __dirname = dirname(fileURLToPath(import.meta.url));
6
- const root = join(__dirname, "..");
7
- const src = join(root, "src");
8
- const dist = join(root, "dist");
9
-
10
- const assets = ["agents", "claude", "prompts", "templates", "workflows"];
11
-
12
- for (const asset of assets) {
13
- const srcPath = join(src, asset);
14
- const distPath = join(dist, asset);
15
- if (existsSync(srcPath)) {
16
- cpSync(srcPath, distPath, { recursive: true });
17
- console.log(`Copied ${asset} -> dist/${asset}`);
18
- } else {
19
- console.warn(`Warning: ${srcPath} not found, skipping`);
20
- }
21
- }
@@ -1,119 +0,0 @@
1
- /** Checkpoint management for workflow sessions. */
2
-
3
- import { appendFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
4
- import path from "node:path";
5
- import yaml from "js-yaml";
6
-
7
- // --- Path helper ---
8
-
9
- export function getCheckpointPath(workflowId: string, repoRoot?: string): string {
10
- const root = repoRoot ?? process.cwd();
11
- return path.join(root, "agentic", "outputs", workflowId, "checkpoint.md");
12
- }
13
-
14
- // --- Create checkpoint ---
15
-
16
- export function createCheckpoint(
17
- workflowId: string,
18
- step: string,
19
- context: string,
20
- progress: string,
21
- notes = "",
22
- issues = "",
23
- repoRoot?: string,
24
- ): string {
25
- const checkpointPath = getCheckpointPath(workflowId, repoRoot);
26
- const dir = path.dirname(checkpointPath);
27
- mkdirSync(dir, { recursive: true });
28
-
29
- const existing = readCheckpoints(workflowId, repoRoot);
30
- const checkpointNum = existing.length + 1;
31
- const checkpointId = `chk-${String(checkpointNum).padStart(3, "0")}`;
32
-
33
- const timestamp = new Date().toISOString();
34
-
35
- const frontmatter: Record<string, unknown> = {
36
- checkpoint_id: checkpointId,
37
- step,
38
- created: timestamp,
39
- workflow_id: workflowId,
40
- status: "in_progress",
41
- };
42
-
43
- const entryLines: string[] = [
44
- "---",
45
- yaml.dump(frontmatter, { flowLevel: -1 }).trim(),
46
- "---",
47
- "",
48
- "## Context",
49
- "",
50
- context,
51
- "",
52
- "## Progress",
53
- "",
54
- progress,
55
- "",
56
- ];
57
-
58
- if (notes) {
59
- entryLines.push("## Notes for Next Session", "", notes, "");
60
- }
61
-
62
- if (issues) {
63
- entryLines.push("## Issues Discovered", "", issues, "");
64
- }
65
-
66
- entryLines.push("---\n");
67
- const entry = entryLines.join("\n");
68
-
69
- appendFileSync(checkpointPath, entry, "utf-8");
70
-
71
- return checkpointId;
72
- }
73
-
74
- // --- Read checkpoints ---
75
-
76
- export function readCheckpoints(workflowId: string, repoRoot?: string): Record<string, unknown>[] {
77
- const checkpointPath = getCheckpointPath(workflowId, repoRoot);
78
-
79
- if (!existsSync(checkpointPath)) {
80
- return [];
81
- }
82
-
83
- const content = readFileSync(checkpointPath, "utf-8");
84
- const checkpoints: Record<string, unknown>[] = [];
85
-
86
- const parts = content.split("---");
87
-
88
- let i = 1;
89
- while (i < parts.length - 1) {
90
- const frontmatterStr = parts[i].trim();
91
- const body = i + 1 < parts.length ? parts[i + 1].trim() : "";
92
-
93
- if (frontmatterStr) {
94
- try {
95
- const frontmatter = yaml.load(frontmatterStr) as Record<string, unknown> | null;
96
- if (frontmatter && "checkpoint_id" in frontmatter) {
97
- frontmatter.content = body;
98
- checkpoints.push(frontmatter);
99
- }
100
- } catch {
101
- // Invalid YAML, skip
102
- }
103
- }
104
-
105
- i += 2;
106
- }
107
-
108
- return checkpoints;
109
- }
110
-
111
- // --- Get latest checkpoint ---
112
-
113
- export function getLatestCheckpoint(
114
- workflowId: string,
115
- repoRoot?: string,
116
- ): Record<string, unknown> | null {
117
- const checkpoints = readCheckpoints(workflowId, repoRoot);
118
- return checkpoints.length > 0 ? checkpoints[checkpoints.length - 1] : null;
119
- }
package/src/cli.ts DELETED
@@ -1,182 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /** CLI entry point for agentic-forge command. */
4
-
5
- import { Command } from "commander";
6
-
7
- import {
8
- cmdCancel,
9
- cmdConfig,
10
- cmdConfigure,
11
- cmdInit,
12
- cmdInput,
13
- cmdList,
14
- cmdReleaseNotes,
15
- cmdResume,
16
- cmdRun,
17
- cmdSkillsDir,
18
- cmdStatus,
19
- cmdUpdate,
20
- cmdVersion,
21
- cmdWorkflows,
22
- getVersion,
23
- } from "./commands/index.js";
24
-
25
- const program = new Command()
26
- .name("agentic-forge")
27
- .version(getVersion())
28
- .description("Agentic workflow orchestration for Claude Code");
29
-
30
- // run command
31
- program
32
- .command("run")
33
- .argument("[workflow]", "workflow name or path to YAML file")
34
- .option("--list", "list all available workflows")
35
- .option("--var <key=value...>", "set workflow variable (can be used multiple times)")
36
- .option("--from-step <step>", "resume from a specific step")
37
- .option("--terminal-output <mode>", "terminal output granularity (base or all)")
38
- .action(async (workflow: string | undefined, opts: Record<string, unknown>) => {
39
- await cmdRun({
40
- workflow,
41
- listWorkflows: opts.list as boolean | undefined,
42
- vars: opts.var as string[] | undefined,
43
- fromStep: opts.fromStep as string | undefined,
44
- terminalOutput: opts.terminalOutput as string | undefined,
45
- });
46
- });
47
-
48
- // resume command
49
- program
50
- .command("resume")
51
- .argument("<workflow_id>", "workflow ID to resume")
52
- .option("--terminal-output <mode>", "terminal output granularity (base or all)")
53
- .action(async (workflowId: string, opts: Record<string, unknown>) => {
54
- await cmdResume({
55
- workflowId,
56
- terminalOutput: opts.terminalOutput as string | undefined,
57
- });
58
- });
59
-
60
- // status command
61
- program
62
- .command("status")
63
- .argument("<workflow_id>", "workflow ID")
64
- .action((workflowId: string) => {
65
- cmdStatus(workflowId);
66
- });
67
-
68
- // cancel command
69
- program
70
- .command("cancel")
71
- .argument("<workflow_id>", "workflow ID to cancel")
72
- .action((workflowId: string) => {
73
- cmdCancel(workflowId);
74
- });
75
-
76
- // list command
77
- program
78
- .command("list")
79
- .option("--status <status>", "filter by status (running, completed, failed, paused)")
80
- .action((opts: Record<string, unknown>) => {
81
- cmdList(opts.status as string | undefined);
82
- });
83
-
84
- // input command
85
- program
86
- .command("input")
87
- .argument("<workflow_id>", "workflow ID")
88
- .argument("<response>", "response to provide")
89
- .action((workflowId: string, response: string) => {
90
- cmdInput(workflowId, response);
91
- });
92
-
93
- // configure command
94
- program
95
- .command("configure")
96
- .description("Configure plugin settings")
97
- .action(() => {
98
- cmdConfigure();
99
- });
100
-
101
- // init command
102
- program
103
- .command("init")
104
- .description("Copy bundled workflow templates to local project")
105
- .option("--force", "overwrite existing workflow files")
106
- .option("--list", "list available bundled workflows without copying")
107
- .action((opts: Record<string, unknown>) => {
108
- cmdInit({
109
- force: opts.force as boolean | undefined,
110
- listOnly: opts.list as boolean | undefined,
111
- });
112
- });
113
-
114
- // config command with subcommands
115
- const configCmd = program.command("config").description("Get or set configuration");
116
-
117
- configCmd
118
- .command("get")
119
- .argument("<key>", "configuration key (dot notation)")
120
- .action((key: string) => {
121
- cmdConfig("get", key);
122
- });
123
-
124
- configCmd
125
- .command("set")
126
- .argument("<key>", "configuration key (dot notation)")
127
- .argument("<value>", "value to set")
128
- .action((key: string, value: string) => {
129
- cmdConfig("set", key, value);
130
- });
131
-
132
- // version command
133
- program
134
- .command("version")
135
- .description("Show version information")
136
- .action(() => {
137
- cmdVersion();
138
- });
139
-
140
- // release-notes command
141
- program
142
- .command("release-notes")
143
- .argument("[version]", "show release notes for a specific version")
144
- .option("--latest", "show only the most recent version's release notes")
145
- .action((specificVersion: string | undefined, opts: Record<string, unknown>) => {
146
- cmdReleaseNotes({
147
- specificVersion,
148
- latest: opts.latest as boolean | undefined,
149
- });
150
- });
151
-
152
- // skills-dir command
153
- program
154
- .command("skills-dir")
155
- .description("Print path to bundled skills directory")
156
- .action(() => {
157
- cmdSkillsDir();
158
- });
159
-
160
- // update command
161
- program
162
- .command("update")
163
- .description("Update agentic-forge to the latest version")
164
- .option("--check", "check for updates without installing")
165
- .action((opts: Record<string, unknown>) => {
166
- cmdUpdate({
167
- check: opts.check as boolean | undefined,
168
- });
169
- });
170
-
171
- // workflows command
172
- program
173
- .command("workflows")
174
- .description("List available workflows with descriptions")
175
- .option("-v, --verbose", "show workflow variables and full descriptions")
176
- .action((opts: Record<string, unknown>) => {
177
- cmdWorkflows({
178
- verbose: opts.verbose as boolean | undefined,
179
- });
180
- });
181
-
182
- program.parse();
@@ -1,28 +0,0 @@
1
- /** Config command handler. */
2
-
3
- import { getConfigValue, setConfigValue } from "../config.js";
4
-
5
- export function cmdConfig(configCommand: string, key: string, value?: string): void {
6
- if (configCommand === "get") {
7
- const result = getConfigValue(key);
8
- if (result === null) {
9
- process.stderr.write(`Key not found: ${key}\n`);
10
- process.exit(1);
11
- }
12
- if (typeof result === "object" && result !== null) {
13
- process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
14
- } else {
15
- process.stdout.write(`${result}\n`);
16
- }
17
- } else if (configCommand === "set") {
18
- if (value === undefined) {
19
- process.stderr.write("Usage: agentic-forge config set <key> <value>\n");
20
- process.exit(1);
21
- }
22
- setConfigValue(key, value);
23
- process.stdout.write(`Set ${key} = ${value}\n`);
24
- } else {
25
- process.stderr.write("Usage: agentic-forge config get|set <key> [value]\n");
26
- process.exit(1);
27
- }
28
- }