agentera 3.0.0-dev.7 → 3.0.0-dev.74
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 +229 -22
- package/bundle/.agentera-build-source.json +8 -0
- 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 +2 -4
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +484 -0
- package/bundle/references/adapters/package-registry.yaml +439 -188
- package/bundle/references/adapters/package-surface-characterization.md +68 -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 +559 -0
- package/bundle/references/analysis/personal-glossary-evaluation-authority.yaml +175 -0
- package/bundle/references/analysis/personal-glossary-evaluation-corpus.yaml +291 -0
- package/bundle/references/analysis/personal-glossary-holdout.yaml +192 -0
- package/bundle/references/analysis/verification-policy.yaml +266 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
- package/bundle/references/artifacts/glossary-entry-contract.yaml +2752 -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 +3 -4
- package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
- package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
- package/bundle/references/cli/routing-model.md +152 -93
- package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
- package/bundle/references/cli/update-channels.yaml +6 -4
- package/bundle/references/cli/vocabulary-index.yaml +5 -7
- package/bundle/references/cli/vocabulary.md +52 -94
- package/bundle/references/meta/retained-reference-authority.yaml +166 -0
- package/bundle/skills/agentera/SKILL.md +183 -63
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
- package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
- package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
- package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
- package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
- package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
- package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
- package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
- package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
- package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
- package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
- package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +13 -4
- package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +8 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +67 -3
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
- package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
- package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
- package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
- package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
- package/bundle/skills/agentera/protocol.yaml +4 -4
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +30 -12
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -12
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -9
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +56 -19
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -4
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +464 -32
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +131 -18
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +302 -7
- package/dist/.agentera-build-source.json +8 -0
- package/dist/analytics/extractCorpus/cli.js +52 -11
- package/dist/analytics/extractCorpus/copilotSessions.js +19 -8
- package/dist/analytics/extractCorpus/core.js +262 -14
- package/dist/analytics/extractCorpus/corpus.js +57 -18
- package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
- package/dist/analytics/extractCorpus/cursorSessions.js +28 -8
- package/dist/analytics/extractCorpus/evidenceTiers.js +709 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
- package/dist/analytics/extractCorpus/filesystemSources.js +5 -5
- package/dist/analytics/extractCorpus/index.js +4 -2
- package/dist/analytics/extractCorpus/jsonlSessions.js +76 -8
- package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js +12 -4
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +0 -1
- package/dist/analytics/glossaryAdviceResolution.js +166 -0
- package/dist/analytics/glossaryInputAcquisition.js +319 -0
- package/dist/analytics/personalGlossaryAdmission.js +113 -0
- package/dist/analytics/personalGlossaryCandidateProjection.js +692 -0
- package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -0
- package/dist/analytics/personalGlossaryCandidateReadView.js +23 -0
- package/dist/analytics/personalGlossaryCurrentGeneration.js +25 -0
- package/dist/analytics/personalGlossaryDecision.js +203 -0
- package/dist/analytics/personalGlossaryExplicit.js +788 -0
- package/dist/analytics/personalGlossaryExplicitMining.js +285 -0
- package/dist/analytics/personalGlossaryExplicitScope.js +41 -0
- package/dist/analytics/personalGlossaryExplicitSegments.js +418 -0
- package/dist/analytics/personalGlossaryExplicitTypes.js +26 -0
- package/dist/analytics/personalGlossaryLexicalClassifier.js +175 -0
- package/dist/analytics/personalGlossaryProfile.js +229 -0
- package/dist/analytics/personalGlossaryRecurrence.js +618 -0
- package/dist/analytics/personalGlossaryReviewRecordStorage.js +428 -0
- package/dist/analytics/personalGlossaryReviewRecords.js +332 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +150 -23
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -6
- package/dist/capabilities/build/instructions.js +59 -6
- package/dist/capabilities/design/instructions.js +3 -4
- package/dist/capabilities/discuss/instructions.js +29 -6
- package/dist/capabilities/document/instructions.js +11 -6
- package/dist/capabilities/index.js +20 -14
- package/dist/capabilities/optimize/instructions.js +14 -6
- package/dist/capabilities/orchestrate/instructions.js +42 -6
- package/dist/capabilities/plan/instructions.js +30 -3
- package/dist/capabilities/profile/instructions.js +104 -5
- package/dist/capabilities/research/instructions.js +4 -5
- package/dist/capabilities/status/instructions.js +15 -6
- package/dist/capabilities/status/startupInstructions.js +34 -0
- package/dist/capabilities/vision/instructions.js +3 -5
- package/dist/cli/appContext.js +14 -7
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +5 -4
- package/dist/cli/capabilityContext/bespoke.js +14 -6
- package/dist/cli/capabilityContext/build.js +116 -42
- package/dist/cli/capabilityContext/closeout.js +30 -27
- package/dist/cli/capabilityContext/contract.js +18 -27
- package/dist/cli/capabilityContext/evidence.js +84 -77
- package/dist/cli/capabilityContext/index.js +0 -1
- package/dist/cli/capabilityContext/orchestration.js +42 -18
- package/dist/cli/capabilityContext/planState.js +89 -96
- package/dist/cli/capabilityContext/progress.js +51 -12
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +9 -20
- package/dist/cli/capabilityContext/slim.js +52 -8
- package/dist/cli/capabilityContext/startup.js +51 -114
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +26 -10
- package/dist/cli/capabilityContext.js +0 -1
- package/dist/cli/commands/appHome.js +0 -1
- package/dist/cli/commands/capability.js +2 -2
- package/dist/cli/commands/compact.js +163 -13
- package/dist/cli/commands/doctor.js +117 -11
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +22 -8
- package/dist/cli/commands/personalGlossaryCandidateReads.js +744 -0
- package/dist/cli/commands/personalGlossaryDecision.js +349 -0
- package/dist/cli/commands/personalGlossaryPublish.js +484 -0
- package/dist/cli/commands/personalGlossaryReviewRecordReads.js +209 -0
- package/dist/cli/commands/personalGlossaryReviewRecords.js +623 -0
- package/dist/cli/commands/prime/briefOrientation.js +845 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +54 -4
- package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
- package/dist/cli/commands/prime/collectOrientationState.js +126 -63
- package/dist/cli/commands/prime/orientationOutput.js +267 -56
- package/dist/cli/commands/prime/types.js +0 -1
- package/dist/cli/commands/prime/v1Migration.js +0 -1
- package/dist/cli/commands/prime.js +76 -11
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +74 -52
- package/dist/cli/commands/report.js +91 -21
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +436 -138
- package/dist/cli/commands/state/decisions.js +40 -56
- package/dist/cli/commands/state/docs.js +58 -85
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +11 -65
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +11 -113
- package/dist/cli/commands/state/index.js +6 -41
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +21 -65
- package/dist/cli/commands/state/plan.js +11 -170
- package/dist/cli/commands/state/planTasks.js +154 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/progress.js +11 -45
- package/dist/cli/commands/state/shared.js +0 -1
- package/dist/cli/commands/state/todo.js +28 -107
- package/dist/cli/commands/state/write.js +433 -0
- package/dist/cli/commands/upgrade.js +146 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +235 -136
- package/dist/cli/commands/verify.js +73 -16
- package/dist/cli/contracts/bundleStatus.js +0 -1
- package/dist/cli/contracts/orientationState.js +0 -1
- package/dist/cli/dispatch/argvParser.js +0 -1
- package/dist/cli/dispatch/check.js +84 -40
- package/dist/cli/dispatch/commands.js +3 -3
- package/dist/cli/dispatch/index.js +77 -52
- package/dist/cli/dispatch/lifecycle.js +162 -62
- package/dist/cli/dispatch/prime.js +37 -2
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +1 -2
- package/dist/cli/dispatch/state.js +62 -66
- package/dist/cli/dispatch.js +0 -1
- package/dist/cli/errors.js +16 -17
- package/dist/cli/help.js +404 -39
- package/dist/cli/migrationRequired.js +125 -0
- package/dist/cli/orientation/attention.js +19 -19
- package/dist/cli/orientation/corpusCoverage.js +32 -1
- package/dist/cli/orientation.js +346 -129
- package/dist/cli/planArtifacts.js +350 -0
- package/dist/cli/planEvidence.js +157 -0
- package/dist/cli/planLifecycleState.js +36 -0
- package/dist/cli/planTaskIndex.js +11 -0
- package/dist/cli/preCutoverCommand.js +32 -0
- package/dist/cli/prime-blob.js +71 -3
- package/dist/cli/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +11 -8
- package/dist/cli/stateQuery.js +47 -12
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +25 -12
- package/dist/cli/todoReadinessSelection.js +192 -0
- package/dist/cli/todoSeverity.js +0 -1
- package/dist/core/atomicWriter.js +23 -0
- package/dist/core/developmentChannel.js +1 -0
- package/dist/core/developmentInvocation.js +377 -0
- package/dist/core/difflib.js +0 -1
- package/dist/core/envPaths.js +0 -1
- package/dist/core/jsonValue.js +0 -1
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +0 -1
- package/dist/core/shell.js +4 -0
- package/dist/core/skillIdentity.js +23 -0
- package/dist/core/sourceRoot.js +9 -12
- package/dist/core/text.js +10 -0
- package/dist/core/toml.js +0 -1
- package/dist/core/yaml.js +61 -2
- package/dist/eval/evalSkills.js +13 -14
- package/dist/eval/glossaryEvaluation.js +751 -0
- package/dist/eval/glossaryEvaluationProcess.js +29 -0
- package/dist/eval/glossaryEvaluationRunner.js +571 -0
- package/dist/eval/glossaryEvaluationSuccessReport.js +297 -0
- package/dist/eval/hybridRouteEvaluation.js +155 -0
- package/dist/eval/semanticEval.js +0 -1
- package/dist/eval/semanticFixtures.js +0 -1
- package/dist/hooks/common.js +3 -56
- package/dist/hooks/compaction/apply.js +224 -47
- package/dist/hooks/compaction/dryRun.js +2 -1
- package/dist/hooks/compaction/index.js +5 -6
- package/dist/hooks/compaction/parse.js +73 -6
- package/dist/hooks/compaction/retention.js +28 -25
- package/dist/hooks/compaction/status.js +145 -26
- package/dist/hooks/compaction/types.js +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js +0 -1
- package/dist/hooks/validateArtifact/index.js +6 -65
- package/dist/hooks/validateArtifact/markdown.js +9 -10
- package/dist/hooks/validateArtifact/schema.js +96 -9
- package/dist/hooks/validateArtifact/traversal.js +12 -11
- package/dist/hooks/validateArtifact/violations.js +5 -3
- package/dist/migrate/v2HandoffManifest.js +8 -3
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +136 -0
- package/dist/registries/artifactProtocolIds.js +2 -1
- package/dist/registries/artifactRegistry.js +207 -60
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +5 -21
- package/dist/registries/evaluatorHandoffContract.js +0 -1
- package/dist/registries/evidenceTierContract.js +375 -0
- package/dist/registries/explicitSegmentGrammarContract.js +619 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryCandidateContractPaths.js +6 -0
- package/dist/registries/glossaryCandidateContracts.js +820 -0
- package/dist/registries/glossaryCandidateDecisionAuthority.js +119 -0
- package/dist/registries/glossaryCandidateDecisionContract.js +62 -0
- package/dist/registries/glossaryCandidateProjectionAuthority.js +197 -0
- package/dist/registries/glossaryCandidateProjectionContract.js +104 -0
- package/dist/registries/glossaryCaveatContract.js +67 -0
- package/dist/registries/glossaryConsumerContractValidation.js +787 -0
- package/dist/registries/glossaryEntryContract.js +759 -0
- package/dist/registries/glossaryEntryTemporal.js +12 -0
- package/dist/registries/glossaryMiningAuthority.js +764 -0
- package/dist/registries/glossaryProfileFullContract.js +24 -0
- package/dist/registries/glossaryReviewRecordsAuthority.js +426 -0
- package/dist/registries/glossaryReviewRecordsContract.js +129 -0
- package/dist/registries/glossaryTermIdentity.js +139 -0
- package/dist/registries/glossaryTermOccurrence.js +20 -0
- package/dist/registries/hybridRoute.js +274 -0
- package/dist/registries/hybridRouteReceipt.js +221 -0
- package/dist/registries/packagePublication.js +273 -0
- package/dist/registries/packageRegistry.js +184 -209
- package/dist/registries/personalGlossaryContracts.js +1 -0
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +7 -44
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +167 -10
- 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 +14 -75
- package/dist/state/archiveDiscovery.js +580 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archiveRecovery.js +237 -0
- package/dist/state/archiveReplay.js +53 -0
- package/dist/state/canonicalMigrationRecord.js +36 -0
- package/dist/state/changelog.js +221 -0
- package/dist/state/decisionEntities.js +367 -0
- package/dist/state/decisionLegacyValidation.js +215 -0
- package/dist/state/decisionMigrationProvenance.js +199 -0
- package/dist/state/decisionOverlay.js +254 -0
- package/dist/state/decisionRevision.js +256 -0
- package/dist/state/decisionRevisionMigration.js +89 -0
- package/dist/state/directRetrieval.js +323 -0
- package/dist/state/durability.js +324 -0
- package/dist/state/entityCutover.js +459 -0
- package/dist/state/entityCutoverGit.js +127 -0
- package/dist/state/entityGlossaryAuthority.js +13 -0
- package/dist/state/entityListProjection.js +187 -0
- package/dist/state/entityListRuntimeRegistry.js +85 -0
- package/dist/state/entityMigrationCausality.js +97 -0
- package/dist/state/entityMigrationIdentity.js +5 -0
- package/dist/state/entityMigrationPreview.js +840 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +859 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +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 +15 -7
- package/dist/state/legacyEntityCutoverEvidence.js +65 -0
- package/dist/state/legacyIdentity.js +47 -0
- package/dist/state/legacySummaryRecord.js +6 -0
- package/dist/state/listAccounting.js +54 -0
- package/dist/state/listClassification.js +17 -0
- package/dist/state/listCursor.js +42 -0
- package/dist/state/listRetrieval.js +781 -0
- package/dist/state/migrationSourceBinding.js +30 -0
- package/dist/state/objectiveExperimentEntities.js +322 -0
- package/dist/state/planEntities.js +1027 -0
- package/dist/state/planIdentity.js +47 -0
- package/dist/state/planLineageValidation.js +52 -0
- package/dist/state/planReplacementTransaction.js +475 -0
- package/dist/state/planRetrieval.js +313 -0
- package/dist/state/planTaskRetrieval.js +294 -0
- package/dist/state/progressEntities.js +512 -0
- package/dist/state/progressGlossaryCaveat.js +168 -0
- package/dist/state/progressPublicationOrder.js +19 -0
- package/dist/state/progressWritePolicy.js +33 -0
- package/dist/state/projectRoot.js +62 -0
- package/dist/state/projectionPolicy.js +190 -0
- package/dist/state/retrievalAuthority.js +156 -0
- package/dist/state/safeProjectFile.js +155 -0
- package/dist/state/startupAnalysis/benchmark.js +70 -9
- package/dist/state/startupAnalysis/contract.js +44 -10
- package/dist/state/startupAnalysis/helpers.js +1 -2
- package/dist/state/startupAnalysis/index.js +0 -1
- package/dist/state/startupAnalysis/metrics.js +0 -1
- package/dist/state/startupAnalysis/records.js +0 -1
- package/dist/state/startupAnalysis/report.js +0 -1
- package/dist/state/startupAnalysis/threshold.js +13 -1
- package/dist/state/startupAnalysis.js +0 -1
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +222 -0
- package/dist/state/stateStorageAuthority.js +47 -0
- package/dist/state/summaryEntityRead.js +25 -0
- package/dist/state/summaryMigrationProvenance.js +66 -0
- package/dist/state/summarySourceRowAuthority.js +36 -0
- package/dist/state/todoActivationSafety.js +58 -0
- package/dist/state/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 +77 -36
- package/dist/upgrade/appModel.js +0 -1
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +0 -1
- package/dist/upgrade/channels.js +6 -9
- package/dist/upgrade/compatibility.js +43 -17
- package/dist/upgrade/doctor.js +55 -32
- package/dist/upgrade/doctorClassifier.js +11 -1
- package/dist/upgrade/installedHooksRetirement.js +46 -40
- package/dist/upgrade/legacyAgentCleanup.js +187 -21
- package/dist/upgrade/lifecycleUpgrade.js +113 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +334 -64
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +0 -1
- package/dist/upgrade/npxPlatformStatus.js +2 -2
- package/dist/upgrade/projectIntegration.js +128 -160
- package/dist/upgrade/projectIntegrationDecision.js +42 -85
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +262 -453
- 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 +0 -1
- package/dist/validate/activationArtifactEvidence.js +866 -0
- package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +610 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +1 -7
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +11 -3
- package/dist/validate/crossCapability.js +14 -9
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +39 -45
- package/dist/validate/v1LegacyCruft.js +131 -0
- package/dist/validate/vocabularyAuthority.js +8 -8
- package/package.json +39 -13
- package/bundle/references/adapters/cursor.md +0 -214
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/analysis/benchmark.md +0 -267
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/coexistence-probe.yaml +0 -13
- package/bundle/references/cli/parity-expected-actual-template.md +0 -30
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/cli/single-name-protocol.yaml +0 -42
- package/bundle/references/cli/upgrade-repair-wording.md +0 -45
- package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
- package/bundle/references/meta/documentation-inventory.md +0 -49
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/audit.toml +0 -6
- package/bundle/skills/agentera/agents/build.toml +0 -6
- package/bundle/skills/agentera/agents/design.toml +0 -6
- package/bundle/skills/agentera/agents/discuss.toml +0 -6
- package/bundle/skills/agentera/agents/document.toml +0 -6
- package/bundle/skills/agentera/agents/optimize.toml +0 -6
- package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
- package/bundle/skills/agentera/agents/plan.toml +0 -6
- package/bundle/skills/agentera/agents/profile.toml +0 -6
- package/bundle/skills/agentera/agents/research.toml +0 -6
- package/bundle/skills/agentera/agents/status.toml +0 -6
- package/bundle/skills/agentera/agents/vision.toml +0 -6
- package/bundle/skills/agentera/references/contract.md +0 -1048
- package/dist/analytics/extractCorpus/cli.js.map +0 -1
- package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/core.js.map +0 -1
- package/dist/analytics/extractCorpus/corpus.js.map +0 -1
- package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
- package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
- package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
- package/dist/analytics/extractCorpus/index.js.map +0 -1
- package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
- package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/capabilities/audit/instructions.js.map +0 -1
- package/dist/capabilities/build/instructions.js.map +0 -1
- package/dist/capabilities/design/instructions.js.map +0 -1
- package/dist/capabilities/discuss/instructions.js.map +0 -1
- package/dist/capabilities/document/instructions.js.map +0 -1
- package/dist/capabilities/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/optimize/instructions.js.map +0 -1
- package/dist/capabilities/orchestrate/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/plan/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/profile/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/research/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/status/instructions.js.map +0 -1
- package/dist/capabilities/vision/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 -5
- 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/build.js.map +0 -1
- package/dist/cli/capabilityContext/closeout.js.map +0 -1
- package/dist/cli/capabilityContext/contract.js.map +0 -1
- package/dist/cli/capabilityContext/evidence.js.map +0 -1
- package/dist/cli/capabilityContext/index.js.map +0 -1
- package/dist/cli/capabilityContext/orchestration.js.map +0 -1
- package/dist/cli/capabilityContext/planState.js.map +0 -1
- package/dist/cli/capabilityContext/progress.js.map +0 -1
- package/dist/cli/capabilityContext/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/appHome.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/bundleStatus.js.map +0 -1
- package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
- package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
- package/dist/cli/commands/prime/routeOutput.js +0 -50
- package/dist/cli/commands/prime/routeOutput.js.map +0 -1
- package/dist/cli/commands/prime/types.js.map +0 -1
- package/dist/cli/commands/prime/v1Migration.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state/decisions.js.map +0 -1
- package/dist/cli/commands/state/docs.js.map +0 -1
- package/dist/cli/commands/state/experiments.js.map +0 -1
- package/dist/cli/commands/state/health.js.map +0 -1
- package/dist/cli/commands/state/index.js.map +0 -1
- package/dist/cli/commands/state/objective.js.map +0 -1
- package/dist/cli/commands/state/plan.js.map +0 -1
- package/dist/cli/commands/state/progress.js.map +0 -1
- package/dist/cli/commands/state/shared.js.map +0 -1
- package/dist/cli/commands/state/todo.js.map +0 -1
- package/dist/cli/commands/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/contracts/bundleStatus.js.map +0 -1
- package/dist/cli/contracts/orientationState.js.map +0 -1
- package/dist/cli/dispatch/argvParser.js.map +0 -1
- package/dist/cli/dispatch/check.js.map +0 -1
- package/dist/cli/dispatch/commands.js.map +0 -1
- package/dist/cli/dispatch/index.js.map +0 -1
- package/dist/cli/dispatch/lifecycle.js.map +0 -1
- package/dist/cli/dispatch/prime.js.map +0 -1
- package/dist/cli/dispatch/shared.js.map +0 -1
- package/dist/cli/dispatch/state.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/errors.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/orientation/attention.js.map +0 -1
- package/dist/cli/orientation/corpusCoverage.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/startupCompletenessContract.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/cli/todoMarkdown.js.map +0 -1
- package/dist/cli/todoSeverity.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/envPaths.js.map +0 -1
- package/dist/core/git.js +0 -43
- package/dist/core/git.js.map +0 -1
- package/dist/core/jsonValue.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/toml.js.map +0 -1
- package/dist/core/yaml.js.map +0 -1
- package/dist/eval/evalSkills.js.map +0 -1
- package/dist/eval/semanticEval.js.map +0 -1
- package/dist/eval/semanticFixtures.js.map +0 -1
- package/dist/hooks/common.js.map +0 -1
- package/dist/hooks/compaction/apply.js.map +0 -1
- package/dist/hooks/compaction/dryRun.js.map +0 -1
- package/dist/hooks/compaction/index.js.map +0 -1
- package/dist/hooks/compaction/parse.js.map +0 -1
- package/dist/hooks/compaction/retention.js.map +0 -1
- package/dist/hooks/compaction/status.js.map +0 -1
- package/dist/hooks/compaction/todoResolved.js +0 -137
- package/dist/hooks/compaction/todoResolved.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 -79
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -216
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -206
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/todoLayout.js +0 -177
- package/dist/hooks/todoLayout.js.map +0 -1
- package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
- package/dist/hooks/validateArtifact/index.js.map +0 -1
- package/dist/hooks/validateArtifact/markdown.js.map +0 -1
- package/dist/hooks/validateArtifact/runtime.js +0 -86
- package/dist/hooks/validateArtifact/runtime.js.map +0 -1
- package/dist/hooks/validateArtifact/schema.js.map +0 -1
- package/dist/hooks/validateArtifact/traversal.js.map +0 -1
- package/dist/hooks/validateArtifact/violations.js.map +0 -1
- package/dist/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 -316
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/registries/triggerLoader.js.map +0 -1
- package/dist/release/releaseMetadata.js.map +0 -1
- package/dist/routing/index.js +0 -2
- package/dist/routing/index.js.map +0 -1
- package/dist/routing/routeEngine.js +0 -189
- package/dist/routing/routeEngine.js.map +0 -1
- package/dist/setup/codex/agents.js +0 -96
- package/dist/setup/codex/agents.js.map +0 -1
- package/dist/setup/codex/cli.js +0 -161
- package/dist/setup/codex/cli.js.map +0 -1
- package/dist/setup/codex/configToml.js +0 -639
- package/dist/setup/codex/configToml.js.map +0 -1
- package/dist/setup/codex/constants.js +0 -29
- package/dist/setup/codex/constants.js.map +0 -1
- package/dist/setup/codex/installRoot.js +0 -64
- package/dist/setup/codex/installRoot.js.map +0 -1
- package/dist/setup/codex/state.js +0 -270
- package/dist/setup/codex/state.js.map +0 -1
- package/dist/setup/codex.js +0 -12
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -129
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/cursorSurfaces.js +0 -67
- package/dist/setup/cursorSurfaces.js.map +0 -1
- package/dist/setup/doctor/core.js +0 -300
- package/dist/setup/doctor/core.js.map +0 -1
- package/dist/setup/doctor/diagnostics.js +0 -240
- package/dist/setup/doctor/diagnostics.js.map +0 -1
- package/dist/setup/doctor/opencode.js +0 -313
- package/dist/setup/doctor/opencode.js.map +0 -1
- package/dist/setup/doctor/report.js +0 -425
- package/dist/setup/doctor/report.js.map +0 -1
- package/dist/setup/doctor.js +0 -10
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/opencode.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/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/appContentRefresh.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/bundleEvidence.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/cliProbe.js +0 -22
- package/dist/upgrade/cliProbe.js.map +0 -1
- package/dist/upgrade/coexistenceProbe.js +0 -107
- package/dist/upgrade/coexistenceProbe.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/doctorClassifier.js.map +0 -1
- package/dist/upgrade/installedHooksRetirement.js.map +0 -1
- package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/nextMajorDoctor.js.map +0 -1
- package/dist/upgrade/npxPlatformStatus.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
- package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
- package/dist/upgrade/versionResolution.js.map +0 -1
- package/dist/validate/appHomeContract.js.map +0 -1
- package/dist/validate/capability.js.map +0 -1
- package/dist/validate/crossCapability.js.map +0 -1
- package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
- package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
- package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
- package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
- package/dist/validate/lifecycleAdapters/shared.js +0 -198
- package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -62
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- package/dist/validate/vocabularyAuthority.js.map +0 -1
|
@@ -3,6 +3,7 @@ import os from "node:os";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { resolveProfileDirOverride, resolveXdgDataHome } from "../core/envPaths.js";
|
|
5
5
|
import { expanduser } from "../core/paths.js";
|
|
6
|
+
import { tiersDirForCorpusPath, assessTiers, iterBoundedRecords, readTierCorpusMetadata } from "./extractCorpus/index.js";
|
|
6
7
|
export const EXIT_STATUSES = new Set(["complete", "flagged", "stuck", "waiting"]);
|
|
7
8
|
export const TRIGGER_SLASH = "slash";
|
|
8
9
|
export const TRIGGER_NATURAL = "natural";
|
|
@@ -20,6 +21,9 @@ function newInvocation(init) {
|
|
|
20
21
|
exit_timestamp: init.exit_timestamp ?? null,
|
|
21
22
|
trigger: init.trigger ?? TRIGGER_NATURAL,
|
|
22
23
|
project_id: init.project_id ?? "",
|
|
24
|
+
source_class: init.source_class ?? "active_runtime",
|
|
25
|
+
source_product: init.source_product ?? "unknown",
|
|
26
|
+
active_runtime: init.active_runtime ?? true,
|
|
23
27
|
};
|
|
24
28
|
}
|
|
25
29
|
export function findMarkers(text) {
|
|
@@ -115,6 +119,9 @@ export function pairInvocations(turns) {
|
|
|
115
119
|
intro_source_id: sid,
|
|
116
120
|
intro_timestamp: ts,
|
|
117
121
|
completed: false,
|
|
122
|
+
source_class: String(turn.source_class ?? "active_runtime"),
|
|
123
|
+
source_product: String(turn.source_product ?? turn.runtime ?? "unknown"),
|
|
124
|
+
active_runtime: turn.active_runtime !== false && turn.source_class !== "historical_import",
|
|
118
125
|
}));
|
|
119
126
|
}
|
|
120
127
|
else {
|
|
@@ -152,12 +159,13 @@ function stableSort(items, key) {
|
|
|
152
159
|
})
|
|
153
160
|
.map(([item]) => item);
|
|
154
161
|
}
|
|
155
|
-
|
|
162
|
+
// Retained only to classify command markup in consent-gated historical imports.
|
|
163
|
+
const HISTORICAL_COMMAND_XML_RE = /<command-name>\s*\/[A-Za-z0-9._:-]+\s*<\/command-name>/;
|
|
156
164
|
const BARE_SLASH_RE = /^\s*\/[A-Za-z0-9._:-]+(?:\s|$)/m;
|
|
157
165
|
export function classifyTrigger(userTurnText) {
|
|
158
166
|
if (!userTurnText)
|
|
159
167
|
return TRIGGER_NATURAL;
|
|
160
|
-
if (
|
|
168
|
+
if (HISTORICAL_COMMAND_XML_RE.test(userTurnText))
|
|
161
169
|
return TRIGGER_SLASH;
|
|
162
170
|
if (BARE_SLASH_RE.test(userTurnText))
|
|
163
171
|
return TRIGGER_SLASH;
|
|
@@ -228,13 +236,70 @@ function accumulate(bucket, inv) {
|
|
|
228
236
|
bucket[inv.completed ? "completed" : "incomplete"] += 1;
|
|
229
237
|
bucket[inv.trigger === TRIGGER_SLASH ? "trigger_slash" : "trigger_natural"] += 1;
|
|
230
238
|
}
|
|
231
|
-
|
|
239
|
+
function activeAnalyticsRecord(record) {
|
|
240
|
+
if (record.active_runtime === false || record.source_class === "historical_import")
|
|
241
|
+
return false;
|
|
242
|
+
return record.runtime !== "claude" && record.runtime !== "claude-code";
|
|
243
|
+
}
|
|
244
|
+
export function analyzeCorpus(corpus, projectFilter = null, sourceView = "active") {
|
|
232
245
|
const rawRecords = (isMapping(corpus) ? (corpus.records ?? []) : []); // cast: corpus records from JSON.parse IO boundary
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
246
|
+
return analyzeRecords(rawRecords, projectFilter, sourceView);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Single-pass analysis over a record iterable. Bounded consumers feed the
|
|
250
|
+
* tiered shard iterator here so non-conversation records (instruction documents,
|
|
251
|
+
* project config signals, tool calls) are counted for provenance and discarded
|
|
252
|
+
* rather than materialized; only conversation turns are retained as the analysis
|
|
253
|
+
* working set. Mirrors `analyzeCorpus` exactly when given the full record array.
|
|
254
|
+
*/
|
|
255
|
+
export function analyzeRecords(records, projectFilter = null, sourceView = "active") {
|
|
256
|
+
const provenanceCounts = new Map();
|
|
257
|
+
const userTurnsByConv = new Map();
|
|
258
|
+
const assistantByConv = new Map();
|
|
259
|
+
for (const record of records) {
|
|
260
|
+
if (!isMapping(record))
|
|
261
|
+
continue;
|
|
262
|
+
const isActive = activeAnalyticsRecord(record);
|
|
263
|
+
if (sourceView === "active" && !isActive)
|
|
264
|
+
continue;
|
|
265
|
+
if (projectFilter !== null) {
|
|
266
|
+
const pid = record.project_id ?? "";
|
|
267
|
+
if (!(typeof pid === "string" && projectMatch(pid, projectFilter)))
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const sourceClass = String(record.source_class ?? (isActive ? "active_runtime" : "historical_import"));
|
|
271
|
+
const sourceProduct = String(record.source_product ?? record.runtime ?? "unknown");
|
|
272
|
+
const activeRuntime = isActive;
|
|
273
|
+
const key = `${sourceClass}\0${sourceProduct}\0${activeRuntime}`;
|
|
274
|
+
const current = provenanceCounts.get(key) ?? { source_class: sourceClass, source_product: sourceProduct, active_runtime: activeRuntime, records: 0 };
|
|
275
|
+
current.records += 1;
|
|
276
|
+
provenanceCounts.set(key, current);
|
|
277
|
+
if (record.source_kind !== "conversation_turn")
|
|
278
|
+
continue;
|
|
279
|
+
const data = record.data;
|
|
280
|
+
if (!isMapping(data))
|
|
281
|
+
continue;
|
|
282
|
+
const ckey = conversationKey(record);
|
|
283
|
+
if (ckey === null)
|
|
284
|
+
continue;
|
|
285
|
+
const actor = data.actor;
|
|
286
|
+
if (actor === "user") {
|
|
287
|
+
if (!userTurnsByConv.has(ckey))
|
|
288
|
+
userTurnsByConv.set(ckey, []);
|
|
289
|
+
userTurnsByConv.get(ckey).push(record);
|
|
290
|
+
}
|
|
291
|
+
else if (actor === "assistant") {
|
|
292
|
+
if (!assistantByConv.has(ckey))
|
|
293
|
+
assistantByConv.set(ckey, []);
|
|
294
|
+
assistantByConv.get(ckey).push(record);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
for (const items of userTurnsByConv.values())
|
|
298
|
+
stableSortByTimestamp(items);
|
|
299
|
+
for (const items of assistantByConv.values())
|
|
300
|
+
stableSortByTimestamp(items);
|
|
236
301
|
const invocations = [];
|
|
237
|
-
for (const [sid, turns] of
|
|
302
|
+
for (const [sid, turns] of assistantByConv) {
|
|
238
303
|
const tsToProject = new Map();
|
|
239
304
|
for (const t of turns) {
|
|
240
305
|
tsToProject.set(String(t.timestamp ?? ""), String(t.project_id ?? ""));
|
|
@@ -266,10 +331,17 @@ export function analyzeCorpus(corpus, projectFilter = null) {
|
|
|
266
331
|
accumulate(perProject[inv.project_id][inv.skill], inv);
|
|
267
332
|
}
|
|
268
333
|
}
|
|
269
|
-
return {
|
|
334
|
+
return {
|
|
335
|
+
invocations: sorted,
|
|
336
|
+
skills,
|
|
337
|
+
project_filter: projectFilter,
|
|
338
|
+
per_project: perProject,
|
|
339
|
+
source_view: sourceView,
|
|
340
|
+
source_provenance: [...provenanceCounts.values()].sort((a, b) => `${a.source_class}:${a.source_product}`.localeCompare(`${b.source_class}:${b.source_product}`)),
|
|
341
|
+
};
|
|
270
342
|
}
|
|
271
343
|
// --- Paths -----------------------------------------------------------------
|
|
272
|
-
export const CORPUS_GUIDANCE = "
|
|
344
|
+
export const CORPUS_GUIDANCE = "Publish bounded tiers with `agentera stats refresh --consent local-history`; `--corpus PATH` points at a legacy corpus.json whose sibling `tiers/` is preferred when published.";
|
|
273
345
|
function homeDir(env) {
|
|
274
346
|
return env.HOME ?? os.homedir();
|
|
275
347
|
}
|
|
@@ -319,7 +391,7 @@ export function corpusTooLargeReason(corpusPath) {
|
|
|
319
391
|
const size = fs.statSync(corpusPath).size;
|
|
320
392
|
if (size <= MAX_CORPUS_READ_BYTES)
|
|
321
393
|
return null;
|
|
322
|
-
return `corpus is too large to load (${size} bytes; max ${MAX_CORPUS_READ_BYTES}).
|
|
394
|
+
return `corpus is too large to load (${size} bytes; max ${MAX_CORPUS_READ_BYTES}). Refresh bounded tiers with agentera stats refresh --consent local-history, or pass --corpus PATH to a smaller legacy extract (its sibling tiers/ is preferred when published).`;
|
|
323
395
|
}
|
|
324
396
|
catch {
|
|
325
397
|
return null;
|
|
@@ -352,6 +424,8 @@ export function buildJsonPayload(analysis, opts) {
|
|
|
352
424
|
generated_at: opts.generatedAt,
|
|
353
425
|
extracted_at: opts.extractedAt,
|
|
354
426
|
project_filter: analysis.project_filter,
|
|
427
|
+
source_view: analysis.source_view,
|
|
428
|
+
source_provenance: analysis.source_provenance,
|
|
355
429
|
skills: analysis.skills,
|
|
356
430
|
per_project: analysis.per_project,
|
|
357
431
|
invocations: analysis.invocations.map((inv) => ({ ...inv })),
|
|
@@ -381,7 +455,10 @@ export function renderMarkdown(analysis, opts) {
|
|
|
381
455
|
const scope = analysis.project_filter || "all projects";
|
|
382
456
|
const extractedLine = opts.extractedAt || "unknown (corpus omitted extracted_at)";
|
|
383
457
|
const lines = [];
|
|
384
|
-
lines.push("# Suite Usage", "", `- Generated: ${opts.generatedAt}`, `- Corpus extracted: ${extractedLine}`, `- Scope: ${scope}`, "");
|
|
458
|
+
lines.push("# Suite Usage", "", `- Generated: ${opts.generatedAt}`, `- Corpus extracted: ${extractedLine}`, `- Scope: ${scope}`, `- Sources: ${analysis.source_view}`, "");
|
|
459
|
+
if (analysis.source_view === "all") {
|
|
460
|
+
lines.push("## Source provenance", "", "| Source class | Source product | Active runtime | Records |", "| --- | --- | --- | --- |", ...analysis.source_provenance.map((item) => `| ${item.source_class} | ${item.source_product} | ${item.active_runtime ? "yes" : "no"} | ${item.records} |`), "");
|
|
461
|
+
}
|
|
385
462
|
if (Object.keys(analysis.skills).length === 0) {
|
|
386
463
|
lines.push("No skill invocations found in the corpus for this scope.", "");
|
|
387
464
|
return lines.join("\n");
|
|
@@ -468,6 +545,7 @@ export function usageMain(argv, io = {}) {
|
|
|
468
545
|
let corpus = null;
|
|
469
546
|
let project = null;
|
|
470
547
|
let emitJson = false;
|
|
548
|
+
let sourceView = "active";
|
|
471
549
|
for (let i = 0; i < argv.length; i++) {
|
|
472
550
|
const a = argv[i];
|
|
473
551
|
if (a === "--corpus")
|
|
@@ -480,23 +558,61 @@ export function usageMain(argv, io = {}) {
|
|
|
480
558
|
project = a.slice("--project=".length);
|
|
481
559
|
else if (a === "--json")
|
|
482
560
|
emitJson = true;
|
|
561
|
+
else if (a === "--sources" || a.startsWith("--sources=")) {
|
|
562
|
+
const value = a === "--sources" ? argv[++i] : a.slice("--sources=".length);
|
|
563
|
+
if (value !== "active" && value !== "all") {
|
|
564
|
+
err(`usage_stats: unsupported --sources '${value}'; choose active or all`);
|
|
565
|
+
return 2;
|
|
566
|
+
}
|
|
567
|
+
sourceView = value;
|
|
568
|
+
}
|
|
483
569
|
}
|
|
484
570
|
const corpusPath = corpus ?? defaultCorpusPath(env, platform);
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
571
|
+
// Bounded tier path: analyze real-scale evidence by streaming one bounded
|
|
572
|
+
// shard at a time instead of materializing the monolithic corpus envelope.
|
|
573
|
+
// Falls back to the legacy corpus.json read only when no tiers were published
|
|
574
|
+
// (legacy state) so existing small-envelope consumers keep working.
|
|
575
|
+
const tiersDir = tiersDirForCorpusPath(corpusPath);
|
|
576
|
+
const assessment = assessTiers(tiersDir, corpusPath);
|
|
577
|
+
let analysis;
|
|
578
|
+
let extractedAt = null;
|
|
579
|
+
if (assessment.analyzable) {
|
|
580
|
+
const records = iterBoundedRecords(tiersDir);
|
|
581
|
+
if (records === null) {
|
|
582
|
+
err(tierUnavailableMessage(assessment, corpusPath));
|
|
492
583
|
return 2;
|
|
493
584
|
}
|
|
494
|
-
|
|
585
|
+
analysis = analyzeRecords(records, project, sourceView);
|
|
586
|
+
const metadata = readTierCorpusMetadata(tiersDir);
|
|
587
|
+
extractedAt = metadata?.extracted_at ?? null;
|
|
588
|
+
}
|
|
589
|
+
else if (assessment.state === "corrupt" || assessment.state === "oversized") {
|
|
590
|
+
// Tier-level failure: the published tier is unreadable or a shard exceeds the
|
|
591
|
+
// reader cap. Project actionable recovery from the authority contract rather
|
|
592
|
+
// than silently falling back to the corpus envelope.
|
|
593
|
+
err(tierUnavailableMessage(assessment, corpusPath));
|
|
594
|
+
return 2;
|
|
595
|
+
}
|
|
596
|
+
else {
|
|
597
|
+
// Legacy or missing: delegate to the corpus-envelope reader, which preserves
|
|
598
|
+
// the existing too-large / not-found degradation and message contract.
|
|
599
|
+
let corpusData;
|
|
600
|
+
try {
|
|
601
|
+
corpusData = loadCorpusOrRaise(corpusPath);
|
|
602
|
+
}
|
|
603
|
+
catch (e) {
|
|
604
|
+
if (e instanceof CorpusUnavailable) {
|
|
605
|
+
err(String(e.message));
|
|
606
|
+
return 2;
|
|
607
|
+
}
|
|
608
|
+
throw e;
|
|
609
|
+
}
|
|
610
|
+
analysis = analyzeCorpus(corpusData, project, sourceView);
|
|
611
|
+
const md = corpusData.metadata;
|
|
612
|
+
extractedAt =
|
|
613
|
+
md && typeof md === "object" && !Array.isArray(md) ? (md.extracted_at ?? null) : null;
|
|
495
614
|
}
|
|
496
|
-
const analysis = analyzeCorpus(corpusData, project);
|
|
497
615
|
const generatedAt = nowIso();
|
|
498
|
-
const md = corpusData.metadata;
|
|
499
|
-
const extractedAt = md && typeof md === "object" && !Array.isArray(md) ? (md.extracted_at ?? null) : null;
|
|
500
616
|
if (emitJson) {
|
|
501
617
|
out(renderJson(analysis, { generatedAt, extractedAt }));
|
|
502
618
|
return 0;
|
|
@@ -506,4 +622,15 @@ export function usageMain(argv, io = {}) {
|
|
|
506
622
|
out(renderStdoutSummary(analysis, { generatedAt, extractedAt, reportPath: outPath }));
|
|
507
623
|
return 0;
|
|
508
624
|
}
|
|
509
|
-
|
|
625
|
+
/** Compose the degrade message for a non-analyzable tier state. */
|
|
626
|
+
function tierUnavailableMessage(assessment, corpusPath) {
|
|
627
|
+
const recovery = assessment.recovery;
|
|
628
|
+
const where = `tiers at ${assessment.tiersDir}${corpusPath ? ` (corpus=${corpusPath})` : ""}`;
|
|
629
|
+
if (assessment.state === "oversized") {
|
|
630
|
+
return `evidence tier is oversized at ${assessment.artifact ?? where}. ${recovery ?? ""}`.trim();
|
|
631
|
+
}
|
|
632
|
+
if (assessment.state === "corrupt") {
|
|
633
|
+
return `evidence tier is unreadable at ${where}. ${recovery ?? ""}`.trim();
|
|
634
|
+
}
|
|
635
|
+
return `evidence tier is ${assessment.state} at ${where}. ${recovery ?? ""}`.trim();
|
|
636
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
5
|
+
import { loadYamlMappingFile } from "../core/yaml.js";
|
|
6
|
+
import { isSafeProjectSourcePath } from "../registries/glossaryEntryContract.js";
|
|
7
|
+
import { unicodeCaselessExact } from "../registries/glossaryTermIdentity.js";
|
|
8
|
+
import { containsGlossaryTerm } from "../registries/glossaryTermOccurrence.js";
|
|
9
|
+
function compareText(left, right) {
|
|
10
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
11
|
+
}
|
|
12
|
+
/** Deterministic variant ordering only; never use this key for term identity. */
|
|
13
|
+
function variantSortKey(term) {
|
|
14
|
+
return term.toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
function orderedEvidence(evidence) {
|
|
17
|
+
return [...evidence].sort((left, right) => compareText(left.source_path, right.source_path)
|
|
18
|
+
|| left.line - right.line
|
|
19
|
+
|| compareText(left.source_record_sha256, right.source_record_sha256));
|
|
20
|
+
}
|
|
21
|
+
function evidenceIdentity(item) {
|
|
22
|
+
return `${item.source_path}:${item.line}`;
|
|
23
|
+
}
|
|
24
|
+
function proposalWithoutDigest(proposal) {
|
|
25
|
+
const { proposal_digest: _digest, ...finding } = proposal;
|
|
26
|
+
return {
|
|
27
|
+
...finding,
|
|
28
|
+
canonical_evidence: orderedEvidence(finding.canonical_evidence),
|
|
29
|
+
variants: finding.variants
|
|
30
|
+
.map((variant) => ({ ...variant, evidence: orderedEvidence(variant.evidence) }))
|
|
31
|
+
.sort((left, right) => compareText(variantSortKey(left.term), variantSortKey(right.term))
|
|
32
|
+
|| compareText(left.term, right.term)),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function canonicalTerminologyJson(value) {
|
|
36
|
+
if (Array.isArray(value))
|
|
37
|
+
return `[${value.map(canonicalTerminologyJson).join(",")}]`;
|
|
38
|
+
if (value !== null && typeof value === "object") {
|
|
39
|
+
return `{${Object.entries(value)
|
|
40
|
+
.filter(([, item]) => item !== undefined)
|
|
41
|
+
.sort(([left], [right]) => compareText(left, right))
|
|
42
|
+
.map(([key, item]) => `${JSON.stringify(key)}:${canonicalTerminologyJson(item)}`)
|
|
43
|
+
.join(",")}}`;
|
|
44
|
+
}
|
|
45
|
+
return JSON.stringify(value);
|
|
46
|
+
}
|
|
47
|
+
/** Digest one complete finding while ignoring semantically irrelevant array order. */
|
|
48
|
+
export function terminologyProposalDigest(proposal) {
|
|
49
|
+
return crypto
|
|
50
|
+
.createHash("sha256")
|
|
51
|
+
.update(canonicalTerminologyJson(proposalWithoutDigest(proposal)))
|
|
52
|
+
.digest("hex");
|
|
53
|
+
}
|
|
54
|
+
function canonicalProposal(seed) {
|
|
55
|
+
const ordered = seed.terms
|
|
56
|
+
.map((term) => ({ term: term.term, evidence: orderedEvidence(term.evidence) }))
|
|
57
|
+
.sort((left, right) => right.evidence.length - left.evidence.length || compareText(left.term, right.term));
|
|
58
|
+
const [canonical, ...variants] = ordered;
|
|
59
|
+
const finding = {
|
|
60
|
+
family: "terminology_drift",
|
|
61
|
+
concept: seed.concept,
|
|
62
|
+
proposed_canonical_term: canonical.term,
|
|
63
|
+
canonical_evidence: canonical.evidence,
|
|
64
|
+
variants: variants.sort((left, right) => compareText(variantSortKey(left.term), variantSortKey(right.term))
|
|
65
|
+
|| compareText(left.term, right.term)),
|
|
66
|
+
severity: seed.confidence < 70 ? "info" : seed.severity,
|
|
67
|
+
confidence: seed.confidence,
|
|
68
|
+
...(seed.personal_divergence ? { personal_divergence: seed.personal_divergence } : {}),
|
|
69
|
+
};
|
|
70
|
+
return { ...finding, proposal_digest: terminologyProposalDigest(finding) };
|
|
71
|
+
}
|
|
72
|
+
function mapping(value) {
|
|
73
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
74
|
+
}
|
|
75
|
+
function exactFields(value, allowed) {
|
|
76
|
+
return Object.keys(value).every((field) => allowed.includes(field));
|
|
77
|
+
}
|
|
78
|
+
function proposalEvidence(value, label, violations) {
|
|
79
|
+
if (!mapping(value) || !exactFields(value, ["source_path", "line", "source_record_sha256"])) {
|
|
80
|
+
violations.push(`${label} must contain only source_path, line, and source_record_sha256`);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
if (!isSafeProjectSourcePath(value.source_path)
|
|
84
|
+
|| !Number.isInteger(value.line)
|
|
85
|
+
|| Number(value.line) < 1
|
|
86
|
+
|| typeof value.source_record_sha256 !== "string"
|
|
87
|
+
|| !/^[a-f0-9]{64}$/.test(value.source_record_sha256)) {
|
|
88
|
+
violations.push(`${label} must identify one safe project-relative source line with a lowercase SHA-256`);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
/** Validate and normalize the complete finding shape that Audit itself can emit. */
|
|
94
|
+
export function validateTerminologyProposal(value) {
|
|
95
|
+
const violations = [];
|
|
96
|
+
const fields = ["family", "concept", "proposed_canonical_term", "canonical_evidence", "variants", "severity", "confidence", "personal_divergence", "proposal_digest"];
|
|
97
|
+
if (!mapping(value) || !exactFields(value, fields)) {
|
|
98
|
+
return { proposal: null, violations: ["proposal must be one complete terminology_drift finding with no undeclared fields"] };
|
|
99
|
+
}
|
|
100
|
+
if (value.family !== "terminology_drift")
|
|
101
|
+
violations.push("proposal family must be terminology_drift");
|
|
102
|
+
if (typeof value.concept !== "string" || value.concept.trim() === "")
|
|
103
|
+
violations.push("proposal concept must be non-empty");
|
|
104
|
+
if (typeof value.proposed_canonical_term !== "string" || value.proposed_canonical_term.trim() === "")
|
|
105
|
+
violations.push("proposed canonical term must be non-empty");
|
|
106
|
+
if (!["critical", "warning", "info"].includes(String(value.severity)))
|
|
107
|
+
violations.push("proposal severity is invalid");
|
|
108
|
+
const minimumConfidence = confidenceFloor();
|
|
109
|
+
if (!Number.isInteger(value.confidence) || Number(value.confidence) < minimumConfidence || Number(value.confidence) > 100) {
|
|
110
|
+
violations.push(`proposal confidence must be an integer from ${minimumConfidence} through 100`);
|
|
111
|
+
}
|
|
112
|
+
if (Number.isInteger(value.confidence) && Number(value.confidence) < 70 && value.severity !== "info") {
|
|
113
|
+
violations.push("confidence below 70 requires info severity");
|
|
114
|
+
}
|
|
115
|
+
if (typeof value.proposal_digest !== "string" || !/^[a-f0-9]{64}$/.test(value.proposal_digest))
|
|
116
|
+
violations.push("proposal_digest must be a lowercase SHA-256");
|
|
117
|
+
const terms = [];
|
|
118
|
+
const readTerm = (term, records, label) => {
|
|
119
|
+
if (typeof term !== "string" || term.trim() === "") {
|
|
120
|
+
violations.push(`${label} term must be non-empty`);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (!Array.isArray(records) || records.length === 0) {
|
|
124
|
+
violations.push(`${label} evidence must be non-empty`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const parsed = records
|
|
128
|
+
.map((record, index) => proposalEvidence(record, `${label}[${index}]`, violations))
|
|
129
|
+
.filter((record) => record !== null);
|
|
130
|
+
if (new Set(parsed.map(evidenceIdentity)).size !== parsed.length) {
|
|
131
|
+
violations.push(`${label} identities must be distinct`);
|
|
132
|
+
}
|
|
133
|
+
terms.push({ term, evidence: parsed });
|
|
134
|
+
};
|
|
135
|
+
readTerm(value.proposed_canonical_term, value.canonical_evidence, "canonical_evidence");
|
|
136
|
+
if (!Array.isArray(value.variants) || value.variants.length === 0) {
|
|
137
|
+
violations.push("proposal variants must be non-empty");
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
value.variants.forEach((variant, index) => {
|
|
141
|
+
if (!mapping(variant) || !exactFields(variant, ["term", "evidence"])) {
|
|
142
|
+
violations.push(`variants[${index}] must contain only term and evidence`);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
readTerm(variant.term, variant.evidence, `variants[${index}].evidence`);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (terms.some((term, index) => terms.slice(0, index).some((candidate) => unicodeCaselessExact(candidate.term, term.term)))) {
|
|
149
|
+
violations.push("proposal term identities must be Unicode caseless-exact unique");
|
|
150
|
+
}
|
|
151
|
+
let divergence;
|
|
152
|
+
if (value.personal_divergence !== undefined) {
|
|
153
|
+
if (!mapping(value.personal_divergence)
|
|
154
|
+
|| !exactFields(value.personal_divergence, ["personal_term", "project_term"])
|
|
155
|
+
|| typeof value.personal_divergence.personal_term !== "string"
|
|
156
|
+
|| value.personal_divergence.personal_term.trim() === ""
|
|
157
|
+
|| value.personal_divergence.project_term !== value.proposed_canonical_term)
|
|
158
|
+
violations.push("personal_divergence must bind a non-empty personal term to the proposed project term");
|
|
159
|
+
else
|
|
160
|
+
divergence = value.personal_divergence;
|
|
161
|
+
}
|
|
162
|
+
if (violations.length > 0 || terms.length < 2)
|
|
163
|
+
return { proposal: null, violations };
|
|
164
|
+
const expected = canonicalProposal({
|
|
165
|
+
family: "terminology_drift",
|
|
166
|
+
concept: value.concept,
|
|
167
|
+
terms,
|
|
168
|
+
severity: value.severity,
|
|
169
|
+
confidence: value.confidence,
|
|
170
|
+
...(divergence ? { personal_divergence: divergence } : {}),
|
|
171
|
+
});
|
|
172
|
+
if (expected.proposed_canonical_term !== value.proposed_canonical_term)
|
|
173
|
+
violations.push("proposed canonical term is not the best-supported term under the Audit tie-break");
|
|
174
|
+
if (canonicalTerminologyJson(proposalWithoutDigest(expected)) !== canonicalTerminologyJson(proposalWithoutDigest(value))) {
|
|
175
|
+
violations.push("proposal shape or ordering is not the canonical Audit output");
|
|
176
|
+
}
|
|
177
|
+
if (expected.proposal_digest !== value.proposal_digest)
|
|
178
|
+
violations.push("proposal_digest does not match the canonical Audit output");
|
|
179
|
+
return { proposal: violations.length === 0 ? expected : null, violations };
|
|
180
|
+
}
|
|
181
|
+
function confidenceFloor() {
|
|
182
|
+
const protocol = loadYamlMappingFile(path.join(resolveSourceRoot(), "skills", "agentera", "protocol.yaml"));
|
|
183
|
+
const scale = protocol.CONFIDENCE_SCALE;
|
|
184
|
+
const range = scale?.["3"]?.range;
|
|
185
|
+
if (!Array.isArray(range) || !Number.isInteger(range[0])) {
|
|
186
|
+
throw new Error("protocol CONFIDENCE_SCALE CS3 lower bound is unavailable");
|
|
187
|
+
}
|
|
188
|
+
return Number(range[0]);
|
|
189
|
+
}
|
|
190
|
+
function verifiedEvidence(projectRoot, term, evidence) {
|
|
191
|
+
const root = fs.realpathSync(projectRoot);
|
|
192
|
+
const verified = [];
|
|
193
|
+
const identities = new Set();
|
|
194
|
+
for (const item of evidence) {
|
|
195
|
+
if (!Number.isInteger(item.line) || item.line < 1 || !isSafeProjectSourcePath(item.source_path))
|
|
196
|
+
return null;
|
|
197
|
+
const pathname = path.resolve(root, item.source_path);
|
|
198
|
+
if (pathname !== root && !pathname.startsWith(`${root}${path.sep}`))
|
|
199
|
+
return null;
|
|
200
|
+
let realPath;
|
|
201
|
+
try {
|
|
202
|
+
realPath = fs.realpathSync(pathname);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
if (!realPath.startsWith(`${root}${path.sep}`) || !fs.statSync(realPath).isFile())
|
|
208
|
+
return null;
|
|
209
|
+
const line = fs.readFileSync(realPath, "utf8").split(/\r?\n/)[item.line - 1];
|
|
210
|
+
if (line === undefined || !containsGlossaryTerm(line, term))
|
|
211
|
+
return null;
|
|
212
|
+
const sourcePath = path.relative(root, realPath).split(path.sep).join(path.posix.sep);
|
|
213
|
+
const identity = `${sourcePath}:${item.line}`;
|
|
214
|
+
if (identities.has(identity))
|
|
215
|
+
continue;
|
|
216
|
+
identities.add(identity);
|
|
217
|
+
verified.push({
|
|
218
|
+
source_path: sourcePath,
|
|
219
|
+
line: item.line,
|
|
220
|
+
source_record_sha256: crypto.createHash("sha256").update(line).digest("hex"),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return verified.length > 0 ? verified : null;
|
|
224
|
+
}
|
|
225
|
+
/** Generate findings from assessed concepts without writing project or personal state. */
|
|
226
|
+
export function assessTerminologyDrift(input) {
|
|
227
|
+
const minimumConfidence = confidenceFloor();
|
|
228
|
+
const findings = [];
|
|
229
|
+
for (const concept of input.concepts) {
|
|
230
|
+
if (concept.confidence < minimumConfidence ||
|
|
231
|
+
concept.confidence > 100 ||
|
|
232
|
+
!Number.isInteger(concept.confidence) ||
|
|
233
|
+
input.deliberateDecisionConcepts.has(concept.concept) ||
|
|
234
|
+
input.trackedIssueConcepts.has(concept.concept))
|
|
235
|
+
continue;
|
|
236
|
+
const consolidated = [];
|
|
237
|
+
let invalidEvidence = false;
|
|
238
|
+
for (const candidate of concept.terms) {
|
|
239
|
+
const term = candidate.term.trim();
|
|
240
|
+
const evidence = term ? verifiedEvidence(input.projectRoot, term, candidate.evidence) : null;
|
|
241
|
+
if (!evidence) {
|
|
242
|
+
invalidEvidence = true;
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
const group = consolidated.find((item) => unicodeCaselessExact(item.term, term)) ?? { term, evidence: new Map() };
|
|
246
|
+
for (const item of evidence)
|
|
247
|
+
group.evidence.set(`${item.source_path}:${item.line}`, item);
|
|
248
|
+
if (!consolidated.includes(group))
|
|
249
|
+
consolidated.push(group);
|
|
250
|
+
}
|
|
251
|
+
if (invalidEvidence || consolidated.length < 2)
|
|
252
|
+
continue;
|
|
253
|
+
const terms = consolidated.map((term) => ({
|
|
254
|
+
term: term.term,
|
|
255
|
+
evidence: orderedEvidence([...term.evidence.values()]),
|
|
256
|
+
}));
|
|
257
|
+
const seed = {
|
|
258
|
+
family: "terminology_drift",
|
|
259
|
+
concept: concept.concept,
|
|
260
|
+
terms,
|
|
261
|
+
severity: concept.severity,
|
|
262
|
+
confidence: concept.confidence,
|
|
263
|
+
};
|
|
264
|
+
let finding = canonicalProposal(seed);
|
|
265
|
+
const personalTerm = input.personalTerms?.get(concept.concept)?.trim();
|
|
266
|
+
if (personalTerm && !unicodeCaselessExact(personalTerm, finding.proposed_canonical_term)) {
|
|
267
|
+
finding = canonicalProposal({
|
|
268
|
+
...seed,
|
|
269
|
+
personal_divergence: {
|
|
270
|
+
personal_term: personalTerm,
|
|
271
|
+
project_term: finding.proposed_canonical_term,
|
|
272
|
+
},
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
const validated = validateTerminologyProposal(finding);
|
|
276
|
+
if (!validated.proposal)
|
|
277
|
+
throw new Error(`Audit produced an invalid terminology proposal: ${validated.violations.join("; ")}`);
|
|
278
|
+
findings.push(validated.proposal);
|
|
279
|
+
}
|
|
280
|
+
return findings;
|
|
281
|
+
}
|
package/dist/bin/agentera.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { main } from "../cli/dispatch.js";
|
|
3
|
-
process
|
|
4
|
-
|
|
3
|
+
// Assigning exitCode lets Node drain piped stdout/stderr before the process
|
|
4
|
+
// terminates. Calling process.exit() here truncates large command payloads.
|
|
5
|
+
process.exitCode = main(process.argv);
|