@voybio/ace-swarm 0.1.0

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 (334) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/LICENSE +186 -0
  3. package/README.md +229 -0
  4. package/assets/.agents/ACE/ACE-Init/AGENTS.md +210 -0
  5. package/assets/.agents/ACE/ACE-Init/instructions.md +118 -0
  6. package/assets/.agents/ACE/ACE_coders/AGENTS.md +154 -0
  7. package/assets/.agents/ACE/ACE_coders/INSTRUCTIONS.md +216 -0
  8. package/assets/.agents/ACE/AGENT_REGISTRY.md +70 -0
  9. package/assets/.agents/ACE/AGENT_REGISTRY_7.md +9 -0
  10. package/assets/.agents/ACE/DIRECTIVE_KERNEL.md +234 -0
  11. package/assets/.agents/ACE/UI/AGENTS.md +115 -0
  12. package/assets/.agents/ACE/UI/instructions.md +178 -0
  13. package/assets/.agents/ACE/VOS/ACE_VOS_MISSING_INFO_MATRIX.md +42 -0
  14. package/assets/.agents/ACE/VOS/AGENTS.md +72 -0
  15. package/assets/.agents/ACE/VOS/instructions.md +211 -0
  16. package/assets/.agents/ACE/agent-astgrep/AGENTS.md +123 -0
  17. package/assets/.agents/ACE/agent-astgrep/instructions.md +91 -0
  18. package/assets/.agents/ACE/agent-builder/AGENTS.md +172 -0
  19. package/assets/.agents/ACE/agent-builder/instructions.md +137 -0
  20. package/assets/.agents/ACE/agent-docs/AGENTS.md +159 -0
  21. package/assets/.agents/ACE/agent-docs/instructions.md +133 -0
  22. package/assets/.agents/ACE/agent-eval/AGENTS.md +46 -0
  23. package/assets/.agents/ACE/agent-eval/instructions.md +56 -0
  24. package/assets/.agents/ACE/agent-memory/AGENTS.md +49 -0
  25. package/assets/.agents/ACE/agent-memory/instructions.md +50 -0
  26. package/assets/.agents/ACE/agent-observability/AGENTS.md +46 -0
  27. package/assets/.agents/ACE/agent-observability/instructions.md +50 -0
  28. package/assets/.agents/ACE/agent-ops/AGENTS.md +201 -0
  29. package/assets/.agents/ACE/agent-ops/instructions.md +136 -0
  30. package/assets/.agents/ACE/agent-qa/AGENTS.md +189 -0
  31. package/assets/.agents/ACE/agent-qa/instructions.md +121 -0
  32. package/assets/.agents/ACE/agent-release/AGENTS.md +48 -0
  33. package/assets/.agents/ACE/agent-release/instructions.md +49 -0
  34. package/assets/.agents/ACE/agent-research/AGENTS.md +160 -0
  35. package/assets/.agents/ACE/agent-research/instructions.md +118 -0
  36. package/assets/.agents/ACE/agent-security/AGENTS.md +48 -0
  37. package/assets/.agents/ACE/agent-security/instructions.md +50 -0
  38. package/assets/.agents/ACE/agent-skeptic/AGENTS.md +178 -0
  39. package/assets/.agents/ACE/agent-skeptic/instructions.md +196 -0
  40. package/assets/.agents/ACE/agent-spec/AGENTS.md +169 -0
  41. package/assets/.agents/ACE/agent-spec/instructions.md +116 -0
  42. package/assets/.agents/ACE/orchestrator/AGENTS.md +365 -0
  43. package/assets/.agents/ACE/orchestrator/instructions.md +231 -0
  44. package/assets/.agents/skills/ace-orchestrator/SKILL.md +63 -0
  45. package/assets/.agents/skills/ace-orchestrator/references/engineering-bootstrap-playbook.md +360 -0
  46. package/assets/.agents/skills/astgrep-index/SKILL.md +58 -0
  47. package/assets/.agents/skills/codemunch/SKILL.md +65 -0
  48. package/assets/.agents/skills/codemunch/references/ast-driven-protocol.md +543 -0
  49. package/assets/.agents/skills/codesnipe/SKILL.md +64 -0
  50. package/assets/.agents/skills/codesnipe/references/dual-codebase-playbook.md +671 -0
  51. package/assets/.agents/skills/eval-harness/SKILL.md +203 -0
  52. package/assets/.agents/skills/handoff-lint/SKILL.md +164 -0
  53. package/assets/.agents/skills/incident-commander/SKILL.md +174 -0
  54. package/assets/.agents/skills/landing-review-watcher/SKILL.md +68 -0
  55. package/assets/.agents/skills/memory-curator/SKILL.md +179 -0
  56. package/assets/.agents/skills/problem-triage/SKILL.md +57 -0
  57. package/assets/.agents/skills/problem-triage/agents/openai.yaml +3 -0
  58. package/assets/.agents/skills/release-sentry/SKILL.md +189 -0
  59. package/assets/.agents/skills/risk-quant/SKILL.md +190 -0
  60. package/assets/.agents/skills/schema-forge/SKILL.md +174 -0
  61. package/assets/.agents/skills/skill-auditor/SKILL.md +52 -0
  62. package/assets/.agents/skills/state-auditor/SKILL.md +182 -0
  63. package/assets/.github/hooks/ace-copilot.json +68 -0
  64. package/assets/agent-state/ACE_WORKFLOW.md +131 -0
  65. package/assets/agent-state/ARTIFACT_MANIFEST.json +5 -0
  66. package/assets/agent-state/AST_GREP_COMMANDS.md +121 -0
  67. package/assets/agent-state/AST_GREP_INDEX.json +13 -0
  68. package/assets/agent-state/AST_GREP_INDEX.md +15 -0
  69. package/assets/agent-state/DECISIONS.md +7 -0
  70. package/assets/agent-state/EVIDENCE_LOG.md +7 -0
  71. package/assets/agent-state/HANDOFF.json +24 -0
  72. package/assets/agent-state/INTERFACE_REGISTRY.md +75 -0
  73. package/assets/agent-state/MODULES/gates/gate-autonomy.json +7 -0
  74. package/assets/agent-state/MODULES/gates/gate-completeness.json +7 -0
  75. package/assets/agent-state/MODULES/gates/gate-correctness.json +7 -0
  76. package/assets/agent-state/MODULES/gates/gate-evaluation.json +7 -0
  77. package/assets/agent-state/MODULES/gates/gate-operability.json +7 -0
  78. package/assets/agent-state/MODULES/gates/gate-security.json +7 -0
  79. package/assets/agent-state/MODULES/gates/gate-typescript-public-surface.json +7 -0
  80. package/assets/agent-state/MODULES/registry.json +41 -0
  81. package/assets/agent-state/MODULES/roles/capability-astgrep.json +49 -0
  82. package/assets/agent-state/MODULES/roles/capability-build.json +39 -0
  83. package/assets/agent-state/MODULES/roles/capability-docs.json +38 -0
  84. package/assets/agent-state/MODULES/roles/capability-eval.json +20 -0
  85. package/assets/agent-state/MODULES/roles/capability-memory.json +20 -0
  86. package/assets/agent-state/MODULES/roles/capability-observability.json +20 -0
  87. package/assets/agent-state/MODULES/roles/capability-ops.json +45 -0
  88. package/assets/agent-state/MODULES/roles/capability-qa.json +40 -0
  89. package/assets/agent-state/MODULES/roles/capability-release.json +21 -0
  90. package/assets/agent-state/MODULES/roles/capability-research.json +44 -0
  91. package/assets/agent-state/MODULES/roles/capability-security.json +21 -0
  92. package/assets/agent-state/MODULES/roles/capability-skeptic.json +48 -0
  93. package/assets/agent-state/MODULES/roles/capability-spec.json +42 -0
  94. package/assets/agent-state/MODULES/schemas/ACE_RUNTIME_PROFILE.schema.json +289 -0
  95. package/assets/agent-state/MODULES/schemas/ARTIFACT_MANIFEST.schema.json +185 -0
  96. package/assets/agent-state/MODULES/schemas/HANDOFF.agent-state.schema.json +124 -0
  97. package/assets/agent-state/MODULES/schemas/HANDOFF.schema.json +55 -0
  98. package/assets/agent-state/MODULES/schemas/RUNTIME_EXECUTOR_SESSION_REGISTRY.schema.json +290 -0
  99. package/assets/agent-state/MODULES/schemas/RUNTIME_TOOL_SPEC_REGISTRY.schema.json +144 -0
  100. package/assets/agent-state/MODULES/schemas/STATUS_EVENT.schema.json +84 -0
  101. package/assets/agent-state/MODULES/schemas/SWARM_HANDOFF.schema.json +138 -0
  102. package/assets/agent-state/MODULES/schemas/TRACKER_SNAPSHOT.schema.json +134 -0
  103. package/assets/agent-state/MODULES/schemas/VERICIFY_BRIDGE_SNAPSHOT.schema.json +157 -0
  104. package/assets/agent-state/MODULES/schemas/VERICIFY_PROCESS_POST_LOG.schema.json +93 -0
  105. package/assets/agent-state/MODULES/schemas/WORKSPACE_SESSION_REGISTRY.schema.json +133 -0
  106. package/assets/agent-state/PROVENANCE_LOG.md +28 -0
  107. package/assets/agent-state/QUALITY_GATES.md +15 -0
  108. package/assets/agent-state/RISKS.md +8 -0
  109. package/assets/agent-state/SCOPE.md +20 -0
  110. package/assets/agent-state/SKILL_CATALOG.md +48 -0
  111. package/assets/agent-state/STATUS.md +8 -0
  112. package/assets/agent-state/STATUS_EVENTS.ndjson +1 -0
  113. package/assets/agent-state/TASK.md +18 -0
  114. package/assets/agent-state/TEAL_CONFIG.md +117 -0
  115. package/assets/agent-state/handoff-registry.json +5 -0
  116. package/assets/agent-state/index-fingerprints.json +7 -0
  117. package/assets/agent-state/index.json +32 -0
  118. package/assets/agent-state/run-ledger.json +5 -0
  119. package/assets/agent-state/runtime-executor-sessions.json +5 -0
  120. package/assets/agent-state/runtime-tool-specs.json +5 -0
  121. package/assets/agent-state/runtime-workspaces.json +5 -0
  122. package/assets/agent-state/todo-state.json +7 -0
  123. package/assets/agent-state/tracker-snapshot.json +7 -0
  124. package/assets/agent-state/vericify/ace-bridge.json +60 -0
  125. package/assets/agent-state/vericify/process-posts.json +5 -0
  126. package/assets/instructions/ACE.instructions.md +187 -0
  127. package/assets/instructions/ACE_Coder.instructions.md +146 -0
  128. package/assets/instructions/ACE_UI.instructions.md +178 -0
  129. package/assets/instructions/ACE_VOS.instructions.md +211 -0
  130. package/assets/scripts/ace-hook-dispatch.mjs +538 -0
  131. package/assets/scripts/bootstrap-workspace.sh +27 -0
  132. package/assets/scripts/copilot-hook-dispatch.mjs +3 -0
  133. package/assets/scripts/eval-harness.sh +68 -0
  134. package/assets/scripts/render-mcp-configs.sh +396 -0
  135. package/assets/tasks/README.md +48 -0
  136. package/assets/tasks/SWARM_HANDOFF.example.json +53 -0
  137. package/assets/tasks/SWARM_HANDOFF.example_ui_to_coders.json +55 -0
  138. package/assets/tasks/SWARM_HANDOFF.example_vos_to_ui.json +55 -0
  139. package/assets/tasks/SWARM_HANDOFF.template.json +52 -0
  140. package/assets/tasks/cli_work_split.md +22 -0
  141. package/assets/tasks/lessons.md +17 -0
  142. package/assets/tasks/role_tasks.md +206 -0
  143. package/assets/tasks/todo.md +23 -0
  144. package/dist/ace-autonomy.d.ts +137 -0
  145. package/dist/ace-autonomy.js +472 -0
  146. package/dist/ace-context.d.ts +29 -0
  147. package/dist/ace-context.js +240 -0
  148. package/dist/ace-internal-tools.d.ts +8 -0
  149. package/dist/ace-internal-tools.js +76 -0
  150. package/dist/ace-server-instructions.d.ts +12 -0
  151. package/dist/ace-server-instructions.js +324 -0
  152. package/dist/agent-runtime/role-adapters.d.ts +29 -0
  153. package/dist/agent-runtime/role-adapters.js +573 -0
  154. package/dist/astgrep-index.d.ts +24 -0
  155. package/dist/astgrep-index.js +476 -0
  156. package/dist/cli.d.ts +3 -0
  157. package/dist/cli.js +591 -0
  158. package/dist/git-ops.d.ts +53 -0
  159. package/dist/git-ops.js +238 -0
  160. package/dist/handoff-registry.d.ts +71 -0
  161. package/dist/handoff-registry.js +422 -0
  162. package/dist/helpers.d.ts +126 -0
  163. package/dist/helpers.js +1687 -0
  164. package/dist/index-store.d.ts +51 -0
  165. package/dist/index-store.js +328 -0
  166. package/dist/index.d.ts +3 -0
  167. package/dist/index.js +7 -0
  168. package/dist/internal-tool-runtime.d.ts +21 -0
  169. package/dist/internal-tool-runtime.js +136 -0
  170. package/dist/job-scheduler.d.ts +175 -0
  171. package/dist/job-scheduler.js +1217 -0
  172. package/dist/kanban.d.ts +27 -0
  173. package/dist/kanban.js +339 -0
  174. package/dist/local-model-runtime.d.ts +40 -0
  175. package/dist/local-model-runtime.js +174 -0
  176. package/dist/model-bridge.d.ts +54 -0
  177. package/dist/model-bridge.js +587 -0
  178. package/dist/orchestrator-supervisor.d.ts +100 -0
  179. package/dist/orchestrator-supervisor.js +399 -0
  180. package/dist/problem-triage.d.ts +23 -0
  181. package/dist/problem-triage.js +448 -0
  182. package/dist/prompts.d.ts +7 -0
  183. package/dist/prompts.js +628 -0
  184. package/dist/public-surface.d.ts +30 -0
  185. package/dist/public-surface.js +316 -0
  186. package/dist/resources.d.ts +7 -0
  187. package/dist/resources.js +545 -0
  188. package/dist/run-ledger.d.ts +36 -0
  189. package/dist/run-ledger.js +257 -0
  190. package/dist/runtime-command.d.ts +18 -0
  191. package/dist/runtime-command.js +76 -0
  192. package/dist/runtime-executor.d.ts +104 -0
  193. package/dist/runtime-executor.js +985 -0
  194. package/dist/runtime-profile.d.ts +116 -0
  195. package/dist/runtime-profile.js +532 -0
  196. package/dist/runtime-tool-specs.d.ts +68 -0
  197. package/dist/runtime-tool-specs.js +527 -0
  198. package/dist/safe-edit.d.ts +52 -0
  199. package/dist/safe-edit.js +255 -0
  200. package/dist/schemas.d.ts +44 -0
  201. package/dist/schemas.js +830 -0
  202. package/dist/semantic-cache.d.ts +147 -0
  203. package/dist/semantic-cache.js +552 -0
  204. package/dist/semantic-hash.d.ts +83 -0
  205. package/dist/semantic-hash.js +346 -0
  206. package/dist/server.d.ts +10 -0
  207. package/dist/server.js +46 -0
  208. package/dist/shared.d.ts +136 -0
  209. package/dist/shared.js +269 -0
  210. package/dist/skill-auditor.d.ts +26 -0
  211. package/dist/skill-auditor.js +184 -0
  212. package/dist/skill-catalog.d.ts +60 -0
  213. package/dist/skill-catalog.js +305 -0
  214. package/dist/status-events.d.ts +40 -0
  215. package/dist/status-events.js +269 -0
  216. package/dist/store/ace-packed-store.d.ts +69 -0
  217. package/dist/store/ace-packed-store.js +434 -0
  218. package/dist/store/bootstrap-store.d.ts +46 -0
  219. package/dist/store/bootstrap-store.js +242 -0
  220. package/dist/store/catalog-builder.d.ts +21 -0
  221. package/dist/store/catalog-builder.js +68 -0
  222. package/dist/store/importer.d.ts +19 -0
  223. package/dist/store/importer.js +157 -0
  224. package/dist/store/knowledge-bake.d.ts +59 -0
  225. package/dist/store/knowledge-bake.js +339 -0
  226. package/dist/store/materializers/hook-context-materializer.d.ts +25 -0
  227. package/dist/store/materializers/hook-context-materializer.js +100 -0
  228. package/dist/store/materializers/host-file-materializer.d.ts +37 -0
  229. package/dist/store/materializers/host-file-materializer.js +271 -0
  230. package/dist/store/materializers/todo-syncer.d.ts +30 -0
  231. package/dist/store/materializers/todo-syncer.js +140 -0
  232. package/dist/store/materializers/vericify-projector.d.ts +38 -0
  233. package/dist/store/materializers/vericify-projector.js +239 -0
  234. package/dist/store/repositories/discovery-repository.d.ts +24 -0
  235. package/dist/store/repositories/discovery-repository.js +58 -0
  236. package/dist/store/repositories/handoff-repository.d.ts +31 -0
  237. package/dist/store/repositories/handoff-repository.js +67 -0
  238. package/dist/store/repositories/ledger-repository.d.ts +26 -0
  239. package/dist/store/repositories/ledger-repository.js +49 -0
  240. package/dist/store/repositories/runtime-kv-repository.d.ts +16 -0
  241. package/dist/store/repositories/runtime-kv-repository.js +36 -0
  242. package/dist/store/repositories/scheduler-repository.d.ts +50 -0
  243. package/dist/store/repositories/scheduler-repository.js +123 -0
  244. package/dist/store/repositories/session-repository.d.ts +33 -0
  245. package/dist/store/repositories/session-repository.js +82 -0
  246. package/dist/store/repositories/todo-repository.d.ts +31 -0
  247. package/dist/store/repositories/todo-repository.js +77 -0
  248. package/dist/store/repositories/tracker-repository.d.ts +25 -0
  249. package/dist/store/repositories/tracker-repository.js +43 -0
  250. package/dist/store/repositories/vericify-repository.d.ts +32 -0
  251. package/dist/store/repositories/vericify-repository.js +58 -0
  252. package/dist/store/skills-install.d.ts +28 -0
  253. package/dist/store/skills-install.js +86 -0
  254. package/dist/store/state-reader.d.ts +49 -0
  255. package/dist/store/state-reader.js +111 -0
  256. package/dist/store/store-artifacts.d.ts +12 -0
  257. package/dist/store/store-artifacts.js +138 -0
  258. package/dist/store/store-snapshot.d.ts +19 -0
  259. package/dist/store/store-snapshot.js +140 -0
  260. package/dist/store/topology-bake.d.ts +15 -0
  261. package/dist/store/topology-bake.js +215 -0
  262. package/dist/store/types.d.ts +155 -0
  263. package/dist/store/types.js +35 -0
  264. package/dist/store/workspace-snapshot.d.ts +26 -0
  265. package/dist/store/workspace-snapshot.js +107 -0
  266. package/dist/store/write-queue.d.ts +7 -0
  267. package/dist/store/write-queue.js +26 -0
  268. package/dist/todo-state.d.ts +41 -0
  269. package/dist/todo-state.js +399 -0
  270. package/dist/tools-agent.d.ts +7 -0
  271. package/dist/tools-agent.js +1542 -0
  272. package/dist/tools-discovery.d.ts +6 -0
  273. package/dist/tools-discovery.js +178 -0
  274. package/dist/tools-drift.d.ts +13 -0
  275. package/dist/tools-drift.js +357 -0
  276. package/dist/tools-files.d.ts +6 -0
  277. package/dist/tools-files.js +679 -0
  278. package/dist/tools-framework.d.ts +7 -0
  279. package/dist/tools-framework.js +1414 -0
  280. package/dist/tools-git.d.ts +6 -0
  281. package/dist/tools-git.js +183 -0
  282. package/dist/tools-handoff.d.ts +32 -0
  283. package/dist/tools-handoff.js +489 -0
  284. package/dist/tools-lifecycle.d.ts +6 -0
  285. package/dist/tools-lifecycle.js +205 -0
  286. package/dist/tools-memory.d.ts +6 -0
  287. package/dist/tools-memory.js +260 -0
  288. package/dist/tools-scheduler.d.ts +6 -0
  289. package/dist/tools-scheduler.js +228 -0
  290. package/dist/tools-skills.d.ts +3 -0
  291. package/dist/tools-skills.js +104 -0
  292. package/dist/tools-todo.d.ts +6 -0
  293. package/dist/tools-todo.js +154 -0
  294. package/dist/tools.d.ts +9 -0
  295. package/dist/tools.js +33 -0
  296. package/dist/tracker-adapters.d.ts +74 -0
  297. package/dist/tracker-adapters.js +776 -0
  298. package/dist/tracker-sync.d.ts +10 -0
  299. package/dist/tracker-sync.js +84 -0
  300. package/dist/tui/agent-runner.d.ts +137 -0
  301. package/dist/tui/agent-runner.js +466 -0
  302. package/dist/tui/agent-worker.d.ts +10 -0
  303. package/dist/tui/agent-worker.js +347 -0
  304. package/dist/tui/chat.d.ts +84 -0
  305. package/dist/tui/chat.js +368 -0
  306. package/dist/tui/commands.d.ts +57 -0
  307. package/dist/tui/commands.js +432 -0
  308. package/dist/tui/dashboard.d.ts +24 -0
  309. package/dist/tui/dashboard.js +110 -0
  310. package/dist/tui/index.d.ts +114 -0
  311. package/dist/tui/index.js +1059 -0
  312. package/dist/tui/input.d.ts +49 -0
  313. package/dist/tui/input.js +336 -0
  314. package/dist/tui/layout.d.ts +116 -0
  315. package/dist/tui/layout.js +367 -0
  316. package/dist/tui/ollama.d.ts +116 -0
  317. package/dist/tui/ollama.js +192 -0
  318. package/dist/tui/openai-compatible.d.ts +63 -0
  319. package/dist/tui/openai-compatible.js +370 -0
  320. package/dist/tui/provider-discovery.d.ts +59 -0
  321. package/dist/tui/provider-discovery.js +530 -0
  322. package/dist/tui/renderer.d.ts +166 -0
  323. package/dist/tui/renderer.js +304 -0
  324. package/dist/tui/tabs.d.ts +70 -0
  325. package/dist/tui/tabs.js +208 -0
  326. package/dist/tui/telemetry.d.ts +56 -0
  327. package/dist/tui/telemetry.js +106 -0
  328. package/dist/vericify-bridge.d.ts +146 -0
  329. package/dist/vericify-bridge.js +571 -0
  330. package/dist/vericify-context.d.ts +10 -0
  331. package/dist/vericify-context.js +72 -0
  332. package/dist/workspace-manager.d.ts +107 -0
  333. package/dist/workspace-manager.js +636 -0
  334. package/package.json +83 -0
@@ -0,0 +1,116 @@
1
+ import { z } from "zod";
2
+ import { type ArtifactSource } from "./helpers.js";
3
+ import { type ValidationResult } from "./schemas.js";
4
+ export declare const RUNTIME_PROFILE_REL_PATH = "agent-state/ACE_WORKFLOW.md";
5
+ export declare const RUNTIME_PROFILE_SCHEMA_REL_PATH = "agent-state/MODULES/schemas/ACE_RUNTIME_PROFILE.schema.json";
6
+ export declare const RUNTIME_PROFILE_SCHEMA_NAME = "ace-runtime-profile@1.0.0";
7
+ export declare const DEFAULT_RUNTIME_TOOL_REGISTRY_REL_PATH = "agent-state/runtime-tool-specs.json";
8
+ export declare const DEFAULT_EXECUTOR_MAX_TURNS = 6;
9
+ export declare const DEFAULT_EXECUTOR_TURN_TIMEOUT_MS = 300000;
10
+ export declare const DEFAULT_VERICIFY_BRIDGE_REL_PATH = "agent-state/vericify/ace-bridge.json";
11
+ export declare const DEFAULT_VERICIFY_PROCESS_POST_LOG_REL_PATH = "agent-state/vericify/process-posts.json";
12
+ declare const runtimeProfileSchema: z.ZodObject<{
13
+ ace_runtime_version: z.ZodLiteral<"1.0.0">;
14
+ runtime: z.ZodObject<{
15
+ mode: z.ZodEnum<{
16
+ interactive: "interactive";
17
+ unattended: "unattended";
18
+ }>;
19
+ profile_name: z.ZodString;
20
+ }, z.core.$strict>;
21
+ workspace: z.ZodObject<{
22
+ root: z.ZodString;
23
+ retention: z.ZodEnum<{
24
+ delete: "delete";
25
+ archive: "archive";
26
+ }>;
27
+ hooks: z.ZodObject<{
28
+ after_create: z.ZodNullable<z.ZodString>;
29
+ before_run: z.ZodNullable<z.ZodString>;
30
+ after_run: z.ZodNullable<z.ZodString>;
31
+ before_remove: z.ZodNullable<z.ZodString>;
32
+ }, z.core.$strict>;
33
+ }, z.core.$strict>;
34
+ executor: z.ZodObject<{
35
+ command: z.ZodNullable<z.ZodString>;
36
+ approval_policy: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{}, z.core.$catchall<z.ZodUnknown>>]>;
37
+ thread_sandbox: z.ZodString;
38
+ turn_sandbox_policy: z.ZodNullable<z.ZodObject<{}, z.core.$catchall<z.ZodUnknown>>>;
39
+ max_turns: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
40
+ turn_timeout_ms: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
41
+ }, z.core.$strict>;
42
+ tools: z.ZodDefault<z.ZodOptional<z.ZodObject<{
43
+ registry_path: z.ZodDefault<z.ZodOptional<z.ZodString>>;
44
+ }, z.core.$strict>>>;
45
+ autonomy: z.ZodDefault<z.ZodOptional<z.ZodObject<{
46
+ orchestrator_preflight: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
47
+ recall_context: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
48
+ state_sources: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
49
+ before_run_checks: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
50
+ stop_checks: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
51
+ review_mode: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
52
+ }, z.core.$strict>>>;
53
+ continuity: z.ZodDefault<z.ZodOptional<z.ZodObject<{
54
+ enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
55
+ source_paths: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString>>>;
56
+ max_sources: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
57
+ max_excerpt_chars: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
58
+ max_total_chars: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
59
+ max_status_events: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
60
+ max_run_ledger_entries: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
61
+ include_snapshot: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
62
+ }, z.core.$strict>>>;
63
+ tracker: z.ZodObject<{
64
+ kind: z.ZodEnum<{
65
+ memory: "memory";
66
+ none: "none";
67
+ external: "external";
68
+ }>;
69
+ config: z.ZodObject<{}, z.core.$catchall<z.ZodUnknown>>;
70
+ }, z.core.$strict>;
71
+ observability: z.ZodObject<{
72
+ http_enabled: z.ZodBoolean;
73
+ http_port: z.ZodNullable<z.ZodNumber>;
74
+ vericify_bridge: z.ZodDefault<z.ZodOptional<z.ZodObject<{
75
+ enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
76
+ bridge_path: z.ZodDefault<z.ZodOptional<z.ZodString>>;
77
+ process_post_path: z.ZodDefault<z.ZodOptional<z.ZodString>>;
78
+ }, z.core.$strict>>>;
79
+ }, z.core.$strict>;
80
+ }, z.core.$strict>;
81
+ export type RuntimeProfile = z.infer<typeof runtimeProfileSchema>;
82
+ export interface RuntimeProfileSignature {
83
+ mtime_ms: number;
84
+ size: number;
85
+ content_sha256: string;
86
+ }
87
+ export interface RuntimeProfileSnapshot {
88
+ path: string;
89
+ source: ArtifactSource;
90
+ profile: RuntimeProfile;
91
+ prompt_template: string;
92
+ signature: RuntimeProfileSignature;
93
+ }
94
+ export type RuntimeProfileResult = (RuntimeProfileSnapshot & {
95
+ ok: true;
96
+ schema: typeof RUNTIME_PROFILE_SCHEMA_NAME;
97
+ cache_hit: boolean;
98
+ }) | {
99
+ ok: false;
100
+ schema: typeof RUNTIME_PROFILE_SCHEMA_NAME;
101
+ path: string;
102
+ source: ArtifactSource;
103
+ errors: string[];
104
+ cache_hit: boolean;
105
+ signature?: RuntimeProfileSignature;
106
+ };
107
+ export declare function validateRuntimeProfileContent(raw: string): ValidationResult;
108
+ export declare function loadRuntimeProfile(explicitPath?: string): RuntimeProfileResult;
109
+ export declare function readRuntimeProfile(): RuntimeProfile;
110
+ export declare function readRuntimePromptTemplate(): string;
111
+ export declare function readRuntimeProfileState(): RuntimeProfileSnapshot;
112
+ export declare function renderRuntimePrompt(templateContext: Record<string, unknown>): string;
113
+ export declare function getRuntimeProfilePath(): string;
114
+ export declare function getRuntimeProfileSchemaPath(): string;
115
+ export {};
116
+ //# sourceMappingURL=runtime-profile.d.ts.map
@@ -0,0 +1,532 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, readFileSync, statSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { z } from "zod";
5
+ import { DEFAULTS_ROOT, resolveWorkspaceArtifactPath, resolveWorkspaceRoot, } from "./helpers.js";
6
+ import { getStoreStatSync, getWorkspaceStorePath, parseVirtualStorePath, readStoreBlobSync, readStoreBlobByPathSync, toVirtualStorePath, } from "./store/store-snapshot.js";
7
+ import { appendStatusEvent } from "./status-events.js";
8
+ import { DEFAULT_AUTONOMY_POLICY, DEFAULT_CONTINUITY_POLICY, } from "./ace-autonomy.js";
9
+ export const RUNTIME_PROFILE_REL_PATH = "agent-state/ACE_WORKFLOW.md";
10
+ export const RUNTIME_PROFILE_SCHEMA_REL_PATH = "agent-state/MODULES/schemas/ACE_RUNTIME_PROFILE.schema.json";
11
+ export const RUNTIME_PROFILE_SCHEMA_NAME = "ace-runtime-profile@1.0.0";
12
+ export const DEFAULT_RUNTIME_TOOL_REGISTRY_REL_PATH = "agent-state/runtime-tool-specs.json";
13
+ export const DEFAULT_EXECUTOR_MAX_TURNS = 6;
14
+ export const DEFAULT_EXECUTOR_TURN_TIMEOUT_MS = 300_000;
15
+ export const DEFAULT_VERICIFY_BRIDGE_REL_PATH = "agent-state/vericify/ace-bridge.json";
16
+ export const DEFAULT_VERICIFY_PROCESS_POST_LOG_REL_PATH = "agent-state/vericify/process-posts.json";
17
+ const DEFAULT_RUNTIME_PROFILE_PATH = resolve(DEFAULTS_ROOT, RUNTIME_PROFILE_REL_PATH);
18
+ const DEFAULT_RUNTIME_PROFILE_SCHEMA_PATH = resolve(DEFAULTS_ROOT, RUNTIME_PROFILE_SCHEMA_REL_PATH);
19
+ const ANY_OBJECT = z.object({}).catchall(z.unknown());
20
+ const STRING_LIST = z.array(z.string().min(1));
21
+ const runtimeProfileSchema = z
22
+ .object({
23
+ ace_runtime_version: z.literal("1.0.0"),
24
+ runtime: z
25
+ .object({
26
+ mode: z.enum(["interactive", "unattended"]),
27
+ profile_name: z.string().min(1),
28
+ })
29
+ .strict(),
30
+ workspace: z
31
+ .object({
32
+ root: z.string().min(1),
33
+ retention: z.enum(["delete", "archive"]),
34
+ hooks: z
35
+ .object({
36
+ after_create: z.string().nullable(),
37
+ before_run: z.string().nullable(),
38
+ after_run: z.string().nullable(),
39
+ before_remove: z.string().nullable(),
40
+ })
41
+ .strict(),
42
+ })
43
+ .strict(),
44
+ executor: z
45
+ .object({
46
+ command: z.string().nullable(),
47
+ approval_policy: z.union([z.string(), ANY_OBJECT]),
48
+ thread_sandbox: z.string().min(1),
49
+ turn_sandbox_policy: ANY_OBJECT.nullable(),
50
+ max_turns: z.number().int().positive().optional().default(DEFAULT_EXECUTOR_MAX_TURNS),
51
+ turn_timeout_ms: z
52
+ .number()
53
+ .int()
54
+ .positive()
55
+ .optional()
56
+ .default(DEFAULT_EXECUTOR_TURN_TIMEOUT_MS),
57
+ })
58
+ .strict(),
59
+ tools: z
60
+ .object({
61
+ registry_path: z
62
+ .string()
63
+ .min(1)
64
+ .optional()
65
+ .default(DEFAULT_RUNTIME_TOOL_REGISTRY_REL_PATH),
66
+ })
67
+ .strict()
68
+ .optional()
69
+ .default({ registry_path: DEFAULT_RUNTIME_TOOL_REGISTRY_REL_PATH }),
70
+ autonomy: z
71
+ .object({
72
+ orchestrator_preflight: z.boolean().optional().default(true),
73
+ recall_context: z.boolean().optional().default(true),
74
+ state_sources: STRING_LIST.optional().default([]),
75
+ before_run_checks: STRING_LIST.optional().default([]),
76
+ stop_checks: STRING_LIST.optional().default([]),
77
+ review_mode: z.string().min(1).nullable().optional().default(null),
78
+ })
79
+ .strict()
80
+ .optional()
81
+ .default(DEFAULT_AUTONOMY_POLICY),
82
+ continuity: z
83
+ .object({
84
+ enabled: z.boolean().optional().default(true),
85
+ source_paths: STRING_LIST.optional().default([]),
86
+ max_sources: z.number().int().positive().optional().default(6),
87
+ max_excerpt_chars: z.number().int().positive().optional().default(450),
88
+ max_total_chars: z.number().int().positive().optional().default(2600),
89
+ max_status_events: z.number().int().positive().optional().default(6),
90
+ max_run_ledger_entries: z.number().int().positive().optional().default(4),
91
+ include_snapshot: z.boolean().optional().default(true),
92
+ })
93
+ .strict()
94
+ .optional()
95
+ .default(DEFAULT_CONTINUITY_POLICY),
96
+ tracker: z
97
+ .object({
98
+ kind: z.enum(["none", "memory", "external"]),
99
+ config: ANY_OBJECT,
100
+ })
101
+ .strict(),
102
+ observability: z
103
+ .object({
104
+ http_enabled: z.boolean(),
105
+ http_port: z.number().int().min(0).nullable(),
106
+ vericify_bridge: z
107
+ .object({
108
+ enabled: z.boolean().optional().default(false),
109
+ bridge_path: z
110
+ .string()
111
+ .min(1)
112
+ .optional()
113
+ .default(DEFAULT_VERICIFY_BRIDGE_REL_PATH),
114
+ process_post_path: z
115
+ .string()
116
+ .min(1)
117
+ .optional()
118
+ .default(DEFAULT_VERICIFY_PROCESS_POST_LOG_REL_PATH),
119
+ })
120
+ .strict()
121
+ .optional()
122
+ .default({
123
+ enabled: false,
124
+ bridge_path: DEFAULT_VERICIFY_BRIDGE_REL_PATH,
125
+ process_post_path: DEFAULT_VERICIFY_PROCESS_POST_LOG_REL_PATH,
126
+ }),
127
+ })
128
+ .strict(),
129
+ })
130
+ .strict();
131
+ let lastLoadCache;
132
+ let lastGoodSnapshot;
133
+ function formatZodErrors(error) {
134
+ return error.issues.map((issue) => {
135
+ const path = issue.path.length > 0 ? issue.path.join(".") : "(root)";
136
+ return `${path}: ${issue.message}`;
137
+ });
138
+ }
139
+ function normalizeSource(path) {
140
+ return path === DEFAULT_RUNTIME_PROFILE_PATH ||
141
+ path === DEFAULT_RUNTIME_PROFILE_SCHEMA_PATH ||
142
+ path.startsWith(DEFAULTS_ROOT)
143
+ ? "package-defaults"
144
+ : "workspace";
145
+ }
146
+ function resolveRuntimeProfileTarget(explicitPath) {
147
+ if (explicitPath) {
148
+ const virtual = parseVirtualStorePath(explicitPath);
149
+ if (virtual) {
150
+ return {
151
+ path: explicitPath,
152
+ source: "store",
153
+ mode: "store",
154
+ key: virtual.key,
155
+ };
156
+ }
157
+ const resolved = explicitPath.startsWith("/")
158
+ ? resolve(explicitPath)
159
+ : resolveWorkspaceArtifactPath(explicitPath, "read");
160
+ return { path: resolved, source: normalizeSource(resolved), mode: "file" };
161
+ }
162
+ const workspacePath = resolveWorkspaceArtifactPath(RUNTIME_PROFILE_REL_PATH, "read");
163
+ if (existsSync(workspacePath)) {
164
+ return { path: workspacePath, source: "workspace", mode: "file" };
165
+ }
166
+ const workspaceRoot = resolveWorkspaceRoot();
167
+ const workflowKey = "knowledge/runtime/ACE_WORKFLOW.md";
168
+ const kernelWorkflowKey = "knowledge/kernel/ACE_WORKFLOW.md";
169
+ if (readStoreBlobSync(workspaceRoot, workflowKey)) {
170
+ const storePath = getWorkspaceStorePath(workspaceRoot);
171
+ return {
172
+ path: toVirtualStorePath(storePath, workflowKey),
173
+ source: "store",
174
+ mode: "store",
175
+ key: workflowKey,
176
+ };
177
+ }
178
+ if (readStoreBlobSync(workspaceRoot, kernelWorkflowKey)) {
179
+ const storePath = getWorkspaceStorePath(workspaceRoot);
180
+ return {
181
+ path: toVirtualStorePath(storePath, kernelWorkflowKey),
182
+ source: "store",
183
+ mode: "store",
184
+ key: kernelWorkflowKey,
185
+ };
186
+ }
187
+ return { path: DEFAULT_RUNTIME_PROFILE_PATH, source: "package-defaults", mode: "file" };
188
+ }
189
+ function hashContent(content) {
190
+ return `sha256:${createHash("sha256").update(content).digest("hex")}`;
191
+ }
192
+ function signatureKey(signature) {
193
+ return `${signature.mtime_ms}:${signature.size}:${signature.content_sha256}`;
194
+ }
195
+ function computeSignature(path, content) {
196
+ const stat = statSync(path);
197
+ return {
198
+ mtime_ms: stat.mtimeMs,
199
+ size: stat.size,
200
+ content_sha256: hashContent(content),
201
+ };
202
+ }
203
+ function stripInlineComment(value) {
204
+ let inSingle = false;
205
+ let inDouble = false;
206
+ for (let idx = 0; idx < value.length; idx += 1) {
207
+ const char = value[idx];
208
+ const prev = idx > 0 ? value[idx - 1] : "";
209
+ if (char === "'" && !inDouble)
210
+ inSingle = !inSingle;
211
+ if (char === '"' && !inSingle && prev !== "\\")
212
+ inDouble = !inDouble;
213
+ if (char === "#" && !inSingle && !inDouble) {
214
+ const before = idx > 0 ? value[idx - 1] : "";
215
+ if (!before || /\s/.test(before)) {
216
+ return value.slice(0, idx).trimEnd();
217
+ }
218
+ }
219
+ }
220
+ return value.trimEnd();
221
+ }
222
+ function parseYamlScalar(rawValue, lineNumber) {
223
+ const value = stripInlineComment(rawValue.trim());
224
+ if (value === "null" || value === "~")
225
+ return null;
226
+ if (value === "true")
227
+ return true;
228
+ if (value === "false")
229
+ return false;
230
+ if (value === "{}")
231
+ return {};
232
+ if (value === "[]")
233
+ return [];
234
+ if (/^-?\d+$/.test(value))
235
+ return Number(value);
236
+ if ((value.startsWith("[") && value.endsWith("]")) ||
237
+ (value.startsWith("{") && value.endsWith("}"))) {
238
+ try {
239
+ return JSON.parse(value);
240
+ }
241
+ catch (error) {
242
+ throw new Error(`line ${lineNumber}: invalid JSON-style scalar (${error instanceof Error ? error.message : String(error)})`);
243
+ }
244
+ }
245
+ if ((value.startsWith('"') && value.endsWith('"')) ||
246
+ (value.startsWith("'") && value.endsWith("'"))) {
247
+ const quote = value[0];
248
+ const inner = value.slice(1, -1);
249
+ if (quote === '"') {
250
+ return inner
251
+ .replace(/\\"/g, '"')
252
+ .replace(/\\n/g, "\n")
253
+ .replace(/\\r/g, "\r")
254
+ .replace(/\\t/g, "\t")
255
+ .replace(/\\\\/g, "\\");
256
+ }
257
+ return inner.replace(/''/g, "'");
258
+ }
259
+ return value;
260
+ }
261
+ function parseYamlFrontMatter(raw) {
262
+ const root = {};
263
+ const stack = [
264
+ { indent: -1, value: root },
265
+ ];
266
+ const lines = raw.split(/\r?\n/);
267
+ lines.forEach((line, index) => {
268
+ const lineNumber = index + 1;
269
+ if (!line.trim() || line.trimStart().startsWith("#"))
270
+ return;
271
+ if (line.includes("\t")) {
272
+ throw new Error(`line ${lineNumber}: tabs are not allowed in ACE runtime front matter`);
273
+ }
274
+ const indentMatch = line.match(/^ */);
275
+ const indent = indentMatch ? indentMatch[0].length : 0;
276
+ if (indent % 2 !== 0) {
277
+ throw new Error(`line ${lineNumber}: indentation must use multiples of two spaces`);
278
+ }
279
+ const trimmed = line.trim();
280
+ if (trimmed.startsWith("- ")) {
281
+ throw new Error(`line ${lineNumber}: arrays are not supported in ACE runtime front matter`);
282
+ }
283
+ const colonIndex = trimmed.indexOf(":");
284
+ if (colonIndex <= 0) {
285
+ throw new Error(`line ${lineNumber}: expected "key: value" mapping`);
286
+ }
287
+ const key = trimmed.slice(0, colonIndex).trim();
288
+ const valuePart = trimmed.slice(colonIndex + 1).trim();
289
+ if (!/^[A-Za-z0-9_-]+$/.test(key)) {
290
+ throw new Error(`line ${lineNumber}: invalid key "${key}"`);
291
+ }
292
+ while (stack.length > 1 && indent <= stack[stack.length - 1].indent) {
293
+ stack.pop();
294
+ }
295
+ const parent = stack[stack.length - 1];
296
+ const expectedIndent = parent.indent < 0 ? 0 : parent.indent + 2;
297
+ if (indent > expectedIndent) {
298
+ throw new Error(`line ${lineNumber}: indentation jumps from ${parent.indent} to ${indent}`);
299
+ }
300
+ if (Object.prototype.hasOwnProperty.call(parent.value, key)) {
301
+ throw new Error(`line ${lineNumber}: duplicate key "${key}"`);
302
+ }
303
+ if (!valuePart) {
304
+ const child = {};
305
+ parent.value[key] = child;
306
+ stack.push({ indent, value: child });
307
+ return;
308
+ }
309
+ parent.value[key] = parseYamlScalar(valuePart, lineNumber);
310
+ });
311
+ return root;
312
+ }
313
+ function extractFrontMatter(raw) {
314
+ const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)/);
315
+ if (!match) {
316
+ throw new Error("ACE_WORKFLOW.md must start with YAML front matter delimited by leading and trailing --- lines");
317
+ }
318
+ const frontMatter = match[1];
319
+ const body = raw.slice(match[0].length);
320
+ return { front_matter: frontMatter, body };
321
+ }
322
+ function parseRuntimeProfileContent(raw) {
323
+ const { front_matter, body } = extractFrontMatter(raw);
324
+ if (body.length === 0) {
325
+ throw new Error("Runtime prompt template body is empty after the front matter boundary");
326
+ }
327
+ const parsedFrontMatter = parseYamlFrontMatter(front_matter);
328
+ const validation = runtimeProfileSchema.safeParse(parsedFrontMatter);
329
+ if (!validation.success) {
330
+ throw new Error(formatZodErrors(validation.error).join("; "));
331
+ }
332
+ return {
333
+ profile: validation.data,
334
+ prompt_template: body,
335
+ };
336
+ }
337
+ function emitRuntimeProfileEvent(eventType, input) {
338
+ try {
339
+ appendStatusEvent({
340
+ source_module: "capability-framework",
341
+ event_type: eventType,
342
+ status: eventType === "RUNTIME_PROFILE_INVALID" ? "fail" : "pass",
343
+ summary: eventType === "RUNTIME_PROFILE_INVALID"
344
+ ? `Runtime profile validation failed for ${input.path}`
345
+ : `Runtime profile ${eventType === "RUNTIME_PROFILE_LOADED" ? "loaded" : "reloaded"} from ${input.path}`,
346
+ payload: {
347
+ path: input.path,
348
+ source: input.source,
349
+ signature: input.signature,
350
+ errors: input.errors,
351
+ },
352
+ });
353
+ }
354
+ catch {
355
+ // Runtime profile reads must not fail due to observability side effects.
356
+ }
357
+ }
358
+ function ensureLastGoodSnapshot() {
359
+ const current = loadRuntimeProfile();
360
+ if (current.ok && lastGoodSnapshot)
361
+ return lastGoodSnapshot;
362
+ if (lastGoodSnapshot)
363
+ return lastGoodSnapshot;
364
+ const packaged = loadRuntimeProfile(DEFAULT_RUNTIME_PROFILE_PATH);
365
+ if (packaged.ok && lastGoodSnapshot)
366
+ return lastGoodSnapshot;
367
+ throw new Error(`Packaged ACE runtime profile is invalid: ${(packaged.ok ? [] : packaged.errors).join("; ")}`);
368
+ }
369
+ function resolveTemplatePath(context, path) {
370
+ return path.split(".").reduce((value, segment) => {
371
+ if (!value || typeof value !== "object")
372
+ return undefined;
373
+ return value[segment];
374
+ }, context);
375
+ }
376
+ function stringifyTemplateValue(value) {
377
+ if (value === null)
378
+ return "null";
379
+ if (value === undefined)
380
+ return "";
381
+ if (typeof value === "string")
382
+ return value;
383
+ if (typeof value === "number" || typeof value === "boolean")
384
+ return String(value);
385
+ return JSON.stringify(value);
386
+ }
387
+ export function validateRuntimeProfileContent(raw) {
388
+ try {
389
+ parseRuntimeProfileContent(raw);
390
+ return { ok: true, schema: RUNTIME_PROFILE_SCHEMA_NAME };
391
+ }
392
+ catch (error) {
393
+ return {
394
+ ok: false,
395
+ schema: RUNTIME_PROFILE_SCHEMA_NAME,
396
+ errors: [error instanceof Error ? error.message : String(error)],
397
+ };
398
+ }
399
+ }
400
+ export function loadRuntimeProfile(explicitPath) {
401
+ const target = resolveRuntimeProfileTarget(explicitPath);
402
+ if (target.mode === "file" && !existsSync(target.path)) {
403
+ return {
404
+ ok: false,
405
+ schema: RUNTIME_PROFILE_SCHEMA_NAME,
406
+ path: target.path,
407
+ source: target.source,
408
+ cache_hit: false,
409
+ errors: [`Runtime profile file not found: ${target.path}`],
410
+ };
411
+ }
412
+ const virtualStore = target.mode === "store" ? parseVirtualStorePath(target.path) : undefined;
413
+ const raw = target.mode === "store"
414
+ ? virtualStore
415
+ ? readStoreBlobByPathSync(virtualStore.storePath, target.key ?? "")
416
+ : readStoreBlobSync(resolveWorkspaceRoot(), target.key ?? "")
417
+ : readFileSync(target.path, "utf-8");
418
+ if (typeof raw !== "string") {
419
+ return {
420
+ ok: false,
421
+ schema: RUNTIME_PROFILE_SCHEMA_NAME,
422
+ path: target.path,
423
+ source: target.source,
424
+ cache_hit: false,
425
+ errors: [`Runtime profile store entry not found: ${target.key ?? target.path}`],
426
+ };
427
+ }
428
+ const signature = target.mode === "store"
429
+ ? (() => {
430
+ const storePath = virtualStore?.storePath ?? getWorkspaceStorePath(resolveWorkspaceRoot());
431
+ const storeStat = getStoreStatSync(storePath);
432
+ return {
433
+ mtime_ms: storeStat?.mtimeMs ?? 0,
434
+ size: storeStat?.size ?? raw.length,
435
+ content_sha256: hashContent(raw),
436
+ };
437
+ })()
438
+ : computeSignature(target.path, raw);
439
+ const currentSignatureKey = signatureKey(signature);
440
+ if (lastLoadCache &&
441
+ lastLoadCache.path === target.path &&
442
+ lastLoadCache.source === target.source &&
443
+ lastLoadCache.signature_key === currentSignatureKey) {
444
+ return { ...lastLoadCache.result, cache_hit: true };
445
+ }
446
+ try {
447
+ const parsed = parseRuntimeProfileContent(raw);
448
+ const snapshot = {
449
+ path: target.path,
450
+ source: target.source,
451
+ profile: parsed.profile,
452
+ prompt_template: parsed.prompt_template,
453
+ signature,
454
+ };
455
+ const result = {
456
+ ok: true,
457
+ schema: RUNTIME_PROFILE_SCHEMA_NAME,
458
+ cache_hit: false,
459
+ ...snapshot,
460
+ };
461
+ const eventType = lastGoodSnapshot
462
+ ? "RUNTIME_PROFILE_RELOADED"
463
+ : "RUNTIME_PROFILE_LOADED";
464
+ lastGoodSnapshot = snapshot;
465
+ lastLoadCache = {
466
+ path: target.path,
467
+ source: target.source,
468
+ signature_key: currentSignatureKey,
469
+ result,
470
+ };
471
+ emitRuntimeProfileEvent(eventType, {
472
+ path: target.path,
473
+ source: target.source,
474
+ signature,
475
+ });
476
+ return result;
477
+ }
478
+ catch (error) {
479
+ const result = {
480
+ ok: false,
481
+ schema: RUNTIME_PROFILE_SCHEMA_NAME,
482
+ path: target.path,
483
+ source: target.source,
484
+ cache_hit: false,
485
+ signature,
486
+ errors: [error instanceof Error ? error.message : String(error)],
487
+ };
488
+ lastLoadCache = {
489
+ path: target.path,
490
+ source: target.source,
491
+ signature_key: currentSignatureKey,
492
+ result,
493
+ };
494
+ emitRuntimeProfileEvent("RUNTIME_PROFILE_INVALID", {
495
+ path: target.path,
496
+ source: target.source,
497
+ signature,
498
+ errors: result.errors,
499
+ });
500
+ return result;
501
+ }
502
+ }
503
+ export function readRuntimeProfile() {
504
+ return ensureLastGoodSnapshot().profile;
505
+ }
506
+ export function readRuntimePromptTemplate() {
507
+ return ensureLastGoodSnapshot().prompt_template;
508
+ }
509
+ export function readRuntimeProfileState() {
510
+ return ensureLastGoodSnapshot();
511
+ }
512
+ export function renderRuntimePrompt(templateContext) {
513
+ const active = ensureLastGoodSnapshot();
514
+ const renderContext = {
515
+ ...active.profile,
516
+ runtime_profile_path: active.path,
517
+ runtime_profile_source: active.source,
518
+ prompt_template: active.prompt_template,
519
+ ...templateContext,
520
+ };
521
+ return active.prompt_template.replace(/{{\s*([A-Za-z0-9_.-]+)\s*}}/g, (match, token) => {
522
+ const value = resolveTemplatePath(renderContext, token);
523
+ return value === undefined ? match : stringifyTemplateValue(value);
524
+ });
525
+ }
526
+ export function getRuntimeProfilePath() {
527
+ return ensureLastGoodSnapshot().path;
528
+ }
529
+ export function getRuntimeProfileSchemaPath() {
530
+ return DEFAULT_RUNTIME_PROFILE_SCHEMA_PATH;
531
+ }
532
+ //# sourceMappingURL=runtime-profile.js.map