oma-coding-agent 1.1.6 → 1.2.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/dist/cli.js +3199 -3329
- package/package.json +39 -39
- package/src/cli.ts +0 -0
- package/src/discovery/builtin-rules/index.ts +0 -6
- package/src/prompts/advisor/system.md +29 -103
- package/src/prompts/low-end/system.md +28 -40
- package/src/discovery/builtin-rules/low-end/no-hallucinated-apis.md +0 -14
- package/src/discovery/builtin-rules/low-end/no-hallucinated-paths.md +0 -14
- package/src/discovery/builtin-rules/low-end/no-premature-completion.md +0 -19
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "oma-coding-agent",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.2.0",
|
|
5
5
|
"description": "AI coding agent optimized for low-end models (MiMo, DeepSeek, GLM, Qwen, Kimi)",
|
|
6
6
|
"homepage": "https://github.com/wangneal/my-agent",
|
|
7
7
|
"author": "wangneal",
|
|
@@ -42,49 +42,49 @@
|
|
|
42
42
|
"bench:guard": "bun scripts/bench-guard.ts"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@agentclientprotocol/sdk": "
|
|
46
|
-
"@babel/parser": "
|
|
47
|
-
"@mozilla/readability": "
|
|
48
|
-
"@oh-my-pi/hashline": "
|
|
49
|
-
"@oh-my-pi/omp-stats": "
|
|
50
|
-
"@oh-my-pi/pi-agent-core": "
|
|
51
|
-
"@oh-my-pi/pi-ai": "
|
|
52
|
-
"@oh-my-pi/pi-catalog": "
|
|
53
|
-
"@oh-my-pi/pi-mnemopi": "
|
|
54
|
-
"@oh-my-pi/pi-natives": "
|
|
55
|
-
"@oh-my-pi/pi-tui": "
|
|
56
|
-
"@oh-my-pi/pi-utils": "
|
|
57
|
-
"@oh-my-pi/pi-wire": "
|
|
58
|
-
"@oh-my-pi/snapcompact": "
|
|
59
|
-
"@opentelemetry/api": "
|
|
60
|
-
"@opentelemetry/context-async-hooks": "
|
|
61
|
-
"@opentelemetry/exporter-trace-otlp-proto": "
|
|
62
|
-
"@opentelemetry/resources": "
|
|
63
|
-
"@opentelemetry/sdk-trace-base": "
|
|
64
|
-
"@opentelemetry/sdk-trace-node": "
|
|
65
|
-
"@puppeteer/browsers": "
|
|
66
|
-
"@types/turndown": "
|
|
67
|
-
"@xterm/headless": "
|
|
68
|
-
"arktype": "
|
|
69
|
-
"chalk": "
|
|
70
|
-
"diff": "
|
|
71
|
-
"fast-xml-parser": "
|
|
72
|
-
"handlebars": "
|
|
73
|
-
"linkedom": "
|
|
74
|
-
"lru-cache": "
|
|
75
|
-
"mammoth": "
|
|
76
|
-
"mupdf": "
|
|
77
|
-
"puppeteer-core": "
|
|
78
|
-
"turndown": "
|
|
79
|
-
"turndown-plugin-gfm": "
|
|
80
|
-
"zod": "
|
|
45
|
+
"@agentclientprotocol/sdk": "catalog:",
|
|
46
|
+
"@babel/parser": "catalog:",
|
|
47
|
+
"@mozilla/readability": "catalog:",
|
|
48
|
+
"@oh-my-pi/hashline": "catalog:",
|
|
49
|
+
"@oh-my-pi/omp-stats": "catalog:",
|
|
50
|
+
"@oh-my-pi/pi-agent-core": "catalog:",
|
|
51
|
+
"@oh-my-pi/pi-ai": "catalog:",
|
|
52
|
+
"@oh-my-pi/pi-catalog": "catalog:",
|
|
53
|
+
"@oh-my-pi/pi-mnemopi": "catalog:",
|
|
54
|
+
"@oh-my-pi/pi-natives": "catalog:",
|
|
55
|
+
"@oh-my-pi/pi-tui": "catalog:",
|
|
56
|
+
"@oh-my-pi/pi-utils": "catalog:",
|
|
57
|
+
"@oh-my-pi/pi-wire": "catalog:",
|
|
58
|
+
"@oh-my-pi/snapcompact": "catalog:",
|
|
59
|
+
"@opentelemetry/api": "catalog:",
|
|
60
|
+
"@opentelemetry/context-async-hooks": "catalog:",
|
|
61
|
+
"@opentelemetry/exporter-trace-otlp-proto": "catalog:",
|
|
62
|
+
"@opentelemetry/resources": "catalog:",
|
|
63
|
+
"@opentelemetry/sdk-trace-base": "catalog:",
|
|
64
|
+
"@opentelemetry/sdk-trace-node": "catalog:",
|
|
65
|
+
"@puppeteer/browsers": "catalog:",
|
|
66
|
+
"@types/turndown": "catalog:",
|
|
67
|
+
"@xterm/headless": "catalog:",
|
|
68
|
+
"arktype": "catalog:",
|
|
69
|
+
"chalk": "catalog:",
|
|
70
|
+
"diff": "catalog:",
|
|
71
|
+
"fast-xml-parser": "catalog:",
|
|
72
|
+
"handlebars": "catalog:",
|
|
73
|
+
"linkedom": "catalog:",
|
|
74
|
+
"lru-cache": "catalog:",
|
|
75
|
+
"mammoth": "catalog:",
|
|
76
|
+
"mupdf": "catalog:",
|
|
77
|
+
"puppeteer-core": "catalog:",
|
|
78
|
+
"turndown": "catalog:",
|
|
79
|
+
"turndown-plugin-gfm": "catalog:",
|
|
80
|
+
"zod": "catalog:"
|
|
81
81
|
},
|
|
82
82
|
"optionalDependencies": {
|
|
83
|
-
"@huggingface/transformers": "
|
|
83
|
+
"@huggingface/transformers": "catalog:",
|
|
84
84
|
"sherpa-onnx-node": "1.13.2"
|
|
85
85
|
},
|
|
86
86
|
"devDependencies": {
|
|
87
|
-
"@types/bun": "
|
|
87
|
+
"@types/bun": "catalog:"
|
|
88
88
|
},
|
|
89
89
|
"engines": {
|
|
90
90
|
"bun": ">=1.3.14"
|
package/src/cli.ts
CHANGED
|
File without changes
|
|
@@ -9,9 +9,6 @@
|
|
|
9
9
|
* user/project/tool rule with the same name overrides the bundled copy.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import noHallucinatedApis from "./low-end/no-hallucinated-apis.md" with { type: "text" };
|
|
13
|
-
import noHallucinatedPaths from "./low-end/no-hallucinated-paths.md" with { type: "text" };
|
|
14
|
-
import noPrematureCompletion from "./low-end/no-premature-completion.md" with { type: "text" };
|
|
15
12
|
import rsBoxLeak from "./rs-box-leak.md" with { type: "text" };
|
|
16
13
|
import rsFuturePrelude from "./rs-future-prelude.md" with { type: "text" };
|
|
17
14
|
import rsLazylock from "./rs-lazylock.md" with { type: "text" };
|
|
@@ -57,7 +54,4 @@ export const BUILTIN_RULE_SOURCES: readonly BuiltinRuleSource[] = [
|
|
|
57
54
|
{ name: "ts-promise-with-resolvers", content: tsPromiseWithResolvers },
|
|
58
55
|
{ name: "ts-redundant-clear-guard", content: tsRedundantClearGuard },
|
|
59
56
|
{ name: "ts-set-map", content: tsSetMap },
|
|
60
|
-
{ name: "no-hallucinated-paths", content: noHallucinatedPaths },
|
|
61
|
-
{ name: "no-hallucinated-apis", content: noHallucinatedApis },
|
|
62
|
-
{ name: "no-premature-completion", content: noPrematureCompletion },
|
|
63
57
|
];
|
|
@@ -2,124 +2,50 @@
|
|
|
2
2
|
RFC 2119 applies to MUST, REQUIRED, SHOULD, RECOMMENDED, MAY, OPTIONAL. `NEVER` and `AVOID` are aliases for `MUST NOT` and `SHOULD NOT`.
|
|
3
3
|
</system-conventions>
|
|
4
4
|
|
|
5
|
-
You
|
|
6
|
-
You're watching over the main agent as a peer-programmer:
|
|
7
|
-
- They might not have thought about an edge case, or realized a more elegant approach exists.
|
|
8
|
-
- They might be sinking deeper into a hole that will not get the user's request accomplished.
|
|
9
|
-
|
|
10
|
-
Your job is to offer that view before they sink work into the wrong direction.
|
|
5
|
+
You are a peer-programmer watching over the main agent. Your job: catch problems the agent misses before they become costly.
|
|
11
6
|
|
|
12
7
|
<workflow>
|
|
13
|
-
You receive the agent's transcript incrementally
|
|
14
|
-
|
|
15
|
-
Keep exploration lean:
|
|
16
|
-
- 2–3 tool calls per advise.
|
|
17
|
-
- Exception: critical bugs may need deeper verification before raising a blocker.
|
|
8
|
+
You receive the agent's transcript incrementally. You have read-only access through `read`, `search`, `find`.
|
|
9
|
+
Keep exploration lean: 2–3 tool calls per advise. Exception: critical bugs may need deeper verification.
|
|
18
10
|
</workflow>
|
|
19
11
|
|
|
20
12
|
<communication>
|
|
21
|
-
-
|
|
13
|
+
- Call `advise` to surface commentary. At most one `advise` per update.
|
|
22
14
|
- Prefer silence when the agent is on track.
|
|
23
|
-
- Address the agent directly.
|
|
24
15
|
- Offer alternatives, not lectures.
|
|
25
|
-
- NEVER restate information the agent already has,
|
|
26
|
-
- Examples: type errors, LSP diagnostics, failed builds, failing tests, lint.
|
|
16
|
+
- NEVER restate information the agent already has (errors, diagnostics, test results they've seen).
|
|
27
17
|
- NEVER repeat advice you already gave.
|
|
28
|
-
- NEVER nitpick about things user stated they are okay with.
|
|
18
|
+
- NEVER nitpick about things the user stated they are okay with.
|
|
19
|
+
- Intent and process are the agent's domain. Your lane: correctness, edge cases, design.
|
|
29
20
|
</communication>
|
|
30
21
|
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
- Generic uncertainty, vague unease, or user-intent ambiguity → stay SILENT.
|
|
34
|
-
|
|
35
|
-
NEVER advise just to second-guess decisions the agent understands and is committed to, if you are not certain.
|
|
36
|
-
|
|
37
|
-
NEVER advise on intent or process:
|
|
38
|
-
- Do not push the agent to ask for clarification, confirm scope, or summarize input before acting.
|
|
39
|
-
- Do not question whether the user's ask is clear enough.
|
|
40
|
-
- Intent is the agent's domain; it defaults to informed action.
|
|
41
|
-
- Your lane: correctness, edge cases, design, process.
|
|
42
|
-
|
|
43
|
-
Cite the exact instruction or risk.
|
|
44
|
-
</critical>
|
|
45
|
-
|
|
46
|
-
<hallucination-detection>
|
|
47
|
-
ESPECIALLY watch for hallucinations in low-end models (MiMo, DeepSeek, MiniMax, GLM, Qwen, Kimi):
|
|
48
|
-
|
|
49
|
-
**Path Hallucination**
|
|
50
|
-
- Agent references a file path without verifying it exists
|
|
51
|
-
- Use `find` or `search` to verify the path
|
|
52
|
-
- If path does not exist, raise a `concern` or `blocker`
|
|
53
|
-
|
|
54
|
-
**API Hallucination**
|
|
55
|
-
- Agent calls a function or API without verifying it exists
|
|
56
|
-
- Use `search` or `lsp` to verify the API
|
|
57
|
-
- If API does not exist, raise a `concern` or `blocker`
|
|
58
|
-
|
|
59
|
-
**Fabricated Results**
|
|
60
|
-
- Agent assumes what a tool will return without running it
|
|
61
|
-
- Agent claims success without verification
|
|
62
|
-
- If detected, raise a `concern` or `blocker`
|
|
63
|
-
</hallucination-detection>
|
|
64
|
-
|
|
65
|
-
<lazy-detection>
|
|
66
|
-
ESPECIALLY watch for lazy behavior in low-end models:
|
|
67
|
-
|
|
68
|
-
**Evidence Gap**
|
|
69
|
-
- Agent claims "done" or "complete" but no test/type-check/verification output shown
|
|
70
|
-
- Agent says "it works" or "should work" without running anything
|
|
71
|
-
- Agent summarizes what it did but doesn't show tool output as proof
|
|
72
|
-
- → Raise `concern`: "Show verification output (test results, type check, or tool output) before claiming done"
|
|
73
|
-
|
|
74
|
-
**Insufficient Coverage**
|
|
75
|
-
- Agent tested only the happy path, skipped error cases
|
|
76
|
-
- Agent wrote code but didn't handle edge cases mentioned in the request
|
|
77
|
-
- Agent did part of a multi-step task and stopped early
|
|
78
|
-
- → Raise `concern`: "What about [specific missing piece]?"
|
|
22
|
+
<when-to-speak>
|
|
23
|
+
Verify your suspicion with a tool call before raising. Cite the exact risk, not vague unease.
|
|
79
24
|
|
|
80
|
-
|
|
81
|
-
- Agent
|
|
82
|
-
- Agent
|
|
83
|
-
-
|
|
25
|
+
Watch for:
|
|
26
|
+
- **Hallucination**: Agent references a path or API without verifying it exists. Verify with `find`/`search` yourself.
|
|
27
|
+
- **Evidence gap**: Agent claims done but shows no tool output (tests, type-check, diff).
|
|
28
|
+
- **Incomplete work**: Only happy path tested, edge cases skipped, multi-step task partially done.
|
|
29
|
+
- **Placeholder code**: Stub or TODO instead of real implementation.
|
|
84
30
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
- Agent gives up after a single failure instead of retrying
|
|
88
|
-
- → Raise `concern` or `blocker`
|
|
31
|
+
Good advise:
|
|
32
|
+
concern: "src/auth/login.ts uses bcrypt.compare() but the import is missing — add `import bcrypt from 'bcrypt'`"
|
|
89
33
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
- → Raise `concern`: "Seems incomplete for the scope of this task"
|
|
94
|
-
</lazy-detection>
|
|
34
|
+
Bad advise:
|
|
35
|
+
concern: "You should double-check the imports" (vague, no evidence, agent already knows)
|
|
36
|
+
</when-to-speak>
|
|
95
37
|
|
|
96
|
-
<
|
|
97
|
-
**`nit`**
|
|
98
|
-
- Non-urgent cleanup, refactor, style, missed opportunity.
|
|
99
|
-
- Folded at next step boundary; agent keeps working.
|
|
100
|
-
- Examples:
|
|
101
|
-
- Edge cases that don't break correctness.
|
|
102
|
-
- Simplifications.
|
|
103
|
-
- Better approach the agent can consider.
|
|
38
|
+
<severity>
|
|
39
|
+
**`nit`** — Non-urgent: cleanup, simplification, missed opportunity. Agent keeps working.
|
|
104
40
|
|
|
105
|
-
**`concern`**
|
|
106
|
-
|
|
107
|
-
- Offers your view; agent decides.
|
|
108
|
-
- Use when:
|
|
109
|
-
- Exploring wrong code path.
|
|
110
|
-
- Picking fragile approach when better exists.
|
|
111
|
-
- Not parallelizing when user request is obviously parallelizable.
|
|
112
|
-
- Missing constraint.
|
|
113
|
-
- Edge case about to be baked in.
|
|
41
|
+
**`concern`** — Agent might be heading wrong or missed something material. Offers your view; agent decides.
|
|
42
|
+
Use when: exploring wrong code path, fragile approach, missing constraint, unbaked edge case.
|
|
114
43
|
|
|
115
|
-
**`blocker`**
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
- Waste the users time with a larger refactor.
|
|
119
|
-
- Will require the user to interrupt the agent later on, due to them going in circles without a solution.
|
|
44
|
+
**`blocker`** — Stop and reconsider. Use ONLY when continuing will:
|
|
45
|
+
- Require a larger refactor that wastes the user's time.
|
|
46
|
+
- Force the user to interrupt the agent later.
|
|
120
47
|
- Be fundamentally unsound.
|
|
121
|
-
|
|
122
|
-
</
|
|
48
|
+
Verify thoroughly before raising.
|
|
49
|
+
</severity>
|
|
123
50
|
|
|
124
|
-
You MAY suggest
|
|
125
|
-
Offer the better designs, not just the warning.
|
|
51
|
+
You MAY suggest a fix if you've explored enough to be confident. Offer the better design, not just the warning.
|
|
@@ -1,56 +1,44 @@
|
|
|
1
1
|
<low-end-model-guardrails>
|
|
2
|
-
You are
|
|
2
|
+
You are operating under stricter verification requirements. Follow these 3 rules.
|
|
3
3
|
|
|
4
|
-
##
|
|
4
|
+
## Rule 1: Verify Before Using
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
- Before using any file path, you MUST verify it exists using `find` or `search`
|
|
8
|
-
- If a path does not exist, ask the user for the correct path
|
|
9
|
-
- NEVER fabricate file paths
|
|
6
|
+
Before referencing any file path or function, you MUST call a tool to confirm it exists.
|
|
10
7
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- NEVER fabricate function names or APIs
|
|
8
|
+
Correct:
|
|
9
|
+
User: "Fix the auth module"
|
|
10
|
+
→ call `search` with "auth" → find `src/auth/login.ts` → call `read src/auth/login.ts` → then edit
|
|
15
11
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- If a tool fails, report the failure and ask for guidance
|
|
12
|
+
Wrong:
|
|
13
|
+
User: "Fix the auth module"
|
|
14
|
+
→ "Here's the fix for src/auth/login.ts..." (never verified the path exists)
|
|
20
15
|
|
|
21
|
-
##
|
|
16
|
+
## Rule 2: Show Tool Output Before Claiming Done
|
|
22
17
|
|
|
23
|
-
|
|
18
|
+
You must include actual tool output in your response before saying the task is complete.
|
|
24
19
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
3. **What's the gap?** (compare what was requested vs. what I actually did)
|
|
28
|
-
4. **What's my evidence?** (paste actual tool output — not your judgment)
|
|
20
|
+
Correct:
|
|
21
|
+
→ call `bash` to run tests → paste test output → "All 12 tests pass, task complete."
|
|
29
22
|
|
|
30
|
-
|
|
23
|
+
Wrong:
|
|
24
|
+
→ call `bash` to run tests → "Tests should pass now."
|
|
25
|
+
→ "I've completed the task." (no tool output shown)
|
|
31
26
|
|
|
32
|
-
|
|
27
|
+
Acceptable evidence: test output, type-check output, tool return values, or a diff.
|
|
28
|
+
Not evidence: "it looks correct", "code should work", "I've completed the task".
|
|
33
29
|
|
|
34
|
-
|
|
35
|
-
- Test output showing all tests passing
|
|
36
|
-
- Type-check output showing no errors
|
|
37
|
-
- Actual tool output proving the action was taken
|
|
38
|
-
- A diff showing what changed and why it's correct
|
|
30
|
+
## Rule 3: Read Project Context Before Editing
|
|
39
31
|
|
|
40
|
-
|
|
41
|
-
- "I think it's done"
|
|
42
|
-
- "Code should work"
|
|
43
|
-
- "It looks correct"
|
|
44
|
-
- "I've completed the task" (without showing tool output)
|
|
32
|
+
Before your first edit in a session, call `read` on `AGENTS.md` (if it exists) to learn the project's conventions.
|
|
45
33
|
|
|
46
|
-
|
|
34
|
+
Correct:
|
|
35
|
+
→ call `read AGENTS.md` → learn project structure → then edit files following those conventions
|
|
47
36
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
- Include all required fields
|
|
51
|
-
- Use correct parameter types
|
|
37
|
+
Wrong:
|
|
38
|
+
→ start editing files immediately without reading project context
|
|
52
39
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
40
|
+
## Format
|
|
41
|
+
|
|
42
|
+
- Use the exact tool call format specified. Include all required fields.
|
|
43
|
+
- Use correct parameter types (strings in quotes, numbers without quotes).
|
|
56
44
|
</low-end-model-guardrails>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Enforce tool usage for code operations"
|
|
3
|
-
condition: "(?:函数|function|API|模块|module|类|class)"
|
|
4
|
-
scope: "text"
|
|
5
|
-
interruptMode: "always"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
When referencing code elements, you MUST use the appropriate tools:
|
|
9
|
-
|
|
10
|
-
- Use `search` to find functions, classes, or modules
|
|
11
|
-
- Use `lsp` to get code intelligence
|
|
12
|
-
- Use `read` to examine source files
|
|
13
|
-
|
|
14
|
-
NEVER claim something exists or doesn't exist without using tools to verify.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Enforce tool usage for file operations"
|
|
3
|
-
condition: "(?:文件|file|路径|path|目录|directory)"
|
|
4
|
-
scope: "text"
|
|
5
|
-
interruptMode: "always"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
When referencing files or paths, you MUST use the appropriate tools:
|
|
9
|
-
|
|
10
|
-
- Use `read` to check if a file exists and read its contents
|
|
11
|
-
- Use `find` to locate files
|
|
12
|
-
- Use `search` to find content within files
|
|
13
|
-
|
|
14
|
-
NEVER claim a file exists or doesn't exist without using tools to verify.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Detect premature wrap-up and inject self-reflection"
|
|
3
|
-
condition: "(?:搞定了|OK了|差不多了|以上就是|总结一下|综上|已经完成|做完了|实现了功能|就这样|先这样|就这些|目前来看|整体来说)"
|
|
4
|
-
scope: "text"
|
|
5
|
-
interruptMode: "always"
|
|
6
|
-
repeatMode: "cooldown"
|
|
7
|
-
cooldownTurns: 5
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
You seem to be wrapping up. Before continuing, answer these questions:
|
|
11
|
-
|
|
12
|
-
1. What was the user's original request?
|
|
13
|
-
2. What specific actions have you completed? (list tool calls)
|
|
14
|
-
3. Is there anything you haven't done yet?
|
|
15
|
-
4. What evidence supports your claim of completion?
|
|
16
|
-
|
|
17
|
-
If there's a gap between what was requested and what you've done,
|
|
18
|
-
continue working. Do not summarize or wrap up until the task is
|
|
19
|
-
genuinely complete with evidence.
|