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,153 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import crypto from "node:crypto";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
|
|
7
|
+
const ROUTER_PATH = ".pi/model-router.json";
|
|
8
|
+
const BACKUP_DIR = ".pi/harness/router/backups";
|
|
9
|
+
|
|
10
|
+
function fail(message) {
|
|
11
|
+
process.stderr.write(`Error: ${message}\n`);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function parseArgs(argv) {
|
|
16
|
+
const args = {};
|
|
17
|
+
for (let i = 0; i < argv.length; i++) {
|
|
18
|
+
const token = argv[i];
|
|
19
|
+
if (!token.startsWith("--")) continue;
|
|
20
|
+
const key = token.slice(2);
|
|
21
|
+
const value = argv[i + 1];
|
|
22
|
+
if (!value || value.startsWith("--")) {
|
|
23
|
+
args[key] = true;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
args[key] = value;
|
|
27
|
+
i++;
|
|
28
|
+
}
|
|
29
|
+
return args;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function readJson(filePath, label) {
|
|
33
|
+
if (!fs.existsSync(filePath)) fail(`${label} not found: ${filePath}`);
|
|
34
|
+
try {
|
|
35
|
+
return JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
36
|
+
} catch (error) {
|
|
37
|
+
fail(`${label} is not valid JSON (${filePath}): ${error.message}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function sha256FromJson(value) {
|
|
42
|
+
const canonical = `${JSON.stringify(value, null, 2)}\n`;
|
|
43
|
+
return crypto.createHash("sha256").update(canonical).digest("hex");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function validateProposal(proposal) {
|
|
47
|
+
if (proposal.status !== "proposed") {
|
|
48
|
+
fail(`proposal status must be 'proposed', got '${proposal.status}'`);
|
|
49
|
+
}
|
|
50
|
+
if (proposal.router_path !== ROUTER_PATH) {
|
|
51
|
+
fail(`proposal router_path must be '${ROUTER_PATH}'`);
|
|
52
|
+
}
|
|
53
|
+
const evidence = proposal.evidence ?? {};
|
|
54
|
+
if (
|
|
55
|
+
!Number.isInteger(evidence.sample_count) ||
|
|
56
|
+
!Number.isInteger(evidence.min_sample_count)
|
|
57
|
+
) {
|
|
58
|
+
fail("proposal evidence sample counts are invalid");
|
|
59
|
+
}
|
|
60
|
+
if (evidence.sample_count < evidence.min_sample_count) {
|
|
61
|
+
fail("proposal evidence does not meet minimum sample threshold");
|
|
62
|
+
}
|
|
63
|
+
if (evidence.regression_guard_passed !== true) {
|
|
64
|
+
fail("proposal regression guard is not passing");
|
|
65
|
+
}
|
|
66
|
+
if (!proposal.candidate_router || typeof proposal.candidate_router !== "object") {
|
|
67
|
+
fail("proposal missing candidate_router object");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const args = parseArgs(process.argv.slice(2));
|
|
72
|
+
|
|
73
|
+
if (args.help || args.h) {
|
|
74
|
+
process.stdout.write(
|
|
75
|
+
[
|
|
76
|
+
"Usage:",
|
|
77
|
+
" node .pi/harness/router/apply-router-proposal.mjs \\",
|
|
78
|
+
" --proposal <proposal.json> \\",
|
|
79
|
+
" --approve-by <human> \\",
|
|
80
|
+
" --justification <reason> \\",
|
|
81
|
+
" --write",
|
|
82
|
+
"",
|
|
83
|
+
"Behavior:",
|
|
84
|
+
" - validates proposal status and evidence",
|
|
85
|
+
" - verifies base router hash matches current router file",
|
|
86
|
+
" - creates backup before atomic write",
|
|
87
|
+
" - refuses write unless explicit --write is provided",
|
|
88
|
+
].join("\n"),
|
|
89
|
+
);
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (!args.proposal) fail("missing --proposal");
|
|
94
|
+
if (!args["approve-by"]) fail("missing --approve-by");
|
|
95
|
+
if (!args.justification) fail("missing --justification");
|
|
96
|
+
if (!args.write) {
|
|
97
|
+
fail("missing --write (blind writes and implicit applies are disallowed)");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const proposalPath = path.resolve(args.proposal);
|
|
101
|
+
const proposal = readJson(proposalPath, "proposal");
|
|
102
|
+
const currentRouter = readJson(ROUTER_PATH, "current router");
|
|
103
|
+
|
|
104
|
+
validateProposal(proposal);
|
|
105
|
+
|
|
106
|
+
const currentHash = sha256FromJson(currentRouter);
|
|
107
|
+
if (currentHash !== proposal.base_router_sha256) {
|
|
108
|
+
fail(
|
|
109
|
+
[
|
|
110
|
+
"base router hash mismatch; refusing apply.",
|
|
111
|
+
`current: ${currentHash}`,
|
|
112
|
+
`proposal: ${proposal.base_router_sha256}`,
|
|
113
|
+
].join("\n"),
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const candidateHash = sha256FromJson(proposal.candidate_router);
|
|
118
|
+
if (candidateHash !== proposal.candidate_router_sha256) {
|
|
119
|
+
fail("proposal candidate_router hash mismatch; artifact may be tampered");
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const now = new Date().toISOString();
|
|
123
|
+
fs.mkdirSync(BACKUP_DIR, { recursive: true });
|
|
124
|
+
const backupPath = path.join(
|
|
125
|
+
BACKUP_DIR,
|
|
126
|
+
`model-router.${now.replace(/[:.]/g, "-")}.json`,
|
|
127
|
+
);
|
|
128
|
+
fs.copyFileSync(ROUTER_PATH, backupPath);
|
|
129
|
+
|
|
130
|
+
const routerTemp = `${ROUTER_PATH}.tmp`;
|
|
131
|
+
fs.writeFileSync(routerTemp, `${JSON.stringify(proposal.candidate_router, null, 2)}\n`);
|
|
132
|
+
fs.renameSync(routerTemp, ROUTER_PATH);
|
|
133
|
+
|
|
134
|
+
proposal.status = "approved_applied";
|
|
135
|
+
proposal.approval = {
|
|
136
|
+
required: true,
|
|
137
|
+
approved_by: args["approve-by"],
|
|
138
|
+
approved_at: now,
|
|
139
|
+
justification: args.justification,
|
|
140
|
+
};
|
|
141
|
+
proposal.applied_router_sha256 = candidateHash;
|
|
142
|
+
proposal.backup_router_path = backupPath;
|
|
143
|
+
proposal.applied_at = now;
|
|
144
|
+
fs.writeFileSync(proposalPath, `${JSON.stringify(proposal, null, 2)}\n`);
|
|
145
|
+
|
|
146
|
+
process.stdout.write(
|
|
147
|
+
[
|
|
148
|
+
"Router proposal applied safely.",
|
|
149
|
+
`proposal: ${proposalPath}`,
|
|
150
|
+
`backup: ${backupPath}`,
|
|
151
|
+
`router: ${ROUTER_PATH}`,
|
|
152
|
+
].join("\n") + "\n",
|
|
153
|
+
);
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import crypto from "node:crypto";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
|
|
7
|
+
const ROUTER_PATH = ".pi/model-router.json";
|
|
8
|
+
|
|
9
|
+
function fail(message) {
|
|
10
|
+
process.stderr.write(`Error: ${message}\n`);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function parseArgs(argv) {
|
|
15
|
+
const args = {};
|
|
16
|
+
for (let i = 0; i < argv.length; i++) {
|
|
17
|
+
const token = argv[i];
|
|
18
|
+
if (!token.startsWith("--")) continue;
|
|
19
|
+
const key = token.slice(2);
|
|
20
|
+
const value = argv[i + 1];
|
|
21
|
+
if (!value || value.startsWith("--")) {
|
|
22
|
+
args[key] = true;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
args[key] = value;
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
return args;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function readJson(filePath, label) {
|
|
32
|
+
if (!fs.existsSync(filePath)) {
|
|
33
|
+
fail(`${label} not found: ${filePath}`);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
37
|
+
} catch (error) {
|
|
38
|
+
fail(`${label} is not valid JSON (${filePath}): ${error.message}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function sha256FromJson(value) {
|
|
43
|
+
const canonical = `${JSON.stringify(value, null, 2)}\n`;
|
|
44
|
+
return crypto.createHash("sha256").update(canonical).digest("hex");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function ensureEvidence(evidence) {
|
|
48
|
+
const required = [
|
|
49
|
+
"sample_count",
|
|
50
|
+
"min_sample_count",
|
|
51
|
+
"success_rate_delta",
|
|
52
|
+
"cost_per_task_delta",
|
|
53
|
+
"regression_guard_passed",
|
|
54
|
+
"trace_refs",
|
|
55
|
+
];
|
|
56
|
+
for (const field of required) {
|
|
57
|
+
if (!(field in evidence)) fail(`evidence missing required field: ${field}`);
|
|
58
|
+
}
|
|
59
|
+
if (!Number.isInteger(evidence.sample_count) || evidence.sample_count < 1) {
|
|
60
|
+
fail("evidence.sample_count must be an integer >= 1");
|
|
61
|
+
}
|
|
62
|
+
if (
|
|
63
|
+
!Number.isInteger(evidence.min_sample_count) ||
|
|
64
|
+
evidence.min_sample_count < 1
|
|
65
|
+
) {
|
|
66
|
+
fail("evidence.min_sample_count must be an integer >= 1");
|
|
67
|
+
}
|
|
68
|
+
if (evidence.sample_count < evidence.min_sample_count) {
|
|
69
|
+
fail(
|
|
70
|
+
`insufficient sample_count (${evidence.sample_count} < ${evidence.min_sample_count})`,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
if (typeof evidence.success_rate_delta !== "number") {
|
|
74
|
+
fail("evidence.success_rate_delta must be numeric");
|
|
75
|
+
}
|
|
76
|
+
if (typeof evidence.cost_per_task_delta !== "number") {
|
|
77
|
+
fail("evidence.cost_per_task_delta must be numeric");
|
|
78
|
+
}
|
|
79
|
+
if (evidence.regression_guard_passed !== true) {
|
|
80
|
+
fail("evidence.regression_guard_passed must be true");
|
|
81
|
+
}
|
|
82
|
+
if (!Array.isArray(evidence.trace_refs) || evidence.trace_refs.length === 0) {
|
|
83
|
+
fail("evidence.trace_refs must be a non-empty array");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const args = parseArgs(process.argv.slice(2));
|
|
88
|
+
|
|
89
|
+
if (args.help || args.h) {
|
|
90
|
+
process.stdout.write(
|
|
91
|
+
[
|
|
92
|
+
"Usage:",
|
|
93
|
+
" node .pi/harness/router/propose-router-tuning.mjs \\",
|
|
94
|
+
" --evidence <evidence.json> \\",
|
|
95
|
+
" --candidate <candidate-router.json> \\",
|
|
96
|
+
" --proposal-out <proposal.json>",
|
|
97
|
+
"",
|
|
98
|
+
"Behavior:",
|
|
99
|
+
" - validates evidence thresholds",
|
|
100
|
+
" - captures base/candidate router hashes",
|
|
101
|
+
" - emits proposal artifact without changing .pi/model-router.json",
|
|
102
|
+
].join("\n"),
|
|
103
|
+
);
|
|
104
|
+
process.exit(0);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!args.evidence) fail("missing --evidence");
|
|
108
|
+
if (!args.candidate) fail("missing --candidate");
|
|
109
|
+
if (!args["proposal-out"]) fail("missing --proposal-out");
|
|
110
|
+
|
|
111
|
+
const baseRouter = readJson(ROUTER_PATH, "base router");
|
|
112
|
+
const candidateRouter = readJson(args.candidate, "candidate router");
|
|
113
|
+
const evidence = readJson(args.evidence, "evidence");
|
|
114
|
+
|
|
115
|
+
ensureEvidence(evidence);
|
|
116
|
+
|
|
117
|
+
const now = new Date().toISOString();
|
|
118
|
+
const proposalId = `router-tune-${now.replace(/[:.]/g, "-")}`;
|
|
119
|
+
|
|
120
|
+
const proposal = {
|
|
121
|
+
schema_version: "1.0.0",
|
|
122
|
+
proposal_id: proposalId,
|
|
123
|
+
created_at: now,
|
|
124
|
+
router_path: ROUTER_PATH,
|
|
125
|
+
base_router_sha256: sha256FromJson(baseRouter),
|
|
126
|
+
candidate_router_sha256: sha256FromJson(candidateRouter),
|
|
127
|
+
evidence,
|
|
128
|
+
status: "proposed",
|
|
129
|
+
approval: {
|
|
130
|
+
required: true,
|
|
131
|
+
approved_by: null,
|
|
132
|
+
approved_at: null,
|
|
133
|
+
justification: null,
|
|
134
|
+
},
|
|
135
|
+
candidate_router: candidateRouter,
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const outputPath = path.resolve(args["proposal-out"]);
|
|
139
|
+
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
|
140
|
+
fs.writeFileSync(outputPath, `${JSON.stringify(proposal, null, 2)}\n`);
|
|
141
|
+
|
|
142
|
+
process.stdout.write(
|
|
143
|
+
[
|
|
144
|
+
"Router tuning proposal created.",
|
|
145
|
+
`proposal_id: ${proposal.proposal_id}`,
|
|
146
|
+
`output: ${outputPath}`,
|
|
147
|
+
"status: proposed (no router write performed)",
|
|
148
|
+
].join("\n") + "\n",
|
|
149
|
+
);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Harness Artifact Contracts
|
|
2
|
+
|
|
3
|
+
This directory is the canonical contract surface for Phase 1 harness artifacts.
|
|
4
|
+
|
|
5
|
+
## Versioning
|
|
6
|
+
|
|
7
|
+
- Contract family version: `1.0.0`
|
|
8
|
+
- Each schema includes a `contract_version` field and `schema_version` metadata.
|
|
9
|
+
- Backward-compatible additions: add optional fields only.
|
|
10
|
+
- Breaking changes: bump major version and add migration notes before use.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
These schemas define the minimum machine-readable contracts for:
|
|
15
|
+
|
|
16
|
+
- planning (`PlanPacket`)
|
|
17
|
+
- execution telemetry (`RunTrace`)
|
|
18
|
+
- independent evaluation (`EvalVerdict`)
|
|
19
|
+
- adversarial findings (`AdversaryReport`)
|
|
20
|
+
- incidents and overrides (`IncidentRecord`)
|
|
21
|
+
- debate rounds (`RoundResult`)
|
|
22
|
+
- policy consensus (`ConsensusPacket`)
|
|
23
|
+
- budget hard-stop events (`BudgetExhausted`)
|
|
24
|
+
- router tuning proposals (`RouterTuningProposal`)
|
|
25
|
+
|
|
26
|
+
## Governance Defaults Locked In
|
|
27
|
+
|
|
28
|
+
- Debate profile is `aggressive` (`max_rounds=6`, `round_token_cap=2500`, `debate_global_cap=35000`)
|
|
29
|
+
- Consensus confidence weights are fixed at:
|
|
30
|
+
- `claim_quality=0.20`
|
|
31
|
+
- `reproducibility=0.40`
|
|
32
|
+
- `agreement=0.40`
|
|
33
|
+
- Severity policy gate thresholds are fixed at:
|
|
34
|
+
- `security>=0.70` or `correctness>=0.70` blocks
|
|
35
|
+
- `architecture>=0.80` or `test_integrity>=0.80` blocks
|
|
36
|
+
- Strict pre-PR gate prerequisites are explicit and must all pass.
|
|
37
|
+
- Policy override allows one human approver only, with mandatory justification.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ultimate-pi.local/.pi/harness/specs/adversary-report.schema.json",
|
|
4
|
+
"title": "AdversaryReport",
|
|
5
|
+
"description": "Adversarial reviewer findings with merge-blocking authority signals.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema_version",
|
|
10
|
+
"contract_version",
|
|
11
|
+
"run_id",
|
|
12
|
+
"severity",
|
|
13
|
+
"findings",
|
|
14
|
+
"repro_steps",
|
|
15
|
+
"block_merge"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"schema_version": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"const": "1.0.0"
|
|
21
|
+
},
|
|
22
|
+
"contract_version": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"const": "1.0.0"
|
|
25
|
+
},
|
|
26
|
+
"run_id": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"minLength": 1
|
|
29
|
+
},
|
|
30
|
+
"severity": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"enum": ["low", "medium", "high", "critical"]
|
|
33
|
+
},
|
|
34
|
+
"findings": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"minItems": 1,
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"minLength": 1
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"repro_steps": {
|
|
43
|
+
"type": "array",
|
|
44
|
+
"items": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"minLength": 1
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"block_merge": {
|
|
50
|
+
"type": "boolean"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ultimate-pi.local/.pi/harness/specs/budget-exhausted-event.schema.json",
|
|
4
|
+
"title": "BudgetExhausted",
|
|
5
|
+
"description": "Structured hard-stop event emitted when debate budget is exhausted.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema_version",
|
|
10
|
+
"contract_version",
|
|
11
|
+
"event_type",
|
|
12
|
+
"run_id",
|
|
13
|
+
"debate_id",
|
|
14
|
+
"round_count",
|
|
15
|
+
"budget_used",
|
|
16
|
+
"exhaustion_reason",
|
|
17
|
+
"caps",
|
|
18
|
+
"minimum_evidence_confidence",
|
|
19
|
+
"default_policy_outcome",
|
|
20
|
+
"human_override_allowed"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"schema_version": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"const": "1.0.0"
|
|
26
|
+
},
|
|
27
|
+
"contract_version": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"const": "1.0.0"
|
|
30
|
+
},
|
|
31
|
+
"event_type": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"const": "budget_exhausted"
|
|
34
|
+
},
|
|
35
|
+
"run_id": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"minLength": 1
|
|
38
|
+
},
|
|
39
|
+
"debate_id": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"minLength": 1
|
|
42
|
+
},
|
|
43
|
+
"round_count": {
|
|
44
|
+
"type": "integer",
|
|
45
|
+
"minimum": 1,
|
|
46
|
+
"maximum": 6
|
|
47
|
+
},
|
|
48
|
+
"budget_used": {
|
|
49
|
+
"type": "integer",
|
|
50
|
+
"minimum": 0
|
|
51
|
+
},
|
|
52
|
+
"exhaustion_reason": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"enum": [
|
|
55
|
+
"max_rounds_reached",
|
|
56
|
+
"round_token_cap_exceeded",
|
|
57
|
+
"debate_global_cap_exceeded"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"caps": {
|
|
61
|
+
"type": "object",
|
|
62
|
+
"additionalProperties": false,
|
|
63
|
+
"required": ["max_rounds", "round_token_cap", "debate_global_cap"],
|
|
64
|
+
"properties": {
|
|
65
|
+
"max_rounds": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"const": 6
|
|
68
|
+
},
|
|
69
|
+
"round_token_cap": {
|
|
70
|
+
"type": "integer",
|
|
71
|
+
"const": 2500
|
|
72
|
+
},
|
|
73
|
+
"debate_global_cap": {
|
|
74
|
+
"type": "integer",
|
|
75
|
+
"const": 35000
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"minimum_evidence_confidence": {
|
|
80
|
+
"type": "number",
|
|
81
|
+
"minimum": 0,
|
|
82
|
+
"maximum": 1
|
|
83
|
+
},
|
|
84
|
+
"default_policy_outcome": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"enum": ["block", "human_required"]
|
|
87
|
+
},
|
|
88
|
+
"human_override_allowed": {
|
|
89
|
+
"type": "boolean",
|
|
90
|
+
"const": true
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://ultimate-pi.local/.pi/harness/specs/consensus-packet.schema.json",
|
|
4
|
+
"title": "ConsensusPacket",
|
|
5
|
+
"description": "Final debate consensus consumed by severity-policy-engine and strict pre-PR gate.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema_version",
|
|
10
|
+
"contract_version",
|
|
11
|
+
"run_id",
|
|
12
|
+
"debate_id",
|
|
13
|
+
"round_count",
|
|
14
|
+
"budget_used",
|
|
15
|
+
"severity_scores",
|
|
16
|
+
"confidence_weights",
|
|
17
|
+
"evidence_refs",
|
|
18
|
+
"strict_gate_prerequisites",
|
|
19
|
+
"policy_decision",
|
|
20
|
+
"rationale"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"schema_version": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"const": "1.0.0"
|
|
26
|
+
},
|
|
27
|
+
"contract_version": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"const": "1.0.0"
|
|
30
|
+
},
|
|
31
|
+
"run_id": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"minLength": 1
|
|
34
|
+
},
|
|
35
|
+
"debate_id": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"minLength": 1
|
|
38
|
+
},
|
|
39
|
+
"round_count": {
|
|
40
|
+
"type": "integer",
|
|
41
|
+
"minimum": 1,
|
|
42
|
+
"maximum": 6
|
|
43
|
+
},
|
|
44
|
+
"budget_used": {
|
|
45
|
+
"type": "integer",
|
|
46
|
+
"minimum": 0,
|
|
47
|
+
"maximum": 35000
|
|
48
|
+
},
|
|
49
|
+
"severity_scores": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"additionalProperties": false,
|
|
52
|
+
"required": ["correctness", "security", "architecture", "test_integrity"],
|
|
53
|
+
"properties": {
|
|
54
|
+
"correctness": {
|
|
55
|
+
"type": "number",
|
|
56
|
+
"minimum": 0,
|
|
57
|
+
"maximum": 1
|
|
58
|
+
},
|
|
59
|
+
"security": {
|
|
60
|
+
"type": "number",
|
|
61
|
+
"minimum": 0,
|
|
62
|
+
"maximum": 1
|
|
63
|
+
},
|
|
64
|
+
"architecture": {
|
|
65
|
+
"type": "number",
|
|
66
|
+
"minimum": 0,
|
|
67
|
+
"maximum": 1
|
|
68
|
+
},
|
|
69
|
+
"test_integrity": {
|
|
70
|
+
"type": "number",
|
|
71
|
+
"minimum": 0,
|
|
72
|
+
"maximum": 1
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"severity_thresholds": {
|
|
77
|
+
"type": "object",
|
|
78
|
+
"additionalProperties": false,
|
|
79
|
+
"required": [
|
|
80
|
+
"correctness_block_at",
|
|
81
|
+
"security_block_at",
|
|
82
|
+
"architecture_block_at",
|
|
83
|
+
"test_integrity_block_at"
|
|
84
|
+
],
|
|
85
|
+
"properties": {
|
|
86
|
+
"correctness_block_at": {
|
|
87
|
+
"type": "number",
|
|
88
|
+
"const": 0.7
|
|
89
|
+
},
|
|
90
|
+
"security_block_at": {
|
|
91
|
+
"type": "number",
|
|
92
|
+
"const": 0.7
|
|
93
|
+
},
|
|
94
|
+
"architecture_block_at": {
|
|
95
|
+
"type": "number",
|
|
96
|
+
"const": 0.8
|
|
97
|
+
},
|
|
98
|
+
"test_integrity_block_at": {
|
|
99
|
+
"type": "number",
|
|
100
|
+
"const": 0.8
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"confidence_weights": {
|
|
105
|
+
"type": "object",
|
|
106
|
+
"additionalProperties": false,
|
|
107
|
+
"required": ["claim_quality", "reproducibility", "agreement"],
|
|
108
|
+
"properties": {
|
|
109
|
+
"claim_quality": {
|
|
110
|
+
"type": "number",
|
|
111
|
+
"const": 0.2
|
|
112
|
+
},
|
|
113
|
+
"reproducibility": {
|
|
114
|
+
"type": "number",
|
|
115
|
+
"const": 0.4
|
|
116
|
+
},
|
|
117
|
+
"agreement": {
|
|
118
|
+
"type": "number",
|
|
119
|
+
"const": 0.4
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"evidence_refs": {
|
|
124
|
+
"type": "array",
|
|
125
|
+
"items": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"minLength": 1
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"strict_gate_prerequisites": {
|
|
131
|
+
"type": "object",
|
|
132
|
+
"additionalProperties": false,
|
|
133
|
+
"required": [
|
|
134
|
+
"plan_gate_passed",
|
|
135
|
+
"execution_completed",
|
|
136
|
+
"evaluator_passed",
|
|
137
|
+
"adversarial_debate_completed",
|
|
138
|
+
"severity_policy_ok",
|
|
139
|
+
"benchmark_delta_checks_passed",
|
|
140
|
+
"rollback_artifacts_generated"
|
|
141
|
+
],
|
|
142
|
+
"properties": {
|
|
143
|
+
"plan_gate_passed": {
|
|
144
|
+
"type": "boolean"
|
|
145
|
+
},
|
|
146
|
+
"execution_completed": {
|
|
147
|
+
"type": "boolean"
|
|
148
|
+
},
|
|
149
|
+
"evaluator_passed": {
|
|
150
|
+
"type": "boolean"
|
|
151
|
+
},
|
|
152
|
+
"adversarial_debate_completed": {
|
|
153
|
+
"type": "boolean"
|
|
154
|
+
},
|
|
155
|
+
"severity_policy_ok": {
|
|
156
|
+
"type": "boolean"
|
|
157
|
+
},
|
|
158
|
+
"benchmark_delta_checks_passed": {
|
|
159
|
+
"type": "boolean"
|
|
160
|
+
},
|
|
161
|
+
"rollback_artifacts_generated": {
|
|
162
|
+
"type": "boolean"
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
"policy_decision": {
|
|
167
|
+
"type": "string",
|
|
168
|
+
"enum": ["pass", "conditional_pass", "block", "human_required"]
|
|
169
|
+
},
|
|
170
|
+
"rationale": {
|
|
171
|
+
"type": "string",
|
|
172
|
+
"minLength": 1
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|