agentera 3.0.0-dev.41 → 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/README.md +33 -4
- package/bundle/CHANGELOG.md +91 -1
- package/bundle/README.md +26 -19
- package/bundle/UPGRADE.md +50 -15
- package/bundle/references/adapters/package-publication.json +408 -14
- package/bundle/references/adapters/package-registry.yaml +414 -1
- package/bundle/references/adapters/package-surface-characterization.md +20 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +237 -1
- package/bundle/references/analysis/evidence-tier-authority.yaml +3 -3
- package/bundle/references/analysis/verification-policy.yaml +48 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +1 -1
- package/bundle/references/artifacts/glossary-entry-contract.yaml +11 -11
- package/bundle/references/artifacts/state-storage-authority.yaml +170 -118
- package/bundle/references/cli/capability-instruction-contract.yaml +4 -4
- package/bundle/references/cli/hybrid-route-contract.yaml +27 -5
- package/bundle/references/cli/routing-model.md +20 -4
- package/bundle/references/cli/trigger-schema-enrichment.md +7 -0
- package/bundle/references/cli/vocabulary-index.yaml +1 -3
- package/bundle/references/cli/vocabulary.md +18 -60
- package/bundle/references/meta/retained-reference-authority.yaml +151 -0
- package/bundle/skills/agentera/SKILL.md +32 -16
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +3 -3
- package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +1 -1
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +5 -5
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +3 -3
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +3 -3
- package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +1 -1
- package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +1 -1
- package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +1 -1
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +5 -5
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +1 -1
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +1 -1
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +1 -1
- package/bundle/skills/agentera/capability_schema_contract.yaml +2 -2
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +3 -3
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +3 -3
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +1 -1
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +3 -3
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +12 -10
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +3 -3
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +6 -4
- package/dist/analytics/extractCorpus/cli.js +0 -1
- package/dist/analytics/extractCorpus/copilotSessions.js +0 -1
- package/dist/analytics/extractCorpus/core.js +0 -1
- package/dist/analytics/extractCorpus/corpus.js +0 -1
- package/dist/analytics/extractCorpus/coverageAudit.js +0 -1
- package/dist/analytics/extractCorpus/cursorSessions.js +0 -1
- package/dist/analytics/extractCorpus/evidenceTiers.js +0 -1
- package/dist/analytics/extractCorpus/extractCorpusParity.js +0 -1
- package/dist/analytics/extractCorpus/filesystemSources.js +0 -1
- package/dist/analytics/extractCorpus/index.js +0 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js +0 -1
- package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js +0 -1
- package/dist/analytics/extractCorpus/tierReader.js +0 -1
- package/dist/analytics/extractCorpus.js +0 -1
- package/dist/analytics/glossaryAdviceResolution.js +0 -1
- package/dist/analytics/glossaryInputAcquisition.js +0 -1
- package/dist/analytics/personalGlossaryAdmission.js +0 -1
- package/dist/analytics/personalGlossaryProfile.js +0 -1
- package/dist/analytics/profileSignals.js +0 -1
- package/dist/analytics/usageStats.js +0 -1
- package/dist/audit/terminologyDrift.js +0 -1
- package/dist/bin/agentera.js +0 -1
- package/dist/capabilities/audit/instructions.js +3 -4
- package/dist/capabilities/build/instructions.js +2 -3
- package/dist/capabilities/design/instructions.js +1 -2
- package/dist/capabilities/discuss/instructions.js +2 -3
- package/dist/capabilities/document/instructions.js +2 -3
- package/dist/capabilities/index.js +5 -4
- package/dist/capabilities/optimize/instructions.js +1 -2
- package/dist/capabilities/orchestrate/instructions.js +3 -4
- package/dist/capabilities/plan/instructions.js +1 -2
- package/dist/capabilities/profile/instructions.js +1 -2
- package/dist/capabilities/research/instructions.js +1 -2
- package/dist/capabilities/status/instructions.js +1 -2
- package/dist/capabilities/status/startupInstructions.js +0 -5
- package/dist/capabilities/vision/instructions.js +1 -2
- package/dist/cli/appContext.js +0 -1
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +4 -4
- package/dist/cli/capabilityContext/bespoke.js +0 -1
- package/dist/cli/capabilityContext/build.js +8 -10
- package/dist/cli/capabilityContext/closeout.js +8 -10
- package/dist/cli/capabilityContext/contract.js +7 -42
- package/dist/cli/capabilityContext/evidence.js +12 -14
- package/dist/cli/capabilityContext/index.js +0 -1
- package/dist/cli/capabilityContext/orchestration.js +6 -8
- package/dist/cli/capabilityContext/planState.js +0 -1
- package/dist/cli/capabilityContext/progress.js +0 -1
- package/dist/cli/capabilityContext/projectVerification.js +0 -1
- package/dist/cli/capabilityContext/shared.js +2 -19
- package/dist/cli/capabilityContext/slim.js +0 -1
- package/dist/cli/capabilityContext/startup.js +24 -152
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +4 -4
- package/dist/cli/capabilityContext.js +0 -1
- package/dist/cli/commands/appHome.js +0 -1
- package/dist/cli/commands/capability.js +2 -2
- package/dist/cli/commands/compact.js +0 -1
- package/dist/cli/commands/doctor.js +104 -9
- package/dist/cli/commands/durability.js +0 -1
- package/dist/cli/commands/glossaryAdvice.js +0 -1
- package/dist/cli/commands/lint.js +0 -1
- package/dist/cli/commands/personalGlossary.js +0 -1
- package/dist/cli/commands/prime/briefOrientation.js +24 -85
- package/dist/cli/commands/prime/buildExecutionRequest.js +2 -2
- package/dist/cli/commands/prime/bundleStatus.js +0 -1
- package/dist/cli/commands/prime/collectEntityOrientation.js +47 -27
- package/dist/cli/commands/prime/collectOrientationState.js +36 -2
- package/dist/cli/commands/prime/orientationOutput.js +104 -84
- package/dist/cli/commands/prime/types.js +0 -1
- package/dist/cli/commands/prime/v1Migration.js +0 -1
- package/dist/cli/commands/prime.js +18 -36
- package/dist/cli/commands/profileGrounding.js +0 -1
- package/dist/cli/commands/query.js +2 -2
- package/dist/cli/commands/report.js +0 -1
- package/dist/cli/commands/route.js +3 -3
- package/dist/cli/commands/schema.js +62 -92
- package/dist/cli/commands/state/decisions.js +0 -1
- package/dist/cli/commands/state/docs.js +0 -1
- package/dist/cli/commands/state/experimentRecords.js +0 -1
- package/dist/cli/commands/state/experiments.js +0 -1
- package/dist/cli/commands/state/get.js +0 -1
- package/dist/cli/commands/state/health.js +0 -1
- package/dist/cli/commands/state/index.js +0 -1
- package/dist/cli/commands/state/list.js +0 -1
- package/dist/cli/commands/state/objective.js +0 -1
- package/dist/cli/commands/state/plan.js +0 -1
- package/dist/cli/commands/state/planTasks.js +0 -1
- package/dist/cli/commands/state/plans.js +0 -1
- package/dist/cli/commands/state/progress.js +0 -1
- package/dist/cli/commands/state/shared.js +0 -1
- package/dist/cli/commands/state/todo.js +0 -1
- package/dist/cli/commands/state/write.js +10 -1
- package/dist/cli/commands/upgrade.js +0 -1
- package/dist/cli/commands/upgradeVerify.js +0 -1
- package/dist/cli/commands/validate.js +106 -10
- package/dist/cli/commands/verify.js +0 -1
- package/dist/cli/contracts/bundleStatus.js +0 -1
- package/dist/cli/contracts/orientationState.js +0 -1
- package/dist/cli/dispatch/argvParser.js +0 -1
- package/dist/cli/dispatch/check.js +6 -24
- package/dist/cli/dispatch/commands.js +3 -3
- package/dist/cli/dispatch/index.js +9 -36
- package/dist/cli/dispatch/lifecycle.js +11 -57
- package/dist/cli/dispatch/prime.js +0 -1
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +0 -1
- package/dist/cli/dispatch/state.js +0 -1
- package/dist/cli/dispatch.js +0 -1
- package/dist/cli/errors.js +0 -1
- package/dist/cli/help.js +51 -30
- package/dist/cli/migrationRequired.js +3 -5
- package/dist/cli/orientation/attention.js +4 -17
- package/dist/cli/orientation/corpusCoverage.js +0 -1
- package/dist/cli/orientation.js +5 -5
- package/dist/cli/planArtifacts.js +0 -1
- package/dist/cli/planEvidence.js +0 -1
- package/dist/cli/planLifecycleState.js +2 -2
- package/dist/cli/planTaskIndex.js +0 -1
- package/dist/cli/preCutoverCommand.js +32 -0
- package/dist/cli/prime-blob.js +6 -6
- package/dist/cli/profileAcquisition.js +0 -1
- package/dist/cli/startupCompletenessContract.js +0 -1
- package/dist/cli/stateQuery.js +17 -21
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +0 -1
- package/dist/cli/todoReadinessSelection.js +2 -2
- package/dist/cli/todoSeverity.js +0 -1
- package/dist/core/atomicWriter.js +0 -1
- 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 +0 -1
- package/dist/core/jsonValue.js +0 -1
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +0 -1
- package/dist/core/shell.js +0 -1
- package/dist/core/skillIdentity.js +0 -1
- package/dist/core/sourceRoot.js +9 -12
- package/dist/core/text.js +0 -1
- package/dist/core/toml.js +0 -1
- package/dist/core/yaml.js +0 -1
- package/dist/eval/evalSkills.js +0 -1
- package/dist/eval/hybridRouteEvaluation.js +0 -1
- package/dist/eval/semanticEval.js +0 -1
- package/dist/eval/semanticFixtures.js +0 -1
- package/dist/hooks/common.js +1 -54
- package/dist/hooks/compaction/apply.js +0 -1
- package/dist/hooks/compaction/dryRun.js +0 -1
- package/dist/hooks/compaction/index.js +1 -2
- package/dist/hooks/compaction/parse.js +0 -1
- package/dist/hooks/compaction/retention.js +0 -1
- package/dist/hooks/compaction/status.js +0 -1
- package/dist/hooks/compaction/types.js +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js +0 -1
- package/dist/hooks/validateArtifact/index.js +6 -65
- package/dist/hooks/validateArtifact/markdown.js +0 -1
- package/dist/hooks/validateArtifact/schema.js +0 -1
- package/dist/hooks/validateArtifact/traversal.js +0 -1
- package/dist/hooks/validateArtifact/violations.js +0 -1
- package/dist/migrate/v2HandoffManifest.js +0 -3
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +106 -0
- package/dist/registries/artifactProtocolIds.js +0 -1
- package/dist/registries/artifactRegistry.js +0 -1
- package/dist/registries/artifactSchemaProjection.js +0 -1
- package/dist/registries/capabilityContract.js +0 -1
- package/dist/registries/evaluatorHandoffContract.js +0 -1
- package/dist/registries/evidenceTierContract.js +0 -1
- package/dist/registries/glossaryAdviceContract.js +2 -2
- package/dist/registries/glossaryCaveatContract.js +0 -1
- package/dist/registries/glossaryConsumerContractValidation.js +5 -6
- package/dist/registries/glossaryEntryContract.js +8 -8
- package/dist/registries/glossaryTermIdentity.js +0 -1
- package/dist/registries/glossaryTermOccurrence.js +0 -1
- package/dist/registries/hybridRoute.js +73 -2
- package/dist/registries/hybridRouteReceipt.js +2 -2
- package/dist/registries/packagePublication.js +229 -0
- package/dist/registries/packageRegistry.js +118 -2
- package/dist/registries/todoReadinessContract.js +0 -1
- package/dist/registries/triggerLoader.js +0 -1
- package/dist/registries/verbosityBudgetContract.js +0 -1
- package/dist/release/releaseMetadata.js +69 -3
- package/dist/runtime/lifecycleAdapterContract.js +0 -1
- package/dist/runtime/lifecycleAdapters.js +0 -1
- package/dist/runtime/lifecycleAuthority.js +0 -1
- package/dist/runtime/lifecycleOperationContract.js +12 -3
- package/dist/runtime/lifecycleOperations.js +0 -1
- package/dist/runtime/lifecycleOwnershipJournal.js +0 -1
- package/dist/runtime/lifecyclePublication.js +0 -1
- package/dist/runtime/lifecycleSnapshot.js +0 -1
- package/dist/runtime/nativeResourceCleanup.js +191 -6
- package/dist/setup/opencode.js +0 -1
- package/dist/setup/opencodeConstants.js +0 -1
- package/dist/setup/sharedSkill.js +0 -1
- package/dist/setup/smokeChecks.js +1 -33
- package/dist/state/archiveDiscovery.js +0 -1
- package/dist/state/archivePublication.js +0 -1
- package/dist/state/archiveRecovery.js +0 -1
- package/dist/state/archiveReplay.js +0 -1
- package/dist/state/canonicalMigrationRecord.js +0 -1
- package/dist/state/changelog.js +0 -1
- package/dist/state/decisionEntities.js +0 -1
- package/dist/state/decisionLegacyValidation.js +0 -1
- package/dist/state/decisionMigrationProvenance.js +0 -1
- package/dist/state/decisionOverlay.js +0 -1
- package/dist/state/decisionRevision.js +0 -1
- package/dist/state/decisionRevisionMigration.js +0 -1
- package/dist/state/directRetrieval.js +0 -1
- package/dist/state/durability.js +0 -1
- package/dist/state/entityCutover.js +174 -9
- package/dist/state/entityCutoverGit.js +0 -1
- package/dist/state/entityGlossaryAuthority.js +0 -1
- package/dist/state/entityListProjection.js +0 -1
- package/dist/state/entityListRuntimeRegistry.js +46 -11
- package/dist/state/entityMigrationCausality.js +3 -5
- package/dist/state/entityMigrationIdentity.js +0 -1
- package/dist/state/entityMigrationPreview.js +35 -73
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +0 -1
- package/dist/state/entityRetrievalHelp.js +53 -23
- package/dist/state/entityStorage.js +0 -1
- package/dist/state/exactReplacementRecovery.js +0 -1
- package/dist/state/experimentArchive.js +0 -1
- package/dist/state/experimentIdentity.js +0 -1
- package/dist/state/healthEntities.js +0 -1
- package/dist/state/healthEntityValidation.js +0 -1
- package/dist/state/healthRepair.js +0 -1
- package/dist/state/installRoot.js +0 -1
- package/dist/state/legacyEntityCutoverEvidence.js +0 -1
- package/dist/state/legacyIdentity.js +0 -1
- package/dist/state/legacySummaryRecord.js +0 -1
- package/dist/state/listAccounting.js +0 -1
- package/dist/state/listClassification.js +0 -1
- package/dist/state/listCursor.js +0 -1
- package/dist/state/listRetrieval.js +0 -1
- package/dist/state/migrationSourceBinding.js +0 -1
- package/dist/state/objectiveExperimentEntities.js +0 -1
- package/dist/state/planEntities.js +0 -1
- package/dist/state/planIdentity.js +0 -1
- package/dist/state/planRetrieval.js +0 -1
- package/dist/state/planTaskRetrieval.js +0 -1
- package/dist/state/progressEntities.js +0 -1
- package/dist/state/progressGlossaryCaveat.js +0 -1
- package/dist/state/progressPublicationOrder.js +0 -1
- package/dist/state/projectRoot.js +0 -1
- package/dist/state/projectionPolicy.js +0 -1
- package/dist/state/retrievalAuthority.js +0 -1
- package/dist/state/safeProjectFile.js +0 -1
- package/dist/state/startupAnalysis/benchmark.js +0 -1
- package/dist/state/startupAnalysis/contract.js +44 -10
- package/dist/state/startupAnalysis/helpers.js +0 -1
- package/dist/state/startupAnalysis/index.js +0 -1
- package/dist/state/startupAnalysis/metrics.js +0 -1
- package/dist/state/startupAnalysis/records.js +0 -1
- package/dist/state/startupAnalysis/report.js +0 -1
- package/dist/state/startupAnalysis/threshold.js +0 -1
- package/dist/state/startupAnalysis.js +0 -1
- package/dist/state/startupProjection.js +2 -2
- package/dist/state/stateMode.js +0 -1
- package/dist/state/stateStorageAuthority.js +0 -1
- package/dist/state/summaryEntityRead.js +0 -1
- package/dist/state/summaryMigrationProvenance.js +0 -1
- package/dist/state/summarySourceRowAuthority.js +0 -1
- package/dist/state/todoDocsEntities.js +161 -83
- package/dist/state/todoDocsEntityValidation.js +0 -1
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +73 -4
- package/dist/state/todoReconciliationInspection.js +173 -0
- package/dist/state/todoReconciliationRepair.js +170 -0
- package/dist/state/todoReconciliationTransaction.js +41 -13
- package/dist/state/write/assign.js +0 -1
- package/dist/state/write/candidateMutation.js +0 -1
- package/dist/state/write/errors.js +0 -1
- package/dist/state/write/experimentPublication.js +0 -1
- package/dist/state/write/explain.js +0 -1
- package/dist/state/write/fields.js +0 -1
- package/dist/state/write/glossaryPublication.js +0 -1
- package/dist/state/write/grammar.js +13 -4
- package/dist/state/write/helpers.js +0 -1
- package/dist/state/write/index.js +0 -1
- package/dist/state/write/input.js +0 -1
- package/dist/state/write/lock.js +0 -1
- package/dist/state/write/mutation.js +0 -1
- package/dist/state/write/operations.js +0 -1
- package/dist/state/write/planEvaluation.js +0 -1
- package/dist/state/write/planPublication.js +0 -1
- package/dist/state/write/runtimeOperations.js +83 -6
- package/dist/state/write/serialize.js +0 -1
- package/dist/state/write/transaction.js +0 -1
- package/dist/state/write/validate.js +0 -1
- package/dist/upgrade/appContentRefresh.js +0 -1
- package/dist/upgrade/appModel.js +0 -1
- package/dist/upgrade/atomicWriter.js +0 -1
- package/dist/upgrade/bundleEvidence.js +0 -1
- package/dist/upgrade/channels.js +0 -1
- package/dist/upgrade/compatibility.js +0 -1
- package/dist/upgrade/doctor.js +0 -1
- package/dist/upgrade/doctorClassifier.js +0 -1
- package/dist/upgrade/installedHooksRetirement.js +0 -1
- package/dist/upgrade/legacyAgentCleanup.js +0 -1
- package/dist/upgrade/lifecycleUpgrade.js +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js +7 -15
- package/dist/upgrade/migrationPublication.js +0 -1
- package/dist/upgrade/nextMajorDoctor.js +0 -1
- package/dist/upgrade/npxPlatformStatus.js +0 -1
- package/dist/upgrade/projectIntegration.js +4 -17
- package/dist/upgrade/projectIntegrationDecision.js +0 -1
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +61 -190
- package/dist/upgrade/upgradeCommands.js +5 -1
- package/dist/upgrade/upgradeLock.js +0 -1
- package/dist/upgrade/upgradeOrchestrator.js +52 -9
- package/dist/upgrade/v3CapabilitySurface.js +0 -1
- package/dist/upgrade/versionResolution.js +0 -1
- 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 +0 -2
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +0 -1
- package/dist/validate/crossCapability.js +0 -1
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +0 -1
- package/dist/validate/v1LegacyCruft.js +0 -10
- package/dist/validate/vocabularyAuthority.js +6 -8
- package/package.json +12 -5
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -127
- package/bundle/references/analysis/benchmark.md +0 -271
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -435
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -1015
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -395
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -241
- package/bundle/references/cli/capability-instruction-structure.md +0 -144
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/coexistence-probe.yaml +0 -13
- package/bundle/references/cli/parity-expected-actual-template.md +0 -30
- package/bundle/references/cli/prime-consumer-compatibility.yaml +0 -701
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -259
- package/bundle/references/cli/single-name-protocol.yaml +0 -42
- package/bundle/references/cli/upgrade-repair-wording.md +0 -25
- package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -97
- package/bundle/references/meta/documentation-inventory.md +0 -50
- package/bundle/skills/agentera/references/contract.md +0 -1097
- package/dist/analytics/extractCorpus/cli.js.map +0 -1
- package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/core.js.map +0 -1
- package/dist/analytics/extractCorpus/corpus.js.map +0 -1
- package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
- package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/evidenceTiers.js.map +0 -1
- package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
- package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
- package/dist/analytics/extractCorpus/index.js.map +0 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/tierReader.js.map +0 -1
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/glossaryAdviceResolution.js.map +0 -1
- package/dist/analytics/glossaryInputAcquisition.js.map +0 -1
- package/dist/analytics/personalGlossaryAdmission.js.map +0 -1
- package/dist/analytics/personalGlossaryProfile.js.map +0 -1
- package/dist/analytics/profileSignals.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/audit/terminologyDrift.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/capabilities/audit/instructions.js.map +0 -1
- package/dist/capabilities/build/instructions.js.map +0 -1
- package/dist/capabilities/design/instructions.js.map +0 -1
- package/dist/capabilities/discuss/instructions.js.map +0 -1
- package/dist/capabilities/document/instructions.js.map +0 -1
- package/dist/capabilities/index.js.map +0 -1
- package/dist/capabilities/optimize/instructions.js.map +0 -1
- package/dist/capabilities/orchestrate/instructions.js.map +0 -1
- package/dist/capabilities/plan/instructions.js.map +0 -1
- package/dist/capabilities/profile/instructions.js.map +0 -1
- package/dist/capabilities/research/instructions.js.map +0 -1
- package/dist/capabilities/status/instructions.js.map +0 -1
- package/dist/capabilities/status/startupInstructions.js.map +0 -1
- package/dist/capabilities/vision/instructions.js.map +0 -1
- package/dist/cli/appContext.js.map +0 -1
- package/dist/cli/argvalidate.js.map +0 -1
- package/dist/cli/capabilityContext/benchmark.js.map +0 -1
- package/dist/cli/capabilityContext/bespoke.js.map +0 -1
- package/dist/cli/capabilityContext/build.js.map +0 -1
- package/dist/cli/capabilityContext/closeout.js.map +0 -1
- package/dist/cli/capabilityContext/contract.js.map +0 -1
- package/dist/cli/capabilityContext/evidence.js.map +0 -1
- package/dist/cli/capabilityContext/index.js.map +0 -1
- package/dist/cli/capabilityContext/orchestration.js.map +0 -1
- package/dist/cli/capabilityContext/planState.js.map +0 -1
- package/dist/cli/capabilityContext/progress.js.map +0 -1
- package/dist/cli/capabilityContext/projectVerification.js.map +0 -1
- package/dist/cli/capabilityContext/shared.js.map +0 -1
- package/dist/cli/capabilityContext/slim.js.map +0 -1
- package/dist/cli/capabilityContext/startup.js.map +0 -1
- package/dist/cli/capabilityContext/types.js.map +0 -1
- package/dist/cli/capabilityContext.js.map +0 -1
- package/dist/cli/commands/appHome.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/durability.js.map +0 -1
- package/dist/cli/commands/entityMigrate.js +0 -132
- package/dist/cli/commands/entityMigrate.js.map +0 -1
- package/dist/cli/commands/glossaryAdvice.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/personalGlossary.js.map +0 -1
- package/dist/cli/commands/prime/briefOrientation.js.map +0 -1
- package/dist/cli/commands/prime/buildExecutionRequest.js.map +0 -1
- package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
- package/dist/cli/commands/prime/collectEntityOrientation.js.map +0 -1
- package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
- package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
- package/dist/cli/commands/prime/types.js.map +0 -1
- package/dist/cli/commands/prime/v1Migration.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/profileGrounding.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/route.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state/decisions.js.map +0 -1
- package/dist/cli/commands/state/docs.js.map +0 -1
- package/dist/cli/commands/state/experimentRecords.js.map +0 -1
- package/dist/cli/commands/state/experiments.js.map +0 -1
- package/dist/cli/commands/state/get.js.map +0 -1
- package/dist/cli/commands/state/health.js.map +0 -1
- package/dist/cli/commands/state/index.js.map +0 -1
- package/dist/cli/commands/state/list.js.map +0 -1
- package/dist/cli/commands/state/objective.js.map +0 -1
- package/dist/cli/commands/state/plan.js.map +0 -1
- package/dist/cli/commands/state/planTasks.js.map +0 -1
- package/dist/cli/commands/state/plans.js.map +0 -1
- package/dist/cli/commands/state/progress.js.map +0 -1
- package/dist/cli/commands/state/shared.js.map +0 -1
- package/dist/cli/commands/state/todo.js.map +0 -1
- package/dist/cli/commands/state/write.js.map +0 -1
- package/dist/cli/commands/upgrade.js.map +0 -1
- package/dist/cli/commands/upgradeVerify.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/contracts/bundleStatus.js.map +0 -1
- package/dist/cli/contracts/orientationState.js.map +0 -1
- package/dist/cli/dispatch/argvParser.js.map +0 -1
- package/dist/cli/dispatch/check.js.map +0 -1
- package/dist/cli/dispatch/commands.js.map +0 -1
- package/dist/cli/dispatch/index.js.map +0 -1
- package/dist/cli/dispatch/lifecycle.js.map +0 -1
- package/dist/cli/dispatch/prime.js.map +0 -1
- package/dist/cli/dispatch/shared.js.map +0 -1
- package/dist/cli/dispatch/state.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/migrationRequired.js.map +0 -1
- package/dist/cli/orientation/attention.js.map +0 -1
- package/dist/cli/orientation/corpusCoverage.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/planArtifacts.js.map +0 -1
- package/dist/cli/planEvidence.js.map +0 -1
- package/dist/cli/planLifecycleState.js.map +0 -1
- package/dist/cli/planTaskIndex.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/profileAcquisition.js.map +0 -1
- package/dist/cli/startupCompletenessContract.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/cli/todoMarkdown.js.map +0 -1
- package/dist/cli/todoReadinessSelection.js.map +0 -1
- package/dist/cli/todoSeverity.js.map +0 -1
- package/dist/core/atomicWriter.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/envPaths.js.map +0 -1
- package/dist/core/jsonValue.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/shell.js.map +0 -1
- package/dist/core/skillIdentity.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/text.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/hybridRouteEvaluation.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/apply.js.map +0 -1
- package/dist/hooks/compaction/dryRun.js.map +0 -1
- package/dist/hooks/compaction/index.js.map +0 -1
- package/dist/hooks/compaction/parse.js.map +0 -1
- package/dist/hooks/compaction/retention.js.map +0 -1
- package/dist/hooks/compaction/status.js.map +0 -1
- package/dist/hooks/compaction/types.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 -64
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/projectHookInput.js +0 -26
- package/dist/hooks/projectHookInput.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -94
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -198
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
- package/dist/hooks/validateArtifact/index.js.map +0 -1
- package/dist/hooks/validateArtifact/markdown.js.map +0 -1
- package/dist/hooks/validateArtifact/runtime.js +0 -86
- package/dist/hooks/validateArtifact/runtime.js.map +0 -1
- package/dist/hooks/validateArtifact/schema.js.map +0 -1
- package/dist/hooks/validateArtifact/traversal.js.map +0 -1
- package/dist/hooks/validateArtifact/violations.js.map +0 -1
- package/dist/migrate/v2HandoffManifest.js.map +0 -1
- package/dist/registries/artifactProtocolIds.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/artifactSchemaProjection.js.map +0 -1
- package/dist/registries/capabilityContract.js.map +0 -1
- package/dist/registries/evaluatorHandoffContract.js.map +0 -1
- package/dist/registries/evidenceTierContract.js.map +0 -1
- package/dist/registries/glossaryAdviceContract.js.map +0 -1
- package/dist/registries/glossaryCaveatContract.js.map +0 -1
- package/dist/registries/glossaryConsumerContractValidation.js.map +0 -1
- package/dist/registries/glossaryEntryContract.js.map +0 -1
- package/dist/registries/glossaryTermIdentity.js.map +0 -1
- package/dist/registries/glossaryTermOccurrence.js.map +0 -1
- package/dist/registries/hybridRoute.js.map +0 -1
- package/dist/registries/hybridRouteReceipt.js.map +0 -1
- package/dist/registries/packageRegistry.js.map +0 -1
- package/dist/registries/todoReadinessContract.js.map +0 -1
- package/dist/registries/triggerLoader.js.map +0 -1
- package/dist/registries/verbosityBudgetContract.js.map +0 -1
- package/dist/release/releaseMetadata.js.map +0 -1
- package/dist/runtime/lifecycleAdapterContract.js.map +0 -1
- package/dist/runtime/lifecycleAdapters.js.map +0 -1
- package/dist/runtime/lifecycleAuthority.js.map +0 -1
- package/dist/runtime/lifecycleOperationContract.js.map +0 -1
- package/dist/runtime/lifecycleOperations.js.map +0 -1
- package/dist/runtime/lifecycleOwnershipJournal.js.map +0 -1
- package/dist/runtime/lifecyclePublication.js.map +0 -1
- package/dist/runtime/lifecycleSnapshot.js.map +0 -1
- package/dist/runtime/nativeResourceCleanup.js.map +0 -1
- package/dist/setup/codex/cli.js +0 -130
- package/dist/setup/codex/cli.js.map +0 -1
- package/dist/setup/codex/configToml.js +0 -558
- package/dist/setup/codex/configToml.js.map +0 -1
- package/dist/setup/codex/constants.js +0 -14
- package/dist/setup/codex/constants.js.map +0 -1
- package/dist/setup/codex/installRoot.js +0 -64
- package/dist/setup/codex/installRoot.js.map +0 -1
- package/dist/setup/codex/state.js +0 -252
- package/dist/setup/codex/state.js.map +0 -1
- package/dist/setup/codex.js +0 -10
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/opencode.js.map +0 -1
- package/dist/setup/opencodeConstants.js.map +0 -1
- package/dist/setup/sharedSkill.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/archiveDiscovery.js.map +0 -1
- package/dist/state/archivePublication.js.map +0 -1
- package/dist/state/archiveRecovery.js.map +0 -1
- package/dist/state/archiveReplay.js.map +0 -1
- package/dist/state/canonicalMigrationRecord.js.map +0 -1
- package/dist/state/changelog.js.map +0 -1
- package/dist/state/decisionEntities.js.map +0 -1
- package/dist/state/decisionLegacyValidation.js.map +0 -1
- package/dist/state/decisionMigrationProvenance.js.map +0 -1
- package/dist/state/decisionOverlay.js.map +0 -1
- package/dist/state/decisionRevision.js.map +0 -1
- package/dist/state/decisionRevisionMigration.js.map +0 -1
- package/dist/state/directRetrieval.js.map +0 -1
- package/dist/state/durability.js.map +0 -1
- package/dist/state/entityCutover.js.map +0 -1
- package/dist/state/entityCutoverGit.js.map +0 -1
- package/dist/state/entityGlossaryAuthority.js.map +0 -1
- package/dist/state/entityListProjection.js.map +0 -1
- package/dist/state/entityListRuntimeRegistry.js.map +0 -1
- package/dist/state/entityMigrationCausality.js.map +0 -1
- package/dist/state/entityMigrationIdentity.js.map +0 -1
- package/dist/state/entityMigrationPreview.js.map +0 -1
- package/dist/state/entityPublicationContext.js.map +0 -1
- package/dist/state/entityRetrievalHelp.js.map +0 -1
- package/dist/state/entityStorage.js.map +0 -1
- package/dist/state/exactReplacementRecovery.js.map +0 -1
- package/dist/state/experimentArchive.js.map +0 -1
- package/dist/state/experimentIdentity.js.map +0 -1
- package/dist/state/healthEntities.js.map +0 -1
- package/dist/state/healthEntityValidation.js.map +0 -1
- package/dist/state/healthRepair.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/legacyEntityCutoverEvidence.js.map +0 -1
- package/dist/state/legacyIdentity.js.map +0 -1
- package/dist/state/legacySummaryRecord.js.map +0 -1
- package/dist/state/listAccounting.js.map +0 -1
- package/dist/state/listClassification.js.map +0 -1
- package/dist/state/listCursor.js.map +0 -1
- package/dist/state/listRetrieval.js.map +0 -1
- package/dist/state/migrationSourceBinding.js.map +0 -1
- package/dist/state/objectiveExperimentEntities.js.map +0 -1
- package/dist/state/planEntities.js.map +0 -1
- package/dist/state/planIdentity.js.map +0 -1
- package/dist/state/planRetrieval.js.map +0 -1
- package/dist/state/planTaskRetrieval.js.map +0 -1
- package/dist/state/progressEntities.js.map +0 -1
- package/dist/state/progressGlossaryCaveat.js.map +0 -1
- package/dist/state/progressPublicationOrder.js.map +0 -1
- package/dist/state/projectRoot.js.map +0 -1
- package/dist/state/projectionPolicy.js.map +0 -1
- package/dist/state/retrievalAuthority.js.map +0 -1
- package/dist/state/safeProjectFile.js.map +0 -1
- package/dist/state/startupAnalysis/benchmark.js.map +0 -1
- package/dist/state/startupAnalysis/contract.js.map +0 -1
- package/dist/state/startupAnalysis/helpers.js.map +0 -1
- package/dist/state/startupAnalysis/index.js.map +0 -1
- package/dist/state/startupAnalysis/metrics.js.map +0 -1
- package/dist/state/startupAnalysis/records.js.map +0 -1
- package/dist/state/startupAnalysis/report.js.map +0 -1
- package/dist/state/startupAnalysis/threshold.js.map +0 -1
- package/dist/state/startupAnalysis.js.map +0 -1
- package/dist/state/startupProjection.js.map +0 -1
- package/dist/state/stateMode.js.map +0 -1
- package/dist/state/stateStorageAuthority.js.map +0 -1
- package/dist/state/summaryEntityRead.js.map +0 -1
- package/dist/state/summaryMigrationProvenance.js.map +0 -1
- package/dist/state/summarySourceRowAuthority.js.map +0 -1
- package/dist/state/todoDocsEntities.js.map +0 -1
- package/dist/state/todoDocsEntityValidation.js.map +0 -1
- package/dist/state/todoReconciliationActivation.js.map +0 -1
- package/dist/state/todoReconciliationTransaction.js.map +0 -1
- package/dist/state/write/assign.js.map +0 -1
- package/dist/state/write/candidateMutation.js.map +0 -1
- package/dist/state/write/errors.js.map +0 -1
- package/dist/state/write/experimentPublication.js.map +0 -1
- package/dist/state/write/explain.js.map +0 -1
- package/dist/state/write/fields.js.map +0 -1
- package/dist/state/write/glossaryPublication.js.map +0 -1
- package/dist/state/write/grammar.js.map +0 -1
- package/dist/state/write/helpers.js.map +0 -1
- package/dist/state/write/index.js.map +0 -1
- package/dist/state/write/input.js.map +0 -1
- package/dist/state/write/lock.js.map +0 -1
- package/dist/state/write/mutation.js.map +0 -1
- package/dist/state/write/operations.js.map +0 -1
- package/dist/state/write/planEvaluation.js.map +0 -1
- package/dist/state/write/planPublication.js.map +0 -1
- package/dist/state/write/runtimeOperations.js.map +0 -1
- package/dist/state/write/serialize.js.map +0 -1
- package/dist/state/write/transaction.js.map +0 -1
- package/dist/state/write/validate.js.map +0 -1
- package/dist/upgrade/appContentRefresh.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/atomicWriter.js.map +0 -1
- package/dist/upgrade/bundleEvidence.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/coexistenceProbe.js +0 -105
- package/dist/upgrade/coexistenceProbe.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/doctorClassifier.js.map +0 -1
- package/dist/upgrade/installedHooksRetirement.js.map +0 -1
- package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
- package/dist/upgrade/lifecycleUpgrade.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/migrationPublication.js.map +0 -1
- package/dist/upgrade/nextMajorDoctor.js.map +0 -1
- package/dist/upgrade/npxPlatformStatus.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/upgradeLock.js.map +0 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
- package/dist/upgrade/v3CapabilitySurface.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/selfAudit.js.map +0 -1
- package/dist/validate/v1LegacyCruft.js.map +0 -1
- package/dist/validate/vocabularyAuthority.js.map +0 -1
|
@@ -2,13 +2,12 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import YAML from "yaml";
|
|
5
|
-
import {
|
|
5
|
+
import { fullEntityUpgradePreviewCommand } from "../upgrade/upgradeCommands.js";
|
|
6
6
|
import { loadYamlMapping } from "../core/yaml.js";
|
|
7
7
|
import { discoverPlanArtifacts, planDocumentParts } from "../cli/planArtifacts.js";
|
|
8
|
-
import { parseTodoMarkdownListItem, renderTodoPublicRecord } from "../cli/todoMarkdown.js";
|
|
9
8
|
import { assertRealpathBoundary, docsPathOverridesFromBytes, loadArtifactRecord, resolveArtifactPath } from "../registries/artifactRegistry.js";
|
|
10
9
|
import { canonicalRecordJson, validateStateRecord } from "./archiveDiscovery.js";
|
|
11
|
-
import { canonicalEntityEnvelopeBytes,
|
|
10
|
+
import { canonicalEntityEnvelopeBytes, entityForbiddenCanonicalAliases, entityPreservedAggregateCollections, validateCanonicalEntityTargets } from "./entityStorage.js";
|
|
12
11
|
import { discoverObjectiveArtifacts, inspectExperimentIdentities } from "./experimentIdentity.js";
|
|
13
12
|
import { decisionRevisionContract, decisionRevisionViolations } from "./decisionRevision.js";
|
|
14
13
|
import { classifyCompleteDecisionConfidence, decisionLegacyCoexistence } from "./decisionLegacyValidation.js";
|
|
@@ -22,7 +21,20 @@ import { legacyIdentity } from "./legacyIdentity.js";
|
|
|
22
21
|
import { canonicalMigrationRecord } from "./canonicalMigrationRecord.js";
|
|
23
22
|
import { legacySummaryRecord } from "./legacySummaryRecord.js";
|
|
24
23
|
import { applyCausalBlockers } from "./entityMigrationCausality.js";
|
|
24
|
+
import { todoMigrationObservations, todoReconciliationMigrationPlan } from "./entityMigrationTodo.js";
|
|
25
|
+
import { detectStateMode } from "./stateMode.js";
|
|
26
|
+
import { TODO_RECONCILIATION_ACTIVATION_PATH } from "./todoReconciliationActivation.js";
|
|
25
27
|
import { projectPathIsStable as migrationPathIsStable, readProjectFileSnapshot, resolveProjectDescriptorPath, snapshotProjectPath as snapshotMigrationPath, } from "./safeProjectFile.js";
|
|
28
|
+
export function classifyEntityCutoverProject(project, sourceRoot) {
|
|
29
|
+
if (detectStateMode(project, sourceRoot) === "entities")
|
|
30
|
+
return "v3";
|
|
31
|
+
const stateRoot = path.join(project, ".agentera");
|
|
32
|
+
const aggregateNames = ["plan.yaml", "progress.yaml", "decisions.yaml", "health.yaml"];
|
|
33
|
+
const aggregateCount = aggregateNames.filter((name) => fs.existsSync(path.join(stateRoot, name))).length;
|
|
34
|
+
if (!fs.existsSync(stateRoot) || aggregateCount === 0 && !fs.existsSync(path.join(stateRoot, "entities")))
|
|
35
|
+
return "clean";
|
|
36
|
+
return fs.existsSync(path.join(stateRoot, "entities")) || aggregateCount === 1 ? "partial" : "v2";
|
|
37
|
+
}
|
|
26
38
|
export const ENTITY_MIGRATION_PREVIEW_MAX_OUTPUT_BYTES = 32_768;
|
|
27
39
|
const DEFAULT_LIMIT = 100;
|
|
28
40
|
const MAX_LIMIT = 1000;
|
|
@@ -127,8 +139,10 @@ function collectSources(root, validatedRoot, todoPath, docsSnapshot, descriptorP
|
|
|
127
139
|
const archives = directoryFiles(root, validatedRoot, ".agentera/archive", (candidate) => /^\.agentera\/archive\/(progress|decisions|health)\/.+/.test(candidate)
|
|
128
140
|
|| PLAN_ARCHIVE_SOURCE.test(candidate), descriptorPathResolver);
|
|
129
141
|
const objectives = [".agentera/optimize", ".agentera/optimera"].flatMap((directory) => directoryFiles(root, validatedRoot, directory, (candidate) => /\/(objective|experiments)\.yaml$/.test(candidate), descriptorPathResolver));
|
|
130
|
-
const
|
|
131
|
-
const
|
|
142
|
+
const todoEntities = directoryFiles(root, validatedRoot, ".agentera/entities/todo/todo_item", (candidate) => candidate.endsWith(".yaml"), descriptorPathResolver);
|
|
143
|
+
const activation = readMigrationSource(validatedRoot, TODO_RECONCILIATION_ACTIVATION_PATH, descriptorPathResolver);
|
|
144
|
+
const collected = [...exact, ...archives, ...objectives, ...todoEntities, activation];
|
|
145
|
+
const missingRoots = [".agentera/archive/", ".agentera/optimize/", ".agentera/optimera/", ".agentera/entities/todo/todo_item/"]
|
|
132
146
|
.filter((directory) => {
|
|
133
147
|
if (collected.some((source) => source.kind === "unsafe" && source.relative === directory))
|
|
134
148
|
return false;
|
|
@@ -152,13 +166,6 @@ function authorityBinding(sourceRoot) {
|
|
|
152
166
|
}
|
|
153
167
|
return { authority_schema_version: authority.schema_version, authority_sha256: hash(bytes) };
|
|
154
168
|
}
|
|
155
|
-
export function entityMigrationAuthorityProjection(sourceRoot = resolveSourceRoot()) {
|
|
156
|
-
const authorityPath = path.join(sourceRoot, AUTHORITY_PATH);
|
|
157
|
-
const authority = loadYamlMapping(fs.readFileSync(authorityPath, "utf8"));
|
|
158
|
-
if (!mapping(authority.entity_migration))
|
|
159
|
-
throw new Error(`state storage authority '${authorityPath}' has no entity migration contract`);
|
|
160
|
-
return { authority: AUTHORITY_PATH, ...authority.entity_migration };
|
|
161
|
-
}
|
|
162
169
|
function sourceFingerprint(files) {
|
|
163
170
|
return hash(canonicalRecordJson(files.map((file) => ({
|
|
164
171
|
path: file.relative,
|
|
@@ -177,7 +184,7 @@ function parseYaml(source) {
|
|
|
177
184
|
return loadYamlMapping(source.bytes.toString("utf8"));
|
|
178
185
|
}
|
|
179
186
|
function recovery(project, pathName) {
|
|
180
|
-
return `Repair '${pathName}', then run
|
|
187
|
+
return `Repair '${pathName}', then run ${fullEntityUpgradePreviewCommand(project)}.`;
|
|
181
188
|
}
|
|
182
189
|
function unsafeSourceMessage(pathName) {
|
|
183
190
|
return `source path '${pathName}' is a symbolic link, non-file, or unreadable; replace it with a readable regular file inside the project`;
|
|
@@ -476,41 +483,8 @@ function objectiveObservations(root, files, observations) {
|
|
|
476
483
|
observations.push({ key: `${artifact}:corrupt:${source.relative}`, artifact, boundary: artifact === "objective" ? "objective" : "experiment", path: source.relative, provenance: artifact === "objective" ? "objective_candidate" : "experiment_projection", record: null, detail: "corrupt", relationships: [], message: unsafeSourceMessage(source.relative) });
|
|
477
484
|
}
|
|
478
485
|
}
|
|
479
|
-
function todoAndDocs(root, todoPath, files, observations) {
|
|
480
|
-
|
|
481
|
-
if (todo?.kind === "file" && todo.bytes) {
|
|
482
|
-
let section = "normal";
|
|
483
|
-
todo.bytes.toString("utf8").split(/\r?\n/).forEach((line, index) => {
|
|
484
|
-
const heading = line.trim().match(/^##\s+(.+)$/)?.[1]?.toLowerCase();
|
|
485
|
-
if (heading)
|
|
486
|
-
section = heading.includes("critical") ? "critical" : heading.includes("degraded") ? "degraded" : heading.includes("annoying") ? "annoying" : heading.includes("resolved") ? "resolved" : heading.includes("normal") ? "normal" : section;
|
|
487
|
-
const item = parseTodoMarkdownListItem(line.trim());
|
|
488
|
-
if (!item)
|
|
489
|
-
return;
|
|
490
|
-
const severity = section === "resolved" ? "normal" : section;
|
|
491
|
-
const record = item.kind
|
|
492
|
-
? { kind: item.kind, target_version: item.target_version ?? null, title: item.title ?? item.description, requirements: [], acceptance: [], release_blocker: false, severity, status: item.status }
|
|
493
|
-
: { severity, status: item.status, description: item.description };
|
|
494
|
-
const violations = todoDocsRecordViolations("todo_item", record);
|
|
495
|
-
observations.push({ key: `${todoPath}:line:${index + 1}`, artifact: "todo", boundary: "todo_item", path: todoPath, provenance: "current_canonical", record, detail: violations.length ? "corrupt" : "full", relationships: [], message: violations.length ? violations.join("; ") : undefined });
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
|
-
else if (todo?.kind === "unsafe") {
|
|
499
|
-
observations.push({ key: "todo:document", artifact: "todo", boundary: "todo_item", path: todoPath, provenance: "current_canonical", record: null, detail: "corrupt", relationships: [], message: unsafeSourceMessage(todoPath) });
|
|
500
|
-
}
|
|
501
|
-
const existingTodos = discoverEntities(root, resolveSourceRoot()).entities.filter((entity) => entity.boundary === "todo_item" && entity.id && entity.record);
|
|
502
|
-
for (const entity of existingTodos) {
|
|
503
|
-
const row = todoMarkdownRowForMigration(todo?.kind === "file" && todo.bytes ? todo.bytes.toString("utf8") : "", entity.id);
|
|
504
|
-
if (!row)
|
|
505
|
-
continue;
|
|
506
|
-
const severityMatches = row.severity === "resolved" || row.severity === null || entity.record.severity === row.severity;
|
|
507
|
-
const publicText = row.item.public_description ?? row.item.description;
|
|
508
|
-
const entityText = renderTodoPublicRecord(entity.record);
|
|
509
|
-
const textMatches = entity.record.title !== undefined ? entityText === publicText : entityText === row.item.description || entityText === publicText;
|
|
510
|
-
const publicMatches = entity.record.status === row.item.status && severityMatches && textMatches;
|
|
511
|
-
if (!publicMatches)
|
|
512
|
-
observations.push({ key: `conflict:todo:public:${entity.id}`, artifact: "todo", boundary: "todo_item", path: todoPath, provenance: "public_authority_conflict", record: null, detail: "corrupt", relationships: [], message: `TODO.md and Agentera disagree on public values for TODO '${entity.id}'` });
|
|
513
|
-
}
|
|
486
|
+
function todoAndDocs(root, sourceRoot, todoPath, files, observations) {
|
|
487
|
+
observations.push(...todoMigrationObservations(root, sourceRoot, todoPath, files));
|
|
514
488
|
const docs = files.find((source) => source.relative === ".agentera/docs.yaml");
|
|
515
489
|
if (docs?.kind === "file") {
|
|
516
490
|
try {
|
|
@@ -535,18 +509,6 @@ function todoAndDocs(root, todoPath, files, observations) {
|
|
|
535
509
|
observations.push({ key: "docs:document", artifact: "docs", boundary: "documentation_inventory_entry", path: docs.relative, provenance: "current_canonical", record: null, detail: "corrupt", relationships: [], message: unsafeSourceMessage(docs.relative) });
|
|
536
510
|
}
|
|
537
511
|
}
|
|
538
|
-
function todoMarkdownRowForMigration(text, id) {
|
|
539
|
-
let section = "normal";
|
|
540
|
-
for (const line of text.split(/\r?\n/)) {
|
|
541
|
-
const heading = line.trim().match(/^##\s+(.+)$/)?.[1]?.toLowerCase();
|
|
542
|
-
if (heading)
|
|
543
|
-
section = heading.includes("critical") ? "critical" : heading.includes("degraded") ? "degraded" : heading.includes("annoying") ? "annoying" : heading.includes("resolved") ? "resolved" : heading.includes("normal") ? "normal" : section;
|
|
544
|
-
const item = parseTodoMarkdownListItem(line.trim());
|
|
545
|
-
if (item?.id === id)
|
|
546
|
-
return { severity: section === "resolved" ? "resolved" : ["critical", "degraded", "normal", "annoying"].includes(section) ? section : null, item };
|
|
547
|
-
}
|
|
548
|
-
return null;
|
|
549
|
-
}
|
|
550
512
|
function preservedSingletons(files) {
|
|
551
513
|
const declarations = [
|
|
552
514
|
{ boundary: "vision", source_path: ".agentera/vision.yaml" },
|
|
@@ -624,7 +586,8 @@ function buildEntries(project, sourceRoot, fingerprint, observations, forbiddenA
|
|
|
624
586
|
? [...canonicalSummaryBodies(group, forbiddenAliases)].sort()
|
|
625
587
|
: [];
|
|
626
588
|
const identityBinding = canonicalSummaries.length === 1 ? hash(canonicalRecordJson(canonicalSummaries)) : fingerprint;
|
|
627
|
-
|
|
589
|
+
const explicitIds = [...new Set(group.map((item) => item.explicitId).filter((id) => id !== undefined))];
|
|
590
|
+
ids.set(key, explicitIds.length === 1 ? explicitIds[0] : entityMigrationId(identityBinding, key));
|
|
628
591
|
}
|
|
629
592
|
const collisions = new Set();
|
|
630
593
|
const idOwners = new Map();
|
|
@@ -732,16 +695,17 @@ function migrationInventory(projectRoot, sourceRoot, resolveDescriptorPath) {
|
|
|
732
695
|
decisionEvidence(sourceRoot, files, observations);
|
|
733
696
|
planObservations(project, files, observations);
|
|
734
697
|
objectiveObservations(project, files, observations);
|
|
735
|
-
todoAndDocs(project, todoPath, files, observations);
|
|
698
|
+
todoAndDocs(project, sourceRoot, todoPath, files, observations);
|
|
736
699
|
const preserved = preservedSingletons(files);
|
|
737
700
|
const completeInventory = buildEntries(project, sourceRoot, fingerprint, observations, entityForbiddenCanonicalAliases(sourceRoot));
|
|
738
701
|
const preservedResidues = completeInventory.filter((entry) => entry.classification === "historical_projection_residue");
|
|
739
702
|
const completeEntries = completeInventory.filter((entry) => entry.classification !== "historical_projection_residue");
|
|
703
|
+
const todoReconciliation = todoReconciliationMigrationPlan(todoPath, files, completeEntries);
|
|
740
704
|
for (const entry of completeEntries) {
|
|
741
705
|
if (entry.proposed_target && entry.artifact)
|
|
742
706
|
entry.target_sha256 = hash(canonicalEntityEnvelopeBytes({ id: entry.proposed_target.id, artifact: entry.artifact, record: entry.record, migrationProvenance: entry.canonical_migration_provenance }));
|
|
743
707
|
}
|
|
744
|
-
let causal = applyCausalBlockers(completeEntries,
|
|
708
|
+
let causal = applyCausalBlockers(completeEntries, (sourcePath) => recovery(project, sourcePath));
|
|
745
709
|
const targetDiagnostics = validateEntityMigrationTargets(project, completeEntries, sourceRoot);
|
|
746
710
|
for (const diagnostic of targetDiagnostics) {
|
|
747
711
|
const entry = completeEntries.find((candidate) => candidate.source_identity === diagnostic.sourceIdentity);
|
|
@@ -754,7 +718,7 @@ function migrationInventory(projectRoot, sourceRoot, resolveDescriptorPath) {
|
|
|
754
718
|
entry.recovery = recovery(project, entry.source_paths[0]);
|
|
755
719
|
causal.rootReasons.set(entry.source_identity, `target_invalid: ${diagnostic.message}`);
|
|
756
720
|
}
|
|
757
|
-
causal = applyCausalBlockers(completeEntries,
|
|
721
|
+
causal = applyCausalBlockers(completeEntries, (sourcePath) => recovery(project, sourcePath), causal.rootReasons);
|
|
758
722
|
const classes = ["verified_full", "recoverable_degraded_full_projection", "valid_compacted_summary", "duplicate", "conflict", "corrupt", "unsupported", "historical_projection_residue"];
|
|
759
723
|
const counts = Object.fromEntries(classes.map((classification) => [classification, completeInventory.filter((entry) => entry.classification === classification).length]));
|
|
760
724
|
counts.total = completeInventory.length;
|
|
@@ -805,12 +769,12 @@ function migrationInventory(projectRoot, sourceRoot, resolveDescriptorPath) {
|
|
|
805
769
|
counts.blockers = counts.root_blockers + counts.dependent_blockers;
|
|
806
770
|
const digestEntries = completeEntries.map(({ record: _record, ...entry }) => entry);
|
|
807
771
|
const digestResidues = preservedResidues.map(({ record: _record, ...entry }) => entry);
|
|
808
|
-
const digestBody = { source_fingerprint: fingerprint, authority, selectors: { project, filter: INVENTORY_FILTER, order: INVENTORY_ORDER }, entries: digestEntries, preserved_residues: digestResidues, preserved_singletons: preserved, counts, diagnostics };
|
|
772
|
+
const digestBody = { source_fingerprint: fingerprint, authority, selectors: { project, filter: INVENTORY_FILTER, order: INVENTORY_ORDER }, entries: digestEntries, preserved_residues: digestResidues, preserved_singletons: preserved, counts, diagnostics, todo_reconciliation: todoReconciliation ?? null };
|
|
809
773
|
const previewDigest = hash(canonicalRecordJson(digestBody));
|
|
810
774
|
const sources = files.map((file) => {
|
|
811
775
|
return { path: file.relative, presence: file.kind === "file" ? "file" : "missing", size: file.bytes?.byteLength ?? 0, sha256: file.bytes ? hash(file.bytes) : null, mode: file.kind === "file" ? file.mode : null, dev: file.kind === "file" ? String(file.dev) : null, ino: file.kind === "file" ? String(file.ino) : null, type: file.kind === "file" ? file.type : null, bytes_base64: file.bytes?.toString("base64") ?? null };
|
|
812
776
|
});
|
|
813
|
-
return { project, source_fingerprint: fingerprint, preview_digest: previewDigest, ...authority, preserved_singletons: preserved, entries: completeEntries, preserved_residues: preservedResidues, sources, counts, diagnostics };
|
|
777
|
+
return { project, source_fingerprint: fingerprint, preview_digest: previewDigest, ...authority, preserved_singletons: preserved, entries: completeEntries, preserved_residues: preservedResidues, sources, counts, diagnostics, ...(todoReconciliation ? { todo_reconciliation: todoReconciliation } : {}) };
|
|
814
778
|
}
|
|
815
779
|
export function planEntityMigration(projectRoot, sourceRoot, options = {}) {
|
|
816
780
|
return migrationInventory(projectRoot, sourceRoot, options.resolveDescriptorPath ?? resolveProjectDescriptorPath);
|
|
@@ -822,7 +786,7 @@ export function previewEntityMigration(projectRoot, sourceRoot, options = {}) {
|
|
|
822
786
|
const completeEntries = inventory.entries.map(({ record: _record, ...entry }) => entry);
|
|
823
787
|
const preservedResidues = inventory.preserved_residues.map(({ record: _record, ...entry }) => entry);
|
|
824
788
|
const requestedLimit = Math.max(1, Math.min(options.limit ?? DEFAULT_LIMIT, MAX_LIMIT));
|
|
825
|
-
const restartCommand =
|
|
789
|
+
const restartCommand = fullEntityUpgradePreviewCommand(project);
|
|
826
790
|
if (options.after !== undefined && (options.sourceFingerprint !== fingerprint || options.previewDigest !== previewDigest)) {
|
|
827
791
|
throw new EntityMigrationContinuationError(restartCommand);
|
|
828
792
|
}
|
|
@@ -835,12 +799,11 @@ export function previewEntityMigration(projectRoot, sourceRoot, options = {}) {
|
|
|
835
799
|
return diagnostics.filter((diagnostic) => identities.has(diagnostic.source_identity));
|
|
836
800
|
};
|
|
837
801
|
let omissionReason = start > 0 || start + entries.length < completeEntries.length ? "result_limit" : null;
|
|
838
|
-
const
|
|
839
|
-
const base = { schemaVersion: "agentera.entityMigrationPreview.v1", command: "state migrate entities", status: counts.blockers > 0 ? "blocked" : "ready", mode: "preview", project, read_only: true, mutation_intent: false, mutation_performed: false, source_fingerprint: fingerprint, preview_digest: previewDigest, preserved_singletons: preserved, preserved_residues: preservedResidues, counts, source_contract: { authority: AUTHORITY_PATH, ...authority, zero_write: true, scalar_truncation: "forbidden", apply_owner: "full development-channel upgrade --yes" } };
|
|
802
|
+
const base = { schemaVersion: "agentera.entityMigrationPreview.v1", command: "upgrade", status: counts.blockers > 0 ? "blocked" : "ready", mode: "preview", project, read_only: true, mutation_intent: false, mutation_performed: false, source_fingerprint: fingerprint, preview_digest: previewDigest, preserved_singletons: preserved, preserved_residues: preservedResidues, counts, source_contract: { authority: AUTHORITY_PATH, ...authority, zero_write: true, scalar_truncation: "forbidden", apply_owner: "full development-channel upgrade --yes" } };
|
|
840
803
|
const serializedBytes = () => {
|
|
841
804
|
const pageDiagnostics = diagnosticsForEntries();
|
|
842
805
|
const nextAfter = start + entries.length < completeEntries.length ? entries.at(-1)?.source_identity ?? null : null;
|
|
843
|
-
const command =
|
|
806
|
+
const command = restartCommand;
|
|
844
807
|
const body = { ...base, entries, diagnostics: pageDiagnostics, omitted: start > 0 || entries.length < completeEntries.length, omitted_count: completeEntries.length - entries.length, diagnostics_omitted_count: diagnostics.length - pageDiagnostics.length, omission_reason: omissionReason, page_after: options.after ?? null, next_after: nextAfter, retrieval: { command } };
|
|
845
808
|
return Math.max(Buffer.byteLength(JSON.stringify(body, null, 2), "utf8"), Buffer.byteLength(YAML.stringify(body), "utf8"));
|
|
846
809
|
};
|
|
@@ -852,7 +815,7 @@ export function previewEntityMigration(projectRoot, sourceRoot, options = {}) {
|
|
|
852
815
|
throw new Error(`the next whole migration entry exceeds the ${ENTITY_MIGRATION_PREVIEW_MAX_OUTPUT_BYTES}-byte output budget; repair that source before retrying`);
|
|
853
816
|
const outputDiagnostics = diagnosticsForEntries();
|
|
854
817
|
const nextAfter = start + entries.length < completeEntries.length ? entries.at(-1)?.source_identity ?? null : null;
|
|
855
|
-
const retrieval = { command:
|
|
818
|
+
const retrieval = { command: restartCommand };
|
|
856
819
|
return { ...base, status: base.status, mode: "preview", entries, diagnostics: outputDiagnostics, omitted: start > 0 || entries.length < completeEntries.length, omitted_count: completeEntries.length - entries.length, diagnostics_omitted_count: diagnostics.length - outputDiagnostics.length, omission_reason: omissionReason, page_after: options.after ?? null, next_after: nextAfter, retrieval };
|
|
857
820
|
}
|
|
858
821
|
export class EntityMigrationContinuationError extends Error {
|
|
@@ -869,7 +832,7 @@ export class EntityMigrationBindingError extends Error {
|
|
|
869
832
|
classification = "source_changed";
|
|
870
833
|
restartCommand;
|
|
871
834
|
constructor(current) {
|
|
872
|
-
const restartCommand =
|
|
835
|
+
const restartCommand = fullEntityUpgradePreviewCommand(current.project);
|
|
873
836
|
super(`entity migration source or migration authority changed after preview; rerun ${restartCommand}`);
|
|
874
837
|
this.current = current;
|
|
875
838
|
this.restartCommand = restartCommand;
|
|
@@ -881,4 +844,3 @@ export function assertEntityMigrationBinding(expectedSourceFingerprint, expected
|
|
|
881
844
|
throw new EntityMigrationBindingError(current);
|
|
882
845
|
return effect();
|
|
883
846
|
}
|
|
884
|
-
//# sourceMappingURL=entityMigrationPreview.js.map
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { parseTodoMarkdownListItem, renderTodoPublicRecord } from "../cli/todoMarkdown.js";
|
|
3
|
+
import { discoverEntities } from "./entityStorage.js";
|
|
4
|
+
import { todoDocsRecordViolations } from "./todoDocsEntityValidation.js";
|
|
5
|
+
import { TODO_RECONCILIATION_ACTIVATION_PATH, todoReconciliationActivationBytes } from "./todoReconciliationActivation.js";
|
|
6
|
+
function migrationTodoRows(text) {
|
|
7
|
+
let section = "normal";
|
|
8
|
+
const orders = new Map();
|
|
9
|
+
const rows = [];
|
|
10
|
+
text.split(/\r?\n/).forEach((line, index) => {
|
|
11
|
+
const heading = line.trim().match(/^##\s+(.+)$/)?.[1]?.toLowerCase();
|
|
12
|
+
if (heading) {
|
|
13
|
+
if (heading.includes("critical"))
|
|
14
|
+
section = "critical";
|
|
15
|
+
else if (heading.includes("degraded"))
|
|
16
|
+
section = "degraded";
|
|
17
|
+
else if (heading.includes("annoying"))
|
|
18
|
+
section = "annoying";
|
|
19
|
+
else if (heading.includes("resolved"))
|
|
20
|
+
section = "resolved";
|
|
21
|
+
else if (heading.includes("normal"))
|
|
22
|
+
section = "normal";
|
|
23
|
+
else if (heading === "notes")
|
|
24
|
+
section = "unmanaged";
|
|
25
|
+
}
|
|
26
|
+
const item = parseTodoMarkdownListItem(line.trim());
|
|
27
|
+
if (!item || section === "unmanaged")
|
|
28
|
+
return;
|
|
29
|
+
const severity = section === "resolved" ? "normal" : section;
|
|
30
|
+
const order = (orders.get(section) ?? 0) + 1;
|
|
31
|
+
orders.set(section, order);
|
|
32
|
+
const record = item.kind && item.kind !== "x"
|
|
33
|
+
? { kind: item.kind, target_version: item.target_version ?? null, title: item.title ?? item.description, requirements: [], acceptance: [], release_blocker: false, severity, status: item.status }
|
|
34
|
+
: { severity, status: item.status, description: item.public_description ?? item.description };
|
|
35
|
+
rows.push({ index, section, order, item, record });
|
|
36
|
+
});
|
|
37
|
+
return rows;
|
|
38
|
+
}
|
|
39
|
+
function importMigrationTodoPublic(entity, row) {
|
|
40
|
+
const record = structuredClone(entity);
|
|
41
|
+
if (row.record.title !== undefined) {
|
|
42
|
+
delete record.description;
|
|
43
|
+
record.kind = row.record.kind;
|
|
44
|
+
record.target_version = row.record.target_version;
|
|
45
|
+
record.title = row.record.title;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
for (const field of ["kind", "target_version", "title"])
|
|
49
|
+
delete record[field];
|
|
50
|
+
record.description = row.record.description;
|
|
51
|
+
}
|
|
52
|
+
if (row.section !== "resolved")
|
|
53
|
+
record.severity = row.record.severity;
|
|
54
|
+
record.status = row.record.status;
|
|
55
|
+
return record;
|
|
56
|
+
}
|
|
57
|
+
export function todoMigrationObservations(root, sourceRoot, todoPath, files) {
|
|
58
|
+
const observations = [];
|
|
59
|
+
const todo = files.find((source) => source.relative === todoPath);
|
|
60
|
+
const activation = files.find((source) => source.relative === TODO_RECONCILIATION_ACTIVATION_PATH);
|
|
61
|
+
if (activation?.kind === "file")
|
|
62
|
+
observations.push({ key: "todo:activation:stale", artifact: "todo", boundary: "todo_item", path: TODO_RECONCILIATION_ACTIVATION_PATH, provenance: "preexisting_activation", record: null, detail: "corrupt", relationships: [], message: "TODO reconciliation activation exists before entity cutover" });
|
|
63
|
+
if (todo?.kind === "file" && todo.bytes) {
|
|
64
|
+
const rows = migrationTodoRows(todo.bytes.toString("utf8"));
|
|
65
|
+
const existing = discoverEntities(root, sourceRoot).entities.filter((entity) => entity.boundary === "todo_item");
|
|
66
|
+
if (existing.length > 0) {
|
|
67
|
+
const invalid = existing.find((entity) => entity.classification !== "valid" || !entity.id || !entity.record);
|
|
68
|
+
if (invalid)
|
|
69
|
+
observations.push({ key: `todo:entity:invalid:${invalid.relativePath}`, artifact: "todo", boundary: "todo_item", path: invalid.relativePath, provenance: "precreated_entity", record: null, detail: "corrupt", relationships: [], message: "pre-created TODO entity evidence is not canonical" });
|
|
70
|
+
const claimed = new Set();
|
|
71
|
+
for (const row of rows) {
|
|
72
|
+
let matches = existing.filter((entity) => entity.classification === "valid" && entity.id && entity.record && !claimed.has(entity.id));
|
|
73
|
+
if (row.item.id)
|
|
74
|
+
matches = matches.filter((entity) => entity.id === row.item.id);
|
|
75
|
+
else
|
|
76
|
+
matches = matches.filter((entity) => renderTodoPublicRecord(entity.record) === (row.item.public_description ?? row.item.description) && (row.section === "resolved" || entity.record.severity === row.record.severity));
|
|
77
|
+
if (matches.length !== 1) {
|
|
78
|
+
observations.push({ key: `todo:row:${row.index + 1}`, artifact: "todo", boundary: "todo_item", path: todoPath, provenance: "precreated_entity_match", record: null, detail: "corrupt", relationships: [], message: matches.length === 0 ? `TODO.md line ${row.index + 1} has no one-to-one canonical entity match` : `TODO.md line ${row.index + 1} has multiple canonical entity matches` });
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const entity = matches[0];
|
|
82
|
+
claimed.add(entity.id);
|
|
83
|
+
const record = importMigrationTodoPublic(entity.record, row);
|
|
84
|
+
const violations = todoDocsRecordViolations("todo_item", record, sourceRoot);
|
|
85
|
+
observations.push({ key: `${todoPath}:line:${row.index + 1}`, artifact: "todo", boundary: "todo_item", path: todoPath, provenance: "precreated_entity_match", record, detail: violations.length ? "corrupt" : "full", relationships: [], message: violations.length ? violations.join("; ") : undefined, explicitId: entity.id });
|
|
86
|
+
}
|
|
87
|
+
for (const entity of existing)
|
|
88
|
+
if (entity.id && !claimed.has(entity.id))
|
|
89
|
+
observations.push({ key: `todo:entity:unmatched:${entity.id}`, artifact: "todo", boundary: "todo_item", path: entity.relativePath, provenance: "precreated_entity_match", record: null, detail: "corrupt", relationships: [], message: `canonical TODO entity '${entity.id}' has no one-to-one TODO.md row match` });
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
for (const row of rows) {
|
|
93
|
+
const violations = todoDocsRecordViolations("todo_item", row.record, sourceRoot);
|
|
94
|
+
observations.push({ key: `${todoPath}:line:${row.index + 1}`, artifact: "todo", boundary: "todo_item", path: todoPath, provenance: "current_canonical", record: row.record, detail: violations.length ? "corrupt" : "full", relationships: [], message: violations.length ? violations.join("; ") : undefined });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (todo?.kind === "unsafe")
|
|
99
|
+
observations.push({ key: "todo:document", artifact: "todo", boundary: "todo_item", path: todoPath, provenance: "current_canonical", record: null, detail: "corrupt", relationships: [], message: `source path '${todoPath}' is a symbolic link, non-file, or unreadable; replace it with a readable regular file inside the project` });
|
|
100
|
+
return observations;
|
|
101
|
+
}
|
|
102
|
+
export function todoReconciliationMigrationPlan(todoPath, files, entries) {
|
|
103
|
+
const todo = files.find((source) => source.relative === todoPath);
|
|
104
|
+
if (todo?.kind !== "file" || !todo.bytes)
|
|
105
|
+
return undefined;
|
|
106
|
+
const rows = migrationTodoRows(todo.bytes.toString("utf8"));
|
|
107
|
+
const byLine = new Map(entries.filter((entry) => entry.boundary === "todo_item" && entry.proposed_target).flatMap((entry) => {
|
|
108
|
+
const match = new RegExp(`^${todoPath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}:line:(\\d+)$`).exec(entry.source_identity);
|
|
109
|
+
return match ? [[Number(match[1]) - 1, entry]] : [];
|
|
110
|
+
}));
|
|
111
|
+
if (byLine.size !== rows.length)
|
|
112
|
+
return undefined;
|
|
113
|
+
const lines = todo.bytes.toString("utf8").split(/\r?\n/);
|
|
114
|
+
for (const row of rows) {
|
|
115
|
+
const entry = byLine.get(row.index);
|
|
116
|
+
if (!entry?.proposed_target)
|
|
117
|
+
return undefined;
|
|
118
|
+
const record = structuredClone(entry.record);
|
|
119
|
+
record.reconciliation = { schema_version: "agentera.todoReconciliation.v1", public: { present: true, description: renderTodoPublicRecord(record), severity: String(record.severity), status: String(record.status), order: row.order } };
|
|
120
|
+
entry.record = record;
|
|
121
|
+
if (!row.item.id)
|
|
122
|
+
lines[row.index] = lines[row.index].replace(/^(\s*-\s+\[[ xX]\]\s+)/, `$1[id:${entry.proposed_target.id}] `);
|
|
123
|
+
}
|
|
124
|
+
const docs = files.find((source) => source.relative === ".agentera/docs.yaml");
|
|
125
|
+
const mappingBytes = docs?.kind === "file" ? docs.bytes : Buffer.from("<absent>");
|
|
126
|
+
return {
|
|
127
|
+
public_path: todoPath,
|
|
128
|
+
mapping_sha256: createHash("sha256").update(todoPath).update("\0").update(mappingBytes).digest("hex"),
|
|
129
|
+
markdown_before_base64: todo.bytes.toString("base64"),
|
|
130
|
+
markdown_after: `${lines.join("\n").replace(/\n*$/, "")}\n`,
|
|
131
|
+
activation_after: todoReconciliationActivationBytes([]),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { projectEntityDevelopmentValue, } from "../core/developmentInvocation.js";
|
|
1
2
|
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
2
|
-
import { ENTITY_LIST_RUNTIME_FAMILIES, ENTITY_LIST_RUNTIME_REGISTRY, runtimeEntityFamilyForHelpArgs, runtimeEntityListFamilyForHelpArgs, } from "./entityListRuntimeRegistry.js";
|
|
3
|
+
import { ENTITY_LIST_RUNTIME_FAMILIES, ENTITY_LIST_RUNTIME_BOUNDS, ENTITY_LIST_RUNTIME_FORMATS, ENTITY_LIST_RUNTIME_REGISTRY, ENTITY_LIST_RUNTIME_SELECTORS, runtimeEntityFamilyForHelpArgs, runtimeEntityListFamilyForHelpArgs, } from "./entityListRuntimeRegistry.js";
|
|
3
4
|
import { loadStateStorageAuthority } from "./stateStorageAuthority.js";
|
|
4
5
|
export const ENTITY_LIST_HELP_SCHEMA_VERSION = "agentera.entityListHelp.v1";
|
|
5
|
-
const RUNTIME_FORMATS = ["text", "json", "yaml"];
|
|
6
6
|
let cache;
|
|
7
7
|
function isMapping(value) {
|
|
8
8
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -36,14 +36,6 @@ function exactKeys(value, required, optional, prefix, errors) {
|
|
|
36
36
|
if (!allowed.has(field))
|
|
37
37
|
errors.push(`${prefix}.unknown.${field}`);
|
|
38
38
|
}
|
|
39
|
-
function expectedListSyntax(family) {
|
|
40
|
-
const base = `agentera state ${family.commandTokens.join(" ")} list`;
|
|
41
|
-
const identifier = family.familyIdentifier
|
|
42
|
-
? ` ${family.familyIdentifier.required ? family.familyIdentifier.syntax : `[${family.familyIdentifier.syntax}]`}`
|
|
43
|
-
: "";
|
|
44
|
-
const filters = family.filters.map(({ flag }) => ` [${flag}]`).join("");
|
|
45
|
-
return `${base}${identifier}${filters} [--limit N] [--cursor TOKEN] [--ids-only | --fields FIELDS] --format json`;
|
|
46
|
-
}
|
|
47
39
|
function valueFlag(syntax) {
|
|
48
40
|
const tokens = syntax.split(" ");
|
|
49
41
|
if (tokens.length !== 2 || !/^--[a-z][a-z0-9-]*$/.test(tokens[0]) || tokens[1].length === 0)
|
|
@@ -78,10 +70,10 @@ function exampleGrammarIssue(example, family, pattern) {
|
|
|
78
70
|
return "type";
|
|
79
71
|
const tokens = example.split(" ");
|
|
80
72
|
if (example.trim() !== example
|
|
81
|
-
|| tokens.some((token) => token.length === 0 || !/^[A-Za-z0-9_
|
|
73
|
+
|| tokens.some((token) => token.length === 0 || !/^[A-Za-z0-9_@.,:/|=+\-]+$/.test(token))
|
|
82
74
|
|| tokens.join(" ") !== example)
|
|
83
75
|
return "lexical_form";
|
|
84
|
-
const prefix = ["agentera", "state", ...family.commandTokens, "list"];
|
|
76
|
+
const prefix = ["npx", "-y", "agentera@next", "state", ...family.commandTokens, "list"];
|
|
85
77
|
if (tokens.length < prefix.length || !prefix.every((token, index) => tokens[index] === token))
|
|
86
78
|
return "command";
|
|
87
79
|
const identifierSyntax = family.familyIdentifier?.syntax;
|
|
@@ -232,9 +224,9 @@ export function validateEntityListHelp(value) {
|
|
|
232
224
|
errors.push("entity_target.public_retrieval.list_help.schema_version");
|
|
233
225
|
if (!sameStrings(defaults.summary_fields, ["id", "artifact", "retrieval.get"]))
|
|
234
226
|
errors.push("entity_target.public_retrieval.list_help.defaults.summary_fields");
|
|
235
|
-
if (!sameStrings(defaults.formats,
|
|
227
|
+
if (!sameStrings(defaults.formats, ENTITY_LIST_RUNTIME_FORMATS))
|
|
236
228
|
errors.push("entity_target.public_retrieval.list_help.defaults.formats");
|
|
237
|
-
for (const [field, flag] of [["ids_only",
|
|
229
|
+
for (const [field, flag] of [["ids_only", ENTITY_LIST_RUNTIME_SELECTORS.idsOnly], ["fields", ENTITY_LIST_RUNTIME_SELECTORS.fields]]) {
|
|
238
230
|
const selector = requireMapping(selectors, field, "entity_target.public_retrieval.list_help.defaults.selectors", errors);
|
|
239
231
|
exactKeys(selector, ["flag", "description"], [], `entity_target.public_retrieval.list_help.defaults.selectors.${field}`, errors);
|
|
240
232
|
if (selector.flag !== flag || typeof selector.description !== "string" || selector.description.trim() === "")
|
|
@@ -247,6 +239,11 @@ export function validateEntityListHelp(value) {
|
|
|
247
239
|
errors.push(`entity_target.public_retrieval.list_help.defaults.bounds.${field}.value`);
|
|
248
240
|
if (Number(bounds.minimum) > Number(bounds.default) || Number(bounds.default) > Number(bounds.maximum))
|
|
249
241
|
errors.push("entity_target.public_retrieval.list_help.defaults.bounds.order");
|
|
242
|
+
if (bounds.minimum !== ENTITY_LIST_RUNTIME_BOUNDS.minimum
|
|
243
|
+
|| bounds.default !== ENTITY_LIST_RUNTIME_BOUNDS.default
|
|
244
|
+
|| bounds.maximum !== ENTITY_LIST_RUNTIME_BOUNDS.maximum
|
|
245
|
+
|| bounds.max_utf8_bytes !== ENTITY_LIST_RUNTIME_BOUNDS.maxUtf8Bytes)
|
|
246
|
+
errors.push("entity_target.public_retrieval.list_help.defaults.bounds.runtime_parity");
|
|
250
247
|
const runtimeKeys = Object.keys(ENTITY_LIST_RUNTIME_REGISTRY).sort();
|
|
251
248
|
for (const [surface, record] of [["commands", commands], ["list_help.families", families]]) {
|
|
252
249
|
const actual = Object.keys(record).sort();
|
|
@@ -260,7 +257,7 @@ export function validateEntityListHelp(value) {
|
|
|
260
257
|
const api = mapping(value.api);
|
|
261
258
|
const apiList = mapping(api.list);
|
|
262
259
|
const outputBounds = mapping(policy.output_bounds);
|
|
263
|
-
if (!sameStrings(api.formats,
|
|
260
|
+
if (!sameStrings(api.formats, ENTITY_LIST_RUNTIME_FORMATS))
|
|
264
261
|
errors.push("api.formats");
|
|
265
262
|
if (bounds.minimum !== apiList.minimum_limit)
|
|
266
263
|
errors.push("entity_target.public_retrieval.list_help.defaults.bounds.minimum_authority_parity");
|
|
@@ -282,7 +279,9 @@ export function validateEntityListHelp(value) {
|
|
|
282
279
|
exactKeys(family, ["command_tokens", "bare_read", "filters", "example"], ["bare_recovery", "family_identifier", "summary_fields", "summary_field_notes"], prefix, errors);
|
|
283
280
|
if (family.bare_read !== "alias" && family.bare_read !== "correction")
|
|
284
281
|
errors.push(`${prefix}.bare_read`);
|
|
285
|
-
if (family.bare_read
|
|
282
|
+
if (family.bare_read !== runtime.bareRead)
|
|
283
|
+
errors.push(`${prefix}.bare_read.runtime_parity`);
|
|
284
|
+
if (family.bare_read === "correction" && family.bare_recovery !== runtime.projection.bareRecovery)
|
|
286
285
|
errors.push(`${prefix}.bare_recovery`);
|
|
287
286
|
if (family.bare_read === "alias" && family.bare_recovery !== undefined)
|
|
288
287
|
errors.push(`${prefix}.bare_recovery.unexpected`);
|
|
@@ -292,7 +291,7 @@ export function validateEntityListHelp(value) {
|
|
|
292
291
|
errors.push(`${prefix}.filters`);
|
|
293
292
|
const rawFilters = Array.isArray(family.filters) ? family.filters : [];
|
|
294
293
|
const filterNames = rawFilters.map((raw) => mapping(raw).name);
|
|
295
|
-
if (!sameStrings(filterNames, runtime.filters))
|
|
294
|
+
if (!sameStrings(filterNames, runtime.filters.map(({ name }) => name)))
|
|
296
295
|
errors.push(`${prefix}.filters.runtime_parity`);
|
|
297
296
|
const parsedFilters = [];
|
|
298
297
|
rawFilters.forEach((raw, index) => {
|
|
@@ -313,6 +312,12 @@ export function validateEntityListHelp(value) {
|
|
|
313
312
|
if (!parsedFlag || parsedFlag.valueSyntax !== declaredValues.join("|"))
|
|
314
313
|
errors.push(`${prefix}.filters[${index}].flag_value_syntax`);
|
|
315
314
|
}
|
|
315
|
+
const codeFilter = runtime.filters[index];
|
|
316
|
+
if (!codeFilter
|
|
317
|
+
|| codeFilter.name !== name
|
|
318
|
+
|| codeFilter.flag !== filter.flag
|
|
319
|
+
|| JSON.stringify(codeFilter.values) !== JSON.stringify(filter.values))
|
|
320
|
+
errors.push(`${prefix}.filters[${index}].runtime_parity`);
|
|
316
321
|
parsedFilters.push({ flag: String(filter.flag), name, values: Array.isArray(filter.values) ? strings(filter.values) : String(filter.values) });
|
|
317
322
|
});
|
|
318
323
|
const identifier = family.family_identifier === undefined ? undefined : mapping(family.family_identifier);
|
|
@@ -382,10 +387,12 @@ export function validateEntityListHelp(value) {
|
|
|
382
387
|
formats: strings(defaults.formats),
|
|
383
388
|
example: String(family.example),
|
|
384
389
|
};
|
|
385
|
-
if (command.list !==
|
|
390
|
+
if (command.list !== runtime.projection.list)
|
|
386
391
|
errors.push(`${prefix}.list_command`);
|
|
387
|
-
if (command.get !==
|
|
392
|
+
if (command.get !== runtime.projection.get)
|
|
388
393
|
errors.push(`${prefix}.get_command`);
|
|
394
|
+
if (family.example !== runtime.projection.example)
|
|
395
|
+
errors.push(`${prefix}.example.runtime_parity`);
|
|
389
396
|
const exampleIssue = exampleGrammarIssue(family.example, projected, acceptedIdentity);
|
|
390
397
|
if (exampleIssue)
|
|
391
398
|
errors.push(`${prefix}.example.${exampleIssue}`);
|
|
@@ -427,9 +434,12 @@ export function entityListFamilies(sourceRoot = resolveSourceRoot()) {
|
|
|
427
434
|
const note = mapping(raw);
|
|
428
435
|
return [name, { description: String(note.description), ownership: String(note.ownership), persisted: note.persisted === true, filter: note.filter === true }];
|
|
429
436
|
}));
|
|
430
|
-
|
|
437
|
+
const sourceHelp = {
|
|
431
438
|
key,
|
|
432
|
-
commandTokens: strings(family.command_tokens),
|
|
439
|
+
commandTokens: strings(family.command_tokens),
|
|
440
|
+
syntax: String(command.list),
|
|
441
|
+
get: String(command.get),
|
|
442
|
+
bareRead: family.bare_read === "alias" ? "alias" : "correction",
|
|
433
443
|
filters: family.filters.map((raw) => { const filter = mapping(raw); return { flag: String(filter.flag), name: String(filter.name), values: Array.isArray(filter.values) ? strings(filter.values) : String(filter.values) }; }),
|
|
434
444
|
...(identifier ? { familyIdentifier: { syntax: String(identifier.syntax), required: identifier.required === true, description: String(identifier.description) } } : {}),
|
|
435
445
|
summaryFields: family.summary_fields === undefined ? strings(defaults.summary_fields) : strings(family.summary_fields),
|
|
@@ -441,7 +451,28 @@ export function entityListFamilies(sourceRoot = resolveSourceRoot()) {
|
|
|
441
451
|
mutualExclusion: defaultSelectors.mutual_exclusion === true,
|
|
442
452
|
},
|
|
443
453
|
bounds: { minimum: Number(defaultBounds.minimum), default: Number(defaultBounds.default), maximum: Number(defaultBounds.maximum), maxUtf8Bytes: Number(defaultBounds.max_utf8_bytes) },
|
|
444
|
-
formats: strings(defaults.formats),
|
|
454
|
+
formats: strings(defaults.formats),
|
|
455
|
+
example: String(family.example),
|
|
456
|
+
};
|
|
457
|
+
return {
|
|
458
|
+
key,
|
|
459
|
+
commandTokens: sourceHelp.commandTokens,
|
|
460
|
+
syntax: projectEntityDevelopmentValue(command.list, key, "list"),
|
|
461
|
+
get: projectEntityDevelopmentValue(command.get, key, "get"),
|
|
462
|
+
bareRead: sourceHelp.bareRead,
|
|
463
|
+
...(typeof family.bare_recovery === "string" ? { bareRecovery: projectEntityDevelopmentValue(family.bare_recovery, key, "bareRecovery") } : {}),
|
|
464
|
+
filters: sourceHelp.filters,
|
|
465
|
+
...(identifier ? { familyIdentifier: { syntax: String(identifier.syntax), required: identifier.required === true, description: String(identifier.description) } } : {}),
|
|
466
|
+
summaryFields: family.summary_fields === undefined ? strings(defaults.summary_fields) : strings(family.summary_fields),
|
|
467
|
+
minimumFields: [...strings(projection.minimum_fields), ...strings(familyMinimumFields[key])],
|
|
468
|
+
summaryFieldNotes: notes,
|
|
469
|
+
selectors: {
|
|
470
|
+
idsOnly: { flag: String(mapping(defaultSelectors.ids_only).flag), description: String(mapping(defaultSelectors.ids_only).description) },
|
|
471
|
+
fields: { flag: String(mapping(defaultSelectors.fields).flag), description: String(mapping(defaultSelectors.fields).description) },
|
|
472
|
+
mutualExclusion: defaultSelectors.mutual_exclusion === true,
|
|
473
|
+
},
|
|
474
|
+
bounds: { minimum: Number(defaultBounds.minimum), default: Number(defaultBounds.default), maximum: Number(defaultBounds.maximum), maxUtf8Bytes: Number(defaultBounds.max_utf8_bytes) },
|
|
475
|
+
formats: strings(defaults.formats), example: projectEntityDevelopmentValue(family.example, key, "example"),
|
|
445
476
|
};
|
|
446
477
|
});
|
|
447
478
|
cache = { revision: authority.revision, families };
|
|
@@ -473,4 +504,3 @@ export function entityListAuthorityProjection(sourceRoot = resolveSourceRoot())
|
|
|
473
504
|
entityListFamilies(sourceRoot);
|
|
474
505
|
return mapping(mapping(loadStateStorageAuthority(sourceRoot).document.entity_target).public_retrieval);
|
|
475
506
|
}
|
|
476
|
-
//# sourceMappingURL=entityRetrievalHelp.js.map
|