aiblueprint-cli 1.4.59 → 1.4.60

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 (179) hide show
  1. package/README.md +16 -36
  2. package/agents-config/agents/action.md +1 -1
  3. package/agents-config/agents/explore-codebase.md +53 -53
  4. package/agents-config/agents/explore-docs.md +50 -69
  5. package/agents-config/agents/websearch.md +36 -40
  6. package/agents-config/claude-config/scripts/.claude/skills/fix-on-my-computer/SKILL.md +81 -0
  7. package/agents-config/claude-config/scripts/CLAUDE.md +10 -4
  8. package/agents-config/claude-config/scripts/bun.lockb +0 -0
  9. package/agents-config/claude-config/scripts/package.json +22 -30
  10. package/agents-config/claude-config/scripts/statusline/CLAUDE.md +37 -155
  11. package/agents-config/claude-config/scripts/statusline/README.md +18 -94
  12. package/agents-config/claude-config/scripts/statusline/defaults.json +13 -10
  13. package/agents-config/claude-config/scripts/statusline/fixtures/mock-transcript.jsonl +4 -4
  14. package/agents-config/claude-config/scripts/statusline/fixtures/test-input.json +4 -4
  15. package/agents-config/claude-config/scripts/statusline/src/commands/interactive-config.ts +403 -0
  16. package/agents-config/claude-config/scripts/statusline/src/index.ts +33 -82
  17. package/agents-config/claude-config/scripts/statusline/src/lib/config-types.ts +7 -1
  18. package/agents-config/claude-config/scripts/statusline/src/lib/formatters.ts +40 -0
  19. package/agents-config/claude-config/scripts/statusline/src/lib/presets.ts +13 -13
  20. package/agents-config/claude-config/scripts/statusline/src/lib/render-pure.ts +24 -5
  21. package/agents-config/claude-config/scripts/statusline/statusline.config.free.json +79 -0
  22. package/agents-config/claude-config/scripts/statusline/statusline.config.json +77 -77
  23. package/agents-config/commands/prompts/create-vitejs-app.md +272 -0
  24. package/agents-config/commands/prompts/nextjs-add-prisma-db.md +136 -0
  25. package/agents-config/commands/prompts/nextjs-setup-better-auth.md +173 -0
  26. package/agents-config/commands/prompts/nextjs-setup-project.md +200 -0
  27. package/agents-config/commands/prompts/prompt.md +55 -0
  28. package/agents-config/commands/prompts/saas-challenge-idea.md +135 -0
  29. package/agents-config/commands/prompts/saas-create-architecture.md +242 -0
  30. package/agents-config/commands/prompts/saas-create-headline.md +132 -0
  31. package/agents-config/commands/prompts/saas-create-landing-copywritting.md +267 -0
  32. package/agents-config/commands/prompts/saas-create-legals-docs.md +176 -0
  33. package/agents-config/commands/prompts/saas-create-logos.md +240 -0
  34. package/agents-config/commands/prompts/saas-create-prd.md +195 -0
  35. package/agents-config/commands/prompts/saas-create-tasks.md +240 -0
  36. package/agents-config/commands/prompts/saas-define-pricing.md +293 -0
  37. package/agents-config/commands/prompts/saas-find-domain-name.md +190 -0
  38. package/agents-config/commands/prompts/saas-implement-landing-page.md +257 -0
  39. package/agents-config/commands/prompts/setup-tmux.md +160 -0
  40. package/agents-config/commands/prompts/tools.md +148 -0
  41. package/agents-config/scripts/.claude/skills/fix-on-my-computer/SKILL.md +81 -0
  42. package/agents-config/scripts/CLAUDE.md +37 -0
  43. package/agents-config/scripts/biome.json +37 -0
  44. package/agents-config/scripts/bun.lockb +0 -0
  45. package/agents-config/scripts/package.json +24 -0
  46. package/agents-config/scripts/statusline/CLAUDE.md +87 -0
  47. package/agents-config/scripts/statusline/README.md +117 -0
  48. package/agents-config/scripts/statusline/__tests__/context.test.ts +229 -0
  49. package/agents-config/scripts/statusline/__tests__/formatters.test.ts +108 -0
  50. package/agents-config/scripts/statusline/__tests__/statusline.test.ts +309 -0
  51. package/agents-config/scripts/statusline/defaults.json +82 -0
  52. package/agents-config/scripts/statusline/fixtures/mock-transcript.jsonl +4 -0
  53. package/agents-config/scripts/statusline/fixtures/test-input.json +35 -0
  54. package/agents-config/scripts/statusline/src/commands/interactive-config.ts +403 -0
  55. package/agents-config/scripts/statusline/src/index.ts +141 -0
  56. package/agents-config/scripts/statusline/src/lib/config-types.ts +110 -0
  57. package/agents-config/scripts/statusline/src/lib/config.ts +21 -0
  58. package/agents-config/scripts/statusline/src/lib/context.ts +103 -0
  59. package/agents-config/scripts/statusline/src/lib/formatters.ts +426 -0
  60. package/agents-config/scripts/statusline/src/lib/git.ts +100 -0
  61. package/agents-config/scripts/statusline/src/lib/menu-factories.ts +224 -0
  62. package/agents-config/scripts/statusline/src/lib/presets.ts +177 -0
  63. package/agents-config/scripts/statusline/src/lib/render-pure.ts +516 -0
  64. package/agents-config/scripts/statusline/src/lib/types.ts +36 -0
  65. package/agents-config/scripts/statusline/src/lib/utils.ts +15 -0
  66. package/agents-config/scripts/statusline/statusline.config.free.json +79 -0
  67. package/agents-config/scripts/statusline/statusline.config.json +79 -0
  68. package/agents-config/scripts/statusline/test-with-fixtures.ts +37 -0
  69. package/agents-config/scripts/statusline/test.ts +20 -0
  70. package/agents-config/scripts/statusline/tsconfig.json +27 -0
  71. package/agents-config/scripts/tsconfig.json +27 -0
  72. package/agents-config/skills/{subagent-creator → agents-managers}/SKILL.md +47 -47
  73. package/agents-config/skills/{subagent-creator/references/subagents.md → agents-managers/references/agents.md} +45 -45
  74. package/agents-config/skills/{subagent-creator → agents-managers}/references/context-management.md +20 -20
  75. package/agents-config/skills/{subagent-creator → agents-managers}/references/debugging-agents.md +27 -27
  76. package/agents-config/skills/{subagent-creator → agents-managers}/references/error-handling-and-recovery.md +19 -19
  77. package/agents-config/skills/{subagent-creator → agents-managers}/references/evaluation-and-testing.md +29 -29
  78. package/agents-config/skills/{subagent-creator → agents-managers}/references/orchestration-patterns.md +5 -5
  79. package/agents-config/skills/{subagent-creator/references/writing-subagent-prompts.md → agents-managers/references/writing-agent-prompts.md} +23 -23
  80. package/agents-config/skills/codex-environment/SKILL.md +2 -0
  81. package/agents-config/skills/commit/SKILL.md +2 -0
  82. package/agents-config/skills/create-pr/SKILL.md +2 -0
  83. package/agents-config/skills/environments-manager/SKILL.md +271 -0
  84. package/agents-config/skills/environments-manager/examples/claude/.worktreeinclude +3 -0
  85. package/agents-config/skills/environments-manager/examples/claude/commands/dev.md +5 -0
  86. package/agents-config/skills/environments-manager/examples/claude/commands/lint.md +5 -0
  87. package/agents-config/skills/environments-manager/examples/claude/commands/test.md +5 -0
  88. package/agents-config/skills/environments-manager/examples/claude/commands/typecheck.md +5 -0
  89. package/agents-config/skills/environments-manager/examples/claude/settings.json +24 -0
  90. package/agents-config/skills/environments-manager/examples/codex/environments/environment.toml +29 -0
  91. package/agents-config/skills/environments-manager/examples/cursor/worktrees.json +3 -0
  92. package/agents-config/skills/environments-manager/examples/scripts/claude-worktree-create.sh +96 -0
  93. package/agents-config/skills/environments-manager/examples/scripts/claude-worktree-remove.sh +66 -0
  94. package/agents-config/skills/environments-manager/examples/scripts/dev.sh +15 -0
  95. package/agents-config/skills/environments-manager/examples/scripts/worktree-down.sh +22 -0
  96. package/agents-config/skills/environments-manager/examples/scripts/worktree-up.sh +50 -0
  97. package/agents-config/skills/environments-manager/references/claude.md +156 -0
  98. package/agents-config/skills/environments-manager/references/codex.md +97 -0
  99. package/agents-config/skills/environments-manager/references/cursor.md +88 -0
  100. package/agents-config/skills/fix-pr-comments/SKILL.md +2 -0
  101. package/agents-config/skills/grill-me/SKILL.md +10 -0
  102. package/agents-config/skills/merge/SKILL.md +2 -0
  103. package/agents-config/skills/rules-manager/SKILL.md +191 -0
  104. package/agents-config/skills/rules-manager/references/agents-vs-claude.md +66 -0
  105. package/agents-config/skills/rules-manager/references/examples.md +117 -0
  106. package/agents-config/skills/skill-manager/SKILL.md +83 -0
  107. package/agents-config/skills/skill-manager/references/claude-code.md +81 -0
  108. package/agents-config/skills/skill-manager/references/codex.md +288 -0
  109. package/agents-config/skills/skill-manager/references/cursor.md +125 -0
  110. package/agents-config/skills/ultrathink/SKILL.md +2 -0
  111. package/package.json +1 -1
  112. package/agents-config/claude-config/scripts/statusline/data/.gitignore +0 -8
  113. package/agents-config/claude-config/scripts/statusline/data/.gitkeep +0 -0
  114. package/agents-config/claude-config/scripts/statusline/docs/ARCHITECTURE.md +0 -166
  115. package/agents-config/claude-config/scripts/statusline/src/tests/spend-v2.test.ts +0 -306
  116. package/agents-config/skills/apex/SKILL.md +0 -261
  117. package/agents-config/skills/apex/scripts/setup-templates.sh +0 -100
  118. package/agents-config/skills/apex/scripts/update-progress.sh +0 -80
  119. package/agents-config/skills/apex/steps/step-00-init.md +0 -267
  120. package/agents-config/skills/apex/steps/step-00b-branch.md +0 -126
  121. package/agents-config/skills/apex/steps/step-00b-economy.md +0 -244
  122. package/agents-config/skills/apex/steps/step-00b-interactive.md +0 -153
  123. package/agents-config/skills/apex/steps/step-01-analyze.md +0 -361
  124. package/agents-config/skills/apex/steps/step-02-plan.md +0 -264
  125. package/agents-config/skills/apex/steps/step-03-execute.md +0 -239
  126. package/agents-config/skills/apex/steps/step-04-validate.md +0 -251
  127. package/agents-config/skills/apex/templates/00-context.md +0 -43
  128. package/agents-config/skills/apex/templates/01-analyze.md +0 -10
  129. package/agents-config/skills/apex/templates/02-plan.md +0 -10
  130. package/agents-config/skills/apex/templates/03-execute.md +0 -10
  131. package/agents-config/skills/apex/templates/04-validate.md +0 -10
  132. package/agents-config/skills/apex/templates/README.md +0 -176
  133. package/agents-config/skills/apex/templates/step-complete.md +0 -7
  134. package/agents-config/skills/claude-memory/SKILL.md +0 -293
  135. package/agents-config/skills/claude-memory/references/comprehensive-example.md +0 -175
  136. package/agents-config/skills/claude-memory/references/optimize-guide.md +0 -300
  137. package/agents-config/skills/claude-memory/references/project-patterns.md +0 -334
  138. package/agents-config/skills/claude-memory/references/prompting-techniques.md +0 -411
  139. package/agents-config/skills/claude-memory/references/rules-directory-guide.md +0 -298
  140. package/agents-config/skills/claude-memory/references/section-templates.md +0 -347
  141. package/agents-config/skills/fix-errors/SKILL.md +0 -61
  142. package/agents-config/skills/fix-grammar/SKILL.md +0 -59
  143. package/agents-config/skills/ralph-loop/SKILL.md +0 -117
  144. package/agents-config/skills/ralph-loop/scripts/setup.sh +0 -278
  145. package/agents-config/skills/ralph-loop/steps/step-00-init.md +0 -215
  146. package/agents-config/skills/ralph-loop/steps/step-01-interactive-prd.md +0 -366
  147. package/agents-config/skills/ralph-loop/steps/step-02-create-stories.md +0 -273
  148. package/agents-config/skills/ralph-loop/steps/step-03-finish.md +0 -245
  149. package/agents-config/skills/skill-creator/LICENSE.txt +0 -202
  150. package/agents-config/skills/skill-creator/SKILL.md +0 -421
  151. package/agents-config/skills/skill-creator/package.json +0 -5
  152. package/agents-config/skills/skill-creator/references/output-patterns.md +0 -82
  153. package/agents-config/skills/skill-creator/references/progressive-disclosure-patterns.md +0 -374
  154. package/agents-config/skills/skill-creator/references/prompting-integration.md +0 -363
  155. package/agents-config/skills/skill-creator/references/real-world-examples.md +0 -513
  156. package/agents-config/skills/skill-creator/references/script-patterns.md +0 -385
  157. package/agents-config/skills/skill-creator/references/workflows.md +0 -28
  158. package/agents-config/skills/skill-creator/references/xml-tag-guide.md +0 -606
  159. package/agents-config/skills/skill-creator/scripts/init-skill.ts +0 -214
  160. package/agents-config/skills/skill-creator/scripts/package-skill.ts +0 -146
  161. package/agents-config/skills/skill-creator/scripts/validate.ts +0 -138
  162. package/agents-config/skills/workflow-apex-free/SKILL.md +0 -261
  163. package/agents-config/skills/workflow-apex-free/scripts/setup-templates.sh +0 -100
  164. package/agents-config/skills/workflow-apex-free/scripts/update-progress.sh +0 -80
  165. package/agents-config/skills/workflow-apex-free/steps/step-00-init.md +0 -267
  166. package/agents-config/skills/workflow-apex-free/steps/step-00b-branch.md +0 -126
  167. package/agents-config/skills/workflow-apex-free/steps/step-00b-economy.md +0 -244
  168. package/agents-config/skills/workflow-apex-free/steps/step-00b-interactive.md +0 -153
  169. package/agents-config/skills/workflow-apex-free/steps/step-01-analyze.md +0 -361
  170. package/agents-config/skills/workflow-apex-free/steps/step-02-plan.md +0 -264
  171. package/agents-config/skills/workflow-apex-free/steps/step-03-execute.md +0 -239
  172. package/agents-config/skills/workflow-apex-free/steps/step-04-validate.md +0 -251
  173. package/agents-config/skills/workflow-apex-free/templates/00-context.md +0 -43
  174. package/agents-config/skills/workflow-apex-free/templates/01-analyze.md +0 -10
  175. package/agents-config/skills/workflow-apex-free/templates/02-plan.md +0 -10
  176. package/agents-config/skills/workflow-apex-free/templates/03-execute.md +0 -10
  177. package/agents-config/skills/workflow-apex-free/templates/04-validate.md +0 -10
  178. package/agents-config/skills/workflow-apex-free/templates/README.md +0 -176
  179. package/agents-config/skills/workflow-apex-free/templates/step-complete.md +0 -7
@@ -1,306 +0,0 @@
1
- import { Database } from "bun:sqlite";
2
- import { afterEach, beforeEach, describe, expect, test } from "bun:test";
3
- import { existsSync, rmSync } from "node:fs";
4
- import { join } from "node:path";
5
-
6
- const TEST_DB_PATH = join(import.meta.dir, "..", "..", "data", "test.db");
7
-
8
- describe("SQLite Delta Tracking", () => {
9
- let db: Database;
10
-
11
- beforeEach(() => {
12
- if (existsSync(TEST_DB_PATH)) {
13
- rmSync(TEST_DB_PATH);
14
- }
15
-
16
- db = new Database(TEST_DB_PATH);
17
-
18
- db.run(`
19
- CREATE TABLE sessions (
20
- session_id TEXT PRIMARY KEY,
21
- total_cost REAL NOT NULL DEFAULT 0,
22
- cwd TEXT NOT NULL,
23
- date TEXT NOT NULL,
24
- duration_ms INTEGER NOT NULL DEFAULT 0,
25
- lines_added INTEGER NOT NULL DEFAULT 0,
26
- lines_removed INTEGER NOT NULL DEFAULT 0,
27
- last_resets_at TEXT
28
- )
29
- `);
30
-
31
- db.run(`
32
- CREATE TABLE session_period_tracking (
33
- session_id TEXT NOT NULL,
34
- period_id TEXT NOT NULL,
35
- counted_cost REAL NOT NULL DEFAULT 0,
36
- last_session_cost REAL NOT NULL DEFAULT 0,
37
- PRIMARY KEY (session_id, period_id)
38
- )
39
- `);
40
-
41
- db.run(`
42
- CREATE TABLE periods (
43
- period_id TEXT PRIMARY KEY,
44
- total_cost REAL NOT NULL DEFAULT 0,
45
- utilization INTEGER NOT NULL DEFAULT 0,
46
- date TEXT NOT NULL
47
- )
48
- `);
49
- });
50
-
51
- afterEach(() => {
52
- db.close();
53
- if (existsSync(TEST_DB_PATH)) {
54
- rmSync(TEST_DB_PATH);
55
- }
56
- });
57
-
58
- test("New session: full cost added to period", () => {
59
- const sessionId = "session-1";
60
- const periodId = "2025-12-09T10:00:00.000Z";
61
- const sessionCost = 10.0;
62
-
63
- db.run(
64
- "INSERT INTO sessions (session_id, total_cost, cwd, date, last_resets_at) VALUES (?, ?, ?, ?, ?)",
65
- [sessionId, sessionCost, "/test", "2025-12-09", periodId],
66
- );
67
-
68
- db.run(
69
- "INSERT INTO session_period_tracking (session_id, period_id, counted_cost, last_session_cost) VALUES (?, ?, ?, ?)",
70
- [sessionId, periodId, sessionCost, sessionCost],
71
- );
72
-
73
- db.run(
74
- "INSERT INTO periods (period_id, total_cost, utilization, date) VALUES (?, ?, ?, ?)",
75
- [periodId, sessionCost, 0, "2025-12-09"],
76
- );
77
-
78
- const period = db
79
- .query<{ total_cost: number }, [string]>(
80
- "SELECT total_cost FROM periods WHERE period_id = ?",
81
- )
82
- .get(periodId);
83
-
84
- expect(period?.total_cost).toBe(10.0);
85
- });
86
-
87
- test("Continued session: only delta added to period", () => {
88
- const sessionId = "session-1";
89
- const periodId = "2025-12-09T10:00:00.000Z";
90
-
91
- db.run(
92
- "INSERT INTO sessions (session_id, total_cost, cwd, date, last_resets_at) VALUES (?, ?, ?, ?, ?)",
93
- [sessionId, 10.0, "/test", "2025-12-09", periodId],
94
- );
95
-
96
- db.run(
97
- "INSERT INTO session_period_tracking (session_id, period_id, counted_cost, last_session_cost) VALUES (?, ?, ?, ?)",
98
- [sessionId, periodId, 10.0, 10.0],
99
- );
100
-
101
- db.run(
102
- "INSERT INTO periods (period_id, total_cost, utilization, date) VALUES (?, ?, ?, ?)",
103
- [periodId, 10.0, 0, "2025-12-09"],
104
- );
105
-
106
- const newSessionCost = 24.0;
107
- const delta = newSessionCost - 10.0;
108
-
109
- db.run("UPDATE sessions SET total_cost = ? WHERE session_id = ?", [
110
- newSessionCost,
111
- sessionId,
112
- ]);
113
-
114
- const tracking = db
115
- .query<
116
- { counted_cost: number; last_session_cost: number },
117
- [string, string]
118
- >(
119
- "SELECT counted_cost, last_session_cost FROM session_period_tracking WHERE session_id = ? AND period_id = ?",
120
- )
121
- .get(sessionId, periodId);
122
-
123
- const newCountedCost = (tracking?.counted_cost ?? 0) + delta;
124
-
125
- db.run(
126
- "UPDATE session_period_tracking SET counted_cost = ?, last_session_cost = ? WHERE session_id = ? AND period_id = ?",
127
- [newCountedCost, newSessionCost, sessionId, periodId],
128
- );
129
-
130
- db.run(
131
- "UPDATE periods SET total_cost = total_cost + ? WHERE period_id = ?",
132
- [delta, periodId],
133
- );
134
-
135
- const period = db
136
- .query<{ total_cost: number }, [string]>(
137
- "SELECT total_cost FROM periods WHERE period_id = ?",
138
- )
139
- .get(periodId);
140
- const updatedTracking = db
141
- .query<{ counted_cost: number }, [string, string]>(
142
- "SELECT counted_cost FROM session_period_tracking WHERE session_id = ? AND period_id = ?",
143
- )
144
- .get(sessionId, periodId);
145
-
146
- expect(period?.total_cost).toBe(24.0);
147
- expect(updatedTracking?.counted_cost).toBe(24.0);
148
- });
149
-
150
- test("Session spanning periods: only new delta in new period", () => {
151
- const sessionId = "session-1";
152
- const periodA = "2025-12-09T05:00:00.000Z";
153
- const periodB = "2025-12-09T10:00:00.000Z";
154
-
155
- db.run(
156
- "INSERT INTO sessions (session_id, total_cost, cwd, date, last_resets_at) VALUES (?, ?, ?, ?, ?)",
157
- [sessionId, 10.0, "/test", "2025-12-09", periodA],
158
- );
159
-
160
- db.run(
161
- "INSERT INTO session_period_tracking (session_id, period_id, counted_cost, last_session_cost) VALUES (?, ?, ?, ?)",
162
- [sessionId, periodA, 10.0, 10.0],
163
- );
164
-
165
- db.run(
166
- "INSERT INTO periods (period_id, total_cost, utilization, date) VALUES (?, ?, ?, ?)",
167
- [periodA, 10.0, 0, "2025-12-09"],
168
- );
169
-
170
- const newSessionCost = 24.0;
171
- const session = db
172
- .query<{ total_cost: number }, [string]>(
173
- "SELECT total_cost FROM sessions WHERE session_id = ?",
174
- )
175
- .get(sessionId);
176
- const delta = newSessionCost - (session?.total_cost ?? 0);
177
-
178
- db.run(
179
- "UPDATE sessions SET total_cost = ?, last_resets_at = ? WHERE session_id = ?",
180
- [newSessionCost, periodB, sessionId],
181
- );
182
-
183
- db.run(
184
- "INSERT INTO session_period_tracking (session_id, period_id, counted_cost, last_session_cost) VALUES (?, ?, ?, ?)",
185
- [sessionId, periodB, delta, newSessionCost],
186
- );
187
-
188
- db.run(
189
- "INSERT OR IGNORE INTO periods (period_id, total_cost, utilization, date) VALUES (?, ?, ?, ?)",
190
- [periodB, 0, 0, "2025-12-09"],
191
- );
192
- db.run(
193
- "UPDATE periods SET total_cost = total_cost + ? WHERE period_id = ?",
194
- [delta, periodB],
195
- );
196
-
197
- const periodACost = db
198
- .query<{ total_cost: number }, [string]>(
199
- "SELECT total_cost FROM periods WHERE period_id = ?",
200
- )
201
- .get(periodA);
202
- const periodBCost = db
203
- .query<{ total_cost: number }, [string]>(
204
- "SELECT total_cost FROM periods WHERE period_id = ?",
205
- )
206
- .get(periodB);
207
- const trackingA = db
208
- .query<{ counted_cost: number }, [string, string]>(
209
- "SELECT counted_cost FROM session_period_tracking WHERE session_id = ? AND period_id = ?",
210
- )
211
- .get(sessionId, periodA);
212
- const trackingB = db
213
- .query<{ counted_cost: number }, [string, string]>(
214
- "SELECT counted_cost FROM session_period_tracking WHERE session_id = ? AND period_id = ?",
215
- )
216
- .get(sessionId, periodB);
217
-
218
- expect(periodACost?.total_cost).toBe(10.0);
219
- expect(periodBCost?.total_cost).toBe(14.0);
220
- expect(trackingA?.counted_cost).toBe(10.0);
221
- expect(trackingB?.counted_cost).toBe(14.0);
222
-
223
- expect(
224
- (periodACost?.total_cost ?? 0) + (periodBCost?.total_cost ?? 0),
225
- ).toBe(24.0);
226
- });
227
-
228
- test("Multiple sessions in same period: costs sum correctly", () => {
229
- const periodId = "2025-12-09T10:00:00.000Z";
230
-
231
- db.run(
232
- "INSERT INTO periods (period_id, total_cost, utilization, date) VALUES (?, ?, ?, ?)",
233
- [periodId, 0, 0, "2025-12-09"],
234
- );
235
-
236
- const sessions = [
237
- { id: "session-1", cost: 10.0 },
238
- { id: "session-2", cost: 15.0 },
239
- { id: "session-3", cost: 8.0 },
240
- ];
241
-
242
- for (const session of sessions) {
243
- db.run(
244
- "INSERT INTO sessions (session_id, total_cost, cwd, date, last_resets_at) VALUES (?, ?, ?, ?, ?)",
245
- [session.id, session.cost, "/test", "2025-12-09", periodId],
246
- );
247
-
248
- db.run(
249
- "INSERT INTO session_period_tracking (session_id, period_id, counted_cost, last_session_cost) VALUES (?, ?, ?, ?)",
250
- [session.id, periodId, session.cost, session.cost],
251
- );
252
-
253
- db.run(
254
- "UPDATE periods SET total_cost = total_cost + ? WHERE period_id = ?",
255
- [session.cost, periodId],
256
- );
257
- }
258
-
259
- const period = db
260
- .query<{ total_cost: number }, [string]>(
261
- "SELECT total_cost FROM periods WHERE period_id = ?",
262
- )
263
- .get(periodId);
264
-
265
- expect(period?.total_cost).toBe(33.0);
266
- });
267
-
268
- test("No double counting: continuing old session after restart", () => {
269
- const sessionId = "session-1";
270
- const periodId = "2025-12-09T10:00:00.000Z";
271
-
272
- db.run(
273
- "INSERT INTO sessions (session_id, total_cost, cwd, date, last_resets_at) VALUES (?, ?, ?, ?, ?)",
274
- [sessionId, 10.0, "/test", "2025-12-09", periodId],
275
- );
276
-
277
- db.run(
278
- "INSERT INTO session_period_tracking (session_id, period_id, counted_cost, last_session_cost) VALUES (?, ?, ?, ?)",
279
- [sessionId, periodId, 10.0, 10.0],
280
- );
281
-
282
- db.run(
283
- "INSERT INTO periods (period_id, total_cost, utilization, date) VALUES (?, ?, ?, ?)",
284
- [periodId, 10.0, 0, "2025-12-09"],
285
- );
286
-
287
- const tracking = db
288
- .query<{ last_session_cost: number }, [string, string]>(
289
- "SELECT last_session_cost FROM session_period_tracking WHERE session_id = ? AND period_id = ?",
290
- )
291
- .get(sessionId, periodId);
292
-
293
- const currentSessionCost = 10.0;
294
- const delta = currentSessionCost - (tracking?.last_session_cost ?? 0);
295
-
296
- expect(delta).toBe(0);
297
-
298
- const period = db
299
- .query<{ total_cost: number }, [string]>(
300
- "SELECT total_cost FROM periods WHERE period_id = ?",
301
- )
302
- .get(periodId);
303
-
304
- expect(period?.total_cost).toBe(10.0);
305
- });
306
- });
@@ -1,261 +0,0 @@
1
- ---
2
- name: apex
3
- description: Systematic implementation using APEX methodology (Analyze-Plan-Execute-Validate) with parallel agents and self-validation. Use when implementing features, fixing bugs, or making code changes that benefit from structured workflow.
4
- argument-hint: "[-a] [-s] [-e] [-b] [-i] [-r <task-id>] <task description>"
5
- ---
6
-
7
- <objective>
8
- Execute systematic implementation workflows using the APEX methodology. This skill uses progressive step loading to minimize context usage and supports saving outputs for review and resumption.
9
- </objective>
10
-
11
- <quick_start>
12
- **Basic usage:**
13
-
14
- ```bash
15
- /apex add authentication middleware
16
- ```
17
-
18
- **Recommended workflow (autonomous with save):**
19
-
20
- ```bash
21
- /apex -a -s implement user registration
22
- ```
23
-
24
- **Flags:**
25
-
26
- - `-a` (auto): Skip confirmations
27
- - `-s` (save): Save outputs to `.claude/output/apex/`
28
- - `-e` (economy): No subagents, save tokens
29
-
30
- See `<parameters>` for complete flag list.
31
- </quick_start>
32
-
33
- <parameters>
34
-
35
- <flags>
36
- **Enable flags (turn ON):**
37
- | Short | Long | Description |
38
- |-------|------|-------------|
39
- | `-a` | `--auto` | Autonomous mode: skip confirmations, auto-approve plans |
40
- | `-s` | `--save` | Save mode: output each step to `.claude/output/apex/` |
41
- | `-e` | `--economy` | Economy mode: no subagents, save tokens (for limited plans) |
42
- | `-r` | `--resume` | Resume mode: continue from a previous task |
43
- | `-b` | `--branch` | Branch mode: verify not on main, create branch if needed |
44
- | `-i` | `--interactive` | Interactive mode: configure flags via AskUserQuestion |
45
-
46
- **Disable flags (turn OFF):**
47
- | Short | Long | Description |
48
- |-------|------|-------------|
49
- | `-A` | `--no-auto` | Disable auto mode |
50
- | `-S` | `--no-save` | Disable save mode |
51
- | `-E` | `--no-economy` | Disable economy mode |
52
- | `-B` | `--no-branch` | Disable branch mode |
53
- </flags>
54
-
55
- <examples>
56
- ```bash
57
- # Basic
58
- /apex add auth middleware
59
-
60
- # Autonomous (skip confirmations)
61
- /apex -a add auth middleware
62
-
63
- # Save outputs
64
- /apex -a -s add auth middleware
65
-
66
- # Resume previous task
67
- /apex -r 01-auth-middleware
68
- /apex -r 01 # Partial match
69
-
70
- # Economy mode (save tokens)
71
- /apex -e add auth middleware
72
-
73
- # Interactive flag config
74
- /apex -i add auth middleware
75
-
76
- # Disable flags (uppercase)
77
- /apex -A add auth middleware # Disable auto
78
- ```
79
- </examples>
80
-
81
- <parsing_rules>
82
- **Flag parsing:**
83
-
84
- 1. Defaults loaded from `steps/step-00-init.md` `<defaults>` section
85
- 2. Command-line flags override defaults (enable with lowercase `-x`, disable with uppercase `-X`)
86
- 3. Flags removed from input, remainder becomes `{task_description}`
87
- 4. Task ID generated as `NN-kebab-case-description`
88
-
89
- For detailed parsing algorithm, see `steps/step-00-init.md`.
90
- </parsing_rules>
91
-
92
- </parameters>
93
-
94
- <output_structure>
95
- **When `{save_mode}` = true:**
96
-
97
- All outputs saved to PROJECT directory (where Claude Code is running):
98
- ```
99
- .claude/output/apex/{task-id}/
100
- ├── 00-context.md # Params, user request, timestamp
101
- ├── 01-analyze.md # Analysis findings
102
- ├── 02-plan.md # Implementation plan
103
- ├── 03-execute.md # Execution log
104
- └── 04-validate.md # Validation results
105
- ```
106
-
107
- **00-context.md structure:**
108
- ```markdown
109
- # APEX Task: {task_id}
110
-
111
- **Created:** {timestamp}
112
- **Task:** {task_description}
113
-
114
- ## Flags
115
- - Auto mode: {auto_mode}
116
- - Save mode: {save_mode}
117
- - Economy mode: {economy_mode}
118
-
119
- ## User Request
120
- {original user input}
121
-
122
- ## Acceptance Criteria
123
- - [ ] AC1: {inferred criterion}
124
- - [ ] AC2: {inferred criterion}
125
- ```
126
-
127
- </output_structure>
128
-
129
- <resume_workflow>
130
- **Resume mode (`-r {task-id}`):**
131
-
132
- When provided, step-00 will:
133
-
134
- 1. Locate the task folder in `.claude/output/apex/`
135
- 2. Restore state from `00-context.md`
136
- 3. Find the last completed step
137
- 4. Continue from the next step
138
-
139
- Supports partial matching (e.g., `-r 01` finds `01-add-auth-middleware`).
140
-
141
- For implementation details, see `steps/step-00-init.md`.
142
- </resume_workflow>
143
-
144
- <workflow>
145
- **Standard flow:**
146
- 1. Parse flags and task description
147
- 2. If `-r`: Execute resume workflow
148
- 3. If `-s`: Create output folder and 00-context.md
149
- 4. Load step-01-analyze.md → gather context
150
- 5. Load step-02-plan.md → create strategy
151
- 6. Load step-03-execute.md → implement
152
- 7. Load step-04-validate.md → verify and complete
153
- </workflow>
154
-
155
- <state_variables>
156
- **Persist throughout all steps:**
157
-
158
- | Variable | Type | Description |
159
- | ----------------------- | ------- | ------------------------------------------------------ |
160
- | `{task_description}` | string | What to implement (flags removed) |
161
- | `{feature_name}` | string | Kebab-case name without number (e.g., `add-auth-middleware`) |
162
- | `{task_id}` | string | Full identifier with number (e.g., `01-add-auth-middleware`) |
163
- | `{acceptance_criteria}` | list | Success criteria (inferred or explicit) |
164
- | `{auto_mode}` | boolean | Skip confirmations, use recommended options |
165
- | `{save_mode}` | boolean | Save outputs to .claude/output/apex/ |
166
- | `{economy_mode}` | boolean | No subagents, direct tool usage only |
167
- | `{branch_mode}` | boolean | Verify not on main, create branch if needed |
168
- | `{interactive_mode}` | boolean | Configure flags interactively |
169
- | `{resume_task}` | string | Task ID to resume (if -r provided) |
170
- | `{output_dir}` | string | Full path to output directory |
171
- | `{branch_name}` | string | Created branch name (if branch_mode) |
172
-
173
- </state_variables>
174
-
175
- <entry_point>
176
-
177
- **FIRST ACTION:** Load `steps/step-00-init.md`
178
-
179
- Step 00 handles:
180
-
181
- - Flag parsing (-a, -x, -s, -r, --test)
182
- - Resume mode detection and task lookup
183
- - Output folder creation (if save_mode)
184
- - 00-context.md creation (if save_mode)
185
- - State variable initialization
186
-
187
- After initialization, step-00 loads step-01-analyze.md.
188
-
189
- </entry_point>
190
-
191
- <step_files>
192
- **Progressive loading - only load current step:**
193
-
194
- | Step | File | Purpose |
195
- | ---- | ---------------------------- | ---------------------------------------------------- |
196
- | 00 | `steps/step-00-init.md` | Parse flags, create output folder, initialize state |
197
- | 01 | `steps/step-01-analyze.md` | Smart context gathering with 1-10 parallel agents based on complexity |
198
- | 02 | `steps/step-02-plan.md` | File-by-file implementation strategy |
199
- | 03 | `steps/step-03-execute.md` | Todo-driven implementation |
200
- | 04 | `steps/step-04-validate.md` | Self-check, validation, and workflow completion |
201
-
202
- </step_files>
203
-
204
- <execution_rules>
205
-
206
- - **Load one step at a time** - Only load the current step file
207
- - **ULTRA THINK** before major decisions
208
- - **Persist state variables** across all steps
209
- - **Follow next_step directive** at end of each step
210
- - **Save outputs** if `{save_mode}` = true (append to step file)
211
- - **Use parallel agents** for independent exploration tasks
212
-
213
- ## 🧠 Smart Agent Strategy in Analyze Phase
214
-
215
- The analyze phase (step-01) uses **adaptive agent launching** (unless economy_mode):
216
-
217
- **Available agents:**
218
- - `explore-codebase` - Find existing patterns, files, utilities
219
- - `explore-docs` - Research library docs (use when unfamiliar with API)
220
- - `websearch` - Find approaches, best practices, gotchas
221
-
222
- **Launch 1-10 agents based on task complexity:**
223
-
224
- | Complexity | Agents | When |
225
- |------------|--------|------|
226
- | Simple | 1-2 | Bug fix, small tweak |
227
- | Medium | 2-4 | New feature in familiar stack |
228
- | Complex | 4-7 | Unfamiliar libraries, integrations |
229
- | Major | 6-10 | Multiple systems, many unknowns |
230
-
231
- **BE SMART:** Analyze what you actually need before launching. Don't over-launch for simple tasks, don't under-launch for complex ones.
232
-
233
- </execution_rules>
234
-
235
- <save_output_pattern>
236
- **When `{save_mode}` = true:**
237
-
238
- Step-00 runs `scripts/setup-templates.sh` to initialize all output files from `templates/` directory.
239
-
240
- **Each step then:**
241
-
242
- 1. Run `scripts/update-progress.sh {task_id} {step_num} {step_name} "in_progress"`
243
- 2. Append findings/outputs to the pre-created step file
244
- 3. Run `scripts/update-progress.sh {task_id} {step_num} {step_name} "complete"`
245
-
246
- **Template system benefits:**
247
-
248
- - Reduces token usage by ~75% (1,350 tokens saved per workflow)
249
- - Templates in `templates/` directory (not inline in steps)
250
- - Scripts handle progress tracking automatically
251
- - See `templates/README.md` for details
252
-
253
- </save_output_pattern>
254
-
255
- <success_criteria>
256
-
257
- - Each step loaded progressively
258
- - All validation checks passing
259
- - Outputs saved if `{save_mode}` enabled
260
- - Clear completion summary provided
261
- </success_criteria>
@@ -1,100 +0,0 @@
1
- #!/bin/bash
2
- # APEX Template Setup Script
3
- # Creates output directory structure and initializes template files
4
- #
5
- # Usage: setup-templates.sh "feature-name" [other args...]
6
- # The script auto-generates the task ID with the next available number.
7
-
8
- set -e
9
-
10
- # Arguments - first arg is now just the feature name (kebab-case)
11
- FEATURE_NAME="$1"
12
- TASK_DESCRIPTION="$2"
13
- AUTO_MODE="${3:-false}"
14
- SAVE_MODE="${4:-false}"
15
- ECONOMY_MODE="${5:-false}"
16
- BRANCH_MODE="${6:-false}"
17
- INTERACTIVE_MODE="${7:-false}"
18
- BRANCH_NAME="${8:-}"
19
- ORIGINAL_INPUT="${9:-}"
20
-
21
- # Validate required arguments
22
- if [[ -z "$FEATURE_NAME" ]]; then
23
- echo "Error: FEATURE_NAME is required"
24
- exit 1
25
- fi
26
-
27
- if [[ -z "$TASK_DESCRIPTION" ]]; then
28
- echo "Error: TASK_DESCRIPTION is required"
29
- exit 1
30
- fi
31
-
32
- # Get current timestamp
33
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
34
-
35
- # Use current working directory as project root
36
- PROJECT_ROOT=$(pwd)
37
- APEX_OUTPUT_DIR="${PROJECT_ROOT}/.claude/output/apex"
38
-
39
- # Create apex output directory if it doesn't exist
40
- mkdir -p "$APEX_OUTPUT_DIR"
41
-
42
- # Find the next available number
43
- NEXT_NUM=1
44
- if [[ -d "$APEX_OUTPUT_DIR" ]]; then
45
- # Find highest existing number prefix
46
- HIGHEST=$(ls -1 "$APEX_OUTPUT_DIR" 2>/dev/null | grep -oE '^[0-9]+' | sort -n | tail -1)
47
- if [[ -n "$HIGHEST" ]]; then
48
- # Force base-10 interpretation (leading zeros would be treated as octal)
49
- NEXT_NUM=$((10#$HIGHEST + 1))
50
- fi
51
- fi
52
-
53
- # Format with leading zeros (2 digits)
54
- TASK_NUM=$(printf "%02d" "$NEXT_NUM")
55
-
56
- # Build full task ID
57
- TASK_ID="${TASK_NUM}-${FEATURE_NAME}"
58
-
59
- OUTPUT_DIR="${APEX_OUTPUT_DIR}/${TASK_ID}"
60
-
61
- # Get skill directory
62
- SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
63
- TEMPLATE_DIR="${SKILL_DIR}/templates"
64
-
65
- # Create output directory
66
- mkdir -p "$OUTPUT_DIR"
67
-
68
- # Function to replace template variables
69
- render_template() {
70
- local template_file="$1"
71
- local output_file="$2"
72
-
73
- # Read template and replace variables
74
- sed -e "s|{{task_id}}|${TASK_ID}|g" \
75
- -e "s|{{task_description}}|${TASK_DESCRIPTION}|g" \
76
- -e "s|{{timestamp}}|${TIMESTAMP}|g" \
77
- -e "s|{{auto_mode}}|${AUTO_MODE}|g" \
78
- -e "s|{{save_mode}}|${SAVE_MODE}|g" \
79
- -e "s|{{economy_mode}}|${ECONOMY_MODE}|g" \
80
- -e "s|{{branch_mode}}|${BRANCH_MODE}|g" \
81
- -e "s|{{interactive_mode}}|${INTERACTIVE_MODE}|g" \
82
- -e "s|{{branch_name}}|${BRANCH_NAME}|g" \
83
- -e "s|{{original_input}}|${ORIGINAL_INPUT}|g" \
84
- "$template_file" > "$output_file"
85
- }
86
-
87
- # Initialize 00-context.md
88
- render_template "${TEMPLATE_DIR}/00-context.md" "${OUTPUT_DIR}/00-context.md"
89
-
90
- # Initialize other step files (only headers, content appended during execution)
91
- render_template "${TEMPLATE_DIR}/01-analyze.md" "${OUTPUT_DIR}/01-analyze.md"
92
- render_template "${TEMPLATE_DIR}/02-plan.md" "${OUTPUT_DIR}/02-plan.md"
93
- render_template "${TEMPLATE_DIR}/03-execute.md" "${OUTPUT_DIR}/03-execute.md"
94
- render_template "${TEMPLATE_DIR}/04-validate.md" "${OUTPUT_DIR}/04-validate.md"
95
-
96
- # Output the generated task_id for capture by caller
97
- echo "TASK_ID=${TASK_ID}"
98
- echo "OUTPUT_DIR=${OUTPUT_DIR}"
99
- echo "✓ APEX templates initialized: ${OUTPUT_DIR}"
100
- exit 0