@rasensio/aidlc 1.66.0 → 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +2 -1
  2. package/dist/autopilot/driver.d.ts +35 -2
  3. package/dist/autopilot/driver.d.ts.map +1 -1
  4. package/dist/autopilot/driver.js +650 -27
  5. package/dist/autopilot/driver.js.map +1 -1
  6. package/dist/autopilot/presets.d.ts.map +1 -1
  7. package/dist/autopilot/presets.js +5 -0
  8. package/dist/autopilot/presets.js.map +1 -1
  9. package/dist/autopilot/result.d.ts +133 -0
  10. package/dist/autopilot/result.d.ts.map +1 -0
  11. package/dist/autopilot/result.js +431 -0
  12. package/dist/autopilot/result.js.map +1 -0
  13. package/dist/autopilot/run.d.ts +2 -0
  14. package/dist/autopilot/run.d.ts.map +1 -1
  15. package/dist/autopilot/run.js +33 -6
  16. package/dist/autopilot/run.js.map +1 -1
  17. package/dist/autopilot/state.d.ts +51 -0
  18. package/dist/autopilot/state.d.ts.map +1 -1
  19. package/dist/autopilot/state.js.map +1 -1
  20. package/dist/autopilot/typed.d.ts +98 -0
  21. package/dist/autopilot/typed.d.ts.map +1 -0
  22. package/dist/autopilot/typed.js +122 -0
  23. package/dist/autopilot/typed.js.map +1 -0
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +2 -0
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/hook.d.ts +37 -0
  28. package/dist/commands/hook.d.ts.map +1 -0
  29. package/dist/commands/hook.js +208 -0
  30. package/dist/commands/hook.js.map +1 -0
  31. package/dist/commands/init.d.ts +18 -0
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +66 -3
  34. package/dist/commands/init.js.map +1 -1
  35. package/dist/commands/knowledge.d.ts.map +1 -1
  36. package/dist/commands/knowledge.js +8 -4
  37. package/dist/commands/knowledge.js.map +1 -1
  38. package/dist/commands/roadmap.d.ts +20 -3
  39. package/dist/commands/roadmap.d.ts.map +1 -1
  40. package/dist/commands/roadmap.js +60 -15
  41. package/dist/commands/roadmap.js.map +1 -1
  42. package/dist/commands/update.d.ts.map +1 -1
  43. package/dist/commands/update.js +8 -2
  44. package/dist/commands/update.js.map +1 -1
  45. package/dist/compile/adapters/claude-code.d.ts.map +1 -1
  46. package/dist/compile/adapters/claude-code.js +35 -4
  47. package/dist/compile/adapters/claude-code.js.map +1 -1
  48. package/dist/compile/adapters/codex.d.ts +12 -0
  49. package/dist/compile/adapters/codex.d.ts.map +1 -1
  50. package/dist/compile/adapters/codex.js +58 -8
  51. package/dist/compile/adapters/codex.js.map +1 -1
  52. package/dist/compile/loaders.d.ts.map +1 -1
  53. package/dist/compile/loaders.js +2 -0
  54. package/dist/compile/loaders.js.map +1 -1
  55. package/dist/compile/skill-metadata.d.ts +82 -0
  56. package/dist/compile/skill-metadata.d.ts.map +1 -0
  57. package/dist/compile/skill-metadata.js +156 -0
  58. package/dist/compile/skill-metadata.js.map +1 -0
  59. package/dist/concurrency/claim-store.d.ts +17 -0
  60. package/dist/concurrency/claim-store.d.ts.map +1 -1
  61. package/dist/concurrency/claim-store.js +42 -2
  62. package/dist/concurrency/claim-store.js.map +1 -1
  63. package/dist/concurrency/common-dir.d.ts +15 -0
  64. package/dist/concurrency/common-dir.d.ts.map +1 -1
  65. package/dist/concurrency/common-dir.js +39 -0
  66. package/dist/concurrency/common-dir.js.map +1 -1
  67. package/dist/core/types.d.ts +17 -0
  68. package/dist/core/types.d.ts.map +1 -1
  69. package/dist/cost/hooks/arm.d.ts +9 -1
  70. package/dist/cost/hooks/arm.d.ts.map +1 -1
  71. package/dist/cost/hooks/arm.js +16 -2
  72. package/dist/cost/hooks/arm.js.map +1 -1
  73. package/dist/cost/providers/codex.d.ts +13 -0
  74. package/dist/cost/providers/codex.d.ts.map +1 -1
  75. package/dist/cost/providers/codex.js +74 -2
  76. package/dist/cost/providers/codex.js.map +1 -1
  77. package/dist/doctor/migrations/index.d.ts.map +1 -1
  78. package/dist/doctor/migrations/index.js +5 -0
  79. package/dist/doctor/migrations/index.js.map +1 -1
  80. package/dist/doctor/migrations/roadmap-mermaid-graphs.d.ts +22 -0
  81. package/dist/doctor/migrations/roadmap-mermaid-graphs.d.ts.map +1 -0
  82. package/dist/doctor/migrations/roadmap-mermaid-graphs.js +74 -0
  83. package/dist/doctor/migrations/roadmap-mermaid-graphs.js.map +1 -0
  84. package/dist/hooks/guard.d.ts +41 -0
  85. package/dist/hooks/guard.d.ts.map +1 -0
  86. package/dist/hooks/guard.js +108 -0
  87. package/dist/hooks/guard.js.map +1 -0
  88. package/dist/hooks/install.d.ts +78 -0
  89. package/dist/hooks/install.d.ts.map +1 -0
  90. package/dist/hooks/install.js +207 -0
  91. package/dist/hooks/install.js.map +1 -0
  92. package/dist/hooks/lifecycle-context.d.ts +65 -0
  93. package/dist/hooks/lifecycle-context.d.ts.map +1 -0
  94. package/dist/hooks/lifecycle-context.js +212 -0
  95. package/dist/hooks/lifecycle-context.js.map +1 -0
  96. package/dist/knowledge/engine.d.ts +19 -2
  97. package/dist/knowledge/engine.d.ts.map +1 -1
  98. package/dist/knowledge/engine.js +35 -11
  99. package/dist/knowledge/engine.js.map +1 -1
  100. package/dist/knowledge/index/knowledge-index.d.ts +28 -2
  101. package/dist/knowledge/index/knowledge-index.d.ts.map +1 -1
  102. package/dist/knowledge/index/sqlite-index.d.ts +19 -1
  103. package/dist/knowledge/index/sqlite-index.d.ts.map +1 -1
  104. package/dist/knowledge/index/sqlite-index.js +66 -5
  105. package/dist/knowledge/index/sqlite-index.js.map +1 -1
  106. package/dist/knowledge/source-fingerprint.d.ts +71 -0
  107. package/dist/knowledge/source-fingerprint.d.ts.map +1 -0
  108. package/dist/knowledge/source-fingerprint.js +105 -0
  109. package/dist/knowledge/source-fingerprint.js.map +1 -0
  110. package/dist/knowledge/sync.d.ts +12 -1
  111. package/dist/knowledge/sync.d.ts.map +1 -1
  112. package/dist/knowledge/sync.js +23 -3
  113. package/dist/knowledge/sync.js.map +1 -1
  114. package/dist/knowledge/types.d.ts +10 -1
  115. package/dist/knowledge/types.d.ts.map +1 -1
  116. package/dist/knowledge/types.js +10 -1
  117. package/dist/knowledge/types.js.map +1 -1
  118. package/dist/menu/roster.d.ts.map +1 -1
  119. package/dist/menu/roster.js +2 -0
  120. package/dist/menu/roster.js.map +1 -1
  121. package/dist/roadmap/graph.d.ts +73 -28
  122. package/dist/roadmap/graph.d.ts.map +1 -1
  123. package/dist/roadmap/graph.js +184 -125
  124. package/dist/roadmap/graph.js.map +1 -1
  125. package/dist/roadmap/next.d.ts +5 -0
  126. package/dist/roadmap/next.d.ts.map +1 -1
  127. package/dist/roadmap/next.js +7 -1
  128. package/dist/roadmap/next.js.map +1 -1
  129. package/dist/roadmap/open-browser.d.ts +34 -0
  130. package/dist/roadmap/open-browser.d.ts.map +1 -0
  131. package/dist/roadmap/open-browser.js +40 -0
  132. package/dist/roadmap/open-browser.js.map +1 -0
  133. package/dist/roadmap/paths.d.ts +5 -1
  134. package/dist/roadmap/paths.d.ts.map +1 -1
  135. package/dist/roadmap/paths.js +5 -9
  136. package/dist/roadmap/paths.js.map +1 -1
  137. package/dist/roadmap/view-assets.d.ts +18 -0
  138. package/dist/roadmap/view-assets.d.ts.map +1 -0
  139. package/dist/roadmap/view-assets.js +301 -0
  140. package/dist/roadmap/view-assets.js.map +1 -0
  141. package/dist/roadmap/view-html.d.ts +37 -0
  142. package/dist/roadmap/view-html.d.ts.map +1 -0
  143. package/dist/roadmap/view-html.js +317 -0
  144. package/dist/roadmap/view-html.js.map +1 -0
  145. package/dist/roadmap/view-model.d.ts +93 -0
  146. package/dist/roadmap/view-model.d.ts.map +1 -0
  147. package/dist/roadmap/view-model.js +194 -0
  148. package/dist/roadmap/view-model.js.map +1 -0
  149. package/package.json +2 -2
@@ -1,143 +1,202 @@
1
1
  /**
2
- * Roadmap dependency graph: two Mermaid files kept next to the items (roadmap-graph).
2
+ * The roadmap's dependency map, laid out (html-roadmap-view/AC-27..AC-29, AC-34).
3
3
  *
4
- * - `graph-backlog.mmd` — `backlog/` items only, with the `depends_on` edges between them.
5
- * - `graph-full.mmd` — every status, one subgraph each, with every `depends_on` edge.
4
+ * `depends_on` becomes a forest: each item sits under its first dependency, so it is
5
+ * drawn once, and gets a dashed link to each further one. Edges point from the
6
+ * dependency to the item that needs it. An id no item carries becomes a `missing` node
7
+ * rather than being dropped — a typo in `depends_on` silently blocks `roadmap next`, and
8
+ * the map is where it shows.
6
9
  *
7
- * Both are derived from disk and nothing else, so they are regenerated rather than edited:
8
- * `moveItem` rebuilds them after every move, and `aidlc roadmap graph` rebuilds them after
9
- * a move made by hand. A file is only written when its content changed, so an unrelated
10
- * move leaves no diff.
11
- *
12
- * Edges point from the dependency to the item that needs it (`A --> B`: B depends on A).
13
- * An edge to an id no item carries is drawn to a `missing` node rather than dropped — a
14
- * typo in `depends_on` silently blocks `roadmap next`, and the graph is where it shows.
10
+ * Laid out here, at generation time, and not in the browser: the same items always give
11
+ * the same coordinates, and the page script is left with events alone. This module
12
+ * replaced the two committed Mermaid files the roadmap used to keep
13
+ * (`graph-backlog.mmd`, `graph-full.mmd`), which every move rebuilt in whichever checkout
14
+ * ran it; the `roadmap-mermaid-graphs` doctor migration removes them.
15
15
  *
16
16
  * @module
17
17
  */
18
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
19
- import { join } from 'node:path';
20
- import { frontmatter, listStatusAt, ROADMAP_STATUSES } from './paths.js';
21
- import { parsePriority } from './next.js';
22
- /** File name of each view, relative to the roadmap root. */
23
- export const GRAPH_FILES = {
24
- backlog: 'graph-backlog.mmd',
25
- full: 'graph-full.mmd',
26
- };
27
- const HEADER = [
28
- '%% Generated by aidlc from .aidlc/roadmap/ — do not edit.',
29
- '%% Rebuilt on every item move; after a move by hand run `aidlc roadmap graph`.',
30
- ];
31
- const CLASS_DEFS = {
32
- inbox: 'fill:#eef2ff,stroke:#6366f1',
33
- backlog: 'fill:#fef9c3,stroke:#ca8a04',
34
- 'in-progress': 'fill:#dbeafe,stroke:#2563eb',
35
- done: 'fill:#dcfce7,stroke:#16a34a',
36
- hold: 'fill:#f3f4f6,stroke:#6b7280',
37
- missing: 'fill:#fee2e2,stroke:#dc2626,stroke-dasharray:4 2',
38
- };
39
- /** A Mermaid-safe node id. Item ids are `item-YYYYMMDD-slug`; anything else is folded. */
40
- function nodeId(key) {
41
- return `n_${key.replace(/[^A-Za-z0-9]/g, '_')}`;
42
- }
43
- /** `in-progress` is not a valid Mermaid class or subgraph id. */
44
- function className(status) {
45
- return status.replace('-', '_');
46
- }
18
+ /** Node box size, and the grid it sits on, in SVG user units. */
19
+ export const NODE_W = 240;
20
+ export const NODE_H = 48;
21
+ const COL_W = 300;
22
+ const ROW_H = 64;
23
+ const PAD = 16;
24
+ /** Space between two packed trees, and between the forest and the unlinked grid. */
25
+ const TREE_GAP = 64;
26
+ /** Fewest unlinked items to a row, however narrow the forest. */
27
+ const UNLINKED_PER_ROW = 4;
47
28
  /**
48
- * A quoted Mermaid label. Quotes, backticks and angle brackets become entity codes:
49
- * a label opening with a backtick is parsed as a Markdown string, and titles here
50
- * routinely open with one.
29
+ * Lay out the dependency forest. Pure: the same items in the same order give the same
30
+ * coordinates, because every tie is broken by input order (AC-34).
31
+ *
32
+ * An item sits under its first dependency and gets a dashed link to each further one, so
33
+ * it is drawn once however many things it needs (AC-27). Following first dependencies can
34
+ * loop (AC-29); each loop is cut at the member earliest in input order, which becomes a
35
+ * root and keeps its link to the rest as a dashed edge. Without the cut a loop has no
36
+ * root, so its members are never placed and come out with no coordinates.
51
37
  */
52
- function label(text) {
53
- const escaped = text
54
- .replace(/"/g, '#quot;')
55
- .replace(/`/g, '#96;')
56
- .replace(/</g, '#lt;')
57
- .replace(/>/g, '#gt;');
58
- return `"${escaped}"`;
59
- }
60
- function toNode(item) {
61
- const data = frontmatter(item.raw)?.data ?? {};
62
- const key = item.id ?? item.filename.replace(/\.md$/, '');
63
- const deps = Array.isArray(data.depends_on)
64
- ? data.depends_on.filter((d) => typeof d === 'string')
65
- : [];
66
- const priority = parsePriority(data.priority);
67
- const rank = typeof priority === 'number' && item.status === 'backlog' ? `#${priority} ` : '';
68
- return { key, nodeId: nodeId(key), label: `${rank}${item.title ?? item.filename}`, status: item.status, deps };
69
- }
70
- /** Every item under `root`, as graph nodes, in status order then file name. */
71
- export function readNodes(root) {
72
- return ROADMAP_STATUSES.flatMap((status) => listStatusAt(root, status).map(toNode));
73
- }
74
- /** Render one view as Mermaid source. Pure: same nodes in, same bytes out. */
75
- export function renderGraph(all, view) {
76
- const nodes = view === 'backlog' ? all.filter((n) => n.status === 'backlog') : [...all];
77
- const known = new Map(all.map((n) => [n.key, n]));
78
- const shown = new Set(nodes.map((n) => n.key));
79
- const lines = [...HEADER, 'flowchart LR'];
80
- const nodeLine = (n) => `${n.nodeId}[${label(n.label)}]:::${className(n.status)}`;
81
- if (view === 'full') {
82
- for (const status of ROADMAP_STATUSES) {
83
- const group = nodes.filter((n) => n.status === status);
84
- if (group.length === 0)
38
+ export function layoutMap(items) {
39
+ const refOfKey = new Map();
40
+ for (const item of items)
41
+ if (!refOfKey.has(item.key))
42
+ refOfKey.set(item.key, item.ref);
43
+ const missingIds = [...new Set(items.flatMap((i) => i.deps).filter((d) => !refOfKey.has(d)))].sort();
44
+ const missing = missingIds.map((id, n) => ({ ref: `m${n}`, id }));
45
+ const refOfDep = new Map([...refOfKey, ...missing.map((m) => [m.id, m.ref])]);
46
+ const order = [...items.map((i) => i.ref), ...missing.map((m) => m.ref)];
47
+ const position = new Map(order.map((ref, n) => [ref, n]));
48
+ const byOrder = (a, b) => position.get(a) - position.get(b);
49
+ const links = {};
50
+ for (const ref of order)
51
+ links[ref] = { needs: [], neededBy: [] };
52
+ for (const item of items) {
53
+ for (const dep of item.deps) {
54
+ const target = refOfDep.get(dep);
55
+ if (target === item.ref || links[item.ref].needs.includes(target))
85
56
  continue;
86
- lines.push(` subgraph ${className(status)}["${status} (${group.length})"]`);
87
- for (const n of group)
88
- lines.push(` ${nodeLine(n)}`);
89
- lines.push(' end');
57
+ links[item.ref].needs.push(target);
58
+ links[target].neededBy.push(item.ref);
90
59
  }
91
60
  }
92
- else {
93
- for (const n of nodes)
94
- lines.push(` ${nodeLine(n)}`);
95
- }
96
- const missing = new Set();
97
- const edges = [];
98
- for (const n of nodes) {
99
- for (const dep of n.deps) {
100
- if (shown.has(dep)) {
101
- edges.push(` ${nodeId(dep)} --> ${n.nodeId}`);
102
- }
103
- else if (view === 'full' && !known.has(dep)) {
104
- missing.add(dep);
105
- edges.push(` ${nodeId(dep)} -.-> ${n.nodeId}`);
61
+ const linked = order.filter((ref) => links[ref].needs.length > 0 || links[ref].neededBy.length > 0);
62
+ const parent = new Map(linked.map((ref) => [ref, links[ref].needs[0] ?? null]));
63
+ // Cut parent loops. 1 = on the current walk, 2 = settled.
64
+ const state = new Map();
65
+ for (const start of linked) {
66
+ const path = [];
67
+ let cur = start;
68
+ while (cur !== null && state.get(cur) !== 2) {
69
+ if (state.get(cur) === 1) {
70
+ const loop = path.slice(path.indexOf(cur));
71
+ parent.set([...loop].sort(byOrder)[0], null);
72
+ break;
106
73
  }
107
- // backlog view: a dependency outside backlog/ is out of the picture by definition.
74
+ state.set(cur, 1);
75
+ path.push(cur);
76
+ cur = parent.get(cur) ?? null;
108
77
  }
78
+ for (const p of path)
79
+ state.set(p, 2);
109
80
  }
110
- for (const dep of [...missing].sort())
111
- lines.push(` ${nodeId(dep)}[${label(`missing: ${dep}`)}]:::missing`);
112
- lines.push(...edges);
113
- const used = new Set(nodes.map((n) => n.status));
114
- if (missing.size > 0)
115
- used.add('missing');
116
- for (const [cls, style] of Object.entries(CLASS_DEFS)) {
117
- if (used.has(cls))
118
- lines.push(` classDef ${className(cls)} ${style}`);
81
+ const children = new Map(linked.map((ref) => [ref, []]));
82
+ for (const ref of linked) {
83
+ const p = parent.get(ref);
84
+ if (p != null)
85
+ children.get(p).push(ref);
119
86
  }
120
- return `${lines.join('\n')}\n`;
121
- }
122
- /**
123
- * Rebuild both graph files under `root`. Writes only what changed.
124
- *
125
- * @returns Absolute paths of the files written.
126
- */
127
- export function writeGraphs(root) {
128
- if (!existsSync(root))
129
- return [];
130
- const nodes = readNodes(root);
131
- const written = [];
132
- for (const view of Object.keys(GRAPH_FILES)) {
133
- const file = join(root, GRAPH_FILES[view]);
134
- const next = renderGraph(nodes, view);
135
- const current = existsSync(file) ? readFileSync(file, 'utf8') : null;
136
- if (current === next)
137
- continue;
138
- writeFileSync(file, next, 'utf8');
139
- written.push(file);
87
+ const edges = [];
88
+ for (const ref of linked) {
89
+ for (const dep of links[ref].needs)
90
+ edges.push({ from: dep, to: ref, dashed: dep !== parent.get(ref) });
140
91
  }
141
- return written;
92
+ // Tidy tree, left to right: depth is the column, each leaf takes the next row of its
93
+ // tree, a parent sits midway between its first and last child.
94
+ const row = new Map();
95
+ const depth = new Map();
96
+ const treeOf = new Map();
97
+ let nextRow = 0;
98
+ const place = (ref, d, tree) => {
99
+ depth.set(ref, d);
100
+ treeOf.set(ref, tree);
101
+ const kids = children.get(ref);
102
+ if (kids.length === 0) {
103
+ row.set(ref, nextRow++);
104
+ return;
105
+ }
106
+ for (const kid of kids)
107
+ place(kid, d + 1, tree);
108
+ row.set(ref, (row.get(kids[0]) + row.get(kids[kids.length - 1])) / 2);
109
+ };
110
+ const roots = linked.filter((ref) => parent.get(ref) === null);
111
+ const trees = roots.map((root, t) => {
112
+ nextRow = 0;
113
+ place(root, 0, t);
114
+ const members = linked.filter((ref) => treeOf.get(ref) === t);
115
+ const depthMax = Math.max(...members.map((ref) => depth.get(ref)));
116
+ return { width: depthMax * COL_W + NODE_W, height: (nextRow - 1) * ROW_H + NODE_H, x: 0, y: 0 };
117
+ });
118
+ // Shelf-pack the trees, in order, into rows. Stacked in one column, this repository's 23
119
+ // small trees made a strip so tall that fitting it to a screen shrank labels to a fifth
120
+ // of their size. Each possible first-row width is tried and the packing closest to 16:9
121
+ // kept, ties to the narrower — a single estimated width quantises badly when trees are
122
+ // alike (24 equal trees came out taller than wide).
123
+ const pack = (target) => {
124
+ let x = 0;
125
+ let y = 0;
126
+ let shelf = 0;
127
+ let width = 0;
128
+ const at = trees.map((t) => {
129
+ if (x > 0 && x + t.width > target) {
130
+ x = 0;
131
+ y += shelf + TREE_GAP;
132
+ shelf = 0;
133
+ }
134
+ const spot = { x, y };
135
+ width = Math.max(width, x + t.width);
136
+ x += t.width + TREE_GAP;
137
+ shelf = Math.max(shelf, t.height);
138
+ return spot;
139
+ });
140
+ return { width, height: y + shelf, at };
141
+ };
142
+ let best = pack(0);
143
+ let firstRow = -TREE_GAP;
144
+ for (const t of trees) {
145
+ firstRow += t.width + TREE_GAP;
146
+ const candidate = pack(firstRow);
147
+ const off = (p) => Math.abs(Math.log(p.width / p.height / (16 / 9)));
148
+ if (off(candidate) < off(best))
149
+ best = candidate;
150
+ }
151
+ trees.forEach((t, n) => Object.assign(t, best.at[n]));
152
+ const forestHeight = trees.length > 0 ? best.height : 0;
153
+ const targetWidth = Math.max(best.width, NODE_W);
154
+ const descendants = (ref, next) => {
155
+ const seen = new Set();
156
+ const stack = [...next(ref)];
157
+ while (stack.length > 0) {
158
+ const r = stack.pop();
159
+ if (r === ref || seen.has(r))
160
+ continue;
161
+ seen.add(r);
162
+ stack.push(...next(r));
163
+ }
164
+ return [...seen].sort(byOrder);
165
+ };
166
+ const nodes = linked.map((ref) => ({
167
+ ref,
168
+ x: PAD + trees[treeOf.get(ref)].x + depth.get(ref) * COL_W,
169
+ y: PAD + trees[treeOf.get(ref)].y + Math.round(row.get(ref) * ROW_H),
170
+ depth: depth.get(ref),
171
+ parent: parent.get(ref) ?? null,
172
+ subtree: descendants(ref, (r) => children.get(r) ?? []),
173
+ chain: [...new Set([...descendants(ref, (r) => links[r].needs), ...descendants(ref, (r) => links[r].neededBy)])].sort(byOrder),
174
+ }));
175
+ const linkedSet = new Set(linked);
176
+ const unlinkedTop = trees.length > 0 ? forestHeight + TREE_GAP : 0;
177
+ // As wide as the forest, so showing them does not turn the map back into a strip.
178
+ const perRow = Math.max(UNLINKED_PER_ROW, Math.floor((targetWidth + COL_W - NODE_W) / COL_W));
179
+ const unlinked = items
180
+ .filter((i) => !linkedSet.has(i.ref))
181
+ .map((i, n) => ({
182
+ ref: i.ref,
183
+ x: PAD + (n % perRow) * COL_W,
184
+ y: PAD + unlinkedTop + Math.floor(n / perRow) * ROW_H,
185
+ }));
186
+ const size = (boxes) => boxes.length === 0
187
+ ? { width: 0, height: 0 }
188
+ : {
189
+ width: Math.max(...boxes.map((b) => b.x)) + NODE_W + PAD,
190
+ height: Math.max(...boxes.map((b) => b.y)) + NODE_H + PAD,
191
+ };
192
+ return {
193
+ nodes,
194
+ missing,
195
+ edges,
196
+ unlinked,
197
+ links,
198
+ linkedSize: size(nodes),
199
+ fullSize: size([...nodes, ...unlinked]),
200
+ };
142
201
  }
143
202
  //# sourceMappingURL=graph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/roadmap/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/roadmap/graph.ts"],"names":[],"mappings":"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"}
@@ -54,4 +54,9 @@ export declare function parsePriority(raw: unknown): number | null | 'bad';
54
54
  /** Priority ascending, unranked last, then file name — total, so the pick is stable. */
55
55
  export declare function compareCandidates(a: NextCandidate, b: NextCandidate): number;
56
56
  export declare function pickNext(cwd: string): NextResult;
57
+ /**
58
+ * `pickNext` against an explicit roadmap root — what `aidlc roadmap view` calls, so the
59
+ * board marks as ready exactly what `roadmap next` would offer (html-roadmap-view/AC-17).
60
+ */
61
+ export declare function pickNextAt(root: string): NextResult;
57
62
  //# sourceMappingURL=next.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/roadmap/next.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA0C,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,MAAM,GAAG,IAAI,CAErF;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,yGAAyG;IACzG,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CACpD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAIjE;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAO5E;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAgDhD"}
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/roadmap/next.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA0C,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEtF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,MAAM,GAAG,IAAI,CAErF;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,yGAAyG;IACzG,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CACpD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAIjE;AAED,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAO5E;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAEhD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CA8CnD"}
@@ -50,7 +50,13 @@ export function compareCandidates(a, b) {
50
50
  return a.file < b.file ? -1 : a.file > b.file ? 1 : 0;
51
51
  }
52
52
  export function pickNext(cwd) {
53
- const root = roadmapRoot(cwd);
53
+ return pickNextAt(roadmapRoot(cwd));
54
+ }
55
+ /**
56
+ * `pickNext` against an explicit roadmap root — what `aidlc roadmap view` calls, so the
57
+ * board marks as ready exactly what `roadmap next` would offer (html-roadmap-view/AC-17).
58
+ */
59
+ export function pickNextAt(root) {
54
60
  const doneIds = new Set();
55
61
  for (const item of listStatusAt(root, 'done')) {
56
62
  if (item.id)
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/roadmap/next.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/roadmap/next.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Open a file in the default browser (html-roadmap-view/AC-1, AC-5).
3
+ *
4
+ * One launcher per platform, always given an argument vector and never a shell string, so
5
+ * a path cannot become a command. That rules out `cmd /c start` on Windows, which is a
6
+ * shell; `explorer.exe <file>` hands the file to its default handler without one.
7
+ *
8
+ * Resolves as soon as the launcher has started or failed to. It never waits for the exit:
9
+ * `xdg-open` can block until the browser it started is closed.
10
+ *
11
+ * @module
12
+ */
13
+ /** The part of a child process this needs — what a test fake has to provide. */
14
+ export interface Launched {
15
+ once(event: 'spawn', listener: () => void): unknown;
16
+ once(event: 'error', listener: (err: Error) => void): unknown;
17
+ unref(): void;
18
+ }
19
+ export type Spawn = (cmd: string, args: string[]) => Launched;
20
+ export type OpenResult = {
21
+ ok: true;
22
+ } | {
23
+ ok: false;
24
+ error: string;
25
+ };
26
+ export declare function launcherFor(platform: NodeJS.Platform, file: string): {
27
+ cmd: string;
28
+ args: string[];
29
+ };
30
+ export declare function openInBrowser(file: string, opts?: {
31
+ platform?: NodeJS.Platform;
32
+ spawn?: Spawn;
33
+ }): Promise<OpenResult>;
34
+ //# sourceMappingURL=open-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-browser.d.ts","sourceRoot":"","sources":["../../src/roadmap/open-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,gFAAgF;AAChF,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;IAC9D,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,QAAQ,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAIpG;AAID,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAO,GACvD,OAAO,CAAC,UAAU,CAAC,CAgBrB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Open a file in the default browser (html-roadmap-view/AC-1, AC-5).
3
+ *
4
+ * One launcher per platform, always given an argument vector and never a shell string, so
5
+ * a path cannot become a command. That rules out `cmd /c start` on Windows, which is a
6
+ * shell; `explorer.exe <file>` hands the file to its default handler without one.
7
+ *
8
+ * Resolves as soon as the launcher has started or failed to. It never waits for the exit:
9
+ * `xdg-open` can block until the browser it started is closed.
10
+ *
11
+ * @module
12
+ */
13
+ import { spawn as nodeSpawn } from 'node:child_process';
14
+ export function launcherFor(platform, file) {
15
+ if (platform === 'darwin')
16
+ return { cmd: 'open', args: [file] };
17
+ if (platform === 'win32')
18
+ return { cmd: 'explorer.exe', args: [file] };
19
+ return { cmd: 'xdg-open', args: [file] };
20
+ }
21
+ const realSpawn = (cmd, args) => nodeSpawn(cmd, args, { stdio: 'ignore', detached: true });
22
+ export function openInBrowser(file, opts = {}) {
23
+ const { cmd, args } = launcherFor(opts.platform ?? process.platform, file);
24
+ return new Promise((resolve) => {
25
+ let child;
26
+ try {
27
+ child = (opts.spawn ?? realSpawn)(cmd, args);
28
+ }
29
+ catch (e) {
30
+ resolve({ ok: false, error: e.message });
31
+ return;
32
+ }
33
+ child.once('error', (err) => resolve({ ok: false, error: `${cmd}: ${err.message}` }));
34
+ child.once('spawn', () => {
35
+ child.unref();
36
+ resolve({ ok: true });
37
+ });
38
+ });
39
+ }
40
+ //# sourceMappingURL=open-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-browser.js","sourceRoot":"","sources":["../../src/roadmap/open-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAaxD,MAAM,UAAU,WAAW,CAAC,QAAyB,EAAE,IAAY;IACjE,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IAChE,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IACvE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,SAAS,GAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAElG,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,OAAsD,EAAE;IAExD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -238,7 +238,11 @@ export declare function writeHistoryEntry(raw: string, status: RoadmapStatus, at
238
238
  * says whether the item is parked or declined (inbox-intake-bar/AC-15). Optional here
239
239
  * because this function moves items in every direction, and the rule about `hold/`
240
240
  * belongs to the flow that decided to park something, not to the file mover.
241
- * Rebuilds the roadmap dependency graphs (`graph.ts`) under the same root afterwards.
241
+ *
242
+ * Writes the item and nothing else (html-roadmap-view/AC-35). It used to rebuild two
243
+ * committed Mermaid graphs as well, so every promotion left two shared generated files
244
+ * modified in whichever checkout ran it; `aidlc roadmap view` now draws the roadmap on
245
+ * demand, outside the working tree.
242
246
  *
243
247
  * @returns The new absolute path.
244
248
  */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/roadmap/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/roadmap/paths.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,6 @@ import { existsSync, readFileSync, readdirSync, realpathSync, renameSync, writeF
16
16
  import { basename, dirname, isAbsolute, join } from 'node:path';
17
17
  import { parse as parseYaml } from 'yaml';
18
18
  import { primaryWorkingTree } from '../concurrency/common-dir.js';
19
- import { writeGraphs } from './graph.js';
20
19
  /** The five status directories, in lifecycle order. */
21
20
  export const ROADMAP_STATUSES = ['inbox', 'backlog', 'in-progress', 'done', 'hold'];
22
21
  /** Repo-relative roadmap root. */
@@ -412,7 +411,11 @@ export function writeHistoryEntry(raw, status, at, reason) {
412
411
  * says whether the item is parked or declined (inbox-intake-bar/AC-15). Optional here
413
412
  * because this function moves items in every direction, and the rule about `hold/`
414
413
  * belongs to the flow that decided to park something, not to the file mover.
415
- * Rebuilds the roadmap dependency graphs (`graph.ts`) under the same root afterwards.
414
+ *
415
+ * Writes the item and nothing else (html-roadmap-view/AC-35). It used to rebuild two
416
+ * committed Mermaid graphs as well, so every promotion left two shared generated files
417
+ * modified in whichever checkout ran it; `aidlc roadmap view` now draws the roadmap on
418
+ * demand, outside the working tree.
416
419
  *
417
420
  * @returns The new absolute path.
418
421
  */
@@ -426,13 +429,6 @@ export function moveItem(item, cwd, status, at, reason) {
426
429
  mkdirSync(dir, { recursive: true });
427
430
  const target = join(dir, item.filename);
428
431
  renameSync(item.file, target);
429
- // The move has happened; a graph that fails to rebuild must not undo or fail it.
430
- try {
431
- writeGraphs(root);
432
- }
433
- catch {
434
- // `aidlc roadmap graph` rebuilds it and reports the error.
435
- }
436
432
  return target;
437
433
  }
438
434
  /**