ultimate-pi 0.1.7 → 0.2.2
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/.agents/skills/graphify/.graphify_version +1 -0
- package/.agents/skills/graphify/SKILL.md +1204 -0
- package/.agents/skills/wiki-autoresearch/SKILL.md +225 -97
- package/.agents/skills/wiki-autoresearch/references/program.md +28 -62
- package/.agents/skills/wiki-autoresearch/references/quality-sites.md +32 -0
- package/.env.example +5 -1
- package/.gitattributes +1 -0
- package/.github/workflows/publish-github-packages.yml +1 -1
- package/.pi/SYSTEM.md +72 -18
- package/.pi/agents/harness/adversary.md +32 -0
- package/.pi/agents/harness/evaluator.md +32 -0
- package/.pi/agents/harness/executor.md +34 -0
- package/.pi/agents/harness/meta-optimizer.md +33 -0
- package/.pi/agents/harness/planner.md +33 -0
- package/.pi/agents/harness/tie-breaker.md +35 -0
- package/.pi/agents/harness/trace-librarian.md +32 -0
- package/.pi/extensions/banner.png +0 -0
- package/.pi/extensions/budget-guard.ts +265 -0
- package/.pi/extensions/custom-footer.ts +194 -22
- package/.pi/extensions/custom-header.ts +47 -9
- package/.pi/extensions/debate-orchestrator.ts +479 -0
- package/.pi/extensions/harness-live-widget.ts +438 -0
- package/.pi/extensions/policy-gate.ts +349 -0
- package/.pi/extensions/review-integrity.ts +198 -0
- package/.pi/extensions/test-diff-integrity.ts +240 -0
- package/.pi/extensions/trace-recorder.ts +315 -0
- package/.pi/harness/README.md +23 -0
- package/.pi/harness/router/README.md +35 -0
- package/.pi/harness/router/apply-router-proposal.mjs +153 -0
- package/.pi/harness/router/propose-router-tuning.mjs +149 -0
- package/.pi/harness/specs/README.md +37 -0
- package/.pi/harness/specs/adversary-report.schema.json +53 -0
- package/.pi/harness/specs/budget-exhausted-event.schema.json +93 -0
- package/.pi/harness/specs/consensus-packet.schema.json +175 -0
- package/.pi/harness/specs/eval-verdict.schema.json +59 -0
- package/.pi/harness/specs/incident-record.schema.json +84 -0
- package/.pi/harness/specs/plan-packet.schema.json +90 -0
- package/.pi/harness/specs/round-result.schema.json +126 -0
- package/.pi/harness/specs/router-tuning-proposal.schema.json +114 -0
- package/.pi/harness/specs/run-trace.schema.json +107 -0
- package/.pi/lib/harness-ui-state.ts +311 -0
- package/.pi/mcp.json +4 -0
- package/.pi/model-router.json +93 -93
- package/.pi/prompts/graphify.md +23 -0
- package/.pi/prompts/harness-abort.md +41 -0
- package/.pi/prompts/harness-auto.md +83 -0
- package/.pi/prompts/harness-critic.md +52 -0
- package/.pi/prompts/harness-eval.md +51 -0
- package/.pi/prompts/harness-incident.md +51 -0
- package/.pi/prompts/harness-plan.md +64 -0
- package/.pi/prompts/harness-review.md +52 -0
- package/.pi/prompts/harness-router-tune.md +74 -0
- package/.pi/prompts/harness-run.md +59 -0
- package/.pi/prompts/harness-setup.md +316 -216
- package/.pi/prompts/harness-trace.md +51 -0
- package/.pi/prompts/wiki-autoresearch.md +9 -7
- package/.pi/prompts/wiki-save.md +20 -0
- package/.pi/skills/agent-router/SKILL.md +2 -4
- package/.pi/skills/ast-grep/SKILL.md +354 -0
- package/.pi/sounds/project-sounds.json +18 -24
- package/AGENTS.md +30 -0
- package/CHANGELOG.md +89 -0
- package/CONTRIBUTING.md +51 -1
- package/README.md +264 -20
- package/biome.json +8 -2
- package/lefthook.yml +3 -2
- package/node_modules/@sting8k/pi-vcc/README.md +200 -0
- package/node_modules/@sting8k/pi-vcc/index.ts +14 -0
- package/node_modules/@sting8k/pi-vcc/package.json +26 -0
- package/node_modules/@sting8k/pi-vcc/scripts/audit-sessions.ts +88 -0
- package/node_modules/@sting8k/pi-vcc/scripts/benchmark-real-sessions.ts +25 -0
- package/node_modules/@sting8k/pi-vcc/scripts/compare-before-after.ts +36 -0
- package/node_modules/@sting8k/pi-vcc/scripts/dump-branch-output.ts +20 -0
- package/node_modules/@sting8k/pi-vcc/src/commands/pi-vcc.ts +36 -0
- package/node_modules/@sting8k/pi-vcc/src/commands/vcc-recall.ts +65 -0
- package/node_modules/@sting8k/pi-vcc/src/core/brief.ts +381 -0
- package/node_modules/@sting8k/pi-vcc/src/core/build-sections.ts +79 -0
- package/node_modules/@sting8k/pi-vcc/src/core/content.ts +60 -0
- package/node_modules/@sting8k/pi-vcc/src/core/filter-noise.ts +42 -0
- package/node_modules/@sting8k/pi-vcc/src/core/format-recall.ts +27 -0
- package/node_modules/@sting8k/pi-vcc/src/core/format.ts +49 -0
- package/node_modules/@sting8k/pi-vcc/src/core/lineage.ts +26 -0
- package/node_modules/@sting8k/pi-vcc/src/core/load-messages.ts +41 -0
- package/node_modules/@sting8k/pi-vcc/src/core/normalize.ts +66 -0
- package/node_modules/@sting8k/pi-vcc/src/core/recall-scope.ts +14 -0
- package/node_modules/@sting8k/pi-vcc/src/core/render-entries.ts +55 -0
- package/node_modules/@sting8k/pi-vcc/src/core/report.ts +237 -0
- package/node_modules/@sting8k/pi-vcc/src/core/sanitize.ts +5 -0
- package/node_modules/@sting8k/pi-vcc/src/core/search-entries.ts +221 -0
- package/node_modules/@sting8k/pi-vcc/src/core/settings.ts +77 -0
- package/node_modules/@sting8k/pi-vcc/src/core/skill-collapse.ts +35 -0
- package/node_modules/@sting8k/pi-vcc/src/core/summarize.ts +157 -0
- package/node_modules/@sting8k/pi-vcc/src/core/tool-args.ts +14 -0
- package/node_modules/@sting8k/pi-vcc/src/details.ts +7 -0
- package/node_modules/@sting8k/pi-vcc/src/extract/commits.ts +69 -0
- package/node_modules/@sting8k/pi-vcc/src/extract/files.ts +80 -0
- package/node_modules/@sting8k/pi-vcc/src/extract/goals.ts +79 -0
- package/node_modules/@sting8k/pi-vcc/src/extract/preferences.ts +55 -0
- package/node_modules/@sting8k/pi-vcc/src/hooks/before-compact.ts +322 -0
- package/node_modules/@sting8k/pi-vcc/src/sections.ts +12 -0
- package/node_modules/@sting8k/pi-vcc/src/tools/recall.ts +109 -0
- package/node_modules/@sting8k/pi-vcc/src/types.ts +14 -0
- package/node_modules/@sting8k/pi-vcc/tests/before-compact-hook.test.ts +181 -0
- package/node_modules/@sting8k/pi-vcc/tests/before-compact.test.ts +140 -0
- package/node_modules/@sting8k/pi-vcc/tests/brief.test.ts +206 -0
- package/node_modules/@sting8k/pi-vcc/tests/build-sections.test.ts +59 -0
- package/node_modules/@sting8k/pi-vcc/tests/compile.test.ts +80 -0
- package/node_modules/@sting8k/pi-vcc/tests/content.test.ts +31 -0
- package/node_modules/@sting8k/pi-vcc/tests/extract-goals.test.ts +86 -0
- package/node_modules/@sting8k/pi-vcc/tests/extract-preferences.test.ts +30 -0
- package/node_modules/@sting8k/pi-vcc/tests/filter-noise.test.ts +61 -0
- package/node_modules/@sting8k/pi-vcc/tests/fixtures.ts +61 -0
- package/node_modules/@sting8k/pi-vcc/tests/format-recall.test.ts +30 -0
- package/node_modules/@sting8k/pi-vcc/tests/format.test.ts +62 -0
- package/node_modules/@sting8k/pi-vcc/tests/lineage.test.ts +33 -0
- package/node_modules/@sting8k/pi-vcc/tests/load-messages.test.ts +51 -0
- package/node_modules/@sting8k/pi-vcc/tests/normalize.test.ts +97 -0
- package/node_modules/@sting8k/pi-vcc/tests/real-sessions.test.ts +38 -0
- package/node_modules/@sting8k/pi-vcc/tests/recall-expand.test.ts +15 -0
- package/node_modules/@sting8k/pi-vcc/tests/recall-scope.test.ts +32 -0
- package/node_modules/@sting8k/pi-vcc/tests/recall-tool-scope.test.ts +67 -0
- package/node_modules/@sting8k/pi-vcc/tests/render-entries.test.ts +62 -0
- package/node_modules/@sting8k/pi-vcc/tests/report.test.ts +44 -0
- package/node_modules/@sting8k/pi-vcc/tests/sanitize.test.ts +24 -0
- package/node_modules/@sting8k/pi-vcc/tests/search-entries.test.ts +144 -0
- package/node_modules/@sting8k/pi-vcc/tests/support/load-session.ts +23 -0
- package/node_modules/@sting8k/pi-vcc/tests/support/real-sessions.ts +51 -0
- package/package.json +15 -4
- package/scripts/__pycache__/merge_graphify_corpora.cpython-314.pyc +0 -0
- package/scripts/index_youtube_urls.py +376 -0
- package/scripts/merge_graphify_corpora.py +398 -0
- package/scripts/regen_graphify_html.py +46 -0
- package/.agents/skills/defuddle/SKILL.md +0 -90
- package/.agents/skills/wiki/SKILL.md +0 -215
- package/.agents/skills/wiki/references/css-snippets.md +0 -122
- package/.agents/skills/wiki/references/frontmatter.md +0 -107
- package/.agents/skills/wiki/references/git-setup.md +0 -58
- package/.agents/skills/wiki/references/mcp-setup.md +0 -149
- package/.agents/skills/wiki/references/modes.md +0 -259
- package/.agents/skills/wiki/references/plugins.md +0 -96
- package/.agents/skills/wiki/references/rest-api.md +0 -124
- package/.agents/skills/wiki-fold/SKILL.md +0 -204
- package/.agents/skills/wiki-fold/references/fold-template.md +0 -133
- package/.agents/skills/wiki-ingest/SKILL.md +0 -288
- package/.agents/skills/wiki-lint/SKILL.md +0 -183
- package/.agents/skills/wiki-query/SKILL.md +0 -176
- package/.pi/agents/rethink.md +0 -140
- package/.pi/agents/wiki-ingest.md +0 -67
- package/.pi/agents/wiki-lint.md +0 -75
- package/.pi/internal/cursor-sdk-transcript-parser.ts +0 -59
- package/.pi/prompts/save.md +0 -16
- package/.pi/prompts/wiki.md +0 -23
- package/.pi/providers/cursor-sdk-provider.test.mjs +0 -476
- package/.pi/providers/cursor-sdk-provider.ts +0 -1085
- package/vault/AGENTS.md +0 -37
- package/vault/wiki/_templates/comparison.md +0 -39
- package/vault/wiki/_templates/concept.md +0 -40
- package/vault/wiki/_templates/decision.md +0 -21
- package/vault/wiki/_templates/entity.md +0 -32
- package/vault/wiki/_templates/flow.md +0 -14
- package/vault/wiki/_templates/module.md +0 -18
- package/vault/wiki/_templates/question.md +0 -31
- package/vault/wiki/_templates/source.md +0 -39
- package/vault/wiki/concepts/AST-Aware Code Chunking.md +0 -44
- package/vault/wiki/concepts/Build-Time Prompt Compilation.md +0 -107
- package/vault/wiki/concepts/Context Engine (AI Coding).md +0 -47
- package/vault/wiki/concepts/Context-Aware System Reminders.md +0 -61
- package/vault/wiki/concepts/Contextualized Text Embedding.md +0 -42
- package/vault/wiki/concepts/Contractor vs Employee AI Model.md +0 -55
- package/vault/wiki/concepts/Dual-Model Agent Architecture.md +0 -65
- package/vault/wiki/concepts/Late Chunking vs Early Chunking.md +0 -43
- package/vault/wiki/concepts/Majority Vote Ensembling.md +0 -68
- package/vault/wiki/concepts/Meta-Harness.md +0 -16
- package/vault/wiki/concepts/Multi-Agent AI Coding Architecture.md +0 -75
- package/vault/wiki/concepts/Prompt Enhancement.md +0 -90
- package/vault/wiki/concepts/Prompt Renderer.md +0 -89
- package/vault/wiki/concepts/Semantic Codebase Indexing.md +0 -67
- package/vault/wiki/concepts/additive-config-hierarchy.md +0 -16
- package/vault/wiki/concepts/agent-artifacts-verifiable-deliverables.md +0 -71
- package/vault/wiki/concepts/agent-browser-browser-automation.md +0 -99
- package/vault/wiki/concepts/agent-codebase-interface.md +0 -43
- package/vault/wiki/concepts/agent-harness-architecture.md +0 -67
- package/vault/wiki/concepts/agent-loop-detection-patterns.md +0 -133
- package/vault/wiki/concepts/agent-search-enforcement.md +0 -126
- package/vault/wiki/concepts/agent-skills-ecosystem.md +0 -74
- package/vault/wiki/concepts/agent-skills-pattern.md +0 -68
- package/vault/wiki/concepts/agentic-harness-context-enforcement.md +0 -91
- package/vault/wiki/concepts/agentic-harness.md +0 -34
- package/vault/wiki/concepts/agentic-orchestration-pipeline.md +0 -56
- package/vault/wiki/concepts/agentic-search-no-embeddings.md +0 -18
- package/vault/wiki/concepts/anthropic-context-engineering.md +0 -13
- package/vault/wiki/concepts/antigravity-agent-first-architecture.md +0 -61
- package/vault/wiki/concepts/ast-compression.md +0 -19
- package/vault/wiki/concepts/ast-truncation.md +0 -66
- package/vault/wiki/concepts/barrel-files.md +0 -37
- package/vault/wiki/concepts/browser-harness-agent.md +0 -41
- package/vault/wiki/concepts/browser-subagent-visual-verification.md +0 -82
- package/vault/wiki/concepts/codebase-intelligence-ecosystem-comparison.md +0 -192
- package/vault/wiki/concepts/codebase-intelligence-harness-integration.md +0 -161
- package/vault/wiki/concepts/codebase-to-context-ingestion.md +0 -46
- package/vault/wiki/concepts/codex-harness-innovations.md +0 -147
- package/vault/wiki/concepts/consensus-debate-flow.md +0 -17
- package/vault/wiki/concepts/consensus-debate.md +0 -206
- package/vault/wiki/concepts/content-addressed-spec-identity.md +0 -166
- package/vault/wiki/concepts/context-anxiety.md +0 -57
- package/vault/wiki/concepts/context-compression-techniques.md +0 -19
- package/vault/wiki/concepts/context-continuity.md +0 -22
- package/vault/wiki/concepts/context-drift-in-agents.md +0 -106
- package/vault/wiki/concepts/context-engineering.md +0 -62
- package/vault/wiki/concepts/context-folding.md +0 -67
- package/vault/wiki/concepts/context-mode.md +0 -38
- package/vault/wiki/concepts/cursor-harness-innovations.md +0 -107
- package/vault/wiki/concepts/deterministic-session-compaction.md +0 -79
- package/vault/wiki/concepts/drift-detection-unified.md +0 -296
- package/vault/wiki/concepts/execution-feedback-loop.md +0 -46
- package/vault/wiki/concepts/feedforward-feedback-harness.md +0 -60
- package/vault/wiki/concepts/five-root-cause-metrics-sentrux.md +0 -40
- package/vault/wiki/concepts/fork-safe-spec-storage.md +0 -89
- package/vault/wiki/concepts/fts5-sandbox.md +0 -19
- package/vault/wiki/concepts/fuzzy-edit-matching.md +0 -71
- package/vault/wiki/concepts/gemini-cli-architecture.md +0 -104
- package/vault/wiki/concepts/generator-evaluator-architecture.md +0 -64
- package/vault/wiki/concepts/guardian-agent-pattern.md +0 -67
- package/vault/wiki/concepts/harness-configuration-layers.md +0 -89
- package/vault/wiki/concepts/harness-control-frameworks.md +0 -155
- package/vault/wiki/concepts/harness-engineering-first-principles.md +0 -90
- package/vault/wiki/concepts/harness-h-formalism.md +0 -53
- package/vault/wiki/concepts/hybrid-code-search.md +0 -61
- package/vault/wiki/concepts/inline-post-edit-validation.md +0 -112
- package/vault/wiki/concepts/legendary-engineering-patterns-harness.md +0 -110
- package/vault/wiki/concepts/lifecycle-hooks.md +0 -94
- package/vault/wiki/concepts/mcp-tool-routing.md +0 -102
- package/vault/wiki/concepts/memory-system-of-record-vs-ephemeral-cache.md +0 -47
- package/vault/wiki/concepts/meta-agent-context-pruning.md +0 -151
- package/vault/wiki/concepts/model-adaptive-harness.md +0 -122
- package/vault/wiki/concepts/model-routing-agents.md +0 -101
- package/vault/wiki/concepts/monorepo-architecture.md +0 -45
- package/vault/wiki/concepts/multi-agent-specialization.md +0 -61
- package/vault/wiki/concepts/permission-subsystem.md +0 -16
- package/vault/wiki/concepts/pi-messenger-analysis.md +0 -243
- package/vault/wiki/concepts/pi-vscode-extension-landscape.md +0 -37
- package/vault/wiki/concepts/policy-engine-pattern.md +0 -78
- package/vault/wiki/concepts/progressive-disclosure-agents.md +0 -53
- package/vault/wiki/concepts/progressive-skill-disclosure.md +0 -17
- package/vault/wiki/concepts/provider-native-prompting.md +0 -203
- package/vault/wiki/concepts/quality-signal-sentrux.md +0 -37
- package/vault/wiki/concepts/repo-map-ranking.md +0 -42
- package/vault/wiki/concepts/result-monad-error-handling.md +0 -47
- package/vault/wiki/concepts/safety-defense-in-depth.md +0 -83
- package/vault/wiki/concepts/sandbox-os-enforcement.md +0 -18
- package/vault/wiki/concepts/selective-debate-routing.md +0 -70
- package/vault/wiki/concepts/self-evolving-harness.md +0 -60
- package/vault/wiki/concepts/sentrux-mcp-integration.md +0 -36
- package/vault/wiki/concepts/sentrux-rules-engine.md +0 -49
- package/vault/wiki/concepts/shell-pattern-compression.md +0 -24
- package/vault/wiki/concepts/skill-first-architecture.md +0 -166
- package/vault/wiki/concepts/structured-compaction.md +0 -78
- package/vault/wiki/concepts/subagent-orchestration.md +0 -17
- package/vault/wiki/concepts/subagent-worktree-isolation.md +0 -68
- package/vault/wiki/concepts/superpowers-methodology.md +0 -78
- package/vault/wiki/concepts/think-in-code.md +0 -73
- package/vault/wiki/concepts/ts-execution-layer.md +0 -100
- package/vault/wiki/concepts/typescript-strict-mode.md +0 -37
- package/vault/wiki/concepts/vcc-conversation-compaction-for-pi.md +0 -53
- package/vault/wiki/concepts/verification-drift-detection.md +0 -19
- package/vault/wiki/consensus/consensus-records.md +0 -58
- package/vault/wiki/decisions/2026-04-30-pi-lean-ctx-native.md +0 -122
- package/vault/wiki/decisions/2026-05-07-replace-lean-ctx-with-context-mode.md +0 -59
- package/vault/wiki/decisions/adr-008.md +0 -40
- package/vault/wiki/decisions/adr-009.md +0 -46
- package/vault/wiki/decisions/adr-010.md +0 -55
- package/vault/wiki/decisions/adr-011.md +0 -165
- package/vault/wiki/decisions/adr-012.md +0 -102
- package/vault/wiki/decisions/adr-013.md +0 -59
- package/vault/wiki/decisions/adr-014.md +0 -73
- package/vault/wiki/decisions/adr-015.md +0 -81
- package/vault/wiki/decisions/adr-016.md +0 -91
- package/vault/wiki/decisions/adr-017.md +0 -79
- package/vault/wiki/decisions/adr-018.md +0 -100
- package/vault/wiki/decisions/adr-019.md +0 -75
- package/vault/wiki/decisions/adr-020.md +0 -106
- package/vault/wiki/decisions/adr-021.md +0 -86
- package/vault/wiki/decisions/adr-022.md +0 -113
- package/vault/wiki/decisions/adr-023.md +0 -113
- package/vault/wiki/decisions/adr-024.md +0 -73
- package/vault/wiki/decisions/adr-025.md +0 -130
- package/vault/wiki/decisions/adr-026.md +0 -56
- package/vault/wiki/decisions/adr-027.md +0 -94
- package/vault/wiki/decisions/colocate-wiki.md +0 -34
- package/vault/wiki/entities/Anders Hejlsberg.md +0 -29
- package/vault/wiki/entities/Anthropic.md +0 -17
- package/vault/wiki/entities/Augment Code.md +0 -49
- package/vault/wiki/entities/Bjarne Stroustrup.md +0 -26
- package/vault/wiki/entities/Bolt.new (StackBlitz).md +0 -39
- package/vault/wiki/entities/Boris Cherny.md +0 -11
- package/vault/wiki/entities/Claude Code.md +0 -19
- package/vault/wiki/entities/Dennis Ritchie.md +0 -26
- package/vault/wiki/entities/Emergent Labs.md +0 -32
- package/vault/wiki/entities/Google Cloud.md +0 -16
- package/vault/wiki/entities/Guido van Rossum.md +0 -28
- package/vault/wiki/entities/Ken Thompson.md +0 -28
- package/vault/wiki/entities/Lee et al.md +0 -16
- package/vault/wiki/entities/Linus Torvalds.md +0 -28
- package/vault/wiki/entities/Lovable (company).md +0 -40
- package/vault/wiki/entities/Martin Fowler.md +0 -16
- package/vault/wiki/entities/Meng et al.md +0 -16
- package/vault/wiki/entities/OpenAI.md +0 -16
- package/vault/wiki/entities/Rocket.new.md +0 -38
- package/vault/wiki/entities/VILA-Lab.md +0 -15
- package/vault/wiki/entities/autodev-codebase.md +0 -18
- package/vault/wiki/entities/ck-tool.md +0 -59
- package/vault/wiki/entities/codesearch.md +0 -18
- package/vault/wiki/entities/disler-indydevdan.md +0 -33
- package/vault/wiki/entities/gsd-get-shit-done.md +0 -56
- package/vault/wiki/entities/javascript-runtimes.md +0 -48
- package/vault/wiki/entities/jesse-vincent.md +0 -38
- package/vault/wiki/entities/lean-ctx.md +0 -32
- package/vault/wiki/entities/opendev.md +0 -41
- package/vault/wiki/entities/ops-codegraph-tool.md +0 -18
- package/vault/wiki/entities/pi-coding-agent.md +0 -53
- package/vault/wiki/entities/sentrux.md +0 -54
- package/vault/wiki/entities/vgrep-tool.md +0 -57
- package/vault/wiki/entities/vitest.md +0 -41
- package/vault/wiki/flows/harness-wiki-pipeline.md +0 -204
- package/vault/wiki/hot.md +0 -932
- package/vault/wiki/index.md +0 -437
- package/vault/wiki/log.md +0 -422
- package/vault/wiki/meta/dashboard.md +0 -30
- package/vault/wiki/meta/lint-report-2026-04-30.md +0 -86
- package/vault/wiki/meta/lint-report-2026-05-02.md +0 -251
- package/vault/wiki/meta/overview.canvas +0 -43
- package/vault/wiki/modules/adversarial-verification.md +0 -57
- package/vault/wiki/modules/automated-observability.md +0 -54
- package/vault/wiki/modules/bench.md +0 -20
- package/vault/wiki/modules/extensions.md +0 -23
- package/vault/wiki/modules/grounding-checkpoints.md +0 -62
- package/vault/wiki/modules/harness-implementation-plan.md +0 -345
- package/vault/wiki/modules/harness-wiki-skill-mapping.md +0 -135
- package/vault/wiki/modules/harness.md +0 -86
- package/vault/wiki/modules/persistent-memory.md +0 -85
- package/vault/wiki/modules/schema-orchestration.md +0 -68
- package/vault/wiki/modules/skills.md +0 -27
- package/vault/wiki/modules/spec-hardening.md +0 -58
- package/vault/wiki/modules/structured-planning.md +0 -53
- package/vault/wiki/modules/think-in-code-enforcement.md +0 -153
- package/vault/wiki/modules/wiki-query-interface.md +0 -64
- package/vault/wiki/overview.md +0 -51
- package/vault/wiki/questions/Research-pi-vs-claude-code-agentic-orchestration-pipeline.md +0 -87
- package/vault/wiki/questions/Research-sentrux-dev.md +0 -123
- package/vault/wiki/questions/Research-superpowers-skill-for-agentic-coding-agents.md +0 -164
- package/vault/wiki/questions/Research: Augment Code Context Engine.md +0 -244
- package/vault/wiki/questions/Research: Automating Software Engineering - Lovable, Bolt, Emergent, Rocket.md +0 -112
- package/vault/wiki/questions/Research: Claude Code State-of-the-Art Harness Improvements.md +0 -209
- package/vault/wiki/questions/Research: Codex State-of-the-Art Harness Improvements.md +0 -99
- package/vault/wiki/questions/Research: Engineering Workflows of Legendary Programmers and AI Harness Mapping.md +0 -107
- package/vault/wiki/questions/Research: Fallow Codebase Intelligence Harness Integration.md +0 -72
- package/vault/wiki/questions/Research: Gemini CLI SOTA Harness Integration.md +0 -166
- package/vault/wiki/questions/Research: GitHub Issues as Harness Spec Storage.md +0 -188
- package/vault/wiki/questions/Research: Google Antigravity Harness Integration.md +0 -120
- package/vault/wiki/questions/Research: Meta-Agent Context Drift Detection.md +0 -236
- package/vault/wiki/questions/Research: Model-Adaptive Agent Harness Design.md +0 -95
- package/vault/wiki/questions/Research: Model-Specific Prompting Guides.md +0 -165
- package/vault/wiki/questions/Research: Prompt Renderer for Multi-Model Agent Harness.md +0 -216
- package/vault/wiki/questions/Research: Skill-First Harness Architecture.md +0 -91
- package/vault/wiki/questions/Research: TypeScript Best Practices and Codebase Structure.md +0 -88
- package/vault/wiki/questions/Research: TypeScript Execution Layer for Agent Tool Calling.md +0 -81
- package/vault/wiki/questions/Research: claude-mem over Obsidian for Harness Layer.md +0 -71
- package/vault/wiki/questions/Research: claude-mem over obsidian wiki as the knowledge base for our agentic harness pipeline. think from first principles. does this replace or complement our current setup? no hard feelings about previous decisions. gimme accurate points.md +0 -80
- package/vault/wiki/questions/Research: context-mode vs lean-ctx.md +0 -72
- package/vault/wiki/questions/Research: cursor.sh Harness Innovations.md +0 -92
- package/vault/wiki/questions/Research: executor.sh Harness Integration.md +0 -170
- package/vault/wiki/questions/Research: how GSD fits into our coding harness setup.md +0 -97
- package/vault/wiki/questions/Research: how claude-mem fits into our workflow. and whether it should replace obsidian in the codebase. no hard feelings about previous actions, rethink from first principles always.md +0 -80
- package/vault/wiki/questions/Research: pi-vcc.md +0 -113
- package/vault/wiki/questions/Research: semantic code search tools.md +0 -69
- package/vault/wiki/questions/Research: vcc extension for pi coding agent.md +0 -73
- package/vault/wiki/questions/how-to-enable-semantic-code-search-now.md +0 -111
- package/vault/wiki/questions/mvp-implementation-blueprint.md +0 -552
- package/vault/wiki/questions/research-agent-first-codebase-exploration.md +0 -199
- package/vault/wiki/questions/research-agentic-coding-harness-latest-papers.md +0 -142
- package/vault/wiki/questions/research-gitingest-gitreverse-integration.md +0 -100
- package/vault/wiki/questions/research-wozcode-token-reduction.md +0 -67
- package/vault/wiki/questions/resolved-context-pruning-inplace-vs-restart.md +0 -95
- package/vault/wiki/questions/resolved-context-window-economics.md +0 -167
- package/vault/wiki/questions/resolved-imad-debate-gating-transfer.md +0 -126
- package/vault/wiki/questions/resolved-mcp-tool-preference.md +0 -112
- package/vault/wiki/questions/resolved-small-model-meta-agents.md +0 -107
- package/vault/wiki/questions/resolved-treesitter-dynamic-languages.md +0 -95
- package/vault/wiki/sources/Auggie Context MCP Server.md +0 -63
- package/vault/wiki/sources/Augment Code Codacy AI Giants.md +0 -61
- package/vault/wiki/sources/Augment Code MCP SiliconAngle.md +0 -49
- package/vault/wiki/sources/Augment Code WorkOS ERC 2025.md +0 -55
- package/vault/wiki/sources/Augment Context Engine Official.md +0 -71
- package/vault/wiki/sources/Augment SWE-bench Agent GitHub.md +0 -74
- package/vault/wiki/sources/Augment SWE-bench Pro Blog.md +0 -58
- package/vault/wiki/sources/Source: AgentBus Jinja2 Prompt Pipelines.md +0 -75
- package/vault/wiki/sources/Source: Arxiv /342/200/224 Don't Break the Cache.md" +0 -85
- package/vault/wiki/sources/Source: Augment - Harness Engineering for AI Coding Agents.md +0 -58
- package/vault/wiki/sources/Source: Blake Crosley Agent Architecture Guide.md +0 -100
- package/vault/wiki/sources/Source: Bolt.new Architecture & Case Study.md +0 -75
- package/vault/wiki/sources/Source: Build-Time Prompt Compilation Architecture.md +0 -107
- package/vault/wiki/sources/Source: Claude API Agent Skills Overview.md +0 -70
- package/vault/wiki/sources/Source: Gemini CLI Changelogs.md +0 -88
- package/vault/wiki/sources/Source: Google Blog - Gemini CLI Announcement.md +0 -57
- package/vault/wiki/sources/Source: Google Gemini CLI Architecture Docs.md +0 -53
- package/vault/wiki/sources/Source: LangChain - Anatomy of Agent Harness.md +0 -65
- package/vault/wiki/sources/Source: Lovable Architecture & Clone Analysis.md +0 -83
- package/vault/wiki/sources/Source: Martin Fowler - Harness Engineering.md +0 -70
- package/vault/wiki/sources/Source: OpenAI Harness Engineering Five Principles.md +0 -58
- package/vault/wiki/sources/Source: OpenAI Harness Engineering /342/200/224 0 Lines of Human Code.md" +0 -101
- package/vault/wiki/sources/Source: OpenDev /342/200/224 Building AI Coding Agents for the Terminal.md" +0 -100
- package/vault/wiki/sources/Source: Render AI Coding Agents Benchmark 2025.md +0 -53
- package/vault/wiki/sources/Source: Rocket.new /342/200/224 Vibe Solutioning Platform.md" +0 -70
- package/vault/wiki/sources/Source: SwirlAI Agent Skills Progressive Disclosure.md +0 -71
- package/vault/wiki/sources/Source: TianPan Prompt Caching Architecture.md +0 -89
- package/vault/wiki/sources/Source: Vercel Labs agent-browser.md +0 -155
- package/vault/wiki/sources/Source: browser-harness CDP Harness.md +0 -126
- package/vault/wiki/sources/agent-drift-academic-paper.md +0 -79
- package/vault/wiki/sources/aider-repomap-tree-sitter.md +0 -42
- package/vault/wiki/sources/anthropic-compaction-api.md +0 -58
- package/vault/wiki/sources/anthropic-effective-harnesses.md +0 -42
- package/vault/wiki/sources/anthropic-prompt-best-practices.md +0 -100
- package/vault/wiki/sources/anthropic2026-harness-design.md +0 -63
- package/vault/wiki/sources/barrel-files-tkdodo.md +0 -38
- package/vault/wiki/sources/birth-of-unix-kernighan-interview.md +0 -57
- package/vault/wiki/sources/bockeler2026-harness-engineering.md +0 -69
- package/vault/wiki/sources/cast-code-chunking-paper.md +0 -50
- package/vault/wiki/sources/ck-semantic-search.md +0 -78
- package/vault/wiki/sources/claude-code-architecture-karaxai-2026.md +0 -71
- package/vault/wiki/sources/claude-code-architecture-qubytes-2026.md +0 -50
- package/vault/wiki/sources/claude-code-architecture-vila-lab-2026.md +0 -64
- package/vault/wiki/sources/claude-code-security-architecture-penligent-2026.md +0 -70
- package/vault/wiki/sources/claude-context-editing-docs.md +0 -13
- package/vault/wiki/sources/cloudflare-codemode.md +0 -63
- package/vault/wiki/sources/code-chunk-library-supermemory.md +0 -63
- package/vault/wiki/sources/codeact-apple-2024.md +0 -62
- package/vault/wiki/sources/codex-dsc-rfc-8573.md +0 -41
- package/vault/wiki/sources/codex-open-source-agent-2026.md +0 -110
- package/vault/wiki/sources/coir-code-retrieval-benchmark.md +0 -51
- package/vault/wiki/sources/colinmcnamara-context-optimization-codemode.md +0 -48
- package/vault/wiki/sources/context-folding-paper.md +0 -61
- package/vault/wiki/sources/context-mode-website.md +0 -63
- package/vault/wiki/sources/cursor-agent-best-practices-2026.md +0 -62
- package/vault/wiki/sources/cursor-fork-29b-2025.md +0 -50
- package/vault/wiki/sources/cursor-harness-april-2026.md +0 -76
- package/vault/wiki/sources/cursor-instant-apply-2024.md +0 -45
- package/vault/wiki/sources/cursor-shadow-workspace-2024.md +0 -52
- package/vault/wiki/sources/cursor-shipped-coding-agent-2026.md +0 -53
- package/vault/wiki/sources/cursor-vs-antigravity-2026.md +0 -51
- package/vault/wiki/sources/disler-pi-vs-claude-code.md +0 -69
- package/vault/wiki/sources/distill-deterministic-context-compression.md +0 -53
- package/vault/wiki/sources/embedding-models-benchmark-supermemory-2025.md +0 -48
- package/vault/wiki/sources/executor-rhyssullivan.md +0 -122
- package/vault/wiki/sources/fallow-rs-codebase-intelligence.md +0 -125
- package/vault/wiki/sources/fan2025-imad.md +0 -60
- package/vault/wiki/sources/forgecode-gpt5-agent-improvements.md +0 -63
- package/vault/wiki/sources/gemini-3-prompting-guide.md +0 -78
- package/vault/wiki/sources/gh-cli-sub-issue-rfc.md +0 -50
- package/vault/wiki/sources/gh-sub-issue-extension.md +0 -72
- package/vault/wiki/sources/github-fork-issues-discussion.md +0 -44
- package/vault/wiki/sources/github-issue-dependencies-docs.md +0 -49
- package/vault/wiki/sources/github-sub-issues-docs.md +0 -51
- package/vault/wiki/sources/gitingest.md +0 -91
- package/vault/wiki/sources/gitreverse.md +0 -63
- package/vault/wiki/sources/google-antigravity-official-blog.md +0 -47
- package/vault/wiki/sources/google-antigravity-wikipedia.md +0 -53
- package/vault/wiki/sources/gsd-codecentric-deep-dive.md +0 -57
- package/vault/wiki/sources/gsd-github-repo.md +0 -51
- package/vault/wiki/sources/gsd-hn-discussion.md +0 -59
- package/vault/wiki/sources/guido-python-design-philosophy.md +0 -56
- package/vault/wiki/sources/hejlsberg-7-learnings.md +0 -48
- package/vault/wiki/sources/ironclaw-drift-monitor.md +0 -80
- package/vault/wiki/sources/langsight-loop-detection.md +0 -80
- package/vault/wiki/sources/leanctx-website.md +0 -69
- package/vault/wiki/sources/lee2026-meta-harness.md +0 -59
- package/vault/wiki/sources/linux-kernel-coding-workflow.md +0 -50
- package/vault/wiki/sources/lou2026-autoharness.md +0 -53
- package/vault/wiki/sources/martin-fowler-harness-engineering.md +0 -73
- package/vault/wiki/sources/mcp-architecture-docs.md +0 -13
- package/vault/wiki/sources/meng2026-agent-harness-survey.md +0 -79
- package/vault/wiki/sources/mindstudio-four-agent-types.md +0 -68
- package/vault/wiki/sources/ms-chat-history-management.md +0 -13
- package/vault/wiki/sources/openai-prompt-guidance.md +0 -104
- package/vault/wiki/sources/openclaw-session-pruning.md +0 -13
- package/vault/wiki/sources/opencode-dcp.md +0 -13
- package/vault/wiki/sources/opendev-arxiv-2603.05344v1.md +0 -79
- package/vault/wiki/sources/openhands-platform.md +0 -39
- package/vault/wiki/sources/oss-guide-codebase-exploration.md +0 -53
- package/vault/wiki/sources/pi-compaction-extensions-ecosystem.md +0 -102
- package/vault/wiki/sources/pi-context-prune-github-repo.md +0 -38
- package/vault/wiki/sources/pi-mono-compaction-docs.md +0 -38
- package/vault/wiki/sources/pi-omni-compact-github-repo.md +0 -50
- package/vault/wiki/sources/pi-rtk-optimizer-github-repo.md +0 -45
- package/vault/wiki/sources/pi-vcc-github-repo.md +0 -69
- package/vault/wiki/sources/pi-vscode-marketplace.md +0 -41
- package/vault/wiki/sources/pi-vscode-model-provider-marketplace.md +0 -39
- package/vault/wiki/sources/py-tree-sitter.md +0 -13
- package/vault/wiki/sources/sentrux-dev-landing.md +0 -40
- package/vault/wiki/sources/sentrux-docs-pro-architecture.md +0 -75
- package/vault/wiki/sources/sentrux-docs-quality-signal.md +0 -46
- package/vault/wiki/sources/sentrux-docs-root-cause-metrics.md +0 -57
- package/vault/wiki/sources/sentrux-docs-rules-engine.md +0 -58
- package/vault/wiki/sources/sentrux-github-repo.md +0 -56
- package/vault/wiki/sources/superpowers-github-repo.md +0 -56
- package/vault/wiki/sources/superpowers-release-blog.md +0 -54
- package/vault/wiki/sources/superpowers-termdock-analysis.md +0 -45
- package/vault/wiki/sources/swe-agent-aci.md +0 -42
- package/vault/wiki/sources/swe-bench.md +0 -45
- package/vault/wiki/sources/swe-pruner-context-pruning.md +0 -13
- package/vault/wiki/sources/think-in-code-blog.md +0 -48
- package/vault/wiki/sources/tree-sitter-docs.md +0 -13
- package/vault/wiki/sources/ts-best-practices-2025-devto.md +0 -42
- package/vault/wiki/sources/ts-folder-structure-mingyang.md +0 -58
- package/vault/wiki/sources/ts-monorepo-koerselman.md +0 -44
- package/vault/wiki/sources/ts-result-error-handling-kkalamarski.md +0 -52
- package/vault/wiki/sources/ts-runtimes-comparison-betterstack.md +0 -42
- package/vault/wiki/sources/ts-strict-mode-rishikc.md +0 -43
- package/vault/wiki/sources/unix-philosophy.md +0 -48
- package/vault/wiki/sources/vectara-chunking-vs-embedding-naacl2025.md +0 -39
- package/vault/wiki/sources/vectara-guardian-agents.md +0 -79
- package/vault/wiki/sources/vgrep-semantic-search.md +0 -76
- package/vault/wiki/sources/vitest-official.md +0 -41
- package/vault/wiki/sources/vscode-pi-community-extension.md +0 -40
- package/vault/wiki/sources/wozcode.md +0 -79
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* debate-orchestrator — headless debate bus (pi-messenger-inspired semantics).
|
|
3
|
+
*
|
|
4
|
+
* No additional UI surface:
|
|
5
|
+
* - transport is extension custom entries + debate artifacts on disk
|
|
6
|
+
* - command interface is machine-friendly (`/harness-debate-*`)
|
|
7
|
+
*
|
|
8
|
+
* Protocol envelope:
|
|
9
|
+
* {
|
|
10
|
+
* protocol: "pi-debate-bus/v1",
|
|
11
|
+
* kind: "open" | "round" | "consensus" | "budget_exhausted",
|
|
12
|
+
* correlation: { run_id, debate_id, round_index?, sender },
|
|
13
|
+
* payload: { ... }
|
|
14
|
+
* }
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
20
|
+
|
|
21
|
+
type DebateParticipant =
|
|
22
|
+
| "EvaluatorAgent"
|
|
23
|
+
| "AdversaryAgent"
|
|
24
|
+
| "TieBreakerAgent";
|
|
25
|
+
type PolicyDecision = "pass" | "conditional_pass" | "block" | "human_required";
|
|
26
|
+
|
|
27
|
+
interface RoundPayload {
|
|
28
|
+
participants: DebateParticipant[];
|
|
29
|
+
claims: string[];
|
|
30
|
+
rebuttals: string[];
|
|
31
|
+
evidence_refs: string[];
|
|
32
|
+
token_usage: {
|
|
33
|
+
per_agent: Record<string, number>;
|
|
34
|
+
round_total: number;
|
|
35
|
+
};
|
|
36
|
+
consensus_delta: number;
|
|
37
|
+
severity_scores?: {
|
|
38
|
+
correctness: number;
|
|
39
|
+
security: number;
|
|
40
|
+
architecture: number;
|
|
41
|
+
test_integrity: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface DebateState {
|
|
46
|
+
run_id: string;
|
|
47
|
+
debate_id: string;
|
|
48
|
+
round_count: number;
|
|
49
|
+
budget_used: number;
|
|
50
|
+
max_rounds: number;
|
|
51
|
+
round_token_cap: number;
|
|
52
|
+
debate_global_cap: number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface BusEnvelope<T = unknown> {
|
|
56
|
+
protocol: "pi-debate-bus/v1";
|
|
57
|
+
kind: "open" | "round" | "consensus" | "budget_exhausted";
|
|
58
|
+
correlation: {
|
|
59
|
+
run_id: string;
|
|
60
|
+
debate_id: string;
|
|
61
|
+
round_index?: number;
|
|
62
|
+
sender: DebateParticipant | "system";
|
|
63
|
+
};
|
|
64
|
+
payload: T;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const DEBATES_DIR = join(process.cwd(), ".pi", "harness", "debates");
|
|
68
|
+
const WEIGHTS = {
|
|
69
|
+
claim_quality: 0.2,
|
|
70
|
+
reproducibility: 0.4,
|
|
71
|
+
agreement: 0.4,
|
|
72
|
+
};
|
|
73
|
+
const THRESHOLDS = {
|
|
74
|
+
correctness: 0.7,
|
|
75
|
+
security: 0.7,
|
|
76
|
+
architecture: 0.8,
|
|
77
|
+
test_integrity: 0.8,
|
|
78
|
+
};
|
|
79
|
+
const HARD_STOP_DEBATE_CAPS = process.env.HARNESS_DEBATE_HARD_STOP === "true";
|
|
80
|
+
|
|
81
|
+
function nowIso(): string {
|
|
82
|
+
return new Date().toISOString();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function toSafeFloat(value: unknown): number {
|
|
86
|
+
const n = Number(value);
|
|
87
|
+
if (Number.isNaN(n) || !Number.isFinite(n)) return 0;
|
|
88
|
+
return Math.max(0, Math.min(1, n));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function ensureDebatesDir(): Promise<void> {
|
|
92
|
+
await mkdir(DEBATES_DIR, { recursive: true });
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function getRunId(ctx: { sessionManager: { getSessionId(): string } }): string {
|
|
96
|
+
return ctx.sessionManager.getSessionId();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async function readRoundCapsFromSchema(): Promise<{
|
|
100
|
+
max_rounds: number;
|
|
101
|
+
round_token_cap: number;
|
|
102
|
+
debate_global_cap: number;
|
|
103
|
+
}> {
|
|
104
|
+
try {
|
|
105
|
+
const roundSchemaPath = join(
|
|
106
|
+
process.cwd(),
|
|
107
|
+
".pi",
|
|
108
|
+
"harness",
|
|
109
|
+
"specs",
|
|
110
|
+
"round-result.schema.json",
|
|
111
|
+
);
|
|
112
|
+
const parsed = JSON.parse(await readFile(roundSchemaPath, "utf-8")) as {
|
|
113
|
+
properties?: {
|
|
114
|
+
budget_profile?: {
|
|
115
|
+
properties?: {
|
|
116
|
+
max_rounds?: { const?: number };
|
|
117
|
+
round_token_cap?: { const?: number };
|
|
118
|
+
debate_global_cap?: { const?: number };
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
return {
|
|
124
|
+
max_rounds: Number(
|
|
125
|
+
parsed?.properties?.budget_profile?.properties?.max_rounds?.const ?? 6,
|
|
126
|
+
),
|
|
127
|
+
round_token_cap: Number(
|
|
128
|
+
parsed?.properties?.budget_profile?.properties?.round_token_cap
|
|
129
|
+
?.const ?? 2500,
|
|
130
|
+
),
|
|
131
|
+
debate_global_cap: Number(
|
|
132
|
+
parsed?.properties?.budget_profile?.properties?.debate_global_cap
|
|
133
|
+
?.const ?? 35000,
|
|
134
|
+
),
|
|
135
|
+
};
|
|
136
|
+
} catch {
|
|
137
|
+
return { max_rounds: 6, round_token_cap: 2500, debate_global_cap: 35000 };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async function writeDebateEvent(
|
|
142
|
+
debateId: string,
|
|
143
|
+
event: unknown,
|
|
144
|
+
): Promise<void> {
|
|
145
|
+
await ensureDebatesDir();
|
|
146
|
+
const path = join(DEBATES_DIR, `${debateId}.jsonl`);
|
|
147
|
+
await appendFile(path, `${JSON.stringify(event)}\n`, "utf-8");
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function defaultSeverity(): {
|
|
151
|
+
correctness: number;
|
|
152
|
+
security: number;
|
|
153
|
+
architecture: number;
|
|
154
|
+
test_integrity: number;
|
|
155
|
+
} {
|
|
156
|
+
return { correctness: 0, security: 0, architecture: 0, test_integrity: 0 };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function decidePolicy(
|
|
160
|
+
severity: ReturnType<typeof defaultSeverity>,
|
|
161
|
+
minEvidenceConfidence: number,
|
|
162
|
+
): PolicyDecision {
|
|
163
|
+
if (
|
|
164
|
+
severity.security >= THRESHOLDS.security ||
|
|
165
|
+
severity.correctness >= THRESHOLDS.correctness ||
|
|
166
|
+
severity.architecture >= THRESHOLDS.architecture ||
|
|
167
|
+
severity.test_integrity >= THRESHOLDS.test_integrity
|
|
168
|
+
) {
|
|
169
|
+
return "block";
|
|
170
|
+
}
|
|
171
|
+
if (minEvidenceConfidence < 0.55) return "human_required";
|
|
172
|
+
if (minEvidenceConfidence < 0.75) return "conditional_pass";
|
|
173
|
+
return "pass";
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function parseEnvelope(raw: string): BusEnvelope<RoundPayload> | null {
|
|
177
|
+
try {
|
|
178
|
+
const parsed = JSON.parse(raw) as BusEnvelope<RoundPayload>;
|
|
179
|
+
if (parsed?.protocol !== "pi-debate-bus/v1") return null;
|
|
180
|
+
if (parsed?.kind !== "round") return null;
|
|
181
|
+
return parsed;
|
|
182
|
+
} catch {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export default function debateOrchestrator(pi: ExtensionAPI) {
|
|
188
|
+
let state: DebateState | null = null;
|
|
189
|
+
let lastSeverity = defaultSeverity();
|
|
190
|
+
|
|
191
|
+
async function openDebate(runId: string, debateId: string): Promise<void> {
|
|
192
|
+
const caps = await readRoundCapsFromSchema();
|
|
193
|
+
state = {
|
|
194
|
+
run_id: runId,
|
|
195
|
+
debate_id: debateId,
|
|
196
|
+
round_count: 0,
|
|
197
|
+
budget_used: 0,
|
|
198
|
+
...caps,
|
|
199
|
+
};
|
|
200
|
+
pi.appendEntry("harness-debate-state", state);
|
|
201
|
+
const envelope: BusEnvelope = {
|
|
202
|
+
protocol: "pi-debate-bus/v1",
|
|
203
|
+
kind: "open",
|
|
204
|
+
correlation: {
|
|
205
|
+
run_id: runId,
|
|
206
|
+
debate_id: debateId,
|
|
207
|
+
sender: "system",
|
|
208
|
+
},
|
|
209
|
+
payload: {
|
|
210
|
+
opened_at: nowIso(),
|
|
211
|
+
budget_profile: "aggressive",
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
pi.appendEntry("harness-debate-envelope", envelope);
|
|
215
|
+
await writeDebateEvent(debateId, envelope);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
async function emitBudgetExhausted(reason: string): Promise<void> {
|
|
219
|
+
if (!state) return;
|
|
220
|
+
const envelope: BusEnvelope = {
|
|
221
|
+
protocol: "pi-debate-bus/v1",
|
|
222
|
+
kind: "budget_exhausted",
|
|
223
|
+
correlation: {
|
|
224
|
+
run_id: state.run_id,
|
|
225
|
+
debate_id: state.debate_id,
|
|
226
|
+
round_index: state.round_count,
|
|
227
|
+
sender: "system",
|
|
228
|
+
},
|
|
229
|
+
payload: {
|
|
230
|
+
schema_version: "1.0.0",
|
|
231
|
+
contract_version: "1.0.0",
|
|
232
|
+
event_type: "budget_exhausted",
|
|
233
|
+
run_id: state.run_id,
|
|
234
|
+
debate_id: state.debate_id,
|
|
235
|
+
round_count: state.round_count,
|
|
236
|
+
budget_used: state.budget_used,
|
|
237
|
+
exhaustion_reason: reason,
|
|
238
|
+
caps: {
|
|
239
|
+
max_rounds: state.max_rounds,
|
|
240
|
+
round_token_cap: state.round_token_cap,
|
|
241
|
+
debate_global_cap: state.debate_global_cap,
|
|
242
|
+
},
|
|
243
|
+
minimum_evidence_confidence: 0.6,
|
|
244
|
+
default_policy_outcome: "block",
|
|
245
|
+
human_override_allowed: true,
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
pi.appendEntry("harness-debate-envelope", envelope);
|
|
249
|
+
pi.appendEntry("harness-budget-exhausted", envelope.payload);
|
|
250
|
+
await writeDebateEvent(state.debate_id, envelope);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
async function acceptRound(envelope: BusEnvelope<RoundPayload>): Promise<{
|
|
254
|
+
ok: boolean;
|
|
255
|
+
reason?: string;
|
|
256
|
+
}> {
|
|
257
|
+
if (!state) return { ok: false, reason: "no active debate" };
|
|
258
|
+
if (state.debate_id !== envelope.correlation.debate_id) {
|
|
259
|
+
return { ok: false, reason: "debate id mismatch" };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const nextRound = state.round_count + 1;
|
|
263
|
+
if (nextRound > state.max_rounds) {
|
|
264
|
+
await emitBudgetExhausted("max_rounds_reached");
|
|
265
|
+
if (HARD_STOP_DEBATE_CAPS) {
|
|
266
|
+
return { ok: false, reason: "max rounds reached" };
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
const perAgent = envelope.payload.token_usage?.per_agent ?? {};
|
|
271
|
+
for (const [agent, tokens] of Object.entries(perAgent)) {
|
|
272
|
+
if (Number(tokens) > state.round_token_cap) {
|
|
273
|
+
await emitBudgetExhausted("round_token_cap_exceeded");
|
|
274
|
+
if (HARD_STOP_DEBATE_CAPS) {
|
|
275
|
+
return { ok: false, reason: `round cap exceeded by ${agent}` };
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const roundTotal = Number(envelope.payload.token_usage?.round_total ?? 0);
|
|
281
|
+
if (state.budget_used + roundTotal > state.debate_global_cap) {
|
|
282
|
+
await emitBudgetExhausted("debate_global_cap_exceeded");
|
|
283
|
+
if (HARD_STOP_DEBATE_CAPS) {
|
|
284
|
+
return { ok: false, reason: "global cap exceeded" };
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
state.round_count = nextRound;
|
|
289
|
+
state.budget_used += roundTotal;
|
|
290
|
+
pi.appendEntry("harness-debate-state", state);
|
|
291
|
+
|
|
292
|
+
if (envelope.payload.severity_scores) {
|
|
293
|
+
lastSeverity = {
|
|
294
|
+
correctness: toSafeFloat(envelope.payload.severity_scores.correctness),
|
|
295
|
+
security: toSafeFloat(envelope.payload.severity_scores.security),
|
|
296
|
+
architecture: toSafeFloat(
|
|
297
|
+
envelope.payload.severity_scores.architecture,
|
|
298
|
+
),
|
|
299
|
+
test_integrity: toSafeFloat(
|
|
300
|
+
envelope.payload.severity_scores.test_integrity,
|
|
301
|
+
),
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const roundRecord = {
|
|
306
|
+
schema_version: "1.0.0",
|
|
307
|
+
contract_version: "1.0.0",
|
|
308
|
+
run_id: state.run_id,
|
|
309
|
+
debate_id: state.debate_id,
|
|
310
|
+
round_index: state.round_count,
|
|
311
|
+
participants: envelope.payload.participants,
|
|
312
|
+
claims: envelope.payload.claims,
|
|
313
|
+
rebuttals: envelope.payload.rebuttals,
|
|
314
|
+
evidence_refs: envelope.payload.evidence_refs,
|
|
315
|
+
token_usage: envelope.payload.token_usage,
|
|
316
|
+
budget_profile: {
|
|
317
|
+
name: "aggressive",
|
|
318
|
+
max_rounds: state.max_rounds,
|
|
319
|
+
round_token_cap: state.round_token_cap,
|
|
320
|
+
debate_global_cap: state.debate_global_cap,
|
|
321
|
+
},
|
|
322
|
+
consensus_delta: Number(envelope.payload.consensus_delta ?? 0),
|
|
323
|
+
};
|
|
324
|
+
pi.appendEntry("harness-round-result", roundRecord);
|
|
325
|
+
pi.appendEntry("harness-debate-envelope", envelope);
|
|
326
|
+
await writeDebateEvent(state.debate_id, envelope);
|
|
327
|
+
return { ok: true };
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
async function finalizeConsensus(
|
|
331
|
+
rationale: string,
|
|
332
|
+
): Promise<PolicyDecision | null> {
|
|
333
|
+
if (!state) return null;
|
|
334
|
+
const evidenceScore = Math.max(
|
|
335
|
+
0,
|
|
336
|
+
Math.min(
|
|
337
|
+
1,
|
|
338
|
+
lastSeverity.correctness * WEIGHTS.claim_quality +
|
|
339
|
+
(1 - Math.max(lastSeverity.security, lastSeverity.test_integrity)) *
|
|
340
|
+
WEIGHTS.reproducibility +
|
|
341
|
+
Math.max(
|
|
342
|
+
0,
|
|
343
|
+
1 - Math.abs(lastSeverity.architecture - lastSeverity.correctness),
|
|
344
|
+
) *
|
|
345
|
+
WEIGHTS.agreement,
|
|
346
|
+
),
|
|
347
|
+
);
|
|
348
|
+
const decision = decidePolicy(lastSeverity, evidenceScore);
|
|
349
|
+
|
|
350
|
+
const consensus = {
|
|
351
|
+
schema_version: "1.0.0",
|
|
352
|
+
contract_version: "1.0.0",
|
|
353
|
+
run_id: state.run_id,
|
|
354
|
+
debate_id: state.debate_id,
|
|
355
|
+
round_count: state.round_count,
|
|
356
|
+
budget_used: state.budget_used,
|
|
357
|
+
severity_scores: lastSeverity,
|
|
358
|
+
severity_thresholds: {
|
|
359
|
+
correctness_block_at: THRESHOLDS.correctness,
|
|
360
|
+
security_block_at: THRESHOLDS.security,
|
|
361
|
+
architecture_block_at: THRESHOLDS.architecture,
|
|
362
|
+
test_integrity_block_at: THRESHOLDS.test_integrity,
|
|
363
|
+
},
|
|
364
|
+
confidence_weights: WEIGHTS,
|
|
365
|
+
evidence_refs: [],
|
|
366
|
+
strict_gate_prerequisites: {
|
|
367
|
+
plan_gate_passed: true,
|
|
368
|
+
execution_completed: true,
|
|
369
|
+
evaluator_passed: true,
|
|
370
|
+
adversarial_debate_completed: state.round_count > 0,
|
|
371
|
+
severity_policy_ok: decision !== "block",
|
|
372
|
+
benchmark_delta_checks_passed: false,
|
|
373
|
+
rollback_artifacts_generated: false,
|
|
374
|
+
},
|
|
375
|
+
policy_decision: decision,
|
|
376
|
+
rationale,
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
const envelope: BusEnvelope = {
|
|
380
|
+
protocol: "pi-debate-bus/v1",
|
|
381
|
+
kind: "consensus",
|
|
382
|
+
correlation: {
|
|
383
|
+
run_id: state.run_id,
|
|
384
|
+
debate_id: state.debate_id,
|
|
385
|
+
round_index: state.round_count,
|
|
386
|
+
sender: "system",
|
|
387
|
+
},
|
|
388
|
+
payload: consensus,
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
await writeFile(
|
|
392
|
+
join(DEBATES_DIR, `${state.debate_id}.consensus.json`),
|
|
393
|
+
`${JSON.stringify(consensus, null, 2)}\n`,
|
|
394
|
+
"utf-8",
|
|
395
|
+
);
|
|
396
|
+
pi.appendEntry("harness-consensus-packet", consensus);
|
|
397
|
+
pi.appendEntry("harness-debate-envelope", envelope);
|
|
398
|
+
await writeDebateEvent(state.debate_id, envelope);
|
|
399
|
+
return decision;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
403
|
+
const entries = ctx.sessionManager.getEntries();
|
|
404
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
405
|
+
const entry = entries[i];
|
|
406
|
+
if (
|
|
407
|
+
entry.type === "custom" &&
|
|
408
|
+
entry.customType === "harness-debate-state"
|
|
409
|
+
) {
|
|
410
|
+
state = entry.data as DebateState;
|
|
411
|
+
break;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
pi.registerCommand("harness-debate-open", {
|
|
417
|
+
description: "Open a headless debate session",
|
|
418
|
+
handler: async (args, ctx) => {
|
|
419
|
+
const trimmed = args.trim();
|
|
420
|
+
let debateId = trimmed;
|
|
421
|
+
if (!debateId) debateId = `debate-${Date.now()}`;
|
|
422
|
+
await openDebate(getRunId(ctx), debateId);
|
|
423
|
+
pi.sendMessage({
|
|
424
|
+
customType: "harness-debate-opened",
|
|
425
|
+
content: `Debate opened: ${debateId}`,
|
|
426
|
+
display: false,
|
|
427
|
+
});
|
|
428
|
+
},
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
pi.registerCommand("harness-debate-round", {
|
|
432
|
+
description: "Submit a debate round envelope JSON",
|
|
433
|
+
handler: async (args, ctx) => {
|
|
434
|
+
if (!state) {
|
|
435
|
+
await openDebate(getRunId(ctx), `debate-${Date.now()}`);
|
|
436
|
+
}
|
|
437
|
+
const envelope = parseEnvelope(args.trim());
|
|
438
|
+
if (!envelope) {
|
|
439
|
+
pi.sendMessage({
|
|
440
|
+
customType: "harness-debate-round-error",
|
|
441
|
+
content:
|
|
442
|
+
"Invalid debate envelope JSON. Expect protocol=pi-debate-bus/v1, kind=round.",
|
|
443
|
+
display: true,
|
|
444
|
+
});
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
const result = await acceptRound(envelope);
|
|
448
|
+
if (!result.ok) {
|
|
449
|
+
pi.sendMessage({
|
|
450
|
+
customType: "harness-debate-round-rejected",
|
|
451
|
+
content: `Round rejected: ${result.reason ?? "unknown reason"}`,
|
|
452
|
+
display: true,
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
},
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
pi.registerCommand("harness-debate-consensus", {
|
|
459
|
+
description: "Finalize debate and emit consensus packet",
|
|
460
|
+
handler: async (args) => {
|
|
461
|
+
if (!state) {
|
|
462
|
+
pi.sendMessage({
|
|
463
|
+
customType: "harness-debate-consensus-error",
|
|
464
|
+
content: "No active debate to finalize.",
|
|
465
|
+
display: true,
|
|
466
|
+
});
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
const decision = await finalizeConsensus(
|
|
470
|
+
args.trim() || "Consensus generated by debate-orchestrator.",
|
|
471
|
+
);
|
|
472
|
+
pi.sendMessage({
|
|
473
|
+
customType: "harness-debate-consensus",
|
|
474
|
+
content: `Consensus decision: ${decision ?? "unknown"}`,
|
|
475
|
+
display: true,
|
|
476
|
+
});
|
|
477
|
+
},
|
|
478
|
+
});
|
|
479
|
+
}
|