@piagent/platform 1.5.5 → 1.6.1
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/CHANGELOG.md +166 -0
- package/README.md +25 -21
- package/README.vi.md +34 -5
- package/adapters/web-frontend/profile.json +2 -4
- package/architecture/layers.json +18 -3
- package/benchmarks/deep-logic-v1/SPECIALIST_PROTOCOL.vi.md +122 -0
- package/benchmarks/deep-logic-v1/grade.mjs +272 -10
- package/benchmarks/deep-logic-v1/project/apps/admin/src/billing-summary.js +3 -0
- package/benchmarks/deep-logic-v1/project/benchmark-contract/public-smoke.test.js +166 -0
- package/benchmarks/deep-logic-v1/project/package.json +1 -1
- package/benchmarks/deep-logic-v1/project/packages/billing/src/close-period.js +3 -0
- package/benchmarks/deep-logic-v1/project/packages/billing/src/plan-timeline.js +3 -0
- package/benchmarks/deep-logic-v1/project/test/smoke.test.js +7 -1
- package/benchmarks/deep-logic-v1/prompts/budgeted-context-graph.md +2 -0
- package/benchmarks/deep-logic-v1/prompts/fair-dependency-scheduler.md +2 -0
- package/benchmarks/deep-logic-v1/prompts/layered-policy-resolution.md +2 -0
- package/benchmarks/deep-logic-v1/prompts/resumable-stream-assembly.md +3 -1
- package/benchmarks/deep-logic-v1/prompts/revision-event-reconciliation.md +2 -0
- package/benchmarks/deep-logic-v1/prompts/temporal-usage-billing-close.md +123 -0
- package/benchmarks/deep-logic-v1/prompts/transactional-config-merge.md +2 -0
- package/benchmarks/deep-logic-v1/suite.json +51 -3
- package/benchmarks/deep-logic-v1/variant.mjs +22 -1
- package/benchmarks/production-v1/spend-control.v1.json +92 -0
- package/benchmarks/production-v1/suite.json +46 -3
- package/catalog/capabilities.json +18 -18
- package/docs/authority-manifest.md +1 -1
- package/docs/auto-delegation-policy.md +38 -73
- package/docs/command-reference-vietnamese.md +27 -35
- package/docs/context-engine.md +12 -4
- package/docs/context-window-policy.md +37 -1
- package/docs/distribution-standard.md +7 -7
- package/docs/en/architecture.md +27 -13
- package/docs/languages.json +4 -4
- package/docs/model-options.md +8 -5
- package/docs/operator-manual-vietnamese.md +27 -45
- package/docs/project-adapters.md +2 -2
- package/docs/publishing-for-teams.md +10 -0
- package/docs/quality-benchmark.md +427 -62
- package/docs/release-install-policy.md +10 -9
- package/docs/runtime-harness-standard.md +3 -3
- package/docs/runtime-policy-design.md +4 -4
- package/docs/runtime-quality-baseline.md +13 -6
- package/docs/security-threat-model.md +2 -2
- package/docs/subagent-orchestration-capabilities.md +19 -51
- package/docs/subagents-and-multiagent.md +21 -47
- package/docs/task-implementation-contract.md +3 -3
- package/docs/task-lifecycle-vietnamese.md +3 -3
- package/docs/team-onboarding.md +2 -2
- package/docs/usage-observability.md +7 -2
- package/docs/vi/architecture.md +27 -13
- package/docs-site/architecture.html +1 -1
- package/docs-site/benchmark.html +89 -95
- package/docs-site/commands.html +1 -1
- package/docs-site/content/benchmark.html +88 -94
- package/docs-site/content/en/benchmark.html +134 -90
- package/docs-site/content/en/index.html +19 -19
- package/docs-site/content/en/runtime.html +4 -4
- package/docs-site/content/en/whats-new.html +12 -1
- package/docs-site/content/en/workflows.html +2 -2
- package/docs-site/content/index.html +19 -19
- package/docs-site/content/runtime.html +4 -4
- package/docs-site/content/whats-new.html +12 -1
- package/docs-site/content/workflows.html +2 -2
- package/docs-site/context-engine.html +1 -1
- package/docs-site/en/architecture.html +1 -1
- package/docs-site/en/benchmark.html +135 -91
- package/docs-site/en/commands.html +1 -1
- package/docs-site/en/context-engine.html +1 -1
- package/docs-site/en/index.html +20 -20
- package/docs-site/en/mcp-approval.html +1 -1
- package/docs-site/en/mcp-auth.html +1 -1
- package/docs-site/en/mcp-servers.html +1 -1
- package/docs-site/en/mcp.html +1 -1
- package/docs-site/en/permissions.html +1 -1
- package/docs-site/en/profiles.html +1 -1
- package/docs-site/en/quickstart.html +1 -1
- package/docs-site/en/runtime.html +5 -5
- package/docs-site/en/scope.html +1 -1
- package/docs-site/en/security.html +1 -1
- package/docs-site/en/team.html +1 -1
- package/docs-site/en/whats-new.html +13 -2
- package/docs-site/en/workflows.html +3 -3
- package/docs-site/index.html +20 -20
- package/docs-site/mcp-approval.html +1 -1
- package/docs-site/mcp-auth.html +1 -1
- package/docs-site/mcp-servers.html +1 -1
- package/docs-site/mcp.html +1 -1
- package/docs-site/permissions.html +1 -1
- package/docs-site/profiles.html +1 -1
- package/docs-site/quickstart.html +1 -1
- package/docs-site/runtime.html +5 -5
- package/docs-site/scope.html +1 -1
- package/docs-site/security.html +1 -1
- package/docs-site/team.html +1 -1
- package/docs-site/whats-new.html +13 -2
- package/docs-site/workflows.html +3 -3
- package/evals/fixtures/benchmark-assurance-evidence.invalid.json +1 -1
- package/evals/fixtures/benchmark-assurance-evidence.valid.json +1 -1
- package/evals/fixtures/codex-relative-efficiency-v1.invalid.json +4 -0
- package/evals/fixtures/codex-relative-efficiency-v1.valid.json +94 -0
- package/evals/fixtures/helper-request.invalid.json +1 -1
- package/evals/fixtures/helper-request.valid.json +1 -1
- package/evals/fixtures/piagent-webui/session-live-state-v1.invalid.json +18 -0
- package/evals/fixtures/piagent-webui/session-live-state-v1.valid.json +27 -0
- package/evals/fixtures/piagent-webui/subagent-tree-v1.valid.json +7 -0
- package/evals/fixtures/task-authority-snapshot.valid.json +4 -4
- package/evals/fs4-readiness-matrix.v1.json +2 -2
- package/evals/fs5-causal-arm.v1.json +3 -3
- package/evals/fs5-pilot-protocol.v1.json +3 -3
- package/evals/fs5-pilot-protocol.v2.json +8 -8
- package/evals/fs5-pilot-protocol.v3.json +8 -8
- package/evals/fs5-pilot-protocol.v4.json +7 -6
- package/evals/fs5-pilot-protocol.v5.json +9 -7
- package/evals/private-holdout-v1/public-exposure.v1.json +1 -1
- package/evals/runtime-conformance-v1/README.md +43 -0
- package/evals/runtime-conformance-v1/evaluate-paid-canary.mjs +198 -0
- package/evals/runtime-conformance-v1/lane.json +57 -0
- package/evals/runtime-conformance-v1/paid-canary.json +31 -0
- package/evals/runtime-conformance-v1/runner.mjs +456 -0
- package/package.json +3 -1
- package/packages/piagent-core/README.md +13 -4
- package/packages/piagent-core/benchmark/benchmark-assurance.js +4 -1
- package/packages/piagent-core/benchmark/benchmark-bootstrap.js +91 -9
- package/packages/piagent-core/benchmark/benchmark-claim-restrictions.js +38 -7
- package/packages/piagent-core/benchmark/benchmark-cli.js +7 -7
- package/packages/piagent-core/benchmark/benchmark-codex-relative-efficiency.js +698 -0
- package/packages/piagent-core/benchmark/benchmark-codex.js +3 -1
- package/packages/piagent-core/benchmark/benchmark-comparison.js +271 -2
- package/packages/piagent-core/benchmark/benchmark-core.js +736 -664
- package/packages/piagent-core/benchmark/benchmark-execution-guard.js +7 -5
- package/packages/piagent-core/benchmark/benchmark-forensics.js +441 -4
- package/packages/piagent-core/benchmark/benchmark-host-readiness.js +639 -0
- package/packages/piagent-core/benchmark/benchmark-matrix.js +22 -4
- package/packages/piagent-core/benchmark/benchmark-normalized-cost.js +317 -0
- package/packages/piagent-core/benchmark/benchmark-preflight.js +5 -1
- package/packages/piagent-core/benchmark/benchmark-process.js +6 -5
- package/packages/piagent-core/benchmark/benchmark-provider-free-evidence.js +345 -0
- package/packages/piagent-core/benchmark/benchmark-provider-wire.js +126 -0
- package/packages/piagent-core/benchmark/benchmark-record-validation.js +252 -0
- package/packages/piagent-core/benchmark/benchmark-report.js +130 -12
- package/packages/piagent-core/benchmark/benchmark-resume-recovery.js +14 -0
- package/packages/piagent-core/benchmark/benchmark-runner-policy.js +26 -0
- package/packages/piagent-core/benchmark/benchmark-runtime-causal.js +244 -0
- package/packages/piagent-core/benchmark/benchmark-stage-diagnostic.js +979 -0
- package/packages/piagent-core/benchmark/benchmark-statistics.js +64 -0
- package/packages/piagent-core/benchmark/benchmark-stop-policy.js +8 -5
- package/packages/piagent-core/benchmark/benchmark-suite-identity.js +31 -0
- package/packages/piagent-core/benchmark/benchmark-suite-runtime.js +13 -9
- package/packages/piagent-core/benchmark/benchmark-suite.js +149 -2
- package/packages/piagent-core/benchmark/benchmark-summary-support.js +380 -0
- package/packages/piagent-core/benchmark/benchmark-timing-diagnostics.js +971 -0
- package/packages/piagent-core/benchmark/benchmark-usage.js +322 -0
- package/packages/piagent-core/benchmark/benchmark-workflow.js +166 -0
- package/packages/piagent-core/capabilities/runtime-integrity.js +3 -0
- package/packages/piagent-core/docs/context-efficiency-improvement-plan.md +1080 -0
- package/packages/piagent-core/extensions/acceptance-behavior-proof.js +806 -0
- package/packages/piagent-core/extensions/acceptance-contract-semantics.js +83 -69
- package/packages/piagent-core/extensions/acceptance-error-classes.js +160 -0
- package/packages/piagent-core/extensions/acceptance-executable-evidence.js +12 -9
- package/packages/piagent-core/extensions/acceptance-receipt.js +123 -59
- package/packages/piagent-core/extensions/acceptance-state-machine-evidence.js +518 -0
- package/packages/piagent-core/extensions/acceptance-test-binding-evidence.js +60 -0
- package/packages/piagent-core/extensions/context-efficiency-metrics.js +302 -0
- package/packages/piagent-core/extensions/context-efficiency-report.js +167 -0
- package/packages/piagent-core/extensions/context-engine.js +149 -156
- package/packages/piagent-core/extensions/context-evidence.js +48 -0
- package/packages/piagent-core/extensions/context-import-links.js +296 -0
- package/packages/piagent-core/extensions/context-index-policy.js +4 -0
- package/packages/piagent-core/extensions/context-query-paths.js +57 -0
- package/packages/piagent-core/extensions/context-telemetry-integrity.js +65 -0
- package/packages/piagent-core/extensions/criterion-context-pack.js +435 -7
- package/packages/piagent-core/extensions/criterion-graph.js +82 -9
- package/packages/piagent-core/extensions/fallback-base-policy.ts +101 -0
- package/packages/piagent-core/extensions/guard-types.ts +6 -0
- package/packages/piagent-core/extensions/javascript-regex-evidence.js +32 -0
- package/packages/piagent-core/extensions/piagent-guard.ts +420 -260
- package/packages/piagent-core/extensions/task-contract-view.js +17 -3
- package/packages/piagent-core/extensions/task-lifecycle.js +39 -2
- package/packages/piagent-core/extensions/task-state.js +109 -142
- package/packages/piagent-core/extensions/verification-intelligence.js +52 -13
- package/packages/piagent-core/extensions/workspace-evidence-roots.js +193 -0
- package/packages/piagent-core/package.json +1 -1
- package/packages/piagent-core/policies/base-policy.json +44 -2
- package/packages/piagent-core/policy/authority-manifest.v1.json +3 -3
- package/packages/piagent-core/prompts/be-to-fe.md +2 -8
- package/packages/piagent-core/prompts/plan.md +1 -1
- package/packages/piagent-core/prompts/platform-improve.md +2 -6
- package/packages/piagent-core/prompts/review.md +2 -7
- package/packages/piagent-core/prompts/scout.md +1 -1
- package/packages/piagent-core/prompts/task.md +4 -3
- package/packages/piagent-core/runtime/context/context-delivery.ts +103 -0
- package/packages/piagent-core/runtime/context/context-delta-shadow.ts +53 -0
- package/packages/piagent-core/runtime/context/context-efficiency-format.ts +47 -0
- package/packages/piagent-core/runtime/context/context-evidence-qualification.ts +32 -0
- package/packages/piagent-core/runtime/context/prefix-telemetry.ts +47 -0
- package/packages/piagent-core/runtime/context/repository-memory-hints.ts +27 -0
- package/packages/piagent-core/runtime/hooks/agent-prompt-telemetry.ts +56 -0
- package/packages/piagent-core/runtime/hooks/agent-start-hook.ts +162 -102
- package/packages/piagent-core/runtime/hooks/completion-hook.ts +12 -12
- package/packages/piagent-core/runtime/hooks/input-hook.ts +17 -1
- package/packages/piagent-core/runtime/hooks/session-hooks.ts +22 -2
- package/packages/piagent-core/runtime/hooks/session-start-hook.ts +107 -3
- package/packages/piagent-core/runtime/hooks/tool-result-content-guards.ts +95 -0
- package/packages/piagent-core/runtime/hooks/tool-result-hook.ts +134 -166
- package/packages/piagent-core/runtime/hooks/tool-result-value-helpers.ts +66 -0
- package/packages/piagent-core/runtime/inspection/activity-event-adapter.ts +4 -2
- package/packages/piagent-core/runtime/inspection/activity-recovery.ts +104 -0
- package/packages/piagent-core/runtime/inspection/bounded-emission-guard.ts +286 -0
- package/packages/piagent-core/runtime/inspection/runtime-event-store.ts +37 -7
- package/packages/piagent-core/runtime/inspection/task-compaction-history.ts +1 -1
- package/packages/piagent-core/runtime/inspection/task-handoff-history.ts +1 -1
- package/packages/piagent-core/runtime/inspection/task-subagent-tree.ts +27 -4
- package/packages/piagent-core/runtime/inspection/tool-failure-classification.ts +70 -0
- package/packages/piagent-core/runtime/inspection/webui-snapshot.ts +73 -9
- package/packages/piagent-core/runtime/model/authenticated-catalog.ts +17 -9
- package/packages/piagent-core/runtime/model/openai-codex-reasoning.ts +83 -0
- package/packages/piagent-core/runtime/model/provider-wire-fingerprint.ts +238 -0
- package/packages/piagent-core/runtime/orchestration/helper-lifecycle.ts +16 -12
- package/packages/piagent-core/runtime/orchestration/minimal-delegation-policy.ts +71 -0
- package/packages/piagent-core/runtime/orchestration/owned-work-budget.ts +28 -20
- package/packages/piagent-core/runtime/orchestration/role-policy.ts +27 -9
- package/packages/piagent-core/runtime/orchestration/subagent-tool-policy.ts +329 -0
- package/packages/piagent-core/runtime/policy/block-remedy.ts +0 -4
- package/packages/piagent-core/runtime/product/activity-inspector.ts +7 -2
- package/packages/piagent-core/runtime/product/efficiency-metrics.ts +7 -2
- package/packages/piagent-core/runtime/quality/edit-freshness-guard.ts +102 -0
- package/packages/piagent-core/runtime/quality/exact-output-contract.ts +22 -11
- package/packages/piagent-core/runtime/quality/performance-assurance-signals.ts +23 -0
- package/packages/piagent-core/runtime/quality/performance-assurance.ts +9 -5
- package/packages/piagent-core/runtime/recovery/continuation-budget.ts +1 -1
- package/packages/piagent-core/runtime/recovery/edit-recovery-context.ts +113 -0
- package/packages/piagent-core/runtime/recovery/edit-recovery-delivery.ts +42 -0
- package/packages/piagent-core/runtime/recovery/handoff-projection.ts +4 -1
- package/packages/piagent-core/runtime/recovery/pristine-task-policy-refresh.ts +91 -0
- package/packages/piagent-core/runtime/recovery/recovery-policy.ts +7 -4
- package/packages/piagent-core/runtime/recovery/resume-state.ts +112 -14
- package/packages/piagent-core/runtime/recovery/semantic-repair-handshake.ts +60 -13
- package/packages/piagent-core/runtime/recovery/semantic-repair-runtime.ts +55 -2
- package/packages/piagent-core/runtime/recovery/task-evidence-coverage-refresh.ts +217 -0
- package/packages/piagent-core/runtime/registration/context-commands.ts +82 -7
- package/packages/piagent-core/runtime/registration/knowledge-tools.ts +9 -5
- package/packages/piagent-core/runtime/registration/operator-request-intake.ts +49 -0
- package/packages/piagent-core/runtime/registration/policy-tools.ts +50 -15
- package/packages/piagent-core/runtime/registration/session-commands.ts +1 -1
- package/packages/piagent-core/runtime/registration/task-completion-tools.ts +61 -25
- package/packages/piagent-core/runtime/registration/task-evidence-tools.ts +21 -12
- package/packages/piagent-core/runtime/registration/task-start-guidance.ts +169 -0
- package/packages/piagent-core/runtime/registration/task-start-manifest.ts +54 -0
- package/packages/piagent-core/runtime/registration/task-start-retry-helpers.ts +37 -0
- package/packages/piagent-core/runtime/registration/task-start-tool.ts +108 -103
- package/packages/piagent-core/runtime/runtime-limits.ts +16 -2
- package/packages/piagent-core/runtime/session/adaptive-context-analysis.ts +461 -0
- package/packages/piagent-core/runtime/session/adaptive-context-governor.ts +464 -0
- package/packages/piagent-core/runtime/session/adaptive-context-ledger.ts +265 -0
- package/packages/piagent-core/runtime/session/message-signals.ts +7 -3
- package/packages/piagent-core/runtime/session/operator-request-carry.ts +44 -0
- package/packages/piagent-core/runtime/session/runtime-state.ts +161 -5
- package/packages/piagent-core/runtime/session/source-checkout-read-grants.ts +35 -0
- package/packages/piagent-core/runtime/session/system-prompt.ts +76 -14
- package/packages/piagent-core/runtime/session/task-contract-presentation.ts +39 -0
- package/packages/piagent-core/runtime/tools/apply-patch-tool.ts +500 -0
- package/packages/piagent-core/runtime/tools/phase-tools.ts +8 -8
- package/packages/piagent-core/runtime/tools/tool-groups.ts +12 -2
- package/packages/piagent-core/runtime/trajectory/trajectory-runtime.ts +2 -1
- package/packages/piagent-core/runtime/verification/exact-verifier-reuse.ts +101 -0
- package/packages/piagent-core/runtime/workflows/runtime-intake-compaction.ts +164 -0
- package/packages/piagent-core/runtime/workflows/task-intake.ts +207 -38
- package/packages/piagent-core/security/sensitive-data.js +13 -218
- package/packages/piagent-core/security/sensitive-project-file.js +42 -0
- package/packages/piagent-core/security/sensitive-source-expression.js +330 -0
- package/packages/piagent-core/security/sensitive-source-formats.js +394 -0
- package/packages/piagent-core/security/sensitive-text.js +234 -0
- package/packages/piagent-core/subagents/piagent-oracle.md +5 -3
- package/packages/piagent-core/subagents/piagent-planner.md +6 -4
- package/packages/piagent-core/subagents/piagent-reviewer.md +5 -3
- package/packages/piagent-core/subagents/piagent-scout.md +4 -2
- package/packages/piagent-core/subagents/piagent-worker.md +7 -5
- package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-rD9WJKxs.js → MarkdownMessage-B4XehTCU.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/index-CgOEyRPG.js +176 -0
- package/packages/piagent-webui/dist/client/index.html +1 -1
- package/packages/piagent-webui/extension/piagent-webui.ts +3 -1
- package/packages/piagent-webui/extension/same-session-bridge.ts +1 -1
- package/packages/piagent-webui/extension/session-stream-adapter.ts +33 -10
- package/packages/piagent-webui/gateway/gateway-events.ts +109 -5
- package/packages/piagent-webui/gateway/gateway-service.ts +3 -0
- package/packages/piagent-webui/gateway/gateway-session-stream.ts +122 -20
- package/packages/piagent-webui/gateway/session-command-controller.ts +18 -3
- package/packages/piagent-webui/gateway/session-effective-options.ts +47 -0
- package/packages/piagent-webui/gateway/session-live-state.ts +21 -0
- package/packages/piagent-webui/gateway/session-operation-lifecycle.ts +237 -0
- package/packages/piagent-webui/gateway/session-operation-retry-control.ts +38 -0
- package/packages/piagent-webui/gateway/session-operation-start.ts +5 -1
- package/packages/piagent-webui/gateway/session-operation-watchdog.ts +165 -0
- package/packages/piagent-webui/gateway/session-runtime-factory.ts +45 -0
- package/packages/piagent-webui/gateway/session-runtime-supervisor.ts +141 -125
- package/packages/piagent-webui/ownership/session-lease-store.ts +5 -2
- package/packages/piagent-webui/server/core-inspection-provider.ts +2 -1
- package/packages/piagent-webui/server/loopback-server.ts +8 -0
- package/packages/piagent-webui/server/transcript-projection.ts +113 -9
- package/packages/piagent-webui/shared/text-visibility.ts +10 -0
- package/schemas/codex-relative-efficiency-v1.schema.json +155 -0
- package/schemas/piagent-webui/catalog-v1.json +9 -0
- package/schemas/piagent-webui/gateway-protocol-v1.schema.json +53 -3
- package/schemas/piagent-webui/runtime-event-v2.schema.json +15 -5
- package/schemas/piagent-webui/session-live-state-v1.schema.json +76 -0
- package/schemas/piagent-webui/subagent-tree-v1.schema.json +11 -1
- package/schemas/project-profile.schema.json +1 -1
- package/schemas/task-contract.schema.json +27 -1
- package/scripts/benchmark-runner-core.mjs +367 -363
- package/scripts/benchmark-runner-finalization.mjs +313 -0
- package/scripts/benchmark-runner-host-readiness.mjs +94 -0
- package/scripts/benchmark-runner-support.mjs +200 -0
- package/scripts/benchmark-session.mjs +95 -41
- package/scripts/configure-model-scope.sh +4 -3
- package/scripts/configure-subagents.sh +42 -34
- package/scripts/helper-evaluation.mjs +2 -2
- package/scripts/install-global.sh +2 -2
- package/scripts/pi-usage-history.mjs +37 -10
- package/scripts/setup.sh +2 -2
- package/scripts/team-doctor.sh +1 -1
- package/scripts/verify-local.sh +10 -1
- package/templates/global/settings.json +2 -1
- package/packages/piagent-webui/dist/client/assets/index-BZRFw1u6.js +0 -174
|
@@ -13,9 +13,14 @@ import {
|
|
|
13
13
|
recoverBenchmarkPiCredentialWriteback
|
|
14
14
|
} from "./benchmark-pi-home.js";
|
|
15
15
|
import { benchmarkTreeIdentity } from "./benchmark-tree-identity.js";
|
|
16
|
+
import { inspectBenchmarkLedger } from "./benchmark-ledger.js";
|
|
17
|
+
import { completedBenchmarkRecord } from "./benchmark-record-validation.js";
|
|
16
18
|
import { benchmarkGitEnvironment, benchmarkHostEnvironment } from "./benchmark-runtime.js";
|
|
19
|
+
import {
|
|
20
|
+
canonicalBuiltInBenchmarkSuiteId,
|
|
21
|
+
isReservedBenchmarkSuiteId
|
|
22
|
+
} from "./benchmark-suite-identity.js";
|
|
17
23
|
|
|
18
|
-
const builtInSuites = new Set(["core-v1", "capability-v1", "e2-framework-v1", "deep-logic-v1", "production-v1"]);
|
|
19
24
|
const metadataVariable = "PIAGENT_BENCHMARK_BOOTSTRAP_METADATA";
|
|
20
25
|
|
|
21
26
|
function fail(message) {
|
|
@@ -37,6 +42,67 @@ function runRootFromResume(input, cwd) {
|
|
|
37
42
|
return stat.isDirectory() ? target : path.dirname(target);
|
|
38
43
|
}
|
|
39
44
|
|
|
45
|
+
function sameLedgerBinding(left, right) {
|
|
46
|
+
return ["schemaVersion", "algorithm", "digest", "records", "bytes"]
|
|
47
|
+
.every((field) => left?.[field] === right?.[field]);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function recordMatchesManifestOrder(record, index, manifest) {
|
|
51
|
+
const expected = manifest.order[index];
|
|
52
|
+
return completedBenchmarkRecord(record)
|
|
53
|
+
&& record.runId === manifest.runId
|
|
54
|
+
&& record.configurationDigest === manifest.configurationDigest
|
|
55
|
+
&& record.orderIndex === index + 1
|
|
56
|
+
&& record.scenarioId === expected?.scenarioId
|
|
57
|
+
&& record.surface === expected?.surface
|
|
58
|
+
&& record.repeat === expected?.repeat;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function ledgerMatchesManifestPrefix(records, manifest) {
|
|
62
|
+
const sessions = new Set();
|
|
63
|
+
const keys = new Set();
|
|
64
|
+
for (const [index, record] of records.entries()) {
|
|
65
|
+
const key = `${record?.scenarioId}\0${record?.surface}\0${record?.repeat}`;
|
|
66
|
+
if (!recordMatchesManifestOrder(record, index, manifest) || sessions.has(record.sessionId) || keys.has(key)) return false;
|
|
67
|
+
sessions.add(record.sessionId);
|
|
68
|
+
keys.add(key);
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function productionResumeHasCompleteLedger(argv, cwd) {
|
|
74
|
+
const resume = optionValue(argv, "--resume");
|
|
75
|
+
if (!resume) return false;
|
|
76
|
+
const runRoot = runRootFromResume(resume, cwd);
|
|
77
|
+
const manifestPath = path.join(runRoot, "run-manifest.json");
|
|
78
|
+
if (!fs.existsSync(manifestPath)) return false;
|
|
79
|
+
const manifest = jsonFile(manifestPath, "benchmark resume manifest");
|
|
80
|
+
if (manifest?.stageControl?.policy !== "production-v1-provider-spend-v1"
|
|
81
|
+
|| !Array.isArray(manifest.order) || manifest.order.length === 0) return false;
|
|
82
|
+
const ledgerPath = path.join(runRoot, "runs.jsonl");
|
|
83
|
+
const ledger = inspectBenchmarkLedger(ledgerPath);
|
|
84
|
+
if (!ledgerMatchesManifestPrefix(ledger.records, manifest)) return false;
|
|
85
|
+
if (ledger.records.length === manifest.order.length) return true;
|
|
86
|
+
if (ledger.records.length !== manifest.order.length - 1) return false;
|
|
87
|
+
|
|
88
|
+
const pendingPath = path.join(runRoot, "pending-record.json");
|
|
89
|
+
if (!fs.existsSync(pendingPath)) return false;
|
|
90
|
+
const pending = jsonFile(pendingPath, "benchmark pending record");
|
|
91
|
+
const finalIndex = manifest.order.length - 1;
|
|
92
|
+
if (pending?.schemaVersion !== 2
|
|
93
|
+
|| pending.postSessionGuard?.matched !== true
|
|
94
|
+
|| !String(pending.postSessionGuard.stage ?? "").startsWith("after-session:")
|
|
95
|
+
|| !sameLedgerBinding(pending.previousLedger, ledger.binding)
|
|
96
|
+
|| !recordMatchesManifestOrder(pending.record, finalIndex, manifest)) return false;
|
|
97
|
+
|
|
98
|
+
const measuredPath = path.join(runRoot, "measured-record-ready.json");
|
|
99
|
+
if (!fs.existsSync(measuredPath)) return true;
|
|
100
|
+
const measured = jsonFile(measuredPath, "measured benchmark record");
|
|
101
|
+
return measured?.schemaVersion === 1
|
|
102
|
+
&& sameLedgerBinding(measured.previousLedger, ledger.binding)
|
|
103
|
+
&& JSON.stringify(measured.record) === JSON.stringify(pending.record);
|
|
104
|
+
}
|
|
105
|
+
|
|
40
106
|
function jsonFile(file, label) {
|
|
41
107
|
try { return JSON.parse(fs.readFileSync(file, "utf8")); }
|
|
42
108
|
catch (error) { fail(`Cannot read ${label} ${file}: ${error.message}`); }
|
|
@@ -98,15 +164,22 @@ function snapshotReplay(argv, cwd, temporaryRoot) {
|
|
|
98
164
|
};
|
|
99
165
|
}
|
|
100
166
|
|
|
101
|
-
function resolveSuiteManifest(source, cwd) {
|
|
102
|
-
if (
|
|
167
|
+
function resolveSuiteManifest(source, cwd, liveRoot) {
|
|
168
|
+
if (isReservedBenchmarkSuiteId(source)) return { origin: source, manifest: null, builtInId: source };
|
|
103
169
|
const target = path.resolve(cwd, source);
|
|
104
170
|
let stat;
|
|
105
171
|
try { stat = fs.statSync(target); }
|
|
106
172
|
catch (error) { fail(`Cannot snapshot benchmark suite ${target}: ${error.message}`); }
|
|
107
173
|
const manifest = stat.isDirectory() ? path.join(target, "suite.json") : target;
|
|
108
174
|
if (!fs.statSync(manifest).isFile()) fail(`Benchmark suite manifest is not a file: ${manifest}`);
|
|
109
|
-
|
|
175
|
+
const resolvedManifest = fs.realpathSync(manifest);
|
|
176
|
+
const builtInId = canonicalBuiltInBenchmarkSuiteId(liveRoot, resolvedManifest);
|
|
177
|
+
if (builtInId) return { origin: builtInId, manifest: null, builtInId };
|
|
178
|
+
const suite = jsonFile(resolvedManifest, "benchmark suite manifest");
|
|
179
|
+
if (isReservedBenchmarkSuiteId(suite?.id)) {
|
|
180
|
+
fail(`Benchmark suite id ${suite.id} is reserved for its canonical built-in suite`);
|
|
181
|
+
}
|
|
182
|
+
return { origin: resolvedManifest, manifest: resolvedManifest, builtInId: null };
|
|
110
183
|
}
|
|
111
184
|
|
|
112
185
|
function inside(root, target) {
|
|
@@ -273,12 +346,12 @@ function requestedPiProvider(model, configRoot, credentials) {
|
|
|
273
346
|
return credentials.length === 1 ? credentials[0].providerId : null;
|
|
274
347
|
}
|
|
275
348
|
|
|
276
|
-
function snapshotPiAgentHome(temporaryRoot, runtimeParent, argv, cwd, replay) {
|
|
349
|
+
function snapshotPiAgentHome(temporaryRoot, runtimeParent, argv, cwd, replay, { providerFreeFinalization = false } = {}) {
|
|
277
350
|
const sourceRoot = path.resolve(process.env.PI_CODING_AGENT_DIR || path.join(os.homedir(), ".pi", "agent"));
|
|
278
351
|
const configRoot = path.join(temporaryRoot, "pi-agent-config");
|
|
279
352
|
fs.mkdirSync(configRoot, { recursive: true, mode: 0o700 });
|
|
280
353
|
const copied = [];
|
|
281
|
-
for (const name of ["auth.json", "models.json"]) {
|
|
354
|
+
for (const name of providerFreeFinalization ? [] : ["auth.json", "models.json"]) {
|
|
282
355
|
const source = path.join(sourceRoot, name);
|
|
283
356
|
const configTarget = path.join(configRoot, name);
|
|
284
357
|
try { copyBenchmarkPiConfigFile(source, configTarget, 0o400); }
|
|
@@ -395,10 +468,13 @@ export function createBenchmarkExecutionSnapshot({ liveRoot, argv, cwd }) {
|
|
|
395
468
|
}
|
|
396
469
|
const candidateIndex = writeBoundJson(path.join(temporaryRoot, "candidate-index.json"), candidate.index);
|
|
397
470
|
const replay = snapshotReplay(argv, cwd, temporaryRoot);
|
|
398
|
-
const
|
|
399
|
-
const codexCredential = requestsCodexSurface(argv, cwd, replay) ? snapshotCodexCredential(temporaryRoot) : null;
|
|
400
|
-
const suite = resolveSuiteManifest(requestedSuite(argv, cwd, replay), cwd);
|
|
471
|
+
const suite = resolveSuiteManifest(requestedSuite(argv, cwd, replay), cwd, root);
|
|
401
472
|
validateOutputIsolation(argv, cwd, root, suite.manifest);
|
|
473
|
+
const providerFreeFinalization = productionResumeHasCompleteLedger(argv, cwd);
|
|
474
|
+
const piAgentHome = snapshotPiAgentHome(temporaryRoot, runtimeParent, argv, cwd, replay, { providerFreeFinalization });
|
|
475
|
+
const codexCredential = !providerFreeFinalization && requestsCodexSurface(argv, cwd, replay)
|
|
476
|
+
? snapshotCodexCredential(temporaryRoot)
|
|
477
|
+
: null;
|
|
402
478
|
let suiteSnapshot = null;
|
|
403
479
|
let suiteRoot;
|
|
404
480
|
if (suite.manifest) {
|
|
@@ -421,6 +497,7 @@ export function createBenchmarkExecutionSnapshot({ liveRoot, argv, cwd }) {
|
|
|
421
497
|
candidateProvenance: candidate.provenance,
|
|
422
498
|
candidateIndex,
|
|
423
499
|
runtimeDependencies: runtimeDependencies(candidateRoot, root),
|
|
500
|
+
providerFreeFinalization,
|
|
424
501
|
piAgentHome,
|
|
425
502
|
codexCredential,
|
|
426
503
|
replay: replay ? {
|
|
@@ -432,6 +509,7 @@ export function createBenchmarkExecutionSnapshot({ liveRoot, argv, cwd }) {
|
|
|
432
509
|
suite: {
|
|
433
510
|
origin: suite.origin,
|
|
434
511
|
snapshot: suiteSnapshot,
|
|
512
|
+
builtInId: suite.builtInId,
|
|
435
513
|
identity: benchmarkTreeIdentity(suiteRoot, { rejectSymlinks: true })
|
|
436
514
|
}
|
|
437
515
|
};
|
|
@@ -485,6 +563,7 @@ export function benchmarkBootstrapMetadata(env = process.env) {
|
|
|
485
563
|
|| typeof value.candidateIndex?.path !== "string"
|
|
486
564
|
|| !/^[a-f0-9]{64}$/.test(String(value.candidateIndex?.digest ?? ""))
|
|
487
565
|
|| typeof value.runtimeDependencies?.digest !== "string"
|
|
566
|
+
|| typeof value.providerFreeFinalization !== "boolean"
|
|
488
567
|
|| typeof value.piAgentHome?.configRoot !== "string"
|
|
489
568
|
|| typeof value.piAgentHome?.runtimeParent !== "string"
|
|
490
569
|
|| typeof value.piAgentHome?.vaultRoot !== "string"
|
|
@@ -503,6 +582,9 @@ export function benchmarkBootstrapMetadata(env = process.env) {
|
|
|
503
582
|
|| typeof value.codexCredential?.privateIdentity?.contentDigest !== "string"
|
|
504
583
|
))
|
|
505
584
|
|| typeof value.suite?.origin !== "string"
|
|
585
|
+
|| !(value.suite?.builtInId === null || isReservedBenchmarkSuiteId(value.suite?.builtInId))
|
|
586
|
+
|| (value.suite?.builtInId === null && typeof value.suite?.snapshot !== "string")
|
|
587
|
+
|| (value.suite?.builtInId !== null && (value.suite?.origin !== value.suite?.builtInId || value.suite?.snapshot !== null))
|
|
506
588
|
|| typeof value.suite?.identity?.contentDigest !== "string"
|
|
507
589
|
|| (value.replay !== null && (
|
|
508
590
|
typeof value.replay?.snapshot !== "string"
|
|
@@ -1,21 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const RESTRICTION_VERDICTS = new Set([
|
|
2
|
+
"token-claim-withheld",
|
|
3
|
+
"diagnostic-native-codex",
|
|
4
|
+
"diagnostic-replay"
|
|
5
|
+
]);
|
|
6
|
+
|
|
7
|
+
function restrictionCanReplaceVerdict(status, includeObservational) {
|
|
8
|
+
return typeof status === "string"
|
|
9
|
+
&& (status.endsWith("-more-efficient")
|
|
10
|
+
|| RESTRICTION_VERDICTS.has(status)
|
|
11
|
+
|| (includeObservational && status === "observational-efficiency-only"));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function withholdTokenClaim(report, { reason, limitation, verdictStatus, includeObservational = false }) {
|
|
4
15
|
report.comparison.tokenClaimAllowed = false;
|
|
5
16
|
report.comparison.tokenClaimUnavailableReason = reason;
|
|
17
|
+
report.comparison.claimEligibility = {
|
|
18
|
+
...(report.comparison.claimEligibility ?? {}),
|
|
19
|
+
tokenClaimScope: "unavailable",
|
|
20
|
+
limitations: [...new Set([...(report.comparison.claimEligibility?.limitations ?? []), limitation])]
|
|
21
|
+
};
|
|
22
|
+
report.verdict ??= {};
|
|
23
|
+
if (restrictionCanReplaceVerdict(report.verdict.status, includeObservational)) {
|
|
24
|
+
report.verdict.status = verdictStatus;
|
|
25
|
+
}
|
|
26
|
+
report.verdict.claimRestrictionReason = reason;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function diagnostic(report, { tier, purpose, reason, limitation, flag, verdictStatus }) {
|
|
30
|
+
report[flag] = true;
|
|
31
|
+
report.comparison.purpose = purpose;
|
|
32
|
+
withholdTokenClaim(report, { reason, limitation, verdictStatus, includeObservational: true });
|
|
6
33
|
report.comparison.claimEligibility = {
|
|
7
34
|
...(report.comparison.claimEligibility ?? {}),
|
|
8
35
|
achievedTier: tier,
|
|
9
36
|
generalizationClaimAllowed: false,
|
|
10
|
-
comparisonPurpose: purpose
|
|
11
|
-
limitations: [...new Set([...(report.comparison.claimEligibility?.limitations ?? []), limitation])]
|
|
37
|
+
comparisonPurpose: purpose
|
|
12
38
|
};
|
|
13
39
|
}
|
|
14
40
|
|
|
15
41
|
export function applyBenchmarkClaimRestrictions(report, { tokenReason, replaySource, codexMode, surfaces }) {
|
|
16
42
|
if (tokenReason) {
|
|
17
|
-
report
|
|
18
|
-
|
|
43
|
+
withholdTokenClaim(report, {
|
|
44
|
+
reason: tokenReason,
|
|
45
|
+
limitation: `token-claim-withheld:${tokenReason}`,
|
|
46
|
+
verdictStatus: "token-claim-withheld"
|
|
47
|
+
});
|
|
19
48
|
}
|
|
20
49
|
if (surfaces.includes("codex-cli") && codexMode === "native") {
|
|
21
50
|
diagnostic(report, {
|
|
@@ -23,6 +52,7 @@ export function applyBenchmarkClaimRestrictions(report, { tokenReason, replaySou
|
|
|
23
52
|
purpose: "diagnostic-native-codex",
|
|
24
53
|
reason: "native-codex-operator-configuration-is-not-frozen",
|
|
25
54
|
limitation: "native-codex-results-cannot-support-release-token-or-generalization-claims",
|
|
55
|
+
verdictStatus: "diagnostic-native-codex",
|
|
26
56
|
flag: "nativeCodexDiagnosticOnly"
|
|
27
57
|
});
|
|
28
58
|
}
|
|
@@ -32,6 +62,7 @@ export function applyBenchmarkClaimRestrictions(report, { tokenReason, replaySou
|
|
|
32
62
|
purpose: "diagnostic-replay",
|
|
33
63
|
reason: "replay-results-are-diagnostic-only",
|
|
34
64
|
limitation: "replay-results-cannot-support-release-token-or-generalization-claims",
|
|
65
|
+
verdictStatus: "diagnostic-replay",
|
|
35
66
|
flag: "replayDiagnosticOnly"
|
|
36
67
|
});
|
|
37
68
|
}
|
|
@@ -11,16 +11,16 @@ export const benchmarkUsage = `Usage:
|
|
|
11
11
|
piagent-benchmark <project-path> --record ... Legacy recorder
|
|
12
12
|
piagent-benchmark <project-path> --init Legacy scenario notes
|
|
13
13
|
|
|
14
|
-
Runs a clean, paired
|
|
15
|
-
With no options it uses the built-in core-v1 suite,
|
|
16
|
-
|
|
14
|
+
Runs a clean, paired Codex CLI vs Piagent benchmark and grades it automatically.
|
|
15
|
+
With no options it uses the built-in core-v1 suite, GPT-5.6 Luna at medium
|
|
16
|
+
thinking on both surfaces, and the suite's repeat count.
|
|
17
17
|
|
|
18
18
|
Options:
|
|
19
19
|
--suite <id|path> core-v1, capability-v1, e2-framework-v1, deep-logic-v1, production-v1, or suite.json path.
|
|
20
|
-
--deep Alias for --suite deep-logic-v1 (
|
|
20
|
+
--deep Alias for --suite deep-logic-v1 (7 large scenarios, locked to Luna/medium).
|
|
21
21
|
--capability Alias for --suite capability-v1.
|
|
22
22
|
--production Alias for --suite production-v1.
|
|
23
|
-
--surfaces <a,b>
|
|
23
|
+
--surfaces <a,b> piagent,codex-cli (default); raw-pi is diagnostic ablation only.
|
|
24
24
|
--model <provider/model> Pin one model identity for both surfaces.
|
|
25
25
|
--thinking <level> off|minimal|low|medium|high|xhigh|max.
|
|
26
26
|
--codex-mode <mode> controlled isolated home (default) or native user configuration.
|
|
@@ -47,7 +47,7 @@ Options:
|
|
|
47
47
|
|
|
48
48
|
Outputs report.json, report.html, summary.txt, and runs.jsonl with mode 0600.
|
|
49
49
|
No token/result value is entered manually; usage comes from Pi session JSONL
|
|
50
|
-
or Codex exec JSONL.
|
|
50
|
+
or Codex exec JSONL. Override --model and --thinking together for another parity target.
|
|
51
51
|
`;
|
|
52
52
|
|
|
53
53
|
function fail(message, code = 2) {
|
|
@@ -72,7 +72,7 @@ function positiveInteger(raw, name, minimum, maximum) {
|
|
|
72
72
|
export function parseBenchmarkArgs(argv) {
|
|
73
73
|
const options = {
|
|
74
74
|
suite: "core-v1",
|
|
75
|
-
surfaces: ["
|
|
75
|
+
surfaces: ["piagent", "codex-cli"],
|
|
76
76
|
model: undefined,
|
|
77
77
|
thinking: undefined,
|
|
78
78
|
codexMode: "controlled",
|