agent-coord-mcp 0.19.1 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/build.js.map +1 -1
- package/dist/roles.js +10 -0
- package/dist/roles.js.map +1 -1
- package/dist/server.js +39 -35
- package/dist/server.js.map +1 -1
- package/dist/tools/messaging.js +66 -5
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/render.js +1 -83
- package/dist/tools/render.js.map +1 -1
- package/dist/tools/shared.js +1 -3
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/transport.js +78 -5
- package/dist/tools/transport.js.map +1 -1
- package/dist/tools/work.js +88 -34
- package/dist/tools/work.js.map +1 -1
- package/dist/work.js +1 -291
- package/dist/work.js.map +1 -1
- package/hooks/peek-coord.mjs +0 -0
- package/hooks/roles.mjs +12 -0
- package/hooks/tier.mjs +9 -4
- package/hooks/tmux-pusher.mjs +10 -5
- package/package.json +16 -16
- package/scripts/check-self-dependency.mjs +62 -14
- package/scripts/check-test-count.mjs +3 -3
- package/scripts/coord-node.sh +0 -0
- package/scripts/coord-token.mjs +0 -0
- package/scripts/spawn-agent.sh +0 -0
- package/scripts/stop-agent.sh +0 -0
- package/src/roles.ts +12 -0
- package/src/server.ts +51 -39
- package/src/tools/messaging.ts +62 -3
- package/src/tools/render.ts +1 -80
- package/src/tools/shared.ts +22 -77
- package/src/tools/transport.ts +78 -5
- package/src/tools/work.ts +107 -40
- package/src/work.ts +31 -386
- package/dist/tools.js +0 -1852
- package/dist/tools.js.map +0 -1
package/dist/tools/work.js
CHANGED
|
@@ -3,7 +3,8 @@ import { promises as fsp } from "node:fs";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { WORK_DIR, workFile, readJson } from "../store.js";
|
|
6
|
-
import {
|
|
6
|
+
import { doneEntriesOf, listWorkBoardOf, parseWorkDoc, projectV1ToLanes, queueItemsOf, renderWorkDoc, workDocIssues, workDocLegacyWriteIssues, LANES_V0_WRITE_ISSUE, } from "../work.js";
|
|
7
|
+
import { parseFactsDoc } from "@davidbalzan/groundwork-seam";
|
|
7
8
|
import { loadScopes, ownsDocument } from "./scopes.js";
|
|
8
9
|
import { AGENTS_FILE } from "../store.js";
|
|
9
10
|
// ---------- work state as data (Phase 8 Task 5) ----------
|
|
@@ -29,6 +30,42 @@ export const QUEUE_DOC = "docs/QUEUE.md";
|
|
|
29
30
|
export const DONE_DOC = "docs/DONE.md";
|
|
30
31
|
export const BOARD_DOC = "docs/WORKSTREAMS.md";
|
|
31
32
|
export const LEGACY_DOC = "docs/BACKLOG.md";
|
|
33
|
+
export const FACTS_DOC = "docs/FACTS.md";
|
|
34
|
+
function isFactsDoc(d) {
|
|
35
|
+
return d.kind === "facts";
|
|
36
|
+
}
|
|
37
|
+
async function loadDoc(repo, f) {
|
|
38
|
+
const source = await fsp.readFile(path.join(repo, f.path), "utf8");
|
|
39
|
+
if (f.kind === "facts") {
|
|
40
|
+
const parsed = parseFactsDoc(source);
|
|
41
|
+
return { kind: "facts", path: f.path, source, entries: parsed.entries, issues: parsed.issues };
|
|
42
|
+
}
|
|
43
|
+
return { kind: f.kind, path: f.path, doc: parseWorkDoc(source) };
|
|
44
|
+
}
|
|
45
|
+
function docIssues(d) {
|
|
46
|
+
if (isFactsDoc(d))
|
|
47
|
+
return d.issues.map((issue) => `${d.path}: ${issue}`);
|
|
48
|
+
return [...workDocIssues(d.doc), ...workDocLegacyWriteIssues(d.doc)].map((issue) => `${d.path}: ${issue}`);
|
|
49
|
+
}
|
|
50
|
+
function importedSummary(d) {
|
|
51
|
+
if (isFactsDoc(d)) {
|
|
52
|
+
return {
|
|
53
|
+
path: d.path,
|
|
54
|
+
kind: d.kind,
|
|
55
|
+
facts: d.entries.length,
|
|
56
|
+
...(d.issues.length ? { issues: d.issues } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const issues = [...workDocIssues(d.doc), ...workDocLegacyWriteIssues(d.doc)];
|
|
60
|
+
return {
|
|
61
|
+
path: d.path,
|
|
62
|
+
kind: d.kind,
|
|
63
|
+
queue: queueItemsOf(d.doc).length,
|
|
64
|
+
done: doneEntriesOf(d.doc).length,
|
|
65
|
+
board: listWorkBoardOf(d.doc).length,
|
|
66
|
+
...(issues.length ? { issues } : {}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
32
69
|
function resolveDocs(repo) {
|
|
33
70
|
const has = (rel) => existsSync(path.join(repo, rel));
|
|
34
71
|
const out = [];
|
|
@@ -45,6 +82,8 @@ function resolveDocs(repo) {
|
|
|
45
82
|
}
|
|
46
83
|
if (has(BOARD_DOC))
|
|
47
84
|
out.push({ kind: "board", path: BOARD_DOC });
|
|
85
|
+
if (has(FACTS_DOC))
|
|
86
|
+
out.push({ kind: "facts", path: FACTS_DOC });
|
|
48
87
|
return out;
|
|
49
88
|
}
|
|
50
89
|
async function loadState(project) {
|
|
@@ -66,36 +105,24 @@ export async function importWorkTool(args) {
|
|
|
66
105
|
if (!found.length) {
|
|
67
106
|
return {
|
|
68
107
|
ok: false,
|
|
69
|
-
error: `no work documents under '${repo}' — expected ${QUEUE_DOC}/${DONE_DOC} or the legacy ${LEGACY_DOC}`,
|
|
108
|
+
error: `no work documents under '${repo}' — expected ${QUEUE_DOC}/${DONE_DOC} or the legacy ${LEGACY_DOC} (optional ${FACTS_DOC})`,
|
|
70
109
|
};
|
|
71
110
|
}
|
|
72
111
|
const docs = [];
|
|
73
|
-
for (const f of found)
|
|
74
|
-
|
|
75
|
-
docs.push({ kind: f.kind, path: f.path, doc: parseWorkDoc(source) });
|
|
76
|
-
}
|
|
112
|
+
for (const f of found)
|
|
113
|
+
docs.push(await loadDoc(repo, f));
|
|
77
114
|
const state = { project: args.project, repo, importedAt: Date.now(), docs };
|
|
78
115
|
await saveState(state);
|
|
79
|
-
const allIssues = docs.flatMap(
|
|
116
|
+
const allIssues = docs.flatMap(docIssues);
|
|
80
117
|
return {
|
|
81
118
|
ok: true,
|
|
82
119
|
project: args.project,
|
|
83
120
|
repo,
|
|
84
121
|
file: workFile(args.project),
|
|
85
|
-
imported: docs.map(
|
|
86
|
-
const issues = workDocIssues(d.doc);
|
|
87
|
-
return {
|
|
88
|
-
path: d.path,
|
|
89
|
-
kind: d.kind,
|
|
90
|
-
queue: queueItemsOf(d.doc).length,
|
|
91
|
-
done: doneEntriesOf(d.doc).length,
|
|
92
|
-
board: boardRowsOf(d.doc).length,
|
|
93
|
-
...(issues.length ? { issues } : {}),
|
|
94
|
-
};
|
|
95
|
-
}),
|
|
122
|
+
imported: docs.map(importedSummary),
|
|
96
123
|
...(allIssues.length
|
|
97
124
|
? {
|
|
98
|
-
warning: `${allIssues.length}
|
|
125
|
+
warning: `${allIssues.length} issue(s) (board arity / unknown grammar / facts) — documents round-trip unchanged. See imported[].issues.`,
|
|
99
126
|
}
|
|
100
127
|
: {}),
|
|
101
128
|
note: "the markdown remains authoritative — this store is a derived index",
|
|
@@ -104,10 +131,12 @@ export async function importWorkTool(args) {
|
|
|
104
131
|
// ---------- list_work ----------
|
|
105
132
|
export const listWorkSchema = {
|
|
106
133
|
project: z.string().min(1),
|
|
107
|
-
kind: z.enum(["queue", "done", "board"]).optional(),
|
|
134
|
+
kind: z.enum(["queue", "done", "board", "facts"]).optional(),
|
|
108
135
|
priority: z.enum(["P1", "P2", "P3"]).optional(),
|
|
109
136
|
// Include queue items already ticked off (default false).
|
|
110
137
|
includeDone: z.boolean().optional(),
|
|
138
|
+
// native (default): discriminated v1 | lanes-v0. lanes: lossy projection of v1.
|
|
139
|
+
view: z.enum(["native", "lanes"]).optional(),
|
|
111
140
|
repo: z.string().optional(),
|
|
112
141
|
};
|
|
113
142
|
export async function listWorkTool(args) {
|
|
@@ -126,14 +155,22 @@ export async function listWorkTool(args) {
|
|
|
126
155
|
}
|
|
127
156
|
const queue = [];
|
|
128
157
|
const done = [];
|
|
129
|
-
const
|
|
158
|
+
const facts = [];
|
|
159
|
+
let board = [];
|
|
130
160
|
const issues = [];
|
|
131
161
|
for (const d of state.docs) {
|
|
162
|
+
if (isFactsDoc(d)) {
|
|
163
|
+
facts.push(...d.entries);
|
|
164
|
+
issues.push(...docIssues(d));
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
132
167
|
queue.push(...queueItemsOf(d.doc));
|
|
133
168
|
done.push(...doneEntriesOf(d.doc));
|
|
134
|
-
board.push(...
|
|
135
|
-
issues.push(...
|
|
169
|
+
board.push(...listWorkBoardOf(d.doc));
|
|
170
|
+
issues.push(...docIssues(d));
|
|
136
171
|
}
|
|
172
|
+
if (args.view === "lanes")
|
|
173
|
+
board = board.map(projectV1ToLanes);
|
|
137
174
|
const openQueue = args.includeDone ? queue : queue.filter((q) => !q.done);
|
|
138
175
|
const filtered = args.priority ? openQueue.filter((q) => q.priority === args.priority) : openQueue;
|
|
139
176
|
return {
|
|
@@ -144,8 +181,7 @@ export async function listWorkTool(args) {
|
|
|
144
181
|
...(args.kind === "queue" || args.kind === undefined ? { queue: filtered } : {}),
|
|
145
182
|
...(args.kind === "done" || args.kind === undefined ? { done } : {}),
|
|
146
183
|
...(args.kind === "board" || args.kind === undefined ? { board } : {}),
|
|
147
|
-
|
|
148
|
-
// than let the absence read as "that lane doesn't exist".
|
|
184
|
+
...(args.kind === "facts" || args.kind === undefined ? { facts } : {}),
|
|
149
185
|
...(issues.length ? { issues } : {}),
|
|
150
186
|
};
|
|
151
187
|
}
|
|
@@ -156,10 +192,8 @@ async function importFromDisk(project, repo) {
|
|
|
156
192
|
if (!found.length)
|
|
157
193
|
return null;
|
|
158
194
|
const docs = [];
|
|
159
|
-
for (const f of found)
|
|
160
|
-
|
|
161
|
-
docs.push({ kind: f.kind, path: f.path, doc: parseWorkDoc(src) });
|
|
162
|
-
}
|
|
195
|
+
for (const f of found)
|
|
196
|
+
docs.push(await loadDoc(repo, f));
|
|
163
197
|
return { project, repo, importedAt: Date.now(), docs };
|
|
164
198
|
}
|
|
165
199
|
// ---------- export_work ----------
|
|
@@ -190,6 +224,19 @@ export async function exportWorkTool(args) {
|
|
|
190
224
|
const files = [];
|
|
191
225
|
for (const d of state.docs) {
|
|
192
226
|
const target = path.join(repo, d.path);
|
|
227
|
+
if (isFactsDoc(d)) {
|
|
228
|
+
// FACTS is not an export write target — set-fact.mjs owns the file.
|
|
229
|
+
const current = existsSync(target) ? await fsp.readFile(target, "utf8") : null;
|
|
230
|
+
files.push({
|
|
231
|
+
path: d.path,
|
|
232
|
+
bytes: Buffer.byteLength(d.source, "utf8"),
|
|
233
|
+
identical: current === d.source,
|
|
234
|
+
written: false,
|
|
235
|
+
note: "facts is not an export write target (set-fact.mjs owns the file)",
|
|
236
|
+
...(d.issues.length ? { issues: d.issues } : {}),
|
|
237
|
+
});
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
193
240
|
const rendered = renderWorkDoc(d.doc);
|
|
194
241
|
const current = existsSync(target) ? await fsp.readFile(target, "utf8") : null;
|
|
195
242
|
const declared = scopes.documents.find((s) => s.path === d.path);
|
|
@@ -202,27 +249,34 @@ export async function exportWorkTool(args) {
|
|
|
202
249
|
advisory: true,
|
|
203
250
|
}
|
|
204
251
|
: undefined;
|
|
205
|
-
|
|
252
|
+
const issues = [...workDocIssues(d.doc), ...workDocLegacyWriteIssues(d.doc)];
|
|
253
|
+
const wouldWrite = write && rendered !== current;
|
|
254
|
+
const refuseLegacyWrite = wouldWrite && workDocLegacyWriteIssues(d.doc).length > 0;
|
|
255
|
+
if (wouldWrite && !refuseLegacyWrite)
|
|
206
256
|
await fsp.writeFile(target, rendered, "utf8");
|
|
207
|
-
const issues = workDocIssues(d.doc);
|
|
208
257
|
files.push({
|
|
209
258
|
path: d.path,
|
|
210
259
|
bytes: Buffer.byteLength(rendered, "utf8"),
|
|
211
260
|
identical: rendered === current,
|
|
212
|
-
written:
|
|
261
|
+
written: wouldWrite && !refuseLegacyWrite,
|
|
213
262
|
// Refused rows replay verbatim — the write is byte-faithful — but a
|
|
214
263
|
// caller rewriting a document should hear that some rows carry no
|
|
215
264
|
// record, rather than infer health from `identical:true`.
|
|
265
|
+
...(refuseLegacyWrite ? { error: LANES_V0_WRITE_ISSUE } : {}),
|
|
216
266
|
...(issues.length ? { issues } : {}),
|
|
217
267
|
...(scope ? { scope } : {}),
|
|
218
268
|
});
|
|
219
269
|
}
|
|
270
|
+
const refused = files.filter((f) => "error" in f);
|
|
220
271
|
return {
|
|
221
|
-
ok:
|
|
222
|
-
project:
|
|
272
|
+
ok: refused.length === 0,
|
|
273
|
+
project: args.project,
|
|
223
274
|
repo,
|
|
224
275
|
write,
|
|
225
276
|
files,
|
|
277
|
+
...(refused.length
|
|
278
|
+
? { error: `refused ${refused.length} new lanes-v0 write(s) — ${LANES_V0_WRITE_ISSUE}` }
|
|
279
|
+
: {}),
|
|
226
280
|
...(write ? {} : { note: "dry run — pass write:true to rewrite the documents" }),
|
|
227
281
|
};
|
|
228
282
|
}
|
package/dist/tools/work.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/tools/work.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/tools/work.ts"],"names":[],"mappings":"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"}
|
package/dist/work.js
CHANGED
|
@@ -1,292 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
// rows as typed records, with markdown as a first-class EXPORT rather than the
|
|
3
|
-
// datastore.
|
|
4
|
-
//
|
|
5
|
-
// WHY THIS SHAPE. `docs/QUEUE.md` / `docs/DONE.md` were parsed under a contract
|
|
6
|
-
// requiring exact `—` (U+2014) and ` · ` (U+00B7). A parser once returned ZERO
|
|
7
|
-
// items on the real file while passing every synthetic test, and the consuming
|
|
8
|
-
// UI rendered an empty panel — no error, no signal. The files themselves are
|
|
9
|
-
// good: David edits them, git diffs them, they grep. So markdown stays the
|
|
10
|
-
// INTERFACE and stops being the DATASTORE.
|
|
11
|
-
//
|
|
12
|
-
// MARKDOWN REMAINS AUTHORITATIVE. Delete the store and the documents still
|
|
13
|
-
// stand alone: every field here is recoverable from the file it came from, the
|
|
14
|
-
// exporter is byte-exact, and nothing downstream is required to read records.
|
|
15
|
-
// The store is a derived index until a consumer chooses otherwise.
|
|
16
|
-
//
|
|
17
|
-
// The round-trip guarantee is structural, not incidental: everything this
|
|
18
|
-
// module does NOT model — prose, the write-rule paragraphs, the Cross-project
|
|
19
|
-
// section, fenced examples — is captured verbatim as a `text` block and
|
|
20
|
-
// replayed in place. Only lines it genuinely understands are re-rendered, so
|
|
21
|
-
// an unmodelled construct can never be silently dropped.
|
|
22
|
-
import { createHash } from "node:crypto";
|
|
23
|
-
// The one arity BoardRow can hold. boardCells() and the parser's arity guard
|
|
24
|
-
// both reference this constant so the two sides cannot drift; a test pins
|
|
25
|
-
// boardCells().length === BOARD_ARITY.
|
|
26
|
-
export const BOARD_ARITY = 5;
|
|
27
|
-
export function isMalformedRow(r) {
|
|
28
|
-
return r.malformed === true;
|
|
29
|
-
}
|
|
30
|
-
// ---------- the glyph contract ----------
|
|
31
|
-
//
|
|
32
|
-
// Pinned in docs/DONE.md and consumed by external parsers: the ref splits on
|
|
33
|
-
// the LAST ` — ` (space, U+2014, space) and the date is a trailing ` · `
|
|
34
|
-
// (space, U+00B7, space) + ISO date. Written as explicit escapes so a source
|
|
35
|
-
// file normalization or a copy-paste through an ASCII-mangling tool can never
|
|
36
|
-
// change them silently — the constants are the contract.
|
|
37
|
-
export const EM_DASH_SEP = " — ";
|
|
38
|
-
export const MIDDOT_SEP = " · ";
|
|
39
|
-
const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
|
|
40
|
-
// Deterministic ids: same content in → same id out, so import→export→import is
|
|
41
|
-
// stable and no id has to be written into the markdown (which would change the
|
|
42
|
-
// bytes the round trip is measured on).
|
|
43
|
-
function idFor(kind, seed) {
|
|
44
|
-
return `${kind}-${createHash("sha1").update(seed).digest("hex").slice(0, 8)}`;
|
|
45
|
-
}
|
|
46
|
-
// ---------- line-level recognizers ----------
|
|
47
|
-
const QUEUE_LINE = /^- \[( |x)\] \((P1|P2|P3)\) (.*)$/;
|
|
48
|
-
const DONE_LINE = /^- \[( |x)\] (.*)$/;
|
|
49
|
-
export function parseQueueLine(line, section) {
|
|
50
|
-
const m = QUEUE_LINE.exec(line);
|
|
51
|
-
if (!m)
|
|
52
|
-
return null;
|
|
53
|
-
const [, mark, priority, text] = m;
|
|
54
|
-
return {
|
|
55
|
-
id: idFor("q", text ?? ""),
|
|
56
|
-
priority: priority,
|
|
57
|
-
text: text ?? "",
|
|
58
|
-
done: mark === "x",
|
|
59
|
-
...(section ? { section } : {}),
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
// Split on the LAST ` — `, then peel a trailing ` · YYYY-MM-DD`. Both parts are
|
|
63
|
-
// optional: an entry with neither is still a done entry, it just carries no
|
|
64
|
-
// verifiable ref — which is a fact about the entry, not a parse failure. The
|
|
65
|
-
// old parser treated the same line as nothing at all.
|
|
66
|
-
export function parseDoneLine(line, section) {
|
|
67
|
-
const m = DONE_LINE.exec(line);
|
|
68
|
-
if (!m)
|
|
69
|
-
return null;
|
|
70
|
-
let body = m[2] ?? "";
|
|
71
|
-
let ref;
|
|
72
|
-
let date;
|
|
73
|
-
const cut = body.lastIndexOf(EM_DASH_SEP);
|
|
74
|
-
if (cut !== -1) {
|
|
75
|
-
const tail = body.slice(cut + EM_DASH_SEP.length);
|
|
76
|
-
const dot = tail.lastIndexOf(MIDDOT_SEP);
|
|
77
|
-
if (dot !== -1) {
|
|
78
|
-
const maybeDate = tail.slice(dot + MIDDOT_SEP.length);
|
|
79
|
-
if (ISO_DATE.test(maybeDate)) {
|
|
80
|
-
date = maybeDate;
|
|
81
|
-
ref = tail.slice(0, dot);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// A tail with no date is still a ref, as long as it isn't prose with
|
|
85
|
-
// spaces — refs are `owner/repo#N` or `owner/repo@sha`.
|
|
86
|
-
if (date === undefined && /^\S+$/.test(tail))
|
|
87
|
-
ref = tail;
|
|
88
|
-
if (ref !== undefined)
|
|
89
|
-
body = body.slice(0, cut);
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
id: idFor("d", `${body}|${ref ?? ""}|${date ?? ""}`),
|
|
93
|
-
text: body,
|
|
94
|
-
...(ref !== undefined ? { ref } : {}),
|
|
95
|
-
...(date !== undefined ? { date } : {}),
|
|
96
|
-
...(section ? { section } : {}),
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
export function renderQueueLine(item) {
|
|
100
|
-
return `- [${item.done ? "x" : " "}] (${item.priority}) ${item.text}`;
|
|
101
|
-
}
|
|
102
|
-
export function renderDoneLine(entry) {
|
|
103
|
-
let line = `- [x] ${entry.text}`;
|
|
104
|
-
if (entry.ref !== undefined)
|
|
105
|
-
line += `${EM_DASH_SEP}${entry.ref}`;
|
|
106
|
-
if (entry.date !== undefined)
|
|
107
|
-
line += `${MIDDOT_SEP}${entry.date}`;
|
|
108
|
-
return line;
|
|
109
|
-
}
|
|
110
|
-
// ---------- board table ----------
|
|
111
|
-
const TABLE_ROW = /^\|(.*)\|\s*$/;
|
|
112
|
-
const TABLE_ALIGN = /^\|[\s:|-]+\|\s*$/;
|
|
113
|
-
function splitRow(line) {
|
|
114
|
-
const m = TABLE_ROW.exec(line);
|
|
115
|
-
if (!m)
|
|
116
|
-
return [];
|
|
117
|
-
return (m[1] ?? "").split("|").map((c) => c.trim());
|
|
118
|
-
}
|
|
119
|
-
function renderRow(cells) {
|
|
120
|
-
return `| ${cells.join(" | ")} |`;
|
|
121
|
-
}
|
|
122
|
-
function boardCells(r) {
|
|
123
|
-
return [r.lane, r.owner, r.state, r.currentSlice, r.nextGo];
|
|
124
|
-
}
|
|
125
|
-
// Replay the original line when the fields still say what it said; re-render
|
|
126
|
-
// once anything actually changed. A malformed row has no fields to have
|
|
127
|
-
// changed — it replays its bytes, always.
|
|
128
|
-
export function renderBoardRow(r) {
|
|
129
|
-
if (isMalformedRow(r))
|
|
130
|
-
return r.verbatim;
|
|
131
|
-
if (r.raw !== undefined) {
|
|
132
|
-
const cells = splitRow(r.raw);
|
|
133
|
-
if (cells.length === BOARD_ARITY && cells.every((c, i) => c === boardCells(r)[i]))
|
|
134
|
-
return r.raw;
|
|
135
|
-
}
|
|
136
|
-
return renderRow(boardCells(r));
|
|
137
|
-
}
|
|
138
|
-
// Which record kind a `## Heading` opens. `## Queue` → queue items,
|
|
139
|
-
// `## Done` → done entries; anything else closes the record region, so the
|
|
140
|
-
// Cross-project section's bullets stay verbatim prose.
|
|
141
|
-
function sectionKindOf(heading) {
|
|
142
|
-
const h = heading.replace(/^#+\s*/, "").trim().toLowerCase();
|
|
143
|
-
if (h === "queue")
|
|
144
|
-
return "queue";
|
|
145
|
-
if (h === "done")
|
|
146
|
-
return "done";
|
|
147
|
-
return "none";
|
|
148
|
-
}
|
|
149
|
-
export function parseWorkDoc(source) {
|
|
150
|
-
const trailingNewline = source.endsWith("\n");
|
|
151
|
-
const lines = source.split("\n");
|
|
152
|
-
if (trailingNewline)
|
|
153
|
-
lines.pop(); // the split's empty tail, restored on render
|
|
154
|
-
const blocks = [];
|
|
155
|
-
let text = [];
|
|
156
|
-
let kind = "none";
|
|
157
|
-
let subsection;
|
|
158
|
-
let inFence = false;
|
|
159
|
-
const flushText = () => {
|
|
160
|
-
if (text.length)
|
|
161
|
-
blocks.push({ kind: "text", lines: text });
|
|
162
|
-
text = [];
|
|
163
|
-
};
|
|
164
|
-
// Consecutive item lines coalesce into one block; anything in between (a
|
|
165
|
-
// blank line, a subsection heading) flushes as text first and therefore
|
|
166
|
-
// starts a new one, which is what keeps rendering order faithful.
|
|
167
|
-
const pushItem = (item) => {
|
|
168
|
-
flushText();
|
|
169
|
-
const last = blocks[blocks.length - 1];
|
|
170
|
-
if (last?.kind === "queue")
|
|
171
|
-
last.items.push(item);
|
|
172
|
-
else
|
|
173
|
-
blocks.push({ kind: "queue", items: [item] });
|
|
174
|
-
};
|
|
175
|
-
const pushEntry = (entry) => {
|
|
176
|
-
flushText();
|
|
177
|
-
const last = blocks[blocks.length - 1];
|
|
178
|
-
if (last?.kind === "done")
|
|
179
|
-
last.entries.push(entry);
|
|
180
|
-
else
|
|
181
|
-
blocks.push({ kind: "done", entries: [entry] });
|
|
182
|
-
};
|
|
183
|
-
for (let i = 0; i < lines.length; i++) {
|
|
184
|
-
const line = lines[i] ?? "";
|
|
185
|
-
// Fenced blocks are never interpreted — docs/DONE.md pins the done-line
|
|
186
|
-
// FORMAT inside a fence, and parsing that example as an entry would
|
|
187
|
-
// invent a record out of documentation.
|
|
188
|
-
if (/^\s*```/.test(line)) {
|
|
189
|
-
inFence = !inFence;
|
|
190
|
-
text.push(line);
|
|
191
|
-
continue;
|
|
192
|
-
}
|
|
193
|
-
if (inFence) {
|
|
194
|
-
text.push(line);
|
|
195
|
-
continue;
|
|
196
|
-
}
|
|
197
|
-
if (/^#{1,6}\s/.test(line)) {
|
|
198
|
-
const level = (line.match(/^#+/) ?? [""])[0].length;
|
|
199
|
-
if (level <= 2) {
|
|
200
|
-
kind = sectionKindOf(line);
|
|
201
|
-
subsection = undefined;
|
|
202
|
-
}
|
|
203
|
-
else if (kind !== "none") {
|
|
204
|
-
subsection = line.replace(/^#+\s*/, "").trim();
|
|
205
|
-
}
|
|
206
|
-
text.push(line);
|
|
207
|
-
continue;
|
|
208
|
-
}
|
|
209
|
-
if (kind === "queue") {
|
|
210
|
-
const item = parseQueueLine(line, subsection);
|
|
211
|
-
if (item) {
|
|
212
|
-
pushItem(item);
|
|
213
|
-
continue;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
else if (kind === "done") {
|
|
217
|
-
const entry = parseDoneLine(line, subsection);
|
|
218
|
-
if (entry) {
|
|
219
|
-
pushEntry(entry);
|
|
220
|
-
continue;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
// Lanes table: a header row followed by an alignment row.
|
|
224
|
-
if (TABLE_ROW.test(line) && TABLE_ALIGN.test(lines[i + 1] ?? "")) {
|
|
225
|
-
const rows = [];
|
|
226
|
-
let j = i + 2;
|
|
227
|
-
for (; j < lines.length && TABLE_ROW.test(lines[j] ?? ""); j++) {
|
|
228
|
-
const raw = lines[j] ?? "";
|
|
229
|
-
const cells = splitRow(raw);
|
|
230
|
-
// Arity guard: a row BoardRow cannot hold is refused a record, kept
|
|
231
|
-
// verbatim, and named loudly — destructuring it into the 5-tuple is
|
|
232
|
-
// exactly the silent narrow/widen this exists to prevent. An empty
|
|
233
|
-
// trailing cell (`| a | b | c | d | |`) is still five columns and
|
|
234
|
-
// still a legitimate row.
|
|
235
|
-
if (cells.length !== BOARD_ARITY) {
|
|
236
|
-
rows.push({
|
|
237
|
-
malformed: true,
|
|
238
|
-
verbatim: raw,
|
|
239
|
-
issue: `board row at line ${j + 1} has ${cells.length} column(s), expected ${BOARD_ARITY} — ` +
|
|
240
|
-
`refused (kept verbatim, excluded from board records). Fix the row, or widen BoardRow ` +
|
|
241
|
-
`deliberately (BOARD_ARITY + boardCells + this guard together). Row: ${raw}`,
|
|
242
|
-
});
|
|
243
|
-
continue;
|
|
244
|
-
}
|
|
245
|
-
const [lane = "", owner = "", state = "", currentSlice = "", nextGo = ""] = cells;
|
|
246
|
-
rows.push({ id: idFor("b", lane), lane, owner, state, currentSlice, nextGo, raw });
|
|
247
|
-
}
|
|
248
|
-
flushText();
|
|
249
|
-
blocks.push({ kind: "board", header: line, align: lines[i + 1] ?? "", rows });
|
|
250
|
-
i = j - 1;
|
|
251
|
-
continue;
|
|
252
|
-
}
|
|
253
|
-
text.push(line);
|
|
254
|
-
}
|
|
255
|
-
flushText();
|
|
256
|
-
return { trailingNewline, blocks };
|
|
257
|
-
}
|
|
258
|
-
export function renderWorkDoc(doc) {
|
|
259
|
-
const out = [];
|
|
260
|
-
for (const block of doc.blocks) {
|
|
261
|
-
if (block.kind === "text")
|
|
262
|
-
out.push(...block.lines);
|
|
263
|
-
else if (block.kind === "queue")
|
|
264
|
-
out.push(...block.items.map(renderQueueLine));
|
|
265
|
-
else if (block.kind === "done")
|
|
266
|
-
out.push(...block.entries.map(renderDoneLine));
|
|
267
|
-
else {
|
|
268
|
-
out.push(block.header);
|
|
269
|
-
out.push(block.align);
|
|
270
|
-
for (const r of block.rows)
|
|
271
|
-
out.push(renderBoardRow(r));
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
return out.join("\n") + (doc.trailingNewline ? "\n" : "");
|
|
275
|
-
}
|
|
276
|
-
// ---------- record extraction ----------
|
|
277
|
-
export function queueItemsOf(doc) {
|
|
278
|
-
return doc.blocks.flatMap((b) => (b.kind === "queue" ? b.items : []));
|
|
279
|
-
}
|
|
280
|
-
export function doneEntriesOf(doc) {
|
|
281
|
-
return doc.blocks.flatMap((b) => (b.kind === "done" ? b.entries : []));
|
|
282
|
-
}
|
|
283
|
-
export function boardRowsOf(doc) {
|
|
284
|
-
return doc.blocks.flatMap((b) => b.kind === "board" ? b.rows.filter((r) => !isMalformedRow(r)) : []);
|
|
285
|
-
}
|
|
286
|
-
// Every refused row's issue, in document order — what makes the parse-time
|
|
287
|
-
// rejection LOUD at the tool layer (import_work/list_work/export_work all
|
|
288
|
-
// surface it) instead of a filtered-out record nobody notices.
|
|
289
|
-
export function workDocIssues(doc) {
|
|
290
|
-
return doc.blocks.flatMap((b) => b.kind === "board" ? b.rows.filter(isMalformedRow).map((r) => r.issue) : []);
|
|
291
|
-
}
|
|
1
|
+
export { BOARD_ARITY, isMalformedRow, EM_DASH_SEP, MIDDOT_SEP, parseQueueLine, parseDoneLine, renderQueueLine, renderDoneLine, renderBoardRow, parseWorkDoc, renderWorkDoc, queueItemsOf, doneEntriesOf, boardRowsOf, workstreamsV1RowsOf, listWorkBoardOf, projectV1ToLanes, workDocIssues, workDocLegacyWriteIssues, LANES_V0_WRITE_ISSUE, } from "@davidbalzan/groundwork-seam/docs";
|
|
292
2
|
//# sourceMappingURL=work.js.map
|
package/dist/work.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work.js","sourceRoot":"","sources":["../src/work.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"work.js","sourceRoot":"","sources":["../src/work.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,WAAW,EAEX,cAAc,EAGd,WAAW,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,GAGrB,MAAM,mCAAmC,CAAC"}
|
package/hooks/peek-coord.mjs
CHANGED
|
File without changes
|
package/hooks/roles.mjs
CHANGED
|
@@ -25,6 +25,10 @@ export const GATE_RUNNER_ROLE_IDS = new Set(["qa", "quality", "coordinator", "ga
|
|
|
25
25
|
// Coordinators countersign work orders (`go`) and in-flight contract
|
|
26
26
|
// amendments (`scope`).
|
|
27
27
|
export const COORDINATOR_ROLE_IDS = new Set(["coordinator"]);
|
|
28
|
+
// CI receives express-lane DONE: wake. Not a gate-runner — must not grant verdict.
|
|
29
|
+
export const CI_ROLE_IDS = new Set(["ci"]);
|
|
30
|
+
// Console / watchers. May send prefixed messages. Not a gate-runner.
|
|
31
|
+
export const AUTOMATION_ROLE_IDS = new Set(["automation"]);
|
|
28
32
|
|
|
29
33
|
// Normalize any role shape into {roleId, displayName, explicit}.
|
|
30
34
|
//
|
|
@@ -77,3 +81,11 @@ export function isGateRunner(role) {
|
|
|
77
81
|
export function isCoordinator(role) {
|
|
78
82
|
return roleMatches(role, COORDINATOR_ROLE_IDS);
|
|
79
83
|
}
|
|
84
|
+
|
|
85
|
+
export function isCi(role) {
|
|
86
|
+
return roleMatches(role, CI_ROLE_IDS);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function isAutomation(role) {
|
|
90
|
+
return roleMatches(role, AUTOMATION_ROLE_IDS);
|
|
91
|
+
}
|
package/hooks/tier.mjs
CHANGED
|
@@ -35,7 +35,7 @@ function tierFromRecord(rec, m, opts) {
|
|
|
35
35
|
case "scope":
|
|
36
36
|
return opts.trustedSenders?.has?.(m.from) ? "urgent" : "routine";
|
|
37
37
|
case "done":
|
|
38
|
-
return opts
|
|
38
|
+
return wakesOnDone(opts) ? "urgent" : "routine";
|
|
39
39
|
// risk / fyi / action / verdict: real semantics, but not a reason to
|
|
40
40
|
// interrupt someone else's turn. A risk that genuinely needs an immediate
|
|
41
41
|
// turn is a blocker — that judgement stays with the sender.
|
|
@@ -100,12 +100,17 @@ export function classifyTier(m, opts = {}) {
|
|
|
100
100
|
if (/^SCOPE(?: CHANGE)?:/.test(text)) {
|
|
101
101
|
return opts.trustedSenders?.has?.(m.from) ? "urgent" : "routine";
|
|
102
102
|
}
|
|
103
|
-
// DONE:
|
|
104
|
-
//
|
|
105
|
-
|
|
103
|
+
// DONE: wakes the merge gate (QA/coordinator) OR ci (express-lane).
|
|
104
|
+
// Classification lives on the GO (`gate: express`), not on the DONE line.
|
|
105
|
+
// Do not invent `DONE: express`. ci is not a gate-runner (no verdict).
|
|
106
|
+
if (text.startsWith("DONE:")) return wakesOnDone(opts) ? "urgent" : "routine";
|
|
106
107
|
return "routine";
|
|
107
108
|
}
|
|
108
109
|
|
|
110
|
+
function wakesOnDone(opts) {
|
|
111
|
+
return Boolean(opts.gateRunner || opts.ci);
|
|
112
|
+
}
|
|
113
|
+
|
|
109
114
|
// Tier with the enable switch applied — AGENT_COORD_TIERS=0 restores legacy
|
|
110
115
|
// push-everything.
|
|
111
116
|
export function effectiveTier(m, opts = {}) {
|