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
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* the dispatch entry all import the public classes from this barrel
|
|
5
|
-
* to keep import paths stable as the file is split across the
|
|
6
|
-
* per-responsibility submodules.
|
|
2
|
+
* Artifact validation used by the explicit `agentera check validate artifact`
|
|
3
|
+
* command and state publication.
|
|
7
4
|
*/
|
|
8
5
|
import fs from "node:fs";
|
|
9
6
|
import path from "node:path";
|
|
@@ -11,10 +8,8 @@ import { loadYamlMapping } from "../../core/yaml.js";
|
|
|
11
8
|
import { resolvePath } from "../../core/paths.js";
|
|
12
9
|
import { normalizeArtifactProtocolId } from "../../registries/artifactProtocolIds.js";
|
|
13
10
|
import { DEFAULT_ARTIFACT_PATHS } from "../common.js";
|
|
14
|
-
import { ArtifactWrite, RuntimeEventParser } from "./runtime.js";
|
|
15
|
-
import { isMapping } from "./schema.js";
|
|
16
11
|
import { validateMd } from "./markdown.js";
|
|
17
|
-
import {
|
|
12
|
+
import { defaultArtifactPath, readIfNeeded, } from "./traversal.js";
|
|
18
13
|
import { schemasDirDefault, validateYamlContent } from "./violations.js";
|
|
19
14
|
import { AGENT_FACING_ARTIFACT_IDS, HUMAN_FACING_ARTIFACT_IDS } from "./agentFacing.js";
|
|
20
15
|
export class ArtifactSchemaValidator {
|
|
@@ -28,6 +23,7 @@ export class ArtifactSchemaValidator {
|
|
|
28
23
|
if (!this.schemaCache.has(name)) {
|
|
29
24
|
const p = path.join(this.schemasDir, `${name}.yaml`);
|
|
30
25
|
if (fs.existsSync(p) && fs.statSync(p).isFile()) {
|
|
26
|
+
// cast: artifact schema parsed from a YAML schema file
|
|
31
27
|
this.schemaCache.set(name, loadYamlMapping(fs.readFileSync(p, "utf8")));
|
|
32
28
|
}
|
|
33
29
|
else {
|
|
@@ -42,37 +38,6 @@ export class ArtifactSchemaValidator {
|
|
|
42
38
|
validateMarkdown(content, name, schema = null) {
|
|
43
39
|
return validateMd(content, name, schema);
|
|
44
40
|
}
|
|
45
|
-
validateWrite(write, cwd) {
|
|
46
|
-
const absPath = path.isAbsolute(write.file_path) ? write.file_path : path.join(cwd, write.file_path);
|
|
47
|
-
const rel = path.relative(cwd, absPath).replace(/\\/g, "/");
|
|
48
|
-
const basename = path.basename(absPath);
|
|
49
|
-
const artifact = artifactForWrite(absPath, rel, basename, cwd);
|
|
50
|
-
if (artifact && AGENT_FACING_ARTIFACT_IDS.has(artifact)) {
|
|
51
|
-
const schema = this.loadSchema(artifact);
|
|
52
|
-
if (schema === null)
|
|
53
|
-
return [];
|
|
54
|
-
if (Object.keys(schema).length === 0)
|
|
55
|
-
return [`${artifact}: schema file is empty or contains no valid definitions`];
|
|
56
|
-
const content = readIfNeeded(write.content, absPath);
|
|
57
|
-
if (content === null)
|
|
58
|
-
return [];
|
|
59
|
-
let violations = this.validateYaml(content, schema, artifact);
|
|
60
|
-
if (violations.length > 0)
|
|
61
|
-
return violations;
|
|
62
|
-
return compactAfterValidWrite(artifact, absPath);
|
|
63
|
-
}
|
|
64
|
-
if (artifact && HUMAN_FACING_ARTIFACT_IDS.has(artifact)) {
|
|
65
|
-
const content = readIfNeeded(write.content, absPath);
|
|
66
|
-
if (content === null)
|
|
67
|
-
return [];
|
|
68
|
-
const schema = this.loadSchema(artifact);
|
|
69
|
-
const violations = this.validateMarkdown(content, artifact, schema);
|
|
70
|
-
if (violations.length > 0)
|
|
71
|
-
return violations;
|
|
72
|
-
return compactAfterValidWrite(artifact, absPath);
|
|
73
|
-
}
|
|
74
|
-
return [];
|
|
75
|
-
}
|
|
76
41
|
validateExplicit(artifact, filePath, cwd) {
|
|
77
42
|
const content = readIfNeeded(null, filePath);
|
|
78
43
|
if (content === null)
|
|
@@ -102,32 +67,11 @@ export class ArtifactSchemaValidator {
|
|
|
102
67
|
export function loadSchema(name) {
|
|
103
68
|
return new ArtifactSchemaValidator().loadSchema(name);
|
|
104
69
|
}
|
|
105
|
-
export class
|
|
106
|
-
parser;
|
|
70
|
+
export class ArtifactValidationAdapter {
|
|
107
71
|
validator;
|
|
108
|
-
constructor(
|
|
109
|
-
this.parser = parser ?? new RuntimeEventParser();
|
|
72
|
+
constructor(validator) {
|
|
110
73
|
this.validator = validator ?? new ArtifactSchemaValidator();
|
|
111
74
|
}
|
|
112
|
-
run(raw, defaultCwd = null) {
|
|
113
|
-
let data;
|
|
114
|
-
try {
|
|
115
|
-
if (!raw.trim())
|
|
116
|
-
return [0, []];
|
|
117
|
-
data = JSON.parse(raw);
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
return [0, []];
|
|
121
|
-
}
|
|
122
|
-
if (!isMapping(data))
|
|
123
|
-
return [0, []];
|
|
124
|
-
const write = this.parser.parse(data);
|
|
125
|
-
if (write === null)
|
|
126
|
-
return [0, []];
|
|
127
|
-
const cwd = data.cwd ?? defaultCwd ?? process.cwd();
|
|
128
|
-
const violations = this.validator.validateWrite(write, cwd);
|
|
129
|
-
return violations.length > 0 ? [2, violations] : [0, []];
|
|
130
|
-
}
|
|
131
75
|
runExplicit(artifact, filePath, cwd) {
|
|
132
76
|
artifact = artifact.trim();
|
|
133
77
|
const defaultPath = defaultArtifactPath(artifact, cwd);
|
|
@@ -145,5 +89,4 @@ export class HookCliAdapter {
|
|
|
145
89
|
return violations.length > 0 ? [2, payload] : [0, payload];
|
|
146
90
|
}
|
|
147
91
|
}
|
|
148
|
-
export {
|
|
149
|
-
//# sourceMappingURL=index.js.map
|
|
92
|
+
export { resolvePath };
|
|
@@ -4,7 +4,52 @@
|
|
|
4
4
|
* with required `field` entries and dispatches to the appropriate
|
|
5
5
|
* section check (ITEM, RELEASE, TOKEN).
|
|
6
6
|
*/
|
|
7
|
+
import { parseTodoMarkdownListItem } from "../../cli/todoMarkdown.js";
|
|
8
|
+
import { classifyTodoSectionHeading, countTodoResolvedSectionHeadings, isLegacyStrikethroughTodoLine, } from "../compaction/parse.js";
|
|
7
9
|
import { isMapping } from "./schema.js";
|
|
10
|
+
function validateTodoResolvedPlacement(content, name) {
|
|
11
|
+
const violations = [];
|
|
12
|
+
let section = "other";
|
|
13
|
+
for (const line of content.split(/\r\n|\r|\n/)) {
|
|
14
|
+
const kind = classifyTodoSectionHeading(line);
|
|
15
|
+
if (kind === "resolved") {
|
|
16
|
+
section = "resolved";
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (kind === "severity") {
|
|
20
|
+
section = "severity";
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (/^##\s/.test(line.trim())) {
|
|
24
|
+
section = "other";
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const trimmed = line.trim();
|
|
28
|
+
if (!trimmed.startsWith("-"))
|
|
29
|
+
continue;
|
|
30
|
+
const parsed = parseTodoMarkdownListItem(trimmed);
|
|
31
|
+
if (parsed?.status === "resolved") {
|
|
32
|
+
if (section === "severity") {
|
|
33
|
+
violations.push(`${name}: resolved checkbox item must live under '## ✓ Resolved', not in severity bands`);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (isLegacyStrikethroughTodoLine(trimmed)) {
|
|
38
|
+
violations.push(`${name}: legacy strikethrough resolved items are not allowed; use '- [x]' under '## ✓ Resolved'`);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Exactly one section keeps parsing and compaction unambiguous, including
|
|
43
|
+
// before the first item is resolved. See todo.yaml TC8.
|
|
44
|
+
const resolvedHeadingCount = countTodoResolvedSectionHeadings(content);
|
|
45
|
+
if (resolvedHeadingCount === 0) {
|
|
46
|
+
violations.push(`${name}: missing required '## ✓ Resolved' section`);
|
|
47
|
+
}
|
|
48
|
+
else if (resolvedHeadingCount > 1) {
|
|
49
|
+
violations.push(`${name}: ${resolvedHeadingCount} '## ✓ Resolved' sections found; merge into exactly one (duplicate sections hide entries from the compaction gate and parsing processes only the first).`);
|
|
50
|
+
}
|
|
51
|
+
return violations;
|
|
52
|
+
}
|
|
8
53
|
const SKIP_META = new Set(["meta", "GROUP_PREFIXES", "BUDGET", "COMPACTION", "VALIDATION", "CONVENTION"]);
|
|
9
54
|
export function validateMd(content, name, schema = null) {
|
|
10
55
|
const violations = [];
|
|
@@ -43,7 +88,6 @@ export function validateMdItems(content, name, violations) {
|
|
|
43
88
|
return;
|
|
44
89
|
}
|
|
45
90
|
const severityGlyphs = ["⇶", "⇉", "→", "⇢"];
|
|
46
|
-
const requiredItemGlyphs = new Set(["⇶"]);
|
|
47
91
|
let found = false;
|
|
48
92
|
for (const glyph of severityGlyphs) {
|
|
49
93
|
const g = glyph.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -60,15 +104,22 @@ export function validateMdItems(content, name, violations) {
|
|
|
60
104
|
bodyStart += 1;
|
|
61
105
|
const sectionEnd = nextMatch ? idx + nextMatch.index : content.length;
|
|
62
106
|
const sectionBody = content.slice(bodyStart, sectionEnd);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
107
|
+
const headingSlice = content.slice(sectionStart.index, sectionStart.index + sectionStart[0].length);
|
|
108
|
+
const glyphNameMatch = new RegExp(`^##\\s*(${g}.+)$`, "m").exec(headingSlice);
|
|
109
|
+
const headingText = glyphNameMatch ? glyphNameMatch[1] : glyph;
|
|
110
|
+
const gluedNextSection = nextMatch?.index === 0;
|
|
111
|
+
if (gluedNextSection || /^\s*##\s/m.test(sectionBody)) {
|
|
112
|
+
violations.push(`${name}: severity section '${headingText}' body contains a nested heading; add a blank line before the next '##' section`);
|
|
113
|
+
}
|
|
114
|
+
if (glyph === "⇶" && /^\s*-\s+\[x\]/im.test(sectionBody)) {
|
|
115
|
+
violations.push(`${name}: severity section '⇶ Critical' must not contain resolved '- [x]' items; move them to '## ✓ Resolved'`);
|
|
68
116
|
}
|
|
69
117
|
}
|
|
70
118
|
}
|
|
71
119
|
}
|
|
120
|
+
if (name === "TODO.md" || name === "todo") {
|
|
121
|
+
violations.push(...validateTodoResolvedPlacement(content, name));
|
|
122
|
+
}
|
|
72
123
|
if (!found) {
|
|
73
124
|
violations.push(`${name}: missing severity glyph in section headings (expected '## ⇶ Critical', '## ⇉ Degraded', '## → Normal', '## ⇢ Annoying')`);
|
|
74
125
|
}
|
|
@@ -92,4 +143,3 @@ export function validateMdTokens(content, name, violations) {
|
|
|
92
143
|
violations.push(`${name}: missing YAML code block with token definitions (expected '\`\`\`yaml')`);
|
|
93
144
|
}
|
|
94
145
|
}
|
|
95
|
-
//# sourceMappingURL=markdown.js.map
|
|
@@ -28,18 +28,28 @@ export function pyTypeName(v) {
|
|
|
28
28
|
export function wordCount(text) {
|
|
29
29
|
return (text.match(/\S+/g) ?? []).length;
|
|
30
30
|
}
|
|
31
|
-
const SKIP_META = new Set([
|
|
31
|
+
const SKIP_META = new Set([
|
|
32
|
+
"meta",
|
|
33
|
+
"GROUP_PREFIXES",
|
|
34
|
+
"BUDGET",
|
|
35
|
+
"COMPACTION",
|
|
36
|
+
"VALIDATION",
|
|
37
|
+
"CONVENTION",
|
|
38
|
+
]);
|
|
32
39
|
const LIST_INDICATORS = new Set(["number", "entry", "summary"]);
|
|
33
40
|
const SEQUENCE_KEYS_BY_ARTIFACT = {
|
|
34
41
|
decisions: { DECISION: "decisions", ARCHIVE: "archive" },
|
|
35
42
|
docs: { MAPPING: "mapping", INDEX: "index", AUDIT_LOG: "audit_log" },
|
|
36
43
|
experiments: { EXPERIMENT: "experiments", ARCHIVE: "archive" },
|
|
37
|
-
|
|
44
|
+
health: { AUDIT: "audits", ARCHIVE: "archive" },
|
|
45
|
+
plan: { TASK: "tasks", UNKNOWN: "unknowns", REJECTED: "rejected" },
|
|
38
46
|
progress: { CYCLE: "cycles", ARCHIVE: "archive" },
|
|
39
47
|
session: { BOOKMARK: "bookmarks" },
|
|
40
48
|
vision: { PERSONA: "personas", PRINCIPLE: "principles" },
|
|
41
49
|
};
|
|
42
|
-
const NESTED_SEQUENCE_KEYS = [
|
|
50
|
+
const NESTED_SEQUENCE_KEYS = [
|
|
51
|
+
[["DECISION", "ALTERNATIVE"], "alternatives"],
|
|
52
|
+
];
|
|
43
53
|
const SEQUENCE_ORDER_BY_ARTIFACT = { "progress\0cycles": "descending" };
|
|
44
54
|
export function collectSingletonGroups(schema) {
|
|
45
55
|
const result = [];
|
|
@@ -48,7 +58,7 @@ export function collectSingletonGroups(schema) {
|
|
|
48
58
|
continue;
|
|
49
59
|
let isListOrSub = false;
|
|
50
60
|
for (const e of Object.values(gv)) {
|
|
51
|
-
if (isMapping(e) && (LIST_INDICATORS.has(e.field) || e.parent)) {
|
|
61
|
+
if (isMapping(e) && (LIST_INDICATORS.has(String(e.field)) || e.parent)) {
|
|
52
62
|
isListOrSub = true;
|
|
53
63
|
break;
|
|
54
64
|
}
|
|
@@ -58,7 +68,7 @@ export function collectSingletonGroups(schema) {
|
|
|
58
68
|
const fields = [];
|
|
59
69
|
for (const e of Object.values(gv)) {
|
|
60
70
|
if (isMapping(e) && e.required && "field" in e)
|
|
61
|
-
fields.push(e.field);
|
|
71
|
+
fields.push(String(e.field));
|
|
62
72
|
}
|
|
63
73
|
if (fields.length > 0)
|
|
64
74
|
result.push([gk, gk.toLowerCase(), fields]);
|
|
@@ -95,15 +105,19 @@ export function validateField(violations, name, scope, field, p) {
|
|
|
95
105
|
}
|
|
96
106
|
}
|
|
97
107
|
export function allowedValues(entry) {
|
|
108
|
+
// cast: schema `validation` rules parsed from a YAML artifact schema file
|
|
98
109
|
for (const rule of entry.validation ?? []) {
|
|
99
110
|
if (typeof rule === "string" && rule.startsWith("Must be one of: ")) {
|
|
100
|
-
return rule
|
|
111
|
+
return rule
|
|
112
|
+
.slice("Must be one of: ".length)
|
|
113
|
+
.split(",")
|
|
114
|
+
.map((v) => v.trim());
|
|
101
115
|
}
|
|
102
116
|
}
|
|
103
117
|
return [];
|
|
104
118
|
}
|
|
105
119
|
export function validateAllowedValue(violations, name, scope, entry, p) {
|
|
106
|
-
const field = entry.field;
|
|
120
|
+
const field = String(entry.field);
|
|
107
121
|
const allowed = allowedValues(entry);
|
|
108
122
|
if (!field || allowed.length === 0 || !(field in scope) || isEmptyRequired(scope[field]))
|
|
109
123
|
return;
|
|
@@ -113,7 +127,7 @@ export function validateAllowedValue(violations, name, scope, entry, p) {
|
|
|
113
127
|
}
|
|
114
128
|
}
|
|
115
129
|
export function validateFieldType(violations, name, scope, entry, p) {
|
|
116
|
-
const field = entry.field;
|
|
130
|
+
const field = String(entry.field);
|
|
117
131
|
if (!field || !(field in scope))
|
|
118
132
|
return true;
|
|
119
133
|
const value = scope[field];
|
|
@@ -146,6 +160,12 @@ export function validateFieldType(violations, name, scope, entry, p) {
|
|
|
146
160
|
isValid = false;
|
|
147
161
|
}
|
|
148
162
|
}
|
|
163
|
+
else if (expectedType === "list[integer|string]") {
|
|
164
|
+
if (!Array.isArray(value) || !value.every((x) => typeof x === "string" || (typeof x === "number" && Number.isInteger(x)))) {
|
|
165
|
+
violations.push(`${name}: '${fullPath}' must be a list of integers or strings`);
|
|
166
|
+
isValid = false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
149
169
|
else if (expectedType === "list[map]") {
|
|
150
170
|
if (!Array.isArray(value) || !value.every((x) => isMapping(x))) {
|
|
151
171
|
violations.push(`${name}: '${fullPath}' must be a list of mappings`);
|
|
@@ -155,15 +175,18 @@ export function validateFieldType(violations, name, scope, entry, p) {
|
|
|
155
175
|
return isValid;
|
|
156
176
|
}
|
|
157
177
|
export function validateFieldConstraints(violations, name, scope, entry, p) {
|
|
158
|
-
const field = entry.field;
|
|
178
|
+
const field = String(entry.field);
|
|
159
179
|
if (!field || !(field in scope))
|
|
160
180
|
return;
|
|
161
181
|
const value = scope[field];
|
|
182
|
+
// cast: schema `validation` rules parsed from a YAML artifact schema file
|
|
162
183
|
for (const rule of entry.validation ?? []) {
|
|
163
184
|
if (typeof rule !== "string")
|
|
164
185
|
continue;
|
|
165
186
|
if (rule === "Must be a positive integer") {
|
|
166
|
-
if (typeof value === "boolean" ||
|
|
187
|
+
if (typeof value === "boolean" ||
|
|
188
|
+
!(typeof value === "number" && Number.isInteger(value)) ||
|
|
189
|
+
value <= 0) {
|
|
167
190
|
const fullPath = p ? `${p}.${field}` : field;
|
|
168
191
|
violations.push(`${name}: '${fullPath}' must be a positive integer`);
|
|
169
192
|
}
|
|
@@ -172,7 +195,7 @@ export function validateFieldConstraints(violations, name, scope, entry, p) {
|
|
|
172
195
|
}
|
|
173
196
|
export function validateRequiredFields(violations, name, schema, group, scope, p) {
|
|
174
197
|
for (const entry of iterGroupEntries(schema, group)) {
|
|
175
|
-
const field = entry.field;
|
|
198
|
+
const field = String(entry.field);
|
|
176
199
|
if (entry.parent || field === "entry")
|
|
177
200
|
continue;
|
|
178
201
|
if (entry.required)
|
|
@@ -185,9 +208,10 @@ export function validateRequiredFields(violations, name, schema, group, scope, p
|
|
|
185
208
|
}
|
|
186
209
|
const value = scope[field];
|
|
187
210
|
if (isMapping(value)) {
|
|
211
|
+
// cast: schema `children` list parsed from a YAML artifact schema file
|
|
188
212
|
for (const child of entry.children ?? []) {
|
|
189
213
|
if (isMapping(child) && child.field) {
|
|
190
|
-
const childField = child.field;
|
|
214
|
+
const childField = String(child.field);
|
|
191
215
|
const childPath = p ? `${p}.${field}` : field;
|
|
192
216
|
if (child.required)
|
|
193
217
|
validateField(violations, name, value, childField, childPath);
|
|
@@ -204,7 +228,7 @@ export function validateRequiredFields(violations, name, schema, group, scope, p
|
|
|
204
228
|
}
|
|
205
229
|
export function validateSingletonGroup(violations, name, schema, group, scope, p) {
|
|
206
230
|
for (const entry of iterGroupEntries(schema, group)) {
|
|
207
|
-
const field = entry.field;
|
|
231
|
+
const field = String(entry.field);
|
|
208
232
|
if (entry.parent || field === "entry")
|
|
209
233
|
continue;
|
|
210
234
|
if (entry.required)
|
|
@@ -221,7 +245,7 @@ export function schemaFieldNames(schema, group) {
|
|
|
221
245
|
const out = new Set();
|
|
222
246
|
for (const entry of iterGroupEntries(schema, group)) {
|
|
223
247
|
if (entry.field && !entry.parent && entry.field !== "entry")
|
|
224
|
-
out.add(entry.field);
|
|
248
|
+
out.add(String(entry.field));
|
|
225
249
|
}
|
|
226
250
|
return out;
|
|
227
251
|
}
|
|
@@ -257,6 +281,10 @@ export function validateFullPlanContract(data, violations) {
|
|
|
257
281
|
validateField(violations, "plan", header, field, "header");
|
|
258
282
|
}
|
|
259
283
|
validateField(violations, "plan", data, "design", "");
|
|
284
|
+
const unknowns = data.unknowns;
|
|
285
|
+
if (!Array.isArray(unknowns) || unknowns.length === 0) {
|
|
286
|
+
violations.push("plan: full plans require at least one 'unknowns' entry");
|
|
287
|
+
}
|
|
260
288
|
const criticIssues = header.critic_issues;
|
|
261
289
|
if (!isEmptyRequired(criticIssues)) {
|
|
262
290
|
const match = /^\s*(\d+)\s+found,\s*(\d+)\s+addressed,\s*(\d+)\s+dismissed\s*$/.exec(String(criticIssues));
|
|
@@ -301,7 +329,9 @@ export function parentRequirements(schema, parentGroup) {
|
|
|
301
329
|
entry.required &&
|
|
302
330
|
entry.field) {
|
|
303
331
|
const parentField = parent.slice(prefix.length);
|
|
304
|
-
|
|
332
|
+
const fields = requirements[parentField] ?? [];
|
|
333
|
+
fields.push(String(entry.field));
|
|
334
|
+
requirements[parentField] = fields;
|
|
305
335
|
}
|
|
306
336
|
}
|
|
307
337
|
}
|
|
@@ -312,7 +342,7 @@ export function entryRequirements(schema, group) {
|
|
|
312
342
|
const out = [];
|
|
313
343
|
for (const entry of iterGroupEntries(schema, group)) {
|
|
314
344
|
if (entry.parent === parent && entry.required && entry.field)
|
|
315
|
-
out.push(entry.field);
|
|
345
|
+
out.push(String(entry.field));
|
|
316
346
|
}
|
|
317
347
|
return out;
|
|
318
348
|
}
|
|
@@ -332,6 +362,8 @@ export function validateSequences(data, schema, name, violations) {
|
|
|
332
362
|
const childRequirements = parentRequirements(schema, group);
|
|
333
363
|
seq.forEach((item, index) => {
|
|
334
364
|
const p = `${key}[${index}]`;
|
|
365
|
+
if (name === "health" && group === "ARCHIVE" && typeof item === "string")
|
|
366
|
+
return;
|
|
335
367
|
if (!isMapping(item)) {
|
|
336
368
|
violations.push(`${name}: '${p}' must be a mapping`);
|
|
337
369
|
return;
|
|
@@ -370,8 +402,62 @@ export function validateSequences(data, schema, name, violations) {
|
|
|
370
402
|
});
|
|
371
403
|
}
|
|
372
404
|
}
|
|
405
|
+
export function validatePlanDependencies(data, violations) {
|
|
406
|
+
if (!Array.isArray(data.tasks))
|
|
407
|
+
return;
|
|
408
|
+
const tasks = data.tasks.filter((task) => isMapping(task));
|
|
409
|
+
const byRef = new Map();
|
|
410
|
+
tasks.forEach((task, index) => {
|
|
411
|
+
if (task.number !== null && task.number !== undefined)
|
|
412
|
+
byRef.set(String(task.number), index);
|
|
413
|
+
const name = String(task.name ?? "").trim();
|
|
414
|
+
if (name && !byRef.has(name))
|
|
415
|
+
byRef.set(name, index);
|
|
416
|
+
});
|
|
417
|
+
const edges = tasks.map(() => []);
|
|
418
|
+
tasks.forEach((task, index) => {
|
|
419
|
+
if (!Array.isArray(task.depends_on))
|
|
420
|
+
return;
|
|
421
|
+
for (const dependency of task.depends_on) {
|
|
422
|
+
const dependencyRef = String(dependency);
|
|
423
|
+
const target = byRef.get(dependencyRef);
|
|
424
|
+
if (target === undefined) {
|
|
425
|
+
violations.push(`plan: 'tasks[${index}].depends_on' references unknown task '${dependencyRef}' (PV4)`);
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
edges[index].push(target);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
const state = tasks.map(() => 0);
|
|
433
|
+
const stack = [];
|
|
434
|
+
const visit = (index) => {
|
|
435
|
+
state[index] = 1;
|
|
436
|
+
stack.push(index);
|
|
437
|
+
for (const target of edges[index]) {
|
|
438
|
+
if (state[target] === 0 && visit(target))
|
|
439
|
+
return true;
|
|
440
|
+
if (state[target] === 1) {
|
|
441
|
+
const cycleStart = stack.indexOf(target);
|
|
442
|
+
const cycle = [...stack.slice(cycleStart), target]
|
|
443
|
+
.map((taskIndex) => String(tasks[taskIndex]?.number ?? taskIndex + 1))
|
|
444
|
+
.join(" -> ");
|
|
445
|
+
violations.push(`plan: circular dependency chain ${cycle} (PV4)`);
|
|
446
|
+
return true;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
stack.pop();
|
|
450
|
+
state[index] = 2;
|
|
451
|
+
return false;
|
|
452
|
+
};
|
|
453
|
+
for (let index = 0; index < tasks.length; index += 1) {
|
|
454
|
+
if (state[index] === 0 && visit(index))
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
373
458
|
export function validateDecisionAlternatives(data, name) {
|
|
374
459
|
const violations = [];
|
|
460
|
+
// cast: `decisions` read from a parsed YAML artifact mapping
|
|
375
461
|
(data.decisions ?? []).forEach((decision, index) => {
|
|
376
462
|
if (!isMapping(decision))
|
|
377
463
|
return;
|
|
@@ -389,8 +475,14 @@ export function validateDecisionSatisfaction(data, name) {
|
|
|
389
475
|
const violations = [];
|
|
390
476
|
const allowedStates = new Set(["open", "provisionally_satisfied", "user_confirmed_satisfied"]);
|
|
391
477
|
const entries = [
|
|
392
|
-
...(data.decisions ?? []).map((d, i) => [
|
|
393
|
-
|
|
478
|
+
...(data.decisions ?? []).map((d, i) => [
|
|
479
|
+
`decisions[${i}]`,
|
|
480
|
+
d,
|
|
481
|
+
]),
|
|
482
|
+
...(data.archive ?? []).map((d, i) => [
|
|
483
|
+
`archive[${i}]`,
|
|
484
|
+
d,
|
|
485
|
+
]),
|
|
394
486
|
];
|
|
395
487
|
for (const [entryPath, decision] of entries) {
|
|
396
488
|
if (!isMapping(decision) || !("satisfaction" in decision))
|
|
@@ -452,4 +544,3 @@ export function sequenceInOrder(nums, direction) {
|
|
|
452
544
|
const sorted = [...nums].sort((a, b) => (reverse ? b - a : a - b));
|
|
453
545
|
return nums.length === sorted.length && nums.every((n, i) => n === sorted[i]);
|
|
454
546
|
}
|
|
455
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -12,17 +12,19 @@ import { loadYamlMapping } from "../../core/yaml.js";
|
|
|
12
12
|
import { ARTIFACT_PROTOCOL_PATHS, HUMAN_FACING_ARTIFACT_IDS, normalizeArtifactProtocolId, } from "../../registries/artifactProtocolIds.js";
|
|
13
13
|
import { DEFAULT_ARTIFACT_PATHS } from "../common.js";
|
|
14
14
|
import { COMPACTABLE_YAML_ARTIFACTS, compactFile, compactYamlFile } from "../compaction/index.js";
|
|
15
|
+
import { withStateMutation } from "../../state/write/mutation.js";
|
|
15
16
|
import { isMapping } from "./schema.js";
|
|
16
17
|
const AGENT_YAML_RE = /\.agentera\/([a-z_]+)\.yaml$/;
|
|
17
18
|
function resolvePathRel(fp, cwd) {
|
|
18
19
|
return path.isAbsolute(fp) ? fp : path.join(cwd, fp);
|
|
19
20
|
}
|
|
20
21
|
function docsPathOverrides(cwd) {
|
|
21
|
-
const docsPath = path.join(cwd,
|
|
22
|
+
const docsPath = path.join(cwd, ARTIFACT_PROTOCOL_PATHS.docs);
|
|
22
23
|
if (!fs.existsSync(docsPath) || !fs.statSync(docsPath).isFile())
|
|
23
24
|
return {};
|
|
24
25
|
let data;
|
|
25
26
|
try {
|
|
27
|
+
// cast: docs.yaml path-override mapping parsed from a YAML file
|
|
26
28
|
data = loadYamlMapping(fs.readFileSync(docsPath, "utf8"));
|
|
27
29
|
}
|
|
28
30
|
catch (exc) {
|
|
@@ -82,19 +84,20 @@ function readIfNeeded(content, absPath) {
|
|
|
82
84
|
return null;
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
|
-
function compactAfterValidWrite(artifact, absPath) {
|
|
87
|
+
function compactAfterValidWrite(artifact, absPath, projectRoot) {
|
|
86
88
|
if (!fs.existsSync(absPath))
|
|
87
89
|
return [];
|
|
88
90
|
try {
|
|
89
|
-
if (artifact
|
|
90
|
-
compactFile(absPath, "todo-resolved");
|
|
91
|
-
}
|
|
92
|
-
else if (artifact in COMPACTABLE_YAML_ARTIFACTS) {
|
|
93
|
-
compactYamlFile(absPath, artifact);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
91
|
+
if (artifact !== "todo" && !(artifact in COMPACTABLE_YAML_ARTIFACTS))
|
|
96
92
|
return [];
|
|
97
|
-
|
|
93
|
+
withStateMutation(projectRoot, (transaction) => {
|
|
94
|
+
if (artifact === "todo") {
|
|
95
|
+
transaction.mutateProjection(absPath, (stage) => compactFile(stage, "todo-resolved"));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
transaction.mutateProjection(absPath, (stage) => compactYamlFile(stage, artifact, projectRoot));
|
|
99
|
+
}
|
|
100
|
+
});
|
|
98
101
|
}
|
|
99
102
|
catch (exc) {
|
|
100
103
|
return [`${artifact}: compaction failed: ${exc.message}`];
|
|
@@ -102,4 +105,3 @@ function compactAfterValidWrite(artifact, absPath) {
|
|
|
102
105
|
return [];
|
|
103
106
|
}
|
|
104
107
|
export { readIfNeeded, compactAfterValidWrite };
|
|
105
|
-
//# sourceMappingURL=traversal.js.map
|
|
@@ -10,7 +10,7 @@ import path from "node:path";
|
|
|
10
10
|
import { parseYaml } from "../../core/yaml.js";
|
|
11
11
|
import { resolveSourceRoot } from "../../core/sourceRoot.js";
|
|
12
12
|
import { loadYamlMapping } from "../../core/yaml.js";
|
|
13
|
-
import { expectedSequenceOrder, isMapping, sequenceInOrder, validationRuleSeverity, validateDecisionAlternatives, validateDecisionSatisfaction, validateFullPlanContract, validatePlanKnownFields, validateSequences, validateSingletonGroup, collectSingletonGroups, wordCount, } from "./schema.js";
|
|
13
|
+
import { expectedSequenceOrder, isMapping, sequenceInOrder, validationRuleSeverity, validateDecisionAlternatives, validateDecisionSatisfaction, validateFullPlanContract, validatePlanDependencies, validatePlanKnownFields, validateSequences, validateSingletonGroup, collectSingletonGroups, wordCount, } from "./schema.js";
|
|
14
14
|
function schemasDirDefault() {
|
|
15
15
|
return path.join(resolveSourceRoot(), "skills", "agentera", "schemas", "artifacts");
|
|
16
16
|
}
|
|
@@ -42,6 +42,7 @@ export function validateYamlContent(content, schema, name) {
|
|
|
42
42
|
if (name === "plan") {
|
|
43
43
|
validatePlanKnownFields(data, schema, violations);
|
|
44
44
|
validateFullPlanContract(data, violations);
|
|
45
|
+
validatePlanDependencies(data, violations);
|
|
45
46
|
}
|
|
46
47
|
validateSequences(data, schema, name, violations);
|
|
47
48
|
if (name === "decisions") {
|
|
@@ -56,7 +57,7 @@ export function validateYamlContent(content, schema, name) {
|
|
|
56
57
|
const scope = be.scope ?? "";
|
|
57
58
|
if (mw && String(scope).includes("full_file") && wordBudgetSeverity === "error") {
|
|
58
59
|
const wc = wordCount(content);
|
|
59
|
-
if (wc > mw)
|
|
60
|
+
if (wc > Number(mw))
|
|
60
61
|
violations.push(`${name}: word count (${wc}) exceeds budget (${mw})`);
|
|
61
62
|
}
|
|
62
63
|
}
|
|
@@ -64,13 +65,15 @@ export function validateYamlContent(content, schema, name) {
|
|
|
64
65
|
for (const ve of Object.values(schema[groupKey] ?? {})) {
|
|
65
66
|
if (!isMapping(ve))
|
|
66
67
|
continue;
|
|
67
|
-
const rule = ve.rule ?? "";
|
|
68
|
+
const rule = String(ve.rule ?? "");
|
|
68
69
|
if (ve.severity !== "error")
|
|
69
70
|
continue;
|
|
70
71
|
if (rule.includes("unique") && rule.includes("number")) {
|
|
71
72
|
for (const [key, val] of Object.entries(data)) {
|
|
72
73
|
if (Array.isArray(val)) {
|
|
73
|
-
const nums = val
|
|
74
|
+
const nums = val
|
|
75
|
+
.filter((e) => isMapping(e) && "number" in e)
|
|
76
|
+
.map((e) => e.number);
|
|
74
77
|
if (nums.length > 0) {
|
|
75
78
|
if (nums.length !== new Set(nums).size) {
|
|
76
79
|
violations.push(`${name}: duplicate numbers in '${key}'`);
|
|
@@ -102,4 +105,3 @@ export function validateYamlContent(content, schema, name) {
|
|
|
102
105
|
return violations;
|
|
103
106
|
}
|
|
104
107
|
export { loadYamlMapping, schemasDirDefault };
|
|
105
|
-
//# sourceMappingURL=violations.js.map
|