agentera 3.0.0-dev.4 → 3.0.0-dev.46
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/LICENSE +201 -0
- package/README.md +108 -22
- package/bundle/.agentera-npx-bundle.json +1 -1
- package/bundle/CHANGELOG.md +1351 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +143 -0
- package/bundle/UPGRADE.md +236 -0
- package/bundle/extract-corpus-parity.json +21 -0
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +437 -0
- package/bundle/references/adapters/package-registry.yaml +434 -189
- package/bundle/references/adapters/package-surface-characterization.md +66 -35
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
- package/bundle/references/analysis/verification-policy.yaml +191 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
- package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
- package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
- package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
- package/bundle/references/cli/routing-model.md +155 -0
- package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
- package/bundle/references/cli/update-channels.yaml +35 -2
- package/bundle/references/cli/vocabulary-index.yaml +23 -20
- package/bundle/references/cli/vocabulary.md +337 -366
- package/bundle/references/meta/retained-reference-authority.yaml +151 -0
- package/bundle/registry.json +14 -14
- package/bundle/skills/agentera/SKILL.md +218 -408
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
- package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
- package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
- package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
- package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
- package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
- package/bundle/skills/agentera/protocol.yaml +31 -31
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
- package/dist/analytics/extractCorpus/cli.js +190 -0
- package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
- package/dist/analytics/extractCorpus/core.js +392 -0
- package/dist/analytics/extractCorpus/corpus.js +167 -0
- package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
- package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
- package/dist/analytics/extractCorpus/index.js +14 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
- package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +2 -1791
- package/dist/analytics/glossaryAdviceResolution.js +166 -0
- package/dist/analytics/glossaryInputAcquisition.js +319 -0
- package/dist/analytics/personalGlossaryAdmission.js +133 -0
- package/dist/analytics/personalGlossaryProfile.js +219 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +169 -42
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -0
- package/dist/capabilities/build/instructions.js +56 -0
- package/dist/capabilities/design/instructions.js +4 -0
- package/dist/capabilities/discuss/instructions.js +29 -0
- package/dist/capabilities/document/instructions.js +11 -0
- package/dist/capabilities/index.js +40 -0
- package/dist/capabilities/optimize/instructions.js +14 -0
- package/dist/capabilities/orchestrate/instructions.js +40 -0
- package/dist/capabilities/plan/instructions.js +32 -0
- package/dist/capabilities/profile/instructions.js +70 -0
- package/dist/capabilities/research/instructions.js +5 -0
- package/dist/capabilities/status/instructions.js +11 -0
- package/dist/capabilities/status/startupInstructions.js +34 -0
- package/dist/capabilities/vision/instructions.js +4 -0
- package/dist/cli/appContext.js +30 -24
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +565 -0
- package/dist/cli/capabilityContext/bespoke.js +44 -0
- package/dist/cli/capabilityContext/build.js +242 -0
- package/dist/cli/capabilityContext/closeout.js +233 -0
- package/dist/cli/capabilityContext/contract.js +179 -0
- package/dist/cli/capabilityContext/evidence.js +463 -0
- package/dist/cli/capabilityContext/index.js +3 -0
- package/dist/cli/capabilityContext/orchestration.js +131 -0
- package/dist/cli/capabilityContext/planState.js +260 -0
- package/dist/cli/capabilityContext/progress.js +142 -0
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +83 -0
- package/dist/cli/capabilityContext/slim.js +152 -0
- package/dist/cli/capabilityContext/startup.js +150 -0
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +56 -0
- package/dist/cli/capabilityContext.js +1 -2421
- package/dist/cli/commands/appHome.js +22 -0
- package/dist/cli/commands/capability.js +5 -12
- package/dist/cli/commands/compact.js +41 -13
- package/dist/cli/commands/doctor.js +127 -97
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +26 -44
- package/dist/cli/commands/personalGlossary.js +176 -0
- package/dist/cli/commands/prime/briefOrientation.js +747 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +190 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
- package/dist/cli/commands/prime/collectOrientationState.js +212 -0
- package/dist/cli/commands/prime/orientationOutput.js +397 -0
- package/dist/cli/commands/prime/types.js +1 -0
- package/dist/cli/commands/prime/v1Migration.js +38 -0
- package/dist/cli/commands/prime.js +80 -558
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +78 -53
- package/dist/cli/commands/report.js +96 -25
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +266 -143
- package/dist/cli/commands/state/decisions.js +387 -0
- package/dist/cli/commands/state/docs.js +70 -0
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +14 -0
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +14 -0
- package/dist/cli/commands/state/index.js +16 -0
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +25 -0
- package/dist/cli/commands/state/plan.js +14 -0
- package/dist/cli/commands/state/planTasks.js +154 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/progress.js +13 -0
- package/dist/cli/commands/state/shared.js +14 -0
- package/dist/cli/commands/state/todo.js +42 -0
- package/dist/cli/commands/state/write.js +434 -0
- package/dist/cli/commands/upgrade.js +146 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +272 -213
- package/dist/cli/commands/verify.js +24 -9
- package/dist/cli/contracts/bundleStatus.js +1 -0
- package/dist/cli/contracts/orientationState.js +1 -0
- package/dist/cli/dispatch/argvParser.js +32 -0
- package/dist/cli/dispatch/check.js +372 -0
- package/dist/cli/dispatch/commands.js +27 -0
- package/dist/cli/dispatch/index.js +207 -0
- package/dist/cli/dispatch/lifecycle.js +652 -0
- package/dist/cli/dispatch/prime.js +139 -0
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +63 -0
- package/dist/cli/dispatch/state.js +140 -0
- package/dist/cli/dispatch.js +1 -996
- package/dist/cli/errors.js +52 -0
- package/dist/cli/help.js +390 -43
- package/dist/cli/migrationRequired.js +87 -0
- package/dist/cli/orientation/attention.js +59 -0
- package/dist/cli/orientation/corpusCoverage.js +102 -0
- package/dist/cli/orientation.js +444 -173
- package/dist/cli/planArtifacts.js +350 -0
- package/dist/cli/planEvidence.js +157 -0
- package/dist/cli/planLifecycleState.js +36 -0
- package/dist/cli/planTaskIndex.js +11 -0
- package/dist/cli/preCutoverCommand.js +32 -0
- package/dist/cli/prime-blob.js +71 -3
- package/dist/cli/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +59 -0
- package/dist/cli/stateQuery.js +63 -14
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +46 -0
- package/dist/cli/todoReadinessSelection.js +192 -0
- package/dist/cli/todoSeverity.js +18 -0
- package/dist/core/atomicWriter.js +20 -0
- package/dist/core/developmentChannel.js +1 -0
- package/dist/core/developmentInvocation.js +374 -0
- package/dist/core/difflib.js +0 -1
- package/dist/core/envPaths.js +20 -0
- package/dist/core/jsonValue.js +5 -0
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +67 -3
- package/dist/core/shell.js +4 -0
- package/dist/core/skillIdentity.js +23 -0
- package/dist/core/sourceRoot.js +9 -12
- package/dist/core/text.js +10 -0
- package/dist/core/toml.js +0 -1
- package/dist/core/yaml.js +8 -1
- package/dist/eval/evalSkills.js +30 -26
- package/dist/eval/hybridRouteEvaluation.js +155 -0
- package/dist/eval/semanticEval.js +43 -20
- package/dist/eval/semanticFixtures.js +16 -5
- package/dist/hooks/common.js +11 -81
- package/dist/hooks/compaction/apply.js +446 -0
- package/dist/hooks/compaction/dryRun.js +184 -0
- package/dist/hooks/compaction/index.js +22 -0
- package/dist/hooks/compaction/parse.js +325 -0
- package/dist/hooks/compaction/retention.js +202 -0
- package/dist/hooks/compaction/status.js +360 -0
- package/dist/hooks/compaction/types.js +5 -0
- package/dist/hooks/validateArtifact/agentFacing.js +9 -0
- package/dist/hooks/validateArtifact/index.js +92 -0
- package/dist/hooks/validateArtifact/markdown.js +145 -0
- package/dist/hooks/validateArtifact/schema.js +546 -0
- package/dist/hooks/validateArtifact/traversal.js +107 -0
- package/dist/hooks/validateArtifact/violations.js +107 -0
- package/dist/migrate/v2HandoffManifest.js +452 -0
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +106 -0
- package/dist/registries/artifactProtocolIds.js +78 -0
- package/dist/registries/artifactRegistry.js +224 -63
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +141 -13
- package/dist/registries/evaluatorHandoffContract.js +170 -0
- package/dist/registries/evidenceTierContract.js +371 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryCaveatContract.js +67 -0
- package/dist/registries/glossaryConsumerContractValidation.js +787 -0
- package/dist/registries/glossaryEntryContract.js +757 -0
- package/dist/registries/glossaryTermIdentity.js +17 -0
- package/dist/registries/glossaryTermOccurrence.js +20 -0
- package/dist/registries/hybridRoute.js +274 -0
- package/dist/registries/hybridRouteReceipt.js +221 -0
- package/dist/registries/packagePublication.js +229 -0
- package/dist/registries/packageRegistry.js +187 -211
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +174 -0
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +385 -0
- package/dist/runtime/lifecycleAdapterContract.js +457 -0
- package/dist/runtime/lifecycleAdapters.js +777 -0
- package/dist/runtime/lifecycleAuthority.js +453 -0
- package/dist/runtime/lifecycleOperationContract.js +123 -0
- package/dist/runtime/lifecycleOperations.js +634 -0
- package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
- package/dist/runtime/lifecyclePublication.js +415 -0
- package/dist/runtime/lifecycleSnapshot.js +438 -0
- package/dist/runtime/nativeResourceCleanup.js +502 -0
- package/dist/setup/opencode.js +20 -0
- package/dist/setup/opencodeConstants.js +1 -0
- package/dist/setup/sharedSkill.js +45 -0
- package/dist/setup/smokeChecks.js +21 -82
- package/dist/state/archiveDiscovery.js +580 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archiveRecovery.js +237 -0
- package/dist/state/archiveReplay.js +53 -0
- package/dist/state/canonicalMigrationRecord.js +36 -0
- package/dist/state/changelog.js +221 -0
- package/dist/state/decisionEntities.js +367 -0
- package/dist/state/decisionLegacyValidation.js +215 -0
- package/dist/state/decisionMigrationProvenance.js +199 -0
- package/dist/state/decisionOverlay.js +254 -0
- package/dist/state/decisionRevision.js +256 -0
- package/dist/state/decisionRevisionMigration.js +89 -0
- package/dist/state/directRetrieval.js +323 -0
- package/dist/state/durability.js +324 -0
- package/dist/state/entityCutover.js +459 -0
- package/dist/state/entityCutoverGit.js +127 -0
- package/dist/state/entityGlossaryAuthority.js +13 -0
- package/dist/state/entityListProjection.js +187 -0
- package/dist/state/entityListRuntimeRegistry.js +85 -0
- package/dist/state/entityMigrationCausality.js +97 -0
- package/dist/state/entityMigrationIdentity.js +5 -0
- package/dist/state/entityMigrationPreview.js +846 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +806 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +896 -0
- package/dist/state/exactReplacementRecovery.js +18 -0
- package/dist/state/experimentArchive.js +63 -0
- package/dist/state/experimentIdentity.js +202 -0
- package/dist/state/healthEntities.js +262 -0
- package/dist/state/healthEntityValidation.js +18 -0
- package/dist/state/healthRepair.js +69 -0
- package/dist/state/installRoot.js +64 -25
- package/dist/state/legacyEntityCutoverEvidence.js +65 -0
- package/dist/state/legacyIdentity.js +47 -0
- package/dist/state/legacySummaryRecord.js +6 -0
- package/dist/state/listAccounting.js +54 -0
- package/dist/state/listClassification.js +17 -0
- package/dist/state/listCursor.js +42 -0
- package/dist/state/listRetrieval.js +781 -0
- package/dist/state/migrationSourceBinding.js +30 -0
- package/dist/state/objectiveExperimentEntities.js +322 -0
- package/dist/state/planEntities.js +530 -0
- package/dist/state/planIdentity.js +47 -0
- package/dist/state/planRetrieval.js +313 -0
- package/dist/state/planTaskRetrieval.js +294 -0
- package/dist/state/progressEntities.js +512 -0
- package/dist/state/progressGlossaryCaveat.js +168 -0
- package/dist/state/progressPublicationOrder.js +19 -0
- package/dist/state/projectRoot.js +62 -0
- package/dist/state/projectionPolicy.js +190 -0
- package/dist/state/retrievalAuthority.js +156 -0
- package/dist/state/safeProjectFile.js +155 -0
- package/dist/state/startupAnalysis/benchmark.js +432 -0
- package/dist/state/startupAnalysis/contract.js +160 -0
- package/dist/state/startupAnalysis/helpers.js +286 -0
- package/dist/state/startupAnalysis/index.js +6 -0
- package/dist/state/startupAnalysis/metrics.js +340 -0
- package/dist/state/startupAnalysis/records.js +198 -0
- package/dist/state/startupAnalysis/report.js +111 -0
- package/dist/state/startupAnalysis/threshold.js +512 -0
- package/dist/state/startupAnalysis.js +2 -1953
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +85 -0
- package/dist/state/stateStorageAuthority.js +47 -0
- package/dist/state/summaryEntityRead.js +25 -0
- package/dist/state/summaryMigrationProvenance.js +66 -0
- package/dist/state/summarySourceRowAuthority.js +36 -0
- package/dist/state/todoDocsEntities.js +1064 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +132 -0
- package/dist/state/todoReconciliationInspection.js +173 -0
- package/dist/state/todoReconciliationRepair.js +170 -0
- package/dist/state/todoReconciliationTransaction.js +582 -0
- package/dist/state/write/assign.js +20 -0
- package/dist/state/write/candidateMutation.js +269 -0
- package/dist/state/write/errors.js +11 -0
- package/dist/state/write/experimentPublication.js +192 -0
- package/dist/state/write/explain.js +332 -0
- package/dist/state/write/fields.js +61 -0
- package/dist/state/write/glossaryPublication.js +263 -0
- package/dist/state/write/grammar.js +280 -0
- package/dist/state/write/helpers.js +29 -0
- package/dist/state/write/index.js +12 -0
- package/dist/state/write/input.js +367 -0
- package/dist/state/write/lock.js +837 -0
- package/dist/state/write/mutation.js +234 -0
- package/dist/state/write/operations.js +169 -0
- package/dist/state/write/planEvaluation.js +128 -0
- package/dist/state/write/planPublication.js +179 -0
- package/dist/state/write/runtimeOperations.js +142 -0
- package/dist/state/write/serialize.js +1 -0
- package/dist/state/write/transaction.js +52 -0
- package/dist/state/write/validate.js +7 -0
- package/dist/upgrade/appContentRefresh.js +383 -0
- package/dist/upgrade/appModel.js +8 -7
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +33 -0
- package/dist/upgrade/channels.js +12 -8
- package/dist/upgrade/compatibility.js +56 -21
- package/dist/upgrade/doctor.js +197 -192
- package/dist/upgrade/doctorClassifier.js +187 -0
- package/dist/upgrade/installedHooksRetirement.js +196 -0
- package/dist/upgrade/legacyAgentCleanup.js +282 -0
- package/dist/upgrade/lifecycleUpgrade.js +113 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +155 -0
- package/dist/upgrade/npxPlatformStatus.js +22 -0
- package/dist/upgrade/projectIntegration.js +145 -187
- package/dist/upgrade/projectIntegrationDecision.js +50 -0
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +278 -352
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +263 -59
- package/dist/upgrade/v3CapabilitySurface.js +14 -0
- package/dist/upgrade/versionResolution.js +12 -5
- package/dist/validate/activationArtifactEvidence.js +844 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +515 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +5 -11
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +144 -15
- package/dist/validate/crossCapability.js +15 -10
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +73 -37
- package/dist/validate/v1LegacyCruft.js +131 -0
- package/dist/validate/vocabularyAuthority.js +303 -0
- package/package.json +53 -27
- package/bundle/references/adapters/cursor.md +0 -213
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/analysis/benchmark.md +0 -267
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/meta/documentation-inventory.md +0 -43
- package/bundle/references/v1-section-mapping.md +0 -47
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
- package/bundle/skills/agentera/agents/hej.toml +0 -6
- package/bundle/skills/agentera/agents/inspektera.toml +0 -6
- package/bundle/skills/agentera/agents/inspirera.toml +0 -6
- package/bundle/skills/agentera/agents/optimera.toml +0 -6
- package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
- package/bundle/skills/agentera/agents/planera.toml +0 -6
- package/bundle/skills/agentera/agents/profilera.toml +0 -6
- package/bundle/skills/agentera/agents/realisera.toml +0 -6
- package/bundle/skills/agentera/agents/resonera.toml +0 -6
- package/bundle/skills/agentera/agents/visionera.toml +0 -6
- package/bundle/skills/agentera/agents/visualisera.toml +0 -6
- package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
- package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
- package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
- package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
- package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
- package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
- package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
- package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
- package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
- package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
- package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
- package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
- package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
- package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
- package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
- package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
- package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
- package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
- package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
- package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
- package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
- package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
- package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
- package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
- package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
- package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
- package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
- package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
- package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
- package/bundle/skills/agentera/references/contract.md +0 -1039
- package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
- package/bundle/skills/hej/SKILL.md +0 -69
- package/bundle/skills/hej/agents/hej.toml +0 -11
- package/bundle/skills/hej/agents/openai.yaml +0 -8
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/cli/appContext.js.map +0 -1
- package/dist/cli/argvalidate.js.map +0 -1
- package/dist/cli/capabilityContext.js.map +0 -1
- package/dist/cli/commands/backfill.js +0 -84
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/cli/commands/capability.js.map +0 -1
- package/dist/cli/commands/compact.js.map +0 -1
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state.js +0 -1012
- package/dist/cli/commands/state.js.map +0 -1
- package/dist/cli/commands/upgrade.js.map +0 -1
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/commands/verify.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/git.js +0 -43
- package/dist/core/git.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/toml.js.map +0 -1
- package/dist/core/yaml.js.map +0 -1
- package/dist/eval/evalSkills.js.map +0 -1
- package/dist/eval/semanticEval.js.map +0 -1
- package/dist/eval/semanticFixtures.js.map +0 -1
- package/dist/hooks/common.js.map +0 -1
- package/dist/hooks/compaction.js +0 -935
- package/dist/hooks/compaction.js.map +0 -1
- package/dist/hooks/cursorPreToolUse.js +0 -19
- package/dist/hooks/cursorPreToolUse.js.map +0 -1
- package/dist/hooks/cursorSessionStart.js +0 -71
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -209
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -212
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact.js +0 -933
- package/dist/hooks/validateArtifact.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/capabilityContract.js.map +0 -1
- package/dist/registries/packageRegistry.js.map +0 -1
- package/dist/registries/runtimeAdapterRegistry.js +0 -315
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/setup/codex.js +0 -1056
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -127
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/doctor.js +0 -1297
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/progressCommit.js +0 -289
- package/dist/state/progressCommit.js.map +0 -1
- package/dist/state/startupAnalysis.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
- package/dist/upgrade/versionResolution.js.map +0 -1
- package/dist/validate/appHomeContract.js.map +0 -1
- package/dist/validate/capability.js.map +0 -1
- package/dist/validate/crossCapability.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -772
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { resolvePath } from "../../core/paths.js";
|
|
4
|
+
import { isoFromMtime, record, signalType, textFromContent, } from "./core.js";
|
|
5
|
+
import { isPlainObject, isFilePath, rglob } from "./core.js";
|
|
6
|
+
import { resolveSqliteCaps, } from "./sqliteCaps.js";
|
|
7
|
+
const requireCjs = createRequire(import.meta.url);
|
|
8
|
+
/** Mirrors Python raising PermissionError on a locked/busy store. */
|
|
9
|
+
export class PermissionDeniedError extends Error {
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "PermissionDeniedError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Lazy open a read-only SQLite db via node:sqlite (warning only fires here). */
|
|
16
|
+
export function openSqlite(p) {
|
|
17
|
+
const { DatabaseSync } = requireCjs("node:sqlite");
|
|
18
|
+
return new DatabaseSync(resolvePath(p), { readOnly: true });
|
|
19
|
+
}
|
|
20
|
+
export function sqliteTimestamp(value, fallback) {
|
|
21
|
+
if (typeof value === "string" && value)
|
|
22
|
+
return value;
|
|
23
|
+
if (typeof value === "number") {
|
|
24
|
+
let numeric = value;
|
|
25
|
+
if (numeric > 10_000_000_000)
|
|
26
|
+
numeric /= 1000;
|
|
27
|
+
return new Date(numeric * 1000).toISOString();
|
|
28
|
+
}
|
|
29
|
+
return fallback;
|
|
30
|
+
}
|
|
31
|
+
export function jsonDict(value) {
|
|
32
|
+
if (isPlainObject(value))
|
|
33
|
+
return value;
|
|
34
|
+
if (typeof value === "string" && value) {
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(value);
|
|
37
|
+
return isPlainObject(parsed) ? parsed : {};
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
function nestedTimeCreated(data) {
|
|
46
|
+
const timeData = data.time;
|
|
47
|
+
if (isPlainObject(timeData))
|
|
48
|
+
return timeData.created || timeData.start;
|
|
49
|
+
return data.time_created || data.timestamp;
|
|
50
|
+
}
|
|
51
|
+
export function tableColumns(conn, table) {
|
|
52
|
+
const rows = conn.prepare(`PRAGMA table_info(${table})`).all();
|
|
53
|
+
return new Set(rows.map((r) => String(r.name)));
|
|
54
|
+
}
|
|
55
|
+
export function firstColumn(columns, candidates) {
|
|
56
|
+
for (const c of candidates)
|
|
57
|
+
if (columns.has(c))
|
|
58
|
+
return c;
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
export function qualified(alias, column, label) {
|
|
62
|
+
if (column === null)
|
|
63
|
+
return `NULL AS ${label}`;
|
|
64
|
+
const escaped = column.replace(/"/g, '""');
|
|
65
|
+
return `${alias}."${escaped}" AS ${label}`;
|
|
66
|
+
}
|
|
67
|
+
function resolveOpencodeSchema(conn) {
|
|
68
|
+
const tables = new Set(conn.prepare("SELECT name FROM sqlite_master WHERE type = 'table'").all().map((r) => String(r.name)));
|
|
69
|
+
for (const t of ["session", "message", "part"]) {
|
|
70
|
+
if (!tables.has(t)) {
|
|
71
|
+
const missing = ["session", "message", "part"].filter((x) => !tables.has(x)).sort().join(",");
|
|
72
|
+
throw new Error(`missing opencode tables: ${missing}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const sessionCols = tableColumns(conn, "session");
|
|
76
|
+
const messageCols = tableColumns(conn, "message");
|
|
77
|
+
const partCols = tableColumns(conn, "part");
|
|
78
|
+
const sessionId = firstColumn(sessionCols, ["id", "session_id", "sessionID"]);
|
|
79
|
+
const messageId = firstColumn(messageCols, ["id", "message_id", "messageID"]);
|
|
80
|
+
const messageSession = firstColumn(messageCols, ["sessionID", "session_id", "session", "sessionId"]);
|
|
81
|
+
const partMessage = firstColumn(partCols, ["messageID", "message_id", "message", "messageId"]);
|
|
82
|
+
if (!(sessionId && messageId && messageSession && partMessage))
|
|
83
|
+
throw new Error("missing opencode join columns");
|
|
84
|
+
const messageData = firstColumn(messageCols, ["data"]);
|
|
85
|
+
const partData = firstColumn(partCols, ["data"]);
|
|
86
|
+
const roleCol = firstColumn(messageCols, ["role", "actor", "author"]);
|
|
87
|
+
if (roleCol === null && messageData === null)
|
|
88
|
+
throw new Error("missing opencode message role column");
|
|
89
|
+
const messageTime = firstColumn(messageCols, ["time_created", "time", "timestamp", "created_at", "createdAt"]);
|
|
90
|
+
const partTime = firstColumn(partCols, ["time_created", "time", "timestamp", "created_at", "createdAt"]);
|
|
91
|
+
const sessionTime = firstColumn(sessionCols, ["time_created", "time", "timestamp", "created_at", "createdAt"]);
|
|
92
|
+
const sessionUpdated = firstColumn(sessionCols, ["time_updated", "updated_at", "updatedAt", "time_created", "time"]);
|
|
93
|
+
const projectCol = firstColumn(sessionCols, ["cwd", "project_path", "projectPath", "directory", "path"]);
|
|
94
|
+
const messageText = firstColumn(messageCols, ["content", "text", "message"]);
|
|
95
|
+
const partText = firstColumn(partCols, ["text", "content", "input", "output"]);
|
|
96
|
+
const partType = firstColumn(partCols, ["type", "kind"]);
|
|
97
|
+
const partId = firstColumn(partCols, ["id", "part_id", "partID"]);
|
|
98
|
+
const sortExpr = `COALESCE(m."${messageTime || messageId}", p."${partTime || partMessage}", s."${sessionTime || sessionId}")`;
|
|
99
|
+
const recentSessionExpr = `s."${sessionUpdated || sessionTime || sessionId}"`;
|
|
100
|
+
return {
|
|
101
|
+
sessionId,
|
|
102
|
+
messageId,
|
|
103
|
+
messageSession,
|
|
104
|
+
partMessage,
|
|
105
|
+
messageData,
|
|
106
|
+
partData,
|
|
107
|
+
roleCol,
|
|
108
|
+
messageTime,
|
|
109
|
+
partTime,
|
|
110
|
+
sessionTime,
|
|
111
|
+
sessionUpdated,
|
|
112
|
+
projectCol,
|
|
113
|
+
messageText,
|
|
114
|
+
partText,
|
|
115
|
+
partType,
|
|
116
|
+
partId,
|
|
117
|
+
sortExpr,
|
|
118
|
+
recentSessionExpr,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function opencodeRows(conn, caps, schema) {
|
|
122
|
+
const { sessionId, messageId, messageSession, partMessage, messageData, partData, roleCol, messageTime, partTime, sessionTime, projectCol, messageText, partText, partType, partId, sortExpr, recentSessionExpr, } = schema;
|
|
123
|
+
const query = `
|
|
124
|
+
WITH recent_sessions AS (
|
|
125
|
+
SELECT s."${sessionId}" AS recent_session_id
|
|
126
|
+
FROM session s
|
|
127
|
+
ORDER BY ${recentSessionExpr} DESC,
|
|
128
|
+
s."${sessionId}" DESC
|
|
129
|
+
LIMIT ?
|
|
130
|
+
),
|
|
131
|
+
recent AS (
|
|
132
|
+
SELECT
|
|
133
|
+
${qualified("s", sessionId, "session_id")},
|
|
134
|
+
${qualified("s", projectCol, "project_path")},
|
|
135
|
+
${qualified("m", messageId, "message_id")},
|
|
136
|
+
${qualified("m", roleCol, "role")},
|
|
137
|
+
${qualified("m", messageTime, "message_time")},
|
|
138
|
+
${qualified("m", messageText, "message_text")},
|
|
139
|
+
${qualified("m", messageData, "message_data")},
|
|
140
|
+
${qualified("p", partId, "part_id")},
|
|
141
|
+
${qualified("p", partTime, "part_time")},
|
|
142
|
+
${qualified("p", partType, "part_type")},
|
|
143
|
+
${qualified("p", partText, "part_text")},
|
|
144
|
+
${qualified("p", partData, "part_data")},
|
|
145
|
+
${sortExpr} AS sort_time
|
|
146
|
+
FROM message m
|
|
147
|
+
JOIN session s ON m."${messageSession}" = s."${sessionId}"
|
|
148
|
+
JOIN recent_sessions rs ON rs.recent_session_id = s."${sessionId}"
|
|
149
|
+
LEFT JOIN part p ON p."${partMessage}" = m."${messageId}"
|
|
150
|
+
ORDER BY sort_time DESC,
|
|
151
|
+
m."${messageId}" DESC,
|
|
152
|
+
p."${partId || partMessage}" DESC
|
|
153
|
+
LIMIT ?
|
|
154
|
+
)
|
|
155
|
+
SELECT
|
|
156
|
+
session_id, project_path, message_id, role, message_time,
|
|
157
|
+
message_text, message_data, part_id, part_time, part_type,
|
|
158
|
+
part_text, part_data
|
|
159
|
+
FROM recent
|
|
160
|
+
ORDER BY sort_time, message_id, part_id
|
|
161
|
+
`;
|
|
162
|
+
return conn.prepare(query).all(caps.maxSessions, caps.maxRows);
|
|
163
|
+
}
|
|
164
|
+
export function probeOpencodeTruncation(conn, caps, fallback) {
|
|
165
|
+
const schema = resolveOpencodeSchema(conn);
|
|
166
|
+
const { sessionId, sessionTime, sessionUpdated, recentSessionExpr } = schema;
|
|
167
|
+
const sessionTimeCol = sessionTime || sessionId;
|
|
168
|
+
const sessionCount = Number(conn.prepare("SELECT COUNT(*) AS c FROM session").get()?.c ?? 0);
|
|
169
|
+
if (sessionCount > caps.maxSessions) {
|
|
170
|
+
const query = `
|
|
171
|
+
SELECT MIN(session_ts) AS truncated_at
|
|
172
|
+
FROM (
|
|
173
|
+
SELECT s."${sessionTimeCol}" AS session_ts
|
|
174
|
+
FROM session s
|
|
175
|
+
ORDER BY ${recentSessionExpr} DESC,
|
|
176
|
+
s."${sessionId}" DESC
|
|
177
|
+
LIMIT -1 OFFSET ?
|
|
178
|
+
)
|
|
179
|
+
`;
|
|
180
|
+
const row = conn.prepare(query).get(caps.maxSessions);
|
|
181
|
+
const truncatedAt = sqliteTimestamp(row?.truncated_at, fallback);
|
|
182
|
+
return { truncatedAt, cap: "sessions", limit: caps.maxSessions };
|
|
183
|
+
}
|
|
184
|
+
const { messageId, messageSession, partMessage, roleCol, messageTime, partTime, messageData, partData, messageText, partText, partType, partId, sortExpr, } = schema;
|
|
185
|
+
const rowCountQuery = `
|
|
186
|
+
WITH recent_sessions AS (
|
|
187
|
+
SELECT s."${sessionId}" AS recent_session_id
|
|
188
|
+
FROM session s
|
|
189
|
+
ORDER BY ${recentSessionExpr} DESC,
|
|
190
|
+
s."${sessionId}" DESC
|
|
191
|
+
LIMIT ?
|
|
192
|
+
)
|
|
193
|
+
SELECT COUNT(*) AS c
|
|
194
|
+
FROM message m
|
|
195
|
+
JOIN session s ON m."${messageSession}" = s."${sessionId}"
|
|
196
|
+
JOIN recent_sessions rs ON rs.recent_session_id = s."${sessionId}"
|
|
197
|
+
LEFT JOIN part p ON p."${partMessage}" = m."${messageId}"
|
|
198
|
+
`;
|
|
199
|
+
const rowCount = Number(conn.prepare(rowCountQuery).get(caps.maxSessions)?.c ?? 0);
|
|
200
|
+
if (rowCount > caps.maxRows) {
|
|
201
|
+
const query = `
|
|
202
|
+
WITH recent_sessions AS (
|
|
203
|
+
SELECT s."${sessionId}" AS recent_session_id
|
|
204
|
+
FROM session s
|
|
205
|
+
ORDER BY ${recentSessionExpr} DESC,
|
|
206
|
+
s."${sessionId}" DESC
|
|
207
|
+
LIMIT ?
|
|
208
|
+
),
|
|
209
|
+
ranked AS (
|
|
210
|
+
SELECT ${sortExpr} AS sort_time
|
|
211
|
+
FROM message m
|
|
212
|
+
JOIN session s ON m."${messageSession}" = s."${sessionId}"
|
|
213
|
+
JOIN recent_sessions rs ON rs.recent_session_id = s."${sessionId}"
|
|
214
|
+
LEFT JOIN part p ON p."${partMessage}" = m."${messageId}"
|
|
215
|
+
ORDER BY sort_time DESC,
|
|
216
|
+
m."${messageId}" DESC,
|
|
217
|
+
p."${partId || partMessage}" DESC
|
|
218
|
+
LIMIT -1 OFFSET ?
|
|
219
|
+
)
|
|
220
|
+
SELECT MIN(sort_time) AS truncated_at FROM ranked
|
|
221
|
+
`;
|
|
222
|
+
const row = conn.prepare(query).get(caps.maxSessions, caps.maxRows);
|
|
223
|
+
const truncatedAt = sqliteTimestamp(row?.truncated_at, fallback);
|
|
224
|
+
return { truncatedAt, cap: "rows", limit: caps.maxRows };
|
|
225
|
+
}
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
function opencodeDbCandidates(storePath) {
|
|
229
|
+
if (isFilePath(storePath))
|
|
230
|
+
return [storePath];
|
|
231
|
+
return rglob(storePath, "opencode.db");
|
|
232
|
+
}
|
|
233
|
+
export function extractOpencodeSessions(storePath, errors, ctx) {
|
|
234
|
+
if (storePath === null || !fs.existsSync(storePath))
|
|
235
|
+
return [];
|
|
236
|
+
const caps = ctx?.sqliteCaps ?? resolveSqliteCaps();
|
|
237
|
+
const records = [];
|
|
238
|
+
for (const dbPath of opencodeDbCandidates(storePath).slice(0, 1)) {
|
|
239
|
+
const fallbackTimestamp = isoFromMtime(dbPath);
|
|
240
|
+
let rows;
|
|
241
|
+
let conn = null;
|
|
242
|
+
try {
|
|
243
|
+
conn = openSqlite(dbPath);
|
|
244
|
+
const truncation = probeOpencodeTruncation(conn, caps, fallbackTimestamp);
|
|
245
|
+
if (truncation && ctx)
|
|
246
|
+
ctx.truncation = truncation;
|
|
247
|
+
const schema = resolveOpencodeSchema(conn);
|
|
248
|
+
rows = opencodeRows(conn, caps, schema);
|
|
249
|
+
}
|
|
250
|
+
catch (exc) {
|
|
251
|
+
const msg = exc.message || "";
|
|
252
|
+
if (/lock|busy/i.test(msg))
|
|
253
|
+
throw new PermissionDeniedError(msg);
|
|
254
|
+
errors.push(`${dbPath}: opencode sqlite read failed: ${exc.name || "Error"}`);
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
try {
|
|
259
|
+
conn?.close();
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
/* ignore */
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
const messages = new Map();
|
|
266
|
+
for (const row of rows) {
|
|
267
|
+
const messageData = jsonDict(row.message_data);
|
|
268
|
+
const partData = jsonDict(row.part_data);
|
|
269
|
+
const messageId = String(row.message_id);
|
|
270
|
+
const role = row.role || messageData.role;
|
|
271
|
+
const messageTime = row.message_time || nestedTimeCreated(messageData);
|
|
272
|
+
let item = messages.get(messageId);
|
|
273
|
+
if (item === undefined) {
|
|
274
|
+
item = {
|
|
275
|
+
role,
|
|
276
|
+
session_id: String(row.session_id),
|
|
277
|
+
project_path: row.project_path,
|
|
278
|
+
timestamp: sqliteTimestamp(messageTime, fallbackTimestamp),
|
|
279
|
+
parts: [],
|
|
280
|
+
tools: [],
|
|
281
|
+
};
|
|
282
|
+
messages.set(messageId, item);
|
|
283
|
+
}
|
|
284
|
+
const partType = row.part_type || partData.type;
|
|
285
|
+
const partText = textFromContent(row.part_text || partData.text);
|
|
286
|
+
if (partText)
|
|
287
|
+
item.parts.push(partText);
|
|
288
|
+
else if (row.message_text)
|
|
289
|
+
item.parts.push(textFromContent(row.message_text));
|
|
290
|
+
if (partType === "tool" || partData.tool) {
|
|
291
|
+
const state = isPlainObject(partData.state) ? partData.state : {};
|
|
292
|
+
const argumentsVal = isPlainObject(state.input) ? state.input : {};
|
|
293
|
+
const toolName = partData.tool || partData.name;
|
|
294
|
+
if (typeof toolName === "string" && toolName) {
|
|
295
|
+
item.tools.push({
|
|
296
|
+
part_id: row.part_id,
|
|
297
|
+
tool_name: toolName,
|
|
298
|
+
arguments: argumentsVal,
|
|
299
|
+
timestamp: sqliteTimestamp(row.part_time || nestedTimeCreated(partData), item.timestamp),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
let previousAssistant = "";
|
|
305
|
+
let index = 0;
|
|
306
|
+
for (const item of messages.values()) {
|
|
307
|
+
index += 1;
|
|
308
|
+
const role = String(item.role).toLowerCase();
|
|
309
|
+
if (role !== "user" && role !== "assistant")
|
|
310
|
+
continue;
|
|
311
|
+
const content = item.parts.filter((p) => p).join("\n");
|
|
312
|
+
if (!content && item.tools.length === 0)
|
|
313
|
+
continue;
|
|
314
|
+
const projectPath = item.project_path ? String(item.project_path) : null;
|
|
315
|
+
if (content) {
|
|
316
|
+
const data = { actor: role, content };
|
|
317
|
+
if (role === "user") {
|
|
318
|
+
if (previousAssistant)
|
|
319
|
+
data.preceding_context = previousAssistant.slice(-2000);
|
|
320
|
+
const sig = signalType(content);
|
|
321
|
+
if (sig)
|
|
322
|
+
data.signal_type = sig;
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
previousAssistant = content;
|
|
326
|
+
}
|
|
327
|
+
records.push(record({
|
|
328
|
+
sourceKind: "conversation_turn",
|
|
329
|
+
timestamp: item.timestamp,
|
|
330
|
+
projectPath,
|
|
331
|
+
runtime: "opencode",
|
|
332
|
+
sourceParts: [resolvePath(dbPath), index, role, content.slice(0, 80)],
|
|
333
|
+
sessionId: item.session_id,
|
|
334
|
+
data,
|
|
335
|
+
}));
|
|
336
|
+
}
|
|
337
|
+
let toolIndex = 0;
|
|
338
|
+
for (const toolItem of item.tools) {
|
|
339
|
+
toolIndex += 1;
|
|
340
|
+
records.push(record({
|
|
341
|
+
sourceKind: "tool_call",
|
|
342
|
+
timestamp: toolItem.timestamp,
|
|
343
|
+
projectPath,
|
|
344
|
+
runtime: "opencode",
|
|
345
|
+
sourceParts: [resolvePath(dbPath), index, toolIndex, "tool", toolItem.tool_name, toolItem.part_id],
|
|
346
|
+
sessionId: item.session_id,
|
|
347
|
+
data: { tool_name: toolItem.tool_name, arguments: toolItem.arguments },
|
|
348
|
+
}));
|
|
349
|
+
}
|
|
350
|
+
if (role === "user" && content) {
|
|
351
|
+
const sig = signalType(content);
|
|
352
|
+
if (sig) {
|
|
353
|
+
records.push(record({
|
|
354
|
+
sourceKind: "history_prompt",
|
|
355
|
+
timestamp: item.timestamp,
|
|
356
|
+
projectPath,
|
|
357
|
+
runtime: "opencode",
|
|
358
|
+
sourceParts: [resolvePath(dbPath), index, "history", content.slice(0, 120)],
|
|
359
|
+
sessionId: item.session_id,
|
|
360
|
+
data: { prompt: content, signal_type: sig },
|
|
361
|
+
}));
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return records;
|
|
367
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { compatibilityStates, evidenceTierBounds, } from "../../registries/evidenceTierContract.js";
|
|
4
|
+
import { defaultTiersDir, evidenceTierCompatibility, iterTierRecords, readSignalTier, readTierCorpusMetadata, } from "./evidenceTiers.js";
|
|
5
|
+
/**
|
|
6
|
+
* Bounded tier reader for analytics consumers (plan Task 3).
|
|
7
|
+
*
|
|
8
|
+
* Task 2 publishes bounded full-evidence shards and a bounded signal tier with
|
|
9
|
+
* an atomic generation pointer. This module is the consumer-side surface that
|
|
10
|
+
* projects the contract's compatibility states and recovery guidance, resolves
|
|
11
|
+
* the tiers directory from a corpus path, and exposes bounded reads (full-evidence
|
|
12
|
+
* records one shard at a time; metadata/signal reads without full records). It does
|
|
13
|
+
* not duplicate the tier map, source families, bounds, or compatibility outcomes —
|
|
14
|
+
* those are projected from `evidenceTierContract` and `evidenceTiers`.
|
|
15
|
+
*
|
|
16
|
+
* Consumers preserve their JSON output shape and exit codes. A non-current tier
|
|
17
|
+
* degrades with actionable, contract-projected recovery rather than indefinitely
|
|
18
|
+
* loading an oversized monolithic corpus envelope. `incomplete` is a degrade
|
|
19
|
+
* outcome: consumers analyze available sources and surface the coverage gap, so a
|
|
20
|
+
* host missing some runtimes still gets useful analysis instead of a hard failure.
|
|
21
|
+
*/
|
|
22
|
+
/** A corpus path's co-located tiers directory (`<intermediate>/tiers`). */
|
|
23
|
+
export function tiersDirForCorpusPath(corpusPath) {
|
|
24
|
+
return path.join(path.dirname(corpusPath), "tiers");
|
|
25
|
+
}
|
|
26
|
+
/** Canonical tiers directory for the stats profile. */
|
|
27
|
+
export function resolveTiersDir(env = process.env, platform = process.platform) {
|
|
28
|
+
return defaultTiersDir(env, platform);
|
|
29
|
+
}
|
|
30
|
+
/** Whether a compatibility state still permits analysis of available sources. */
|
|
31
|
+
export function isAnalyzable(state) {
|
|
32
|
+
return state === "current" || state === "incomplete";
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Actionable recovery guidance projected from the authority contract for a
|
|
36
|
+
* compatibility state. The contract owns the recovery text; this never
|
|
37
|
+
* duplicates it. Returns `null` for states that proceed (current/incomplete).
|
|
38
|
+
*/
|
|
39
|
+
export function recoveryForState(state) {
|
|
40
|
+
if (state === "current" || state === "incomplete")
|
|
41
|
+
return null;
|
|
42
|
+
const states = compatibilityStates();
|
|
43
|
+
const def = states.find((s) => s.state_id === state);
|
|
44
|
+
return def?.recovery ?? null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Assess the tiers directory against the contract's compatibility states. When a
|
|
48
|
+
* legacy corpus envelope is supplied, a missing tier with an existing envelope
|
|
49
|
+
* surfaces as `legacy` (refresh guidance) rather than a bare missing state.
|
|
50
|
+
*/
|
|
51
|
+
export function assessTiers(tiersDir, corpusPath) {
|
|
52
|
+
const compat = evidenceTierCompatibility(tiersDir, corpusPath);
|
|
53
|
+
const assessment = {
|
|
54
|
+
state: compat.state,
|
|
55
|
+
analyzable: isAnalyzable(compat.state),
|
|
56
|
+
tiersDir,
|
|
57
|
+
corpusPath,
|
|
58
|
+
recovery: recoveryForState(compat.state) ?? undefined,
|
|
59
|
+
};
|
|
60
|
+
if (compat.state === "incomplete")
|
|
61
|
+
assessment.coverageGaps = compat.detail;
|
|
62
|
+
if (compat.state === "oversized")
|
|
63
|
+
assessment.artifact = compat.artifact;
|
|
64
|
+
if (compat.state === "current")
|
|
65
|
+
assessment.generation = compat.generation;
|
|
66
|
+
return assessment;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Read bounded metadata for signal-tier consumers (report status, prime
|
|
70
|
+
* coverage). Reads the manifest and the bounded signal tier only — never the
|
|
71
|
+
* full-evidence shards — so metadata consumers stay bounded at real scale. The
|
|
72
|
+
* signal tier is bounded by construction; a defensively oversized signal tier is
|
|
73
|
+
* reported as null so the caller degrades with the assessment's recovery.
|
|
74
|
+
*/
|
|
75
|
+
export function readBoundedMetadata(tiersDir) {
|
|
76
|
+
const signal = readSignalTier(tiersDir);
|
|
77
|
+
const corpusMetadata = readTierCorpusMetadata(tiersDir);
|
|
78
|
+
const bounds = evidenceTierBounds();
|
|
79
|
+
if (signal && (signal.bytes > bounds.signalByteCap || signal.manifest.signal.bytes > bounds.signalByteCap)) {
|
|
80
|
+
return { corpusMetadata: null, signal: null, manifest: signal.manifest };
|
|
81
|
+
}
|
|
82
|
+
return { corpusMetadata, signal, manifest: signal?.manifest ?? null };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Iterate full-evidence records for the current generation, one bounded shard at
|
|
86
|
+
* a time. Full-record consumers (usage analytics, startup analysis) use this so
|
|
87
|
+
* they never materialize the monolithic corpus envelope. Returns `null` when no
|
|
88
|
+
* current generation exists; callers report the assessment instead.
|
|
89
|
+
*/
|
|
90
|
+
export function iterBoundedRecords(tiersDir) {
|
|
91
|
+
return iterTierRecords(tiersDir);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Legacy fallback: a small monolithic corpus envelope may still be read for
|
|
95
|
+
* backward compatibility when no tiers were published. Oversized legacy state
|
|
96
|
+
* is never loaded whole — it returns `false` so the caller emits refresh guidance.
|
|
97
|
+
*/
|
|
98
|
+
export function legacyCorpusReadable(corpusPath) {
|
|
99
|
+
if (!corpusPath || !fs.existsSync(corpusPath))
|
|
100
|
+
return false;
|
|
101
|
+
const bounds = evidenceTierBounds();
|
|
102
|
+
try {
|
|
103
|
+
return fs.statSync(corpusPath).size <= bounds.readerByteCap;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|