agentera 3.0.0-dev.6 → 3.0.0-dev.69
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 +118 -22
- package/bundle/CHANGELOG.md +1361 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +143 -0
- package/bundle/UPGRADE.md +252 -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 +488 -0
- package/bundle/references/adapters/package-registry.yaml +435 -188
- package/bundle/references/adapters/package-surface-characterization.md +66 -34
- 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 +266 -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 +3061 -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 +11 -14
- 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 +19 -2
- package/bundle/references/cli/vocabulary-index.yaml +20 -17
- package/bundle/references/cli/vocabulary.md +325 -362
- package/bundle/references/meta/retained-reference-authority.yaml +151 -0
- package/bundle/registry.json +13 -13
- package/bundle/skills/agentera/SKILL.md +226 -422
- 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 +103 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +8 -6
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +184 -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 +178 -34
- 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 +39 -21
- 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 +461 -36
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +133 -20
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
- package/dist/analytics/extractCorpus/cli.js +101 -12
- package/dist/analytics/extractCorpus/copilotSessions.js +53 -9
- package/dist/analytics/extractCorpus/core.js +59 -24
- package/dist/analytics/extractCorpus/corpus.js +58 -23
- package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +12 -7
- package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +1 -5
- package/dist/analytics/extractCorpus/index.js +6 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js +24 -5
- package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +98 -6
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +0 -1
- 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 +59 -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 +29 -27
- package/dist/capabilities/optimize/instructions.js +14 -0
- package/dist/capabilities/orchestrate/instructions.js +42 -0
- package/dist/capabilities/plan/instructions.js +33 -0
- package/dist/capabilities/profile/instructions.js +70 -0
- package/dist/capabilities/research/instructions.js +5 -0
- package/dist/capabilities/status/instructions.js +15 -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 +25 -17
- package/dist/cli/capabilityContext/bespoke.js +31 -12
- package/dist/cli/capabilityContext/build.js +251 -0
- package/dist/cli/capabilityContext/closeout.js +33 -30
- package/dist/cli/capabilityContext/contract.js +39 -46
- package/dist/cli/capabilityContext/evidence.js +90 -73
- package/dist/cli/capabilityContext/index.js +1 -2
- package/dist/cli/capabilityContext/orchestration.js +45 -21
- package/dist/cli/capabilityContext/planState.js +93 -100
- package/dist/cli/capabilityContext/progress.js +60 -14
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +9 -20
- package/dist/cli/capabilityContext/slim.js +56 -10
- package/dist/cli/capabilityContext/startup.js +57 -115
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +37 -24
- package/dist/cli/capabilityContext.js +1 -2
- package/dist/cli/commands/appHome.js +22 -0
- package/dist/cli/commands/capability.js +4 -4
- package/dist/cli/commands/compact.js +163 -13
- package/dist/cli/commands/doctor.js +122 -114
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +22 -8
- package/dist/cli/commands/personalGlossary.js +176 -0
- package/dist/cli/commands/prime/briefOrientation.js +746 -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 +326 -0
- package/dist/cli/commands/prime/collectOrientationState.js +219 -0
- package/dist/cli/commands/prime/orientationOutput.js +421 -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 +77 -52
- package/dist/cli/commands/report.js +88 -26
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +266 -142
- package/dist/cli/commands/state/decisions.js +51 -61
- package/dist/cli/commands/state/docs.js +63 -86
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +11 -64
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +11 -111
- package/dist/cli/commands/state/index.js +6 -41
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +21 -64
- package/dist/cli/commands/state/plan.js +11 -169
- 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 +11 -45
- package/dist/cli/commands/state/shared.js +0 -1
- package/dist/cli/commands/state/todo.js +29 -108
- package/dist/cli/commands/state/write.js +433 -0
- package/dist/cli/commands/upgrade.js +146 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +246 -211
- 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 +94 -50
- package/dist/cli/dispatch/commands.js +27 -0
- package/dist/cli/dispatch/index.js +82 -52
- package/dist/cli/dispatch/lifecycle.js +268 -108
- package/dist/cli/dispatch/prime.js +68 -29
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +1 -2
- package/dist/cli/dispatch/state.js +68 -77
- package/dist/cli/dispatch.js +0 -1
- package/dist/cli/errors.js +16 -17
- package/dist/cli/help.js +395 -41
- package/dist/cli/migrationRequired.js +122 -0
- package/dist/cli/orientation/attention.js +61 -0
- package/dist/cli/orientation/corpusCoverage.js +102 -0
- package/dist/cli/orientation.js +438 -170
- 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 +56 -14
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +25 -12
- 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 +3 -56
- package/dist/hooks/compaction/apply.js +252 -50
- package/dist/hooks/compaction/dryRun.js +7 -4
- package/dist/hooks/compaction/index.js +5 -6
- package/dist/hooks/compaction/parse.js +201 -5
- package/dist/hooks/compaction/retention.js +30 -25
- package/dist/hooks/compaction/status.js +149 -32
- package/dist/hooks/compaction/types.js +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js +0 -1
- package/dist/hooks/validateArtifact/index.js +7 -64
- package/dist/hooks/validateArtifact/markdown.js +57 -7
- package/dist/hooks/validateArtifact/schema.js +110 -19
- package/dist/hooks/validateArtifact/traversal.js +13 -11
- package/dist/hooks/validateArtifact/violations.js +7 -5
- package/dist/migrate/v2HandoffManifest.js +127 -8
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +108 -0
- package/dist/registries/artifactProtocolIds.js +2 -1
- package/dist/registries/artifactRegistry.js +224 -63
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +129 -2
- package/dist/registries/evaluatorHandoffContract.js +2 -3
- 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 +273 -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 +156 -6
- 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 -13
- 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 +840 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +859 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +899 -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 +1027 -0
- package/dist/state/planIdentity.js +47 -0
- package/dist/state/planLineageValidation.js +52 -0
- package/dist/state/planReplacementTransaction.js +475 -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/progressWritePolicy.js +33 -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 +92 -27
- package/dist/state/startupAnalysis/contract.js +48 -10
- package/dist/state/startupAnalysis/helpers.js +27 -73
- package/dist/state/startupAnalysis/index.js +0 -1
- package/dist/state/startupAnalysis/metrics.js +25 -19
- package/dist/state/startupAnalysis/records.js +13 -10
- package/dist/state/startupAnalysis/report.js +26 -38
- package/dist/state/startupAnalysis/threshold.js +19 -7
- package/dist/state/startupAnalysis.js +0 -1
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +222 -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/todoActivationSafety.js +58 -0
- package/dist/state/todoDocsEntities.js +1124 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +182 -0
- package/dist/state/todoReconciliationInspection.js +171 -0
- package/dist/state/todoReconciliationRepair.js +318 -0
- package/dist/state/todoReconciliationTransaction.js +595 -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 +377 -0
- package/dist/state/write/fields.js +61 -0
- package/dist/state/write/glossaryPublication.js +263 -0
- package/dist/state/write/grammar.js +285 -0
- package/dist/state/write/helpers.js +29 -0
- package/dist/state/write/index.js +12 -0
- package/dist/state/write/input.js +391 -0
- package/dist/state/write/lock.js +837 -0
- package/dist/state/write/mutation.js +234 -0
- package/dist/state/write/operations.js +170 -0
- package/dist/state/write/planEvaluation.js +128 -0
- package/dist/state/write/planPublication.js +179 -0
- package/dist/state/write/runtimeOperations.js +146 -0
- package/dist/state/write/serialize.js +1 -0
- package/dist/state/write/transaction.js +57 -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 +165 -199
- 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 +375 -79
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +29 -10
- package/dist/upgrade/npxPlatformStatus.js +22 -0
- package/dist/upgrade/projectIntegration.js +145 -189
- package/dist/upgrade/projectIntegrationDecision.js +50 -0
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +272 -373
- 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 +2 -3
- package/dist/upgrade/versionResolution.js +2 -3
- package/dist/validate/activationArtifactEvidence.js +852 -0
- package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +531 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +2 -8
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +133 -12
- package/dist/validate/crossCapability.js +15 -10
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +39 -45
- package/dist/validate/v1LegacyCruft.js +131 -0
- package/dist/validate/vocabularyAuthority.js +18 -13
- package/package.json +60 -29
- 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 -369
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/coexistence-probe.yaml +0 -9
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/cli/single-name-protocol.yaml +0 -42
- package/bundle/references/cli/upgrade-repair-wording.md +0 -31
- package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
- package/bundle/references/meta/documentation-inventory.md +0 -49
- 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/schemas/artifacts.yaml +0 -73
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
- 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/schemas/artifacts.yaml +0 -76
- package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
- 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/schemas/triggers.yaml +0 -39
- 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 -120
- 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/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/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/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/schemas/triggers.yaml +0 -41
- package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
- package/bundle/skills/agentera/references/contract.md +0 -1039
- 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/cursorSessions.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/sqliteSessions.js.map +0 -1
- 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/capabilities/dokumentera/instructions.js +0 -6
- package/dist/capabilities/dokumentera/instructions.js.map +0 -1
- package/dist/capabilities/hej/instructions.js +0 -6
- package/dist/capabilities/hej/instructions.js.map +0 -1
- package/dist/capabilities/index.js.map +0 -1
- package/dist/capabilities/inspektera/instructions.js +0 -6
- package/dist/capabilities/inspektera/instructions.js.map +0 -1
- package/dist/capabilities/inspirera/instructions.js +0 -6
- package/dist/capabilities/inspirera/instructions.js.map +0 -1
- package/dist/capabilities/optimera/instructions.js +0 -6
- package/dist/capabilities/optimera/instructions.js.map +0 -1
- package/dist/capabilities/orkestrera/instructions.js +0 -6
- package/dist/capabilities/orkestrera/instructions.js.map +0 -1
- package/dist/capabilities/planera/instructions.js +0 -6
- package/dist/capabilities/planera/instructions.js.map +0 -1
- package/dist/capabilities/profilera/instructions.js +0 -6
- package/dist/capabilities/profilera/instructions.js.map +0 -1
- package/dist/capabilities/realisera/instructions.js +0 -6
- package/dist/capabilities/realisera/instructions.js.map +0 -1
- package/dist/capabilities/resonera/instructions.js +0 -6
- package/dist/capabilities/resonera/instructions.js.map +0 -1
- package/dist/capabilities/visionera/instructions.js +0 -6
- package/dist/capabilities/visionera/instructions.js.map +0 -1
- package/dist/capabilities/visualisera/instructions.js +0 -6
- package/dist/capabilities/visualisera/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/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/realisera.js +0 -174
- package/dist/cli/capabilityContext/realisera.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/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/decisions.js.map +0 -1
- package/dist/cli/commands/state/docs.js.map +0 -1
- package/dist/cli/commands/state/experiments.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/objective.js.map +0 -1
- package/dist/cli/commands/state/plan.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.js +0 -1023
- 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/check.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/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/cli/todoMarkdown.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/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/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 -203
- 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 -83
- 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/hooks/validateArtifact.js +0 -924
- package/dist/hooks/validateArtifact.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/capabilityContract.js.map +0 -1
- package/dist/registries/evaluatorHandoffContract.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/release/releaseMetadata.js.map +0 -1
- package/dist/setup/codex/agents.js +0 -96
- package/dist/setup/codex/agents.js.map +0 -1
- package/dist/setup/codex/cli.js +0 -161
- package/dist/setup/codex/cli.js.map +0 -1
- package/dist/setup/codex/configToml.js +0 -644
- package/dist/setup/codex/configToml.js.map +0 -1
- package/dist/setup/codex/constants.js +0 -29
- 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 -270
- package/dist/setup/codex/state.js.map +0 -1
- package/dist/setup/codex.js +0 -12
- 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/core.js +0 -300
- package/dist/setup/doctor/core.js.map +0 -1
- package/dist/setup/doctor/diagnostics.js +0 -247
- package/dist/setup/doctor/diagnostics.js.map +0 -1
- package/dist/setup/doctor/opencode.js +0 -281
- package/dist/setup/doctor/opencode.js.map +0 -1
- package/dist/setup/doctor/report.js +0 -474
- package/dist/setup/doctor/report.js.map +0 -1
- package/dist/setup/doctor.js +0 -10
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/opencode.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/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/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/coexistenceProbe.js +0 -83
- 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/migrateArtifactsV1ToV2.js +0 -570
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/nextMajorDoctor.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/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/lifecycleAdapters.js +0 -772
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- package/dist/validate/vocabularyAuthority.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,383 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { CAPABILITY_INSTRUCTIONS } from "../capabilities/index.js";
|
|
5
|
+
import { isFile, pathExists, resolvePath } from "../core/paths.js";
|
|
6
|
+
import { doctorRoots } from "./appModel.js";
|
|
7
|
+
import { hasBundleRootEvidence } from "./bundleEvidence.js";
|
|
8
|
+
import { INSTALLED_HOOKS_SURFACE_LABEL, applyInstalledHooksRetirementItems, detectStaleInstalledHooksSurface, planInstalledHooksRetirementItems, } from "./installedHooksRetirement.js";
|
|
9
|
+
import { bindMigrationResource, withBoundMigrationDirectory } from "./migrationPublication.js";
|
|
10
|
+
export const APP_CONTENT_REFRESH_ACTION = "refresh-app-content";
|
|
11
|
+
/**
|
|
12
|
+
* Top-level app-home entry names written and refreshed by {@link applyAppContentRefresh}.
|
|
13
|
+
* The cleanup gate treats these as refreshable managed app content (not user state,
|
|
14
|
+
* not genuinely unrecognized) so v3's own content surface is never flagged as a
|
|
15
|
+
* false-positive "unrecognized entries" block. Sourced here as the single authority;
|
|
16
|
+
* do not mirror this list in the gate or doctor.
|
|
17
|
+
*/
|
|
18
|
+
export const MANAGED_APP_CONTENT_ROOT_ENTRIES = new Set([
|
|
19
|
+
"skills",
|
|
20
|
+
"references",
|
|
21
|
+
"registry.json",
|
|
22
|
+
"dist",
|
|
23
|
+
]);
|
|
24
|
+
/** Stale-surface labels surfaced in upgrade dry-run (B6 / defect #11). */
|
|
25
|
+
export const APP_CONTENT_SURFACE_LABELS = [
|
|
26
|
+
"SKILL.md",
|
|
27
|
+
"protocol.yaml",
|
|
28
|
+
"capability_schema_contract.yaml",
|
|
29
|
+
"capabilities/*/schemas/*",
|
|
30
|
+
"references/",
|
|
31
|
+
"registry.json",
|
|
32
|
+
"dist/capabilities",
|
|
33
|
+
INSTALLED_HOOKS_SURFACE_LABEL,
|
|
34
|
+
];
|
|
35
|
+
const V2_CAPABILITY_VERBS = [
|
|
36
|
+
"hej",
|
|
37
|
+
"visionera",
|
|
38
|
+
"resonera",
|
|
39
|
+
"inspirera",
|
|
40
|
+
"planera",
|
|
41
|
+
"realisera",
|
|
42
|
+
"optimera",
|
|
43
|
+
"inspektera",
|
|
44
|
+
"dokumentera",
|
|
45
|
+
"profilera",
|
|
46
|
+
"visualisera",
|
|
47
|
+
"orkestrera",
|
|
48
|
+
];
|
|
49
|
+
const SKIP_COPY_PARTS = new Set(["__pycache__", ".pytest_cache", "node_modules"]);
|
|
50
|
+
const SKIP_COPY_SUFFIXES = [".pyc", ".pyo"];
|
|
51
|
+
function shouldSkipCopyEntry(name) {
|
|
52
|
+
if (SKIP_COPY_PARTS.has(name)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return SKIP_COPY_SUFFIXES.some((suffix) => name.endsWith(suffix));
|
|
56
|
+
}
|
|
57
|
+
function shouldSkipCapabilityFile(relFromSkills) {
|
|
58
|
+
return /capabilities\/[^/]+\/instructions\.md$/i.test(relFromSkills.replace(/\\/g, "/"));
|
|
59
|
+
}
|
|
60
|
+
function runtimeCompiledRoot() {
|
|
61
|
+
return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
62
|
+
}
|
|
63
|
+
export function resolveAppContentSources(sourceRoot, compiledRoot = runtimeCompiledRoot()) {
|
|
64
|
+
const root = resolvePath(sourceRoot);
|
|
65
|
+
const candidate = path.join(resolvePath(compiledRoot), "capabilities");
|
|
66
|
+
const distCapabilities = pathExists(candidate) && fs.statSync(candidate).isDirectory() ? candidate : null;
|
|
67
|
+
return {
|
|
68
|
+
skillsDir: path.join(root, "skills"),
|
|
69
|
+
referencesDir: path.join(root, "references"),
|
|
70
|
+
registryJson: path.join(root, "registry.json"),
|
|
71
|
+
distCapabilities,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function readInstalledText(installedRoot, rel) {
|
|
75
|
+
const filePath = path.join(installedRoot, rel);
|
|
76
|
+
if (!isFile(filePath)) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return fs.readFileSync(filePath, "utf8");
|
|
80
|
+
}
|
|
81
|
+
function filesEqual(left, right) {
|
|
82
|
+
if (!isFile(left) || !isFile(right)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
return fs.readFileSync(left).equals(fs.readFileSync(right));
|
|
86
|
+
}
|
|
87
|
+
export function skillMdLooksV2(text) {
|
|
88
|
+
if (text.includes("packages/cli/src/capabilities") || text.includes("instructions.ts")) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return V2_CAPABILITY_VERBS.some((verb) => new RegExp(`\\b${verb}\\b`).test(text));
|
|
92
|
+
}
|
|
93
|
+
export function contractLooksV2(text) {
|
|
94
|
+
return /\binstructions\.md\b/.test(text) && !/\binstructions\.ts\b/.test(text);
|
|
95
|
+
}
|
|
96
|
+
function installedRootForDetection(appHome) {
|
|
97
|
+
const roots = doctorRoots(appHome);
|
|
98
|
+
if (hasBundleRootEvidence(roots.activeBundleRoot)) {
|
|
99
|
+
return roots.activeBundleRoot;
|
|
100
|
+
}
|
|
101
|
+
if (isFile(path.join(roots.activeBundleRoot, "skills", "agentera", "SKILL.md"))) {
|
|
102
|
+
return roots.activeBundleRoot;
|
|
103
|
+
}
|
|
104
|
+
if (isFile(path.join(appHome, "skills", "agentera", "SKILL.md"))) {
|
|
105
|
+
return appHome;
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
function walkYamlFiles(dir) {
|
|
110
|
+
if (!pathExists(dir)) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
const out = [];
|
|
114
|
+
const walk = (current) => {
|
|
115
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
116
|
+
const full = path.join(current, entry.name);
|
|
117
|
+
if (entry.isDirectory()) {
|
|
118
|
+
walk(full);
|
|
119
|
+
}
|
|
120
|
+
else if (entry.isFile() && entry.name.endsWith(".yaml")) {
|
|
121
|
+
out.push(full);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
walk(dir);
|
|
126
|
+
return out;
|
|
127
|
+
}
|
|
128
|
+
function capabilitySchemasStale(installedRoot, sources) {
|
|
129
|
+
const sourceSchemasRoot = path.join(sources.skillsDir, "agentera", "capabilities");
|
|
130
|
+
const installedSchemasRoot = path.join(installedRoot, "skills", "agentera", "capabilities");
|
|
131
|
+
if (!pathExists(sourceSchemasRoot)) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
for (const sourceFile of walkYamlFiles(sourceSchemasRoot)) {
|
|
135
|
+
const rel = path.relative(sourceSchemasRoot, sourceFile);
|
|
136
|
+
const installedFile = path.join(installedSchemasRoot, rel);
|
|
137
|
+
if (!filesEqual(sourceFile, installedFile)) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
function referencesStale(installedRoot, sources) {
|
|
144
|
+
if (!pathExists(sources.referencesDir)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
const installedReferences = path.join(installedRoot, "references");
|
|
148
|
+
if (!pathExists(installedReferences)) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
const walk = (sourceDir, installedDir) => {
|
|
152
|
+
for (const entry of fs.readdirSync(sourceDir, { withFileTypes: true })) {
|
|
153
|
+
if (shouldSkipCopyEntry(entry.name)) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const sourcePath = path.join(sourceDir, entry.name);
|
|
157
|
+
const installedPath = path.join(installedDir, entry.name);
|
|
158
|
+
if (entry.isDirectory()) {
|
|
159
|
+
if (!pathExists(installedPath) || !fs.statSync(installedPath).isDirectory()) {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
if (walk(sourcePath, installedPath)) {
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (!filesEqual(sourcePath, installedPath)) {
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
};
|
|
173
|
+
return walk(sources.referencesDir, installedReferences);
|
|
174
|
+
}
|
|
175
|
+
function distCapabilitiesStale(installedRoot, sources) {
|
|
176
|
+
if (!sources.distCapabilities) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
const installedDist = path.join(installedRoot, "dist", "capabilities");
|
|
180
|
+
for (const capability of Object.keys(CAPABILITY_INSTRUCTIONS)) {
|
|
181
|
+
const sourceModule = path.join(sources.distCapabilities, capability, "instructions.js");
|
|
182
|
+
const installedModule = path.join(installedDist, capability, "instructions.js");
|
|
183
|
+
if (!filesEqual(sourceModule, installedModule)) {
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Returns stale v2 app-content surface labels for gap detection during upgrade dry-run.
|
|
191
|
+
*/
|
|
192
|
+
export function detectStaleAppContentSurfaces(appHome, sourceRoot, compiledRoot) {
|
|
193
|
+
const installedRoot = installedRootForDetection(appHome);
|
|
194
|
+
if (!installedRoot) {
|
|
195
|
+
return [];
|
|
196
|
+
}
|
|
197
|
+
const sources = resolveAppContentSources(sourceRoot, compiledRoot);
|
|
198
|
+
const stale = [];
|
|
199
|
+
const skillRel = path.join("skills", "agentera", "SKILL.md");
|
|
200
|
+
const skillSource = path.join(sources.skillsDir, "agentera", "SKILL.md");
|
|
201
|
+
const skillInstalled = path.join(installedRoot, skillRel);
|
|
202
|
+
const skillText = readInstalledText(installedRoot, skillRel);
|
|
203
|
+
if (!filesEqual(skillSource, skillInstalled) || (skillText !== null && skillMdLooksV2(skillText))) {
|
|
204
|
+
stale.push("SKILL.md");
|
|
205
|
+
}
|
|
206
|
+
const protocolRel = path.join("skills", "agentera", "protocol.yaml");
|
|
207
|
+
if (!filesEqual(path.join(sources.skillsDir, "agentera", "protocol.yaml"), path.join(installedRoot, protocolRel))) {
|
|
208
|
+
stale.push("protocol.yaml");
|
|
209
|
+
}
|
|
210
|
+
const contractRel = path.join("skills", "agentera", "capability_schema_contract.yaml");
|
|
211
|
+
const contractText = readInstalledText(installedRoot, contractRel);
|
|
212
|
+
if (!filesEqual(path.join(sources.skillsDir, "agentera", "capability_schema_contract.yaml"), path.join(installedRoot, contractRel)) ||
|
|
213
|
+
(contractText !== null && contractLooksV2(contractText))) {
|
|
214
|
+
stale.push("capability_schema_contract.yaml");
|
|
215
|
+
}
|
|
216
|
+
if (capabilitySchemasStale(installedRoot, sources)) {
|
|
217
|
+
stale.push("capabilities/*/schemas/*");
|
|
218
|
+
}
|
|
219
|
+
if (referencesStale(installedRoot, sources)) {
|
|
220
|
+
stale.push("references/");
|
|
221
|
+
}
|
|
222
|
+
if (!filesEqual(sources.registryJson, path.join(installedRoot, "registry.json"))) {
|
|
223
|
+
stale.push("registry.json");
|
|
224
|
+
}
|
|
225
|
+
if (distCapabilitiesStale(installedRoot, sources)) {
|
|
226
|
+
stale.push("dist/capabilities");
|
|
227
|
+
}
|
|
228
|
+
if (detectStaleInstalledHooksSurface(appHome)) {
|
|
229
|
+
stale.push(INSTALLED_HOOKS_SURFACE_LABEL);
|
|
230
|
+
}
|
|
231
|
+
return stale;
|
|
232
|
+
}
|
|
233
|
+
function copyFileEnsuringDir(source, target) {
|
|
234
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
235
|
+
fs.copyFileSync(source, target);
|
|
236
|
+
}
|
|
237
|
+
function copyTree(sourceDir, targetDir, relPrefix = "") {
|
|
238
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
239
|
+
for (const entry of fs.readdirSync(sourceDir, { withFileTypes: true })) {
|
|
240
|
+
if (shouldSkipCopyEntry(entry.name)) {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
const rel = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;
|
|
244
|
+
if (shouldSkipCapabilityFile(rel)) {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
const from = path.join(sourceDir, entry.name);
|
|
248
|
+
const to = path.join(targetDir, entry.name);
|
|
249
|
+
if (entry.isDirectory()) {
|
|
250
|
+
copyTree(from, to, rel);
|
|
251
|
+
}
|
|
252
|
+
else if (entry.isFile()) {
|
|
253
|
+
copyFileEnsuringDir(from, to);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
export function refreshAppContentTargetRoot(appHome) {
|
|
258
|
+
return resolvePath(appHome);
|
|
259
|
+
}
|
|
260
|
+
function applyAppContentRefreshToTarget(targetRoot, sourceRoot, compiledRoot) {
|
|
261
|
+
const sources = resolveAppContentSources(sourceRoot, compiledRoot);
|
|
262
|
+
if (!pathExists(sources.skillsDir)) {
|
|
263
|
+
throw new Error(`app content refresh: missing source skills directory at ${sources.skillsDir}`);
|
|
264
|
+
}
|
|
265
|
+
if (!pathExists(sources.referencesDir)) {
|
|
266
|
+
throw new Error(`app content refresh: missing source references directory at ${sources.referencesDir}`);
|
|
267
|
+
}
|
|
268
|
+
if (!isFile(sources.registryJson)) {
|
|
269
|
+
throw new Error(`app content refresh: missing source registry.json at ${sources.registryJson}`);
|
|
270
|
+
}
|
|
271
|
+
copyTree(sources.skillsDir, path.join(targetRoot, "skills"), "skills");
|
|
272
|
+
copyTree(sources.referencesDir, path.join(targetRoot, "references"), "references");
|
|
273
|
+
copyFileEnsuringDir(sources.registryJson, path.join(targetRoot, "registry.json"));
|
|
274
|
+
if (sources.distCapabilities) {
|
|
275
|
+
copyTree(sources.distCapabilities, path.join(targetRoot, "dist", "capabilities"), "dist/capabilities");
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
export function applyAppContentRefresh(appHome, sourceRoot, compiledRoot) {
|
|
279
|
+
applyAppContentRefreshToTarget(refreshAppContentTargetRoot(appHome), sourceRoot, compiledRoot);
|
|
280
|
+
}
|
|
281
|
+
function refreshItemStatus(staleSurfaces) {
|
|
282
|
+
return staleSurfaces.length > 0 ? "pending" : "noop";
|
|
283
|
+
}
|
|
284
|
+
export function planAppContentRefreshItems(ctx) {
|
|
285
|
+
const sourceRoot = ctx.sourceRoot;
|
|
286
|
+
if (!sourceRoot) {
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
const appHome = resolvePath(ctx.appHome);
|
|
290
|
+
const resolvedSourceRoot = resolvePath(sourceRoot);
|
|
291
|
+
const installedRoot = installedRootForDetection(appHome);
|
|
292
|
+
if (!installedRoot) {
|
|
293
|
+
if (!pathExists(appHome)) {
|
|
294
|
+
return ctx.installAppContentIfMissing ? [{
|
|
295
|
+
status: "pending",
|
|
296
|
+
action: APP_CONTENT_REFRESH_ACTION,
|
|
297
|
+
runtime: "installed-app",
|
|
298
|
+
source: resolvedSourceRoot,
|
|
299
|
+
target: refreshAppContentTargetRoot(appHome),
|
|
300
|
+
message: "will install stable app content required by selected lifecycle repair",
|
|
301
|
+
}] : [];
|
|
302
|
+
}
|
|
303
|
+
const target = refreshAppContentTargetRoot(appHome);
|
|
304
|
+
const item = {
|
|
305
|
+
status: "pending",
|
|
306
|
+
action: APP_CONTENT_REFRESH_ACTION,
|
|
307
|
+
runtime: "installed-app",
|
|
308
|
+
source: resolvedSourceRoot,
|
|
309
|
+
target,
|
|
310
|
+
message: "install root has user data only; will install v3 app content (skills, references, registry, dist/capabilities)",
|
|
311
|
+
};
|
|
312
|
+
const evidenceError = bindMigrationResource(item, "target", target, [path.dirname(target)], "directory");
|
|
313
|
+
if (evidenceError) {
|
|
314
|
+
item.status = "blocked";
|
|
315
|
+
item.message = `app content refresh preserved the target: ${evidenceError}; review the unsafe path manually`;
|
|
316
|
+
}
|
|
317
|
+
return [item];
|
|
318
|
+
}
|
|
319
|
+
const staleSurfaces = detectStaleAppContentSurfaces(appHome, resolvedSourceRoot, ctx.compiledRoot);
|
|
320
|
+
const hookItems = planInstalledHooksRetirementItems(ctx);
|
|
321
|
+
if (staleSurfaces.length === 0 && hookItems.every((item) => item.status === "noop")) {
|
|
322
|
+
return [
|
|
323
|
+
{
|
|
324
|
+
status: "noop",
|
|
325
|
+
action: APP_CONTENT_REFRESH_ACTION,
|
|
326
|
+
source: installedRoot,
|
|
327
|
+
target: refreshAppContentTargetRoot(appHome),
|
|
328
|
+
message: "installed app content already matches v3 source surfaces",
|
|
329
|
+
},
|
|
330
|
+
];
|
|
331
|
+
}
|
|
332
|
+
const targetRoot = refreshAppContentTargetRoot(appHome);
|
|
333
|
+
const refreshItems = staleSurfaces.map((surface) => {
|
|
334
|
+
const item = {
|
|
335
|
+
status: refreshItemStatus([surface]),
|
|
336
|
+
action: APP_CONTENT_REFRESH_ACTION,
|
|
337
|
+
runtime: "installed-app",
|
|
338
|
+
source: resolvedSourceRoot,
|
|
339
|
+
target: targetRoot,
|
|
340
|
+
message: `will refresh stale v2 surface ${surface} from sourceRoot into managed app home`,
|
|
341
|
+
preserved: [...APP_CONTENT_SURFACE_LABELS],
|
|
342
|
+
removedPreview: staleSurfaces,
|
|
343
|
+
};
|
|
344
|
+
const evidenceError = bindMigrationResource(item, "target", targetRoot, [path.dirname(targetRoot)], "directory");
|
|
345
|
+
if (evidenceError) {
|
|
346
|
+
item.status = "blocked";
|
|
347
|
+
item.message = `app content refresh preserved the target: ${evidenceError}; review the unsafe path manually`;
|
|
348
|
+
}
|
|
349
|
+
return item;
|
|
350
|
+
});
|
|
351
|
+
return [...refreshItems, ...hookItems.filter((item) => item.status !== "noop")];
|
|
352
|
+
}
|
|
353
|
+
export function applyAppContentRefreshItem(item, ctx, beforePublication) {
|
|
354
|
+
if (item.status !== "pending" || item.action !== APP_CONTENT_REFRESH_ACTION) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
try {
|
|
358
|
+
const sourceRoot = resolvePath(ctx.sourceRoot ?? item.source ?? "");
|
|
359
|
+
withBoundMigrationDirectory(item, "target", (targetRoot) => applyAppContentRefreshToTarget(targetRoot, sourceRoot, ctx.compiledRoot), beforePublication);
|
|
360
|
+
item.status = "applied";
|
|
361
|
+
item.message = "refreshed installed app content from v3 sourceRoot";
|
|
362
|
+
}
|
|
363
|
+
catch (exc) {
|
|
364
|
+
item.status = "blocked";
|
|
365
|
+
item.message = `refresh-app-content preserved the target: ${exc.message}; rerun and review it manually`;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
export function applyAppContentRefreshItems(items, ctx) {
|
|
369
|
+
applyInstalledHooksRetirementItems(items, ctx);
|
|
370
|
+
const pending = items.filter((item) => item.action === APP_CONTENT_REFRESH_ACTION && item.status === "pending");
|
|
371
|
+
if (pending.length === 0) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
applyAppContentRefreshItem(pending[0], ctx);
|
|
375
|
+
if (pending[0]?.status === "applied") {
|
|
376
|
+
for (const item of pending.slice(1)) {
|
|
377
|
+
if (item.action === APP_CONTENT_REFRESH_ACTION) {
|
|
378
|
+
item.status = "applied";
|
|
379
|
+
item.message = "refreshed installed app content from v3 sourceRoot";
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
package/dist/upgrade/appModel.js
CHANGED
|
@@ -2,9 +2,11 @@ import fs from "node:fs";
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { expanduser, isFile, pathExists, resolvePath } from "../core/paths.js";
|
|
5
|
+
import { resolveProfileDirOverride } from "../core/envPaths.js";
|
|
5
6
|
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
6
7
|
import { SOURCE_LABELS, classifyResolvedRoot, isForeignPlatformDefaultAppHome, resolveCandidate, } from "../state/installRoot.js";
|
|
7
8
|
import { loadRegistry } from "../registries/packageRegistry.js";
|
|
9
|
+
import { hasBundleRootEvidence } from "./bundleEvidence.js";
|
|
8
10
|
/**
|
|
9
11
|
* App-home / app-model resolution used by doctor and upgrade. Faithful TS port
|
|
10
12
|
* of the resolution layer in scripts/agentera_upgrade.py.
|
|
@@ -32,8 +34,8 @@ function sourceRootMissing(root) {
|
|
|
32
34
|
}
|
|
33
35
|
export function loadSuiteVersion(sourceRoot) {
|
|
34
36
|
const record = loadRegistry().get("agentera");
|
|
35
|
-
const authority = record.version_authority;
|
|
36
|
-
const authorityPath = path.join(sourceRoot, authority.persisted_authority);
|
|
37
|
+
const authority = record.version_authority; // cast: parsed registry IO boundary
|
|
38
|
+
const authorityPath = path.join(sourceRoot, authority.persisted_authority); // cast: parsed registry IO boundary
|
|
37
39
|
if (!isFile(authorityPath)) {
|
|
38
40
|
return null;
|
|
39
41
|
}
|
|
@@ -55,10 +57,6 @@ export function loadSuiteVersion(sourceRoot) {
|
|
|
55
57
|
const version = first && typeof first === "object" ? first.version : null;
|
|
56
58
|
return typeof version === "string" && version ? version : null;
|
|
57
59
|
}
|
|
58
|
-
function hasBundleRootEvidence(root) {
|
|
59
|
-
return (isFile(path.join(root, "scripts", "agentera")) &&
|
|
60
|
-
isFile(path.join(root, "skills", "agentera", "SKILL.md")));
|
|
61
|
-
}
|
|
62
60
|
export function doctorRoots(appHome) {
|
|
63
61
|
const managedAppRoot = path.join(appHome, "app");
|
|
64
62
|
let activeBundleRoot;
|
|
@@ -138,6 +136,10 @@ export function resolveInstallRoot(value, sourceRoot, home, env = process.env) {
|
|
|
138
136
|
}
|
|
139
137
|
return candidate;
|
|
140
138
|
}
|
|
139
|
+
const profileDir = resolveProfileDirOverride(env);
|
|
140
|
+
if (profileDir) {
|
|
141
|
+
return resolvePath(profileDir);
|
|
142
|
+
}
|
|
141
143
|
const def = env[DEFAULT_INSTALL_ROOT_ENV];
|
|
142
144
|
if (def) {
|
|
143
145
|
const candidate = resolvePath(def);
|
|
@@ -189,4 +191,3 @@ export function resolveActiveAppModel(value = null, opts = {}) {
|
|
|
189
191
|
runtimeRoot: roots.runtimeRoot,
|
|
190
192
|
};
|
|
191
193
|
}
|
|
192
|
-
//# sourceMappingURL=appModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { writeFileAtomic } from "../core/atomicWriter.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { isFile } from "../core/paths.js";
|
|
4
|
+
const HEAD_READ_BYTES = 2048;
|
|
5
|
+
export function readScriptHead(filePath) {
|
|
6
|
+
let fd;
|
|
7
|
+
try {
|
|
8
|
+
fd = fs.openSync(filePath, "r");
|
|
9
|
+
const buf = Buffer.alloc(HEAD_READ_BYTES);
|
|
10
|
+
const bytes = fs.readSync(fd, buf, 0, HEAD_READ_BYTES, 0);
|
|
11
|
+
return buf.slice(0, bytes).toString("utf8");
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
if (fd !== undefined) {
|
|
18
|
+
try {
|
|
19
|
+
fs.closeSync(fd);
|
|
20
|
+
}
|
|
21
|
+
catch { }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function hasBundleRootEvidence(root) {
|
|
26
|
+
if (!isFile(path.join(root, "scripts", "agentera"))) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
if (!isFile(path.join(root, "skills", "agentera", "SKILL.md"))) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return readScriptHead(path.join(root, "scripts", "agentera")) !== null;
|
|
33
|
+
}
|
package/dist/upgrade/channels.js
CHANGED
|
@@ -2,9 +2,10 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { expanduser } from "../core/paths.js";
|
|
5
|
-
import {
|
|
5
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
6
6
|
import { loadTomlFile, parseToml } from "../core/toml.js";
|
|
7
7
|
import { loadYamlMappingFile } from "../core/yaml.js";
|
|
8
|
+
import { cliDistributionMajor } from "./compatibility.js";
|
|
8
9
|
/**
|
|
9
10
|
* Update channel resolution for upgrade, doctor, and prime.
|
|
10
11
|
* Authority: references/cli/update-channels.yaml
|
|
@@ -57,7 +58,7 @@ function readConfigChannel(home) {
|
|
|
57
58
|
}
|
|
58
59
|
let mapping;
|
|
59
60
|
try {
|
|
60
|
-
mapping = loadTomlFile(configPath);
|
|
61
|
+
mapping = loadTomlFile(configPath); // cast: TOML parse IO boundary
|
|
61
62
|
}
|
|
62
63
|
catch {
|
|
63
64
|
return null;
|
|
@@ -73,7 +74,7 @@ function readConfigChannel(home) {
|
|
|
73
74
|
}
|
|
74
75
|
export function loadUpdateChannelsAuthority(sourceRoot) {
|
|
75
76
|
const authorityPath = path.join(authorityRootFor(sourceRoot), UPDATE_CHANNELS_AUTHORITY);
|
|
76
|
-
return loadYamlMappingFile(authorityPath);
|
|
77
|
+
return loadYamlMappingFile(authorityPath); // cast: YAML parse IO boundary
|
|
77
78
|
}
|
|
78
79
|
function authorityForSourceRoot(authorityRoot) {
|
|
79
80
|
if (cachedAuthority && cachedAuthorityRoot === authorityRoot) {
|
|
@@ -124,7 +125,7 @@ export function assertStableNpmUpdateCommand(channel, updateCommand, distTag) {
|
|
|
124
125
|
if (distTag !== "latest") {
|
|
125
126
|
throw new Error(`stable channel dist tag must be latest, got ${JSON.stringify(distTag)}`);
|
|
126
127
|
}
|
|
127
|
-
const forbidden = [/@next\b/i, /@3\.\d/i, /@3\.0\.0-
|
|
128
|
+
const forbidden = [/@next\b/i, /@3\.\d/i, /@3\.0\.0-next/i, /-alpha/i, /-rc/i, /-beta/i];
|
|
128
129
|
for (const pattern of forbidden) {
|
|
129
130
|
if (pattern.test(updateCommand)) {
|
|
130
131
|
throw new Error(`stable channel update command must not target 3.x pre-releases: ${updateCommand}`);
|
|
@@ -204,14 +205,18 @@ export function resolveUpdateChannel(args = {}) {
|
|
|
204
205
|
export function resolveInvokedUpdateChannel(args = {}) {
|
|
205
206
|
const env = args.env ?? process.env;
|
|
206
207
|
const sourceRoot = args.sourceRoot ?? resolveSourceRoot(env);
|
|
207
|
-
|
|
208
|
+
const selected = resolveSelectedChannel({ ...args, sourceRoot });
|
|
209
|
+
if (selected.source !== "default") {
|
|
210
|
+
return resolveUpdateChannel({ ...args, sourceRoot });
|
|
211
|
+
}
|
|
212
|
+
if (cliDistributionMajor(sourceRoot) >= 3) {
|
|
208
213
|
return resolveUpdateChannel({ ...args, channel: "development", sourceRoot });
|
|
209
214
|
}
|
|
210
|
-
return resolveUpdateChannel(args);
|
|
215
|
+
return resolveUpdateChannel({ ...args, channel: "stable", sourceRoot });
|
|
211
216
|
}
|
|
212
217
|
/** Parse `update.channel` from TOML text (tests). */
|
|
213
218
|
export function parseConfigUpdateChannel(text) {
|
|
214
|
-
const raw = readNestedKey(parseToml(text), CONFIG_CHANNEL_KEY);
|
|
219
|
+
const raw = readNestedKey(parseToml(text), CONFIG_CHANNEL_KEY); // cast: TOML parse IO boundary
|
|
215
220
|
if (raw === undefined || raw === null) {
|
|
216
221
|
return null;
|
|
217
222
|
}
|
|
@@ -220,4 +225,3 @@ export function parseConfigUpdateChannel(text) {
|
|
|
220
225
|
}
|
|
221
226
|
return parseChannelValue(raw, "config_file");
|
|
222
227
|
}
|
|
223
|
-
//# sourceMappingURL=channels.js.map
|
|
@@ -6,6 +6,7 @@ import { BUNDLE_MARKER } from "../state/installRoot.js";
|
|
|
6
6
|
import { doctorRoots, loadSuiteVersion } from "./appModel.js";
|
|
7
7
|
import { resolveUpdateChannel } from "./channels.js";
|
|
8
8
|
import { classifyUpgradeOutcome, shouldIncludeCrossMajorPlanItems, } from "./versionResolution.js";
|
|
9
|
+
import { hasBundleRootEvidence } from "./bundleEvidence.js";
|
|
9
10
|
export { shouldIncludeCrossMajorPlanItems } from "./versionResolution.js";
|
|
10
11
|
/**
|
|
11
12
|
* v2/v3 install layout detection and cross-major upgrade guard rails.
|
|
@@ -18,16 +19,24 @@ export const STATUS_READY_TO_APPLY = "ready_to_apply";
|
|
|
18
19
|
export const STATUS_APPLIED = "applied";
|
|
19
20
|
export const UPGRADE_PREVIEW_SCHEMA = "agentera.upgrade.v2";
|
|
20
21
|
export const STATUS_CONCEPT_MAJOR_BOUNDARY = "major_boundary_crossing";
|
|
22
|
+
export function projectInstallTrack(kind) {
|
|
23
|
+
switch (kind) {
|
|
24
|
+
case "v2_managed_app_home":
|
|
25
|
+
return "v2";
|
|
26
|
+
case "v3_self_contained_npm":
|
|
27
|
+
return "v3";
|
|
28
|
+
case "source_checkout":
|
|
29
|
+
return "source";
|
|
30
|
+
case "unknown_foreign":
|
|
31
|
+
return "unknown";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
21
34
|
const CROSS_MAJOR_ITEMS = [
|
|
22
35
|
{ phase: "artifacts", verb: "migrate", name: "v2_to_v3_artifacts" },
|
|
23
36
|
{ phase: "runtime", verb: "migrate", name: "v2_to_v3_runtime_rewire" },
|
|
24
37
|
{ phase: "cleanup", verb: "migrate", name: "v2_to_v3_app_home_cleanup" },
|
|
25
38
|
];
|
|
26
|
-
function
|
|
27
|
-
return (isFile(path.join(root, "scripts", "agentera")) &&
|
|
28
|
-
isFile(path.join(root, "skills", "agentera", "SKILL.md")));
|
|
29
|
-
}
|
|
30
|
-
function isSourceCheckoutRoot(sourceRoot) {
|
|
39
|
+
export function isSourceCheckoutRoot(sourceRoot) {
|
|
31
40
|
return (pathExists(path.join(sourceRoot, ".git")) &&
|
|
32
41
|
isFile(path.join(sourceRoot, "skills", "agentera", "SKILL.md")) &&
|
|
33
42
|
isFile(path.join(sourceRoot, "registry.json")) &&
|
|
@@ -50,11 +59,38 @@ function hasV2ManagedEvidence(signals, activeBundleRoot) {
|
|
|
50
59
|
hasBundleRootEvidence(activeBundleRoot) &&
|
|
51
60
|
!signals.npxBundleSentinelAtActiveRoot);
|
|
52
61
|
}
|
|
62
|
+
let distributionMajorWarned = false;
|
|
63
|
+
function readPackageJsonMajor(sourceRoot) {
|
|
64
|
+
const pkgPath = path.join(sourceRoot, "package.json");
|
|
65
|
+
if (!isFile(pkgPath)) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const data = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
70
|
+
const version = data?.version;
|
|
71
|
+
if (typeof version !== "string" || !version) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const major = Number.parseInt(version.split(".")[0] ?? "", 10);
|
|
75
|
+
if (Number.isFinite(major) && major > 0) {
|
|
76
|
+
return major;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Malformed package.json — fall through to diagnostic
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
53
84
|
export function cliDistributionMajor(sourceRoot) {
|
|
54
85
|
if (isSourceCheckoutRoot(sourceRoot)) {
|
|
55
86
|
return 3;
|
|
56
87
|
}
|
|
57
88
|
if (isNpxBundleRoot(sourceRoot)) {
|
|
89
|
+
const version = loadSuiteVersion(sourceRoot);
|
|
90
|
+
const major = version ? Number.parseInt(version.split(".")[0] ?? "", 10) : Number.NaN;
|
|
91
|
+
if (Number.isFinite(major) && major > 0) {
|
|
92
|
+
return major;
|
|
93
|
+
}
|
|
58
94
|
return 3;
|
|
59
95
|
}
|
|
60
96
|
const version = loadSuiteVersion(sourceRoot);
|
|
@@ -64,17 +100,28 @@ export function cliDistributionMajor(sourceRoot) {
|
|
|
64
100
|
return major;
|
|
65
101
|
}
|
|
66
102
|
}
|
|
103
|
+
const pkgMajor = readPackageJsonMajor(sourceRoot);
|
|
104
|
+
if (pkgMajor !== null) {
|
|
105
|
+
return pkgMajor;
|
|
106
|
+
}
|
|
107
|
+
if (!distributionMajorWarned) {
|
|
108
|
+
distributionMajorWarned = true;
|
|
109
|
+
process.stderr.write(`agentera: could not determine distribution major version from registry.json or package.json at ${sourceRoot}; defaulting to 2\n`);
|
|
110
|
+
}
|
|
67
111
|
return 2;
|
|
68
112
|
}
|
|
113
|
+
export function __resetDistributionMajorWarnedForTests() {
|
|
114
|
+
distributionMajorWarned = false;
|
|
115
|
+
}
|
|
69
116
|
export function classifyInstall(args) {
|
|
70
117
|
const appHome = args.appHome;
|
|
71
118
|
const sourceRoot = args.sourceRoot;
|
|
72
119
|
const roots = doctorRoots(appHome);
|
|
73
120
|
const activeBundleRoot = roots.activeBundleRoot;
|
|
74
121
|
const signals = readSignals(appHome, sourceRoot, activeBundleRoot);
|
|
75
|
-
if (
|
|
122
|
+
if (hasV2ManagedEvidence(signals, activeBundleRoot)) {
|
|
76
123
|
return {
|
|
77
|
-
kind: "
|
|
124
|
+
kind: "v2_managed_app_home",
|
|
78
125
|
appHome,
|
|
79
126
|
activeBundleRoot,
|
|
80
127
|
managedAppRoot: roots.managedAppRoot,
|
|
@@ -82,9 +129,9 @@ export function classifyInstall(args) {
|
|
|
82
129
|
signals,
|
|
83
130
|
};
|
|
84
131
|
}
|
|
85
|
-
if (
|
|
132
|
+
if (isNpxBundleRoot(sourceRoot) || isNpxBundleRoot(activeBundleRoot) || isNpxBundleRoot(appHome)) {
|
|
86
133
|
return {
|
|
87
|
-
kind: "
|
|
134
|
+
kind: "v3_self_contained_npm",
|
|
88
135
|
appHome,
|
|
89
136
|
activeBundleRoot,
|
|
90
137
|
managedAppRoot: roots.managedAppRoot,
|
|
@@ -142,17 +189,6 @@ function groupItemsByPhase(items) {
|
|
|
142
189
|
}
|
|
143
190
|
return phases;
|
|
144
191
|
}
|
|
145
|
-
export function collectV3MigrationOperations(preview) {
|
|
146
|
-
const out = [];
|
|
147
|
-
for (const phase of preview.phases) {
|
|
148
|
-
for (const item of phase.items) {
|
|
149
|
-
if (item.verb === "migrate" && item.tag === MAJOR_BOUNDARY_ITEM_TAG) {
|
|
150
|
-
out.push(item);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return out;
|
|
155
|
-
}
|
|
156
192
|
export function previewCrossMajorGuard(args) {
|
|
157
193
|
const channel = resolveUpdateChannel(args);
|
|
158
194
|
const install = classifyInstall({ appHome: args.appHome, sourceRoot: args.sourceRoot });
|
|
@@ -198,4 +234,3 @@ export function foreignLayoutHasUnexpectedEntries(root) {
|
|
|
198
234
|
return false;
|
|
199
235
|
}
|
|
200
236
|
}
|
|
201
|
-
//# sourceMappingURL=compatibility.js.map
|