agentera 3.0.0-dev.6 → 3.0.0-dev.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +118 -22
- package/bundle/CHANGELOG.md +1361 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +143 -0
- package/bundle/UPGRADE.md +252 -0
- package/bundle/extract-corpus-parity.json +21 -0
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +488 -0
- package/bundle/references/adapters/package-registry.yaml +435 -188
- package/bundle/references/adapters/package-surface-characterization.md +66 -34
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
- package/bundle/references/analysis/verification-policy.yaml +266 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
- package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +3061 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
- package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
- package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
- package/bundle/references/cli/routing-model.md +155 -0
- package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
- package/bundle/references/cli/update-channels.yaml +19 -2
- package/bundle/references/cli/vocabulary-index.yaml +20 -17
- package/bundle/references/cli/vocabulary.md +325 -362
- package/bundle/references/meta/retained-reference-authority.yaml +151 -0
- package/bundle/registry.json +13 -13
- package/bundle/skills/agentera/SKILL.md +226 -422
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +103 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +8 -6
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +184 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
- package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
- package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
- package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
- package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
- package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
- package/bundle/skills/agentera/protocol.yaml +31 -31
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +461 -36
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +133 -20
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
- package/dist/analytics/extractCorpus/cli.js +101 -12
- package/dist/analytics/extractCorpus/copilotSessions.js +53 -9
- package/dist/analytics/extractCorpus/core.js +59 -24
- package/dist/analytics/extractCorpus/corpus.js +58 -23
- package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +12 -7
- package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +1 -5
- package/dist/analytics/extractCorpus/index.js +6 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js +24 -5
- package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +98 -6
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +0 -1
- package/dist/analytics/glossaryAdviceResolution.js +166 -0
- package/dist/analytics/glossaryInputAcquisition.js +319 -0
- package/dist/analytics/personalGlossaryAdmission.js +133 -0
- package/dist/analytics/personalGlossaryProfile.js +219 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +169 -42
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -0
- package/dist/capabilities/build/instructions.js +59 -0
- package/dist/capabilities/design/instructions.js +4 -0
- package/dist/capabilities/discuss/instructions.js +29 -0
- package/dist/capabilities/document/instructions.js +11 -0
- package/dist/capabilities/index.js +29 -27
- package/dist/capabilities/optimize/instructions.js +14 -0
- package/dist/capabilities/orchestrate/instructions.js +42 -0
- package/dist/capabilities/plan/instructions.js +33 -0
- package/dist/capabilities/profile/instructions.js +70 -0
- package/dist/capabilities/research/instructions.js +5 -0
- package/dist/capabilities/status/instructions.js +15 -0
- package/dist/capabilities/status/startupInstructions.js +34 -0
- package/dist/capabilities/vision/instructions.js +4 -0
- package/dist/cli/appContext.js +30 -24
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +25 -17
- package/dist/cli/capabilityContext/bespoke.js +31 -12
- package/dist/cli/capabilityContext/build.js +251 -0
- package/dist/cli/capabilityContext/closeout.js +33 -30
- package/dist/cli/capabilityContext/contract.js +39 -46
- package/dist/cli/capabilityContext/evidence.js +90 -73
- package/dist/cli/capabilityContext/index.js +1 -2
- package/dist/cli/capabilityContext/orchestration.js +45 -21
- package/dist/cli/capabilityContext/planState.js +93 -100
- package/dist/cli/capabilityContext/progress.js +60 -14
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +9 -20
- package/dist/cli/capabilityContext/slim.js +56 -10
- package/dist/cli/capabilityContext/startup.js +57 -115
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +37 -24
- package/dist/cli/capabilityContext.js +1 -2
- package/dist/cli/commands/appHome.js +22 -0
- package/dist/cli/commands/capability.js +4 -4
- package/dist/cli/commands/compact.js +163 -13
- package/dist/cli/commands/doctor.js +122 -114
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +22 -8
- package/dist/cli/commands/personalGlossary.js +176 -0
- package/dist/cli/commands/prime/briefOrientation.js +746 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +190 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
- package/dist/cli/commands/prime/collectOrientationState.js +219 -0
- package/dist/cli/commands/prime/orientationOutput.js +421 -0
- package/dist/cli/commands/prime/types.js +1 -0
- package/dist/cli/commands/prime/v1Migration.js +38 -0
- package/dist/cli/commands/prime.js +80 -558
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +77 -52
- package/dist/cli/commands/report.js +88 -26
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +266 -142
- package/dist/cli/commands/state/decisions.js +51 -61
- package/dist/cli/commands/state/docs.js +63 -86
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +11 -64
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +11 -111
- package/dist/cli/commands/state/index.js +6 -41
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +21 -64
- package/dist/cli/commands/state/plan.js +11 -169
- package/dist/cli/commands/state/planTasks.js +154 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/progress.js +11 -45
- package/dist/cli/commands/state/shared.js +0 -1
- package/dist/cli/commands/state/todo.js +29 -108
- package/dist/cli/commands/state/write.js +433 -0
- package/dist/cli/commands/upgrade.js +146 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +246 -211
- package/dist/cli/commands/verify.js +24 -9
- package/dist/cli/contracts/bundleStatus.js +1 -0
- package/dist/cli/contracts/orientationState.js +1 -0
- package/dist/cli/dispatch/argvParser.js +32 -0
- package/dist/cli/dispatch/check.js +94 -50
- package/dist/cli/dispatch/commands.js +27 -0
- package/dist/cli/dispatch/index.js +82 -52
- package/dist/cli/dispatch/lifecycle.js +268 -108
- package/dist/cli/dispatch/prime.js +68 -29
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +1 -2
- package/dist/cli/dispatch/state.js +68 -77
- package/dist/cli/dispatch.js +0 -1
- package/dist/cli/errors.js +16 -17
- package/dist/cli/help.js +395 -41
- package/dist/cli/migrationRequired.js +122 -0
- package/dist/cli/orientation/attention.js +61 -0
- package/dist/cli/orientation/corpusCoverage.js +102 -0
- package/dist/cli/orientation.js +438 -170
- package/dist/cli/planArtifacts.js +350 -0
- package/dist/cli/planEvidence.js +157 -0
- package/dist/cli/planLifecycleState.js +36 -0
- package/dist/cli/planTaskIndex.js +11 -0
- package/dist/cli/preCutoverCommand.js +32 -0
- package/dist/cli/prime-blob.js +71 -3
- package/dist/cli/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +59 -0
- package/dist/cli/stateQuery.js +56 -14
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +25 -12
- package/dist/cli/todoReadinessSelection.js +192 -0
- package/dist/cli/todoSeverity.js +18 -0
- package/dist/core/atomicWriter.js +20 -0
- package/dist/core/developmentChannel.js +1 -0
- package/dist/core/developmentInvocation.js +374 -0
- package/dist/core/difflib.js +0 -1
- package/dist/core/envPaths.js +20 -0
- package/dist/core/jsonValue.js +5 -0
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +67 -3
- package/dist/core/shell.js +4 -0
- package/dist/core/skillIdentity.js +23 -0
- package/dist/core/sourceRoot.js +9 -12
- package/dist/core/text.js +10 -0
- package/dist/core/toml.js +0 -1
- package/dist/core/yaml.js +8 -1
- package/dist/eval/evalSkills.js +30 -26
- package/dist/eval/hybridRouteEvaluation.js +155 -0
- package/dist/eval/semanticEval.js +43 -20
- package/dist/eval/semanticFixtures.js +16 -5
- package/dist/hooks/common.js +3 -56
- package/dist/hooks/compaction/apply.js +252 -50
- package/dist/hooks/compaction/dryRun.js +7 -4
- package/dist/hooks/compaction/index.js +5 -6
- package/dist/hooks/compaction/parse.js +201 -5
- package/dist/hooks/compaction/retention.js +30 -25
- package/dist/hooks/compaction/status.js +149 -32
- package/dist/hooks/compaction/types.js +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js +0 -1
- package/dist/hooks/validateArtifact/index.js +7 -64
- package/dist/hooks/validateArtifact/markdown.js +57 -7
- package/dist/hooks/validateArtifact/schema.js +110 -19
- package/dist/hooks/validateArtifact/traversal.js +13 -11
- package/dist/hooks/validateArtifact/violations.js +7 -5
- package/dist/migrate/v2HandoffManifest.js +127 -8
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +108 -0
- package/dist/registries/artifactProtocolIds.js +2 -1
- package/dist/registries/artifactRegistry.js +224 -63
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +129 -2
- package/dist/registries/evaluatorHandoffContract.js +2 -3
- package/dist/registries/evidenceTierContract.js +371 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryCaveatContract.js +67 -0
- package/dist/registries/glossaryConsumerContractValidation.js +787 -0
- package/dist/registries/glossaryEntryContract.js +757 -0
- package/dist/registries/glossaryTermIdentity.js +17 -0
- package/dist/registries/glossaryTermOccurrence.js +20 -0
- package/dist/registries/hybridRoute.js +274 -0
- package/dist/registries/hybridRouteReceipt.js +221 -0
- package/dist/registries/packagePublication.js +273 -0
- package/dist/registries/packageRegistry.js +187 -211
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +174 -0
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +156 -6
- package/dist/runtime/lifecycleAdapterContract.js +457 -0
- package/dist/runtime/lifecycleAdapters.js +777 -0
- package/dist/runtime/lifecycleAuthority.js +453 -0
- package/dist/runtime/lifecycleOperationContract.js +123 -0
- package/dist/runtime/lifecycleOperations.js +634 -0
- package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
- package/dist/runtime/lifecyclePublication.js +415 -0
- package/dist/runtime/lifecycleSnapshot.js +438 -0
- package/dist/runtime/nativeResourceCleanup.js +502 -0
- package/dist/setup/opencode.js +20 -13
- package/dist/setup/opencodeConstants.js +1 -0
- package/dist/setup/sharedSkill.js +45 -0
- package/dist/setup/smokeChecks.js +21 -82
- package/dist/state/archiveDiscovery.js +580 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archiveRecovery.js +237 -0
- package/dist/state/archiveReplay.js +53 -0
- package/dist/state/canonicalMigrationRecord.js +36 -0
- package/dist/state/changelog.js +221 -0
- package/dist/state/decisionEntities.js +367 -0
- package/dist/state/decisionLegacyValidation.js +215 -0
- package/dist/state/decisionMigrationProvenance.js +199 -0
- package/dist/state/decisionOverlay.js +254 -0
- package/dist/state/decisionRevision.js +256 -0
- package/dist/state/decisionRevisionMigration.js +89 -0
- package/dist/state/directRetrieval.js +323 -0
- package/dist/state/durability.js +324 -0
- package/dist/state/entityCutover.js +459 -0
- package/dist/state/entityCutoverGit.js +127 -0
- package/dist/state/entityGlossaryAuthority.js +13 -0
- package/dist/state/entityListProjection.js +187 -0
- package/dist/state/entityListRuntimeRegistry.js +85 -0
- package/dist/state/entityMigrationCausality.js +97 -0
- package/dist/state/entityMigrationIdentity.js +5 -0
- package/dist/state/entityMigrationPreview.js +840 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +859 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +899 -0
- package/dist/state/exactReplacementRecovery.js +18 -0
- package/dist/state/experimentArchive.js +63 -0
- package/dist/state/experimentIdentity.js +202 -0
- package/dist/state/healthEntities.js +262 -0
- package/dist/state/healthEntityValidation.js +18 -0
- package/dist/state/healthRepair.js +69 -0
- package/dist/state/installRoot.js +64 -25
- package/dist/state/legacyEntityCutoverEvidence.js +65 -0
- package/dist/state/legacyIdentity.js +47 -0
- package/dist/state/legacySummaryRecord.js +6 -0
- package/dist/state/listAccounting.js +54 -0
- package/dist/state/listClassification.js +17 -0
- package/dist/state/listCursor.js +42 -0
- package/dist/state/listRetrieval.js +781 -0
- package/dist/state/migrationSourceBinding.js +30 -0
- package/dist/state/objectiveExperimentEntities.js +322 -0
- package/dist/state/planEntities.js +1027 -0
- package/dist/state/planIdentity.js +47 -0
- package/dist/state/planLineageValidation.js +52 -0
- package/dist/state/planReplacementTransaction.js +475 -0
- package/dist/state/planRetrieval.js +313 -0
- package/dist/state/planTaskRetrieval.js +294 -0
- package/dist/state/progressEntities.js +512 -0
- package/dist/state/progressGlossaryCaveat.js +168 -0
- package/dist/state/progressPublicationOrder.js +19 -0
- package/dist/state/progressWritePolicy.js +33 -0
- package/dist/state/projectRoot.js +62 -0
- package/dist/state/projectionPolicy.js +190 -0
- package/dist/state/retrievalAuthority.js +156 -0
- package/dist/state/safeProjectFile.js +155 -0
- package/dist/state/startupAnalysis/benchmark.js +92 -27
- package/dist/state/startupAnalysis/contract.js +48 -10
- package/dist/state/startupAnalysis/helpers.js +27 -73
- package/dist/state/startupAnalysis/index.js +0 -1
- package/dist/state/startupAnalysis/metrics.js +25 -19
- package/dist/state/startupAnalysis/records.js +13 -10
- package/dist/state/startupAnalysis/report.js +26 -38
- package/dist/state/startupAnalysis/threshold.js +19 -7
- package/dist/state/startupAnalysis.js +0 -1
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +222 -0
- package/dist/state/stateStorageAuthority.js +47 -0
- package/dist/state/summaryEntityRead.js +25 -0
- package/dist/state/summaryMigrationProvenance.js +66 -0
- package/dist/state/summarySourceRowAuthority.js +36 -0
- package/dist/state/todoActivationSafety.js +58 -0
- package/dist/state/todoDocsEntities.js +1124 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +182 -0
- package/dist/state/todoReconciliationInspection.js +171 -0
- package/dist/state/todoReconciliationRepair.js +318 -0
- package/dist/state/todoReconciliationTransaction.js +595 -0
- package/dist/state/write/assign.js +20 -0
- package/dist/state/write/candidateMutation.js +269 -0
- package/dist/state/write/errors.js +11 -0
- package/dist/state/write/experimentPublication.js +192 -0
- package/dist/state/write/explain.js +377 -0
- package/dist/state/write/fields.js +61 -0
- package/dist/state/write/glossaryPublication.js +263 -0
- package/dist/state/write/grammar.js +285 -0
- package/dist/state/write/helpers.js +29 -0
- package/dist/state/write/index.js +12 -0
- package/dist/state/write/input.js +391 -0
- package/dist/state/write/lock.js +837 -0
- package/dist/state/write/mutation.js +234 -0
- package/dist/state/write/operations.js +170 -0
- package/dist/state/write/planEvaluation.js +128 -0
- package/dist/state/write/planPublication.js +179 -0
- package/dist/state/write/runtimeOperations.js +146 -0
- package/dist/state/write/serialize.js +1 -0
- package/dist/state/write/transaction.js +57 -0
- package/dist/state/write/validate.js +7 -0
- package/dist/upgrade/appContentRefresh.js +383 -0
- package/dist/upgrade/appModel.js +8 -7
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +33 -0
- package/dist/upgrade/channels.js +12 -8
- package/dist/upgrade/compatibility.js +56 -21
- package/dist/upgrade/doctor.js +165 -199
- package/dist/upgrade/doctorClassifier.js +187 -0
- package/dist/upgrade/installedHooksRetirement.js +196 -0
- package/dist/upgrade/legacyAgentCleanup.js +282 -0
- package/dist/upgrade/lifecycleUpgrade.js +113 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +375 -79
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +29 -10
- package/dist/upgrade/npxPlatformStatus.js +22 -0
- package/dist/upgrade/projectIntegration.js +145 -189
- package/dist/upgrade/projectIntegrationDecision.js +50 -0
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +272 -373
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +263 -59
- package/dist/upgrade/v3CapabilitySurface.js +2 -3
- package/dist/upgrade/versionResolution.js +2 -3
- package/dist/validate/activationArtifactEvidence.js +852 -0
- package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +531 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +2 -8
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +133 -12
- package/dist/validate/crossCapability.js +15 -10
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +39 -45
- package/dist/validate/v1LegacyCruft.js +131 -0
- package/dist/validate/vocabularyAuthority.js +18 -13
- package/package.json +60 -29
- package/bundle/references/adapters/cursor.md +0 -213
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/analysis/benchmark.md +0 -267
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/coexistence-probe.yaml +0 -9
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/cli/single-name-protocol.yaml +0 -42
- package/bundle/references/cli/upgrade-repair-wording.md +0 -31
- package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
- package/bundle/references/meta/documentation-inventory.md +0 -49
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
- package/bundle/skills/agentera/agents/hej.toml +0 -6
- package/bundle/skills/agentera/agents/inspektera.toml +0 -6
- package/bundle/skills/agentera/agents/inspirera.toml +0 -6
- package/bundle/skills/agentera/agents/optimera.toml +0 -6
- package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
- package/bundle/skills/agentera/agents/planera.toml +0 -6
- package/bundle/skills/agentera/agents/profilera.toml +0 -6
- package/bundle/skills/agentera/agents/realisera.toml +0 -6
- package/bundle/skills/agentera/agents/resonera.toml +0 -6
- package/bundle/skills/agentera/agents/visionera.toml +0 -6
- package/bundle/skills/agentera/agents/visualisera.toml +0 -6
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
- package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
- package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
- package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
- package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
- package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
- package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
- package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
- package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
- package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
- package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
- package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
- package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
- package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
- package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
- package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
- package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
- package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
- package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
- package/bundle/skills/agentera/references/contract.md +0 -1039
- package/dist/analytics/extractCorpus/cli.js.map +0 -1
- package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/core.js.map +0 -1
- package/dist/analytics/extractCorpus/corpus.js.map +0 -1
- package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
- package/dist/analytics/extractCorpus/index.js.map +0 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/capabilities/dokumentera/instructions.js +0 -6
- package/dist/capabilities/dokumentera/instructions.js.map +0 -1
- package/dist/capabilities/hej/instructions.js +0 -6
- package/dist/capabilities/hej/instructions.js.map +0 -1
- package/dist/capabilities/index.js.map +0 -1
- package/dist/capabilities/inspektera/instructions.js +0 -6
- package/dist/capabilities/inspektera/instructions.js.map +0 -1
- package/dist/capabilities/inspirera/instructions.js +0 -6
- package/dist/capabilities/inspirera/instructions.js.map +0 -1
- package/dist/capabilities/optimera/instructions.js +0 -6
- package/dist/capabilities/optimera/instructions.js.map +0 -1
- package/dist/capabilities/orkestrera/instructions.js +0 -6
- package/dist/capabilities/orkestrera/instructions.js.map +0 -1
- package/dist/capabilities/planera/instructions.js +0 -6
- package/dist/capabilities/planera/instructions.js.map +0 -1
- package/dist/capabilities/profilera/instructions.js +0 -6
- package/dist/capabilities/profilera/instructions.js.map +0 -1
- package/dist/capabilities/realisera/instructions.js +0 -6
- package/dist/capabilities/realisera/instructions.js.map +0 -1
- package/dist/capabilities/resonera/instructions.js +0 -6
- package/dist/capabilities/resonera/instructions.js.map +0 -1
- package/dist/capabilities/visionera/instructions.js +0 -6
- package/dist/capabilities/visionera/instructions.js.map +0 -1
- package/dist/capabilities/visualisera/instructions.js +0 -6
- package/dist/capabilities/visualisera/instructions.js.map +0 -1
- package/dist/cli/appContext.js.map +0 -1
- package/dist/cli/argvalidate.js.map +0 -1
- package/dist/cli/capabilityContext/benchmark.js.map +0 -1
- package/dist/cli/capabilityContext/bespoke.js.map +0 -1
- package/dist/cli/capabilityContext/closeout.js.map +0 -1
- package/dist/cli/capabilityContext/contract.js.map +0 -1
- package/dist/cli/capabilityContext/evidence.js.map +0 -1
- package/dist/cli/capabilityContext/index.js.map +0 -1
- package/dist/cli/capabilityContext/orchestration.js.map +0 -1
- package/dist/cli/capabilityContext/planState.js.map +0 -1
- package/dist/cli/capabilityContext/progress.js.map +0 -1
- package/dist/cli/capabilityContext/realisera.js +0 -174
- package/dist/cli/capabilityContext/realisera.js.map +0 -1
- package/dist/cli/capabilityContext/shared.js.map +0 -1
- package/dist/cli/capabilityContext/slim.js.map +0 -1
- package/dist/cli/capabilityContext/startup.js.map +0 -1
- package/dist/cli/capabilityContext/types.js.map +0 -1
- package/dist/cli/capabilityContext.js.map +0 -1
- package/dist/cli/commands/backfill.js +0 -84
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/cli/commands/capability.js.map +0 -1
- package/dist/cli/commands/compact.js.map +0 -1
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state/decisions.js.map +0 -1
- package/dist/cli/commands/state/docs.js.map +0 -1
- package/dist/cli/commands/state/experiments.js.map +0 -1
- package/dist/cli/commands/state/health.js.map +0 -1
- package/dist/cli/commands/state/index.js.map +0 -1
- package/dist/cli/commands/state/objective.js.map +0 -1
- package/dist/cli/commands/state/plan.js.map +0 -1
- package/dist/cli/commands/state/progress.js.map +0 -1
- package/dist/cli/commands/state/shared.js.map +0 -1
- package/dist/cli/commands/state/todo.js.map +0 -1
- package/dist/cli/commands/state.js +0 -1023
- package/dist/cli/commands/state.js.map +0 -1
- package/dist/cli/commands/upgrade.js.map +0 -1
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/commands/verify.js.map +0 -1
- package/dist/cli/dispatch/check.js.map +0 -1
- package/dist/cli/dispatch/index.js.map +0 -1
- package/dist/cli/dispatch/lifecycle.js.map +0 -1
- package/dist/cli/dispatch/prime.js.map +0 -1
- package/dist/cli/dispatch/shared.js.map +0 -1
- package/dist/cli/dispatch/state.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/cli/todoMarkdown.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/git.js +0 -43
- package/dist/core/git.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/toml.js.map +0 -1
- package/dist/core/yaml.js.map +0 -1
- package/dist/eval/evalSkills.js.map +0 -1
- package/dist/eval/semanticEval.js.map +0 -1
- package/dist/eval/semanticFixtures.js.map +0 -1
- package/dist/hooks/common.js.map +0 -1
- package/dist/hooks/compaction/apply.js.map +0 -1
- package/dist/hooks/compaction/dryRun.js.map +0 -1
- package/dist/hooks/compaction/index.js.map +0 -1
- package/dist/hooks/compaction/parse.js.map +0 -1
- package/dist/hooks/compaction/retention.js.map +0 -1
- package/dist/hooks/compaction/status.js.map +0 -1
- package/dist/hooks/compaction/types.js.map +0 -1
- package/dist/hooks/compaction.js +0 -935
- package/dist/hooks/compaction.js.map +0 -1
- package/dist/hooks/cursorPreToolUse.js +0 -19
- package/dist/hooks/cursorPreToolUse.js.map +0 -1
- package/dist/hooks/cursorSessionStart.js +0 -71
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -209
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -203
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
- package/dist/hooks/validateArtifact/index.js.map +0 -1
- package/dist/hooks/validateArtifact/markdown.js.map +0 -1
- package/dist/hooks/validateArtifact/runtime.js +0 -83
- package/dist/hooks/validateArtifact/runtime.js.map +0 -1
- package/dist/hooks/validateArtifact/schema.js.map +0 -1
- package/dist/hooks/validateArtifact/traversal.js.map +0 -1
- package/dist/hooks/validateArtifact/violations.js.map +0 -1
- package/dist/hooks/validateArtifact.js +0 -924
- package/dist/hooks/validateArtifact.js.map +0 -1
- package/dist/migrate/v2HandoffManifest.js.map +0 -1
- package/dist/registries/artifactProtocolIds.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/capabilityContract.js.map +0 -1
- package/dist/registries/evaluatorHandoffContract.js.map +0 -1
- package/dist/registries/packageRegistry.js.map +0 -1
- package/dist/registries/runtimeAdapterRegistry.js +0 -315
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/release/releaseMetadata.js.map +0 -1
- package/dist/setup/codex/agents.js +0 -96
- package/dist/setup/codex/agents.js.map +0 -1
- package/dist/setup/codex/cli.js +0 -161
- package/dist/setup/codex/cli.js.map +0 -1
- package/dist/setup/codex/configToml.js +0 -644
- package/dist/setup/codex/configToml.js.map +0 -1
- package/dist/setup/codex/constants.js +0 -29
- package/dist/setup/codex/constants.js.map +0 -1
- package/dist/setup/codex/installRoot.js +0 -64
- package/dist/setup/codex/installRoot.js.map +0 -1
- package/dist/setup/codex/state.js +0 -270
- package/dist/setup/codex/state.js.map +0 -1
- package/dist/setup/codex.js +0 -12
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -127
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/doctor/core.js +0 -300
- package/dist/setup/doctor/core.js.map +0 -1
- package/dist/setup/doctor/diagnostics.js +0 -247
- package/dist/setup/doctor/diagnostics.js.map +0 -1
- package/dist/setup/doctor/opencode.js +0 -281
- package/dist/setup/doctor/opencode.js.map +0 -1
- package/dist/setup/doctor/report.js +0 -474
- package/dist/setup/doctor/report.js.map +0 -1
- package/dist/setup/doctor.js +0 -10
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/opencode.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/progressCommit.js +0 -289
- package/dist/state/progressCommit.js.map +0 -1
- package/dist/state/startupAnalysis/benchmark.js.map +0 -1
- package/dist/state/startupAnalysis/contract.js.map +0 -1
- package/dist/state/startupAnalysis/helpers.js.map +0 -1
- package/dist/state/startupAnalysis/index.js.map +0 -1
- package/dist/state/startupAnalysis/metrics.js.map +0 -1
- package/dist/state/startupAnalysis/records.js.map +0 -1
- package/dist/state/startupAnalysis/report.js.map +0 -1
- package/dist/state/startupAnalysis/threshold.js.map +0 -1
- package/dist/state/startupAnalysis.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/coexistenceProbe.js +0 -83
- package/dist/upgrade/coexistenceProbe.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/nextMajorDoctor.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
- package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
- package/dist/upgrade/versionResolution.js.map +0 -1
- package/dist/validate/appHomeContract.js.map +0 -1
- package/dist/validate/capability.js.map +0 -1
- package/dist/validate/crossCapability.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -772
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- package/dist/validate/vocabularyAuthority.js.map +0 -1
- /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
package/dist/eval/evalSkills.js
CHANGED
|
@@ -2,19 +2,24 @@ import fs from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { spawnSync } from "node:child_process";
|
|
4
4
|
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
5
|
+
/**
|
|
6
|
+
* Tier 2 eval runner for agentera skill smoke testing. Faithful TS port of
|
|
7
|
+
* scripts/eval_skills.py. Crash/error detection only; output correctness is not
|
|
8
|
+
* evaluated. `which`/`run` are injectable for deterministic testing.
|
|
9
|
+
*/
|
|
5
10
|
export const TRIGGER_PROMPTS = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
document: "Audit the documentation for this project.",
|
|
12
|
+
status: "Start a new session and give me a status briefing on this project.",
|
|
13
|
+
audit: "Run a codebase health audit.",
|
|
14
|
+
research: "Analyze https://example.com and map patterns to this project.",
|
|
15
|
+
optimize: "Optimize test suite execution time.",
|
|
16
|
+
orchestrate: "Execute the next cycle of the current plan.",
|
|
17
|
+
plan: "Plan the next feature for this project.",
|
|
18
|
+
profile: "Generate a decision profile from session history.",
|
|
19
|
+
build: "Run one autonomous development cycle.",
|
|
20
|
+
discuss: "Deliberate on whether to add a new dependency.",
|
|
21
|
+
vision: "Create a vision document for this project.",
|
|
22
|
+
design: "Create a visual identity system for this project.",
|
|
18
23
|
};
|
|
19
24
|
export const DEFAULT_TIMEOUT = 120;
|
|
20
25
|
export const DEFAULT_PARALLEL = 1;
|
|
@@ -36,7 +41,11 @@ export function detectRuntime(explicit, opts = {}) {
|
|
|
36
41
|
const which = opts.which ?? realWhich;
|
|
37
42
|
const err = opts.err ?? ((line) => process.stderr.write(line + "\n"));
|
|
38
43
|
if (explicit && explicit !== "auto") {
|
|
39
|
-
if (explicit
|
|
44
|
+
if (explicit !== "opencode" && explicit !== "cursor") {
|
|
45
|
+
err(`ERROR: '${explicit}' is not an active eval runtime; choose opencode or cursor.`);
|
|
46
|
+
throw new ExitError(1);
|
|
47
|
+
}
|
|
48
|
+
if (explicit === "cursor") {
|
|
40
49
|
if (which("cursor-agent") === null && which("agent") === null) {
|
|
41
50
|
err("ERROR: 'cursor-agent' not found on PATH. Install Cursor Agent CLI " +
|
|
42
51
|
"and ensure the binary is accessible.");
|
|
@@ -45,17 +54,14 @@ export function detectRuntime(explicit, opts = {}) {
|
|
|
45
54
|
}
|
|
46
55
|
return explicit;
|
|
47
56
|
}
|
|
48
|
-
const hasClaude = which("claude") !== null;
|
|
49
57
|
const hasOpencode = which("opencode") !== null;
|
|
50
58
|
const hasCursorAgent = which("cursor-agent") !== null || which("agent") !== null;
|
|
51
|
-
if (hasClaude)
|
|
52
|
-
return "claude";
|
|
53
59
|
if (hasOpencode)
|
|
54
60
|
return "opencode";
|
|
55
61
|
if (hasCursorAgent)
|
|
56
|
-
return "cursor
|
|
57
|
-
err("ERROR: Neither
|
|
58
|
-
"Install
|
|
62
|
+
return "cursor";
|
|
63
|
+
err("ERROR: Neither the OpenCode nor Cursor eval surface was found on PATH. " +
|
|
64
|
+
"Install an active eval runtime host and ensure the binary is accessible.");
|
|
59
65
|
throw new ExitError(1);
|
|
60
66
|
}
|
|
61
67
|
export function parseFrontmatterName(text) {
|
|
@@ -103,7 +109,7 @@ const realRun = (cmd, opts) => {
|
|
|
103
109
|
timedOut: result.signal === "SIGTERM" && result.error !== undefined,
|
|
104
110
|
};
|
|
105
111
|
};
|
|
106
|
-
export function invokeSkill(name, prompt, timeout, runtime = "
|
|
112
|
+
export function invokeSkill(name, prompt, timeout, runtime = "opencode", opts = {}) {
|
|
107
113
|
const which = opts.which ?? realWhich;
|
|
108
114
|
const run = opts.run ?? realRun;
|
|
109
115
|
const repoRoot = opts.repoRoot ?? resolveSourceRoot();
|
|
@@ -113,14 +119,13 @@ export function invokeSkill(name, prompt, timeout, runtime = "claude", opts = {}
|
|
|
113
119
|
cmd = ["opencode", "run", "--prompt"];
|
|
114
120
|
stdinPrompt = prompt;
|
|
115
121
|
}
|
|
116
|
-
else if (runtime === "cursor
|
|
122
|
+
else if (runtime === "cursor") {
|
|
117
123
|
const binary = which("cursor-agent") ? "cursor-agent" : "agent";
|
|
118
124
|
cmd = [binary, "-p", "--output-format", "json", "--force", prompt];
|
|
119
125
|
stdinPrompt = null;
|
|
120
126
|
}
|
|
121
127
|
else {
|
|
122
|
-
|
|
123
|
-
stdinPrompt = prompt;
|
|
128
|
+
throw new ExitError(1, `unsupported active eval runtime: ${runtime}`);
|
|
124
129
|
}
|
|
125
130
|
const start = Date.now();
|
|
126
131
|
let error = null;
|
|
@@ -163,7 +168,7 @@ export function invokeSkill(name, prompt, timeout, runtime = "claude", opts = {}
|
|
|
163
168
|
error,
|
|
164
169
|
};
|
|
165
170
|
}
|
|
166
|
-
export function runSkills(skills, timeout, _parallel, runtime = "
|
|
171
|
+
export function runSkills(skills, timeout, _parallel, runtime = "opencode", opts = {}) {
|
|
167
172
|
// Parallelism in the Python runner is a maintainer perf detail; the smoke
|
|
168
173
|
// semantics (one result per skill, original order) are preserved sequentially.
|
|
169
174
|
return skills.map((entry) => invokeSkill(entry.name, entry.prompt, timeout, runtime, opts));
|
|
@@ -179,7 +184,7 @@ export function buildReport(results) {
|
|
|
179
184
|
results,
|
|
180
185
|
};
|
|
181
186
|
}
|
|
182
|
-
export function buildDryRun(skills, runtime = "
|
|
187
|
+
export function buildDryRun(skills, runtime = "opencode", runtimeSource = "auto-detected") {
|
|
183
188
|
return {
|
|
184
189
|
mode: "dry-run",
|
|
185
190
|
runtime: `${runtime} (${runtimeSource})`,
|
|
@@ -255,4 +260,3 @@ export function parseArgs(argv) {
|
|
|
255
260
|
}
|
|
256
261
|
return args;
|
|
257
262
|
}
|
|
258
|
-
//# sourceMappingURL=evalSkills.js.map
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { loadYamlMapping } from "../core/yaml.js";
|
|
5
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
6
|
+
import { resolveRouteRequest } from "../registries/hybridRoute.js";
|
|
7
|
+
import { validateRouteReceiptSubmission } from "../registries/hybridRouteReceipt.js";
|
|
8
|
+
function mapping(value, source) {
|
|
9
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
10
|
+
throw new Error(`${source} must be a mapping`);
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
function requiredString(value, source) {
|
|
14
|
+
if (typeof value !== "string" || !value)
|
|
15
|
+
throw new Error(`${source} must be a non-empty string`);
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function cases(value, source) {
|
|
19
|
+
if (!Array.isArray(value))
|
|
20
|
+
throw new Error(`${source} must be a list`);
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
function elapsedMs(start) {
|
|
24
|
+
return Number(process.hrtime.bigint() - start) / 1_000_000;
|
|
25
|
+
}
|
|
26
|
+
function percentile(values) {
|
|
27
|
+
if (values.length === 0)
|
|
28
|
+
return null;
|
|
29
|
+
const sorted = [...values].sort((left, right) => left - right);
|
|
30
|
+
return sorted[Math.ceil(sorted.length * 0.95) - 1];
|
|
31
|
+
}
|
|
32
|
+
function hashFile(file) {
|
|
33
|
+
return crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex");
|
|
34
|
+
}
|
|
35
|
+
function nullableFixtureReceipt(receipt) {
|
|
36
|
+
return {
|
|
37
|
+
version: null,
|
|
38
|
+
request_sha256: null,
|
|
39
|
+
semantic_capsule_sha256: null,
|
|
40
|
+
outcome: null,
|
|
41
|
+
capability: null,
|
|
42
|
+
compound: null,
|
|
43
|
+
question: null,
|
|
44
|
+
remainder_span: null,
|
|
45
|
+
...receipt,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** Runs the complete frozen synthetic conformance corpus without invoking a semantic host. */
|
|
49
|
+
export function evaluateHybridRoute(sourceRoot = resolveSourceRoot()) {
|
|
50
|
+
const contractPath = path.join(sourceRoot, "references/cli/hybrid-route-contract.yaml");
|
|
51
|
+
const corpusPath = path.join(sourceRoot, "fixtures/routing/hybrid-corpus.yaml");
|
|
52
|
+
const phrasePath = path.join(sourceRoot, "skills/agentera/route-phrases.yaml");
|
|
53
|
+
const skillPath = path.join(sourceRoot, "skills/agentera/SKILL.md");
|
|
54
|
+
const contract = loadYamlMapping(fs.readFileSync(contractPath, "utf8"));
|
|
55
|
+
const corpus = loadYamlMapping(fs.readFileSync(corpusPath, "utf8"));
|
|
56
|
+
const evaluation = mapping(contract.evaluation, "contract.evaluation");
|
|
57
|
+
const targetGates = mapping(evaluation.target_gates, "contract.evaluation.target_gates");
|
|
58
|
+
const routeCases = cases(corpus.route_cases, "corpus.route_cases");
|
|
59
|
+
const receiptCases = cases(corpus.receipt_cases, "corpus.receipt_cases");
|
|
60
|
+
const results = [];
|
|
61
|
+
const deterministicTimings = [];
|
|
62
|
+
const receiptTimings = [];
|
|
63
|
+
for (const routeCase of routeCases) {
|
|
64
|
+
const start = process.hrtime.bigint();
|
|
65
|
+
const observed = resolveRouteRequest(routeCase.request, sourceRoot);
|
|
66
|
+
const elapsed = elapsedMs(start);
|
|
67
|
+
deterministicTimings.push(elapsed);
|
|
68
|
+
const passed = observed.outcome === routeCase.expected.phase1
|
|
69
|
+
&& (observed.outcome !== "deterministic_selection" || (observed.tier === routeCase.expected.tier && observed.capability === routeCase.expected.capability));
|
|
70
|
+
const harmfulMisroute = observed.outcome === "deterministic_selection"
|
|
71
|
+
&& (routeCase.expected.phase1 !== "deterministic_selection" || observed.capability !== routeCase.expected.capability);
|
|
72
|
+
results.push({
|
|
73
|
+
case_id: routeCase.id,
|
|
74
|
+
partition: routeCase.partition,
|
|
75
|
+
evaluation_tier: "deterministic",
|
|
76
|
+
routing_tier: observed.outcome === "deterministic_selection" ? observed.tier : "deterministic_abstention",
|
|
77
|
+
expected_outcome: routeCase.expected.phase1,
|
|
78
|
+
observed_outcome: observed.outcome,
|
|
79
|
+
...(observed.outcome === "deterministic_selection" ? { capability: observed.capability } : {}),
|
|
80
|
+
status: passed ? "pass" : "fail",
|
|
81
|
+
...(passed ? {} : { failure_tier: "deterministic" }),
|
|
82
|
+
harmful_misroute: harmfulMisroute,
|
|
83
|
+
elapsed_ms: elapsed,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
for (const receiptCase of receiptCases) {
|
|
87
|
+
const start = process.hrtime.bigint();
|
|
88
|
+
let terminal = "invalid_receipt";
|
|
89
|
+
try {
|
|
90
|
+
const receipt = receiptCase.valid ? nullableFixtureReceipt(receiptCase.receipt) : receiptCase.receipt;
|
|
91
|
+
terminal = validateRouteReceiptSubmission({ request: receiptCase.request, receipt }, sourceRoot).outcome;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
terminal = "invalid_receipt";
|
|
95
|
+
}
|
|
96
|
+
const elapsed = elapsedMs(start);
|
|
97
|
+
receiptTimings.push(elapsed);
|
|
98
|
+
const passed = terminal === receiptCase.expected_terminal;
|
|
99
|
+
const harmfulMisroute = terminal === "selected" && receiptCase.expected_terminal !== "selected";
|
|
100
|
+
results.push({
|
|
101
|
+
case_id: receiptCase.id,
|
|
102
|
+
partition: receiptCase.partition,
|
|
103
|
+
evaluation_tier: "receipt_validation",
|
|
104
|
+
routing_tier: "semantic_receipt_validation",
|
|
105
|
+
expected_outcome: receiptCase.expected_terminal,
|
|
106
|
+
observed_outcome: terminal,
|
|
107
|
+
status: passed ? "pass" : "fail",
|
|
108
|
+
...(passed ? {} : { failure_tier: "receipt_validation" }),
|
|
109
|
+
harmful_misroute: harmfulMisroute,
|
|
110
|
+
elapsed_ms: elapsed,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const failed = results.filter(({ status }) => status === "fail");
|
|
114
|
+
const harmfulMisroutes = results.filter((result) => result.harmful_misroute === true).length;
|
|
115
|
+
return {
|
|
116
|
+
schemaVersion: "agentera.hybrid_route_evaluation.v1",
|
|
117
|
+
status: failed.length === 0 ? "pass" : "fail",
|
|
118
|
+
authority: {
|
|
119
|
+
contract_version: requiredString(contract.schema_version, "contract.schema_version"),
|
|
120
|
+
protocol_sha256: hashFile(contractPath),
|
|
121
|
+
phrase_authority_sha256: hashFile(phrasePath),
|
|
122
|
+
shared_skill_sha256: hashFile(skillPath),
|
|
123
|
+
},
|
|
124
|
+
corpus: {
|
|
125
|
+
schema_version: requiredString(corpus.schema_version, "corpus.schema_version"),
|
|
126
|
+
content_sha256: hashFile(corpusPath),
|
|
127
|
+
partitions: corpus.partitions,
|
|
128
|
+
case_count: results.length,
|
|
129
|
+
},
|
|
130
|
+
results,
|
|
131
|
+
aggregate_metrics: {
|
|
132
|
+
passed: results.length - failed.length,
|
|
133
|
+
failed: failed.length,
|
|
134
|
+
harmful_misroutes: {
|
|
135
|
+
scope: "deterministic_and_receipt_validation_conformance",
|
|
136
|
+
target: targetGates.harmful_misroutes,
|
|
137
|
+
observed: harmfulMisroutes,
|
|
138
|
+
status: harmfulMisroutes === 0 ? "pass" : "fail",
|
|
139
|
+
taxonomy: evaluation.harmful_misroute_taxonomy,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
model_context: {
|
|
143
|
+
status: "unmeasured",
|
|
144
|
+
reason: "host_dependent",
|
|
145
|
+
samples: 0,
|
|
146
|
+
distributions: {},
|
|
147
|
+
},
|
|
148
|
+
latency: {
|
|
149
|
+
deterministic_phase1: { sample_count: deterministicTimings.length, p95_ms: percentile(deterministicTimings), target: targetGates.deterministic_phase1_p95 },
|
|
150
|
+
receipt_validation: { sample_count: receiptTimings.length, p95_ms: percentile(receiptTimings), target: targetGates.receipt_validation_p95 },
|
|
151
|
+
semantic_model: { status: "unmeasured", reason: "host_dependent" },
|
|
152
|
+
end_to_end: { status: "unmeasured", reason: "host_dependent" },
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
@@ -45,7 +45,9 @@ export function buildReport(results) {
|
|
|
45
45
|
function checkOutputFacts(fixture) {
|
|
46
46
|
const facts = [];
|
|
47
47
|
const expected = fixture.expectedFacts;
|
|
48
|
-
|
|
48
|
+
const requiredOutput = expected.required_output;
|
|
49
|
+
const requiredOutputArr = Array.isArray(requiredOutput) ? requiredOutput : []; // cast: JSON.parse fixture IO boundary
|
|
50
|
+
requiredOutputArr.forEach((text, index) => {
|
|
49
51
|
const found = fixture.capturedOutput.includes(text);
|
|
50
52
|
facts.push({
|
|
51
53
|
fact: `required_output[${index}]`,
|
|
@@ -53,7 +55,9 @@ function checkOutputFacts(fixture) {
|
|
|
53
55
|
detail: `captured output ${found ? "contains" : "does not contain"} ${pyRepr(text)}`,
|
|
54
56
|
});
|
|
55
57
|
});
|
|
56
|
-
|
|
58
|
+
const forbiddenOutput = expected.forbidden_output;
|
|
59
|
+
const forbiddenOutputArr = Array.isArray(forbiddenOutput) ? forbiddenOutput : []; // cast: JSON.parse fixture IO boundary
|
|
60
|
+
forbiddenOutputArr.forEach((text, index) => {
|
|
57
61
|
const found = fixture.capturedOutput.includes(text);
|
|
58
62
|
facts.push({
|
|
59
63
|
fact: `forbidden_output[${index}]`,
|
|
@@ -61,7 +65,8 @@ function checkOutputFacts(fixture) {
|
|
|
61
65
|
detail: `captured output ${found ? "contains forbidden" : "omits forbidden"} ${pyRepr(text)}`,
|
|
62
66
|
});
|
|
63
67
|
});
|
|
64
|
-
const
|
|
68
|
+
const artifactExpectations = expected.artifact_expectations; // cast: JSON.parse fixture IO boundary
|
|
69
|
+
const writes = artifactExpectations?.writes;
|
|
65
70
|
if (writes === "none") {
|
|
66
71
|
facts.push({
|
|
67
72
|
fact: "artifact_expectations.writes",
|
|
@@ -74,9 +79,12 @@ function checkOutputFacts(fixture) {
|
|
|
74
79
|
function checkToolTraceFacts(fixture) {
|
|
75
80
|
const facts = [];
|
|
76
81
|
const expected = fixture.expectedFacts;
|
|
77
|
-
const
|
|
82
|
+
const rawCalls = fixture.toolTrace.calls;
|
|
83
|
+
const callList = Array.isArray(rawCalls) ? rawCalls : []; // cast: JSON.parse fixture IO boundary
|
|
78
84
|
const calls = callList.join("\n");
|
|
79
|
-
|
|
85
|
+
const requiredToolCalls = expected.required_tool_calls;
|
|
86
|
+
const requiredToolCallsArr = Array.isArray(requiredToolCalls) ? requiredToolCalls : []; // cast: JSON.parse fixture IO boundary
|
|
87
|
+
requiredToolCallsArr.forEach((text, index) => {
|
|
80
88
|
const found = calls.includes(text);
|
|
81
89
|
facts.push({
|
|
82
90
|
fact: `required_tool_calls[${index}]`,
|
|
@@ -84,7 +92,9 @@ function checkToolTraceFacts(fixture) {
|
|
|
84
92
|
detail: `tool trace ${found ? "contains" : "does not contain"} ${pyRepr(text)}`,
|
|
85
93
|
});
|
|
86
94
|
});
|
|
87
|
-
|
|
95
|
+
const forbiddenToolCalls = expected.forbidden_tool_calls;
|
|
96
|
+
const forbiddenToolCallsArr = Array.isArray(forbiddenToolCalls) ? forbiddenToolCalls : []; // cast: JSON.parse fixture IO boundary
|
|
97
|
+
forbiddenToolCallsArr.forEach((text, index) => {
|
|
88
98
|
const found = calls.includes(text);
|
|
89
99
|
facts.push({
|
|
90
100
|
fact: `forbidden_tool_calls[${index}]`,
|
|
@@ -92,31 +102,43 @@ function checkToolTraceFacts(fixture) {
|
|
|
92
102
|
detail: `tool trace ${found ? "contains forbidden" : "omits forbidden"} ${pyRepr(text)}`,
|
|
93
103
|
});
|
|
94
104
|
});
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
105
|
+
const toolCallCounts = expected.tool_call_counts;
|
|
106
|
+
if (toolCallCounts && typeof toolCallCounts === "object" && !Array.isArray(toolCallCounts)) {
|
|
107
|
+
for (const [text, expectedCount] of Object.entries(toolCallCounts)) { // cast: JSON.parse fixture IO boundary
|
|
108
|
+
const actual = callList.filter((call) => call.includes(text)).length;
|
|
109
|
+
facts.push({
|
|
110
|
+
fact: `tool_call_counts[${text}]`,
|
|
111
|
+
status: actual === expectedCount ? "pass" : "fail",
|
|
112
|
+
detail: `tool trace contains ${actual} call(s) matching ${pyRepr(text)}; expected ${expectedCount}`,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
102
115
|
}
|
|
103
116
|
return facts;
|
|
104
117
|
}
|
|
105
118
|
function checkSeededArtifactFacts(fixture) {
|
|
106
119
|
const facts = [];
|
|
107
120
|
const byPath = {};
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
const rawFiles = fixture.seededState.files;
|
|
122
|
+
const filesArr = Array.isArray(rawFiles) ? rawFiles : [];
|
|
123
|
+
for (const item of filesArr) {
|
|
124
|
+
if (item && typeof item === "object" && !Array.isArray(item)) {
|
|
125
|
+
const obj = item; // cast: JSON.parse fixture IO boundary
|
|
126
|
+
const path = obj.path;
|
|
127
|
+
if (typeof path === "string") {
|
|
128
|
+
byPath[path] = obj.content; // cast: JSON.parse fixture IO boundary
|
|
129
|
+
}
|
|
111
130
|
}
|
|
112
131
|
}
|
|
113
|
-
|
|
132
|
+
const requiredArtifacts = fixture.expectedFacts.required_artifacts;
|
|
133
|
+
const requiredArtifactsArr = Array.isArray(requiredArtifacts) ? requiredArtifacts : [];
|
|
134
|
+
requiredArtifactsArr.forEach((expected, index) => {
|
|
114
135
|
const factName = `required_artifacts[${index}]`;
|
|
115
136
|
if (!expected || typeof expected !== "object" || Array.isArray(expected)) {
|
|
116
137
|
facts.push({ fact: factName, status: "fail", detail: "expected artifact fact must be an object" });
|
|
117
138
|
return;
|
|
118
139
|
}
|
|
119
|
-
const
|
|
140
|
+
const expectedObj = expected; // cast: JSON.parse fixture IO boundary
|
|
141
|
+
const path = expectedObj.path;
|
|
120
142
|
if (typeof path !== "string" || !path.trim()) {
|
|
121
143
|
facts.push({ fact: factName, status: "fail", detail: "expected artifact fact must name a path" });
|
|
122
144
|
return;
|
|
@@ -126,7 +148,9 @@ function checkSeededArtifactFacts(fixture) {
|
|
|
126
148
|
facts.push({ fact: factName, status: "fail", detail: `seeded artifact ${pyRepr(path)} is missing` });
|
|
127
149
|
return;
|
|
128
150
|
}
|
|
129
|
-
const
|
|
151
|
+
const containsRaw = expectedObj.contains;
|
|
152
|
+
const containsArr = Array.isArray(containsRaw) ? containsRaw : []; // cast: JSON.parse fixture IO boundary
|
|
153
|
+
const missing = containsArr.filter((text) => !content.includes(text));
|
|
130
154
|
if (missing.length > 0) {
|
|
131
155
|
facts.push({ fact: factName, status: "fail", detail: `seeded artifact ${pyRepr(path)} lacks ${pyRepr(missing[0])}` });
|
|
132
156
|
}
|
|
@@ -145,4 +169,3 @@ export function main(argv = [], out = (l) => process.stdout.write(l)) {
|
|
|
145
169
|
out(pyJsonIndent(report) + "\n");
|
|
146
170
|
return report.status === "pass" ? 0 : 1;
|
|
147
171
|
}
|
|
148
|
-
//# sourceMappingURL=semanticEval.js.map
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
|
+
/**
|
|
3
|
+
* Semantic fixture contract validation for offline skill evals. Faithful TS
|
|
4
|
+
* port of scripts/semantic_fixtures.py. Defines the fixture shape only.
|
|
5
|
+
*/
|
|
2
6
|
export const REQUIRED_SECTIONS = [
|
|
3
7
|
"Prompt",
|
|
4
8
|
"Seeded Project State",
|
|
@@ -113,10 +117,18 @@ function validateExpectedFacts(sectionText) {
|
|
|
113
117
|
errors.push(...validateStringList(d, "required_tool_calls", false));
|
|
114
118
|
errors.push(...validateStringList(d, "forbidden_tool_calls", false));
|
|
115
119
|
errors.push(...validateToolCallCounts(d.tool_call_counts));
|
|
116
|
-
const
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
(
|
|
120
|
+
const requiredOutput = d.required_output;
|
|
121
|
+
const forbiddenOutput = d.forbidden_output;
|
|
122
|
+
const hasOutputFact = Boolean((Array.isArray(requiredOutput) || typeof requiredOutput === "string" ? requiredOutput.length : 0) ||
|
|
123
|
+
(Array.isArray(forbiddenOutput) || typeof forbiddenOutput === "string" ? forbiddenOutput.length : 0));
|
|
124
|
+
const requiredToolCalls = d.required_tool_calls;
|
|
125
|
+
const forbiddenToolCalls = d.forbidden_tool_calls;
|
|
126
|
+
const toolCallCounts = d.tool_call_counts;
|
|
127
|
+
const hasToolFact = Boolean((Array.isArray(requiredToolCalls) || typeof requiredToolCalls === "string" ? requiredToolCalls.length : 0) ||
|
|
128
|
+
(Array.isArray(forbiddenToolCalls) || typeof forbiddenToolCalls === "string" ? forbiddenToolCalls.length : 0) ||
|
|
129
|
+
(toolCallCounts && typeof toolCallCounts === "object" && !Array.isArray(toolCallCounts)
|
|
130
|
+
? Object.keys(toolCallCounts).length
|
|
131
|
+
: 0));
|
|
120
132
|
const hasArtifactFact = "artifact_expectations" in d;
|
|
121
133
|
if (!hasOutputFact && !hasToolFact && !hasArtifactFact) {
|
|
122
134
|
errors.push("malformed section: Expected Facts: must declare at least one expected fact");
|
|
@@ -224,4 +236,3 @@ export function pyRepr(value) {
|
|
|
224
236
|
}
|
|
225
237
|
return "'" + value.replace(/\\/g, "\\\\").replace(/'/g, "\\'") + "'";
|
|
226
238
|
}
|
|
227
|
-
//# sourceMappingURL=semanticFixtures.js.map
|
package/dist/hooks/common.js
CHANGED
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import crypto from "node:crypto";
|
|
2
1
|
import fs from "node:fs";
|
|
3
|
-
import os from "node:os";
|
|
4
2
|
import path from "node:path";
|
|
5
|
-
import { expanduser, resolvePath } from "../core/paths.js";
|
|
6
3
|
import { ARTIFACT_PROTOCOL_PATHS, normalizeArtifactMappingKeys, normalizeArtifactProtocolId, } from "../registries/artifactProtocolIds.js";
|
|
7
|
-
import { resolveCandidate } from "../state/installRoot.js";
|
|
8
4
|
/**
|
|
9
|
-
* Shared utilities for
|
|
10
|
-
* compaction retention caps, runtime-local session bookmark paths, and artifact
|
|
11
|
-
* path resolution.
|
|
5
|
+
* Shared utilities for compaction retention caps and artifact path resolution.
|
|
12
6
|
*/
|
|
13
7
|
export { loadYamlMapping, loadYamlMappingFile, } from "../core/yaml.js";
|
|
14
8
|
export const MAX_FULL_ENTRIES = 10;
|
|
15
9
|
export const MAX_ONELINE_ENTRIES = 40;
|
|
16
|
-
export const MAX_TOTAL_ENTRIES =
|
|
10
|
+
export const MAX_TOTAL_ENTRIES = 50;
|
|
17
11
|
export function applyRetentionCaps(fullEntries, archiveEntries, opts = {}) {
|
|
18
12
|
const maxFull = opts.maxFull ?? MAX_FULL_ENTRIES;
|
|
19
13
|
const maxOneline = opts.maxOneline ?? MAX_ONELINE_ENTRIES;
|
|
@@ -21,52 +15,6 @@ export function applyRetentionCaps(fullEntries, archiveEntries, opts = {}) {
|
|
|
21
15
|
const cappedArchive = archiveEntries.slice(0, maxOneline);
|
|
22
16
|
return [...fullEntries.slice(0, maxFull), ...cappedArchive].slice(0, maxTotal);
|
|
23
17
|
}
|
|
24
|
-
export function resolveAgenteraDataHome(env = process.env, home = os.homedir()) {
|
|
25
|
-
const configured = env.AGENTERA_HOME;
|
|
26
|
-
if (configured) {
|
|
27
|
-
return expanduser(configured);
|
|
28
|
-
}
|
|
29
|
-
const [root] = resolveCandidate(null, { env, home });
|
|
30
|
-
return root;
|
|
31
|
-
}
|
|
32
|
-
export function resolveSessionPath(projectRoot, env = process.env, home = os.homedir()) {
|
|
33
|
-
const dataHome = resolveAgenteraDataHome(env, home);
|
|
34
|
-
const resolved = resolvePath(projectRoot);
|
|
35
|
-
const digest = crypto.createHash("sha256").update(resolved, "utf8").digest("hex").slice(0, 16);
|
|
36
|
-
const name = path.basename(projectRoot);
|
|
37
|
-
const slug = name.replace(/[^A-Za-z0-9_.-]+/g, "-").replace(/^[.-]+|[.-]+$/g, "") || "project";
|
|
38
|
-
return path.join(dataHome, "sessions", `${slug}-${digest}`, "session.yaml");
|
|
39
|
-
}
|
|
40
|
-
export function sessionBookmarkToOneline(entry) {
|
|
41
|
-
return {
|
|
42
|
-
timestamp: String(entry.timestamp ?? ""),
|
|
43
|
-
artifacts: [],
|
|
44
|
-
summary: String(entry.summary ?? ""),
|
|
45
|
-
kind: "oneline",
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
export function compactSessionBookmarkEntries(entries, opts = {}) {
|
|
49
|
-
const maxFull = opts.maxFull ?? MAX_FULL_ENTRIES;
|
|
50
|
-
const maxOneline = opts.maxOneline ?? MAX_ONELINE_ENTRIES;
|
|
51
|
-
const maxTotal = opts.maxTotal ?? MAX_TOTAL_ENTRIES;
|
|
52
|
-
const convert = opts.toOneline ?? sessionBookmarkToOneline;
|
|
53
|
-
const ordered = [...entries].sort((a, b) => {
|
|
54
|
-
const ta = String(a.timestamp ?? "");
|
|
55
|
-
const tb = String(b.timestamp ?? "");
|
|
56
|
-
return ta < tb ? 1 : ta > tb ? -1 : 0;
|
|
57
|
-
});
|
|
58
|
-
const full = [];
|
|
59
|
-
const archive = [];
|
|
60
|
-
for (const entry of ordered) {
|
|
61
|
-
if (entry.kind === "full" && full.length < maxFull) {
|
|
62
|
-
full.push(entry);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
archive.push(convert(entry));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return applyRetentionCaps(full, archive, { maxFull, maxOneline, maxTotal });
|
|
69
|
-
}
|
|
70
18
|
export const DEFAULT_ARTIFACT_PATHS = { ...ARTIFACT_PROTOCOL_PATHS };
|
|
71
19
|
function stripQuotes(value) {
|
|
72
20
|
return value.replace(/^['"]|['"]$/g, "");
|
|
@@ -131,7 +79,7 @@ export function resolveArtifactPath(projectRoot, artifact, overrides = null) {
|
|
|
131
79
|
return path.join(projectRoot, DEFAULT_ARTIFACT_PATHS[artifactId] ?? `.agentera/${artifactId}.yaml`);
|
|
132
80
|
}
|
|
133
81
|
export function loadArtifactOverrides(projectRoot) {
|
|
134
|
-
const yamlPath = path.join(projectRoot,
|
|
82
|
+
const yamlPath = path.join(projectRoot, ARTIFACT_PROTOCOL_PATHS.docs);
|
|
135
83
|
if (fs.existsSync(yamlPath)) {
|
|
136
84
|
const mapping = parseDocsYamlMapping(fs.readFileSync(yamlPath, "utf8"));
|
|
137
85
|
if (Object.keys(mapping).length > 0) {
|
|
@@ -140,4 +88,3 @@ export function loadArtifactOverrides(projectRoot) {
|
|
|
140
88
|
}
|
|
141
89
|
return null;
|
|
142
90
|
}
|
|
143
|
-
//# sourceMappingURL=common.js.map
|