@liangjie559567/ultrapower 5.0.25 → 5.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.
- package/.claude-plugin/plugin.json +1 -1
- package/dist/__tests__/compatibility.test.js +6 -6
- package/dist/__tests__/live-data.test.js +9 -9
- package/dist/__tests__/rate-limit-wait/integration.test.js +68 -68
- package/dist/__tests__/rate-limit-wait/tmux-detector.test.js +33 -33
- package/dist/agents/prompt-sections/index.js +36 -36
- package/dist/cli/index.js +226 -226
- package/dist/features/rate-limit-wait/daemon.js +5 -5
- package/dist/hooks/autopilot/enforcement.js +19 -19
- package/dist/hooks/autopilot/validation.js +58 -58
- package/dist/hooks/axiom-boot/index.d.ts.map +1 -1
- package/dist/hooks/axiom-boot/index.js +2 -1
- package/dist/hooks/axiom-boot/index.js.map +1 -1
- package/dist/hooks/axiom-boot/storage.d.ts +1 -0
- package/dist/hooks/axiom-boot/storage.d.ts.map +1 -1
- package/dist/hooks/axiom-boot/storage.js +37 -1
- package/dist/hooks/axiom-boot/storage.js.map +1 -1
- package/dist/hooks/bridge.d.ts.map +1 -1
- package/dist/hooks/bridge.js +110 -100
- package/dist/hooks/bridge.js.map +1 -1
- package/dist/hooks/keyword-detector/__tests__/index.test.js +7 -7
- package/dist/hooks/learner/learning-queue.d.ts.map +1 -1
- package/dist/hooks/learner/learning-queue.js +2 -1
- package/dist/hooks/learner/learning-queue.js.map +1 -1
- package/dist/hooks/learner/session-reflector.d.ts +22 -0
- package/dist/hooks/learner/session-reflector.d.ts.map +1 -0
- package/dist/hooks/learner/session-reflector.js +52 -0
- package/dist/hooks/learner/session-reflector.js.map +1 -0
- package/dist/hooks/learner/usage-tracker.d.ts +45 -0
- package/dist/hooks/learner/usage-tracker.d.ts.map +1 -0
- package/dist/hooks/learner/usage-tracker.js +143 -0
- package/dist/hooks/learner/usage-tracker.js.map +1 -0
- package/dist/hooks/omc-orchestrator/index.js +20 -20
- package/dist/hooks/session-end/callbacks.js +10 -10
- package/dist/hooks/session-end/index.d.ts.map +1 -1
- package/dist/hooks/session-end/index.js +17 -0
- package/dist/hooks/session-end/index.js.map +1 -1
- package/dist/hooks/think-mode/__tests__/index.test.js +6 -6
- package/dist/mcp/codex-core.js +26 -26
- package/dist/mcp/gemini-core.js +2 -2
- package/dist/team/mcp-team-bridge.js +26 -26
- package/docs/CLAUDE.md +1 -1
- package/package.json +1 -1
- package/scripts/persistent-mode.cjs +605 -605
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ultrapower",
|
|
3
3
|
"description": "Disciplined multi-agent orchestration: workflow enforcement + parallel execution. Combines superpowers' TDD/debugging discipline with OMC's multi-agent execution capabilities.",
|
|
4
|
-
"version": "5.0
|
|
4
|
+
"version": "5.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jesse Vincent & oh-my-claudecode contributors"
|
|
7
7
|
},
|
|
@@ -36,12 +36,12 @@ function createTestPlugin(name, manifest) {
|
|
|
36
36
|
// Create a sample skill
|
|
37
37
|
const sampleSkillDir = join(skillsDir, 'sample-skill');
|
|
38
38
|
mkdirSync(sampleSkillDir, { recursive: true });
|
|
39
|
-
writeFileSync(join(sampleSkillDir, 'SKILL.md'), `---
|
|
40
|
-
name: sample-skill
|
|
41
|
-
description: A sample skill for testing
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
This is a sample skill.
|
|
39
|
+
writeFileSync(join(sampleSkillDir, 'SKILL.md'), `---
|
|
40
|
+
name: sample-skill
|
|
41
|
+
description: A sample skill for testing
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
This is a sample skill.
|
|
45
45
|
`);
|
|
46
46
|
}
|
|
47
47
|
return pluginDir;
|
|
@@ -253,15 +253,15 @@ describe('resolveLiveData - output formats', () => {
|
|
|
253
253
|
expect(result).toContain('format="table"');
|
|
254
254
|
});
|
|
255
255
|
it('!diff adds format="diff" with file/add/del stats', () => {
|
|
256
|
-
const diffOutput = `diff --git a/src/main.ts b/src/main.ts
|
|
257
|
-
--- a/src/main.ts
|
|
258
|
-
+++ b/src/main.ts
|
|
259
|
-
@@ -1,3 +1,5 @@
|
|
260
|
-
+import { foo } from 'bar';
|
|
261
|
-
+import { baz } from 'qux';
|
|
262
|
-
const x = 1;
|
|
263
|
-
-const y = 2;
|
|
264
|
-
const z = 3;
|
|
256
|
+
const diffOutput = `diff --git a/src/main.ts b/src/main.ts
|
|
257
|
+
--- a/src/main.ts
|
|
258
|
+
+++ b/src/main.ts
|
|
259
|
+
@@ -1,3 +1,5 @@
|
|
260
|
+
+import { foo } from 'bar';
|
|
261
|
+
+import { baz } from 'qux';
|
|
262
|
+
const x = 1;
|
|
263
|
+
-const y = 2;
|
|
264
|
+
const z = 3;
|
|
265
265
|
`;
|
|
266
266
|
mockedExecSync.mockReturnValue(diffOutput);
|
|
267
267
|
const result = resolveLiveData('!diff git diff');
|
|
@@ -95,20 +95,20 @@ describe('Rate Limit Wait Integration Tests', () => {
|
|
|
95
95
|
});
|
|
96
96
|
describe('Scenario: tmux pane analysis accuracy', () => {
|
|
97
97
|
it('should correctly identify Claude Code rate limit message', () => {
|
|
98
|
-
const realWorldContent = `
|
|
99
|
-
╭─────────────────────────────────────────────────────────────────╮
|
|
100
|
-
│ Claude Code │
|
|
101
|
-
╰─────────────────────────────────────────────────────────────────╯
|
|
102
|
-
|
|
103
|
-
You've reached your usage limit for the 5-hour period.
|
|
104
|
-
Your limit will reset at 3:45 PM.
|
|
105
|
-
|
|
106
|
-
What would you like to do?
|
|
107
|
-
|
|
108
|
-
[1] Wait and continue automatically when limit resets
|
|
109
|
-
[2] Switch to a different conversation
|
|
110
|
-
[3] Exit
|
|
111
|
-
|
|
98
|
+
const realWorldContent = `
|
|
99
|
+
╭─────────────────────────────────────────────────────────────────╮
|
|
100
|
+
│ Claude Code │
|
|
101
|
+
╰─────────────────────────────────────────────────────────────────╯
|
|
102
|
+
|
|
103
|
+
You've reached your usage limit for the 5-hour period.
|
|
104
|
+
Your limit will reset at 3:45 PM.
|
|
105
|
+
|
|
106
|
+
What would you like to do?
|
|
107
|
+
|
|
108
|
+
[1] Wait and continue automatically when limit resets
|
|
109
|
+
[2] Switch to a different conversation
|
|
110
|
+
[3] Exit
|
|
111
|
+
|
|
112
112
|
> `;
|
|
113
113
|
const result = analyzePaneContent(realWorldContent);
|
|
114
114
|
expect(result.hasClaudeCode).toBe(true);
|
|
@@ -118,18 +118,18 @@ What would you like to do?
|
|
|
118
118
|
expect(result.confidence).toBeGreaterThanOrEqual(0.8);
|
|
119
119
|
});
|
|
120
120
|
it('should correctly identify weekly rate limit message', () => {
|
|
121
|
-
const weeklyLimitContent = `
|
|
122
|
-
Claude Code v1.0.0
|
|
123
|
-
|
|
124
|
-
⚠️ Weekly usage limit reached
|
|
125
|
-
|
|
126
|
-
You've used your weekly allocation of tokens.
|
|
127
|
-
Limit resets on Monday at 12:00 AM UTC.
|
|
128
|
-
|
|
129
|
-
Options:
|
|
130
|
-
[1] Continue when limit resets
|
|
131
|
-
[2] Exit
|
|
132
|
-
|
|
121
|
+
const weeklyLimitContent = `
|
|
122
|
+
Claude Code v1.0.0
|
|
123
|
+
|
|
124
|
+
⚠️ Weekly usage limit reached
|
|
125
|
+
|
|
126
|
+
You've used your weekly allocation of tokens.
|
|
127
|
+
Limit resets on Monday at 12:00 AM UTC.
|
|
128
|
+
|
|
129
|
+
Options:
|
|
130
|
+
[1] Continue when limit resets
|
|
131
|
+
[2] Exit
|
|
132
|
+
|
|
133
133
|
Enter choice: `;
|
|
134
134
|
const result = analyzePaneContent(weeklyLimitContent);
|
|
135
135
|
expect(result.hasClaudeCode).toBe(true);
|
|
@@ -138,18 +138,18 @@ Enter choice: `;
|
|
|
138
138
|
expect(result.rateLimitType).toBe('weekly');
|
|
139
139
|
});
|
|
140
140
|
it('should NOT flag normal Claude Code output as blocked', () => {
|
|
141
|
-
const normalContent = `
|
|
142
|
-
Claude Code
|
|
143
|
-
|
|
144
|
-
> What would you like to build today?
|
|
145
|
-
|
|
146
|
-
I can help you with:
|
|
147
|
-
- Writing code
|
|
148
|
-
- Debugging
|
|
149
|
-
- Refactoring
|
|
150
|
-
- Documentation
|
|
151
|
-
|
|
152
|
-
Just describe what you need!
|
|
141
|
+
const normalContent = `
|
|
142
|
+
Claude Code
|
|
143
|
+
|
|
144
|
+
> What would you like to build today?
|
|
145
|
+
|
|
146
|
+
I can help you with:
|
|
147
|
+
- Writing code
|
|
148
|
+
- Debugging
|
|
149
|
+
- Refactoring
|
|
150
|
+
- Documentation
|
|
151
|
+
|
|
152
|
+
Just describe what you need!
|
|
153
153
|
`;
|
|
154
154
|
const result = analyzePaneContent(normalContent);
|
|
155
155
|
expect(result.hasClaudeCode).toBe(true);
|
|
@@ -157,12 +157,12 @@ Just describe what you need!
|
|
|
157
157
|
expect(result.isBlocked).toBe(false);
|
|
158
158
|
});
|
|
159
159
|
it('should NOT flag unrelated rate limit messages', () => {
|
|
160
|
-
const unrelatedContent = `
|
|
161
|
-
$ curl https://api.github.com/users/test
|
|
162
|
-
{
|
|
163
|
-
"message": "API rate limit exceeded for IP",
|
|
164
|
-
"documentation_url": "https://docs.github.com"
|
|
165
|
-
}
|
|
160
|
+
const unrelatedContent = `
|
|
161
|
+
$ curl https://api.github.com/users/test
|
|
162
|
+
{
|
|
163
|
+
"message": "API rate limit exceeded for IP",
|
|
164
|
+
"documentation_url": "https://docs.github.com"
|
|
165
|
+
}
|
|
166
166
|
$ `;
|
|
167
167
|
const result = analyzePaneContent(unrelatedContent);
|
|
168
168
|
expect(result.hasClaudeCode).toBe(false);
|
|
@@ -172,18 +172,18 @@ $ `;
|
|
|
172
172
|
it('should handle edge case: old rate limit message scrolled up', () => {
|
|
173
173
|
// Only last 15 lines should be analyzed
|
|
174
174
|
// Rate limit message from earlier should be ignored if not in recent content
|
|
175
|
-
const scrolledContent = `
|
|
176
|
-
User: fix the bug
|
|
177
|
-
Assistant: I'll fix that for you.
|
|
178
|
-
[Edit] src/main.ts
|
|
179
|
-
Done! The bug is fixed.
|
|
180
|
-
|
|
181
|
-
User: thanks
|
|
182
|
-
Assistant: You're welcome!
|
|
183
|
-
|
|
184
|
-
User: what else?
|
|
185
|
-
Assistant: I can help with more tasks.
|
|
186
|
-
|
|
175
|
+
const scrolledContent = `
|
|
176
|
+
User: fix the bug
|
|
177
|
+
Assistant: I'll fix that for you.
|
|
178
|
+
[Edit] src/main.ts
|
|
179
|
+
Done! The bug is fixed.
|
|
180
|
+
|
|
181
|
+
User: thanks
|
|
182
|
+
Assistant: You're welcome!
|
|
183
|
+
|
|
184
|
+
User: what else?
|
|
185
|
+
Assistant: I can help with more tasks.
|
|
186
|
+
|
|
187
187
|
> `;
|
|
188
188
|
const result = analyzePaneContent(scrolledContent);
|
|
189
189
|
expect(result.isBlocked).toBe(false);
|
|
@@ -311,25 +311,25 @@ Assistant: I can help with more tasks.
|
|
|
311
311
|
});
|
|
312
312
|
describe('Scenario: Confidence scoring', () => {
|
|
313
313
|
it('should give higher confidence for multiple indicators', () => {
|
|
314
|
-
const highConfidenceContent = `
|
|
315
|
-
Claude Code
|
|
316
|
-
Rate limit reached
|
|
317
|
-
5-hour usage limit
|
|
318
|
-
[1] Continue
|
|
319
|
-
[2] Exit
|
|
314
|
+
const highConfidenceContent = `
|
|
315
|
+
Claude Code
|
|
316
|
+
Rate limit reached
|
|
317
|
+
5-hour usage limit
|
|
318
|
+
[1] Continue
|
|
319
|
+
[2] Exit
|
|
320
320
|
`;
|
|
321
|
-
const lowConfidenceContent = `
|
|
322
|
-
Claude
|
|
323
|
-
rate limit
|
|
321
|
+
const lowConfidenceContent = `
|
|
322
|
+
Claude
|
|
323
|
+
rate limit
|
|
324
324
|
`;
|
|
325
325
|
const highResult = analyzePaneContent(highConfidenceContent);
|
|
326
326
|
const lowResult = analyzePaneContent(lowConfidenceContent);
|
|
327
327
|
expect(highResult.confidence).toBeGreaterThan(lowResult.confidence);
|
|
328
328
|
});
|
|
329
329
|
it('should require minimum confidence to mark as blocked', () => {
|
|
330
|
-
const ambiguousContent = `
|
|
331
|
-
some claude reference
|
|
332
|
-
limit mentioned
|
|
330
|
+
const ambiguousContent = `
|
|
331
|
+
some claude reference
|
|
332
|
+
limit mentioned
|
|
333
333
|
`;
|
|
334
334
|
const result = analyzePaneContent(ambiguousContent);
|
|
335
335
|
// Even if some patterns match, confidence should be too low
|
|
@@ -15,11 +15,11 @@ describe('tmux-detector', () => {
|
|
|
15
15
|
});
|
|
16
16
|
describe('analyzePaneContent', () => {
|
|
17
17
|
it('should detect rate limit messages with Claude Code context', () => {
|
|
18
|
-
const content = `
|
|
19
|
-
Claude Code v1.2.3
|
|
20
|
-
You've reached your rate limit. Please wait for the limit to reset.
|
|
21
|
-
[1] Continue when ready
|
|
22
|
-
[2] Exit
|
|
18
|
+
const content = `
|
|
19
|
+
Claude Code v1.2.3
|
|
20
|
+
You've reached your rate limit. Please wait for the limit to reset.
|
|
21
|
+
[1] Continue when ready
|
|
22
|
+
[2] Exit
|
|
23
23
|
`;
|
|
24
24
|
const result = analyzePaneContent(content);
|
|
25
25
|
expect(result.hasClaudeCode).toBe(true);
|
|
@@ -28,38 +28,38 @@ describe('tmux-detector', () => {
|
|
|
28
28
|
expect(result.confidence).toBeGreaterThan(0.5);
|
|
29
29
|
});
|
|
30
30
|
it('should detect 5-hour rate limit', () => {
|
|
31
|
-
const content = `
|
|
32
|
-
Claude Code assistant
|
|
33
|
-
5-hour usage limit reached
|
|
34
|
-
[1] Wait for reset
|
|
31
|
+
const content = `
|
|
32
|
+
Claude Code assistant
|
|
33
|
+
5-hour usage limit reached
|
|
34
|
+
[1] Wait for reset
|
|
35
35
|
`;
|
|
36
36
|
const result = analyzePaneContent(content);
|
|
37
37
|
expect(result.hasRateLimitMessage).toBe(true);
|
|
38
38
|
expect(result.rateLimitType).toBe('five_hour');
|
|
39
39
|
});
|
|
40
40
|
it('should detect weekly rate limit', () => {
|
|
41
|
-
const content = `
|
|
42
|
-
Claude Code
|
|
43
|
-
Weekly usage quota exceeded
|
|
44
|
-
Please try again later
|
|
41
|
+
const content = `
|
|
42
|
+
Claude Code
|
|
43
|
+
Weekly usage quota exceeded
|
|
44
|
+
Please try again later
|
|
45
45
|
`;
|
|
46
46
|
const result = analyzePaneContent(content);
|
|
47
47
|
expect(result.hasRateLimitMessage).toBe(true);
|
|
48
48
|
expect(result.rateLimitType).toBe('weekly');
|
|
49
49
|
});
|
|
50
50
|
it('should not flag content without Claude Code indicators', () => {
|
|
51
|
-
const content = `
|
|
52
|
-
vim test.js
|
|
53
|
-
Hello World
|
|
51
|
+
const content = `
|
|
52
|
+
vim test.js
|
|
53
|
+
Hello World
|
|
54
54
|
`;
|
|
55
55
|
const result = analyzePaneContent(content);
|
|
56
56
|
expect(result.hasClaudeCode).toBe(false);
|
|
57
57
|
expect(result.isBlocked).toBe(false);
|
|
58
58
|
});
|
|
59
59
|
it('should not flag rate limit messages in non-Claude contexts', () => {
|
|
60
|
-
const content = `
|
|
61
|
-
curl api.example.com
|
|
62
|
-
Error: rate limit exceeded
|
|
60
|
+
const content = `
|
|
61
|
+
curl api.example.com
|
|
62
|
+
Error: rate limit exceeded
|
|
63
63
|
`;
|
|
64
64
|
const result = analyzePaneContent(content);
|
|
65
65
|
expect(result.hasClaudeCode).toBe(false);
|
|
@@ -74,25 +74,25 @@ describe('tmux-detector', () => {
|
|
|
74
74
|
expect(result.confidence).toBe(0);
|
|
75
75
|
});
|
|
76
76
|
it('should detect waiting patterns', () => {
|
|
77
|
-
const content = `
|
|
78
|
-
Claude assistant
|
|
79
|
-
Rate limit reached
|
|
80
|
-
[1] Continue
|
|
81
|
-
[2] Cancel
|
|
77
|
+
const content = `
|
|
78
|
+
Claude assistant
|
|
79
|
+
Rate limit reached
|
|
80
|
+
[1] Continue
|
|
81
|
+
[2] Cancel
|
|
82
82
|
`;
|
|
83
83
|
const result = analyzePaneContent(content);
|
|
84
84
|
expect(result.confidence).toBeGreaterThan(0.6);
|
|
85
85
|
});
|
|
86
86
|
it('should detect Claude limit screen phrasing: hit your limit + numeric menu', () => {
|
|
87
|
-
const content = `
|
|
88
|
-
Claude Code
|
|
89
|
-
You've hit your limit · resets Feb 17 at 2pm (Asia/Seoul)
|
|
90
|
-
What do you want to do?
|
|
91
|
-
|
|
92
|
-
❯ 1. Stop and wait for limit to reset
|
|
93
|
-
2. Request more
|
|
94
|
-
|
|
95
|
-
Enter to confirm · Esc to cancel
|
|
87
|
+
const content = `
|
|
88
|
+
Claude Code
|
|
89
|
+
You've hit your limit · resets Feb 17 at 2pm (Asia/Seoul)
|
|
90
|
+
What do you want to do?
|
|
91
|
+
|
|
92
|
+
❯ 1. Stop and wait for limit to reset
|
|
93
|
+
2. Request more
|
|
94
|
+
|
|
95
|
+
Enter to confirm · Esc to cancel
|
|
96
96
|
`;
|
|
97
97
|
const result = analyzePaneContent(content);
|
|
98
98
|
expect(result.hasClaudeCode).toBe(true);
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
* Build the header section with core orchestrator identity
|
|
9
9
|
*/
|
|
10
10
|
export function buildHeader() {
|
|
11
|
-
return `You are the relentless orchestrator of a multi-agent development system.
|
|
12
|
-
|
|
13
|
-
## RELENTLESS EXECUTION
|
|
14
|
-
|
|
15
|
-
You are BOUND to your task list. You do not stop. You do not quit. You do not take breaks. Work continues until EVERY task is COMPLETE.
|
|
16
|
-
|
|
17
|
-
## Your Core Duty
|
|
11
|
+
return `You are the relentless orchestrator of a multi-agent development system.
|
|
12
|
+
|
|
13
|
+
## RELENTLESS EXECUTION
|
|
14
|
+
|
|
15
|
+
You are BOUND to your task list. You do not stop. You do not quit. You do not take breaks. Work continues until EVERY task is COMPLETE.
|
|
16
|
+
|
|
17
|
+
## Your Core Duty
|
|
18
18
|
You coordinate specialized subagents to accomplish complex software engineering tasks. Abandoning work mid-task is not an option. If you stop without completing ALL tasks, you have failed.`;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
@@ -138,53 +138,53 @@ export function buildDelegationMatrix(agents) {
|
|
|
138
138
|
* Build orchestration principles section
|
|
139
139
|
*/
|
|
140
140
|
export function buildOrchestrationPrinciples() {
|
|
141
|
-
return `## Orchestration Principles
|
|
142
|
-
1. **Delegate Aggressively**: Fire off subagents for specialized tasks - don't do everything yourself
|
|
143
|
-
2. **Parallelize Ruthlessly**: Launch multiple subagents concurrently whenever tasks are independent
|
|
144
|
-
3. **PERSIST RELENTLESSLY**: Continue until ALL tasks are VERIFIED complete - check your todo list BEFORE stopping
|
|
145
|
-
4. **Communicate Progress**: Keep the user informed but DON'T STOP to explain when you should be working
|
|
141
|
+
return `## Orchestration Principles
|
|
142
|
+
1. **Delegate Aggressively**: Fire off subagents for specialized tasks - don't do everything yourself
|
|
143
|
+
2. **Parallelize Ruthlessly**: Launch multiple subagents concurrently whenever tasks are independent
|
|
144
|
+
3. **PERSIST RELENTLESSLY**: Continue until ALL tasks are VERIFIED complete - check your todo list BEFORE stopping
|
|
145
|
+
4. **Communicate Progress**: Keep the user informed but DON'T STOP to explain when you should be working
|
|
146
146
|
5. **Verify Thoroughly**: Test, check, verify - then verify again`;
|
|
147
147
|
}
|
|
148
148
|
/**
|
|
149
149
|
* Build workflow section
|
|
150
150
|
*/
|
|
151
151
|
export function buildWorkflow() {
|
|
152
|
-
return `## Workflow
|
|
153
|
-
1. Analyze the user's request and break it into tasks using TodoWrite
|
|
154
|
-
2. Mark the first task in_progress and BEGIN WORKING
|
|
155
|
-
3. Delegate to appropriate subagents based on task type
|
|
156
|
-
4. Coordinate results and handle any issues WITHOUT STOPPING
|
|
157
|
-
5. Mark tasks complete ONLY when verified
|
|
158
|
-
6. LOOP back to step 2 until ALL tasks show 'completed'
|
|
159
|
-
7. Final verification: Re-read todo list, confirm 100% completion
|
|
152
|
+
return `## Workflow
|
|
153
|
+
1. Analyze the user's request and break it into tasks using TodoWrite
|
|
154
|
+
2. Mark the first task in_progress and BEGIN WORKING
|
|
155
|
+
3. Delegate to appropriate subagents based on task type
|
|
156
|
+
4. Coordinate results and handle any issues WITHOUT STOPPING
|
|
157
|
+
5. Mark tasks complete ONLY when verified
|
|
158
|
+
6. LOOP back to step 2 until ALL tasks show 'completed'
|
|
159
|
+
7. Final verification: Re-read todo list, confirm 100% completion
|
|
160
160
|
8. Only THEN may you rest`;
|
|
161
161
|
}
|
|
162
162
|
/**
|
|
163
163
|
* Build critical rules section
|
|
164
164
|
*/
|
|
165
165
|
export function buildCriticalRules() {
|
|
166
|
-
return `## CRITICAL RULES - VIOLATION IS FAILURE
|
|
167
|
-
|
|
168
|
-
1. **NEVER STOP WITH INCOMPLETE WORK** - If your todo list has pending/in_progress items, YOU ARE NOT DONE
|
|
169
|
-
2. **ALWAYS VERIFY** - Check your todo list before ANY attempt to conclude
|
|
170
|
-
3. **NO PREMATURE CONCLUSIONS** - Saying "I've completed the task" without verification is a LIE
|
|
171
|
-
4. **PARALLEL EXECUTION** - Use it whenever possible for speed
|
|
172
|
-
5. **CONTINUOUS PROGRESS** - Report progress but keep working
|
|
173
|
-
6. **WHEN BLOCKED, UNBLOCK** - Don't stop because something is hard; find another way
|
|
166
|
+
return `## CRITICAL RULES - VIOLATION IS FAILURE
|
|
167
|
+
|
|
168
|
+
1. **NEVER STOP WITH INCOMPLETE WORK** - If your todo list has pending/in_progress items, YOU ARE NOT DONE
|
|
169
|
+
2. **ALWAYS VERIFY** - Check your todo list before ANY attempt to conclude
|
|
170
|
+
3. **NO PREMATURE CONCLUSIONS** - Saying "I've completed the task" without verification is a LIE
|
|
171
|
+
4. **PARALLEL EXECUTION** - Use it whenever possible for speed
|
|
172
|
+
5. **CONTINUOUS PROGRESS** - Report progress but keep working
|
|
173
|
+
6. **WHEN BLOCKED, UNBLOCK** - Don't stop because something is hard; find another way
|
|
174
174
|
7. **ASK ONLY WHEN NECESSARY** - Clarifying questions are for ambiguity, not for avoiding work`;
|
|
175
175
|
}
|
|
176
176
|
/**
|
|
177
177
|
* Build completion checklist section
|
|
178
178
|
*/
|
|
179
179
|
export function buildCompletionChecklist() {
|
|
180
|
-
return `## Completion Checklist
|
|
181
|
-
Before concluding, you MUST verify:
|
|
182
|
-
- [ ] Every todo item is marked 'completed'
|
|
183
|
-
- [ ] All requested functionality is implemented
|
|
184
|
-
- [ ] Tests pass (if applicable)
|
|
185
|
-
- [ ] No errors remain unaddressed
|
|
186
|
-
- [ ] The user's original request is FULLY satisfied
|
|
187
|
-
|
|
180
|
+
return `## Completion Checklist
|
|
181
|
+
Before concluding, you MUST verify:
|
|
182
|
+
- [ ] Every todo item is marked 'completed'
|
|
183
|
+
- [ ] All requested functionality is implemented
|
|
184
|
+
- [ ] Tests pass (if applicable)
|
|
185
|
+
- [ ] No errors remain unaddressed
|
|
186
|
+
- [ ] The user's original request is FULLY satisfied
|
|
187
|
+
|
|
188
188
|
If ANY checkbox is unchecked, YOU ARE NOT DONE. Continue working.`;
|
|
189
189
|
}
|
|
190
190
|
/**
|