specweave 3.0.3 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/bin/specweave.js +7 -2
  3. package/dist/src/cli/commands/auto-handoff.d.ts +21 -5
  4. package/dist/src/cli/commands/auto-handoff.d.ts.map +1 -1
  5. package/dist/src/cli/commands/auto-handoff.js +132 -28
  6. package/dist/src/cli/commands/auto-handoff.js.map +1 -1
  7. package/dist/src/cli/commands/handoff.d.ts +10 -0
  8. package/dist/src/cli/commands/handoff.d.ts.map +1 -1
  9. package/dist/src/cli/commands/handoff.js +50 -0
  10. package/dist/src/cli/commands/handoff.js.map +1 -1
  11. package/dist/src/cli/commands/jev-helpers.d.ts +1 -1
  12. package/dist/src/cli/commands/jev-helpers.d.ts.map +1 -1
  13. package/dist/src/cli/commands/jev-helpers.js +8 -4
  14. package/dist/src/cli/commands/jev-helpers.js.map +1 -1
  15. package/dist/src/cli/commands/jev.js +4 -4
  16. package/dist/src/cli/commands/jev.js.map +1 -1
  17. package/dist/src/cli/commands/pickup.d.ts +11 -0
  18. package/dist/src/cli/commands/pickup.d.ts.map +1 -1
  19. package/dist/src/cli/commands/pickup.js +28 -8
  20. package/dist/src/cli/commands/pickup.js.map +1 -1
  21. package/dist/src/cli/helpers/init/gitignore-generator.d.ts.map +1 -1
  22. package/dist/src/cli/helpers/init/gitignore-generator.js +26 -5
  23. package/dist/src/cli/helpers/init/gitignore-generator.js.map +1 -1
  24. package/dist/src/core/config/types.d.ts +2 -2
  25. package/dist/src/core/config/types.d.ts.map +1 -1
  26. package/dist/src/core/jev/client.d.ts +4 -1
  27. package/dist/src/core/jev/client.d.ts.map +1 -1
  28. package/dist/src/core/jev/client.js +118 -23
  29. package/dist/src/core/jev/client.js.map +1 -1
  30. package/dist/src/core/jev/config.d.ts +1 -1
  31. package/dist/src/core/jev/config.d.ts.map +1 -1
  32. package/dist/src/core/jev/config.js +8 -3
  33. package/dist/src/core/jev/config.js.map +1 -1
  34. package/dist/src/core/jev/openai.d.ts +21 -0
  35. package/dist/src/core/jev/openai.d.ts.map +1 -0
  36. package/dist/src/core/jev/openai.js +116 -0
  37. package/dist/src/core/jev/openai.js.map +1 -0
  38. package/dist/src/core/jev/usage.d.ts +4 -0
  39. package/dist/src/core/jev/usage.d.ts.map +1 -1
  40. package/dist/src/core/jev/usage.js +3 -0
  41. package/dist/src/core/jev/usage.js.map +1 -1
  42. package/dist/src/core/session/handoff-all.d.ts +124 -0
  43. package/dist/src/core/session/handoff-all.d.ts.map +1 -0
  44. package/dist/src/core/session/handoff-all.js +429 -0
  45. package/dist/src/core/session/handoff-all.js.map +1 -0
  46. package/dist/src/core/session/handoff-doc-format.d.ts +7 -0
  47. package/dist/src/core/session/handoff-doc-format.d.ts.map +1 -1
  48. package/dist/src/core/session/handoff-doc-format.js +12 -0
  49. package/dist/src/core/session/handoff-doc-format.js.map +1 -1
  50. package/dist/src/core/session/handoff-report.js +1 -0
  51. package/dist/src/core/session/handoff-report.js.map +1 -1
  52. package/dist/src/core/session/nested-repos.d.ts +90 -0
  53. package/dist/src/core/session/nested-repos.d.ts.map +1 -0
  54. package/dist/src/core/session/nested-repos.js +239 -0
  55. package/dist/src/core/session/nested-repos.js.map +1 -0
  56. package/dist/src/core/session/pickup.d.ts +1 -0
  57. package/dist/src/core/session/pickup.d.ts.map +1 -1
  58. package/dist/src/core/session/pickup.js +4 -4
  59. package/dist/src/core/session/pickup.js.map +1 -1
  60. package/dist/src/core/session/usage-guard.d.ts +84 -13
  61. package/dist/src/core/session/usage-guard.d.ts.map +1 -1
  62. package/dist/src/core/session/usage-guard.js +206 -15
  63. package/dist/src/core/session/usage-guard.js.map +1 -1
  64. package/dist/src/core/session/work-handoff.d.ts +2 -0
  65. package/dist/src/core/session/work-handoff.d.ts.map +1 -1
  66. package/dist/src/core/session/work-handoff.js +24 -3
  67. package/dist/src/core/session/work-handoff.js.map +1 -1
  68. package/dist/src/core/tasks/ledger.d.ts +5 -1
  69. package/dist/src/core/tasks/ledger.d.ts.map +1 -1
  70. package/dist/src/core/tasks/ledger.js +6 -2
  71. package/dist/src/core/tasks/ledger.js.map +1 -1
  72. package/package.json +1 -1
  73. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  74. package/plugins/specweave/skills/handoff/SKILL.md +42 -5
  75. package/plugins/specweave/skills/jev/SKILL.md +81 -83
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Handoff index: `specweave handoff --all` and `specweave pickup --all`.
3
+ *
4
+ * One read for switching accounts or tools with many increments in flight.
5
+ * `handoff --all` writes `.specweave/handoffs/<YYYY-MM-DD>-INDEX.md` plus
6
+ * `.specweave/handoffs/index.json` with one row per active increment (tasks,
7
+ * open ACs, last activity, what it waits on, a paste-ready resume prompt) and,
8
+ * in an umbrella workspace, every nested checkout holding work that exists only
9
+ * on this machine. `pickup --all` prints the newest index, actionable rows
10
+ * first.
11
+ *
12
+ * Read-only toward everything but the index files: no ledger events, no claims
13
+ * released, nothing committed or pushed, in the umbrella or in nested repos.
14
+ *
15
+ * @module core/session/handoff-all
16
+ */
17
+ import { type PrLookup } from './nested-repos.js';
18
+ export declare const HANDOFFS_DIR = ".specweave/handoffs";
19
+ export declare const INDEX_JSON_FILE = "index.json";
20
+ /** Generator marker: an INDEX file without it was written by a person and is left alone. */
21
+ export declare const INDEX_MARKER = "<!-- Handoff index v1 -->";
22
+ export interface IndexRepo {
23
+ path: string;
24
+ branch: string;
25
+ sha: string;
26
+ dirty: number;
27
+ ahead: number;
28
+ noRemote: boolean;
29
+ upstream?: string;
30
+ lastCommitAt?: string;
31
+ pr?: {
32
+ number: number;
33
+ url: string;
34
+ state: string;
35
+ isDraft: boolean;
36
+ };
37
+ increments: string[];
38
+ }
39
+ export interface IndexRow {
40
+ id: string;
41
+ title: string;
42
+ status: string;
43
+ tasksDone: number;
44
+ tasksTotal: number;
45
+ openAcs: string[];
46
+ totalAcs: number;
47
+ lastActivityAt?: string;
48
+ /** What the increment waits on (a person, a decision), from `wait` events and handoff.md. */
49
+ waits: string[];
50
+ /** Repo-relative handoff docs that exist for it (`handoff.md`, `handoff.auto.md`). */
51
+ handoffDocs: string[];
52
+ /** Nested checkouts with local-only work whose path or branch carries this increment's id. */
53
+ repos: string[];
54
+ resumePrompt: string;
55
+ }
56
+ export interface HandoffIndex {
57
+ version: 1;
58
+ generatedAt: string;
59
+ /** Local date, YYYY-MM-DD. */
60
+ date: string;
61
+ root: string;
62
+ agent: string;
63
+ reason?: string;
64
+ rows: IndexRow[];
65
+ /** Absent when the workspace has no `repositories/` folder or the scan was skipped. */
66
+ repos?: {
67
+ scanned: number;
68
+ flagged: IndexRepo[];
69
+ };
70
+ }
71
+ export interface HandoffIndexOptions {
72
+ reason?: string;
73
+ agent?: string;
74
+ /** Scan nested repos (default: when `repositories/` exists). */
75
+ scanRepos?: boolean;
76
+ /** PR lookup for the nested scan (default: gh when installed); `false` skips it. */
77
+ prLookup?: PrLookup | false;
78
+ now?: Date;
79
+ }
80
+ export interface WriteIndexOptions extends HandoffIndexOptions {
81
+ /** Directory to write into (default `.specweave/handoffs`). */
82
+ outDir?: string;
83
+ /** Build and render only; write nothing. */
84
+ dryRun?: boolean;
85
+ }
86
+ export interface WriteIndexResult {
87
+ index: HandoffIndex;
88
+ markdown: string;
89
+ mdPath: string;
90
+ jsonPath: string;
91
+ written: boolean;
92
+ }
93
+ /**
94
+ * Open waits of an increment: `wait` ledger events after the last clearing one,
95
+ * then "Waits on" / "Waiting on" lines (or a section with that heading) in its
96
+ * handoff docs.
97
+ */
98
+ export declare function readWaits(incDir: string): string[];
99
+ /** "Waits on: X", "**Waiting on Anton:** X", or bullets under a "## Waiting on …" heading. */
100
+ export declare function parseWaitLines(text: string): string[];
101
+ export declare function buildResumePrompt(root: string, row: Omit<IndexRow, 'resumePrompt'>, repos: IndexRepo[]): string;
102
+ /** Build the index. Never writes. */
103
+ export declare function buildHandoffIndex(root: string, opts?: HandoffIndexOptions): Promise<HandoffIndex>;
104
+ /** Rows without waits first, then waiting rows; newest activity first inside each group. */
105
+ export declare function sortRows(rows: IndexRow[]): {
106
+ actionable: IndexRow[];
107
+ waiting: IndexRow[];
108
+ };
109
+ /** Render INDEX.md. `keep` blocks from the previous version go under the header. */
110
+ export declare function renderHandoffIndex(index: HandoffIndex, keep?: string[]): string;
111
+ /** Build, render and (unless `dryRun`) write INDEX.md and index.json. */
112
+ export declare function writeHandoffIndex(root: string, opts?: WriteIndexOptions): Promise<WriteIndexResult>;
113
+ export interface LatestIndex {
114
+ index?: HandoffIndex & {
115
+ markdown?: string;
116
+ };
117
+ /** The newest INDEX markdown file, when there is one. */
118
+ mdPath?: string;
119
+ }
120
+ /** The newest index: `index.json` when present, else the newest `*-INDEX*.md` file. */
121
+ export declare function readLatestIndex(root: string): LatestIndex;
122
+ /** What `pickup --all` prints: actionable rows first, then waiting rows, then local-only repos. */
123
+ export declare function renderPickupAll(root: string, latest: LatestIndex, now?: Date): string;
124
+ //# sourceMappingURL=handoff-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff-all.d.ts","sourceRoot":"","sources":["../../../../src/core/session/handoff-all.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,OAAO,EAAuC,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEvF,eAAO,MAAM,YAAY,wBAAwB,CAAC;AAClD,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,4FAA4F;AAC5F,eAAO,MAAM,YAAY,8BAA8B,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACtE,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6FAA6F;IAC7F,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,sFAAsF;IACtF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,8FAA8F;IAC9F,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,uFAAuF;IACvF,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;CACnD;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC5B,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAOD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAclD;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0BrD;AAwDD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAU/G;AAwBD,qCAAqC;AACrC,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CA0D3G;AAsBD,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG;IAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAAC,OAAO,EAAE,QAAQ,EAAE,CAAA;CAAE,CAM1F;AAOD,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,MAAM,CAqDnF;AAQD,yEAAyE;AACzE,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgB7G;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,YAAY,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAiBzD;AAED,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CA6BjG"}
@@ -0,0 +1,429 @@
1
+ /**
2
+ * Handoff index: `specweave handoff --all` and `specweave pickup --all`.
3
+ *
4
+ * One read for switching accounts or tools with many increments in flight.
5
+ * `handoff --all` writes `.specweave/handoffs/<YYYY-MM-DD>-INDEX.md` plus
6
+ * `.specweave/handoffs/index.json` with one row per active increment (tasks,
7
+ * open ACs, last activity, what it waits on, a paste-ready resume prompt) and,
8
+ * in an umbrella workspace, every nested checkout holding work that exists only
9
+ * on this machine. `pickup --all` prints the newest index, actionable rows
10
+ * first.
11
+ *
12
+ * Read-only toward everything but the index files: no ledger events, no claims
13
+ * released, nothing committed or pushed, in the umbrella or in nested repos.
14
+ *
15
+ * @module core/session/handoff-all
16
+ */
17
+ import * as fs from 'fs';
18
+ import * as os from 'os';
19
+ import * as path from 'path';
20
+ import { getAgentId, ledgerPath, readLedger, readIncrementEvents } from '../tasks/ledger.js';
21
+ import { loadTaskBoard } from '../tasks/task-board.js';
22
+ import { hasTasksFile } from '../tasks/tasks-source.js';
23
+ import { incrementsDir, listActiveIncrementIds, readLeaseHours } from '../tasks/resolve-increment.js';
24
+ import { readSpecAcs, deriveAcStatus } from '../tasks/verify-runner.js';
25
+ import { scrubSecrets } from './handoff-secret-scrub.js';
26
+ import { extractKeepBlocks } from './handoff-doc-format.js';
27
+ import { readTitle, ageMs } from './pickup.js';
28
+ import { scanNestedRepos } from './nested-repos.js';
29
+ export const HANDOFFS_DIR = '.specweave/handoffs';
30
+ export const INDEX_JSON_FILE = 'index.json';
31
+ /** Generator marker: an INDEX file without it was written by a person and is left alone. */
32
+ export const INDEX_MARKER = '<!-- Handoff index v1 -->';
33
+ // ── Reading one increment ────────────────────────────────────────────────
34
+ const CLEARED_WAIT = /^(none|cleared|resolved|done|no|nothing)?\.?$/i;
35
+ const EMPTY_WAIT = /^(nothing|none|n\/a|no|-|—|–)\.?$/i;
36
+ /**
37
+ * Open waits of an increment: `wait` ledger events after the last clearing one,
38
+ * then "Waits on" / "Waiting on" lines (or a section with that heading) in its
39
+ * handoff docs.
40
+ */
41
+ export function readWaits(incDir) {
42
+ const waits = [];
43
+ const events = readIncrementEvents(ledgerPath(incDir), ['wait']);
44
+ for (const e of events) {
45
+ const note = (e.note ?? '').trim();
46
+ if (CLEARED_WAIT.test(note))
47
+ waits.length = 0;
48
+ else
49
+ waits.push(note);
50
+ }
51
+ for (const f of ['handoff.md', 'handoff.auto.md']) {
52
+ let text = '';
53
+ try {
54
+ text = fs.readFileSync(path.join(incDir, f), 'utf-8');
55
+ }
56
+ catch {
57
+ continue;
58
+ }
59
+ for (const w of parseWaitLines(text))
60
+ if (!waits.includes(w))
61
+ waits.push(w);
62
+ }
63
+ return waits;
64
+ }
65
+ /** "Waits on: X", "**Waiting on Anton:** X", or bullets under a "## Waiting on …" heading. */
66
+ export function parseWaitLines(text) {
67
+ const out = [];
68
+ const add = (s) => {
69
+ const v = s.replace(/[*_`]+/g, '').replace(/\s+/g, ' ').trim();
70
+ if (v && !EMPTY_WAIT.test(v) && !out.includes(v))
71
+ out.push(v);
72
+ };
73
+ let inSection = false;
74
+ for (const raw of text.split(/\r?\n/)) {
75
+ const heading = raw.match(/^#{2,4}\s+(.+?)\s*$/);
76
+ if (heading) {
77
+ const h = heading[1].replace(/[*_`]+/g, '').trim();
78
+ inSection = /^(waits?|waiting) on\b/i.test(h);
79
+ continue;
80
+ }
81
+ const line = raw.replace(/^\s*(?:[-*+]|\d+\.)\s+/, '').trim();
82
+ const m = line.match(/^[*_]*(?:waits?|waiting) on\b\s*([^:]*?)[*_]*\s*:\s*(.+)$/i);
83
+ if (m) {
84
+ const who = m[1].replace(/[*_]+/g, '').trim();
85
+ const what = m[2].trim();
86
+ if (EMPTY_WAIT.test(what.replace(/[*_`]+/g, '').trim()))
87
+ continue;
88
+ add(who ? `${who}: ${what}` : what);
89
+ continue;
90
+ }
91
+ if (inSection && /^\s*(?:[-*+]|\d+\.)\s+/.test(raw))
92
+ add(line);
93
+ }
94
+ return out;
95
+ }
96
+ /** Newest of the ledger's last event and metadata `updated` / `lastActivity`. */
97
+ function lastActivity(incDir) {
98
+ let best = NaN;
99
+ for (const e of readLedger(ledgerPath(incDir)).events) {
100
+ const t = Date.parse(e.at);
101
+ if (!Number.isNaN(t) && !(t <= best))
102
+ best = t;
103
+ }
104
+ try {
105
+ const meta = JSON.parse(fs.readFileSync(path.join(incDir, 'metadata.json'), 'utf-8'));
106
+ for (const k of ['updated', 'lastActivity']) {
107
+ const t = typeof meta[k] === 'string' ? Date.parse(meta[k]) : NaN;
108
+ if (!Number.isNaN(t) && !(t <= best))
109
+ best = t;
110
+ }
111
+ }
112
+ catch { /* no metadata */ }
113
+ return Number.isNaN(best) ? undefined : new Date(best).toISOString();
114
+ }
115
+ function readStatus(incDir) {
116
+ try {
117
+ const s = JSON.parse(fs.readFileSync(path.join(incDir, 'metadata.json'), 'utf-8')).status;
118
+ return typeof s === 'string' ? s : 'unknown';
119
+ }
120
+ catch {
121
+ return 'unknown';
122
+ }
123
+ }
124
+ const shortId = (id) => id.match(/^\d{4}/)?.[0] ?? id;
125
+ function homeShort(p) {
126
+ const home = os.homedir();
127
+ return home && (p === home || p.startsWith(home + path.sep)) ? '~' + p.slice(home.length) : p;
128
+ }
129
+ function repoBits(r) {
130
+ const bits = [r.branch];
131
+ if (r.dirty)
132
+ bits.push(`${r.dirty} uncommitted`);
133
+ if (r.ahead)
134
+ bits.push(`${r.ahead} unpushed`);
135
+ if (r.noRemote)
136
+ bits.push('no remote branch');
137
+ return bits.join(', ');
138
+ }
139
+ /** The short id when it names one increment folder, else the full id. */
140
+ function pickupArg(root, id) {
141
+ const short = shortId(id);
142
+ if (short === id)
143
+ return id;
144
+ try {
145
+ const same = fs.readdirSync(incrementsDir(root)).filter((n) => n === short || n.startsWith(`${short}-`));
146
+ return same.length === 1 ? short : id;
147
+ }
148
+ catch {
149
+ return id;
150
+ }
151
+ }
152
+ /** `0931 Title` for display; the full id when there is no title. */
153
+ function label(row) {
154
+ return row.title ? `${shortId(row.id)} ${row.title}` : row.id;
155
+ }
156
+ export function buildResumePrompt(root, row, repos) {
157
+ const doc = row.handoffDocs.length ? ` and read ${row.handoffDocs.join(' and ')}` : '';
158
+ const name = row.title ? `${shortId(row.id)} "${row.title}"` : row.id;
159
+ const P = [`Pick up increment ${name} in ${homeShort(root)}: run \`specweave pickup ${pickupArg(root, row.id)}\`${doc}, then continue with the task it names.`];
160
+ const mine = repos.filter((r) => row.repos.includes(r.path));
161
+ if (mine.length) {
162
+ P.push(`Local-only work first: ${mine.map((r) => `${r.path} (${repoBits(r)}${r.pr ? `, PR #${r.pr.number}` : ''})`).join('; ')}; check \`git -C <path> status -sb\` and commit it on its branch.`);
163
+ }
164
+ if (row.waits.length)
165
+ P.push(`It waits on ${row.waits.join('; ')}: do only the parts that do not need that answer.`);
166
+ return P.join(' ');
167
+ }
168
+ function localDate(d) {
169
+ const pad = (n) => String(n).padStart(2, '0');
170
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
171
+ }
172
+ const scrub = (s) => scrubSecrets(s).scrubbed;
173
+ function toIndexRepo(s) {
174
+ return {
175
+ path: homeShort(s.display),
176
+ branch: s.branch,
177
+ sha: s.sha,
178
+ dirty: s.dirty,
179
+ ahead: s.ahead,
180
+ noRemote: s.noRemote,
181
+ ...(s.upstream ? { upstream: s.upstream } : {}),
182
+ ...(s.lastCommitAt ? { lastCommitAt: s.lastCommitAt } : {}),
183
+ ...(s.pr ? { pr: s.pr } : {}),
184
+ increments: s.incrementIds,
185
+ };
186
+ }
187
+ /** Build the index. Never writes. */
188
+ export async function buildHandoffIndex(root, opts = {}) {
189
+ const now = opts.now ?? new Date();
190
+ const leaseHours = readLeaseHours(root);
191
+ const incRoot = incrementsDir(root);
192
+ const ids = listActiveIncrementIds(root);
193
+ const scan = opts.scanRepos ?? fs.existsSync(path.join(root, 'repositories'));
194
+ let repos;
195
+ if (scan) {
196
+ const result = await scanNestedRepos(root, { incrementIds: ids.map(shortId), prLookup: opts.prLookup });
197
+ repos = { scanned: result.scanned, flagged: result.flagged.map(toIndexRepo) };
198
+ }
199
+ const flagged = repos?.flagged ?? [];
200
+ const rows = ids.map((id) => {
201
+ const dir = path.join(incRoot, id);
202
+ let tasksDone = 0;
203
+ let tasksTotal = 0;
204
+ let acs = readSpecAcs(dir);
205
+ if (hasTasksFile(dir)) {
206
+ try {
207
+ const board = loadTaskBoard(dir, { leaseHours });
208
+ tasksDone = board.counts.done + board.counts.skipped;
209
+ tasksTotal = board.counts.total;
210
+ acs = deriveAcStatus(acs, board);
211
+ }
212
+ catch { /* unreadable task list: counts stay 0 */ }
213
+ }
214
+ const handoffDocs = ['handoff.md', 'handoff.auto.md']
215
+ .map((f) => path.join(dir, f))
216
+ .filter((p) => fs.existsSync(p))
217
+ .map((p) => path.relative(root, p).split(path.sep).join('/'));
218
+ const base = {
219
+ id,
220
+ // "0728 — Academy programs" reads as "0728 0728 — …" next to the id; drop the repeat.
221
+ title: scrub(readTitle(dir).replace(new RegExp(`^${shortId(id)}\\s*[—–:-]\\s*`), '')),
222
+ status: readStatus(dir),
223
+ tasksDone,
224
+ tasksTotal,
225
+ openAcs: acs.filter((a) => !a.done).map((a) => a.id),
226
+ totalAcs: acs.length,
227
+ lastActivityAt: lastActivity(dir),
228
+ waits: readWaits(dir).map(scrub),
229
+ handoffDocs,
230
+ repos: flagged.filter((r) => r.increments.includes(shortId(id))).map((r) => r.path),
231
+ };
232
+ return { ...base, resumePrompt: scrub(buildResumePrompt(root, base, flagged)) };
233
+ });
234
+ return {
235
+ version: 1,
236
+ generatedAt: now.toISOString(),
237
+ date: localDate(now),
238
+ root,
239
+ agent: opts.agent ?? getAgentId(),
240
+ ...(opts.reason ? { reason: scrub(opts.reason) } : {}),
241
+ rows,
242
+ ...(repos ? { repos } : {}),
243
+ };
244
+ }
245
+ // ── Rendering ────────────────────────────────────────────────────────────
246
+ const cell = (s) => s.replace(/\|/g, '\\|').replace(/\s*\n\s*/g, ' ').trim();
247
+ function ageAt(iso, nowMs) {
248
+ const t = iso ? Date.parse(iso) : NaN;
249
+ if (Number.isNaN(t))
250
+ return '-';
251
+ const min = Math.max(0, Math.round((nowMs - t) / 60000));
252
+ if (min < 60)
253
+ return `${min}m ago`;
254
+ const h = Math.round(min / 60);
255
+ return h < 48 ? `${h}h ago` : `${Math.round(h / 24)}d ago`;
256
+ }
257
+ function acList(row, max = 6) {
258
+ if (!row.totalAcs)
259
+ return '-';
260
+ if (!row.openAcs.length)
261
+ return 'none';
262
+ const shown = row.openAcs.slice(0, max).join(', ');
263
+ return row.openAcs.length > max ? `${shown} +${row.openAcs.length - max}` : shown;
264
+ }
265
+ /** Rows without waits first, then waiting rows; newest activity first inside each group. */
266
+ export function sortRows(rows) {
267
+ const byActivity = (a, b) => (Date.parse(b.lastActivityAt ?? '') || 0) - (Date.parse(a.lastActivityAt ?? '') || 0);
268
+ return {
269
+ actionable: rows.filter((r) => !r.waits.length).sort(byActivity),
270
+ waiting: rows.filter((r) => r.waits.length).sort(byActivity),
271
+ };
272
+ }
273
+ function prCell(r) {
274
+ if (!r.pr)
275
+ return '-';
276
+ return `[#${r.pr.number}](${r.pr.url}) ${r.pr.isDraft ? 'draft' : r.pr.state.toLowerCase()}`;
277
+ }
278
+ /** Render INDEX.md. `keep` blocks from the previous version go under the header. */
279
+ export function renderHandoffIndex(index, keep = []) {
280
+ const nowMs = Date.parse(index.generatedAt);
281
+ const { actionable, waiting } = sortRows(index.rows);
282
+ const L = [];
283
+ L.push(`# Handoff index, ${index.date}`);
284
+ L.push('');
285
+ L.push(`Written ${index.generatedAt} by ${index.agent} with \`specweave handoff --all\`${index.reason ? ` (${index.reason})` : ''}. Workspace \`${homeShort(index.root)}\`.`);
286
+ L.push(`${index.rows.length} active increment${index.rows.length === 1 ? '' : 's'}: ${actionable.length} actionable now, ${waiting.length} waiting on a person.` +
287
+ (index.repos ? ` ${index.repos.flagged.length} of ${index.repos.scanned} checkouts hold work that exists only on this machine.` : ''));
288
+ L.push('');
289
+ L.push('On the other account or tool: run `specweave pickup --all` (or read this file), then start each topic with its resume prompt. Nothing here was committed or pushed for you.');
290
+ L.push('');
291
+ for (const block of keep) {
292
+ L.push(block);
293
+ L.push('');
294
+ }
295
+ const table = (rows, withWaits) => {
296
+ if (!rows.length) {
297
+ L.push('_None._');
298
+ return;
299
+ }
300
+ L.push(`| Increment | Tasks | Open ACs | Last activity |${withWaits ? ' Waits on |' : ''} Local-only repos | Resume prompt |`);
301
+ L.push(`|---|---|---|---|${withWaits ? '---|' : ''}---|---|`);
302
+ for (const r of rows) {
303
+ L.push(`| ${cell(label(r))} | ${r.tasksDone}/${r.tasksTotal} | ${cell(acList(r))} | ${ageAt(r.lastActivityAt, nowMs)} |` +
304
+ `${withWaits ? ` ${cell(r.waits.join('; '))} |` : ''} ${cell(r.repos.join(', ') || '-')} | ${cell(r.resumePrompt)} |`);
305
+ }
306
+ };
307
+ L.push('## Actionable now');
308
+ L.push('');
309
+ table(actionable, false);
310
+ L.push('');
311
+ L.push('## Waiting on a person');
312
+ L.push('');
313
+ table(waiting, true);
314
+ L.push('');
315
+ if (index.repos) {
316
+ L.push('## Repositories with local-only work');
317
+ L.push('');
318
+ L.push(`Read-only scan of ${index.repos.scanned} checkouts (the workspace, \`repositories/<org>/<repo>\` and their worktrees). Before resuming a topic, run \`git -C <path> status -sb\` and commit what is still there on its branch.`);
319
+ L.push('');
320
+ if (!index.repos.flagged.length) {
321
+ L.push('_Every checkout is clean and pushed._');
322
+ }
323
+ else {
324
+ L.push('| Path | Branch | Uncommitted | Unpushed | Last commit | PR | Increment |');
325
+ L.push('|---|---|---|---|---|---|---|');
326
+ for (const r of index.repos.flagged) {
327
+ const branch = `${r.branch}${r.noRemote ? ' (no remote branch)' : ''}`;
328
+ L.push(`| ${cell(r.path)} | ${cell(branch)} | ${r.dirty} | ${r.ahead} | ${ageAt(r.lastCommitAt, nowMs)} | ${prCell(r)} | ${r.increments.join(', ') || '-'} |`);
329
+ }
330
+ }
331
+ L.push('');
332
+ }
333
+ L.push('---');
334
+ L.push(INDEX_MARKER);
335
+ return scrub(L.join('\n')) + '\n';
336
+ }
337
+ // ── Writing and reading ──────────────────────────────────────────────────
338
+ function isForeign(file) {
339
+ try {
340
+ return !fs.readFileSync(file, 'utf-8').includes(INDEX_MARKER);
341
+ }
342
+ catch {
343
+ return false;
344
+ }
345
+ }
346
+ /** Build, render and (unless `dryRun`) write INDEX.md and index.json. */
347
+ export async function writeHandoffIndex(root, opts = {}) {
348
+ const index = await buildHandoffIndex(root, opts);
349
+ const dir = opts.outDir ? path.resolve(root, opts.outDir) : path.join(root, HANDOFFS_DIR);
350
+ let mdPath = path.join(dir, `${index.date}-INDEX.md`);
351
+ // A same-named file a person wrote stays; the generated one goes beside it.
352
+ if (isForeign(mdPath))
353
+ mdPath = path.join(dir, `${index.date}-INDEX.auto.md`);
354
+ const jsonPath = path.join(dir, INDEX_JSON_FILE);
355
+ let keep = [];
356
+ try {
357
+ keep = extractKeepBlocks(fs.readFileSync(mdPath, 'utf-8')).map(scrub);
358
+ }
359
+ catch { /* first write */ }
360
+ const markdown = renderHandoffIndex(index, keep);
361
+ if (!opts.dryRun) {
362
+ fs.mkdirSync(dir, { recursive: true });
363
+ fs.writeFileSync(mdPath, markdown, 'utf-8');
364
+ fs.writeFileSync(jsonPath, JSON.stringify({ ...index, markdown: path.basename(mdPath) }, null, 2) + '\n', 'utf-8');
365
+ }
366
+ return { index, markdown, mdPath, jsonPath, written: !opts.dryRun };
367
+ }
368
+ /** The newest index: `index.json` when present, else the newest `*-INDEX*.md` file. */
369
+ export function readLatestIndex(root) {
370
+ const dir = path.join(root, HANDOFFS_DIR);
371
+ let index;
372
+ try {
373
+ const parsed = JSON.parse(fs.readFileSync(path.join(dir, INDEX_JSON_FILE), 'utf-8'));
374
+ if (parsed && Array.isArray(parsed.rows))
375
+ index = parsed;
376
+ }
377
+ catch { /* none */ }
378
+ let mdPath;
379
+ if (index?.markdown && fs.existsSync(path.join(dir, index.markdown))) {
380
+ mdPath = path.join(dir, index.markdown);
381
+ }
382
+ else {
383
+ try {
384
+ const names = fs.readdirSync(dir).filter((n) => /^\d{4}-\d{2}-\d{2}-INDEX(\.auto)?\.md$/.test(n)).sort();
385
+ if (names.length)
386
+ mdPath = path.join(dir, names[names.length - 1]);
387
+ }
388
+ catch { /* no folder */ }
389
+ }
390
+ return { index, mdPath };
391
+ }
392
+ /** What `pickup --all` prints: actionable rows first, then waiting rows, then local-only repos. */
393
+ export function renderPickupAll(root, latest, now = new Date()) {
394
+ const rel = (p) => path.relative(root, p).split(path.sep).join('/');
395
+ if (!latest.index) {
396
+ if (latest.mdPath)
397
+ return [`Handoff index (no index.json): ${rel(latest.mdPath)}`, '', fs.readFileSync(latest.mdPath, 'utf-8').trimEnd()].join('\n');
398
+ return 'No handoff index yet. On the side you are leaving, run `specweave handoff --all`.';
399
+ }
400
+ const idx = latest.index;
401
+ const nowMs = now.getTime();
402
+ const { actionable, waiting } = sortRows(idx.rows);
403
+ const L = [];
404
+ L.push(`Handoff index ${idx.date}, written ${ageMs(Date.parse(idx.generatedAt))} by ${idx.agent}${idx.reason ? ` (${idx.reason})` : ''}${latest.mdPath ? ` · ${rel(latest.mdPath)}` : ''}`);
405
+ const line = (r) => {
406
+ L.push(` ${label(r)} · tasks ${r.tasksDone}/${r.tasksTotal} · open ACs ${acList(r)} · ${ageAt(r.lastActivityAt, nowMs)}`);
407
+ if (r.waits.length)
408
+ L.push(` Waits on: ${r.waits.join('; ')}`);
409
+ if (r.repos.length)
410
+ L.push(` Local-only repos: ${r.repos.join(', ')}`);
411
+ L.push(` Resume: ${r.resumePrompt}`);
412
+ };
413
+ L.push(`Actionable now (${actionable.length}):`);
414
+ if (!actionable.length)
415
+ L.push(' none');
416
+ actionable.forEach(line);
417
+ L.push(`Waiting on a person (${waiting.length}):`);
418
+ if (!waiting.length)
419
+ L.push(' none');
420
+ waiting.forEach(line);
421
+ if (idx.repos?.flagged.length) {
422
+ L.push(`Local-only work in ${idx.repos.flagged.length} of ${idx.repos.scanned} checkouts (state when the index was written):`);
423
+ for (const r of idx.repos.flagged)
424
+ L.push(` ${r.path} · ${repoBits(r)}${r.pr ? ` · PR #${r.pr.number} ${r.pr.isDraft ? 'draft' : r.pr.state.toLowerCase()}` : ''}`);
425
+ }
426
+ L.push('Next: `specweave pickup <id>` for the increment you start with.');
427
+ return L.join('\n');
428
+ }
429
+ //# sourceMappingURL=handoff-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff-all.js","sourceRoot":"","sources":["../../../../src/core/session/handoff-all.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,11 @@
15
15
  export declare const DOC_FORMAT_MARKER = "Doc format v2";
16
16
  /** Prior marker — still recognized as "ours" so v1 docs are overwritten, not treated as foreign. */
17
17
  export declare const LEGACY_DOC_FORMAT_MARKER = "Doc format v1";
18
+ /** A `<!-- keep -->…<!-- /keep -->` block survives regeneration of a generated doc. */
19
+ export declare const KEEP_OPEN_MARKER = "<!-- keep -->";
20
+ export declare const KEEP_CLOSE_MARKER = "<!-- /keep -->";
21
+ /** Every keep block in a document, markers included, in order. */
22
+ export declare function extractKeepBlocks(text: string): string[];
18
23
  export declare const INLINE_BEGIN_MARKER = "BEGIN HANDOFF";
19
24
  export declare const INLINE_END_MARKER = "END HANDOFF";
20
25
  export declare const HANDOFF_SECTION_ORDER: readonly string[];
@@ -84,6 +89,8 @@ export interface HandoffDocInput {
84
89
  push?: HandoffPushInfo;
85
90
  /** Claims this handoff released so the next agent can take them. */
86
91
  released?: string[];
92
+ /** Keep blocks carried over from the previous version of this doc. */
93
+ keep?: string[];
87
94
  }
88
95
  export interface HandoffPushInfo {
89
96
  /** Branch pushed to origin (empty when the push was not needed or failed). */
@@ -1 +1 @@
1
- {"version":3,"file":"handoff-doc-format.d.ts","sourceRoot":"","sources":["../../../../src/core/session/handoff-doc-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handoff-doc-format.d.ts","sourceRoot":"","sources":["../../../../src/core/session/handoff-doc-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AACjD,oGAAoG;AACpG,eAAO,MAAM,wBAAwB,kBAAkB,CAAC;AAExD,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAGlD,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD;AAED,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAOzC,CAAC;AAEX,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,oBAAoB,QAEyC,CAAC;AAE3E,eAAO,MAAM,kBAAkB,EAAE,SAAS,eAAe,EAmD/C,CAAC;AAEX,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxH,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,0CAA0C;IAC1C,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhE;AAaD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAmG/D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAwBjG"}