@aperant/framework 0.6.3 → 0.6.5

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 (244) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +64 -10
  3. package/agents/apt-improver.md +99 -0
  4. package/agents/apt-planner.md +115 -10
  5. package/dist/__test-helpers/run-cmd.d.mts +4 -2
  6. package/dist/__test-helpers/run-cmd.d.mts.map +1 -1
  7. package/dist/__test-helpers/run-cmd.mjs +56 -15
  8. package/dist/__test-helpers/run-cmd.mjs.map +1 -1
  9. package/dist/cli/artifacts/classification.d.mts.map +1 -1
  10. package/dist/cli/artifacts/classification.mjs +10 -0
  11. package/dist/cli/artifacts/classification.mjs.map +1 -1
  12. package/dist/cli/ci-watch/lock.d.mts +53 -0
  13. package/dist/cli/ci-watch/lock.d.mts.map +1 -0
  14. package/dist/cli/ci-watch/lock.mjs +172 -0
  15. package/dist/cli/ci-watch/lock.mjs.map +1 -0
  16. package/dist/cli/ci-watch/state.d.mts +36 -0
  17. package/dist/cli/ci-watch/state.d.mts.map +1 -0
  18. package/dist/cli/ci-watch/state.mjs +103 -0
  19. package/dist/cli/ci-watch/state.mjs.map +1 -0
  20. package/dist/cli/ci-watch/stop-matrix.d.mts +58 -0
  21. package/dist/cli/ci-watch/stop-matrix.d.mts.map +1 -0
  22. package/dist/cli/ci-watch/stop-matrix.mjs +164 -0
  23. package/dist/cli/ci-watch/stop-matrix.mjs.map +1 -0
  24. package/dist/cli/cli-wrappers/ci-watch.d.mts +2 -0
  25. package/dist/cli/cli-wrappers/ci-watch.d.mts.map +1 -0
  26. package/dist/cli/cli-wrappers/ci-watch.mjs +9 -0
  27. package/dist/cli/cli-wrappers/ci-watch.mjs.map +1 -0
  28. package/dist/cli/commands/adr.d.mts +5 -0
  29. package/dist/cli/commands/adr.d.mts.map +1 -0
  30. package/dist/cli/commands/adr.mjs +228 -0
  31. package/dist/cli/commands/adr.mjs.map +1 -0
  32. package/dist/cli/commands/ci-watch.d.mts +7 -0
  33. package/dist/cli/commands/ci-watch.d.mts.map +1 -0
  34. package/dist/cli/commands/ci-watch.mjs +465 -0
  35. package/dist/cli/commands/ci-watch.mjs.map +1 -0
  36. package/dist/cli/commands/context.d.mts +7 -0
  37. package/dist/cli/commands/context.d.mts.map +1 -0
  38. package/dist/cli/commands/context.mjs +224 -0
  39. package/dist/cli/commands/context.mjs.map +1 -0
  40. package/dist/cli/commands/event.d.mts.map +1 -1
  41. package/dist/cli/commands/event.mjs +59 -24
  42. package/dist/cli/commands/event.mjs.map +1 -1
  43. package/dist/cli/commands/host-detect.d.mts +1 -1
  44. package/dist/cli/commands/host-detect.d.mts.map +1 -1
  45. package/dist/cli/commands/host-detect.mjs +30 -3
  46. package/dist/cli/commands/host-detect.mjs.map +1 -1
  47. package/dist/cli/commands/init.d.mts.map +1 -1
  48. package/dist/cli/commands/init.mjs +73 -5
  49. package/dist/cli/commands/init.mjs.map +1 -1
  50. package/dist/cli/commands/modes.d.mts +13 -0
  51. package/dist/cli/commands/modes.d.mts.map +1 -0
  52. package/dist/cli/commands/modes.mjs +220 -0
  53. package/dist/cli/commands/modes.mjs.map +1 -0
  54. package/dist/cli/commands/pr-review-audit-fixer.d.mts +41 -2
  55. package/dist/cli/commands/pr-review-audit-fixer.d.mts.map +1 -1
  56. package/dist/cli/commands/pr-review-audit-fixer.mjs +91 -14
  57. package/dist/cli/commands/pr-review-audit-fixer.mjs.map +1 -1
  58. package/dist/cli/commands/route.d.mts.map +1 -1
  59. package/dist/cli/commands/route.mjs +11 -2
  60. package/dist/cli/commands/route.mjs.map +1 -1
  61. package/dist/cli/commands/task.d.mts.map +1 -1
  62. package/dist/cli/commands/task.mjs +136 -6
  63. package/dist/cli/commands/task.mjs.map +1 -1
  64. package/dist/cli/commands/tokens.d.mts.map +1 -1
  65. package/dist/cli/commands/tokens.mjs +150 -6
  66. package/dist/cli/commands/tokens.mjs.map +1 -1
  67. package/dist/cli/commands/triage.d.mts +8 -0
  68. package/dist/cli/commands/triage.d.mts.map +1 -0
  69. package/dist/cli/commands/triage.mjs +259 -0
  70. package/dist/cli/commands/triage.mjs.map +1 -0
  71. package/dist/cli/config/post-merge-sweep.d.mts +18 -0
  72. package/dist/cli/config/post-merge-sweep.d.mts.map +1 -1
  73. package/dist/cli/config/post-merge-sweep.mjs +48 -3
  74. package/dist/cli/config/post-merge-sweep.mjs.map +1 -1
  75. package/dist/cli/consistency/registry.d.mts +11 -0
  76. package/dist/cli/consistency/registry.d.mts.map +1 -1
  77. package/dist/cli/consistency/registry.mjs +13 -0
  78. package/dist/cli/consistency/registry.mjs.map +1 -1
  79. package/dist/cli/coordination/agent-identity.d.mts +9 -0
  80. package/dist/cli/coordination/agent-identity.d.mts.map +1 -1
  81. package/dist/cli/coordination/agent-identity.mjs +11 -0
  82. package/dist/cli/coordination/agent-identity.mjs.map +1 -1
  83. package/dist/cli/coordination/event-log.d.mts +27 -0
  84. package/dist/cli/coordination/event-log.d.mts.map +1 -1
  85. package/dist/cli/coordination/event-log.mjs +72 -2
  86. package/dist/cli/coordination/event-log.mjs.map +1 -1
  87. package/dist/cli/design/frontmatter-schema.d.mts +3 -3
  88. package/dist/cli/design/frontmatter-schema.d.mts.map +1 -1
  89. package/dist/cli/design/frontmatter-schema.mjs +3 -1
  90. package/dist/cli/design/frontmatter-schema.mjs.map +1 -1
  91. package/dist/cli/dispatch.d.mts.map +1 -1
  92. package/dist/cli/dispatch.mjs +14 -1
  93. package/dist/cli/dispatch.mjs.map +1 -1
  94. package/dist/cli/gate/registry.d.mts +11 -0
  95. package/dist/cli/gate/registry.d.mts.map +1 -1
  96. package/dist/cli/gate/registry.mjs +13 -0
  97. package/dist/cli/gate/registry.mjs.map +1 -1
  98. package/dist/cli/help.d.mts.map +1 -1
  99. package/dist/cli/help.mjs +1 -0
  100. package/dist/cli/help.mjs.map +1 -1
  101. package/dist/cli/host/detect.d.mts +1 -0
  102. package/dist/cli/host/detect.d.mts.map +1 -1
  103. package/dist/cli/host/detect.mjs +5 -0
  104. package/dist/cli/host/detect.mjs.map +1 -1
  105. package/dist/cli/route/envelope.d.mts +68 -4
  106. package/dist/cli/route/envelope.d.mts.map +1 -1
  107. package/dist/cli/route/envelope.mjs +140 -103
  108. package/dist/cli/route/envelope.mjs.map +1 -1
  109. package/dist/cli/route/skill-discover.d.mts +11 -0
  110. package/dist/cli/route/skill-discover.d.mts.map +1 -1
  111. package/dist/cli/route/skill-discover.mjs +46 -1
  112. package/dist/cli/route/skill-discover.mjs.map +1 -1
  113. package/dist/cli/skill-author/contract.d.mts +20 -0
  114. package/dist/cli/skill-author/contract.d.mts.map +1 -1
  115. package/dist/cli/skill-author/contract.mjs +27 -0
  116. package/dist/cli/skill-author/contract.mjs.map +1 -1
  117. package/dist/cli/skill-author/skill-template.d.mts.map +1 -1
  118. package/dist/cli/skill-author/skill-template.mjs +4 -3
  119. package/dist/cli/skill-author/skill-template.mjs.map +1 -1
  120. package/dist/cli/task/worktree-cleanup.d.mts +9 -1
  121. package/dist/cli/task/worktree-cleanup.d.mts.map +1 -1
  122. package/dist/cli/task/worktree-cleanup.mjs +190 -9
  123. package/dist/cli/task/worktree-cleanup.mjs.map +1 -1
  124. package/dist/plugin/.claude-plugin/plugin.json +1 -1
  125. package/dist/plugin/agents/apt-planner.md +1 -1
  126. package/dist/plugin/skills/apt/SKILL.md +111 -5
  127. package/dist/plugin/skills/apt-author-skill/SKILL.md +11 -0
  128. package/dist/plugin/skills/apt-bootstrap/SKILL.md +1 -0
  129. package/dist/plugin/skills/apt-classify/SKILL.md +1 -0
  130. package/dist/plugin/skills/apt-close-task/SKILL.md +1 -0
  131. package/dist/plugin/skills/apt-create-docs/SKILL.md +1 -0
  132. package/dist/plugin/skills/apt-debug/SKILL.md +2 -0
  133. package/dist/plugin/skills/apt-design/SKILL.md +2 -0
  134. package/dist/plugin/skills/apt-discuss/SKILL.md +2 -0
  135. package/dist/plugin/skills/apt-docs/SKILL.md +2 -0
  136. package/dist/plugin/skills/apt-execute/SKILL.md +1 -0
  137. package/dist/plugin/skills/apt-mockup/SKILL.md +2 -0
  138. package/dist/plugin/skills/apt-pause/SKILL.md +1 -0
  139. package/dist/plugin/skills/apt-personas/SKILL.md +1 -0
  140. package/dist/plugin/skills/apt-plan/SKILL.md +2 -0
  141. package/dist/plugin/skills/apt-pr-review/SKILL.md +1 -0
  142. package/dist/plugin/skills/apt-quick/SKILL.md +2 -0
  143. package/dist/plugin/skills/apt-resume/SKILL.md +1 -0
  144. package/dist/plugin/skills/apt-review/SKILL.md +1 -0
  145. package/dist/plugin/skills/apt-roadmap/SKILL.md +1 -0
  146. package/dist/plugin/skills/apt-roundtable/SKILL.md +2 -0
  147. package/dist/plugin/skills/apt-run/SKILL.md +1 -0
  148. package/dist/plugin/skills/apt-scan/SKILL.md +1 -0
  149. package/dist/plugin/skills/apt-setup/SKILL.md +1 -0
  150. package/dist/plugin/skills/apt-ship/SKILL.md +6 -5
  151. package/dist/plugin/skills/apt-stress-test/SKILL.md +1 -0
  152. package/dist/plugin/skills/apt-terminal/SKILL.md +1 -0
  153. package/dist/plugin/skills/apt-update/SKILL.md +5 -0
  154. package/dist/plugin/skills/apt-verify/SKILL.md +1 -0
  155. package/dist/plugin/skills/apt-verify-proof/SKILL.md +1 -0
  156. package/dist/types/config.d.ts +85 -0
  157. package/dist/types/config.d.ts.map +1 -1
  158. package/package.json +125 -122
  159. package/prompts/coder.md +2 -0
  160. package/prompts/planner.md +12 -0
  161. package/prompts/spec_writer.md +9 -0
  162. package/skills/apt/SKILL.md +112 -5
  163. package/skills/apt-author-skill/SKILL.md +11 -0
  164. package/skills/apt-bootstrap/SKILL.md +1 -0
  165. package/skills/apt-classify/SKILL.md +1 -0
  166. package/skills/apt-close-task/SKILL.md +33 -1
  167. package/skills/apt-create-docs/SKILL.md +1 -0
  168. package/skills/apt-debug/SKILL.md +41 -6
  169. package/skills/apt-debug/appendices/diagnose-discipline.md +119 -0
  170. package/skills/apt-design/SKILL.md +2 -0
  171. package/skills/apt-diagram/SKILL.md +342 -0
  172. package/skills/apt-diagram/appendices/design-discipline.md +97 -0
  173. package/skills/apt-discuss/SKILL.md +27 -0
  174. package/skills/apt-discuss/appendices/grill-discipline.md +104 -0
  175. package/skills/apt-discuss/appendices/zoom-out-helper.md +79 -0
  176. package/skills/apt-docs/SKILL.md +2 -0
  177. package/skills/apt-execute/SKILL.md +49 -5
  178. package/skills/apt-execute/appendices/tdd-mode.md +107 -0
  179. package/skills/apt-improve/DEEPENING.md +84 -0
  180. package/skills/apt-improve/INTERFACE-DESIGN.md +97 -0
  181. package/skills/apt-improve/LANGUAGE.md +104 -0
  182. package/skills/apt-improve/SKILL.md +141 -0
  183. package/skills/apt-mockup/SKILL.md +2 -0
  184. package/skills/apt-pause/SKILL.md +1 -0
  185. package/skills/apt-personas/SKILL.md +1 -0
  186. package/skills/apt-plan/SKILL.md +149 -4
  187. package/skills/apt-planner.md +42 -1
  188. package/skills/apt-pr-review/SKILL.md +47 -16
  189. package/skills/apt-prototype/LOGIC.md +109 -0
  190. package/skills/apt-prototype/SKILL.md +143 -0
  191. package/skills/apt-prototype/UI.md +90 -0
  192. package/skills/apt-quick/SKILL.md +32 -0
  193. package/skills/apt-resume/SKILL.md +1 -0
  194. package/skills/apt-review/SKILL.md +3 -0
  195. package/skills/apt-roadmap/SKILL.md +1 -0
  196. package/skills/apt-roundtable/SKILL.md +2 -0
  197. package/skills/apt-run/SKILL.md +33 -4
  198. package/skills/apt-scan/SKILL.md +1 -0
  199. package/skills/apt-setup/SKILL.md +129 -2
  200. package/skills/apt-ship/SKILL.md +52 -4
  201. package/skills/apt-stress-test/SKILL.md +1 -0
  202. package/skills/apt-terminal/SKILL.md +1 -0
  203. package/skills/apt-triage/AGENT-BRIEF.md +84 -0
  204. package/skills/apt-triage/OUT-OF-SCOPE.md +75 -0
  205. package/skills/apt-triage/SKILL.md +169 -0
  206. package/skills/apt-update/SKILL.md +3 -0
  207. package/skills/apt-verify/SKILL.md +4 -0
  208. package/skills/apt-verify-proof/SKILL.md +4 -0
  209. package/skills/apt-watch-ci/SKILL.md +163 -0
  210. package/skills/apt-zoom-out/SKILL.md +130 -0
  211. package/src/cli/artifacts/classification.mjs +10 -0
  212. package/src/cli/ci-watch/lock.mjs +178 -0
  213. package/src/cli/ci-watch/state.mjs +103 -0
  214. package/src/cli/ci-watch/stop-matrix.mjs +181 -0
  215. package/src/cli/cli-wrappers/ci-watch.mjs +9 -0
  216. package/src/cli/commands/adr.mjs +243 -0
  217. package/src/cli/commands/ci-watch.mjs +503 -0
  218. package/src/cli/commands/context.mjs +244 -0
  219. package/src/cli/commands/event.mjs +63 -24
  220. package/src/cli/commands/host-detect.mjs +33 -7
  221. package/src/cli/commands/init.mjs +83 -5
  222. package/src/cli/commands/modes.mjs +215 -0
  223. package/src/cli/commands/pr-review-audit-fixer.mjs +95 -16
  224. package/src/cli/commands/route.mjs +11 -2
  225. package/src/cli/commands/task.mjs +152 -18
  226. package/src/cli/commands/tokens.mjs +157 -6
  227. package/src/cli/commands/triage.mjs +277 -0
  228. package/src/cli/config/post-merge-sweep.mjs +49 -3
  229. package/src/cli/consistency/registry.mjs +14 -0
  230. package/src/cli/coordination/agent-identity.mjs +12 -0
  231. package/src/cli/coordination/event-log.mjs +73 -2
  232. package/src/cli/design/frontmatter-schema.mjs +3 -1
  233. package/src/cli/dispatch.mjs +15 -1
  234. package/src/cli/gate/registry.mjs +14 -0
  235. package/src/cli/help.mjs +1 -0
  236. package/src/cli/host/detect.mjs +5 -0
  237. package/src/cli/route/envelope.mjs +140 -106
  238. package/src/cli/route/skill-discover.mjs +46 -1
  239. package/src/cli/skill-author/contract.mjs +29 -0
  240. package/src/cli/skill-author/skill-template.mjs +4 -3
  241. package/src/cli/task/worktree-cleanup.mjs +191 -9
  242. package/templates/adr-format.md +56 -0
  243. package/templates/config.json +4 -0
  244. package/templates/context-format.md +34 -0
@@ -0,0 +1,259 @@
1
+ /**
2
+ * commands/triage.mjs — `apt-tools triage` (Pocock adoption ST-10, AC9).
3
+ *
4
+ * 5-state triage state machine with extensible metadata for v2 OSS
5
+ * contributor primitives. Backend-configured: writes to
6
+ * `.aperant/tasks/{task-id}/triage.json` by default (local-only); other
7
+ * backends (github-issues, app-inbox) ship as not-implemented stubs.
8
+ *
9
+ * Subcommands:
10
+ * apt-tools triage init <project-dir> --id <task-id> [--category bug|enhancement] [--extra '{...}']
11
+ * apt-tools triage transition <project-dir> --id <task-id> --to <state> [--reason <text>] [--by user|agent]
12
+ * apt-tools triage get <project-dir> --id <task-id>
13
+ *
14
+ * States: needs-triage | needs-info | ready-for-agent | ready-for-human | wontfix
15
+ * Categories: bug | enhancement
16
+ *
17
+ * Fast Path Guarantee (ID-05): QUICK-routed tasks NEVER enter triage.
18
+ * The CLI does NOT enforce this directly — the apt:triage SKILL.md
19
+ * routes around QUICK tasks before invoking the CLI. The CLI is the
20
+ * mechanical state-machine surface; the routing is the skill body's job.
21
+ */
22
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
23
+ import { dirname, join, resolve } from 'node:path';
24
+ import { parseFlags } from '../util/args.mjs';
25
+ import { err, exitWith, ok } from '../util/result.mjs';
26
+ const STATES = ['needs-triage', 'needs-info', 'ready-for-agent', 'ready-for-human', 'wontfix'];
27
+ const CATEGORIES = ['bug', 'enhancement'];
28
+ // The 8 valid transitions per spec.md AC9. Anything else is rejected.
29
+ const VALID_TRANSITIONS = new Set([
30
+ 'needs-triage->needs-info',
31
+ 'needs-triage->ready-for-agent',
32
+ 'needs-triage->ready-for-human',
33
+ 'needs-triage->wontfix',
34
+ 'needs-info->ready-for-agent',
35
+ 'needs-info->ready-for-human',
36
+ 'needs-info->wontfix',
37
+ 'needs-info->needs-triage',
38
+ ]);
39
+ const BACKENDS = new Set(['local-only', 'github-issues', 'app-inbox']);
40
+ /**
41
+ * Read .aperant/config.json and extract task_tracking.backend.
42
+ * Defaults to 'local-only' if the file or the key is missing.
43
+ *
44
+ * @param {string} absProjectDir
45
+ * @returns {string}
46
+ */
47
+ function readBackend(absProjectDir) {
48
+ const configPath = join(absProjectDir, '.aperant', 'config.json');
49
+ if (!existsSync(configPath))
50
+ return 'local-only';
51
+ try {
52
+ const parsed = JSON.parse(readFileSync(configPath, 'utf-8'));
53
+ const backend = parsed?.task_tracking?.backend;
54
+ if (typeof backend === 'string' && BACKENDS.has(backend))
55
+ return backend;
56
+ return 'local-only';
57
+ }
58
+ catch {
59
+ return 'local-only';
60
+ }
61
+ }
62
+ /**
63
+ * Triage record file path.
64
+ *
65
+ * @param {string} absProjectDir
66
+ * @param {string} taskId
67
+ */
68
+ function triagePath(absProjectDir, taskId) {
69
+ return join(absProjectDir, '.aperant', 'tasks', taskId, 'triage.json');
70
+ }
71
+ /**
72
+ * Read the current triage record, or null if it doesn't exist.
73
+ *
74
+ * @param {string} path
75
+ */
76
+ function readTriage(path) {
77
+ if (!existsSync(path))
78
+ return null;
79
+ try {
80
+ return JSON.parse(readFileSync(path, 'utf-8'));
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ /**
87
+ * Write a triage record.
88
+ *
89
+ * @param {string} path
90
+ * @param {object} record
91
+ */
92
+ function writeTriage(path, record) {
93
+ const dir = dirname(path);
94
+ if (!existsSync(dir))
95
+ mkdirSync(dir, { recursive: true });
96
+ writeFileSync(path, `${JSON.stringify(record, null, 2)}\n`);
97
+ }
98
+ /**
99
+ * Apply the backend mirror step. local-only writes to disk; the other
100
+ * backends return a not-implemented envelope so callers can handle the
101
+ * stub gracefully.
102
+ *
103
+ * @param {string} backend
104
+ * @param {string} absProjectDir
105
+ * @param {string} taskId
106
+ * @param {object} record
107
+ * @returns {null | { status: 'not-implemented', backend: string, v2_issue: string }}
108
+ */
109
+ function mirrorToBackend(backend, absProjectDir, taskId, record) {
110
+ if (backend === 'local-only') {
111
+ writeTriage(triagePath(absProjectDir, taskId), record);
112
+ return null;
113
+ }
114
+ // v1 stubs: github-issues and app-inbox return not-implemented.
115
+ return { status: 'not-implemented', backend, v2_issue: '#TBD' };
116
+ }
117
+ /**
118
+ * Entry: `apt-tools triage <subcommand> <project-dir> [flags]`.
119
+ */
120
+ export function cmdTriage(subcommand, projectDir, extraArgs) {
121
+ if (!subcommand || !['init', 'transition', 'get'].includes(subcommand)) {
122
+ return err('Usage: apt-tools triage <init|transition|get> <project-dir> --id <task-id> [...]', 1, { command: 'triage' });
123
+ }
124
+ if (!projectDir) {
125
+ return err('project-dir is required', 1, { command: `triage-${subcommand}` });
126
+ }
127
+ const absProjectDir = resolve(projectDir);
128
+ if (!existsSync(absProjectDir)) {
129
+ return err(`project directory not found: ${absProjectDir}`, 1, {
130
+ command: `triage-${subcommand}`,
131
+ });
132
+ }
133
+ const flags = parseFlags(extraArgs ?? []);
134
+ const taskId = flags.get('id');
135
+ if (typeof taskId !== 'string' || taskId.trim() === '') {
136
+ return err('--id <task-id> is required', 1, { command: `triage-${subcommand}` });
137
+ }
138
+ const TASK_ID_RE = /^[0-9]{2}-[0-9]{2}-[0-9]{2}_[a-z0-9-]+-[a-z0-9]{4}$/;
139
+ if (!TASK_ID_RE.test(taskId)) {
140
+ return err(`--id must match pattern <YY-MM-DD_slug-XXXX> (e.g. 24-01-15_fix-login-a3b2)`, 1, {
141
+ command: `triage-${subcommand}`,
142
+ });
143
+ }
144
+ const backend = readBackend(absProjectDir);
145
+ if (subcommand === 'init') {
146
+ // Optional --category, optional --extra (JSON string).
147
+ const category = flags.get('category');
148
+ if (category !== undefined && !CATEGORIES.includes(String(category))) {
149
+ return err(`--category must be one of: ${CATEGORIES.join(' | ')}`, 1, {
150
+ command: 'triage-init',
151
+ });
152
+ }
153
+ let extra = {};
154
+ const extraRaw = flags.get('extra');
155
+ if (typeof extraRaw === 'string' && extraRaw.length > 0) {
156
+ try {
157
+ const parsed = JSON.parse(extraRaw);
158
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
159
+ extra = parsed;
160
+ }
161
+ else {
162
+ return err('--extra must be a JSON object string', 1, { command: 'triage-init' });
163
+ }
164
+ }
165
+ catch (e) {
166
+ return err(`--extra is not valid JSON: ${e.message}`, 1, { command: 'triage-init' });
167
+ }
168
+ }
169
+ const existing = readTriage(triagePath(absProjectDir, taskId));
170
+ if (existing) {
171
+ return err(`triage record already exists for ${taskId}`, 1, {
172
+ command: 'triage-init',
173
+ current_state: existing.state,
174
+ });
175
+ }
176
+ const record = {
177
+ task_id: taskId,
178
+ state: 'needs-triage',
179
+ category: typeof category === 'string' ? category : null,
180
+ transitions: [],
181
+ extra,
182
+ };
183
+ const stub = mirrorToBackend(backend, absProjectDir, taskId, record);
184
+ if (stub)
185
+ return exitWith({ command: 'triage-init', ...stub }, 0);
186
+ return ok({ status: 'ok', command: 'triage-init', backend, record });
187
+ }
188
+ if (subcommand === 'transition') {
189
+ const toState = flags.get('to');
190
+ if (typeof toState !== 'string' || !STATES.includes(toState)) {
191
+ return err(`--to <state> is required (one of: ${STATES.join(' | ')})`, 1, {
192
+ command: 'triage-transition',
193
+ });
194
+ }
195
+ // SEC-003: cap --reason to 1000 chars to prevent unbounded disk writes.
196
+ const rawReason = flags.get('reason');
197
+ const reason = typeof rawReason === 'string' ? rawReason.slice(0, 1000) : null;
198
+ const by = typeof flags.get('by') === 'string' && ['user', 'agent'].includes(String(flags.get('by')))
199
+ ? String(flags.get('by'))
200
+ : 'agent';
201
+ const current = readTriage(triagePath(absProjectDir, taskId));
202
+ if (!current) {
203
+ return err(`no triage record for ${taskId} — run \`triage init\` first`, 1, {
204
+ command: 'triage-transition',
205
+ });
206
+ }
207
+ const from = current.state;
208
+ const transitionKey = `${from}->${toState}`;
209
+ if (!VALID_TRANSITIONS.has(transitionKey)) {
210
+ return exitWith({
211
+ status: 'rejected',
212
+ command: 'triage-transition',
213
+ reason: 'invalid-transition',
214
+ from,
215
+ to: toState,
216
+ valid_from_current: STATES.filter((s) => VALID_TRANSITIONS.has(`${from}->${s}`)),
217
+ }, 1);
218
+ }
219
+ const transition = {
220
+ from,
221
+ to: toState,
222
+ at: new Date().toISOString(),
223
+ by,
224
+ reason,
225
+ };
226
+ // SEC-002: Only carry known fields forward — do NOT spread the full
227
+ // disk-backed `current` object, which could contain arbitrary unknown
228
+ // keys from a hand-edited triage.json that would silently propagate.
229
+ const next = {
230
+ task_id: current.task_id,
231
+ state: toState,
232
+ category: current.category,
233
+ extra: current.extra ?? {},
234
+ transitions: [...(current.transitions || []), transition],
235
+ };
236
+ const stub = mirrorToBackend(backend, absProjectDir, taskId, next);
237
+ if (stub)
238
+ return exitWith({ command: 'triage-transition', ...stub }, 0);
239
+ return ok({
240
+ status: 'ok',
241
+ command: 'triage-transition',
242
+ backend,
243
+ transition,
244
+ record: next,
245
+ });
246
+ }
247
+ // subcommand === 'get'
248
+ const path = triagePath(absProjectDir, taskId);
249
+ const record = readTriage(path);
250
+ if (!record) {
251
+ return exitWith({ status: 'not-found', command: 'triage-get', task_id: taskId, file: path }, 0);
252
+ }
253
+ return ok({ status: 'ok', command: 'triage-get', record, backend });
254
+ }
255
+ // Exported for testing.
256
+ export const _STATES = STATES;
257
+ export const _CATEGORIES = CATEGORIES;
258
+ export const _VALID_TRANSITIONS = VALID_TRANSITIONS;
259
+ //# sourceMappingURL=triage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage.mjs","sourceRoot":"","sources":["../../../src/cli/commands/triage.mjs"],"names":[],"mappings":"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"}
@@ -10,6 +10,14 @@ export function readShippedCandidates(projectRoot: any): {
10
10
  pr_url: any;
11
11
  worktree_path: any;
12
12
  }[] | null;
13
+ /**
14
+ * Pure preflight — returns the integer length of state.pending_narration[].
15
+ * Returns 0 on read/parse failure or when the ledger is absent (the banner
16
+ * is suppressed in that case).
17
+ *
18
+ * @internal
19
+ */
20
+ export function readPendingNarrationCount(projectRoot: any): number;
13
21
  /**
14
22
  * Returns true if the cooldown lock is "fresh" (last sweep too recent).
15
23
  * Lock content is `{pid}:{ms-since-epoch}` but we only consult mtime.
@@ -66,6 +74,14 @@ export function spawnDetachedSweep(projectRoot: any, options?: {}): number | nul
66
74
  export function maybeSweepShippedMergedTasks(projectRoot: any, command: any, options?: {}): {
67
75
  kicked: boolean;
68
76
  reason: string;
77
+ pending_narration?: undefined;
78
+ deferred?: undefined;
79
+ pid?: undefined;
80
+ candidate_count?: undefined;
81
+ } | {
82
+ kicked: boolean;
83
+ reason: string;
84
+ pending_narration: number;
69
85
  deferred?: undefined;
70
86
  pid?: undefined;
71
87
  candidate_count?: undefined;
@@ -73,6 +89,7 @@ export function maybeSweepShippedMergedTasks(projectRoot: any, command: any, opt
73
89
  kicked: boolean;
74
90
  reason: string;
75
91
  deferred: any[];
92
+ pending_narration?: undefined;
76
93
  pid?: undefined;
77
94
  candidate_count?: undefined;
78
95
  } | {
@@ -81,5 +98,6 @@ export function maybeSweepShippedMergedTasks(projectRoot: any, command: any, opt
81
98
  pid: any;
82
99
  candidate_count: number;
83
100
  deferred: any[];
101
+ pending_narration?: undefined;
84
102
  };
85
103
  //# sourceMappingURL=post-merge-sweep.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"post-merge-sweep.d.mts","sourceRoot":"","sources":["../../../src/cli/config/post-merge-sweep.mjs"],"names":[],"mappings":"AAgEA;;;;;;GAMG;AACH;;;;WAmBC;AAED;;;;;GAKG;AACH,8EAQC;AAED;;;;;;;GAOG;AACH,wDAYC;AAED;;;;;;GAMG;AACH;;;EAWC;AAcD;;;;;;;GAOG;AACH,kFAiBC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;;;;;;;;EAyEC"}
1
+ {"version":3,"file":"post-merge-sweep.d.mts","sourceRoot":"","sources":["../../../src/cli/config/post-merge-sweep.mjs"],"names":[],"mappings":"AA4EA;;;;;;GAMG;AACH;;;;WAmBC;AAED;;;;;;GAMG;AACH,oEAUC;AAED;;;;;GAKG;AACH,8EAQC;AAED;;;;;;;GAOG;AACH,wDAYC;AAED;;;;;;GAMG;AACH;;;EAWC;AAcD;;;;;;;GAOG;AACH,kFAiBC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwFC"}
@@ -2,6 +2,16 @@
2
2
  * post-merge-sweep.mjs — dispatch-time passive sweeper for stuck
3
3
  * `shipped-pending-merge` tasks (C57 Piece 2).
4
4
  *
5
+ * **Bookkeeping-only contract.** This hook runs the deterministic
6
+ * close half of the post-merge handoff: poll `gh pr view`, flip
7
+ * lifecycle_phase from `shipped-pending-merge` to `completed` via
8
+ * the same `task close` path, strip per-PR authorship overrides,
9
+ * and append a `pending_narration[]` ledger row. The LLM-side
10
+ * narration work (registry sync + ROADMAP prose) is explicitly
11
+ * out of scope here — the user drains the ledger via
12
+ * `/apt:close-task --narrate-only` (see packages/framework/skills/
13
+ * apt-close-task/SKILL.md §4) which is where those side effects belong.
14
+ *
5
15
  * AI agents ship a PR and walk away. Tasks then rot in
6
16
  * `shipped-pending-merge` because nothing automatic invokes
7
17
  * `apt-tools task close-merged`. This hook runs on every `apt-tools`
@@ -11,8 +21,10 @@
11
21
  * whose PRs have terminally landed.
12
22
  *
13
23
  * Non-blocking: never fails the command, never mutates exit code,
14
- * never throws. Single stderr line on actual sweep kick (not on
15
- * every dispatch).
24
+ * never throws. Two stderr lines max per dispatch: the
25
+ * `Auto-sweeping N pending PR(s)` line on actual sweep kick, plus
26
+ * the `Post-merge narration pending` banner when the ledger has
27
+ * un-drained rows. Both lines are gated by `APT_SUPPRESS_MERGE_SWEEP=1`.
16
28
  *
17
29
  * Silenced by `APT_SUPPRESS_MERGE_SWEEP=1`. Skipped when
18
30
  * `APT_INTERNAL_MERGE_SWEEP=1` is set in env (recursion guard for
@@ -91,6 +103,26 @@ export function readShippedCandidates(projectRoot) {
91
103
  }
92
104
  return candidates.length === 0 ? null : candidates;
93
105
  }
106
+ /**
107
+ * Pure preflight — returns the integer length of state.pending_narration[].
108
+ * Returns 0 on read/parse failure or when the ledger is absent (the banner
109
+ * is suppressed in that case).
110
+ *
111
+ * @internal
112
+ */
113
+ export function readPendingNarrationCount(projectRoot) {
114
+ const statePath = join(projectRoot, '.aperant', 'state.json');
115
+ if (!existsSync(statePath))
116
+ return 0;
117
+ try {
118
+ const state = JSON.parse(readFileSync(statePath, 'utf-8'));
119
+ const ledger = state?.pending_narration;
120
+ return Array.isArray(ledger) ? ledger.length : 0;
121
+ }
122
+ catch {
123
+ return 0;
124
+ }
125
+ }
94
126
  /**
95
127
  * Returns true if the cooldown lock is "fresh" (last sweep too recent).
96
128
  * Lock content is `{pid}:{ms-since-epoch}` but we only consult mtime.
@@ -222,9 +254,22 @@ export function maybeSweepShippedMergedTasks(projectRoot, command, options = {})
222
254
  if (!existsSync(join(root, '.aperant'))) {
223
255
  return { kicked: false, reason: 'no-aperant-dir' };
224
256
  }
257
+ // Narration-pending banner — fires on EVERY dispatch cycle when
258
+ // the ledger has un-drained rows, regardless of whether a sweep is
259
+ // kicked below. Cheap read, no spawn, no cooldown. Same suppression
260
+ // env as the sweep banner (APT_SUPPRESS_MERGE_SWEEP=1 hides both).
261
+ const pendingNarration = readPendingNarrationCount(root);
262
+ if (pendingNarration > 0) {
263
+ try {
264
+ process.stderr.write(`[apt-tools] Post-merge narration pending (${pendingNarration}) — run /apt:close-task --narrate-only to refresh features registry + ROADMAP.\n`);
265
+ }
266
+ catch {
267
+ /* stderr write failure is non-fatal */
268
+ }
269
+ }
225
270
  const candidates = readShippedCandidates(root);
226
271
  if (!candidates) {
227
- return { kicked: false, reason: 'no-candidates' };
272
+ return { kicked: false, reason: 'no-candidates', pending_narration: pendingNarration };
228
273
  }
229
274
  const lockPath = join(root, '.aperant', '.merge-sweep.lock');
230
275
  const cooldownMs = options.cooldownMs ?? getCooldownMs();
@@ -1 +1 @@
1
- {"version":3,"file":"post-merge-sweep.mjs","sourceRoot":"","sources":["../../../src/cli/config/post-merge-sweep.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"post-merge-sweep.mjs","sourceRoot":"","sources":["../../../src/cli/config/post-merge-sweep.mjs"],"names":[],"mappings":"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"}
@@ -24,4 +24,15 @@ export function getRule(id: any): any;
24
24
  * @internal
25
25
  */
26
26
  export function __resetRegistryForTests(): void;
27
+ /**
28
+ * Test-only helper — uniformly-named alias for the in-process cmd harness
29
+ * (run-cmd.mjs). Built-in rules self-register via the `rules/index.mjs`
30
+ * barrel at module-import time, which ESM evaluates exactly once per
31
+ * process — so the harness deliberately does NOT call this by default
32
+ * (clearing here would leave subsequent cmd invocations looking at an empty
33
+ * registry). Tests that need an empty registry import this name explicitly.
34
+ *
35
+ * @internal
36
+ */
37
+ export function __resetCaches(): void;
27
38
  //# sourceMappingURL=registry.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.mts","sourceRoot":"","sources":["../../../src/cli/consistency/registry.mjs"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,6CAuBC;AAED;;;;;GAKG;AACH,iDAIC;AAED;;;;GAIG;AACH,sCAEC;AAED;;;;GAIG;AACH,gDAEC"}
1
+ {"version":3,"file":"registry.d.mts","sourceRoot":"","sources":["../../../src/cli/consistency/registry.mjs"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,6CAuBC;AAED;;;;;GAKG;AACH,iDAIC;AAED;;;;GAIG;AACH,sCAEC;AAED;;;;GAIG;AACH,gDAEC;AAED;;;;;;;;;GASG;AACH,sCAEC"}
@@ -76,4 +76,17 @@ export function getRule(id) {
76
76
  export function __resetRegistryForTests() {
77
77
  registry.clear();
78
78
  }
79
+ /**
80
+ * Test-only helper — uniformly-named alias for the in-process cmd harness
81
+ * (run-cmd.mjs). Built-in rules self-register via the `rules/index.mjs`
82
+ * barrel at module-import time, which ESM evaluates exactly once per
83
+ * process — so the harness deliberately does NOT call this by default
84
+ * (clearing here would leave subsequent cmd invocations looking at an empty
85
+ * registry). Tests that need an empty registry import this name explicitly.
86
+ *
87
+ * @internal
88
+ */
89
+ export function __resetCaches() {
90
+ registry.clear();
91
+ }
79
92
  //# sourceMappingURL=registry.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.mjs","sourceRoot":"","sources":["../../../src/cli/consistency/registry.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;AAE1B;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAI;IAChC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACxD,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACpE,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACd,gBAAgB,IAAI,CAAC,EAAE,8CAA8C,IAAI,CAAC,QAAQ,GAAG,CACrF,CAAA;IACF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,EAAE,qCAAqC,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,EAAE,iCAAiC,CAAC,CAAA;IAC1E,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAC3B,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAA;IACtB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE;IACzB,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"registry.mjs","sourceRoot":"","sources":["../../../src/cli/consistency/registry.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;AAE1B;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAI;IAChC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACxD,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACpE,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACd,gBAAgB,IAAI,CAAC,EAAE,8CAA8C,IAAI,CAAC,QAAQ,GAAG,CACrF,CAAA;IACF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,EAAE,qCAAqC,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,EAAE,iCAAiC,CAAC,CAAA;IAC1E,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAC3B,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAA;IACtB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE;IACzB,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,CAAA;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAA;AACjB,CAAC"}
@@ -19,4 +19,13 @@ export function getAgentIdentity(projectDir: any): any;
19
19
  * @internal
20
20
  */
21
21
  export function __resetAgentIdentityCacheForTests(): void;
22
+ /**
23
+ * Test-only helper — uniformly-named alias for the in-process cmd harness
24
+ * (run-cmd.mjs), which imports `__resetCaches` from each cache host with a
25
+ * single consistent name. Behaviour is identical to
26
+ * `__resetAgentIdentityCacheForTests`.
27
+ *
28
+ * @internal
29
+ */
30
+ export function __resetCaches(): void;
22
31
  //# sourceMappingURL=agent-identity.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-identity.d.mts","sourceRoot":"","sources":["../../../src/cli/coordination/agent-identity.mjs"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,wDAGC;AAsCD;;;;;;GAMG;AACH,uDAWC;AAED;;;;;;GAMG;AACH,0DAEC"}
1
+ {"version":3,"file":"agent-identity.d.mts","sourceRoot":"","sources":["../../../src/cli/coordination/agent-identity.mjs"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,wDAGC;AAsCD;;;;;;GAMG;AACH,uDAWC;AAED;;;;;;GAMG;AACH,0DAEC;AAED;;;;;;;GAOG;AACH,sCAEC"}
@@ -91,4 +91,15 @@ export function getAgentIdentity(projectDir) {
91
91
  export function __resetAgentIdentityCacheForTests() {
92
92
  cache.clear();
93
93
  }
94
+ /**
95
+ * Test-only helper — uniformly-named alias for the in-process cmd harness
96
+ * (run-cmd.mjs), which imports `__resetCaches` from each cache host with a
97
+ * single consistent name. Behaviour is identical to
98
+ * `__resetAgentIdentityCacheForTests`.
99
+ *
100
+ * @internal
101
+ */
102
+ export function __resetCaches() {
103
+ cache.clear();
104
+ }
94
105
  //# sourceMappingURL=agent-identity.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-identity.mjs","sourceRoot":"","sources":["../../../src/cli/coordination/agent-identity.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-identity.mjs","sourceRoot":"","sources":["../../../src/cli/coordination/agent-identity.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,yEAAyE;AACzE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;AAEvB;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAU;IAC3C,MAAM,EAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IACrC,OAAO,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAA;AAC5E,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,WAAW;IACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;IACvD,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAC7C,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,YAAY,CACX,WAAW,EACX,GAAG,EAAE;QACJ,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;gBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC9B,IAAI,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAA;gBACvB,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,gCAAgC;YACjC,CAAC;QACF,CAAC;QACD,IAAI,GAAG,OAAO,GAAG,CAAC,CAAA;QAClB,eAAe,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC,EACD,EAAE,WAAW,EAAE,UAAU,EAAE,CAC3B,CAAA;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAU;IAC1C,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAChD,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAEvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;IACvB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAA;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,CAAA;IAC5D,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;IAC9D,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC/B,OAAO,QAAQ,CAAA;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC;IAChD,KAAK,CAAC,KAAK,EAAE,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa;IAC5B,KAAK,CAAC,KAAK,EAAE,CAAA;AACd,CAAC"}
@@ -34,4 +34,31 @@ export function appendLifecycleEvent(projectRoot: any, evt: any, now?: Date): {
34
34
  * @internal
35
35
  */
36
36
  export function readLifecycleEventsForDay(projectRoot: any, day?: string): any[];
37
+ /**
38
+ * Read events for a task across the today + yesterday UTC day buckets,
39
+ * sorted ascending by `t`. Optionally filtered to events whose `op` starts
40
+ * with `opPrefix`. Covers tasks that span a UTC day boundary without
41
+ * globbing the whole `.aperant/events/` directory.
42
+ *
43
+ * Read-only — does NOT mutate state. Per the original `@internal` policy
44
+ * this module is reached via `store.appendEvent` for WRITES, but read-only
45
+ * helpers like this one (and `readLifecycleEventsForDay`) are direct
46
+ * imports because there is no state to coordinate (PR #115 review finding
47
+ * FIT-001 — comment updated accordingly).
48
+ *
49
+ * @internal
50
+ */
51
+ export function readTaskEventsOverDays(projectRoot: any, taskId: any, opPrefix?: null): any[];
52
+ /**
53
+ * Find the most recent event matching `taskId`, optionally filtered to events
54
+ * whose `op` starts with `opPrefix`. Looks at today's bucket first; only
55
+ * reads yesterday's bucket on a today-miss — keeps the common case to a
56
+ * single file read.
57
+ *
58
+ * Used by R6 telemetry to compute `elapsed_ms` between lifecycle transitions
59
+ * (roundtable 2026-05-14). Returns null when no matching event is found.
60
+ *
61
+ * @internal
62
+ */
63
+ export function findMostRecentEventForTask(projectRoot: any, taskId: any, opPrefix?: null): any;
37
64
  //# sourceMappingURL=event-log.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-log.d.mts","sourceRoot":"","sources":["../../../src/cli/coordination/event-log.mjs"],"names":[],"mappings":"AAgCA;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;;;;;;EAgBC;AAED;;;;;GAKG;AACH,iFAeC"}
1
+ {"version":3,"file":"event-log.d.mts","sourceRoot":"","sources":["../../../src/cli/coordination/event-log.mjs"],"names":[],"mappings":"AA2CA;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;;;;;;EAgBC;AAED;;;;;GAKG;AACH,iFAeC;AAED;;;;;;;;;;;;;GAaG;AACH,8FAiBC;AAED;;;;;;;;;;GAUG;AACH,gGAcC"}