@jaybeeuu/agent-cortex 1.20.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.
Files changed (154) hide show
  1. package/.beads/README.md +81 -0
  2. package/.beads/config.yaml +1 -0
  3. package/.beads/issues.jsonl +236 -0
  4. package/.beads/metadata.json +7 -0
  5. package/.claude-plugin/marketplace.json +16 -0
  6. package/.github/workflows/ci.test.ts +217 -0
  7. package/.github/workflows/ci.yml +35 -0
  8. package/.github/workflows/publish.yml +36 -0
  9. package/.junie/guidelines.md +87 -0
  10. package/.junie/mcp/mcp.json +10 -0
  11. package/AGENTS.md +102 -0
  12. package/CHANGELOG.md +705 -0
  13. package/README.md +209 -0
  14. package/agents/README.md +235 -0
  15. package/agents/plan.agent.md +56 -0
  16. package/agents/ralph-plan.agent.md +119 -0
  17. package/agents/ralph.agent.md +305 -0
  18. package/agents/strategy.agent.md +109 -0
  19. package/agents-native/ralph.md +193 -0
  20. package/bin/agent-cortex.mjs +27 -0
  21. package/claude/.claude-plugin/plugin.json +11 -0
  22. package/claude/.mcp.json +18 -0
  23. package/claude/agents/plan.md +56 -0
  24. package/claude/agents/ralph-plan.md +119 -0
  25. package/claude/agents/ralph.md +193 -0
  26. package/claude/agents/strategy.md +109 -0
  27. package/claude/hooks.json +23 -0
  28. package/claude/scripts/statusline-command.sh +124 -0
  29. package/docs/ideas/auto-model-selection.md +75 -0
  30. package/docs/ideas/improve-pi-system-prompt.md +34 -0
  31. package/docs/ideas/model-selector.md +40 -0
  32. package/docs/ideas/pi-task-memory.md +34 -0
  33. package/docs/ideas/qa-extension.md +43 -0
  34. package/docs/inspirations.md +33 -0
  35. package/docs/research/gas-city-research.md +256 -0
  36. package/docs/research/skill-design-research.md +286 -0
  37. package/docs/research/skill-improvements-analysis.md +117 -0
  38. package/docs/research/skill-patterns-research.md +24 -0
  39. package/docs/skills/skill-anatomy.md +149 -0
  40. package/docs/user-preferences.md +17 -0
  41. package/extensions/agent-modes/index.ts +507 -0
  42. package/extensions/auto-name.ts +107 -0
  43. package/extensions/context-loader.md +35 -0
  44. package/extensions/context-loader.ts +65 -0
  45. package/extensions/lib/tiny-model.ts +212 -0
  46. package/extensions/notify/index.ts +293 -0
  47. package/extensions/session-start.ts +44 -0
  48. package/extensions/skill-stats/README.md +74 -0
  49. package/extensions/skill-stats/context-loader.test.ts +107 -0
  50. package/extensions/skill-stats/discover.ts +119 -0
  51. package/extensions/skill-stats/format.ts +13 -0
  52. package/extensions/skill-stats/index.test.ts +452 -0
  53. package/extensions/skill-stats/index.ts +222 -0
  54. package/extensions/skill-stats/package.json +19 -0
  55. package/extensions/skill-stats/pnpm-lock.yaml +329 -0
  56. package/extensions/skill-stats/record.ts +48 -0
  57. package/extensions/skill-stats/store.ts +104 -0
  58. package/extensions/skill-stats/tsconfig.json +12 -0
  59. package/extensions/subagent/README.md +175 -0
  60. package/extensions/subagent/agents/planner.md +37 -0
  61. package/extensions/subagent/agents/reviewer.md +35 -0
  62. package/extensions/subagent/agents/scout.md +50 -0
  63. package/extensions/subagent/agents/worker.md +24 -0
  64. package/extensions/subagent/agents.ts +126 -0
  65. package/extensions/subagent/index.ts +1138 -0
  66. package/extensions/subagent/prompts/implement-and-review.md +10 -0
  67. package/extensions/subagent/prompts/implement.md +10 -0
  68. package/extensions/subagent/prompts/scout-and-plan.md +9 -0
  69. package/hooks.json +10 -0
  70. package/lib/cli.mjs +37 -0
  71. package/package.json +39 -0
  72. package/pi/keybindings.json +3 -0
  73. package/pi/settings.json +29 -0
  74. package/plugin.json +35 -0
  75. package/pnpm-workspace.yaml +7 -0
  76. package/scripts/build-claude-agents.mjs +179 -0
  77. package/scripts/install-instructions.sh +82 -0
  78. package/skills/engineering/design-an-interface/SKILL.md +94 -0
  79. package/skills/engineering/grill-with-docs/SKILL.md +88 -0
  80. package/skills/engineering/improve-codebase-architecture/REFERENCE.md +78 -0
  81. package/skills/engineering/improve-codebase-architecture/SKILL.md +81 -0
  82. package/skills/engineering/tdd/SKILL.md +150 -0
  83. package/skills/engineering/tdd/deep-modules.md +33 -0
  84. package/skills/engineering/tdd/interface-design.md +31 -0
  85. package/skills/engineering/tdd/mocking.md +59 -0
  86. package/skills/engineering/tdd/refactoring.md +10 -0
  87. package/skills/engineering/tdd/tests.md +61 -0
  88. package/skills/engineering/technical-direction/SKILL.md +86 -0
  89. package/skills/planning/classify-bead/SKILL.md +67 -0
  90. package/skills/planning/create-task/SKILL.md +96 -0
  91. package/skills/planning/create-task/pipeline.json +33 -0
  92. package/skills/planning/create-task/scripts/create-chores.ts +112 -0
  93. package/skills/planning/create-task/scripts/package.json +14 -0
  94. package/skills/planning/create-task/scripts/pnpm-lock.yaml +342 -0
  95. package/skills/planning/create-task/scripts/tsconfig.json +12 -0
  96. package/skills/planning/create-task/templates/code.md +40 -0
  97. package/skills/planning/create-task/templates/document.md +40 -0
  98. package/skills/planning/create-task/templates/fix.md +27 -0
  99. package/skills/planning/create-task/templates/review.md +36 -0
  100. package/skills/planning/create-task/templates/verify.md +43 -0
  101. package/skills/planning/prd-to-tasks/SKILL.md +227 -0
  102. package/skills/planning/record-idea/SKILL.md +62 -0
  103. package/skills/planning/record-idea/scripts/new-idea.sh +89 -0
  104. package/skills/planning/request-refactor-plan/SKILL.md +73 -0
  105. package/skills/planning/write-a-prd/SKILL.md +74 -0
  106. package/skills/planning/write-a-ticket/SKILL.md +97 -0
  107. package/skills/productivity/bd-tool/SKILL.md +90 -0
  108. package/skills/productivity/grill-me/SKILL.md +10 -0
  109. package/skills/productivity/handoff/SKILL.md +15 -0
  110. package/skills/productivity/init-beads/SKILL.md +93 -0
  111. package/skills/productivity/teach/GLOSSARY-FORMAT.md +35 -0
  112. package/skills/productivity/teach/LEARNING-RECORD-FORMAT.md +46 -0
  113. package/skills/productivity/teach/MISSION-FORMAT.md +31 -0
  114. package/skills/productivity/teach/RESOURCES-FORMAT.md +32 -0
  115. package/skills/productivity/teach/SKILL.md +109 -0
  116. package/skills/productivity/validate-agent-dir/scripts/package.json +15 -0
  117. package/skills/productivity/validate-agent-dir/scripts/pnpm-lock.yaml +329 -0
  118. package/skills/productivity/validate-agent-dir/scripts/pnpm-workspace.yaml +2 -0
  119. package/skills/productivity/validate-agent-dir/scripts/tsconfig.json +19 -0
  120. package/skills/productivity/validate-agent-dir/scripts/validate-agent-dir.test.ts +317 -0
  121. package/skills/productivity/validate-agent-dir/scripts/validate-agent-dir.ts +127 -0
  122. package/skills/productivity/write-a-skill/SKILL.md +74 -0
  123. package/skills/review/maintain-agent-docs/REFERENCE.md +246 -0
  124. package/skills/review/maintain-agent-docs/SKILL.md +83 -0
  125. package/skills/review/refactor-skill/EXAMPLES.md +20 -0
  126. package/skills/review/refactor-skill/SKILL.md +148 -0
  127. package/skills/review/review-security/SKILL.md +107 -0
  128. package/skills/review/review-security/scripts/install-gitleaks.sh +43 -0
  129. package/skills/style/style-code/REFERENCE.md +38 -0
  130. package/skills/style/style-code/SKILL.md +113 -0
  131. package/skills/style/style-comms/SKILL.md +93 -0
  132. package/skills/style/style-documentation/SKILL.md +112 -0
  133. package/skills/style/style-tests/SKILL.md +97 -0
  134. package/skills/workflow/git-workflow/SKILL.md +85 -0
  135. package/skills/workflow/hitl-collab/SKILL.md +29 -0
  136. package/skills/workflow/plan/SKILL.md +272 -0
  137. package/skills/workflow/ralph/REFERENCE.md +202 -0
  138. package/skills/workflow/ralph/SKILL.md +105 -0
  139. package/skills/workflow/run-pipeline-stage/SKILL.md +151 -0
  140. package/skills/workflow/run-pipeline-stage/playbooks/code.md +17 -0
  141. package/skills/workflow/run-pipeline-stage/playbooks/document.md +18 -0
  142. package/skills/workflow/run-pipeline-stage/playbooks/fix.md +17 -0
  143. package/skills/workflow/run-pipeline-stage/playbooks/review.md +19 -0
  144. package/skills/workflow/run-pipeline-stage/playbooks/verify.md +14 -0
  145. package/skills/workflow/run-pipeline-stage/prompts/stage-runner.md +20 -0
  146. package/skills/workflow/run-pipeline-stage/scripts/generate-progress.test.ts +783 -0
  147. package/skills/workflow/run-pipeline-stage/scripts/generate-progress.ts +586 -0
  148. package/skills/workflow/run-pipeline-stage/scripts/package.json +15 -0
  149. package/skills/workflow/run-pipeline-stage/scripts/pnpm-lock.yaml +342 -0
  150. package/skills/workflow/run-pipeline-stage/scripts/pnpm-workspace.yaml +2 -0
  151. package/skills/workflow/run-pipeline-stage/scripts/tsconfig.json +12 -0
  152. package/skills/workflow/using-agent-skills/SKILL.md +109 -0
  153. package/skills/workflow/using-agent-skills/scripts/validate-skill-structure.test.ts +73 -0
  154. package/test/cli.test.mjs +149 -0
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: create-task
3
+ description: Create a bead, classify it, and if AFK expand it into pipeline stage child beads plus a HITL PR gate task. Use when creating a new task that should be tracked and moved through implementation and human review gates.
4
+ ---
5
+
6
+ # Create Task
7
+
8
+ Create a bead, classify it via `classify-bead`, and — if AFK — expand it into child chore beads for each pipeline stage plus a child HITL PR gate task bead.
9
+
10
+ ## Inputs
11
+
12
+ | Parameter | Required | Description |
13
+ |-------------|----------|--------------------------------------|
14
+ | title | yes | Task title |
15
+ | description | yes | Task description |
16
+ | priority | no | 0–3 (default 2) |
17
+ | parent | no | Parent bead ID for `parent-child` dep |
18
+
19
+ ## Procedure
20
+
21
+ ### 1. Create the bead
22
+
23
+ ```bash
24
+ bd create "<title>" --description "<description>" --priority <priority>
25
+ ```
26
+
27
+ If a `parent` was provided, add a `parent-child` dependency:
28
+
29
+ ```bash
30
+ bd dep add <new-id> <parent> --type parent-child
31
+ ```
32
+
33
+ Record the new bead ID.
34
+
35
+ ### 2. Classify the bead
36
+
37
+ Invoke the `classify-bead` skill on the new bead (as a subagent per that skill's invocation instructions). It returns `AFK` or `HITL`.
38
+
39
+ ### 3. Branch on classification
40
+
41
+ **If HITL**: stop. Report the bead ID and classification to the caller. No further action.
42
+
43
+ **If AFK**: continue to step 4.
44
+
45
+ ### 4. Expand into pipeline stage chores
46
+
47
+ Run the `create-chores` script, which reads `pipeline.json` and deterministically creates all
48
+ stage chores in one shot. They are plain (non-ephemeral) chores — `bd ready` must surface
49
+ them without `--include-ephemeral` for ralph to discover them:
50
+
51
+ ```bash
52
+ # Run from the TARGET project's directory (cwd must be inside the target's
53
+ # .beads tree) — bd resolves its beads DB from cwd, not from the skill's
54
+ # location. Do NOT use `pnpm --prefix <scripts> exec`, which changes cwd to
55
+ # the scripts dir and makes bd pick the skill repo's own .beads instead of
56
+ # the target project's.
57
+ <skill-scripts>/node_modules/.bin/tsx \
58
+ <skill-scripts>/create-chores.ts \
59
+ --parent <parent-id> \
60
+ --priority <priority>
61
+ ```
62
+
63
+ Where `<skill-scripts>` is the absolute path to this skill's own `scripts/` directory —
64
+ resolve it from wherever this skill was actually loaded from (it varies by harness and
65
+ install location; e.g. a Claude Code plugin cache dir vs. a Copilot
66
+ `~/.copilot/installed-plugins/...` install vs. a local dev checkout). Do not hardcode
67
+ one harness's path.
68
+
69
+ The script outputs a JSON object mapping stage IDs to chore bead IDs, plus a HITL PR gate task bead ID, e.g.:
70
+
71
+ ```json
72
+ {
73
+ "code": "abc123",
74
+ "verify": "def456",
75
+ "review": "ghi789",
76
+ "document": "jkl012",
77
+ "featurePrReview": "bd-mno345"
78
+ }
79
+ ```
80
+
81
+ Each stage chore is created with:
82
+ - **type**: `chore`
83
+ - **Title pattern**: `[<parent-id>] <stage title>` (e.g. `[abc-123] Code`)
84
+ - **Labels**: `stage:<id>` (e.g. `stage:code`, `stage:verify`)
85
+ - **Dependencies**: `parent-child` to parent bead; `blocks` between stages per `dependsOn`
86
+
87
+ The PR gate bead is created with:
88
+ - **type**: `task`
89
+ - **Title**: `[<parent-id>] PR Review and Merge`
90
+ - **Labels**: `implementation-type:hitl`, `lifecycle:feature-pr`
91
+ - **Dependencies**: `parent-child` to parent bead; `blocks` on the final document stage chore
92
+ - **Purpose**: human review of the agent PR (agent-branch → feature branch)
93
+
94
+ ### 5. Report
95
+
96
+ Return the parent bead ID, classification (`AFK`), and the list of created child bead IDs (including `featurePrReview`).
@@ -0,0 +1,33 @@
1
+ {
2
+ "maxFixRounds": 4,
3
+ "stages": [
4
+ {
5
+ "id": "code",
6
+ "title": "Code",
7
+ "description": "Implement the task using a test-driven approach.",
8
+ "template": "templates/code.md",
9
+ "dependsOn": []
10
+ },
11
+ {
12
+ "id": "verify",
13
+ "title": "Verify",
14
+ "description": "Run the project's test and lint commands and report the outcome.",
15
+ "template": "templates/verify.md",
16
+ "dependsOn": ["code"]
17
+ },
18
+ {
19
+ "id": "review",
20
+ "title": "Review",
21
+ "description": "Review the implementation for security, correctness, and alignment with task requirements.",
22
+ "template": "templates/review.md",
23
+ "dependsOn": ["verify"]
24
+ },
25
+ {
26
+ "id": "document",
27
+ "title": "Document",
28
+ "description": "Review changes and update documentation if key decisions, behaviour changes, or constraints were introduced.",
29
+ "template": "templates/document.md",
30
+ "dependsOn": ["review"]
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,112 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { readFileSync } from 'node:fs';
3
+ import { resolve, dirname } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+
6
+ // ─── Types ────────────────────────────────────────────────────────────────────
7
+
8
+ interface Stage {
9
+ id: string;
10
+ title: string;
11
+ description: string;
12
+ template: string;
13
+ dependsOn: string[];
14
+ }
15
+
16
+ interface Pipeline {
17
+ maxFixRounds: number;
18
+ stages: Stage[];
19
+ }
20
+
21
+ // ─── Args ─────────────────────────────────────────────────────────────────────
22
+
23
+ function parseArgs(args: string[]): { parentId: string; priority: string } {
24
+ let parentId: string | undefined;
25
+ let priority = '2';
26
+
27
+ for (let i = 0; i < args.length; i++) {
28
+ if (args[i] === '--parent' && args[i + 1]) { parentId = args[++i]; }
29
+ else if (args[i] === '--priority' && args[i + 1]) { priority = args[++i]; }
30
+ }
31
+
32
+ if (!parentId) {
33
+ console.error('Usage: create-chores.ts --parent <bead-id> [--priority <0-4>]');
34
+ process.exit(1);
35
+ }
36
+
37
+ return { parentId, priority };
38
+ }
39
+
40
+ // ─── Exec ─────────────────────────────────────────────────────────────────────
41
+
42
+ function run(args: string[]): string {
43
+ return execSync(args.join(' '), { encoding: 'utf-8' }).trim();
44
+ }
45
+
46
+ // ─── Main ─────────────────────────────────────────────────────────────────────
47
+
48
+ const __filename = fileURLToPath(import.meta.url);
49
+ const __dirname = dirname(__filename);
50
+
51
+ const { parentId, priority } = parseArgs(process.argv.slice(2));
52
+
53
+ const pipelinePath = resolve(__dirname, '..', 'pipeline.json');
54
+ const pipeline: Pipeline = JSON.parse(readFileSync(pipelinePath, 'utf-8'));
55
+
56
+ const stageToBeadId = new Map<string, string>();
57
+
58
+ for (const stage of pipeline.stages) {
59
+ const title = `[${parentId}] ${stage.title}`;
60
+
61
+ const beadId = run([
62
+ 'bd', 'create', JSON.stringify(title),
63
+ '--type', 'chore',
64
+ '--description', JSON.stringify(stage.description),
65
+ '--priority', priority,
66
+ '--labels', `stage:${stage.id}`,
67
+ '--parent', parentId,
68
+ '--silent',
69
+ ]);
70
+
71
+ stageToBeadId.set(stage.id, beadId);
72
+
73
+ for (const depStageId of stage.dependsOn) {
74
+ const depBeadId = stageToBeadId.get(depStageId);
75
+ if (!depBeadId) {
76
+ console.error(`Stage '${stage.id}' depends on '${depStageId}', but it has not been created yet. Check dependsOn ordering in pipeline.json.`);
77
+ process.exit(1);
78
+ }
79
+ run(['bd', 'dep', 'add', beadId, depBeadId, '--type', 'blocks']);
80
+ }
81
+ }
82
+
83
+ const finalStageId = pipeline.stages.at(-1)?.id;
84
+ if (!finalStageId) {
85
+ console.error('No pipeline stages found in pipeline.json.');
86
+ process.exit(1);
87
+ }
88
+
89
+ const documentStageBeadId = stageToBeadId.get('document') ?? stageToBeadId.get(finalStageId);
90
+ if (!documentStageBeadId) {
91
+ console.error('Could not resolve the final stage bead needed for PR gate dependency.');
92
+ process.exit(1);
93
+ }
94
+
95
+ const prGateBeadId = run([
96
+ 'bd', 'create', JSON.stringify(`[${parentId}] PR Review and Merge`),
97
+ '--type', 'task',
98
+ '--description', JSON.stringify(
99
+ 'Human review gate: review and merge the agent PR into the feature branch before closing this feature.',
100
+ ),
101
+ '--priority', priority,
102
+ '--labels', 'implementation-type:hitl,lifecycle:feature-pr',
103
+ '--parent', parentId,
104
+ '--silent',
105
+ ]);
106
+ run(['bd', 'dep', 'add', prGateBeadId, documentStageBeadId, '--type', 'blocks']);
107
+
108
+ const result: Record<string, string> = {
109
+ ...Object.fromEntries(stageToBeadId),
110
+ featurePrReview: prGateBeadId,
111
+ };
112
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "@agent-cortex/create-task-scripts",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "typecheck": "tsc --noEmit"
8
+ },
9
+ "devDependencies": {
10
+ "@types/node": "^22.0.0",
11
+ "tsx": "^4.0.0",
12
+ "typescript": "^5.0.0"
13
+ }
14
+ }
@@ -0,0 +1,342 @@
1
+ lockfileVersion: '9.0'
2
+
3
+ settings:
4
+ autoInstallPeers: true
5
+ excludeLinksFromLockfile: false
6
+
7
+ importers:
8
+
9
+ .:
10
+ devDependencies:
11
+ '@types/node':
12
+ specifier: ^22.0.0
13
+ version: 22.19.18
14
+ tsx:
15
+ specifier: ^4.0.0
16
+ version: 4.21.0
17
+ typescript:
18
+ specifier: ^5.0.0
19
+ version: 5.9.3
20
+
21
+ packages:
22
+
23
+ '@esbuild/aix-ppc64@0.27.7':
24
+ resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
25
+ engines: {node: '>=18'}
26
+ cpu: [ppc64]
27
+ os: [aix]
28
+
29
+ '@esbuild/android-arm64@0.27.7':
30
+ resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
31
+ engines: {node: '>=18'}
32
+ cpu: [arm64]
33
+ os: [android]
34
+
35
+ '@esbuild/android-arm@0.27.7':
36
+ resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
37
+ engines: {node: '>=18'}
38
+ cpu: [arm]
39
+ os: [android]
40
+
41
+ '@esbuild/android-x64@0.27.7':
42
+ resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
43
+ engines: {node: '>=18'}
44
+ cpu: [x64]
45
+ os: [android]
46
+
47
+ '@esbuild/darwin-arm64@0.27.7':
48
+ resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
49
+ engines: {node: '>=18'}
50
+ cpu: [arm64]
51
+ os: [darwin]
52
+
53
+ '@esbuild/darwin-x64@0.27.7':
54
+ resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
55
+ engines: {node: '>=18'}
56
+ cpu: [x64]
57
+ os: [darwin]
58
+
59
+ '@esbuild/freebsd-arm64@0.27.7':
60
+ resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
61
+ engines: {node: '>=18'}
62
+ cpu: [arm64]
63
+ os: [freebsd]
64
+
65
+ '@esbuild/freebsd-x64@0.27.7':
66
+ resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
67
+ engines: {node: '>=18'}
68
+ cpu: [x64]
69
+ os: [freebsd]
70
+
71
+ '@esbuild/linux-arm64@0.27.7':
72
+ resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
73
+ engines: {node: '>=18'}
74
+ cpu: [arm64]
75
+ os: [linux]
76
+
77
+ '@esbuild/linux-arm@0.27.7':
78
+ resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
79
+ engines: {node: '>=18'}
80
+ cpu: [arm]
81
+ os: [linux]
82
+
83
+ '@esbuild/linux-ia32@0.27.7':
84
+ resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
85
+ engines: {node: '>=18'}
86
+ cpu: [ia32]
87
+ os: [linux]
88
+
89
+ '@esbuild/linux-loong64@0.27.7':
90
+ resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
91
+ engines: {node: '>=18'}
92
+ cpu: [loong64]
93
+ os: [linux]
94
+
95
+ '@esbuild/linux-mips64el@0.27.7':
96
+ resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
97
+ engines: {node: '>=18'}
98
+ cpu: [mips64el]
99
+ os: [linux]
100
+
101
+ '@esbuild/linux-ppc64@0.27.7':
102
+ resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
103
+ engines: {node: '>=18'}
104
+ cpu: [ppc64]
105
+ os: [linux]
106
+
107
+ '@esbuild/linux-riscv64@0.27.7':
108
+ resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
109
+ engines: {node: '>=18'}
110
+ cpu: [riscv64]
111
+ os: [linux]
112
+
113
+ '@esbuild/linux-s390x@0.27.7':
114
+ resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
115
+ engines: {node: '>=18'}
116
+ cpu: [s390x]
117
+ os: [linux]
118
+
119
+ '@esbuild/linux-x64@0.27.7':
120
+ resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
121
+ engines: {node: '>=18'}
122
+ cpu: [x64]
123
+ os: [linux]
124
+
125
+ '@esbuild/netbsd-arm64@0.27.7':
126
+ resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
127
+ engines: {node: '>=18'}
128
+ cpu: [arm64]
129
+ os: [netbsd]
130
+
131
+ '@esbuild/netbsd-x64@0.27.7':
132
+ resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
133
+ engines: {node: '>=18'}
134
+ cpu: [x64]
135
+ os: [netbsd]
136
+
137
+ '@esbuild/openbsd-arm64@0.27.7':
138
+ resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
139
+ engines: {node: '>=18'}
140
+ cpu: [arm64]
141
+ os: [openbsd]
142
+
143
+ '@esbuild/openbsd-x64@0.27.7':
144
+ resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
145
+ engines: {node: '>=18'}
146
+ cpu: [x64]
147
+ os: [openbsd]
148
+
149
+ '@esbuild/openharmony-arm64@0.27.7':
150
+ resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
151
+ engines: {node: '>=18'}
152
+ cpu: [arm64]
153
+ os: [openharmony]
154
+
155
+ '@esbuild/sunos-x64@0.27.7':
156
+ resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
157
+ engines: {node: '>=18'}
158
+ cpu: [x64]
159
+ os: [sunos]
160
+
161
+ '@esbuild/win32-arm64@0.27.7':
162
+ resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
163
+ engines: {node: '>=18'}
164
+ cpu: [arm64]
165
+ os: [win32]
166
+
167
+ '@esbuild/win32-ia32@0.27.7':
168
+ resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
169
+ engines: {node: '>=18'}
170
+ cpu: [ia32]
171
+ os: [win32]
172
+
173
+ '@esbuild/win32-x64@0.27.7':
174
+ resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
175
+ engines: {node: '>=18'}
176
+ cpu: [x64]
177
+ os: [win32]
178
+
179
+ '@types/node@22.19.18':
180
+ resolution: {integrity: sha512-9v00a+dn2yWVsYDEunWC4g/TcRKVq3r8N5FuZp7u0SGrPvdN9c2yXI9bBuf5Fl0hNCb+QTIePTn5pJs2pwBOQQ==}
181
+
182
+ esbuild@0.27.7:
183
+ resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
184
+ engines: {node: '>=18'}
185
+ hasBin: true
186
+
187
+ fsevents@2.3.3:
188
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
189
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
190
+ os: [darwin]
191
+
192
+ get-tsconfig@4.14.0:
193
+ resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==}
194
+
195
+ resolve-pkg-maps@1.0.0:
196
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
197
+
198
+ tsx@4.21.0:
199
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
200
+ engines: {node: '>=18.0.0'}
201
+ hasBin: true
202
+
203
+ typescript@5.9.3:
204
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
205
+ engines: {node: '>=14.17'}
206
+ hasBin: true
207
+
208
+ undici-types@6.21.0:
209
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
210
+
211
+ snapshots:
212
+
213
+ '@esbuild/aix-ppc64@0.27.7':
214
+ optional: true
215
+
216
+ '@esbuild/android-arm64@0.27.7':
217
+ optional: true
218
+
219
+ '@esbuild/android-arm@0.27.7':
220
+ optional: true
221
+
222
+ '@esbuild/android-x64@0.27.7':
223
+ optional: true
224
+
225
+ '@esbuild/darwin-arm64@0.27.7':
226
+ optional: true
227
+
228
+ '@esbuild/darwin-x64@0.27.7':
229
+ optional: true
230
+
231
+ '@esbuild/freebsd-arm64@0.27.7':
232
+ optional: true
233
+
234
+ '@esbuild/freebsd-x64@0.27.7':
235
+ optional: true
236
+
237
+ '@esbuild/linux-arm64@0.27.7':
238
+ optional: true
239
+
240
+ '@esbuild/linux-arm@0.27.7':
241
+ optional: true
242
+
243
+ '@esbuild/linux-ia32@0.27.7':
244
+ optional: true
245
+
246
+ '@esbuild/linux-loong64@0.27.7':
247
+ optional: true
248
+
249
+ '@esbuild/linux-mips64el@0.27.7':
250
+ optional: true
251
+
252
+ '@esbuild/linux-ppc64@0.27.7':
253
+ optional: true
254
+
255
+ '@esbuild/linux-riscv64@0.27.7':
256
+ optional: true
257
+
258
+ '@esbuild/linux-s390x@0.27.7':
259
+ optional: true
260
+
261
+ '@esbuild/linux-x64@0.27.7':
262
+ optional: true
263
+
264
+ '@esbuild/netbsd-arm64@0.27.7':
265
+ optional: true
266
+
267
+ '@esbuild/netbsd-x64@0.27.7':
268
+ optional: true
269
+
270
+ '@esbuild/openbsd-arm64@0.27.7':
271
+ optional: true
272
+
273
+ '@esbuild/openbsd-x64@0.27.7':
274
+ optional: true
275
+
276
+ '@esbuild/openharmony-arm64@0.27.7':
277
+ optional: true
278
+
279
+ '@esbuild/sunos-x64@0.27.7':
280
+ optional: true
281
+
282
+ '@esbuild/win32-arm64@0.27.7':
283
+ optional: true
284
+
285
+ '@esbuild/win32-ia32@0.27.7':
286
+ optional: true
287
+
288
+ '@esbuild/win32-x64@0.27.7':
289
+ optional: true
290
+
291
+ '@types/node@22.19.18':
292
+ dependencies:
293
+ undici-types: 6.21.0
294
+
295
+ esbuild@0.27.7:
296
+ optionalDependencies:
297
+ '@esbuild/aix-ppc64': 0.27.7
298
+ '@esbuild/android-arm': 0.27.7
299
+ '@esbuild/android-arm64': 0.27.7
300
+ '@esbuild/android-x64': 0.27.7
301
+ '@esbuild/darwin-arm64': 0.27.7
302
+ '@esbuild/darwin-x64': 0.27.7
303
+ '@esbuild/freebsd-arm64': 0.27.7
304
+ '@esbuild/freebsd-x64': 0.27.7
305
+ '@esbuild/linux-arm': 0.27.7
306
+ '@esbuild/linux-arm64': 0.27.7
307
+ '@esbuild/linux-ia32': 0.27.7
308
+ '@esbuild/linux-loong64': 0.27.7
309
+ '@esbuild/linux-mips64el': 0.27.7
310
+ '@esbuild/linux-ppc64': 0.27.7
311
+ '@esbuild/linux-riscv64': 0.27.7
312
+ '@esbuild/linux-s390x': 0.27.7
313
+ '@esbuild/linux-x64': 0.27.7
314
+ '@esbuild/netbsd-arm64': 0.27.7
315
+ '@esbuild/netbsd-x64': 0.27.7
316
+ '@esbuild/openbsd-arm64': 0.27.7
317
+ '@esbuild/openbsd-x64': 0.27.7
318
+ '@esbuild/openharmony-arm64': 0.27.7
319
+ '@esbuild/sunos-x64': 0.27.7
320
+ '@esbuild/win32-arm64': 0.27.7
321
+ '@esbuild/win32-ia32': 0.27.7
322
+ '@esbuild/win32-x64': 0.27.7
323
+
324
+ fsevents@2.3.3:
325
+ optional: true
326
+
327
+ get-tsconfig@4.14.0:
328
+ dependencies:
329
+ resolve-pkg-maps: 1.0.0
330
+
331
+ resolve-pkg-maps@1.0.0: {}
332
+
333
+ tsx@4.21.0:
334
+ dependencies:
335
+ esbuild: 0.27.7
336
+ get-tsconfig: 4.14.0
337
+ optionalDependencies:
338
+ fsevents: 2.3.3
339
+
340
+ typescript@5.9.3: {}
341
+
342
+ undici-types@6.21.0: {}
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "Node16",
5
+ "moduleResolution": "Node16",
6
+ "strict": true,
7
+ "noEmit": true,
8
+ "allowImportingTsExtensions": true,
9
+ "skipLibCheck": true
10
+ },
11
+ "include": ["*.ts"]
12
+ }
@@ -0,0 +1,40 @@
1
+ ## Project context
2
+ <bd prime output — verbatim>
3
+
4
+ ## Task
5
+ <bd show <id> output — verbatim>
6
+
7
+ ## Dependency context
8
+ <summary of what prior completed beads delivered, if any>
9
+
10
+ ## Relevant files
11
+ <list source files you read during context gathering>
12
+
13
+ ## Progress log
14
+ Write progress to: `.agent-cortex/ralph/ralph-<bead-id>.log`
15
+ Log stage start, test results, build errors, and stage complete (see Progress Logging in run-pipeline-stage skill).
16
+
17
+ ## Instructions
18
+ Invoke the `style-code` skill before making any code changes.
19
+
20
+ Implement the task described above using a test-driven approach:
21
+
22
+ 1. **Plan**: identify the discrete behaviors this task requires. List them before writing any code.
23
+ 2. **Vertical slices only** — do not write all tests first. Work one behavior at a time:
24
+ - Write one failing test (RED)
25
+ - Write the minimal code to make it pass (GREEN)
26
+ - Refactor if needed, keeping tests green
27
+ - Repeat for the next behavior
28
+ 3. **Tests must verify behavior through public interfaces** — not implementation details. A test should survive an internal refactor unchanged.
29
+ 4. **Do not add speculative code** — only what is needed to pass the current test.
30
+ 5. **Use context7** when working with any third-party library — fetch live docs to ensure you use the correct, up-to-date API for the version in this project.
31
+
32
+ Make only the changes required to complete this task — do not refactor unrelated code.
33
+
34
+ End your response with a ---REPORT--- block:
35
+ ---REPORT---
36
+ BEAD_ID: <id>
37
+ STAGE_COMPLETED: coding
38
+ SUMMARY: <2–3 sentence summary of what was done>
39
+ FILES_CHANGED: <comma-separated list, or "none">
40
+ ---
@@ -0,0 +1,40 @@
1
+ ## Project context
2
+ <bd prime output — verbatim>
3
+
4
+ ## Task completed
5
+ <bead description — verbatim>
6
+
7
+ ## What was implemented
8
+ <SUMMARY from the final coder/fixer REPORT>
9
+
10
+ ## Files changed
11
+ <FILES_CHANGED from the final coder/fixer REPORT>
12
+
13
+ ## Progress log
14
+ Write progress to: `.agent-cortex/ralph/ralph-<bead-id>.log`
15
+ Log stage start and stage complete (see Progress Logging in run-pipeline-stage skill).
16
+
17
+ ## Instructions
18
+ Invoke the `style-documentation` skill before making any documentation changes.
19
+
20
+ Review the changes made and compare them against the existing documentation in the repository.
21
+
22
+ 1. Locate the project's `docs/` directory (or equivalent shared documentation space).
23
+ 2. Read any existing docs relevant to the changes made.
24
+ 3. Identify only the following worth documenting:
25
+ - A key decision was made (why this approach over another)
26
+ - Behaviour changed at a macro level (what the system now does that it didn't before)
27
+ - A constraint or trade-off exists that a future engineer needs to know
28
+ 4. If any of the above apply: update the most relevant existing doc. Only create a new file
29
+ (`docs/decisions/<topic>.md`) if no suitable home exists.
30
+ 5. If none of the above apply: do nothing. Leaving docs unchanged is the correct outcome
31
+ when no decisions or macro behaviour changed.
32
+ 6. Do not modify source code — documentation only.
33
+
34
+ End your response with a ---REPORT--- block:
35
+ ---REPORT---
36
+ BEAD_ID: <id>
37
+ STAGE_COMPLETED: documenting
38
+ SUMMARY: <2–3 sentence summary of what was documented, or "No documentation changes required">
39
+ FILES_CHANGED: <comma-separated list of docs touched, or "none">
40
+ ---