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.
- package/README.md +2 -1
- package/dist/__test-utils__/fixtures.d.ts +17 -0
- package/dist/__test-utils__/fixtures.d.ts.map +1 -0
- package/dist/__test-utils__/fixtures.js +32 -0
- package/dist/__test-utils__/fixtures.js.map +1 -0
- package/dist/__test-utils__/ink-helpers.d.ts +43 -0
- package/dist/__test-utils__/ink-helpers.d.ts.map +1 -0
- package/dist/__test-utils__/ink-helpers.js +62 -0
- package/dist/__test-utils__/ink-helpers.js.map +1 -0
- package/dist/__test-utils__/mock-ai.d.ts +99 -0
- package/dist/__test-utils__/mock-ai.d.ts.map +1 -0
- package/dist/__test-utils__/mock-ai.js +75 -0
- package/dist/__test-utils__/mock-ai.js.map +1 -0
- package/dist/__test-utils__/mock-tracing.d.ts +18 -0
- package/dist/__test-utils__/mock-tracing.d.ts.map +1 -0
- package/dist/__test-utils__/mock-tracing.js +24 -0
- package/dist/__test-utils__/mock-tracing.js.map +1 -0
- package/dist/__test-utils__/setup.d.ts +8 -0
- package/dist/__test-utils__/setup.d.ts.map +1 -0
- package/dist/__test-utils__/setup.js +21 -0
- package/dist/__test-utils__/setup.js.map +1 -0
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +3 -1
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/run.d.ts +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +8 -0
- package/dist/commands/run.js.map +1 -1
- package/dist/templates/config/ralph.config.cjs.tmpl +1 -0
- package/dist/templates/prompts/PROMPT_review_manual.md.tmpl +96 -0
- package/dist/templates/root/README.md.tmpl +7 -6
- package/dist/templates/scripts/feature-loop.sh.tmpl +34 -5
- package/dist/templates/scripts/ralph-monitor.sh.tmpl +3 -1
- package/dist/tui/app.d.ts.map +1 -1
- package/dist/tui/app.js +3 -0
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/components/ChatInput.test.d.ts +2 -0
- package/dist/tui/components/ChatInput.test.d.ts.map +1 -0
- package/dist/tui/components/ChatInput.test.js +75 -0
- package/dist/tui/components/ChatInput.test.js.map +1 -0
- package/dist/tui/components/MultiSelect.d.ts.map +1 -1
- package/dist/tui/components/MultiSelect.js +5 -3
- package/dist/tui/components/MultiSelect.js.map +1 -1
- package/dist/tui/components/WiggumBanner.d.ts.map +1 -1
- package/dist/tui/components/WiggumBanner.js +1 -2
- package/dist/tui/components/WiggumBanner.js.map +1 -1
- package/dist/tui/components/WorkingIndicator.test.d.ts +2 -0
- package/dist/tui/components/WorkingIndicator.test.d.ts.map +1 -0
- package/dist/tui/components/WorkingIndicator.test.js +26 -0
- package/dist/tui/components/WorkingIndicator.test.js.map +1 -0
- package/dist/tui/orchestration/interview-orchestrator.d.ts +2 -2
- package/dist/tui/orchestration/interview-orchestrator.d.ts.map +1 -1
- package/dist/tui/orchestration/interview-orchestrator.js +19 -5
- package/dist/tui/orchestration/interview-orchestrator.js.map +1 -1
- package/dist/tui/screens/InterviewScreen.d.ts.map +1 -1
- package/dist/tui/screens/InterviewScreen.integration.test.d.ts +7 -0
- package/dist/tui/screens/InterviewScreen.integration.test.d.ts.map +1 -0
- package/dist/tui/screens/InterviewScreen.integration.test.js +149 -0
- package/dist/tui/screens/InterviewScreen.integration.test.js.map +1 -0
- package/dist/tui/screens/InterviewScreen.js +5 -7
- package/dist/tui/screens/InterviewScreen.js.map +1 -1
- package/dist/tui/screens/MainShell.test.d.ts +2 -0
- package/dist/tui/screens/MainShell.test.d.ts.map +1 -0
- package/dist/tui/screens/MainShell.test.js +103 -0
- package/dist/tui/screens/MainShell.test.js.map +1 -0
- package/dist/tui/screens/RunScreen.d.ts.map +1 -1
- package/dist/tui/screens/RunScreen.js +8 -0
- package/dist/tui/screens/RunScreen.js.map +1 -1
- package/dist/tui/screens/WelcomeScreen.test.d.ts +2 -0
- package/dist/tui/screens/WelcomeScreen.test.d.ts.map +1 -0
- package/dist/tui/screens/WelcomeScreen.test.js +51 -0
- package/dist/tui/screens/WelcomeScreen.test.js.map +1 -0
- package/dist/tui/types/interview.d.ts +3 -1
- package/dist/tui/types/interview.d.ts.map +1 -1
- package/dist/tui/types/interview.js.map +1 -1
- package/dist/tui/utils/loop-status.d.ts.map +1 -1
- package/dist/tui/utils/loop-status.js +3 -1
- package/dist/tui/utils/loop-status.js.map +1 -1
- package/dist/utils/config.d.ts +1 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +2 -0
- package/dist/utils/config.js.map +1 -1
- package/package.json +4 -2
- package/src/templates/config/ralph.config.cjs.tmpl +1 -0
- package/src/templates/prompts/PROMPT_review_manual.md.tmpl +96 -0
- package/src/templates/root/README.md.tmpl +7 -6
- package/src/templates/scripts/feature-loop.sh.tmpl +34 -5
- package/src/templates/scripts/ralph-monitor.sh.tmpl +3 -1
- package/dist/cli.d.ts +0 -6
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -212
- package/dist/cli.js.map +0 -1
- package/dist/repl/repl-loop.d.ts +0 -32
- package/dist/repl/repl-loop.d.ts.map +0 -1
- package/dist/repl/repl-loop.js +0 -309
- package/dist/repl/repl-loop.js.map +0 -1
- package/dist/templates/config/ralph.config.js.tmpl +0 -38
- package/dist/utils/repl-prompts.d.ts +0 -59
- package/dist/utils/repl-prompts.d.ts.map +0 -1
- package/dist/utils/repl-prompts.js +0 -314
- package/dist/utils/repl-prompts.js.map +0 -1
- /package/dist/templates/prompts/{PROMPT_review.md.tmpl → PROMPT_review_auto.md.tmpl} +0 -0
- /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":";AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAEtE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,aAAa,IACZ,QAAQ,EAAC,WAAW,EACpB,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,OAAO,EACf,aAAa,EAAE,IAAI,EACnB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QAEF,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,aAAa,IACZ,QAAQ,EAAC,WAAW,EACpB,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,OAAO,EACf,aAAa,EAAE,IAAI,EACnB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QAEF,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,aAAa,IACZ,QAAQ,EAAC,WAAW,EACpB,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,OAAO,EACf,aAAa,EAAE,IAAI,EACnB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QAEF,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,aAAa,IACZ,QAAQ,EAAE,IAAI,EACd,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,OAAO,EACf,aAAa,EAAE,KAAK,EACpB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QAEF,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,aAAa,IACZ,QAAQ,EAAE,IAAI,EACd,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,OAAO,EACf,aAAa,EAAE,KAAK,EACpB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QAEF,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CACxB,KAAC,aAAa,IACZ,QAAQ,EAAC,WAAW,EACpB,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,OAAO,EACf,aAAa,EAAE,IAAI,EACnB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;QAEF,kCAAkC;QAClC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -16,7 +16,9 @@ export interface InterviewOption {
|
|
|
16
16
|
export interface InterviewQuestion {
|
|
17
17
|
/** Unique identifier for the question */
|
|
18
18
|
id: string;
|
|
19
|
-
/**
|
|
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,
|
|
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;
|
|
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,
|
|
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('
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAkB/D;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,gBAAgB,CAAC,mBAAmB,CAAC;QAAE,OAAO,UAAU,CAAC;IAC7D,IAAI,gBAAgB,CAAC,eAAe,CAAC;QAAE,OAAO,aAAa,CAAC;IAC5D,IAAI,gBAAgB,CAAC,kBAAkB,CAAC;QAAE,OAAO,cAAc,CAAC;IAChE,IAAI,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"loop-status.js","sourceRoot":"","sources":["../../../src/tui/utils/loop-status.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/utils/config.js
CHANGED
|
@@ -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
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
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.
|
|
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
|
-
"
|
|
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"
|
|
@@ -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
|
|
13
|
-
| |-- PROMPT_feature.md
|
|
14
|
-
| |-- PROMPT_e2e.md
|
|
15
|
-
| |-- PROMPT_verify.md
|
|
16
|
-
| |--
|
|
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 `
|
|
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
|
|
8
|
-
# --resume
|
|
9
|
-
# --model MODEL
|
|
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
|
-
|
|
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 "
|
|
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
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"}
|