pi-background-tasks 2.5.0 → 2.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 (203) hide show
  1. package/BACKGROUND-TASKS-INSTRUCTIONS.md +1 -1
  2. package/README.md +70 -25
  3. package/TESTING.md +42 -2
  4. package/TEST_PLAN.md +7 -4
  5. package/dist/extensions/anthropic-attribution-child.js +4 -0
  6. package/dist/extensions/anthropic-attribution-child.js.map +1 -0
  7. package/dist/extensions/anthropic-attribution.js +107 -0
  8. package/dist/extensions/anthropic-attribution.js.map +1 -0
  9. package/dist/extensions/background-tasks.js +2 -0
  10. package/dist/extensions/background-tasks.js.map +1 -0
  11. package/dist/extensions/delegate-child.js +2 -0
  12. package/dist/extensions/delegate-child.js.map +1 -0
  13. package/dist/extensions/fusion-child.js +2 -0
  14. package/dist/extensions/fusion-child.js.map +1 -0
  15. package/dist/package.json +5 -0
  16. package/dist/src/core/anthropic-attribution-path.js +24 -0
  17. package/dist/src/core/anthropic-attribution-path.js.map +1 -0
  18. package/dist/src/core/anthropic-attribution.js +2247 -0
  19. package/dist/src/core/anthropic-attribution.js.map +1 -0
  20. package/dist/src/core/attested-pi-contract.js +5 -0
  21. package/dist/src/core/attested-pi-contract.js.map +1 -0
  22. package/dist/src/core/attested-pi-run.js +749 -0
  23. package/dist/src/core/attested-pi-run.js.map +1 -0
  24. package/dist/src/core/canonical-json.js +19 -0
  25. package/dist/src/core/canonical-json.js.map +1 -0
  26. package/dist/src/core/common.js +787 -0
  27. package/dist/src/core/common.js.map +1 -0
  28. package/dist/src/core/config.js +78 -0
  29. package/dist/src/core/config.js.map +1 -0
  30. package/dist/src/core/context/parent-snapshot.js +75 -0
  31. package/dist/src/core/context/parent-snapshot.js.map +1 -0
  32. package/dist/src/core/context/token-budget.js +631 -0
  33. package/dist/src/core/context/token-budget.js.map +1 -0
  34. package/dist/src/core/context/visible-conversation-v2.js +390 -0
  35. package/dist/src/core/context/visible-conversation-v2.js.map +1 -0
  36. package/dist/src/core/delegate/artifacts.js +357 -0
  37. package/dist/src/core/delegate/artifacts.js.map +1 -0
  38. package/dist/src/core/delegate/budget.js +266 -0
  39. package/dist/src/core/delegate/budget.js.map +1 -0
  40. package/dist/src/core/delegate/facade-contract.js +7 -0
  41. package/dist/src/core/delegate/facade-contract.js.map +1 -0
  42. package/dist/src/core/delegate/hook-contract-evidence.json +18 -0
  43. package/dist/src/core/delegate/hook-contract.js +124 -0
  44. package/dist/src/core/delegate/hook-contract.js.map +1 -0
  45. package/dist/src/core/delegate/launch.js +366 -0
  46. package/dist/src/core/delegate/launch.js.map +1 -0
  47. package/dist/src/core/delegate/result-package.js +293 -0
  48. package/dist/src/core/delegate/result-package.js.map +1 -0
  49. package/dist/src/core/delegate/runner.js +398 -0
  50. package/dist/src/core/delegate/runner.js.map +1 -0
  51. package/dist/src/core/delegate/seed.js +334 -0
  52. package/dist/src/core/delegate/seed.js.map +1 -0
  53. package/dist/src/core/delegate/types.js +103 -0
  54. package/dist/src/core/delegate/types.js.map +1 -0
  55. package/dist/src/core/durable-fs.js +372 -0
  56. package/dist/src/core/durable-fs.js.map +1 -0
  57. package/dist/src/core/extension-api.js +382 -0
  58. package/dist/src/core/extension-api.js.map +1 -0
  59. package/dist/src/core/fusion/artifacts.js +654 -0
  60. package/dist/src/core/fusion/artifacts.js.map +1 -0
  61. package/dist/src/core/fusion/budget.js +949 -0
  62. package/dist/src/core/fusion/budget.js.map +1 -0
  63. package/dist/src/core/fusion/child-protocol.js +176 -0
  64. package/dist/src/core/fusion/child-protocol.js.map +1 -0
  65. package/dist/src/core/fusion/claude-cache.js +156 -0
  66. package/dist/src/core/fusion/claude-cache.js.map +1 -0
  67. package/dist/src/core/fusion/clean-context.js +64 -0
  68. package/dist/src/core/fusion/clean-context.js.map +1 -0
  69. package/dist/src/core/fusion/config.js +349 -0
  70. package/dist/src/core/fusion/config.js.map +1 -0
  71. package/dist/src/core/fusion/context.js +184 -0
  72. package/dist/src/core/fusion/context.js.map +1 -0
  73. package/dist/src/core/fusion/evaluation.js +696 -0
  74. package/dist/src/core/fusion/evaluation.js.map +1 -0
  75. package/dist/src/core/fusion/facade-contract.js +3 -0
  76. package/dist/src/core/fusion/facade-contract.js.map +1 -0
  77. package/dist/src/core/fusion/orchestrator.js +867 -0
  78. package/dist/src/core/fusion/orchestrator.js.map +1 -0
  79. package/dist/src/core/fusion/output-contract.js +27 -0
  80. package/dist/src/core/fusion/output-contract.js.map +1 -0
  81. package/dist/src/core/fusion/pi-child.js +1741 -0
  82. package/dist/src/core/fusion/pi-child.js.map +1 -0
  83. package/dist/src/core/fusion/prompts.js +260 -0
  84. package/dist/src/core/fusion/prompts.js.map +1 -0
  85. package/dist/src/core/fusion/result-package.js +857 -0
  86. package/dist/src/core/fusion/result-package.js.map +1 -0
  87. package/dist/src/core/fusion/source-policy.js +259 -0
  88. package/dist/src/core/fusion/source-policy.js.map +1 -0
  89. package/dist/src/core/fusion/types.js +207 -0
  90. package/dist/src/core/fusion/types.js.map +1 -0
  91. package/dist/src/core/fusion/web-fetch.js +777 -0
  92. package/dist/src/core/fusion/web-fetch.js.map +1 -0
  93. package/dist/src/core/fusion/workflows.js +126 -0
  94. package/dist/src/core/fusion/workflows.js.map +1 -0
  95. package/dist/src/core/lazy-module.js +181 -0
  96. package/dist/src/core/lazy-module.js.map +1 -0
  97. package/dist/src/core/pi-launch.js +431 -0
  98. package/dist/src/core/pi-launch.js.map +1 -0
  99. package/dist/src/core/registry.js +3331 -0
  100. package/dist/src/core/registry.js.map +1 -0
  101. package/dist/src/core/reload-shell-owner.js +1396 -0
  102. package/dist/src/core/reload-shell-owner.js.map +1 -0
  103. package/dist/src/core/shell-policy.js +80 -0
  104. package/dist/src/core/shell-policy.js.map +1 -0
  105. package/dist/src/core/task-durable.js +51 -0
  106. package/dist/src/core/task-durable.js.map +1 -0
  107. package/dist/src/core/update-check.js +92 -0
  108. package/dist/src/core/update-check.js.map +1 -0
  109. package/dist/src/core/windows-taskkill.js +185 -0
  110. package/dist/src/core/windows-taskkill.js.map +1 -0
  111. package/dist/src/delegate-child-extension.js +776 -0
  112. package/dist/src/delegate-child-extension.js.map +1 -0
  113. package/dist/src/delegate-extension.js +746 -0
  114. package/dist/src/delegate-extension.js.map +1 -0
  115. package/dist/src/extension.js +953 -0
  116. package/dist/src/extension.js.map +1 -0
  117. package/dist/src/fusion-child-extension.js +760 -0
  118. package/dist/src/fusion-child-extension.js.map +1 -0
  119. package/dist/src/fusion-extension.js +1030 -0
  120. package/dist/src/fusion-extension.js.map +1 -0
  121. package/dist/src/ui/background-tasks-manager.js +689 -0
  122. package/dist/src/ui/background-tasks-manager.js.map +1 -0
  123. package/dist/src/ui/fusion-model-selector.js +277 -0
  124. package/dist/src/ui/fusion-model-selector.js.map +1 -0
  125. package/docs/INDEX.md +35 -33
  126. package/docs/api/eventbus-v1.md +21 -5
  127. package/docs/choose-a-workflow.md +2 -0
  128. package/docs/commands/bg-clear.md +3 -3
  129. package/docs/commands/bg-update.md +3 -3
  130. package/docs/commands/bg.md +18 -6
  131. package/docs/commands/claude-cache.md +4 -4
  132. package/docs/commands/fusion-models.md +49 -4
  133. package/docs/commands/fusion.md +3 -3
  134. package/docs/commands/jobs.md +3 -3
  135. package/docs/commands/kill.md +3 -3
  136. package/docs/commands/logs.md +3 -3
  137. package/docs/commands/task-manager.md +5 -5
  138. package/docs/concepts/completion-delivery.md +6 -2
  139. package/docs/getting-started.md +7 -1
  140. package/docs/manifest.json +228 -42
  141. package/docs/operations/configuration.md +58 -5
  142. package/docs/operations/releasing.md +4 -2
  143. package/docs/operations/testing.md +22 -0
  144. package/docs/operations/troubleshooting.md +6 -2
  145. package/docs/read-before-edit.md +44 -31
  146. package/docs/reference/runtime-contracts.md +87 -51
  147. package/docs/reference/shortcuts-and-dock.md +28 -14
  148. package/docs/subsystems/anthropic-attribution.md +23 -11
  149. package/docs/subsystems/attested-pi-runs.md +12 -7
  150. package/docs/subsystems/background-task-runtime.md +53 -11
  151. package/docs/subsystems/child-launch-durability-and-safety.md +28 -9
  152. package/docs/subsystems/delegation.md +16 -3
  153. package/docs/subsystems/docs-freshness-gate.md +14 -7
  154. package/docs/subsystems/fusion.md +36 -11
  155. package/docs/subsystems/host-ui-and-telemetry.md +22 -9
  156. package/docs/tools/bg_delegate.md +3 -1
  157. package/docs/tools/bg_kill.md +3 -1
  158. package/docs/tools/bg_logs.md +3 -1
  159. package/docs/tools/bg_result.md +5 -3
  160. package/docs/tools/bg_run.md +31 -5
  161. package/docs/tools/bg_run_pi_attested.md +3 -1
  162. package/docs/tools/bg_status.md +3 -1
  163. package/docs/tools/fusion_investigate.md +3 -1
  164. package/docs/tools/fusion_reason.md +3 -1
  165. package/docs/tools/fusion_research.md +3 -1
  166. package/docs/tools/fusion_validate.md +3 -1
  167. package/extensions/anthropic-attribution-child.ts +3 -0
  168. package/extensions/anthropic-attribution.ts +166 -1
  169. package/package.json +12 -10
  170. package/src/core/anthropic-attribution-path.ts +5 -4
  171. package/src/core/anthropic-attribution.ts +293 -113
  172. package/src/core/attested-pi-contract.ts +4 -0
  173. package/src/core/attested-pi-run.ts +468 -81
  174. package/src/core/canonical-json.ts +21 -0
  175. package/src/core/common.ts +450 -40
  176. package/src/core/config.ts +121 -0
  177. package/src/core/context/visible-conversation-v2.ts +3 -6
  178. package/src/core/delegate/artifacts.ts +13 -9
  179. package/src/core/delegate/budget.ts +13 -6
  180. package/src/core/delegate/facade-contract.ts +6 -0
  181. package/src/core/delegate/result-package.ts +32 -14
  182. package/src/core/delegate/runner.ts +129 -58
  183. package/src/core/delegate/seed.ts +5 -7
  184. package/src/core/durable-fs.ts +178 -30
  185. package/src/core/extension-api.ts +36 -8
  186. package/src/core/fusion/artifacts.ts +17 -16
  187. package/src/core/fusion/clean-context.ts +8 -5
  188. package/src/core/fusion/config.ts +2 -1
  189. package/src/core/fusion/context.ts +2 -6
  190. package/src/core/fusion/facade-contract.ts +2 -0
  191. package/src/core/fusion/orchestrator.ts +3 -3
  192. package/src/core/fusion/prompts.ts +1 -1
  193. package/src/core/fusion/result-package.ts +259 -72
  194. package/src/core/fusion/source-policy.ts +43 -17
  195. package/src/core/lazy-module.ts +215 -0
  196. package/src/core/pi-launch.ts +390 -65
  197. package/src/core/registry.ts +2010 -381
  198. package/src/core/reload-shell-owner.ts +1662 -0
  199. package/src/core/shell-policy.ts +134 -0
  200. package/src/core/task-durable.ts +67 -0
  201. package/src/delegate-extension.ts +404 -144
  202. package/src/extension.ts +387 -114
  203. package/src/fusion-extension.ts +202 -96
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation.js","sourceRoot":"","sources":["../../../../src/core/fusion/evaluation.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseJsonText, type JsonObject } from '../common.js';\nimport {\n FUSION_CANDIDATE_IDS,\n FUSION_EVALUATION_SCHEMA_VERSION,\n FUSION_VALIDATE_CANDIDATE_SCHEMA_VERSION,\n FusionError,\n type CandidateAssessment,\n type FusionCandidateId,\n type FusionConflict,\n type FusionConflictPosition,\n type FusionEvaluationV1,\n type FusionSynthesisContribution,\n type FusionSynthesisPlan,\n type FusionValidationFindingAccounting,\n type FusionValidationFindingDecision,\n type FusionValidationFindingGroup,\n type FusionValidationFindingRecord,\n type FusionValidationSeverity,\n} from './types.js';\n\nconst MAX_REPAIR_ERROR_CHARS = 500;\nconst MAX_REPAIR_ERROR_COUNT = 24;\nconst MAX_REPAIR_ERROR_TOTAL_CHARS = 4000;\n\nexport type FusionEvaluationValidationResult =\n | { ok: true; value: FusionEvaluationV1 }\n | { ok: false; errors: readonly string[] };\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction closed(\n record: JsonObject,\n keys: readonly string[],\n label: string,\n errors: string[],\n): void {\n const expected = new Set(keys);\n for (const key of Object.keys(record)) {\n if (!expected.has(key)) errors.push(`${label} contains unknown key ${key}`);\n }\n for (const key of keys) {\n if (!Object.prototype.hasOwnProperty.call(record, key))\n errors.push(`${label} is missing key ${key}`);\n }\n}\n\nfunction nonBlankString(value: unknown, label: string, errors: string[]): string | undefined {\n if (typeof value !== 'string') {\n errors.push(`${label} must be a string`);\n return undefined;\n }\n if (value.trim().length === 0) {\n errors.push(`${label} must be non-blank`);\n return undefined;\n }\n return value;\n}\n\nfunction stringList(\n value: unknown,\n label: string,\n errors: string[],\n): readonly string[] | undefined {\n if (!Array.isArray(value)) {\n errors.push(`${label} must be an array`);\n return undefined;\n }\n const out: string[] = [];\n for (const [index, item] of value.entries()) {\n const parsed = nonBlankString(item, `${label}[${String(index)}]`, errors);\n if (parsed !== undefined) out.push(parsed);\n }\n return out;\n}\n\nfunction candidateId(\n value: unknown,\n label: string,\n errors: string[],\n): FusionCandidateId | undefined {\n if (value === 'A' || value === 'B' || value === 'C') return value;\n errors.push(`${label} must be A, B, or C`);\n return undefined;\n}\n\nfunction tuple3<T>(\n items: readonly T[],\n label: string,\n errors: string[],\n): readonly [T, T, T] | undefined {\n if (items.length !== 3) {\n errors.push(`${label} must contain exactly three entries`);\n return undefined;\n }\n const first = items[0];\n const second = items[1];\n const third = items[2];\n if (first === undefined || second === undefined || third === undefined) {\n errors.push(`${label} must not contain empty positions`);\n return undefined;\n }\n return [first, second, third];\n}\n\nfunction parseAssessment(\n value: unknown,\n label: string,\n errors: string[],\n): CandidateAssessment | undefined {\n if (!isRecord(value)) {\n errors.push(`${label} must be an object`);\n return undefined;\n }\n closed(\n value,\n ['candidate_id', 'summary', 'strengths', 'limitations', 'useful_contributions', 'risks'],\n label,\n errors,\n );\n const id = candidateId(value['candidate_id'], `${label}.candidate_id`, errors);\n const summary = nonBlankString(value['summary'], `${label}.summary`, errors);\n const strengths = stringList(value['strengths'], `${label}.strengths`, errors);\n const limitations = stringList(value['limitations'], `${label}.limitations`, errors);\n const useful = stringList(value['useful_contributions'], `${label}.useful_contributions`, errors);\n const risks = stringList(value['risks'], `${label}.risks`, errors);\n if (\n id === undefined ||\n summary === undefined ||\n strengths === undefined ||\n limitations === undefined ||\n useful === undefined ||\n risks === undefined\n ) {\n return undefined;\n }\n return { candidate_id: id, summary, strengths, limitations, useful_contributions: useful, risks };\n}\n\nfunction parsePosition(\n value: unknown,\n label: string,\n errors: string[],\n): FusionConflictPosition | undefined {\n if (!isRecord(value)) {\n errors.push(`${label} must be an object`);\n return undefined;\n }\n closed(value, ['candidate_id', 'position'], label, errors);\n const id = candidateId(value['candidate_id'], `${label}.candidate_id`, errors);\n const position = nonBlankString(value['position'], `${label}.position`, errors);\n if (id === undefined || position === undefined) return undefined;\n return { candidate_id: id, position };\n}\n\nfunction parseConflict(\n value: unknown,\n label: string,\n errors: string[],\n): FusionConflict | undefined {\n if (!isRecord(value)) {\n errors.push(`${label} must be an object`);\n return undefined;\n }\n closed(value, ['topic', 'positions', 'resolution'], label, errors);\n const topic = nonBlankString(value['topic'], `${label}.topic`, errors);\n const positionsRaw = value['positions'];\n const positions: FusionConflictPosition[] = [];\n if (!Array.isArray(positionsRaw)) {\n errors.push(`${label}.positions must be an array`);\n } else {\n for (const [index, item] of positionsRaw.entries()) {\n const parsed = parsePosition(item, `${label}.positions[${String(index)}]`, errors);\n if (parsed !== undefined) positions.push(parsed);\n }\n const distinctIds = new Set(positions.map((position) => position.candidate_id));\n if (distinctIds.size < 2)\n errors.push(`${label}.positions must include at least two distinct candidates`);\n if (distinctIds.size !== positions.length)\n errors.push(`${label}.positions candidate_id values must be unique`);\n }\n const resolution = nonBlankString(value['resolution'], `${label}.resolution`, errors);\n if (topic === undefined || resolution === undefined || !Array.isArray(positionsRaw))\n return undefined;\n return { topic, positions, resolution };\n}\n\nfunction parseContribution(\n value: unknown,\n label: string,\n errors: string[],\n): FusionSynthesisContribution | undefined {\n if (!isRecord(value)) {\n errors.push(`${label} must be an object`);\n return undefined;\n }\n closed(value, ['candidate_id', 'contribution'], label, errors);\n const id = candidateId(value['candidate_id'], `${label}.candidate_id`, errors);\n const contribution = nonBlankString(value['contribution'], `${label}.contribution`, errors);\n if (id === undefined || contribution === undefined) return undefined;\n return { candidate_id: id, contribution };\n}\n\nfunction parseContributionList(\n value: unknown,\n label: string,\n errors: string[],\n): readonly FusionSynthesisContribution[] | undefined {\n if (!Array.isArray(value)) {\n errors.push(`${label} must be an array`);\n return undefined;\n }\n const out: FusionSynthesisContribution[] = [];\n for (const [index, item] of value.entries()) {\n const parsed = parseContribution(item, `${label}[${String(index)}]`, errors);\n if (parsed !== undefined) out.push(parsed);\n }\n return out;\n}\n\nfunction parseSynthesisPlan(\n value: unknown,\n label: string,\n errors: string[],\n): FusionSynthesisPlan | undefined {\n if (!isRecord(value)) {\n errors.push(`${label} must be an object`);\n return undefined;\n }\n closed(value, ['must_include', 'must_resolve', 'must_avoid'], label, errors);\n const include = parseContributionList(value['must_include'], `${label}.must_include`, errors);\n const resolve = stringList(value['must_resolve'], `${label}.must_resolve`, errors);\n const avoid = stringList(value['must_avoid'], `${label}.must_avoid`, errors);\n if (include === undefined || resolve === undefined || avoid === undefined) return undefined;\n return { must_include: include, must_resolve: resolve, must_avoid: avoid };\n}\n\nfunction parseAssessmentList(\n value: unknown,\n label: string,\n errors: string[],\n): readonly [CandidateAssessment, CandidateAssessment, CandidateAssessment] | undefined {\n if (!Array.isArray(value)) {\n errors.push(`${label} must be an array`);\n return undefined;\n }\n const parsed: CandidateAssessment[] = [];\n for (const [index, item] of value.entries()) {\n const assessment = parseAssessment(item, `${label}[${String(index)}]`, errors);\n if (assessment !== undefined) parsed.push(assessment);\n }\n const ids = new Set(parsed.map((assessment) => assessment.candidate_id));\n for (const id of FUSION_CANDIDATE_IDS) {\n if (!ids.has(id)) errors.push(`${label} must contain candidate ${id}`);\n }\n if (ids.size !== parsed.length) errors.push(`${label} candidate_id values must be unique`);\n return tuple3(parsed, label, errors);\n}\n\nfunction parseConflictList(\n value: unknown,\n label: string,\n errors: string[],\n): readonly FusionConflict[] | undefined {\n if (!Array.isArray(value)) {\n errors.push(`${label} must be an array`);\n return undefined;\n }\n const out: FusionConflict[] = [];\n for (const [index, item] of value.entries()) {\n const parsed = parseConflict(item, `${label}[${String(index)}]`, errors);\n if (parsed !== undefined) out.push(parsed);\n }\n return out;\n}\n\nfunction parseValidationGroups(\n value: unknown,\n label: string,\n errors: string[],\n): readonly FusionValidationFindingGroup[] {\n if (!Array.isArray(value)) {\n errors.push(`${label} must be an array`);\n return [];\n }\n const groups: FusionValidationFindingGroup[] = [];\n for (const [index, item] of value.entries()) {\n const itemLabel = `${label}[${String(index)}]`;\n if (!isRecord(item)) {\n errors.push(`${itemLabel} must be an object`);\n continue;\n }\n closed(\n item,\n ['group_id', 'source_ids', 'severity', 'location', 'evidence', 'impact', 'summary', 'rationale'],\n itemLabel,\n errors,\n );\n const groupId = nonBlankString(item['group_id'], `${itemLabel}.group_id`, errors);\n const sourceIds = stringList(item['source_ids'], `${itemLabel}.source_ids`, errors);\n const severity = nonBlankString(item['severity'], `${itemLabel}.severity`, errors) as\n | FusionValidationSeverity\n | undefined;\n const location = nonBlankString(item['location'], `${itemLabel}.location`, errors);\n const evidence = nonBlankString(item['evidence'], `${itemLabel}.evidence`, errors);\n const impact = nonBlankString(item['impact'], `${itemLabel}.impact`, errors);\n const summary = nonBlankString(item['summary'], `${itemLabel}.summary`, errors);\n const rationale = nonBlankString(item['rationale'], `${itemLabel}.rationale`, errors);\n if (sourceIds !== undefined && sourceIds.length === 0) {\n errors.push(`${itemLabel}.source_ids must not be empty`);\n }\n if (severity !== undefined && !['critical', 'high', 'minor'].includes(severity)) {\n errors.push(`${itemLabel}.severity invalid`);\n }\n if (\n groupId !== undefined &&\n sourceIds !== undefined &&\n sourceIds.length > 0 &&\n severity !== undefined &&\n location !== undefined &&\n evidence !== undefined &&\n impact !== undefined &&\n summary !== undefined &&\n rationale !== undefined\n ) {\n groups.push({\n group_id: groupId,\n source_ids: sourceIds,\n severity,\n location,\n evidence,\n impact,\n summary,\n rationale,\n });\n }\n }\n return groups;\n}\n\nfunction parseValidationAccounting(value: unknown, label: string, errors: string[]): FusionValidationFindingAccounting | undefined {\n if (!isRecord(value)) {\n errors.push(`${label} must be an object`);\n return undefined;\n }\n closed(value, ['findings', 'decisions', 'groups'], label, errors);\n const findingsRaw = value['findings'];\n const decisionsRaw = value['decisions'];\n const groups = parseValidationGroups(value['groups'], `${label}.groups`, errors);\n const findings: FusionValidationFindingRecord[] = [];\n if (!Array.isArray(findingsRaw)) errors.push(`${label}.findings must be an array`);\n else {\n for (const [index, item] of findingsRaw.entries()) {\n const itemLabel = `${label}.findings[${String(index)}]`;\n if (!isRecord(item)) {\n errors.push(`${itemLabel} must be an object`);\n continue;\n }\n closed(item, ['id', 'candidate_id', 'severity', 'location', 'evidence', 'impact', 'summary'], itemLabel, errors);\n const id = nonBlankString(item['id'], `${itemLabel}.id`, errors);\n const candidate = candidateId(item['candidate_id'], `${itemLabel}.candidate_id`, errors);\n const severity = nonBlankString(item['severity'], `${itemLabel}.severity`, errors) as FusionValidationSeverity | undefined;\n const location = nonBlankString(item['location'], `${itemLabel}.location`, errors);\n const evidence = nonBlankString(item['evidence'], `${itemLabel}.evidence`, errors);\n const impact = nonBlankString(item['impact'], `${itemLabel}.impact`, errors);\n const summary = nonBlankString(item['summary'], `${itemLabel}.summary`, errors);\n if (severity !== undefined && !['critical', 'high', 'minor'].includes(severity)) errors.push(`${itemLabel}.severity invalid`);\n if (id !== undefined && candidate !== undefined && severity !== undefined && location !== undefined && evidence !== undefined && impact !== undefined && summary !== undefined) {\n findings.push({ id, candidate_id: candidate, severity, location, evidence, impact, summary });\n }\n }\n }\n const decisions: FusionValidationFindingDecision[] = [];\n if (!Array.isArray(decisionsRaw)) errors.push(`${label}.decisions must be an array`);\n else {\n for (const [index, item] of decisionsRaw.entries()) {\n const itemLabel = `${label}.decisions[${String(index)}]`;\n if (!isRecord(item)) {\n errors.push(`${itemLabel} must be an object`);\n continue;\n }\n const allowedDecisionKeys = new Set(['source_id', 'disposition', 'rationale', 'group_id']);\n for (const key of Object.keys(item)) {\n if (!allowedDecisionKeys.has(key)) errors.push(`${itemLabel} contains unknown key ${key}`);\n }\n for (const key of ['source_id', 'disposition', 'rationale'] as const) {\n if (!Object.prototype.hasOwnProperty.call(item, key)) errors.push(`${itemLabel} is missing key ${key}`);\n }\n const sourceId = nonBlankString(item['source_id'], `${itemLabel}.source_id`, errors);\n const disposition = nonBlankString(item['disposition'], `${itemLabel}.disposition`, errors);\n const rationale = nonBlankString(item['rationale'], `${itemLabel}.rationale`, errors);\n const group = item['group_id'] === undefined ? undefined : nonBlankString(item['group_id'], `${itemLabel}.group_id`, errors);\n if (disposition !== undefined && disposition !== 'include' && disposition !== 'exclude') errors.push(`${itemLabel}.disposition invalid`);\n if (sourceId !== undefined && (disposition === 'include' || disposition === 'exclude') && rationale !== undefined) {\n const decision: FusionValidationFindingDecision = { source_id: sourceId, disposition, rationale };\n if (group !== undefined) decision.group_id = group;\n decisions.push(decision);\n }\n }\n }\n const accounting: FusionValidationFindingAccounting = { findings, decisions, groups };\n errors.push(...validateFusionFindingAccounting(accounting));\n return accounting;\n}\n\nexport function validateFusionEvaluation(value: unknown): FusionEvaluationValidationResult {\n const errors: string[] = [];\n if (!isRecord(value)) return { ok: false, errors: ['evaluation must be a JSON object'] };\n const evaluationAllowed = new Set(['schema_version', 'candidate_assessments', 'agreements', 'conflicts', 'synthesis_plan', 'validation_accounting']);\n for (const key of Object.keys(value)) {\n if (!evaluationAllowed.has(key)) errors.push(`evaluation contains unknown key ${key}`);\n }\n for (const key of ['schema_version', 'candidate_assessments', 'agreements', 'conflicts', 'synthesis_plan'] as const) {\n if (!Object.prototype.hasOwnProperty.call(value, key)) errors.push(`evaluation is missing key ${key}`);\n }\n if (value['schema_version'] !== FUSION_EVALUATION_SCHEMA_VERSION) {\n errors.push('evaluation.schema_version mismatch');\n }\n const assessments = parseAssessmentList(\n value['candidate_assessments'],\n 'evaluation.candidate_assessments',\n errors,\n );\n const agreements = stringList(value['agreements'], 'evaluation.agreements', errors);\n const conflicts = parseConflictList(value['conflicts'], 'evaluation.conflicts', errors);\n const plan = parseSynthesisPlan(value['synthesis_plan'], 'evaluation.synthesis_plan', errors);\n const validationAccounting = Object.prototype.hasOwnProperty.call(value, 'validation_accounting')\n ? parseValidationAccounting(value['validation_accounting'], 'evaluation.validation_accounting', errors)\n : undefined;\n if (\n errors.length > 0 ||\n assessments === undefined ||\n agreements === undefined ||\n conflicts === undefined ||\n plan === undefined\n ) {\n return { ok: false, errors };\n }\n const parsedValue: FusionEvaluationV1 = {\n schema_version: FUSION_EVALUATION_SCHEMA_VERSION,\n candidate_assessments: assessments,\n agreements,\n conflicts,\n synthesis_plan: plan,\n };\n if (validationAccounting !== undefined) parsedValue.validation_accounting = validationAccounting;\n return { ok: true, value: parsedValue };\n}\n\nexport function parseFusionEvaluation(text: string): FusionEvaluationV1 {\n let parsed: unknown;\n try {\n parsed = parseJsonText(text);\n } catch (error) {\n throw new FusionError(\n `evaluation output must be JSON only: ${error instanceof Error ? error.message : String(error)}`,\n {\n code: 'evaluation_invalid',\n stage: 'evaluation',\n },\n );\n }\n const result = validateFusionEvaluation(parsed);\n if (!result.ok) {\n throw new FusionError(\n `evaluation output failed schema validation: ${formatEvaluationErrors(result.errors)}`,\n {\n code: 'evaluation_invalid',\n stage: 'evaluation',\n },\n );\n }\n return result.value;\n}\n\nexport function boundedEvaluationErrors(errors: readonly string[]): readonly string[] {\n const bounded: string[] = [];\n let total = 0;\n for (const error of errors) {\n if (bounded.length >= MAX_REPAIR_ERROR_COUNT) break;\n const perError =\n error.length <= MAX_REPAIR_ERROR_CHARS\n ? error\n : `${error.slice(0, MAX_REPAIR_ERROR_CHARS - 1)}…`;\n const remaining = MAX_REPAIR_ERROR_TOTAL_CHARS - total;\n if (remaining <= 0) break;\n const next =\n perError.length <= remaining ? perError : `${perError.slice(0, Math.max(0, remaining - 1))}…`;\n bounded.push(next);\n total += next.length;\n }\n if (errors.length > bounded.length)\n bounded.push(`… ${String(errors.length - bounded.length)} more validation errors omitted`);\n return bounded;\n}\n\nexport function formatEvaluationErrors(errors: readonly string[]): string {\n return boundedEvaluationErrors(errors).join('; ');\n}\n\nfunction parseValidationCandidateFinding(value: unknown, label: string, errors: string[]): Omit<FusionValidationFindingRecord, 'id' | 'candidate_id'> | undefined {\n if (!isRecord(value)) {\n errors.push(`${label} must be an object`);\n return undefined;\n }\n closed(value, ['severity', 'location', 'evidence', 'impact', 'summary'], label, errors);\n const severity = nonBlankString(value['severity'], `${label}.severity`, errors) as FusionValidationSeverity | undefined;\n const location = nonBlankString(value['location'], `${label}.location`, errors);\n const evidence = nonBlankString(value['evidence'], `${label}.evidence`, errors);\n const impact = nonBlankString(value['impact'], `${label}.impact`, errors);\n const summary = nonBlankString(value['summary'], `${label}.summary`, errors);\n if (severity !== undefined && !['critical', 'high', 'minor'].includes(severity)) errors.push(`${label}.severity invalid`);\n if (severity === undefined || location === undefined || evidence === undefined || impact === undefined || summary === undefined) return undefined;\n return { severity, location, evidence, impact, summary };\n}\n\nexport interface ParsedFusionValidationCandidateReport {\n findings: readonly FusionValidationFindingRecord[];\n verified: readonly string[];\n limitations: readonly string[];\n}\n\nexport type FusionValidationCandidateNormalization =\n | 'markdown_json_fence'\n | 'prose_then_markdown_json_fence';\n\nexport interface RecoveredFusionValidationCandidateReport {\n report: ParsedFusionValidationCandidateReport;\n /** Bare JSON forwarded to the evaluator after explicit, audited recovery. */\n response: string;\n normalization: FusionValidationCandidateNormalization;\n}\n\n/**\n * Recognize exactly one complete Markdown JSON fence, optionally preceded by a\n * short prose preamble. This is deliberately narrower than generic substring\n * extraction: trailing prose, nested fences, unlabelled fences, and oversized\n * preambles remain contract failures.\n */\nfunction fencedValidationCandidateJson(text: string): {\n payload: string;\n normalization: FusionValidationCandidateNormalization;\n} | undefined {\n const trimmed = text.trim();\n const openingPattern = /```json[ \\t]*\\r?\\n/giu;\n const openings = [...trimmed.matchAll(openingPattern)];\n if (openings.length !== 1) return undefined;\n const opening = openings[0];\n if (opening === undefined) return undefined;\n const headerEnd = opening.index + opening[0].length;\n const closing = trimmed.indexOf('```', headerEnd);\n if (closing < 0 || trimmed.slice(closing + 3).includes('```')) return undefined;\n if (trimmed.slice(closing + 3).trim().length > 0) return undefined;\n const preamble = trimmed.slice(0, opening.index).trim();\n if (Buffer.byteLength(preamble, 'utf8') > 2_000 || preamble.includes('```')) return undefined;\n const payload = trimmed.slice(headerEnd, closing).trim();\n if (payload.length === 0 || payload.includes('```')) return undefined;\n return {\n payload,\n normalization: preamble.length === 0\n ? 'markdown_json_fence'\n : 'prose_then_markdown_json_fence',\n };\n}\n\n/**\n * Defensive recovery for the one observed contract violation shape. Callers\n * must persist/surface the returned normalization; this function intentionally\n * does not make the strict parser permissive.\n */\nexport function recoverFencedFusionValidationCandidateReport(\n text: string,\n candidateId: FusionCandidateId,\n): RecoveredFusionValidationCandidateReport | undefined {\n const recovered = fencedValidationCandidateJson(text);\n if (recovered === undefined) return undefined;\n return {\n report: parseFusionValidationCandidateReport(recovered.payload, candidateId),\n response: recovered.payload,\n normalization: recovered.normalization,\n };\n}\n\nexport function parseFusionValidationCandidateReport(text: string, candidateId: FusionCandidateId): ParsedFusionValidationCandidateReport {\n let parsed: unknown;\n try {\n parsed = parseJsonText(text);\n } catch (error) {\n throw new FusionError(\n `validation candidate ${candidateId} output must be structured JSON only: ${errorText(error)}`,\n { code: 'evaluation_invalid', stage: 'candidate' },\n );\n }\n const errors: string[] = [];\n if (!isRecord(parsed)) {\n errors.push('validation candidate report must be an object');\n } else {\n closed(parsed, ['schema_version', 'findings', 'verified', 'limitations'], 'validation candidate report', errors);\n }\n if (!isRecord(parsed)) {\n throw new FusionError(`validation candidate ${candidateId} output failed schema validation: ${formatEvaluationErrors(errors)}`, {\n code: 'evaluation_invalid',\n stage: 'candidate',\n });\n }\n if (parsed['schema_version'] !== FUSION_VALIDATE_CANDIDATE_SCHEMA_VERSION) errors.push('validation candidate report.schema_version mismatch');\n const rawFindings = parsed['findings'];\n const findings: Array<Omit<FusionValidationFindingRecord, 'id' | 'candidate_id'>> = [];\n if (!Array.isArray(rawFindings)) errors.push('validation candidate report.findings must be an array');\n else {\n for (const [index, item] of rawFindings.entries()) {\n const finding = parseValidationCandidateFinding(item, `validation candidate report.findings[${String(index)}]`, errors);\n if (finding !== undefined) findings.push(finding);\n }\n }\n const verified = stringList(parsed['verified'], 'validation candidate report.verified', errors);\n const limitations = stringList(parsed['limitations'], 'validation candidate report.limitations', errors);\n if (errors.length > 0) {\n throw new FusionError(`validation candidate ${candidateId} output failed schema validation: ${formatEvaluationErrors(errors)}`, {\n code: 'evaluation_invalid',\n stage: 'candidate',\n });\n }\n return {\n findings: findings.map((finding, index) => ({\n id: stableFusionFindingId(candidateId, index + 1),\n candidate_id: candidateId,\n ...finding,\n })),\n verified: verified ?? [],\n limitations: limitations ?? [],\n };\n}\n\nexport function stableFusionFindingId(candidateId: FusionCandidateId, ordinal: number): string {\n if (!Number.isSafeInteger(ordinal) || ordinal <= 0) {\n throw new FusionError('validation finding ordinal must be a positive integer', {\n code: 'evaluation_invalid',\n stage: 'evaluation',\n });\n }\n return `${candidateId}-F${String(ordinal).padStart(3, '0')}`;\n}\n\nexport function validateFusionFindingAccounting(\n accounting: FusionValidationFindingAccounting,\n): readonly string[] {\n const errors: string[] = [];\n const sourceIds = new Set<string>();\n const perCandidateOrdinal: Record<FusionCandidateId, number> = { A: 0, B: 0, C: 0 };\n for (const [index, finding] of accounting.findings.entries()) {\n const label = `finding[${String(index)}]`;\n perCandidateOrdinal[finding.candidate_id] += 1;\n if (finding.id !== stableFusionFindingId(finding.candidate_id, perCandidateOrdinal[finding.candidate_id])) {\n errors.push(`${label}.id must be the stable host id for its candidate and ordinal`);\n }\n if (!['critical', 'high', 'minor'].includes(finding.severity)) errors.push(`${label}.severity invalid`);\n for (const key of ['location', 'evidence', 'impact', 'summary'] as const) {\n if (finding[key].trim().length === 0) errors.push(`${label}.${key} must be non-blank`);\n }\n if (sourceIds.has(finding.id)) errors.push(`${label}.id duplicate`);\n sourceIds.add(finding.id);\n }\n const accounted = new Set<string>();\n for (const [index, decision] of accounting.decisions.entries()) {\n const label = `decision[${String(index)}]`;\n if (!sourceIds.has(decision.source_id)) errors.push(`${label}.source_id does not name a candidate finding`);\n if (accounted.has(decision.source_id)) errors.push(`${label}.source_id accounted more than once`);\n accounted.add(decision.source_id);\n if (decision.disposition !== 'include' && decision.disposition !== 'exclude') errors.push(`${label}.disposition invalid`);\n if (decision.rationale.trim().length === 0) errors.push(`${label}.rationale must be non-blank`);\n if (decision.disposition === 'include' && (decision.group_id === undefined || decision.group_id.trim().length === 0)) {\n errors.push(`${label}.group_id required for included findings`);\n }\n if (decision.disposition === 'exclude' && decision.group_id !== undefined) {\n errors.push(`${label}.group_id must be omitted for excluded findings`);\n }\n }\n for (const id of sourceIds) {\n if (!accounted.has(id)) errors.push(`source finding ${id} was not accounted exactly once`);\n }\n\n const groupsById = new Map<string, FusionValidationFindingGroup>();\n for (const [index, group] of accounting.groups.entries()) {\n const label = `group[${String(index)}]`;\n if (groupsById.has(group.group_id)) errors.push(`${label}.group_id duplicate`);\n groupsById.set(group.group_id, group);\n if (!['critical', 'high', 'minor'].includes(group.severity)) errors.push(`${label}.severity invalid`);\n for (const key of ['location', 'evidence', 'impact', 'summary', 'rationale'] as const) {\n if (group[key].trim().length === 0) errors.push(`${label}.${key} must be non-blank`);\n }\n if (group.source_ids.length === 0) errors.push(`${label}.source_ids must not be empty`);\n const groupSourceIds = new Set<string>();\n for (const sourceId of group.source_ids) {\n if (!sourceIds.has(sourceId)) errors.push(`${label}.source_ids contains unknown finding ${sourceId}`);\n if (groupSourceIds.has(sourceId)) errors.push(`${label}.source_ids contains duplicate ${sourceId}`);\n groupSourceIds.add(sourceId);\n }\n }\n\n const includedByGroup = new Map<string, Set<string>>();\n for (const decision of accounting.decisions) {\n if (decision.disposition !== 'include' || decision.group_id === undefined) continue;\n const group = groupsById.get(decision.group_id);\n if (group === undefined) {\n errors.push(`included source finding ${decision.source_id} references unknown group ${decision.group_id}`);\n continue;\n }\n const members = includedByGroup.get(decision.group_id) ?? new Set<string>();\n members.add(decision.source_id);\n includedByGroup.set(decision.group_id, members);\n }\n for (const group of accounting.groups) {\n const expected = [...group.source_ids].sort();\n const actual = [...(includedByGroup.get(group.group_id) ?? new Set<string>())].sort();\n if (expected.length !== actual.length || expected.some((id, index) => id !== actual[index])) {\n errors.push(`group ${group.group_id} source_ids must exactly match included decisions assigned to that group`);\n }\n }\n return errors;\n}\n\nfunction sanitizeValidationRationale(value: string): string {\n return value\n .replace(/\\b[ABC]-F\\d{3}\\b/gu, 'source finding')\n .replace(/\\bcandidate [ABC]\\b/giu, 'one reviewer')\n .replace(/\\b[ABC]:\\s*/gu, '');\n}\n\nexport function renderValidatedFusionValidationReport(\n accounting: FusionValidationFindingAccounting,\n coverage?: { verified: readonly string[]; limitations: readonly string[] } | undefined,\n): string {\n const errors = validateFusionFindingAccounting(accounting);\n if (errors.length > 0) {\n throw new FusionError(`validation accounting invalid before render: ${formatEvaluationErrors(errors)}`, {\n code: 'evaluation_invalid',\n stage: 'merge',\n });\n }\n const severityOrder = { critical: 0, high: 1, minor: 2 } as const;\n const renderedFindings = [...accounting.groups].sort((left, right) =>\n severityOrder[left.severity] - severityOrder[right.severity] ||\n left.location.localeCompare(right.location) ||\n left.group_id.localeCompare(right.group_id),\n );\n const lines: string[] = ['# Validation report', ''];\n if (renderedFindings.length === 0) {\n lines.push('No included findings were identified by the validated accounting.', '');\n } else {\n lines.push('## Findings', '');\n for (const finding of renderedFindings) {\n lines.push(`### ${finding.severity}: ${finding.summary}`, '');\n lines.push(`- Location: ${finding.location}`);\n lines.push(`- Evidence: ${finding.evidence}`);\n lines.push(`- Impact: ${finding.impact}`);\n lines.push(`- Inclusion rationale: ${sanitizeValidationRationale(finding.rationale)}`, '');\n }\n }\n const exclusions = accounting.decisions\n .filter((decision) => decision.disposition === 'exclude')\n .sort((left, right) => left.source_id.localeCompare(right.source_id));\n if (exclusions.length > 0) {\n lines.push('## Excluded source findings', '');\n for (const decision of exclusions) lines.push(`- ${sanitizeValidationRationale(decision.rationale)}`);\n lines.push('');\n }\n if (coverage !== undefined) {\n lines.push('## Verified', '');\n if (coverage.verified.length === 0) lines.push('- No verification statements were provided.');\n else for (const item of coverage.verified) lines.push(`- ${item}`);\n lines.push('', '## Limitations', '');\n if (coverage.limitations.length === 0) lines.push('- No limitations were provided.');\n else for (const item of coverage.limitations) lines.push(`- ${item}`);\n lines.push('');\n }\n return lines.join('\\n').trimEnd();\n}\n\nexport function assertMergerFindingCoverage(\n accounting: FusionValidationFindingAccounting,\n renderedGroupIds: readonly string[],\n): void {\n const errors = [...validateFusionFindingAccounting(accounting)];\n const included = new Set(accounting.groups.map((group) => group.group_id));\n const rendered = new Set(renderedGroupIds);\n for (const id of included) if (!rendered.has(id)) errors.push(`merger dropped included group ${id}`);\n for (const id of rendered) if (!included.has(id)) errors.push(`merger invented or revived group ${id}`);\n if (errors.length > 0) {\n throw new FusionError(`validation finding preservation failed: ${formatEvaluationErrors(errors)}`, {\n code: 'evaluation_invalid',\n stage: 'merge',\n });\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ /** Light registration/config sentinel that must not pull the config engine into the facade. */
2
+ export const CURRENT_MODEL_SELECTION = '$current';
3
+ //# sourceMappingURL=facade-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facade-contract.js","sourceRoot":"","sources":["../../../../src/core/fusion/facade-contract.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAmB,CAAC","sourcesContent":["/** Light registration/config sentinel that must not pull the config engine into the facade. */\nexport const CURRENT_MODEL_SELECTION = '$current' as const;\n"]}