planr 1.3.0 → 1.4.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 +12 -0
- package/docs/ARCHITECTURE.md +5 -0
- package/docs/CLI_REFERENCE.md +19 -3
- package/docs/MCP_CONTRACT.md +5 -1
- package/docs/MODEL_ROUTING.md +2 -2
- package/docs/PRESET_COMPOSITION.md +109 -0
- package/docs/PRESET_EVALUATION.md +118 -0
- package/docs/PRESET_REGISTRY.md +61 -0
- package/docs/fixtures/mcp-contract.json +16 -0
- package/evaluations/preset-suite-v1.toml +127 -0
- package/evaluations/sol-luna-codex-v1.toml +42 -0
- package/npm/native/darwin-arm64/planr +0 -0
- package/npm/native/darwin-x86_64/planr +0 -0
- package/npm/native/linux-arm64/planr +0 -0
- package/npm/native/linux-x86_64/planr +0 -0
- package/package.json +15 -2
- package/plugins/planr/.claude-plugin/plugin.json +1 -1
- package/plugins/planr/.codex-plugin/plugin.json +1 -1
- package/presets/bindings/claude-native.toml +52 -0
- package/presets/bindings/codex-openai.toml +56 -0
- package/presets/bindings/cursor-fable-grok.toml +49 -0
- package/presets/bindings/cursor-openai.toml +49 -0
- package/presets/bindings/mixed-host.toml +64 -0
- package/presets/policies/balanced.toml +50 -0
- package/presets/policies/low-usage.toml +50 -0
- package/presets/policies/max-quality.toml +50 -0
- package/presets/policies/read-only-audit.toml +50 -0
- package/website/README.md +79 -0
- package/website/_headers +7 -0
- package/website/alchemy-runtime.test.mjs +21 -0
- package/website/app.mjs +216 -0
- package/website/build-catalog.mjs +135 -0
- package/website/build-site.test.mjs +69 -0
- package/website/catalog-model.mjs +185 -0
- package/website/catalog-model.test.mjs +124 -0
- package/website/cloudflare-launcher.test.mjs +38 -0
- package/website/data/catalog.json +307 -0
- package/website/index.html +122 -0
- package/website/registry/manifest.toml +48 -0
- package/website/registry/report.md +33 -0
- package/website/registry/trusted-maintainers.toml +6 -0
- package/website/registry/verification.json +7258 -0
- package/website/serve.mjs +41 -0
- package/website/styles.css +201 -0
- package/website/test-fixtures/recommended.json +72 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "sol-luna-codex"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
host = "codex"
|
|
5
|
+
driver_role = "driver"
|
|
6
|
+
default_role = "driver"
|
|
7
|
+
capability_evidence = ["fixture-codex-none-fork-contract-v1"]
|
|
8
|
+
billing_assumptions = ["deterministic evaluation fixture; no provider call"]
|
|
9
|
+
known_limitations = ["effective model and effort require host evidence"]
|
|
10
|
+
|
|
11
|
+
[capabilities]
|
|
12
|
+
model_override = true
|
|
13
|
+
effort_override = true
|
|
14
|
+
fork_none = true
|
|
15
|
+
fork_all = true
|
|
16
|
+
max_partial_fork_turns = 4
|
|
17
|
+
|
|
18
|
+
[profiles.driver]
|
|
19
|
+
profile = "sol"
|
|
20
|
+
client = "codex"
|
|
21
|
+
model = "gpt-5.5"
|
|
22
|
+
effort = "xhigh"
|
|
23
|
+
cost_tier = "premium"
|
|
24
|
+
|
|
25
|
+
[profiles.worker]
|
|
26
|
+
profile = "luna"
|
|
27
|
+
client = "codex"
|
|
28
|
+
model = "gpt-5.4-mini"
|
|
29
|
+
effort = "high"
|
|
30
|
+
cost_tier = "standard"
|
|
31
|
+
skill = "planr-work"
|
|
32
|
+
fork_turns = { mode = "none" }
|
|
33
|
+
|
|
34
|
+
[[routes]]
|
|
35
|
+
work_type = "code"
|
|
36
|
+
role = "worker"
|
|
37
|
+
fallback_roles = ["driver"]
|
|
38
|
+
|
|
39
|
+
[verification]
|
|
40
|
+
id = "fixture-sol-luna-v1"
|
|
41
|
+
verified_at_unix = 1783987200
|
|
42
|
+
max_age_seconds = 31536000
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "planr",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Local-first planning and execution coordination for coding agents.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -15,14 +15,27 @@
|
|
|
15
15
|
"npm/bin/planr.js",
|
|
16
16
|
"npm/native",
|
|
17
17
|
"plugins",
|
|
18
|
+
"presets",
|
|
19
|
+
"evaluations",
|
|
20
|
+
"website",
|
|
18
21
|
"README.md",
|
|
19
22
|
"LICENSE.md",
|
|
20
23
|
"docs"
|
|
21
24
|
],
|
|
22
25
|
"scripts": {
|
|
26
|
+
"alchemy:check-runtime": "node scripts/check-alchemy-runtime.mjs",
|
|
23
27
|
"build:native": "cargo build --release",
|
|
24
28
|
"test": "cargo test",
|
|
25
|
-
"pack:check": "npm pack --dry-run"
|
|
29
|
+
"pack:check": "npm pack --dry-run",
|
|
30
|
+
"deploy:test": "node scripts/cloudflare-test.mjs deploy",
|
|
31
|
+
"destroy:test": "node scripts/cloudflare-test.mjs destroy",
|
|
32
|
+
"site:build": "node scripts/build-site.mjs",
|
|
33
|
+
"site:check": "pnpm site:test && pnpm site:build",
|
|
34
|
+
"site:test": "node --test website/*.test.mjs",
|
|
35
|
+
"site:serve": "node website/serve.mjs"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"alchemy": "0.93.7"
|
|
26
39
|
},
|
|
27
40
|
"engines": {
|
|
28
41
|
"node": ">=18"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "planr",
|
|
3
3
|
"description": "Skill-driven planning and execution loop for coding agents: one planr entry point, an autonomous planr-loop, and evidence-backed task graph skills powered by the planr CLI.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "instructa"
|
|
7
7
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "planr",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Skill-driven planning and execution loop for coding agents: one $planr entry point, an autonomous $planr-loop, and evidence-backed task graph skills powered by the planr CLI.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "instructa",
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "claude-native"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
host = "claude-code"
|
|
5
|
+
driver_role = "driver"
|
|
6
|
+
default_role = "driver"
|
|
7
|
+
capability_evidence = ["builtin-claude-project-agent-contract"]
|
|
8
|
+
billing_assumptions = ["Planr records declared tiers; Claude Code remains billing authority"]
|
|
9
|
+
known_limitations = ["session environment may preempt the requested subagent model"]
|
|
10
|
+
|
|
11
|
+
[capabilities]
|
|
12
|
+
model_override = true
|
|
13
|
+
effort_override = true
|
|
14
|
+
fork_none = true
|
|
15
|
+
fork_all = false
|
|
16
|
+
|
|
17
|
+
[profiles.driver]
|
|
18
|
+
profile = "claude-native-driver"
|
|
19
|
+
client = "claude-code"
|
|
20
|
+
model = "opus"
|
|
21
|
+
effort = "high"
|
|
22
|
+
cost_tier = "premium"
|
|
23
|
+
|
|
24
|
+
[profiles.worker]
|
|
25
|
+
profile = "claude-native-worker"
|
|
26
|
+
client = "claude-code"
|
|
27
|
+
model = "sonnet"
|
|
28
|
+
effort = "medium"
|
|
29
|
+
cost_tier = "standard"
|
|
30
|
+
skill = "planr-work"
|
|
31
|
+
fork_turns = { mode = "none" }
|
|
32
|
+
|
|
33
|
+
[[routes]]
|
|
34
|
+
work_type = "code"
|
|
35
|
+
role = "worker"
|
|
36
|
+
fallback_roles = ["driver"]
|
|
37
|
+
|
|
38
|
+
[verification]
|
|
39
|
+
id = "builtin-claude-native-v1"
|
|
40
|
+
verified_at_unix = 1783987200
|
|
41
|
+
max_age_seconds = 31536000
|
|
42
|
+
|
|
43
|
+
[[artifacts]]
|
|
44
|
+
path = ".claude/agents/planr-preset-worker.md"
|
|
45
|
+
kind = "claude_agent"
|
|
46
|
+
content = '''---
|
|
47
|
+
name: planr-preset-worker
|
|
48
|
+
model: sonnet
|
|
49
|
+
effort: medium
|
|
50
|
+
---
|
|
51
|
+
Use the planr-work skill and preserve Planr evidence.
|
|
52
|
+
'''
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "codex-openai"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
host = "codex"
|
|
5
|
+
driver_role = "driver"
|
|
6
|
+
default_role = "driver"
|
|
7
|
+
capability_evidence = ["builtin-codex-none-fork-contract"]
|
|
8
|
+
billing_assumptions = ["Planr records declared tiers; Codex remains billing authority"]
|
|
9
|
+
known_limitations = ["effective model and effort require host-reported evidence"]
|
|
10
|
+
|
|
11
|
+
[capabilities]
|
|
12
|
+
model_override = true
|
|
13
|
+
effort_override = true
|
|
14
|
+
fork_none = true
|
|
15
|
+
fork_all = false
|
|
16
|
+
max_partial_fork_turns = 4
|
|
17
|
+
|
|
18
|
+
[profiles.driver]
|
|
19
|
+
profile = "codex-openai-driver"
|
|
20
|
+
client = "codex"
|
|
21
|
+
model = "gpt-5.5"
|
|
22
|
+
effort = "xhigh"
|
|
23
|
+
cost_tier = "premium"
|
|
24
|
+
|
|
25
|
+
[profiles.worker]
|
|
26
|
+
profile = "codex-openai-worker"
|
|
27
|
+
client = "codex"
|
|
28
|
+
model = "gpt-5.4-mini"
|
|
29
|
+
effort = "high"
|
|
30
|
+
cost_tier = "standard"
|
|
31
|
+
skill = "planr-work"
|
|
32
|
+
fork_turns = { mode = "none" }
|
|
33
|
+
|
|
34
|
+
[[routes]]
|
|
35
|
+
work_type = "code"
|
|
36
|
+
role = "worker"
|
|
37
|
+
fallback_roles = ["driver"]
|
|
38
|
+
|
|
39
|
+
[verification]
|
|
40
|
+
id = "builtin-codex-openai-v1"
|
|
41
|
+
verified_at_unix = 1783987200
|
|
42
|
+
max_age_seconds = 31536000
|
|
43
|
+
|
|
44
|
+
[[artifacts]]
|
|
45
|
+
path = ".codex/agents/planr-preset-worker.toml"
|
|
46
|
+
kind = "codex_agent"
|
|
47
|
+
content = '''name = "planr_preset_worker"
|
|
48
|
+
description = "Implements one picked Planr map item with evidence-backed handoff."
|
|
49
|
+
model = "gpt-5.4-mini"
|
|
50
|
+
model_reasoning_effort = "high"
|
|
51
|
+
sandbox_mode = "workspace-write"
|
|
52
|
+
|
|
53
|
+
developer_instructions = """
|
|
54
|
+
Use the planr-work skill for exactly one picked item. Preserve the task scope, record changed files and real verification commands, request review, and stop.
|
|
55
|
+
"""
|
|
56
|
+
'''
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "cursor-fable-grok"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
host = "cursor"
|
|
5
|
+
driver_role = "driver"
|
|
6
|
+
default_role = "driver"
|
|
7
|
+
capability_evidence = ["builtin-cursor-project-agent-contract"]
|
|
8
|
+
billing_assumptions = ["Planr records declared tiers; Cursor remains billing authority"]
|
|
9
|
+
known_limitations = ["workspace policy or Max Mode may override the requested model"]
|
|
10
|
+
|
|
11
|
+
[capabilities]
|
|
12
|
+
model_override = true
|
|
13
|
+
effort_override = false
|
|
14
|
+
fork_none = true
|
|
15
|
+
fork_all = false
|
|
16
|
+
|
|
17
|
+
[profiles.driver]
|
|
18
|
+
profile = "cursor-fable-driver"
|
|
19
|
+
client = "cursor"
|
|
20
|
+
model = "fable-5"
|
|
21
|
+
cost_tier = "premium"
|
|
22
|
+
|
|
23
|
+
[profiles.worker]
|
|
24
|
+
profile = "cursor-grok-worker"
|
|
25
|
+
client = "cursor"
|
|
26
|
+
model = "grok-code-fast-1"
|
|
27
|
+
cost_tier = "standard"
|
|
28
|
+
skill = "planr-work"
|
|
29
|
+
fork_turns = { mode = "none" }
|
|
30
|
+
|
|
31
|
+
[[routes]]
|
|
32
|
+
work_type = "code"
|
|
33
|
+
role = "worker"
|
|
34
|
+
fallback_roles = ["driver"]
|
|
35
|
+
|
|
36
|
+
[verification]
|
|
37
|
+
id = "builtin-cursor-fable-grok-v1"
|
|
38
|
+
verified_at_unix = 1783987200
|
|
39
|
+
max_age_seconds = 31536000
|
|
40
|
+
|
|
41
|
+
[[artifacts]]
|
|
42
|
+
path = ".cursor/agents/planr-preset-worker.md"
|
|
43
|
+
kind = "cursor_agent"
|
|
44
|
+
content = '''---
|
|
45
|
+
name: planr-preset-worker
|
|
46
|
+
model: grok-code-fast-1
|
|
47
|
+
---
|
|
48
|
+
Use the planr-work skill and preserve Planr evidence.
|
|
49
|
+
'''
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "cursor-openai"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
host = "cursor"
|
|
5
|
+
driver_role = "driver"
|
|
6
|
+
default_role = "driver"
|
|
7
|
+
capability_evidence = ["builtin-cursor-project-agent-contract"]
|
|
8
|
+
billing_assumptions = ["Planr records declared tiers; Cursor remains billing authority"]
|
|
9
|
+
known_limitations = ["workspace policy or Max Mode may override the requested model"]
|
|
10
|
+
|
|
11
|
+
[capabilities]
|
|
12
|
+
model_override = true
|
|
13
|
+
effort_override = false
|
|
14
|
+
fork_none = true
|
|
15
|
+
fork_all = false
|
|
16
|
+
|
|
17
|
+
[profiles.driver]
|
|
18
|
+
profile = "cursor-openai-driver"
|
|
19
|
+
client = "cursor"
|
|
20
|
+
model = "gpt-5.5"
|
|
21
|
+
cost_tier = "premium"
|
|
22
|
+
|
|
23
|
+
[profiles.worker]
|
|
24
|
+
profile = "cursor-openai-worker"
|
|
25
|
+
client = "cursor"
|
|
26
|
+
model = "gpt-5.4-mini"
|
|
27
|
+
cost_tier = "standard"
|
|
28
|
+
skill = "planr-work"
|
|
29
|
+
fork_turns = { mode = "none" }
|
|
30
|
+
|
|
31
|
+
[[routes]]
|
|
32
|
+
work_type = "code"
|
|
33
|
+
role = "worker"
|
|
34
|
+
fallback_roles = ["driver"]
|
|
35
|
+
|
|
36
|
+
[verification]
|
|
37
|
+
id = "builtin-cursor-openai-v1"
|
|
38
|
+
verified_at_unix = 1783987200
|
|
39
|
+
max_age_seconds = 31536000
|
|
40
|
+
|
|
41
|
+
[[artifacts]]
|
|
42
|
+
path = ".cursor/agents/planr-preset-worker.md"
|
|
43
|
+
kind = "cursor_agent"
|
|
44
|
+
content = '''---
|
|
45
|
+
name: planr-preset-worker
|
|
46
|
+
model: gpt-5.4-mini
|
|
47
|
+
---
|
|
48
|
+
Use the planr-work skill and preserve Planr evidence.
|
|
49
|
+
'''
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "mixed-host"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
host = "mixed-host"
|
|
5
|
+
driver_role = "driver"
|
|
6
|
+
default_role = "driver"
|
|
7
|
+
capability_evidence = ["builtin-explicit-cross-client-contract"]
|
|
8
|
+
billing_assumptions = ["Each host remains authoritative for its own billing and availability"]
|
|
9
|
+
known_limitations = ["effective model evidence must be collected independently from each host"]
|
|
10
|
+
|
|
11
|
+
[capabilities]
|
|
12
|
+
model_override = true
|
|
13
|
+
effort_override = true
|
|
14
|
+
fork_none = true
|
|
15
|
+
fork_all = false
|
|
16
|
+
|
|
17
|
+
[profiles.driver]
|
|
18
|
+
profile = "mixed-cursor-driver"
|
|
19
|
+
client = "cursor"
|
|
20
|
+
model = "fable-5"
|
|
21
|
+
cost_tier = "premium"
|
|
22
|
+
|
|
23
|
+
[profiles.worker]
|
|
24
|
+
profile = "mixed-codex-worker"
|
|
25
|
+
client = "codex"
|
|
26
|
+
model = "gpt-5.4-mini"
|
|
27
|
+
effort = "high"
|
|
28
|
+
cost_tier = "standard"
|
|
29
|
+
skill = "planr-work"
|
|
30
|
+
fork_turns = { mode = "none" }
|
|
31
|
+
|
|
32
|
+
[[routes]]
|
|
33
|
+
work_type = "code"
|
|
34
|
+
role = "worker"
|
|
35
|
+
fallback_roles = ["driver"]
|
|
36
|
+
|
|
37
|
+
[verification]
|
|
38
|
+
id = "builtin-mixed-host-v1"
|
|
39
|
+
verified_at_unix = 1783987200
|
|
40
|
+
max_age_seconds = 31536000
|
|
41
|
+
|
|
42
|
+
[[artifacts]]
|
|
43
|
+
path = ".cursor/agents/planr-preset-driver.md"
|
|
44
|
+
kind = "cursor_agent"
|
|
45
|
+
content = '''---
|
|
46
|
+
name: planr-preset-driver
|
|
47
|
+
model: fable-5
|
|
48
|
+
---
|
|
49
|
+
Drive the Planr map and keep final verdict ownership.
|
|
50
|
+
'''
|
|
51
|
+
|
|
52
|
+
[[artifacts]]
|
|
53
|
+
path = ".codex/agents/planr-preset-worker.toml"
|
|
54
|
+
kind = "codex_agent"
|
|
55
|
+
content = '''name = "planr_preset_worker"
|
|
56
|
+
description = "Implements one picked Planr map item with evidence-backed handoff."
|
|
57
|
+
model = "gpt-5.4-mini"
|
|
58
|
+
model_reasoning_effort = "high"
|
|
59
|
+
sandbox_mode = "workspace-write"
|
|
60
|
+
|
|
61
|
+
developer_instructions = """
|
|
62
|
+
Use the planr-work skill for exactly one picked item. Preserve the task scope, record changed files and real verification commands, request review, and stop.
|
|
63
|
+
"""
|
|
64
|
+
'''
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "balanced"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
|
|
5
|
+
[usage]
|
|
6
|
+
max_active_agents = 3
|
|
7
|
+
max_parallel_readers = 2
|
|
8
|
+
max_parallel_writers = 1
|
|
9
|
+
max_depth = 1
|
|
10
|
+
max_attempts = 4
|
|
11
|
+
max_wall_time_seconds = 3600
|
|
12
|
+
max_tool_calls = 120
|
|
13
|
+
review_reserve_percent = 20
|
|
14
|
+
budget_exhaustion = "stop"
|
|
15
|
+
metering = "estimated"
|
|
16
|
+
|
|
17
|
+
[transitions.retry]
|
|
18
|
+
max_same_route_retries = 1
|
|
19
|
+
|
|
20
|
+
[transitions.availability_fallback]
|
|
21
|
+
max_fallbacks = 1
|
|
22
|
+
require_same_capability_class = true
|
|
23
|
+
|
|
24
|
+
[transitions.quality_escalation]
|
|
25
|
+
max_escalations = 1
|
|
26
|
+
require_verification_evidence = true
|
|
27
|
+
|
|
28
|
+
[transitions.quota_downgrade]
|
|
29
|
+
enabled = false
|
|
30
|
+
max_downgrades = 0
|
|
31
|
+
noncritical_only = true
|
|
32
|
+
|
|
33
|
+
[transitions.safety_stop]
|
|
34
|
+
enabled = true
|
|
35
|
+
|
|
36
|
+
[materiality]
|
|
37
|
+
changed_files_threshold = 10
|
|
38
|
+
changed_lines_threshold = 500
|
|
39
|
+
|
|
40
|
+
[execution]
|
|
41
|
+
max_read_scope_entries = 8
|
|
42
|
+
max_write_scope_entries = 4
|
|
43
|
+
|
|
44
|
+
[execution.roles.worker]
|
|
45
|
+
tools = ["cargo", "git", "rg"]
|
|
46
|
+
|
|
47
|
+
[execution.roles.worker.filesystem]
|
|
48
|
+
read_roots = ["src", "tests", "docs"]
|
|
49
|
+
write_roots = ["src", "tests", "docs"]
|
|
50
|
+
allow_overwrite = false
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "low-usage"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
|
|
5
|
+
[usage]
|
|
6
|
+
max_active_agents = 2
|
|
7
|
+
max_parallel_readers = 1
|
|
8
|
+
max_parallel_writers = 1
|
|
9
|
+
max_depth = 1
|
|
10
|
+
max_attempts = 3
|
|
11
|
+
max_wall_time_seconds = 1800
|
|
12
|
+
max_tool_calls = 60
|
|
13
|
+
review_reserve_percent = 25
|
|
14
|
+
budget_exhaustion = "downgrade_noncritical"
|
|
15
|
+
metering = "estimated"
|
|
16
|
+
|
|
17
|
+
[transitions.retry]
|
|
18
|
+
max_same_route_retries = 0
|
|
19
|
+
|
|
20
|
+
[transitions.availability_fallback]
|
|
21
|
+
max_fallbacks = 1
|
|
22
|
+
require_same_capability_class = true
|
|
23
|
+
|
|
24
|
+
[transitions.quality_escalation]
|
|
25
|
+
max_escalations = 1
|
|
26
|
+
require_verification_evidence = true
|
|
27
|
+
|
|
28
|
+
[transitions.quota_downgrade]
|
|
29
|
+
enabled = true
|
|
30
|
+
max_downgrades = 1
|
|
31
|
+
noncritical_only = true
|
|
32
|
+
|
|
33
|
+
[transitions.safety_stop]
|
|
34
|
+
enabled = true
|
|
35
|
+
|
|
36
|
+
[materiality]
|
|
37
|
+
changed_files_threshold = 6
|
|
38
|
+
changed_lines_threshold = 250
|
|
39
|
+
|
|
40
|
+
[execution]
|
|
41
|
+
max_read_scope_entries = 6
|
|
42
|
+
max_write_scope_entries = 3
|
|
43
|
+
|
|
44
|
+
[execution.roles.worker]
|
|
45
|
+
tools = ["cargo", "git", "rg"]
|
|
46
|
+
|
|
47
|
+
[execution.roles.worker.filesystem]
|
|
48
|
+
read_roots = ["src", "tests", "docs"]
|
|
49
|
+
write_roots = ["src", "tests", "docs"]
|
|
50
|
+
allow_overwrite = false
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "max-quality"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
|
|
5
|
+
[usage]
|
|
6
|
+
max_active_agents = 4
|
|
7
|
+
max_parallel_readers = 3
|
|
8
|
+
max_parallel_writers = 1
|
|
9
|
+
max_depth = 1
|
|
10
|
+
max_attempts = 5
|
|
11
|
+
max_wall_time_seconds = 7200
|
|
12
|
+
max_tool_calls = 240
|
|
13
|
+
review_reserve_percent = 40
|
|
14
|
+
budget_exhaustion = "stop"
|
|
15
|
+
metering = "estimated"
|
|
16
|
+
|
|
17
|
+
[transitions.retry]
|
|
18
|
+
max_same_route_retries = 1
|
|
19
|
+
|
|
20
|
+
[transitions.availability_fallback]
|
|
21
|
+
max_fallbacks = 1
|
|
22
|
+
require_same_capability_class = true
|
|
23
|
+
|
|
24
|
+
[transitions.quality_escalation]
|
|
25
|
+
max_escalations = 2
|
|
26
|
+
require_verification_evidence = true
|
|
27
|
+
|
|
28
|
+
[transitions.quota_downgrade]
|
|
29
|
+
enabled = false
|
|
30
|
+
max_downgrades = 0
|
|
31
|
+
noncritical_only = true
|
|
32
|
+
|
|
33
|
+
[transitions.safety_stop]
|
|
34
|
+
enabled = true
|
|
35
|
+
|
|
36
|
+
[materiality]
|
|
37
|
+
changed_files_threshold = 5
|
|
38
|
+
changed_lines_threshold = 200
|
|
39
|
+
|
|
40
|
+
[execution]
|
|
41
|
+
max_read_scope_entries = 12
|
|
42
|
+
max_write_scope_entries = 6
|
|
43
|
+
|
|
44
|
+
[execution.roles.worker]
|
|
45
|
+
tools = ["cargo", "git", "rg"]
|
|
46
|
+
|
|
47
|
+
[execution.roles.worker.filesystem]
|
|
48
|
+
read_roots = ["src", "tests", "docs"]
|
|
49
|
+
write_roots = ["src", "tests", "docs"]
|
|
50
|
+
allow_overwrite = false
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
schema_version = 1
|
|
2
|
+
id = "read-only-audit"
|
|
3
|
+
version = "1.0.0"
|
|
4
|
+
|
|
5
|
+
[usage]
|
|
6
|
+
max_active_agents = 3
|
|
7
|
+
max_parallel_readers = 3
|
|
8
|
+
max_parallel_writers = 0
|
|
9
|
+
max_depth = 1
|
|
10
|
+
max_attempts = 2
|
|
11
|
+
max_wall_time_seconds = 1800
|
|
12
|
+
max_tool_calls = 80
|
|
13
|
+
review_reserve_percent = 20
|
|
14
|
+
budget_exhaustion = "stop"
|
|
15
|
+
metering = "estimated"
|
|
16
|
+
|
|
17
|
+
[transitions.retry]
|
|
18
|
+
max_same_route_retries = 0
|
|
19
|
+
|
|
20
|
+
[transitions.availability_fallback]
|
|
21
|
+
max_fallbacks = 1
|
|
22
|
+
require_same_capability_class = true
|
|
23
|
+
|
|
24
|
+
[transitions.quality_escalation]
|
|
25
|
+
max_escalations = 0
|
|
26
|
+
require_verification_evidence = true
|
|
27
|
+
|
|
28
|
+
[transitions.quota_downgrade]
|
|
29
|
+
enabled = false
|
|
30
|
+
max_downgrades = 0
|
|
31
|
+
noncritical_only = true
|
|
32
|
+
|
|
33
|
+
[transitions.safety_stop]
|
|
34
|
+
enabled = true
|
|
35
|
+
|
|
36
|
+
[materiality]
|
|
37
|
+
changed_files_threshold = 1
|
|
38
|
+
changed_lines_threshold = 1
|
|
39
|
+
|
|
40
|
+
[execution]
|
|
41
|
+
max_read_scope_entries = 12
|
|
42
|
+
max_write_scope_entries = 1
|
|
43
|
+
|
|
44
|
+
[execution.roles.worker]
|
|
45
|
+
tools = ["git", "rg"]
|
|
46
|
+
|
|
47
|
+
[execution.roles.worker.filesystem]
|
|
48
|
+
read_roots = ["src", "tests", "docs"]
|
|
49
|
+
write_roots = []
|
|
50
|
+
allow_overwrite = false
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Planr Preset Catalog
|
|
2
|
+
|
|
3
|
+
This directory is a dependency-free static website. Production catalog data is never authored by hand: `build-catalog.mjs` invokes Planr's canonical registry verifier, requires a trusted maintainer signature and safe policy/binding preview, binds status to the evaluation report, and writes `data/catalog.json`.
|
|
4
|
+
|
|
5
|
+
The committed catalog is generated from the included `registry/manifest.toml`, canonical `registry/verification.json`, and separately pinned public maintainer trust store. Its private release and telemetry signing keys are intentionally not committed. If verification expires, is deprecated, or no longer earns recommendation, the generated catalog preserves the visible lifecycle state instead of inventing or retaining a recommendation.
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
node website/build-catalog.mjs \
|
|
9
|
+
--planr-bin ./target/release/planr \
|
|
10
|
+
--manifest website/registry/manifest.toml \
|
|
11
|
+
--content-root . \
|
|
12
|
+
--trust-store website/registry/trusted-maintainers.toml \
|
|
13
|
+
--entry balanced-codex=codex \
|
|
14
|
+
--at-unix 1783987200 \
|
|
15
|
+
--output website/data/catalog.json
|
|
16
|
+
|
|
17
|
+
npm run site:test
|
|
18
|
+
npm run site:serve
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Cloudflare test deployment
|
|
22
|
+
|
|
23
|
+
Cloudflare infrastructure is owned by the repository-root `alchemy.run.ts`. The
|
|
24
|
+
deployment publishes a clean `dist/website` containing only runtime assets; tests,
|
|
25
|
+
fixtures, registry inputs, trust stores, and build tooling are never uploaded.
|
|
26
|
+
|
|
27
|
+
Install the pinned development dependency and authenticate Cloudflare using an existing
|
|
28
|
+
Alchemy/Cloudflare profile, Wrangler login, or a least-privilege API token. Set the
|
|
29
|
+
account id from `.env.example` in the process environment when account inference would
|
|
30
|
+
be ambiguous. Planr never runs login/configure commands and never changes user-level
|
|
31
|
+
configuration. This static stack has no secret bindings, so it deliberately requires no
|
|
32
|
+
`ALCHEMY_PASSWORD` or repository-local secret file.
|
|
33
|
+
|
|
34
|
+
The published Planr CLI retains its declared Node.js 18+ compatibility. Repository
|
|
35
|
+
dependency installation and the separate Cloudflare deployment toolchain require Node.js
|
|
36
|
+
22+ because the pinned pnpm/Alchemy lockfile contains current tooling with that minimum.
|
|
37
|
+
Select Node 22 or newer before invoking pnpm. On an unknown machine, this pnpm-free
|
|
38
|
+
preflight is safe to run first even with Node 18 or 20:
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
node scripts/check-alchemy-runtime.mjs
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The authoritative deployment launcher performs the same check before it starts pnpm or
|
|
45
|
+
Alchemy, so older runtimes receive Planr's error instead of a Corepack or dependency crash.
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
pnpm install
|
|
49
|
+
pnpm site:check
|
|
50
|
+
node scripts/cloudflare-test.mjs deploy
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
After Node 22+ is active, `pnpm deploy:test` is an equivalent convenience alias.
|
|
54
|
+
|
|
55
|
+
The committed `pnpm-workspace.yaml` is a repository-only dependency security policy:
|
|
56
|
+
it allows the `esbuild` and `workerd` install scripts required by Alchemy and explicitly
|
|
57
|
+
keeps the unused transitive `sharp` build disabled. It does not modify global pnpm state.
|
|
58
|
+
|
|
59
|
+
`deploy:test` always targets the isolated Alchemy stage `test`. It creates a standalone
|
|
60
|
+
Cloudflare Worker website and prints its Cloudflare-assigned `workers.dev` URL. The
|
|
61
|
+
initial deployment deliberately configures no custom domain, DNS route, backend resource,
|
|
62
|
+
or adoption of an existing Worker.
|
|
63
|
+
|
|
64
|
+
Removing that test website is an explicit, separate operation:
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
node scripts/cloudflare-test.mjs destroy
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
After Node 22+ is active, `pnpm destroy:test` is an equivalent convenience alias.
|
|
71
|
+
|
|
72
|
+
Never add private registry or telemetry signing keys to the deployment environment. The
|
|
73
|
+
site deploy consumes only the already verified public `website/data/catalog.json`.
|
|
74
|
+
|
|
75
|
+
Release operators must regenerate the evaluation report through `planr agents preset evaluate` with an independently pinned telemetry collector, update the manifest artifact digest, and sign the registry entry with the corresponding offline maintainer key before rebuilding this file. The public `registry/report.md` summarizes that evidence; the machine report and signature remain the verification source of truth.
|
|
76
|
+
|
|
77
|
+
The report-wide `reproducible_evidence` flag summarizes the entire candidate matrix. Registry publication independently requires the selected candidate's complete reproducible evidence, passing thresholds, verified route receipts, and matching entry in `report.recommended`; candidates that fail those gates are not published as recommendations.
|
|
78
|
+
|
|
79
|
+
The localhost-only `?fixture=recommended` query remains available for isolated UI regression checks. It is visibly labeled, ignored on non-local hosts, and never substitutes for live verification of the production `data/catalog.json` path.
|
package/website/_headers
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Cache-Control: public, max-age=0, must-revalidate
|
|
3
|
+
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; connect-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'
|
|
4
|
+
Permissions-Policy: camera=(), geolocation=(), microphone=(), payment=(), usb=()
|
|
5
|
+
Referrer-Policy: no-referrer
|
|
6
|
+
X-Content-Type-Options: nosniff
|
|
7
|
+
X-Frame-Options: DENY
|