agentera 3.0.0-dev.8 → 3.0.0-dev.81
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 +252 -22
- package/bundle/.agentera-build-source.json +8 -0
- package/bundle/CHANGELOG.md +1389 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +142 -0
- package/bundle/UPGRADE.md +275 -0
- package/bundle/extract-corpus-parity.json +2 -4
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +484 -0
- package/bundle/references/adapters/package-registry.yaml +443 -188
- package/bundle/references/adapters/package-surface-characterization.md +68 -34
- package/bundle/references/adapters/product-v1-reset.yaml +101 -0
- 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 +357 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +559 -0
- package/bundle/references/analysis/personal-glossary-evaluation-authority.yaml +175 -0
- package/bundle/references/analysis/personal-glossary-evaluation-corpus.yaml +291 -0
- package/bundle/references/analysis/personal-glossary-holdout.yaml +192 -0
- package/bundle/references/analysis/verification-policy.yaml +262 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
- package/bundle/references/artifacts/glossary-entry-contract.yaml +2906 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +3075 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
- 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 +152 -93
- package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
- package/bundle/references/cli/update-channels.yaml +7 -5
- package/bundle/references/cli/vocabulary-index.yaml +7 -9
- package/bundle/references/cli/vocabulary.md +54 -97
- package/bundle/references/meta/retained-reference-authority.yaml +171 -0
- package/bundle/skills/agentera/SKILL.md +183 -63
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
- package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
- package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
- package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
- package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
- package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
- package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
- package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
- package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
- package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
- package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
- package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +13 -4
- package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +8 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +67 -3
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
- package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
- package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
- package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
- package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
- package/bundle/skills/agentera/protocol.yaml +4 -4
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +29 -30
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -43
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -34
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +53 -51
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -35
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +453 -55
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -39
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +305 -7
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +0 -19
- package/dist/.agentera-build-source.json +8 -0
- package/dist/analytics/extractCorpus/cli.js +52 -11
- package/dist/analytics/extractCorpus/copilotSessions.js +19 -8
- package/dist/analytics/extractCorpus/core.js +262 -14
- package/dist/analytics/extractCorpus/corpus.js +57 -18
- package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
- package/dist/analytics/extractCorpus/cursorSessions.js +28 -8
- package/dist/analytics/extractCorpus/evidenceTiers.js +709 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
- package/dist/analytics/extractCorpus/filesystemSources.js +5 -5
- package/dist/analytics/extractCorpus/index.js +4 -2
- package/dist/analytics/extractCorpus/jsonlSessions.js +76 -8
- package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js +12 -4
- 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 +113 -0
- package/dist/analytics/personalGlossaryCandidateProjection.js +788 -0
- package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -0
- package/dist/analytics/personalGlossaryCandidateProjectionModel.js +1 -0
- package/dist/analytics/personalGlossaryCandidateReadView.js +23 -0
- package/dist/analytics/personalGlossaryCurrentGeneration.js +25 -0
- package/dist/analytics/personalGlossaryDecision.js +203 -0
- package/dist/analytics/personalGlossaryExplicit.js +788 -0
- package/dist/analytics/personalGlossaryExplicitMining.js +285 -0
- package/dist/analytics/personalGlossaryExplicitScope.js +41 -0
- package/dist/analytics/personalGlossaryExplicitSegments.js +418 -0
- package/dist/analytics/personalGlossaryExplicitTypes.js +26 -0
- package/dist/analytics/personalGlossaryLexicalClassifier.js +175 -0
- package/dist/analytics/personalGlossaryProfile.js +229 -0
- package/dist/analytics/personalGlossaryRecurrence.js +618 -0
- package/dist/analytics/personalGlossaryRefreshProjection.js +351 -0
- package/dist/analytics/personalGlossaryReviewRecordStorage.js +428 -0
- package/dist/analytics/personalGlossaryReviewRecords.js +332 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +150 -23
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -6
- package/dist/capabilities/build/instructions.js +59 -6
- package/dist/capabilities/design/instructions.js +3 -4
- package/dist/capabilities/discuss/instructions.js +29 -6
- package/dist/capabilities/document/instructions.js +11 -6
- package/dist/capabilities/index.js +20 -14
- package/dist/capabilities/optimize/instructions.js +14 -6
- package/dist/capabilities/orchestrate/instructions.js +42 -6
- package/dist/capabilities/plan/instructions.js +30 -3
- package/dist/capabilities/profile/instructions.js +104 -5
- package/dist/capabilities/research/instructions.js +4 -5
- package/dist/capabilities/status/instructions.js +15 -6
- package/dist/capabilities/status/startupInstructions.js +34 -0
- package/dist/capabilities/vision/instructions.js +3 -5
- package/dist/cli/appContext.js +14 -7
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +5 -4
- package/dist/cli/capabilityContext/bespoke.js +14 -6
- package/dist/cli/capabilityContext/build.js +116 -42
- package/dist/cli/capabilityContext/closeout.js +30 -27
- package/dist/cli/capabilityContext/contract.js +18 -27
- package/dist/cli/capabilityContext/evidence.js +84 -77
- package/dist/cli/capabilityContext/index.js +0 -1
- package/dist/cli/capabilityContext/orchestration.js +42 -18
- package/dist/cli/capabilityContext/planState.js +89 -96
- package/dist/cli/capabilityContext/progress.js +52 -12
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +9 -20
- package/dist/cli/capabilityContext/slim.js +52 -8
- package/dist/cli/capabilityContext/startup.js +51 -114
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +26 -10
- package/dist/cli/capabilityContext.js +0 -1
- package/dist/cli/commands/appHome.js +0 -1
- package/dist/cli/commands/capability.js +2 -2
- package/dist/cli/commands/compact.js +163 -13
- package/dist/cli/commands/doctor.js +162 -11
- 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/personalGlossaryCandidateReads.js +755 -0
- package/dist/cli/commands/personalGlossaryDecision.js +349 -0
- package/dist/cli/commands/personalGlossaryPublish.js +484 -0
- package/dist/cli/commands/personalGlossaryReviewRecordReads.js +209 -0
- package/dist/cli/commands/personalGlossaryReviewRecords.js +623 -0
- package/dist/cli/commands/prime/briefOrientation.js +845 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +54 -4
- package/dist/cli/commands/prime/collectEntityOrientation.js +338 -0
- package/dist/cli/commands/prime/collectOrientationState.js +124 -68
- package/dist/cli/commands/prime/orientationOutput.js +271 -59
- package/dist/cli/commands/prime/types.js +0 -1
- package/dist/cli/commands/prime.js +89 -11
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +74 -52
- package/dist/cli/commands/report.js +187 -27
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +436 -138
- package/dist/cli/commands/state/decisions.js +40 -56
- package/dist/cli/commands/state/docs.js +58 -85
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +11 -65
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +11 -113
- 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 -65
- package/dist/cli/commands/state/plan.js +11 -170
- 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 +28 -107
- package/dist/cli/commands/state/write.js +459 -0
- package/dist/cli/commands/upgrade.js +176 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +235 -136
- package/dist/cli/commands/verify.js +73 -16
- package/dist/cli/contracts/bundleStatus.js +0 -1
- package/dist/cli/contracts/orientationState.js +0 -1
- package/dist/cli/dispatch/argvParser.js +0 -1
- package/dist/cli/dispatch/check.js +84 -40
- package/dist/cli/dispatch/commands.js +3 -3
- package/dist/cli/dispatch/index.js +84 -52
- package/dist/cli/dispatch/lifecycle.js +182 -62
- package/dist/cli/dispatch/prime.js +37 -2
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +1 -2
- package/dist/cli/dispatch/state.js +62 -66
- package/dist/cli/dispatch.js +0 -1
- package/dist/cli/errors.js +16 -17
- package/dist/cli/help.js +419 -41
- package/dist/cli/migrationRequired.js +125 -0
- package/dist/cli/orientation/attention.js +19 -22
- package/dist/cli/orientation/corpusCoverage.js +32 -1
- package/dist/cli/orientation.js +346 -129
- 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/productV1Eol.js +55 -0
- package/dist/cli/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +11 -9
- package/dist/cli/stateQuery.js +47 -12
- 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 +0 -1
- package/dist/core/atomicWriter.js +23 -0
- package/dist/core/developmentChannel.js +1 -0
- package/dist/core/developmentInvocation.js +377 -0
- package/dist/core/difflib.js +0 -1
- package/dist/core/envPaths.js +0 -1
- package/dist/core/jsonValue.js +0 -1
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +0 -1
- package/dist/core/shell.js +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 +61 -2
- package/dist/eval/evalSkills.js +13 -14
- package/dist/eval/glossaryEvaluation.js +751 -0
- package/dist/eval/glossaryEvaluationProcess.js +29 -0
- package/dist/eval/glossaryEvaluationRunner.js +571 -0
- package/dist/eval/glossaryEvaluationSuccessReport.js +297 -0
- package/dist/eval/hybridRouteEvaluation.js +155 -0
- package/dist/eval/semanticEval.js +0 -1
- package/dist/eval/semanticFixtures.js +0 -1
- package/dist/hooks/common.js +3 -56
- package/dist/hooks/compaction/apply.js +224 -47
- package/dist/hooks/compaction/dryRun.js +2 -1
- package/dist/hooks/compaction/index.js +5 -6
- package/dist/hooks/compaction/parse.js +73 -6
- package/dist/hooks/compaction/retention.js +28 -25
- package/dist/hooks/compaction/status.js +145 -26
- package/dist/hooks/compaction/types.js +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js +0 -1
- package/dist/hooks/validateArtifact/index.js +6 -65
- package/dist/hooks/validateArtifact/markdown.js +9 -10
- package/dist/hooks/validateArtifact/schema.js +96 -9
- package/dist/hooks/validateArtifact/traversal.js +12 -11
- package/dist/hooks/validateArtifact/violations.js +5 -3
- package/dist/migrate/v2HandoffManifest.js +8 -3
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +145 -0
- package/dist/registries/artifactProtocolIds.js +2 -1
- package/dist/registries/artifactRegistry.js +207 -60
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +5 -21
- package/dist/registries/evaluatorHandoffContract.js +0 -1
- package/dist/registries/evidenceTierContract.js +375 -0
- package/dist/registries/explicitSegmentGrammarContract.js +619 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryCandidateContractPaths.js +6 -0
- package/dist/registries/glossaryCandidateContracts.js +820 -0
- package/dist/registries/glossaryCandidateDecisionAuthority.js +119 -0
- package/dist/registries/glossaryCandidateDecisionContract.js +62 -0
- package/dist/registries/glossaryCandidateProjectionAuthority.js +345 -0
- package/dist/registries/glossaryCandidateProjectionContract.js +108 -0
- package/dist/registries/glossaryCaveatContract.js +67 -0
- package/dist/registries/glossaryConsumerContractValidation.js +787 -0
- package/dist/registries/glossaryEntryContract.js +759 -0
- package/dist/registries/glossaryEntryTemporal.js +12 -0
- package/dist/registries/glossaryMiningAuthority.js +764 -0
- package/dist/registries/glossaryProfileFullContract.js +24 -0
- package/dist/registries/glossaryReviewRecordsAuthority.js +426 -0
- package/dist/registries/glossaryReviewRecordsContract.js +129 -0
- package/dist/registries/glossaryTermIdentity.js +139 -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 +184 -209
- package/dist/registries/personalGlossaryContracts.js +1 -0
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +7 -44
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +168 -11
- 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 +618 -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 +14 -75
- 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 +894 -0
- package/dist/state/entityWriterLock.js +18 -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 +15 -7
- 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 +70 -9
- package/dist/state/startupAnalysis/contract.js +44 -10
- package/dist/state/startupAnalysis/helpers.js +1 -2
- package/dist/state/startupAnalysis/index.js +0 -1
- package/dist/state/startupAnalysis/metrics.js +0 -1
- package/dist/state/startupAnalysis/records.js +0 -1
- package/dist/state/startupAnalysis/report.js +0 -1
- package/dist/state/startupAnalysis/threshold.js +13 -1
- 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/todoCreateBatch.js +69 -0
- package/dist/state/todoDocsEntities.js +1339 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +63 -0
- package/dist/state/todoReconciliationActivation.js +182 -0
- package/dist/state/todoReconciliationInspection.js +184 -0
- package/dist/state/todoReconciliationRepair.js +320 -0
- package/dist/state/todoReconciliationTransaction.js +628 -0
- package/dist/state/todoSeverityHeadings.js +71 -0
- package/dist/state/todoTransitionBatch.js +65 -0
- package/dist/state/todoUpdateBatch.js +50 -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 +380 -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 +77 -36
- package/dist/upgrade/appModel.js +0 -1
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +0 -1
- package/dist/upgrade/channels.js +6 -9
- package/dist/upgrade/compatibility.js +43 -17
- package/dist/upgrade/doctor.js +55 -32
- package/dist/upgrade/doctorClassifier.js +11 -1
- package/dist/upgrade/installedHooksRetirement.js +46 -40
- package/dist/upgrade/legacyAgentCleanup.js +133 -34
- package/dist/upgrade/lifecycleUpgrade.js +126 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +325 -82
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +0 -22
- package/dist/upgrade/npxPlatformStatus.js +2 -2
- package/dist/upgrade/productV1Reset.js +515 -0
- package/dist/upgrade/productV1ResetAuthority.js +139 -0
- package/dist/upgrade/projectIntegration.js +126 -134
- package/dist/upgrade/projectIntegrationDecision.js +21 -13
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +210 -430
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +257 -48
- package/dist/upgrade/v3CapabilitySurface.js +2 -3
- package/dist/upgrade/versionResolution.js +0 -1
- package/dist/validate/activationArtifactEvidence.js +866 -0
- package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +610 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +1 -7
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +11 -3
- package/dist/validate/crossCapability.js +14 -9
- package/dist/validate/glossaryVariantGuard.js +96 -0
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +39 -45
- package/dist/validate/vocabularyAuthority.js +8 -8
- package/package.json +39 -13
- package/bundle/references/adapters/cursor.md +0 -214
- 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 -554
- 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 -13
- package/bundle/references/cli/parity-expected-actual-template.md +0 -30
- 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 -45
- 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/audit.toml +0 -6
- package/bundle/skills/agentera/agents/build.toml +0 -6
- package/bundle/skills/agentera/agents/design.toml +0 -6
- package/bundle/skills/agentera/agents/discuss.toml +0 -6
- package/bundle/skills/agentera/agents/document.toml +0 -6
- package/bundle/skills/agentera/agents/optimize.toml +0 -6
- package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
- package/bundle/skills/agentera/agents/plan.toml +0 -6
- package/bundle/skills/agentera/agents/profile.toml +0 -6
- package/bundle/skills/agentera/agents/research.toml +0 -6
- package/bundle/skills/agentera/agents/status.toml +0 -6
- package/bundle/skills/agentera/agents/vision.toml +0 -6
- package/bundle/skills/agentera/references/contract.md +0 -1048
- package/dist/analytics/extractCorpus/cli.js.map +0 -1
- package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/core.js.map +0 -1
- package/dist/analytics/extractCorpus/corpus.js.map +0 -1
- package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
- package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
- package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
- package/dist/analytics/extractCorpus/index.js.map +0 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/capabilities/audit/instructions.js.map +0 -1
- package/dist/capabilities/build/instructions.js.map +0 -1
- package/dist/capabilities/design/instructions.js.map +0 -1
- package/dist/capabilities/discuss/instructions.js.map +0 -1
- package/dist/capabilities/document/instructions.js.map +0 -1
- package/dist/capabilities/index.js.map +0 -1
- package/dist/capabilities/optimize/instructions.js.map +0 -1
- package/dist/capabilities/orchestrate/instructions.js.map +0 -1
- package/dist/capabilities/plan/instructions.js.map +0 -1
- package/dist/capabilities/profile/instructions.js.map +0 -1
- package/dist/capabilities/research/instructions.js.map +0 -1
- package/dist/capabilities/status/instructions.js.map +0 -1
- package/dist/capabilities/vision/instructions.js.map +0 -1
- package/dist/cli/appContext.js.map +0 -1
- package/dist/cli/argvalidate.js.map +0 -1
- package/dist/cli/capabilityContext/benchmark.js.map +0 -1
- package/dist/cli/capabilityContext/bespoke.js.map +0 -1
- package/dist/cli/capabilityContext/build.js.map +0 -1
- package/dist/cli/capabilityContext/closeout.js.map +0 -1
- package/dist/cli/capabilityContext/contract.js.map +0 -1
- package/dist/cli/capabilityContext/evidence.js.map +0 -1
- package/dist/cli/capabilityContext/index.js.map +0 -1
- package/dist/cli/capabilityContext/orchestration.js.map +0 -1
- package/dist/cli/capabilityContext/planState.js.map +0 -1
- package/dist/cli/capabilityContext/progress.js.map +0 -1
- package/dist/cli/capabilityContext/shared.js.map +0 -1
- package/dist/cli/capabilityContext/slim.js.map +0 -1
- package/dist/cli/capabilityContext/startup.js.map +0 -1
- package/dist/cli/capabilityContext/types.js.map +0 -1
- package/dist/cli/capabilityContext.js.map +0 -1
- package/dist/cli/commands/appHome.js.map +0 -1
- package/dist/cli/commands/capability.js.map +0 -1
- package/dist/cli/commands/compact.js.map +0 -1
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
- package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
- package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
- package/dist/cli/commands/prime/types.js.map +0 -1
- package/dist/cli/commands/prime/v1Migration.js +0 -39
- package/dist/cli/commands/prime/v1Migration.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/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/contracts/bundleStatus.js.map +0 -1
- package/dist/cli/contracts/orientationState.js.map +0 -1
- package/dist/cli/dispatch/argvParser.js.map +0 -1
- package/dist/cli/dispatch/check.js.map +0 -1
- package/dist/cli/dispatch/commands.js.map +0 -1
- package/dist/cli/dispatch/index.js.map +0 -1
- package/dist/cli/dispatch/lifecycle.js.map +0 -1
- package/dist/cli/dispatch/prime.js.map +0 -1
- package/dist/cli/dispatch/shared.js.map +0 -1
- package/dist/cli/dispatch/state.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/orientation/attention.js.map +0 -1
- package/dist/cli/orientation/corpusCoverage.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/startupCompletenessContract.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/cli/todoMarkdown.js.map +0 -1
- package/dist/cli/todoSeverity.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/envPaths.js.map +0 -1
- package/dist/core/jsonValue.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/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/cursorPreToolUse.js +0 -19
- package/dist/hooks/cursorPreToolUse.js.map +0 -1
- package/dist/hooks/cursorSessionStart.js +0 -79
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -216
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -206
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
- package/dist/hooks/validateArtifact/index.js.map +0 -1
- package/dist/hooks/validateArtifact/markdown.js.map +0 -1
- package/dist/hooks/validateArtifact/runtime.js +0 -86
- package/dist/hooks/validateArtifact/runtime.js.map +0 -1
- package/dist/hooks/validateArtifact/schema.js.map +0 -1
- package/dist/hooks/validateArtifact/traversal.js.map +0 -1
- package/dist/hooks/validateArtifact/violations.js.map +0 -1
- package/dist/migrate/v2HandoffManifest.js.map +0 -1
- package/dist/registries/artifactProtocolIds.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/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 -316
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/registries/triggerLoader.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 -639
- 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 -129
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/cursorSurfaces.js +0 -67
- package/dist/setup/cursorSurfaces.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 -240
- package/dist/setup/doctor/diagnostics.js.map +0 -1
- package/dist/setup/doctor/opencode.js +0 -313
- package/dist/setup/doctor/opencode.js.map +0 -1
- package/dist/setup/doctor/report.js +0 -425
- 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/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/appContentRefresh.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/bundleEvidence.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/coexistenceProbe.js +0 -107
- package/dist/upgrade/coexistenceProbe.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/doctorClassifier.js.map +0 -1
- package/dist/upgrade/installedHooksRetirement.js.map +0 -1
- package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
- package/dist/upgrade/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/npxPlatformStatus.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/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/legacyPythonParity.js +0 -93
- package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
- package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
- package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
- package/dist/validate/lifecycleAdapters/shared.js +0 -198
- package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -62
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- package/dist/validate/vocabularyAuthority.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compaction status reporting
|
|
2
|
+
* Compaction status reporting and projection repair.
|
|
3
3
|
*
|
|
4
4
|
* Walks each tracked artifact path, counts active/archive entries, and
|
|
5
5
|
* builds a `CompactionStatus` per artifact plus a per-status operation
|
|
@@ -11,13 +11,19 @@ import path from "node:path";
|
|
|
11
11
|
import { DEFAULT_ARTIFACT_PATHS, parseDocsYamlMapping } from "../common.js";
|
|
12
12
|
import { loadYamlMapping } from "../../core/yaml.js";
|
|
13
13
|
import { COMPACTABLE_YAML_ARTIFACTS, NON_COMPACTABLE_ARTIFACTS } from "./dryRun.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
14
|
+
import { detectStateMode } from "../../state/stateMode.js";
|
|
15
|
+
import { discoverEntities } from "../../state/entityStorage.js";
|
|
16
|
+
import { decisionProtectedOverflowCount, decisionSatisfiedActiveCount, overLimitCount, yamlArchiveEntries, } from "./retention.js";
|
|
17
|
+
import { compactFile, compactYamlBytes, compactYamlFile } from "./apply.js";
|
|
18
|
+
import { countTodoResolvedEntries, countTodoResolvedSectionHeadings, countTodoPendingSummarization, TODO_DROPPED_RECOVERY_GUIDANCE, } from "./parse.js";
|
|
17
19
|
import { YAML_SPEC_BY_ARTIFACT } from "./dryRun.js";
|
|
20
|
+
import { InjectedMutationFailure, withStateMutation, } from "../../state/write/mutation.js";
|
|
21
|
+
import { hydrateDecisionRecords } from "../../state/decisionOverlay.js";
|
|
22
|
+
import { loadProjectionPolicy } from "../../state/projectionPolicy.js";
|
|
23
|
+
import { ARTIFACT_PROTOCOL_PATHS } from "../../registries/artifactProtocolIds.js";
|
|
18
24
|
function artifactPaths(projectRoot) {
|
|
19
25
|
const paths = { ...DEFAULT_ARTIFACT_PATHS };
|
|
20
|
-
const docsPath = path.join(projectRoot,
|
|
26
|
+
const docsPath = path.join(projectRoot, ARTIFACT_PROTOCOL_PATHS.docs);
|
|
21
27
|
if (fs.existsSync(docsPath)) {
|
|
22
28
|
Object.assign(paths, parseDocsYamlMapping(fs.readFileSync(docsPath, "utf8")));
|
|
23
29
|
}
|
|
@@ -71,8 +77,9 @@ function yamlLists(p, activeKey, archiveKey) {
|
|
|
71
77
|
const archive = data[archiveKey] || [];
|
|
72
78
|
return [Array.isArray(active) ? active : [], Array.isArray(archive) ? archive : []];
|
|
73
79
|
}
|
|
74
|
-
function countStatus(artifact, p, activeCount, archiveCount, protectedOverflowCount = 0) {
|
|
80
|
+
function countStatus(artifact, p, activeCount, archiveCount, protectedOverflowCount = 0, budgetActiveCount, projectionRecovery, projectionState) {
|
|
75
81
|
const totalCount = activeCount + archiveCount;
|
|
82
|
+
const budgetActive = budgetActiveCount ?? activeCount;
|
|
76
83
|
return {
|
|
77
84
|
artifact,
|
|
78
85
|
path: p,
|
|
@@ -80,19 +87,100 @@ function countStatus(artifact, p, activeCount, archiveCount, protectedOverflowCo
|
|
|
80
87
|
active_count: activeCount,
|
|
81
88
|
archive_count: archiveCount,
|
|
82
89
|
total_count: totalCount,
|
|
83
|
-
over_limit_count: overLimitCount(
|
|
84
|
-
reason:
|
|
90
|
+
over_limit_count: projectionState ? 0 : overLimitCount(budgetActive, archiveCount),
|
|
91
|
+
reason: projectionState
|
|
92
|
+
? projectionState === "over_defaults"
|
|
93
|
+
? "lossless projection exceeds display defaults; numbered archives remain authoritative"
|
|
94
|
+
: "lossless projection is within display defaults"
|
|
95
|
+
: protectedOverflowCount
|
|
96
|
+
? "protected-overflow review pressure"
|
|
97
|
+
: "uniform_10_40_50",
|
|
85
98
|
protected_overflow_count: protectedOverflowCount,
|
|
86
99
|
exists: true,
|
|
100
|
+
...(projectionState ? { projection_state: projectionState } : {}),
|
|
101
|
+
...(projectionRecovery ? { projection_recovery: projectionRecovery } : {}),
|
|
87
102
|
};
|
|
88
103
|
}
|
|
104
|
+
function projectionRecoveryFor(projectRoot, artifact, p) {
|
|
105
|
+
try {
|
|
106
|
+
return compactYamlBytes(fs.readFileSync(p, "utf8"), artifact, projectRoot).result.recovery;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
89
112
|
export function computeCompactionStatus(projectRoot) {
|
|
113
|
+
if (detectStateMode(projectRoot) === "entities") {
|
|
114
|
+
const discovered = discoverEntities(projectRoot);
|
|
115
|
+
const issueCount = discovered.issues.length;
|
|
116
|
+
return [{
|
|
117
|
+
artifact: "entity_state",
|
|
118
|
+
path: path.join(projectRoot, ".agentera", "entities"),
|
|
119
|
+
classification: issueCount ? "error" : "canonical_entities",
|
|
120
|
+
active_count: discovered.entities.length,
|
|
121
|
+
archive_count: 0,
|
|
122
|
+
total_count: discovered.entities.length,
|
|
123
|
+
over_limit_count: 0,
|
|
124
|
+
reason: issueCount
|
|
125
|
+
? `${issueCount} canonical entity validation issue(s); run agentera check validate state --format json`
|
|
126
|
+
: "canonical entity state is independently stored and is not compacted",
|
|
127
|
+
protected_overflow_count: 0,
|
|
128
|
+
exists: true,
|
|
129
|
+
}];
|
|
130
|
+
}
|
|
90
131
|
const paths = artifactPaths(projectRoot);
|
|
132
|
+
const projectionPolicy = loadProjectionPolicy();
|
|
91
133
|
const statuses = [];
|
|
92
134
|
const todoPath = paths.todo;
|
|
93
135
|
if (fs.existsSync(todoPath)) {
|
|
94
|
-
const
|
|
95
|
-
|
|
136
|
+
const todoText = fs.readFileSync(todoPath, "utf8");
|
|
137
|
+
const headingCount = countTodoResolvedSectionHeadings(todoText);
|
|
138
|
+
if (headingCount > 1) {
|
|
139
|
+
// Refuse rather than silently process only the first `## ✓ Resolved`
|
|
140
|
+
// section: duplicates hide the trailing entries from the budget and
|
|
141
|
+
// from fix-mode migration. TODO has no lossless numbered archive, so
|
|
142
|
+
// recovery once entries are dropped is Git-only.
|
|
143
|
+
statuses.push({
|
|
144
|
+
artifact: "todo#Resolved",
|
|
145
|
+
path: todoPath,
|
|
146
|
+
classification: "error",
|
|
147
|
+
active_count: null,
|
|
148
|
+
archive_count: null,
|
|
149
|
+
total_count: null,
|
|
150
|
+
over_limit_count: null,
|
|
151
|
+
reason: `TODO.md has ${headingCount} '## ✓ Resolved' sections; merge into exactly one before compacting. ` +
|
|
152
|
+
`Compaction drops oldest resolved entries and is destructive (no lossless archive); ` +
|
|
153
|
+
TODO_DROPPED_RECOVERY_GUIDANCE,
|
|
154
|
+
protected_overflow_count: 0,
|
|
155
|
+
exists: true,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
else if (headingCount === 0) {
|
|
159
|
+
statuses.push({
|
|
160
|
+
artifact: "todo#Resolved",
|
|
161
|
+
path: todoPath,
|
|
162
|
+
classification: "error",
|
|
163
|
+
active_count: null,
|
|
164
|
+
archive_count: null,
|
|
165
|
+
total_count: null,
|
|
166
|
+
over_limit_count: null,
|
|
167
|
+
reason: "TODO.md has no required '## ✓ Resolved' section; add exactly one before compacting.",
|
|
168
|
+
protected_overflow_count: 0,
|
|
169
|
+
exists: true,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const counts = countTodoResolvedEntries(todoText);
|
|
174
|
+
const status = countStatus("todo#Resolved", todoPath, counts.full, counts.oneline);
|
|
175
|
+
// Detect in-budget (≤50) TODOs that still need a formatting rewrite:
|
|
176
|
+
// rows 11-50 that are long verbatim headers instead of ≤15-word
|
|
177
|
+
// summaries. This triggers `--mode fix` before entries overflow.
|
|
178
|
+
const pendingSummarization = countTodoPendingSummarization(todoText);
|
|
179
|
+
if (pendingSummarization > 0) {
|
|
180
|
+
status.pending_summarization_count = pendingSummarization;
|
|
181
|
+
}
|
|
182
|
+
statuses.push(status);
|
|
183
|
+
}
|
|
96
184
|
}
|
|
97
185
|
else {
|
|
98
186
|
statuses.push(missingStatus("todo#Resolved", todoPath, "compactable"));
|
|
@@ -109,8 +197,17 @@ export function computeCompactionStatus(projectRoot) {
|
|
|
109
197
|
statuses.push(yamlErrorStatus(artifact, p, exc.message));
|
|
110
198
|
continue;
|
|
111
199
|
}
|
|
112
|
-
const protectedOverflowCount = artifact === "decisions"
|
|
113
|
-
|
|
200
|
+
const protectedOverflowCount = artifact === "decisions"
|
|
201
|
+
? decisionProtectedOverflowCount(hydrateDecisionRecords(active, projectRoot), hydrateDecisionRecords(archive, projectRoot))
|
|
202
|
+
: 0;
|
|
203
|
+
const budgetActiveCount = artifact === "decisions"
|
|
204
|
+
? decisionSatisfiedActiveCount(hydrateDecisionRecords(active, projectRoot))
|
|
205
|
+
: undefined;
|
|
206
|
+
statuses.push(countStatus(artifact, p, active.length, archive.length, protectedOverflowCount, budgetActiveCount, projectionRecoveryFor(projectRoot, artifact, p), active.length > projectionPolicy.activeEntries ||
|
|
207
|
+
archive.length > projectionPolicy.summaryEntries ||
|
|
208
|
+
active.length + archive.length > projectionPolicy.totalEntries
|
|
209
|
+
? "over_defaults"
|
|
210
|
+
: "within_defaults"));
|
|
114
211
|
}
|
|
115
212
|
else {
|
|
116
213
|
statuses.push(missingStatus(artifact, p, "compactable"));
|
|
@@ -182,21 +279,35 @@ function operationForStatus(status, mode) {
|
|
|
182
279
|
return base("error", status.reason);
|
|
183
280
|
if (status.classification !== "compactable")
|
|
184
281
|
return base("skipped", status.reason);
|
|
185
|
-
if (status.
|
|
186
|
-
return base("
|
|
282
|
+
if (status.projection_recovery?.refused_count) {
|
|
283
|
+
return base("refused", `projection retained ${status.projection_recovery.retained_full} full entr${status.projection_recovery.retained_full === 1 ? "y" : "ies"}; archive recovery is required before summarization`);
|
|
187
284
|
}
|
|
188
|
-
if (
|
|
189
|
-
return base("
|
|
190
|
-
|
|
285
|
+
if (status.projection_state === "over_defaults") {
|
|
286
|
+
return base(mode === "fix" ? "pending_projection" : "projection", "projection exceeds display defaults; archive history remains lossless");
|
|
287
|
+
}
|
|
288
|
+
if (!status.over_limit_count && !status.pending_summarization_count) {
|
|
289
|
+
return base("ok", status.projection_state === "within_defaults"
|
|
290
|
+
? "within configured lossless projection defaults"
|
|
291
|
+
: "within uniform_10_40_50 limits");
|
|
292
|
+
}
|
|
293
|
+
if (status.over_limit_count) {
|
|
294
|
+
return base(mode === "check" ? "over_limit" : "pending_fix", `over uniform_10_40_50 limit by ${status.over_limit_count}`);
|
|
295
|
+
}
|
|
296
|
+
// pending_summarization_count > 0 but within budget: rows 11-50 need
|
|
297
|
+
// ≤15-word summary formatting, not entry removal.
|
|
298
|
+
const n = status.pending_summarization_count;
|
|
299
|
+
return base(mode === "check" ? "formatting" : "pending_formatting", `${n} resolved entr${n === 1 ? "y" : "ies"} in summary tier need ≤15-word summarization`);
|
|
191
300
|
}
|
|
192
301
|
export function checkCompaction(projectRoot) {
|
|
193
302
|
return computeCompactionStatus(projectRoot).map((status) => operationForStatus(status, "check"));
|
|
194
303
|
}
|
|
195
|
-
|
|
304
|
+
function fixCompactionUnlocked(projectRoot, transaction) {
|
|
196
305
|
const operations = [];
|
|
197
306
|
for (const status of computeCompactionStatus(projectRoot)) {
|
|
198
307
|
const baseline = operationForStatus(status, "fix");
|
|
199
|
-
if (baseline.action !== "pending_fix"
|
|
308
|
+
if (baseline.action !== "pending_fix" &&
|
|
309
|
+
baseline.action !== "pending_projection" &&
|
|
310
|
+
baseline.action !== "pending_formatting") {
|
|
200
311
|
operations.push(baseline);
|
|
201
312
|
continue;
|
|
202
313
|
}
|
|
@@ -204,10 +315,10 @@ export function fixCompaction(projectRoot) {
|
|
|
204
315
|
let result;
|
|
205
316
|
try {
|
|
206
317
|
if (status.artifact === "todo#Resolved") {
|
|
207
|
-
result =
|
|
318
|
+
result = transaction.mutateProjection(p, (stage) => compactFile(stage, "todo-resolved"));
|
|
208
319
|
}
|
|
209
320
|
else if (status.artifact in YAML_SPEC_BY_ARTIFACT) {
|
|
210
|
-
result =
|
|
321
|
+
result = transaction.mutateProjection(p, (stage) => compactYamlFile(stage, status.artifact, projectRoot));
|
|
211
322
|
}
|
|
212
323
|
else {
|
|
213
324
|
operations.push({ status, mode: "fix", action: "skipped", changed: false, result: null, message: `no fixer registered for ${status.artifact}` });
|
|
@@ -215,6 +326,8 @@ export function fixCompaction(projectRoot) {
|
|
|
215
326
|
}
|
|
216
327
|
}
|
|
217
328
|
catch (exc) {
|
|
329
|
+
if (exc instanceof InjectedMutationFailure)
|
|
330
|
+
throw exc;
|
|
218
331
|
operations.push({ status, mode: "fix", action: "error", changed: false, result: null, message: exc.message });
|
|
219
332
|
continue;
|
|
220
333
|
}
|
|
@@ -226,16 +339,22 @@ export function fixCompaction(projectRoot) {
|
|
|
226
339
|
result,
|
|
227
340
|
message: `full ${result.full_before}->${result.full_after}; ` +
|
|
228
341
|
`archive ${result.oneline_before}->${result.oneline_after}; ` +
|
|
229
|
-
`dropped ${result.dropped}`,
|
|
342
|
+
`omitted ${result.omitted_count ?? 0}; dropped ${result.dropped}`,
|
|
230
343
|
});
|
|
231
344
|
}
|
|
232
345
|
return operations;
|
|
233
346
|
}
|
|
234
|
-
export function
|
|
347
|
+
export function fixCompaction(projectRoot, options = {}) {
|
|
348
|
+
return withStateMutation(projectRoot, (transaction) => fixCompactionUnlocked(projectRoot, transaction), options);
|
|
349
|
+
}
|
|
350
|
+
export function runCompaction(projectRoot, mode = "check", options = {}) {
|
|
235
351
|
if (mode === "check")
|
|
236
352
|
return checkCompaction(projectRoot);
|
|
237
|
-
if (mode === "fix")
|
|
238
|
-
|
|
353
|
+
if (mode === "fix") {
|
|
354
|
+
if (detectStateMode(projectRoot) === "entities") {
|
|
355
|
+
return computeCompactionStatus(projectRoot).map((status) => operationForStatus(status, "fix"));
|
|
356
|
+
}
|
|
357
|
+
return fixCompaction(projectRoot, options);
|
|
358
|
+
}
|
|
239
359
|
throw new Error(`unknown compaction mode: ${mode}`);
|
|
240
360
|
}
|
|
241
|
-
//# sourceMappingURL=status.js.map
|
|
@@ -7,4 +7,3 @@
|
|
|
7
7
|
import { ARTIFACT_PROTOCOL_PATHS, HUMAN_FACING_ARTIFACT_IDS } from "../../registries/artifactProtocolIds.js";
|
|
8
8
|
export { ARTIFACT_PROTOCOL_PATHS, HUMAN_FACING_ARTIFACT_IDS };
|
|
9
9
|
export const AGENT_FACING_ARTIFACT_IDS = new Set(Object.keys(ARTIFACT_PROTOCOL_PATHS).filter((id) => !HUMAN_FACING_ARTIFACT_IDS.has(id)));
|
|
10
|
-
//# sourceMappingURL=agentFacing.js.map
|
|
@@ -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 {
|
|
@@ -43,37 +38,6 @@ export class ArtifactSchemaValidator {
|
|
|
43
38
|
validateMarkdown(content, name, schema = null) {
|
|
44
39
|
return validateMd(content, name, schema);
|
|
45
40
|
}
|
|
46
|
-
validateWrite(write, cwd) {
|
|
47
|
-
const absPath = path.isAbsolute(write.file_path) ? write.file_path : path.join(cwd, write.file_path);
|
|
48
|
-
const rel = path.relative(cwd, absPath).replace(/\\/g, "/");
|
|
49
|
-
const basename = path.basename(absPath);
|
|
50
|
-
const artifact = artifactForWrite(absPath, rel, basename, cwd);
|
|
51
|
-
if (artifact && AGENT_FACING_ARTIFACT_IDS.has(artifact)) {
|
|
52
|
-
const schema = this.loadSchema(artifact);
|
|
53
|
-
if (schema === null)
|
|
54
|
-
return [];
|
|
55
|
-
if (Object.keys(schema).length === 0)
|
|
56
|
-
return [`${artifact}: schema file is empty or contains no valid definitions`];
|
|
57
|
-
const content = readIfNeeded(write.content, absPath);
|
|
58
|
-
if (content === null)
|
|
59
|
-
return [];
|
|
60
|
-
let violations = this.validateYaml(content, schema, artifact);
|
|
61
|
-
if (violations.length > 0)
|
|
62
|
-
return violations;
|
|
63
|
-
return compactAfterValidWrite(artifact, absPath);
|
|
64
|
-
}
|
|
65
|
-
if (artifact && HUMAN_FACING_ARTIFACT_IDS.has(artifact)) {
|
|
66
|
-
const content = readIfNeeded(write.content, absPath);
|
|
67
|
-
if (content === null)
|
|
68
|
-
return [];
|
|
69
|
-
const schema = this.loadSchema(artifact);
|
|
70
|
-
const violations = this.validateMarkdown(content, artifact, schema);
|
|
71
|
-
if (violations.length > 0)
|
|
72
|
-
return violations;
|
|
73
|
-
return compactAfterValidWrite(artifact, absPath);
|
|
74
|
-
}
|
|
75
|
-
return [];
|
|
76
|
-
}
|
|
77
41
|
validateExplicit(artifact, filePath, cwd) {
|
|
78
42
|
const content = readIfNeeded(null, filePath);
|
|
79
43
|
if (content === null)
|
|
@@ -103,33 +67,11 @@ export class ArtifactSchemaValidator {
|
|
|
103
67
|
export function loadSchema(name) {
|
|
104
68
|
return new ArtifactSchemaValidator().loadSchema(name);
|
|
105
69
|
}
|
|
106
|
-
export class
|
|
107
|
-
parser;
|
|
70
|
+
export class ArtifactValidationAdapter {
|
|
108
71
|
validator;
|
|
109
|
-
constructor(
|
|
110
|
-
this.parser = parser ?? new RuntimeEventParser();
|
|
72
|
+
constructor(validator) {
|
|
111
73
|
this.validator = validator ?? new ArtifactSchemaValidator();
|
|
112
74
|
}
|
|
113
|
-
run(raw, defaultCwd = null) {
|
|
114
|
-
let data;
|
|
115
|
-
try {
|
|
116
|
-
if (!raw.trim())
|
|
117
|
-
return [0, []];
|
|
118
|
-
data = JSON.parse(raw);
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
return [0, []];
|
|
122
|
-
}
|
|
123
|
-
if (!isMapping(data))
|
|
124
|
-
return [0, []];
|
|
125
|
-
const write = this.parser.parse(data);
|
|
126
|
-
if (write === null)
|
|
127
|
-
return [0, []];
|
|
128
|
-
// cast: cwd read from the runtime hook's JSON stdin payload
|
|
129
|
-
const cwd = (data.cwd ?? defaultCwd ?? process.cwd());
|
|
130
|
-
const violations = this.validator.validateWrite(write, cwd);
|
|
131
|
-
return violations.length > 0 ? [2, violations] : [0, []];
|
|
132
|
-
}
|
|
133
75
|
runExplicit(artifact, filePath, cwd) {
|
|
134
76
|
artifact = artifact.trim();
|
|
135
77
|
const defaultPath = defaultArtifactPath(artifact, cwd);
|
|
@@ -147,5 +89,4 @@ export class HookCliAdapter {
|
|
|
147
89
|
return violations.length > 0 ? [2, payload] : [0, payload];
|
|
148
90
|
}
|
|
149
91
|
}
|
|
150
|
-
export {
|
|
151
|
-
//# sourceMappingURL=index.js.map
|
|
92
|
+
export { resolvePath };
|
|
@@ -5,18 +5,14 @@
|
|
|
5
5
|
* section check (ITEM, RELEASE, TOKEN).
|
|
6
6
|
*/
|
|
7
7
|
import { parseTodoMarkdownListItem } from "../../cli/todoMarkdown.js";
|
|
8
|
-
import { classifyTodoSectionHeading, isLegacyStrikethroughTodoLine, } from "../compaction/parse.js";
|
|
8
|
+
import { classifyTodoSectionHeading, countTodoResolvedSectionHeadings, isLegacyStrikethroughTodoLine, } from "../compaction/parse.js";
|
|
9
9
|
import { isMapping } from "./schema.js";
|
|
10
|
-
const TODO_RESOLVED_HEADING_RE = /^##\s*(?:✓\s+)?Resolved\s*$/im;
|
|
11
10
|
function validateTodoResolvedPlacement(content, name) {
|
|
12
11
|
const violations = [];
|
|
13
12
|
let section = "other";
|
|
14
|
-
let hasResolvedHeading = TODO_RESOLVED_HEADING_RE.test(content);
|
|
15
|
-
let hasResolvedItems = false;
|
|
16
13
|
for (const line of content.split(/\r\n|\r|\n/)) {
|
|
17
14
|
const kind = classifyTodoSectionHeading(line);
|
|
18
15
|
if (kind === "resolved") {
|
|
19
|
-
hasResolvedHeading = true;
|
|
20
16
|
section = "resolved";
|
|
21
17
|
continue;
|
|
22
18
|
}
|
|
@@ -33,20 +29,24 @@ function validateTodoResolvedPlacement(content, name) {
|
|
|
33
29
|
continue;
|
|
34
30
|
const parsed = parseTodoMarkdownListItem(trimmed);
|
|
35
31
|
if (parsed?.status === "resolved") {
|
|
36
|
-
hasResolvedItems = true;
|
|
37
32
|
if (section === "severity") {
|
|
38
33
|
violations.push(`${name}: resolved checkbox item must live under '## ✓ Resolved', not in severity bands`);
|
|
39
34
|
break;
|
|
40
35
|
}
|
|
41
36
|
}
|
|
42
37
|
if (isLegacyStrikethroughTodoLine(trimmed)) {
|
|
43
|
-
hasResolvedItems = true;
|
|
44
38
|
violations.push(`${name}: legacy strikethrough resolved items are not allowed; use '- [x]' under '## ✓ Resolved'`);
|
|
45
39
|
break;
|
|
46
40
|
}
|
|
47
41
|
}
|
|
48
|
-
|
|
49
|
-
|
|
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
50
|
}
|
|
51
51
|
return violations;
|
|
52
52
|
}
|
|
@@ -143,4 +143,3 @@ export function validateMdTokens(content, name, violations) {
|
|
|
143
143
|
violations.push(`${name}: missing YAML code block with token definitions (expected '\`\`\`yaml')`);
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
|
-
//# 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 = [];
|
|
@@ -98,7 +108,10 @@ export function allowedValues(entry) {
|
|
|
98
108
|
// cast: schema `validation` rules parsed from a YAML artifact schema file
|
|
99
109
|
for (const rule of entry.validation ?? []) {
|
|
100
110
|
if (typeof rule === "string" && rule.startsWith("Must be one of: ")) {
|
|
101
|
-
return rule
|
|
111
|
+
return rule
|
|
112
|
+
.slice("Must be one of: ".length)
|
|
113
|
+
.split(",")
|
|
114
|
+
.map((v) => v.trim());
|
|
102
115
|
}
|
|
103
116
|
}
|
|
104
117
|
return [];
|
|
@@ -147,6 +160,12 @@ export function validateFieldType(violations, name, scope, entry, p) {
|
|
|
147
160
|
isValid = false;
|
|
148
161
|
}
|
|
149
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
|
+
}
|
|
150
169
|
else if (expectedType === "list[map]") {
|
|
151
170
|
if (!Array.isArray(value) || !value.every((x) => isMapping(x))) {
|
|
152
171
|
violations.push(`${name}: '${fullPath}' must be a list of mappings`);
|
|
@@ -165,7 +184,9 @@ export function validateFieldConstraints(violations, name, scope, entry, p) {
|
|
|
165
184
|
if (typeof rule !== "string")
|
|
166
185
|
continue;
|
|
167
186
|
if (rule === "Must be a positive integer") {
|
|
168
|
-
if (typeof value === "boolean" ||
|
|
187
|
+
if (typeof value === "boolean" ||
|
|
188
|
+
!(typeof value === "number" && Number.isInteger(value)) ||
|
|
189
|
+
value <= 0) {
|
|
169
190
|
const fullPath = p ? `${p}.${field}` : field;
|
|
170
191
|
violations.push(`${name}: '${fullPath}' must be a positive integer`);
|
|
171
192
|
}
|
|
@@ -260,6 +281,10 @@ export function validateFullPlanContract(data, violations) {
|
|
|
260
281
|
validateField(violations, "plan", header, field, "header");
|
|
261
282
|
}
|
|
262
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
|
+
}
|
|
263
288
|
const criticIssues = header.critic_issues;
|
|
264
289
|
if (!isEmptyRequired(criticIssues)) {
|
|
265
290
|
const match = /^\s*(\d+)\s+found,\s*(\d+)\s+addressed,\s*(\d+)\s+dismissed\s*$/.exec(String(criticIssues));
|
|
@@ -304,7 +329,9 @@ export function parentRequirements(schema, parentGroup) {
|
|
|
304
329
|
entry.required &&
|
|
305
330
|
entry.field) {
|
|
306
331
|
const parentField = parent.slice(prefix.length);
|
|
307
|
-
|
|
332
|
+
const fields = requirements[parentField] ?? [];
|
|
333
|
+
fields.push(String(entry.field));
|
|
334
|
+
requirements[parentField] = fields;
|
|
308
335
|
}
|
|
309
336
|
}
|
|
310
337
|
}
|
|
@@ -335,6 +362,8 @@ export function validateSequences(data, schema, name, violations) {
|
|
|
335
362
|
const childRequirements = parentRequirements(schema, group);
|
|
336
363
|
seq.forEach((item, index) => {
|
|
337
364
|
const p = `${key}[${index}]`;
|
|
365
|
+
if (name === "health" && group === "ARCHIVE" && typeof item === "string")
|
|
366
|
+
return;
|
|
338
367
|
if (!isMapping(item)) {
|
|
339
368
|
violations.push(`${name}: '${p}' must be a mapping`);
|
|
340
369
|
return;
|
|
@@ -373,6 +402,59 @@ export function validateSequences(data, schema, name, violations) {
|
|
|
373
402
|
});
|
|
374
403
|
}
|
|
375
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
|
+
}
|
|
376
458
|
export function validateDecisionAlternatives(data, name) {
|
|
377
459
|
const violations = [];
|
|
378
460
|
// cast: `decisions` read from a parsed YAML artifact mapping
|
|
@@ -393,8 +475,14 @@ export function validateDecisionSatisfaction(data, name) {
|
|
|
393
475
|
const violations = [];
|
|
394
476
|
const allowedStates = new Set(["open", "provisionally_satisfied", "user_confirmed_satisfied"]);
|
|
395
477
|
const entries = [
|
|
396
|
-
...(data.decisions ?? []).map((d, i) => [
|
|
397
|
-
|
|
478
|
+
...(data.decisions ?? []).map((d, i) => [
|
|
479
|
+
`decisions[${i}]`,
|
|
480
|
+
d,
|
|
481
|
+
]),
|
|
482
|
+
...(data.archive ?? []).map((d, i) => [
|
|
483
|
+
`archive[${i}]`,
|
|
484
|
+
d,
|
|
485
|
+
]),
|
|
398
486
|
];
|
|
399
487
|
for (const [entryPath, decision] of entries) {
|
|
400
488
|
if (!isMapping(decision) || !("satisfaction" in decision))
|
|
@@ -456,4 +544,3 @@ export function sequenceInOrder(nums, direction) {
|
|
|
456
544
|
const sorted = [...nums].sort((a, b) => (reverse ? b - a : a - b));
|
|
457
545
|
return nums.length === sorted.length && nums.every((n, i) => n === sorted[i]);
|
|
458
546
|
}
|
|
459
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -12,13 +12,14 @@ 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;
|
|
@@ -83,19 +84,20 @@ function readIfNeeded(content, absPath) {
|
|
|
83
84
|
return null;
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
|
-
function compactAfterValidWrite(artifact, absPath) {
|
|
87
|
+
function compactAfterValidWrite(artifact, absPath, projectRoot) {
|
|
87
88
|
if (!fs.existsSync(absPath))
|
|
88
89
|
return [];
|
|
89
90
|
try {
|
|
90
|
-
if (artifact
|
|
91
|
-
compactFile(absPath, "todo-resolved");
|
|
92
|
-
}
|
|
93
|
-
else if (artifact in COMPACTABLE_YAML_ARTIFACTS) {
|
|
94
|
-
compactYamlFile(absPath, artifact);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
91
|
+
if (artifact !== "todo" && !(artifact in COMPACTABLE_YAML_ARTIFACTS))
|
|
97
92
|
return [];
|
|
98
|
-
|
|
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
|
+
});
|
|
99
101
|
}
|
|
100
102
|
catch (exc) {
|
|
101
103
|
return [`${artifact}: compaction failed: ${exc.message}`];
|
|
@@ -103,4 +105,3 @@ function compactAfterValidWrite(artifact, absPath) {
|
|
|
103
105
|
return [];
|
|
104
106
|
}
|
|
105
107
|
export { readIfNeeded, compactAfterValidWrite };
|
|
106
|
-
//# sourceMappingURL=traversal.js.map
|