agentera 3.0.0-dev.4 → 3.0.0-dev.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +108 -22
- package/bundle/.agentera-npx-bundle.json +1 -1
- package/bundle/CHANGELOG.md +1351 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +143 -0
- package/bundle/UPGRADE.md +236 -0
- package/bundle/extract-corpus-parity.json +21 -0
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-publication.json +437 -0
- package/bundle/references/adapters/package-registry.yaml +434 -189
- package/bundle/references/adapters/package-surface-characterization.md +66 -35
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
- package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
- package/bundle/references/analysis/verification-policy.yaml +191 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
- package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
- package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
- package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
- package/bundle/references/cli/routing-model.md +155 -0
- package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
- package/bundle/references/cli/update-channels.yaml +35 -2
- package/bundle/references/cli/vocabulary-index.yaml +23 -20
- package/bundle/references/cli/vocabulary.md +337 -366
- package/bundle/references/meta/retained-reference-authority.yaml +151 -0
- package/bundle/registry.json +14 -14
- package/bundle/skills/agentera/SKILL.md +218 -408
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
- package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
- package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
- package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
- package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
- package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
- package/bundle/skills/agentera/protocol.yaml +31 -31
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
- package/dist/analytics/extractCorpus/cli.js +190 -0
- package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
- package/dist/analytics/extractCorpus/core.js +392 -0
- package/dist/analytics/extractCorpus/corpus.js +167 -0
- package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
- package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
- package/dist/analytics/extractCorpus/index.js +14 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
- package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
- package/dist/analytics/extractCorpus/tierReader.js +108 -0
- package/dist/analytics/extractCorpus.js +2 -1791
- package/dist/analytics/glossaryAdviceResolution.js +166 -0
- package/dist/analytics/glossaryInputAcquisition.js +319 -0
- package/dist/analytics/personalGlossaryAdmission.js +133 -0
- package/dist/analytics/personalGlossaryProfile.js +219 -0
- package/dist/analytics/profileSignals.js +211 -0
- package/dist/analytics/usageStats.js +169 -42
- package/dist/audit/terminologyDrift.js +281 -0
- package/dist/bin/agentera.js +3 -2
- package/dist/capabilities/audit/instructions.js +16 -0
- package/dist/capabilities/build/instructions.js +56 -0
- package/dist/capabilities/design/instructions.js +4 -0
- package/dist/capabilities/discuss/instructions.js +29 -0
- package/dist/capabilities/document/instructions.js +11 -0
- package/dist/capabilities/index.js +40 -0
- package/dist/capabilities/optimize/instructions.js +14 -0
- package/dist/capabilities/orchestrate/instructions.js +40 -0
- package/dist/capabilities/plan/instructions.js +32 -0
- package/dist/capabilities/profile/instructions.js +70 -0
- package/dist/capabilities/research/instructions.js +5 -0
- package/dist/capabilities/status/instructions.js +11 -0
- package/dist/capabilities/status/startupInstructions.js +34 -0
- package/dist/capabilities/vision/instructions.js +4 -0
- package/dist/cli/appContext.js +30 -24
- package/dist/cli/argvalidate.js +0 -1
- package/dist/cli/capabilityContext/benchmark.js +565 -0
- package/dist/cli/capabilityContext/bespoke.js +44 -0
- package/dist/cli/capabilityContext/build.js +242 -0
- package/dist/cli/capabilityContext/closeout.js +233 -0
- package/dist/cli/capabilityContext/contract.js +179 -0
- package/dist/cli/capabilityContext/evidence.js +463 -0
- package/dist/cli/capabilityContext/index.js +3 -0
- package/dist/cli/capabilityContext/orchestration.js +131 -0
- package/dist/cli/capabilityContext/planState.js +260 -0
- package/dist/cli/capabilityContext/progress.js +142 -0
- package/dist/cli/capabilityContext/projectVerification.js +409 -0
- package/dist/cli/capabilityContext/shared.js +83 -0
- package/dist/cli/capabilityContext/slim.js +152 -0
- package/dist/cli/capabilityContext/startup.js +150 -0
- package/dist/cli/capabilityContext/startupAggregation.js +68 -0
- package/dist/cli/capabilityContext/types.js +56 -0
- package/dist/cli/capabilityContext.js +1 -2421
- package/dist/cli/commands/appHome.js +22 -0
- package/dist/cli/commands/capability.js +5 -12
- package/dist/cli/commands/compact.js +41 -13
- package/dist/cli/commands/doctor.js +127 -97
- package/dist/cli/commands/durability.js +81 -0
- package/dist/cli/commands/glossaryAdvice.js +138 -0
- package/dist/cli/commands/lint.js +26 -44
- package/dist/cli/commands/personalGlossary.js +176 -0
- package/dist/cli/commands/prime/briefOrientation.js +747 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/bundleStatus.js +190 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
- package/dist/cli/commands/prime/collectOrientationState.js +212 -0
- package/dist/cli/commands/prime/orientationOutput.js +397 -0
- package/dist/cli/commands/prime/types.js +1 -0
- package/dist/cli/commands/prime/v1Migration.js +38 -0
- package/dist/cli/commands/prime.js +80 -558
- package/dist/cli/commands/profileGrounding.js +55 -0
- package/dist/cli/commands/query.js +78 -53
- package/dist/cli/commands/report.js +96 -25
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/schema.js +266 -143
- package/dist/cli/commands/state/decisions.js +387 -0
- package/dist/cli/commands/state/docs.js +70 -0
- package/dist/cli/commands/state/experimentRecords.js +151 -0
- package/dist/cli/commands/state/experiments.js +14 -0
- package/dist/cli/commands/state/get.js +129 -0
- package/dist/cli/commands/state/health.js +14 -0
- package/dist/cli/commands/state/index.js +16 -0
- package/dist/cli/commands/state/list.js +194 -0
- package/dist/cli/commands/state/objective.js +25 -0
- package/dist/cli/commands/state/plan.js +14 -0
- package/dist/cli/commands/state/planTasks.js +154 -0
- package/dist/cli/commands/state/plans.js +154 -0
- package/dist/cli/commands/state/progress.js +13 -0
- package/dist/cli/commands/state/shared.js +14 -0
- package/dist/cli/commands/state/todo.js +42 -0
- package/dist/cli/commands/state/write.js +434 -0
- package/dist/cli/commands/upgrade.js +146 -5
- package/dist/cli/commands/upgradeVerify.js +118 -0
- package/dist/cli/commands/validate.js +272 -213
- package/dist/cli/commands/verify.js +24 -9
- package/dist/cli/contracts/bundleStatus.js +1 -0
- package/dist/cli/contracts/orientationState.js +1 -0
- package/dist/cli/dispatch/argvParser.js +32 -0
- package/dist/cli/dispatch/check.js +372 -0
- package/dist/cli/dispatch/commands.js +27 -0
- package/dist/cli/dispatch/index.js +207 -0
- package/dist/cli/dispatch/lifecycle.js +652 -0
- package/dist/cli/dispatch/prime.js +139 -0
- package/dist/cli/dispatch/projections.js +17 -0
- package/dist/cli/dispatch/shared.js +63 -0
- package/dist/cli/dispatch/state.js +140 -0
- package/dist/cli/dispatch.js +1 -996
- package/dist/cli/errors.js +52 -0
- package/dist/cli/help.js +390 -43
- package/dist/cli/migrationRequired.js +87 -0
- package/dist/cli/orientation/attention.js +59 -0
- package/dist/cli/orientation/corpusCoverage.js +102 -0
- package/dist/cli/orientation.js +444 -173
- package/dist/cli/planArtifacts.js +350 -0
- package/dist/cli/planEvidence.js +157 -0
- package/dist/cli/planLifecycleState.js +36 -0
- package/dist/cli/planTaskIndex.js +11 -0
- package/dist/cli/preCutoverCommand.js +32 -0
- package/dist/cli/prime-blob.js +71 -3
- package/dist/cli/profileAcquisition.js +167 -0
- package/dist/cli/startupCompletenessContract.js +59 -0
- package/dist/cli/stateQuery.js +63 -14
- package/dist/cli/structured.js +0 -1
- package/dist/cli/todoMarkdown.js +46 -0
- package/dist/cli/todoReadinessSelection.js +192 -0
- package/dist/cli/todoSeverity.js +18 -0
- package/dist/core/atomicWriter.js +20 -0
- package/dist/core/developmentChannel.js +1 -0
- package/dist/core/developmentInvocation.js +374 -0
- package/dist/core/difflib.js +0 -1
- package/dist/core/envPaths.js +20 -0
- package/dist/core/jsonValue.js +5 -0
- package/dist/core/paths.js +0 -1
- package/dist/core/pyjson.js +67 -3
- package/dist/core/shell.js +4 -0
- package/dist/core/skillIdentity.js +23 -0
- package/dist/core/sourceRoot.js +9 -12
- package/dist/core/text.js +10 -0
- package/dist/core/toml.js +0 -1
- package/dist/core/yaml.js +8 -1
- package/dist/eval/evalSkills.js +30 -26
- package/dist/eval/hybridRouteEvaluation.js +155 -0
- package/dist/eval/semanticEval.js +43 -20
- package/dist/eval/semanticFixtures.js +16 -5
- package/dist/hooks/common.js +11 -81
- package/dist/hooks/compaction/apply.js +446 -0
- package/dist/hooks/compaction/dryRun.js +184 -0
- package/dist/hooks/compaction/index.js +22 -0
- package/dist/hooks/compaction/parse.js +325 -0
- package/dist/hooks/compaction/retention.js +202 -0
- package/dist/hooks/compaction/status.js +360 -0
- package/dist/hooks/compaction/types.js +5 -0
- package/dist/hooks/validateArtifact/agentFacing.js +9 -0
- package/dist/hooks/validateArtifact/index.js +92 -0
- package/dist/hooks/validateArtifact/markdown.js +145 -0
- package/dist/hooks/validateArtifact/schema.js +546 -0
- package/dist/hooks/validateArtifact/traversal.js +107 -0
- package/dist/hooks/validateArtifact/violations.js +107 -0
- package/dist/migrate/v2HandoffManifest.js +452 -0
- package/dist/registries/activationContract.js +2 -0
- package/dist/registries/activationTuples.js +106 -0
- package/dist/registries/artifactProtocolIds.js +78 -0
- package/dist/registries/artifactRegistry.js +224 -63
- package/dist/registries/artifactSchemaProjection.js +45 -0
- package/dist/registries/capabilityContract.js +141 -13
- package/dist/registries/evaluatorHandoffContract.js +170 -0
- package/dist/registries/evidenceTierContract.js +371 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryCaveatContract.js +67 -0
- package/dist/registries/glossaryConsumerContractValidation.js +787 -0
- package/dist/registries/glossaryEntryContract.js +757 -0
- package/dist/registries/glossaryTermIdentity.js +17 -0
- package/dist/registries/glossaryTermOccurrence.js +20 -0
- package/dist/registries/hybridRoute.js +274 -0
- package/dist/registries/hybridRouteReceipt.js +221 -0
- package/dist/registries/packagePublication.js +229 -0
- package/dist/registries/packageRegistry.js +187 -211
- package/dist/registries/todoReadinessContract.js +448 -0
- package/dist/registries/triggerLoader.js +174 -0
- package/dist/registries/verbosityBudgetContract.js +205 -0
- package/dist/release/releaseMetadata.js +385 -0
- package/dist/runtime/lifecycleAdapterContract.js +457 -0
- package/dist/runtime/lifecycleAdapters.js +777 -0
- package/dist/runtime/lifecycleAuthority.js +453 -0
- package/dist/runtime/lifecycleOperationContract.js +123 -0
- package/dist/runtime/lifecycleOperations.js +634 -0
- package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
- package/dist/runtime/lifecyclePublication.js +415 -0
- package/dist/runtime/lifecycleSnapshot.js +438 -0
- package/dist/runtime/nativeResourceCleanup.js +502 -0
- package/dist/setup/opencode.js +20 -0
- package/dist/setup/opencodeConstants.js +1 -0
- package/dist/setup/sharedSkill.js +45 -0
- package/dist/setup/smokeChecks.js +21 -82
- package/dist/state/archiveDiscovery.js +580 -0
- package/dist/state/archivePublication.js +225 -0
- package/dist/state/archiveRecovery.js +237 -0
- package/dist/state/archiveReplay.js +53 -0
- package/dist/state/canonicalMigrationRecord.js +36 -0
- package/dist/state/changelog.js +221 -0
- package/dist/state/decisionEntities.js +367 -0
- package/dist/state/decisionLegacyValidation.js +215 -0
- package/dist/state/decisionMigrationProvenance.js +199 -0
- package/dist/state/decisionOverlay.js +254 -0
- package/dist/state/decisionRevision.js +256 -0
- package/dist/state/decisionRevisionMigration.js +89 -0
- package/dist/state/directRetrieval.js +323 -0
- package/dist/state/durability.js +324 -0
- package/dist/state/entityCutover.js +459 -0
- package/dist/state/entityCutoverGit.js +127 -0
- package/dist/state/entityGlossaryAuthority.js +13 -0
- package/dist/state/entityListProjection.js +187 -0
- package/dist/state/entityListRuntimeRegistry.js +85 -0
- package/dist/state/entityMigrationCausality.js +97 -0
- package/dist/state/entityMigrationIdentity.js +5 -0
- package/dist/state/entityMigrationPreview.js +846 -0
- package/dist/state/entityMigrationTodo.js +133 -0
- package/dist/state/entityPublicationContext.js +806 -0
- package/dist/state/entityRetrievalHelp.js +506 -0
- package/dist/state/entityStorage.js +896 -0
- package/dist/state/exactReplacementRecovery.js +18 -0
- package/dist/state/experimentArchive.js +63 -0
- package/dist/state/experimentIdentity.js +202 -0
- package/dist/state/healthEntities.js +262 -0
- package/dist/state/healthEntityValidation.js +18 -0
- package/dist/state/healthRepair.js +69 -0
- package/dist/state/installRoot.js +64 -25
- package/dist/state/legacyEntityCutoverEvidence.js +65 -0
- package/dist/state/legacyIdentity.js +47 -0
- package/dist/state/legacySummaryRecord.js +6 -0
- package/dist/state/listAccounting.js +54 -0
- package/dist/state/listClassification.js +17 -0
- package/dist/state/listCursor.js +42 -0
- package/dist/state/listRetrieval.js +781 -0
- package/dist/state/migrationSourceBinding.js +30 -0
- package/dist/state/objectiveExperimentEntities.js +322 -0
- package/dist/state/planEntities.js +530 -0
- package/dist/state/planIdentity.js +47 -0
- package/dist/state/planRetrieval.js +313 -0
- package/dist/state/planTaskRetrieval.js +294 -0
- package/dist/state/progressEntities.js +512 -0
- package/dist/state/progressGlossaryCaveat.js +168 -0
- package/dist/state/progressPublicationOrder.js +19 -0
- package/dist/state/projectRoot.js +62 -0
- package/dist/state/projectionPolicy.js +190 -0
- package/dist/state/retrievalAuthority.js +156 -0
- package/dist/state/safeProjectFile.js +155 -0
- package/dist/state/startupAnalysis/benchmark.js +432 -0
- package/dist/state/startupAnalysis/contract.js +160 -0
- package/dist/state/startupAnalysis/helpers.js +286 -0
- package/dist/state/startupAnalysis/index.js +6 -0
- package/dist/state/startupAnalysis/metrics.js +340 -0
- package/dist/state/startupAnalysis/records.js +198 -0
- package/dist/state/startupAnalysis/report.js +111 -0
- package/dist/state/startupAnalysis/threshold.js +512 -0
- package/dist/state/startupAnalysis.js +2 -1953
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/stateMode.js +85 -0
- package/dist/state/stateStorageAuthority.js +47 -0
- package/dist/state/summaryEntityRead.js +25 -0
- package/dist/state/summaryMigrationProvenance.js +66 -0
- package/dist/state/summarySourceRowAuthority.js +36 -0
- package/dist/state/todoDocsEntities.js +1064 -0
- package/dist/state/todoDocsEntityValidation.js +158 -0
- package/dist/state/todoMarkdownProjection.js +51 -0
- package/dist/state/todoReconciliationActivation.js +132 -0
- package/dist/state/todoReconciliationInspection.js +173 -0
- package/dist/state/todoReconciliationRepair.js +170 -0
- package/dist/state/todoReconciliationTransaction.js +582 -0
- package/dist/state/write/assign.js +20 -0
- package/dist/state/write/candidateMutation.js +269 -0
- package/dist/state/write/errors.js +11 -0
- package/dist/state/write/experimentPublication.js +192 -0
- package/dist/state/write/explain.js +332 -0
- package/dist/state/write/fields.js +61 -0
- package/dist/state/write/glossaryPublication.js +263 -0
- package/dist/state/write/grammar.js +280 -0
- package/dist/state/write/helpers.js +29 -0
- package/dist/state/write/index.js +12 -0
- package/dist/state/write/input.js +367 -0
- package/dist/state/write/lock.js +837 -0
- package/dist/state/write/mutation.js +234 -0
- package/dist/state/write/operations.js +169 -0
- package/dist/state/write/planEvaluation.js +128 -0
- package/dist/state/write/planPublication.js +179 -0
- package/dist/state/write/runtimeOperations.js +142 -0
- package/dist/state/write/serialize.js +1 -0
- package/dist/state/write/transaction.js +52 -0
- package/dist/state/write/validate.js +7 -0
- package/dist/upgrade/appContentRefresh.js +383 -0
- package/dist/upgrade/appModel.js +8 -7
- package/dist/upgrade/atomicWriter.js +1 -0
- package/dist/upgrade/bundleEvidence.js +33 -0
- package/dist/upgrade/channels.js +12 -8
- package/dist/upgrade/compatibility.js +56 -21
- package/dist/upgrade/doctor.js +197 -192
- package/dist/upgrade/doctorClassifier.js +187 -0
- package/dist/upgrade/installedHooksRetirement.js +196 -0
- package/dist/upgrade/legacyAgentCleanup.js +282 -0
- package/dist/upgrade/lifecycleUpgrade.js +113 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
- package/dist/upgrade/migrationPublication.js +122 -0
- package/dist/upgrade/nextMajorDoctor.js +155 -0
- package/dist/upgrade/npxPlatformStatus.js +22 -0
- package/dist/upgrade/projectIntegration.js +145 -187
- package/dist/upgrade/projectIntegrationDecision.js +50 -0
- package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
- package/dist/upgrade/runtimeMigration.js +278 -352
- package/dist/upgrade/upgradeCommands.js +14 -1
- package/dist/upgrade/upgradeLock.js +85 -0
- package/dist/upgrade/upgradeOrchestrator.js +263 -59
- package/dist/upgrade/v3CapabilitySurface.js +14 -0
- package/dist/upgrade/versionResolution.js +12 -5
- package/dist/validate/activationArtifactEvidence.js +844 -0
- package/dist/validate/activationConjunction.js +816 -0
- package/dist/validate/activationEvidenceManifest.js +515 -0
- package/dist/validate/activationPackageSemantics.js +29 -0
- package/dist/validate/appHomeContract.js +5 -11
- package/dist/validate/bootstrapAuthority.js +44 -0
- package/dist/validate/capability.js +144 -15
- package/dist/validate/crossCapability.js +15 -10
- package/dist/validate/retainedReferenceAuthority.js +879 -0
- package/dist/validate/selfAudit.js +73 -37
- package/dist/validate/v1LegacyCruft.js +131 -0
- package/dist/validate/vocabularyAuthority.js +303 -0
- package/package.json +53 -27
- package/bundle/references/adapters/cursor.md +0 -213
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/analysis/benchmark.md +0 -267
- package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
- package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
- package/bundle/references/cli/capability-tool-classification.yaml +0 -53
- package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
- package/bundle/references/meta/documentation-inventory.md +0 -43
- package/bundle/references/v1-section-mapping.md +0 -47
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
- package/bundle/skills/agentera/agents/hej.toml +0 -6
- package/bundle/skills/agentera/agents/inspektera.toml +0 -6
- package/bundle/skills/agentera/agents/inspirera.toml +0 -6
- package/bundle/skills/agentera/agents/optimera.toml +0 -6
- package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
- package/bundle/skills/agentera/agents/planera.toml +0 -6
- package/bundle/skills/agentera/agents/profilera.toml +0 -6
- package/bundle/skills/agentera/agents/realisera.toml +0 -6
- package/bundle/skills/agentera/agents/resonera.toml +0 -6
- package/bundle/skills/agentera/agents/visionera.toml +0 -6
- package/bundle/skills/agentera/agents/visualisera.toml +0 -6
- package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
- package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
- package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
- package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
- package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
- package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
- package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
- package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
- package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
- package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
- package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
- package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
- package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
- package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
- package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
- package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
- package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
- package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
- package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
- package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
- package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
- package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
- package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
- package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
- package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
- package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
- package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
- package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
- package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
- package/bundle/skills/agentera/references/contract.md +0 -1039
- package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
- package/bundle/skills/hej/SKILL.md +0 -69
- package/bundle/skills/hej/agents/hej.toml +0 -11
- package/bundle/skills/hej/agents/openai.yaml +0 -8
- package/dist/analytics/extractCorpus.js.map +0 -1
- package/dist/analytics/usageStats.js.map +0 -1
- package/dist/bin/agentera.js.map +0 -1
- package/dist/cli/appContext.js.map +0 -1
- package/dist/cli/argvalidate.js.map +0 -1
- package/dist/cli/capabilityContext.js.map +0 -1
- package/dist/cli/commands/backfill.js +0 -84
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/cli/commands/capability.js.map +0 -1
- package/dist/cli/commands/compact.js.map +0 -1
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/lint.js.map +0 -1
- package/dist/cli/commands/prime.js.map +0 -1
- package/dist/cli/commands/query.js.map +0 -1
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/schema.js.map +0 -1
- package/dist/cli/commands/state.js +0 -1012
- package/dist/cli/commands/state.js.map +0 -1
- package/dist/cli/commands/upgrade.js.map +0 -1
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/commands/verify.js.map +0 -1
- package/dist/cli/dispatch.js.map +0 -1
- package/dist/cli/help.js.map +0 -1
- package/dist/cli/orientation.js.map +0 -1
- package/dist/cli/prime-blob.js.map +0 -1
- package/dist/cli/stateQuery.js.map +0 -1
- package/dist/cli/structured.js.map +0 -1
- package/dist/core/difflib.js.map +0 -1
- package/dist/core/git.js +0 -43
- package/dist/core/git.js.map +0 -1
- package/dist/core/paths.js.map +0 -1
- package/dist/core/pyjson.js.map +0 -1
- package/dist/core/sourceRoot.js.map +0 -1
- package/dist/core/toml.js.map +0 -1
- package/dist/core/yaml.js.map +0 -1
- package/dist/eval/evalSkills.js.map +0 -1
- package/dist/eval/semanticEval.js.map +0 -1
- package/dist/eval/semanticFixtures.js.map +0 -1
- package/dist/hooks/common.js.map +0 -1
- package/dist/hooks/compaction.js +0 -935
- package/dist/hooks/compaction.js.map +0 -1
- package/dist/hooks/cursorPreToolUse.js +0 -19
- package/dist/hooks/cursorPreToolUse.js.map +0 -1
- package/dist/hooks/cursorSessionStart.js +0 -71
- package/dist/hooks/cursorSessionStart.js.map +0 -1
- package/dist/hooks/sessionStart.js +0 -209
- package/dist/hooks/sessionStart.js.map +0 -1
- package/dist/hooks/sessionStop.js +0 -212
- package/dist/hooks/sessionStop.js.map +0 -1
- package/dist/hooks/validateArtifact.js +0 -933
- package/dist/hooks/validateArtifact.js.map +0 -1
- package/dist/registries/artifactRegistry.js.map +0 -1
- package/dist/registries/capabilityContract.js.map +0 -1
- package/dist/registries/packageRegistry.js.map +0 -1
- package/dist/registries/runtimeAdapterRegistry.js +0 -315
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/setup/codex.js +0 -1056
- package/dist/setup/codex.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -127
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/doctor.js +0 -1297
- package/dist/setup/doctor.js.map +0 -1
- package/dist/setup/smokeChecks.js.map +0 -1
- package/dist/state/installRoot.js.map +0 -1
- package/dist/state/progressCommit.js +0 -289
- package/dist/state/progressCommit.js.map +0 -1
- package/dist/state/startupAnalysis.js.map +0 -1
- package/dist/upgrade/appModel.js.map +0 -1
- package/dist/upgrade/channels.js.map +0 -1
- package/dist/upgrade/compatibility.js.map +0 -1
- package/dist/upgrade/doctor.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
- package/dist/upgrade/projectIntegration.js.map +0 -1
- package/dist/upgrade/runtimeMigration.js.map +0 -1
- package/dist/upgrade/upgradeCommands.js.map +0 -1
- package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
- package/dist/upgrade/versionResolution.js.map +0 -1
- package/dist/validate/appHomeContract.js.map +0 -1
- package/dist/validate/capability.js.map +0 -1
- package/dist/validate/crossCapability.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -772
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- package/dist/validate/selfAudit.js.map +0 -1
- /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
export function writeFileAtomic(target, data, encoding = "utf8") {
|
|
3
|
+
const tmp = `${target}.tmp.${process.pid}.${Date.now()}`;
|
|
4
|
+
try {
|
|
5
|
+
if (Buffer.isBuffer(data))
|
|
6
|
+
fs.writeFileSync(tmp, data);
|
|
7
|
+
else
|
|
8
|
+
fs.writeFileSync(tmp, data, encoding);
|
|
9
|
+
fs.renameSync(tmp, target);
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
try {
|
|
13
|
+
fs.unlinkSync(tmp);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// The stage may not exist or may already have been published.
|
|
17
|
+
}
|
|
18
|
+
throw err;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const CANONICAL_DEVELOPMENT_CLI = "npx -y agentera@next";
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { CANONICAL_DEVELOPMENT_CLI } from "./developmentChannel.js";
|
|
4
|
+
import { ENTITY_LIST_RUNTIME_FAMILIES, } from "../state/entityListRuntimeRegistry.js";
|
|
5
|
+
import { runtimeOperationSpec, runtimeOperationSpecs, } from "../state/write/runtimeOperations.js";
|
|
6
|
+
export const CANONICAL_DEVELOPMENT_INVOCATION = CANONICAL_DEVELOPMENT_CLI;
|
|
7
|
+
const LOCAL_RUNTIME_INVOCATION = "agentera";
|
|
8
|
+
export class DevelopmentInvocationError extends Error {
|
|
9
|
+
classification;
|
|
10
|
+
constructor(classification, reason) {
|
|
11
|
+
super(`development invocation rejected [${classification}]: ${reason}`);
|
|
12
|
+
this.name = "DevelopmentInvocationError";
|
|
13
|
+
this.classification = classification;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export const DEVELOPMENT_RUNTIME_REQUIRED_FILES = Object.freeze([
|
|
17
|
+
"package.json",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"dist/bin/agentera.js",
|
|
21
|
+
"bundle/.agentera-npx-bundle.json",
|
|
22
|
+
"bundle/registry.json",
|
|
23
|
+
"bundle/skills/agentera/SKILL.md",
|
|
24
|
+
"bundle/references/adapters/package-registry.yaml",
|
|
25
|
+
]);
|
|
26
|
+
export const DEVELOPMENT_CHILD_ENV_ALLOWLIST = Object.freeze([
|
|
27
|
+
"AGENTERA_BOOTSTRAP_SOURCE_ROOT",
|
|
28
|
+
"AGENTERA_HOME",
|
|
29
|
+
"AGENTERA_UPDATE_CHANNEL",
|
|
30
|
+
"DO_NOT_TRACK",
|
|
31
|
+
"HOME",
|
|
32
|
+
"LANG",
|
|
33
|
+
"LC_ALL",
|
|
34
|
+
"PATH",
|
|
35
|
+
"TMPDIR",
|
|
36
|
+
"XDG_CACHE_HOME",
|
|
37
|
+
"XDG_CONFIG_HOME",
|
|
38
|
+
"XDG_DATA_HOME",
|
|
39
|
+
"XDG_STATE_HOME",
|
|
40
|
+
]);
|
|
41
|
+
export const DEVELOPMENT_CHILD_PATH = process.platform === "win32"
|
|
42
|
+
? path.dirname(process.execPath)
|
|
43
|
+
: "/usr/bin:/bin";
|
|
44
|
+
function developmentCommand(argumentsText) {
|
|
45
|
+
return `${CANONICAL_DEVELOPMENT_INVOCATION} ${argumentsText}`;
|
|
46
|
+
}
|
|
47
|
+
const profileGroundingCommand = developmentCommand("report profile-grounding --format json");
|
|
48
|
+
const GLOSSARY_PROJECTIONS = {
|
|
49
|
+
"profile_output.command": developmentCommand("report profile-glossary"),
|
|
50
|
+
"profile_grounding.command": profileGroundingCommand,
|
|
51
|
+
"profile_grounding.repair": `Use the Profile capability to repair or regenerate PROFILE.md, then retry \`${profileGroundingCommand}\`; no profile bytes were changed.`,
|
|
52
|
+
"profile_grounding.absent": `Use the Profile capability to generate PROFILE.md, then retry ${profileGroundingCommand}.`,
|
|
53
|
+
"advice.command": developmentCommand("report glossary-advice --input REQUEST --format json"),
|
|
54
|
+
};
|
|
55
|
+
function invalid(reason) {
|
|
56
|
+
throw new Error(`invalid development command projection: ${reason}`);
|
|
57
|
+
}
|
|
58
|
+
function runtimeValue(source) {
|
|
59
|
+
return source.split(CANONICAL_DEVELOPMENT_INVOCATION).join(LOCAL_RUNTIME_INVOCATION);
|
|
60
|
+
}
|
|
61
|
+
function assertExact(value, owner, source) {
|
|
62
|
+
if (typeof value !== "string" || value !== source)
|
|
63
|
+
invalid(`'${owner}' does not match its code-owned exact source value`);
|
|
64
|
+
return runtimeValue(source);
|
|
65
|
+
}
|
|
66
|
+
function commandWords(command) {
|
|
67
|
+
const words = [];
|
|
68
|
+
let value = "";
|
|
69
|
+
let started = false;
|
|
70
|
+
let quote = null;
|
|
71
|
+
for (let index = 0; index < command.length; index += 1) {
|
|
72
|
+
const character = command[index];
|
|
73
|
+
if (quote) {
|
|
74
|
+
if (character === quote) {
|
|
75
|
+
quote = null;
|
|
76
|
+
started = true;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (quote === '"' && character === "\\") {
|
|
80
|
+
const escaped = command[++index];
|
|
81
|
+
if (escaped === undefined)
|
|
82
|
+
invalid("trailing escape");
|
|
83
|
+
if (escaped === "\n" || escaped === "\r")
|
|
84
|
+
invalid("shell continuation is not allowed");
|
|
85
|
+
value += escaped;
|
|
86
|
+
started = true;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (quote === '"' && (character === "`" || (character === "$" && command[index + 1] === "(")))
|
|
90
|
+
invalid("command substitution is not allowed");
|
|
91
|
+
value += character;
|
|
92
|
+
started = true;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (character === "\n" || character === "\r")
|
|
96
|
+
invalid("line separators are allowed only inside one quoted argument");
|
|
97
|
+
if (/\s/u.test(character)) {
|
|
98
|
+
if (started) {
|
|
99
|
+
words.push({ value });
|
|
100
|
+
value = "";
|
|
101
|
+
started = false;
|
|
102
|
+
}
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (character === "'" || character === '"') {
|
|
106
|
+
quote = character;
|
|
107
|
+
started = true;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (character === "\\") {
|
|
111
|
+
const escaped = command[++index];
|
|
112
|
+
if (escaped === undefined)
|
|
113
|
+
invalid("trailing escape");
|
|
114
|
+
if (escaped === "\n" || escaped === "\r")
|
|
115
|
+
invalid("shell continuation is not allowed");
|
|
116
|
+
value += escaped;
|
|
117
|
+
started = true;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (";&|<>()`".includes(character) || (character === "$" && command[index + 1] === "("))
|
|
121
|
+
invalid("composition, redirection, substitution, and grouping are not allowed");
|
|
122
|
+
value += character;
|
|
123
|
+
started = true;
|
|
124
|
+
}
|
|
125
|
+
if (quote)
|
|
126
|
+
invalid("unclosed quote");
|
|
127
|
+
if (started)
|
|
128
|
+
words.push({ value });
|
|
129
|
+
return words;
|
|
130
|
+
}
|
|
131
|
+
function parsedDevelopmentWords(command, classification) {
|
|
132
|
+
try {
|
|
133
|
+
return commandWords(command).map(({ value }) => value);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throw new DevelopmentInvocationError(classification, error instanceof Error ? error.message : String(error));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function hasDevelopmentPrefix(words) {
|
|
140
|
+
return words[0] === "npx" && words[1] === "-y" && words[2] === "agentera@next";
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Bind an untrusted command specification to one exact code-owned development
|
|
144
|
+
* command before a caller crosses a process boundary. The returned argv omits
|
|
145
|
+
* npx and the package selector because callers execute a verified local bin.
|
|
146
|
+
*/
|
|
147
|
+
export function bindDevelopmentInvocation(identity, candidate) {
|
|
148
|
+
if (!/^[a-z0-9][a-z0-9_.:-]*$/u.test(identity.owner)) {
|
|
149
|
+
throw new DevelopmentInvocationError("invalid_authority", "owner is not a canonical identity");
|
|
150
|
+
}
|
|
151
|
+
const authorityWords = parsedDevelopmentWords(identity.source, "invalid_authority");
|
|
152
|
+
if (!hasDevelopmentPrefix(authorityWords) || authorityWords.length === 3) {
|
|
153
|
+
throw new DevelopmentInvocationError("invalid_authority", `authority must be one complete ${CANONICAL_DEVELOPMENT_INVOCATION} command`);
|
|
154
|
+
}
|
|
155
|
+
const candidateWords = parsedDevelopmentWords(candidate, "malformed");
|
|
156
|
+
if (!hasDevelopmentPrefix(candidateWords)) {
|
|
157
|
+
throw new DevelopmentInvocationError("wrong_channel", `command must begin with the exact ${CANONICAL_DEVELOPMENT_INVOCATION} argv`);
|
|
158
|
+
}
|
|
159
|
+
if (candidate !== identity.source) {
|
|
160
|
+
throw new DevelopmentInvocationError("not_exact", `command does not match code-owned identity '${identity.owner}'`);
|
|
161
|
+
}
|
|
162
|
+
return Object.freeze({
|
|
163
|
+
owner: identity.owner,
|
|
164
|
+
source: identity.source,
|
|
165
|
+
argv: Object.freeze(candidateWords.slice(3)),
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/** Fail closed before process start when a constructed runtime is incomplete. */
|
|
169
|
+
export function assertDevelopmentRuntimeSurface(root) {
|
|
170
|
+
for (const relative of DEVELOPMENT_RUNTIME_REQUIRED_FILES) {
|
|
171
|
+
const target = path.join(root, relative);
|
|
172
|
+
let stat;
|
|
173
|
+
try {
|
|
174
|
+
stat = fs.lstatSync(target);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
throw new DevelopmentInvocationError("invalid_authority", `runtime is missing required file '${relative}'`);
|
|
178
|
+
}
|
|
179
|
+
if (!stat.isFile()) {
|
|
180
|
+
throw new DevelopmentInvocationError("invalid_authority", `runtime required file '${relative}' is not a regular file`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
let manifest;
|
|
184
|
+
try {
|
|
185
|
+
manifest = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
throw new DevelopmentInvocationError("invalid_authority", "package manifest is not valid JSON");
|
|
189
|
+
}
|
|
190
|
+
if (manifest.bin?.agentera !== "dist/bin/agentera.js") {
|
|
191
|
+
throw new DevelopmentInvocationError("invalid_authority", "package bin declaration is not canonical");
|
|
192
|
+
}
|
|
193
|
+
const files = manifest.files;
|
|
194
|
+
if (!Array.isArray(files) || !["dist", "bundle"].every((entry) => files.includes(entry))) {
|
|
195
|
+
throw new DevelopmentInvocationError("invalid_authority", "package files declaration omits dist or bundle");
|
|
196
|
+
}
|
|
197
|
+
const bin = path.join(root, "dist/bin/agentera.js");
|
|
198
|
+
if ((fs.statSync(bin).mode & 0o111) === 0) {
|
|
199
|
+
throw new DevelopmentInvocationError("invalid_authority", "package bin is not executable");
|
|
200
|
+
}
|
|
201
|
+
return bin;
|
|
202
|
+
}
|
|
203
|
+
/** Keep only reviewed process inputs; PATH is always code-owned. */
|
|
204
|
+
export function scrubDevelopmentChildEnvironment(inherited, explicit) {
|
|
205
|
+
const result = {};
|
|
206
|
+
for (const key of DEVELOPMENT_CHILD_ENV_ALLOWLIST) {
|
|
207
|
+
if (key === "PATH")
|
|
208
|
+
continue;
|
|
209
|
+
const value = explicit[key] ?? inherited[key];
|
|
210
|
+
if (value !== undefined)
|
|
211
|
+
result[key] = value;
|
|
212
|
+
}
|
|
213
|
+
result.PATH = DEVELOPMENT_CHILD_PATH;
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
function fieldValueIssue(field, value) {
|
|
217
|
+
if (field.validValues && !field.validValues.includes(value))
|
|
218
|
+
return "invalid value domain";
|
|
219
|
+
if (field.kind === "boolean" && value !== "true" && value !== "false")
|
|
220
|
+
return "invalid boolean";
|
|
221
|
+
if (field.kind === "integer" && !/^-?(?:0|[1-9][0-9]*)$/u.test(value))
|
|
222
|
+
return "invalid integer";
|
|
223
|
+
if (field.kind === "date" && !/^\d{4}-\d{2}-\d{2}$/u.test(value))
|
|
224
|
+
return "invalid date";
|
|
225
|
+
if (field.kind === "datetime" && !/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/u.test(value))
|
|
226
|
+
return "invalid datetime";
|
|
227
|
+
return undefined;
|
|
228
|
+
}
|
|
229
|
+
function validateOperationExample(spec, template) {
|
|
230
|
+
if (template.runtime !== runtimeValue(template.source))
|
|
231
|
+
invalid(`${spec.artifact}.${spec.verb} has a non-canonical runtime example`);
|
|
232
|
+
if (!template.source.startsWith(`${CANONICAL_DEVELOPMENT_INVOCATION} `))
|
|
233
|
+
invalid(`${spec.artifact}.${spec.verb} example has no canonical prefix`);
|
|
234
|
+
const words = commandWords(template.source).map(({ value }) => value);
|
|
235
|
+
const prefix = ["npx", "-y", "agentera@next", "state", spec.artifact, spec.verb];
|
|
236
|
+
if (!prefix.every((word, index) => words[index] === word))
|
|
237
|
+
invalid(`${spec.artifact}.${spec.verb} example has the wrong operation family`);
|
|
238
|
+
const fields = new Map(spec.fields.map((field) => [field.flag, field]));
|
|
239
|
+
const seen = new Map();
|
|
240
|
+
let input = false;
|
|
241
|
+
let format = false;
|
|
242
|
+
for (let index = prefix.length; index < words.length;) {
|
|
243
|
+
const flag = words[index++];
|
|
244
|
+
if (!flag.startsWith("--") || flag === "--")
|
|
245
|
+
invalid(`${spec.artifact}.${spec.verb} example has an extra positional argument`);
|
|
246
|
+
const count = (seen.get(flag) ?? 0) + 1;
|
|
247
|
+
seen.set(flag, count);
|
|
248
|
+
if (flag === "--dry-run" || flag === "--force") {
|
|
249
|
+
if (count > 1)
|
|
250
|
+
invalid(`${spec.artifact}.${spec.verb} example repeats ${flag}`);
|
|
251
|
+
if (flag === "--force" && !spec.allowForce)
|
|
252
|
+
invalid(`${spec.artifact}.${spec.verb} example uses unauthorized --force`);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const bareBoolean = fields.get(flag);
|
|
256
|
+
if (bareBoolean?.kind === "boolean" && (words[index] === undefined || words[index].startsWith("--"))) {
|
|
257
|
+
if (!bareBoolean.repeatable && count > 1)
|
|
258
|
+
invalid(`${spec.artifact}.${spec.verb} example repeats ${flag}`);
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
const argument = words[index++];
|
|
262
|
+
if (argument === undefined || argument.startsWith("--"))
|
|
263
|
+
invalid(`${spec.artifact}.${spec.verb} ${flag} needs one non-option value`);
|
|
264
|
+
if (flag === "--format") {
|
|
265
|
+
if (count > 1 || !spec.projection.formatValues.includes(argument))
|
|
266
|
+
invalid(`${spec.artifact}.${spec.verb} example has an invalid format`);
|
|
267
|
+
format = true;
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
if (flag === "--input") {
|
|
271
|
+
if (count > 1 || spec.inputMode !== "structured")
|
|
272
|
+
invalid(`${spec.artifact}.${spec.verb} example has an unauthorized input`);
|
|
273
|
+
input = true;
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
const field = fields.get(flag);
|
|
277
|
+
if (!field)
|
|
278
|
+
invalid(`${spec.artifact}.${spec.verb} example has unauthorized flag ${flag}`);
|
|
279
|
+
if (!field.repeatable && count > 1)
|
|
280
|
+
invalid(`${spec.artifact}.${spec.verb} example repeats ${flag}`);
|
|
281
|
+
const issue = fieldValueIssue(field, argument);
|
|
282
|
+
if (issue)
|
|
283
|
+
invalid(`${spec.artifact}.${spec.verb} example has ${issue} for ${flag}`);
|
|
284
|
+
}
|
|
285
|
+
if (!format)
|
|
286
|
+
invalid(`${spec.artifact}.${spec.verb} example omits --format`);
|
|
287
|
+
if (spec.inputMode === "structured" && !input)
|
|
288
|
+
invalid(`${spec.artifact}.${spec.verb} example omits --input`);
|
|
289
|
+
for (const field of spec.fields) {
|
|
290
|
+
if (field.required && !seen.has(field.flag))
|
|
291
|
+
invalid(`${spec.artifact}.${spec.verb} example omits ${field.flag}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
const validatedOperations = new Set();
|
|
295
|
+
function exactOperation(artifact, verb) {
|
|
296
|
+
const spec = runtimeOperationSpec(artifact, verb);
|
|
297
|
+
if (!spec)
|
|
298
|
+
invalid(`operation '${artifact}.${verb}' is not code-owned`);
|
|
299
|
+
const key = `${artifact}.${verb}`;
|
|
300
|
+
if (!validatedOperations.has(key)) {
|
|
301
|
+
if (spec.projection.recovery.runtime !== runtimeValue(spec.projection.recovery.source))
|
|
302
|
+
invalid(`${key} has a non-canonical runtime recovery`);
|
|
303
|
+
if (spec.projection.examples.length === 0)
|
|
304
|
+
invalid(`${key} has no code-owned example`);
|
|
305
|
+
for (const example of spec.projection.examples)
|
|
306
|
+
validateOperationExample(spec, example);
|
|
307
|
+
validatedOperations.add(key);
|
|
308
|
+
}
|
|
309
|
+
return spec;
|
|
310
|
+
}
|
|
311
|
+
export function projectRuntimeOperationRecovery(value, artifact, verb) {
|
|
312
|
+
const spec = exactOperation(artifact, verb);
|
|
313
|
+
return assertExact(value, `mutation.${artifact}.${verb}.recovery`, spec.projection.recovery.source);
|
|
314
|
+
}
|
|
315
|
+
export function projectRuntimeOperationExamples(value, artifact, verb) {
|
|
316
|
+
const spec = exactOperation(artifact, verb);
|
|
317
|
+
if (!Array.isArray(value) || value.length !== spec.projection.examples.length)
|
|
318
|
+
invalid(`'mutation.${artifact}.${verb}.examples' does not match its code-owned exact source list`);
|
|
319
|
+
return spec.projection.examples.map((template, index) => assertExact(value[index], `mutation.${artifact}.${verb}.examples[${index}]`, template.source));
|
|
320
|
+
}
|
|
321
|
+
export function projectEntityDevelopmentValue(value, familyKey, field) {
|
|
322
|
+
const family = ENTITY_LIST_RUNTIME_FAMILIES.find(({ key }) => key === familyKey);
|
|
323
|
+
const source = family?.projection[field];
|
|
324
|
+
if (!family || typeof source !== "string")
|
|
325
|
+
invalid(`retrieval.${familyKey}.${field} is not a code-owned projection`);
|
|
326
|
+
return assertExact(value, `retrieval.${familyKey}.${field}`, source);
|
|
327
|
+
}
|
|
328
|
+
export function projectGlossaryDevelopmentValue(value, owner) {
|
|
329
|
+
return assertExact(value, `glossary.${owner}`, GLOSSARY_PROJECTIONS[owner]);
|
|
330
|
+
}
|
|
331
|
+
export function developmentProjectionOwners() {
|
|
332
|
+
const owners = [];
|
|
333
|
+
for (const spec of runtimeOperationSpecs()) {
|
|
334
|
+
exactOperation(spec.artifact, spec.verb);
|
|
335
|
+
owners.push({
|
|
336
|
+
owner: `mutation.${spec.artifact}.${spec.verb}.recovery`,
|
|
337
|
+
family: "mutation",
|
|
338
|
+
...spec.projection.recovery,
|
|
339
|
+
consumers: ["schema", "help", "explain"],
|
|
340
|
+
});
|
|
341
|
+
spec.projection.examples.forEach((example, index) => owners.push({
|
|
342
|
+
owner: `mutation.${spec.artifact}.${spec.verb}.examples[${index}]`,
|
|
343
|
+
family: "mutation",
|
|
344
|
+
...example,
|
|
345
|
+
consumers: ["schema", "help", "explain", "parity"],
|
|
346
|
+
}));
|
|
347
|
+
}
|
|
348
|
+
for (const family of ENTITY_LIST_RUNTIME_FAMILIES) {
|
|
349
|
+
for (const field of ["list", "get", "example", "bareRecovery"]) {
|
|
350
|
+
const source = family.projection[field];
|
|
351
|
+
if (typeof source !== "string")
|
|
352
|
+
continue;
|
|
353
|
+
owners.push({
|
|
354
|
+
owner: `retrieval.${family.key}.${field}`,
|
|
355
|
+
family: "retrieval",
|
|
356
|
+
source,
|
|
357
|
+
runtime: runtimeValue(source),
|
|
358
|
+
consumers: ["schema", "help", "runtime_failure"],
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
for (const [owner, source] of Object.entries(GLOSSARY_PROJECTIONS)) {
|
|
363
|
+
owners.push({
|
|
364
|
+
owner: `glossary.${owner}`,
|
|
365
|
+
family: "glossary",
|
|
366
|
+
source,
|
|
367
|
+
runtime: runtimeValue(source),
|
|
368
|
+
consumers: ["schema", "help", "runtime_contract"],
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
if (new Set(owners.map(({ owner }) => owner)).size !== owners.length)
|
|
372
|
+
invalid("code-owned projection owner identities are not unique");
|
|
373
|
+
return owners;
|
|
374
|
+
}
|
package/dist/core/difflib.js
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import os from "node:os";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { expanduser } from "./paths.js";
|
|
4
|
+
/** Canonical profile-dir env var (v3). Matches artifact-registry-interface-model.yaml profile.path_template.env_precedence[0]. */
|
|
5
|
+
export const AGENTERA_PROFILE_DIR_ENV = "AGENTERA_PROFILE_DIR";
|
|
6
|
+
/** Deprecated v2 alias. Matches artifact-registry-interface-model.yaml profile.path_template.env_precedence[1]. */
|
|
7
|
+
export const PROFILERA_PROFILE_DIR_ENV = "PROFILERA_PROFILE_DIR";
|
|
8
|
+
/** v3 name wins; v2 name is the migration-window fallback only. */
|
|
9
|
+
export function resolveProfileDirOverride(env) {
|
|
10
|
+
return env[AGENTERA_PROFILE_DIR_ENV] ?? env[PROFILERA_PROFILE_DIR_ENV];
|
|
11
|
+
}
|
|
12
|
+
/** True when source text references the legacy name without the canonical v3 name (unmigrated schema literal). */
|
|
13
|
+
export function pluginSourceHasUnmigratedProfileDirSchema(text) {
|
|
14
|
+
return text.includes(PROFILERA_PROFILE_DIR_ENV) && !text.includes(AGENTERA_PROFILE_DIR_ENV);
|
|
15
|
+
}
|
|
16
|
+
/** Expand XDG_DATA_HOME the same way installRoot.ts does. */
|
|
17
|
+
export function resolveXdgDataHome(env, home = os.homedir()) {
|
|
18
|
+
const xdg = env.XDG_DATA_HOME;
|
|
19
|
+
return xdg ? expanduser(xdg) : path.join(expanduser(home), ".local", "share");
|
|
20
|
+
}
|
package/dist/core/paths.js
CHANGED
package/dist/core/pyjson.js
CHANGED
|
@@ -2,9 +2,26 @@
|
|
|
2
2
|
* Python-faithful JSON string helpers.
|
|
3
3
|
*
|
|
4
4
|
* Mirrors CPython's `json` encoder for the cases the CLI/hook surfaces need:
|
|
5
|
-
* ensure_ascii escaping and the default inline separators (", " / ": ")
|
|
6
|
-
* insertion-ordered object keys
|
|
5
|
+
* ensure_ascii escaping and the default inline separators (", " / ": ").
|
|
6
|
+
* `pyJsonInline` / `pyJsonIndent` keep insertion-ordered object keys; sorted
|
|
7
|
+
* variants match `json.dumps(..., sort_keys=True)` for doctor parity.
|
|
7
8
|
*/
|
|
9
|
+
function formatScalar(value, hook) {
|
|
10
|
+
const hooked = hook?.(value);
|
|
11
|
+
if (hooked !== undefined)
|
|
12
|
+
return hooked;
|
|
13
|
+
if (value === null || value === undefined)
|
|
14
|
+
return "null";
|
|
15
|
+
if (value === true)
|
|
16
|
+
return "true";
|
|
17
|
+
if (value === false)
|
|
18
|
+
return "false";
|
|
19
|
+
if (typeof value === "number")
|
|
20
|
+
return String(value);
|
|
21
|
+
if (typeof value === "string")
|
|
22
|
+
return pyJsonString(value);
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
8
25
|
/** Mirror Python json encoder string escaping with ensure_ascii=True. */
|
|
9
26
|
export function pyJsonString(str) {
|
|
10
27
|
let out = '"';
|
|
@@ -98,4 +115,51 @@ export function pyJsonIndent(value, indent = 2, level = 0) {
|
|
|
98
115
|
}
|
|
99
116
|
return "null";
|
|
100
117
|
}
|
|
101
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Mirror Python `json.dumps(value, sort_keys=True)` with default options:
|
|
120
|
+
* sorted object keys, separators (", " / ": "), ensure_ascii=True.
|
|
121
|
+
*/
|
|
122
|
+
export function pyJsonDumps(value, hook) {
|
|
123
|
+
const scalar = formatScalar(value, hook);
|
|
124
|
+
if (scalar !== null)
|
|
125
|
+
return scalar;
|
|
126
|
+
if (Array.isArray(value))
|
|
127
|
+
return "[" + value.map((v) => pyJsonDumps(v, hook)).join(", ") + "]";
|
|
128
|
+
if (typeof value === "object") {
|
|
129
|
+
const keys = Object.keys(value).sort();
|
|
130
|
+
return ("{" +
|
|
131
|
+
keys
|
|
132
|
+
.map((k) => `${pyJsonString(k)}: ${pyJsonDumps(value[k], hook)}`)
|
|
133
|
+
.join(", ") +
|
|
134
|
+
"}");
|
|
135
|
+
}
|
|
136
|
+
return "null";
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Mirror Python `json.dumps(value, indent=2, sort_keys=True)` with default
|
|
140
|
+
* options: sorted object keys, ensure_ascii=True, 2-space indentation.
|
|
141
|
+
*/
|
|
142
|
+
export function pyJsonIndentSorted(value, indent = 2, level = 0, hook) {
|
|
143
|
+
const pad = " ".repeat(indent * (level + 1));
|
|
144
|
+
const closePad = " ".repeat(indent * level);
|
|
145
|
+
const scalar = formatScalar(value, hook);
|
|
146
|
+
if (scalar !== null)
|
|
147
|
+
return scalar;
|
|
148
|
+
if (Array.isArray(value)) {
|
|
149
|
+
if (value.length === 0)
|
|
150
|
+
return "[]";
|
|
151
|
+
const items = value.map((v) => pad + pyJsonIndentSorted(v, indent, level + 1, hook));
|
|
152
|
+
return "[\n" + items.join(",\n") + "\n" + closePad + "]";
|
|
153
|
+
}
|
|
154
|
+
if (typeof value === "object") {
|
|
155
|
+
const keys = Object.keys(value).sort();
|
|
156
|
+
if (keys.length === 0)
|
|
157
|
+
return "{}";
|
|
158
|
+
const items = keys.map((k) => pad +
|
|
159
|
+
pyJsonString(k) +
|
|
160
|
+
": " +
|
|
161
|
+
pyJsonIndentSorted(value[k], indent, level + 1, hook));
|
|
162
|
+
return "{\n" + items.join(",\n") + "\n" + closePad + "}";
|
|
163
|
+
}
|
|
164
|
+
return "null";
|
|
165
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import YAML from "yaml";
|
|
2
|
+
export function declaresAgenteraSkill(text) {
|
|
3
|
+
const lines = text.split(/\r?\n/);
|
|
4
|
+
if (lines[0] !== "---")
|
|
5
|
+
return false;
|
|
6
|
+
const closing = lines.indexOf("---", 1);
|
|
7
|
+
if (closing === -1)
|
|
8
|
+
return false;
|
|
9
|
+
const metadataLines = lines.slice(1, closing);
|
|
10
|
+
try {
|
|
11
|
+
const document = YAML.parseDocument(metadataLines.join("\n"));
|
|
12
|
+
if (document.errors.length > 0)
|
|
13
|
+
return false;
|
|
14
|
+
const metadata = document.toJS();
|
|
15
|
+
if (metadata === null || typeof metadata !== "object" || Array.isArray(metadata))
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const names = metadataLines.filter((line) => /^name\s*:/.test(line));
|
|
22
|
+
return names.length === 1 && names[0] === "name: agentera";
|
|
23
|
+
}
|
package/dist/core/sourceRoot.js
CHANGED
|
@@ -40,9 +40,9 @@ function walkUp(start) {
|
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
42
|
* Resolve the Agentera "app source root" that holds skills/, scripts/, schemas,
|
|
43
|
-
* references/, etc.
|
|
44
|
-
*
|
|
45
|
-
*
|
|
43
|
+
* references/, etc. AGENTERA_BOOTSTRAP_SOURCE_ROOT wins, followed by a
|
|
44
|
+
* checkout containing the executing module, a self-contained package bundle,
|
|
45
|
+
* and finally a walk-up from the working directory.
|
|
46
46
|
*/
|
|
47
47
|
export function resolveSourceRoot(env = process.env) {
|
|
48
48
|
const configured = env[BOOTSTRAP_SOURCE_ROOT_ENV];
|
|
@@ -54,19 +54,16 @@ export function resolveSourceRoot(env = process.env) {
|
|
|
54
54
|
if (fromModule) {
|
|
55
55
|
return fromModule;
|
|
56
56
|
}
|
|
57
|
+
// A packaged CLI must keep runtime code and app data on the same version.
|
|
58
|
+
// Otherwise an Agentera checkout used as cwd can override the package bundle.
|
|
59
|
+
const bundled = path.resolve(moduleDir, "..", "..", "bundle");
|
|
60
|
+
if (isNpxBundleRoot(bundled)) {
|
|
61
|
+
return bundled;
|
|
62
|
+
}
|
|
57
63
|
const fromCwd = walkUp(process.cwd());
|
|
58
64
|
if (fromCwd) {
|
|
59
65
|
return fromCwd;
|
|
60
66
|
}
|
|
61
|
-
// Self-contained npm package: app data is staged under <packageRoot>/bundle
|
|
62
|
-
// (see scripts/copy-bundle.mjs). This makes `npx agentera` work with no repo
|
|
63
|
-
// checkout and no AGENTERA_HOME. Only reached when no checkout/app-home is
|
|
64
|
-
// found, so it never overrides a real checkout, installed app, or cwd match.
|
|
65
|
-
const bundled = path.resolve(moduleDir, "..", "..", "bundle");
|
|
66
|
-
if (hasSourceMarker(bundled)) {
|
|
67
|
-
return bundled;
|
|
68
|
-
}
|
|
69
67
|
// Last resort: package root two levels above dist/core.
|
|
70
68
|
return path.resolve(moduleDir, "..", "..");
|
|
71
69
|
}
|
|
72
|
-
//# sourceMappingURL=sourceRoot.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function truncateCodePoints(value, maxChars, suffix = "", trimTrailingWhitespace = false) {
|
|
2
|
+
const characters = Array.from(value);
|
|
3
|
+
if (characters.length <= maxChars)
|
|
4
|
+
return value;
|
|
5
|
+
const suffixCharacters = Array.from(suffix).slice(0, maxChars);
|
|
6
|
+
const prefix = characters
|
|
7
|
+
.slice(0, Math.max(0, maxChars - suffixCharacters.length))
|
|
8
|
+
.join("");
|
|
9
|
+
return `${trimTrailingWhitespace ? prefix.replace(/\s+$/, "") : prefix}${suffixCharacters.join("")}`;
|
|
10
|
+
}
|
package/dist/core/toml.js
CHANGED
package/dist/core/yaml.js
CHANGED
|
@@ -22,4 +22,11 @@ export function loadYamlMappingFile(path) {
|
|
|
22
22
|
export function parseYaml(text) {
|
|
23
23
|
return YAML.parse(text);
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
/** Serialize a YAML mapping with stable block-style prose and insertion-order keys. */
|
|
26
|
+
export function dumpYamlMapping(doc) {
|
|
27
|
+
return YAML.stringify(doc, {
|
|
28
|
+
blockQuote: "literal",
|
|
29
|
+
collectionStyle: "block",
|
|
30
|
+
lineWidth: 0,
|
|
31
|
+
});
|
|
32
|
+
}
|