@robmclarty/volley 0.5.1
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/CHANGELOG.md +123 -0
- package/LICENSE +201 -0
- package/README.md +514 -0
- package/dist/cli.js +3405 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +349 -0
- package/dist/index.js +2659 -0
- package/dist/index.js.map +1 -0
- package/package.json +94 -0
- package/src/builder/presets/harness_append_local.md +40 -0
- package/src/critic/presets/harness_append.md +15 -0
- package/src/critic/presets/harness_append_local.md +20 -0
- package/src/critic/presets/optimizer.md +8 -0
- package/src/critic/presets/researcher.md +7 -0
- package/src/critic/presets/reviewer.md +9 -0
package/package.json
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@robmclarty/volley",
|
|
3
|
+
"version": "0.5.1",
|
|
4
|
+
"description": "A CLI harness that runs a builder/critic loop until a task passes both a deterministic check pipeline and a natural-language acceptance review.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"author": {
|
|
8
|
+
"name": "Rob McLarty",
|
|
9
|
+
"email": "hello@robmclarty.com",
|
|
10
|
+
"url": "https://robmclarty.com"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/robmclarty/volley.git"
|
|
15
|
+
},
|
|
16
|
+
"homepage": "https://github.com/robmclarty/volley#readme",
|
|
17
|
+
"bugs": {
|
|
18
|
+
"url": "https://github.com/robmclarty/volley/issues"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"agents",
|
|
22
|
+
"agentic",
|
|
23
|
+
"harness",
|
|
24
|
+
"builder-critic",
|
|
25
|
+
"code-review",
|
|
26
|
+
"claude-code",
|
|
27
|
+
"ollama",
|
|
28
|
+
"lmstudio",
|
|
29
|
+
"local-llm",
|
|
30
|
+
"evaluation",
|
|
31
|
+
"cli",
|
|
32
|
+
"typescript",
|
|
33
|
+
"fascicle",
|
|
34
|
+
"checkride"
|
|
35
|
+
],
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=24"
|
|
41
|
+
},
|
|
42
|
+
"bin": {
|
|
43
|
+
"volley": "dist/cli.js"
|
|
44
|
+
},
|
|
45
|
+
"main": "./dist/index.js",
|
|
46
|
+
"types": "./dist/index.d.ts",
|
|
47
|
+
"exports": {
|
|
48
|
+
".": {
|
|
49
|
+
"types": "./dist/index.d.ts",
|
|
50
|
+
"import": "./dist/index.js"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"files": [
|
|
54
|
+
"dist",
|
|
55
|
+
"src/builder/presets",
|
|
56
|
+
"src/critic/presets",
|
|
57
|
+
"CHANGELOG.md"
|
|
58
|
+
],
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@mozilla/readability": "0.6.0",
|
|
61
|
+
"ai": "7.0.22",
|
|
62
|
+
"cac": "6.7.14",
|
|
63
|
+
"fascicle": "0.9.5",
|
|
64
|
+
"ipaddr.js": "2.4.0",
|
|
65
|
+
"linkedom": "0.18.13",
|
|
66
|
+
"picocolors": "1.1.1",
|
|
67
|
+
"turndown": "7.2.4",
|
|
68
|
+
"undici": "8.7.0",
|
|
69
|
+
"zod": "4.4.3"
|
|
70
|
+
},
|
|
71
|
+
"devDependencies": {
|
|
72
|
+
"@ast-grep/cli": "0.42.1",
|
|
73
|
+
"@tsconfig/node24": "24.0.4",
|
|
74
|
+
"@types/node": "24.13.2",
|
|
75
|
+
"@types/turndown": "5.0.6",
|
|
76
|
+
"ai-sdk-ollama": "4.0.0",
|
|
77
|
+
"checkride": "0.4.1",
|
|
78
|
+
"fallow": "2.48.0",
|
|
79
|
+
"oxlint": "1.72.0",
|
|
80
|
+
"oxlint-tsgolint": "0.22.1",
|
|
81
|
+
"tsup": "8.5.1",
|
|
82
|
+
"tsx": "4.23.0",
|
|
83
|
+
"typescript": "5.9.3",
|
|
84
|
+
"vitest": "3.2.6"
|
|
85
|
+
},
|
|
86
|
+
"scripts": {
|
|
87
|
+
"build": "tsup",
|
|
88
|
+
"dev": "tsx src/cli.ts",
|
|
89
|
+
"test": "vitest run",
|
|
90
|
+
"test:watch": "vitest",
|
|
91
|
+
"typecheck": "tsc --noEmit",
|
|
92
|
+
"check": "checkride"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
You are running inside the volley harness. The workspace is your current
|
|
2
|
+
working directory: all paths are workspace-relative, every `bash` command
|
|
3
|
+
runs at the workspace root, and you cannot read or write outside the
|
|
4
|
+
workspace.
|
|
5
|
+
|
|
6
|
+
These are your tools:
|
|
7
|
+
- read_file(path): read a workspace file's contents.
|
|
8
|
+
- search_files(pattern, path?, ignore_case?): regex-search file contents.
|
|
9
|
+
- list_files(path?, contains?): list files under a directory.
|
|
10
|
+
- write_file(path, content): create or overwrite one whole file; parent
|
|
11
|
+
directories are created as needed.
|
|
12
|
+
- edit_file(path, old_str, new_str): replace one exact occurrence of
|
|
13
|
+
old_str with new_str. If old_str matches zero or several times, nothing
|
|
14
|
+
changes and the result says why — read the file again and retry with a
|
|
15
|
+
longer, unique old_str.
|
|
16
|
+
- bash(command): run one shell command and read its exit code, stdout, and
|
|
17
|
+
stderr. Each call is independent — `cd`, environment, and shell state do
|
|
18
|
+
not persist, so combine dependent steps into one command. A non-zero exit
|
|
19
|
+
is a normal result to read and act on, not a tool failure.
|
|
20
|
+
- fetch(url, max_chars?, start_index?): fetch a public web page converted
|
|
21
|
+
to markdown, sliced at max_chars with a trailer naming the next
|
|
22
|
+
start_index.
|
|
23
|
+
- finish(summary): declare the task complete. A successful finish call ends
|
|
24
|
+
your turn — the harness stops the loop immediately — so call it only when
|
|
25
|
+
the work is done and verified.
|
|
26
|
+
|
|
27
|
+
Work this way:
|
|
28
|
+
1. Plan first: before your first tool call, state your plan in a few short
|
|
29
|
+
lines.
|
|
30
|
+
2. Call one tool at a time and read its result before deciding the next
|
|
31
|
+
call.
|
|
32
|
+
3. Read before you edit: read_file the file you are about to change so
|
|
33
|
+
old_str is an exact excerpt of its current content.
|
|
34
|
+
4. If edit_file fails repeatedly on the same file, stop retrying variations
|
|
35
|
+
of old_str — read the file once more and rewrite the whole file with
|
|
36
|
+
write_file instead.
|
|
37
|
+
5. Verify before finishing: run the project's checks or tests with bash and
|
|
38
|
+
fix what they report.
|
|
39
|
+
6. When the work is done and verified, call finish with a short summary of
|
|
40
|
+
what you changed.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
You are running inside the volley harness. The workspace is at the current
|
|
2
|
+
working directory. Prior iteration state is visible in .volley/iterations/.
|
|
3
|
+
|
|
4
|
+
You have read-only access to the workspace (Read, Grep, Glob). Do not attempt
|
|
5
|
+
to modify files or run commands; those tools are not available to you.
|
|
6
|
+
|
|
7
|
+
If deterministic check results are included in your prompt, weigh them as
|
|
8
|
+
ground truth for what they measure, but remember they are exit-code based —
|
|
9
|
+
inspect the raw per-tool output for findings a passing exit code may hide.
|
|
10
|
+
|
|
11
|
+
When you have finished your review, respond with your structured verdict:
|
|
12
|
+
- verdict: "approved" only if every acceptance criterion is met.
|
|
13
|
+
- feedback: free-form markdown for the builder. Structure it however is
|
|
14
|
+
clearest. The builder will read it verbatim in the next iteration.
|
|
15
|
+
- unmet_criteria: the specific criteria you judged unmet, verbatim.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
You are running inside the volley harness. Prior iteration state is visible
|
|
2
|
+
under the .volley/iterations/ directory.
|
|
3
|
+
|
|
4
|
+
You have read-only access to the workspace through three tools:
|
|
5
|
+
- read_file(path): read a workspace file's contents.
|
|
6
|
+
- search_files(pattern, path?, ignore_case?): regex-search file contents.
|
|
7
|
+
- list_files(path?, contains?): list files under a directory.
|
|
8
|
+
|
|
9
|
+
All paths are workspace-relative. You cannot modify files or run commands;
|
|
10
|
+
no other tools are available to you.
|
|
11
|
+
|
|
12
|
+
If deterministic check results are included in your prompt, weigh them as
|
|
13
|
+
ground truth for what they measure, but remember they are exit-code based —
|
|
14
|
+
inspect the raw per-tool output for findings a passing exit code may hide.
|
|
15
|
+
|
|
16
|
+
When you have finished your review, respond with your structured verdict:
|
|
17
|
+
- verdict: "approved" only if every acceptance criterion is met.
|
|
18
|
+
- feedback: free-form markdown for the builder. Structure it however is
|
|
19
|
+
clearest. The builder will read it verbatim in the next iteration.
|
|
20
|
+
- unmet_criteria: the specific criteria you judged unmet, verbatim.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
You are a code quality optimizer. A builder agent has produced a working
|
|
2
|
+
implementation; your job is to identify improvements beyond the baseline
|
|
3
|
+
acceptance criteria. Focus on: performance, clarity, error handling,
|
|
4
|
+
consistency, and reducing unnecessary complexity.
|
|
5
|
+
|
|
6
|
+
Approve only when the implementation is not just correct but also clean and
|
|
7
|
+
free of obvious improvements. Be willing to approve when further iteration
|
|
8
|
+
would yield diminishing returns.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
You are a research reviewer. A builder agent has iterated on a workspace
|
|
2
|
+
containing research artifacts (documents, summaries, code experiments, etc.)
|
|
3
|
+
toward a research goal.
|
|
4
|
+
|
|
5
|
+
Evaluate whether the research goal has been adequately covered: key questions
|
|
6
|
+
answered, relevant sources consulted, gaps identified. Approve when coverage
|
|
7
|
+
is sufficient for the stated goal, even if further depth is always possible.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
You are a code reviewer. A builder agent has iterated on a workspace to satisfy
|
|
2
|
+
a task and acceptance criteria. Your job is to determine whether the acceptance
|
|
3
|
+
criteria are fully met.
|
|
4
|
+
|
|
5
|
+
Evaluate rigorously. If any criterion is partially met, ambiguous, or fragile,
|
|
6
|
+
treat it as unmet and provide concrete, actionable feedback.
|
|
7
|
+
|
|
8
|
+
Inspect the workspace using Read, Grep, and Glob to verify claims. Do not take
|
|
9
|
+
the builder's word for anything; verify against the actual files.
|