ultimate-pi 0.18.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/harness-debate-plan/SKILL.md +1 -1
- package/.agents/skills/harness-decisions/SKILL.md +1 -2
- package/.agents/skills/harness-governor/SKILL.md +6 -5
- package/.pi/PACKAGING.md +4 -4
- package/.pi/SYSTEM.md +54 -120
- package/.pi/agents/harness/incident-recorder.md +0 -1
- package/.pi/agents/harness/planning/decompose.md +0 -2
- package/.pi/agents/harness/planning/execution-plan-author.md +0 -2
- package/.pi/agents/harness/planning/hypothesis-validator.md +0 -2
- package/.pi/agents/harness/planning/hypothesis.md +0 -2
- package/.pi/agents/harness/planning/implementation-researcher.md +0 -2
- package/.pi/agents/harness/planning/plan-adversary.md +0 -2
- package/.pi/agents/harness/planning/plan-evaluator.md +1 -3
- package/.pi/agents/harness/planning/planning-context.md +0 -2
- package/.pi/agents/harness/planning/review-integrator.md +0 -2
- package/.pi/agents/harness/planning/sprint-contract-auditor.md +0 -2
- package/.pi/agents/harness/planning/stack-researcher.md +0 -2
- package/.pi/agents/harness/reviewing/adversary.md +0 -2
- package/.pi/agents/harness/reviewing/evaluator.md +0 -2
- package/.pi/agents/harness/reviewing/tie-breaker.md +0 -2
- package/.pi/agents/harness/running/executor.md +0 -2
- package/.pi/agents/harness/sentrux-bootstrap.md +0 -1
- package/.pi/agents/harness/sentrux-steward.md +0 -2
- package/.pi/agents/harness/trace-librarian.md +0 -1
- package/.pi/extensions/00-posthog-network-bootstrap.ts +1 -1
- package/.pi/extensions/agt-kill-switch.ts +57 -0
- package/.pi/extensions/agt-prompt-guard.ts +32 -0
- package/.pi/extensions/custom-footer.ts +46 -145
- package/.pi/extensions/custom-header.ts +1 -1
- package/.pi/extensions/custom-system-prompt.ts +1 -1
- package/.pi/extensions/debate-orchestrator.ts +6 -6
- package/.pi/extensions/harness-ask-user.ts +7 -7
- package/.pi/extensions/harness-debate-tools.ts +26 -42
- package/.pi/extensions/harness-lens.ts +94 -0
- package/.pi/extensions/harness-plan-approval.ts +11 -11
- package/.pi/extensions/harness-run-context.ts +1070 -876
- package/.pi/extensions/harness-subagent-governance.ts +8 -0
- package/.pi/extensions/harness-subagent-submit.ts +34 -163
- package/.pi/extensions/harness-subagents.ts +3 -3
- package/.pi/extensions/harness-telemetry.ts +2 -2
- package/.pi/extensions/harness-web-tools.ts +2 -2
- package/.pi/extensions/policy-gate.ts +25 -5
- package/.pi/extensions/sentrux-rules-sync.ts +1 -1
- package/.pi/extensions/subagent-governance.ts +92 -0
- package/.pi/extensions/trace-recorder.ts +1 -1
- package/.pi/extensions/{ultimate-pi-vcc.ts → vcc-compaction.ts} +1 -1
- package/.pi/harness/README.md +6 -2
- package/.pi/harness/agents.manifest.json +22 -25
- package/.pi/harness/agents.policy.yaml +275 -0
- package/.pi/harness/docs/adrs/0030-inhouse-vcc-compaction.md +1 -1
- package/.pi/harness/docs/adrs/0035-plan-phase-review-gate.md +1 -1
- package/.pi/harness/docs/adrs/0045-harness-lens-minimal-contract.md +49 -0
- package/.pi/harness/docs/adrs/0046-agt-policy-engine.md +51 -0
- package/.pi/harness/docs/adrs/0047-agt-layered-security.md +39 -0
- package/.pi/harness/docs/adrs/0048-tool-call-hook-order.md +25 -0
- package/.pi/harness/docs/adrs/0049-agents-policy-manifest.md +36 -0
- package/.pi/harness/docs/adrs/README.md +5 -0
- package/.pi/harness/evolution/README.md +1 -2
- package/.pi/harness/examples/agents.policy.project.yaml +19 -0
- package/.pi/harness/examples/policies/custom-deny-bash.yaml +9 -0
- package/.pi/harness/policies/bash-denylists.yaml +5 -0
- package/.pi/harness/policies/defaults.yaml +51 -0
- package/.pi/harness/policies/orchestrator.yaml +18 -0
- package/.pi/harness/policies/phases.yaml +10 -0
- package/.pi/harness/policies/roles.yaml +5 -0
- package/.pi/harness/policies/web-guard.yaml +5 -0
- package/.pi/harness/policies/workflow-sequences.yaml +9 -0
- package/.pi/harness/sentrux/architecture.manifest.json +26 -4
- package/.pi/harness/specs/observation.schema.json +2 -1
- package/.pi/lib/agents-policy.d.mts +70 -0
- package/.pi/lib/agents-policy.mjs +325 -0
- package/.pi/lib/agents-policy.ts +19 -0
- package/.pi/lib/agt/audit-run-sink.ts +52 -0
- package/.pi/lib/agt/build-evaluation-context.ts +285 -0
- package/.pi/lib/agt/config.ts +28 -0
- package/.pi/lib/agt/delegation.ts +69 -0
- package/.pi/lib/agt/evaluate-policy.ts +56 -0
- package/.pi/lib/agt/identity-registry.ts +41 -0
- package/.pi/lib/agt/index.ts +55 -0
- package/.pi/lib/agt/kill-switch-state.ts +11 -0
- package/.pi/lib/agt/legacy-evaluate.ts +101 -0
- package/.pi/lib/agt/policy-engine.ts +154 -0
- package/.pi/lib/agt/rings.ts +21 -0
- package/.pi/lib/agt/sre-hooks.ts +45 -0
- package/.pi/lib/agt/trust-run-store.ts +26 -0
- package/.pi/lib/agt/workflow-history.ts +29 -0
- package/.pi/lib/agt-governance-active.ts +14 -0
- package/.pi/lib/agt-tool-guard.ts +78 -0
- package/.pi/lib/ask-user/dialog.ts +314 -0
- package/.pi/{extensions/lib → lib}/debate-bus-core.ts +10 -10
- package/.pi/{extensions/lib → lib}/debate-bus-state.ts +1 -1
- package/.pi/{extensions/lib → lib}/extension-load-guard.ts +13 -2
- package/.pi/lib/harness-agt-tool-guard.ts +5 -0
- package/.pi/{extensions/lib → lib}/harness-artifact-gate.ts +1 -1
- package/.pi/lib/harness-debate-core-deps.ts +14 -0
- package/.pi/lib/harness-debate-workflow-deps.ts +43 -0
- package/.pi/lib/harness-lens/.gitattributes +1 -0
- package/.pi/lib/harness-lens/clients/edit-autopatch.ts +88 -0
- package/.pi/lib/harness-lens/clients/file-kinds.ts +380 -0
- package/.pi/lib/harness-lens/clients/file-time.ts +215 -0
- package/.pi/lib/harness-lens/clients/file-utils.ts +484 -0
- package/.pi/lib/harness-lens/clients/format-service.ts +276 -0
- package/.pi/lib/harness-lens/clients/formatters.ts +1000 -0
- package/.pi/lib/harness-lens/clients/git-guard.ts +31 -0
- package/.pi/lib/harness-lens/clients/indent-retarget.ts +90 -0
- package/.pi/lib/harness-lens/clients/installer/index.ts +2368 -0
- package/.pi/lib/harness-lens/clients/latency-logger.ts +80 -0
- package/.pi/lib/harness-lens/clients/lens-config.ts +43 -0
- package/.pi/lib/harness-lens/clients/lens-events.ts +164 -0
- package/.pi/lib/harness-lens/clients/lsp/aggregation.ts +91 -0
- package/.pi/lib/harness-lens/clients/lsp/client.ts +1466 -0
- package/.pi/lib/harness-lens/clients/lsp/config.ts +216 -0
- package/.pi/lib/harness-lens/clients/lsp/edits.ts +297 -0
- package/.pi/lib/harness-lens/clients/lsp/index.ts +1355 -0
- package/.pi/lib/harness-lens/clients/lsp/interactive-install.ts +424 -0
- package/.pi/lib/harness-lens/clients/lsp/language.ts +223 -0
- package/.pi/lib/harness-lens/clients/lsp/launch.ts +939 -0
- package/.pi/lib/harness-lens/clients/lsp/lsp-index.ts +11 -0
- package/.pi/lib/harness-lens/clients/lsp/path-utils.ts +12 -0
- package/.pi/lib/harness-lens/clients/lsp/server-strategies.ts +81 -0
- package/.pi/lib/harness-lens/clients/lsp/server.ts +1971 -0
- package/.pi/lib/harness-lens/clients/path-utils.ts +182 -0
- package/.pi/lib/harness-lens/clients/pipeline.ts +360 -0
- package/.pi/lib/harness-lens/clients/project-profile.ts +117 -0
- package/.pi/lib/harness-lens/clients/runtime-agent-end.ts +112 -0
- package/.pi/lib/harness-lens/clients/runtime-config.ts +33 -0
- package/.pi/lib/harness-lens/clients/runtime-coordinator.ts +186 -0
- package/.pi/lib/harness-lens/clients/runtime-tool-result.ts +171 -0
- package/.pi/lib/harness-lens/clients/safe-spawn.ts +339 -0
- package/.pi/lib/harness-lens/clients/secrets-scanner.ts +214 -0
- package/.pi/lib/harness-lens/clients/tool-policy.ts +2072 -0
- package/.pi/lib/harness-lens/clients/types.ts +59 -0
- package/.pi/lib/harness-lens/clients/widget-state.ts +283 -0
- package/.pi/lib/harness-lens/index.ts +532 -0
- package/.pi/lib/harness-lens/tools/lsp-diagnostics.ts +706 -0
- package/.pi/lib/harness-lens/tools/lsp-navigation.ts +1246 -0
- package/.pi/{extensions/lib → lib}/harness-posthog.ts +3 -0
- package/.pi/lib/harness-run-context-responses.ts +9 -0
- package/.pi/lib/harness-run-context.ts +0 -2
- package/.pi/{extensions/lib/spawn-policy.ts → lib/harness-spawn-policy.ts} +1 -0
- package/.pi/{extensions/lib → lib}/harness-spawn-topology.ts +1 -1
- package/.pi/lib/harness-subagent-auth.ts +51 -0
- package/.pi/{extensions/lib → lib}/harness-subagent-precheck.ts +10 -7
- package/.pi/{extensions/lib → lib}/harness-subagent-submit-pipeline.ts +3 -3
- package/.pi/lib/harness-subagent-submit-register.ts +163 -0
- package/.pi/{extensions/lib → lib}/harness-subagent-submit-registry.ts +1 -37
- package/.pi/{extensions/lib → lib}/harness-subagents-bridge.ts +53 -14
- package/.pi/{extensions/lib → lib}/harness-subprocess-bootstrap.ts +1 -1
- package/.pi/{extensions/lib → lib}/plan-approval/create-plan.ts +2 -2
- package/.pi/{extensions/lib → lib}/plan-approval/format-plan.ts +2 -2
- package/.pi/{extensions/lib → lib}/plan-approval/plan-review.ts +162 -201
- package/.pi/{extensions/lib → lib}/plan-approval/render.ts +1 -1
- package/.pi/{extensions/lib → lib}/plan-approval/resolve-disk.ts +2 -2
- package/.pi/{extensions/lib → lib}/plan-approval/types.ts +1 -1
- package/.pi/{extensions/lib → lib}/plan-approval/validate.ts +3 -3
- package/.pi/{extensions/lib → lib}/plan-debate-envelope.ts +1 -1
- package/.pi/{extensions/lib → lib}/plan-debate-gate.ts +1 -1
- package/.pi/{extensions/lib → lib}/plan-debate-lane.ts +1 -4
- package/.pi/{extensions/lib → lib}/plan-messenger.ts +1 -1
- package/.pi/prompts/harness-plan.md +1 -1
- package/.pi/prompts/harness-setup.md +37 -64
- package/.pi/scripts/README.md +2 -5
- package/.pi/scripts/generate-agents-policy-yaml.mjs +148 -0
- package/.pi/scripts/harness-agents-manifest.mjs +60 -3
- package/.pi/scripts/harness-agt-doctor.ts +36 -0
- package/.pi/scripts/harness-cli-verify.sh +9 -2
- package/.pi/scripts/harness-verify.mjs +113 -39
- package/.pi/scripts/harness-web-policy-guard.mjs +2 -2
- package/.pi/scripts/validate-plan-dag.mjs +65 -74
- package/.pi/scripts/vendor-pi-vcc-settings.stub.ts +2 -2
- package/.pi/scripts/vendor-sync-pi-vcc.sh +1 -1
- package/.pi/skills/architecture/broker-domain/SKILL.md +65 -0
- package/.pi/skills/architecture/cqrs/SKILL.md +63 -0
- package/.pi/skills/architecture/event-driven/SKILL.md +60 -0
- package/.pi/skills/architecture/hexagonal-ports-adapters/SKILL.md +66 -0
- package/.pi/skills/architecture/layered/SKILL.md +68 -0
- package/.pi/skills/architecture/microkernel/SKILL.md +62 -0
- package/.pi/skills/architecture/microservices/SKILL.md +64 -0
- package/.pi/skills/architecture/modular-monolith/SKILL.md +65 -0
- package/.pi/skills/architecture/orchestration-driven-soa/SKILL.md +61 -0
- package/.pi/skills/architecture/pipeline/SKILL.md +63 -0
- package/.pi/skills/architecture/service-based/SKILL.md +64 -0
- package/.pi/skills/architecture/service-mesh/SKILL.md +60 -0
- package/.pi/skills/architecture/space-based/SKILL.md +60 -0
- package/.pi/skills/ast-grep/SKILL.md +40 -321
- package/.pi/skills/delivery/debugging-discipline/SKILL.md +36 -0
- package/.pi/skills/delivery/documentation-update/SKILL.md +33 -0
- package/.pi/skills/delivery/requirements-to-implementation/SKILL.md +34 -0
- package/.pi/skills/delivery/risk-based-verification/SKILL.md +43 -0
- package/.pi/skills/delivery/tradeoff-analysis/SKILL.md +34 -0
- package/.pi/skills/engineering/api-contract-design/SKILL.md +38 -0
- package/.pi/skills/engineering/cohesion-coupling/SKILL.md +43 -0
- package/.pi/skills/engineering/complexity-control/SKILL.md +31 -0
- package/.pi/skills/engineering/defensive-programming/SKILL.md +38 -0
- package/.pi/skills/engineering/dependency-management/SKILL.md +29 -0
- package/.pi/skills/engineering/domain-modeling/SKILL.md +32 -0
- package/.pi/skills/engineering/error-handling/SKILL.md +37 -0
- package/.pi/skills/engineering/legacy-code-seams/SKILL.md +35 -0
- package/.pi/skills/engineering/naming-and-intent/SKILL.md +29 -0
- package/.pi/skills/engineering/refactoring-safe-evolution/SKILL.md +35 -0
- package/.pi/skills/engineering/routine-function-design/SKILL.md +34 -0
- package/.pi/skills/engineering/small-change-discipline/SKILL.md +35 -0
- package/.pi/skills/lsp-navigation/SKILL.md +89 -0
- package/.pi/skills/quality/code-review-self-check/SKILL.md +35 -0
- package/.pi/skills/quality/privacy-data-handling/SKILL.md +26 -0
- package/.pi/skills/quality/security-review/SKILL.md +34 -0
- package/.pi/skills/quality/test-strategy/SKILL.md +33 -0
- package/.pi/skills/quality/testability-design/SKILL.md +33 -0
- package/.pi/skills/systems/concurrency-safety/SKILL.md +32 -0
- package/.pi/skills/systems/data-modeling-migrations/SKILL.md +31 -0
- package/.pi/skills/systems/observability-instrumentation/SKILL.md +32 -0
- package/.pi/skills/systems/performance-measurement/SKILL.md +35 -0
- package/.pi/skills/systems/reliability-design/SKILL.md +32 -0
- package/.sentrux/rules.toml +20 -4
- package/AGENTS.md +5 -0
- package/CHANGELOG.md +14 -0
- package/README.md +3 -12
- package/THIRD_PARTY_NOTICES.md +12 -21
- package/package.json +15 -7
- package/vendor/pi-subagents/src/agents.ts +45 -1
- package/vendor/pi-subagents/src/subagents.ts +866 -811
- package/vendor/pi-vcc/src/core/brief.ts +68 -99
- package/vendor/pi-vcc/src/core/settings.ts +2 -2
- package/.agents/skills/caveman/SKILL.md +0 -67
- package/.pi/agents/harness/meta-optimizer.md +0 -36
- package/.pi/extensions/lib/ask-user/dialog.ts +0 -260
- package/.pi/extensions/lib/harness-subagent-auth.ts +0 -207
- package/.pi/extensions/lib/harness-subagent-policy.ts +0 -236
- package/.pi/extensions/pi-model-router-harness.ts +0 -42
- package/.pi/harness/evolution/meta-optimizer.mjs +0 -99
- package/.pi/harness/specs/router-tuning-proposal.schema.json +0 -114
- package/.pi/model-router.example.json +0 -36
- package/.pi/prompts/harness-critic.md +0 -10
- package/.pi/prompts/harness-eval.md +0 -10
- package/.pi/prompts/harness-router-tune.md +0 -52
- package/.pi/scripts/harness-generate-model-router.mjs +0 -327
- package/.pi/scripts/harness-model-router-routing.test.mjs +0 -97
- package/.pi/scripts/harness-sync-model-router.mjs +0 -97
- package/.pi/scripts/vendor-sync-pi-model-router.sh +0 -47
- package/vendor/pi-model-router/.prettierignore +0 -4
- package/vendor/pi-model-router/.prettierrc +0 -5
- package/vendor/pi-model-router/AGENTS.md +0 -39
- package/vendor/pi-model-router/LICENSE +0 -21
- package/vendor/pi-model-router/README.md +0 -99
- package/vendor/pi-model-router/UPSTREAM_PIN.md +0 -10
- package/vendor/pi-model-router/docs/ARCHITECTURE.md +0 -54
- package/vendor/pi-model-router/extensions/commands.ts +0 -720
- package/vendor/pi-model-router/extensions/config.ts +0 -348
- package/vendor/pi-model-router/extensions/constants.ts +0 -1
- package/vendor/pi-model-router/extensions/index.ts +0 -478
- package/vendor/pi-model-router/extensions/provider.ts +0 -580
- package/vendor/pi-model-router/extensions/routing.ts +0 -564
- package/vendor/pi-model-router/extensions/state.ts +0 -52
- package/vendor/pi-model-router/extensions/types.ts +0 -95
- package/vendor/pi-model-router/extensions/ui.ts +0 -144
- package/vendor/pi-model-router/model-router.example.json +0 -48
- package/vendor/pi-model-router/package.json +0 -48
- package/vendor/pi-model-router/tsconfig.json +0 -16
- /package/.pi/{prompts → harness/docs}/planning-rubrics.md +0 -0
- /package/.pi/{extensions/lib → lib}/ask-user/fallback.ts +0 -0
- /package/.pi/{extensions/lib → lib}/ask-user/render.ts +0 -0
- /package/.pi/{extensions/lib → lib}/ask-user/schema.ts +0 -0
- /package/.pi/{extensions/lib → lib}/ask-user/types.ts +0 -0
- /package/.pi/{extensions/lib → lib}/ask-user/validate-core.mjs +0 -0
- /package/.pi/{extensions/lib → lib}/ask-user/validate.ts +0 -0
- /package/.pi/{extensions/lib → lib}/harness-cocoindex-refresh.ts +0 -0
- /package/.pi/{extensions/lib → lib}/harness-paths.ts +0 -0
- /package/.pi/{extensions/lib → lib}/harness-spawn-budget.ts +0 -0
- /package/.pi/{extensions/lib → lib}/harness-vcc-settings.ts +0 -0
- /package/.pi/{extensions/lib → lib}/harness-web/run-cli.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-approval/dialog.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-approval/schema.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-approval-readiness.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-debate-eligibility.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-debate-focus.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-debate-id.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-debate-lanes.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-debate-round-status.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-debate-write-guard.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-review-gate.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-review-integrator-rules.ts +0 -0
- /package/.pi/{extensions/lib → lib}/plan-scope-guard.ts +0 -0
- /package/.pi/{extensions/lib → lib}/posthog-client.ts +0 -0
- /package/.pi/{extensions/lib → lib}/posthog-node.d.ts +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-modeling-migrations
|
|
3
|
+
description: Safely evolve stored data and schemas. Use when adding or changing database fields, indexes, files, serialized formats, caches, event payloads, search indexes, or migration scripts. Focuses on compatibility, rollout phases, rollback, existing data, and query behavior.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Data Modeling and Migrations
|
|
7
|
+
|
|
8
|
+
Use this skill when code changes persisted or exchanged data.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. Identify every reader and writer of the data.
|
|
13
|
+
2. Separate schema/format change, data backfill, and code behavior change when risk warrants.
|
|
14
|
+
3. Prefer backward-compatible additions before breaking removals or renames.
|
|
15
|
+
4. Plan behavior while old and new versions coexist.
|
|
16
|
+
5. Validate existing production-like data assumptions.
|
|
17
|
+
6. Add indexes or access paths based on actual query patterns.
|
|
18
|
+
7. Define rollback or recovery for failed migrations.
|
|
19
|
+
8. Add tests for old data, new data, missing fields, and mixed-version compatibility.
|
|
20
|
+
|
|
21
|
+
## Safety checks
|
|
22
|
+
|
|
23
|
+
- Is the migration destructive or irreversible?
|
|
24
|
+
- Does it lock or block critical paths?
|
|
25
|
+
- Are defaults correct for existing records?
|
|
26
|
+
- Can old code read new data and new code read old data during rollout?
|
|
27
|
+
- Are caches/search/projections updated or rebuildable?
|
|
28
|
+
|
|
29
|
+
## Ask before
|
|
30
|
+
|
|
31
|
+
Destructive deletion, irreversible transformation, broad backfill, or compatibility-breaking format changes.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: observability-instrumentation
|
|
3
|
+
description: Add useful logs, metrics, traces, events, and diagnostics without noise or data leaks. Use when changing failure paths, background jobs, workflows, integrations, performance-sensitive paths, or production-debuggable behavior. Focuses on actionable signals and safe context.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Observability Instrumentation
|
|
7
|
+
|
|
8
|
+
Use this skill to make behavior diagnosable in real environments.
|
|
9
|
+
|
|
10
|
+
## Signal types
|
|
11
|
+
|
|
12
|
+
- Logs: discrete decisions, failures, lifecycle transitions, and unusual states.
|
|
13
|
+
- Metrics: counts, durations, rates, queue depth, success/failure, saturation.
|
|
14
|
+
- Traces/spans: cross-boundary request or workflow paths.
|
|
15
|
+
- Audit/events: business-relevant actions that need history.
|
|
16
|
+
- Health checks: readiness, liveness, dependency status.
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
1. Identify what a maintainer/operator must know when this fails.
|
|
21
|
+
2. Add signals at boundaries and important state transitions.
|
|
22
|
+
3. Include correlation identifiers or stable context when available.
|
|
23
|
+
4. Redact secrets and personal/sensitive data.
|
|
24
|
+
5. Keep labels/cardinality bounded.
|
|
25
|
+
6. Avoid logging tight loops or expected noisy paths at high severity.
|
|
26
|
+
7. Test or inspect that instrumentation executes on success and failure paths.
|
|
27
|
+
|
|
28
|
+
## Review questions
|
|
29
|
+
|
|
30
|
+
- Can someone diagnose the failure without reproducing locally?
|
|
31
|
+
- Are logs actionable rather than decorative?
|
|
32
|
+
- Will this create noise, cost, or privacy risk?
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: performance-measurement
|
|
3
|
+
description: Improve performance with evidence instead of premature optimization. Use when optimizing latency, throughput, memory, startup, storage, queries, algorithms, rendering, build time, or hot paths. Guides baseline measurement, bottleneck isolation, complexity analysis, and regression guards.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Performance Measurement
|
|
7
|
+
|
|
8
|
+
Use this skill before and during performance work.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. Define the performance goal and user/system impact.
|
|
13
|
+
2. Measure a baseline with representative input or workload.
|
|
14
|
+
3. Identify the bottleneck before changing code.
|
|
15
|
+
4. Estimate algorithmic complexity and data-size effects.
|
|
16
|
+
5. Make the smallest optimization that targets the measured bottleneck.
|
|
17
|
+
6. Re-measure and compare against the baseline.
|
|
18
|
+
7. Add a benchmark, regression test, or monitoring signal when future regressions matter.
|
|
19
|
+
8. Preserve readability unless performance evidence justifies complexity.
|
|
20
|
+
|
|
21
|
+
## Common bottleneck classes
|
|
22
|
+
|
|
23
|
+
- repeated expensive work
|
|
24
|
+
- inefficient data access pattern
|
|
25
|
+
- unnecessary serialization/parsing
|
|
26
|
+
- blocking IO in hot path
|
|
27
|
+
- unbounded memory growth
|
|
28
|
+
- poor batching/caching strategy
|
|
29
|
+
- algorithmic complexity mismatch
|
|
30
|
+
|
|
31
|
+
## Avoid
|
|
32
|
+
|
|
33
|
+
- Optimizing cold paths.
|
|
34
|
+
- Adding caches without invalidation rules.
|
|
35
|
+
- Trading correctness or maintainability for unmeasured speed.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reliability-design
|
|
3
|
+
description: Design code for predictable behavior under faults. Use when touching IO, storage, queues, events, workflows, services, retries, timeouts, background jobs, distributed state, or operator-facing failures. Applies reliability, fault tolerance, partial failure, degradation, and recovery thinking.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Reliability Design
|
|
7
|
+
|
|
8
|
+
Use this skill when code must keep working, fail safely, or recover under imperfect conditions.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
1. Identify failure modes: dependency down, timeout, duplicate work, partial write, stale read, invalid state, resource exhaustion, human/operator error.
|
|
13
|
+
2. Decide desired behavior for each important failure: reject, retry, compensate, degrade, queue, alert, or fail fast.
|
|
14
|
+
3. Add timeouts and cancellation where waits can hang.
|
|
15
|
+
4. Add retries only when operations are safe or idempotent.
|
|
16
|
+
5. Preserve enough state/context for recovery.
|
|
17
|
+
6. Add observability for failures and recovery paths.
|
|
18
|
+
7. Test representative failure modes.
|
|
19
|
+
|
|
20
|
+
## Design checks
|
|
21
|
+
|
|
22
|
+
- Is there a single source of truth for critical state?
|
|
23
|
+
- Can the operation run twice safely?
|
|
24
|
+
- What happens if the process stops halfway?
|
|
25
|
+
- What does the caller see during partial failure?
|
|
26
|
+
- How will an operator or developer diagnose this?
|
|
27
|
+
|
|
28
|
+
## Avoid
|
|
29
|
+
|
|
30
|
+
- Infinite retries.
|
|
31
|
+
- Hidden partial success.
|
|
32
|
+
- Treating network/storage/process calls as always reliable.
|
package/.sentrux/rules.toml
CHANGED
|
@@ -23,9 +23,9 @@ order = 0
|
|
|
23
23
|
|
|
24
24
|
[[layers]]
|
|
25
25
|
name = "contracts"
|
|
26
|
-
paths = [".pi/harness/specs/*", ".pi/harness/docs/*"]
|
|
26
|
+
paths = [".pi/harness/specs/*", ".pi/harness/docs/*", ".pi/harness/policies/*", ".pi/harness/agents.policy.yaml", ".pi/harness/examples/*"]
|
|
27
27
|
order = 1
|
|
28
|
-
# Harness schemas, ADRs, and
|
|
28
|
+
# Harness schemas, ADRs, AGT policies, and agents.policy SSOT
|
|
29
29
|
|
|
30
30
|
[[layers]]
|
|
31
31
|
name = "runtime"
|
|
@@ -41,9 +41,15 @@ order = 3
|
|
|
41
41
|
|
|
42
42
|
[[layers]]
|
|
43
43
|
name = "tooling"
|
|
44
|
-
paths = [".pi/scripts/*"
|
|
44
|
+
paths = [".pi/scripts/*"]
|
|
45
45
|
order = 4
|
|
46
|
-
# Harness CLI scripts
|
|
46
|
+
# Harness CLI scripts
|
|
47
|
+
|
|
48
|
+
[[layers]]
|
|
49
|
+
name = "foundation"
|
|
50
|
+
paths = [".pi/lib/*"]
|
|
51
|
+
order = 5
|
|
52
|
+
# Shared harness/AGT libraries (imported by extensions and scripts)
|
|
47
53
|
|
|
48
54
|
[[boundaries]]
|
|
49
55
|
from = ".agents/skills/*"
|
|
@@ -65,6 +71,16 @@ from = ".pi/harness/specs/*"
|
|
|
65
71
|
to = ".pi/extensions/*"
|
|
66
72
|
reason = "Contracts are data-only JSON schemas; extensions implement behavior"
|
|
67
73
|
|
|
74
|
+
[[boundaries]]
|
|
75
|
+
from = ".pi/lib/*"
|
|
76
|
+
to = ".pi/extensions/*"
|
|
77
|
+
reason = "Foundation lib must not import extension modules"
|
|
78
|
+
|
|
79
|
+
[[boundaries]]
|
|
80
|
+
from = ".pi/harness/policies/*"
|
|
81
|
+
to = ".pi/extensions/*"
|
|
82
|
+
reason = "Declarative AGT YAML must not depend on extension implementation"
|
|
83
|
+
|
|
68
84
|
[[boundaries]]
|
|
69
85
|
from = ".pi/scripts/*"
|
|
70
86
|
to = ".agents/skills/*"
|
package/AGENTS.md
CHANGED
|
@@ -4,6 +4,11 @@ Purpose: Agentic coding harness — architecture, research, decisions, implement
|
|
|
4
4
|
Owner: pi-mono + user
|
|
5
5
|
Created: 2026-05-14
|
|
6
6
|
|
|
7
|
+
## Instruction Boundaries
|
|
8
|
+
|
|
9
|
+
- `.pi/SYSTEM.md` is the reusable harness-level agent prompt and should remain project-agnostic for external projects.
|
|
10
|
+
- Keep ultimate-pi-specific paths, ownership, local conventions, and repository facts in this `AGENTS.md` file (or nearby project docs), not in `.pi/SYSTEM.md`.
|
|
11
|
+
|
|
7
12
|
## Structure
|
|
8
13
|
|
|
9
14
|
- graphify-out/ → Knowledge graph (run `graphify update .` to build)
|
package/CHANGELOG.md
CHANGED
|
@@ -6,8 +6,22 @@ All notable changes to this project are documented in this file.
|
|
|
6
6
|
|
|
7
7
|
### ✨ Features
|
|
8
8
|
|
|
9
|
+
- **Harness lens:** Integrate selected pi-lens capabilities through a harness-owned extension, store lens state under `.pi/harness/.lens`, and route lens findings through harness PostHog telemetry instead of standalone lens health/telemetry surfaces.
|
|
9
10
|
- **Graphify KB updater:** Productize conservative daily discovery/promotion with explicit repo/release taxonomy, allowlist source-class gates, operator review queue reporting, scheduler smoke validation, and safe Graphify refresh controls.
|
|
10
11
|
|
|
12
|
+
## [v0.19.0] — 2026-05-24
|
|
13
|
+
|
|
14
|
+
### ✨ Features
|
|
15
|
+
|
|
16
|
+
- **Harness:** `agents.policy.yaml` as per-agent tool SSOT with manifest alignment; subprocess `subagent-governance` bundle and AGT `tool_allowed` enforcement.
|
|
17
|
+
- **Harness:** Consolidate shared modules under `.pi/lib/` (moved from `.pi/extensions/lib/`); update imports, packaging, verify, and tests.
|
|
18
|
+
- **Harness:** AGT-backed policy gate with subprocess governance bundle (extends v0.18.x AGT work).
|
|
19
|
+
|
|
20
|
+
### 🔧 Chores
|
|
21
|
+
|
|
22
|
+
- Apply Biome organize-imports and format fixes across moved harness library files.
|
|
23
|
+
- Commit pending harness architecture and context tooling updates.
|
|
24
|
+
|
|
11
25
|
## [v0.18.1] — 2026-05-24
|
|
12
26
|
|
|
13
27
|
### 🔧 Chores
|
package/README.md
CHANGED
|
@@ -64,7 +64,7 @@ If `/harness-review` returns `implementation_gap`, run:
|
|
|
64
64
|
|
|
65
65
|
| Command | Purpose |
|
|
66
66
|
|---|---|
|
|
67
|
-
| `/harness-setup [--skip-graphify] [--skip-tools] [--non-interactive] [--force]` | Idempotent project bootstrap: Graphify, harness-web/Scrapling, CLI tools, settings, contracts, Sentrux,
|
|
67
|
+
| `/harness-setup [--skip-graphify] [--skip-tools] [--non-interactive] [--force]` | Idempotent project bootstrap: Graphify, harness-web/Scrapling, CLI tools, settings, contracts, Sentrux, harness lens, and verification. |
|
|
68
68
|
| `/harness-auto "<task>" [--quick] [--risk low\|med\|high]` | Strict full pipeline: plan, execute, review, steer when appropriate. |
|
|
69
69
|
| `/harness-plan "<task>" [--risk low\|med\|high] [--quick]` | PM-grade planning: reconnaissance, decomposition, hypothesis, external research, ExecutionPlan, DAG validation, Review Gate debate, `approve_plan`, `create_plan`. |
|
|
70
70
|
| `/harness-run` | Executes the approved active PlanPacket by spawning `harness/running/executor`; no inline implementation. |
|
|
@@ -74,19 +74,11 @@ If `/harness-review` returns `implementation_gap`, run:
|
|
|
74
74
|
| `/harness-trace [--run <id>] [--phase plan\|execute\|evaluate\|adversary\|merge]` | Summarizes run traces and artifact handoffs for replay/forensics. |
|
|
75
75
|
| `/harness-incident --trigger <reason> [--run <id>] [--severity low\|med\|high\|critical]` | Records incident, rollback, and override trail for harness failures. |
|
|
76
76
|
| `/harness-sentrux-steward [--run <id>]` | Ad-hoc architectural intent review for Sentrux manifest/rule alignment. |
|
|
77
|
-
| `/harness-router-tune --evidence <evidence.json> --candidate <candidate-router.json> [--proposal <out.json>]` | Proposes model-router updates from evidence; applies only after explicit approval. |
|
|
78
77
|
| `/graphify [directory]` | Bootstraps or updates the Graphify knowledge graph. |
|
|
79
78
|
| `/wiki-autoresearch [topic]` | Runs autonomous web research and builds a Graphify-backed research wiki. |
|
|
80
79
|
| `/wiki-save` | Saves the current conversation or insight as a structured wiki note. |
|
|
81
80
|
| `/release [patch\|minor\|major] [--dry-run]` | Maintainer release helper. |
|
|
82
81
|
|
|
83
|
-
Deprecated compatibility aliases:
|
|
84
|
-
|
|
85
|
-
| Alias | Use instead |
|
|
86
|
-
|---|---|
|
|
87
|
-
| `/harness-eval` | `/harness-review` |
|
|
88
|
-
| `/harness-critic` | `/harness-review` |
|
|
89
|
-
|
|
90
82
|
## Harness phases and agents
|
|
91
83
|
|
|
92
84
|
- **Planning** uses agents under `.pi/agents/harness/planning/` plus parent-led Graphify → `sg` → `ccc` reconnaissance. Legacy tool-tied `planning/scout-*` agents have been removed; planning context is captured in `artifacts/planning-context.yaml`.
|
|
@@ -116,8 +108,8 @@ Subagents run isolated from the parent session. They persist canonical YAML thro
|
|
|
116
108
|
- **No inline execution:** `/harness-run` delegates to `harness/running/executor` only.
|
|
117
109
|
- **No inline review:** `/harness-review` delegates verdicts to isolated reviewing agents.
|
|
118
110
|
- **No auto-merge:** final merge remains a human/operator decision.
|
|
119
|
-
- **Sentrux is
|
|
120
|
-
- **
|
|
111
|
+
- **Sentrux is the architecture signal:** structural baselines and gates inform review; executor does not optimize metrics as a goal.
|
|
112
|
+
- **pi-lens is edit-time diagnostics:** LSP/lint/format/ast feedback complements Sentrux and does not replace architecture gating.
|
|
121
113
|
|
|
122
114
|
## Troubleshooting
|
|
123
115
|
|
|
@@ -129,7 +121,6 @@ Subagents run isolated from the parent session. They persist canonical YAML thro
|
|
|
129
121
|
| Need to restart safely | Run `/harness-abort [reason]`, then create a fresh plan. |
|
|
130
122
|
| Review says `implementation_gap` | Run `/harness-steer`, then `/harness-review`. |
|
|
131
123
|
| Review says `plan_gap` | Revise with `/harness-plan "<updated task>"`. |
|
|
132
|
-
| Router profile missing | Complete `/harness-setup`, run `/reload`, then check `.pi/model-router.json`. |
|
|
133
124
|
| Sentrux missing | Install/configure Sentrux or keep it skipped; harness verification still reports the status. |
|
|
134
125
|
|
|
135
126
|
Optional integrations can be configured by copying `.env.example` to `.env`; `/harness-setup` appends missing keys without overwriting existing values.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,31 +1,22 @@
|
|
|
1
|
-
# Third-party notices
|
|
2
|
-
|
|
3
|
-
## pi-model-router (vendored)
|
|
4
|
-
|
|
5
|
-
- **Project:** https://github.com/yeliu84/pi-model-router
|
|
6
|
-
- **License:** MIT ([vendor/pi-model-router/LICENSE](vendor/pi-model-router/LICENSE))
|
|
7
|
-
- **Pinned revision:** See [vendor/pi-model-router/UPSTREAM_PIN.md](vendor/pi-model-router/UPSTREAM_PIN.md)
|
|
8
|
-
- ultimate-pi loads it from [`vendor/pi-model-router`](vendor/pi-model-router); import specifiers were adapted for `@earendil-works/pi-coding-agent` and related Pi packages.
|
|
9
|
-
|
|
10
1
|
## pi-vcc (vendored)
|
|
11
2
|
|
|
12
|
-
- **Project:** https://github.com/sting8k/pi-vcc
|
|
13
|
-
- **Conceptual basis:** https://github.com/lllyasviel/VCC (View-oriented Conversation Compiler)
|
|
14
|
-
- **License:** MIT (see upstream repository)
|
|
15
|
-
- **Pinned revision:** See [vendor/pi-vcc/UPSTREAM_PIN.md](vendor/pi-vcc/UPSTREAM_PIN.md)
|
|
16
|
-
- ultimate-pi loads it from [`vendor/pi-vcc`](vendor/pi-vcc) via [`.pi/extensions/ultimate-pi-vcc.ts`](.pi/extensions/ultimate-pi-vcc.ts). Harness configuration is env-only: `HARNESS_VCC_COMPACTION`, `HARNESS_VCC_DEBUG` ([`.pi/
|
|
3
|
+
- **Project:** https://github.com/sting8k/pi-vcc
|
|
4
|
+
- **Conceptual basis:** https://github.com/lllyasviel/VCC (View-oriented Conversation Compiler)
|
|
5
|
+
- **License:** MIT (see upstream repository)
|
|
6
|
+
- **Pinned revision:** See [vendor/pi-vcc/UPSTREAM_PIN.md](vendor/pi-vcc/UPSTREAM_PIN.md)
|
|
7
|
+
- ultimate-pi loads it from [`vendor/pi-vcc`](vendor/pi-vcc) via [`.pi/extensions/ultimate-pi-vcc.ts`](.pi/extensions/ultimate-pi-vcc.ts). Harness configuration is env-only: `HARNESS_VCC_COMPACTION`, `HARNESS_VCC_DEBUG` ([`.pi/lib/harness-vcc-settings.ts`](.pi/lib/harness-vcc-settings.ts)). Maintainer refresh: `npm run vendor:sync-vcc`.
|
|
17
8
|
|
|
18
9
|
## pi-subagents (vendored)
|
|
19
10
|
|
|
20
|
-
- **Project:** https://github.com/narumiruna/pi-extensions (`extensions/pi-subagents`)
|
|
21
|
-
- **npm:** `@narumitw/pi-subagents@0.1.26`
|
|
22
|
-
- **License:** MIT ([vendor/pi-subagents/LICENSE](vendor/pi-subagents/LICENSE))
|
|
23
|
-
- **Pinned revision:** See [vendor/pi-subagents/UPSTREAM_PIN.md](vendor/pi-subagents/UPSTREAM_PIN.md)
|
|
11
|
+
- **Project:** https://github.com/narumiruna/pi-extensions (`extensions/pi-subagents`)
|
|
12
|
+
- **npm:** `@narumitw/pi-subagents@0.1.26`
|
|
13
|
+
- **License:** MIT ([vendor/pi-subagents/LICENSE](vendor/pi-subagents/LICENSE))
|
|
14
|
+
- **Pinned revision:** See [vendor/pi-subagents/UPSTREAM_PIN.md](vendor/pi-subagents/UPSTREAM_PIN.md)
|
|
24
15
|
- ultimate-pi loads it from [`vendor/pi-subagents`](vendor/pi-subagents) via [`.pi/extensions/harness-subagents.ts`](.pi/extensions/harness-subagents.ts) with harness discovery, spawn gates, and subprocess env. Maintainer refresh: `npm run vendor:sync-subagents`.
|
|
25
16
|
|
|
26
17
|
## CocoIndex Code (CLI + skill)
|
|
27
18
|
|
|
28
|
-
- **Project:** https://github.com/cocoindex-io/cocoindex-code
|
|
29
|
-
- **License:** Apache-2.0
|
|
30
|
-
- **Install:** `uv tool install 'cocoindex-code[full]'` (see `/harness-setup` §2.4)
|
|
19
|
+
- **Project:** https://github.com/cocoindex-io/cocoindex-code
|
|
20
|
+
- **License:** Apache-2.0
|
|
21
|
+
- **Install:** `uv tool install 'cocoindex-code[full]'` (see `/harness-setup` §2.4)
|
|
31
22
|
- ultimate-pi vendors the upstream agent skill at [`.agents/skills/ccc/`](.agents/skills/ccc/) and bootstraps indexes via [`.pi/scripts/harness-cocoindex-bootstrap.sh`](.pi/scripts/harness-cocoindex-bootstrap.sh). Replaces deprecated `@beaconbay/ck-search`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ultimate-pi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Ultimate AI coding harness for pi.dev — extensible skills, Obsidian wiki knowledge layer, compressed context, deterministic output",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
".pi/lib",
|
|
47
47
|
".pi/sounds",
|
|
48
48
|
".pi/harness/env.harness.template",
|
|
49
|
+
".pi/harness/policies",
|
|
49
50
|
".pi/harness/specs",
|
|
50
51
|
".pi/harness/docs",
|
|
51
52
|
".pi/harness/sentrux",
|
|
@@ -53,10 +54,12 @@
|
|
|
53
54
|
".pi/harness/evolution",
|
|
54
55
|
".pi/harness/corpus",
|
|
55
56
|
".pi/harness/agents.manifest.json",
|
|
57
|
+
".pi/harness/agents.policy.yaml",
|
|
58
|
+
".pi/harness/examples",
|
|
59
|
+
".pi/lib/harness-lens",
|
|
56
60
|
".pi/harness/README.md",
|
|
57
61
|
".pi/npm/package.json",
|
|
58
62
|
".pi/npm/.gitignore",
|
|
59
|
-
".pi/model-router.example.json",
|
|
60
63
|
".pi/settings.example.json",
|
|
61
64
|
".pi/auto-commit.json",
|
|
62
65
|
".pi/SYSTEM.md",
|
|
@@ -66,7 +69,6 @@
|
|
|
66
69
|
"CHANGELOG.md",
|
|
67
70
|
"README.md",
|
|
68
71
|
"THIRD_PARTY_NOTICES.md",
|
|
69
|
-
"vendor/pi-model-router",
|
|
70
72
|
"vendor/pi-subagents",
|
|
71
73
|
"vendor/pi-vcc"
|
|
72
74
|
],
|
|
@@ -74,8 +76,7 @@
|
|
|
74
76
|
"@earendil-works/pi-coding-agent": "*"
|
|
75
77
|
},
|
|
76
78
|
"scripts": {
|
|
77
|
-
"check:ts": "tsc --noEmit --target ES2023 --lib ES2023 --moduleResolution nodenext --module nodenext --skipLibCheck .pi/extensions/00-harness-project-control.ts .pi/extensions/custom-system-prompt.ts .pi/lib/harness-run-context.ts .pi/lib/harness-context-mode-policy.ts .pi/lib/harness-ui-state.ts .pi/extensions/harness-run-context.ts .pi/
|
|
78
|
-
"vendor:sync-router": "bash .pi/scripts/vendor-sync-pi-model-router.sh",
|
|
79
|
+
"check:ts": "tsc --noEmit --target ES2023 --lib ES2023 --moduleResolution nodenext --module nodenext --skipLibCheck .pi/lib/agt/config.ts .pi/lib/agt/policy-engine.ts .pi/lib/agt/build-evaluation-context.ts .pi/lib/agt/evaluate-policy.ts .pi/lib/agt/legacy-evaluate.ts .pi/lib/agt/identity-registry.ts .pi/lib/agt/delegation.ts .pi/lib/agt/trust-run-store.ts .pi/lib/agt/audit-run-sink.ts .pi/lib/agt/rings.ts .pi/lib/agt/workflow-history.ts .pi/lib/agt/sre-hooks.ts .pi/lib/agt/kill-switch-state.ts .pi/lib/agt/index.ts .pi/extensions/agt-prompt-guard.ts .pi/extensions/agt-kill-switch.ts .pi/extensions/harness-subagent-governance.ts .pi/lib/harness-agt-tool-guard.ts .pi/lib/harness-subagent-submit-register.ts .pi/extensions/00-harness-project-control.ts .pi/extensions/custom-system-prompt.ts .pi/lib/harness-run-context.ts .pi/lib/harness-spawn-policy.ts .pi/lib/harness-context-mode-policy.ts .pi/lib/harness-ui-state.ts .pi/extensions/harness-run-context.ts .pi/lib/harness-vcc-settings.ts .pi/extensions/dotenv-loader.ts .pi/extensions/00-posthog-network-bootstrap.ts .pi/lib/posthog-client.ts .pi/lib/posthog-node.d.ts .pi/lib/harness-posthog.ts .pi/lib/harness-paths.ts .pi/extensions/provider-payload-sanitize.ts .pi/extensions/harness-telemetry.ts .pi/extensions/harness-ask-user.ts .pi/extensions/harness-plan-approval.ts .pi/lib/ask-user/schema.ts .pi/lib/ask-user/types.ts .pi/lib/ask-user/validate.ts .pi/lib/ask-user/dialog.ts .pi/lib/ask-user/fallback.ts .pi/lib/ask-user/render.ts .pi/lib/plan-approval/types.ts .pi/lib/plan-approval/schema.ts .pi/lib/plan-approval/validate.ts .pi/lib/plan-approval/format-plan.ts .pi/lib/plan-approval/dialog.ts .pi/lib/plan-approval/render.ts .pi/lib/plan-approval/create-plan.ts .pi/extensions/harness-subagents.ts .pi/lib/harness-subagents-bridge.ts .pi/lib/harness-cocoindex-refresh.ts .pi/lib/harness-subagent-auth.ts .pi/lib/agents-policy.ts .pi/lib/agt-governance-active.ts .pi/extensions/subagent-governance.ts .pi/lib/agt-tool-guard.ts .pi/lib/harness-subagent-precheck.ts .pi/lib/harness-spawn-budget.ts vendor/pi-subagents/src/agents.ts vendor/pi-subagents/src/subagents.ts .pi/extensions/review-integrity.ts .pi/extensions/trace-recorder.ts .pi/extensions/observation-bus.ts .pi/extensions/drift-monitor.ts .pi/extensions/policy-gate.ts .pi/extensions/budget-guard.ts .pi/extensions/debate-orchestrator.ts .pi/extensions/harness-debate-tools.ts .pi/lib/debate-bus-core.ts .pi/lib/debate-bus-state.ts .pi/lib/plan-debate-gate.ts .pi/lib/plan-debate-id.ts .pi/lib/plan-messenger.ts .pi/lib/plan-debate-envelope.ts .pi/lib/plan-review-integrator-rules.ts .pi/lib/plan-scope-guard.ts .pi/lib/plan-debate-write-guard.ts .pi/lib/plan-debate-lane.ts .pi/lib/plan-debate-round-status.ts .pi/extensions/harness-live-widget.ts .pi/extensions/sentrux-rules-sync.ts .pi/extensions/custom-header.ts .pi/extensions/harness-web-tools.ts .pi/extensions/harness-web-guard.ts .pi/lib/harness-web/run-cli.ts",
|
|
79
80
|
"vendor:sync-vcc": "bash .pi/scripts/vendor-sync-pi-vcc.sh",
|
|
80
81
|
"vendor:sync-subagents": "bash .pi/scripts/vendor-sync-pi-subagents.sh",
|
|
81
82
|
"release": "bash .pi/scripts/release.sh",
|
|
@@ -84,7 +85,7 @@
|
|
|
84
85
|
"format": "biome format --write",
|
|
85
86
|
"format:check": "biome format",
|
|
86
87
|
"prepare": "lefthook install",
|
|
87
|
-
"test": "node --test test/harness-verify.test.mjs test/
|
|
88
|
+
"test": "node --test test/harness-verify.test.mjs test/harness-ask-user.test.mjs test/harness-subagents-loader.test.mjs test/harness-subagent-precheck.test.mjs test/sentrux-rules-sync.test.mjs test/harness-budget-guard.test.mjs && node .pi/harness/evals/smoke/smoke-harness-plan.mjs --fixture && npx -y tsx --test test/posthog-client.test.mjs test/harness-agt-policy-load.test.mjs test/harness-agt-policy-matrix.test.mjs test/harness-agt-policy-parity.test.mjs test/harness-agt-packaging.test.mjs test/harness-tool-call-hook-chain.test.mjs test/harness-vcc-settings.test.ts test/harness-run-context-postrun.test.mjs test/harness-tool-payload.test.mjs test/harness-live-widget-status.test.ts test/harness-project-toggle-tui.test.ts test/harness-plan-phase-policy.test.mjs test/harness-context-mode-policy.test.mjs test/harness-subprocess-bootstrap.test.mjs test/harness-subagent-policy.test.mjs test/harness-subagent-precheck-topology.test.mjs test/plan-approval-readiness.test.mjs test/harness-spawn-budget.test.mjs test/harness-spawn-parse.test.mjs test/harness-schema-validate.test.mjs test/harness-turn-routing.test.mjs test/harness-budget-enforce.test.mjs test/harness-submit-policy.test.mjs test/harness-project-agents-policy.test.mjs test/plan-approval-format.test.mjs test/plan-approval-dialog.test.mjs test/plan-approval-sync.test.mjs test/plan-create-plan.test.mjs test/plan-review-format.test.mjs test/debate-plan-phase.test.mjs test/plan-debate-eligibility.test.mjs test/plan-messenger-gate.test.mjs test/plan-debate-lane-apply.test.mjs test/review-integrity-revise-handoff.test.mjs test/harness-plan-revise-reset.test.mjs",
|
|
88
89
|
"test:vcc": "npx -y tsx --test vendor/pi-vcc/tests/*.test.ts",
|
|
89
90
|
"harness:sentrux-bootstrap": "node .pi/scripts/harness-sentrux-bootstrap.mjs",
|
|
90
91
|
"harness:sentrux-sync": "node .pi/scripts/sentrux-rules-sync.mjs --force",
|
|
@@ -102,14 +103,21 @@
|
|
|
102
103
|
"yaml": "^2.8.0"
|
|
103
104
|
},
|
|
104
105
|
"dependencies": {
|
|
106
|
+
"@ast-grep/napi": "^0.42.2",
|
|
107
|
+
"@microsoft/agent-governance-sdk": "^3.7.0",
|
|
105
108
|
"@posthog/pi": "latest",
|
|
106
109
|
"ajv": "^8.17.1",
|
|
107
110
|
"ajv-formats": "^3.0.1",
|
|
108
111
|
"croner": "^9.0.0",
|
|
109
112
|
"jimp": "^1.6.1",
|
|
113
|
+
"minimatch": "^10.2.5",
|
|
110
114
|
"nanoid": "^5.1.5",
|
|
111
115
|
"posthog-node": "^5.30.6",
|
|
112
|
-
"
|
|
116
|
+
"tree-sitter-wasms": "^0.1.13",
|
|
117
|
+
"typebox": "^1.1.38",
|
|
118
|
+
"undici": "^7.16.0",
|
|
119
|
+
"vscode-jsonrpc": "^8.2.1",
|
|
120
|
+
"web-tree-sitter": "^0.25.10"
|
|
113
121
|
},
|
|
114
122
|
"overrides": {
|
|
115
123
|
"@mariozechner/pi-agent-core": "npm:@earendil-works/pi-agent-core@0.74.1",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
|
+
import { createRequire } from "node:module";
|
|
6
7
|
import * as path from "node:path";
|
|
7
8
|
import { getAgentDir, parseFrontmatter } from "@earendil-works/pi-coding-agent";
|
|
8
9
|
|
|
@@ -294,6 +295,42 @@ function resolvePackageAgentsDir(
|
|
|
294
295
|
return null;
|
|
295
296
|
}
|
|
296
297
|
|
|
298
|
+
function resolveProjectRootFromCwd(cwd: string): string {
|
|
299
|
+
const projectAgentsDir = findNearestProjectAgentsDir(cwd);
|
|
300
|
+
if (!projectAgentsDir) return cwd;
|
|
301
|
+
const piDir = path.dirname(projectAgentsDir);
|
|
302
|
+
return piDir.endsWith(`${path.sep}.pi`) ? path.dirname(piDir) : cwd;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
type ApplyAgentPolicyFn = (
|
|
306
|
+
agent: AgentConfig,
|
|
307
|
+
packageRoot: string,
|
|
308
|
+
projectRoot: string,
|
|
309
|
+
) => AgentConfig;
|
|
310
|
+
|
|
311
|
+
let cachedApplyPolicy: ApplyAgentPolicyFn | null | undefined;
|
|
312
|
+
|
|
313
|
+
function applyAgentsPolicyIfAvailable(
|
|
314
|
+
agent: AgentConfig,
|
|
315
|
+
packageRoot: string | undefined,
|
|
316
|
+
projectRoot: string,
|
|
317
|
+
): AgentConfig {
|
|
318
|
+
if (!packageRoot) return agent;
|
|
319
|
+
if (cachedApplyPolicy === undefined) {
|
|
320
|
+
try {
|
|
321
|
+
const req = createRequire(path.join(packageRoot, "package.json"));
|
|
322
|
+
const mod = req("./.pi/lib/agents-policy.mjs") as {
|
|
323
|
+
applyAgentPolicyToConfig?: ApplyAgentPolicyFn;
|
|
324
|
+
};
|
|
325
|
+
cachedApplyPolicy = mod.applyAgentPolicyToConfig ?? null;
|
|
326
|
+
} catch {
|
|
327
|
+
cachedApplyPolicy = null;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (!cachedApplyPolicy) return agent;
|
|
331
|
+
return cachedApplyPolicy(agent, packageRoot, projectRoot);
|
|
332
|
+
}
|
|
333
|
+
|
|
297
334
|
export function discoverAgents(
|
|
298
335
|
cwd: string,
|
|
299
336
|
scope: AgentScope,
|
|
@@ -316,6 +353,7 @@ export function discoverAgents(
|
|
|
316
353
|
}
|
|
317
354
|
|
|
318
355
|
const agentMap = new Map<string, AgentConfig>();
|
|
356
|
+
const projectRoot = resolveProjectRootFromCwd(cwd);
|
|
319
357
|
|
|
320
358
|
for (const agent of BUILT_IN_AGENTS) {
|
|
321
359
|
agentMap.set(agent.name, { ...agent });
|
|
@@ -331,7 +369,13 @@ export function discoverAgents(
|
|
|
331
369
|
? "project"
|
|
332
370
|
: "user";
|
|
333
371
|
const parsed = parseMarkdownAgent(id, file.content, source, file.filePath);
|
|
334
|
-
if (parsed)
|
|
372
|
+
if (!parsed) continue;
|
|
373
|
+
const withPolicy = applyAgentsPolicyIfAvailable(
|
|
374
|
+
parsed,
|
|
375
|
+
packageRoot,
|
|
376
|
+
projectRoot,
|
|
377
|
+
);
|
|
378
|
+
agentMap.set(withPolicy.name, withPolicy);
|
|
335
379
|
}
|
|
336
380
|
|
|
337
381
|
return {
|