agentera 3.0.0-dev.4 → 3.0.0-dev.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +108 -22
- package/bundle/.agentera-npx-bundle.json +1 -1
- package/bundle/CHANGELOG.md +1351 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +143 -0
- package/bundle/UPGRADE.md +236 -0
- package/bundle/extract-corpus-parity.json +21 -0
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +437 -0
- package/bundle/references/adapters/package-registry.yaml +434 -189
- package/bundle/references/adapters/package-surface-characterization.md +66 -35
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
- package/bundle/references/analysis/verification-policy.yaml +191 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
- package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
- package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
- package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
- package/bundle/references/cli/routing-model.md +155 -0
- package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
- package/bundle/references/cli/update-channels.yaml +35 -2
- package/bundle/references/cli/vocabulary-index.yaml +23 -20
- package/bundle/references/cli/vocabulary.md +337 -366
- package/bundle/references/meta/retained-reference-authority.yaml +151 -0
- package/bundle/registry.json +14 -14
- package/bundle/skills/agentera/SKILL.md +218 -408
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
- package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
- package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
- package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
- package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
- package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
- package/bundle/skills/agentera/protocol.yaml +31 -31
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
- package/dist/analytics/extractCorpus/cli.js +190 -0
- package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
- package/dist/analytics/extractCorpus/core.js +392 -0
- package/dist/analytics/extractCorpus/corpus.js +167 -0
- package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
- package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
- package/dist/analytics/extractCorpus/index.js +14 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
- package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +2 -1791
- package/dist/analytics/glossaryAdviceResolution.js +166 -0
- package/dist/analytics/glossaryInputAcquisition.js +319 -0
- package/dist/analytics/personalGlossaryAdmission.js +133 -0
- package/dist/analytics/personalGlossaryProfile.js +219 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +169 -42
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -0
- package/dist/capabilities/build/instructions.js +56 -0
- package/dist/capabilities/design/instructions.js +4 -0
- package/dist/capabilities/discuss/instructions.js +29 -0
- package/dist/capabilities/document/instructions.js +11 -0
- package/dist/capabilities/index.js +40 -0
- package/dist/capabilities/optimize/instructions.js +14 -0
- package/dist/capabilities/orchestrate/instructions.js +40 -0
- package/dist/capabilities/plan/instructions.js +32 -0
- package/dist/capabilities/profile/instructions.js +70 -0
- package/dist/capabilities/research/instructions.js +5 -0
- package/dist/capabilities/status/instructions.js +11 -0
- package/dist/capabilities/status/startupInstructions.js +34 -0
- package/dist/capabilities/vision/instructions.js +4 -0
- package/dist/cli/appContext.js +30 -24
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +565 -0
- package/dist/cli/capabilityContext/bespoke.js +44 -0
- package/dist/cli/capabilityContext/build.js +242 -0
- package/dist/cli/capabilityContext/closeout.js +233 -0
- package/dist/cli/capabilityContext/contract.js +179 -0
- package/dist/cli/capabilityContext/evidence.js +463 -0
- package/dist/cli/capabilityContext/index.js +3 -0
- package/dist/cli/capabilityContext/orchestration.js +131 -0
- package/dist/cli/capabilityContext/planState.js +260 -0
- package/dist/cli/capabilityContext/progress.js +142 -0
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +83 -0
- package/dist/cli/capabilityContext/slim.js +152 -0
- package/dist/cli/capabilityContext/startup.js +150 -0
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +56 -0
- package/dist/cli/capabilityContext.js +1 -2421
- package/dist/cli/commands/appHome.js +22 -0
- package/dist/cli/commands/capability.js +5 -12
- package/dist/cli/commands/compact.js +41 -13
- package/dist/cli/commands/doctor.js +127 -97
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +26 -44
- package/dist/cli/commands/personalGlossary.js +176 -0
- package/dist/cli/commands/prime/briefOrientation.js +747 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +190 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
- package/dist/cli/commands/prime/collectOrientationState.js +212 -0
- package/dist/cli/commands/prime/orientationOutput.js +397 -0
- package/dist/cli/commands/prime/types.js +1 -0
- package/dist/cli/commands/prime/v1Migration.js +38 -0
- package/dist/cli/commands/prime.js +80 -558
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +78 -53
- package/dist/cli/commands/report.js +96 -25
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +266 -143
- package/dist/cli/commands/state/decisions.js +387 -0
- package/dist/cli/commands/state/docs.js +70 -0
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +14 -0
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +14 -0
- package/dist/cli/commands/state/index.js +16 -0
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +25 -0
- package/dist/cli/commands/state/plan.js +14 -0
- package/dist/cli/commands/state/planTasks.js +154 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/progress.js +13 -0
- package/dist/cli/commands/state/shared.js +14 -0
- package/dist/cli/commands/state/todo.js +42 -0
- package/dist/cli/commands/state/write.js +434 -0
- package/dist/cli/commands/upgrade.js +146 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +272 -213
- package/dist/cli/commands/verify.js +24 -9
- package/dist/cli/contracts/bundleStatus.js +1 -0
- package/dist/cli/contracts/orientationState.js +1 -0
- package/dist/cli/dispatch/argvParser.js +32 -0
- package/dist/cli/dispatch/check.js +372 -0
- package/dist/cli/dispatch/commands.js +27 -0
- package/dist/cli/dispatch/index.js +207 -0
- package/dist/cli/dispatch/lifecycle.js +652 -0
- package/dist/cli/dispatch/prime.js +139 -0
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +63 -0
- package/dist/cli/dispatch/state.js +140 -0
- package/dist/cli/dispatch.js +1 -996
- package/dist/cli/errors.js +52 -0
- package/dist/cli/help.js +390 -43
- package/dist/cli/migrationRequired.js +87 -0
- package/dist/cli/orientation/attention.js +59 -0
- package/dist/cli/orientation/corpusCoverage.js +102 -0
- package/dist/cli/orientation.js +444 -173
- package/dist/cli/planArtifacts.js +350 -0
- package/dist/cli/planEvidence.js +157 -0
- package/dist/cli/planLifecycleState.js +36 -0
- package/dist/cli/planTaskIndex.js +11 -0
- package/dist/cli/preCutoverCommand.js +32 -0
- package/dist/cli/prime-blob.js +71 -3
- package/dist/cli/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +59 -0
- package/dist/cli/stateQuery.js +63 -14
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +46 -0
- package/dist/cli/todoReadinessSelection.js +192 -0
- package/dist/cli/todoSeverity.js +18 -0
- package/dist/core/atomicWriter.js +20 -0
- package/dist/core/developmentChannel.js +1 -0
- package/dist/core/developmentInvocation.js +374 -0
- package/dist/core/difflib.js +0 -1
- package/dist/core/envPaths.js +20 -0
- package/dist/core/jsonValue.js +5 -0
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +67 -3
- package/dist/core/shell.js +4 -0
- package/dist/core/skillIdentity.js +23 -0
- package/dist/core/sourceRoot.js +9 -12
- package/dist/core/text.js +10 -0
- package/dist/core/toml.js +0 -1
- package/dist/core/yaml.js +8 -1
- package/dist/eval/evalSkills.js +30 -26
- package/dist/eval/hybridRouteEvaluation.js +155 -0
- package/dist/eval/semanticEval.js +43 -20
- package/dist/eval/semanticFixtures.js +16 -5
- package/dist/hooks/common.js +11 -81
- package/dist/hooks/compaction/apply.js +446 -0
- package/dist/hooks/compaction/dryRun.js +184 -0
- package/dist/hooks/compaction/index.js +22 -0
- package/dist/hooks/compaction/parse.js +325 -0
- package/dist/hooks/compaction/retention.js +202 -0
- package/dist/hooks/compaction/status.js +360 -0
- package/dist/hooks/compaction/types.js +5 -0
- package/dist/hooks/validateArtifact/agentFacing.js +9 -0
- package/dist/hooks/validateArtifact/index.js +92 -0
- package/dist/hooks/validateArtifact/markdown.js +145 -0
- package/dist/hooks/validateArtifact/schema.js +546 -0
- package/dist/hooks/validateArtifact/traversal.js +107 -0
- package/dist/hooks/validateArtifact/violations.js +107 -0
- package/dist/migrate/v2HandoffManifest.js +452 -0
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +106 -0
- package/dist/registries/artifactProtocolIds.js +78 -0
- package/dist/registries/artifactRegistry.js +224 -63
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +141 -13
- package/dist/registries/evaluatorHandoffContract.js +170 -0
- package/dist/registries/evidenceTierContract.js +371 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryCaveatContract.js +67 -0
- package/dist/registries/glossaryConsumerContractValidation.js +787 -0
- package/dist/registries/glossaryEntryContract.js +757 -0
- package/dist/registries/glossaryTermIdentity.js +17 -0
- package/dist/registries/glossaryTermOccurrence.js +20 -0
- package/dist/registries/hybridRoute.js +274 -0
- package/dist/registries/hybridRouteReceipt.js +221 -0
- package/dist/registries/packagePublication.js +229 -0
- package/dist/registries/packageRegistry.js +187 -211
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +174 -0
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +385 -0
- package/dist/runtime/lifecycleAdapterContract.js +457 -0
- package/dist/runtime/lifecycleAdapters.js +777 -0
- package/dist/runtime/lifecycleAuthority.js +453 -0
- package/dist/runtime/lifecycleOperationContract.js +123 -0
- package/dist/runtime/lifecycleOperations.js +634 -0
- package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
- package/dist/runtime/lifecyclePublication.js +415 -0
- package/dist/runtime/lifecycleSnapshot.js +438 -0
- package/dist/runtime/nativeResourceCleanup.js +502 -0
- package/dist/setup/opencode.js +20 -0
- package/dist/setup/opencodeConstants.js +1 -0
- package/dist/setup/sharedSkill.js +45 -0
- package/dist/setup/smokeChecks.js +21 -82
- package/dist/state/archiveDiscovery.js +580 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archiveRecovery.js +237 -0
- package/dist/state/archiveReplay.js +53 -0
- package/dist/state/canonicalMigrationRecord.js +36 -0
- package/dist/state/changelog.js +221 -0
- package/dist/state/decisionEntities.js +367 -0
- package/dist/state/decisionLegacyValidation.js +215 -0
- package/dist/state/decisionMigrationProvenance.js +199 -0
- package/dist/state/decisionOverlay.js +254 -0
- package/dist/state/decisionRevision.js +256 -0
- package/dist/state/decisionRevisionMigration.js +89 -0
- package/dist/state/directRetrieval.js +323 -0
- package/dist/state/durability.js +324 -0
- package/dist/state/entityCutover.js +459 -0
- package/dist/state/entityCutoverGit.js +127 -0
- package/dist/state/entityGlossaryAuthority.js +13 -0
- package/dist/state/entityListProjection.js +187 -0
- package/dist/state/entityListRuntimeRegistry.js +85 -0
- package/dist/state/entityMigrationCausality.js +97 -0
- package/dist/state/entityMigrationIdentity.js +5 -0
- package/dist/state/entityMigrationPreview.js +846 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +806 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +896 -0
- package/dist/state/exactReplacementRecovery.js +18 -0
- package/dist/state/experimentArchive.js +63 -0
- package/dist/state/experimentIdentity.js +202 -0
- package/dist/state/healthEntities.js +262 -0
- package/dist/state/healthEntityValidation.js +18 -0
- package/dist/state/healthRepair.js +69 -0
- package/dist/state/installRoot.js +64 -25
- package/dist/state/legacyEntityCutoverEvidence.js +65 -0
- package/dist/state/legacyIdentity.js +47 -0
- package/dist/state/legacySummaryRecord.js +6 -0
- package/dist/state/listAccounting.js +54 -0
- package/dist/state/listClassification.js +17 -0
- package/dist/state/listCursor.js +42 -0
- package/dist/state/listRetrieval.js +781 -0
- package/dist/state/migrationSourceBinding.js +30 -0
- package/dist/state/objectiveExperimentEntities.js +322 -0
- package/dist/state/planEntities.js +530 -0
- package/dist/state/planIdentity.js +47 -0
- package/dist/state/planRetrieval.js +313 -0
- package/dist/state/planTaskRetrieval.js +294 -0
- package/dist/state/progressEntities.js +512 -0
- package/dist/state/progressGlossaryCaveat.js +168 -0
- package/dist/state/progressPublicationOrder.js +19 -0
- package/dist/state/projectRoot.js +62 -0
- package/dist/state/projectionPolicy.js +190 -0
- package/dist/state/retrievalAuthority.js +156 -0
- package/dist/state/safeProjectFile.js +155 -0
- package/dist/state/startupAnalysis/benchmark.js +432 -0
- package/dist/state/startupAnalysis/contract.js +160 -0
- package/dist/state/startupAnalysis/helpers.js +286 -0
- package/dist/state/startupAnalysis/index.js +6 -0
- package/dist/state/startupAnalysis/metrics.js +340 -0
- package/dist/state/startupAnalysis/records.js +198 -0
- package/dist/state/startupAnalysis/report.js +111 -0
- package/dist/state/startupAnalysis/threshold.js +512 -0
- package/dist/state/startupAnalysis.js +2 -1953
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +85 -0
- package/dist/state/stateStorageAuthority.js +47 -0
- package/dist/state/summaryEntityRead.js +25 -0
- package/dist/state/summaryMigrationProvenance.js +66 -0
- package/dist/state/summarySourceRowAuthority.js +36 -0
- package/dist/state/todoDocsEntities.js +1064 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +132 -0
- package/dist/state/todoReconciliationInspection.js +173 -0
- package/dist/state/todoReconciliationRepair.js +170 -0
- package/dist/state/todoReconciliationTransaction.js +582 -0
- package/dist/state/write/assign.js +20 -0
- package/dist/state/write/candidateMutation.js +269 -0
- package/dist/state/write/errors.js +11 -0
- package/dist/state/write/experimentPublication.js +192 -0
- package/dist/state/write/explain.js +332 -0
- package/dist/state/write/fields.js +61 -0
- package/dist/state/write/glossaryPublication.js +263 -0
- package/dist/state/write/grammar.js +280 -0
- package/dist/state/write/helpers.js +29 -0
- package/dist/state/write/index.js +12 -0
- package/dist/state/write/input.js +367 -0
- package/dist/state/write/lock.js +837 -0
- package/dist/state/write/mutation.js +234 -0
- package/dist/state/write/operations.js +169 -0
- package/dist/state/write/planEvaluation.js +128 -0
- package/dist/state/write/planPublication.js +179 -0
- package/dist/state/write/runtimeOperations.js +142 -0
- package/dist/state/write/serialize.js +1 -0
- package/dist/state/write/transaction.js +52 -0
- package/dist/state/write/validate.js +7 -0
- package/dist/upgrade/appContentRefresh.js +383 -0
- package/dist/upgrade/appModel.js +8 -7
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +33 -0
- package/dist/upgrade/channels.js +12 -8
- package/dist/upgrade/compatibility.js +56 -21
- package/dist/upgrade/doctor.js +197 -192
- package/dist/upgrade/doctorClassifier.js +187 -0
- package/dist/upgrade/installedHooksRetirement.js +196 -0
- package/dist/upgrade/legacyAgentCleanup.js +282 -0
- package/dist/upgrade/lifecycleUpgrade.js +113 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +155 -0
- package/dist/upgrade/npxPlatformStatus.js +22 -0
- package/dist/upgrade/projectIntegration.js +145 -187
- package/dist/upgrade/projectIntegrationDecision.js +50 -0
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +278 -352
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +263 -59
- package/dist/upgrade/v3CapabilitySurface.js +14 -0
- package/dist/upgrade/versionResolution.js +12 -5
- package/dist/validate/activationArtifactEvidence.js +844 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +515 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +5 -11
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +144 -15
- package/dist/validate/crossCapability.js +15 -10
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +73 -37
- package/dist/validate/v1LegacyCruft.js +131 -0
- package/dist/validate/vocabularyAuthority.js +303 -0
- package/package.json +53 -27
- package/bundle/references/adapters/cursor.md +0 -213
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/analysis/benchmark.md +0 -267
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/meta/documentation-inventory.md +0 -43
- package/bundle/references/v1-section-mapping.md +0 -47
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
- package/bundle/skills/agentera/agents/hej.toml +0 -6
- package/bundle/skills/agentera/agents/inspektera.toml +0 -6
- package/bundle/skills/agentera/agents/inspirera.toml +0 -6
- package/bundle/skills/agentera/agents/optimera.toml +0 -6
- package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
- package/bundle/skills/agentera/agents/planera.toml +0 -6
- package/bundle/skills/agentera/agents/profilera.toml +0 -6
- package/bundle/skills/agentera/agents/realisera.toml +0 -6
- package/bundle/skills/agentera/agents/resonera.toml +0 -6
- package/bundle/skills/agentera/agents/visionera.toml +0 -6
- package/bundle/skills/agentera/agents/visualisera.toml +0 -6
- package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
- package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
- package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
- package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
- package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
- package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
- package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
- package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
- package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
- package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
- package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
- package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
- package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
- package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
- package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
- package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
- package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
- package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
- package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
- package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
- package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
- package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
- package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
- package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
- package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
- package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
- package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
- package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
- package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
- package/bundle/skills/agentera/references/contract.md +0 -1039
- package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
- package/bundle/skills/hej/SKILL.md +0 -69
- package/bundle/skills/hej/agents/hej.toml +0 -11
- package/bundle/skills/hej/agents/openai.yaml +0 -8
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/cli/appContext.js.map +0 -1
- package/dist/cli/argvalidate.js.map +0 -1
- package/dist/cli/capabilityContext.js.map +0 -1
- package/dist/cli/commands/backfill.js +0 -84
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/cli/commands/capability.js.map +0 -1
- package/dist/cli/commands/compact.js.map +0 -1
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state.js +0 -1012
- package/dist/cli/commands/state.js.map +0 -1
- package/dist/cli/commands/upgrade.js.map +0 -1
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/commands/verify.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/git.js +0 -43
- package/dist/core/git.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/toml.js.map +0 -1
- package/dist/core/yaml.js.map +0 -1
- package/dist/eval/evalSkills.js.map +0 -1
- package/dist/eval/semanticEval.js.map +0 -1
- package/dist/eval/semanticFixtures.js.map +0 -1
- package/dist/hooks/common.js.map +0 -1
- package/dist/hooks/compaction.js +0 -935
- package/dist/hooks/compaction.js.map +0 -1
- package/dist/hooks/cursorPreToolUse.js +0 -19
- package/dist/hooks/cursorPreToolUse.js.map +0 -1
- package/dist/hooks/cursorSessionStart.js +0 -71
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -209
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -212
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact.js +0 -933
- package/dist/hooks/validateArtifact.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/capabilityContract.js.map +0 -1
- package/dist/registries/packageRegistry.js.map +0 -1
- package/dist/registries/runtimeAdapterRegistry.js +0 -315
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/setup/codex.js +0 -1056
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -127
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/doctor.js +0 -1297
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/progressCommit.js +0 -289
- package/dist/state/progressCommit.js.map +0 -1
- package/dist/state/startupAnalysis.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
- package/dist/upgrade/versionResolution.js.map +0 -1
- package/dist/validate/appHomeContract.js.map +0 -1
- package/dist/validate/capability.js.map +0 -1
- package/dist/validate/crossCapability.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -772
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
|
@@ -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
|