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,512 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { randomInt } from "node:crypto";
|
|
3
|
+
import YAML from "yaml";
|
|
4
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
5
|
+
import { canonicalRecordJson } from "./archiveDiscovery.js";
|
|
6
|
+
import { StateRetrievalFailure } from "./directRetrieval.js";
|
|
7
|
+
import { allocateAndPublishEntity, allocateEntityId, assertEntityDiscoveryOrigin, discoverEntities, publishEntity, publishEntityUnderLock, withEntityWriterLock, } from "./entityStorage.js";
|
|
8
|
+
import { detailMetadata, detailProvenance, isSummaryEntity } from "./summaryEntityRead.js";
|
|
9
|
+
import { decodeListCursor, encodeListCursor, projectedListSnapshot } from "./listCursor.js";
|
|
10
|
+
import { localTimestamp } from "./write/assign.js";
|
|
11
|
+
import { glossaryCaveatPairAllowed, glossaryCaveatContract, } from "../registries/glossaryCaveatContract.js";
|
|
12
|
+
import { validateProgressGlossaryCaveat, } from "./progressGlossaryCaveat.js";
|
|
13
|
+
import { nextProgressPublicationOrder, progressPublicationOrder, PROGRESS_PUBLICATION_ORDER_FIELD, } from "./progressPublicationOrder.js";
|
|
14
|
+
import { detectStateModeBinding } from "./stateMode.js";
|
|
15
|
+
import { loadStateStorageAuthority } from "./stateStorageAuthority.js";
|
|
16
|
+
import { entityListSelectorFlags, entityListSelectorKey, projectEntityList, resolveEntityListSelector } from "./entityListProjection.js";
|
|
17
|
+
import { shellQuoteArgument } from "../core/shell.js";
|
|
18
|
+
const ARTIFACT = "progress";
|
|
19
|
+
const BOUNDARY = "progress_cycle";
|
|
20
|
+
const SUMMARY = "progress_summary";
|
|
21
|
+
const ORDER = "timestamp_desc_then_publication_order_desc_then_id_asc";
|
|
22
|
+
const CURSOR_VERSION = 2;
|
|
23
|
+
function mapping(value) {
|
|
24
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
25
|
+
}
|
|
26
|
+
function opaqueCaveatId(existing, contract) {
|
|
27
|
+
const alphabet = contract.idAlphabet;
|
|
28
|
+
for (;;) {
|
|
29
|
+
let id = "";
|
|
30
|
+
for (let index = 0; index < contract.idLength; index += 1)
|
|
31
|
+
id += alphabet[randomInt(alphabet.length)];
|
|
32
|
+
if (!existing.has(id))
|
|
33
|
+
return id;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function prepareGlossaryCaveat(values, discovery, contract) {
|
|
37
|
+
if (!Object.prototype.hasOwnProperty.call(values, "glossary_caveat"))
|
|
38
|
+
return {};
|
|
39
|
+
if (!mapping(values.glossary_caveat))
|
|
40
|
+
throw new Error("glossary caveat mutation must be one privacy-safe mapping");
|
|
41
|
+
const requested = values.glossary_caveat;
|
|
42
|
+
const mutationFields = contract.fields.filter((field) => field !== "capability");
|
|
43
|
+
if (Object.keys(requested).some((field) => !mutationFields.includes(field)))
|
|
44
|
+
throw new Error("glossary caveat mutation contains a non-contract field");
|
|
45
|
+
const event = String(requested.event ?? "");
|
|
46
|
+
const reason = String(requested.reason ?? "");
|
|
47
|
+
const ownership = String(requested.ownership_state ?? "");
|
|
48
|
+
if (!contract.events.includes(event) ||
|
|
49
|
+
!contract.reasons.includes(reason) ||
|
|
50
|
+
!contract.ownershipStates.includes(ownership) ||
|
|
51
|
+
!glossaryCaveatPairAllowed(contract, reason, ownership))
|
|
52
|
+
throw new Error("glossary caveat requires one contract-declared reason and ownership state pair");
|
|
53
|
+
const entities = discovery.entities.filter((entity) => entity.classification === "valid" && entity.artifact === ARTIFACT && entity.boundary === BOUNDARY);
|
|
54
|
+
const rows = entities.flatMap((entity) => {
|
|
55
|
+
const parsed = validateProgressGlossaryCaveat(entity.record, contract);
|
|
56
|
+
return parsed.status === "valid" ? [{ entity, caveat: parsed.caveat }] : [];
|
|
57
|
+
});
|
|
58
|
+
const terminalIds = new Set(rows.filter(({ caveat }) => caveat.event !== "current").map(({ caveat }) => caveat.caveat_id));
|
|
59
|
+
const open = rows.filter(({ caveat }) => caveat.event === "current" && !terminalIds.has(caveat.caveat_id));
|
|
60
|
+
if (event === "current") {
|
|
61
|
+
if (requested.caveat_id !== undefined || requested.transition_id !== undefined)
|
|
62
|
+
throw new Error("current glossary caveat identity is CLI-assigned and has no transition identity");
|
|
63
|
+
const replay = open.find(({ caveat }) => caveat.reason === reason && caveat.ownership_state === ownership);
|
|
64
|
+
if (replay)
|
|
65
|
+
return { replay: replay.entity };
|
|
66
|
+
const caveat_id = opaqueCaveatId(new Set(rows.flatMap(({ caveat }) => [caveat.caveat_id, caveat.transition_id].filter((id) => id !== null))), contract);
|
|
67
|
+
return { caveat: { ...requested, caveat_id, event, capability: "build", reason, ownership_state: ownership, transition_id: null } };
|
|
68
|
+
}
|
|
69
|
+
const caveatId = String(requested.caveat_id ?? "");
|
|
70
|
+
if (!contract.idPattern.test(caveatId))
|
|
71
|
+
throw new Error("terminal glossary caveat requires one opaque caveat ID");
|
|
72
|
+
const existingTerminal = rows.find(({ caveat }) => caveat.caveat_id === caveatId && caveat.event === event && caveat.reason === reason && caveat.ownership_state === ownership && caveat.transition_id === (requested.transition_id ?? null));
|
|
73
|
+
if (existingTerminal)
|
|
74
|
+
return { replay: existingTerminal.entity };
|
|
75
|
+
const current = open.find(({ caveat }) => caveat.caveat_id === caveatId);
|
|
76
|
+
if (!current || current.caveat.reason !== reason || current.caveat.ownership_state !== ownership)
|
|
77
|
+
throw new Error("terminal glossary caveat must match one current caveat identity and vocabulary");
|
|
78
|
+
if (event === "resolved") {
|
|
79
|
+
if (requested.transition_id !== undefined)
|
|
80
|
+
throw new Error("resolved glossary caveat cannot have a transition identity");
|
|
81
|
+
return { caveat: { ...requested, ...current.caveat, event, transition_id: null } };
|
|
82
|
+
}
|
|
83
|
+
if (event !== "superseded")
|
|
84
|
+
throw new Error("glossary caveat event is invalid");
|
|
85
|
+
const transitionId = String(requested.transition_id ?? "");
|
|
86
|
+
if (!contract.idPattern.test(transitionId) || transitionId === caveatId || !open.some(({ caveat }) => caveat.caveat_id === transitionId))
|
|
87
|
+
throw new Error("superseded glossary caveat requires one different current successor identity");
|
|
88
|
+
return { caveat: { ...requested, ...current.caveat, event, transition_id: transitionId } };
|
|
89
|
+
}
|
|
90
|
+
function positive(value, field) {
|
|
91
|
+
const number = Number(value);
|
|
92
|
+
if (!Number.isSafeInteger(number) || number < 1)
|
|
93
|
+
throw new Error(`invalid progress entity ${field} in state storage authority`);
|
|
94
|
+
return number;
|
|
95
|
+
}
|
|
96
|
+
function progressContract(sourceRoot = resolveSourceRoot()) {
|
|
97
|
+
const { authorityPath, document: authority } = loadStateStorageAuthority(sourceRoot);
|
|
98
|
+
const target = authority.entity_target;
|
|
99
|
+
const storage = mapping(target) && mapping(target.storage_boundary)
|
|
100
|
+
? target.storage_boundary.shared_primitives
|
|
101
|
+
: null;
|
|
102
|
+
const entities = mapping(target) && Array.isArray(target.entities) ? target.entities : [];
|
|
103
|
+
const progress = entities.find((entity) => mapping(entity) && entity.boundary === BOUNDARY && entity.artifact === ARTIFACT);
|
|
104
|
+
const retrieval = mapping(progress) ? progress.retrieval : null;
|
|
105
|
+
if (!mapping(storage) || typeof storage.canonical_root !== "string" || !mapping(retrieval)) {
|
|
106
|
+
throw new Error(`invalid progress entity contract in '${authorityPath}'`);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
authorityPath,
|
|
110
|
+
entityRoot: storage.canonical_root,
|
|
111
|
+
defaultLimit: positive(retrieval.default_limit, "default_limit"),
|
|
112
|
+
maximumLimit: positive(retrieval.maximum_limit, "maximum_limit"),
|
|
113
|
+
maxUtf8Bytes: positive(retrieval.max_utf8_bytes, "max_utf8_bytes"),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function failure(className, message, recovery, id, exitCode = 1) {
|
|
117
|
+
return new StateRetrievalFailure({
|
|
118
|
+
schemaVersion: "agentera.stateFailure.v1",
|
|
119
|
+
status: "fail",
|
|
120
|
+
error: {
|
|
121
|
+
class: className,
|
|
122
|
+
message,
|
|
123
|
+
syntax: "agentera state progress get --id ID --format json",
|
|
124
|
+
example: `agentera state progress get --id ${id ?? "qjtrmnpvka"} --format json`,
|
|
125
|
+
recovery,
|
|
126
|
+
artifact: ARTIFACT,
|
|
127
|
+
...(id ? { id } : {}),
|
|
128
|
+
},
|
|
129
|
+
}, exitCode);
|
|
130
|
+
}
|
|
131
|
+
function listFailure(className, message, recovery, exitCode = 1) {
|
|
132
|
+
const result = failure(className, message, recovery, undefined, exitCode);
|
|
133
|
+
result.body.error.syntax =
|
|
134
|
+
"agentera state progress list [--limit N] [--cursor TOKEN] --format json";
|
|
135
|
+
result.body.error.example = "agentera state progress list --limit 20 --format json";
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
function progressRecord(values, caveatContract) {
|
|
139
|
+
const context = mapping(values.context) ? values.context : {};
|
|
140
|
+
const record = {
|
|
141
|
+
timestamp: typeof values.timestamp === "string" ? values.timestamp : localTimestamp(),
|
|
142
|
+
type: String(values.type ?? ""),
|
|
143
|
+
phase: String(values.phase ?? ""),
|
|
144
|
+
what: String(values.what ?? ""),
|
|
145
|
+
context: { intent: String(context.intent ?? "") },
|
|
146
|
+
};
|
|
147
|
+
for (const field of ["inspiration", "discovered", "verified", "next"]) {
|
|
148
|
+
if (typeof values[field] === "string")
|
|
149
|
+
record[field] = values[field];
|
|
150
|
+
}
|
|
151
|
+
for (const field of ["constraints", "unknowns", "scope"]) {
|
|
152
|
+
if (typeof context[field] === "string")
|
|
153
|
+
record.context[field] = context[field];
|
|
154
|
+
}
|
|
155
|
+
if (Object.prototype.hasOwnProperty.call(values, "glossary_caveat"))
|
|
156
|
+
record.glossary_caveat = values.glossary_caveat;
|
|
157
|
+
const caveat = validateProgressGlossaryCaveat(record, caveatContract);
|
|
158
|
+
if (caveat.status === "invalid")
|
|
159
|
+
throw new Error(caveat.violations.join("; "));
|
|
160
|
+
if (!/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(String(record.timestamp)))
|
|
161
|
+
throw new Error("progress entity timestamp must use YYYY-MM-DD HH:MM");
|
|
162
|
+
if (!record.type || !record.phase || !record.what || !record.context.intent)
|
|
163
|
+
throw new Error("progress entity requires type, phase, what, and context.intent");
|
|
164
|
+
return record;
|
|
165
|
+
}
|
|
166
|
+
function relative(projectRoot, candidate) {
|
|
167
|
+
return path.relative(path.resolve(projectRoot), candidate).split(path.sep).join("/");
|
|
168
|
+
}
|
|
169
|
+
function logicalProgressRecord(record) {
|
|
170
|
+
const { [PROGRESS_PUBLICATION_ORDER_FIELD]: _publicationOrder, ...logical } = record;
|
|
171
|
+
return logical;
|
|
172
|
+
}
|
|
173
|
+
export function appendProgressEntity(req, options = {}) {
|
|
174
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
175
|
+
if (!req.dryRun && !options.publicationContext) {
|
|
176
|
+
const binding = detectStateModeBinding(req.projectRoot, sourceRoot);
|
|
177
|
+
if (binding.mode !== "entities") {
|
|
178
|
+
throw new Error("progress publication requires the durable entity-mode marker; legacy mode remains authoritative");
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
return withEntityWriterLock(binding.publicationContext, () => appendProgressEntity(req, {
|
|
182
|
+
...options,
|
|
183
|
+
publicationContext: binding.publicationContext,
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
binding.publicationContext.close();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (Object.prototype.hasOwnProperty.call(req.values, PROGRESS_PUBLICATION_ORDER_FIELD) ||
|
|
191
|
+
Object.prototype.hasOwnProperty.call(req.callerPayload, PROGRESS_PUBLICATION_ORDER_FIELD)) {
|
|
192
|
+
throw new Error("progress publication_order is writer-owned and cannot be supplied by callers");
|
|
193
|
+
}
|
|
194
|
+
const contract = progressContract(sourceRoot);
|
|
195
|
+
const discovery = discoverEntities(req.projectRoot, sourceRoot);
|
|
196
|
+
const existing = sortedProgress(discovery);
|
|
197
|
+
const caveatContract = glossaryCaveatContract(path.join(sourceRoot, "references", "artifacts", "glossary-entry-contract.yaml"));
|
|
198
|
+
const values = req.input ?? req.values;
|
|
199
|
+
const prepared = prepareGlossaryCaveat(values, discovery, caveatContract);
|
|
200
|
+
if (prepared.replay) {
|
|
201
|
+
return { schemaVersion: "agentera.stateWrite.v1", command: "state progress append", status: "pass", path: prepared.replay.path, id: prepared.replay.id, artifact: ARTIFACT, record: prepared.replay.record, operation: { verb: "append", dry_run: req.dryRun, idempotent_replay: true }, validation: { status: "pass", violations: [] } };
|
|
202
|
+
}
|
|
203
|
+
if (prepared.caveat)
|
|
204
|
+
values.glossary_caveat = prepared.caveat;
|
|
205
|
+
const unsequencedRecord = progressRecord(values, caveatContract);
|
|
206
|
+
if (!options.id) {
|
|
207
|
+
const logicalReplay = existing.find((entity) => entity.record && canonicalRecordJson(logicalProgressRecord(entity.record)) === canonicalRecordJson(unsequencedRecord));
|
|
208
|
+
if (logicalReplay?.record) {
|
|
209
|
+
return {
|
|
210
|
+
schemaVersion: "agentera.stateWrite.v1",
|
|
211
|
+
command: "state progress append",
|
|
212
|
+
status: "pass",
|
|
213
|
+
path: logicalReplay.path,
|
|
214
|
+
id: logicalReplay.id,
|
|
215
|
+
artifact: ARTIFACT,
|
|
216
|
+
record: logicalReplay.record,
|
|
217
|
+
operation: { verb: "append", dry_run: req.dryRun, idempotent_replay: true },
|
|
218
|
+
validation: { status: "pass", violations: [] },
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const exactReplay = options.id
|
|
223
|
+
? existing.find(({ id }) => id === options.id)
|
|
224
|
+
: undefined;
|
|
225
|
+
if (exactReplay?.record) {
|
|
226
|
+
const { publication_order: _publicationOrder, ...existingCallerFields } = exactReplay.record;
|
|
227
|
+
if (canonicalRecordJson(existingCallerFields) === canonicalRecordJson(unsequencedRecord)) {
|
|
228
|
+
return {
|
|
229
|
+
schemaVersion: "agentera.stateWrite.v1",
|
|
230
|
+
command: "state progress append",
|
|
231
|
+
status: "pass",
|
|
232
|
+
path: exactReplay.path,
|
|
233
|
+
id: exactReplay.id,
|
|
234
|
+
artifact: ARTIFACT,
|
|
235
|
+
record: exactReplay.record,
|
|
236
|
+
operation: { verb: "append", dry_run: req.dryRun, idempotent_replay: true },
|
|
237
|
+
validation: { status: "pass", violations: [] },
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const record = req.dryRun
|
|
242
|
+
? unsequencedRecord
|
|
243
|
+
: {
|
|
244
|
+
...unsequencedRecord,
|
|
245
|
+
[PROGRESS_PUBLICATION_ORDER_FIELD]: nextProgressPublicationOrder(existing.flatMap(({ record }) => record ? [record] : [])),
|
|
246
|
+
};
|
|
247
|
+
if (req.dryRun) {
|
|
248
|
+
options.publicationContext?.assertValid();
|
|
249
|
+
const allocationRoot = options.publicationContext?.pinnedPath() ?? req.projectRoot;
|
|
250
|
+
const id = options.id ?? allocateEntityId(allocationRoot, options.candidate, sourceRoot);
|
|
251
|
+
const target = path.join(path.resolve(req.projectRoot), contract.entityRoot, ARTIFACT, BOUNDARY, `${id}.yaml`);
|
|
252
|
+
options.publicationContext?.assertValid();
|
|
253
|
+
return {
|
|
254
|
+
schemaVersion: "agentera.stateWrite.v1",
|
|
255
|
+
command: "state progress append",
|
|
256
|
+
status: "pass",
|
|
257
|
+
path: target,
|
|
258
|
+
id,
|
|
259
|
+
artifact: ARTIFACT,
|
|
260
|
+
record,
|
|
261
|
+
operation: { verb: "append", dry_run: true, idempotent_replay: false },
|
|
262
|
+
validation: { status: "pass", violations: [] },
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
const publicationRequest = {
|
|
266
|
+
projectRoot: req.projectRoot,
|
|
267
|
+
sourceRoot,
|
|
268
|
+
publicationContext: options.publicationContext,
|
|
269
|
+
artifact: ARTIFACT,
|
|
270
|
+
boundary: BOUNDARY,
|
|
271
|
+
record,
|
|
272
|
+
};
|
|
273
|
+
const published = options.publicationContext
|
|
274
|
+
? publishEntityUnderLock({ ...publicationRequest, id: options.id ?? allocateEntityId(options.publicationContext.pinnedPath(), options.candidate, sourceRoot) })
|
|
275
|
+
: options.id
|
|
276
|
+
? publishEntity({ ...publicationRequest, id: options.id })
|
|
277
|
+
: allocateAndPublishEntity({
|
|
278
|
+
...publicationRequest,
|
|
279
|
+
}, options.candidate);
|
|
280
|
+
return {
|
|
281
|
+
schemaVersion: "agentera.stateWrite.v1",
|
|
282
|
+
command: "state progress append",
|
|
283
|
+
status: "pass",
|
|
284
|
+
path: published.path,
|
|
285
|
+
id: published.id,
|
|
286
|
+
artifact: published.artifact,
|
|
287
|
+
record,
|
|
288
|
+
operation: { verb: "append", dry_run: false, idempotent_replay: published.replay },
|
|
289
|
+
validation: { status: "pass", violations: [] },
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
function sortKey(entity) {
|
|
293
|
+
return canonicalRecordJson([
|
|
294
|
+
String(entity.record?.timestamp ?? ""),
|
|
295
|
+
progressPublicationOrder(entity.record),
|
|
296
|
+
entity.id,
|
|
297
|
+
]);
|
|
298
|
+
}
|
|
299
|
+
function sortedProgress(discovery) {
|
|
300
|
+
const progress = discovery.entities.filter((entity) => entity.boundary === BOUNDARY || entity.artifact === ARTIFACT);
|
|
301
|
+
const duplicate = progress.find((entity) => entity.classification === "duplicate");
|
|
302
|
+
if (duplicate)
|
|
303
|
+
throw listFailure("ambiguous", "canonical progress evidence has conflicting identities", "Run agentera check validate state, assign unique IDs, and retry.");
|
|
304
|
+
const corrupt = progress.find((entity) => entity.classification !== "valid" ||
|
|
305
|
+
!entity.id ||
|
|
306
|
+
!entity.record ||
|
|
307
|
+
(entity.boundary === BOUNDARY && typeof entity.record.timestamp !== "string"));
|
|
308
|
+
if (corrupt)
|
|
309
|
+
throw listFailure("corrupt", "canonical progress evidence is corrupt or violates the progress record contract", "Run agentera check validate state, repair the canonical entity file, and retry.");
|
|
310
|
+
return progress.sort((left, right) => {
|
|
311
|
+
const timestamp = String(right.record.timestamp ?? "").localeCompare(String(left.record.timestamp ?? ""));
|
|
312
|
+
if (timestamp)
|
|
313
|
+
return timestamp;
|
|
314
|
+
const leftOrder = progressPublicationOrder(left.record);
|
|
315
|
+
const rightOrder = progressPublicationOrder(right.record);
|
|
316
|
+
if (leftOrder !== null && rightOrder !== null && leftOrder !== rightOrder)
|
|
317
|
+
return rightOrder - leftOrder;
|
|
318
|
+
if (leftOrder !== null && rightOrder === null)
|
|
319
|
+
return -1;
|
|
320
|
+
if (leftOrder === null && rightOrder !== null)
|
|
321
|
+
return 1;
|
|
322
|
+
return left.id.localeCompare(right.id);
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
function entry(projectRoot, entity) {
|
|
326
|
+
const id = entity.id;
|
|
327
|
+
return {
|
|
328
|
+
id,
|
|
329
|
+
artifact: ARTIFACT,
|
|
330
|
+
record: entity.record,
|
|
331
|
+
...detailMetadata(entity),
|
|
332
|
+
provenance: detailProvenance(relative(projectRoot, entity.path), entity),
|
|
333
|
+
retrieval: { get: `agentera state progress get --id ${id} --format json` },
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
function snapshotId(projectRoot, entities, filters, entityRoot) {
|
|
337
|
+
return projectedListSnapshot({
|
|
338
|
+
schemaVersion: "agentera.stateList.v1",
|
|
339
|
+
command: "state progress list",
|
|
340
|
+
order: ORDER,
|
|
341
|
+
filters,
|
|
342
|
+
source: { artifact: ARTIFACT, authority: "canonical_entity_files", root: entityRoot },
|
|
343
|
+
source_contract: { authority: "references/artifacts/state-storage-authority.yaml", detail: entities.some(isSummaryEntity) ? "mixed" : "full", cursor: "opaque_snapshot_cursor_v2" },
|
|
344
|
+
entries: entities.map((entity) => entry(projectRoot, entity)),
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
function encodeCursor(payload, projectRoot, authorityPath) {
|
|
348
|
+
return encodeListCursor(payload, projectRoot, authorityPath);
|
|
349
|
+
}
|
|
350
|
+
function decodeCursor(token, projectRoot, authorityPath) {
|
|
351
|
+
const [encoded, signed, extra] = token.split(".");
|
|
352
|
+
if (!encoded || !signed || extra)
|
|
353
|
+
throw listFailure("cursor_invalid", "progress cursor is malformed or was issued for a prior ordering contract", "Omit --cursor to establish a new version 2 progress snapshot.");
|
|
354
|
+
let payload;
|
|
355
|
+
try {
|
|
356
|
+
payload = decodeListCursor(token, projectRoot, authorityPath);
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
throw listFailure("cursor_invalid", "progress cursor is malformed or was issued for a prior ordering contract", "Omit --cursor to establish a new version 2 progress snapshot.");
|
|
360
|
+
}
|
|
361
|
+
if (!mapping(payload) ||
|
|
362
|
+
payload.version !== CURSOR_VERSION ||
|
|
363
|
+
payload.artifact !== ARTIFACT ||
|
|
364
|
+
payload.order !== ORDER ||
|
|
365
|
+
!mapping(payload.filters) ||
|
|
366
|
+
typeof payload.snapshot_id !== "string" ||
|
|
367
|
+
typeof payload.selector !== "string" ||
|
|
368
|
+
typeof payload.after_key !== "string") {
|
|
369
|
+
throw listFailure("cursor_invalid", "progress cursor does not match the version 2 progress ordering contract", "Omit --cursor to establish a new version 2 snapshot.");
|
|
370
|
+
}
|
|
371
|
+
return payload;
|
|
372
|
+
}
|
|
373
|
+
function values(value) {
|
|
374
|
+
if (typeof value === "string")
|
|
375
|
+
return [value];
|
|
376
|
+
if (Array.isArray(value))
|
|
377
|
+
return value.flatMap(values);
|
|
378
|
+
if (mapping(value))
|
|
379
|
+
return Object.entries(value).flatMap(([key, child]) => [key, ...values(child)]);
|
|
380
|
+
return [];
|
|
381
|
+
}
|
|
382
|
+
function filtersObject(filters) {
|
|
383
|
+
return { topic: filters.topic ?? null, status: filters.status ?? null };
|
|
384
|
+
}
|
|
385
|
+
export function getProgressEntity(projectRoot, id, sourceRoot = resolveSourceRoot()) {
|
|
386
|
+
if (!/^[a-z]{10}$/.test(id))
|
|
387
|
+
throw failure("invalid_request", `progress ID '${id}' must be ten lowercase letters`, "Use the bare ID returned by progress append or list.", id, 2);
|
|
388
|
+
const discovery = discoverEntities(projectRoot, sourceRoot);
|
|
389
|
+
const matches = discovery.entities.filter((entity) => entity.id === id);
|
|
390
|
+
if (matches.length > 1 || matches.some((entity) => entity.classification === "duplicate"))
|
|
391
|
+
throw failure("ambiguous", `progress entity ID '${id}' has multiple canonical candidates`, "Run agentera check validate state, assign unique IDs, and retry.", id);
|
|
392
|
+
const selected = matches[0];
|
|
393
|
+
const expectedPath = path.join(path.resolve(projectRoot), progressContract(sourceRoot).entityRoot, ARTIFACT, selected?.boundary === SUMMARY ? SUMMARY : BOUNDARY, `${id}.yaml`);
|
|
394
|
+
const corruptAtCanonicalPath = discovery.entities.find((entity) => entity.path === expectedPath);
|
|
395
|
+
if (!selected && corruptAtCanonicalPath)
|
|
396
|
+
throw failure("corrupt", "canonical progress evidence is corrupt or does not match its identity envelope", "Run agentera check validate state, repair the canonical entity file, and retry.", id);
|
|
397
|
+
if (!selected || selected.artifact !== ARTIFACT || ![BOUNDARY, SUMMARY].includes(selected.boundary ?? ""))
|
|
398
|
+
throw failure("not_found", `no progress entity exists with ID '${id}'`, "Copy an ID from agentera state progress list --format json and retry.", id);
|
|
399
|
+
if (selected.classification !== "valid" ||
|
|
400
|
+
!selected.record ||
|
|
401
|
+
(selected.boundary === BOUNDARY && typeof selected.record.timestamp !== "string"))
|
|
402
|
+
throw failure("corrupt", "canonical progress evidence is corrupt or violates the progress record contract", "Run agentera check validate state, repair the canonical entity file, and retry.", id);
|
|
403
|
+
return {
|
|
404
|
+
schemaVersion: "agentera.stateRetrieval.v1",
|
|
405
|
+
command: "state progress get",
|
|
406
|
+
status: isSummaryEntity(selected) ? "degraded" : "ok",
|
|
407
|
+
entry: entry(projectRoot, selected),
|
|
408
|
+
source: { artifact: ARTIFACT, authority: "canonical_entity_file" },
|
|
409
|
+
source_contract: {
|
|
410
|
+
authority: "references/artifacts/state-storage-authority.yaml",
|
|
411
|
+
detail: isSummaryEntity(selected) ? "summary" : "full",
|
|
412
|
+
},
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
export function listProgressEntities(projectRoot, limit, filters = {}, cursor, options = {}) {
|
|
416
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
417
|
+
const contract = progressContract(sourceRoot);
|
|
418
|
+
const effectiveLimit = limit ?? contract.defaultLimit;
|
|
419
|
+
if (!Number.isSafeInteger(effectiveLimit) ||
|
|
420
|
+
effectiveLimit < 1 ||
|
|
421
|
+
effectiveLimit > contract.maximumLimit) {
|
|
422
|
+
throw listFailure("invalid_request", `--limit must be between 1 and ${contract.maximumLimit}`, `Use --limit ${contract.defaultLimit} or another value in the declared range.`, 2);
|
|
423
|
+
}
|
|
424
|
+
if (options.discovery)
|
|
425
|
+
assertEntityDiscoveryOrigin(projectRoot, sourceRoot, options.discovery);
|
|
426
|
+
const all = sortedProgress(options.discovery ?? discoverEntities(projectRoot, sourceRoot));
|
|
427
|
+
const filterState = filtersObject(filters);
|
|
428
|
+
const filtered = all.filter((entity) => {
|
|
429
|
+
if (filters.status &&
|
|
430
|
+
String(entity.record.type).toLowerCase() !== filters.status.toLowerCase())
|
|
431
|
+
return false;
|
|
432
|
+
return (!filters.topic ||
|
|
433
|
+
values(entity.record).some((value) => value.toLowerCase().includes(filters.topic.toLowerCase())));
|
|
434
|
+
});
|
|
435
|
+
const snapshot = snapshotId(projectRoot, filtered, filterState, contract.entityRoot);
|
|
436
|
+
const format = options.format ?? "json";
|
|
437
|
+
const projectionOptions = { family: "progress", artifact: ARTIFACT, boundary: BOUNDARY, format, maxUtf8Bytes: contract.maxUtf8Bytes, selector: options.selector };
|
|
438
|
+
const selector = resolveEntityListSelector(options.selector, filtered.map((entity) => entry(projectRoot, entity)), projectionOptions);
|
|
439
|
+
const selectorKey = entityListSelectorKey(selector);
|
|
440
|
+
let afterKey = "";
|
|
441
|
+
if (cursor) {
|
|
442
|
+
const parsed = decodeCursor(cursor, projectRoot, contract.authorityPath);
|
|
443
|
+
if (canonicalRecordJson(parsed.filters) !== canonicalRecordJson(filterState))
|
|
444
|
+
throw listFailure("cursor_invalid", "progress cursor filters do not match this request", "Repeat the original filters or omit --cursor to establish a new snapshot.");
|
|
445
|
+
if (parsed.selector !== selectorKey)
|
|
446
|
+
throw listFailure("cursor_invalid", "progress cursor selectors do not match this request", "Repeat the original selector or omit --cursor to establish a new snapshot.");
|
|
447
|
+
if (parsed.snapshot_id !== snapshot)
|
|
448
|
+
throw listFailure("cursor_snapshot_unavailable", "progress entity source changed after this cursor snapshot", "Omit --cursor to restart from the current canonical entity snapshot.");
|
|
449
|
+
afterKey = parsed.after_key;
|
|
450
|
+
}
|
|
451
|
+
const start = afterKey ? filtered.findIndex((entity) => sortKey(entity) === afterKey) + 1 : 0;
|
|
452
|
+
if (afterKey && start === 0)
|
|
453
|
+
throw listFailure("cursor_snapshot_unavailable", "progress cursor continuation no longer exists in the canonical snapshot", "Omit --cursor to restart from the current canonical entity snapshot.");
|
|
454
|
+
const selected = filtered.slice(start, start + effectiveLimit);
|
|
455
|
+
const makeResponse = () => {
|
|
456
|
+
const remaining = filtered.length - start - selected.length;
|
|
457
|
+
const nextCursor = remaining > 0 && selected.length > 0
|
|
458
|
+
? encodeCursor({
|
|
459
|
+
version: CURSOR_VERSION,
|
|
460
|
+
artifact: ARTIFACT,
|
|
461
|
+
order: ORDER,
|
|
462
|
+
filters: filterState,
|
|
463
|
+
snapshot_id: snapshot,
|
|
464
|
+
selector: selectorKey,
|
|
465
|
+
after_key: sortKey(selected.at(-1)),
|
|
466
|
+
}, projectRoot, contract.authorityPath)
|
|
467
|
+
: undefined;
|
|
468
|
+
const filterFlags = `${filters.topic ? ` --topic ${shellQuoteArgument(filters.topic)}` : ""}${filters.status ? ` --status ${shellQuoteArgument(filters.status)}` : ""}`;
|
|
469
|
+
const selectorFlags = entityListSelectorFlags(selector);
|
|
470
|
+
return {
|
|
471
|
+
schemaVersion: "agentera.stateList.v1",
|
|
472
|
+
command: "state progress list",
|
|
473
|
+
status: remaining > 0 || filtered.some(isSummaryEntity) ? "degraded" : "ok",
|
|
474
|
+
entries: selected.map((entity) => entry(projectRoot, entity)),
|
|
475
|
+
counts: { total: filtered.length, returned: selected.length, remaining },
|
|
476
|
+
filters: filterState,
|
|
477
|
+
snapshot: {
|
|
478
|
+
id: snapshot,
|
|
479
|
+
first_page: !cursor,
|
|
480
|
+
order: ORDER,
|
|
481
|
+
has_more: remaining > 0,
|
|
482
|
+
candidate_count: filtered.length,
|
|
483
|
+
},
|
|
484
|
+
source: {
|
|
485
|
+
artifact: ARTIFACT,
|
|
486
|
+
authority: "canonical_entity_files",
|
|
487
|
+
root: contract.entityRoot,
|
|
488
|
+
},
|
|
489
|
+
source_contract: {
|
|
490
|
+
authority: "references/artifacts/state-storage-authority.yaml",
|
|
491
|
+
detail: filtered.some(isSummaryEntity) ? "mixed" : "full",
|
|
492
|
+
cursor: "opaque_snapshot_cursor_v2",
|
|
493
|
+
},
|
|
494
|
+
...(remaining > 0
|
|
495
|
+
? {
|
|
496
|
+
omitted: true,
|
|
497
|
+
omitted_count: remaining,
|
|
498
|
+
omission_reason: "page_limit",
|
|
499
|
+
retrieval: {
|
|
500
|
+
continue: `agentera state progress list${filterFlags}${selectorFlags} --limit ${effectiveLimit} --cursor ${nextCursor} --format json`,
|
|
501
|
+
get: "agentera state progress get --id ID --format json",
|
|
502
|
+
},
|
|
503
|
+
next_cursor: nextCursor,
|
|
504
|
+
}
|
|
505
|
+
: {}),
|
|
506
|
+
};
|
|
507
|
+
};
|
|
508
|
+
return projectEntityList(makeResponse(), selector, projectionOptions);
|
|
509
|
+
}
|
|
510
|
+
export function renderProgressEntityListText(response) {
|
|
511
|
+
return YAML.stringify(response);
|
|
512
|
+
}
|