@cleocode/core 2026.9.23 → 2026.9.24
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/dist/admin/import-tasks.d.ts.map +1 -1
- package/dist/admin/import-tasks.js +35 -6
- package/dist/admin/import-tasks.js.map +1 -1
- package/dist/admin/import.d.ts.map +1 -1
- package/dist/admin/import.js +25 -6
- package/dist/admin/import.js.map +1 -1
- package/dist/build-provenance.json +2 -2
- package/dist/cloud/http.d.ts +8 -0
- package/dist/cloud/http.d.ts.map +1 -1
- package/dist/cloud/http.js +8 -1
- package/dist/cloud/http.js.map +1 -1
- package/dist/cloud/index.d.ts +6 -1
- package/dist/cloud/index.d.ts.map +1 -1
- package/dist/cloud/index.js +6 -1
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/nexus-auth.d.ts +169 -0
- package/dist/cloud/nexus-auth.d.ts.map +1 -0
- package/dist/cloud/nexus-auth.js +372 -0
- package/dist/cloud/nexus-auth.js.map +1 -0
- package/dist/cloud/nexus-credentials.d.ts +188 -0
- package/dist/cloud/nexus-credentials.d.ts.map +1 -0
- package/dist/cloud/nexus-credentials.js +323 -0
- package/dist/cloud/nexus-credentials.js.map +1 -0
- package/dist/cloud/nexus-link.d.ts +85 -0
- package/dist/cloud/nexus-link.d.ts.map +1 -0
- package/dist/cloud/nexus-link.js +226 -0
- package/dist/cloud/nexus-link.js.map +1 -0
- package/dist/cloud/presence.d.ts +88 -0
- package/dist/cloud/presence.d.ts.map +1 -0
- package/dist/cloud/presence.js +137 -0
- package/dist/cloud/presence.js.map +1 -0
- package/dist/cloud/projects.d.ts +3 -1
- package/dist/cloud/projects.d.ts.map +1 -1
- package/dist/cloud/projects.js +4 -2
- package/dist/cloud/projects.js.map +1 -1
- package/dist/crypto/credentials.d.ts +14 -4
- package/dist/crypto/credentials.d.ts.map +1 -1
- package/dist/crypto/credentials.js +15 -1
- package/dist/crypto/credentials.js.map +1 -1
- package/dist/decide/bench/dataset.d.ts +125 -0
- package/dist/decide/bench/dataset.d.ts.map +1 -0
- package/dist/decide/bench/dataset.js +457 -0
- package/dist/decide/bench/dataset.js.map +1 -0
- package/dist/decide/bench/index.d.ts +23 -0
- package/dist/decide/bench/index.d.ts.map +1 -0
- package/dist/decide/bench/index.js +23 -0
- package/dist/decide/bench/index.js.map +1 -0
- package/dist/decide/bench/metrics.d.ts +55 -0
- package/dist/decide/bench/metrics.d.ts.map +1 -0
- package/dist/decide/bench/metrics.js +100 -0
- package/dist/decide/bench/metrics.js.map +1 -0
- package/dist/decide/bench/operation.d.ts +119 -0
- package/dist/decide/bench/operation.d.ts.map +1 -0
- package/dist/decide/bench/operation.js +171 -0
- package/dist/decide/bench/operation.js.map +1 -0
- package/dist/decide/bench/profiles.d.ts +74 -0
- package/dist/decide/bench/profiles.d.ts.map +1 -0
- package/dist/decide/bench/profiles.js +131 -0
- package/dist/decide/bench/profiles.js.map +1 -0
- package/dist/decide/bench/questions.d.ts +40 -0
- package/dist/decide/bench/questions.d.ts.map +1 -0
- package/dist/decide/bench/questions.js +107 -0
- package/dist/decide/bench/questions.js.map +1 -0
- package/dist/decide/bench/report.d.ts +21 -0
- package/dist/decide/bench/report.d.ts.map +1 -0
- package/dist/decide/bench/report.js +120 -0
- package/dist/decide/bench/report.js.map +1 -0
- package/dist/decide/bench/runner.d.ts +203 -0
- package/dist/decide/bench/runner.d.ts.map +1 -0
- package/dist/decide/bench/runner.js +335 -0
- package/dist/decide/bench/runner.js.map +1 -0
- package/dist/decide/bench/source.d.ts +21 -0
- package/dist/decide/bench/source.d.ts.map +1 -0
- package/dist/decide/bench/source.js +67 -0
- package/dist/decide/bench/source.js.map +1 -0
- package/dist/decide/bench/spot-check.d.ts +117 -0
- package/dist/decide/bench/spot-check.d.ts.map +1 -0
- package/dist/decide/bench/spot-check.js +221 -0
- package/dist/decide/bench/spot-check.js.map +1 -0
- package/dist/decide/bench/stats.d.ts +57 -0
- package/dist/decide/bench/stats.d.ts.map +1 -0
- package/dist/decide/bench/stats.js +82 -0
- package/dist/decide/bench/stats.js.map +1 -0
- package/dist/decide/bench/types.d.ts +216 -0
- package/dist/decide/bench/types.d.ts.map +1 -0
- package/dist/decide/bench/types.js +104 -0
- package/dist/decide/bench/types.js.map +1 -0
- package/dist/decide/client.d.ts +35 -1
- package/dist/decide/client.d.ts.map +1 -1
- package/dist/decide/client.js +124 -30
- package/dist/decide/client.js.map +1 -1
- package/dist/decide/credentials.d.ts +177 -17
- package/dist/decide/credentials.d.ts.map +1 -1
- package/dist/decide/credentials.js +505 -41
- package/dist/decide/credentials.js.map +1 -1
- package/dist/decide/index.d.ts +8 -8
- package/dist/decide/index.d.ts.map +1 -1
- package/dist/decide/index.js +8 -8
- package/dist/decide/index.js.map +1 -1
- package/dist/decide/jev-wire.d.ts +25 -19
- package/dist/decide/jev-wire.d.ts.map +1 -1
- package/dist/decide/jev-wire.js +56 -31
- package/dist/decide/jev-wire.js.map +1 -1
- package/dist/decide/operations.d.ts +63 -12
- package/dist/decide/operations.d.ts.map +1 -1
- package/dist/decide/operations.js +116 -58
- package/dist/decide/operations.js.map +1 -1
- package/dist/decide/provider-state.d.ts +85 -12
- package/dist/decide/provider-state.d.ts.map +1 -1
- package/dist/decide/provider-state.js +154 -21
- package/dist/decide/provider-state.js.map +1 -1
- package/dist/decide/provider.d.ts +5 -0
- package/dist/decide/provider.d.ts.map +1 -1
- package/dist/decide/provider.js.map +1 -1
- package/dist/decide/providers.d.ts +15 -2
- package/dist/decide/providers.d.ts.map +1 -1
- package/dist/decide/providers.js +22 -6
- package/dist/decide/providers.js.map +1 -1
- package/dist/decide/sites/registry.d.ts +22 -0
- package/dist/decide/sites/registry.d.ts.map +1 -1
- package/dist/decide/sites/registry.js +23 -0
- package/dist/decide/sites/registry.js.map +1 -1
- package/dist/decide/wizard.d.ts +12 -4
- package/dist/decide/wizard.d.ts.map +1 -1
- package/dist/decide/wizard.js +79 -26
- package/dist/decide/wizard.js.map +1 -1
- package/dist/dispatch/mvi-projection.d.ts +15 -2
- package/dist/dispatch/mvi-projection.d.ts.map +1 -1
- package/dist/dispatch/mvi-projection.js +73 -12
- package/dist/dispatch/mvi-projection.js.map +1 -1
- package/dist/docs/adr-allocator.d.ts +2 -2
- package/dist/docs/adr-allocator.d.ts.map +1 -1
- package/dist/docs/adr-allocator.js +17 -4
- package/dist/docs/adr-allocator.js.map +1 -1
- package/dist/docs/blob-consolidation.js +1 -1
- package/dist/docs/blob-consolidation.js.map +1 -1
- package/dist/docs/display-alias.d.ts +1 -1
- package/dist/docs/display-alias.d.ts.map +1 -1
- package/dist/docs/display-alias.js +7 -4
- package/dist/docs/display-alias.js.map +1 -1
- package/dist/docs/docs-inconsistency-detector.js +1 -1
- package/dist/docs/docs-inconsistency-detector.js.map +1 -1
- package/dist/docs/docs-update.d.ts.map +1 -1
- package/dist/docs/docs-update.js +6 -1
- package/dist/docs/docs-update.js.map +1 -1
- package/dist/docs/export-document.js +2928 -1053
- package/dist/docs/export-document.js.map +3 -3
- package/dist/docs/numbering.js +1 -1
- package/dist/docs/numbering.js.map +1 -1
- package/dist/docs/supersede.d.ts.map +1 -1
- package/dist/docs/supersede.js +6 -3
- package/dist/docs/supersede.js.map +1 -1
- package/dist/docs/version-ssot.js +1 -1
- package/dist/docs/version-ssot.js.map +1 -1
- package/dist/doctor/db-substrate.d.ts.map +1 -1
- package/dist/doctor/db-substrate.js +39 -24
- package/dist/doctor/db-substrate.js.map +1 -1
- package/dist/doctor/knowledge-summary.d.ts +10 -3
- package/dist/doctor/knowledge-summary.d.ts.map +1 -1
- package/dist/doctor/knowledge-summary.js +10 -3
- package/dist/doctor/knowledge-summary.js.map +1 -1
- package/dist/doctor/project-identity.d.ts +128 -37
- package/dist/doctor/project-identity.d.ts.map +1 -1
- package/dist/doctor/project-identity.js +476 -63
- package/dist/doctor/project-identity.js.map +1 -1
- package/dist/doctor/twin-collapse.d.ts +52 -2
- package/dist/doctor/twin-collapse.d.ts.map +1 -1
- package/dist/doctor/twin-collapse.js +108 -4
- package/dist/doctor/twin-collapse.js.map +1 -1
- package/dist/error-catalog.js +2 -2
- package/dist/error-catalog.js.map +1 -1
- package/dist/error-registry.js +1 -1
- package/dist/error-registry.js.map +1 -1
- package/dist/gateway-client/generated/types.gen.d.ts +22 -2
- package/dist/gateway-client/generated/types.gen.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +20 -11
- package/dist/init.js.map +1 -1
- package/dist/inject/index.d.ts.map +1 -1
- package/dist/inject/index.js +2 -3
- package/dist/inject/index.js.map +1 -1
- package/dist/internal.d.ts +5 -4
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +6 -4
- package/dist/internal.js.map +1 -1
- package/dist/llm/credential-remove-entry.d.ts +59 -0
- package/dist/llm/credential-remove-entry.d.ts.map +1 -0
- package/dist/llm/credential-remove-entry.js +101 -0
- package/dist/llm/credential-remove-entry.js.map +1 -0
- package/dist/llm/oauth/device-code.d.ts +26 -6
- package/dist/llm/oauth/device-code.d.ts.map +1 -1
- package/dist/llm/oauth/device-code.js +44 -12
- package/dist/llm/oauth/device-code.js.map +1 -1
- package/dist/llm/plugin-facade.js +3017 -1142
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/memory/attention.d.ts.map +1 -1
- package/dist/memory/attention.js +5 -3
- package/dist/memory/attention.js.map +1 -1
- package/dist/memory/decisions.d.ts +48 -3
- package/dist/memory/decisions.d.ts.map +1 -1
- package/dist/memory/decisions.js +98 -14
- package/dist/memory/decisions.js.map +1 -1
- package/dist/memory/learnings.d.ts +6 -6
- package/dist/memory/patterns.d.ts +4 -4
- package/dist/migration/manual/T10165-backfill-adr-index.d.ts.map +1 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js +5 -1
- package/dist/migration/manual/T10165-backfill-adr-index.js.map +1 -1
- package/dist/nexus/fleet-status.d.ts +83 -0
- package/dist/nexus/fleet-status.d.ts.map +1 -0
- package/dist/nexus/fleet-status.js +414 -0
- package/dist/nexus/fleet-status.js.map +1 -0
- package/dist/nexus/git-state.d.ts +15 -0
- package/dist/nexus/git-state.d.ts.map +1 -1
- package/dist/nexus/git-state.js +67 -2
- package/dist/nexus/git-state.js.map +1 -1
- package/dist/nexus/identity.d.ts.map +1 -1
- package/dist/nexus/identity.js +4 -0
- package/dist/nexus/identity.js.map +1 -1
- package/dist/nexus/index.d.ts +4 -1
- package/dist/nexus/index.d.ts.map +1 -1
- package/dist/nexus/index.js +7 -1
- package/dist/nexus/index.js.map +1 -1
- package/dist/nexus/migrate-json-to-sqlite.d.ts +3 -2
- package/dist/nexus/migrate-json-to-sqlite.d.ts.map +1 -1
- package/dist/nexus/migrate-json-to-sqlite.js +9 -17
- package/dist/nexus/migrate-json-to-sqlite.js.map +1 -1
- package/dist/nexus/ops.d.ts +1 -0
- package/dist/nexus/ops.d.ts.map +1 -1
- package/dist/nexus/project-activity.d.ts +104 -0
- package/dist/nexus/project-activity.d.ts.map +1 -0
- package/dist/nexus/project-activity.js +150 -0
- package/dist/nexus/project-activity.js.map +1 -0
- package/dist/nexus/query.d.ts +2 -2
- package/dist/nexus/query.d.ts.map +1 -1
- package/dist/nexus/query.js +4 -19
- package/dist/nexus/query.js.map +1 -1
- package/dist/nexus/registry-errors.d.ts +61 -0
- package/dist/nexus/registry-errors.d.ts.map +1 -0
- package/dist/nexus/registry-errors.js +85 -0
- package/dist/nexus/registry-errors.js.map +1 -0
- package/dist/nexus/registry.d.ts +30 -5
- package/dist/nexus/registry.d.ts.map +1 -1
- package/dist/nexus/registry.js +115 -70
- package/dist/nexus/registry.js.map +1 -1
- package/dist/orchestrate/pivot.d.ts +4 -0
- package/dist/orchestrate/pivot.d.ts.map +1 -1
- package/dist/orchestrate/pivot.js +75 -12
- package/dist/orchestrate/pivot.js.map +1 -1
- package/dist/orchestrate/query-ops.d.ts.map +1 -1
- package/dist/orchestrate/query-ops.js +29 -27
- package/dist/orchestrate/query-ops.js.map +1 -1
- package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
- package/dist/orchestrate/spawn-ops.js +29 -3
- package/dist/orchestrate/spawn-ops.js.map +1 -1
- package/dist/orchestration/bootstrap.d.ts.map +1 -1
- package/dist/orchestration/bootstrap.js +20 -14
- package/dist/orchestration/bootstrap.js.map +1 -1
- package/dist/orchestration/index.d.ts +15 -1
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +25 -6
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/lead-rollup.d.ts +7 -1
- package/dist/orchestration/lead-rollup.d.ts.map +1 -1
- package/dist/orchestration/lead-rollup.js +6 -3
- package/dist/orchestration/lead-rollup.js.map +1 -1
- package/dist/orchestration/spawn-prompt.js +1 -1
- package/dist/orchestration/spawn-prompt.js.map +1 -1
- package/dist/orchestration/waves.d.ts +21 -10
- package/dist/orchestration/waves.d.ts.map +1 -1
- package/dist/orchestration/waves.js +38 -35
- package/dist/orchestration/waves.js.map +1 -1
- package/dist/paths.d.ts +9 -2
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +30 -13
- package/dist/paths.js.map +1 -1
- package/dist/phases/index.d.ts +1 -1
- package/dist/phases/index.d.ts.map +1 -1
- package/dist/phases/index.js +3 -4
- package/dist/phases/index.js.map +1 -1
- package/dist/project-info.d.ts +40 -3
- package/dist/project-info.d.ts.map +1 -1
- package/dist/project-info.js +74 -6
- package/dist/project-info.js.map +1 -1
- package/dist/project-lifecycle.d.ts +28 -7
- package/dist/project-lifecycle.d.ts.map +1 -1
- package/dist/project-lifecycle.js +114 -47
- package/dist/project-lifecycle.js.map +1 -1
- package/dist/project-scope.d.ts +70 -3
- package/dist/project-scope.d.ts.map +1 -1
- package/dist/project-scope.js +154 -15
- package/dist/project-scope.js.map +1 -1
- package/dist/release/open.d.ts +12 -2
- package/dist/release/open.d.ts.map +1 -1
- package/dist/release/open.js +32 -3
- package/dist/release/open.js.map +1 -1
- package/dist/release/preflight-skip.d.ts +73 -0
- package/dist/release/preflight-skip.d.ts.map +1 -0
- package/dist/release/preflight-skip.js +254 -0
- package/dist/release/preflight-skip.js.map +1 -0
- package/dist/render/decide/index.d.ts +51 -0
- package/dist/render/decide/index.d.ts.map +1 -0
- package/dist/render/decide/index.js +289 -0
- package/dist/render/decide/index.js.map +1 -0
- package/dist/render/index.d.ts +1 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +1 -0
- package/dist/render/index.js.map +1 -1
- package/dist/render/nexus/graph/index.d.ts +5 -0
- package/dist/render/nexus/graph/index.d.ts.map +1 -1
- package/dist/render/nexus/graph/index.js +53 -0
- package/dist/render/nexus/graph/index.js.map +1 -1
- package/dist/scaffold/ensure-config.d.ts +14 -6
- package/dist/scaffold/ensure-config.d.ts.map +1 -1
- package/dist/scaffold/ensure-config.js +39 -17
- package/dist/scaffold/ensure-config.js.map +1 -1
- package/dist/scaffold/project-identity.d.ts +115 -23
- package/dist/scaffold/project-identity.d.ts.map +1 -1
- package/dist/scaffold/project-identity.js +196 -44
- package/dist/scaffold/project-identity.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +3027 -1152
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sentient/cross-project-hygiene.d.ts +12 -6
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +15 -10
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/session/engine-ops.d.ts +13 -4
- package/dist/session/engine-ops.d.ts.map +1 -1
- package/dist/session/engine-ops.js +38 -45
- package/dist/session/engine-ops.js.map +1 -1
- package/dist/sessions/briefing.d.ts +7 -3
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +10 -10
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/drift-watchdog.d.ts.map +1 -1
- package/dist/sessions/drift-watchdog.js +11 -19
- package/dist/sessions/drift-watchdog.js.map +1 -1
- package/dist/sessions/focus-state-store.d.ts +103 -26
- package/dist/sessions/focus-state-store.d.ts.map +1 -1
- package/dist/sessions/focus-state-store.js +166 -37
- package/dist/sessions/focus-state-store.js.map +1 -1
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +9 -18
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/sessions/index.d.ts +4 -2
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +35 -6
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/session-drift.d.ts.map +1 -1
- package/dist/sessions/session-drift.js +4 -2
- package/dist/sessions/session-drift.js.map +1 -1
- package/dist/sessions/session-view.d.ts +8 -1
- package/dist/sessions/session-view.d.ts.map +1 -1
- package/dist/sessions/session-view.js +9 -2
- package/dist/sessions/session-view.js.map +1 -1
- package/dist/setup/config-json-merge.d.ts.map +1 -1
- package/dist/setup/config-json-merge.js +1 -0
- package/dist/setup/config-json-merge.js.map +1 -1
- package/dist/setup/index.d.ts +4 -2
- package/dist/setup/index.d.ts.map +1 -1
- package/dist/setup/index.js +6 -2
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/sections/nexus-account.d.ts +32 -0
- package/dist/setup/sections/nexus-account.d.ts.map +1 -0
- package/dist/setup/sections/nexus-account.js +64 -0
- package/dist/setup/sections/nexus-account.js.map +1 -0
- package/dist/setup/wizard.d.ts +1 -1
- package/dist/setup/wizard.d.ts.map +1 -1
- package/dist/setup/wizard.js.map +1 -1
- package/dist/skills/orchestrator/startup.d.ts.map +1 -1
- package/dist/skills/orchestrator/startup.js +18 -31
- package/dist/skills/orchestrator/startup.js.map +1 -1
- package/dist/snapshot/index.d.ts.map +1 -1
- package/dist/snapshot/index.js +60 -53
- package/dist/snapshot/index.js.map +1 -1
- package/dist/spawn/agent-identity.d.ts +33 -1
- package/dist/spawn/agent-identity.d.ts.map +1 -1
- package/dist/spawn/agent-identity.js +53 -1
- package/dist/spawn/agent-identity.js.map +1 -1
- package/dist/spawn/index.d.ts +1 -1
- package/dist/spawn/index.d.ts.map +1 -1
- package/dist/spawn/index.js +1 -1
- package/dist/spawn/index.js.map +1 -1
- package/dist/stats/index.d.ts.map +1 -1
- package/dist/stats/index.js +3 -4
- package/dist/stats/index.js.map +1 -1
- package/dist/status/index.d.ts +12 -3
- package/dist/status/index.d.ts.map +1 -1
- package/dist/status/index.js +47 -5
- package/dist/status/index.js.map +1 -1
- package/dist/store/attachment-repair.d.ts.map +1 -1
- package/dist/store/attachment-repair.js +42 -3
- package/dist/store/attachment-repair.js.map +1 -1
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +30 -46
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/store/backup-recover-brain.d.ts +4 -0
- package/dist/store/backup-recover-brain.d.ts.map +1 -1
- package/dist/store/backup-recover-brain.js +2 -0
- package/dist/store/backup-recover-brain.js.map +1 -1
- package/dist/store/backup-recover.d.ts +9 -0
- package/dist/store/backup-recover.d.ts.map +1 -1
- package/dist/store/backup-recover.js +28 -1
- package/dist/store/backup-recover.js.map +1 -1
- package/dist/store/backup-sidecar.d.ts +30 -0
- package/dist/store/backup-sidecar.d.ts.map +1 -1
- package/dist/store/backup-sidecar.js +90 -2
- package/dist/store/backup-sidecar.js.map +1 -1
- package/dist/store/blob-keep.d.ts +135 -0
- package/dist/store/blob-keep.d.ts.map +1 -0
- package/dist/store/blob-keep.js +283 -0
- package/dist/store/blob-keep.js.map +1 -0
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/converters.js +11 -0
- package/dist/store/converters.js.map +1 -1
- package/dist/store/credential-transfer.d.ts +37 -5
- package/dist/store/credential-transfer.d.ts.map +1 -1
- package/dist/store/credential-transfer.js +73 -18
- package/dist/store/credential-transfer.js.map +1 -1
- package/dist/store/data-accessor.d.ts +1 -1
- package/dist/store/data-accessor.d.ts.map +1 -1
- package/dist/store/data-accessor.js.map +1 -1
- package/dist/store/db-helpers.d.ts +18 -0
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/db-helpers.js +46 -0
- package/dist/store/db-helpers.js.map +1 -1
- package/dist/store/exodus/on-open.d.ts.map +1 -1
- package/dist/store/exodus/on-open.js +35 -0
- package/dist/store/exodus/on-open.js.map +1 -1
- package/dist/store/exodus/runtime-targets.d.ts +3 -3
- package/dist/store/exodus/runtime-targets.js +3 -3
- package/dist/store/import-remap.d.ts +12 -1
- package/dist/store/import-remap.d.ts.map +1 -1
- package/dist/store/import-remap.js +14 -0
- package/dist/store/import-remap.js.map +1 -1
- package/dist/store/legacy-tasks-lineage.d.ts +3 -1
- package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
- package/dist/store/legacy-tasks-lineage.js +3 -1
- package/dist/store/legacy-tasks-lineage.js.map +1 -1
- package/dist/store/memory-accessor.js +1 -1
- package/dist/store/memory-accessor.js.map +1 -1
- package/dist/store/migration-manager.d.ts +61 -0
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +102 -4
- package/dist/store/migration-manager.js.map +1 -1
- package/dist/store/nexus-validation-schemas.d.ts +64 -0
- package/dist/store/nexus-validation-schemas.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.d.ts +8 -0
- package/dist/store/portable-bundle-import.d.ts.map +1 -1
- package/dist/store/portable-bundle-import.js +10 -0
- package/dist/store/portable-bundle-import.js.map +1 -1
- package/dist/store/portable-bundle-scan.d.ts.map +1 -1
- package/dist/store/portable-bundle-scan.js +1 -0
- package/dist/store/portable-bundle-scan.js.map +1 -1
- package/dist/store/portable-bundle.d.ts.map +1 -1
- package/dist/store/portable-bundle.js +15 -14
- package/dist/store/portable-bundle.js.map +1 -1
- package/dist/store/pre-repair-snapshot.d.ts +4 -1
- package/dist/store/pre-repair-snapshot.d.ts.map +1 -1
- package/dist/store/pre-repair-snapshot.js +5 -1
- package/dist/store/pre-repair-snapshot.js.map +1 -1
- package/dist/store/regenerators.d.ts +4 -2
- package/dist/store/regenerators.d.ts.map +1 -1
- package/dist/store/regenerators.js +7 -3
- package/dist/store/regenerators.js.map +1 -1
- package/dist/store/repair-malformed-dbs.d.ts +4 -0
- package/dist/store/repair-malformed-dbs.d.ts.map +1 -1
- package/dist/store/repair-malformed-dbs.js +3 -0
- package/dist/store/repair-malformed-dbs.js.map +1 -1
- package/dist/store/safety-data-accessor.d.ts +8 -3
- package/dist/store/safety-data-accessor.d.ts.map +1 -1
- package/dist/store/safety-data-accessor.js +11 -4
- package/dist/store/safety-data-accessor.js.map +1 -1
- package/dist/store/schema/cleo-global/nexus.d.ts +48 -0
- package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
- package/dist/store/schema/cleo-global/nexus.js +17 -0
- package/dist/store/schema/cleo-global/nexus.js.map +1 -1
- package/dist/store/schema/cleo-project/docs.d.ts +16 -0
- package/dist/store/schema/cleo-project/docs.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/docs.js +10 -0
- package/dist/store/schema/cleo-project/docs.js.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.d.ts +80 -0
- package/dist/store/schema/cleo-project/tasks-core.d.ts.map +1 -1
- package/dist/store/schema/cleo-project/tasks-core.js +25 -1
- package/dist/store/schema/cleo-project/tasks-core.js.map +1 -1
- package/dist/store/schema/cleo-shared/brain.d.ts +1 -1
- package/dist/store/schema/memory-schema.d.ts +1 -1
- package/dist/store/schema/nexus-schema.d.ts +48 -0
- package/dist/store/schema/nexus-schema.d.ts.map +1 -1
- package/dist/store/schema/nexus-schema.js +28 -7
- package/dist/store/schema/nexus-schema.js.map +1 -1
- package/dist/store/session-store.d.ts +65 -0
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +108 -7
- package/dist/store/session-store.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +245 -47
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/sqlite.d.ts +15 -3
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +52 -20
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/store-write-guard.d.ts +9 -3
- package/dist/store/store-write-guard.d.ts.map +1 -1
- package/dist/store/store-write-guard.js +25 -4
- package/dist/store/store-write-guard.js.map +1 -1
- package/dist/store/table-classification.d.ts +1 -1
- package/dist/store/table-classification.d.ts.map +1 -1
- package/dist/store/table-classification.js +34 -8
- package/dist/store/table-classification.js.map +1 -1
- package/dist/store/task-claim.d.ts +144 -0
- package/dist/store/task-claim.d.ts.map +1 -0
- package/dist/store/task-claim.js +195 -0
- package/dist/store/task-claim.js.map +1 -0
- package/dist/store/task-version.d.ts +43 -5
- package/dist/store/task-version.d.ts.map +1 -1
- package/dist/store/task-version.js +113 -17
- package/dist/store/task-version.js.map +1 -1
- package/dist/store/tasks-schema.d.ts +2 -0
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +1 -0
- package/dist/store/tasks-schema.js.map +1 -1
- package/dist/store/tasks-sqlite.js +1 -1
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/store/twin-collapse.d.ts +339 -22
- package/dist/store/twin-collapse.d.ts.map +1 -1
- package/dist/store/twin-collapse.js +1323 -48
- package/dist/store/twin-collapse.js.map +1 -1
- package/dist/store/umbrella-data-accessor.d.ts +8 -3
- package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
- package/dist/store/umbrella-data-accessor.js +10 -4
- package/dist/store/umbrella-data-accessor.js.map +1 -1
- package/dist/store/validation-schemas.d.ts +161 -1
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/store/with-retry.d.ts +36 -0
- package/dist/store/with-retry.d.ts.map +1 -1
- package/dist/store/with-retry.js +51 -0
- package/dist/store/with-retry.js.map +1 -1
- package/dist/store/worktree-build-guard.d.ts +13 -4
- package/dist/store/worktree-build-guard.d.ts.map +1 -1
- package/dist/store/worktree-build-guard.js +21 -10
- package/dist/store/worktree-build-guard.js.map +1 -1
- package/dist/store/worktree-isolation-guard.d.ts +121 -10
- package/dist/store/worktree-isolation-guard.d.ts.map +1 -1
- package/dist/store/worktree-isolation-guard.js +155 -34
- package/dist/store/worktree-isolation-guard.js.map +1 -1
- package/dist/system/backup.d.ts +7 -0
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +5 -0
- package/dist/system/backup.js.map +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +3 -1
- package/dist/system/health.js.map +1 -1
- package/dist/system/inject-generate.d.ts.map +1 -1
- package/dist/system/inject-generate.js +23 -10
- package/dist/system/inject-generate.js.map +1 -1
- package/dist/system/project-health.d.ts +8 -0
- package/dist/system/project-health.d.ts.map +1 -1
- package/dist/system/project-health.js +13 -5
- package/dist/system/project-health.js.map +1 -1
- package/dist/task-tools/index.d.ts +1 -1
- package/dist/task-tools/index.d.ts.map +1 -1
- package/dist/task-tools/index.js +1 -1
- package/dist/task-tools/index.js.map +1 -1
- package/dist/task-tools/score-task-priority.d.ts +38 -0
- package/dist/task-tools/score-task-priority.d.ts.map +1 -1
- package/dist/task-tools/score-task-priority.js +51 -0
- package/dist/task-tools/score-task-priority.js.map +1 -1
- package/dist/task-work/claims.d.ts +215 -0
- package/dist/task-work/claims.d.ts.map +1 -0
- package/dist/task-work/claims.js +272 -0
- package/dist/task-work/claims.js.map +1 -0
- package/dist/task-work/index.d.ts +47 -3
- package/dist/task-work/index.d.ts.map +1 -1
- package/dist/task-work/index.js +74 -41
- package/dist/task-work/index.js.map +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +3 -2
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/analyze.d.ts.map +1 -1
- package/dist/tasks/analyze.js +3 -4
- package/dist/tasks/analyze.js.map +1 -1
- package/dist/tasks/change-set.d.ts +5 -0
- package/dist/tasks/change-set.d.ts.map +1 -1
- package/dist/tasks/change-set.js +59 -3
- package/dist/tasks/change-set.js.map +1 -1
- package/dist/tasks/complete.d.ts +16 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +27 -7
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/component-pr.d.ts +162 -1
- package/dist/tasks/component-pr.d.ts.map +1 -1
- package/dist/tasks/component-pr.js +560 -59
- package/dist/tasks/component-pr.js.map +1 -1
- package/dist/tasks/done-record.d.ts +14 -1
- package/dist/tasks/done-record.d.ts.map +1 -1
- package/dist/tasks/done-record.js +37 -0
- package/dist/tasks/done-record.js.map +1 -1
- package/dist/tasks/duplicate-detector.d.ts +20 -1
- package/dist/tasks/duplicate-detector.d.ts.map +1 -1
- package/dist/tasks/duplicate-detector.js +10 -2
- package/dist/tasks/duplicate-detector.js.map +1 -1
- package/dist/tasks/engine-wrap-ops.d.ts +19 -10
- package/dist/tasks/engine-wrap-ops.d.ts.map +1 -1
- package/dist/tasks/engine-wrap-ops.js +38 -10
- package/dist/tasks/engine-wrap-ops.js.map +1 -1
- package/dist/tasks/graph-ops.d.ts +9 -2
- package/dist/tasks/graph-ops.d.ts.map +1 -1
- package/dist/tasks/graph-ops.js +24 -32
- package/dist/tasks/graph-ops.js.map +1 -1
- package/dist/tasks/plan.d.ts.map +1 -1
- package/dist/tasks/plan.js +16 -60
- package/dist/tasks/plan.js.map +1 -1
- package/dist/tasks/task-context.d.ts.map +1 -1
- package/dist/tasks/task-context.js +13 -0
- package/dist/tasks/task-context.js.map +1 -1
- package/dist/tasks/task-import.d.ts.map +1 -1
- package/dist/tasks/task-import.js +21 -12
- package/dist/tasks/task-import.js.map +1 -1
- package/dist/tasks/task-next.d.ts +25 -2
- package/dist/tasks/task-next.d.ts.map +1 -1
- package/dist/tasks/task-next.js +32 -13
- package/dist/tasks/task-next.js.map +1 -1
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +7 -5
- package/dist/tasks/update.js.map +1 -1
- package/dist/upgrade.d.ts +1 -1
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +48 -9
- package/dist/upgrade.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +20 -6
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +51 -8
- package/dist/validation/doctor/checks.js.map +1 -1
- package/dist/validation/validate-ops.d.ts.map +1 -1
- package/dist/validation/validate-ops.js +2 -3
- package/dist/validation/validate-ops.js.map +1 -1
- package/migrations/drizzle-cleo-global/20260929010000_t12512-registry-probed-opened/migration.sql +35 -0
- package/migrations/drizzle-cleo-global/20260929020000_t12721-git-state-head-committed-at/migration.sql +25 -0
- package/migrations/drizzle-cleo-project/20260929000000_t12535-docs-attachments-union-shape/migration.sql +21 -0
- package/migrations/drizzle-cleo-project/20260929120000_t12502-task-claim-leases/migration.sql +77 -0
- package/migrations/drizzle-cleo-project/20260929130000_t12736-claim-lease-iso-repair/migration.sql +37 -0
- package/package.json +23 -13
- package/schemas/project-info.schema.json +10 -4
- package/templates/CLEO-INJECTION.md +1 -1
- package/templates/CLEO-REFERENCE.md +3 -3
- package/templates/cleo-gitignore +11 -0
- package/templates/workflows/release-prepare.yml.tmpl +156 -10
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The System One benchmark runner (T12495): replay every labelled row through
|
|
3
|
+
* every compared provider with `decideBatch`, next to each site's heuristic,
|
|
4
|
+
* and score the answers.
|
|
5
|
+
*
|
|
6
|
+
* - Provider answer cache off (`cache: false` on every request) and the
|
|
7
|
+
* in-process outcome cache off, so every row is a real provider call.
|
|
8
|
+
* - One batch deadline of at least {@link MIN_BENCH_TIMEOUT_MS} (spec §1: the
|
|
9
|
+
* batch endpoint answers its items serially).
|
|
10
|
+
* - A hard total spend cap across all providers and runs, SEPARATE from the
|
|
11
|
+
* everyday monthly cap: before each batch the spend estimate (per
|
|
12
|
+
* question, the larger of {@link DECISION_COST_ESTIMATE_MICROS_PER_QUESTION}
|
|
13
|
+
* and the connection's observed mean reported cost) is added to what was
|
|
14
|
+
* spent so far, and the run stops cleanly when that would pass the cap.
|
|
15
|
+
* Billed answers the client rejected (`invalid_response`) count at their
|
|
16
|
+
* reported cost (else the estimate), so a model that keeps answering in
|
|
17
|
+
* the wrong shape is still capped. The monthly cap does not gate the benchmark
|
|
18
|
+
* (`spend: null` on the calls), but every batch's spend is still recorded
|
|
19
|
+
* in the monthly ledger so month-to-date spend stays true.
|
|
20
|
+
* - Providers take turns batch by batch, so a cap stop leaves them with the
|
|
21
|
+
* same coverage.
|
|
22
|
+
*
|
|
23
|
+
* @task T12495
|
|
24
|
+
* @epic T12486
|
|
25
|
+
*/
|
|
26
|
+
import { join } from 'node:path';
|
|
27
|
+
import { getCleoHome } from '@cleocode/paths';
|
|
28
|
+
import { hashCanonical } from '../cache.js';
|
|
29
|
+
import { DECISION_COST_ESTIMATE_MICROS_PER_QUESTION, decideBatch, redactDecisionState, } from '../client.js';
|
|
30
|
+
import { DECIDE_BENCH_DECISION_SITE } from '../sites/registry.js';
|
|
31
|
+
import { createFileSpendLedger } from '../spend.js';
|
|
32
|
+
import { benchDatasetSizes } from './dataset.js';
|
|
33
|
+
import { classificationMetrics, latencyOf, } from './metrics.js';
|
|
34
|
+
import { benchQuestionFor } from './questions.js';
|
|
35
|
+
import { spreadOf } from './stats.js';
|
|
36
|
+
import { BENCH_SITES, positiveLabel, } from './types.js';
|
|
37
|
+
/** Default hard spend cap across providers and runs: $5. */
|
|
38
|
+
export const DEFAULT_BENCH_MAX_MICROS = 5_000_000;
|
|
39
|
+
/** Minimum (and default) batch deadline, ms. */
|
|
40
|
+
export const MIN_BENCH_TIMEOUT_MS = 30_000;
|
|
41
|
+
/** Default rows per batch call. */
|
|
42
|
+
export const DEFAULT_BENCH_BATCH_SIZE = 16;
|
|
43
|
+
/** Largest batch the layahost batch endpoint accepts (64 requests). */
|
|
44
|
+
export const MAX_BENCH_BATCH_SIZE = 64;
|
|
45
|
+
/** Name of the heuristic pseudo-provider in results. */
|
|
46
|
+
export const HEURISTIC_PROVIDER = 'heuristic';
|
|
47
|
+
function newCollector() {
|
|
48
|
+
return {
|
|
49
|
+
attempted: 0,
|
|
50
|
+
predictions: [],
|
|
51
|
+
latencies: [],
|
|
52
|
+
costMicros: 0,
|
|
53
|
+
costReported: false,
|
|
54
|
+
fallbacks: {},
|
|
55
|
+
unusable: 0,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function finishCollector(site, c) {
|
|
59
|
+
return {
|
|
60
|
+
site,
|
|
61
|
+
...classificationMetrics(c.predictions, positiveLabel(site)),
|
|
62
|
+
attempted: c.attempted,
|
|
63
|
+
answered: c.predictions.length,
|
|
64
|
+
latency: latencyOf(c.latencies),
|
|
65
|
+
costMicros: c.costMicros,
|
|
66
|
+
costReported: c.costReported,
|
|
67
|
+
fallbacks: c.fallbacks,
|
|
68
|
+
unusable: c.unusable,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Estimated cost per question for the pre-batch cap check: the client's
|
|
73
|
+
* reservation estimate, or the connection's observed mean when a pricier
|
|
74
|
+
* model has reported more, so one batch cannot overshoot the cap by much.
|
|
75
|
+
*/
|
|
76
|
+
function perQuestionEstimate(seen) {
|
|
77
|
+
const mean = seen && seen.questions > 0 ? Math.ceil(seen.micros / seen.questions) : 0;
|
|
78
|
+
return Math.max(DECISION_COST_ESTIMATE_MICROS_PER_QUESTION, mean);
|
|
79
|
+
}
|
|
80
|
+
/** Provider-reported cost of an outcome in micros (`costMicros`, else `costUsd`). */
|
|
81
|
+
function reportedCostMicros(outcome) {
|
|
82
|
+
if (outcome.costMicros !== undefined)
|
|
83
|
+
return outcome.costMicros;
|
|
84
|
+
return outcome.costUsd !== undefined ? Math.round(outcome.costUsd * 1e6) : undefined;
|
|
85
|
+
}
|
|
86
|
+
/** A profile name made safe for a file name. */
|
|
87
|
+
function safeFileName(name) {
|
|
88
|
+
return name.replace(/[^A-Za-z0-9._-]/g, '_').slice(0, 64) || 'profile';
|
|
89
|
+
}
|
|
90
|
+
/** Split `items` into chunks of `size`. */
|
|
91
|
+
function chunks(items, size) {
|
|
92
|
+
const out = [];
|
|
93
|
+
for (let i = 0; i < items.length; i += size)
|
|
94
|
+
out.push(items.slice(i, i + size));
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
/** Audit key of a request, matching what `decide()` writes for it. */
|
|
98
|
+
function auditKey(q) {
|
|
99
|
+
return `${hashCanonical(q.req.questions)}:${hashCanonical(redactDecisionState(q.req.state))}`;
|
|
100
|
+
}
|
|
101
|
+
/** An in-memory audit sink that keeps fallback reasons by request key. */
|
|
102
|
+
function reasonSink() {
|
|
103
|
+
const reasons = new Map();
|
|
104
|
+
return {
|
|
105
|
+
sink: {
|
|
106
|
+
write(entry) {
|
|
107
|
+
if (entry.source !== 'fallback')
|
|
108
|
+
return;
|
|
109
|
+
const key = `${entry.questionsHash}:${entry.stateHash}`;
|
|
110
|
+
reasons.set(key, [...(reasons.get(key) ?? []), entry.fallbackReason ?? 'unknown']);
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
take: (key) => {
|
|
114
|
+
const list = reasons.get(key);
|
|
115
|
+
return list?.shift();
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/** Score the heuristic on every row (deterministic, no provider). */
|
|
120
|
+
function scoreHeuristic(sites, questions) {
|
|
121
|
+
return sites.map((site) => {
|
|
122
|
+
const c = newCollector();
|
|
123
|
+
for (const { row, q } of questions.get(site) ?? []) {
|
|
124
|
+
const started = performance.now();
|
|
125
|
+
const label = q.predict(q.heuristicAnswers) ?? q.heuristicLabel;
|
|
126
|
+
c.latencies.push(Math.max(0, performance.now() - started));
|
|
127
|
+
c.attempted++;
|
|
128
|
+
c.predictions.push({ gold: row.label, predicted: label });
|
|
129
|
+
}
|
|
130
|
+
return finishCollector(site, c);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/** Mean and spread per provider × site. */
|
|
134
|
+
function aggregate(heuristic, runs, providers, sites) {
|
|
135
|
+
const rows = [];
|
|
136
|
+
const build = (provider, site, results) => {
|
|
137
|
+
const fallbacks = {};
|
|
138
|
+
for (const r of results) {
|
|
139
|
+
for (const [k, v] of Object.entries(r.fallbacks))
|
|
140
|
+
fallbacks[k] = (fallbacks[k] ?? 0) + v;
|
|
141
|
+
}
|
|
142
|
+
const scored = results.filter((r) => r.answered > 0);
|
|
143
|
+
rows.push({
|
|
144
|
+
provider,
|
|
145
|
+
site,
|
|
146
|
+
answered: spreadOf(results.map((r) => r.answered)),
|
|
147
|
+
accuracy: spreadOf(scored.map((r) => r.accuracy)),
|
|
148
|
+
precision: spreadOf(scored.map((r) => r.precision)),
|
|
149
|
+
recall: spreadOf(scored.map((r) => r.recall)),
|
|
150
|
+
f1: spreadOf(scored.map((r) => r.f1)),
|
|
151
|
+
falsePositiveRate: spreadOf(scored.map((r) => r.falsePositiveRate)),
|
|
152
|
+
p50Ms: spreadOf(scored.map((r) => r.latency.p50Ms)),
|
|
153
|
+
p95Ms: spreadOf(scored.map((r) => r.latency.p95Ms)),
|
|
154
|
+
costMicros: spreadOf(results.map((r) => r.costMicros)),
|
|
155
|
+
fallbacks,
|
|
156
|
+
});
|
|
157
|
+
};
|
|
158
|
+
for (const site of sites) {
|
|
159
|
+
build(HEURISTIC_PROVIDER, site, heuristic.filter((h) => h.site === site));
|
|
160
|
+
for (const provider of providers) {
|
|
161
|
+
const results = runs.flatMap((run) => run.providers
|
|
162
|
+
.filter((p) => p.provider === provider)
|
|
163
|
+
.flatMap((p) => p.sites.filter((s) => s.site === site && s.attempted > 0)));
|
|
164
|
+
build(provider, site, results);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return rows;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Run the benchmark.
|
|
171
|
+
*
|
|
172
|
+
* Never throws because of a provider: failures become per-row fallbacks with
|
|
173
|
+
* their reason. Stops cleanly at the spend cap and reports what it completed.
|
|
174
|
+
*
|
|
175
|
+
* @param opts - Rows, connections, runs, cap and wiring.
|
|
176
|
+
* @returns The results.
|
|
177
|
+
*/
|
|
178
|
+
export async function runDecideBench(opts) {
|
|
179
|
+
const now = opts.now ?? (() => new Date());
|
|
180
|
+
const startedAt = now().toISOString();
|
|
181
|
+
const runs = Math.max(1, Math.floor(opts.runs ?? 1));
|
|
182
|
+
const capMicros = Math.max(0, opts.maxMicros ?? DEFAULT_BENCH_MAX_MICROS);
|
|
183
|
+
const batchSize = Math.min(MAX_BENCH_BATCH_SIZE, Math.max(1, Math.floor(opts.batchSize ?? DEFAULT_BENCH_BATCH_SIZE)));
|
|
184
|
+
const timeoutMs = Math.max(MIN_BENCH_TIMEOUT_MS, opts.timeoutMs ?? MIN_BENCH_TIMEOUT_MS);
|
|
185
|
+
const ledger = opts.spendLedger === undefined ? createFileSpendLedger() : opts.spendLedger;
|
|
186
|
+
const stateDir = opts.providerStateDir ?? join(getCleoHome(), 'decide', 'bench');
|
|
187
|
+
const sites = BENCH_SITES.filter((s) => opts.rows.some((r) => r.site === s));
|
|
188
|
+
const questions = new Map();
|
|
189
|
+
for (const row of opts.rows) {
|
|
190
|
+
questions.set(row.site, [
|
|
191
|
+
...(questions.get(row.site) ?? []),
|
|
192
|
+
{ row, q: benchQuestionFor(row) },
|
|
193
|
+
]);
|
|
194
|
+
}
|
|
195
|
+
const heuristic = scoreHeuristic(sites, questions);
|
|
196
|
+
const batchesPerRun = sites.reduce((n, s) => n + Math.ceil((questions.get(s)?.length ?? 0) / batchSize), 0);
|
|
197
|
+
let spentMicros = 0;
|
|
198
|
+
let reportedMicros = 0;
|
|
199
|
+
let batchesSent = 0;
|
|
200
|
+
let recordedInMonthlyLedger = true;
|
|
201
|
+
let stoppedAt;
|
|
202
|
+
const runRecords = [];
|
|
203
|
+
/** Reported cost per connection so far, for the pre-batch estimate. */
|
|
204
|
+
const observed = new Map();
|
|
205
|
+
runLoop: for (let run = 1; run <= runs; run++) {
|
|
206
|
+
const collectors = new Map();
|
|
207
|
+
for (const c of opts.connections) {
|
|
208
|
+
collectors.set(c.name, new Map(sites.map((s) => [s, newCollector()])));
|
|
209
|
+
}
|
|
210
|
+
const record = (complete) => ({
|
|
211
|
+
run,
|
|
212
|
+
complete,
|
|
213
|
+
providers: opts.connections.map((c) => ({
|
|
214
|
+
provider: c.name,
|
|
215
|
+
sites: sites.map((s) => finishCollector(s, collectors.get(c.name)?.get(s) ?? newCollector())),
|
|
216
|
+
})),
|
|
217
|
+
});
|
|
218
|
+
for (const site of sites) {
|
|
219
|
+
for (const [b, batch] of chunks(questions.get(site) ?? [], batchSize).entries()) {
|
|
220
|
+
for (const conn of opts.connections) {
|
|
221
|
+
const questionCount = batch.reduce((n, x) => n + Object.keys(x.q.req.questions).length, 0);
|
|
222
|
+
const estimate = questionCount * perQuestionEstimate(observed.get(conn.name));
|
|
223
|
+
if (spentMicros + estimate > capMicros) {
|
|
224
|
+
stoppedAt = { run, site, provider: conn.name, batch: b + 1, estimateMicros: estimate };
|
|
225
|
+
runRecords.push(record(false));
|
|
226
|
+
break runLoop;
|
|
227
|
+
}
|
|
228
|
+
const reasons = reasonSink();
|
|
229
|
+
const entries = batch.map(({ q }) => ({
|
|
230
|
+
req: q.req,
|
|
231
|
+
fallback: () => q.heuristicAnswers,
|
|
232
|
+
}));
|
|
233
|
+
const outcomes = await decideBatch(DECIDE_BENCH_DECISION_SITE.id, entries, {
|
|
234
|
+
connection: {
|
|
235
|
+
baseUrl: conn.baseUrl,
|
|
236
|
+
apiKey: conn.apiKey,
|
|
237
|
+
...(conn.model ? { model: conn.model } : {}),
|
|
238
|
+
},
|
|
239
|
+
timeoutMs,
|
|
240
|
+
cache: null,
|
|
241
|
+
budget: null,
|
|
242
|
+
spend: null,
|
|
243
|
+
audit: reasons.sink,
|
|
244
|
+
...(opts.fetch ? { fetch: opts.fetch } : {}),
|
|
245
|
+
providerStatePath: join(stateDir, `provider-state-${safeFileName(conn.name)}.json`),
|
|
246
|
+
});
|
|
247
|
+
batchesSent++;
|
|
248
|
+
const col = collectors.get(conn.name)?.get(site) ?? newCollector();
|
|
249
|
+
let batchSpend = 0;
|
|
250
|
+
const perQuestion = perQuestionEstimate(observed.get(conn.name));
|
|
251
|
+
const seen = observed.get(conn.name) ?? { micros: 0, questions: 0 };
|
|
252
|
+
for (const [i, { row, q }] of batch.entries()) {
|
|
253
|
+
const outcome = outcomes[i];
|
|
254
|
+
col.attempted++;
|
|
255
|
+
const questionsHere = Object.keys(q.req.questions).length;
|
|
256
|
+
const reported = outcome ? reportedCostMicros(outcome) : undefined;
|
|
257
|
+
if (reported !== undefined) {
|
|
258
|
+
col.costReported = true;
|
|
259
|
+
reportedMicros += reported;
|
|
260
|
+
seen.micros += reported;
|
|
261
|
+
seen.questions += questionsHere;
|
|
262
|
+
}
|
|
263
|
+
if (!outcome || outcome.source !== 'provider') {
|
|
264
|
+
const reason = reasons.take(auditKey(q)) ?? 'unknown';
|
|
265
|
+
col.fallbacks[reason] = (col.fallbacks[reason] ?? 0) + 1;
|
|
266
|
+
// Billed without a usable answer: a 2xx the client rejected
|
|
267
|
+
// (`invalid_response`, at its reported cost), or a call that
|
|
268
|
+
// timed out after send. Other failures are error responses,
|
|
269
|
+
// which the provider does not bill (layahost docs).
|
|
270
|
+
if (reason === 'invalid_response' || reason === 'timeout') {
|
|
271
|
+
batchSpend += reported ?? questionsHere * perQuestion;
|
|
272
|
+
}
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
batchSpend += reported ?? questionsHere * perQuestion;
|
|
276
|
+
col.latencies.push(outcome.latencyMs);
|
|
277
|
+
const predicted = q.predict(outcome.answers);
|
|
278
|
+
if (predicted === null) {
|
|
279
|
+
col.unusable++;
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
col.predictions.push({ gold: row.label, predicted });
|
|
283
|
+
}
|
|
284
|
+
observed.set(conn.name, seen);
|
|
285
|
+
col.costMicros += batchSpend;
|
|
286
|
+
spentMicros += batchSpend;
|
|
287
|
+
if (ledger && batchSpend > 0) {
|
|
288
|
+
try {
|
|
289
|
+
await ledger.record(batchSpend);
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
recordedInMonthlyLedger = false;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
runRecords.push(record(true));
|
|
299
|
+
}
|
|
300
|
+
const providerNames = opts.connections.map((c) => c.name);
|
|
301
|
+
return {
|
|
302
|
+
schemaVersion: 1,
|
|
303
|
+
task: 'T12495',
|
|
304
|
+
startedAt,
|
|
305
|
+
finishedAt: now().toISOString(),
|
|
306
|
+
config: {
|
|
307
|
+
runs,
|
|
308
|
+
batchSize,
|
|
309
|
+
timeoutMs,
|
|
310
|
+
maxMicros: capMicros,
|
|
311
|
+
sites,
|
|
312
|
+
providers: opts.connections.map((c) => ({
|
|
313
|
+
name: c.name,
|
|
314
|
+
provider: c.provider,
|
|
315
|
+
baseUrl: c.baseUrl,
|
|
316
|
+
...(c.model ? { model: c.model } : {}),
|
|
317
|
+
})),
|
|
318
|
+
},
|
|
319
|
+
dataset: benchDatasetSizes(opts.rows),
|
|
320
|
+
heuristic,
|
|
321
|
+
runs: runRecords,
|
|
322
|
+
aggregate: aggregate(heuristic, runRecords, providerNames, sites),
|
|
323
|
+
spend: {
|
|
324
|
+
capMicros,
|
|
325
|
+
spentMicros,
|
|
326
|
+
reportedMicros,
|
|
327
|
+
capReached: stoppedAt !== undefined,
|
|
328
|
+
...(stoppedAt ? { stoppedAt } : {}),
|
|
329
|
+
batchesSent,
|
|
330
|
+
batchesPlanned: batchesPerRun * runs * opts.connections.length,
|
|
331
|
+
recordedInMonthlyLedger,
|
|
332
|
+
},
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/decide/bench/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The store-backed {@link BenchSource}: reads tasks through the task data
|
|
3
|
+
* accessor and observations and decisions through the brain accessor — the
|
|
4
|
+
* core accessors only, never raw SQL on `.cleo/*.db` (T12495).
|
|
5
|
+
*
|
|
6
|
+
* @task T12495
|
|
7
|
+
* @epic T12486
|
|
8
|
+
*/
|
|
9
|
+
import type { BenchSource } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* A {@link BenchSource} over the project's stores.
|
|
12
|
+
*
|
|
13
|
+
* Tasks include every status (cancelled and archived too); observations and
|
|
14
|
+
* decisions include history (invalidated and superseded rows), because the
|
|
15
|
+
* labels come from exactly those records.
|
|
16
|
+
*
|
|
17
|
+
* @param projectRoot - Project root whose stores are read.
|
|
18
|
+
* @returns The source; each method opens its accessor lazily.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createStoreBenchSource(projectRoot: string): BenchSource;
|
|
21
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/decide/bench/source.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAGV,WAAW,EAEZ,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CA8CvE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The store-backed {@link BenchSource}: reads tasks through the task data
|
|
3
|
+
* accessor and observations and decisions through the brain accessor — the
|
|
4
|
+
* core accessors only, never raw SQL on `.cleo/*.db` (T12495).
|
|
5
|
+
*
|
|
6
|
+
* @task T12495
|
|
7
|
+
* @epic T12486
|
|
8
|
+
*/
|
|
9
|
+
import { TASK_STATUSES } from '@cleocode/contracts';
|
|
10
|
+
/**
|
|
11
|
+
* A {@link BenchSource} over the project's stores.
|
|
12
|
+
*
|
|
13
|
+
* Tasks include every status (cancelled and archived too); observations and
|
|
14
|
+
* decisions include history (invalidated and superseded rows), because the
|
|
15
|
+
* labels come from exactly those records.
|
|
16
|
+
*
|
|
17
|
+
* @param projectRoot - Project root whose stores are read.
|
|
18
|
+
* @returns The source; each method opens its accessor lazily.
|
|
19
|
+
*/
|
|
20
|
+
export function createStoreBenchSource(projectRoot) {
|
|
21
|
+
return {
|
|
22
|
+
async tasks() {
|
|
23
|
+
const { getTaskAccessor } = await import('../../store/data-accessor.js');
|
|
24
|
+
const accessor = await getTaskAccessor(projectRoot);
|
|
25
|
+
const { tasks } = await accessor.queryTasks({ status: [...TASK_STATUSES] });
|
|
26
|
+
return tasks.map((t) => ({
|
|
27
|
+
id: t.id,
|
|
28
|
+
title: t.title ?? '',
|
|
29
|
+
description: t.description ?? '',
|
|
30
|
+
status: t.status,
|
|
31
|
+
parentId: t.parentId ?? null,
|
|
32
|
+
...(t.cancellationReason ? { cancellationReason: t.cancellationReason } : {}),
|
|
33
|
+
notes: t.notes ?? [],
|
|
34
|
+
relates: (t.relates ?? []).map((r) => ({
|
|
35
|
+
taskId: r.taskId,
|
|
36
|
+
type: r.type,
|
|
37
|
+
...(r.reason ? { reason: r.reason } : {}),
|
|
38
|
+
})),
|
|
39
|
+
}));
|
|
40
|
+
},
|
|
41
|
+
async observations() {
|
|
42
|
+
const { getBrainAccessor } = await import('../../store/memory-accessor.js');
|
|
43
|
+
const accessor = await getBrainAccessor(projectRoot);
|
|
44
|
+
const rows = await accessor.findObservations({ includeHistory: true });
|
|
45
|
+
return rows.map((o) => ({
|
|
46
|
+
id: o.id,
|
|
47
|
+
type: o.type,
|
|
48
|
+
title: o.title,
|
|
49
|
+
narrative: o.narrative ?? '',
|
|
50
|
+
}));
|
|
51
|
+
},
|
|
52
|
+
async decisions() {
|
|
53
|
+
const { getBrainAccessor } = await import('../../store/memory-accessor.js');
|
|
54
|
+
const accessor = await getBrainAccessor(projectRoot);
|
|
55
|
+
const rows = await accessor.findDecisions({ includeHistory: true });
|
|
56
|
+
return rows.map((d) => ({
|
|
57
|
+
id: d.id,
|
|
58
|
+
type: d.type,
|
|
59
|
+
decision: d.decision,
|
|
60
|
+
rationale: d.rationale,
|
|
61
|
+
supersedes: d.supersedes ?? null,
|
|
62
|
+
supersededBy: d.supersededBy ?? null,
|
|
63
|
+
}));
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/decide/bench/source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owner spot-check for the System One benchmark dataset (T12495).
|
|
3
|
+
*
|
|
4
|
+
* Before any spend, a small random sample stratified by site and label is
|
|
5
|
+
* written to a file. The orchestrator shows each item to the owner through
|
|
6
|
+
* the ask tool (the item carries the proposed label and the allowed labels
|
|
7
|
+
* as ready-made options) and writes the answers to a corrections file.
|
|
8
|
+
* {@link applyBenchCorrections} then relabels (or drops) those rows and marks
|
|
9
|
+
* them owner-verified. Both steps are offline: no provider is contacted.
|
|
10
|
+
*
|
|
11
|
+
* @task T12495
|
|
12
|
+
* @epic T12486
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { type BenchRow } from './types.js';
|
|
16
|
+
/** Default spot-check sample size. */
|
|
17
|
+
export declare const DEFAULT_SPOT_CHECK_SIZE = 30;
|
|
18
|
+
/** One item the owner reviews. */
|
|
19
|
+
export interface BenchSpotCheckItem {
|
|
20
|
+
/** Dataset row id (the key a correction names). */
|
|
21
|
+
readonly id: string;
|
|
22
|
+
/** Site. */
|
|
23
|
+
readonly site: BenchRow['site'];
|
|
24
|
+
/** The label the builder proposed. */
|
|
25
|
+
readonly proposedLabel: string;
|
|
26
|
+
/** Labels the owner may choose from (the proposed one first). */
|
|
27
|
+
readonly options: readonly string[];
|
|
28
|
+
/** Short, redacted summary of what is being labelled. */
|
|
29
|
+
readonly summary: string;
|
|
30
|
+
/** Why the builder proposed the label. */
|
|
31
|
+
readonly provenance: BenchRow['provenance'];
|
|
32
|
+
/** Already verified by the owner in an earlier round. */
|
|
33
|
+
readonly ownerVerified: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** The spot-check file. */
|
|
36
|
+
export interface BenchSpotCheckFile {
|
|
37
|
+
/** Format version. */
|
|
38
|
+
readonly schemaVersion: 1;
|
|
39
|
+
/** ISO time the sample was drawn. */
|
|
40
|
+
readonly generatedAt: string;
|
|
41
|
+
/** Seed the sample was drawn with. */
|
|
42
|
+
readonly seed: number;
|
|
43
|
+
/** How to answer. */
|
|
44
|
+
readonly instructions: string;
|
|
45
|
+
/** Sampled items. */
|
|
46
|
+
readonly items: readonly BenchSpotCheckItem[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Draw a random sample stratified by site and label.
|
|
50
|
+
*
|
|
51
|
+
* @param rows - Dataset rows.
|
|
52
|
+
* @param opts - Sample size (default {@link DEFAULT_SPOT_CHECK_SIZE}) and seed.
|
|
53
|
+
* @returns The spot-check file contents.
|
|
54
|
+
*/
|
|
55
|
+
export declare function sampleBenchSpotCheck(rows: readonly BenchRow[], opts?: {
|
|
56
|
+
readonly size?: number;
|
|
57
|
+
readonly seed?: number;
|
|
58
|
+
readonly now?: Date;
|
|
59
|
+
}): BenchSpotCheckFile;
|
|
60
|
+
/** Zod schema of one correction. */
|
|
61
|
+
declare const correctionSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
62
|
+
id: z.ZodString;
|
|
63
|
+
label: z.ZodString;
|
|
64
|
+
note: z.ZodOptional<z.ZodString>;
|
|
65
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
66
|
+
id: z.ZodString;
|
|
67
|
+
drop: z.ZodLiteral<true>;
|
|
68
|
+
note: z.ZodOptional<z.ZodString>;
|
|
69
|
+
}, z.core.$strip>]>;
|
|
70
|
+
/** One owner answer: a label for a row, or a drop. */
|
|
71
|
+
export type BenchCorrection = z.infer<typeof correctionSchema>;
|
|
72
|
+
/** Outcome of {@link applyBenchCorrections}. */
|
|
73
|
+
export interface BenchCorrectionsReceipt {
|
|
74
|
+
/** Rows confirmed with the proposed label. */
|
|
75
|
+
readonly confirmed: number;
|
|
76
|
+
/** Rows relabelled. */
|
|
77
|
+
readonly relabelled: number;
|
|
78
|
+
/** Rows removed. */
|
|
79
|
+
readonly dropped: number;
|
|
80
|
+
/** Correction ids that matched no row. */
|
|
81
|
+
readonly unmatched: readonly string[];
|
|
82
|
+
/** Corrections whose label is not allowed for the row's site (not applied). */
|
|
83
|
+
readonly rejected: readonly {
|
|
84
|
+
readonly id: string;
|
|
85
|
+
readonly label: string;
|
|
86
|
+
}[];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Parse a corrections file.
|
|
90
|
+
*
|
|
91
|
+
* @param text - File contents (JSON).
|
|
92
|
+
* @returns The corrections.
|
|
93
|
+
* @throws Error when the JSON or its shape is invalid.
|
|
94
|
+
*/
|
|
95
|
+
export declare function parseBenchCorrections(text: string): BenchCorrection[];
|
|
96
|
+
/**
|
|
97
|
+
* Read and parse a corrections file.
|
|
98
|
+
*
|
|
99
|
+
* @param path - Corrections file.
|
|
100
|
+
* @returns The corrections.
|
|
101
|
+
*/
|
|
102
|
+
export declare function readBenchCorrections(path: string): Promise<BenchCorrection[]>;
|
|
103
|
+
/**
|
|
104
|
+
* Apply owner corrections: relabel or drop the named rows and mark every
|
|
105
|
+
* corrected (or confirmed) row owner-verified. A relabelled row keeps its
|
|
106
|
+
* original label in `correctedFrom`.
|
|
107
|
+
*
|
|
108
|
+
* @param rows - Dataset rows.
|
|
109
|
+
* @param corrections - Owner answers.
|
|
110
|
+
* @returns The new rows and a receipt.
|
|
111
|
+
*/
|
|
112
|
+
export declare function applyBenchCorrections(rows: readonly BenchRow[], corrections: readonly BenchCorrection[]): {
|
|
113
|
+
rows: BenchRow[];
|
|
114
|
+
receipt: BenchCorrectionsReceipt;
|
|
115
|
+
};
|
|
116
|
+
export {};
|
|
117
|
+
//# sourceMappingURL=spot-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spot-check.d.ts","sourceRoot":"","sources":["../../../src/decide/bench/spot-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAE1D,sCAAsC;AACtC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAK1C,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,sCAAsC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC5C,yDAAyD;IACzD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,2BAA2B;AAC3B,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qBAAqB;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC/C;AAyDD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,IAAI,GAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GACjF,kBAAkB,CAoCpB;AAED,oCAAoC;AACpC,QAAA,MAAM,gBAAgB;;;;;;;;mBAOpB,CAAC;AAQH,sDAAsD;AACtD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,gDAAgD;AAChD,MAAM,WAAW,uBAAuB;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uBAAuB;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAYrE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAEnF;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,WAAW,EAAE,SAAS,eAAe,EAAE,GACtC;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,OAAO,EAAE,uBAAuB,CAAA;CAAE,CAiDxD"}
|