onto-mcp 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/.onto/authority/core-lens-registry.yaml +134 -0
- package/.onto/authority/core-lexicon.yaml +1562 -0
- package/.onto/authority/diagnostic-codes.yaml +94 -0
- package/.onto/domains/accounting/competency_qs.md +384 -0
- package/.onto/domains/accounting/concepts.md +186 -0
- package/.onto/domains/accounting/conciseness_rules.md +160 -0
- package/.onto/domains/accounting/dependency_rules.md +239 -0
- package/.onto/domains/accounting/domain_scope.md +213 -0
- package/.onto/domains/accounting/extension_cases.md +416 -0
- package/.onto/domains/accounting/logic_rules.md +226 -0
- package/.onto/domains/accounting/structure_spec.md +298 -0
- package/.onto/domains/accounting-kr/competency_qs.md +562 -0
- package/.onto/domains/accounting-kr/concepts.md +187 -0
- package/.onto/domains/accounting-kr/conciseness_rules.md +125 -0
- package/.onto/domains/accounting-kr/dependency_rules.md +93 -0
- package/.onto/domains/accounting-kr/domain_scope.md +140 -0
- package/.onto/domains/accounting-kr/extension_cases.md +343 -0
- package/.onto/domains/accounting-kr/logic_rules.md +160 -0
- package/.onto/domains/accounting-kr/structure_spec.md +85 -0
- package/.onto/domains/business/competency_qs.md +263 -0
- package/.onto/domains/business/concepts.md +200 -0
- package/.onto/domains/business/conciseness_rules.md +135 -0
- package/.onto/domains/business/dependency_rules.md +113 -0
- package/.onto/domains/business/domain_scope.md +240 -0
- package/.onto/domains/business/extension_cases.md +249 -0
- package/.onto/domains/business/logic_rules.md +134 -0
- package/.onto/domains/business/structure_spec.md +114 -0
- package/.onto/domains/finance/competency_qs.md +362 -0
- package/.onto/domains/finance/concepts.md +194 -0
- package/.onto/domains/finance/conciseness_rules.md +155 -0
- package/.onto/domains/finance/dependency_rules.md +171 -0
- package/.onto/domains/finance/domain_scope.md +215 -0
- package/.onto/domains/finance/extension_cases.md +350 -0
- package/.onto/domains/finance/logic_rules.md +191 -0
- package/.onto/domains/finance/structure_spec.md +182 -0
- package/.onto/domains/llm-native-development/competency_qs.md +430 -0
- package/.onto/domains/llm-native-development/concepts.md +242 -0
- package/.onto/domains/llm-native-development/conciseness_rules.md +163 -0
- package/.onto/domains/llm-native-development/dependency_rules.md +216 -0
- package/.onto/domains/llm-native-development/domain_scope.md +197 -0
- package/.onto/domains/llm-native-development/extension_cases.md +474 -0
- package/.onto/domains/llm-native-development/logic_rules.md +123 -0
- package/.onto/domains/llm-native-development/prompt_interface.md +49 -0
- package/.onto/domains/llm-native-development/structure_spec.md +245 -0
- package/.onto/domains/market-intelligence/competency_qs.md +274 -0
- package/.onto/domains/market-intelligence/concepts.md +233 -0
- package/.onto/domains/market-intelligence/conciseness_rules.md +165 -0
- package/.onto/domains/market-intelligence/dependency_rules.md +197 -0
- package/.onto/domains/market-intelligence/domain_scope.md +231 -0
- package/.onto/domains/market-intelligence/extension_cases.md +425 -0
- package/.onto/domains/market-intelligence/logic_rules.md +247 -0
- package/.onto/domains/market-intelligence/structure_spec.md +209 -0
- package/.onto/domains/ontology/competency_qs.md +394 -0
- package/.onto/domains/ontology/concepts.md +172 -0
- package/.onto/domains/ontology/conciseness_rules.md +134 -0
- package/.onto/domains/ontology/dependency_rules.md +125 -0
- package/.onto/domains/ontology/domain_scope.md +114 -0
- package/.onto/domains/ontology/extension_cases.md +501 -0
- package/.onto/domains/ontology/logic_rules.md +114 -0
- package/.onto/domains/ontology/problem_framing_profile.md +67 -0
- package/.onto/domains/ontology/structure_spec.md +115 -0
- package/.onto/domains/palantir-foundry/RESEARCH_NOTES.md +911 -0
- package/.onto/domains/palantir-foundry/competency_qs.md +191 -0
- package/.onto/domains/palantir-foundry/competitive_comparison.md +329 -0
- package/.onto/domains/palantir-foundry/concepts.md +197 -0
- package/.onto/domains/palantir-foundry/conciseness_rules.md +245 -0
- package/.onto/domains/palantir-foundry/dependency_rules.md +135 -0
- package/.onto/domains/palantir-foundry/domain_scope.md +395 -0
- package/.onto/domains/palantir-foundry/extension_cases.md +210 -0
- package/.onto/domains/palantir-foundry/logic_rules.md +172 -0
- package/.onto/domains/palantir-foundry/structure_spec.md +291 -0
- package/.onto/domains/software-engineering/competency_qs.md +538 -0
- package/.onto/domains/software-engineering/concepts.md +238 -0
- package/.onto/domains/software-engineering/conciseness_rules.md +167 -0
- package/.onto/domains/software-engineering/dependency_rules.md +216 -0
- package/.onto/domains/software-engineering/domain_scope.md +183 -0
- package/.onto/domains/software-engineering/extension_cases.md +551 -0
- package/.onto/domains/software-engineering/logic_rules.md +240 -0
- package/.onto/domains/software-engineering/problem_framing_profile.md +68 -0
- package/.onto/domains/software-engineering/structure_spec.md +185 -0
- package/.onto/domains/ui-design/competency_qs.md +567 -0
- package/.onto/domains/ui-design/concepts.md +194 -0
- package/.onto/domains/ui-design/conciseness_rules.md +190 -0
- package/.onto/domains/ui-design/dependency_rules.md +323 -0
- package/.onto/domains/ui-design/domain_scope.md +340 -0
- package/.onto/domains/ui-design/extension_cases.md +563 -0
- package/.onto/domains/ui-design/logic_rules.md +349 -0
- package/.onto/domains/ui-design/structure_spec.md +252 -0
- package/.onto/domains/visual-design/competency_qs.md +472 -0
- package/.onto/domains/visual-design/concepts.md +147 -0
- package/.onto/domains/visual-design/conciseness_rules.md +186 -0
- package/.onto/domains/visual-design/dependency_rules.md +282 -0
- package/.onto/domains/visual-design/domain_scope.md +290 -0
- package/.onto/domains/visual-design/extension_cases.md +480 -0
- package/.onto/domains/visual-design/logic_rules.md +232 -0
- package/.onto/domains/visual-design/structure_spec.md +213 -0
- package/.onto/principles/llm-native-development-guideline.md +401 -0
- package/.onto/principles/llm-runtime-interface-principles.md +665 -0
- package/.onto/principles/non-specialist-communication-guideline.md +74 -0
- package/.onto/principles/ontology-as-code-guideline.md +243 -0
- package/.onto/principles/ontology-as-code-naming-charter.md +130 -0
- package/.onto/principles/product-locality-principle.md +129 -0
- package/.onto/principles/productization-charter.md +569 -0
- package/.onto/processes/evolve/material-kind-adapter-contract.md +113 -0
- package/.onto/processes/reconstruct/reconstruct-boundary-contract.md +366 -0
- package/.onto/processes/reconstruct/source-profile-contract.md +107 -0
- package/.onto/processes/reconstruct/source-profiles/code.md +72 -0
- package/.onto/processes/reconstruct/source-profiles/database.md +74 -0
- package/.onto/processes/reconstruct/source-profiles/document.md +71 -0
- package/.onto/processes/reconstruct/source-profiles/spreadsheet.md +79 -0
- package/.onto/processes/review/binding-contract.md +270 -0
- package/.onto/processes/review/execution-preparation-artifacts.md +281 -0
- package/.onto/processes/review/interpretation-contract.md +245 -0
- package/.onto/processes/review/issue-stance-deliberation-contract.md +761 -0
- package/.onto/processes/review/lens-prompt-contract.md +402 -0
- package/.onto/processes/review/lens-registry.md +127 -0
- package/.onto/processes/review/pre-dispatch-contracts.md +428 -0
- package/.onto/processes/review/productized-live-path.md +398 -0
- package/.onto/processes/review/prompt-execution-runner-contract.md +187 -0
- package/.onto/processes/review/record-contract.md +427 -0
- package/.onto/processes/review/record-field-mapping.md +337 -0
- package/.onto/processes/review/review-context-manifest-contract.md +356 -0
- package/.onto/processes/review/review-execution-ux-contract.md +809 -0
- package/.onto/processes/review/review-target-profile-contract.md +259 -0
- package/.onto/processes/review/shared-phenomenon-contract.md +129 -0
- package/.onto/processes/review/synthesize-prompt-contract.md +343 -0
- package/.onto/processes/shared/target-material-kind-contract.md +198 -0
- package/.onto/roles/axiology.md +81 -0
- package/.onto/roles/conciseness.md +36 -0
- package/.onto/roles/coverage.md +34 -0
- package/.onto/roles/dependency.md +37 -0
- package/.onto/roles/evolution.md +35 -0
- package/.onto/roles/logic.md +104 -0
- package/.onto/roles/pragmatics.md +32 -0
- package/.onto/roles/semantics.md +36 -0
- package/.onto/roles/structure.md +33 -0
- package/.onto/roles/synthesize.md +92 -0
- package/AGENTS.md +240 -0
- package/CLAUDE.md +39 -0
- package/README.md +287 -0
- package/bin/onto +92 -0
- package/dist/cli.js +101 -0
- package/dist/core-api/reconstruct-api.js +222 -0
- package/dist/core-api/review-api.js +1271 -0
- package/dist/core-runtime/cli/assemble-review-record.js +431 -0
- package/dist/core-runtime/cli/bootstrap-review-binding.js +186 -0
- package/dist/core-runtime/cli/codex-nested-dispatch.js +226 -0
- package/dist/core-runtime/cli/codex-nested-dispatch.test.js +390 -0
- package/dist/core-runtime/cli/codex-nested-teamlead-executor.js +464 -0
- package/dist/core-runtime/cli/codex-nested-teamlead-executor.test.js +335 -0
- package/dist/core-runtime/cli/codex-review-unit-executor.js +228 -0
- package/dist/core-runtime/cli/complete-review-session.js +64 -0
- package/dist/core-runtime/cli/complexity-assessment.js +153 -0
- package/dist/core-runtime/cli/coordinator-helpers.js +583 -0
- package/dist/core-runtime/cli/coordinator-state-machine-deliberation.test.js +167 -0
- package/dist/core-runtime/cli/coordinator-state-machine.js +794 -0
- package/dist/core-runtime/cli/e2e-codex-multi-agent-fixes.test.js +615 -0
- package/dist/core-runtime/cli/e2e-start-review-session.test.js +312 -0
- package/dist/core-runtime/cli/health.js +44 -0
- package/dist/core-runtime/cli/inline-http-review-unit-executor.js +656 -0
- package/dist/core-runtime/cli/inline-http-review-unit-executor.test.js +567 -0
- package/dist/core-runtime/cli/materialize-review-execution-preparation.js +104 -0
- package/dist/core-runtime/cli/materialize-review-prompt-packets.js +952 -0
- package/dist/core-runtime/cli/migrate-session-roots.js +118 -0
- package/dist/core-runtime/cli/mock-review-unit-executor.js +285 -0
- package/dist/core-runtime/cli/onto-tools.js +369 -0
- package/dist/core-runtime/cli/prepare-review-session.js +272 -0
- package/dist/core-runtime/cli/render-review-final-output.js +350 -0
- package/dist/core-runtime/cli/repo-layout-migration-replace.smoke.test.js +106 -0
- package/dist/core-runtime/cli/review-invoke-auto-resolution.test.js +268 -0
- package/dist/core-runtime/cli/review-invoke-coordinator-topology.test.js +136 -0
- package/dist/core-runtime/cli/review-invoke-resolver-caching.test.js +201 -0
- package/dist/core-runtime/cli/review-invoke-topology-dispatch.test.js +192 -0
- package/dist/core-runtime/cli/review-invoke.js +2030 -0
- package/dist/core-runtime/cli/run-review-prompt-execution.js +2152 -0
- package/dist/core-runtime/cli/session-root-guard.js +168 -0
- package/dist/core-runtime/cli/spawn-watcher.js +173 -0
- package/dist/core-runtime/cli/spawn-watcher.test.js +457 -0
- package/dist/core-runtime/cli/start-review-session.js +68 -0
- package/dist/core-runtime/cli/strip-wrapping-code-fence.js +56 -0
- package/dist/core-runtime/cli/strip-wrapping-code-fence.test.js +79 -0
- package/dist/core-runtime/cli/teamcreate-lens-deliberation-executor.js +412 -0
- package/dist/core-runtime/cli/teamcreate-lens-deliberation-executor.test.js +351 -0
- package/dist/core-runtime/cli/topology-executor-mapping.js +139 -0
- package/dist/core-runtime/cli/topology-executor-mapping.test.js +173 -0
- package/dist/core-runtime/cli/write-review-interpretation.js +81 -0
- package/dist/core-runtime/config/onto-config-cli.js +278 -0
- package/dist/core-runtime/config/onto-config-key-path.js +288 -0
- package/dist/core-runtime/config/onto-config-key-path.test.js +195 -0
- package/dist/core-runtime/config/onto-config-preview.js +108 -0
- package/dist/core-runtime/config/onto-config-preview.test.js +132 -0
- package/dist/core-runtime/discovery/config-chain.js +118 -0
- package/dist/core-runtime/discovery/config-chain.test.js +103 -0
- package/dist/core-runtime/discovery/config-profile.js +199 -0
- package/dist/core-runtime/discovery/config-profile.test.js +233 -0
- package/dist/core-runtime/discovery/host-detection.js +33 -0
- package/dist/core-runtime/discovery/host-detection.test.js +186 -0
- package/dist/core-runtime/discovery/installation-paths.js +21 -0
- package/dist/core-runtime/discovery/installation-paths.test.js +65 -0
- package/dist/core-runtime/discovery/lens-registry.js +60 -0
- package/dist/core-runtime/discovery/lens-registry.test.js +81 -0
- package/dist/core-runtime/discovery/onto-home.js +71 -0
- package/dist/core-runtime/discovery/path-normalization.js +28 -0
- package/dist/core-runtime/discovery/path-normalization.test.js +22 -0
- package/dist/core-runtime/discovery/plugin-path.js +72 -0
- package/dist/core-runtime/discovery/plugin-path.test.js +95 -0
- package/dist/core-runtime/discovery/project-root.js +47 -0
- package/dist/core-runtime/discovery/settings-chain.js +353 -0
- package/dist/core-runtime/discovery/walk-up.js +17 -0
- package/dist/core-runtime/evolve/adapters/code-product/compile/compile-defense.js +344 -0
- package/dist/core-runtime/evolve/adapters/code-product/compile/compile-defense.test.js +915 -0
- package/dist/core-runtime/evolve/adapters/code-product/compile/compile.js +564 -0
- package/dist/core-runtime/evolve/adapters/code-product/compile/compile.test.js +708 -0
- package/dist/core-runtime/evolve/adapters/code-product/parsers/brief-parser.js +165 -0
- package/dist/core-runtime/evolve/adapters/code-product/parsers/brief-parser.test.js +227 -0
- package/dist/core-runtime/evolve/adapters/code-product/validators/validate.js +59 -0
- package/dist/core-runtime/evolve/adapters/code-product/validators/validate.test.js +205 -0
- package/dist/core-runtime/evolve/adapters/methodology/adapter.js +16 -0
- package/dist/core-runtime/evolve/adapters/methodology/adapter.test.js +9 -0
- package/dist/core-runtime/evolve/adapters/methodology/perspectives/authority-consistency.js +298 -0
- package/dist/core-runtime/evolve/adapters/methodology/perspectives/authority-consistency.test.js +70 -0
- package/dist/core-runtime/evolve/adapters/methodology/scope-types/process.js +46 -0
- package/dist/core-runtime/evolve/adapters/methodology/scope-types/process.test.js +73 -0
- package/dist/core-runtime/evolve/adapters/registry.js +47 -0
- package/dist/core-runtime/evolve/adapters/registry.test.js +67 -0
- package/dist/core-runtime/evolve/cli.js +256 -0
- package/dist/core-runtime/evolve/commands/align.js +194 -0
- package/dist/core-runtime/evolve/commands/align.test.js +82 -0
- package/dist/core-runtime/evolve/commands/apply.js +161 -0
- package/dist/core-runtime/evolve/commands/apply.test.js +138 -0
- package/dist/core-runtime/evolve/commands/close.js +39 -0
- package/dist/core-runtime/evolve/commands/close.test.js +99 -0
- package/dist/core-runtime/evolve/commands/defer.js +40 -0
- package/dist/core-runtime/evolve/commands/defer.test.js +134 -0
- package/dist/core-runtime/evolve/commands/draft.js +323 -0
- package/dist/core-runtime/evolve/commands/draft.test.js +178 -0
- package/dist/core-runtime/evolve/commands/e2e-evolve-full-cycle.test.js +208 -0
- package/dist/core-runtime/evolve/commands/error-messages.js +125 -0
- package/dist/core-runtime/evolve/commands/error-messages.test.js +167 -0
- package/dist/core-runtime/evolve/commands/propose-align.js +222 -0
- package/dist/core-runtime/evolve/commands/propose-align.test.js +136 -0
- package/dist/core-runtime/evolve/commands/reconstruct.js +330 -0
- package/dist/core-runtime/evolve/commands/reconstruct.test.js +278 -0
- package/dist/core-runtime/evolve/commands/shared.js +22 -0
- package/dist/core-runtime/evolve/commands/stale-check.js +103 -0
- package/dist/core-runtime/evolve/commands/stale-check.test.js +84 -0
- package/dist/core-runtime/evolve/commands/start.js +887 -0
- package/dist/core-runtime/evolve/commands/start.test.js +396 -0
- package/dist/core-runtime/evolve/config/project-config.js +99 -0
- package/dist/core-runtime/evolve/config/project-config.test.js +170 -0
- package/dist/core-runtime/evolve/renderers/align-packet.js +280 -0
- package/dist/core-runtime/evolve/renderers/align-packet.test.js +332 -0
- package/dist/core-runtime/evolve/renderers/draft-packet.js +303 -0
- package/dist/core-runtime/evolve/renderers/draft-packet.test.js +377 -0
- package/dist/core-runtime/evolve/renderers/format.js +5 -0
- package/dist/core-runtime/evolve/renderers/scope-md.js +237 -0
- package/dist/core-runtime/evolve/renderers/scope-md.test.js +306 -0
- package/dist/core-runtime/govern/cli.js +369 -0
- package/dist/core-runtime/govern/cli.test.js +314 -0
- package/dist/core-runtime/govern/drift-engine.js +103 -0
- package/dist/core-runtime/govern/drift-engine.test.js +319 -0
- package/dist/core-runtime/govern/promote-principle.js +206 -0
- package/dist/core-runtime/govern/promote-principle.test.js +368 -0
- package/dist/core-runtime/govern/queue.js +81 -0
- package/dist/core-runtime/govern/types.js +16 -0
- package/dist/core-runtime/install/cli.js +530 -0
- package/dist/core-runtime/install/detect.js +128 -0
- package/dist/core-runtime/install/detect.test.js +155 -0
- package/dist/core-runtime/install/gitignore-update.js +74 -0
- package/dist/core-runtime/install/gitignore-update.test.js +64 -0
- package/dist/core-runtime/install/install-integration.test.js +373 -0
- package/dist/core-runtime/install/prompts.js +389 -0
- package/dist/core-runtime/install/prompts.test.js +293 -0
- package/dist/core-runtime/install/types.js +26 -0
- package/dist/core-runtime/install/validation.js +295 -0
- package/dist/core-runtime/install/validation.test.js +313 -0
- package/dist/core-runtime/install/writer.js +254 -0
- package/dist/core-runtime/install/writer.test.js +218 -0
- package/dist/core-runtime/learning/extractor.js +461 -0
- package/dist/core-runtime/learning/feedback.js +179 -0
- package/dist/core-runtime/learning/health-report.js +165 -0
- package/dist/core-runtime/learning/health-report.test.js +169 -0
- package/dist/core-runtime/learning/loader.js +388 -0
- package/dist/core-runtime/learning/loader.test.js +102 -0
- package/dist/core-runtime/learning/promote/apply-state.js +240 -0
- package/dist/core-runtime/learning/promote/audit-obligation.js +195 -0
- package/dist/core-runtime/learning/promote/collector.js +432 -0
- package/dist/core-runtime/learning/promote/degraded-state.js +125 -0
- package/dist/core-runtime/learning/promote/domain-doc-proposer.js +166 -0
- package/dist/core-runtime/learning/promote/e2e-promote.test.js +6385 -0
- package/dist/core-runtime/learning/promote/health-snapshot.js +150 -0
- package/dist/core-runtime/learning/promote/insight-reclassifier.js +544 -0
- package/dist/core-runtime/learning/promote/judgment-auditor.js +517 -0
- package/dist/core-runtime/learning/promote/panel-reviewer.js +1158 -0
- package/dist/core-runtime/learning/promote/promote-executor.js +1675 -0
- package/dist/core-runtime/learning/promote/promoter.js +307 -0
- package/dist/core-runtime/learning/promote/retirement.js +122 -0
- package/dist/core-runtime/learning/promote/types.js +23 -0
- package/dist/core-runtime/learning/prompt-sections.js +51 -0
- package/dist/core-runtime/learning/shared/artifact-registry-init.js +45 -0
- package/dist/core-runtime/learning/shared/artifact-registry.js +254 -0
- package/dist/core-runtime/learning/shared/audit-obligation-kernel.js +73 -0
- package/dist/core-runtime/learning/shared/audit-state.js +99 -0
- package/dist/core-runtime/learning/shared/duplicate-check.js +28 -0
- package/dist/core-runtime/learning/shared/llm-caller.js +831 -0
- package/dist/core-runtime/learning/shared/llm-caller.test.js +601 -0
- package/dist/core-runtime/learning/shared/llm-tool-loop.js +393 -0
- package/dist/core-runtime/learning/shared/mode.js +25 -0
- package/dist/core-runtime/learning/shared/paths.js +84 -0
- package/dist/core-runtime/learning/shared/paths.test.js +79 -0
- package/dist/core-runtime/learning/shared/patterns.js +37 -0
- package/dist/core-runtime/learning/shared/recoverability.js +355 -0
- package/dist/core-runtime/learning/shared/recovery-context.js +374 -0
- package/dist/core-runtime/learning/shared/scope.js +1 -0
- package/dist/core-runtime/learning/shared/semantic-classifier.js +94 -0
- package/dist/core-runtime/learning/shared/specs/apply-execution-state-spec.js +42 -0
- package/dist/core-runtime/learning/shared/specs/audit-state-spec.js +37 -0
- package/dist/core-runtime/learning/shared/specs/backup-metadata-spec.js +39 -0
- package/dist/core-runtime/learning/shared/specs/emergency-log-spec.js +41 -0
- package/dist/core-runtime/learning/shared/specs/layout-version-spec.js +38 -0
- package/dist/core-runtime/learning/shared/specs/promote-decisions-spec.js +43 -0
- package/dist/core-runtime/learning/shared/specs/promote-report-spec.js +113 -0
- package/dist/core-runtime/learning/shared/specs/prune-log-spec.js +36 -0
- package/dist/core-runtime/learning/shared/specs/recovery-resolution-spec.js +48 -0
- package/dist/core-runtime/learning/shared/specs/restore-manifest-spec.js +43 -0
- package/dist/core-runtime/learning/shared/specs/spec-helpers.js +64 -0
- package/dist/core-runtime/learning/usage-tracker.js +190 -0
- package/dist/core-runtime/learning/usage-tracker.test.js +176 -0
- package/dist/core-runtime/llm/llm-caller.js +649 -0
- package/dist/core-runtime/llm/llm-tool-loop.js +401 -0
- package/dist/core-runtime/llm/model-switcher.js +62 -0
- package/dist/core-runtime/logger.js +22 -0
- package/dist/core-runtime/onboard/detect-review-axes.js +122 -0
- package/dist/core-runtime/onboard/detect-review-axes.test.js +127 -0
- package/dist/core-runtime/onboard/write-review-block.js +188 -0
- package/dist/core-runtime/onboard/write-review-block.test.js +240 -0
- package/dist/core-runtime/readers/brownfield-builder.js +150 -0
- package/dist/core-runtime/readers/brownfield-builder.test.js +136 -0
- package/dist/core-runtime/readers/code-chunk-collector.js +53 -0
- package/dist/core-runtime/readers/code-chunk-collector.test.js +136 -0
- package/dist/core-runtime/readers/file-utils.js +240 -0
- package/dist/core-runtime/readers/file-utils.test.js +146 -0
- package/dist/core-runtime/readers/lexicon-citation-check.js +93 -0
- package/dist/core-runtime/readers/lexicon-citation-check.test.js +77 -0
- package/dist/core-runtime/readers/mcp-figma.js +30 -0
- package/dist/core-runtime/readers/mcp-figma.test.js +82 -0
- package/dist/core-runtime/readers/mcp-generic.js +31 -0
- package/dist/core-runtime/readers/mcp-generic.test.js +76 -0
- package/dist/core-runtime/readers/ontology-index.js +148 -0
- package/dist/core-runtime/readers/ontology-index.test.js +245 -0
- package/dist/core-runtime/readers/ontology-query.js +168 -0
- package/dist/core-runtime/readers/ontology-query.test.js +311 -0
- package/dist/core-runtime/readers/ontology-resolve.js +48 -0
- package/dist/core-runtime/readers/ontology-resolve.test.js +48 -0
- package/dist/core-runtime/readers/patterns/index.js +7 -0
- package/dist/core-runtime/readers/review-log.js +213 -0
- package/dist/core-runtime/readers/review-log.test.js +313 -0
- package/dist/core-runtime/readers/scan-local.js +102 -0
- package/dist/core-runtime/readers/scan-local.test.js +102 -0
- package/dist/core-runtime/readers/scan-tarball.js +121 -0
- package/dist/core-runtime/readers/scan-tarball.test.js +283 -0
- package/dist/core-runtime/readers/scan-vault.js +34 -0
- package/dist/core-runtime/readers/scan-vault.test.js +81 -0
- package/dist/core-runtime/readers/types.js +42 -0
- package/dist/core-runtime/readers/types.test.js +94 -0
- package/dist/core-runtime/readers/viewpoint-collectors.js +229 -0
- package/dist/core-runtime/reconstruct/artifact-types.js +1 -0
- package/dist/core-runtime/reconstruct/directive-validation.js +123 -0
- package/dist/core-runtime/reconstruct/materialize-preparation.js +251 -0
- package/dist/core-runtime/reconstruct/record.js +198 -0
- package/dist/core-runtime/reconstruct/run.js +578 -0
- package/dist/core-runtime/reconstruct/seed-candidate-validation.js +356 -0
- package/dist/core-runtime/reconstruct/source-observations.js +62 -0
- package/dist/core-runtime/reconstruct/source-profiles.js +73 -0
- package/dist/core-runtime/release-channel/release-channel.js +90 -0
- package/dist/core-runtime/review/artifact-types.js +13 -0
- package/dist/core-runtime/review/citation-audit.js +204 -0
- package/dist/core-runtime/review/citation-audit.test.js +165 -0
- package/dist/core-runtime/review/controlled-lens-deliberation.js +125 -0
- package/dist/core-runtime/review/execution-plan-resolver.js +247 -0
- package/dist/core-runtime/review/execution-plan-resolver.test.js +243 -0
- package/dist/core-runtime/review/execution-topology-resolver-axis-first.test.js +246 -0
- package/dist/core-runtime/review/execution-topology-resolver.js +401 -0
- package/dist/core-runtime/review/execution-topology-resolver.test.js +315 -0
- package/dist/core-runtime/review/failure-records.js +57 -0
- package/dist/core-runtime/review/inline-context-embedder.js +141 -0
- package/dist/core-runtime/review/inline-context-embedder.test.js +154 -0
- package/dist/core-runtime/review/issue-artifact-runtime.js +859 -0
- package/dist/core-runtime/review/legacy-mode-policy.js +88 -0
- package/dist/core-runtime/review/lens-completion-policy.js +17 -0
- package/dist/core-runtime/review/materializers-effort-persist.test.js +79 -0
- package/dist/core-runtime/review/materializers.js +963 -0
- package/dist/core-runtime/review/ontology-path-classifier.js +179 -0
- package/dist/core-runtime/review/ontology-path-classifier.test.js +216 -0
- package/dist/core-runtime/review/packet-boundary-policy.js +215 -0
- package/dist/core-runtime/review/packet-boundary-policy.test.js +107 -0
- package/dist/core-runtime/review/participating-lens-paths.js +61 -0
- package/dist/core-runtime/review/participating-lens-paths.test.js +73 -0
- package/dist/core-runtime/review/review-artifact-utils.js +287 -0
- package/dist/core-runtime/review/review-config-legacy-translate.js +244 -0
- package/dist/core-runtime/review/review-config-legacy-translate.test.js +161 -0
- package/dist/core-runtime/review/review-config-validator.js +289 -0
- package/dist/core-runtime/review/review-config-validator.test.js +236 -0
- package/dist/core-runtime/review/review-execution-profile.js +193 -0
- package/dist/core-runtime/review/review-execution-route.js +52 -0
- package/dist/core-runtime/review/review-progress-contract.js +123 -0
- package/dist/core-runtime/review/review-record-validation.js +251 -0
- package/dist/core-runtime/review/review-result-classification.js +379 -0
- package/dist/core-runtime/review/review-state-machine.js +39 -0
- package/dist/core-runtime/review/route-visibility.js +125 -0
- package/dist/core-runtime/review/shape-pipeline-audit.test.js +311 -0
- package/dist/core-runtime/review/shape-to-topology-id.js +117 -0
- package/dist/core-runtime/review/shape-to-topology-id.test.js +132 -0
- package/dist/core-runtime/review/topology-shape-derivation.js +155 -0
- package/dist/core-runtime/review/topology-shape-derivation.test.js +195 -0
- package/dist/core-runtime/scope-runtime/constants.js +12 -0
- package/dist/core-runtime/scope-runtime/constraint-pool.js +166 -0
- package/dist/core-runtime/scope-runtime/constraint-pool.test.js +674 -0
- package/dist/core-runtime/scope-runtime/domain-validation-log.js +135 -0
- package/dist/core-runtime/scope-runtime/domain-validation-log.test.js +156 -0
- package/dist/core-runtime/scope-runtime/eval-persistence.js +65 -0
- package/dist/core-runtime/scope-runtime/eval-persistence.test.js +84 -0
- package/dist/core-runtime/scope-runtime/event-pipeline.js +64 -0
- package/dist/core-runtime/scope-runtime/event-pipeline.test.js +450 -0
- package/dist/core-runtime/scope-runtime/event-store.js +39 -0
- package/dist/core-runtime/scope-runtime/event-store.test.js +95 -0
- package/dist/core-runtime/scope-runtime/gate-guard.js +348 -0
- package/dist/core-runtime/scope-runtime/gate-guard.test.js +1047 -0
- package/dist/core-runtime/scope-runtime/hash.js +4 -0
- package/dist/core-runtime/scope-runtime/hash.test.js +33 -0
- package/dist/core-runtime/scope-runtime/id.js +4 -0
- package/dist/core-runtime/scope-runtime/id.test.js +17 -0
- package/dist/core-runtime/scope-runtime/reducer.js +297 -0
- package/dist/core-runtime/scope-runtime/reducer.test.js +759 -0
- package/dist/core-runtime/scope-runtime/scope-manager.js +161 -0
- package/dist/core-runtime/scope-runtime/state-machine.js +309 -0
- package/dist/core-runtime/scope-runtime/state-machine.test.js +704 -0
- package/dist/core-runtime/scope-runtime/types.js +116 -0
- package/dist/core-runtime/scope-runtime/types.test.js +69 -0
- package/dist/core-runtime/target-material-kind.js +256 -0
- package/dist/core-runtime/translate/render-for-user.js +169 -0
- package/dist/core-runtime/translate/render-for-user.test.js +122 -0
- package/dist/mcp/server.js +1011 -0
- package/dist/mcp/tool-schemas.js +93 -0
- package/dist/providers/capability-contract.js +1 -0
- package/package.json +68 -0
- package/settings.example.json +33 -0
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TeamCreate Lens Deliberation Executor.
|
|
3
|
+
*
|
|
4
|
+
* # What this module is
|
|
5
|
+
*
|
|
6
|
+
* Realizes the protocol side of topology `cc-teams-lens-agent-deliberation`
|
|
7
|
+
* (sketch v3 §3.1 option 1-0). After each of the N lens agents — spawned
|
|
8
|
+
* as persistent `TeamCreate` members — completes its primary lens
|
|
9
|
+
* reasoning, the teamlead dispatches 1-2 rounds of `SendMessage` controlled-deliberation transport
|
|
10
|
+
* deliberation: every lens agent sees the others' outputs and replies
|
|
11
|
+
* with a re-evaluation. Deliberation outputs are written to
|
|
12
|
+
* `<deliberation_dir>/roundN/<lens_id>-deliberation.md` and fed into
|
|
13
|
+
* the final synthesize step.
|
|
14
|
+
*
|
|
15
|
+
* # Why it exists
|
|
16
|
+
*
|
|
17
|
+
* 1-0 is the only topology in which lens agents can directly cross-talk
|
|
18
|
+
* without ending their sessions — every other topology terminates lens
|
|
19
|
+
* agents after output so only the synthesize step integrates findings.
|
|
20
|
+
* Deliberation therefore requires a persistent `TeamCreate` lifecycle
|
|
21
|
+
* (Claude Code experimental feature; pre-verified by the principal
|
|
22
|
+
* 2026-04-18, handoff §6.7).
|
|
23
|
+
*
|
|
24
|
+
* # How it relates
|
|
25
|
+
*
|
|
26
|
+
* - `resolveExecutionTopology()` selects `cc-teams-lens-agent-deliberation`
|
|
27
|
+
* only when TRIPLE opt-in is satisfied (CLAUDECODE + experimental flag
|
|
28
|
+
* + `config.lens_agent_teams_mode`). This module re-checks the same
|
|
29
|
+
* three flags via `requireDeliberationOptIn()` as a defence-in-depth
|
|
30
|
+
* guard for direct callers.
|
|
31
|
+
* - `TeamCreate` / `SendMessage` themselves are Claude Code tools invoked
|
|
32
|
+
* by the Claude coordinator agent (not by the TS subprocess). This
|
|
33
|
+
* module produces PROTOCOL ARTIFACTS — prompts the agent sends,
|
|
34
|
+
* markdown files it writes, schema the synthesize step consumes —
|
|
35
|
+
* so the Claude agent has a deterministic script to follow. The
|
|
36
|
+
* actual controlled-deliberation transport message dispatch stays at the Claude tool layer.
|
|
37
|
+
*
|
|
38
|
+
* # Scope
|
|
39
|
+
*
|
|
40
|
+
* - Triple opt-in guard (`requireDeliberationOptIn`)
|
|
41
|
+
* - Per-round prompt templates (`buildDeliberationRound1Prompt` /
|
|
42
|
+
* `buildDeliberationRound2Prompt`)
|
|
43
|
+
* - Artifact read/write helpers (`writeDeliberationArtifact` /
|
|
44
|
+
* `readDeliberationArtifact`)
|
|
45
|
+
* - Disagreement extraction (`extractDisagreements`) for round 2
|
|
46
|
+
* - Orchestration entrypoint (`runLensAgentDeliberation`) — produces
|
|
47
|
+
* the deliberation plan structure the coordinator follows
|
|
48
|
+
*
|
|
49
|
+
* Integration into `executeReviewPromptExecution` (routing 1-0 resolutions
|
|
50
|
+
* through this module) is reserved for PR-E.
|
|
51
|
+
*
|
|
52
|
+
* # Design reference
|
|
53
|
+
*
|
|
54
|
+
* - Sketch v3 §3.1 option 1-0, §6.4 (double opt-in becomes triple here)
|
|
55
|
+
* - Handoff §6: development-records/plan/20260418-sketch-v3-implementation-handoff.md
|
|
56
|
+
*/
|
|
57
|
+
import fs from "node:fs/promises";
|
|
58
|
+
import path from "node:path";
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Errors
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
export class DeliberationOptInError extends Error {
|
|
63
|
+
missing;
|
|
64
|
+
constructor(missing) {
|
|
65
|
+
super([
|
|
66
|
+
"cc-teams-lens-agent-deliberation topology 는 3 중 opt-in 이 모두 필요합니다.",
|
|
67
|
+
"누락된 조건:",
|
|
68
|
+
...missing.map((m) => ` - ${m}`),
|
|
69
|
+
"",
|
|
70
|
+
"해결:",
|
|
71
|
+
" 1. Claude Code 세션에서 실행 (CLAUDECODE=1 자동)",
|
|
72
|
+
" 2. ~/.claude*/settings.json 에 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 설정",
|
|
73
|
+
" 3. .onto/config.yml 에 lens_agent_teams_mode: true 명시",
|
|
74
|
+
].join("\n"));
|
|
75
|
+
this.missing = missing;
|
|
76
|
+
this.name = "DeliberationOptInError";
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// Triple opt-in guard
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
/**
|
|
83
|
+
* Defence-in-depth check. `resolveExecutionTopology` already enforces the
|
|
84
|
+
* same three flags at resolver time, but direct callers of this module
|
|
85
|
+
* (tests, bespoke scripts) also bear the invariant. Called at the top of
|
|
86
|
+
* `runLensAgentDeliberation`.
|
|
87
|
+
*/
|
|
88
|
+
export function requireDeliberationOptIn(ontoConfig, env = process.env) {
|
|
89
|
+
const missing = [];
|
|
90
|
+
if (env.CLAUDECODE !== "1")
|
|
91
|
+
missing.push("CLAUDECODE=1 (Claude Code 세션 아님)");
|
|
92
|
+
if (env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS !== "1") {
|
|
93
|
+
missing.push("CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 (experimental agent teams 미활성)");
|
|
94
|
+
}
|
|
95
|
+
if (ontoConfig.lens_agent_teams_mode !== true) {
|
|
96
|
+
missing.push("config.lens_agent_teams_mode=true (프로젝트 opt-in 미설정)");
|
|
97
|
+
}
|
|
98
|
+
if (missing.length > 0) {
|
|
99
|
+
throw new DeliberationOptInError(missing);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Prompt templates
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
/**
|
|
106
|
+
* Round 1: give each lens agent the primary outputs of EVERY OTHER lens
|
|
107
|
+
* and ask for a re-evaluation. The lens is free to stand firm, concede,
|
|
108
|
+
* or refine — the prompt does not prescribe an outcome, only the shape
|
|
109
|
+
* of the reply.
|
|
110
|
+
*
|
|
111
|
+
* Design choice: the lens reads its OWN prior output implicitly (it's
|
|
112
|
+
* in its own session memory). We pass only the `own_output_summary`
|
|
113
|
+
* as a name anchor; the full payload that differs is "other lens
|
|
114
|
+
* outputs". This keeps round 1 prompts bounded when N is large.
|
|
115
|
+
*/
|
|
116
|
+
export function buildDeliberationRound1Prompt(args) {
|
|
117
|
+
const otherBlocks = args.other_lens_outputs
|
|
118
|
+
.map((other) => {
|
|
119
|
+
return [
|
|
120
|
+
`## Lens: ${other.lens_id}`,
|
|
121
|
+
"",
|
|
122
|
+
other.content.trim(),
|
|
123
|
+
].join("\n");
|
|
124
|
+
})
|
|
125
|
+
.join("\n\n---\n\n");
|
|
126
|
+
return [
|
|
127
|
+
`# Deliberation Round 1 — lens "${args.own_lens_id}"`,
|
|
128
|
+
"",
|
|
129
|
+
"당신은 기존에 작성한 검토 결과를 이미 본인 세션에 보유하고 있습니다.",
|
|
130
|
+
`Own output 요약: ${args.own_output_summary}`,
|
|
131
|
+
"",
|
|
132
|
+
"아래는 **다른 lens agent 들의 출력** 입니다. 각 lens 는 독립적으로",
|
|
133
|
+
"관점을 수행했으며, 일부는 당신과 상충하거나 보완할 수 있습니다.",
|
|
134
|
+
"",
|
|
135
|
+
"# 다른 lens 들의 출력",
|
|
136
|
+
"",
|
|
137
|
+
otherBlocks,
|
|
138
|
+
"",
|
|
139
|
+
"# 당신의 작업",
|
|
140
|
+
"",
|
|
141
|
+
"위 내용을 읽고 당신의 기존 결론을 **재평가** 하세요:",
|
|
142
|
+
"",
|
|
143
|
+
"1. **동의 또는 강화**: 다른 lens 의 발견이 당신의 판단을 뒷받침하는가?",
|
|
144
|
+
" 근거를 명시하세요.",
|
|
145
|
+
"2. **반박 또는 수정**: 다른 lens 와 충돌하는 지점이 있는가? 당신의",
|
|
146
|
+
" 기존 결론을 유지할지 수정할지 명시하세요.",
|
|
147
|
+
"3. **새로운 발견**: 다른 lens 출력에서 촉발된 추가 관찰이 있는가?",
|
|
148
|
+
"",
|
|
149
|
+
"응답 형식 (markdown, 600 단어 이내):",
|
|
150
|
+
"",
|
|
151
|
+
"```",
|
|
152
|
+
"## 재평가 요약",
|
|
153
|
+
"<2-3 문장으로 당신의 round 1 이후 입장 요약>",
|
|
154
|
+
"",
|
|
155
|
+
"## 동의/강화 지점",
|
|
156
|
+
"<다른 lens 의 발견 중 당신의 판단을 강화한 것; bullet 또는 문단>",
|
|
157
|
+
"",
|
|
158
|
+
"## 충돌/수정 지점",
|
|
159
|
+
"<다른 lens 와 충돌하는 지점, 당신의 응답 + 기존 결론 유지/수정 여부>",
|
|
160
|
+
"",
|
|
161
|
+
"## 추가 발견",
|
|
162
|
+
"<촉발된 새 관찰; 없으면 '없음' 명시>",
|
|
163
|
+
"```",
|
|
164
|
+
"",
|
|
165
|
+
"이 응답을 당신이 담당한 deliberation artifact 파일에 기록하세요.",
|
|
166
|
+
].join("\n");
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Round 2: consolidation + disagreement surfacing. Each lens agent sees
|
|
170
|
+
* ALL round-1 responses (including its own) and is asked to either
|
|
171
|
+
* converge or explicitly mark points of persistent disagreement so the
|
|
172
|
+
* synthesizer can represent them faithfully rather than hide them.
|
|
173
|
+
*/
|
|
174
|
+
export function buildDeliberationRound2Prompt(args) {
|
|
175
|
+
const blocks = args.round1_responses
|
|
176
|
+
.map((r) => `## Round 1 response — lens: ${r.lens_id}\n\n${r.content.trim()}`)
|
|
177
|
+
.join("\n\n---\n\n");
|
|
178
|
+
return [
|
|
179
|
+
`# Deliberation Round 2 — lens "${args.own_lens_id}"`,
|
|
180
|
+
"",
|
|
181
|
+
"Round 1 에서 모든 lens 가 재평가를 마쳤습니다. 아래는 round 1 응답",
|
|
182
|
+
"전체입니다 (당신의 응답 포함). 이제 round 2 에서 다음을 수행하세요:",
|
|
183
|
+
"",
|
|
184
|
+
"1. **수렴 가능 지점**: 여러 lens 가 round 1 에서 일치한 판단을 식별.",
|
|
185
|
+
"2. **지속적 이견**: round 1 이후에도 해소되지 않는 충돌을 식별.",
|
|
186
|
+
" 이견은 숨기지 말고 명시하세요 — synthesizer 는 이견을 있는 그대로",
|
|
187
|
+
" 표상하는 것이 소거하는 것보다 낫습니다.",
|
|
188
|
+
"3. **최종 입장**: 당신의 lens 관점 최종 입장 (round 1 → 2 변화 유무 포함).",
|
|
189
|
+
"",
|
|
190
|
+
"# Round 1 응답 전체",
|
|
191
|
+
"",
|
|
192
|
+
blocks,
|
|
193
|
+
"",
|
|
194
|
+
"# 응답 형식 (markdown, 500 단어 이내)",
|
|
195
|
+
"",
|
|
196
|
+
"```",
|
|
197
|
+
"## 수렴 요약",
|
|
198
|
+
"<모든 lens 가 동의한 판단; bullet>",
|
|
199
|
+
"",
|
|
200
|
+
"## 지속적 이견",
|
|
201
|
+
"<다음 포맷으로 각 이견 항목>",
|
|
202
|
+
"- **이견 항목**: <짧은 제목>",
|
|
203
|
+
" - 당신의 입장: <...>",
|
|
204
|
+
" - 반대 입장 (lens X): <...>",
|
|
205
|
+
" - 해소 경로 (있다면): <...>",
|
|
206
|
+
"",
|
|
207
|
+
"## 최종 입장",
|
|
208
|
+
"<당신의 lens 관점에서 round 1 → 2 를 거친 최종 결론>",
|
|
209
|
+
"```",
|
|
210
|
+
"",
|
|
211
|
+
"이 응답을 당신의 round 2 deliberation artifact 파일에 기록하세요.",
|
|
212
|
+
].join("\n");
|
|
213
|
+
}
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
// Artifact read/write
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
/**
|
|
218
|
+
* Compute the path for a given round + lens deliberation artifact.
|
|
219
|
+
* Pure function so tests can assert without filesystem side effects.
|
|
220
|
+
*/
|
|
221
|
+
export function deliberationArtifactPath(deliberation_dir, round, lens_id) {
|
|
222
|
+
return path.join(deliberation_dir, `round${round}`, `${lens_id}-deliberation.md`);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Write a deliberation artifact to disk, creating parent directories.
|
|
226
|
+
* Returns the absolute path written.
|
|
227
|
+
*/
|
|
228
|
+
export async function writeDeliberationArtifact(deliberation_dir, round, lens_id, content) {
|
|
229
|
+
const filePath = deliberationArtifactPath(deliberation_dir, round, lens_id);
|
|
230
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
231
|
+
await fs.writeFile(filePath, content, "utf8");
|
|
232
|
+
return filePath;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Read a deliberation artifact. Returns `null` when the file does not
|
|
236
|
+
* exist (not an error — synthesize step decides whether absence is
|
|
237
|
+
* acceptable for a given lens / round pair).
|
|
238
|
+
*/
|
|
239
|
+
export async function readDeliberationArtifact(deliberation_dir, round, lens_id) {
|
|
240
|
+
const filePath = deliberationArtifactPath(deliberation_dir, round, lens_id);
|
|
241
|
+
try {
|
|
242
|
+
return await fs.readFile(filePath, "utf8");
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
const code = err.code;
|
|
246
|
+
if (code === "ENOENT")
|
|
247
|
+
return null;
|
|
248
|
+
throw err;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const DISAGREEMENT_HEADING_PATTERNS = [
|
|
252
|
+
/^##\s+지속적\s*이견\s*$/m,
|
|
253
|
+
/^##\s+Persistent\s+Disagreements?\s*$/im,
|
|
254
|
+
];
|
|
255
|
+
const ITEM_PREFIX = /^-\s+\*\*이견\s*항목\*\*\s*:\s*(.+?)\s*$/;
|
|
256
|
+
/**
|
|
257
|
+
* Parse round-2 artifacts for a "지속적 이견" section and extract each
|
|
258
|
+
* bullet labelled `**이견 항목**`. Other bullet content up to the next
|
|
259
|
+
* `- **이견 항목**` entry (or end of section / next `##`) is captured
|
|
260
|
+
* as body.
|
|
261
|
+
*
|
|
262
|
+
* Unknown / missing section → empty array. Lenient parsing by design:
|
|
263
|
+
* lens agents may vary the exact punctuation.
|
|
264
|
+
*/
|
|
265
|
+
export function extractDisagreements(round2_artifacts) {
|
|
266
|
+
const out = [];
|
|
267
|
+
for (const artifact of round2_artifacts) {
|
|
268
|
+
const sectionContent = extractSection(artifact.content);
|
|
269
|
+
if (!sectionContent)
|
|
270
|
+
continue;
|
|
271
|
+
const items = splitDisagreementItems(sectionContent);
|
|
272
|
+
for (const item of items) {
|
|
273
|
+
out.push({
|
|
274
|
+
source_lens_id: artifact.lens_id,
|
|
275
|
+
title: item.title,
|
|
276
|
+
body: item.body,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return out;
|
|
281
|
+
}
|
|
282
|
+
function extractSection(content) {
|
|
283
|
+
for (const pattern of DISAGREEMENT_HEADING_PATTERNS) {
|
|
284
|
+
const match = content.match(pattern);
|
|
285
|
+
if (!match)
|
|
286
|
+
continue;
|
|
287
|
+
const start = match.index;
|
|
288
|
+
if (typeof start !== "number")
|
|
289
|
+
continue;
|
|
290
|
+
const after = content.slice(start + match[0].length);
|
|
291
|
+
// Cut at the next ## heading, if any.
|
|
292
|
+
const nextHeading = after.search(/^##\s+/m);
|
|
293
|
+
const section = nextHeading >= 0 ? after.slice(0, nextHeading) : after;
|
|
294
|
+
return section.trim();
|
|
295
|
+
}
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
function splitDisagreementItems(section) {
|
|
299
|
+
const items = [];
|
|
300
|
+
const lines = section.split("\n");
|
|
301
|
+
let current = null;
|
|
302
|
+
for (const line of lines) {
|
|
303
|
+
const match = line.match(ITEM_PREFIX);
|
|
304
|
+
if (match) {
|
|
305
|
+
if (current) {
|
|
306
|
+
items.push({ title: current.title, body: current.bodyLines.join("\n").trim() });
|
|
307
|
+
}
|
|
308
|
+
current = { title: match[1], bodyLines: [] };
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
if (current) {
|
|
312
|
+
current.bodyLines.push(line);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (current) {
|
|
316
|
+
items.push({ title: current.title, body: current.bodyLines.join("\n").trim() });
|
|
317
|
+
}
|
|
318
|
+
return items;
|
|
319
|
+
}
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
// Deliberation plan builder
|
|
322
|
+
// ---------------------------------------------------------------------------
|
|
323
|
+
/**
|
|
324
|
+
* Build the step-by-step plan the coordinator follows. Pure — no
|
|
325
|
+
* filesystem or spawn calls. Useful for logging / artifact recording
|
|
326
|
+
* before the coordinator begins Claude-tool invocations.
|
|
327
|
+
*
|
|
328
|
+
* Round 1 steps are emitted first (one per lens), then round 2 (if
|
|
329
|
+
* requested). Step ordering within a round is stable (matches
|
|
330
|
+
* `input.lenses` order).
|
|
331
|
+
*/
|
|
332
|
+
export function buildDeliberationPlan(input, round1ContentBuilder, round2ContentBuilder) {
|
|
333
|
+
const steps = [];
|
|
334
|
+
for (const lens of input.lenses) {
|
|
335
|
+
const others = input.lenses.filter((l) => l.lens_id !== lens.lens_id);
|
|
336
|
+
steps.push({
|
|
337
|
+
round: 1,
|
|
338
|
+
lens_id: lens.lens_id,
|
|
339
|
+
prompt: round1ContentBuilder(lens, others),
|
|
340
|
+
artifact_path: deliberationArtifactPath(input.deliberation_dir, 1, lens.lens_id),
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
if (input.rounds >= 2 && round2ContentBuilder) {
|
|
344
|
+
for (const lens of input.lenses) {
|
|
345
|
+
const others = input.lenses.filter((l) => l.lens_id !== lens.lens_id);
|
|
346
|
+
steps.push({
|
|
347
|
+
round: 2,
|
|
348
|
+
lens_id: lens.lens_id,
|
|
349
|
+
prompt: round2ContentBuilder(lens, others),
|
|
350
|
+
artifact_path: deliberationArtifactPath(input.deliberation_dir, 2, lens.lens_id),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return {
|
|
355
|
+
steps,
|
|
356
|
+
all_artifact_paths: steps.map((s) => s.artifact_path),
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Produce the deliberation plan after verifying opt-in and reading lens
|
|
361
|
+
* primary outputs. Does NOT invoke `TeamCreate` or `SendMessage` itself
|
|
362
|
+
* — those are Claude tools the coordinator agent invokes. The returned
|
|
363
|
+
* plan contains fully-formed prompts and target artifact paths.
|
|
364
|
+
*
|
|
365
|
+
* This separation keeps the TS test harness deterministic without needing
|
|
366
|
+
* Claude Code runtime access: TS builds prompts + schema, Claude agent
|
|
367
|
+
* executes tool calls.
|
|
368
|
+
*/
|
|
369
|
+
export async function runLensAgentDeliberation(args) {
|
|
370
|
+
requireDeliberationOptIn(args.ontoConfig, args.env ?? process.env);
|
|
371
|
+
const read = args.readPrimary ?? (async (p) => fs.readFile(p, "utf8"));
|
|
372
|
+
const primaryBodies = await Promise.all(args.input.lenses.map(async (lens) => ({
|
|
373
|
+
lens_id: lens.lens_id,
|
|
374
|
+
content: await read(lens.output_path),
|
|
375
|
+
})));
|
|
376
|
+
const bodyByLens = new Map(primaryBodies.map((p) => [p.lens_id, p.content]));
|
|
377
|
+
const round1Builder = (own, others) => {
|
|
378
|
+
const otherOutputs = others.map((o) => ({
|
|
379
|
+
lens_id: o.lens_id,
|
|
380
|
+
content: bodyByLens.get(o.lens_id) ?? "",
|
|
381
|
+
}));
|
|
382
|
+
const ownSummary = summarizeFirstParagraph(bodyByLens.get(own.lens_id) ?? "");
|
|
383
|
+
return buildDeliberationRound1Prompt({
|
|
384
|
+
own_lens_id: own.lens_id,
|
|
385
|
+
own_output_summary: ownSummary,
|
|
386
|
+
other_lens_outputs: otherOutputs,
|
|
387
|
+
});
|
|
388
|
+
};
|
|
389
|
+
const round2Builder = (own, _others) => {
|
|
390
|
+
// Round 2 prompt is built lazily (it depends on round-1 responses
|
|
391
|
+
// that don't yet exist at plan-build time). For the plan, we emit
|
|
392
|
+
// a PLACEHOLDER that the coordinator replaces with actual round-1
|
|
393
|
+
// responses read from disk once round 1 completes.
|
|
394
|
+
return buildDeliberationRound2Prompt({
|
|
395
|
+
own_lens_id: own.lens_id,
|
|
396
|
+
round1_responses: [
|
|
397
|
+
{
|
|
398
|
+
lens_id: "<placeholder>",
|
|
399
|
+
content: "[coordinator-replace-at-runtime]: round 1 artifacts 를 읽어 모든 lens 의 응답을 여기에 삽입.",
|
|
400
|
+
},
|
|
401
|
+
],
|
|
402
|
+
});
|
|
403
|
+
};
|
|
404
|
+
return buildDeliberationPlan(args.input, round1Builder, args.input.rounds >= 2 ? round2Builder : undefined);
|
|
405
|
+
}
|
|
406
|
+
function summarizeFirstParagraph(content) {
|
|
407
|
+
const paragraphs = content.split(/\n\s*\n/);
|
|
408
|
+
const first = paragraphs[0]?.trim() ?? "";
|
|
409
|
+
if (first.length <= 140)
|
|
410
|
+
return first;
|
|
411
|
+
return first.slice(0, 137) + "...";
|
|
412
|
+
}
|