agentera 3.0.0-dev.4 → 3.0.0-dev.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +108 -22
- package/bundle/.agentera-npx-bundle.json +1 -1
- package/bundle/CHANGELOG.md +1351 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +143 -0
- package/bundle/UPGRADE.md +236 -0
- package/bundle/extract-corpus-parity.json +21 -0
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +437 -0
- package/bundle/references/adapters/package-registry.yaml +434 -189
- package/bundle/references/adapters/package-surface-characterization.md +66 -35
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
- package/bundle/references/analysis/verification-policy.yaml +191 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
- package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
- package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
- package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
- package/bundle/references/cli/routing-model.md +155 -0
- package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
- package/bundle/references/cli/update-channels.yaml +35 -2
- package/bundle/references/cli/vocabulary-index.yaml +23 -20
- package/bundle/references/cli/vocabulary.md +337 -366
- package/bundle/references/meta/retained-reference-authority.yaml +151 -0
- package/bundle/registry.json +14 -14
- package/bundle/skills/agentera/SKILL.md +218 -408
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
- package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
- package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
- package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
- package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
- package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
- package/bundle/skills/agentera/protocol.yaml +31 -31
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
- package/dist/analytics/extractCorpus/cli.js +190 -0
- package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
- package/dist/analytics/extractCorpus/core.js +392 -0
- package/dist/analytics/extractCorpus/corpus.js +167 -0
- package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
- package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
- package/dist/analytics/extractCorpus/index.js +14 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
- package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +2 -1791
- package/dist/analytics/glossaryAdviceResolution.js +166 -0
- package/dist/analytics/glossaryInputAcquisition.js +319 -0
- package/dist/analytics/personalGlossaryAdmission.js +133 -0
- package/dist/analytics/personalGlossaryProfile.js +219 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +169 -42
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -0
- package/dist/capabilities/build/instructions.js +56 -0
- package/dist/capabilities/design/instructions.js +4 -0
- package/dist/capabilities/discuss/instructions.js +29 -0
- package/dist/capabilities/document/instructions.js +11 -0
- package/dist/capabilities/index.js +40 -0
- package/dist/capabilities/optimize/instructions.js +14 -0
- package/dist/capabilities/orchestrate/instructions.js +40 -0
- package/dist/capabilities/plan/instructions.js +32 -0
- package/dist/capabilities/profile/instructions.js +70 -0
- package/dist/capabilities/research/instructions.js +5 -0
- package/dist/capabilities/status/instructions.js +11 -0
- package/dist/capabilities/status/startupInstructions.js +34 -0
- package/dist/capabilities/vision/instructions.js +4 -0
- package/dist/cli/appContext.js +30 -24
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +565 -0
- package/dist/cli/capabilityContext/bespoke.js +44 -0
- package/dist/cli/capabilityContext/build.js +242 -0
- package/dist/cli/capabilityContext/closeout.js +233 -0
- package/dist/cli/capabilityContext/contract.js +179 -0
- package/dist/cli/capabilityContext/evidence.js +463 -0
- package/dist/cli/capabilityContext/index.js +3 -0
- package/dist/cli/capabilityContext/orchestration.js +131 -0
- package/dist/cli/capabilityContext/planState.js +260 -0
- package/dist/cli/capabilityContext/progress.js +142 -0
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +83 -0
- package/dist/cli/capabilityContext/slim.js +152 -0
- package/dist/cli/capabilityContext/startup.js +150 -0
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +56 -0
- package/dist/cli/capabilityContext.js +1 -2421
- package/dist/cli/commands/appHome.js +22 -0
- package/dist/cli/commands/capability.js +5 -12
- package/dist/cli/commands/compact.js +41 -13
- package/dist/cli/commands/doctor.js +127 -97
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +26 -44
- package/dist/cli/commands/personalGlossary.js +176 -0
- package/dist/cli/commands/prime/briefOrientation.js +747 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +190 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
- package/dist/cli/commands/prime/collectOrientationState.js +212 -0
- package/dist/cli/commands/prime/orientationOutput.js +397 -0
- package/dist/cli/commands/prime/types.js +1 -0
- package/dist/cli/commands/prime/v1Migration.js +38 -0
- package/dist/cli/commands/prime.js +80 -558
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +78 -53
- package/dist/cli/commands/report.js +96 -25
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +266 -143
- package/dist/cli/commands/state/decisions.js +387 -0
- package/dist/cli/commands/state/docs.js +70 -0
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +14 -0
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +14 -0
- package/dist/cli/commands/state/index.js +16 -0
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +25 -0
- package/dist/cli/commands/state/plan.js +14 -0
- package/dist/cli/commands/state/planTasks.js +154 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/progress.js +13 -0
- package/dist/cli/commands/state/shared.js +14 -0
- package/dist/cli/commands/state/todo.js +42 -0
- package/dist/cli/commands/state/write.js +434 -0
- package/dist/cli/commands/upgrade.js +146 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +272 -213
- package/dist/cli/commands/verify.js +24 -9
- package/dist/cli/contracts/bundleStatus.js +1 -0
- package/dist/cli/contracts/orientationState.js +1 -0
- package/dist/cli/dispatch/argvParser.js +32 -0
- package/dist/cli/dispatch/check.js +372 -0
- package/dist/cli/dispatch/commands.js +27 -0
- package/dist/cli/dispatch/index.js +207 -0
- package/dist/cli/dispatch/lifecycle.js +652 -0
- package/dist/cli/dispatch/prime.js +139 -0
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +63 -0
- package/dist/cli/dispatch/state.js +140 -0
- package/dist/cli/dispatch.js +1 -996
- package/dist/cli/errors.js +52 -0
- package/dist/cli/help.js +390 -43
- package/dist/cli/migrationRequired.js +87 -0
- package/dist/cli/orientation/attention.js +59 -0
- package/dist/cli/orientation/corpusCoverage.js +102 -0
- package/dist/cli/orientation.js +444 -173
- package/dist/cli/planArtifacts.js +350 -0
- package/dist/cli/planEvidence.js +157 -0
- package/dist/cli/planLifecycleState.js +36 -0
- package/dist/cli/planTaskIndex.js +11 -0
- package/dist/cli/preCutoverCommand.js +32 -0
- package/dist/cli/prime-blob.js +71 -3
- package/dist/cli/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +59 -0
- package/dist/cli/stateQuery.js +63 -14
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +46 -0
- package/dist/cli/todoReadinessSelection.js +192 -0
- package/dist/cli/todoSeverity.js +18 -0
- package/dist/core/atomicWriter.js +20 -0
- package/dist/core/developmentChannel.js +1 -0
- package/dist/core/developmentInvocation.js +374 -0
- package/dist/core/difflib.js +0 -1
- package/dist/core/envPaths.js +20 -0
- package/dist/core/jsonValue.js +5 -0
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +67 -3
- package/dist/core/shell.js +4 -0
- package/dist/core/skillIdentity.js +23 -0
- package/dist/core/sourceRoot.js +9 -12
- package/dist/core/text.js +10 -0
- package/dist/core/toml.js +0 -1
- package/dist/core/yaml.js +8 -1
- package/dist/eval/evalSkills.js +30 -26
- package/dist/eval/hybridRouteEvaluation.js +155 -0
- package/dist/eval/semanticEval.js +43 -20
- package/dist/eval/semanticFixtures.js +16 -5
- package/dist/hooks/common.js +11 -81
- package/dist/hooks/compaction/apply.js +446 -0
- package/dist/hooks/compaction/dryRun.js +184 -0
- package/dist/hooks/compaction/index.js +22 -0
- package/dist/hooks/compaction/parse.js +325 -0
- package/dist/hooks/compaction/retention.js +202 -0
- package/dist/hooks/compaction/status.js +360 -0
- package/dist/hooks/compaction/types.js +5 -0
- package/dist/hooks/validateArtifact/agentFacing.js +9 -0
- package/dist/hooks/validateArtifact/index.js +92 -0
- package/dist/hooks/validateArtifact/markdown.js +145 -0
- package/dist/hooks/validateArtifact/schema.js +546 -0
- package/dist/hooks/validateArtifact/traversal.js +107 -0
- package/dist/hooks/validateArtifact/violations.js +107 -0
- package/dist/migrate/v2HandoffManifest.js +452 -0
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +106 -0
- package/dist/registries/artifactProtocolIds.js +78 -0
- package/dist/registries/artifactRegistry.js +224 -63
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +141 -13
- package/dist/registries/evaluatorHandoffContract.js +170 -0
- package/dist/registries/evidenceTierContract.js +371 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryCaveatContract.js +67 -0
- package/dist/registries/glossaryConsumerContractValidation.js +787 -0
- package/dist/registries/glossaryEntryContract.js +757 -0
- package/dist/registries/glossaryTermIdentity.js +17 -0
- package/dist/registries/glossaryTermOccurrence.js +20 -0
- package/dist/registries/hybridRoute.js +274 -0
- package/dist/registries/hybridRouteReceipt.js +221 -0
- package/dist/registries/packagePublication.js +229 -0
- package/dist/registries/packageRegistry.js +187 -211
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +174 -0
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +385 -0
- package/dist/runtime/lifecycleAdapterContract.js +457 -0
- package/dist/runtime/lifecycleAdapters.js +777 -0
- package/dist/runtime/lifecycleAuthority.js +453 -0
- package/dist/runtime/lifecycleOperationContract.js +123 -0
- package/dist/runtime/lifecycleOperations.js +634 -0
- package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
- package/dist/runtime/lifecyclePublication.js +415 -0
- package/dist/runtime/lifecycleSnapshot.js +438 -0
- package/dist/runtime/nativeResourceCleanup.js +502 -0
- package/dist/setup/opencode.js +20 -0
- package/dist/setup/opencodeConstants.js +1 -0
- package/dist/setup/sharedSkill.js +45 -0
- package/dist/setup/smokeChecks.js +21 -82
- package/dist/state/archiveDiscovery.js +580 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archiveRecovery.js +237 -0
- package/dist/state/archiveReplay.js +53 -0
- package/dist/state/canonicalMigrationRecord.js +36 -0
- package/dist/state/changelog.js +221 -0
- package/dist/state/decisionEntities.js +367 -0
- package/dist/state/decisionLegacyValidation.js +215 -0
- package/dist/state/decisionMigrationProvenance.js +199 -0
- package/dist/state/decisionOverlay.js +254 -0
- package/dist/state/decisionRevision.js +256 -0
- package/dist/state/decisionRevisionMigration.js +89 -0
- package/dist/state/directRetrieval.js +323 -0
- package/dist/state/durability.js +324 -0
- package/dist/state/entityCutover.js +459 -0
- package/dist/state/entityCutoverGit.js +127 -0
- package/dist/state/entityGlossaryAuthority.js +13 -0
- package/dist/state/entityListProjection.js +187 -0
- package/dist/state/entityListRuntimeRegistry.js +85 -0
- package/dist/state/entityMigrationCausality.js +97 -0
- package/dist/state/entityMigrationIdentity.js +5 -0
- package/dist/state/entityMigrationPreview.js +846 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +806 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +896 -0
- package/dist/state/exactReplacementRecovery.js +18 -0
- package/dist/state/experimentArchive.js +63 -0
- package/dist/state/experimentIdentity.js +202 -0
- package/dist/state/healthEntities.js +262 -0
- package/dist/state/healthEntityValidation.js +18 -0
- package/dist/state/healthRepair.js +69 -0
- package/dist/state/installRoot.js +64 -25
- package/dist/state/legacyEntityCutoverEvidence.js +65 -0
- package/dist/state/legacyIdentity.js +47 -0
- package/dist/state/legacySummaryRecord.js +6 -0
- package/dist/state/listAccounting.js +54 -0
- package/dist/state/listClassification.js +17 -0
- package/dist/state/listCursor.js +42 -0
- package/dist/state/listRetrieval.js +781 -0
- package/dist/state/migrationSourceBinding.js +30 -0
- package/dist/state/objectiveExperimentEntities.js +322 -0
- package/dist/state/planEntities.js +530 -0
- package/dist/state/planIdentity.js +47 -0
- package/dist/state/planRetrieval.js +313 -0
- package/dist/state/planTaskRetrieval.js +294 -0
- package/dist/state/progressEntities.js +512 -0
- package/dist/state/progressGlossaryCaveat.js +168 -0
- package/dist/state/progressPublicationOrder.js +19 -0
- package/dist/state/projectRoot.js +62 -0
- package/dist/state/projectionPolicy.js +190 -0
- package/dist/state/retrievalAuthority.js +156 -0
- package/dist/state/safeProjectFile.js +155 -0
- package/dist/state/startupAnalysis/benchmark.js +432 -0
- package/dist/state/startupAnalysis/contract.js +160 -0
- package/dist/state/startupAnalysis/helpers.js +286 -0
- package/dist/state/startupAnalysis/index.js +6 -0
- package/dist/state/startupAnalysis/metrics.js +340 -0
- package/dist/state/startupAnalysis/records.js +198 -0
- package/dist/state/startupAnalysis/report.js +111 -0
- package/dist/state/startupAnalysis/threshold.js +512 -0
- package/dist/state/startupAnalysis.js +2 -1953
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +85 -0
- package/dist/state/stateStorageAuthority.js +47 -0
- package/dist/state/summaryEntityRead.js +25 -0
- package/dist/state/summaryMigrationProvenance.js +66 -0
- package/dist/state/summarySourceRowAuthority.js +36 -0
- package/dist/state/todoDocsEntities.js +1064 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +132 -0
- package/dist/state/todoReconciliationInspection.js +173 -0
- package/dist/state/todoReconciliationRepair.js +170 -0
- package/dist/state/todoReconciliationTransaction.js +582 -0
- package/dist/state/write/assign.js +20 -0
- package/dist/state/write/candidateMutation.js +269 -0
- package/dist/state/write/errors.js +11 -0
- package/dist/state/write/experimentPublication.js +192 -0
- package/dist/state/write/explain.js +332 -0
- package/dist/state/write/fields.js +61 -0
- package/dist/state/write/glossaryPublication.js +263 -0
- package/dist/state/write/grammar.js +280 -0
- package/dist/state/write/helpers.js +29 -0
- package/dist/state/write/index.js +12 -0
- package/dist/state/write/input.js +367 -0
- package/dist/state/write/lock.js +837 -0
- package/dist/state/write/mutation.js +234 -0
- package/dist/state/write/operations.js +169 -0
- package/dist/state/write/planEvaluation.js +128 -0
- package/dist/state/write/planPublication.js +179 -0
- package/dist/state/write/runtimeOperations.js +142 -0
- package/dist/state/write/serialize.js +1 -0
- package/dist/state/write/transaction.js +52 -0
- package/dist/state/write/validate.js +7 -0
- package/dist/upgrade/appContentRefresh.js +383 -0
- package/dist/upgrade/appModel.js +8 -7
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +33 -0
- package/dist/upgrade/channels.js +12 -8
- package/dist/upgrade/compatibility.js +56 -21
- package/dist/upgrade/doctor.js +197 -192
- package/dist/upgrade/doctorClassifier.js +187 -0
- package/dist/upgrade/installedHooksRetirement.js +196 -0
- package/dist/upgrade/legacyAgentCleanup.js +282 -0
- package/dist/upgrade/lifecycleUpgrade.js +113 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +155 -0
- package/dist/upgrade/npxPlatformStatus.js +22 -0
- package/dist/upgrade/projectIntegration.js +145 -187
- package/dist/upgrade/projectIntegrationDecision.js +50 -0
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +278 -352
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +263 -59
- package/dist/upgrade/v3CapabilitySurface.js +14 -0
- package/dist/upgrade/versionResolution.js +12 -5
- package/dist/validate/activationArtifactEvidence.js +844 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +515 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +5 -11
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +144 -15
- package/dist/validate/crossCapability.js +15 -10
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +73 -37
- package/dist/validate/v1LegacyCruft.js +131 -0
- package/dist/validate/vocabularyAuthority.js +303 -0
- package/package.json +53 -27
- package/bundle/references/adapters/cursor.md +0 -213
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/analysis/benchmark.md +0 -267
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/meta/documentation-inventory.md +0 -43
- package/bundle/references/v1-section-mapping.md +0 -47
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
- package/bundle/skills/agentera/agents/hej.toml +0 -6
- package/bundle/skills/agentera/agents/inspektera.toml +0 -6
- package/bundle/skills/agentera/agents/inspirera.toml +0 -6
- package/bundle/skills/agentera/agents/optimera.toml +0 -6
- package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
- package/bundle/skills/agentera/agents/planera.toml +0 -6
- package/bundle/skills/agentera/agents/profilera.toml +0 -6
- package/bundle/skills/agentera/agents/realisera.toml +0 -6
- package/bundle/skills/agentera/agents/resonera.toml +0 -6
- package/bundle/skills/agentera/agents/visionera.toml +0 -6
- package/bundle/skills/agentera/agents/visualisera.toml +0 -6
- package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
- package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
- package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
- package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
- package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
- package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
- package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
- package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
- package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
- package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
- package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
- package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
- package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
- package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
- package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
- package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
- package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
- package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
- package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
- package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
- package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
- package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
- package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
- package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
- package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
- package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
- package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
- package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
- package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
- package/bundle/skills/agentera/references/contract.md +0 -1039
- package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
- package/bundle/skills/hej/SKILL.md +0 -69
- package/bundle/skills/hej/agents/hej.toml +0 -11
- package/bundle/skills/hej/agents/openai.yaml +0 -8
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/cli/appContext.js.map +0 -1
- package/dist/cli/argvalidate.js.map +0 -1
- package/dist/cli/capabilityContext.js.map +0 -1
- package/dist/cli/commands/backfill.js +0 -84
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/cli/commands/capability.js.map +0 -1
- package/dist/cli/commands/compact.js.map +0 -1
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state.js +0 -1012
- package/dist/cli/commands/state.js.map +0 -1
- package/dist/cli/commands/upgrade.js.map +0 -1
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/commands/verify.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/git.js +0 -43
- package/dist/core/git.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/toml.js.map +0 -1
- package/dist/core/yaml.js.map +0 -1
- package/dist/eval/evalSkills.js.map +0 -1
- package/dist/eval/semanticEval.js.map +0 -1
- package/dist/eval/semanticFixtures.js.map +0 -1
- package/dist/hooks/common.js.map +0 -1
- package/dist/hooks/compaction.js +0 -935
- package/dist/hooks/compaction.js.map +0 -1
- package/dist/hooks/cursorPreToolUse.js +0 -19
- package/dist/hooks/cursorPreToolUse.js.map +0 -1
- package/dist/hooks/cursorSessionStart.js +0 -71
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -209
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -212
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact.js +0 -933
- package/dist/hooks/validateArtifact.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/capabilityContract.js.map +0 -1
- package/dist/registries/packageRegistry.js.map +0 -1
- package/dist/registries/runtimeAdapterRegistry.js +0 -315
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/setup/codex.js +0 -1056
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -127
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/doctor.js +0 -1297
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/progressCommit.js +0 -289
- package/dist/state/progressCommit.js.map +0 -1
- package/dist/state/startupAnalysis.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
- package/dist/upgrade/versionResolution.js.map +0 -1
- package/dist/validate/appHomeContract.js.map +0 -1
- package/dist/validate/capability.js.map +0 -1
- package/dist/validate/crossCapability.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -772
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `state decisions` query (decisions.yaml + archive) plus the
|
|
3
|
+
* decision context enrichment utilities consumed by prime.
|
|
4
|
+
*
|
|
5
|
+
* The contract for decision context: never infer satisfaction from
|
|
6
|
+
* downstream references, commits, or compacted history. Only
|
|
7
|
+
* `state == user_confirmed_satisfied` with explicit
|
|
8
|
+
* `user_confirmation` metadata is reported as user-confirmed
|
|
9
|
+
* satisfied; everything else carries a `review_needed` flag and
|
|
10
|
+
* a `caveats` array.
|
|
11
|
+
*/
|
|
12
|
+
import { extractEntries, } from "../../stateQuery.js";
|
|
13
|
+
import { out } from "./shared.js";
|
|
14
|
+
import { hydrateDecisionRecords, } from "../../../state/decisionOverlay.js";
|
|
15
|
+
import { listDecisionEntities } from "../../../state/decisionEntities.js";
|
|
16
|
+
import { emitStructured } from "../../structured.js";
|
|
17
|
+
import YAML from "yaml";
|
|
18
|
+
const DECISION_CONTEXT_FIELDS = [
|
|
19
|
+
"number",
|
|
20
|
+
"date",
|
|
21
|
+
"question",
|
|
22
|
+
"context",
|
|
23
|
+
"alternatives",
|
|
24
|
+
"choice",
|
|
25
|
+
"reasoning",
|
|
26
|
+
"confidence",
|
|
27
|
+
"feeds_into",
|
|
28
|
+
"satisfaction",
|
|
29
|
+
];
|
|
30
|
+
const PRIORITY_FIELDS = [
|
|
31
|
+
"number", "name", "title", "date", "timestamp", "status",
|
|
32
|
+
"phase", "choice", "grade", "type", "label", "trajectory", "confidence",
|
|
33
|
+
];
|
|
34
|
+
const DECISION_ARCHIVE_RE = /Decision\s+(?<number>\d+)(?:\s+\((?<date>\d{4}-\d{2}-\d{2})\))?:\s*(?<summary>.*)/;
|
|
35
|
+
export function displayFields(fields, limit = 6) {
|
|
36
|
+
const ordered = PRIORITY_FIELDS.filter((p) => p in fields);
|
|
37
|
+
for (const fn of Object.keys(fields)) {
|
|
38
|
+
if (!ordered.includes(fn))
|
|
39
|
+
ordered.push(fn);
|
|
40
|
+
}
|
|
41
|
+
return ordered.slice(0, limit);
|
|
42
|
+
}
|
|
43
|
+
function isEmptyValue(v) {
|
|
44
|
+
// cast: v is a field value from a parsed decisions.yaml entry (IO boundary)
|
|
45
|
+
return (v === null ||
|
|
46
|
+
v === undefined ||
|
|
47
|
+
v === "" ||
|
|
48
|
+
(Array.isArray(v) && v.length === 0) ||
|
|
49
|
+
(typeof v === "object" && !Array.isArray(v) && Object.keys(v).length === 0));
|
|
50
|
+
}
|
|
51
|
+
function decisionArchiveEntry(entry) {
|
|
52
|
+
// cast: entry comes from the parsed decisions archive array (YAML IO boundary)
|
|
53
|
+
const archiveEntry = entry && typeof entry === "object" && !Array.isArray(entry) ? { ...entry } : { summary: String(entry) };
|
|
54
|
+
archiveEntry.compacted = true;
|
|
55
|
+
const summary = String(archiveEntry.summary ?? "");
|
|
56
|
+
const match = DECISION_ARCHIVE_RE.exec(summary);
|
|
57
|
+
if (match && match.groups) {
|
|
58
|
+
if (!("number" in archiveEntry))
|
|
59
|
+
archiveEntry.number = parseInt(match.groups.number, 10);
|
|
60
|
+
if (match.groups.date && !("date" in archiveEntry))
|
|
61
|
+
archiveEntry.date = match.groups.date;
|
|
62
|
+
}
|
|
63
|
+
return archiveEntry;
|
|
64
|
+
}
|
|
65
|
+
export function extractDecisionEntries(data) {
|
|
66
|
+
if (!data || typeof data !== "object" || Array.isArray(data))
|
|
67
|
+
return extractEntries(data);
|
|
68
|
+
// cast: data is the parsed decisions artifact from loadArtifact (YAML IO boundary)
|
|
69
|
+
const d = data;
|
|
70
|
+
const decisions = d.decisions ?? [];
|
|
71
|
+
const archive = d.archive ?? [];
|
|
72
|
+
const entries = Array.isArray(decisions)
|
|
73
|
+
? decisions.filter((e) => Boolean(e && typeof e === "object" && !Array.isArray(e)))
|
|
74
|
+
: [];
|
|
75
|
+
if (Array.isArray(archive)) {
|
|
76
|
+
for (const entry of archive)
|
|
77
|
+
entries.push(decisionArchiveEntry(entry));
|
|
78
|
+
}
|
|
79
|
+
return entries;
|
|
80
|
+
}
|
|
81
|
+
export function hydrateDecisionEntries(entries, projectRoot = process.cwd()) {
|
|
82
|
+
return hydrateDecisionRecords(entries, projectRoot);
|
|
83
|
+
}
|
|
84
|
+
function decisionFieldMissing(entry, field) {
|
|
85
|
+
return isEmptyValue(entry[field]);
|
|
86
|
+
}
|
|
87
|
+
function decisionDownstreamReferences(entry) {
|
|
88
|
+
const value = entry.feeds_into;
|
|
89
|
+
if (value === null || value === undefined || value === "")
|
|
90
|
+
return null;
|
|
91
|
+
let refs;
|
|
92
|
+
if (Array.isArray(value)) {
|
|
93
|
+
refs = value.map((item) => String(item).trim()).filter((s) => s);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
refs = String(value)
|
|
97
|
+
.split(",")
|
|
98
|
+
.map((part) => part.trim())
|
|
99
|
+
.filter((s) => s);
|
|
100
|
+
}
|
|
101
|
+
if (refs.length === 0)
|
|
102
|
+
return null;
|
|
103
|
+
return refs.map((ref) => ({ source_field: "feeds_into", reference: ref }));
|
|
104
|
+
}
|
|
105
|
+
export function decisionSatisfactionContext(entry) {
|
|
106
|
+
const satisfaction = entry.satisfaction;
|
|
107
|
+
if (!satisfaction || typeof satisfaction !== "object" || Array.isArray(satisfaction)) {
|
|
108
|
+
return {
|
|
109
|
+
state: null,
|
|
110
|
+
evidence: null,
|
|
111
|
+
user_confirmation: null,
|
|
112
|
+
review_needed: true,
|
|
113
|
+
source: "missing_legacy_state",
|
|
114
|
+
caveats: ["Missing legacy satisfaction state is not treated as satisfied."],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// cast: satisfaction is read from a parsed decisions.yaml entry (IO boundary)
|
|
118
|
+
const sat = satisfaction;
|
|
119
|
+
const state = sat.state;
|
|
120
|
+
const evidence = sat.evidence ?? null;
|
|
121
|
+
const userConfirmation = sat.user_confirmation ?? null;
|
|
122
|
+
const explicitReviewNeeded = sat.review_needed === true;
|
|
123
|
+
let caveats = [];
|
|
124
|
+
let reviewNeeded = true;
|
|
125
|
+
let source = "decision.satisfaction";
|
|
126
|
+
if (state === null || state === undefined || state === "") {
|
|
127
|
+
source = "missing_legacy_state";
|
|
128
|
+
caveats.push("Missing legacy satisfaction state is not treated as satisfied.");
|
|
129
|
+
}
|
|
130
|
+
else if (state === "user_confirmed_satisfied") {
|
|
131
|
+
// cast: user_confirmation is read from a parsed decisions.yaml entry (IO boundary)
|
|
132
|
+
const confirmation = userConfirmation && typeof userConfirmation === "object" && !Array.isArray(userConfirmation)
|
|
133
|
+
? userConfirmation
|
|
134
|
+
: {};
|
|
135
|
+
reviewNeeded =
|
|
136
|
+
!isNonEmptyText(confirmation.confirmed_by) || !isNonEmptyText(confirmation.confirmed_at);
|
|
137
|
+
if (reviewNeeded)
|
|
138
|
+
caveats.push("User-confirmed satisfaction is missing explicit user confirmation metadata.");
|
|
139
|
+
}
|
|
140
|
+
else if (state === "provisionally_satisfied") {
|
|
141
|
+
if (!isNonEmptyText(evidence))
|
|
142
|
+
caveats.push("Provisional satisfaction is missing concrete evidence.");
|
|
143
|
+
caveats.push("Provisional satisfaction still requires user confirmation.");
|
|
144
|
+
}
|
|
145
|
+
else if (state === "open") {
|
|
146
|
+
caveats.push("Satisfaction state is open and requires review.");
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
caveats.push("Satisfaction state is missing or unrecognized and requires review.");
|
|
150
|
+
}
|
|
151
|
+
if (explicitReviewNeeded) {
|
|
152
|
+
reviewNeeded = true;
|
|
153
|
+
caveats.push("Decision satisfaction is explicitly marked review_needed.");
|
|
154
|
+
}
|
|
155
|
+
const originalCaveats = sat.caveats;
|
|
156
|
+
if (Array.isArray(originalCaveats))
|
|
157
|
+
caveats = [...originalCaveats.map((c) => String(c)), ...caveats];
|
|
158
|
+
else if (typeof originalCaveats === "string")
|
|
159
|
+
caveats = [originalCaveats, ...caveats];
|
|
160
|
+
const enriched = { ...sat };
|
|
161
|
+
if (!("evidence" in enriched))
|
|
162
|
+
enriched.evidence = evidence;
|
|
163
|
+
if (!("user_confirmation" in enriched))
|
|
164
|
+
enriched.user_confirmation = userConfirmation;
|
|
165
|
+
enriched.review_needed = reviewNeeded;
|
|
166
|
+
enriched.source = source;
|
|
167
|
+
enriched.caveats = caveats;
|
|
168
|
+
return enriched;
|
|
169
|
+
}
|
|
170
|
+
function isNonEmptyText(value) {
|
|
171
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
172
|
+
}
|
|
173
|
+
export function decisionContextEntry(entry, options = {}) {
|
|
174
|
+
const enriched = { ...entry };
|
|
175
|
+
const inferOutcome = options.inferOutcome !== false;
|
|
176
|
+
if (inferOutcome &&
|
|
177
|
+
(enriched.outcome === null || enriched.outcome === undefined || enriched.outcome === "") &&
|
|
178
|
+
enriched.choice !== null && enriched.choice !== undefined && enriched.choice !== "") {
|
|
179
|
+
enriched.outcome = enriched.choice;
|
|
180
|
+
}
|
|
181
|
+
const compacted = Boolean(enriched.compacted) ||
|
|
182
|
+
("summary" in enriched &&
|
|
183
|
+
["question", "reasoning", "confidence"].some((field) => decisionFieldMissing(enriched, field)));
|
|
184
|
+
const missingFields = DECISION_CONTEXT_FIELDS.filter((field) => decisionFieldMissing(enriched, field));
|
|
185
|
+
if ((inferOutcome && decisionFieldMissing(enriched, "choice") && decisionFieldMissing(enriched, "outcome")) ||
|
|
186
|
+
(!inferOutcome && decisionFieldMissing(enriched, "outcome"))) {
|
|
187
|
+
missingFields.push("outcome");
|
|
188
|
+
}
|
|
189
|
+
const downstreamReferences = decisionDownstreamReferences(enriched);
|
|
190
|
+
const caveats = [];
|
|
191
|
+
if (compacted)
|
|
192
|
+
caveats.push("Decision entry is compacted; full decision context is not available in this CLI result.");
|
|
193
|
+
if (missingFields.length > 0)
|
|
194
|
+
caveats.push("Decision entry is missing one or more full-detail context fields.");
|
|
195
|
+
if (downstreamReferences === null) {
|
|
196
|
+
caveats.push("No explicit downstream consequence references were present; none were inferred.");
|
|
197
|
+
}
|
|
198
|
+
const satisfaction = decisionSatisfactionContext(enriched);
|
|
199
|
+
if (satisfaction.review_needed) {
|
|
200
|
+
caveats.push("Decision satisfaction requires user review; missing legacy state is not treated as satisfied.");
|
|
201
|
+
}
|
|
202
|
+
enriched.satisfaction = satisfaction;
|
|
203
|
+
enriched.downstream_consequence_references = downstreamReferences;
|
|
204
|
+
enriched.context_complete =
|
|
205
|
+
!compacted && missingFields.length === 0 && downstreamReferences !== null && !satisfaction.review_needed;
|
|
206
|
+
enriched.missing_fields = missingFields;
|
|
207
|
+
enriched.compacted = compacted;
|
|
208
|
+
enriched.caveats = caveats;
|
|
209
|
+
return enriched;
|
|
210
|
+
}
|
|
211
|
+
export function decisionSourceContract(source, entries, filters) {
|
|
212
|
+
const sourceExists = Boolean(source.exists);
|
|
213
|
+
const activeFilters = Object.fromEntries(Object.entries(filters).filter(([, v]) => v !== null && v !== undefined));
|
|
214
|
+
const filteredNoMatch = sourceExists && Object.keys(activeFilters).length > 0 && entries.length === 0;
|
|
215
|
+
const compactedEntries = entries.filter((e) => e.compacted).length;
|
|
216
|
+
const entriesWithMissingFields = entries.filter((e) => Array.isArray(e.missing_fields) && e.missing_fields.length > 0).length;
|
|
217
|
+
const entriesWithoutDownstream = entries.filter((e) => e.downstream_consequence_references === null).length;
|
|
218
|
+
const entriesRequiringSatisfactionReview = entries.filter((e) => e.satisfaction && typeof e.satisfaction === "object" && !Array.isArray(e.satisfaction) && e.satisfaction.review_needed).length;
|
|
219
|
+
const userConfirmedSatisfied = entries.filter((e) => e.satisfaction &&
|
|
220
|
+
typeof e.satisfaction === "object" &&
|
|
221
|
+
!Array.isArray(e.satisfaction) &&
|
|
222
|
+
e.satisfaction.state === "user_confirmed_satisfied" &&
|
|
223
|
+
!e.satisfaction.review_needed).length;
|
|
224
|
+
const completeForReturned = sourceExists && entries.every((e) => e.context_complete === true);
|
|
225
|
+
const completeForNormalDeliberation = sourceExists;
|
|
226
|
+
const caveats = [
|
|
227
|
+
"Downstream consequence references are derived only from explicit structured feeds_into values; no references are inferred.",
|
|
228
|
+
"Compacted archive decisions are not expanded by this command and are not complete full-detail decision context.",
|
|
229
|
+
];
|
|
230
|
+
if (!sourceExists)
|
|
231
|
+
caveats.push("Decision artifact is missing or unavailable; no decision context is available from this command result.");
|
|
232
|
+
if (filteredNoMatch)
|
|
233
|
+
caveats.push("Filtered result is empty; no returned decisions match the filter, but the decision artifact was available.");
|
|
234
|
+
if (entriesWithMissingFields)
|
|
235
|
+
caveats.push("One or more returned decisions are missing full-detail context fields.");
|
|
236
|
+
if (entriesWithoutDownstream)
|
|
237
|
+
caveats.push("One or more returned decisions lack explicit downstream consequence references.");
|
|
238
|
+
if (entriesRequiringSatisfactionReview)
|
|
239
|
+
caveats.push("One or more returned decisions require satisfaction review; satisfaction is never inferred from downstream references.");
|
|
240
|
+
return {
|
|
241
|
+
artifact: "decisions",
|
|
242
|
+
canonical_artifact_label: "decisions",
|
|
243
|
+
path: source.path,
|
|
244
|
+
complete_for_returned_decisions: completeForReturned,
|
|
245
|
+
complete_for_decision_context: completeForReturned,
|
|
246
|
+
complete_for_returned_full_detail: completeForReturned,
|
|
247
|
+
complete_for_normal_deliberation_context: completeForNormalDeliberation,
|
|
248
|
+
completeness: {
|
|
249
|
+
returned_decisions: entries.length,
|
|
250
|
+
context_complete: completeForReturned,
|
|
251
|
+
returned_full_detail_complete: completeForReturned,
|
|
252
|
+
normal_deliberation_context: completeForNormalDeliberation,
|
|
253
|
+
filtered_no_match: filteredNoMatch,
|
|
254
|
+
source_exists: sourceExists,
|
|
255
|
+
compacted_entries: compactedEntries,
|
|
256
|
+
entries_with_missing_fields: entriesWithMissingFields,
|
|
257
|
+
entries_without_downstream_references: entriesWithoutDownstream,
|
|
258
|
+
entries_requiring_satisfaction_review: entriesRequiringSatisfactionReview,
|
|
259
|
+
user_confirmed_satisfied_entries: userConfirmedSatisfied,
|
|
260
|
+
},
|
|
261
|
+
included_fields: [
|
|
262
|
+
...DECISION_CONTEXT_FIELDS,
|
|
263
|
+
"outcome",
|
|
264
|
+
"downstream_consequence_references",
|
|
265
|
+
"context_complete",
|
|
266
|
+
"missing_fields",
|
|
267
|
+
"compacted",
|
|
268
|
+
"caveats",
|
|
269
|
+
],
|
|
270
|
+
satisfaction_context: {
|
|
271
|
+
owner: "decision entry",
|
|
272
|
+
state_field: "satisfaction.state",
|
|
273
|
+
evidence_field: "satisfaction.evidence",
|
|
274
|
+
confirmation_field: "satisfaction.user_confirmation",
|
|
275
|
+
review_needed_field: "satisfaction.review_needed",
|
|
276
|
+
confirmation_policy: "Only satisfaction.state=user_confirmed_satisfied with explicit user_confirmation metadata is reported as user-confirmed satisfied.",
|
|
277
|
+
non_inference_policy: "Do not infer satisfaction from feeds_into, commits, downstream files, generated references, or compacted history.",
|
|
278
|
+
},
|
|
279
|
+
normal_deliberation_context: {
|
|
280
|
+
use_complete_for_normal_deliberation_context: true,
|
|
281
|
+
legacy_full_detail_signal: "complete_for_decision_context",
|
|
282
|
+
guidance: "For normal deliberation, use returned entries plus missing_fields, compacted, caveats, " +
|
|
283
|
+
"and satisfaction review state. Do not use the legacy full-detail completeness flag " +
|
|
284
|
+
"as a reason to reread the raw decision artifact.",
|
|
285
|
+
},
|
|
286
|
+
decision_context_truth_table: {
|
|
287
|
+
full_detail_entries: {
|
|
288
|
+
full_detail_complete: true,
|
|
289
|
+
normal_deliberation_context_complete: true,
|
|
290
|
+
raw_artifact_read_required: false,
|
|
291
|
+
},
|
|
292
|
+
compacted_archive_entries: {
|
|
293
|
+
full_detail_complete: false,
|
|
294
|
+
normal_deliberation_context_complete: true,
|
|
295
|
+
raw_artifact_read_required: false,
|
|
296
|
+
carry_forward: ["missing_fields", "compacted", "caveats"],
|
|
297
|
+
},
|
|
298
|
+
entries_with_missing_full_detail_fields: {
|
|
299
|
+
full_detail_complete: false,
|
|
300
|
+
normal_deliberation_context_complete: true,
|
|
301
|
+
raw_artifact_read_required: false,
|
|
302
|
+
carry_forward: ["missing_fields", "caveats"],
|
|
303
|
+
},
|
|
304
|
+
satisfaction_review_needed: {
|
|
305
|
+
full_detail_complete: false,
|
|
306
|
+
normal_deliberation_context_complete: true,
|
|
307
|
+
raw_artifact_read_required: false,
|
|
308
|
+
carry_forward: ["satisfaction.review_needed", "caveats"],
|
|
309
|
+
},
|
|
310
|
+
filtered_no_match: {
|
|
311
|
+
full_detail_complete: true,
|
|
312
|
+
normal_deliberation_context_complete: true,
|
|
313
|
+
raw_artifact_read_required: false,
|
|
314
|
+
meaning: "The artifact exists, but no returned decisions matched the filter.",
|
|
315
|
+
},
|
|
316
|
+
missing_or_unavailable_artifact: {
|
|
317
|
+
full_detail_complete: false,
|
|
318
|
+
normal_deliberation_context_complete: false,
|
|
319
|
+
raw_artifact_read_required: false,
|
|
320
|
+
meaning: "No decision state is available from the CLI result; use CLI fallback or diagnostics before raw artifact repair.",
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
missing_full_detail_boundary: {
|
|
324
|
+
applies_when: "returned decisions have missing_fields or context_complete=false",
|
|
325
|
+
normal_behavior: "Use present structured fields only and preserve missing_fields/caveats downstream.",
|
|
326
|
+
raw_artifact_read_required: false,
|
|
327
|
+
do_not: "Do not infer absent reasoning, alternatives, confidence, feeds_into, outcome, or downstream references.",
|
|
328
|
+
},
|
|
329
|
+
missing_artifact_boundary: {
|
|
330
|
+
applies_when: "source.exists=false",
|
|
331
|
+
normal_behavior: "Treat decision context as unavailable from this result; do not infer historical decisions.",
|
|
332
|
+
raw_artifact_read_required: false,
|
|
333
|
+
diagnostic_boundary: "Raw artifact access is reserved for explicit artifact repair/corruption or CLI-defect investigation.",
|
|
334
|
+
},
|
|
335
|
+
filtered_result_boundary: {
|
|
336
|
+
applies_when: "filters are present and entries=[] while source.exists=true",
|
|
337
|
+
normal_behavior: "Treat the result as no matching returned decisions, not as missing decision state.",
|
|
338
|
+
raw_artifact_read_required: false,
|
|
339
|
+
},
|
|
340
|
+
satisfaction_review_boundary: {
|
|
341
|
+
applies_when: "one or more entries have satisfaction.review_needed=true",
|
|
342
|
+
normal_behavior: "Carry satisfaction review pressure forward; only user confirmation can make a decision user-confirmed satisfied.",
|
|
343
|
+
raw_artifact_read_required: false,
|
|
344
|
+
do_not: "Do not infer satisfaction from downstream references, commits, generated files, or compacted history.",
|
|
345
|
+
},
|
|
346
|
+
compacted_history_boundary: {
|
|
347
|
+
applies_when: "returned entries have compacted=true",
|
|
348
|
+
normal_behavior: "Use the compact summary and retained fields; preserve compacted/missing_fields/caveats downstream.",
|
|
349
|
+
raw_artifact_read_required: false,
|
|
350
|
+
do_not: "Do not expand archive decisions or reconstruct missing context from git history.",
|
|
351
|
+
},
|
|
352
|
+
raw_artifact_access_boundary: {
|
|
353
|
+
normal_deliberation: "skip raw decision-state reads when complete_for_normal_deliberation_context=true",
|
|
354
|
+
allowed_raw_artifact_uses: [
|
|
355
|
+
"Discuss-owned decision writes or repairs",
|
|
356
|
+
"artifact corruption diagnostics",
|
|
357
|
+
"CLI defect investigation",
|
|
358
|
+
],
|
|
359
|
+
},
|
|
360
|
+
raw_artifact_reads_required: false,
|
|
361
|
+
raw_artifact_read_policy: "Use `agentera state decisions list --limit 20 --format json` for bounded normal deliberation discovery; " +
|
|
362
|
+
"use `agentera state decisions get --id ID --format json` for exact detail, and key normal use off " +
|
|
363
|
+
"complete_for_normal_deliberation_context. " +
|
|
364
|
+
"Do not read raw decision state unless investigating entity corruption or CLI defects; " +
|
|
365
|
+
"historical compacted gaps are exposed through missing_fields and caveats.",
|
|
366
|
+
caveats,
|
|
367
|
+
fallback_behavior: {
|
|
368
|
+
normal: "Use this command's entries and source_contract; no raw decision artifact read is required for returned full-detail or compacted decision entries.",
|
|
369
|
+
filtered_result: "The same per-decision guarantees apply after filters; an empty filtered result means no matching returned decisions.",
|
|
370
|
+
missing_or_incomplete: "If a required field is missing, treat only the present structured fields as authoritative and do not infer absent context.",
|
|
371
|
+
satisfaction: "Use only each entry's satisfaction object for satisfaction state. Missing, open, provisional, or unconfirmed satisfaction requires review and must not be reported as user-confirmed satisfied.",
|
|
372
|
+
compacted_history: "Compacted archive decisions are included with explicit missing_fields and caveats; treat absent historical context as unavailable during normal deliberation.",
|
|
373
|
+
},
|
|
374
|
+
fallback_policy: "If the decision artifact is missing or CLI state appears defective, use CLI fallback/diagnostic paths before raw artifact repair; do not raw-read merely because returned decisions are compacted or incomplete.",
|
|
375
|
+
filters: activeFilters,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
export function queryDecisions(args, _schemas, io) {
|
|
379
|
+
const output = out(io);
|
|
380
|
+
const format = args.format ?? "text";
|
|
381
|
+
const response = listDecisionEntities(process.cwd(), args.limit ?? undefined, args.topic ?? undefined, args.cursor ?? undefined, { format });
|
|
382
|
+
if (format === "text")
|
|
383
|
+
output(YAML.stringify(response));
|
|
384
|
+
else
|
|
385
|
+
emitStructured(response, format, output);
|
|
386
|
+
return 0;
|
|
387
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import YAML from "yaml";
|
|
3
|
+
import { StateRetrievalFailure } from "../../../state/directRetrieval.js";
|
|
4
|
+
import { listTodoDocsEntities } from "../../../state/todoDocsEntities.js";
|
|
5
|
+
import { artifactPath, discoverSchemasDir } from "../../appContext.js";
|
|
6
|
+
import { registryArtifactPath } from "../../orientation.js";
|
|
7
|
+
import { capabilityStartupComplete } from "../../startupCompletenessContract.js";
|
|
8
|
+
import { asList, loadArtifact } from "../../stateQuery.js";
|
|
9
|
+
import { emitStructured } from "../../structured.js";
|
|
10
|
+
import { err, out } from "./shared.js";
|
|
11
|
+
export function queryDocs(args, schemas, io) {
|
|
12
|
+
const output = out(io);
|
|
13
|
+
const format = args.format ?? "text";
|
|
14
|
+
const profilePath = registryArtifactPath("profile", discoverSchemasDir());
|
|
15
|
+
const profileStatus = fs.existsSync(profilePath) ? "loaded" : "not found";
|
|
16
|
+
const info = schemas.docs;
|
|
17
|
+
if (!info)
|
|
18
|
+
throw new Error("docs schema is unavailable");
|
|
19
|
+
const singletonPath = artifactPath(info, "docs");
|
|
20
|
+
const data = loadArtifact(singletonPath);
|
|
21
|
+
try {
|
|
22
|
+
const singleton = data !== null && typeof data === "object" && !Array.isArray(data)
|
|
23
|
+
? data
|
|
24
|
+
: {};
|
|
25
|
+
const mapping = asList(singleton.mapping);
|
|
26
|
+
const coverage = singleton.coverage && typeof singleton.coverage === "object" && !Array.isArray(singleton.coverage)
|
|
27
|
+
? singleton.coverage
|
|
28
|
+
: {};
|
|
29
|
+
const conventions = singleton.conventions && typeof singleton.conventions === "object" && !Array.isArray(singleton.conventions)
|
|
30
|
+
? singleton.conventions
|
|
31
|
+
: {};
|
|
32
|
+
const summary = {
|
|
33
|
+
last_audit: singleton.last_audit,
|
|
34
|
+
conventions,
|
|
35
|
+
mapping,
|
|
36
|
+
mapping_entries: mapping.length,
|
|
37
|
+
coverage,
|
|
38
|
+
source_contract: {
|
|
39
|
+
capability_startup_complete: capabilityStartupComplete({ profileStatus }),
|
|
40
|
+
raw_artifact_reads_required: false,
|
|
41
|
+
inventory_authority: "canonical_entity_files",
|
|
42
|
+
singleton_authority: singletonPath,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
const reservedUtf8Bytes = Math.max(Buffer.byteLength(JSON.stringify({ summary }, null, 2)), Buffer.byteLength(YAML.stringify({ summary }))) + 256;
|
|
46
|
+
const response = listTodoDocsEntities(process.cwd(), "docs", args.limit ?? undefined, undefined, {
|
|
47
|
+
...(args.topic ? { topic: args.topic } : {}),
|
|
48
|
+
...(args.status ? { status: args.status } : {}),
|
|
49
|
+
}, { format, reservedUtf8Bytes });
|
|
50
|
+
const projected = { ...response, summary };
|
|
51
|
+
if (format === "json" || format === "yaml")
|
|
52
|
+
emitStructured(projected, format, output);
|
|
53
|
+
else {
|
|
54
|
+
output(`Docs: last_audit=${singleton.last_audit ?? "-"}\nMapping: entries=${mapping.length}\n`);
|
|
55
|
+
for (const entry of response.entries) {
|
|
56
|
+
output(`${entry.id} document=${entry.record.document} | path=${entry.record.path} | last_updated=${entry.record.last_updated} | status=${entry.record.status}\n`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return 0;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (!(error instanceof StateRetrievalFailure))
|
|
63
|
+
throw error;
|
|
64
|
+
if (format === "json" || format === "yaml")
|
|
65
|
+
emitStructured(error.body, format, output);
|
|
66
|
+
else
|
|
67
|
+
err(io)(YAML.stringify(error.body));
|
|
68
|
+
return error.exitCode;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import YAML from "yaml";
|
|
2
|
+
import { StateRetrievalFailure } from "../../../state/directRetrieval.js";
|
|
3
|
+
import { getExperimentEntity, listExperimentEntities } from "../../../state/objectiveExperimentEntities.js";
|
|
4
|
+
import { emitStructured } from "../../structured.js";
|
|
5
|
+
import { entityListFamily, entityListValidValues } from "../../../state/entityRetrievalHelp.js";
|
|
6
|
+
function requestedFormat(argv) {
|
|
7
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
8
|
+
const token = argv[index];
|
|
9
|
+
const value = token === "--format" ? argv[index + 1] : token.startsWith("--format=") ? token.slice(9) : undefined;
|
|
10
|
+
if (value === "json" || value === "yaml")
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
return "text";
|
|
14
|
+
}
|
|
15
|
+
function failure(message, verb) {
|
|
16
|
+
const list = verb === "list";
|
|
17
|
+
const family = entityListFamily("experiments");
|
|
18
|
+
return new StateRetrievalFailure({
|
|
19
|
+
schemaVersion: "agentera.stateFailure.v1",
|
|
20
|
+
status: "fail",
|
|
21
|
+
error: {
|
|
22
|
+
class: "invalid_request",
|
|
23
|
+
message,
|
|
24
|
+
syntax: list
|
|
25
|
+
? family.syntax
|
|
26
|
+
: family.get,
|
|
27
|
+
example: list
|
|
28
|
+
? family.example
|
|
29
|
+
: "agentera state experiments get --id qjtrmnpvka --format json",
|
|
30
|
+
recovery: list ? `Run \`${family.example}\`; no state was changed.` : "Use bare ten-letter entity IDs and retry; no state was changed.",
|
|
31
|
+
valid_values: list
|
|
32
|
+
? entityListValidValues(family)
|
|
33
|
+
: ["get", "--id ID", "--format text|json|yaml"],
|
|
34
|
+
},
|
|
35
|
+
}, 2);
|
|
36
|
+
}
|
|
37
|
+
function value(argv, index, name) {
|
|
38
|
+
const token = argv[index];
|
|
39
|
+
if (token.startsWith(`${name}=`))
|
|
40
|
+
return { value: token.slice(name.length + 1), next: index + 1 };
|
|
41
|
+
const next = argv[index + 1];
|
|
42
|
+
if (!next || next.startsWith("--"))
|
|
43
|
+
throw new Error(`${name} requires a value`);
|
|
44
|
+
return { value: next, next: index + 2 };
|
|
45
|
+
}
|
|
46
|
+
function parse(argv, verb) {
|
|
47
|
+
const family = entityListFamily("experiments");
|
|
48
|
+
let format = "text";
|
|
49
|
+
let objective;
|
|
50
|
+
let id;
|
|
51
|
+
let limit = family.bounds.default;
|
|
52
|
+
let cursor;
|
|
53
|
+
const selector = {};
|
|
54
|
+
const seen = new Set();
|
|
55
|
+
for (let index = 0; index < argv.length;) {
|
|
56
|
+
const token = argv[index];
|
|
57
|
+
if (verb === "list" && token === "--ids-only") {
|
|
58
|
+
if (selector.idsOnly)
|
|
59
|
+
throw failure("--ids-only may only be supplied once", verb);
|
|
60
|
+
selector.idsOnly = true;
|
|
61
|
+
index += 1;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const allowed = verb === "list" ? ["--format", "--objective", "--limit", "--cursor", "--fields"] : ["--format", "--id"];
|
|
65
|
+
const name = allowed.find((flag) => token === flag || token.startsWith(`${flag}=`));
|
|
66
|
+
if (!name)
|
|
67
|
+
throw failure(`unrecognized argument '${token}'`, verb);
|
|
68
|
+
if (seen.has(name))
|
|
69
|
+
throw failure(`${name} may only be supplied once`, verb);
|
|
70
|
+
seen.add(name);
|
|
71
|
+
let parsed;
|
|
72
|
+
try {
|
|
73
|
+
parsed = value(argv, index, name);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
throw failure(error.message, verb);
|
|
77
|
+
}
|
|
78
|
+
index = parsed.next;
|
|
79
|
+
if (name === "--format") {
|
|
80
|
+
if (!family.formats.includes(parsed.value))
|
|
81
|
+
throw failure(`invalid --format '${parsed.value}'`, verb);
|
|
82
|
+
format = parsed.value;
|
|
83
|
+
}
|
|
84
|
+
else if (name === "--objective")
|
|
85
|
+
objective = parsed.value;
|
|
86
|
+
else if (name === "--id")
|
|
87
|
+
id = parsed.value;
|
|
88
|
+
else if (name === "--cursor")
|
|
89
|
+
cursor = parsed.value;
|
|
90
|
+
else if (name === "--fields")
|
|
91
|
+
selector.fields = parsed.value;
|
|
92
|
+
else {
|
|
93
|
+
if (!/^[1-9][0-9]*$/.test(parsed.value) || Number(parsed.value) < family.bounds.minimum || Number(parsed.value) > family.bounds.maximum)
|
|
94
|
+
throw failure(`--limit must be an integer from ${family.bounds.minimum} through ${family.bounds.maximum}`, verb);
|
|
95
|
+
limit = Number(parsed.value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (verb === "list" && !objective)
|
|
99
|
+
throw failure("--objective is required", verb);
|
|
100
|
+
if (verb === "get" && !id)
|
|
101
|
+
throw failure("--id is required", verb);
|
|
102
|
+
return { format, objective, id, limit, cursor, selector };
|
|
103
|
+
}
|
|
104
|
+
function emitFailure(error, format, io) {
|
|
105
|
+
if (format === "json" || format === "yaml")
|
|
106
|
+
emitStructured(error.body, format, io.out ?? ((text) => process.stdout.write(text)));
|
|
107
|
+
else {
|
|
108
|
+
const detail = error.body.error;
|
|
109
|
+
(io.err ?? ((text) => process.stderr.write(text)))([
|
|
110
|
+
`Error: ${detail.message}`,
|
|
111
|
+
`Class: ${detail.class}`,
|
|
112
|
+
`Valid forms: ${(detail.valid_values ?? [detail.syntax]).join("; ")}`,
|
|
113
|
+
`Example: ${detail.example}`,
|
|
114
|
+
`Recovery: ${detail.recovery}`,
|
|
115
|
+
].join("\n") + "\n");
|
|
116
|
+
}
|
|
117
|
+
return error.exitCode;
|
|
118
|
+
}
|
|
119
|
+
export function runExperimentRecords(argv, io) {
|
|
120
|
+
const format = requestedFormat(argv);
|
|
121
|
+
const verb = argv[0];
|
|
122
|
+
if (verb !== "list" && verb !== "get")
|
|
123
|
+
return emitFailure(failure(`expected 'list' or 'get', received '${verb ?? "nothing"}'`, "list"), format, io);
|
|
124
|
+
try {
|
|
125
|
+
const args = parse(argv.slice(1), verb);
|
|
126
|
+
const response = verb === "list"
|
|
127
|
+
? listExperimentEntities(process.cwd(), args.objective, args.limit, args.cursor, { format: args.format, selector: args.selector })
|
|
128
|
+
: getExperimentEntity(process.cwd(), args.id);
|
|
129
|
+
const output = io.out ?? ((text) => process.stdout.write(text));
|
|
130
|
+
if (args.format === "json" || args.format === "yaml")
|
|
131
|
+
emitStructured(response, args.format, output);
|
|
132
|
+
else
|
|
133
|
+
output(YAML.stringify(response));
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (error instanceof StateRetrievalFailure)
|
|
138
|
+
return emitFailure(error, format, io);
|
|
139
|
+
return emitFailure(new StateRetrievalFailure({
|
|
140
|
+
schemaVersion: "agentera.stateFailure.v1",
|
|
141
|
+
status: "fail",
|
|
142
|
+
error: {
|
|
143
|
+
class: "unsupported_state",
|
|
144
|
+
message: error.message,
|
|
145
|
+
syntax: "agentera state experiments list --objective ID [options] | agentera state experiments get --id ID [--format text|json|yaml]",
|
|
146
|
+
example: "agentera state experiments list --objective qjtrmnpvka --format json",
|
|
147
|
+
recovery: "Use supported objective-scoped experiment state and retry; no state was changed.",
|
|
148
|
+
},
|
|
149
|
+
}, 1), format, io);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { emitStructured } from "../../structured.js";
|
|
2
|
+
import { listCurrentExperimentEntities } from "../../../state/objectiveExperimentEntities.js";
|
|
3
|
+
import YAML from "yaml";
|
|
4
|
+
import { out } from "./shared.js";
|
|
5
|
+
export function queryExperiments(args, _schemas, io) {
|
|
6
|
+
const format = args.format ?? "text";
|
|
7
|
+
const response = listCurrentExperimentEntities(process.cwd(), args.objective ?? undefined, args.limit ?? undefined, args.cursor ?? undefined, { topic: args.topic ?? undefined, status: args.status ?? undefined }, { format });
|
|
8
|
+
const output = out(io);
|
|
9
|
+
if (format === "text")
|
|
10
|
+
output(YAML.stringify(response));
|
|
11
|
+
else
|
|
12
|
+
emitStructured(response, format, output);
|
|
13
|
+
return 0;
|
|
14
|
+
}
|