clinkx 0.2.2 → 0.3.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 +40 -1
- package/clinkx-workflows/dist/clink-client.js +35 -10
- package/clinkx-workflows/dist/clink-client.js.map +1 -1
- package/clinkx-workflows/dist/config.d.ts +10 -0
- package/clinkx-workflows/dist/config.js +18 -0
- package/clinkx-workflows/dist/config.js.map +1 -1
- package/clinkx-workflows/dist/council-expander.d.ts +43 -0
- package/clinkx-workflows/dist/council-expander.js +330 -0
- package/clinkx-workflows/dist/council-expander.js.map +1 -0
- package/clinkx-workflows/dist/index.d.ts +14 -0
- package/clinkx-workflows/dist/index.js +264 -16
- package/clinkx-workflows/dist/index.js.map +1 -1
- package/clinkx-workflows/dist/server.d.ts +8 -1
- package/clinkx-workflows/dist/server.js +87 -1
- package/clinkx-workflows/dist/server.js.map +1 -1
- package/clinkx-workflows/dist/shutdown.d.ts +5 -9
- package/clinkx-workflows/dist/shutdown.js +6 -23
- package/clinkx-workflows/dist/shutdown.js.map +1 -1
- package/clinkx-workflows/dist/state.d.ts +13 -0
- package/clinkx-workflows/dist/state.js +198 -2
- package/clinkx-workflows/dist/state.js.map +1 -1
- package/clinkx-workflows/dist/transport.js +24 -8
- package/clinkx-workflows/dist/transport.js.map +1 -1
- package/clinkx-workflows/dist/workflow-tools.d.ts +14 -1
- package/clinkx-workflows/dist/workflow-tools.js +173 -12
- package/clinkx-workflows/dist/workflow-tools.js.map +1 -1
- package/clinkx-workflows/dist/workflows/index.d.ts +4 -3
- package/clinkx-workflows/dist/workflows/index.js +4 -3
- package/clinkx-workflows/dist/workflows/index.js.map +1 -1
- package/clinkx-workflows/templates/council/answer-chairman.txt +49 -0
- package/clinkx-workflows/templates/council/answer-cross-reviewer.txt +37 -0
- package/clinkx-workflows/templates/council/answer-specialist.txt +40 -0
- package/clinkx-workflows/templates/council/chairman.txt +59 -0
- package/clinkx-workflows/templates/council/code-review-chairman.txt +57 -0
- package/clinkx-workflows/templates/council/code-review-cross-reviewer.txt +43 -0
- package/clinkx-workflows/templates/council/code-review-reviewer.txt +39 -0
- package/clinkx-workflows/templates/council/debug-chairman.txt +57 -0
- package/clinkx-workflows/templates/council/debug-cross-reviewer.txt +41 -0
- package/clinkx-workflows/templates/council/debug-debugger.txt +46 -0
- package/clinkx-workflows/templates/council/discover-analyst.txt +38 -0
- package/clinkx-workflows/templates/council/discover-chairman.txt +51 -0
- package/clinkx-workflows/templates/council/discover-cross-reviewer.txt +40 -0
- package/clinkx-workflows/templates/council/member.txt +48 -0
- package/clinkx-workflows/templates/council/reviewer.txt +57 -0
- package/clinkx-workflows/workflows/council-answer.yaml +147 -0
- package/clinkx-workflows/workflows/council-code-review.yaml +152 -0
- package/clinkx-workflows/workflows/council-debug.yaml +152 -0
- package/clinkx-workflows/workflows/council-default.yaml +147 -0
- package/clinkx-workflows/workflows/council-discover.yaml +147 -0
- package/conf/prompts/json-codereviewer.txt +1 -0
- package/conf/prompts/json.txt +1 -0
- package/dist/allowed-roots.d.ts +12 -0
- package/dist/allowed-roots.js +94 -0
- package/dist/allowed-roots.js.map +1 -0
- package/dist/context-builder/anchors.d.ts +11 -0
- package/dist/context-builder/anchors.js +19 -0
- package/dist/context-builder/anchors.js.map +1 -0
- package/dist/context-builder/bundle.d.ts +76 -0
- package/dist/context-builder/bundle.js +3573 -0
- package/dist/context-builder/bundle.js.map +1 -0
- package/dist/context-builder/codemap.d.ts +17 -0
- package/dist/context-builder/codemap.js +301 -0
- package/dist/context-builder/codemap.js.map +1 -0
- package/dist/context-builder/config.d.ts +60 -0
- package/dist/context-builder/config.js +204 -0
- package/dist/context-builder/config.js.map +1 -0
- package/dist/context-builder/delegate-packet.d.ts +182 -0
- package/dist/context-builder/delegate-packet.js +898 -0
- package/dist/context-builder/delegate-packet.js.map +1 -0
- package/dist/context-builder/delegate-reconstruction.d.ts +13 -0
- package/dist/context-builder/delegate-reconstruction.js +220 -0
- package/dist/context-builder/delegate-reconstruction.js.map +1 -0
- package/dist/context-builder/delegate-validation.d.ts +18 -0
- package/dist/context-builder/delegate-validation.js +367 -0
- package/dist/context-builder/delegate-validation.js.map +1 -0
- package/dist/context-builder/delegate.d.ts +24 -0
- package/dist/context-builder/delegate.js +133 -0
- package/dist/context-builder/delegate.js.map +1 -0
- package/dist/context-builder/diagnostics.d.ts +27 -0
- package/dist/context-builder/diagnostics.js +74 -0
- package/dist/context-builder/diagnostics.js.map +1 -0
- package/dist/context-builder/discovery.d.ts +118 -0
- package/dist/context-builder/discovery.js +1829 -0
- package/dist/context-builder/discovery.js.map +1 -0
- package/dist/context-builder/globs.d.ts +14 -0
- package/dist/context-builder/globs.js +175 -0
- package/dist/context-builder/globs.js.map +1 -0
- package/dist/context-builder/handler.d.ts +17 -0
- package/dist/context-builder/handler.js +3848 -0
- package/dist/context-builder/handler.js.map +1 -0
- package/dist/context-builder/path-signals.d.ts +7 -0
- package/dist/context-builder/path-signals.js +66 -0
- package/dist/context-builder/path-signals.js.map +1 -0
- package/dist/context-builder/paths.d.ts +30 -0
- package/dist/context-builder/paths.js +153 -0
- package/dist/context-builder/paths.js.map +1 -0
- package/dist/context-builder/progress.d.ts +15 -0
- package/dist/context-builder/progress.js +70 -0
- package/dist/context-builder/progress.js.map +1 -0
- package/dist/context-builder/receipt.d.ts +89 -0
- package/dist/context-builder/receipt.js +169 -0
- package/dist/context-builder/receipt.js.map +1 -0
- package/dist/context-builder/run-id.d.ts +7 -0
- package/dist/context-builder/run-id.js +31 -0
- package/dist/context-builder/run-id.js.map +1 -0
- package/dist/context-builder/schema.d.ts +431 -0
- package/dist/context-builder/schema.js +293 -0
- package/dist/context-builder/schema.js.map +1 -0
- package/dist/context-builder/secrets.d.ts +13 -0
- package/dist/context-builder/secrets.js +222 -0
- package/dist/context-builder/secrets.js.map +1 -0
- package/dist/context-builder/selection.d.ts +52 -0
- package/dist/context-builder/selection.js +1649 -0
- package/dist/context-builder/selection.js.map +1 -0
- package/dist/context-builder/status.d.ts +45 -0
- package/dist/context-builder/status.js +105 -0
- package/dist/context-builder/status.js.map +1 -0
- package/dist/context-builder/storage.d.ts +85 -0
- package/dist/context-builder/storage.js +746 -0
- package/dist/context-builder/storage.js.map +1 -0
- package/dist/context-builder/token-estimate.d.ts +8 -0
- package/dist/context-builder/token-estimate.js +17 -0
- package/dist/context-builder/token-estimate.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +246 -14
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +8 -0
- package/dist/paths.js +31 -43
- package/dist/paths.js.map +1 -1
- package/dist/pipeline.d.ts +48 -4
- package/dist/pipeline.js +164 -44
- package/dist/pipeline.js.map +1 -1
- package/dist/runner.d.ts +2 -2
- package/dist/runner.js +24 -3
- package/dist/runner.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.js +42 -11
- package/dist/server.js.map +1 -1
- package/package.json +6 -2
- package/clinkx-workflows/dist/workflows/council-default.d.ts +0 -123
- package/clinkx-workflows/dist/workflows/council-default.js +0 -141
- package/clinkx-workflows/dist/workflows/council-default.js.map +0 -1
- package/dist/artifacts.d.ts +0 -9
- package/dist/artifacts.js +0 -24
- package/dist/artifacts.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# ClinkX
|
|
2
2
|
|
|
3
|
-
An MCP server (STDIO) that exposes
|
|
3
|
+
An MCP server (STDIO) that exposes local tools for CLI delegation and workflow orchestration:
|
|
4
|
+
|
|
5
|
+
- `clink` runs a configured CLI adapter — Gemini, Codex, Claude, or anything else you configure — as a subprocess and returns the output.
|
|
6
|
+
- `context_builder` creates a persisted, attachable context bundle from allowed local roots before you delegate to a CLI. It uses deterministic local selection by default and can run explicit curator/finalizer delegate adapters before local validation and materialization.
|
|
7
|
+
- `list_workflows`, `resume_workflow`, and `run_workflow` support multi-stage workflow orchestration.
|
|
4
8
|
|
|
5
9
|
Config-driven. No hardcoded CLI allowlist. PAL-compatible at the field level.
|
|
6
10
|
|
|
@@ -26,6 +30,39 @@ Adapters are JSON files discovered in this order:
|
|
|
26
30
|
|
|
27
31
|
See `docs/configuration.md` for the full adapter reference.
|
|
28
32
|
|
|
33
|
+
## Context bundles
|
|
34
|
+
|
|
35
|
+
Use `context_builder` when a downstream `clink` call needs curated repository context without inlining source into the first tool response. The tool requires a bounded anchor: at least one bounded `focus_paths` entry or nonblank `search_terms` entry. `include_globs` can narrow scanning when combined with those anchors, but it does not select context alone. The tool writes a durable run directory with `manifest.json` and `artifacts/bundle.md`, then returns one minified JSON receipt.
|
|
36
|
+
|
|
37
|
+
The receipt includes `recommended_clink.absolute_file_paths`; pass those paths as the `absolute_file_paths` field in a later `clink` call. The handoff is fixed to the persisted `artifacts/bundle.md` and `manifest.json` files.
|
|
38
|
+
|
|
39
|
+
Delegate mode requires an explicit request shape and explicit providers:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"task": "Collect context for the server tool registration",
|
|
44
|
+
"roots": ["/path/to/workspace"],
|
|
45
|
+
"focus_paths": ["src/server.ts"],
|
|
46
|
+
"delegate": {
|
|
47
|
+
"enabled": true,
|
|
48
|
+
"curator": {
|
|
49
|
+
"cli_name": "<curator-cli>",
|
|
50
|
+
"role": "<curator-role>"
|
|
51
|
+
},
|
|
52
|
+
"finalizer": {
|
|
53
|
+
"cli_name": "<finalizer-cli>",
|
|
54
|
+
"role": "<finalizer-role>",
|
|
55
|
+
"min_score": 8.5
|
|
56
|
+
},
|
|
57
|
+
"failure_policy": "fallback",
|
|
58
|
+
"timeout_seconds": 120,
|
|
59
|
+
"max_response_chars": 20000
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
There are no built-in curator or finalizer provider defaults. Provider output is advisory: the server validates strict JSON, reconstructs accepted content from local candidates, reapplies budgets and secret checks, and does not persist raw provider output. `failure_policy:"fallback"` publishes deterministic local selection as a partial v2 run if delegate curation fails; `failure_policy:"fail"` returns an error and does not publish a manifest.
|
|
65
|
+
|
|
29
66
|
### Adding an adapter
|
|
30
67
|
|
|
31
68
|
Create `conf/adapters/echo.json`:
|
|
@@ -85,4 +122,6 @@ ClinkX validates what goes into the request: paths, environment variables, and a
|
|
|
85
122
|
|
|
86
123
|
`CLINKX_ALLOWED_ROOTS` constrains which file paths the tool accepts. The subprocess runs with the permissions of whoever started ClinkX.
|
|
87
124
|
|
|
125
|
+
`context_builder` follows the same input-validation model. It validates roots, blocks symlink escapes, omits high-confidence secrets before writing previews, slices, bundles, or manifests, and persists artifacts for manual retention or cleanup. These artifacts are not a sandbox or an access-control boundary.
|
|
126
|
+
|
|
88
127
|
See `docs/security.md` for details.
|
|
@@ -129,17 +129,17 @@ export async function callClink(session, input, signal, context, timeoutMs) {
|
|
|
129
129
|
const codexLocalMatch = parsed.outputText.match(/\[codex-local\]:?\s*Local Codex process failed(?::\s*Process exited with code:\s*(\d+))?/);
|
|
130
130
|
if (codexLocalMatch != null) {
|
|
131
131
|
const exitCode = codexLocalMatch[1] != null ? Number(codexLocalMatch[1]) : null;
|
|
132
|
-
const synthesizedClass = exitCode === 101
|
|
132
|
+
const synthesizedClass = exitCode === 101
|
|
133
|
+
? (hasCodexLocalRustIoPanicEvidence(parsed.outputText)
|
|
134
|
+
? "codex_local_rust_io_panic"
|
|
135
|
+
: "codex_local_rust_panic")
|
|
136
|
+
: "codex_local_crash";
|
|
137
|
+
if (exitCode === 101) {
|
|
138
|
+
effectiveChildDebugMetadata = withCodexPanicClass(effectiveChildDebugMetadata, synthesizedClass);
|
|
139
|
+
}
|
|
133
140
|
if (TRANSIENT_PANIC_CLASSES.has(synthesizedClass)) {
|
|
134
141
|
effectiveFailureClass = "transient";
|
|
135
142
|
logger.info({ stage_id: stageId, call_id: callId, synthesized_panic_class: synthesizedClass }, "reclassified failure as transient via output-text fallback");
|
|
136
|
-
// Synthesize into childDebugMetadata (readonly fields — create new object)
|
|
137
|
-
if (effectiveChildDebugMetadata != null) {
|
|
138
|
-
effectiveChildDebugMetadata = { ...effectiveChildDebugMetadata, codex_panic_class: synthesizedClass };
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
effectiveChildDebugMetadata = { codex_panic_class: synthesizedClass };
|
|
142
|
-
}
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
}
|
|
@@ -158,14 +158,39 @@ export async function callClink(session, input, signal, context, timeoutMs) {
|
|
|
158
158
|
* Panic classes confirmed as transient (retryable). Only classes with strong
|
|
159
159
|
* evidence of being transport-layer failures belong here. `codex_local_crash`
|
|
160
160
|
* is deliberately excluded — a generic wrapper exit may indicate a permanent
|
|
161
|
-
* failure (OOM, config error, sandbox violation).
|
|
161
|
+
* failure (OOM, config error, sandbox violation). Generic Rust panics are
|
|
162
|
+
* excluded for the same reason unless stderr/output proves an I/O panic.
|
|
162
163
|
*/
|
|
163
164
|
const TRANSIENT_PANIC_CLASSES = new Set([
|
|
164
165
|
"stdout_would_block",
|
|
165
166
|
"stdout_broken_pipe",
|
|
166
167
|
"stdout_write_failure",
|
|
167
|
-
"
|
|
168
|
+
"stderr_would_block",
|
|
169
|
+
"stderr_broken_pipe",
|
|
170
|
+
"stderr_write_failure",
|
|
171
|
+
"codex_local_rust_io_panic",
|
|
168
172
|
]);
|
|
173
|
+
function hasCodexLocalRustIoPanicEvidence(text) {
|
|
174
|
+
const normalized = text
|
|
175
|
+
.replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, "")
|
|
176
|
+
.toLowerCase();
|
|
177
|
+
if (!/\bstd(?:out|err)\b/.test(normalized))
|
|
178
|
+
return false;
|
|
179
|
+
if (/would block|resource temporarily unavailable|os error 35|\beagain\b/.test(normalized)) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
if (/broken pipe|os error 32|\bepipe\b/.test(normalized)) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
return (/\bwrite(?:ing)?\b[\s\S]{0,80}\b(?:error|fail(?:ed|ure))\b/.test(normalized) ||
|
|
186
|
+
/\b(?:error|fail(?:ed|ure))\b[\s\S]{0,80}\bwrite(?:ing)?\b/.test(normalized) ||
|
|
187
|
+
/\bfailed printing to std(?:out|err)\b/.test(normalized));
|
|
188
|
+
}
|
|
189
|
+
function withCodexPanicClass(meta, panicClass) {
|
|
190
|
+
return meta != null
|
|
191
|
+
? { ...meta, codex_panic_class: panicClass }
|
|
192
|
+
: { codex_panic_class: panicClass };
|
|
193
|
+
}
|
|
169
194
|
/**
|
|
170
195
|
* Classify a child failure as transient or permanent based on _debug metadata.
|
|
171
196
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clink-client.js","sourceRoot":"","sources":["../src/clink-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAA6B,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAWrC;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA8B;IAE9B,yCAAyC;IACzC,MAAM,IAAI,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnD,yCAAyC;IACzC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAErB,6DAA6D;IAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,EAAE,GAAI,IAAI,CAAC,OAAO,CAA6B,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7B,uCAAuC;QACvC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,aAAa,GAAmC,IAAI,CAAC;IAEzD,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAChD,+BAA+B;gBAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,IAAI,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClD,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;wBAC3D,IAAI,QAAQ,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;4BAC/D,aAAa,GAAG,MAAM,CAAC,QAAQ,CAA4B,CAAC;4BAC5D,SAAS,CAAC,4CAA4C;wBACxD,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,gDAAgD;oBAClD,CAAC;gBACH,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAClC,KAAqC;IAErC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,OAAO,KAAK,CAAC,qBAAqB,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEnE,OAAO;QACL,GAAG,KAAK;QACR,mBAAmB,EAAE,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAqB,EACrB,KAA8B,EAC9B,MAAoB,EACpB,OAA6C,EAC7C,SAAkB;IAElB,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,SAAS,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC;IAE5C,IAAI,MAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAC7B,IAAI,EACJ,MAAM,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI;YACjC,CAAC,CAAC;gBACE,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5C;YACH,CAAC,CAAC,SAAS,CACd,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,wDAAwD;QACxD,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,CACxB,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACrF,OAAO,EACP,MAAM,CACP,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,gDAAgD;IAChD,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAE7E,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,qBAAqB,GAAG,YAAY,CAAC;QACzC,IAAI,2BAA2B,GAAG,kBAAkB,CAAC;QACrD,IAAI,YAAY,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YAC9D,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAC7C,0FAA0F,CAC3F,CAAC;YACF,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChF,MAAM,gBAAgB,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"clink-client.js","sourceRoot":"","sources":["../src/clink-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,14 @@
|
|
|
25
25
|
* Adapter config wins per runner.ts:168-171. Additionally, result_contract.enabled forces
|
|
26
26
|
* both idle timers to 0 (runner.ts:163-170).
|
|
27
27
|
*/
|
|
28
|
+
export declare const DEFAULT_RETAIN_FAILED_DAYS = 30;
|
|
29
|
+
export declare const DEFAULT_RETAIN_CANCELLED_DAYS = 30;
|
|
30
|
+
export declare const DEFAULT_RETAIN_DEBUG_DAYS = 7;
|
|
31
|
+
export interface RetentionConfig {
|
|
32
|
+
readonly retainFailedDays: number;
|
|
33
|
+
readonly retainCancelledDays: number;
|
|
34
|
+
readonly retainDebugDays: number;
|
|
35
|
+
}
|
|
28
36
|
/** Resolve workspace root: explicit env > process.cwd() with warning. */
|
|
29
37
|
export declare function resolveWorkspaceRoot(): string;
|
|
30
38
|
/** Whether workspace root was explicitly configured. */
|
|
@@ -73,6 +81,8 @@ export declare function getWorkflowTimeout(): number;
|
|
|
73
81
|
export declare function getMaxPromptBytes(): number;
|
|
74
82
|
/** Workflow server log level. */
|
|
75
83
|
export declare function getLogLevel(): string;
|
|
84
|
+
/** Age-based retention thresholds for persisted workflow run directories. */
|
|
85
|
+
export declare function getRetentionConfig(): RetentionConfig;
|
|
76
86
|
/** Persistent workflow state directory. */
|
|
77
87
|
export declare function getStateDir(): string;
|
|
78
88
|
/** Base directory containing persistent run state directories. */
|
|
@@ -41,6 +41,16 @@ function envInt(key, fallback) {
|
|
|
41
41
|
const n = Number(v);
|
|
42
42
|
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
43
43
|
}
|
|
44
|
+
function envNonNegativeInt(key, fallback) {
|
|
45
|
+
const v = process.env[key];
|
|
46
|
+
if (v == null || v === "")
|
|
47
|
+
return fallback;
|
|
48
|
+
const n = Number(v);
|
|
49
|
+
return Number.isSafeInteger(n) && n >= 0 ? n : fallback;
|
|
50
|
+
}
|
|
51
|
+
export const DEFAULT_RETAIN_FAILED_DAYS = 30;
|
|
52
|
+
export const DEFAULT_RETAIN_CANCELLED_DAYS = 30;
|
|
53
|
+
export const DEFAULT_RETAIN_DEBUG_DAYS = 7;
|
|
44
54
|
/** Resolve workspace root: explicit env > process.cwd() with warning. */
|
|
45
55
|
export function resolveWorkspaceRoot() {
|
|
46
56
|
const explicit = process.env["CLINKX_WORKFLOWS_WORKSPACE_ROOT"];
|
|
@@ -146,6 +156,14 @@ export function getMaxPromptBytes() {
|
|
|
146
156
|
export function getLogLevel() {
|
|
147
157
|
return envStr("CLINKX_WORKFLOWS_LOG_LEVEL", "info");
|
|
148
158
|
}
|
|
159
|
+
/** Age-based retention thresholds for persisted workflow run directories. */
|
|
160
|
+
export function getRetentionConfig() {
|
|
161
|
+
return {
|
|
162
|
+
retainFailedDays: envNonNegativeInt("CLINKX_WORKFLOWS_RETAIN_FAILED_DAYS", DEFAULT_RETAIN_FAILED_DAYS),
|
|
163
|
+
retainCancelledDays: envNonNegativeInt("CLINKX_WORKFLOWS_RETAIN_CANCELLED_DAYS", DEFAULT_RETAIN_CANCELLED_DAYS),
|
|
164
|
+
retainDebugDays: envNonNegativeInt("CLINKX_WORKFLOWS_RETAIN_DEBUG_DAYS", DEFAULT_RETAIN_DEBUG_DAYS),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
149
167
|
/** Persistent workflow state directory. */
|
|
150
168
|
export function getStateDir() {
|
|
151
169
|
const xdgState = process.env["XDG_STATE_HOME"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Council expander — runtime composition override.
|
|
3
|
+
*
|
|
4
|
+
* For the five council workflows, this module rewrites stages of a normalized
|
|
5
|
+
* workflow definition to match caller-supplied overrides:
|
|
6
|
+
* - `members`: rewrites stage 0 (members) and stage 1 (reviewers) to match
|
|
7
|
+
* the member count and cli_name mapping. Stances are applied to stage 0
|
|
8
|
+
* only; stage 1 preserves its default review lens.
|
|
9
|
+
* - `chairman`: overrides the cli_name on the single chairman call (stage 3).
|
|
10
|
+
*
|
|
11
|
+
* The expander operates on **normalized** (template-inlined) definitions and
|
|
12
|
+
* returns a NEW object — the input is never mutated.
|
|
13
|
+
*
|
|
14
|
+
* Tasks: 0-5, 1-1 … 1-8, 2-1 … 2-5
|
|
15
|
+
*/
|
|
16
|
+
import type { NormalizedWorkflowDefinition } from "./definition-normalizer.js";
|
|
17
|
+
export declare const COUNCIL_RUNTIME_MEMBER_WORKFLOWS: Set<string>;
|
|
18
|
+
export declare function supportsRuntimeMembers(workflowName: string): boolean;
|
|
19
|
+
/** All council workflows have exactly 4 stages: members, reviewers, ranking, chairman. */
|
|
20
|
+
export declare const COUNCIL_STAGE_COUNT = 4;
|
|
21
|
+
/**
|
|
22
|
+
* Expand council workflow stages to match caller-supplied composition overrides.
|
|
23
|
+
*
|
|
24
|
+
* - `members`: expand stages 0 (members) and 1 (reviewers) with matching count/cli_names.
|
|
25
|
+
* Stances are applied to stage 0 only.
|
|
26
|
+
* - `chairman`: override cli_name on stage 3's single chairman call.
|
|
27
|
+
*
|
|
28
|
+
* Returns a **new** `NormalizedWorkflowDefinition`; the input is never mutated.
|
|
29
|
+
*/
|
|
30
|
+
export declare function expandCouncilComposition(definition: NormalizedWorkflowDefinition, members: ReadonlyArray<{
|
|
31
|
+
cli_name: string;
|
|
32
|
+
stance?: string;
|
|
33
|
+
}> | undefined, workflowName: string, chairman?: string): NormalizedWorkflowDefinition;
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated Use `expandCouncilComposition()` instead.
|
|
36
|
+
*
|
|
37
|
+
* Legacy wrapper that delegates to the new composition expander with
|
|
38
|
+
* members-only expansion (no chairman override).
|
|
39
|
+
*/
|
|
40
|
+
export declare function expandCouncilFirstStage(definition: NormalizedWorkflowDefinition, members: ReadonlyArray<{
|
|
41
|
+
cli_name: string;
|
|
42
|
+
stance?: string;
|
|
43
|
+
}>, workflowName: string): NormalizedWorkflowDefinition;
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Council expander — runtime composition override.
|
|
3
|
+
*
|
|
4
|
+
* For the five council workflows, this module rewrites stages of a normalized
|
|
5
|
+
* workflow definition to match caller-supplied overrides:
|
|
6
|
+
* - `members`: rewrites stage 0 (members) and stage 1 (reviewers) to match
|
|
7
|
+
* the member count and cli_name mapping. Stances are applied to stage 0
|
|
8
|
+
* only; stage 1 preserves its default review lens.
|
|
9
|
+
* - `chairman`: overrides the cli_name on the single chairman call (stage 3).
|
|
10
|
+
*
|
|
11
|
+
* The expander operates on **normalized** (template-inlined) definitions and
|
|
12
|
+
* returns a NEW object — the input is never mutated.
|
|
13
|
+
*
|
|
14
|
+
* Tasks: 0-5, 1-1 … 1-8, 2-1 … 2-5
|
|
15
|
+
*/
|
|
16
|
+
import { createHash } from "node:crypto";
|
|
17
|
+
import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
18
|
+
import { WorkflowError } from "./errors.js";
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// 0-5: Shared allowlist constant
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
export const COUNCIL_RUNTIME_MEMBER_WORKFLOWS = new Set([
|
|
23
|
+
"council-default",
|
|
24
|
+
"council-answer",
|
|
25
|
+
"council-code-review",
|
|
26
|
+
"council-debug",
|
|
27
|
+
"council-discover",
|
|
28
|
+
]);
|
|
29
|
+
export function supportsRuntimeMembers(workflowName) {
|
|
30
|
+
return COUNCIL_RUNTIME_MEMBER_WORKFLOWS.has(workflowName);
|
|
31
|
+
}
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// 1-3: Suffix alphabet (max 10 members)
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
const SUFFIXES = ["_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j"];
|
|
36
|
+
/** All council workflows have exactly 4 stages: members, reviewers, ranking, chairman. */
|
|
37
|
+
export const COUNCIL_STAGE_COUNT = 4;
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// 2-1: expandStageCalls — reusable stage expansion helper
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/**
|
|
42
|
+
* Expand a single stage's seed calls to match the member count and cli_name mapping.
|
|
43
|
+
*
|
|
44
|
+
* Validates seed invariants (3 calls, _a/_b/_c, structural homogeneity),
|
|
45
|
+
* generates N calls from the blueprint, and optionally applies stance mutations.
|
|
46
|
+
*
|
|
47
|
+
* NOTE: When `applyStances` is false (stage 1 / reviewers), seats beyond _c
|
|
48
|
+
* keep the raw template whose conditional bullets only match _a/_b/_c.
|
|
49
|
+
* This is a known v1 limitation — those seats still get full role instructions.
|
|
50
|
+
*/
|
|
51
|
+
function expandStageCalls(stage, members, workflowName, options) {
|
|
52
|
+
// Seed invariant: exactly 3 calls
|
|
53
|
+
if (stage.calls.length !== 3) {
|
|
54
|
+
throw new WorkflowError(`Council expander: stage "${stage.id}" must have exactly 3 seed calls, found ${stage.calls.length}`);
|
|
55
|
+
}
|
|
56
|
+
const [callA, callB, callC] = stage.calls;
|
|
57
|
+
// Extract prefix from first call ID
|
|
58
|
+
const idA = callA.id;
|
|
59
|
+
const underscoreIdx = idA.lastIndexOf("_");
|
|
60
|
+
if (underscoreIdx === -1) {
|
|
61
|
+
throw new WorkflowError(`Council expander: seed call ID "${idA}" does not contain underscore separator`);
|
|
62
|
+
}
|
|
63
|
+
const prefix = idA.slice(0, underscoreIdx);
|
|
64
|
+
// Assert IDs are prefix_a, prefix_b, prefix_c
|
|
65
|
+
const expectedSuffixes = ["_a", "_b", "_c"];
|
|
66
|
+
const actualIds = [callA.id, callB.id, callC.id];
|
|
67
|
+
const expectedIds = expectedSuffixes.map((s) => prefix + s);
|
|
68
|
+
for (let i = 0; i < 3; i++) {
|
|
69
|
+
if (actualIds[i] !== expectedIds[i]) {
|
|
70
|
+
throw new WorkflowError(`Council expander: seed call IDs must be ${expectedIds.join(", ")} but found ${actualIds.join(", ")}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Structural homogeneity — deep-compare omitting id and cli_name
|
|
74
|
+
const { id: _idA, cli_name: _cnA, ...blueprint } = callA;
|
|
75
|
+
const { id: _idB, cli_name: _cnB, ...restB } = callB;
|
|
76
|
+
const { id: _idC, cli_name: _cnC, ...restC } = callC;
|
|
77
|
+
const divergentB = findDivergentFields(blueprint, restB, "call B");
|
|
78
|
+
if (divergentB.length > 0) {
|
|
79
|
+
throw new WorkflowError(`Council expander: seed calls are not structurally homogeneous in stage "${stage.id}". ` +
|
|
80
|
+
`Call B (id=${callB.id}) diverges on fields: ${divergentB.join(", ")}`);
|
|
81
|
+
}
|
|
82
|
+
const divergentC = findDivergentFields(blueprint, restC, "call C");
|
|
83
|
+
if (divergentC.length > 0) {
|
|
84
|
+
throw new WorkflowError(`Council expander: seed calls are not structurally homogeneous in stage "${stage.id}". ` +
|
|
85
|
+
`Call C (id=${callC.id}) diverges on fields: ${divergentC.join(", ")}`);
|
|
86
|
+
}
|
|
87
|
+
// N-call generation
|
|
88
|
+
const expandedCalls = members.map((member, i) => {
|
|
89
|
+
const suffix = SUFFIXES[i];
|
|
90
|
+
const call = {
|
|
91
|
+
...blueprint,
|
|
92
|
+
id: prefix + suffix,
|
|
93
|
+
cli_name: member.cli_name,
|
|
94
|
+
};
|
|
95
|
+
return call;
|
|
96
|
+
});
|
|
97
|
+
// Stance replacement + hash recomputation (only when applyStances is true)
|
|
98
|
+
if (options.applyStances) {
|
|
99
|
+
for (let i = 0; i < expandedCalls.length; i++) {
|
|
100
|
+
const stance = members[i].stance;
|
|
101
|
+
if (stance == null)
|
|
102
|
+
continue;
|
|
103
|
+
const call = expandedCalls[i];
|
|
104
|
+
const mutated = applyStanceToPrompt(call.prompt, stance, call.id, workflowName);
|
|
105
|
+
call.prompt = mutated;
|
|
106
|
+
call.template_hash = recomputeHash(mutated);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Return new stage (copy-on-write)
|
|
110
|
+
return {
|
|
111
|
+
id: stage.id,
|
|
112
|
+
...(stage.description != null ? { description: stage.description } : {}),
|
|
113
|
+
parallel: stage.parallel,
|
|
114
|
+
retry: stage.retry,
|
|
115
|
+
on_failure: stage.on_failure,
|
|
116
|
+
calls: expandedCalls,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
// 2-2: applyChairmanOverride — single-call cli_name swap
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
function applyChairmanOverride(stage, chairmanCliName) {
|
|
123
|
+
if (stage.calls.length !== 1) {
|
|
124
|
+
throw new WorkflowError(`Council expander: chairman stage "${stage.id}" must have exactly 1 call, found ${stage.calls.length}`);
|
|
125
|
+
}
|
|
126
|
+
const original = stage.calls[0];
|
|
127
|
+
const newCall = {
|
|
128
|
+
...original,
|
|
129
|
+
cli_name: chairmanCliName,
|
|
130
|
+
};
|
|
131
|
+
return {
|
|
132
|
+
id: stage.id,
|
|
133
|
+
...(stage.description != null ? { description: stage.description } : {}),
|
|
134
|
+
parallel: stage.parallel,
|
|
135
|
+
retry: stage.retry,
|
|
136
|
+
on_failure: stage.on_failure,
|
|
137
|
+
calls: [newCall],
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// 2-3: expandCouncilComposition — orchestrates all stage overrides
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
/**
|
|
144
|
+
* Expand council workflow stages to match caller-supplied composition overrides.
|
|
145
|
+
*
|
|
146
|
+
* - `members`: expand stages 0 (members) and 1 (reviewers) with matching count/cli_names.
|
|
147
|
+
* Stances are applied to stage 0 only.
|
|
148
|
+
* - `chairman`: override cli_name on stage 3's single chairman call.
|
|
149
|
+
*
|
|
150
|
+
* Returns a **new** `NormalizedWorkflowDefinition`; the input is never mutated.
|
|
151
|
+
*/
|
|
152
|
+
export function expandCouncilComposition(definition, members, workflowName, chairman) {
|
|
153
|
+
const stages = definition.stages;
|
|
154
|
+
// Defense-in-depth: all council workflows have exactly 4 stages
|
|
155
|
+
if (stages.length !== COUNCIL_STAGE_COUNT) {
|
|
156
|
+
throw new WorkflowError(`Council expander: expected ${COUNCIL_STAGE_COUNT} stages, found ${stages.length}`);
|
|
157
|
+
}
|
|
158
|
+
// Bounds validation for members
|
|
159
|
+
if (members != null && (members.length < 1 || members.length > 10)) {
|
|
160
|
+
throw new McpError(ErrorCode.InvalidParams, `members array must have 1–10 entries, got ${members.length}`);
|
|
161
|
+
}
|
|
162
|
+
// Stage 0 (members) + Stage 1 (reviewers): expand or preserve
|
|
163
|
+
const stage0 = members != null
|
|
164
|
+
? expandStageCalls(stages[0], members, workflowName, { applyStances: true })
|
|
165
|
+
: stages[0];
|
|
166
|
+
const stage1 = members != null
|
|
167
|
+
? expandStageCalls(stages[1], members, workflowName, { applyStances: false })
|
|
168
|
+
: stages[1];
|
|
169
|
+
// Stage 2 (ranking): always preserved by reference
|
|
170
|
+
const stage2 = stages[2];
|
|
171
|
+
// Stage 3 (chairman): override or preserve
|
|
172
|
+
const stage3 = chairman != null
|
|
173
|
+
? applyChairmanOverride(stages[3], chairman)
|
|
174
|
+
: stages[3];
|
|
175
|
+
const result = {
|
|
176
|
+
name: definition.name,
|
|
177
|
+
description: definition.description,
|
|
178
|
+
version: definition.version,
|
|
179
|
+
stages: [stage0, stage1, stage2, stage3],
|
|
180
|
+
variables: definition.variables,
|
|
181
|
+
settings: definition.settings,
|
|
182
|
+
};
|
|
183
|
+
// Post-expansion assertions on expanded stages
|
|
184
|
+
if (members != null) {
|
|
185
|
+
assertExpandedStage(result.stages[0], members.length, "stage 0");
|
|
186
|
+
assertExpandedStage(result.stages[1], members.length, "stage 1");
|
|
187
|
+
}
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Post-expansion assertions for an expanded stage: unique IDs, correct count,
|
|
192
|
+
* and required fields present.
|
|
193
|
+
*/
|
|
194
|
+
function assertExpandedStage(stage, expectedCount, label) {
|
|
195
|
+
const calls = stage.calls;
|
|
196
|
+
// All IDs unique
|
|
197
|
+
const idSet = new Set(calls.map((c) => c.id));
|
|
198
|
+
if (idSet.size !== calls.length) {
|
|
199
|
+
throw new WorkflowError(`Council expander: post-expansion duplicate IDs found in ${label}`);
|
|
200
|
+
}
|
|
201
|
+
// Call count matches expected
|
|
202
|
+
if (calls.length !== expectedCount) {
|
|
203
|
+
throw new WorkflowError(`Council expander: post-expansion call count ${calls.length} != expected ${expectedCount} in ${label}`);
|
|
204
|
+
}
|
|
205
|
+
// Every call has role and validator_schema_id
|
|
206
|
+
for (const c of calls) {
|
|
207
|
+
if (!("role" in c) || c.role == null) {
|
|
208
|
+
throw new WorkflowError(`Council expander: call "${c.id}" is missing required field "role" in ${label}`);
|
|
209
|
+
}
|
|
210
|
+
if (!("validator_schema_id" in c)) {
|
|
211
|
+
throw new WorkflowError(`Council expander: call "${c.id}" is missing field "validator_schema_id" in ${label}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// ---------------------------------------------------------------------------
|
|
216
|
+
// 1-1: Legacy wrapper (deprecated — use expandCouncilComposition instead)
|
|
217
|
+
// ---------------------------------------------------------------------------
|
|
218
|
+
/**
|
|
219
|
+
* @deprecated Use `expandCouncilComposition()` instead.
|
|
220
|
+
*
|
|
221
|
+
* Legacy wrapper that delegates to the new composition expander with
|
|
222
|
+
* members-only expansion (no chairman override).
|
|
223
|
+
*/
|
|
224
|
+
export function expandCouncilFirstStage(definition, members, workflowName) {
|
|
225
|
+
return expandCouncilComposition(definition, members, workflowName);
|
|
226
|
+
}
|
|
227
|
+
// ---------------------------------------------------------------------------
|
|
228
|
+
// Internal helpers
|
|
229
|
+
// ---------------------------------------------------------------------------
|
|
230
|
+
/**
|
|
231
|
+
* Deep-compare two objects that represent NormalizedCall fields (minus id/cli_name).
|
|
232
|
+
* Returns an array of divergent field names.
|
|
233
|
+
*/
|
|
234
|
+
function findDivergentFields(a, b, _label) {
|
|
235
|
+
const divergent = [];
|
|
236
|
+
const allKeys = new Set([...Object.keys(a), ...Object.keys(b)]);
|
|
237
|
+
for (const key of allKeys) {
|
|
238
|
+
const valA = a[key];
|
|
239
|
+
const valB = b[key];
|
|
240
|
+
if (!deepEqual(valA, valB)) {
|
|
241
|
+
divergent.push(key);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return divergent;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Simple deep-equal for JSON-compatible values.
|
|
248
|
+
*/
|
|
249
|
+
function deepEqual(a, b) {
|
|
250
|
+
if (a === b)
|
|
251
|
+
return true;
|
|
252
|
+
if (a == null || b == null)
|
|
253
|
+
return a === b;
|
|
254
|
+
if (typeof a !== typeof b)
|
|
255
|
+
return false;
|
|
256
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
257
|
+
if (a.length !== b.length)
|
|
258
|
+
return false;
|
|
259
|
+
return a.every((v, i) => deepEqual(v, b[i]));
|
|
260
|
+
}
|
|
261
|
+
if (typeof a === "object" && typeof b === "object") {
|
|
262
|
+
const aObj = a;
|
|
263
|
+
const bObj = b;
|
|
264
|
+
const keys = Object.keys(aObj);
|
|
265
|
+
if (keys.length !== Object.keys(bObj).length)
|
|
266
|
+
return false;
|
|
267
|
+
return keys.every((k) => deepEqual(aObj[k], bObj[k]));
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Apply header-bounded stance replacement to a prompt.
|
|
273
|
+
*
|
|
274
|
+
* Finds `## Working Stance` (or `## Review Lens` for code-review), validates
|
|
275
|
+
* structural invariants, then replaces the section body with the stance directive.
|
|
276
|
+
*/
|
|
277
|
+
function applyStanceToPrompt(prompt, stance, callId, workflowName) {
|
|
278
|
+
const lines = prompt.split("\n");
|
|
279
|
+
// Determine which header to look for
|
|
280
|
+
const isCodeReview = workflowName === "council-code-review";
|
|
281
|
+
const targetHeader = isCodeReview ? "## Review Lens" : "## Working Stance";
|
|
282
|
+
// Find all occurrences of the target header
|
|
283
|
+
const headerIndices = [];
|
|
284
|
+
for (let i = 0; i < lines.length; i++) {
|
|
285
|
+
if (lines[i].trimStart().startsWith(targetHeader)) {
|
|
286
|
+
headerIndices.push(i);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Pre-rewrite validation: exactly one header
|
|
290
|
+
if (headerIndices.length === 0) {
|
|
291
|
+
throw new WorkflowError(`Council expander: pre-rewrite validation failed — no "${targetHeader}" section header found in prompt for call "${callId}"`);
|
|
292
|
+
}
|
|
293
|
+
if (headerIndices.length > 1) {
|
|
294
|
+
throw new WorkflowError(`Council expander: pre-rewrite validation failed — ${headerIndices.length} "${targetHeader}" section headers found (exactly one required) in prompt for call "${callId}"`);
|
|
295
|
+
}
|
|
296
|
+
const headerLineIdx = headerIndices[0];
|
|
297
|
+
// Find the next ## header after the target header (or EOF)
|
|
298
|
+
let sectionEndIdx = lines.length; // exclusive
|
|
299
|
+
for (let i = headerLineIdx + 1; i < lines.length; i++) {
|
|
300
|
+
if (lines[i].trimStart().startsWith("## ")) {
|
|
301
|
+
sectionEndIdx = i;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Section body: lines[headerLineIdx+1 .. sectionEndIdx-1]
|
|
306
|
+
const bodyLines = lines.slice(headerLineIdx + 1, sectionEndIdx);
|
|
307
|
+
const bodyText = bodyLines.join("\n");
|
|
308
|
+
// Pre-rewrite validation: {{call.id}} inside the section body
|
|
309
|
+
if (!bodyText.includes("{{call.id}}")) {
|
|
310
|
+
throw new WorkflowError(`Council expander: pre-rewrite validation failed — {{call.id}} not found inside "${targetHeader}" section body for call "${callId}"`);
|
|
311
|
+
}
|
|
312
|
+
// Pre-rewrite validation: at least one _a/_b/_c conditional bullet
|
|
313
|
+
const hasConditionalBullet = /ends in _[abc]:/.test(bodyText);
|
|
314
|
+
if (!hasConditionalBullet) {
|
|
315
|
+
throw new WorkflowError(`Council expander: pre-rewrite validation failed — no _a/_b/_c conditional bullet found in "${targetHeader}" section body for call "${callId}"`);
|
|
316
|
+
}
|
|
317
|
+
// Replacement: preserve header, replace body
|
|
318
|
+
const newBody = `{{call.id}}\n- Optimize your analysis for: ${stance}.`;
|
|
319
|
+
// Reconstruct prompt
|
|
320
|
+
const before = lines.slice(0, headerLineIdx + 1); // includes header line
|
|
321
|
+
const after = lines.slice(sectionEndIdx);
|
|
322
|
+
return [...before, newBody, ...after].join("\n");
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Recompute SHA-256 template hash after prompt mutation.
|
|
326
|
+
*/
|
|
327
|
+
function recomputeHash(prompt) {
|
|
328
|
+
return createHash("sha256").update(prompt, "utf8").digest("hex");
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=council-expander.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"council-expander.js","sourceRoot":"","sources":["../src/council-expander.ts"],"names":[],"mappings":"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"}
|