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
|
@@ -3,14 +3,14 @@ import path from "node:path";
|
|
|
3
3
|
import { loadYamlMapping } from "../core/yaml.js";
|
|
4
4
|
import { resolvePath } from "../core/paths.js";
|
|
5
5
|
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
6
|
+
/** PackageManifest registry loader and contract validator. Port of scripts/package_registry.py. */
|
|
6
7
|
export const EXPECTED_PACKAGE_ORDER = ["agentera"];
|
|
7
8
|
export const REQUIRED_GROUPS = [
|
|
8
9
|
"identity",
|
|
9
10
|
"version_authority",
|
|
10
11
|
"version_surfaces",
|
|
11
|
-
"runtime_package_manifests",
|
|
12
12
|
"bundle_surfaces",
|
|
13
|
-
"
|
|
13
|
+
"bootstrap_command_authority",
|
|
14
14
|
"docs_targets",
|
|
15
15
|
"release_policy",
|
|
16
16
|
];
|
|
@@ -22,11 +22,10 @@ const REQUIRED_FIELDS = {
|
|
|
22
22
|
"access_interface",
|
|
23
23
|
"future_authority_change_requires",
|
|
24
24
|
],
|
|
25
|
-
version_surfaces: ["surfaces"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
docs_targets: ["version_files_source", "version_files", "index_targets", "excluded_version_files"],
|
|
25
|
+
version_surfaces: ["surfaces"],
|
|
26
|
+
bundle_surfaces: ["directories", "files", "generated_files", "skip_parts", "skip_suffixes"],
|
|
27
|
+
bootstrap_command_authority: ["scanned_formats", "scalar_classifications", "emitted_producers", "constructor_non_producers"],
|
|
28
|
+
docs_targets: ["version_files_source", "version_files", "index_targets"],
|
|
30
29
|
release_policy: [
|
|
31
30
|
"semver_policy_source",
|
|
32
31
|
"version_bump_required_for_interface_only_change",
|
|
@@ -34,17 +33,11 @@ const REQUIRED_FIELDS = {
|
|
|
34
33
|
],
|
|
35
34
|
};
|
|
36
35
|
const CONSUMER_GROUPS = {
|
|
37
|
-
validator: ["identity", "version_authority", "version_surfaces"
|
|
38
|
-
upgrade: ["identity", "version_authority", "bundle_surfaces", "
|
|
36
|
+
validator: ["identity", "version_authority", "version_surfaces"],
|
|
37
|
+
upgrade: ["identity", "version_authority", "bundle_surfaces", "bootstrap_command_authority"],
|
|
39
38
|
docs: ["identity", "version_authority", "docs_targets", "release_policy"],
|
|
40
39
|
tests: REQUIRED_GROUPS,
|
|
41
40
|
};
|
|
42
|
-
const APPROVED_EXECUTABLES = new Set(["npx"]);
|
|
43
|
-
const APPROVED_ACTIONS = new Set(["remove-legacy-skills", "install-agentera-skill"]);
|
|
44
|
-
const APPROVED_RUNTIMES = new Set(["all", "claude", "opencode"]);
|
|
45
|
-
const APPROVED_RUNTIME_AGENTS = new Set(["claude-code", "opencode"]);
|
|
46
|
-
const CLEANUP_ACTIONS = new Set(["remove-legacy-skills"]);
|
|
47
|
-
const RUNTIME_INSTALL_ACTIONS = new Set(["install-agentera-skill"]);
|
|
48
41
|
const FORBIDDEN_INSTALL_ROOT_FIELDS = new Set([
|
|
49
42
|
"install_root",
|
|
50
43
|
"install_root_classification",
|
|
@@ -80,6 +73,29 @@ function isMapping(value) {
|
|
|
80
73
|
function isStringList(value) {
|
|
81
74
|
return Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
82
75
|
}
|
|
76
|
+
function selectorParts(selector) {
|
|
77
|
+
const parts = [];
|
|
78
|
+
for (const match of selector.matchAll(/([^[.\]]+)|\[(\d+)\]/g)) {
|
|
79
|
+
parts.push(match[2] === undefined ? match[1] : Number(match[2]));
|
|
80
|
+
}
|
|
81
|
+
return parts;
|
|
82
|
+
}
|
|
83
|
+
function selectedVersion(root, surface) {
|
|
84
|
+
const source = fs.readFileSync(path.join(root, surface.path), "utf8");
|
|
85
|
+
if (surface.selector === "frontmatter.version") {
|
|
86
|
+
return /^version:\s*["']?([^"'\s]+)["']?\s*$/m.exec(source)?.[1] ?? null;
|
|
87
|
+
}
|
|
88
|
+
let value = JSON.parse(source);
|
|
89
|
+
for (const part of selectorParts(surface.selector)) {
|
|
90
|
+
if (typeof part === "number") {
|
|
91
|
+
value = Array.isArray(value) ? value[part] : undefined;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
value = isMapping(value) ? value[part] : undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return typeof value === "string" ? value : null;
|
|
98
|
+
}
|
|
83
99
|
export class PackageRegistry {
|
|
84
100
|
records;
|
|
85
101
|
root;
|
|
@@ -105,11 +121,11 @@ export class PackageRegistry {
|
|
|
105
121
|
authority.selector !== "skills[0].version") {
|
|
106
122
|
throw new RegistryError("unsupported suite version authority selector");
|
|
107
123
|
}
|
|
108
|
-
let data;
|
|
124
|
+
let data; // cast: JSON.parse IO boundary
|
|
109
125
|
try {
|
|
110
126
|
data = JSON.parse(fs.readFileSync(path.join(this.root, authority.persisted_authority), "utf8"));
|
|
111
127
|
}
|
|
112
|
-
catch
|
|
128
|
+
catch {
|
|
113
129
|
throw new RegistryError(`registry.json missing skills[0].version`);
|
|
114
130
|
}
|
|
115
131
|
const version = data?.skills?.[0]?.version;
|
|
@@ -137,34 +153,12 @@ export class PackageRegistry {
|
|
|
137
153
|
versionSurfaceIds(packageId = "agentera") {
|
|
138
154
|
return this.get(packageId).version_surfaces.surfaces.map((s) => s.id);
|
|
139
155
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const paths = {};
|
|
145
|
-
for (const manifest of this.get(packageId).runtime_package_manifests.manifests) {
|
|
146
|
-
if (!(manifest.runtime in paths)) {
|
|
147
|
-
paths[manifest.runtime] = manifest.path;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return paths;
|
|
151
|
-
}
|
|
152
|
-
runtimePackageShapes(packageId = "agentera") {
|
|
153
|
-
const shapes = {};
|
|
154
|
-
for (const manifest of this.get(packageId).runtime_package_manifests.manifests) {
|
|
155
|
-
shapes[manifest.runtime] = manifest.package_shape;
|
|
156
|
-
}
|
|
157
|
-
return shapes;
|
|
158
|
-
}
|
|
159
|
-
sharedPathRequirements(packageId = "agentera") {
|
|
160
|
-
const requirements = {};
|
|
161
|
-
for (const entry of this.get(packageId).runtime_package_manifests.shared_paths) {
|
|
162
|
-
requirements[entry.path] = entry.kind;
|
|
156
|
+
versionSurfaceValues(packageId = "agentera") {
|
|
157
|
+
const values = {};
|
|
158
|
+
for (const surface of this.get(packageId).version_surfaces.surfaces) {
|
|
159
|
+
values[surface.id] = selectedVersion(this.root, surface);
|
|
163
160
|
}
|
|
164
|
-
return
|
|
165
|
-
}
|
|
166
|
-
nonVersionBearingRuntimeManifests(packageId = "agentera") {
|
|
167
|
-
return this.get(packageId).runtime_package_manifests.manifests.filter((m) => m.version_bearing === false);
|
|
161
|
+
return values;
|
|
168
162
|
}
|
|
169
163
|
}
|
|
170
164
|
export function loadRegistry(registryPath = defaultRegistryPath(), root = defaultRoot()) {
|
|
@@ -173,7 +167,7 @@ export function loadRegistry(registryPath = defaultRegistryPath(), root = defaul
|
|
|
173
167
|
if (errors.length > 0) {
|
|
174
168
|
throw new RegistryError("PackageManifest registry validation failed: " + errors.join("; "));
|
|
175
169
|
}
|
|
176
|
-
return new PackageRegistry(data.records, root);
|
|
170
|
+
return new PackageRegistry(data.records, root); // cast: parsed registry IO boundary
|
|
177
171
|
}
|
|
178
172
|
export function validateRegistryFile(registryPath = defaultRegistryPath(), root = defaultRoot()) {
|
|
179
173
|
return validateRegistryData(loadYamlMapping(fs.readFileSync(registryPath, "utf8")), root);
|
|
@@ -263,14 +257,11 @@ function validateGroup(prefix, group, value, root) {
|
|
|
263
257
|
case "version_surfaces":
|
|
264
258
|
errors.push(...validateVersionSurfaces(prefix, value, root));
|
|
265
259
|
break;
|
|
266
|
-
case "runtime_package_manifests":
|
|
267
|
-
errors.push(...validateRuntimeManifests(prefix, value, root));
|
|
268
|
-
break;
|
|
269
260
|
case "bundle_surfaces":
|
|
270
|
-
errors.push(...validateBundleSurfaces(prefix, value
|
|
261
|
+
errors.push(...validateBundleSurfaces(prefix, value));
|
|
271
262
|
break;
|
|
272
|
-
case "
|
|
273
|
-
errors.push(...
|
|
263
|
+
case "bootstrap_command_authority":
|
|
264
|
+
errors.push(...validateBootstrapCommandAuthority(prefix, value, root));
|
|
274
265
|
break;
|
|
275
266
|
case "docs_targets":
|
|
276
267
|
errors.push(...validateDocsTargets(prefix, value, root));
|
|
@@ -325,141 +316,196 @@ function validateVersionSurfaces(prefix, value, root) {
|
|
|
325
316
|
errors.push(...validateRepoPath(`${surfacePrefix}.path`, surface.path, root));
|
|
326
317
|
});
|
|
327
318
|
}
|
|
328
|
-
errors.push(...validatePathList(`${prefix}.excluded_runtime_manifests`, value.excluded_runtime_manifests, root));
|
|
329
319
|
return errors;
|
|
330
320
|
}
|
|
331
|
-
function
|
|
321
|
+
function validateBundleSurfaces(prefix, value) {
|
|
332
322
|
const errors = [];
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
323
|
+
const ids = new Map();
|
|
324
|
+
const paths = new Map();
|
|
325
|
+
for (const field of ["directories", "files"]) {
|
|
326
|
+
const entries = value[field];
|
|
327
|
+
if (!Array.isArray(entries)) {
|
|
328
|
+
errors.push(`${prefix}.${field} must be a list`);
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
entries.forEach((entry, index) => {
|
|
332
|
+
const entryPrefix = `${prefix}.${field}[${index}]`;
|
|
333
|
+
if (!isMapping(entry)) {
|
|
334
|
+
errors.push(`${entryPrefix} must be an object`);
|
|
344
335
|
return;
|
|
345
336
|
}
|
|
346
|
-
errors.push(...validateRequiredObjectFields(
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
337
|
+
errors.push(...validateRequiredObjectFields(entryPrefix, entry, ["id", "path"]));
|
|
338
|
+
const entryId = entry.id;
|
|
339
|
+
if (typeof entryId === "string" && entryId.length > 0) {
|
|
340
|
+
const previous = ids.get(entryId);
|
|
341
|
+
if (previous !== undefined) {
|
|
342
|
+
errors.push(`${entryPrefix}.id ${JSON.stringify(entryId)} duplicates ${previous}.id; ` +
|
|
343
|
+
"correction: use a unique id across bundle directories and files");
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
ids.set(entryId, entryPrefix);
|
|
347
|
+
}
|
|
356
348
|
}
|
|
357
|
-
|
|
358
|
-
|
|
349
|
+
const entryPath = entry.path;
|
|
350
|
+
errors.push(...validateBundlePath(entryPrefix, entryId, entryPath));
|
|
351
|
+
if (typeof entryPath === "string" && entryPath.length > 0) {
|
|
352
|
+
const previous = paths.get(entryPath);
|
|
353
|
+
if (previous !== undefined) {
|
|
354
|
+
errors.push(`${entryPrefix}.path ${JSON.stringify(entryPath)} for id ${JSON.stringify(entryId)} ` +
|
|
355
|
+
`duplicates ${previous}.path; correction: use a unique path across bundle directories and files`);
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
paths.set(entryPath, entryPrefix);
|
|
359
|
+
}
|
|
359
360
|
}
|
|
360
361
|
});
|
|
361
|
-
|
|
362
|
-
|
|
362
|
+
}
|
|
363
|
+
for (const field of ["skip_parts", "skip_suffixes"]) {
|
|
364
|
+
if (!isStringList(value[field])) {
|
|
365
|
+
errors.push(`${prefix}.${field} must be a list of strings`);
|
|
363
366
|
}
|
|
364
367
|
}
|
|
365
|
-
const
|
|
366
|
-
if (!Array.isArray(
|
|
367
|
-
errors.push(`${prefix}.
|
|
368
|
+
const generated = value.generated_files;
|
|
369
|
+
if (!Array.isArray(generated)) {
|
|
370
|
+
errors.push(`${prefix}.generated_files must be a list`);
|
|
368
371
|
}
|
|
369
372
|
else {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
const entryPrefix = `${prefix}.shared_paths[${index}]`;
|
|
373
|
+
generated.forEach((entry, index) => {
|
|
374
|
+
const entryPrefix = `${prefix}.generated_files[${index}]`;
|
|
373
375
|
if (!isMapping(entry)) {
|
|
374
376
|
errors.push(`${entryPrefix} must be an object`);
|
|
375
377
|
return;
|
|
376
378
|
}
|
|
377
|
-
errors.push(...validateRequiredObjectFields(entryPrefix, entry, ["id", "path", "
|
|
378
|
-
errors.push(...
|
|
379
|
-
if (entry.
|
|
380
|
-
|
|
379
|
+
errors.push(...validateRequiredObjectFields(entryPrefix, entry, ["id", "path", "format", "classification", "command_authority_reason"]));
|
|
380
|
+
errors.push(...validateBundlePath(entryPrefix, entry.id, entry.path));
|
|
381
|
+
if (typeof entry.id === "string" && entry.id) {
|
|
382
|
+
const previous = ids.get(entry.id);
|
|
383
|
+
if (previous)
|
|
384
|
+
errors.push(`${entryPrefix}.id ${JSON.stringify(entry.id)} duplicates ${previous}.id; correction: use a unique id across all bundle surfaces`);
|
|
385
|
+
else
|
|
386
|
+
ids.set(entry.id, entryPrefix);
|
|
387
|
+
}
|
|
388
|
+
if (typeof entry.path === "string" && entry.path) {
|
|
389
|
+
const previous = paths.get(entry.path);
|
|
390
|
+
if (previous)
|
|
391
|
+
errors.push(`${entryPrefix}.path ${JSON.stringify(entry.path)} for id ${JSON.stringify(entry.id)} duplicates ${previous}.path; correction: use a unique path across all bundle surfaces`);
|
|
392
|
+
else
|
|
393
|
+
paths.set(entry.path, entryPrefix);
|
|
394
|
+
}
|
|
395
|
+
if (entry.format !== "json")
|
|
396
|
+
errors.push(`${entryPrefix}.format must be json`);
|
|
397
|
+
if (entry.classification !== "active")
|
|
398
|
+
errors.push(`${entryPrefix}.classification must be active`);
|
|
399
|
+
if (typeof entry.command_authority_reason !== "string" || !entry.command_authority_reason) {
|
|
400
|
+
errors.push(`${entryPrefix}.command_authority_reason must be a non-empty string`);
|
|
381
401
|
}
|
|
382
402
|
});
|
|
383
403
|
}
|
|
384
|
-
if (typeof value.shared_paths_policy !== "string" || !value.shared_paths_policy) {
|
|
385
|
-
errors.push(`${prefix}.shared_paths_policy must be a non-empty string`);
|
|
386
|
-
}
|
|
387
404
|
return errors;
|
|
388
405
|
}
|
|
389
|
-
function
|
|
406
|
+
function validateBootstrapCommandAuthority(prefix, value, root) {
|
|
390
407
|
const errors = [];
|
|
391
|
-
|
|
408
|
+
const formats = value.scanned_formats;
|
|
409
|
+
if (!Array.isArray(formats) || !formats.every((item) => typeof item === "string") || new Set(formats).size !== 3 || !["markdown", "yaml", "json"].every((format) => formats.includes(format))) {
|
|
410
|
+
errors.push(`${prefix}.scanned_formats must contain exactly markdown, yaml, and json`);
|
|
411
|
+
}
|
|
412
|
+
for (const field of ["emitted_producers", "constructor_non_producers"]) {
|
|
392
413
|
const entries = value[field];
|
|
393
414
|
if (!Array.isArray(entries)) {
|
|
394
415
|
errors.push(`${prefix}.${field} must be a list`);
|
|
395
416
|
continue;
|
|
396
417
|
}
|
|
397
|
-
|
|
418
|
+
const paths = new Set();
|
|
398
419
|
entries.forEach((entry, index) => {
|
|
399
420
|
const entryPrefix = `${prefix}.${field}[${index}]`;
|
|
400
421
|
if (!isMapping(entry)) {
|
|
401
422
|
errors.push(`${entryPrefix} must be an object`);
|
|
402
423
|
return;
|
|
403
424
|
}
|
|
404
|
-
errors.push(...validateRequiredObjectFields(entryPrefix, entry, ["
|
|
425
|
+
errors.push(...validateRequiredObjectFields(entryPrefix, entry, ["path", "reason"]));
|
|
405
426
|
errors.push(...validateRepoPath(`${entryPrefix}.path`, entry.path, root));
|
|
427
|
+
if (typeof entry.reason !== "string" || !entry.reason)
|
|
428
|
+
errors.push(`${entryPrefix}.reason must be a non-empty string`);
|
|
429
|
+
if (typeof entry.path === "string") {
|
|
430
|
+
if (paths.has(entry.path))
|
|
431
|
+
errors.push(`${entryPrefix}.path duplicates ${JSON.stringify(entry.path)}`);
|
|
432
|
+
paths.add(entry.path);
|
|
433
|
+
}
|
|
406
434
|
});
|
|
407
435
|
}
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
return errors;
|
|
414
|
-
}
|
|
415
|
-
function validatePackageCommands(prefix, value) {
|
|
416
|
-
const errors = [];
|
|
417
|
-
const commands = value.commands;
|
|
418
|
-
if (!Array.isArray(commands)) {
|
|
419
|
-
errors.push(`${prefix}.commands must be a list`);
|
|
436
|
+
const classifications = value.scalar_classifications;
|
|
437
|
+
if (!Array.isArray(classifications)) {
|
|
438
|
+
errors.push(`${prefix}.scalar_classifications must be a list`);
|
|
420
439
|
}
|
|
421
440
|
else {
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
441
|
+
const identities = new Set();
|
|
442
|
+
const reasons = new Set();
|
|
443
|
+
classifications.forEach((entry, index) => {
|
|
444
|
+
const entryPrefix = `${prefix}.scalar_classifications[${index}]`;
|
|
445
|
+
if (!isMapping(entry)) {
|
|
446
|
+
errors.push(`${entryPrefix} must be an object`);
|
|
427
447
|
return;
|
|
428
448
|
}
|
|
429
|
-
errors.push(...validateRequiredObjectFields(
|
|
430
|
-
"
|
|
431
|
-
"
|
|
432
|
-
"
|
|
433
|
-
"
|
|
434
|
-
"
|
|
435
|
-
"
|
|
449
|
+
errors.push(...validateRequiredObjectFields(entryPrefix, entry, [
|
|
450
|
+
"path",
|
|
451
|
+
"region",
|
|
452
|
+
"category",
|
|
453
|
+
"classification",
|
|
454
|
+
"normalized_sha256",
|
|
455
|
+
"reason",
|
|
436
456
|
]));
|
|
437
|
-
errors.push(...
|
|
457
|
+
errors.push(...validateRepoPath(`${entryPrefix}.path`, entry.path, root));
|
|
458
|
+
if (typeof entry.region !== "string" || !entry.region)
|
|
459
|
+
errors.push(`${entryPrefix}.region must be a non-empty string`);
|
|
460
|
+
if (!["identity_only", "argument_bearing", "other_vocabulary"].includes(String(entry.category)))
|
|
461
|
+
errors.push(`${entryPrefix}.category is invalid`);
|
|
462
|
+
if (!["bounded_descriptive", "exact_exemption"].includes(String(entry.classification)))
|
|
463
|
+
errors.push(`${entryPrefix}.classification is invalid`);
|
|
464
|
+
if (typeof entry.normalized_sha256 !== "string" || !/^[a-f0-9]{64}$/u.test(entry.normalized_sha256))
|
|
465
|
+
errors.push(`${entryPrefix}.normalized_sha256 must be lowercase SHA-256`);
|
|
466
|
+
if (typeof entry.reason !== "string" || !entry.reason)
|
|
467
|
+
errors.push(`${entryPrefix}.reason must be a non-empty string`);
|
|
468
|
+
else if (reasons.has(entry.reason))
|
|
469
|
+
errors.push(`${entryPrefix}.reason duplicates another scalar-specific reason`);
|
|
470
|
+
else
|
|
471
|
+
reasons.add(entry.reason);
|
|
472
|
+
if (typeof entry.path === "string" && typeof entry.region === "string") {
|
|
473
|
+
const identity = `${entry.path}\u0000${entry.region}`;
|
|
474
|
+
if (identities.has(identity))
|
|
475
|
+
errors.push(`${entryPrefix} duplicates path and region ${JSON.stringify(entry.path)} ${JSON.stringify(entry.region)}`);
|
|
476
|
+
identities.add(identity);
|
|
477
|
+
}
|
|
438
478
|
});
|
|
439
479
|
}
|
|
440
|
-
const safety = value.safety;
|
|
441
|
-
const expectedSafety = {
|
|
442
|
-
argv_only: true,
|
|
443
|
-
update_packages_required_to_plan: true,
|
|
444
|
-
yes_required_to_execute: true,
|
|
445
|
-
preserve_existing_write_gates: true,
|
|
446
|
-
cleanup_phase: "cleanup",
|
|
447
|
-
runtime_install_phase: "runtime-install",
|
|
448
|
-
};
|
|
449
|
-
if (!isMapping(safety)) {
|
|
450
|
-
errors.push(`${prefix}.safety must be an object`);
|
|
451
|
-
}
|
|
452
|
-
else if (!shallowEqual(safety, expectedSafety)) {
|
|
453
|
-
errors.push(`${prefix}.safety must preserve approved write gates and phase names`);
|
|
454
|
-
}
|
|
455
480
|
return errors;
|
|
456
481
|
}
|
|
482
|
+
function validateBundlePath(prefix, id, value) {
|
|
483
|
+
const segments = typeof value === "string" ? value.split("/") : [];
|
|
484
|
+
const invalid = typeof value !== "string" ||
|
|
485
|
+
value.length === 0 ||
|
|
486
|
+
path.posix.isAbsolute(value) ||
|
|
487
|
+
path.win32.isAbsolute(value) ||
|
|
488
|
+
/^[A-Za-z]:/.test(value) ||
|
|
489
|
+
value.includes("\\") ||
|
|
490
|
+
value.startsWith("./") ||
|
|
491
|
+
value.endsWith("/") ||
|
|
492
|
+
segments.includes(".") ||
|
|
493
|
+
segments.includes("..") ||
|
|
494
|
+
path.posix.normalize(value) !== value;
|
|
495
|
+
if (!invalid)
|
|
496
|
+
return [];
|
|
497
|
+
return [
|
|
498
|
+
`${prefix}.path ${JSON.stringify(value)} for id ${JSON.stringify(id)} is invalid; ` +
|
|
499
|
+
"correction: use a non-empty normalized relative POSIX path without absolute roots, " +
|
|
500
|
+
"drive prefixes, backslashes, leading './', trailing separators, or '.'/'..' segments",
|
|
501
|
+
];
|
|
502
|
+
}
|
|
457
503
|
function validateDocsTargets(prefix, value, root) {
|
|
458
504
|
const errors = [];
|
|
459
505
|
if (typeof value.version_files_source !== "string" || !value.version_files_source) {
|
|
460
506
|
errors.push(`${prefix}.version_files_source must be a non-empty string`);
|
|
461
507
|
}
|
|
462
|
-
for (const field of ["version_files", "index_targets"
|
|
508
|
+
for (const field of ["version_files", "index_targets"]) {
|
|
463
509
|
errors.push(...validatePathList(`${prefix}.${field}`, value[field], root));
|
|
464
510
|
}
|
|
465
511
|
return errors;
|
|
@@ -479,51 +525,6 @@ function validateReleasePolicy(prefix, value) {
|
|
|
479
525
|
}
|
|
480
526
|
return errors;
|
|
481
527
|
}
|
|
482
|
-
function validateCommandSpec(prefix, command) {
|
|
483
|
-
const errors = [];
|
|
484
|
-
const runtime = command.runtime;
|
|
485
|
-
const action = command.action;
|
|
486
|
-
const phase = command.phase;
|
|
487
|
-
const argv = command.argv;
|
|
488
|
-
if (!APPROVED_RUNTIMES.has(runtime)) {
|
|
489
|
-
errors.push(`${prefix}.runtime ${pyRepr(runtime)} is not approved`);
|
|
490
|
-
}
|
|
491
|
-
if (!APPROVED_ACTIONS.has(action)) {
|
|
492
|
-
errors.push(`${prefix}.action ${pyRepr(action)} is not approved`);
|
|
493
|
-
}
|
|
494
|
-
if (!Array.isArray(argv) || argv.length === 0 || !argv.every((part) => typeof part === "string")) {
|
|
495
|
-
errors.push(`${prefix}.argv must be a list of strings`);
|
|
496
|
-
return errors;
|
|
497
|
-
}
|
|
498
|
-
if (!APPROVED_EXECUTABLES.has(argv[0])) {
|
|
499
|
-
errors.push(`${prefix}.argv uses unapproved executable ${pyRepr(argv[0])}`);
|
|
500
|
-
}
|
|
501
|
-
if (argv.length < 3 || argv[1] !== "skills" || !["remove", "add"].includes(argv[2])) {
|
|
502
|
-
errors.push(`${prefix}.argv must use approved skills action`);
|
|
503
|
-
}
|
|
504
|
-
if (CLEANUP_ACTIONS.has(action) && (runtime !== "all" || phase !== "cleanup" || argv[2] !== "remove")) {
|
|
505
|
-
errors.push(`${prefix}: cleanup commands must stay separate from runtime installs`);
|
|
506
|
-
}
|
|
507
|
-
if (RUNTIME_INSTALL_ACTIONS.has(action)) {
|
|
508
|
-
if (runtime === "all" || phase !== "runtime-install" || argv[2] !== "add") {
|
|
509
|
-
errors.push(`${prefix}: runtime install commands must stay out of cleanup`);
|
|
510
|
-
}
|
|
511
|
-
if (!argv.includes("-a")) {
|
|
512
|
-
errors.push(`${prefix}: runtime install commands must declare runtime agent`);
|
|
513
|
-
}
|
|
514
|
-
else {
|
|
515
|
-
const agentIndex = argv.indexOf("-a") + 1;
|
|
516
|
-
const agent = agentIndex < argv.length ? argv[agentIndex] : null;
|
|
517
|
-
if (agent === null || !APPROVED_RUNTIME_AGENTS.has(agent)) {
|
|
518
|
-
errors.push(`${prefix}: runtime install agent ${pyRepr(agent)} is not approved`);
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
if (typeof command.skipped_without_update_packages_message !== "string") {
|
|
523
|
-
errors.push(`${prefix}.skipped_without_update_packages_message must be a string`);
|
|
524
|
-
}
|
|
525
|
-
return errors;
|
|
526
|
-
}
|
|
527
528
|
function validateRequiredObjectFields(prefix, value, expected) {
|
|
528
529
|
const errors = [];
|
|
529
530
|
for (const field of expected) {
|
|
@@ -536,7 +537,7 @@ function validateRequiredObjectFields(prefix, value, expected) {
|
|
|
536
537
|
errors.push(`${prefix}: unknown field ${field}`);
|
|
537
538
|
}
|
|
538
539
|
}
|
|
539
|
-
for (const field of ["id", "
|
|
540
|
+
for (const field of ["id", "selector"]) {
|
|
540
541
|
if (field in value && (typeof value[field] !== "string" || !value[field])) {
|
|
541
542
|
errors.push(`${prefix}.${field} must be a non-empty string`);
|
|
542
543
|
}
|
|
@@ -585,11 +586,10 @@ function validateRepoPath(prefix, value, root) {
|
|
|
585
586
|
if (rel !== "" && (rel.startsWith("..") || path.isAbsolute(rel))) {
|
|
586
587
|
return [`${prefix} must stay inside repo root`];
|
|
587
588
|
}
|
|
588
|
-
// Existence is advisory for a package
|
|
589
|
-
//
|
|
590
|
-
//
|
|
591
|
-
//
|
|
592
|
-
// and traversal safety above still apply.
|
|
589
|
+
// Existence is advisory for a package distribution spec: version files and
|
|
590
|
+
// build outputs may be generated at build/release time and need not be
|
|
591
|
+
// present in every checkout. Structural and traversal safety above still
|
|
592
|
+
// apply.
|
|
593
593
|
return [];
|
|
594
594
|
}
|
|
595
595
|
function validateForbiddenFields(prefix, value) {
|
|
@@ -615,27 +615,3 @@ function validateForbiddenFields(prefix, value) {
|
|
|
615
615
|
}
|
|
616
616
|
return errors;
|
|
617
617
|
}
|
|
618
|
-
function shallowEqual(a, b) {
|
|
619
|
-
const ak = Object.keys(a);
|
|
620
|
-
const bk = Object.keys(b);
|
|
621
|
-
if (ak.length !== bk.length) {
|
|
622
|
-
return false;
|
|
623
|
-
}
|
|
624
|
-
for (const k of ak) {
|
|
625
|
-
if (a[k] !== b[k]) {
|
|
626
|
-
return false;
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
return true;
|
|
630
|
-
}
|
|
631
|
-
/** Mirror Python repr() for the scalar values used in validator messages. */
|
|
632
|
-
function pyRepr(value) {
|
|
633
|
-
if (value === null || value === undefined) {
|
|
634
|
-
return "None";
|
|
635
|
-
}
|
|
636
|
-
if (typeof value === "string") {
|
|
637
|
-
return `'${value}'`;
|
|
638
|
-
}
|
|
639
|
-
return String(value);
|
|
640
|
-
}
|
|
641
|
-
//# sourceMappingURL=packageRegistry.js.map
|