rafcode 2.0.0 → 2.1.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 (45) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/RAF/ahrren-turbo-finder/decisions.md +19 -0
  3. package/RAF/ahrren-turbo-finder/input.md +2 -0
  4. package/RAF/ahrren-turbo-finder/outcomes/01-worktree-auto-detect.md +40 -0
  5. package/RAF/ahrren-turbo-finder/outcomes/02-medium-effort-do.md +34 -0
  6. package/RAF/ahrren-turbo-finder/plans/01-worktree-auto-detect.md +44 -0
  7. package/RAF/ahrren-turbo-finder/plans/02-medium-effort-do.md +39 -0
  8. package/RAF/ahrtxf-session-sentinel/decisions.md +19 -0
  9. package/RAF/ahrtxf-session-sentinel/input.md +1 -0
  10. package/RAF/ahrtxf-session-sentinel/outcomes/01-capture-session-id.md +37 -0
  11. package/RAF/ahrtxf-session-sentinel/outcomes/02-resume-flag.md +45 -0
  12. package/RAF/ahrtxf-session-sentinel/plans/01-capture-session-id.md +41 -0
  13. package/RAF/ahrtxf-session-sentinel/plans/02-resume-flag.md +51 -0
  14. package/dist/commands/do.d.ts.map +1 -1
  15. package/dist/commands/do.js +61 -20
  16. package/dist/commands/do.js.map +1 -1
  17. package/dist/core/claude-runner.d.ts +19 -0
  18. package/dist/core/claude-runner.d.ts.map +1 -1
  19. package/dist/core/claude-runner.js +199 -29
  20. package/dist/core/claude-runner.js.map +1 -1
  21. package/dist/core/shutdown-handler.d.ts.map +1 -1
  22. package/dist/core/shutdown-handler.js +4 -0
  23. package/dist/core/shutdown-handler.js.map +1 -1
  24. package/dist/core/worktree.d.ts +18 -0
  25. package/dist/core/worktree.d.ts.map +1 -1
  26. package/dist/core/worktree.js +61 -0
  27. package/dist/core/worktree.js.map +1 -1
  28. package/dist/parsers/stream-renderer.d.ts +3 -0
  29. package/dist/parsers/stream-renderer.d.ts.map +1 -1
  30. package/dist/parsers/stream-renderer.js +1 -1
  31. package/dist/parsers/stream-renderer.js.map +1 -1
  32. package/dist/types/config.d.ts +1 -0
  33. package/dist/types/config.d.ts.map +1 -1
  34. package/package.json +1 -1
  35. package/src/commands/do.ts +67 -21
  36. package/src/core/claude-runner.ts +244 -31
  37. package/src/core/shutdown-handler.ts +5 -0
  38. package/src/core/worktree.ts +77 -0
  39. package/src/parsers/stream-renderer.ts +4 -1
  40. package/src/types/config.ts +1 -0
  41. package/tests/unit/claude-runner-interactive.test.ts +24 -0
  42. package/tests/unit/claude-runner.test.ts +509 -55
  43. package/tests/unit/post-execution-picker.test.ts +1 -0
  44. package/tests/unit/stream-renderer.test.ts +30 -0
  45. package/tests/unit/worktree.test.ts +102 -0
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown-handler.d.ts","sourceRoot":"","sources":["../../src/core/shutdown-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,KAAK,eAAe,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAElD,cAAM,eAAe;IACnB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,cAAc,CAAS;IAE/B;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIhD;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI3C;;OAEG;IACH,IAAI,IAAI,IAAI;IAgBZ;;OAEG;YACW,cAAc;IAqC5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
1
+ {"version":3,"file":"shutdown-handler.d.ts","sourceRoot":"","sources":["../../src/core/shutdown-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,KAAK,eAAe,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAElD,cAAM,eAAe;IACnB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,cAAc,CAAS;IAE/B;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIhD;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAI3C;;OAEG;IACH,IAAI,IAAI,IAAI;IAgBZ;;OAEG;YACW,cAAc;IA0C5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -42,6 +42,10 @@ class ShutdownHandler {
42
42
  }
43
43
  this.isShuttingDown = true;
44
44
  logger.info(`\nReceived ${signal}, shutting down gracefully...`);
45
+ // Print session ID if available (for resumption/debugging)
46
+ if (this.claudeRunner?.sessionId) {
47
+ logger.info(`Session ID: ${this.claudeRunner.sessionId}`);
48
+ }
45
49
  // Kill Claude process if running
46
50
  if (this.claudeRunner?.isRunning()) {
47
51
  logger.debug('Killing Claude process...');
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown-handler.js","sourceRoot":"","sources":["../../src/core/shutdown-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAI5C,MAAM,eAAe;IACX,YAAY,GAAwB,IAAI,CAAC;IACzC,gBAAgB,GAAsB,EAAE,CAAC;IACzC,cAAc,GAAG,KAAK,CAAC;IAE/B;;OAEG;IACH,oBAAoB,CAAC,MAAoB;QACvC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,QAAyB;QAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;QAE5D,yBAAyB;QACzB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,MAAM,CAAC,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;YAC1C,MAAM,CAAC,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;YAC/C,8CAA8C;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,MAAc;QACzC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,8BAA8B;YAC9B,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,cAAc,MAAM,+BAA+B,CAAC,CAAC;QAEjE,iCAAiC;QACjC,IAAI,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,wBAAwB;QACxB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,QAAQ,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"shutdown-handler.js","sourceRoot":"","sources":["../../src/core/shutdown-handler.ts"],"names":[],"mappings":"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"}
@@ -117,4 +117,22 @@ export declare function createWorktreeFromBranch(repoBasename: string, projectId
117
117
  * @returns Sorted array of project folder names (e.g., ['020-worktree-weaver', '021-another-feature'])
118
118
  */
119
119
  export declare function listWorktreeProjects(repoBasename: string): string[];
120
+ export interface WorktreeProjectResolution {
121
+ /** The worktree project folder name (e.g., "ahrren-turbo-finder") */
122
+ folder: string;
123
+ /** The worktree root path (e.g., ~/.raf/worktrees/RAF/ahrren-turbo-finder) */
124
+ worktreeRoot: string;
125
+ }
126
+ /**
127
+ * Resolve a project identifier against worktree folder names.
128
+ * Uses the same matching strategy as `resolveProjectIdentifierWithDetails`:
129
+ * 1. Full folder name match (exact, case-insensitive)
130
+ * 2. Base26 prefix match (6-char ID)
131
+ * 3. Project name match (the portion after the prefix)
132
+ *
133
+ * @param repoBasename - The basename of the current git repo
134
+ * @param identifier - The project identifier to resolve
135
+ * @returns The matched worktree project info or null if not found
136
+ */
137
+ export declare function resolveWorktreeProjectByIdentifier(repoBasename: string, identifier: string): WorktreeProjectResolution | null;
120
138
  //# sourceMappingURL=worktree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/core/worktree.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAM3C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAM/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAOhD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAgC5F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,kBAAkB,CA6CtG;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,mBAAmB,CAyC/F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAWzF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAOxD;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CA0CtG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBnE"}
1
+ {"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/core/worktree.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAM3C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAM/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAOhD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAgC5F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,kBAAkB,CA6CtG;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,mBAAmB,CAyC/F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAWzF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAOxD;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CA0CtG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBnE;AAED,MAAM,WAAW,yBAAyB;IACxC,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,yBAAyB,GAAG,IAAI,CAqDlC"}
@@ -3,6 +3,7 @@ import * as fs from 'node:fs';
3
3
  import * as os from 'node:os';
4
4
  import * as path from 'node:path';
5
5
  import { logger } from '../utils/logger.js';
6
+ import { extractProjectNumber, extractProjectName, isBase26Prefix, decodeBase26 } from '../utils/paths.js';
6
7
  /**
7
8
  * Get the git toplevel directory (repo root).
8
9
  * Returns null if not in a git repo.
@@ -319,4 +320,64 @@ export function listWorktreeProjects(repoBasename) {
319
320
  return [];
320
321
  }
321
322
  }
323
+ /**
324
+ * Resolve a project identifier against worktree folder names.
325
+ * Uses the same matching strategy as `resolveProjectIdentifierWithDetails`:
326
+ * 1. Full folder name match (exact, case-insensitive)
327
+ * 2. Base26 prefix match (6-char ID)
328
+ * 3. Project name match (the portion after the prefix)
329
+ *
330
+ * @param repoBasename - The basename of the current git repo
331
+ * @param identifier - The project identifier to resolve
332
+ * @returns The matched worktree project info or null if not found
333
+ */
334
+ export function resolveWorktreeProjectByIdentifier(repoBasename, identifier) {
335
+ const wtProjectDirs = listWorktreeProjects(repoBasename);
336
+ if (wtProjectDirs.length === 0)
337
+ return null;
338
+ const lowerIdentifier = identifier.toLowerCase();
339
+ // 1. Full folder name match (exact, case-insensitive)
340
+ for (const dir of wtProjectDirs) {
341
+ if (dir.toLowerCase() === lowerIdentifier) {
342
+ return {
343
+ folder: dir,
344
+ worktreeRoot: computeWorktreePath(repoBasename, dir),
345
+ };
346
+ }
347
+ }
348
+ // 2. Base26 prefix match
349
+ if (isBase26Prefix(identifier)) {
350
+ const targetNumber = decodeBase26(identifier);
351
+ if (targetNumber !== null) {
352
+ for (const dir of wtProjectDirs) {
353
+ const prefix = extractProjectNumber(dir);
354
+ if (prefix) {
355
+ const dirNumber = decodeBase26(prefix);
356
+ if (dirNumber === targetNumber) {
357
+ return {
358
+ folder: dir,
359
+ worktreeRoot: computeWorktreePath(repoBasename, dir),
360
+ };
361
+ }
362
+ }
363
+ }
364
+ }
365
+ }
366
+ // 3. Project name match (case-insensitive)
367
+ const nameMatches = [];
368
+ for (const dir of wtProjectDirs) {
369
+ const name = extractProjectName(dir);
370
+ if (name && name.toLowerCase() === lowerIdentifier) {
371
+ nameMatches.push(dir);
372
+ }
373
+ }
374
+ if (nameMatches.length === 1) {
375
+ return {
376
+ folder: nameMatches[0],
377
+ worktreeRoot: computeWorktreePath(repoBasename, nameMatches[0]),
378
+ };
379
+ }
380
+ // Ambiguous or no match
381
+ return null;
382
+ }
322
383
  //# sourceMappingURL=worktree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/core/worktree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/core/worktree.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@
10
10
  export interface StreamEvent {
11
11
  type: string;
12
12
  subtype?: string;
13
+ session_id?: string;
13
14
  message?: {
14
15
  content?: ContentBlock[];
15
16
  };
@@ -32,6 +33,8 @@ export interface RenderResult {
32
33
  display: string;
33
34
  /** Text content to accumulate for output parsing (completion markers, etc.) */
34
35
  textContent: string;
36
+ /** Session ID extracted from system init event, if present */
37
+ sessionId?: string;
35
38
  }
36
39
  /**
37
40
  * Parse and render a single NDJSON line from stream-json output.
@@ -1 +1 @@
1
- {"version":3,"file":"stream-renderer.d.ts","sourceRoot":"","sources":["../../src/parsers/stream-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;KAC1B,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE;YACL,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;CACH;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAuCD,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA8B5D"}
1
+ {"version":3,"file":"stream-renderer.d.ts","sourceRoot":"","sources":["../../src/parsers/stream-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;KAC1B,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE;YACL,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;CACH;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAuCD,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CA8B5D"}
@@ -61,7 +61,7 @@ export function renderStreamEvent(line) {
61
61
  }
62
62
  switch (event.type) {
63
63
  case 'system':
64
- return { display: '', textContent: '' };
64
+ return { display: '', textContent: '', sessionId: event.session_id };
65
65
  case 'assistant':
66
66
  return renderAssistant(event);
67
67
  case 'user':
@@ -1 +1 @@
1
- {"version":3,"file":"stream-renderer.js","sourceRoot":"","sources":["../../src/parsers/stream-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream-renderer.js","sourceRoot":"","sources":["../../src/parsers/stream-renderer.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ export interface DoCommandOptions {
20
20
  model?: ClaudeModelName;
21
21
  sonnet?: boolean;
22
22
  worktree?: boolean;
23
+ resume?: string;
23
24
  }
24
25
  export interface StatusCommandOptions {
25
26
  json?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,SAKhC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,SAKhC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rafcode",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Automated Task Planning & Execution with Claude Code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -44,6 +44,7 @@ import {
44
44
  listWorktreeProjects,
45
45
  mergeWorktreeBranch,
46
46
  removeWorktree,
47
+ resolveWorktreeProjectByIdentifier,
47
48
  } from '../core/worktree.js';
48
49
  import { createPullRequest, prPreflight } from '../core/pull-request.js';
49
50
  import type { DoCommandOptions } from '../types/config.js';
@@ -123,6 +124,7 @@ export function createDoCommand(): Command {
123
124
  .option('-m, --model <name>', 'Claude model to use (sonnet, haiku, opus)')
124
125
  .option('--sonnet', 'Use Sonnet model (shorthand for --model sonnet)')
125
126
  .option('-w, --worktree', 'Execute tasks in a git worktree')
127
+ .option('-r, --resume <session-id>', 'Resume an interrupted Claude session')
126
128
  .action(async (project: string | undefined, options: DoCommandOptions) => {
127
129
  await runDoCommand(project, options);
128
130
  });
@@ -219,7 +221,7 @@ async function runDoCommand(projectIdentifierArg: string | undefined, options: D
219
221
  }
220
222
 
221
223
  // Resolve project identifier
222
- let resolvedProject: { identifier: string; path: string; name: string };
224
+ let resolvedProject: { identifier: string; path: string; name: string } | undefined;
223
225
 
224
226
  if (worktreeMode) {
225
227
  // Worktree mode: resolve project inside the worktree
@@ -303,24 +305,50 @@ async function runDoCommand(projectIdentifierArg: string | undefined, options: D
303
305
  resolvedProject = { identifier: projectIdentifier, path: projectPath, name: projectName };
304
306
  }
305
307
  } else {
306
- // Standard mode: resolve from main repo
307
- const result = resolveProjectIdentifierWithDetails(rafDir, projectIdentifier);
308
-
309
- if (!result.path) {
310
- if (result.error === 'ambiguous' && result.matches) {
311
- const matchList = result.matches
312
- .map((m) => ` - ${m.folder}`)
313
- .join('\n');
314
- logger.error(`${projectIdentifier}: Ambiguous project name. Multiple projects match:\n${matchList}\nPlease specify the project ID or full folder name.`);
315
- } else {
316
- logger.error(`${projectIdentifier}: Project not found`);
308
+ // Standard mode: check worktrees first (worktree takes priority), then main repo
309
+ const repoRoot = getRepoRoot();
310
+ const repoBasename = repoRoot ? getRepoBasename() : null;
311
+
312
+ // Try worktree resolution first (preferred when project exists in both)
313
+ if (repoBasename) {
314
+ const wtResolution = resolveWorktreeProjectByIdentifier(repoBasename, projectIdentifier);
315
+ if (wtResolution) {
316
+ const rafRelativePath = path.relative(repoRoot!, rafDir);
317
+ const wtRafDir = path.join(wtResolution.worktreeRoot, rafRelativePath);
318
+ const wtProjectPath = path.join(wtRafDir, wtResolution.folder);
319
+
320
+ if (fs.existsSync(wtProjectPath)) {
321
+ // Auto-switch to worktree mode
322
+ worktreeMode = true;
323
+ worktreeRoot = wtResolution.worktreeRoot;
324
+ originalBranch = getCurrentBranch() ?? undefined;
325
+
326
+ const projectName = extractProjectName(wtResolution.folder) ?? projectIdentifier;
327
+ resolvedProject = { identifier: projectIdentifier, path: wtProjectPath, name: projectName };
328
+ }
317
329
  }
318
- logger.info("Run 'raf status' to see available projects.");
319
- process.exit(1);
320
330
  }
321
331
 
322
- const projectName = extractProjectName(result.path) ?? projectIdentifier;
323
- resolvedProject = { identifier: projectIdentifier, path: result.path, name: projectName };
332
+ // Fall back to main repo if worktree didn't match
333
+ if (!resolvedProject) {
334
+ const result = resolveProjectIdentifierWithDetails(rafDir, projectIdentifier);
335
+
336
+ if (!result.path) {
337
+ if (result.error === 'ambiguous' && result.matches) {
338
+ const matchList = result.matches
339
+ .map((m) => ` - ${m.folder}`)
340
+ .join('\n');
341
+ logger.error(`${projectIdentifier}: Ambiguous project name. Multiple projects match:\n${matchList}\nPlease specify the project ID or full folder name.`);
342
+ } else {
343
+ logger.error(`${projectIdentifier}: Project not found`);
344
+ }
345
+ logger.info("Run 'raf status' to see available projects.");
346
+ process.exit(1);
347
+ }
348
+
349
+ const projectName = extractProjectName(result.path) ?? projectIdentifier;
350
+ resolvedProject = { identifier: projectIdentifier, path: result.path, name: projectName };
351
+ }
324
352
  }
325
353
 
326
354
  // Get configuration
@@ -329,6 +357,7 @@ async function runDoCommand(projectIdentifierArg: string | undefined, options: D
329
357
  const verbose = options.verbose ?? false;
330
358
  const debug = options.debug ?? false;
331
359
  const force = options.force ?? false;
360
+ const resumeSessionId = options.resume;
332
361
  const maxRetries = config.maxRetries;
333
362
  const autoCommit = config.autoCommit;
334
363
 
@@ -366,6 +395,7 @@ async function runDoCommand(projectIdentifierArg: string | undefined, options: D
366
395
  showModel: true,
367
396
  model,
368
397
  worktreeCwd: worktreeRoot,
398
+ resumeSessionId,
369
399
  }
370
400
  );
371
401
  } catch (error) {
@@ -631,6 +661,8 @@ interface SingleProjectOptions {
631
661
  model: string;
632
662
  /** Worktree root directory. When set, Claude runs with cwd in the worktree. */
633
663
  worktreeCwd?: string;
664
+ /** Session ID to resume an interrupted Claude session. Only applies to the first pending task. */
665
+ resumeSessionId?: string;
634
666
  }
635
667
 
636
668
  async function executeSingleProject(
@@ -638,7 +670,8 @@ async function executeSingleProject(
638
670
  projectName: string,
639
671
  options: SingleProjectOptions
640
672
  ): Promise<ProjectExecutionResult> {
641
- const { timeout, verbose, debug, force, maxRetries, autoCommit, showModel, model, worktreeCwd } = options;
673
+ const { timeout, verbose, debug, force, maxRetries, autoCommit, showModel, model, worktreeCwd, resumeSessionId } = options;
674
+ let activeResumeSessionId = resumeSessionId;
642
675
 
643
676
  if (!validatePlansExist(projectPath)) {
644
677
  return {
@@ -835,13 +868,17 @@ async function executeSingleProject(
835
868
  logger.setContext(taskContext);
836
869
 
837
870
  // Log task execution status
838
- if (task.status === 'failed') {
871
+ if (activeResumeSessionId) {
872
+ logger.info(`Resuming task ${taskLabel} with session ${activeResumeSessionId}`);
873
+ } else if (task.status === 'failed') {
839
874
  logger.info(`Retrying task ${taskLabel} (previously failed)...`);
840
875
  } else if (task.status === 'completed' && force) {
841
876
  logger.info(`Re-running task ${taskLabel} (force mode)...`);
842
877
  } else {
843
878
  logger.info(`Executing task ${taskLabel}...`);
844
879
  }
880
+ } else if (activeResumeSessionId) {
881
+ logger.info(`Resuming task ${task.id} with session ${activeResumeSessionId}`);
845
882
  }
846
883
 
847
884
  // Get previous outcomes for context
@@ -913,9 +950,15 @@ async function executeSingleProject(
913
950
  } : undefined;
914
951
 
915
952
  // Run Claude (use worktree root as cwd if in worktree mode)
916
- const result = verbose
917
- ? await claudeRunner.runVerbose(prompt, { timeout, outcomeFilePath, commitContext, cwd: worktreeCwd })
918
- : await claudeRunner.run(prompt, { timeout, outcomeFilePath, commitContext, cwd: worktreeCwd });
953
+ let result;
954
+ if (activeResumeSessionId && attempts === 1) {
955
+ // Resume mode: use --resume flag instead of normal prompt execution
956
+ result = await claudeRunner.runResume(activeResumeSessionId, { timeout, outcomeFilePath, commitContext, cwd: worktreeCwd, effortLevel: 'medium' });
957
+ } else {
958
+ result = verbose
959
+ ? await claudeRunner.runVerbose(prompt, { timeout, outcomeFilePath, commitContext, cwd: worktreeCwd, effortLevel: 'medium' })
960
+ : await claudeRunner.run(prompt, { timeout, outcomeFilePath, commitContext, cwd: worktreeCwd, effortLevel: 'medium' });
961
+ }
919
962
 
920
963
  lastOutput = result.output;
921
964
 
@@ -1077,6 +1120,9 @@ ${stashName ? `- Stash: ${stashName}` : ''}
1077
1120
  logger.newline();
1078
1121
  }
1079
1122
 
1123
+ // Clear resume flag after first task — subsequent tasks use normal execution
1124
+ activeResumeSessionId = undefined;
1125
+
1080
1126
  // Clear context before next task
1081
1127
  logger.clearContext();
1082
1128