the-high-council 0.6.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.
Files changed (78) hide show
  1. package/.env.example +19 -0
  2. package/CONTRIBUTING.md +41 -0
  3. package/LICENSE +21 -0
  4. package/PERSONAS.md +51 -0
  5. package/README.md +499 -0
  6. package/TROUBLESHOOTING.md +45 -0
  7. package/chains/cheap.json +35 -0
  8. package/chains/gp-judge-v1.json +80 -0
  9. package/chains/idea-open-c2.json +106 -0
  10. package/chains/mock-budget.json +15 -0
  11. package/chains/mock-debate.json +59 -0
  12. package/chains/mock-external.json +59 -0
  13. package/chains/mock-open.json +60 -0
  14. package/chains/mock-proposals.json +57 -0
  15. package/chains/mock-questions-wait.json +63 -0
  16. package/chains/mock-questions.json +63 -0
  17. package/chains/mock-relay.json +42 -0
  18. package/chains/mock-unanimous.json +42 -0
  19. package/chains/mock.json +17 -0
  20. package/chains/plan-auto-mistral.json +101 -0
  21. package/chains/plan-auto.json +131 -0
  22. package/chains/plan-cheap.json +82 -0
  23. package/chains/plan-debate-c2.json +86 -0
  24. package/chains/plan-debate-open-c2.json +98 -0
  25. package/chains/plan-debate-roles-c1.json +149 -0
  26. package/chains/plan-debate.json +116 -0
  27. package/chains/plan-fast.json +66 -0
  28. package/chains/plan-proposals-best-of-5.json +98 -0
  29. package/chains/plan-proposals.json +96 -0
  30. package/chains/plan-relay.json +83 -0
  31. package/chains/plan-thorough.json +82 -0
  32. package/chains/plan-unanimous.json +82 -0
  33. package/chains/seven-cheap.json +67 -0
  34. package/chains/seven.json +60 -0
  35. package/chains/smo-v2-cheap.json +67 -0
  36. package/chains/smo.json +50 -0
  37. package/chains/verify.json +40 -0
  38. package/package.json +55 -0
  39. package/src/board-export.js +77 -0
  40. package/src/budget.js +126 -0
  41. package/src/buys.js +44 -0
  42. package/src/cache-integrity.js +38 -0
  43. package/src/chain-lint.js +107 -0
  44. package/src/chain.js +880 -0
  45. package/src/cli.js +1031 -0
  46. package/src/cost-forecast.js +70 -0
  47. package/src/cost.js +139 -0
  48. package/src/errors.js +82 -0
  49. package/src/http-server.js +349 -0
  50. package/src/integrity.js +48 -0
  51. package/src/key-redaction.js +97 -0
  52. package/src/mcp/server.js +319 -0
  53. package/src/name-lint.js +186 -0
  54. package/src/partial-deliverable.js +38 -0
  55. package/src/peer-claim.js +98 -0
  56. package/src/personas.js +54 -0
  57. package/src/preflight.js +84 -0
  58. package/src/pricing.json +120 -0
  59. package/src/providers.js +268 -0
  60. package/src/replay.js +40 -0
  61. package/src/resume-brief.js +114 -0
  62. package/src/role-diagnostics.js +181 -0
  63. package/src/roles.js +520 -0
  64. package/src/schema-version.js +39 -0
  65. package/src/scope-freeze.js +35 -0
  66. package/src/seat-role.js +96 -0
  67. package/src/shape-rounds.js +58 -0
  68. package/src/spend.js +193 -0
  69. package/src/stage-contract.js +223 -0
  70. package/src/stage-submission.js +53 -0
  71. package/src/tie-break.js +94 -0
  72. package/src/ui/app.js +139 -0
  73. package/src/ui/index.html +43 -0
  74. package/src/ui/parse.js +101 -0
  75. package/src/ui/server.js +117 -0
  76. package/src/ui/style.css +37 -0
  77. package/src/verdict-stats.js +267 -0
  78. package/src/withdrawal-ledger.js +47 -0
@@ -0,0 +1,45 @@
1
+ # Troubleshooting
2
+
3
+ Every code below is printed wherever it happens - in your terminal, in a run's own
4
+ `run.log` - so you can search for it here. `degradable` means you can fix it and
5
+ keep going; `fatal` means this particular invocation stops here.
6
+
7
+ ## COUNCIL-E001 - Missing API key (degradable)
8
+
9
+ The "\<provider\>" API key isn't set, so the chain can't call that lab. An API key
10
+ is what proves to that provider a request is yours to pay for - without it, every
11
+ call to that lab fails before it starts.
12
+
13
+ **Fix:** set the matching environment variable in your `.env` file. See
14
+ [README.md#setup](README.md#setup) for the full list of variable names.
15
+
16
+ ## COUNCIL-E002 - Unpriced model (degradable)
17
+
18
+ A provider/model pair has no listed price, so its cost can't be shown or added to
19
+ your spend total. A price is the per-token rate this program uses to add up what
20
+ a run will cost before you pay for it.
21
+
22
+ **Fix:** add an entry for that provider/model to `src/pricing.json`. See
23
+ [README.md#the-spend-cap](README.md#the-spend-cap).
24
+
25
+ ## COUNCIL-E003 - Malformed chain file (fatal)
26
+
27
+ The chain file isn't valid JSON, so it can't be read at all. A chain file is the
28
+ plain JSON config that says which models fill which seat - a syntax error
29
+ anywhere in it stops the whole file from parsing.
30
+
31
+ **Fix:** check the named file for a missing comma, bracket, or quote. See
32
+ [README.md#chains](README.md#chains).
33
+
34
+ ## COUNCIL-E004 - Unreadable stage reply (degradable)
35
+
36
+ A lab's reply for one stage couldn't be read as the JSON that stage expects. A
37
+ stage reply is one lab's structured answer for one step of the chain - an
38
+ unreadable one is treated as an abstention, not a failure, so the run continues
39
+ without it.
40
+
41
+ **Fix:** read the saved reply at `runs/<run-id>/<stage-label>.md` to see what that
42
+ lab actually returned. The run log also says why it was unreadable: truncated
43
+ (hit its token cap), malformed JSON, or the provider itself returned an error
44
+ mid-generation - each needs a different fix (a higher `maxTokens`, a smaller
45
+ prompt, or just retrying).
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "cheap",
3
+ "description": "Same structure, small models throughout. For testing the harness itself, not for real deliverables.",
4
+ "maxRounds": 2,
5
+ "stopOnPass": true,
6
+ "estimate": {
7
+ "promptTokens": 4000,
8
+ "draftTokens": 6000,
9
+ "critiqueTokens": 1200
10
+ },
11
+ "seats": {
12
+ "criteria": {
13
+ "provider": "anthropic",
14
+ "model": "claude-haiku-4-5-20251001",
15
+ "maxTokens": 2000
16
+ },
17
+ "builder": {
18
+ "provider": "anthropic",
19
+ "model": "claude-haiku-4-5-20251001",
20
+ "maxTokens": 8000
21
+ },
22
+ "critics": [
23
+ {
24
+ "provider": "openai",
25
+ "model": "gpt-5-mini",
26
+ "maxTokens": 3000
27
+ },
28
+ {
29
+ "provider": "google",
30
+ "model": "gemini-2.5-flash",
31
+ "maxTokens": 3000
32
+ }
33
+ ]
34
+ }
35
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "gp-judge-v1",
3
+ "description": "Golden Path (GP) vibecoded-project judging. Panel-only, one round, five independent labs each answer MET/FAILED against the published rubric (~/Projects/GP/rubric.json) with quoted evidence. Invoked with --draft <dossier> --rounds 1 so the criteria stage, skeleton/proposal/debate stages, and the builder/reviser never run - only the panel critiques the dossier once. Chain data only; no new relay stage type.",
4
+ "maxRounds": 1,
5
+ "signoff": "unanimous",
6
+ "estimate": {
7
+ "promptTokens": 3000,
8
+ "draftTokens": 1200,
9
+ "critiqueTokens": 900
10
+ },
11
+ "seats": {
12
+ "criteria": {
13
+ "provider": "anthropic",
14
+ "model": "claude-sonnet-5",
15
+ "extra": { "thinking": { "type": "disabled" } },
16
+ "maxTokens": 4000
17
+ },
18
+ "builder": {
19
+ "provider": "anthropic",
20
+ "model": "claude-sonnet-5",
21
+ "extra": { "thinking": { "type": "disabled" } },
22
+ "maxTokens": 8000
23
+ },
24
+ "reviser": {
25
+ "provider": "anthropic",
26
+ "model": "claude-sonnet-5",
27
+ "extra": { "thinking": { "type": "disabled" } },
28
+ "maxTokens": 8000
29
+ },
30
+ "critics": [
31
+ {
32
+ "provider": "together",
33
+ "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
34
+ "maxTokens": 8000,
35
+ "extra": { "chat_template_kwargs": { "thinking": false } },
36
+ "lab": "deepseek"
37
+ },
38
+ {
39
+ "provider": "openrouter",
40
+ "model": "qwen/qwen3.5-plus-20260420",
41
+ "maxTokens": 8000,
42
+ "extra": { "reasoning": { "enabled": false } },
43
+ "lab": "qwen"
44
+ },
45
+ {
46
+ "provider": "openrouter",
47
+ "model": "z-ai/glm-5.3-flash",
48
+ "maxTokens": 8000,
49
+ "lab": "glm",
50
+ "extra": { "reasoning": { "effort": "low" } }
51
+ },
52
+ {
53
+ "provider": "openrouter",
54
+ "model": "mistralai/mistral-large-2512",
55
+ "maxTokens": 8000,
56
+ "lab": "mistral"
57
+ },
58
+ {
59
+ "provider": "google",
60
+ "model": "gemini-3.6-flash",
61
+ "maxTokens": 8000,
62
+ "lab": "gemini"
63
+ }
64
+ ]
65
+ },
66
+ "criteria": [
67
+ "The submitted live URL, or a URL described in the README, loads and renders something within a few seconds (not a blank page, a build error, or a 404).",
68
+ "What loads is an interactive thing (a game, app, tool, or demo the visitor can do something with), not a static description of an idea.",
69
+ "The interface or output is visually coherent: no obviously broken layout, unstyled default HTML, or placeholder Lorem-ipsum-style content.",
70
+ "No visible runtime errors, broken links, or crashes are observed during the judge's brief interaction with the live URL.",
71
+ "The submission reads as a finished small thing rather than an abandoned half-built scaffold (e.g. has a title, a clear entry point, no dangling TODO screens).",
72
+ "The description or README states a clear creative or personal intent behind the project (why it was made, what idea it explores), not just a generic feature list.",
73
+ "The submission has at least one distinctive design or content choice (a theme, joke, aesthetic, or mechanic) that isn't a generic unmodified template or tutorial clone.",
74
+ "The README or description names the AI tools or models used to build the project (e.g. Claude, Cursor, Copilot, or 'vibecoded with X').",
75
+ "The README or description gives at least one concrete detail about the build process (a prompt approach, a workflow step, or a specific decision made during building), beyond just naming a tool.",
76
+ "If a repo URL is given, it is publicly reachable and contains a README.",
77
+ "If a live URL is given, it is publicly reachable without a login wall or paywall blocking the judge's view."
78
+ ],
79
+ "_maxTokensNote": "Bumped critics 4000->8000 2026-09-13: 11 rubric criteria means a full criteria+failures reply routinely needs more than 4000 output tokens, and cheap critics (esp. glm-5.3-flash) were hitting stop:length mid-JSON and getting scored as an unparseable abstention rather than a real verdict, confirmed against real panel-1-*.md files that were cut off mid-string. The fix belongs here, not in the judging pipeline that supplies the dossier - the critic maxTokens budget is entirely this chain config. A re-run after the bump came back with every active critic fully parsed, zero abstentions."
80
+ }
@@ -0,0 +1,106 @@
1
+ {
2
+ "name": "idea-open-c2",
3
+ "description": "For a genuinely NEW idea: questions first (external seat; the answers come from the human or the command-and-control session and become part of the request), then plan-debate-open-c2 - open scope, every seat may add on record, labs debate, Sonnet stages external, blind panel, handoff. The verdict pass afterwards cuts to a prototype phase. Kimi K3 added 2026-09-08 as a sixth critic/proposer seat (OpenRouter, real Sept-2026 pricing ~$2.50/$14 per M - pricier than the other five; kept because it is a genuinely different lab, not for its price).",
4
+ "maxRounds": 3,
5
+ "signoff": "unanimous",
6
+ "proposals": {
7
+ "parts": 6,
8
+ "maxTokens": 1500
9
+ },
10
+ "debate": true,
11
+ "handoff": true,
12
+ "estimate": {
13
+ "promptTokens": 16000,
14
+ "draftTokens": 16000,
15
+ "critiqueTokens": 2000
16
+ },
17
+ "seats": {
18
+ "criteria": {
19
+ "provider": "external",
20
+ "model": "claude-code-session"
21
+ },
22
+ "skeleton": {
23
+ "provider": "external",
24
+ "model": "claude-code-session"
25
+ },
26
+ "builder": {
27
+ "provider": "external",
28
+ "model": "claude-code-session"
29
+ },
30
+ "reviser": {
31
+ "provider": "external",
32
+ "model": "claude-code-session"
33
+ },
34
+ "handoff": {
35
+ "provider": "external",
36
+ "model": "claude-code-session"
37
+ },
38
+ "critics": [
39
+ {
40
+ "provider": "together",
41
+ "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
42
+ "maxTokens": 20000,
43
+ "extra": {
44
+ "chat_template_kwargs": {
45
+ "thinking": false
46
+ }
47
+ },
48
+ "lab": "deepseek"
49
+ },
50
+ {
51
+ "provider": "openrouter",
52
+ "model": "qwen/qwen3.5-plus-20260420",
53
+ "maxTokens": 20000,
54
+ "extra": {
55
+ "reasoning": {
56
+ "enabled": false
57
+ }
58
+ },
59
+ "lab": "qwen"
60
+ },
61
+ {
62
+ "provider": "openrouter",
63
+ "model": "z-ai/glm-5.3-flash",
64
+ "maxTokens": 20000,
65
+ "lab": "glm",
66
+ "extra": {
67
+ "reasoning": {
68
+ "effort": "low"
69
+ }
70
+ }
71
+ },
72
+ {
73
+ "provider": "openrouter",
74
+ "model": "mistralai/mistral-large-2512",
75
+ "maxTokens": 20000,
76
+ "lab": "mistral"
77
+ },
78
+ {
79
+ "provider": "google",
80
+ "model": "gemini-3.6-flash",
81
+ "maxTokens": 20000,
82
+ "lab": "gemini"
83
+ },
84
+ {
85
+ "provider": "openrouter",
86
+ "model": "moonshotai/kimi-k3",
87
+ "maxTokens": 20000,
88
+ "lab": "kimi",
89
+ "extra": {
90
+ "reasoning": {
91
+ "enabled": false
92
+ }
93
+ }
94
+ }
95
+ ],
96
+ "questions": {
97
+ "provider": "external",
98
+ "model": "claude-code-session"
99
+ }
100
+ },
101
+ "scope": "open",
102
+ "questions": {
103
+ "max": 8,
104
+ "wait": true
105
+ }
106
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "mock-budget",
3
+ "description": "Offline, and the only mock chain that costs anything on paper. Its seats use mock/mock-priced, a $1000-per-Mtok test fixture price, so the per-run spend cap can be exercised without a key or a real call: run it with --max-usd 1 to watch a run stop cleanly, then resume it with a higher ceiling.",
4
+ "maxRounds": 2,
5
+ "stopOnPass": true,
6
+ "estimate": { "promptTokens": 1000, "draftTokens": 1000, "critiqueTokens": 300 },
7
+ "seats": {
8
+ "criteria": { "provider": "mock", "model": "mock-priced", "maxTokens": 100 },
9
+ "builder": { "provider": "mock", "model": "mock-priced", "maxTokens": 8000 },
10
+ "reviser": { "provider": "mock", "model": "mock-priced", "maxTokens": 8000 },
11
+ "critics": [
12
+ { "provider": "mock", "model": "mock-priced", "maxTokens": 8000, "lab": "mock-a" }
13
+ ]
14
+ }
15
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "mock-debate",
3
+ "description": "Offline. Proposal stage plus the debate and reply rounds (anonymised), the board handed to the builder, withdrawn/amended proposals, a handoff file at the end.",
4
+ "maxRounds": 2,
5
+ "signoff": "unanimous",
6
+ "proposals": {
7
+ "parts": 2,
8
+ "maxTokens": 400
9
+ },
10
+ "estimate": {
11
+ "promptTokens": 1000,
12
+ "draftTokens": 1000,
13
+ "critiqueTokens": 300
14
+ },
15
+ "seats": {
16
+ "criteria": {
17
+ "provider": "mock",
18
+ "model": "mock-criteria"
19
+ },
20
+ "skeleton": {
21
+ "provider": "mock",
22
+ "model": "mock-skeleton"
23
+ },
24
+ "builder": {
25
+ "provider": "mock",
26
+ "model": "mock-builder"
27
+ },
28
+ "reviser": {
29
+ "provider": "mock",
30
+ "model": "mock-builder"
31
+ },
32
+ "proposers": [
33
+ {
34
+ "provider": "mock",
35
+ "model": "mock-proposer-a",
36
+ "lab": "mock-a"
37
+ },
38
+ {
39
+ "provider": "mock",
40
+ "model": "mock-proposer-b",
41
+ "lab": "mock-b"
42
+ }
43
+ ],
44
+ "critics": [
45
+ {
46
+ "provider": "mock",
47
+ "model": "mock-critic-a",
48
+ "lab": "mock-a"
49
+ },
50
+ {
51
+ "provider": "mock",
52
+ "model": "mock-critic-b",
53
+ "lab": "mock-b"
54
+ }
55
+ ]
56
+ },
57
+ "debate": true,
58
+ "handoff": true
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "mock-external",
3
+ "description": "Offline. The builder and reviser are external seats: the run pauses, writes NEEDS-<label>.md, and resumes from disk after <label>.md is written. Every other stage is mock.",
4
+ "maxRounds": 2,
5
+ "signoff": "unanimous",
6
+ "proposals": {
7
+ "parts": 2,
8
+ "maxTokens": 400
9
+ },
10
+ "estimate": {
11
+ "promptTokens": 1000,
12
+ "draftTokens": 1000,
13
+ "critiqueTokens": 300
14
+ },
15
+ "seats": {
16
+ "criteria": {
17
+ "provider": "mock",
18
+ "model": "mock-criteria"
19
+ },
20
+ "skeleton": {
21
+ "provider": "mock",
22
+ "model": "mock-skeleton"
23
+ },
24
+ "builder": {
25
+ "provider": "external",
26
+ "model": "claude-code-session"
27
+ },
28
+ "reviser": {
29
+ "provider": "external",
30
+ "model": "claude-code-session"
31
+ },
32
+ "proposers": [
33
+ {
34
+ "provider": "mock",
35
+ "model": "mock-proposer-a",
36
+ "lab": "mock-a"
37
+ },
38
+ {
39
+ "provider": "mock",
40
+ "model": "mock-proposer-b",
41
+ "lab": "mock-b"
42
+ }
43
+ ],
44
+ "critics": [
45
+ {
46
+ "provider": "mock",
47
+ "model": "mock-critic-a",
48
+ "lab": "mock-a"
49
+ },
50
+ {
51
+ "provider": "mock",
52
+ "model": "mock-critic-b",
53
+ "lab": "mock-b"
54
+ }
55
+ ]
56
+ },
57
+ "debate": true,
58
+ "handoff": true
59
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "mock-open",
3
+ "description": "Offline. Proposal stage plus the debate and reply rounds (anonymised), the board handed to the builder, withdrawn/amended proposals, a handoff file at the end.",
4
+ "maxRounds": 2,
5
+ "signoff": "unanimous",
6
+ "proposals": {
7
+ "parts": 2,
8
+ "maxTokens": 400
9
+ },
10
+ "estimate": {
11
+ "promptTokens": 1000,
12
+ "draftTokens": 1000,
13
+ "critiqueTokens": 300
14
+ },
15
+ "seats": {
16
+ "criteria": {
17
+ "provider": "mock",
18
+ "model": "mock-criteria"
19
+ },
20
+ "skeleton": {
21
+ "provider": "mock",
22
+ "model": "mock-skeleton"
23
+ },
24
+ "builder": {
25
+ "provider": "mock",
26
+ "model": "mock-builder"
27
+ },
28
+ "reviser": {
29
+ "provider": "mock",
30
+ "model": "mock-builder"
31
+ },
32
+ "proposers": [
33
+ {
34
+ "provider": "mock",
35
+ "model": "mock-proposer-a",
36
+ "lab": "mock-a"
37
+ },
38
+ {
39
+ "provider": "mock",
40
+ "model": "mock-proposer-b",
41
+ "lab": "mock-b"
42
+ }
43
+ ],
44
+ "critics": [
45
+ {
46
+ "provider": "mock",
47
+ "model": "mock-critic-a",
48
+ "lab": "mock-a"
49
+ },
50
+ {
51
+ "provider": "mock",
52
+ "model": "mock-critic-b",
53
+ "lab": "mock-b"
54
+ }
55
+ ]
56
+ },
57
+ "debate": true,
58
+ "handoff": true,
59
+ "scope": "open"
60
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "mock-proposals",
3
+ "description": "Offline. Exercises the proposal stage: skeleton, blind proposals from every critic seat (one of them unreadable), integration with a scope ledger, the scoreboard. Best-of-N: three attempts per lab, a mock judge keeps two.",
4
+ "maxRounds": 2,
5
+ "signoff": "unanimous",
6
+ "proposals": {
7
+ "parts": 2,
8
+ "maxTokens": 400,
9
+ "samples": 3,
10
+ "keep": 2
11
+ },
12
+ "estimate": {
13
+ "promptTokens": 1000,
14
+ "draftTokens": 1000,
15
+ "critiqueTokens": 300
16
+ },
17
+ "seats": {
18
+ "criteria": {
19
+ "provider": "mock",
20
+ "model": "mock-criteria"
21
+ },
22
+ "skeleton": {
23
+ "provider": "mock",
24
+ "model": "mock-skeleton"
25
+ },
26
+ "builder": {
27
+ "provider": "mock",
28
+ "model": "mock-builder"
29
+ },
30
+ "reviser": {
31
+ "provider": "mock",
32
+ "model": "mock-builder"
33
+ },
34
+ "proposers": [
35
+ {
36
+ "provider": "mock",
37
+ "model": "mock-proposer-a"
38
+ },
39
+ {
40
+ "provider": "mock",
41
+ "model": "mock-proposer-empty"
42
+ }
43
+ ],
44
+ "critics": [
45
+ {
46
+ "provider": "mock",
47
+ "model": "mock-critic-a",
48
+ "lab": "mock-a"
49
+ },
50
+ {
51
+ "provider": "mock",
52
+ "model": "mock-critic-b",
53
+ "lab": "mock-b"
54
+ }
55
+ ]
56
+ }
57
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "mock-questions-wait",
3
+ "description": "Offline. Questions-first stage that PAUSES for answers (NEEDS-answers.md -> answers.md -> --resume).",
4
+ "maxRounds": 2,
5
+ "signoff": "unanimous",
6
+ "proposals": {
7
+ "parts": 2,
8
+ "maxTokens": 400
9
+ },
10
+ "estimate": {
11
+ "promptTokens": 1000,
12
+ "draftTokens": 1000,
13
+ "critiqueTokens": 300
14
+ },
15
+ "seats": {
16
+ "criteria": {
17
+ "provider": "mock",
18
+ "model": "mock-criteria"
19
+ },
20
+ "skeleton": {
21
+ "provider": "mock",
22
+ "model": "mock-skeleton"
23
+ },
24
+ "builder": {
25
+ "provider": "mock",
26
+ "model": "mock-builder"
27
+ },
28
+ "reviser": {
29
+ "provider": "mock",
30
+ "model": "mock-builder"
31
+ },
32
+ "proposers": [
33
+ {
34
+ "provider": "mock",
35
+ "model": "mock-proposer-a",
36
+ "lab": "mock-a"
37
+ },
38
+ {
39
+ "provider": "mock",
40
+ "model": "mock-proposer-b",
41
+ "lab": "mock-b"
42
+ }
43
+ ],
44
+ "critics": [
45
+ {
46
+ "provider": "mock",
47
+ "model": "mock-critic-a",
48
+ "lab": "mock-a"
49
+ },
50
+ {
51
+ "provider": "mock",
52
+ "model": "mock-critic-b",
53
+ "lab": "mock-b"
54
+ }
55
+ ]
56
+ },
57
+ "debate": true,
58
+ "handoff": true,
59
+ "questions": {
60
+ "max": 4,
61
+ "wait": true
62
+ }
63
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "mock-questions",
3
+ "description": "Offline. Questions-first stage with defaults taken automatically (wait: false), then the debate chain.",
4
+ "maxRounds": 2,
5
+ "signoff": "unanimous",
6
+ "proposals": {
7
+ "parts": 2,
8
+ "maxTokens": 400
9
+ },
10
+ "estimate": {
11
+ "promptTokens": 1000,
12
+ "draftTokens": 1000,
13
+ "critiqueTokens": 300
14
+ },
15
+ "seats": {
16
+ "criteria": {
17
+ "provider": "mock",
18
+ "model": "mock-criteria"
19
+ },
20
+ "skeleton": {
21
+ "provider": "mock",
22
+ "model": "mock-skeleton"
23
+ },
24
+ "builder": {
25
+ "provider": "mock",
26
+ "model": "mock-builder"
27
+ },
28
+ "reviser": {
29
+ "provider": "mock",
30
+ "model": "mock-builder"
31
+ },
32
+ "proposers": [
33
+ {
34
+ "provider": "mock",
35
+ "model": "mock-proposer-a",
36
+ "lab": "mock-a"
37
+ },
38
+ {
39
+ "provider": "mock",
40
+ "model": "mock-proposer-b",
41
+ "lab": "mock-b"
42
+ }
43
+ ],
44
+ "critics": [
45
+ {
46
+ "provider": "mock",
47
+ "model": "mock-critic-a",
48
+ "lab": "mock-a"
49
+ },
50
+ {
51
+ "provider": "mock",
52
+ "model": "mock-critic-b",
53
+ "lab": "mock-b"
54
+ }
55
+ ]
56
+ },
57
+ "debate": true,
58
+ "handoff": true,
59
+ "questions": {
60
+ "max": 4,
61
+ "wait": false
62
+ }
63
+ }