wiggum-cli 0.11.25 → 0.12.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 (103) hide show
  1. package/README.md +2 -1
  2. package/dist/__test-utils__/fixtures.d.ts +17 -0
  3. package/dist/__test-utils__/fixtures.d.ts.map +1 -0
  4. package/dist/__test-utils__/fixtures.js +32 -0
  5. package/dist/__test-utils__/fixtures.js.map +1 -0
  6. package/dist/__test-utils__/ink-helpers.d.ts +43 -0
  7. package/dist/__test-utils__/ink-helpers.d.ts.map +1 -0
  8. package/dist/__test-utils__/ink-helpers.js +62 -0
  9. package/dist/__test-utils__/ink-helpers.js.map +1 -0
  10. package/dist/__test-utils__/mock-ai.d.ts +99 -0
  11. package/dist/__test-utils__/mock-ai.d.ts.map +1 -0
  12. package/dist/__test-utils__/mock-ai.js +75 -0
  13. package/dist/__test-utils__/mock-ai.js.map +1 -0
  14. package/dist/__test-utils__/mock-tracing.d.ts +18 -0
  15. package/dist/__test-utils__/mock-tracing.d.ts.map +1 -0
  16. package/dist/__test-utils__/mock-tracing.js +24 -0
  17. package/dist/__test-utils__/mock-tracing.js.map +1 -0
  18. package/dist/__test-utils__/setup.d.ts +8 -0
  19. package/dist/__test-utils__/setup.d.ts.map +1 -0
  20. package/dist/__test-utils__/setup.js +21 -0
  21. package/dist/__test-utils__/setup.js.map +1 -0
  22. package/dist/commands/monitor.d.ts.map +1 -1
  23. package/dist/commands/monitor.js +3 -1
  24. package/dist/commands/monitor.js.map +1 -1
  25. package/dist/commands/run.d.ts +1 -0
  26. package/dist/commands/run.d.ts.map +1 -1
  27. package/dist/commands/run.js +8 -0
  28. package/dist/commands/run.js.map +1 -1
  29. package/dist/templates/config/ralph.config.cjs.tmpl +1 -0
  30. package/dist/templates/prompts/PROMPT_review_manual.md.tmpl +96 -0
  31. package/dist/templates/root/README.md.tmpl +7 -6
  32. package/dist/templates/scripts/feature-loop.sh.tmpl +34 -5
  33. package/dist/templates/scripts/ralph-monitor.sh.tmpl +3 -1
  34. package/dist/tui/app.d.ts.map +1 -1
  35. package/dist/tui/app.js +3 -0
  36. package/dist/tui/app.js.map +1 -1
  37. package/dist/tui/components/ChatInput.test.d.ts +2 -0
  38. package/dist/tui/components/ChatInput.test.d.ts.map +1 -0
  39. package/dist/tui/components/ChatInput.test.js +75 -0
  40. package/dist/tui/components/ChatInput.test.js.map +1 -0
  41. package/dist/tui/components/MultiSelect.d.ts.map +1 -1
  42. package/dist/tui/components/MultiSelect.js +5 -3
  43. package/dist/tui/components/MultiSelect.js.map +1 -1
  44. package/dist/tui/components/WiggumBanner.d.ts.map +1 -1
  45. package/dist/tui/components/WiggumBanner.js +1 -2
  46. package/dist/tui/components/WiggumBanner.js.map +1 -1
  47. package/dist/tui/components/WorkingIndicator.test.d.ts +2 -0
  48. package/dist/tui/components/WorkingIndicator.test.d.ts.map +1 -0
  49. package/dist/tui/components/WorkingIndicator.test.js +26 -0
  50. package/dist/tui/components/WorkingIndicator.test.js.map +1 -0
  51. package/dist/tui/orchestration/interview-orchestrator.d.ts +2 -2
  52. package/dist/tui/orchestration/interview-orchestrator.d.ts.map +1 -1
  53. package/dist/tui/orchestration/interview-orchestrator.js +19 -5
  54. package/dist/tui/orchestration/interview-orchestrator.js.map +1 -1
  55. package/dist/tui/screens/InterviewScreen.d.ts.map +1 -1
  56. package/dist/tui/screens/InterviewScreen.integration.test.d.ts +7 -0
  57. package/dist/tui/screens/InterviewScreen.integration.test.d.ts.map +1 -0
  58. package/dist/tui/screens/InterviewScreen.integration.test.js +149 -0
  59. package/dist/tui/screens/InterviewScreen.integration.test.js.map +1 -0
  60. package/dist/tui/screens/InterviewScreen.js +5 -7
  61. package/dist/tui/screens/InterviewScreen.js.map +1 -1
  62. package/dist/tui/screens/MainShell.test.d.ts +2 -0
  63. package/dist/tui/screens/MainShell.test.d.ts.map +1 -0
  64. package/dist/tui/screens/MainShell.test.js +103 -0
  65. package/dist/tui/screens/MainShell.test.js.map +1 -0
  66. package/dist/tui/screens/RunScreen.d.ts.map +1 -1
  67. package/dist/tui/screens/RunScreen.js +8 -0
  68. package/dist/tui/screens/RunScreen.js.map +1 -1
  69. package/dist/tui/screens/WelcomeScreen.test.d.ts +2 -0
  70. package/dist/tui/screens/WelcomeScreen.test.d.ts.map +1 -0
  71. package/dist/tui/screens/WelcomeScreen.test.js +51 -0
  72. package/dist/tui/screens/WelcomeScreen.test.js.map +1 -0
  73. package/dist/tui/types/interview.d.ts +3 -1
  74. package/dist/tui/types/interview.d.ts.map +1 -1
  75. package/dist/tui/types/interview.js.map +1 -1
  76. package/dist/tui/utils/loop-status.d.ts.map +1 -1
  77. package/dist/tui/utils/loop-status.js +3 -1
  78. package/dist/tui/utils/loop-status.js.map +1 -1
  79. package/dist/utils/config.d.ts +1 -0
  80. package/dist/utils/config.d.ts.map +1 -1
  81. package/dist/utils/config.js +2 -0
  82. package/dist/utils/config.js.map +1 -1
  83. package/package.json +4 -2
  84. package/src/templates/config/ralph.config.cjs.tmpl +1 -0
  85. package/src/templates/prompts/PROMPT_review_manual.md.tmpl +96 -0
  86. package/src/templates/root/README.md.tmpl +7 -6
  87. package/src/templates/scripts/feature-loop.sh.tmpl +34 -5
  88. package/src/templates/scripts/ralph-monitor.sh.tmpl +3 -1
  89. package/dist/cli.d.ts +0 -6
  90. package/dist/cli.d.ts.map +0 -1
  91. package/dist/cli.js +0 -212
  92. package/dist/cli.js.map +0 -1
  93. package/dist/repl/repl-loop.d.ts +0 -32
  94. package/dist/repl/repl-loop.d.ts.map +0 -1
  95. package/dist/repl/repl-loop.js +0 -309
  96. package/dist/repl/repl-loop.js.map +0 -1
  97. package/dist/templates/config/ralph.config.js.tmpl +0 -38
  98. package/dist/utils/repl-prompts.d.ts +0 -59
  99. package/dist/utils/repl-prompts.d.ts.map +0 -1
  100. package/dist/utils/repl-prompts.js +0 -314
  101. package/dist/utils/repl-prompts.js.map +0 -1
  102. /package/dist/templates/prompts/{PROMPT_review.md.tmpl → PROMPT_review_auto.md.tmpl} +0 -0
  103. /package/src/templates/prompts/{PROMPT_review.md.tmpl → PROMPT_review_auto.md.tmpl} +0 -0
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { describe, it, expect, vi } from 'vitest';
3
+ import { render } from 'ink-testing-library';
4
+ import { WelcomeScreen } from './WelcomeScreen.js';
5
+ import { stripAnsi, wait } from '../../__test-utils__/ink-helpers.js';
6
+ describe('WelcomeScreen', () => {
7
+ it('renders version', () => {
8
+ const onContinue = vi.fn();
9
+ const { lastFrame, unmount } = render(_jsx(WelcomeScreen, { provider: "anthropic", model: "sonnet", version: "1.2.3", isInitialized: true, onContinue: onContinue }));
10
+ const frame = stripAnsi(lastFrame() ?? '');
11
+ expect(frame).toContain('v1.2.3');
12
+ unmount();
13
+ });
14
+ it('renders provider and model', () => {
15
+ const onContinue = vi.fn();
16
+ const { lastFrame, unmount } = render(_jsx(WelcomeScreen, { provider: "anthropic", model: "sonnet", version: "1.0.0", isInitialized: true, onContinue: onContinue }));
17
+ const frame = stripAnsi(lastFrame() ?? '');
18
+ expect(frame).toContain('anthropic/sonnet');
19
+ unmount();
20
+ });
21
+ it('shows "Ready" when initialized', () => {
22
+ const onContinue = vi.fn();
23
+ const { lastFrame, unmount } = render(_jsx(WelcomeScreen, { provider: "anthropic", model: "sonnet", version: "1.0.0", isInitialized: true, onContinue: onContinue }));
24
+ const frame = stripAnsi(lastFrame() ?? '');
25
+ expect(frame).toContain('Ready');
26
+ unmount();
27
+ });
28
+ it('shows "Not initialized" when not initialized', () => {
29
+ const onContinue = vi.fn();
30
+ const { lastFrame, unmount } = render(_jsx(WelcomeScreen, { provider: null, model: "sonnet", version: "1.0.0", isInitialized: false, onContinue: onContinue }));
31
+ const frame = stripAnsi(lastFrame() ?? '');
32
+ expect(frame).toContain('Not initialized');
33
+ unmount();
34
+ });
35
+ it('shows "not configured" when provider is null', () => {
36
+ const onContinue = vi.fn();
37
+ const { lastFrame, unmount } = render(_jsx(WelcomeScreen, { provider: null, model: "sonnet", version: "1.0.0", isInitialized: false, onContinue: onContinue }));
38
+ const frame = stripAnsi(lastFrame() ?? '');
39
+ expect(frame).toContain('not configured');
40
+ unmount();
41
+ });
42
+ it('calls onContinue after mount', async () => {
43
+ const onContinue = vi.fn();
44
+ const { unmount } = render(_jsx(WelcomeScreen, { provider: "anthropic", model: "sonnet", version: "1.0.0", isInitialized: true, onContinue: onContinue }));
45
+ // setImmediate fires after render
46
+ await wait(50);
47
+ expect(onContinue).toHaveBeenCalled();
48
+ unmount();
49
+ });
50
+ });
51
+ //# sourceMappingURL=WelcomeScreen.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WelcomeScreen.test.js","sourceRoot":"","sources":["../../../src/tui/screens/WelcomeScreen.test.tsx"],"names":[],"mappings":"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"}
@@ -16,7 +16,9 @@ export interface InterviewOption {
16
16
  export interface InterviewQuestion {
17
17
  /** Unique identifier for the question */
18
18
  id: string;
19
- /** Question text displayed to the user */
19
+ /** AI acknowledgment/context text (shown in message list only) */
20
+ context: string;
21
+ /** The actual question text (shown in MultiSelect only) */
20
22
  text: string;
21
23
  /** List of options for the user to select from */
22
24
  readonly options: readonly InterviewOption[];
@@ -1 +1 @@
1
- {"version":3,"file":"interview.d.ts","sourceRoot":"","sources":["../../../src/tui/types/interview.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACxB;IACA,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C,GACD;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACZ,CAAC;AAEL;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,WAAW,EAAE,SAAS,MAAM,EAAE,GAC5B,MAAM,EAAE,CAKV"}
1
+ {"version":3,"file":"interview.d.ts","sourceRoot":"","sources":["../../../src/tui/types/interview.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACxB;IACA,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C,GACD;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACZ,CAAC;AAEL;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,WAAW,EAAE,SAAS,MAAM,EAAE,GAC5B,MAAM,EAAE,CAKV"}
@@ -1 +1 @@
1
- {"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../src/tui/types/interview.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuCH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAClC,OAAmC,EACnC,WAA8B;IAE9B,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,OAAO,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../src/tui/types/interview.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyCH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAClC,OAAmC,EACnC,WAA8B;IAE9B,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,OAAO,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"loop-status.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAcD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAyC1D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAuCrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CASxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQhD"}
1
+ {"version":3,"file":"loop-status.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAcD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAyC1D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAuCrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CASxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQhD"}
@@ -27,7 +27,9 @@ export function detectPhase(feature) {
27
27
  return 'E2E Testing';
28
28
  if (isProcessRunning('PROMPT_verify.md'))
29
29
  return 'Verification';
30
- if (isProcessRunning('PROMPT_review.md'))
30
+ if (isProcessRunning('PROMPT_review_manual.md'))
31
+ return 'PR Review';
32
+ if (isProcessRunning('PROMPT_review_auto.md'))
31
33
  return 'PR Review';
32
34
  if (isProcessRunning('PROMPT.md'))
33
35
  return 'Implementation';
@@ -1 +1 @@
1
- {"version":3,"file":"loop-status.js","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop-status.js","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,7 @@ export interface LoopConfig {
48
48
  maxE2eAttempts: number;
49
49
  defaultModel: string;
50
50
  planningModel: string;
51
+ reviewMode: 'manual' | 'auto';
51
52
  }
52
53
  /**
53
54
  * Full ralph.config.cjs structure
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,WAqC5B,CAAC;AAEF;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAiBjF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAmCtF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGtE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ9E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,WAsC5B,CAAC;AAEF;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAiBjF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAmCtF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGvE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGtE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAS9E"}
@@ -45,6 +45,7 @@ export const DEFAULT_CONFIG = {
45
45
  maxE2eAttempts: 5,
46
46
  defaultModel: 'sonnet',
47
47
  planningModel: 'opus',
48
+ reviewMode: 'manual',
48
49
  },
49
50
  };
50
51
  /**
@@ -143,6 +144,7 @@ export async function getLoopSettings(projectRoot) {
143
144
  maxE2eAttempts: config?.loop?.maxE2eAttempts || DEFAULT_CONFIG.loop.maxE2eAttempts,
144
145
  defaultModel: config?.loop?.defaultModel || DEFAULT_CONFIG.loop.defaultModel,
145
146
  planningModel: config?.loop?.planningModel || DEFAULT_CONFIG.loop.planningModel,
147
+ reviewMode: config?.loop?.reviewMode || DEFAULT_CONFIG.loop.reviewMode,
146
148
  };
147
149
  }
148
150
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wiggum-cli",
3
- "version": "0.11.25",
3
+ "version": "0.12.0",
4
4
  "description": "AI-powered feature development loop CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,8 @@
22
22
  "start": "node bin/ralph.js",
23
23
  "test": "vitest run",
24
24
  "test:watch": "vitest",
25
- "prepublishOnly": "npm run build"
25
+ "typecheck": "tsc --noEmit",
26
+ "prepublishOnly": "npm run build && npm test"
26
27
  },
27
28
  "keywords": [
28
29
  "cli",
@@ -55,6 +56,7 @@
55
56
  "devDependencies": {
56
57
  "@types/node": "^20.10.0",
57
58
  "@types/react": "^19.2.9",
59
+ "@vitest/coverage-v8": "^4.0.18",
58
60
  "ink-testing-library": "^4.0.0",
59
61
  "typescript": "^5.3.0",
60
62
  "vitest": "^4.0.17"
@@ -34,5 +34,6 @@ module.exports = {
34
34
  maxE2eAttempts: 5,
35
35
  defaultModel: 'sonnet',
36
36
  planningModel: 'opus',
37
+ reviewMode: 'manual', // 'manual' = stop at PR, 'auto' = review + auto-merge
37
38
  },
38
39
  };
@@ -0,0 +1,96 @@
1
+ ## Context
2
+ Study @.ralph/AGENTS.md for commands and patterns.
3
+ Study @.ralph/specs/$FEATURE.md for feature specification.
4
+ Study @.ralph/specs/$FEATURE-implementation-plan.md for completed tasks.
5
+
6
+ ## Learnings
7
+ Read @.ralph/LEARNINGS.md for patterns from previous features.
8
+ Capture any review feedback patterns for future iterations.
9
+
10
+ ## Task
11
+ All implementation and E2E tasks are complete. Create PR for manual review.
12
+
13
+ ### Step 1: Verify Ready State
14
+ 1. Check all tasks are complete in implementation plan (no `- [ ]` items)
15
+ 2. Verify tests pass: `cd {{appDir}} && {{testCommand}}`
16
+ 3. Verify build succeeds: `cd {{appDir}} && {{buildCommand}}`
17
+
18
+ If any fail, fix before proceeding.
19
+
20
+ ### Step 2: Check Git Status
21
+ ```bash
22
+ cd {{appDir}} && git status
23
+ cd {{appDir}} && git log --oneline -5
24
+ ```
25
+
26
+ Ensure:
27
+ - On branch `feat/$FEATURE`
28
+ - All changes are committed
29
+ - Branch is pushed to remote
30
+
31
+ If uncommitted changes exist:
32
+ ```bash
33
+ git -C {{appDir}} add -A && git -C {{appDir}} commit -m "chore($FEATURE): final cleanup"
34
+ git -C {{appDir}} push origin feat/$FEATURE
35
+ ```
36
+
37
+ ### Step 3: Create PR
38
+ Check if PR already exists:
39
+ ```bash
40
+ cd {{appDir}} && gh pr list --head feat/$FEATURE
41
+ ```
42
+
43
+ If no PR exists, create one:
44
+ ```bash
45
+ cd {{appDir}} && gh pr create --base main --head feat/$FEATURE \
46
+ --title "feat($FEATURE): [read description from spec]" \
47
+ --body "$(cat <<'EOF'
48
+ ## Summary
49
+ [Read from spec Purpose section]
50
+
51
+ ## Changes
52
+ [Read from implementation plan - list completed phases]
53
+
54
+ ## Testing
55
+ - [x] Unit/integration tests: passing
56
+ - [x] E2E tests: All scenarios passed
57
+ - [x] Build succeeds
58
+
59
+ ## E2E Test Results
60
+ [Copy from implementation plan if E2E phase exists]
61
+
62
+ Generated with Claude Code
63
+ EOF
64
+ )"
65
+ ```
66
+
67
+ ### Manual Review Required
68
+
69
+ **PR created. Review and merge manually.**
70
+
71
+ The feature branch has been prepared and pushed. A pull request has been created for human review.
72
+
73
+ **Next steps (manual):**
74
+ 1. Review the PR on GitHub
75
+ 2. Address any review comments
76
+ 3. Merge when approved
77
+
78
+ Note: Spec status updates are handled in the Spec Verification phase before PR creation.
79
+
80
+ ## Rules
81
+ - Manual review mode stops after PR creation
82
+ - No automated code review or merge
83
+ - Human review and approval required before merging
84
+ - If gh CLI fails, check authentication: `gh auth status`
85
+
86
+ ## Troubleshooting
87
+ - **gh: command not found** -> Install GitHub CLI: `brew install gh`
88
+ - **gh auth error** -> Run: `gh auth login`
89
+ - **PR already exists** -> Use: `gh pr view` to see status
90
+
91
+ ## Learning Capture
92
+ If you discover patterns worth remembering during PR creation, append to @.ralph/LEARNINGS.md:
93
+ - Process improvements -> Add under "## Tool Usage"
94
+ - Common issues -> Add under "## Anti-Patterns"
95
+
96
+ Format: `- [YYYY-MM-DD] [$FEATURE] Brief description`
@@ -9,11 +9,12 @@ This directory contains configuration and guidance for AI-assisted development o
9
9
  |-- AGENTS.md # Commands, patterns, and coding rules
10
10
  |-- LEARNINGS.md # Accumulated knowledge from iterations
11
11
  |-- prompts/ # Task-specific prompts
12
- | |-- PROMPT.md # Main implementation prompt
13
- | |-- PROMPT_feature.md # Feature planning prompt
14
- | |-- PROMPT_e2e.md # E2E testing prompt
15
- | |-- PROMPT_verify.md # Verification prompt
16
- | |-- PROMPT_review.md # PR review prompt
12
+ | |-- PROMPT.md # Main implementation prompt
13
+ | |-- PROMPT_feature.md # Feature planning prompt
14
+ | |-- PROMPT_e2e.md # E2E testing prompt
15
+ | |-- PROMPT_verify.md # Verification prompt
16
+ | |-- PROMPT_review_manual.md # PR review prompt (manual)
17
+ | |-- PROMPT_review_auto.md # PR review prompt (auto merge)
17
18
  |-- guides/ # Reference documentation
18
19
  | |-- FRONTEND.md # UI/UX patterns and checklist
19
20
  | |-- SECURITY.md # Security review checklist
@@ -39,7 +40,7 @@ Reference these files in your prompts:
39
40
  2. **Implement**: Use `PROMPT.md` for iterative task completion
40
41
  3. **Test**: Use `PROMPT_e2e.md` for browser-based testing
41
42
  4. **Verify**: Use `PROMPT_verify.md` to verify spec requirements
42
- 5. **Review**: Use `PROMPT_review.md` to create PR and get review
43
+ 5. **Review**: Use `PROMPT_review_manual.md` (manual) or `PROMPT_review_auto.md` (auto merge) to create PR
43
44
 
44
45
  ### Specs
45
46
 
@@ -1,12 +1,13 @@
1
1
  #!/bin/bash
2
2
  # feature-loop.sh - Full feature workflow: branch -> implement -> E2E test -> PR -> review -> merge
3
3
  # Generated by ralph-cli for {{projectName}}
4
- # Usage: ./feature-loop.sh <feature-name> [max-iterations] [max-e2e-attempts] [--worktree] [--resume] [--model MODEL]
4
+ # Usage: ./feature-loop.sh <feature-name> [max-iterations] [max-e2e-attempts] [--worktree] [--resume] [--model MODEL] [--review-mode MODE]
5
5
  #
6
6
  # Options:
7
- # --worktree Use git worktree for isolation (enables parallel execution)
8
- # --resume Resume an interrupted loop (reuses existing branch/worktree)
9
- # --model MODEL Claude model to use (e.g., opus, sonnet, claude-sonnet-4-5-20250514)
7
+ # --worktree Use git worktree for isolation (enables parallel execution)
8
+ # --resume Resume an interrupted loop (reuses existing branch/worktree)
9
+ # --model MODEL Claude model to use (e.g., opus, sonnet, claude-sonnet-4-5-20250514)
10
+ # --review-mode MODE Review mode: 'manual' (stop at PR) or 'auto' (review + merge). Default: 'manual'
10
11
 
11
12
  set -e
12
13
  set -o pipefail
@@ -49,6 +50,7 @@ cd "$SCRIPT_DIR/../.."
49
50
  USE_WORKTREE=false
50
51
  RESUME=false
51
52
  MODEL=""
53
+ REVIEW_MODE=""
52
54
  POSITIONAL=()
53
55
  while [[ $# -gt 0 ]]; do
54
56
  case $1 in
@@ -64,6 +66,10 @@ while [[ $# -gt 0 ]]; do
64
66
  MODEL="$2"
65
67
  shift 2
66
68
  ;;
69
+ --review-mode)
70
+ REVIEW_MODE="$2"
71
+ shift 2
72
+ ;;
67
73
  *)
68
74
  POSITIONAL+=("$1")
69
75
  shift
@@ -72,6 +78,24 @@ while [[ $# -gt 0 ]]; do
72
78
  done
73
79
  set -- "${POSITIONAL[@]}"
74
80
 
81
+ # Resolve review mode from CLI > config > default
82
+ if [ -z "$REVIEW_MODE" ]; then
83
+ if [ -f "$SCRIPT_DIR/../ralph.config.cjs" ]; then
84
+ REVIEW_MODE_DEFAULT=$(node -e "console.log(require('$SCRIPT_DIR/../ralph.config.cjs').loop?.reviewMode || 'manual')" 2>/dev/null || echo "manual")
85
+ elif [ -f "$SCRIPT_DIR/../../ralph.config.cjs" ]; then
86
+ REVIEW_MODE_DEFAULT=$(node -e "console.log(require('$SCRIPT_DIR/../../ralph.config.cjs').loop?.reviewMode || 'manual')" 2>/dev/null || echo "manual")
87
+ else
88
+ REVIEW_MODE_DEFAULT="manual"
89
+ fi
90
+ REVIEW_MODE="${REVIEW_MODE_DEFAULT}"
91
+ fi
92
+
93
+ # Validate review mode
94
+ if [ "$REVIEW_MODE" != "manual" ] && [ "$REVIEW_MODE" != "auto" ]; then
95
+ echo "ERROR: Invalid review mode: '$REVIEW_MODE'. Allowed values are 'manual' or 'auto'." >&2
96
+ exit 1
97
+ fi
98
+
75
99
  # Build claude commands
76
100
  CLAUDE_CMD_OPUS="claude -p --dangerously-skip-permissions --model ${PLANNING_MODEL}"
77
101
  CLAUDE_CMD_IMPL="claude -p --dangerously-skip-permissions --model ${MODEL:-$DEFAULT_MODEL}"
@@ -134,6 +158,7 @@ echo "Branch: $BRANCH"
134
158
  echo "App dir: $APP_DIR"
135
159
  echo "Worktree mode: $USE_WORKTREE"
136
160
  echo "Resume mode: $RESUME"
161
+ echo "Review mode: $REVIEW_MODE"
137
162
  echo "Model (planning): $PLANNING_MODEL"
138
163
  echo "Model (impl): ${MODEL:-$DEFAULT_MODEL}"
139
164
  echo "Max iterations: $MAX_ITERATIONS"
@@ -248,7 +273,11 @@ parse_and_accumulate_tokens "$CLAUDE_OUTPUT"
248
273
  # Phase 7: PR and Review
249
274
  echo "======================== PR & REVIEW PHASE ========================"
250
275
  export FEATURE APP_DIR SPEC_DIR PROMPTS_DIR
251
- cat "$PROMPTS_DIR/PROMPT_review.md" | envsubst | $CLAUDE_CMD_OPUS 2>&1 | tee "$CLAUDE_OUTPUT" || true
276
+ if [ "$REVIEW_MODE" = "manual" ]; then
277
+ cat "$PROMPTS_DIR/PROMPT_review_manual.md" | envsubst | $CLAUDE_CMD_OPUS 2>&1 | tee "$CLAUDE_OUTPUT" || true
278
+ else
279
+ cat "$PROMPTS_DIR/PROMPT_review_auto.md" | envsubst | $CLAUDE_CMD_OPUS 2>&1 | tee "$CLAUDE_OUTPUT" || true
280
+ fi
252
281
  parse_and_accumulate_tokens "$CLAUDE_OUTPUT"
253
282
 
254
283
  # Persist final status for TUI summaries
@@ -75,7 +75,9 @@ detect_phase() {
75
75
  echo "E2E Testing"
76
76
  elif pgrep -f "PROMPT_verify.md" > /dev/null 2>&1; then
77
77
  echo "Verification"
78
- elif pgrep -f "PROMPT_review.md" > /dev/null 2>&1; then
78
+ elif pgrep -f "PROMPT_review_manual.md" > /dev/null 2>&1; then
79
+ echo "PR Review"
80
+ elif pgrep -f "PROMPT_review_auto.md" > /dev/null 2>&1; then
79
81
  echo "PR Review"
80
82
  elif pgrep -f "PROMPT.md" > /dev/null 2>&1; then
81
83
  echo "Implementation"
package/dist/cli.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import { Command } from 'commander';
2
- /**
3
- * Set up and configure the CLI
4
- */
5
- export declare function createCli(): Command;
6
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAuPnC"}