@aperant/framework 0.6.4 → 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.
- package/CHANGELOG.md +38 -0
- package/README.md +64 -10
- package/agents/apt-improver.md +99 -0
- package/agents/apt-planner.md +115 -10
- package/dist/__test-helpers/run-cmd.d.mts +4 -2
- package/dist/__test-helpers/run-cmd.d.mts.map +1 -1
- package/dist/__test-helpers/run-cmd.mjs +56 -15
- package/dist/__test-helpers/run-cmd.mjs.map +1 -1
- package/dist/cli/ci-watch/lock.d.mts +53 -0
- package/dist/cli/ci-watch/lock.d.mts.map +1 -0
- package/dist/cli/ci-watch/lock.mjs +172 -0
- package/dist/cli/ci-watch/lock.mjs.map +1 -0
- package/dist/cli/ci-watch/state.d.mts +36 -0
- package/dist/cli/ci-watch/state.d.mts.map +1 -0
- package/dist/cli/ci-watch/state.mjs +103 -0
- package/dist/cli/ci-watch/state.mjs.map +1 -0
- package/dist/cli/ci-watch/stop-matrix.d.mts +58 -0
- package/dist/cli/ci-watch/stop-matrix.d.mts.map +1 -0
- package/dist/cli/ci-watch/stop-matrix.mjs +164 -0
- package/dist/cli/ci-watch/stop-matrix.mjs.map +1 -0
- package/dist/cli/cli-wrappers/ci-watch.d.mts +2 -0
- package/dist/cli/cli-wrappers/ci-watch.d.mts.map +1 -0
- package/dist/cli/cli-wrappers/ci-watch.mjs +9 -0
- package/dist/cli/cli-wrappers/ci-watch.mjs.map +1 -0
- package/dist/cli/commands/adr.d.mts +5 -0
- package/dist/cli/commands/adr.d.mts.map +1 -0
- package/dist/cli/commands/adr.mjs +228 -0
- package/dist/cli/commands/adr.mjs.map +1 -0
- package/dist/cli/commands/ci-watch.d.mts +7 -0
- package/dist/cli/commands/ci-watch.d.mts.map +1 -0
- package/dist/cli/commands/ci-watch.mjs +465 -0
- package/dist/cli/commands/ci-watch.mjs.map +1 -0
- package/dist/cli/commands/context.d.mts +7 -0
- package/dist/cli/commands/context.d.mts.map +1 -0
- package/dist/cli/commands/context.mjs +224 -0
- package/dist/cli/commands/context.mjs.map +1 -0
- package/dist/cli/commands/event.d.mts.map +1 -1
- package/dist/cli/commands/event.mjs +59 -24
- package/dist/cli/commands/event.mjs.map +1 -1
- package/dist/cli/commands/host-detect.d.mts +1 -1
- package/dist/cli/commands/host-detect.d.mts.map +1 -1
- package/dist/cli/commands/host-detect.mjs +30 -3
- package/dist/cli/commands/host-detect.mjs.map +1 -1
- package/dist/cli/commands/modes.d.mts +13 -0
- package/dist/cli/commands/modes.d.mts.map +1 -0
- package/dist/cli/commands/modes.mjs +220 -0
- package/dist/cli/commands/modes.mjs.map +1 -0
- package/dist/cli/commands/route.mjs +1 -1
- package/dist/cli/commands/route.mjs.map +1 -1
- package/dist/cli/commands/task.d.mts.map +1 -1
- package/dist/cli/commands/task.mjs +108 -6
- package/dist/cli/commands/task.mjs.map +1 -1
- package/dist/cli/commands/tokens.d.mts.map +1 -1
- package/dist/cli/commands/tokens.mjs +150 -6
- package/dist/cli/commands/tokens.mjs.map +1 -1
- package/dist/cli/commands/triage.d.mts +8 -0
- package/dist/cli/commands/triage.d.mts.map +1 -0
- package/dist/cli/commands/triage.mjs +259 -0
- package/dist/cli/commands/triage.mjs.map +1 -0
- package/dist/cli/config/post-merge-sweep.d.mts +18 -0
- package/dist/cli/config/post-merge-sweep.d.mts.map +1 -1
- package/dist/cli/config/post-merge-sweep.mjs +48 -3
- package/dist/cli/config/post-merge-sweep.mjs.map +1 -1
- package/dist/cli/consistency/registry.d.mts +11 -0
- package/dist/cli/consistency/registry.d.mts.map +1 -1
- package/dist/cli/consistency/registry.mjs +13 -0
- package/dist/cli/consistency/registry.mjs.map +1 -1
- package/dist/cli/coordination/agent-identity.d.mts +9 -0
- package/dist/cli/coordination/agent-identity.d.mts.map +1 -1
- package/dist/cli/coordination/agent-identity.mjs +11 -0
- package/dist/cli/coordination/agent-identity.mjs.map +1 -1
- package/dist/cli/coordination/event-log.d.mts +27 -0
- package/dist/cli/coordination/event-log.d.mts.map +1 -1
- package/dist/cli/coordination/event-log.mjs +72 -2
- package/dist/cli/coordination/event-log.mjs.map +1 -1
- package/dist/cli/dispatch.d.mts.map +1 -1
- package/dist/cli/dispatch.mjs +14 -1
- package/dist/cli/dispatch.mjs.map +1 -1
- package/dist/cli/gate/registry.d.mts +11 -0
- package/dist/cli/gate/registry.d.mts.map +1 -1
- package/dist/cli/gate/registry.mjs +13 -0
- package/dist/cli/gate/registry.mjs.map +1 -1
- package/dist/cli/help.d.mts.map +1 -1
- package/dist/cli/help.mjs +1 -0
- package/dist/cli/help.mjs.map +1 -1
- package/dist/cli/host/detect.d.mts +1 -0
- package/dist/cli/host/detect.d.mts.map +1 -1
- package/dist/cli/host/detect.mjs +5 -0
- package/dist/cli/host/detect.mjs.map +1 -1
- package/dist/cli/route/envelope.d.mts +68 -4
- package/dist/cli/route/envelope.d.mts.map +1 -1
- package/dist/cli/route/envelope.mjs +140 -103
- package/dist/cli/route/envelope.mjs.map +1 -1
- package/dist/cli/route/skill-discover.d.mts +9 -0
- package/dist/cli/route/skill-discover.d.mts.map +1 -1
- package/dist/cli/route/skill-discover.mjs +11 -0
- package/dist/cli/route/skill-discover.mjs.map +1 -1
- package/dist/cli/skill-author/contract.d.mts +1 -0
- package/dist/cli/skill-author/contract.d.mts.map +1 -1
- package/dist/cli/skill-author/contract.mjs +7 -0
- package/dist/cli/skill-author/contract.mjs.map +1 -1
- package/dist/cli/task/worktree-cleanup.d.mts +9 -1
- package/dist/cli/task/worktree-cleanup.d.mts.map +1 -1
- package/dist/cli/task/worktree-cleanup.mjs +190 -9
- package/dist/cli/task/worktree-cleanup.mjs.map +1 -1
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/agents/apt-planner.md +1 -1
- package/dist/plugin/skills/apt/SKILL.md +111 -5
- package/dist/plugin/skills/apt-author-skill/SKILL.md +11 -0
- package/dist/plugin/skills/apt-bootstrap/SKILL.md +1 -0
- package/dist/plugin/skills/apt-classify/SKILL.md +1 -0
- package/dist/plugin/skills/apt-close-task/SKILL.md +1 -0
- package/dist/plugin/skills/apt-create-docs/SKILL.md +1 -0
- package/dist/plugin/skills/apt-debug/SKILL.md +2 -0
- package/dist/plugin/skills/apt-design/SKILL.md +2 -0
- package/dist/plugin/skills/apt-discuss/SKILL.md +2 -0
- package/dist/plugin/skills/apt-docs/SKILL.md +2 -0
- package/dist/plugin/skills/apt-execute/SKILL.md +1 -0
- package/dist/plugin/skills/apt-mockup/SKILL.md +2 -0
- package/dist/plugin/skills/apt-pause/SKILL.md +1 -0
- package/dist/plugin/skills/apt-personas/SKILL.md +1 -0
- package/dist/plugin/skills/apt-plan/SKILL.md +2 -0
- package/dist/plugin/skills/apt-pr-review/SKILL.md +1 -0
- package/dist/plugin/skills/apt-quick/SKILL.md +2 -0
- package/dist/plugin/skills/apt-resume/SKILL.md +1 -0
- package/dist/plugin/skills/apt-review/SKILL.md +1 -0
- package/dist/plugin/skills/apt-roadmap/SKILL.md +1 -0
- package/dist/plugin/skills/apt-roundtable/SKILL.md +2 -0
- package/dist/plugin/skills/apt-run/SKILL.md +1 -0
- package/dist/plugin/skills/apt-scan/SKILL.md +1 -0
- package/dist/plugin/skills/apt-setup/SKILL.md +1 -0
- package/dist/plugin/skills/apt-ship/SKILL.md +6 -5
- package/dist/plugin/skills/apt-stress-test/SKILL.md +1 -0
- package/dist/plugin/skills/apt-terminal/SKILL.md +1 -0
- package/dist/plugin/skills/apt-update/SKILL.md +5 -0
- package/dist/plugin/skills/apt-verify/SKILL.md +1 -0
- package/dist/plugin/skills/apt-verify-proof/SKILL.md +1 -0
- package/dist/types/config.d.ts +85 -0
- package/dist/types/config.d.ts.map +1 -1
- package/package.json +125 -125
- package/prompts/coder.md +2 -0
- package/prompts/planner.md +12 -0
- package/prompts/spec_writer.md +9 -0
- package/skills/apt/SKILL.md +1 -0
- package/skills/apt-close-task/SKILL.md +32 -1
- package/skills/apt-debug/SKILL.md +39 -6
- package/skills/apt-debug/appendices/diagnose-discipline.md +119 -0
- package/skills/apt-diagram/SKILL.md +342 -0
- package/skills/apt-diagram/appendices/design-discipline.md +97 -0
- package/skills/apt-discuss/SKILL.md +25 -0
- package/skills/apt-discuss/appendices/grill-discipline.md +104 -0
- package/skills/apt-discuss/appendices/zoom-out-helper.md +79 -0
- package/skills/apt-execute/SKILL.md +48 -5
- package/skills/apt-execute/appendices/tdd-mode.md +107 -0
- package/skills/apt-improve/DEEPENING.md +84 -0
- package/skills/apt-improve/INTERFACE-DESIGN.md +97 -0
- package/skills/apt-improve/LANGUAGE.md +104 -0
- package/skills/apt-improve/SKILL.md +141 -0
- package/skills/apt-plan/SKILL.md +147 -4
- package/skills/apt-planner.md +42 -1
- package/skills/apt-pr-review/SKILL.md +46 -16
- package/skills/apt-prototype/LOGIC.md +109 -0
- package/skills/apt-prototype/SKILL.md +143 -0
- package/skills/apt-prototype/UI.md +90 -0
- package/skills/apt-quick/SKILL.md +30 -0
- package/skills/apt-review/SKILL.md +2 -0
- package/skills/apt-run/SKILL.md +32 -4
- package/skills/apt-setup/SKILL.md +128 -2
- package/skills/apt-ship/SKILL.md +47 -0
- package/skills/apt-triage/AGENT-BRIEF.md +84 -0
- package/skills/apt-triage/OUT-OF-SCOPE.md +75 -0
- package/skills/apt-triage/SKILL.md +169 -0
- package/skills/apt-verify/SKILL.md +3 -0
- package/skills/apt-verify-proof/SKILL.md +3 -0
- package/skills/apt-watch-ci/SKILL.md +163 -0
- package/skills/apt-zoom-out/SKILL.md +130 -0
- package/src/cli/ci-watch/lock.mjs +178 -0
- package/src/cli/ci-watch/state.mjs +103 -0
- package/src/cli/ci-watch/stop-matrix.mjs +181 -0
- package/src/cli/cli-wrappers/ci-watch.mjs +9 -0
- package/src/cli/commands/adr.mjs +243 -0
- package/src/cli/commands/ci-watch.mjs +503 -0
- package/src/cli/commands/context.mjs +244 -0
- package/src/cli/commands/event.mjs +63 -24
- package/src/cli/commands/host-detect.mjs +33 -7
- package/src/cli/commands/modes.mjs +215 -0
- package/src/cli/commands/route.mjs +1 -1
- package/src/cli/commands/task.mjs +125 -18
- package/src/cli/commands/tokens.mjs +157 -6
- package/src/cli/commands/triage.mjs +277 -0
- package/src/cli/config/post-merge-sweep.mjs +49 -3
- package/src/cli/consistency/registry.mjs +14 -0
- package/src/cli/coordination/agent-identity.mjs +12 -0
- package/src/cli/coordination/event-log.mjs +73 -2
- package/src/cli/dispatch.mjs +15 -1
- package/src/cli/gate/registry.mjs +14 -0
- package/src/cli/help.mjs +1 -0
- package/src/cli/host/detect.mjs +5 -0
- package/src/cli/route/envelope.mjs +140 -106
- package/src/cli/route/skill-discover.mjs +12 -0
- package/src/cli/skill-author/contract.mjs +7 -0
- package/src/cli/task/worktree-cleanup.mjs +191 -9
- package/templates/adr-format.md +56 -0
- package/templates/config.json +4 -0
- 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":"
|
|
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.
|
|
15
|
-
*
|
|
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":"AAAA
|
|
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":"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"}
|
|
@@ -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":"
|
|
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"}
|