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.
Files changed (585) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1351 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +236 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +437 -0
  12. package/bundle/references/adapters/package-registry.yaml +434 -189
  13. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  19. package/bundle/references/analysis/verification-policy.yaml +191 -0
  20. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  21. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  22. package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
  23. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  24. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  25. package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
  26. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  27. package/bundle/references/cli/routing-model.md +155 -0
  28. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  29. package/bundle/references/cli/update-channels.yaml +35 -2
  30. package/bundle/references/cli/vocabulary-index.yaml +23 -20
  31. package/bundle/references/cli/vocabulary.md +337 -366
  32. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  33. package/bundle/registry.json +14 -14
  34. package/bundle/skills/agentera/SKILL.md +218 -408
  35. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  36. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  37. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  39. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  41. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  42. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  45. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  46. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  52. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  53. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  55. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  57. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  59. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  62. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  63. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  65. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  66. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  67. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  68. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  69. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  71. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  75. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  77. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  79. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  81. package/bundle/skills/agentera/protocol.yaml +31 -31
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  95. package/dist/analytics/extractCorpus/cli.js +190 -0
  96. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  97. package/dist/analytics/extractCorpus/core.js +392 -0
  98. package/dist/analytics/extractCorpus/corpus.js +167 -0
  99. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  100. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  101. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  104. package/dist/analytics/extractCorpus/index.js +14 -0
  105. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  106. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  107. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  108. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  109. package/dist/analytics/extractCorpus.js +2 -1791
  110. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  111. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  112. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  113. package/dist/analytics/personalGlossaryProfile.js +219 -0
  114. package/dist/analytics/profileSignals.js +211 -0
  115. package/dist/analytics/usageStats.js +169 -42
  116. package/dist/audit/terminologyDrift.js +281 -0
  117. package/dist/bin/agentera.js +3 -2
  118. package/dist/capabilities/audit/instructions.js +16 -0
  119. package/dist/capabilities/build/instructions.js +56 -0
  120. package/dist/capabilities/design/instructions.js +4 -0
  121. package/dist/capabilities/discuss/instructions.js +29 -0
  122. package/dist/capabilities/document/instructions.js +11 -0
  123. package/dist/capabilities/index.js +40 -0
  124. package/dist/capabilities/optimize/instructions.js +14 -0
  125. package/dist/capabilities/orchestrate/instructions.js +40 -0
  126. package/dist/capabilities/plan/instructions.js +32 -0
  127. package/dist/capabilities/profile/instructions.js +70 -0
  128. package/dist/capabilities/research/instructions.js +5 -0
  129. package/dist/capabilities/status/instructions.js +11 -0
  130. package/dist/capabilities/status/startupInstructions.js +34 -0
  131. package/dist/capabilities/vision/instructions.js +4 -0
  132. package/dist/cli/appContext.js +30 -24
  133. package/dist/cli/argvalidate.js +0 -1
  134. package/dist/cli/capabilityContext/benchmark.js +565 -0
  135. package/dist/cli/capabilityContext/bespoke.js +44 -0
  136. package/dist/cli/capabilityContext/build.js +242 -0
  137. package/dist/cli/capabilityContext/closeout.js +233 -0
  138. package/dist/cli/capabilityContext/contract.js +179 -0
  139. package/dist/cli/capabilityContext/evidence.js +463 -0
  140. package/dist/cli/capabilityContext/index.js +3 -0
  141. package/dist/cli/capabilityContext/orchestration.js +131 -0
  142. package/dist/cli/capabilityContext/planState.js +260 -0
  143. package/dist/cli/capabilityContext/progress.js +142 -0
  144. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  145. package/dist/cli/capabilityContext/shared.js +83 -0
  146. package/dist/cli/capabilityContext/slim.js +152 -0
  147. package/dist/cli/capabilityContext/startup.js +150 -0
  148. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  149. package/dist/cli/capabilityContext/types.js +56 -0
  150. package/dist/cli/capabilityContext.js +1 -2421
  151. package/dist/cli/commands/appHome.js +22 -0
  152. package/dist/cli/commands/capability.js +5 -12
  153. package/dist/cli/commands/compact.js +41 -13
  154. package/dist/cli/commands/doctor.js +127 -97
  155. package/dist/cli/commands/durability.js +81 -0
  156. package/dist/cli/commands/glossaryAdvice.js +138 -0
  157. package/dist/cli/commands/lint.js +26 -44
  158. package/dist/cli/commands/personalGlossary.js +176 -0
  159. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  160. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  161. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  162. package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
  163. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  164. package/dist/cli/commands/prime/orientationOutput.js +397 -0
  165. package/dist/cli/commands/prime/types.js +1 -0
  166. package/dist/cli/commands/prime/v1Migration.js +38 -0
  167. package/dist/cli/commands/prime.js +80 -558
  168. package/dist/cli/commands/profileGrounding.js +55 -0
  169. package/dist/cli/commands/query.js +78 -53
  170. package/dist/cli/commands/report.js +96 -25
  171. package/dist/cli/commands/route.js +142 -0
  172. package/dist/cli/commands/schema.js +266 -143
  173. package/dist/cli/commands/state/decisions.js +387 -0
  174. package/dist/cli/commands/state/docs.js +70 -0
  175. package/dist/cli/commands/state/experimentRecords.js +151 -0
  176. package/dist/cli/commands/state/experiments.js +14 -0
  177. package/dist/cli/commands/state/get.js +129 -0
  178. package/dist/cli/commands/state/health.js +14 -0
  179. package/dist/cli/commands/state/index.js +16 -0
  180. package/dist/cli/commands/state/list.js +194 -0
  181. package/dist/cli/commands/state/objective.js +25 -0
  182. package/dist/cli/commands/state/plan.js +14 -0
  183. package/dist/cli/commands/state/planTasks.js +154 -0
  184. package/dist/cli/commands/state/plans.js +154 -0
  185. package/dist/cli/commands/state/progress.js +13 -0
  186. package/dist/cli/commands/state/shared.js +14 -0
  187. package/dist/cli/commands/state/todo.js +42 -0
  188. package/dist/cli/commands/state/write.js +434 -0
  189. package/dist/cli/commands/upgrade.js +146 -5
  190. package/dist/cli/commands/upgradeVerify.js +118 -0
  191. package/dist/cli/commands/validate.js +272 -213
  192. package/dist/cli/commands/verify.js +24 -9
  193. package/dist/cli/contracts/bundleStatus.js +1 -0
  194. package/dist/cli/contracts/orientationState.js +1 -0
  195. package/dist/cli/dispatch/argvParser.js +32 -0
  196. package/dist/cli/dispatch/check.js +372 -0
  197. package/dist/cli/dispatch/commands.js +27 -0
  198. package/dist/cli/dispatch/index.js +207 -0
  199. package/dist/cli/dispatch/lifecycle.js +652 -0
  200. package/dist/cli/dispatch/prime.js +139 -0
  201. package/dist/cli/dispatch/projections.js +17 -0
  202. package/dist/cli/dispatch/shared.js +63 -0
  203. package/dist/cli/dispatch/state.js +140 -0
  204. package/dist/cli/dispatch.js +1 -996
  205. package/dist/cli/errors.js +52 -0
  206. package/dist/cli/help.js +390 -43
  207. package/dist/cli/migrationRequired.js +87 -0
  208. package/dist/cli/orientation/attention.js +59 -0
  209. package/dist/cli/orientation/corpusCoverage.js +102 -0
  210. package/dist/cli/orientation.js +444 -173
  211. package/dist/cli/planArtifacts.js +350 -0
  212. package/dist/cli/planEvidence.js +157 -0
  213. package/dist/cli/planLifecycleState.js +36 -0
  214. package/dist/cli/planTaskIndex.js +11 -0
  215. package/dist/cli/preCutoverCommand.js +32 -0
  216. package/dist/cli/prime-blob.js +71 -3
  217. package/dist/cli/profileAcquisition.js +167 -0
  218. package/dist/cli/startupCompletenessContract.js +59 -0
  219. package/dist/cli/stateQuery.js +63 -14
  220. package/dist/cli/structured.js +0 -1
  221. package/dist/cli/todoMarkdown.js +46 -0
  222. package/dist/cli/todoReadinessSelection.js +192 -0
  223. package/dist/cli/todoSeverity.js +18 -0
  224. package/dist/core/atomicWriter.js +20 -0
  225. package/dist/core/developmentChannel.js +1 -0
  226. package/dist/core/developmentInvocation.js +374 -0
  227. package/dist/core/difflib.js +0 -1
  228. package/dist/core/envPaths.js +20 -0
  229. package/dist/core/jsonValue.js +5 -0
  230. package/dist/core/paths.js +0 -1
  231. package/dist/core/pyjson.js +67 -3
  232. package/dist/core/shell.js +4 -0
  233. package/dist/core/skillIdentity.js +23 -0
  234. package/dist/core/sourceRoot.js +9 -12
  235. package/dist/core/text.js +10 -0
  236. package/dist/core/toml.js +0 -1
  237. package/dist/core/yaml.js +8 -1
  238. package/dist/eval/evalSkills.js +30 -26
  239. package/dist/eval/hybridRouteEvaluation.js +155 -0
  240. package/dist/eval/semanticEval.js +43 -20
  241. package/dist/eval/semanticFixtures.js +16 -5
  242. package/dist/hooks/common.js +11 -81
  243. package/dist/hooks/compaction/apply.js +446 -0
  244. package/dist/hooks/compaction/dryRun.js +184 -0
  245. package/dist/hooks/compaction/index.js +22 -0
  246. package/dist/hooks/compaction/parse.js +325 -0
  247. package/dist/hooks/compaction/retention.js +202 -0
  248. package/dist/hooks/compaction/status.js +360 -0
  249. package/dist/hooks/compaction/types.js +5 -0
  250. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  251. package/dist/hooks/validateArtifact/index.js +92 -0
  252. package/dist/hooks/validateArtifact/markdown.js +145 -0
  253. package/dist/hooks/validateArtifact/schema.js +546 -0
  254. package/dist/hooks/validateArtifact/traversal.js +107 -0
  255. package/dist/hooks/validateArtifact/violations.js +107 -0
  256. package/dist/migrate/v2HandoffManifest.js +452 -0
  257. package/dist/registries/activationContract.js +2 -0
  258. package/dist/registries/activationTuples.js +106 -0
  259. package/dist/registries/artifactProtocolIds.js +78 -0
  260. package/dist/registries/artifactRegistry.js +224 -63
  261. package/dist/registries/artifactSchemaProjection.js +45 -0
  262. package/dist/registries/capabilityContract.js +141 -13
  263. package/dist/registries/evaluatorHandoffContract.js +170 -0
  264. package/dist/registries/evidenceTierContract.js +371 -0
  265. package/dist/registries/glossaryAdviceContract.js +79 -0
  266. package/dist/registries/glossaryCaveatContract.js +67 -0
  267. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  268. package/dist/registries/glossaryEntryContract.js +757 -0
  269. package/dist/registries/glossaryTermIdentity.js +17 -0
  270. package/dist/registries/glossaryTermOccurrence.js +20 -0
  271. package/dist/registries/hybridRoute.js +274 -0
  272. package/dist/registries/hybridRouteReceipt.js +221 -0
  273. package/dist/registries/packagePublication.js +229 -0
  274. package/dist/registries/packageRegistry.js +187 -211
  275. package/dist/registries/todoReadinessContract.js +448 -0
  276. package/dist/registries/triggerLoader.js +174 -0
  277. package/dist/registries/verbosityBudgetContract.js +205 -0
  278. package/dist/release/releaseMetadata.js +385 -0
  279. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  280. package/dist/runtime/lifecycleAdapters.js +777 -0
  281. package/dist/runtime/lifecycleAuthority.js +453 -0
  282. package/dist/runtime/lifecycleOperationContract.js +123 -0
  283. package/dist/runtime/lifecycleOperations.js +634 -0
  284. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  285. package/dist/runtime/lifecyclePublication.js +415 -0
  286. package/dist/runtime/lifecycleSnapshot.js +438 -0
  287. package/dist/runtime/nativeResourceCleanup.js +502 -0
  288. package/dist/setup/opencode.js +20 -0
  289. package/dist/setup/opencodeConstants.js +1 -0
  290. package/dist/setup/sharedSkill.js +45 -0
  291. package/dist/setup/smokeChecks.js +21 -82
  292. package/dist/state/archiveDiscovery.js +580 -0
  293. package/dist/state/archivePublication.js +225 -0
  294. package/dist/state/archiveRecovery.js +237 -0
  295. package/dist/state/archiveReplay.js +53 -0
  296. package/dist/state/canonicalMigrationRecord.js +36 -0
  297. package/dist/state/changelog.js +221 -0
  298. package/dist/state/decisionEntities.js +367 -0
  299. package/dist/state/decisionLegacyValidation.js +215 -0
  300. package/dist/state/decisionMigrationProvenance.js +199 -0
  301. package/dist/state/decisionOverlay.js +254 -0
  302. package/dist/state/decisionRevision.js +256 -0
  303. package/dist/state/decisionRevisionMigration.js +89 -0
  304. package/dist/state/directRetrieval.js +323 -0
  305. package/dist/state/durability.js +324 -0
  306. package/dist/state/entityCutover.js +459 -0
  307. package/dist/state/entityCutoverGit.js +127 -0
  308. package/dist/state/entityGlossaryAuthority.js +13 -0
  309. package/dist/state/entityListProjection.js +187 -0
  310. package/dist/state/entityListRuntimeRegistry.js +85 -0
  311. package/dist/state/entityMigrationCausality.js +97 -0
  312. package/dist/state/entityMigrationIdentity.js +5 -0
  313. package/dist/state/entityMigrationPreview.js +846 -0
  314. package/dist/state/entityMigrationTodo.js +133 -0
  315. package/dist/state/entityPublicationContext.js +806 -0
  316. package/dist/state/entityRetrievalHelp.js +506 -0
  317. package/dist/state/entityStorage.js +896 -0
  318. package/dist/state/exactReplacementRecovery.js +18 -0
  319. package/dist/state/experimentArchive.js +63 -0
  320. package/dist/state/experimentIdentity.js +202 -0
  321. package/dist/state/healthEntities.js +262 -0
  322. package/dist/state/healthEntityValidation.js +18 -0
  323. package/dist/state/healthRepair.js +69 -0
  324. package/dist/state/installRoot.js +64 -25
  325. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  326. package/dist/state/legacyIdentity.js +47 -0
  327. package/dist/state/legacySummaryRecord.js +6 -0
  328. package/dist/state/listAccounting.js +54 -0
  329. package/dist/state/listClassification.js +17 -0
  330. package/dist/state/listCursor.js +42 -0
  331. package/dist/state/listRetrieval.js +781 -0
  332. package/dist/state/migrationSourceBinding.js +30 -0
  333. package/dist/state/objectiveExperimentEntities.js +322 -0
  334. package/dist/state/planEntities.js +530 -0
  335. package/dist/state/planIdentity.js +47 -0
  336. package/dist/state/planRetrieval.js +313 -0
  337. package/dist/state/planTaskRetrieval.js +294 -0
  338. package/dist/state/progressEntities.js +512 -0
  339. package/dist/state/progressGlossaryCaveat.js +168 -0
  340. package/dist/state/progressPublicationOrder.js +19 -0
  341. package/dist/state/projectRoot.js +62 -0
  342. package/dist/state/projectionPolicy.js +190 -0
  343. package/dist/state/retrievalAuthority.js +156 -0
  344. package/dist/state/safeProjectFile.js +155 -0
  345. package/dist/state/startupAnalysis/benchmark.js +432 -0
  346. package/dist/state/startupAnalysis/contract.js +160 -0
  347. package/dist/state/startupAnalysis/helpers.js +286 -0
  348. package/dist/state/startupAnalysis/index.js +6 -0
  349. package/dist/state/startupAnalysis/metrics.js +340 -0
  350. package/dist/state/startupAnalysis/records.js +198 -0
  351. package/dist/state/startupAnalysis/report.js +111 -0
  352. package/dist/state/startupAnalysis/threshold.js +512 -0
  353. package/dist/state/startupAnalysis.js +2 -1953
  354. package/dist/state/startupProjection.js +499 -0
  355. package/dist/state/stateMode.js +85 -0
  356. package/dist/state/stateStorageAuthority.js +47 -0
  357. package/dist/state/summaryEntityRead.js +25 -0
  358. package/dist/state/summaryMigrationProvenance.js +66 -0
  359. package/dist/state/summarySourceRowAuthority.js +36 -0
  360. package/dist/state/todoDocsEntities.js +1064 -0
  361. package/dist/state/todoDocsEntityValidation.js +158 -0
  362. package/dist/state/todoMarkdownProjection.js +51 -0
  363. package/dist/state/todoReconciliationActivation.js +132 -0
  364. package/dist/state/todoReconciliationInspection.js +173 -0
  365. package/dist/state/todoReconciliationRepair.js +170 -0
  366. package/dist/state/todoReconciliationTransaction.js +582 -0
  367. package/dist/state/write/assign.js +20 -0
  368. package/dist/state/write/candidateMutation.js +269 -0
  369. package/dist/state/write/errors.js +11 -0
  370. package/dist/state/write/experimentPublication.js +192 -0
  371. package/dist/state/write/explain.js +332 -0
  372. package/dist/state/write/fields.js +61 -0
  373. package/dist/state/write/glossaryPublication.js +263 -0
  374. package/dist/state/write/grammar.js +280 -0
  375. package/dist/state/write/helpers.js +29 -0
  376. package/dist/state/write/index.js +12 -0
  377. package/dist/state/write/input.js +367 -0
  378. package/dist/state/write/lock.js +837 -0
  379. package/dist/state/write/mutation.js +234 -0
  380. package/dist/state/write/operations.js +169 -0
  381. package/dist/state/write/planEvaluation.js +128 -0
  382. package/dist/state/write/planPublication.js +179 -0
  383. package/dist/state/write/runtimeOperations.js +142 -0
  384. package/dist/state/write/serialize.js +1 -0
  385. package/dist/state/write/transaction.js +52 -0
  386. package/dist/state/write/validate.js +7 -0
  387. package/dist/upgrade/appContentRefresh.js +383 -0
  388. package/dist/upgrade/appModel.js +8 -7
  389. package/dist/upgrade/atomicWriter.js +1 -0
  390. package/dist/upgrade/bundleEvidence.js +33 -0
  391. package/dist/upgrade/channels.js +12 -8
  392. package/dist/upgrade/compatibility.js +56 -21
  393. package/dist/upgrade/doctor.js +197 -192
  394. package/dist/upgrade/doctorClassifier.js +187 -0
  395. package/dist/upgrade/installedHooksRetirement.js +196 -0
  396. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  397. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  398. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  399. package/dist/upgrade/migrationPublication.js +122 -0
  400. package/dist/upgrade/nextMajorDoctor.js +155 -0
  401. package/dist/upgrade/npxPlatformStatus.js +22 -0
  402. package/dist/upgrade/projectIntegration.js +145 -187
  403. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  404. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  405. package/dist/upgrade/runtimeMigration.js +278 -352
  406. package/dist/upgrade/upgradeCommands.js +14 -1
  407. package/dist/upgrade/upgradeLock.js +85 -0
  408. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  409. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  410. package/dist/upgrade/versionResolution.js +12 -5
  411. package/dist/validate/activationArtifactEvidence.js +844 -0
  412. package/dist/validate/activationConjunction.js +816 -0
  413. package/dist/validate/activationEvidenceManifest.js +515 -0
  414. package/dist/validate/activationPackageSemantics.js +29 -0
  415. package/dist/validate/appHomeContract.js +5 -11
  416. package/dist/validate/bootstrapAuthority.js +44 -0
  417. package/dist/validate/capability.js +144 -15
  418. package/dist/validate/crossCapability.js +15 -10
  419. package/dist/validate/retainedReferenceAuthority.js +879 -0
  420. package/dist/validate/selfAudit.js +73 -37
  421. package/dist/validate/v1LegacyCruft.js +131 -0
  422. package/dist/validate/vocabularyAuthority.js +303 -0
  423. package/package.json +53 -27
  424. package/bundle/references/adapters/cursor.md +0 -213
  425. package/bundle/references/adapters/opencode.md +0 -530
  426. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  427. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  428. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  429. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  430. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  431. package/bundle/references/analysis/benchmark.md +0 -267
  432. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  433. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  434. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  435. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  436. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  437. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  438. package/bundle/references/meta/documentation-inventory.md +0 -43
  439. package/bundle/references/v1-section-mapping.md +0 -47
  440. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  441. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  442. package/bundle/skills/agentera/agents/hej.toml +0 -6
  443. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  444. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  445. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  446. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  447. package/bundle/skills/agentera/agents/planera.toml +0 -6
  448. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  449. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  450. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  451. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  452. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  453. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  454. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  456. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  461. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  462. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  463. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  464. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  465. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  466. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  467. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  468. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  471. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  478. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  479. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  481. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  482. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  483. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  484. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  485. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  486. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  487. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  488. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  489. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  490. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  491. package/bundle/skills/agentera/references/contract.md +0 -1039
  492. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  493. package/bundle/skills/hej/SKILL.md +0 -69
  494. package/bundle/skills/hej/agents/hej.toml +0 -11
  495. package/bundle/skills/hej/agents/openai.yaml +0 -8
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/cli/appContext.js.map +0 -1
  500. package/dist/cli/argvalidate.js.map +0 -1
  501. package/dist/cli/capabilityContext.js.map +0 -1
  502. package/dist/cli/commands/backfill.js +0 -84
  503. package/dist/cli/commands/backfill.js.map +0 -1
  504. package/dist/cli/commands/capability.js.map +0 -1
  505. package/dist/cli/commands/compact.js.map +0 -1
  506. package/dist/cli/commands/doctor.js.map +0 -1
  507. package/dist/cli/commands/lint.js.map +0 -1
  508. package/dist/cli/commands/prime.js.map +0 -1
  509. package/dist/cli/commands/query.js.map +0 -1
  510. package/dist/cli/commands/report.js.map +0 -1
  511. package/dist/cli/commands/schema.js.map +0 -1
  512. package/dist/cli/commands/state.js +0 -1012
  513. package/dist/cli/commands/state.js.map +0 -1
  514. package/dist/cli/commands/upgrade.js.map +0 -1
  515. package/dist/cli/commands/validate.js.map +0 -1
  516. package/dist/cli/commands/verify.js.map +0 -1
  517. package/dist/cli/dispatch.js.map +0 -1
  518. package/dist/cli/help.js.map +0 -1
  519. package/dist/cli/orientation.js.map +0 -1
  520. package/dist/cli/prime-blob.js.map +0 -1
  521. package/dist/cli/stateQuery.js.map +0 -1
  522. package/dist/cli/structured.js.map +0 -1
  523. package/dist/core/difflib.js.map +0 -1
  524. package/dist/core/git.js +0 -43
  525. package/dist/core/git.js.map +0 -1
  526. package/dist/core/paths.js.map +0 -1
  527. package/dist/core/pyjson.js.map +0 -1
  528. package/dist/core/sourceRoot.js.map +0 -1
  529. package/dist/core/toml.js.map +0 -1
  530. package/dist/core/yaml.js.map +0 -1
  531. package/dist/eval/evalSkills.js.map +0 -1
  532. package/dist/eval/semanticEval.js.map +0 -1
  533. package/dist/eval/semanticFixtures.js.map +0 -1
  534. package/dist/hooks/common.js.map +0 -1
  535. package/dist/hooks/compaction.js +0 -935
  536. package/dist/hooks/compaction.js.map +0 -1
  537. package/dist/hooks/cursorPreToolUse.js +0 -19
  538. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  539. package/dist/hooks/cursorSessionStart.js +0 -71
  540. package/dist/hooks/cursorSessionStart.js.map +0 -1
  541. package/dist/hooks/sessionStart.js +0 -209
  542. package/dist/hooks/sessionStart.js.map +0 -1
  543. package/dist/hooks/sessionStop.js +0 -212
  544. package/dist/hooks/sessionStop.js.map +0 -1
  545. package/dist/hooks/validateArtifact.js +0 -933
  546. package/dist/hooks/validateArtifact.js.map +0 -1
  547. package/dist/registries/artifactRegistry.js.map +0 -1
  548. package/dist/registries/capabilityContract.js.map +0 -1
  549. package/dist/registries/packageRegistry.js.map +0 -1
  550. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  551. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  552. package/dist/setup/codex.js +0 -1056
  553. package/dist/setup/codex.js.map +0 -1
  554. package/dist/setup/copilot.js +0 -227
  555. package/dist/setup/copilot.js.map +0 -1
  556. package/dist/setup/cursor.js +0 -127
  557. package/dist/setup/cursor.js.map +0 -1
  558. package/dist/setup/doctor.js +0 -1297
  559. package/dist/setup/doctor.js.map +0 -1
  560. package/dist/setup/smokeChecks.js.map +0 -1
  561. package/dist/state/installRoot.js.map +0 -1
  562. package/dist/state/progressCommit.js +0 -289
  563. package/dist/state/progressCommit.js.map +0 -1
  564. package/dist/state/startupAnalysis.js.map +0 -1
  565. package/dist/upgrade/appModel.js.map +0 -1
  566. package/dist/upgrade/channels.js.map +0 -1
  567. package/dist/upgrade/compatibility.js.map +0 -1
  568. package/dist/upgrade/doctor.js.map +0 -1
  569. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  570. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  571. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  572. package/dist/upgrade/projectIntegration.js.map +0 -1
  573. package/dist/upgrade/runtimeMigration.js.map +0 -1
  574. package/dist/upgrade/upgradeCommands.js.map +0 -1
  575. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  576. package/dist/upgrade/versionResolution.js.map +0 -1
  577. package/dist/validate/appHomeContract.js.map +0 -1
  578. package/dist/validate/capability.js.map +0 -1
  579. package/dist/validate/crossCapability.js.map +0 -1
  580. package/dist/validate/lifecycleAdapters.js +0 -772
  581. package/dist/validate/lifecycleAdapters.js.map +0 -1
  582. package/dist/validate/selfAudit.js.map +0 -1
  583. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  584. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  585. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Decision 58 artifact protocol names: one `artifact_id` per artifact in CLI,
3
+ * hooks, validators, and JSON envelopes. Storage paths live here only.
4
+ */
5
+ export const ARTIFACT_PROTOCOL_PATHS = {
6
+ vision: ".agentera/vision.yaml",
7
+ decisions: ".agentera/decisions.yaml",
8
+ plan: ".agentera/plan.yaml",
9
+ progress: ".agentera/progress.yaml",
10
+ health: ".agentera/health.yaml",
11
+ docs: ".agentera/docs.yaml",
12
+ objective: ".agentera/objective.yaml",
13
+ experiments: ".agentera/experiments.yaml",
14
+ todo: "TODO.md",
15
+ changelog: "CHANGELOG.md",
16
+ design: "DESIGN.md",
17
+ glossary: ".agentera/glossary.yaml",
18
+ };
19
+ export const HUMAN_FACING_ARTIFACT_IDS = new Set(["todo", "changelog", "design"]);
20
+ export const TRACKED_ARTIFACT_IDS = [
21
+ "progress",
22
+ "decisions",
23
+ "plan",
24
+ "health",
25
+ "design",
26
+ "docs",
27
+ "vision",
28
+ "todo",
29
+ "changelog",
30
+ ];
31
+ export const VALIDATE_ARTIFACT_PROTOCOL_IDS = [
32
+ "changelog",
33
+ "decisions",
34
+ "design",
35
+ "docs",
36
+ "health",
37
+ "plan",
38
+ "progress",
39
+ "todo",
40
+ "vision",
41
+ "glossary",
42
+ ];
43
+ function artifactProtocolStem(input) {
44
+ const lower = input.trim().toLowerCase();
45
+ return lower.endsWith(".md") ? lower.slice(0, -3) : lower;
46
+ }
47
+ export function normalizeArtifactProtocolId(input) {
48
+ const trimmed = input.trim();
49
+ if (trimmed in ARTIFACT_PROTOCOL_PATHS) {
50
+ return trimmed;
51
+ }
52
+ const lower = trimmed.toLowerCase();
53
+ if (lower in ARTIFACT_PROTOCOL_PATHS) {
54
+ return lower;
55
+ }
56
+ const stem = artifactProtocolStem(trimmed);
57
+ if (stem in ARTIFACT_PROTOCOL_PATHS) {
58
+ return stem;
59
+ }
60
+ return null;
61
+ }
62
+ export function requireArtifactProtocolId(input, context) {
63
+ const id = normalizeArtifactProtocolId(input);
64
+ if (id === null) {
65
+ const valid = VALIDATE_ARTIFACT_PROTOCOL_IDS.join(", ");
66
+ throw new Error(`unsupported artifact ${JSON.stringify(input)} in ${context}; valid artifact_id values: ${valid}`);
67
+ }
68
+ return id;
69
+ }
70
+ /** Normalize docs.yaml mapping keys to artifact_id. */
71
+ export function normalizeArtifactMappingKeys(mapping) {
72
+ const out = {};
73
+ for (const [key, value] of Object.entries(mapping)) {
74
+ const id = normalizeArtifactProtocolId(key);
75
+ out[id ?? key] = value;
76
+ }
77
+ return out;
78
+ }
@@ -2,9 +2,11 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { loadYamlMapping } from "../core/yaml.js";
5
+ import { resolveProfileDirOverride } from "../core/envPaths.js";
5
6
  import { resolvePath } from "../core/paths.js";
6
7
  import { resolveSourceRoot } from "../core/sourceRoot.js";
7
8
  import { resolveCandidate } from "../state/installRoot.js";
9
+ import { ARTIFACT_PROTOCOL_PATHS } from "./artifactProtocolIds.js";
8
10
  function sourceRoot() {
9
11
  return resolveSourceRoot();
10
12
  }
@@ -36,12 +38,11 @@ export function normalizePath(p) {
36
38
  s = s.replace(/<objective-name>/g, "<name>");
37
39
  return s.trim();
38
40
  }
39
- const CONTROL_CHAR_RE = /[\x00-\x1f\x7f]/;
40
41
  const URI_SCHEME_RE = /^[A-Za-z][A-Za-z0-9+.-]*:/;
41
42
  const ENCODED_TRAVERSAL_RE = /%(?:2e|2f|5c)/i;
42
43
  const WINDOWS_DRIVE_RE = /^[A-Za-z]:[\\/]/;
43
44
  function rejectUnsafeArtifactPath(p, artifactId) {
44
- if (CONTROL_CHAR_RE.test(p)) {
45
+ if ([...p].some((char) => char.charCodeAt(0) <= 31 || char.charCodeAt(0) === 127)) {
45
46
  throw new Error(`artifact '${artifactId}' path contains control characters`);
46
47
  }
47
48
  if (ENCODED_TRAVERSAL_RE.test(p)) {
@@ -67,28 +68,141 @@ function projectPath(projectRoot, artifactPath, artifactId) {
67
68
  }
68
69
  return resolved;
69
70
  }
70
- function schemaMetas(dir) {
71
- const metas = new Map();
71
+ export const EXPECTED_ARTIFACT_SCHEMA_VERSION = "1.0.0";
72
+ function readSchemaMeta(file) {
73
+ const meta = loadYaml(file).meta;
74
+ if (!meta || typeof meta !== "object" || Array.isArray(meta)) {
75
+ return null;
76
+ }
77
+ return meta;
78
+ }
79
+ function warnMalformedSchemaMeta(name) {
80
+ process.stderr.write(`warning: artifact schema ${name} is missing meta; expected v3 schema version ${EXPECTED_ARTIFACT_SCHEMA_VERSION}\n`);
81
+ }
82
+ function warnSchemaVersionMismatch(meta, name) {
83
+ const version = String(meta.version ?? "").trim();
84
+ if (!version || version !== EXPECTED_ARTIFACT_SCHEMA_VERSION) {
85
+ const reported = version || "(missing)";
86
+ process.stderr.write(`warning: artifact schema ${name} version ${reported} does not match expected v3 schema version ${EXPECTED_ARTIFACT_SCHEMA_VERSION}\n`);
87
+ }
88
+ }
89
+ function listSchemaFiles(dir) {
72
90
  if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {
73
- return metas;
91
+ return [];
74
92
  }
75
- const files = fs
93
+ return fs
76
94
  .readdirSync(dir)
77
95
  .filter((name) => name.endsWith(".yaml"))
78
96
  .sort();
79
- for (const name of files) {
80
- const meta = loadYaml(path.join(dir, name)).meta;
81
- if (!meta || typeof meta !== "object" || Array.isArray(meta)) {
97
+ }
98
+ /**
99
+ * Full schema-meta index over an artifact schemas directory. Emits malformed-meta
100
+ * and version-mismatch warnings for every schema file; the full loader relies on
101
+ * this strict coverage to surface drift across the whole identity set.
102
+ */
103
+ function schemaMetas(dir) {
104
+ const metas = new Map();
105
+ for (const name of listSchemaFiles(dir)) {
106
+ const meta = readSchemaMeta(path.join(dir, name));
107
+ if (!meta) {
108
+ warnMalformedSchemaMeta(name);
82
109
  continue;
83
110
  }
84
- const m = meta;
85
- const artifactId = String(m.name ?? "").trim();
111
+ warnSchemaVersionMismatch(meta, name);
112
+ const artifactId = String(meta.name ?? "").trim();
86
113
  if (artifactId) {
87
- metas.set(artifactId, m);
114
+ metas.set(artifactId, meta);
88
115
  }
89
116
  }
90
117
  return metas;
91
118
  }
119
+ /**
120
+ * Targeted schema-meta lookup for a single artifact identity. Walks the schemas
121
+ * directory only to find the file whose `meta.name` matches `artifactId`, and
122
+ * emits warnings only for that schema. Unrelated malformed or version-mismatched
123
+ * schemas in the same directory stay silent so callers resolving a single
124
+ * identity (e.g. `profile`) don't fan out noise across the required-identity set.
125
+ */
126
+ function loadSchemaMetaForArtifact(dir, artifactId) {
127
+ for (const name of listSchemaFiles(dir)) {
128
+ let meta;
129
+ try {
130
+ meta = readSchemaMeta(path.join(dir, name));
131
+ }
132
+ catch {
133
+ continue;
134
+ }
135
+ if (!meta)
136
+ continue;
137
+ if (String(meta.name ?? "").trim() !== artifactId)
138
+ continue;
139
+ warnSchemaVersionMismatch(meta, name);
140
+ return meta;
141
+ }
142
+ return null;
143
+ }
144
+ function findRequiredIdentity(model, artifactId) {
145
+ const identities = (model.required_artifact_identities ?? {});
146
+ for (const [scope, identityList] of Object.entries(identities)) {
147
+ if (!Array.isArray(identityList))
148
+ continue;
149
+ for (const identity of identityList) {
150
+ if (!identity || typeof identity !== "object" || Array.isArray(identity))
151
+ continue;
152
+ const id = identity;
153
+ if (String(id.artifact_id ?? "").trim() === artifactId) {
154
+ return { scope, identity: id };
155
+ }
156
+ }
157
+ }
158
+ return null;
159
+ }
160
+ function findSpecialCase(model, artifactId) {
161
+ const specialCases = (model.explicit_special_cases ?? []);
162
+ for (const special of specialCases) {
163
+ if (!special || typeof special !== "object" || Array.isArray(special))
164
+ continue;
165
+ const sp = special;
166
+ if (String(sp.artifact_id ?? "").trim() === artifactId) {
167
+ return sp;
168
+ }
169
+ }
170
+ return null;
171
+ }
172
+ function buildRequiredRecord(scope, identity, meta) {
173
+ const template = identity.path_template;
174
+ return {
175
+ artifactId: String(identity.artifact_id ?? "").trim(),
176
+ displayName: String(identity.display_name ?? "").trim(),
177
+ defaultPath: normalizePath(String(identity.default_path ?? meta.path ?? "")),
178
+ producers: asSet(meta.producer),
179
+ consumers: asSet(meta.consumers),
180
+ artifactType: String(meta.artifact_type ?? "").trim(),
181
+ scope: String(scope),
182
+ pathTemplate: template && typeof template === "object" && !Array.isArray(template)
183
+ ? template
184
+ : null,
185
+ docsYamlCanOverridePath: true,
186
+ implementationStatus: String(meta.implementation_status ?? "implemented").trim(),
187
+ };
188
+ }
189
+ function buildSpecialCaseRecord(sp) {
190
+ const template = sp.path_template;
191
+ return {
192
+ artifactId: String(sp.artifact_id ?? "").trim(),
193
+ displayName: String(sp.display_name ?? "").trim(),
194
+ defaultPath: normalizePath(String(sp.default_path ?? "")),
195
+ producers: asSet(sp.producers),
196
+ consumers: asSet(sp.consumers),
197
+ artifactType: String(sp.artifact_type ?? "").trim(),
198
+ scope: String(sp.scope ?? "").trim(),
199
+ pathTemplate: template && typeof template === "object" && !Array.isArray(template)
200
+ ? template
201
+ : null,
202
+ docsYamlCanOverridePath: Boolean(sp.docs_yaml_can_override_path),
203
+ implementationStatus: String(sp.implementation_status ?? "implemented").trim(),
204
+ };
205
+ }
92
206
  export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir(), registryModelPathArg = registryModelPath()) {
93
207
  const model = loadYaml(registryModelPathArg);
94
208
  const metas = schemaMetas(artifactSchemasDirPath);
@@ -104,24 +218,15 @@ export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir
104
218
  }
105
219
  const id = identity;
106
220
  const artifactId = String(id.artifact_id ?? "").trim();
221
+ if (!artifactId) {
222
+ continue;
223
+ }
107
224
  const meta = metas.get(artifactId);
108
- if (!artifactId || !meta) {
225
+ if (!meta) {
226
+ process.stderr.write(`warning: required artifact identity '${artifactId}' has no matching schema file in ${artifactSchemasDirPath}\n`);
109
227
  continue;
110
228
  }
111
- const template = id.path_template;
112
- records.set(artifactId, {
113
- artifactId,
114
- displayName: String(id.display_name ?? "").trim(),
115
- defaultPath: normalizePath(String(id.default_path ?? meta.path ?? "")),
116
- producers: asSet(meta.producer),
117
- consumers: asSet(meta.consumers),
118
- artifactType: String(meta.artifact_type ?? "").trim(),
119
- scope: String(scope),
120
- pathTemplate: template && typeof template === "object" && !Array.isArray(template)
121
- ? template
122
- : null,
123
- docsYamlCanOverridePath: true,
124
- });
229
+ records.set(artifactId, buildRequiredRecord(scope, id, meta));
125
230
  }
126
231
  }
127
232
  const specialCases = (model.explicit_special_cases ?? []);
@@ -134,73 +239,129 @@ export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir
134
239
  if (!artifactId) {
135
240
  continue;
136
241
  }
137
- const template = sp.path_template;
138
- records.set(artifactId, {
139
- artifactId,
140
- displayName: String(sp.display_name ?? "").trim(),
141
- defaultPath: normalizePath(String(sp.default_path ?? "")),
142
- producers: asSet(sp.producers),
143
- consumers: asSet(sp.consumers),
144
- artifactType: String(sp.artifact_type ?? "").trim(),
145
- scope: String(sp.scope ?? "").trim(),
146
- pathTemplate: template && typeof template === "object" && !Array.isArray(template)
147
- ? template
148
- : null,
149
- docsYamlCanOverridePath: Boolean(sp.docs_yaml_can_override_path),
150
- });
242
+ records.set(artifactId, buildSpecialCaseRecord(sp));
151
243
  }
152
244
  return records;
153
245
  }
154
- export function loadDocsPathOverrides(projectRoot) {
155
- const docsPath = path.join(projectRoot, ".agentera", "docs.yaml");
156
- if (!fs.existsSync(docsPath)) {
157
- return {};
246
+ /**
247
+ * Targeted lookup of a single artifact record. Resolves against the same
248
+ * model/schema authority as `loadArtifactRegistry` but inspects only the
249
+ * requested identity, so a special case such as `profile` loads without
250
+ * walking or warning about unrelated required schemas. A requested required
251
+ * identity still warns and returns `undefined` when its matching schema file is
252
+ * missing from the schemas directory.
253
+ */
254
+ export function loadArtifactRecord(artifactId, artifactSchemasDirPath = artifactSchemasDir(), registryModelPathArg = registryModelPath()) {
255
+ const model = loadYaml(registryModelPathArg);
256
+ const specialCase = findSpecialCase(model, artifactId);
257
+ if (specialCase) {
258
+ return buildSpecialCaseRecord(specialCase);
259
+ }
260
+ const required = findRequiredIdentity(model, artifactId);
261
+ if (!required) {
262
+ return undefined;
158
263
  }
264
+ const meta = loadSchemaMetaForArtifact(artifactSchemasDirPath, artifactId);
265
+ if (!meta) {
266
+ process.stderr.write(`warning: required artifact identity '${artifactId}' has no matching schema file in ${artifactSchemasDirPath}\n`);
267
+ return undefined;
268
+ }
269
+ return buildRequiredRecord(required.scope, required.identity, meta);
270
+ }
271
+ export function docsPathOverridesFromBytes(bytes, strict = false) {
159
272
  let data;
160
273
  try {
161
- data = loadYamlMapping(fs.readFileSync(docsPath, "utf8"));
274
+ data = loadYamlMapping(bytes.toString());
162
275
  }
163
276
  catch (exc) {
277
+ if (strict)
278
+ throw new Error(`failed to load docs path overrides: ${exc.message}`);
164
279
  process.stderr.write(`warning: failed to load docs path overrides: ${exc.message}\n`);
165
280
  return {};
166
281
  }
167
282
  const mapping = data.mapping;
168
283
  if (!Array.isArray(mapping)) {
284
+ if (strict && mapping !== undefined)
285
+ throw new Error("failed to load docs path overrides: mapping must be a list");
169
286
  return {};
170
287
  }
171
288
  const overrides = {};
172
289
  for (const entry of mapping) {
173
290
  if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
291
+ if (strict)
292
+ throw new Error("failed to load docs path overrides: every mapping entry must be a mapping");
174
293
  continue;
175
294
  }
176
295
  const e = entry;
177
- const artifact = e.artifact;
178
- const p = e.path;
179
- if (typeof artifact === "string" && typeof p === "string") {
180
- overrides[artifact] = p;
181
- }
296
+ if (typeof e.artifact === "string" && typeof e.path === "string")
297
+ overrides[e.artifact] = e.path;
298
+ else if (strict)
299
+ throw new Error("failed to load docs path overrides: every mapping entry requires string artifact and path fields");
182
300
  }
183
301
  return overrides;
184
302
  }
185
- export function resolveArtifactPath(record, projectRoot, activeObjectiveName = null, env = process.env) {
303
+ export function loadDocsPathOverrides(projectRoot, strict = false) {
304
+ const docsPath = path.join(projectRoot, ARTIFACT_PROTOCOL_PATHS.docs);
305
+ if (!fs.existsSync(docsPath)) {
306
+ return {};
307
+ }
308
+ let bytes;
309
+ try {
310
+ bytes = fs.readFileSync(docsPath);
311
+ }
312
+ catch (exc) {
313
+ if (strict)
314
+ throw new Error(`failed to load docs path overrides: ${exc.message}`);
315
+ process.stderr.write(`warning: failed to load docs path overrides: ${exc.message}\n`);
316
+ return {};
317
+ }
318
+ return docsPathOverridesFromBytes(bytes, strict);
319
+ }
320
+ function nearestExistingAncestor(p) {
321
+ let current = p;
322
+ while (!fs.existsSync(current)) {
323
+ const parent = path.dirname(current);
324
+ if (parent === current)
325
+ break;
326
+ current = parent;
327
+ }
328
+ return fs.realpathSync.native(current);
329
+ }
330
+ export function assertRealpathBoundary(projectRoot, artifactPath, artifactId) {
331
+ const projectReal = nearestExistingAncestor(resolvePath(projectRoot));
332
+ const ancestorReal = nearestExistingAncestor(artifactPath);
333
+ const rel = path.relative(projectReal, ancestorReal);
334
+ if (rel !== "" && (rel.startsWith("..") || path.isAbsolute(rel))) {
335
+ throw new Error(`artifact '${artifactId}' path escapes the project boundary`);
336
+ }
337
+ }
338
+ export function resolveArtifactPath(record, projectRoot, activeObjectiveNameOrOptions = null, env = process.env) {
339
+ const options = typeof activeObjectiveNameOrOptions === "object" && activeObjectiveNameOrOptions !== null
340
+ ? activeObjectiveNameOrOptions
341
+ : { activeObjectiveName: activeObjectiveNameOrOptions };
342
+ const activeObjectiveName = options.activeObjectiveName ?? null;
186
343
  let artifactPath = record.defaultPath;
187
- const overrides = loadDocsPathOverrides(projectRoot);
344
+ const overrides = options.docsPathOverrides ?? loadDocsPathOverrides(projectRoot, options.strictWrite === true);
188
345
  if (record.docsYamlCanOverridePath && record.displayName in overrides) {
189
346
  artifactPath = overrides[record.displayName];
190
347
  }
191
348
  if (artifactPath.includes("<name>") && activeObjectiveName) {
192
349
  artifactPath = artifactPath.replace(/<name>/g, activeObjectiveName);
193
350
  }
194
- const profilePrefix = "$PROFILERA_PROFILE_DIR/";
195
- if (artifactPath.startsWith(profilePrefix)) {
196
- const explicit = env.PROFILERA_PROFILE_DIR;
197
- const suffix = artifactPath.slice(profilePrefix.length);
198
- if (explicit) {
199
- return path.join(explicit, suffix);
351
+ const profileDirPrefixes = ["$AGENTERA_PROFILE_DIR/", "$PROFILERA_PROFILE_DIR/"];
352
+ for (const prefix of profileDirPrefixes) {
353
+ if (artifactPath.startsWith(prefix)) {
354
+ const suffix = artifactPath.slice(prefix.length);
355
+ const explicit = resolveProfileDirOverride(env);
356
+ if (explicit) {
357
+ return path.join(explicit, suffix);
358
+ }
359
+ const [base] = resolveCandidate(null, { env, home: os.homedir() });
360
+ return path.join(base, suffix);
200
361
  }
201
- const [base] = resolveCandidate(null, { env, home: os.homedir() });
202
- return path.join(base, suffix);
203
362
  }
204
- return projectPath(projectRoot, artifactPath, record.artifactId);
363
+ const resolved = projectPath(projectRoot, artifactPath, record.artifactId);
364
+ if (options.strictWrite)
365
+ assertRealpathBoundary(projectRoot, resolved, record.artifactId);
366
+ return resolved;
205
367
  }
206
- //# sourceMappingURL=artifactRegistry.js.map
@@ -0,0 +1,45 @@
1
+ const FIELD_SKIP = new Set([
2
+ "meta",
3
+ "GROUP_PREFIXES",
4
+ "BUDGET",
5
+ "COMPACTION",
6
+ "VALIDATION",
7
+ "ARCHIVE",
8
+ "CONVENTION",
9
+ "CONVENTIONS",
10
+ ]);
11
+ function mapping(value) {
12
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
13
+ }
14
+ export function artifactSchemaFieldDescription(entry, group) {
15
+ return {
16
+ id: entry.id ?? null,
17
+ group,
18
+ field: entry.field ?? null,
19
+ ...(typeof entry.path === "string" ? { path: entry.path } : {}),
20
+ type: entry.type ?? "unknown",
21
+ required: "required" in entry ? entry.required : "unknown",
22
+ format: entry.format ?? null,
23
+ validation: entry.validation ?? [],
24
+ ...(entry.accepted_forms !== undefined ? { accepted_forms: structuredClone(entry.accepted_forms) } : {}),
25
+ ...(entry.normalization !== undefined ? { normalization: structuredClone(entry.normalization) } : {}),
26
+ ...(entry.write_operations !== undefined ? { write_operations: structuredClone(entry.write_operations) } : {}),
27
+ };
28
+ }
29
+ export function describeArtifactSchemaFields(schema) {
30
+ const fields = [];
31
+ for (const [group, value] of Object.entries(schema)) {
32
+ if (FIELD_SKIP.has(group) || !mapping(value))
33
+ continue;
34
+ for (const entry of Object.values(value)) {
35
+ if (mapping(entry) && "field" in entry)
36
+ fields.push(artifactSchemaFieldDescription(entry, group));
37
+ }
38
+ }
39
+ return fields;
40
+ }
41
+ export function artifactSchemaFieldsForOperation(schema, verb) {
42
+ if (!schema)
43
+ return [];
44
+ return describeArtifactSchemaFields(schema).filter((field) => Array.isArray(field.write_operations) && field.write_operations.includes(verb));
45
+ }