agentera 3.0.0-dev.5 → 3.0.0-dev.51
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 +119 -22
- package/bundle/CHANGELOG.md +1351 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +143 -0
- package/bundle/UPGRADE.md +236 -0
- package/bundle/extract-corpus-parity.json +21 -0
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +437 -0
- package/bundle/references/adapters/package-registry.yaml +435 -189
- package/bundle/references/adapters/package-surface-characterization.md +66 -35
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
- package/bundle/references/analysis/verification-policy.yaml +191 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
- package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +3022 -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 -1
- package/bundle/references/cli/vocabulary-index.yaml +20 -17
- package/bundle/references/cli/vocabulary.md +326 -361
- package/bundle/references/meta/retained-reference-authority.yaml +151 -0
- package/bundle/registry.json +13 -13
- package/bundle/skills/agentera/SKILL.md +224 -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 +102 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
- package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
- package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
- package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
- package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
- package/bundle/skills/agentera/capability_schema_contract.yaml +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 +458 -36
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -17
- 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 +190 -0
- package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
- package/dist/analytics/extractCorpus/core.js +392 -0
- package/dist/analytics/extractCorpus/corpus.js +167 -0
- package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
- package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
- package/dist/analytics/extractCorpus/index.js +14 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
- package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +2 -1791
- package/dist/analytics/glossaryAdviceResolution.js +166 -0
- package/dist/analytics/glossaryInputAcquisition.js +319 -0
- package/dist/analytics/personalGlossaryAdmission.js +133 -0
- package/dist/analytics/personalGlossaryProfile.js +219 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +169 -42
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -0
- package/dist/capabilities/build/instructions.js +56 -0
- package/dist/capabilities/design/instructions.js +4 -0
- package/dist/capabilities/discuss/instructions.js +29 -0
- package/dist/capabilities/document/instructions.js +11 -0
- package/dist/capabilities/index.js +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 +565 -0
- package/dist/cli/capabilityContext/bespoke.js +44 -0
- package/dist/cli/capabilityContext/build.js +242 -0
- package/dist/cli/capabilityContext/closeout.js +233 -0
- package/dist/cli/capabilityContext/contract.js +179 -0
- package/dist/cli/capabilityContext/evidence.js +463 -0
- package/dist/cli/capabilityContext/index.js +3 -0
- package/dist/cli/capabilityContext/orchestration.js +131 -0
- package/dist/cli/capabilityContext/planState.js +260 -0
- package/dist/cli/capabilityContext/progress.js +142 -0
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +83 -0
- package/dist/cli/capabilityContext/slim.js +152 -0
- package/dist/cli/capabilityContext/startup.js +150 -0
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +56 -0
- package/dist/cli/capabilityContext.js +1 -2487
- package/dist/cli/commands/appHome.js +22 -0
- package/dist/cli/commands/capability.js +4 -4
- package/dist/cli/commands/compact.js +164 -14
- package/dist/cli/commands/doctor.js +122 -97
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +26 -44
- package/dist/cli/commands/personalGlossary.js +176 -0
- package/dist/cli/commands/prime/briefOrientation.js +747 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +190 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
- package/dist/cli/commands/prime/collectOrientationState.js +212 -0
- package/dist/cli/commands/prime/orientationOutput.js +399 -0
- package/dist/cli/commands/prime/types.js +1 -0
- package/dist/cli/commands/prime/v1Migration.js +38 -0
- package/dist/cli/commands/prime.js +80 -558
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +78 -53
- package/dist/cli/commands/report.js +96 -25
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +266 -143
- package/dist/cli/commands/state/decisions.js +387 -0
- package/dist/cli/commands/state/docs.js +70 -0
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +14 -0
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +14 -0
- package/dist/cli/commands/state/index.js +16 -0
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +25 -0
- package/dist/cli/commands/state/plan.js +14 -0
- package/dist/cli/commands/state/planTasks.js +154 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/progress.js +13 -0
- package/dist/cli/commands/state/shared.js +14 -0
- package/dist/cli/commands/state/todo.js +42 -0
- package/dist/cli/commands/state/write.js +430 -0
- package/dist/cli/commands/upgrade.js +146 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +272 -223
- package/dist/cli/commands/verify.js +24 -9
- package/dist/cli/contracts/bundleStatus.js +1 -0
- package/dist/cli/contracts/orientationState.js +1 -0
- package/dist/cli/dispatch/argvParser.js +32 -0
- package/dist/cli/dispatch/check.js +372 -0
- package/dist/cli/dispatch/commands.js +27 -0
- package/dist/cli/dispatch/index.js +207 -0
- package/dist/cli/dispatch/lifecycle.js +652 -0
- package/dist/cli/dispatch/prime.js +139 -0
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +63 -0
- package/dist/cli/dispatch/state.js +140 -0
- package/dist/cli/dispatch.js +1 -1294
- package/dist/cli/errors.js +16 -17
- package/dist/cli/help.js +394 -43
- package/dist/cli/migrationRequired.js +87 -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 +11 -79
- package/dist/hooks/compaction/apply.js +446 -0
- package/dist/hooks/compaction/dryRun.js +184 -0
- package/dist/hooks/compaction/index.js +22 -0
- package/dist/hooks/compaction/parse.js +325 -0
- package/dist/hooks/compaction/retention.js +202 -0
- package/dist/hooks/compaction/status.js +360 -0
- package/dist/hooks/compaction/types.js +5 -0
- package/dist/hooks/validateArtifact/agentFacing.js +9 -0
- package/dist/hooks/validateArtifact/index.js +92 -0
- package/dist/hooks/validateArtifact/markdown.js +145 -0
- package/dist/hooks/validateArtifact/schema.js +546 -0
- package/dist/hooks/validateArtifact/traversal.js +107 -0
- package/dist/hooks/validateArtifact/violations.js +107 -0
- package/dist/migrate/v2HandoffManifest.js +452 -0
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +107 -0
- package/dist/registries/artifactProtocolIds.js +78 -0
- package/dist/registries/artifactRegistry.js +224 -63
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +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 +229 -0
- package/dist/registries/packageRegistry.js +187 -211
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +174 -0
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +385 -0
- package/dist/runtime/lifecycleAdapterContract.js +457 -0
- package/dist/runtime/lifecycleAdapters.js +777 -0
- package/dist/runtime/lifecycleAuthority.js +453 -0
- package/dist/runtime/lifecycleOperationContract.js +123 -0
- package/dist/runtime/lifecycleOperations.js +634 -0
- package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
- package/dist/runtime/lifecyclePublication.js +415 -0
- package/dist/runtime/lifecycleSnapshot.js +438 -0
- package/dist/runtime/nativeResourceCleanup.js +502 -0
- package/dist/setup/opencode.js +20 -0
- package/dist/setup/opencodeConstants.js +1 -0
- package/dist/setup/sharedSkill.js +45 -0
- package/dist/setup/smokeChecks.js +21 -82
- package/dist/state/archiveDiscovery.js +580 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archiveRecovery.js +237 -0
- package/dist/state/archiveReplay.js +53 -0
- package/dist/state/canonicalMigrationRecord.js +36 -0
- package/dist/state/changelog.js +221 -0
- package/dist/state/decisionEntities.js +367 -0
- package/dist/state/decisionLegacyValidation.js +215 -0
- package/dist/state/decisionMigrationProvenance.js +199 -0
- package/dist/state/decisionOverlay.js +254 -0
- package/dist/state/decisionRevision.js +256 -0
- package/dist/state/decisionRevisionMigration.js +89 -0
- package/dist/state/directRetrieval.js +323 -0
- package/dist/state/durability.js +324 -0
- package/dist/state/entityCutover.js +459 -0
- package/dist/state/entityCutoverGit.js +127 -0
- package/dist/state/entityGlossaryAuthority.js +13 -0
- package/dist/state/entityListProjection.js +187 -0
- package/dist/state/entityListRuntimeRegistry.js +85 -0
- package/dist/state/entityMigrationCausality.js +97 -0
- package/dist/state/entityMigrationIdentity.js +5 -0
- package/dist/state/entityMigrationPreview.js +846 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +806 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +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 +982 -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/projectRoot.js +62 -0
- package/dist/state/projectionPolicy.js +190 -0
- package/dist/state/retrievalAuthority.js +156 -0
- package/dist/state/safeProjectFile.js +155 -0
- package/dist/state/startupAnalysis/benchmark.js +432 -0
- package/dist/state/startupAnalysis/contract.js +160 -0
- package/dist/state/startupAnalysis/helpers.js +286 -0
- package/dist/state/startupAnalysis/index.js +6 -0
- package/dist/state/startupAnalysis/metrics.js +340 -0
- package/dist/state/startupAnalysis/records.js +198 -0
- package/dist/state/startupAnalysis/report.js +111 -0
- package/dist/state/startupAnalysis/threshold.js +512 -0
- package/dist/state/startupAnalysis.js +2 -1953
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +85 -0
- package/dist/state/stateStorageAuthority.js +47 -0
- package/dist/state/summaryEntityRead.js +25 -0
- package/dist/state/summaryMigrationProvenance.js +66 -0
- package/dist/state/summarySourceRowAuthority.js +36 -0
- package/dist/state/todoActivationSafety.js +58 -0
- package/dist/state/todoDocsEntities.js +1069 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +140 -0
- package/dist/state/todoReconciliationInspection.js +169 -0
- package/dist/state/todoReconciliationRepair.js +170 -0
- package/dist/state/todoReconciliationTransaction.js +582 -0
- package/dist/state/write/assign.js +20 -0
- package/dist/state/write/candidateMutation.js +269 -0
- package/dist/state/write/errors.js +11 -0
- package/dist/state/write/experimentPublication.js +192 -0
- package/dist/state/write/explain.js +363 -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 +367 -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 +144 -0
- package/dist/state/write/serialize.js +1 -0
- package/dist/state/write/transaction.js +52 -0
- package/dist/state/write/validate.js +7 -0
- package/dist/upgrade/appContentRefresh.js +383 -0
- package/dist/upgrade/appModel.js +8 -7
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +33 -0
- package/dist/upgrade/channels.js +12 -8
- package/dist/upgrade/compatibility.js +56 -21
- package/dist/upgrade/doctor.js +197 -192
- package/dist/upgrade/doctorClassifier.js +187 -0
- package/dist/upgrade/installedHooksRetirement.js +196 -0
- package/dist/upgrade/legacyAgentCleanup.js +282 -0
- package/dist/upgrade/lifecycleUpgrade.js +113 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +42 -8
- package/dist/upgrade/npxPlatformStatus.js +22 -0
- package/dist/upgrade/projectIntegration.js +145 -187
- package/dist/upgrade/projectIntegrationDecision.js +50 -0
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +273 -363
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +263 -59
- package/dist/upgrade/v3CapabilitySurface.js +14 -0
- package/dist/upgrade/versionResolution.js +8 -1
- package/dist/validate/activationArtifactEvidence.js +844 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +515 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +5 -11
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +133 -12
- package/dist/validate/crossCapability.js +15 -10
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +73 -37
- package/dist/validate/v1LegacyCruft.js +131 -0
- package/dist/validate/vocabularyAuthority.js +303 -0
- package/package.json +53 -27
- package/bundle/references/adapters/cursor.md +0 -213
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/analysis/benchmark.md +0 -267
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/meta/documentation-inventory.md +0 -43
- package/bundle/references/v1-section-mapping.md +0 -47
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
- package/bundle/skills/agentera/agents/hej.toml +0 -6
- package/bundle/skills/agentera/agents/inspektera.toml +0 -6
- package/bundle/skills/agentera/agents/inspirera.toml +0 -6
- package/bundle/skills/agentera/agents/optimera.toml +0 -6
- package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
- package/bundle/skills/agentera/agents/planera.toml +0 -6
- package/bundle/skills/agentera/agents/profilera.toml +0 -6
- package/bundle/skills/agentera/agents/realisera.toml +0 -6
- package/bundle/skills/agentera/agents/resonera.toml +0 -6
- package/bundle/skills/agentera/agents/visionera.toml +0 -6
- package/bundle/skills/agentera/agents/visualisera.toml +0 -6
- package/bundle/skills/agentera/capabilities/dokumentera/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/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
- package/bundle/skills/hej/SKILL.md +0 -69
- package/bundle/skills/hej/agents/hej.toml +0 -11
- package/bundle/skills/hej/agents/openai.yaml +0 -8
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/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.js.map +0 -1
- package/dist/cli/commands/capability.js.map +0 -1
- package/dist/cli/commands/compact.js.map +0 -1
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state.js +0 -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.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/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/toml.js.map +0 -1
- package/dist/core/yaml.js.map +0 -1
- package/dist/eval/evalSkills.js.map +0 -1
- package/dist/eval/semanticEval.js.map +0 -1
- package/dist/eval/semanticFixtures.js.map +0 -1
- package/dist/hooks/common.js.map +0 -1
- package/dist/hooks/compaction.js +0 -935
- package/dist/hooks/compaction.js.map +0 -1
- package/dist/hooks/cursorPreToolUse.js +0 -19
- package/dist/hooks/cursorPreToolUse.js.map +0 -1
- package/dist/hooks/cursorSessionStart.js +0 -71
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -209
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -212
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact.js +0 -935
- package/dist/hooks/validateArtifact.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/capabilityContract.js.map +0 -1
- package/dist/registries/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/setup/codex.js +0 -1197
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -127
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/doctor.js +0 -1297
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/startupAnalysis.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -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/versionResolution.js.map +0 -1
- package/dist/validate/appHomeContract.js.map +0 -1
- package/dist/validate/capability.js.map +0 -1
- package/dist/validate/crossCapability.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -772
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { asList } from "../stateQuery.js";
|
|
2
|
+
import { capabilityContext } from "./contract.js";
|
|
3
|
+
import { sourceProvenance, uniqueList, hasRecordedValue, taskRef } from "./shared.js";
|
|
4
|
+
import { closeoutChangelogBoundary, orchestrationTaskSummary, planContextField, buildArtifactUpdateRequirements, buildPlanCompletionSweep, buildScopeBoundary, selectEvidenceTarget, taskByRef, } from "./planState.js";
|
|
5
|
+
import { progressVerificationSummary } from "./progress.js";
|
|
6
|
+
import { STATE_FAMILY_FALLBACK_COMMANDS, STATE_FAMILY_LIST_COMMANDS } from "./types.js";
|
|
7
|
+
import { planLifecycleState } from "../planLifecycleState.js";
|
|
8
|
+
import { discoverProjectVerification } from "./projectVerification.js";
|
|
9
|
+
import { deferredStartupFamilies } from "./startupAggregation.js";
|
|
10
|
+
import { preCutoverCommand } from "../preCutoverCommand.js";
|
|
11
|
+
const TRANSIENT_BUILD_INPUT_COMMAND = preCutoverCommand("prime --context build --input <file|-> --format json");
|
|
12
|
+
const TRANSIENT_BUILD_STDIN_COMMAND = preCutoverCommand("prime --context build --input - --format json");
|
|
13
|
+
function transientSourceProvenance(request, field) {
|
|
14
|
+
return {
|
|
15
|
+
source_family: "transient_build_execution_request",
|
|
16
|
+
command: TRANSIENT_BUILD_INPUT_COMMAND,
|
|
17
|
+
field,
|
|
18
|
+
schema_version: request.schema_version,
|
|
19
|
+
source_kind: request.source.kind,
|
|
20
|
+
persisted: false,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function buildExecutionContext(capability, schemas, plan, progress, health, todoItems, docs, profile, bundle, projectRoot, buildRequest = null) {
|
|
24
|
+
if (capability !== "build")
|
|
25
|
+
return null;
|
|
26
|
+
const capabilityContract = capabilityContext(capability) ?? {};
|
|
27
|
+
const lifecycle = planLifecycleState(plan);
|
|
28
|
+
const tasks = lifecycle.current_plan_degraded === true
|
|
29
|
+
? []
|
|
30
|
+
: asList(plan.tasks).filter((t) => t && typeof t === "object" && !Array.isArray(t));
|
|
31
|
+
const target = selectEvidenceTarget(plan);
|
|
32
|
+
const selected = taskByRef(plan, (target && typeof target === "object" ? target.task : null));
|
|
33
|
+
const acceptance = buildRequest?.acceptance
|
|
34
|
+
?? (selected && typeof selected === "object" ? asList(selected.acceptance) : []);
|
|
35
|
+
const progressVerification = progressVerificationSummary(progress);
|
|
36
|
+
const changelogBoundary = closeoutChangelogBoundary(projectRoot, plan);
|
|
37
|
+
const sweep = buildPlanCompletionSweep(plan);
|
|
38
|
+
const archiveOnly = Boolean(plan.exists) && plan.active === false;
|
|
39
|
+
let mode;
|
|
40
|
+
if (plan.active === true && plan.complete_plan)
|
|
41
|
+
mode = "completed_plan_sweep";
|
|
42
|
+
else if (buildRequest !== null && plan.active !== true)
|
|
43
|
+
mode = "no_plan";
|
|
44
|
+
else if (archiveOnly)
|
|
45
|
+
mode = "archive_only_history";
|
|
46
|
+
else if (!plan.exists || tasks.length === 0)
|
|
47
|
+
mode = "no_plan";
|
|
48
|
+
else if (target.status === "selected" && selected !== null)
|
|
49
|
+
mode = "plan_driven";
|
|
50
|
+
else
|
|
51
|
+
mode = "blocked_or_dependency_unready";
|
|
52
|
+
let stateCaveats = [];
|
|
53
|
+
let fallbackCommands = [];
|
|
54
|
+
for (const family of deferredStartupFamilies(capabilityContract)) {
|
|
55
|
+
stateCaveats.push(`${family} detail is deferred from prime --context startup.`);
|
|
56
|
+
}
|
|
57
|
+
if (lifecycle.status === "degraded") {
|
|
58
|
+
stateCaveats.push(...(lifecycle.caveats ?? []));
|
|
59
|
+
fallbackCommands.push(STATE_FAMILY_FALLBACK_COMMANDS.plan);
|
|
60
|
+
}
|
|
61
|
+
if (mode === "blocked_or_dependency_unready") {
|
|
62
|
+
stateCaveats.push("No dependency-ready pending plan task is available in CLI plan state.");
|
|
63
|
+
fallbackCommands.push(STATE_FAMILY_FALLBACK_COMMANDS.plan);
|
|
64
|
+
}
|
|
65
|
+
if (mode === "plan_driven" && acceptance.length === 0) {
|
|
66
|
+
stateCaveats.push("Selected Build task has no acceptance criteria in CLI plan state.");
|
|
67
|
+
fallbackCommands.push(STATE_FAMILY_FALLBACK_COMMANDS.plan);
|
|
68
|
+
}
|
|
69
|
+
if (!progress.exists) {
|
|
70
|
+
stateCaveats.push("progress state is unavailable; progress logging context is incomplete.");
|
|
71
|
+
fallbackCommands.push(STATE_FAMILY_FALLBACK_COMMANDS.progress);
|
|
72
|
+
}
|
|
73
|
+
if (!health.exists) {
|
|
74
|
+
stateCaveats.push("health state is unavailable or incomplete.");
|
|
75
|
+
fallbackCommands.push(STATE_FAMILY_FALLBACK_COMMANDS.health);
|
|
76
|
+
}
|
|
77
|
+
if (!docs.exists) {
|
|
78
|
+
stateCaveats.push("docs mapping state is unavailable or incomplete.");
|
|
79
|
+
fallbackCommands.push(STATE_FAMILY_FALLBACK_COMMANDS.docs);
|
|
80
|
+
}
|
|
81
|
+
if (todoItems.length === 0) {
|
|
82
|
+
stateCaveats.push("todo state has no open entries in prime --context response; absence may mean none open or unavailable.");
|
|
83
|
+
fallbackCommands.push(STATE_FAMILY_FALLBACK_COMMANDS.todo);
|
|
84
|
+
}
|
|
85
|
+
if (changelogBoundary.status !== "available") {
|
|
86
|
+
stateCaveats.push(...(changelogBoundary.caveats ?? []));
|
|
87
|
+
fallbackCommands.push(preCutoverCommand("state query changelog --format json"));
|
|
88
|
+
}
|
|
89
|
+
if (profile.status !== "valid") {
|
|
90
|
+
stateCaveats.push("profile-derived state is unavailable in prime --context response.");
|
|
91
|
+
}
|
|
92
|
+
else if (profile.stale === true) {
|
|
93
|
+
stateCaveats.push("profile-derived state is stale; this is a caveat, not approval to refresh profile state.");
|
|
94
|
+
}
|
|
95
|
+
if (bundle.status !== "up_to_date") {
|
|
96
|
+
stateCaveats.push("Agentera app files are not up to date; this is a caveat, not approval to repair or update app files.");
|
|
97
|
+
}
|
|
98
|
+
const scopeBoundary = buildRequest === null
|
|
99
|
+
? buildScopeBoundary(plan, selected)
|
|
100
|
+
: {
|
|
101
|
+
artifact_families: ["progress", "todo", "docs", "health", "changelog", "decisions", "vision", "profile", "design"],
|
|
102
|
+
explicit_scope: buildRequest.scope,
|
|
103
|
+
source_scope: {
|
|
104
|
+
status: "unspecified",
|
|
105
|
+
explicit_paths: [],
|
|
106
|
+
policy: "The transient scope defines work intent only; no source-file allowlist or exclusion is inferred from its text.",
|
|
107
|
+
},
|
|
108
|
+
source_provenance: transientSourceProvenance(buildRequest, "scope"),
|
|
109
|
+
};
|
|
110
|
+
const sourceScope = scopeBoundary.source_scope && typeof scopeBoundary.source_scope === "object" && !Array.isArray(scopeBoundary.source_scope)
|
|
111
|
+
? scopeBoundary.source_scope
|
|
112
|
+
: {};
|
|
113
|
+
if (sourceScope.status === "unspecified") {
|
|
114
|
+
stateCaveats.push("source-file scope is unspecified; no allowed or prohibited source paths were inferred.");
|
|
115
|
+
}
|
|
116
|
+
const noCurrentPlan = plan.active !== true && lifecycle.status !== "degraded";
|
|
117
|
+
if (noCurrentPlan) {
|
|
118
|
+
fallbackCommands = fallbackCommands.filter((command) => command !== STATE_FAMILY_FALLBACK_COMMANDS.plan);
|
|
119
|
+
if (buildRequest === null) {
|
|
120
|
+
stateCaveats.push("Explicit no-plan scope and acceptance are required before Build can execute without a current plan.");
|
|
121
|
+
fallbackCommands.push(TRANSIENT_BUILD_STDIN_COMMAND);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
fallbackCommands = uniqueList(fallbackCommands);
|
|
125
|
+
stateCaveats = uniqueList(stateCaveats);
|
|
126
|
+
const requiredState = {
|
|
127
|
+
work_selection: mode === "plan_driven" || mode === "completed_plan_sweep" || buildRequest !== null,
|
|
128
|
+
acceptance_criteria: mode === "completed_plan_sweep" || acceptance.length > 0,
|
|
129
|
+
artifact_update_requirements: Boolean(docs.exists),
|
|
130
|
+
progress_logging_requirements: progressVerification.status === "available" || (progressVerification.caveats ?? []).length > 0,
|
|
131
|
+
changelog_boundary: changelogBoundary.status === "available",
|
|
132
|
+
scope_boundary: true,
|
|
133
|
+
safety_boundaries: true,
|
|
134
|
+
plan_state_healthy: lifecycle.status !== "degraded",
|
|
135
|
+
};
|
|
136
|
+
const missingRequired = Object.entries(requiredState).filter(([, present]) => !present).map(([name]) => name);
|
|
137
|
+
const caveated = stateCaveats.length > 0;
|
|
138
|
+
const complete = (mode === "plan_driven" || mode === "completed_plan_sweep" || buildRequest !== null)
|
|
139
|
+
&& missingRequired.length === 0;
|
|
140
|
+
const workSelection = buildRequest === null
|
|
141
|
+
? {
|
|
142
|
+
status: target.status,
|
|
143
|
+
selection_reason: target.selection_reason,
|
|
144
|
+
task: selected && typeof selected === "object" ? taskRef(selected) : null,
|
|
145
|
+
source_provenance: target.source_provenance,
|
|
146
|
+
caveats: target.caveats ?? [],
|
|
147
|
+
}
|
|
148
|
+
: {
|
|
149
|
+
status: "selected",
|
|
150
|
+
selection_reason: "explicit_no_plan_scope",
|
|
151
|
+
task: null,
|
|
152
|
+
scope: buildRequest.scope,
|
|
153
|
+
source_provenance: transientSourceProvenance(buildRequest, "scope"),
|
|
154
|
+
caveats: [],
|
|
155
|
+
};
|
|
156
|
+
const artifactUpdateRequirements = buildArtifactUpdateRequirements(plan, docs);
|
|
157
|
+
if (buildRequest !== null) {
|
|
158
|
+
artifactUpdateRequirements.required_families = ["progress", "todo", "changelog"];
|
|
159
|
+
artifactUpdateRequirements.plan_status_update_required = false;
|
|
160
|
+
artifactUpdateRequirements.policy = "Transient no-plan work does not create, mutate, or require plan state.";
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
capability: "build",
|
|
164
|
+
mode,
|
|
165
|
+
work_selection: workSelection,
|
|
166
|
+
plan_task: selected && typeof selected === "object" ? orchestrationTaskSummary(selected) : null,
|
|
167
|
+
acceptance_criteria: {
|
|
168
|
+
status: acceptance.length > 0 ? "available" : "incomplete",
|
|
169
|
+
items: acceptance,
|
|
170
|
+
count: acceptance.length,
|
|
171
|
+
source_provenance: buildRequest === null
|
|
172
|
+
? sourceProvenance("plan", STATE_FAMILY_FALLBACK_COMMANDS.plan, "entries.acceptance")
|
|
173
|
+
: transientSourceProvenance(buildRequest, "acceptance"),
|
|
174
|
+
},
|
|
175
|
+
constraints: {
|
|
176
|
+
plan_constraints_present: buildRequest === null && hasRecordedValue(planContextField(plan, "constraints")),
|
|
177
|
+
plan_constraints_summary: buildRequest === null
|
|
178
|
+
? "Plan constraints are represented here as structured safety and fallback policy; run the plan CLI fallback only if full wording is needed."
|
|
179
|
+
: "Transient no-plan input supplies scope and acceptance only; no plan constraints are inferred.",
|
|
180
|
+
protected_actions: [
|
|
181
|
+
"no profile refresh",
|
|
182
|
+
"no installed app refresh",
|
|
183
|
+
"no vision edit",
|
|
184
|
+
"no objective-state edit",
|
|
185
|
+
"no dispatch without explicit cycle execution",
|
|
186
|
+
"no commit/push/tag/publication without explicit approval",
|
|
187
|
+
],
|
|
188
|
+
unsupported_cli_command_policy: "Do not introduce capability-name or slash-alias CLI commands for Build.",
|
|
189
|
+
source_provenance: buildRequest === null
|
|
190
|
+
? sourceProvenance("plan", STATE_FAMILY_FALLBACK_COMMANDS.plan, "summary.constraints")
|
|
191
|
+
: transientSourceProvenance(buildRequest, "scope"),
|
|
192
|
+
},
|
|
193
|
+
scope_boundary: scopeBoundary,
|
|
194
|
+
verification_expectations: {
|
|
195
|
+
latest_progress_verification: progressVerification,
|
|
196
|
+
...discoverProjectVerification(projectRoot),
|
|
197
|
+
},
|
|
198
|
+
artifact_update_requirements: artifactUpdateRequirements,
|
|
199
|
+
progress_logging_requirements: {
|
|
200
|
+
append_cycle: buildRequest !== null || !archiveOnly,
|
|
201
|
+
verified_field_mandatory: true,
|
|
202
|
+
latest_progress_verification_pointer: progressVerification.latest_progress_verification_pointer ?? null,
|
|
203
|
+
source_provenance: sourceProvenance("progress", STATE_FAMILY_LIST_COMMANDS.progress),
|
|
204
|
+
},
|
|
205
|
+
changelog_boundary: changelogBoundary,
|
|
206
|
+
git_boundary: {
|
|
207
|
+
remote_push_allowed: false,
|
|
208
|
+
commit_allowed_only_with_explicit_user_request: true,
|
|
209
|
+
tag_or_publication_allowed: false,
|
|
210
|
+
source_provenance: sourceProvenance("execution_context", preCutoverCommand("prime --context build --format json"), "git_boundary"),
|
|
211
|
+
},
|
|
212
|
+
plan_completion_sweep: sweep,
|
|
213
|
+
plan_lifecycle_state: lifecycle,
|
|
214
|
+
state_family_caveats: stateCaveats,
|
|
215
|
+
fallback_commands: fallbackCommands,
|
|
216
|
+
source_contract: {
|
|
217
|
+
complete_for_execution_context: complete,
|
|
218
|
+
caveated,
|
|
219
|
+
raw_artifact_reads_required: false,
|
|
220
|
+
raw_artifact_read_policy: "Use this execution_context and included status state first. Run listed routine/query CLI fallback commands " +
|
|
221
|
+
"for missing or incomplete execution state; raw artifact reads are last-resort diagnostics, not normal Build startup behavior.",
|
|
222
|
+
required_execution_state: requiredState,
|
|
223
|
+
missing_required_execution_state: missingRequired,
|
|
224
|
+
fallback_commands: fallbackCommands,
|
|
225
|
+
caveats: stateCaveats,
|
|
226
|
+
owns: [
|
|
227
|
+
"selected work item",
|
|
228
|
+
"task details and acceptance criteria",
|
|
229
|
+
"constraints and safety boundaries",
|
|
230
|
+
"verification expectations",
|
|
231
|
+
"artifact update requirements",
|
|
232
|
+
"progress logging requirements",
|
|
233
|
+
"changelog boundary",
|
|
234
|
+
"scope boundary",
|
|
235
|
+
"read-only plan completion sweep metadata",
|
|
236
|
+
"truthful completeness metadata",
|
|
237
|
+
"plan lifecycle state",
|
|
238
|
+
],
|
|
239
|
+
deferred: [],
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { execFileSync } from "node:child_process";
|
|
3
|
+
import { artifactPath } from "../appContext.js";
|
|
4
|
+
import { asList } from "../stateQuery.js";
|
|
5
|
+
import { capabilityContext } from "./contract.js";
|
|
6
|
+
import { docsConventions, sourceProvenance, uniqueList } from "./shared.js";
|
|
7
|
+
import { closeoutChangelogBoundary } from "./planState.js";
|
|
8
|
+
import { progressVerificationSummary } from "./progress.js";
|
|
9
|
+
import { decisionReviewPressure } from "./evidence.js";
|
|
10
|
+
import { STATE_FAMILY_FALLBACK_COMMANDS } from "./types.js";
|
|
11
|
+
import { deferredStartupFamilies } from "./startupAggregation.js";
|
|
12
|
+
import { preCutoverCommand } from "../preCutoverCommand.js";
|
|
13
|
+
export function closeoutArtifactMappings(docs) {
|
|
14
|
+
const mapping = asList(docs.mapping);
|
|
15
|
+
const ok = Boolean(docs.exists) && mapping.length > 0;
|
|
16
|
+
return {
|
|
17
|
+
status: ok ? "available" : "unavailable",
|
|
18
|
+
source_provenance: sourceProvenance("docs", STATE_FAMILY_FALLBACK_COMMANDS.docs, "summary.mapping"),
|
|
19
|
+
entries: mapping,
|
|
20
|
+
mapping_entries: mapping.length,
|
|
21
|
+
caveats: ok ? [] : ["Docs artifact mappings are unavailable or empty in CLI docs state."],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function closeoutVersionPolicy(docs) {
|
|
25
|
+
const conventions = docsConventions(docs);
|
|
26
|
+
const semverPolicy = conventions.semver_policy && typeof conventions.semver_policy === "object" && !Array.isArray(conventions.semver_policy) ? conventions.semver_policy : {};
|
|
27
|
+
const versionFiles = asList(conventions.version_files);
|
|
28
|
+
const registry = conventions.version_files_registry ?? null;
|
|
29
|
+
const available = Object.keys(semverPolicy).length > 0;
|
|
30
|
+
return {
|
|
31
|
+
status: available ? "available" : "unavailable",
|
|
32
|
+
source_provenance: sourceProvenance("docs", STATE_FAMILY_FALLBACK_COMMANDS.docs, "summary.conventions"),
|
|
33
|
+
version_files: versionFiles,
|
|
34
|
+
version_files_registry: registry,
|
|
35
|
+
semver_policy: semverPolicy,
|
|
36
|
+
caveats: available ? [] : ["Docs version policy is unavailable in CLI docs state."],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function closeoutTodoBlockers(schemas, todoItems, selectedTargetVersion = null) {
|
|
40
|
+
const info = schemas.todo ?? { path: "TODO.md", record: undefined, schema: {}, fields: {} };
|
|
41
|
+
const exists = fs.existsSync(artifactPath(info, "todo"));
|
|
42
|
+
const blockers = selectedTargetVersion === null
|
|
43
|
+
? []
|
|
44
|
+
: todoItems.filter((item) => item.status === "open" && item.release_blocker === true && item.target_version === selectedTargetVersion);
|
|
45
|
+
return {
|
|
46
|
+
status: exists ? "available" : "unavailable",
|
|
47
|
+
source_provenance: sourceProvenance("todo", STATE_FAMILY_FALLBACK_COMMANDS.todo),
|
|
48
|
+
selected_target_version: selectedTargetVersion,
|
|
49
|
+
open_count: blockers.length,
|
|
50
|
+
items: blockers,
|
|
51
|
+
caveats: exists ? [] : ["TODO state is unavailable in CLI state."],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function closeoutBenchmarkEvidence(docs) {
|
|
55
|
+
const coverage = docs.coverage && typeof docs.coverage === "object" && !Array.isArray(docs.coverage) ? docs.coverage : {};
|
|
56
|
+
const testsSummary = String(coverage.tests ?? "").trim();
|
|
57
|
+
if (testsSummary && testsSummary.toLowerCase().includes("benchmark")) {
|
|
58
|
+
return {
|
|
59
|
+
status: "available",
|
|
60
|
+
source_provenance: sourceProvenance("docs", STATE_FAMILY_FALLBACK_COMMANDS.docs, "summary.coverage.tests"),
|
|
61
|
+
summary_present: true,
|
|
62
|
+
non_empty_evidence_present: true,
|
|
63
|
+
history_scope: "cli_visible_summary",
|
|
64
|
+
user_local_benchmark_reads_required: false,
|
|
65
|
+
summary: testsSummary,
|
|
66
|
+
caveats: [],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
status: "unavailable",
|
|
71
|
+
source_provenance: sourceProvenance("docs", STATE_FAMILY_FALLBACK_COMMANDS.docs, "summary.coverage.tests"),
|
|
72
|
+
summary_present: false,
|
|
73
|
+
non_empty_evidence_present: false,
|
|
74
|
+
history_scope: "not_exposed_by_supported_cli_state",
|
|
75
|
+
user_local_benchmark_reads_required: false,
|
|
76
|
+
summary: null,
|
|
77
|
+
caveats: ["Supported CLI/state summaries do not expose benchmark evidence; do not read user-local benchmark files for normal closeout."],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function localGitTagEvidence(targetVersion) {
|
|
81
|
+
const tag = targetVersion ? `v${targetVersion}` : null;
|
|
82
|
+
const source = { source_family: "local_git", command: "git tag --list <target-tag>", remote: false };
|
|
83
|
+
if (!tag) {
|
|
84
|
+
return { status: "unavailable", tag: null, source_provenance: source, object_type: null, caveats: ["No selected target version is available for local tag evidence."] };
|
|
85
|
+
}
|
|
86
|
+
let stdout;
|
|
87
|
+
try {
|
|
88
|
+
stdout = execFileSync("git", ["tag", "--list", tag], { cwd: process.cwd(), encoding: "utf8", timeout: 2000 });
|
|
89
|
+
}
|
|
90
|
+
catch (exc) {
|
|
91
|
+
const e = exc;
|
|
92
|
+
if (typeof e.status === "number" && e.status !== 0) {
|
|
93
|
+
return { status: "unavailable", tag, source_provenance: source, object_type: null, caveats: ["Local git tag evidence is unavailable because this project is not a git worktree."] };
|
|
94
|
+
}
|
|
95
|
+
return { status: "unavailable", tag, source_provenance: source, object_type: null, caveats: [`Local git tag evidence is unavailable: ${exc.message}`] };
|
|
96
|
+
}
|
|
97
|
+
if (!stdout.split(/\r\n|\r|\n/).includes(tag)) {
|
|
98
|
+
return { status: "absent", tag, source_provenance: source, object_type: null, caveats: [`Local tag ${tag} is not present.`] };
|
|
99
|
+
}
|
|
100
|
+
let objectType = null;
|
|
101
|
+
try {
|
|
102
|
+
const out = execFileSync("git", ["cat-file", "-t", tag], { cwd: process.cwd(), encoding: "utf8", timeout: 2000 });
|
|
103
|
+
objectType = out.trim() || null;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
objectType = null;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
status: "available",
|
|
110
|
+
tag,
|
|
111
|
+
source_provenance: source,
|
|
112
|
+
object_type: objectType,
|
|
113
|
+
caveats: objectType ? [] : [`Local tag ${tag} exists but object type could not be verified.`],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export function closeoutReleaseBoundary(changelogBoundary, bundle) {
|
|
117
|
+
const targetVersion = changelogBoundary.selected_target_version;
|
|
118
|
+
const localTag = localGitTagEvidence(targetVersion ? String(targetVersion) : null);
|
|
119
|
+
const metadataRecorded = Boolean(changelogBoundary.selected_target_recorded);
|
|
120
|
+
const caveats = [...(changelogBoundary.caveats ?? []), ...(localTag.caveats ?? [])];
|
|
121
|
+
if (!metadataRecorded && localTag.status !== "available") {
|
|
122
|
+
caveats.push("No local closeout metadata or local tag evidence is recorded for the selected target.");
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
status: changelogBoundary.boundary_present ? "available" : "incomplete",
|
|
126
|
+
selected_target_version: targetVersion ?? null,
|
|
127
|
+
boundary: changelogBoundary.boundary ?? null,
|
|
128
|
+
local_metadata_evidence: {
|
|
129
|
+
status: metadataRecorded ? "recorded" : "not_recorded",
|
|
130
|
+
source_provenance: changelogBoundary.source_provenance ?? null,
|
|
131
|
+
field: "changelog_boundary.selected_target_recorded",
|
|
132
|
+
},
|
|
133
|
+
local_tag_evidence: localTag,
|
|
134
|
+
publication_evidence: {
|
|
135
|
+
package_publication: "not_recorded_in_cli_state",
|
|
136
|
+
remote_push: "not_recorded_in_cli_state",
|
|
137
|
+
remote_checks_performed: false,
|
|
138
|
+
registry_checks_performed: false,
|
|
139
|
+
source_provenance: sourceProvenance("closeout_context", preCutoverCommand("prime --context document --format json"), "release_boundary.publication_evidence"),
|
|
140
|
+
caveats: ["Closeout context does not contact remotes or package registries."],
|
|
141
|
+
},
|
|
142
|
+
app_refresh_evidence: {
|
|
143
|
+
installed_app_status: bundle.status ?? null,
|
|
144
|
+
refresh: "not_recorded_in_cli_state",
|
|
145
|
+
approval_recorded: false,
|
|
146
|
+
source_provenance: sourceProvenance("status", preCutoverCommand("prime --format json"), "app.status"),
|
|
147
|
+
},
|
|
148
|
+
caveats,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export function documentCloseoutContext(capability, schemas, plan, progress, todoItems, docs, profile, bundle, decisionHistory, projectRoot) {
|
|
152
|
+
if (capability !== "document")
|
|
153
|
+
return null;
|
|
154
|
+
const capabilityContract = capabilityContext(capability) ?? {};
|
|
155
|
+
const artifactMappings = closeoutArtifactMappings(docs);
|
|
156
|
+
const versionPolicy = closeoutVersionPolicy(docs);
|
|
157
|
+
const changelogBoundary = closeoutChangelogBoundary(projectRoot, plan);
|
|
158
|
+
const todoBlockers = closeoutTodoBlockers(schemas, todoItems, typeof changelogBoundary.selected_target_version === "string" ? changelogBoundary.selected_target_version : null);
|
|
159
|
+
const progressEvidence = progressVerificationSummary(progress);
|
|
160
|
+
const benchmarkEvidence = closeoutBenchmarkEvidence(docs);
|
|
161
|
+
const releaseBoundary = closeoutReleaseBoundary(changelogBoundary, bundle);
|
|
162
|
+
const reviewPressure = decisionReviewPressure(decisionHistory);
|
|
163
|
+
const requiredState = {
|
|
164
|
+
artifact_mappings: artifactMappings.status === "available",
|
|
165
|
+
version_policy: versionPolicy.status === "available",
|
|
166
|
+
todo_blockers: todoBlockers.status === "available",
|
|
167
|
+
changelog_boundary: Boolean(changelogBoundary.boundary_present),
|
|
168
|
+
progress_evidence: progressEvidence.status === "available",
|
|
169
|
+
benchmark_evidence_or_caveat: benchmarkEvidence.status === "available" || (benchmarkEvidence.caveats ?? []).length > 0,
|
|
170
|
+
decision_review_pressure: reviewPressure.status === "available",
|
|
171
|
+
};
|
|
172
|
+
const missingRequired = Object.entries(requiredState).filter(([, present]) => !present).map(([k]) => k);
|
|
173
|
+
let stateCaveats = [];
|
|
174
|
+
for (const family of deferredStartupFamilies(capabilityContract)) {
|
|
175
|
+
stateCaveats.push(`${family} detail is deferred from prime --context startup.`);
|
|
176
|
+
}
|
|
177
|
+
for (const component of [artifactMappings, versionPolicy, todoBlockers, changelogBoundary, releaseBoundary, progressEvidence, benchmarkEvidence, reviewPressure]) {
|
|
178
|
+
stateCaveats.push(...(component.caveats ?? []));
|
|
179
|
+
}
|
|
180
|
+
if (bundle.status !== "up_to_date")
|
|
181
|
+
stateCaveats.push("Agentera app files are not up to date; this is a caveat, not approval to repair or update app files.");
|
|
182
|
+
if (profile.status !== "valid")
|
|
183
|
+
stateCaveats.push("profile-derived state is unavailable in prime --context response.");
|
|
184
|
+
else if (profile.stale === true)
|
|
185
|
+
stateCaveats.push("profile-derived state is stale; this is a caveat, not approval to refresh profile state.");
|
|
186
|
+
stateCaveats = uniqueList(stateCaveats);
|
|
187
|
+
const fallbackCommands = uniqueList([
|
|
188
|
+
STATE_FAMILY_FALLBACK_COMMANDS.todo,
|
|
189
|
+
STATE_FAMILY_FALLBACK_COMMANDS.docs,
|
|
190
|
+
STATE_FAMILY_FALLBACK_COMMANDS.progress,
|
|
191
|
+
preCutoverCommand("state query changelog --format json"),
|
|
192
|
+
preCutoverCommand("state query --list-artifacts --format json"),
|
|
193
|
+
]);
|
|
194
|
+
return {
|
|
195
|
+
capability: "document",
|
|
196
|
+
artifact_mappings: artifactMappings,
|
|
197
|
+
version_policy: versionPolicy,
|
|
198
|
+
todo_blockers: todoBlockers,
|
|
199
|
+
changelog_boundary: changelogBoundary,
|
|
200
|
+
release_boundary: releaseBoundary,
|
|
201
|
+
progress_evidence: progressEvidence,
|
|
202
|
+
benchmark_evidence: benchmarkEvidence,
|
|
203
|
+
decision_review_pressure: reviewPressure,
|
|
204
|
+
state_family_caveats: stateCaveats,
|
|
205
|
+
fallback_commands: fallbackCommands,
|
|
206
|
+
source_contract: {
|
|
207
|
+
complete_for_closeout_context: missingRequired.length === 0,
|
|
208
|
+
caveated: stateCaveats.length > 0,
|
|
209
|
+
raw_artifact_reads_required: false,
|
|
210
|
+
raw_artifact_read_policy: "Use this closeout_context and included status state first. Run listed routine/query CLI fallback commands " +
|
|
211
|
+
"for missing or incomplete closeout state; raw artifact reads are last-resort diagnostics, not normal closeout behavior.",
|
|
212
|
+
closeout_state_families: ["docs", "todo", "changelog", "progress", "benchmark_evidence", "decisions"],
|
|
213
|
+
required_closeout_state: requiredState,
|
|
214
|
+
missing_required_closeout_state: missingRequired,
|
|
215
|
+
fallback_commands: fallbackCommands,
|
|
216
|
+
caveats: stateCaveats,
|
|
217
|
+
owns: [
|
|
218
|
+
"artifact mappings",
|
|
219
|
+
"version policy",
|
|
220
|
+
"TODO blockers",
|
|
221
|
+
"changelog or no-release boundary",
|
|
222
|
+
"local metadata/tag versus publication boundary",
|
|
223
|
+
"latest progress evidence",
|
|
224
|
+
"benchmark evidence pointer or unavailable caveat",
|
|
225
|
+
"protected decision review pressure",
|
|
226
|
+
"provenance pointers and non-empty evidence flags",
|
|
227
|
+
"fallback commands",
|
|
228
|
+
"raw-read policy",
|
|
229
|
+
"truthful completeness flag",
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { loadYamlMapping } from "../../core/yaml.js";
|
|
4
|
+
import { activeAppModel, discoverSchemasDir } from "../appContext.js";
|
|
5
|
+
import { capabilityStartupCommand } from "../../capabilities/index.js";
|
|
6
|
+
import { PLAN_COMPLETED_PLAN_ARCHIVE_CONFIRMATION, PLAN_INSTRUCTIONS_AUTHORITY_EXCEPTIONS, PLAN_PLANNING_LEVELS, PLAN_RAW_PLAN_ACCESS_ALLOWED_FOR, PLAN_STARTUP_CONTRACT_VERSION, PLAN_STEP_VERBS, PLAN_TASK_COHERENCE_RULE, STATE_FAMILY_FALLBACK_COMMANDS, } from "./types.js";
|
|
7
|
+
import { CAPABILITY_INSTRUCTIONS, capabilityInstructionModulePath } from "../../capabilities/index.js";
|
|
8
|
+
import { isFile, pyRepr, appendUnique } from "./shared.js";
|
|
9
|
+
import { startupAvailabilityProjection } from "./startupAggregation.js";
|
|
10
|
+
import { preCutoverCommand } from "../preCutoverCommand.js";
|
|
11
|
+
export function capabilityInstructionContractPath() {
|
|
12
|
+
const model = activeAppModel();
|
|
13
|
+
const active = path.join(String(model.authoritativeRoot ?? model.activeBundleRoot), "references", "cli", "capability-instruction-contract.yaml");
|
|
14
|
+
if (isFile(active))
|
|
15
|
+
return active;
|
|
16
|
+
return path.join(path.resolve(discoverSchemasDir(), "..", "..", "..", ".."), "references", "cli", "capability-instruction-contract.yaml");
|
|
17
|
+
}
|
|
18
|
+
export function capabilityInstructionContract() {
|
|
19
|
+
const p = capabilityInstructionContractPath();
|
|
20
|
+
if (!isFile(p))
|
|
21
|
+
return {};
|
|
22
|
+
try {
|
|
23
|
+
return loadYamlMapping(fs.readFileSync(p, "utf8")); // cast: IO boundary — YAML parse of capability-instruction contract file
|
|
24
|
+
}
|
|
25
|
+
catch (exc) {
|
|
26
|
+
process.stderr.write(`warning: failed to load capability instruction contract: ${exc.message}\n`);
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function capabilityInstructionTarget(capability) {
|
|
31
|
+
const module = capabilityInstructionModulePath(capability);
|
|
32
|
+
const instructions = CAPABILITY_INSTRUCTIONS[capability] ?? null;
|
|
33
|
+
return {
|
|
34
|
+
module,
|
|
35
|
+
exists: instructions !== null && instructions.length > 0,
|
|
36
|
+
runtime_path: module,
|
|
37
|
+
instructions_present: instructions !== null,
|
|
38
|
+
instructions_length: instructions === null ? 0 : instructions.length,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function firstInvocationReadMetadata(capability) {
|
|
42
|
+
const authority = capabilityInstructionContract();
|
|
43
|
+
const firstRead = authority.first_invocation_read && typeof authority.first_invocation_read === "object" && !Array.isArray(authority.first_invocation_read)
|
|
44
|
+
? authority.first_invocation_read
|
|
45
|
+
: {};
|
|
46
|
+
const allowedValues = firstRead.allowed_values && typeof firstRead.allowed_values === "object" && !Array.isArray(firstRead.allowed_values) ? firstRead.allowed_values : {};
|
|
47
|
+
const value = "prime_context";
|
|
48
|
+
const valueContract = (allowedValues[value] ?? {});
|
|
49
|
+
return {
|
|
50
|
+
field: "first_invocation_read",
|
|
51
|
+
value,
|
|
52
|
+
allowed_values: Object.keys(allowedValues),
|
|
53
|
+
default_rule: firstRead.default_rule ?? firstRead.default_future_rule ?? null,
|
|
54
|
+
module_target: capabilityInstructionTarget(capability),
|
|
55
|
+
startup_command: capabilityStartupCommand(capability),
|
|
56
|
+
obligation_summary: valueContract.obligation ?? `shell out to ${capabilityStartupCommand(capability)}`,
|
|
57
|
+
meaning: valueContract.meaning ?? null,
|
|
58
|
+
runtime_enforcement: true,
|
|
59
|
+
provenance: {
|
|
60
|
+
authority_path: "references/cli/capability-instruction-contract.yaml",
|
|
61
|
+
authority_status: authority.status ?? null,
|
|
62
|
+
decision: authority.decision ?? null,
|
|
63
|
+
source_field: "first_invocation_read.allowed_values",
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function planStartupContract() {
|
|
68
|
+
return {
|
|
69
|
+
schemaVersion: PLAN_STARTUP_CONTRACT_VERSION,
|
|
70
|
+
status: "implemented_compact_normal_startup_contract",
|
|
71
|
+
canonical_surface: capabilityStartupCommand("plan"),
|
|
72
|
+
bounded: true,
|
|
73
|
+
instructions_runtime_read_required: false,
|
|
74
|
+
instructions_authority: {
|
|
75
|
+
normal_startup: "Use this compact context for normal Plan execution startup; " +
|
|
76
|
+
`shell out to \`${capabilityStartupCommand("plan")}\` for the full Plan instructions.`,
|
|
77
|
+
read_plan_instructions_when: PLAN_INSTRUCTIONS_AUTHORITY_EXCEPTIONS,
|
|
78
|
+
},
|
|
79
|
+
planning: {
|
|
80
|
+
levels: PLAN_PLANNING_LEVELS,
|
|
81
|
+
step_marker_format: "── step N/6: verb",
|
|
82
|
+
required_steps: PLAN_STEP_VERBS,
|
|
83
|
+
full_plan_review_required: true,
|
|
84
|
+
pre_write_self_audit_required: true,
|
|
85
|
+
task_coherence_rule: PLAN_TASK_COHERENCE_RULE,
|
|
86
|
+
},
|
|
87
|
+
cli_first_orientation: {
|
|
88
|
+
use_startup_state_first: true,
|
|
89
|
+
current_plan_command: STATE_FAMILY_FALLBACK_COMMANDS.plan,
|
|
90
|
+
complete_plan_contract_key: "source_contract.complete_for_plan_artifact",
|
|
91
|
+
fallback_policy: "Use CLI-provided fallback commands for missing or incomplete state families " +
|
|
92
|
+
"before any last-resort raw artifact read.",
|
|
93
|
+
},
|
|
94
|
+
artifact_access_boundaries: {
|
|
95
|
+
skip_raw_plan_artifact_when: `\`${STATE_FAMILY_FALLBACK_COMMANDS.plan}\` reports source_contract.complete_for_plan_artifact=true ` +
|
|
96
|
+
"during normal read-only startup or evaluation.",
|
|
97
|
+
raw_plan_artifact_allowed_for: PLAN_RAW_PLAN_ACCESS_ALLOWED_FOR,
|
|
98
|
+
completed_plan_archive_confirmation: PLAN_COMPLETED_PLAN_ARCHIVE_CONFIRMATION,
|
|
99
|
+
artifact_mapping_source: STATE_FAMILY_FALLBACK_COMMANDS.docs,
|
|
100
|
+
},
|
|
101
|
+
handoff_expectations: [
|
|
102
|
+
"skip level suggests ⧉ build and waits for confirmation unless the user already asked to implement now",
|
|
103
|
+
"single-task plans suggest ⧉ build and wait for confirmation",
|
|
104
|
+
"full plans suggest ⎈ orchestrate and wait for confirmation",
|
|
105
|
+
],
|
|
106
|
+
unsupported_command_boundary: {
|
|
107
|
+
capability_cli_commands_added: true,
|
|
108
|
+
forbidden_examples: [],
|
|
109
|
+
route_boundary: "Use `/agentera plan` for routing, `agentera state plan list` for plan state, " +
|
|
110
|
+
"and `agentera plan` for capability routing guidance only.",
|
|
111
|
+
},
|
|
112
|
+
seam_decision: {
|
|
113
|
+
selected: "prime --context",
|
|
114
|
+
not_changed: [
|
|
115
|
+
{ surface: preCutoverCommand("schema --format json"), reason: "runtime/schema command discovery, not capability workflow startup context" },
|
|
116
|
+
{ surface: "dispatcher guidance", reason: "route and CLI-state separation guidance, not a bounded Plan workflow payload" },
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export function capabilityArtifactInventory(capability) {
|
|
122
|
+
const inventory = { read_needs: [], write_targets: [] };
|
|
123
|
+
const capabilityDir = path.join(String(activeAppModel().skillRoot), "capabilities", capability);
|
|
124
|
+
const p = path.join(capabilityDir, "schemas", "artifacts.yaml");
|
|
125
|
+
if (!isFile(p))
|
|
126
|
+
return [inventory, `No capability artifact schema found for ${capability}.`];
|
|
127
|
+
let data;
|
|
128
|
+
try {
|
|
129
|
+
data = loadYamlMapping(fs.readFileSync(p, "utf8")); // cast: IO boundary — YAML parse of artifact inventory file
|
|
130
|
+
}
|
|
131
|
+
catch (exc) {
|
|
132
|
+
return [inventory, `Capability artifact schema for ${capability} could not be read: ${exc.message}`];
|
|
133
|
+
}
|
|
134
|
+
const artifacts = data.ARTIFACTS;
|
|
135
|
+
if (!artifacts || typeof artifacts !== "object" || Array.isArray(artifacts)) {
|
|
136
|
+
return [inventory, `Capability artifact schema for ${capability} has no ARTIFACTS mapping.`];
|
|
137
|
+
}
|
|
138
|
+
const errors = [];
|
|
139
|
+
for (const [key, entry] of Object.entries(artifacts)) {
|
|
140
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
141
|
+
errors.push(`entry ${key} is not a mapping`);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const e = entry;
|
|
145
|
+
const artifactId = String(e.artifact ?? "").trim();
|
|
146
|
+
const localRole = String(e.local_role ?? "").trim();
|
|
147
|
+
if (!artifactId) {
|
|
148
|
+
errors.push(`entry ${key} is missing artifact`);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (localRole === "consumes")
|
|
152
|
+
appendUnique(inventory.read_needs, artifactId);
|
|
153
|
+
else if (localRole === "produces")
|
|
154
|
+
appendUnique(inventory.write_targets, artifactId);
|
|
155
|
+
else if (localRole === "produces_and_consumes") {
|
|
156
|
+
appendUnique(inventory.read_needs, artifactId);
|
|
157
|
+
appendUnique(inventory.write_targets, artifactId);
|
|
158
|
+
}
|
|
159
|
+
else
|
|
160
|
+
errors.push(`entry ${key} has unsupported local_role ${pyRepr(localRole)}`);
|
|
161
|
+
}
|
|
162
|
+
const error = errors.length > 0 ? `Capability artifact schema for ${capability} has invalid ARTIFACTS entries: ${errors.join("; ")}.` : null;
|
|
163
|
+
return [inventory, error];
|
|
164
|
+
}
|
|
165
|
+
export function capabilityContext(capability) {
|
|
166
|
+
if (!capability)
|
|
167
|
+
return null;
|
|
168
|
+
const [inventory, error] = capabilityArtifactInventory(capability);
|
|
169
|
+
const needs = inventory.read_needs;
|
|
170
|
+
const context = {
|
|
171
|
+
capability,
|
|
172
|
+
first_invocation_read: firstInvocationReadMetadata(capability),
|
|
173
|
+
availability: startupAvailabilityProjection(needs),
|
|
174
|
+
schema_error: error,
|
|
175
|
+
};
|
|
176
|
+
if (capability === "plan")
|
|
177
|
+
context.startup_contract = planStartupContract();
|
|
178
|
+
return context;
|
|
179
|
+
}
|