clinkx 0.1.10 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/clinkx-workflows/dist/artifacts.d.ts +65 -0
  2. package/clinkx-workflows/dist/artifacts.js +268 -0
  3. package/clinkx-workflows/dist/artifacts.js.map +1 -0
  4. package/clinkx-workflows/dist/backend.d.ts +33 -0
  5. package/clinkx-workflows/dist/backend.js +9 -0
  6. package/clinkx-workflows/dist/backend.js.map +1 -0
  7. package/clinkx-workflows/dist/child-env.d.ts +23 -0
  8. package/clinkx-workflows/dist/child-env.js +53 -0
  9. package/clinkx-workflows/dist/child-env.js.map +1 -0
  10. package/clinkx-workflows/dist/clink-client.d.ts +51 -0
  11. package/clinkx-workflows/dist/clink-client.js +216 -0
  12. package/clinkx-workflows/dist/clink-client.js.map +1 -0
  13. package/clinkx-workflows/dist/config.d.ts +126 -0
  14. package/clinkx-workflows/dist/config.js +226 -0
  15. package/clinkx-workflows/dist/config.js.map +1 -0
  16. package/clinkx-workflows/dist/definition-normalizer.d.ts +59 -0
  17. package/clinkx-workflows/dist/definition-normalizer.js +75 -0
  18. package/clinkx-workflows/dist/definition-normalizer.js.map +1 -0
  19. package/clinkx-workflows/dist/engine.d.ts +235 -0
  20. package/clinkx-workflows/dist/engine.js +1044 -0
  21. package/clinkx-workflows/dist/engine.js.map +1 -0
  22. package/clinkx-workflows/dist/errors.d.ts +74 -0
  23. package/clinkx-workflows/dist/errors.js +84 -0
  24. package/clinkx-workflows/dist/errors.js.map +1 -0
  25. package/clinkx-workflows/dist/fidelity.d.ts +112 -0
  26. package/clinkx-workflows/dist/fidelity.js +140 -0
  27. package/clinkx-workflows/dist/fidelity.js.map +1 -0
  28. package/clinkx-workflows/dist/fingerprint.d.ts +69 -0
  29. package/clinkx-workflows/dist/fingerprint.js +143 -0
  30. package/clinkx-workflows/dist/fingerprint.js.map +1 -0
  31. package/clinkx-workflows/dist/index.d.ts +16 -0
  32. package/clinkx-workflows/dist/index.js +42 -0
  33. package/clinkx-workflows/dist/index.js.map +1 -0
  34. package/clinkx-workflows/dist/loader.d.ts +64 -0
  35. package/clinkx-workflows/dist/loader.js +371 -0
  36. package/clinkx-workflows/dist/loader.js.map +1 -0
  37. package/clinkx-workflows/dist/logger.d.ts +16 -0
  38. package/clinkx-workflows/dist/logger.js +31 -0
  39. package/clinkx-workflows/dist/logger.js.map +1 -0
  40. package/clinkx-workflows/dist/path-validation.d.ts +23 -0
  41. package/clinkx-workflows/dist/path-validation.js +73 -0
  42. package/clinkx-workflows/dist/path-validation.js.map +1 -0
  43. package/clinkx-workflows/dist/prompt-budget.d.ts +31 -0
  44. package/clinkx-workflows/dist/prompt-budget.js +78 -0
  45. package/clinkx-workflows/dist/prompt-budget.js.map +1 -0
  46. package/clinkx-workflows/dist/queue.d.ts +16 -0
  47. package/clinkx-workflows/dist/queue.js +46 -0
  48. package/clinkx-workflows/dist/queue.js.map +1 -0
  49. package/clinkx-workflows/dist/ranking-reducer.d.ts +11 -0
  50. package/clinkx-workflows/dist/ranking-reducer.js +245 -0
  51. package/clinkx-workflows/dist/ranking-reducer.js.map +1 -0
  52. package/clinkx-workflows/dist/reducers/index.d.ts +8 -0
  53. package/clinkx-workflows/dist/reducers/index.js +12 -0
  54. package/clinkx-workflows/dist/reducers/index.js.map +1 -0
  55. package/clinkx-workflows/dist/run-id.d.ts +17 -0
  56. package/clinkx-workflows/dist/run-id.js +26 -0
  57. package/clinkx-workflows/dist/run-id.js.map +1 -0
  58. package/clinkx-workflows/dist/run-summary/cards/council-answer.d.ts +8 -0
  59. package/clinkx-workflows/dist/run-summary/cards/council-answer.js +75 -0
  60. package/clinkx-workflows/dist/run-summary/cards/council-answer.js.map +1 -0
  61. package/clinkx-workflows/dist/run-summary/cards/council-code-review.d.ts +13 -0
  62. package/clinkx-workflows/dist/run-summary/cards/council-code-review.js +90 -0
  63. package/clinkx-workflows/dist/run-summary/cards/council-code-review.js.map +1 -0
  64. package/clinkx-workflows/dist/run-summary/cards/council-debug.d.ts +9 -0
  65. package/clinkx-workflows/dist/run-summary/cards/council-debug.js +79 -0
  66. package/clinkx-workflows/dist/run-summary/cards/council-debug.js.map +1 -0
  67. package/clinkx-workflows/dist/run-summary/cards/council-default.d.ts +11 -0
  68. package/clinkx-workflows/dist/run-summary/cards/council-default.js +57 -0
  69. package/clinkx-workflows/dist/run-summary/cards/council-default.js.map +1 -0
  70. package/clinkx-workflows/dist/run-summary/cards/council-discover.d.ts +10 -0
  71. package/clinkx-workflows/dist/run-summary/cards/council-discover.js +79 -0
  72. package/clinkx-workflows/dist/run-summary/cards/council-discover.js.map +1 -0
  73. package/clinkx-workflows/dist/run-summary/cards/generic.d.ts +2 -0
  74. package/clinkx-workflows/dist/run-summary/cards/generic.js +4 -0
  75. package/clinkx-workflows/dist/run-summary/cards/generic.js.map +1 -0
  76. package/clinkx-workflows/dist/run-summary/cards/index.d.ts +6 -0
  77. package/clinkx-workflows/dist/run-summary/cards/index.js +17 -0
  78. package/clinkx-workflows/dist/run-summary/cards/index.js.map +1 -0
  79. package/clinkx-workflows/dist/run-summary/utils.d.ts +6 -0
  80. package/clinkx-workflows/dist/run-summary/utils.js +30 -0
  81. package/clinkx-workflows/dist/run-summary/utils.js.map +1 -0
  82. package/clinkx-workflows/dist/run-summary-derived.d.ts +19 -0
  83. package/clinkx-workflows/dist/run-summary-derived.js +100 -0
  84. package/clinkx-workflows/dist/run-summary-derived.js.map +1 -0
  85. package/clinkx-workflows/dist/run-summary.d.ts +70 -0
  86. package/clinkx-workflows/dist/run-summary.js +125 -0
  87. package/clinkx-workflows/dist/run-summary.js.map +1 -0
  88. package/clinkx-workflows/dist/schema.d.ts +609 -0
  89. package/clinkx-workflows/dist/schema.js +123 -0
  90. package/clinkx-workflows/dist/schema.js.map +1 -0
  91. package/clinkx-workflows/dist/server.d.ts +16 -0
  92. package/clinkx-workflows/dist/server.js +33 -0
  93. package/clinkx-workflows/dist/server.js.map +1 -0
  94. package/clinkx-workflows/dist/shutdown.d.ts +54 -0
  95. package/clinkx-workflows/dist/shutdown.js +120 -0
  96. package/clinkx-workflows/dist/shutdown.js.map +1 -0
  97. package/clinkx-workflows/dist/state-schema.d.ts +141 -0
  98. package/clinkx-workflows/dist/state-schema.js +21 -0
  99. package/clinkx-workflows/dist/state-schema.js.map +1 -0
  100. package/clinkx-workflows/dist/state.d.ts +37 -0
  101. package/clinkx-workflows/dist/state.js +838 -0
  102. package/clinkx-workflows/dist/state.js.map +1 -0
  103. package/clinkx-workflows/dist/template-loader.d.ts +30 -0
  104. package/clinkx-workflows/dist/template-loader.js +77 -0
  105. package/clinkx-workflows/dist/template-loader.js.map +1 -0
  106. package/clinkx-workflows/dist/template.d.ts +54 -0
  107. package/clinkx-workflows/dist/template.js +128 -0
  108. package/clinkx-workflows/dist/template.js.map +1 -0
  109. package/clinkx-workflows/dist/transport.d.ts +91 -0
  110. package/clinkx-workflows/dist/transport.js +249 -0
  111. package/clinkx-workflows/dist/transport.js.map +1 -0
  112. package/clinkx-workflows/dist/types.d.ts +137 -0
  113. package/clinkx-workflows/dist/types.js +11 -0
  114. package/clinkx-workflows/dist/types.js.map +1 -0
  115. package/clinkx-workflows/dist/validators/council.d.ts +1488 -0
  116. package/clinkx-workflows/dist/validators/council.js +509 -0
  117. package/clinkx-workflows/dist/validators/council.js.map +1 -0
  118. package/clinkx-workflows/dist/validators/index.d.ts +40 -0
  119. package/clinkx-workflows/dist/validators/index.js +43 -0
  120. package/clinkx-workflows/dist/validators/index.js.map +1 -0
  121. package/clinkx-workflows/dist/workflow-receipt.d.ts +4 -0
  122. package/clinkx-workflows/dist/workflow-receipt.js +177 -0
  123. package/clinkx-workflows/dist/workflow-receipt.js.map +1 -0
  124. package/clinkx-workflows/dist/workflow-tools.d.ts +77 -0
  125. package/clinkx-workflows/dist/workflow-tools.js +1131 -0
  126. package/clinkx-workflows/dist/workflow-tools.js.map +1 -0
  127. package/clinkx-workflows/dist/workflows/council-default.d.ts +123 -0
  128. package/clinkx-workflows/dist/workflows/council-default.js +141 -0
  129. package/clinkx-workflows/dist/workflows/council-default.js.map +1 -0
  130. package/clinkx-workflows/dist/workflows/index.d.ts +12 -0
  131. package/clinkx-workflows/dist/workflows/index.js +15 -0
  132. package/clinkx-workflows/dist/workflows/index.js.map +1 -0
  133. package/conf/adapters/claude.json +13 -1
  134. package/conf/adapters/codex.json +11 -2
  135. package/conf/adapters/gemini.json +9 -0
  136. package/conf/adapters/glm.json +10 -0
  137. package/conf/adapters/hapi/claude.json +12 -2
  138. package/conf/adapters/hapi/codex.json +11 -2
  139. package/conf/adapters/hapi/gemini.json +9 -0
  140. package/conf/adapters/hapi/glm.json +10 -0
  141. package/conf/prompts/json-codereviewer.txt +6 -0
  142. package/conf/prompts/json-debug.txt +5 -0
  143. package/conf/prompts/json-default.txt +5 -0
  144. package/conf/prompts/json.txt +4 -1
  145. package/dist/config.d.ts +29 -4
  146. package/dist/config.js +23 -3
  147. package/dist/config.js.map +1 -1
  148. package/dist/handler.d.ts +2 -0
  149. package/dist/handler.js +2 -1
  150. package/dist/handler.js.map +1 -1
  151. package/dist/local-clink-backend.d.ts +30 -0
  152. package/dist/local-clink-backend.js +106 -0
  153. package/dist/local-clink-backend.js.map +1 -0
  154. package/dist/parsers/claude-stream-json.d.ts +1 -1
  155. package/dist/parsers/claude-stream-json.js +26 -8
  156. package/dist/parsers/claude-stream-json.js.map +1 -1
  157. package/dist/parsers/extract.d.ts +2 -0
  158. package/dist/parsers/extract.js +46 -20
  159. package/dist/parsers/extract.js.map +1 -1
  160. package/dist/pipeline.d.ts +2 -4
  161. package/dist/pipeline.js +246 -31
  162. package/dist/pipeline.js.map +1 -1
  163. package/dist/prompt.js +8 -1
  164. package/dist/prompt.js.map +1 -1
  165. package/dist/registry.d.ts +4 -0
  166. package/dist/registry.js +14 -0
  167. package/dist/registry.js.map +1 -1
  168. package/dist/result-contract.d.ts +6 -1
  169. package/dist/result-contract.js +10 -22
  170. package/dist/result-contract.js.map +1 -1
  171. package/dist/runner.js +59 -12
  172. package/dist/runner.js.map +1 -1
  173. package/dist/schema.d.ts +20 -0
  174. package/dist/schema.js +29 -2
  175. package/dist/schema.js.map +1 -1
  176. package/dist/server.d.ts +3 -3
  177. package/dist/server.js +119 -45
  178. package/dist/server.js.map +1 -1
  179. package/package.json +12 -5
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Reducer registry for deterministic built-in call functions.
3
+ *
4
+ * Reducers run in place of LLM calls when a call specifies a `reducer` ID.
5
+ */
6
+ import { councilRankingReducer } from "../ranking-reducer.js";
7
+ const registry = new Map();
8
+ registry.set("council_ranking_v1", councilRankingReducer);
9
+ export function getReducer(id) {
10
+ return registry.get(id);
11
+ }
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reducers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;AAC9C,QAAQ,CAAC,GAAG,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC;AAE1D,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Run ID validation for clinkx-workflows.
3
+ *
4
+ * Grammar: [A-Za-z0-9_-]{1,64}
5
+ * Reject anything else with -32602 semantics.
6
+ * Reuse goes through resume_workflow, not run_workflow.
7
+ */
8
+ /**
9
+ * Validate a run_id against the allowed grammar.
10
+ * Returns true if the run_id is valid.
11
+ */
12
+ export declare function isValidRunId(runId: string): boolean;
13
+ /**
14
+ * Validate a run_id, throwing a descriptive error if invalid.
15
+ * Returns the validated run_id for chaining.
16
+ */
17
+ export declare function validateRunId(runId: string): string;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Run ID validation for clinkx-workflows.
3
+ *
4
+ * Grammar: [A-Za-z0-9_-]{1,64}
5
+ * Reject anything else with -32602 semantics.
6
+ * Reuse goes through resume_workflow, not run_workflow.
7
+ */
8
+ const RUN_ID_REGEX = /^[A-Za-z0-9_-]{1,64}$/;
9
+ /**
10
+ * Validate a run_id against the allowed grammar.
11
+ * Returns true if the run_id is valid.
12
+ */
13
+ export function isValidRunId(runId) {
14
+ return RUN_ID_REGEX.test(runId);
15
+ }
16
+ /**
17
+ * Validate a run_id, throwing a descriptive error if invalid.
18
+ * Returns the validated run_id for chaining.
19
+ */
20
+ export function validateRunId(runId) {
21
+ if (!isValidRunId(runId)) {
22
+ throw new Error(`Invalid run_id "${runId}". Must match [A-Za-z0-9_-]{1,64}.`);
23
+ }
24
+ return runId;
25
+ }
26
+ //# sourceMappingURL=run-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-id.js","sourceRoot":"","sources":["../src/run-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,mBAAmB,KAAK,oCAAoC,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Card extractor for council-answer workflows.
3
+ *
4
+ * Reads chairman confidence and specialist caveats from stageCallArtifacts.
5
+ * Deduplicates caveats across all specialist calls.
6
+ */
7
+ import type { RunSummaryCardV1 } from "../../run-summary.js";
8
+ export declare function extractCouncilAnswerCard(stageCallArtifacts: Map<string, Map<string, unknown>>): RunSummaryCardV1;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Card extractor for council-answer workflows.
3
+ *
4
+ * Reads chairman confidence and specialist caveats from stageCallArtifacts.
5
+ * Deduplicates caveats across all specialist calls.
6
+ */
7
+ function normalize(s) {
8
+ return s.toLowerCase().trim();
9
+ }
10
+ function dedupeStrings(items, limit) {
11
+ const seen = new Set();
12
+ const result = [];
13
+ for (const item of items) {
14
+ const key = normalize(item);
15
+ if (key && !seen.has(key)) {
16
+ seen.add(key);
17
+ result.push(item);
18
+ if (result.length >= limit)
19
+ break;
20
+ }
21
+ }
22
+ return result;
23
+ }
24
+ function isRecord(v) {
25
+ return typeof v === "object" && v !== null && !Array.isArray(v);
26
+ }
27
+ export function extractCouncilAnswerCard(stageCallArtifacts) {
28
+ // --- Specialist caveats ---
29
+ const specialistsStage = stageCallArtifacts.get("specialists");
30
+ if (!specialistsStage)
31
+ return { kind: "generic" };
32
+ const allCaveats = [];
33
+ let hasValidSpecialist = false;
34
+ for (const artifact of specialistsStage.values()) {
35
+ if (!isRecord(artifact))
36
+ continue;
37
+ if (Array.isArray(artifact.caveats)) {
38
+ for (const c of artifact.caveats) {
39
+ if (typeof c === "string")
40
+ allCaveats.push(c);
41
+ }
42
+ }
43
+ hasValidSpecialist = true;
44
+ }
45
+ if (!hasValidSpecialist)
46
+ return { kind: "generic" };
47
+ // --- Chairman confidence ---
48
+ let confidence;
49
+ const chairmanStage = stageCallArtifacts.get("chairman");
50
+ if (chairmanStage) {
51
+ for (const artifact of chairmanStage.values()) {
52
+ if (isRecord(artifact) && typeof artifact.confidence === "number") {
53
+ confidence = artifact.confidence;
54
+ break;
55
+ }
56
+ }
57
+ }
58
+ // Dedupe all caveats — full list for count, top 3 for display
59
+ const seen = new Set();
60
+ const uniqueCaveats = [];
61
+ for (const c of allCaveats) {
62
+ const key = normalize(c);
63
+ if (key && !seen.has(key)) {
64
+ seen.add(key);
65
+ uniqueCaveats.push(c);
66
+ }
67
+ }
68
+ return {
69
+ kind: "council-answer",
70
+ caveatCount: uniqueCaveats.length,
71
+ topCaveats: uniqueCaveats.slice(0, 3),
72
+ ...(confidence !== undefined ? { confidence } : {}),
73
+ };
74
+ }
75
+ //# sourceMappingURL=council-answer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"council-answer.js","sourceRoot":"","sources":["../../../src/run-summary/cards/council-answer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { RunSummaryCardV1 } from "../../run-summary.js";
2
+ /**
3
+ * Extract a council-code-review card from chairman + reviewers stage artifacts.
4
+ *
5
+ * Chairman artifact fields (CouncilCodeReviewChairmanOutputSchema):
6
+ * status, confidence, tests_to_add_or_update
7
+ *
8
+ * Reviewer artifact fields (CouncilCodeReviewReviewerOutputSchema):
9
+ * blocking_issues[], non_blocking_suggestions[], tests_to_add_or_update[]
10
+ *
11
+ * Tests are deduped across all outputs using normalized string comparison.
12
+ */
13
+ export declare function extractCouncilCodeReviewCard(stageCallArtifacts: Map<string, Map<string, unknown>>): RunSummaryCardV1;
@@ -0,0 +1,90 @@
1
+ function firstValue(map) {
2
+ const first = map.values().next();
3
+ return first.done ? undefined : first.value;
4
+ }
5
+ const VALID_STATUSES = new Set(["approved", "revise", "reject"]);
6
+ /**
7
+ * Extract a council-code-review card from chairman + reviewers stage artifacts.
8
+ *
9
+ * Chairman artifact fields (CouncilCodeReviewChairmanOutputSchema):
10
+ * status, confidence, tests_to_add_or_update
11
+ *
12
+ * Reviewer artifact fields (CouncilCodeReviewReviewerOutputSchema):
13
+ * blocking_issues[], non_blocking_suggestions[], tests_to_add_or_update[]
14
+ *
15
+ * Tests are deduped across all outputs using normalized string comparison.
16
+ */
17
+ export function extractCouncilCodeReviewCard(stageCallArtifacts) {
18
+ const chairmanCalls = stageCallArtifacts.get("chairman");
19
+ if (!chairmanCalls)
20
+ return { kind: "generic" };
21
+ const chairmanArtifact = firstValue(chairmanCalls);
22
+ if (!chairmanArtifact || typeof chairmanArtifact !== "object")
23
+ return { kind: "generic" };
24
+ const parsed = chairmanArtifact;
25
+ // Validate status — required for a meaningful card
26
+ const rawStatus = parsed["status"];
27
+ if (typeof rawStatus !== "string" || !VALID_STATUSES.has(rawStatus)) {
28
+ return { kind: "generic" };
29
+ }
30
+ const status = rawStatus;
31
+ const confidence = typeof parsed["confidence"] === "number" ? parsed["confidence"] : undefined;
32
+ // Aggregate blocking/non-blocking counts from reviewers stage
33
+ let blockingCount = 0;
34
+ let nonBlockingCount = 0;
35
+ const topBlockingIssues = [];
36
+ const reviewerCalls = stageCallArtifacts.get("reviewers");
37
+ if (reviewerCalls) {
38
+ for (const artifact of reviewerCalls.values()) {
39
+ if (!artifact || typeof artifact !== "object")
40
+ continue;
41
+ const rev = artifact;
42
+ if (Array.isArray(rev["blocking_issues"])) {
43
+ blockingCount += rev["blocking_issues"].length;
44
+ for (const issue of rev["blocking_issues"]) {
45
+ if (topBlockingIssues.length >= 3)
46
+ break;
47
+ if (issue && typeof issue === "object") {
48
+ const desc = issue["description"];
49
+ if (typeof desc === "string") {
50
+ topBlockingIssues.push(desc);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ if (Array.isArray(rev["non_blocking_suggestions"])) {
56
+ nonBlockingCount += rev["non_blocking_suggestions"].length;
57
+ }
58
+ }
59
+ }
60
+ // Dedupe tests_to_add_or_update across chairman and all reviewers
61
+ const testsNormalized = new Set();
62
+ const collectTests = (obj) => {
63
+ const tests = obj["tests_to_add_or_update"];
64
+ if (!Array.isArray(tests))
65
+ return;
66
+ for (const t of tests) {
67
+ if (typeof t === "string") {
68
+ testsNormalized.add(t.toLowerCase().trim());
69
+ }
70
+ }
71
+ };
72
+ collectTests(parsed);
73
+ if (reviewerCalls) {
74
+ for (const artifact of reviewerCalls.values()) {
75
+ if (artifact && typeof artifact === "object") {
76
+ collectTests(artifact);
77
+ }
78
+ }
79
+ }
80
+ return {
81
+ kind: "council-code-review",
82
+ status,
83
+ blockingCount,
84
+ nonBlockingCount,
85
+ testsCount: testsNormalized.size,
86
+ topBlockingIssues,
87
+ ...(confidence !== undefined ? { confidence } : {}),
88
+ };
89
+ }
90
+ //# sourceMappingURL=council-code-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"council-code-review.js","sourceRoot":"","sources":["../../../src/run-summary/cards/council-code-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Card extractor for council-debug workflows.
3
+ *
4
+ * Reads chairman confidence and debugger hypotheses/risk_levels from
5
+ * stageCallArtifacts, deduplicates hypotheses, and selects the highest
6
+ * risk_level across all debugger fix_proposals.
7
+ */
8
+ import type { RunSummaryCardV1 } from "../../run-summary.js";
9
+ export declare function extractCouncilDebugCard(stageCallArtifacts: Map<string, Map<string, unknown>>): RunSummaryCardV1;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Card extractor for council-debug workflows.
3
+ *
4
+ * Reads chairman confidence and debugger hypotheses/risk_levels from
5
+ * stageCallArtifacts, deduplicates hypotheses, and selects the highest
6
+ * risk_level across all debugger fix_proposals.
7
+ */
8
+ const RISK_RANK = { low: 0, medium: 1, high: 2 };
9
+ const RISK_LABELS = ["low", "medium", "high"];
10
+ function normalize(s) {
11
+ return s.toLowerCase().trim();
12
+ }
13
+ function dedupeStrings(items, limit) {
14
+ const seen = new Set();
15
+ const result = [];
16
+ for (const item of items) {
17
+ const key = normalize(item);
18
+ if (key && !seen.has(key)) {
19
+ seen.add(key);
20
+ result.push(item);
21
+ if (result.length >= limit)
22
+ break;
23
+ }
24
+ }
25
+ return result;
26
+ }
27
+ function isRecord(v) {
28
+ return typeof v === "object" && v !== null && !Array.isArray(v);
29
+ }
30
+ export function extractCouncilDebugCard(stageCallArtifacts) {
31
+ // --- Debugger hypotheses + risk levels ---
32
+ const debuggersStage = stageCallArtifacts.get("debuggers");
33
+ if (!debuggersStage)
34
+ return { kind: "generic" };
35
+ const allHypotheses = [];
36
+ let highestRisk = -1;
37
+ let hasValidDebugger = false;
38
+ for (const artifact of debuggersStage.values()) {
39
+ if (!isRecord(artifact))
40
+ continue;
41
+ if (Array.isArray(artifact.hypotheses)) {
42
+ for (const h of artifact.hypotheses) {
43
+ if (typeof h === "string")
44
+ allHypotheses.push(h);
45
+ }
46
+ }
47
+ if (isRecord(artifact.fix_proposal)) {
48
+ const rl = artifact.fix_proposal.risk_level;
49
+ if (typeof rl === "string" && rl in RISK_RANK) {
50
+ const riskVal = RISK_RANK[rl];
51
+ if (riskVal > highestRisk)
52
+ highestRisk = riskVal;
53
+ }
54
+ }
55
+ hasValidDebugger = true;
56
+ }
57
+ if (!hasValidDebugger)
58
+ return { kind: "generic" };
59
+ // --- Chairman confidence ---
60
+ let confidence;
61
+ const chairmanStage = stageCallArtifacts.get("chairman");
62
+ if (chairmanStage) {
63
+ for (const artifact of chairmanStage.values()) {
64
+ if (isRecord(artifact) && typeof artifact.confidence === "number") {
65
+ confidence = artifact.confidence;
66
+ break;
67
+ }
68
+ }
69
+ }
70
+ const topHypotheses = dedupeStrings(allHypotheses, 3);
71
+ const riskLevel = highestRisk >= 0 ? RISK_LABELS[highestRisk] : undefined;
72
+ return {
73
+ kind: "council-debug",
74
+ topHypotheses,
75
+ ...(confidence !== undefined ? { confidence } : {}),
76
+ ...(riskLevel !== undefined ? { riskLevel } : {}),
77
+ };
78
+ }
79
+ //# sourceMappingURL=council-debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"council-debug.js","sourceRoot":"","sources":["../../../src/run-summary/cards/council-debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { RunSummaryCardV1 } from "../../run-summary.js";
2
+ /**
3
+ * Extract a council-default card from chairman + ranking_analysis stage artifacts.
4
+ *
5
+ * Chairman artifact fields (CouncilChairmanOutputSchema):
6
+ * confidence, selected_approach, council_summary.{agreements, disagreements}
7
+ *
8
+ * Ranking analysis artifact fields (CouncilRankingReducerOutputSchema):
9
+ * consensus_ranking[].candidate_id
10
+ */
11
+ export declare function extractCouncilDefaultCard(stageCallArtifacts: Map<string, Map<string, unknown>>): RunSummaryCardV1;
@@ -0,0 +1,57 @@
1
+ function firstValue(map) {
2
+ const first = map.values().next();
3
+ return first.done ? undefined : first.value;
4
+ }
5
+ /**
6
+ * Extract a council-default card from chairman + ranking_analysis stage artifacts.
7
+ *
8
+ * Chairman artifact fields (CouncilChairmanOutputSchema):
9
+ * confidence, selected_approach, council_summary.{agreements, disagreements}
10
+ *
11
+ * Ranking analysis artifact fields (CouncilRankingReducerOutputSchema):
12
+ * consensus_ranking[].candidate_id
13
+ */
14
+ export function extractCouncilDefaultCard(stageCallArtifacts) {
15
+ const chairmanCalls = stageCallArtifacts.get("chairman");
16
+ if (!chairmanCalls)
17
+ return { kind: "generic" };
18
+ const chairmanArtifact = firstValue(chairmanCalls);
19
+ if (!chairmanArtifact || typeof chairmanArtifact !== "object")
20
+ return { kind: "generic" };
21
+ const parsed = chairmanArtifact;
22
+ const confidence = typeof parsed["confidence"] === "number" ? parsed["confidence"] : undefined;
23
+ const selectedApproach = typeof parsed["selected_approach"] === "string" ? parsed["selected_approach"] : undefined;
24
+ const rawSummary = parsed["council_summary"];
25
+ let agreements = 0;
26
+ let disagreements = 0;
27
+ if (rawSummary && typeof rawSummary === "object") {
28
+ const summary = rawSummary;
29
+ agreements = Array.isArray(summary["agreements"]) ? summary["agreements"].length : 0;
30
+ disagreements = Array.isArray(summary["disagreements"]) ? summary["disagreements"].length : 0;
31
+ }
32
+ // Extract topConsensus from ranking_analysis stage
33
+ let topConsensus;
34
+ const rankingCalls = stageCallArtifacts.get("ranking_analysis");
35
+ if (rankingCalls) {
36
+ const rankingArtifact = firstValue(rankingCalls);
37
+ if (rankingArtifact && typeof rankingArtifact === "object") {
38
+ const rankingParsed = rankingArtifact;
39
+ const consensusRanking = rankingParsed["consensus_ranking"];
40
+ if (Array.isArray(consensusRanking) && consensusRanking.length > 0) {
41
+ const first = consensusRanking[0];
42
+ if (first && typeof first["candidate_id"] === "string") {
43
+ topConsensus = first["candidate_id"];
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return {
49
+ kind: "council-default",
50
+ agreements,
51
+ disagreements,
52
+ ...(confidence !== undefined ? { confidence } : {}),
53
+ ...(selectedApproach !== undefined ? { selectedApproach } : {}),
54
+ ...(topConsensus !== undefined ? { topConsensus } : {}),
55
+ };
56
+ }
57
+ //# sourceMappingURL=council-default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"council-default.js","sourceRoot":"","sources":["../../../src/run-summary/cards/council-default.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Card extractor for council-discover workflows.
3
+ *
4
+ * Reads chairman confidence and analyst findings/open_questions from
5
+ * stageCallArtifacts. Findings are objects ({topic, detail, ...}) —
6
+ * we extract the topic string for card display. Deduplicates findings
7
+ * and open_questions across all analyst calls.
8
+ */
9
+ import type { RunSummaryCardV1 } from "../../run-summary.js";
10
+ export declare function extractCouncilDiscoverCard(stageCallArtifacts: Map<string, Map<string, unknown>>): RunSummaryCardV1;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Card extractor for council-discover workflows.
3
+ *
4
+ * Reads chairman confidence and analyst findings/open_questions from
5
+ * stageCallArtifacts. Findings are objects ({topic, detail, ...}) —
6
+ * we extract the topic string for card display. Deduplicates findings
7
+ * and open_questions across all analyst calls.
8
+ */
9
+ function normalize(s) {
10
+ return s.toLowerCase().trim();
11
+ }
12
+ function dedupeStrings(items, limit) {
13
+ const seen = new Set();
14
+ const result = [];
15
+ for (const item of items) {
16
+ const key = normalize(item);
17
+ if (key && !seen.has(key)) {
18
+ seen.add(key);
19
+ result.push(item);
20
+ if (result.length >= limit)
21
+ break;
22
+ }
23
+ }
24
+ return result;
25
+ }
26
+ function isRecord(v) {
27
+ return typeof v === "object" && v !== null && !Array.isArray(v);
28
+ }
29
+ export function extractCouncilDiscoverCard(stageCallArtifacts) {
30
+ // --- Analyst findings + open questions ---
31
+ const analystsStage = stageCallArtifacts.get("analysts");
32
+ if (!analystsStage)
33
+ return { kind: "generic" };
34
+ const allFindingTopics = [];
35
+ const allOpenQuestions = [];
36
+ let hasValidAnalyst = false;
37
+ for (const artifact of analystsStage.values()) {
38
+ if (!isRecord(artifact))
39
+ continue;
40
+ if (Array.isArray(artifact.findings)) {
41
+ for (const f of artifact.findings) {
42
+ // findings are objects with a topic field per CouncilDiscoverAnalystOutputSchema
43
+ if (isRecord(f) && typeof f.topic === "string") {
44
+ allFindingTopics.push(f.topic);
45
+ }
46
+ }
47
+ }
48
+ if (Array.isArray(artifact.open_questions)) {
49
+ for (const q of artifact.open_questions) {
50
+ if (typeof q === "string")
51
+ allOpenQuestions.push(q);
52
+ }
53
+ }
54
+ hasValidAnalyst = true;
55
+ }
56
+ if (!hasValidAnalyst)
57
+ return { kind: "generic" };
58
+ // --- Chairman confidence ---
59
+ let confidence;
60
+ const chairmanStage = stageCallArtifacts.get("chairman");
61
+ if (chairmanStage) {
62
+ for (const artifact of chairmanStage.values()) {
63
+ if (isRecord(artifact) && typeof artifact.confidence === "number") {
64
+ confidence = artifact.confidence;
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ const topFindings = dedupeStrings(allFindingTopics, 3);
70
+ // Dedupe open questions to get unique count
71
+ const uniqueQuestions = new Set(allOpenQuestions.map(normalize));
72
+ return {
73
+ kind: "council-discover",
74
+ topFindings,
75
+ openQuestionCount: uniqueQuestions.size,
76
+ ...(confidence !== undefined ? { confidence } : {}),
77
+ };
78
+ }
79
+ //# sourceMappingURL=council-discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"council-discover.js","sourceRoot":"","sources":["../../../src/run-summary/cards/council-discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { RunSummaryCardV1 } from "../../run-summary.js";
2
+ export declare function extractGenericCard(): RunSummaryCardV1;
@@ -0,0 +1,4 @@
1
+ export function extractGenericCard() {
2
+ return { kind: "generic" };
3
+ }
4
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../../src/run-summary/cards/generic.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { RunSummaryCardV1 } from "../../run-summary.js";
2
+ export interface CardExtractionInput {
3
+ definitionName: string;
4
+ stageCallArtifacts: Map<string, Map<string, unknown>>;
5
+ }
6
+ export declare function extractCard(input: CardExtractionInput): RunSummaryCardV1;
@@ -0,0 +1,17 @@
1
+ import { extractCouncilDefaultCard } from "./council-default.js";
2
+ import { extractCouncilCodeReviewCard } from "./council-code-review.js";
3
+ import { extractCouncilDebugCard } from "./council-debug.js";
4
+ import { extractCouncilDiscoverCard } from "./council-discover.js";
5
+ import { extractCouncilAnswerCard } from "./council-answer.js";
6
+ import { extractGenericCard } from "./generic.js";
7
+ export function extractCard(input) {
8
+ switch (input.definitionName) {
9
+ case "council-default": return extractCouncilDefaultCard(input.stageCallArtifacts);
10
+ case "council-code-review": return extractCouncilCodeReviewCard(input.stageCallArtifacts);
11
+ case "council-debug": return extractCouncilDebugCard(input.stageCallArtifacts);
12
+ case "council-discover": return extractCouncilDiscoverCard(input.stageCallArtifacts);
13
+ case "council-answer": return extractCouncilAnswerCard(input.stageCallArtifacts);
14
+ default: return extractGenericCard();
15
+ }
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/run-summary/cards/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOlD,MAAM,UAAU,WAAW,CAAC,KAA0B;IACpD,QAAQ,KAAK,CAAC,cAAc,EAAE,CAAC;QAC7B,KAAK,iBAAiB,CAAC,CAAC,OAAO,yBAAyB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACnF,KAAK,qBAAqB,CAAC,CAAC,OAAO,4BAA4B,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1F,KAAK,eAAe,CAAC,CAAC,OAAO,uBAAuB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/E,KAAK,kBAAkB,CAAC,CAAC,OAAO,0BAA0B,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrF,KAAK,gBAAgB,CAAC,CAAC,OAAO,wBAAwB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjF,OAAO,CAAC,CAAC,OAAO,kBAAkB,EAAE,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function normalizeSummaryKey(value: string): string;
2
+ export declare function collapseDuplicateStrings(values: readonly string[]): Array<{
3
+ text: string;
4
+ count: number;
5
+ }>;
6
+ export declare function dedupeNamedItems<T>(items: readonly T[], keyFn: (item: T) => string): T[];
@@ -0,0 +1,30 @@
1
+ export function normalizeSummaryKey(value) {
2
+ return value.trim().toLowerCase().replace(/\s+/g, " ");
3
+ }
4
+ export function collapseDuplicateStrings(values) {
5
+ const counts = new Map();
6
+ for (const value of values) {
7
+ const key = normalizeSummaryKey(value);
8
+ const existing = counts.get(key);
9
+ if (existing != null) {
10
+ existing.count += 1;
11
+ continue;
12
+ }
13
+ counts.set(key, { text: value, count: 1 });
14
+ }
15
+ return [...counts.values()];
16
+ }
17
+ export function dedupeNamedItems(items, keyFn) {
18
+ const seen = new Set();
19
+ const deduped = [];
20
+ for (const item of items) {
21
+ const key = normalizeSummaryKey(keyFn(item));
22
+ if (seen.has(key)) {
23
+ continue;
24
+ }
25
+ seen.add(key);
26
+ deduped.push(item);
27
+ }
28
+ return deduped;
29
+ }
30
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/run-summary/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAyB;IAChE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2C,CAAC;IAElE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAI,KAAmB,EAAE,KAA0B;IACjF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAQ,EAAE,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}