@undefineds.co/xpod 0.2.45 → 0.3.1

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 (414) hide show
  1. package/dist/agents/AgentExecutorFactory.js +12 -13
  2. package/dist/agents/AgentExecutorFactory.js.map +1 -1
  3. package/dist/agents/config/agent-meta-schema.d.ts +31 -3
  4. package/dist/agents/config/agent-meta-schema.js +37 -3
  5. package/dist/agents/config/agent-meta-schema.js.map +1 -1
  6. package/dist/agents/config/index.d.ts +5 -5
  7. package/dist/agents/config/index.js +7 -6
  8. package/dist/agents/config/index.js.map +1 -1
  9. package/dist/agents/config/parse-agent-instructions.d.ts +12 -0
  10. package/dist/agents/config/parse-agent-instructions.js +23 -0
  11. package/dist/agents/config/parse-agent-instructions.js.map +1 -0
  12. package/dist/agents/config/resolve.d.ts +7 -12
  13. package/dist/agents/config/resolve.js +272 -156
  14. package/dist/agents/config/resolve.js.map +1 -1
  15. package/dist/agents/config/types.d.ts +33 -36
  16. package/dist/agents/config/types.js +4 -4
  17. package/dist/agents/config/types.js.map +1 -1
  18. package/dist/agents/index.d.ts +2 -7
  19. package/dist/agents/index.js +4 -14
  20. package/dist/agents/index.js.map +1 -1
  21. package/dist/agents/types.d.ts +2 -2
  22. package/dist/agents/types.js.map +1 -1
  23. package/dist/ai/service/CredentialReaderImpl.js +9 -14
  24. package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
  25. package/dist/api/ApiServer.d.ts +7 -0
  26. package/dist/api/ApiServer.js +5 -1
  27. package/dist/api/ApiServer.js.map +1 -1
  28. package/dist/api/chatkit/default-agent.js +1 -1
  29. package/dist/api/chatkit/default-agent.js.map +1 -1
  30. package/dist/api/chatkit/index.d.ts +8 -0
  31. package/dist/api/chatkit/index.js +15 -1
  32. package/dist/api/chatkit/index.js.map +1 -1
  33. package/dist/api/chatkit/pod-store.d.ts +80 -17
  34. package/dist/api/chatkit/pod-store.js +816 -162
  35. package/dist/api/chatkit/pod-store.js.map +1 -1
  36. package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +41 -0
  37. package/dist/api/chatkit/runtime/AcpAgentRuntime.js +573 -0
  38. package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -0
  39. package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +27 -0
  40. package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +157 -0
  41. package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -0
  42. package/dist/api/chatkit/schema.d.ts +53 -133
  43. package/dist/api/chatkit/schema.js +11 -175
  44. package/dist/api/chatkit/schema.js.map +1 -1
  45. package/dist/api/chatkit/service.d.ts +15 -9
  46. package/dist/api/chatkit/service.js +82 -234
  47. package/dist/api/chatkit/service.js.map +1 -1
  48. package/dist/api/chatkit/store.d.ts +35 -3
  49. package/dist/api/chatkit/store.js +157 -3
  50. package/dist/api/chatkit/store.js.map +1 -1
  51. package/dist/api/chatkit/types.d.ts +16 -2
  52. package/dist/api/chatkit/types.js +24 -5
  53. package/dist/api/chatkit/types.js.map +1 -1
  54. package/dist/api/container/common.js +59 -2
  55. package/dist/api/container/common.js.map +1 -1
  56. package/dist/api/container/index.js +15 -0
  57. package/dist/api/container/index.js.map +1 -1
  58. package/dist/api/container/routes.js +11 -0
  59. package/dist/api/container/routes.js.map +1 -1
  60. package/dist/api/container/types.d.ts +26 -0
  61. package/dist/api/container/types.js.map +1 -1
  62. package/dist/api/handlers/InngestHandler.d.ts +11 -0
  63. package/dist/api/handlers/InngestHandler.js +19 -0
  64. package/dist/api/handlers/InngestHandler.js.map +1 -0
  65. package/dist/api/handlers/RunHandler.d.ts +7 -0
  66. package/dist/api/handlers/RunHandler.js +169 -0
  67. package/dist/api/handlers/RunHandler.js.map +1 -0
  68. package/dist/api/handlers/index.d.ts +1 -0
  69. package/dist/api/handlers/index.js +1 -0
  70. package/dist/api/handlers/index.js.map +1 -1
  71. package/dist/api/models/namespaces.d.ts +2 -2
  72. package/dist/api/models/namespaces.js +1 -4
  73. package/dist/api/models/namespaces.js.map +1 -1
  74. package/dist/api/runs/AgentRuntimeTypes.d.ts +83 -0
  75. package/dist/api/runs/AgentRuntimeTypes.js +3 -0
  76. package/dist/api/runs/AgentRuntimeTypes.js.map +1 -0
  77. package/dist/api/runs/EmbeddedInngestService.d.ts +47 -0
  78. package/dist/api/runs/EmbeddedInngestService.js +203 -0
  79. package/dist/api/runs/EmbeddedInngestService.js.map +1 -0
  80. package/dist/api/runs/InngestRunExecutionBackend.d.ts +416 -0
  81. package/dist/api/runs/InngestRunExecutionBackend.js +225 -0
  82. package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -0
  83. package/dist/api/runs/ManagedRunWorker.d.ts +52 -0
  84. package/dist/api/runs/ManagedRunWorker.js +452 -0
  85. package/dist/api/runs/ManagedRunWorker.js.map +1 -0
  86. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +66 -0
  87. package/dist/api/runs/PiAgentRuntimeDriver.js +614 -0
  88. package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -0
  89. package/dist/api/runs/PiAgentRuntimeWorker.d.ts +1 -0
  90. package/dist/api/runs/PiAgentRuntimeWorker.js +33 -0
  91. package/dist/api/runs/PiAgentRuntimeWorker.js.map +1 -0
  92. package/dist/api/runs/RunAuthContextRegistry.d.ts +19 -0
  93. package/dist/api/runs/RunAuthContextRegistry.js +59 -0
  94. package/dist/api/runs/RunAuthContextRegistry.js.map +1 -0
  95. package/dist/api/runs/RunExecutionBackend.d.ts +57 -0
  96. package/dist/api/runs/RunExecutionBackend.js +3 -0
  97. package/dist/api/runs/RunExecutionBackend.js.map +1 -0
  98. package/dist/api/runs/RunStateCenter.d.ts +82 -0
  99. package/dist/api/runs/RunStateCenter.js +665 -0
  100. package/dist/api/runs/RunStateCenter.js.map +1 -0
  101. package/dist/api/runs/schema.d.ts +55 -0
  102. package/dist/api/runs/schema.js +14 -0
  103. package/dist/api/runs/schema.js.map +1 -0
  104. package/dist/api/runs/store.d.ts +105 -0
  105. package/dist/api/runs/store.js +116 -0
  106. package/dist/api/runs/store.js.map +1 -0
  107. package/dist/api/runtime.d.ts +2 -0
  108. package/dist/api/runtime.js +40 -1
  109. package/dist/api/runtime.js.map +1 -1
  110. package/dist/api/service/VectorStoreService.d.ts +1 -0
  111. package/dist/api/service/VectorStoreService.js +27 -34
  112. package/dist/api/service/VectorStoreService.js.map +1 -1
  113. package/dist/api/service/provider-registry.d.ts +1 -1
  114. package/dist/api/service/provider-registry.js +1 -1
  115. package/dist/api/service/provider-registry.js.map +1 -1
  116. package/dist/api/tasks/InngestTaskScheduler.d.ts +751 -0
  117. package/dist/api/tasks/InngestTaskScheduler.js +209 -0
  118. package/dist/api/tasks/InngestTaskScheduler.js.map +1 -0
  119. package/dist/api/tasks/TaskAuthBinding.d.ts +68 -0
  120. package/dist/api/tasks/TaskAuthBinding.js +162 -0
  121. package/dist/api/tasks/TaskAuthBinding.js.map +1 -0
  122. package/dist/api/tasks/TaskMaterializer.d.ts +55 -0
  123. package/dist/api/tasks/TaskMaterializer.js +452 -0
  124. package/dist/api/tasks/TaskMaterializer.js.map +1 -0
  125. package/dist/api/tasks/TaskService.d.ts +57 -0
  126. package/dist/api/tasks/TaskService.js +235 -0
  127. package/dist/api/tasks/TaskService.js.map +1 -0
  128. package/dist/api/tasks/index.d.ts +6 -0
  129. package/dist/api/tasks/index.js +25 -0
  130. package/dist/api/tasks/index.js.map +1 -0
  131. package/dist/api/tasks/schema.d.ts +23 -0
  132. package/dist/api/tasks/schema.js +8 -0
  133. package/dist/api/tasks/schema.js.map +1 -0
  134. package/dist/api/tasks/store.d.ts +40 -0
  135. package/dist/api/tasks/store.js +34 -0
  136. package/dist/api/tasks/store.js.map +1 -0
  137. package/dist/api/workspace/types.d.ts +3 -0
  138. package/dist/api/workspace/types.js +23 -0
  139. package/dist/api/workspace/types.js.map +1 -0
  140. package/dist/cli/commands/config.d.ts +8 -7
  141. package/dist/cli/commands/config.js +72 -48
  142. package/dist/cli/commands/config.js.map +1 -1
  143. package/dist/cli/commands/login.d.ts +10 -8
  144. package/dist/cli/commands/login.js +84 -84
  145. package/dist/cli/commands/login.js.map +1 -1
  146. package/dist/cli/index.js +3 -124
  147. package/dist/cli/index.js.map +1 -1
  148. package/dist/http/search/SearchHttpHandler.js +13 -18
  149. package/dist/http/search/SearchHttpHandler.js.map +1 -1
  150. package/dist/storage/vector/VectorIndexingListener.js +13 -18
  151. package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
  152. package/dist/vocab/index.d.ts +2 -6
  153. package/dist/vocab/index.js +2 -6
  154. package/dist/vocab/index.js.map +1 -1
  155. package/dist/vocab/udfs.d.ts +12 -0
  156. package/dist/vocab/udfs.js +12 -0
  157. package/dist/vocab/udfs.js.map +1 -1
  158. package/node_modules/@undefineds.co/drizzle-solid/README.md +52 -24
  159. package/node_modules/@undefineds.co/drizzle-solid/README.zh-CN.md +30 -24
  160. package/node_modules/@undefineds.co/drizzle-solid/dist/core/discovery/types.d.ts +6 -2
  161. package/node_modules/@undefineds.co/drizzle-solid/dist/core/discovery/types.d.ts.map +1 -1
  162. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts +1 -0
  163. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts.map +1 -1
  164. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js +43 -10
  165. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js.map +1 -1
  166. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.d.ts.map +1 -1
  167. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.js +1 -0
  168. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.js.map +1 -1
  169. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.d.ts +5 -0
  170. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.d.ts.map +1 -1
  171. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.js +44 -13
  172. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.js.map +1 -1
  173. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts +1 -0
  174. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts.map +1 -1
  175. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js +21 -2
  176. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js.map +1 -1
  177. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/types.d.ts +1 -0
  178. package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/types.d.ts.map +1 -1
  179. package/node_modules/@undefineds.co/drizzle-solid/dist/core/expressions.d.ts +1 -1
  180. package/node_modules/@undefineds.co/drizzle-solid/dist/core/expressions.d.ts.map +1 -1
  181. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.d.ts +76 -41
  182. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.d.ts.map +1 -1
  183. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js +443 -114
  184. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js.map +1 -1
  185. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.d.ts +28 -1
  186. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.d.ts.map +1 -1
  187. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.js +142 -31
  188. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.js.map +1 -1
  189. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.d.ts +3 -0
  190. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.d.ts.map +1 -1
  191. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.js +84 -6
  192. package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.js.map +1 -1
  193. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.d.ts +3 -0
  194. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.d.ts.map +1 -1
  195. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.js +29 -9
  196. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.js.map +1 -1
  197. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts +2 -8
  198. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
  199. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +19 -51
  200. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
  201. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/types.d.ts +1 -0
  202. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/types.d.ts.map +1 -1
  203. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-conditions.d.ts +2 -2
  204. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-conditions.d.ts.map +1 -1
  205. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js +6 -6
  206. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js.map +1 -1
  207. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.d.ts +4 -4
  208. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.d.ts.map +1 -1
  209. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.js +56 -23
  210. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.js.map +1 -1
  211. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.d.ts +14 -10
  212. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.d.ts.map +1 -1
  213. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.js +55 -23
  214. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.js.map +1 -1
  215. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.d.ts +3 -3
  216. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.js +6 -6
  217. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.js.map +1 -1
  218. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.d.ts +3 -3
  219. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.js +4 -4
  220. package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.js.map +1 -1
  221. package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.d.ts.map +1 -1
  222. package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.js +33 -8
  223. package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.js.map +1 -1
  224. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/defs.d.ts +11 -2
  225. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/defs.d.ts.map +1 -1
  226. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.d.ts.map +1 -1
  227. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.js +3 -2
  228. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.js.map +1 -1
  229. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.d.ts +13 -8
  230. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.d.ts.map +1 -1
  231. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.js +24 -22
  232. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.js.map +1 -1
  233. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.d.ts +3 -0
  234. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.d.ts.map +1 -1
  235. package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.js.map +1 -1
  236. package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.d.ts +3 -2
  237. package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.d.ts.map +1 -1
  238. package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.js +28 -14
  239. package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.js.map +1 -1
  240. package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.d.ts.map +1 -1
  241. package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.js +3 -2
  242. package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.js.map +1 -1
  243. package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.d.ts +9 -9
  244. package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.d.ts.map +1 -1
  245. package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.js +56 -22
  246. package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.js.map +1 -1
  247. package/node_modules/@undefineds.co/drizzle-solid/dist/driver.d.ts +9 -1
  248. package/node_modules/@undefineds.co/drizzle-solid/dist/driver.d.ts.map +1 -1
  249. package/node_modules/@undefineds.co/drizzle-solid/dist/driver.js +2 -0
  250. package/node_modules/@undefineds.co/drizzle-solid/dist/driver.js.map +1 -1
  251. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/discovery/types.d.ts +6 -2
  252. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/discovery/types.d.ts.map +1 -1
  253. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts +1 -0
  254. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
  255. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js +43 -10
  256. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js.map +1 -1
  257. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.d.ts.map +1 -1
  258. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.js +1 -0
  259. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.js.map +1 -1
  260. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.d.ts +5 -0
  261. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.d.ts.map +1 -1
  262. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.js +44 -13
  263. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.js.map +1 -1
  264. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts +1 -0
  265. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
  266. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js +21 -2
  267. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js.map +1 -1
  268. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/types.d.ts +1 -0
  269. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/types.d.ts.map +1 -1
  270. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/expressions.d.ts +1 -1
  271. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/expressions.d.ts.map +1 -1
  272. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.d.ts +76 -41
  273. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.d.ts.map +1 -1
  274. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js +443 -114
  275. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js.map +1 -1
  276. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.d.ts +28 -1
  277. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.d.ts.map +1 -1
  278. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.js +142 -31
  279. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.js.map +1 -1
  280. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.d.ts +3 -0
  281. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.d.ts.map +1 -1
  282. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.js +84 -6
  283. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.js.map +1 -1
  284. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.d.ts +3 -0
  285. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.d.ts.map +1 -1
  286. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.js +29 -9
  287. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.js.map +1 -1
  288. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts +2 -8
  289. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
  290. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +19 -51
  291. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
  292. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/types.d.ts +1 -0
  293. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/types.d.ts.map +1 -1
  294. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-conditions.d.ts +2 -2
  295. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-conditions.d.ts.map +1 -1
  296. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js +6 -6
  297. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js.map +1 -1
  298. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.d.ts +4 -4
  299. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.d.ts.map +1 -1
  300. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.js +56 -23
  301. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.js.map +1 -1
  302. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.d.ts +14 -10
  303. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.d.ts.map +1 -1
  304. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.js +55 -23
  305. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.js.map +1 -1
  306. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.d.ts +3 -3
  307. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.js +6 -6
  308. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.js.map +1 -1
  309. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.d.ts +3 -3
  310. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.js +4 -4
  311. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.js.map +1 -1
  312. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.d.ts.map +1 -1
  313. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.js +33 -8
  314. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.js.map +1 -1
  315. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/defs.d.ts +11 -2
  316. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/defs.d.ts.map +1 -1
  317. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.d.ts.map +1 -1
  318. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.js +3 -2
  319. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.js.map +1 -1
  320. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.d.ts +13 -8
  321. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.d.ts.map +1 -1
  322. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.js +24 -22
  323. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.js.map +1 -1
  324. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.d.ts +3 -0
  325. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.d.ts.map +1 -1
  326. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.js.map +1 -1
  327. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.d.ts +3 -2
  328. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.d.ts.map +1 -1
  329. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.js +28 -14
  330. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.js.map +1 -1
  331. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.d.ts.map +1 -1
  332. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.js +3 -2
  333. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.js.map +1 -1
  334. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.d.ts +9 -9
  335. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.d.ts.map +1 -1
  336. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.js +56 -22
  337. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.js.map +1 -1
  338. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.d.ts +9 -1
  339. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.d.ts.map +1 -1
  340. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.js +2 -0
  341. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.js.map +1 -1
  342. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/pod.d.ts +16 -2
  343. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/pod.d.ts.map +1 -1
  344. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/utils/find-by-iri.js +1 -1
  345. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/utils/find-by-iri.js.map +1 -1
  346. package/node_modules/@undefineds.co/drizzle-solid/dist/pod.d.ts +16 -2
  347. package/node_modules/@undefineds.co/drizzle-solid/dist/pod.d.ts.map +1 -1
  348. package/node_modules/@undefineds.co/drizzle-solid/dist/utils/find-by-iri.js +1 -1
  349. package/node_modules/@undefineds.co/drizzle-solid/dist/utils/find-by-iri.js.map +1 -1
  350. package/node_modules/@undefineds.co/drizzle-solid/package.json +1 -1
  351. package/package.json +9 -3
  352. package/dist/agents/AgentManager.d.ts +0 -116
  353. package/dist/agents/AgentManager.js +0 -290
  354. package/dist/agents/AgentManager.js.map +0 -1
  355. package/dist/agents/IndexAgent.d.ts +0 -70
  356. package/dist/agents/IndexAgent.js +0 -417
  357. package/dist/agents/IndexAgent.js.map +0 -1
  358. package/dist/agents/config/parse-agent-md.d.ts +0 -33
  359. package/dist/agents/config/parse-agent-md.js +0 -75
  360. package/dist/agents/config/parse-agent-md.js.map +0 -1
  361. package/dist/agents/schema/agent-config.d.ts +0 -2
  362. package/dist/agents/schema/agent-config.js +0 -32
  363. package/dist/agents/schema/agent-config.js.map +0 -1
  364. package/dist/agents/schema/create-agent-schema.d.ts +0 -25
  365. package/dist/agents/schema/create-agent-schema.js +0 -35
  366. package/dist/agents/schema/create-agent-schema.js.map +0 -1
  367. package/dist/api/chatkit/runtime/PtyThreadRuntime.d.ts +0 -127
  368. package/dist/api/chatkit/runtime/PtyThreadRuntime.js +0 -791
  369. package/dist/api/chatkit/runtime/PtyThreadRuntime.js.map +0 -1
  370. package/dist/cli/lib/agent-session.d.ts +0 -37
  371. package/dist/cli/lib/agent-session.js +0 -211
  372. package/dist/cli/lib/agent-session.js.map +0 -1
  373. package/dist/cli/lib/ensure-ai-credentials.d.ts +0 -13
  374. package/dist/cli/lib/ensure-ai-credentials.js +0 -40
  375. package/dist/cli/lib/ensure-ai-credentials.js.map +0 -1
  376. package/dist/cli/lib/model-manager.d.ts +0 -37
  377. package/dist/cli/lib/model-manager.js +0 -251
  378. package/dist/cli/lib/model-manager.js.map +0 -1
  379. package/dist/cli/lib/oauth-credential-manager.d.ts +0 -37
  380. package/dist/cli/lib/oauth-credential-manager.js +0 -129
  381. package/dist/cli/lib/oauth-credential-manager.js.map +0 -1
  382. package/dist/cli/lib/oauth-providers/codebuddy.d.ts +0 -25
  383. package/dist/cli/lib/oauth-providers/codebuddy.js +0 -69
  384. package/dist/cli/lib/oauth-providers/codebuddy.js.map +0 -1
  385. package/dist/cli/lib/oauth-providers/index.d.ts +0 -12
  386. package/dist/cli/lib/oauth-providers/index.js +0 -23
  387. package/dist/cli/lib/oauth-providers/index.js.map +0 -1
  388. package/dist/cli/lib/pi-optional.d.ts +0 -84
  389. package/dist/cli/lib/pi-optional.js +0 -35
  390. package/dist/cli/lib/pi-optional.js.map +0 -1
  391. package/dist/cli/lib/pod-ai-config.d.ts +0 -26
  392. package/dist/cli/lib/pod-ai-config.js +0 -99
  393. package/dist/cli/lib/pod-ai-config.js.map +0 -1
  394. package/dist/cli/lib/pod-thread-store.d.ts +0 -57
  395. package/dist/cli/lib/pod-thread-store.js +0 -312
  396. package/dist/cli/lib/pod-thread-store.js.map +0 -1
  397. package/dist/cli/lib/secretary-prompt.d.ts +0 -6
  398. package/dist/cli/lib/secretary-prompt.js +0 -85
  399. package/dist/cli/lib/secretary-prompt.js.map +0 -1
  400. package/dist/task/DrizzleTaskQueue.d.ts +0 -56
  401. package/dist/task/DrizzleTaskQueue.js +0 -171
  402. package/dist/task/DrizzleTaskQueue.js.map +0 -1
  403. package/dist/task/TaskExecutor.d.ts +0 -82
  404. package/dist/task/TaskExecutor.js +0 -198
  405. package/dist/task/TaskExecutor.js.map +0 -1
  406. package/dist/task/index.d.ts +0 -10
  407. package/dist/task/index.js +0 -20
  408. package/dist/task/index.js.map +0 -1
  409. package/dist/task/schema.d.ts +0 -53
  410. package/dist/task/schema.js +0 -71
  411. package/dist/task/schema.js.map +0 -1
  412. package/dist/task/types.d.ts +0 -186
  413. package/dist/task/types.js +0 -12
  414. package/dist/task/types.js.map +0 -1
@@ -2,29 +2,42 @@
2
2
  /**
3
3
  * Agent Config Resolver
4
4
  *
5
- * Reads /agents/{agentId}/AGENT.md + /agents/{agentId}/.meta from Pod,
6
- * resolves provider/credential/model URIs, and assembles a ResolvedAgentConfig.
7
- *
8
- * Flow:
9
- * 1. Fetch AGENT.md parse frontmatter + body
10
- * 2. Query .meta TTL → get provider/credential/model URIs
11
- * 3. Resolve URIs → Provider, Credential, Model records
12
- * 4. Fetch skills (if any) → concatenate prompt content
13
- * 5. Convert MCP server defs → McpServerConfig map
14
- * 6. Return ResolvedAgentConfig
5
+ * Reads a Pod-hosted Agent Profile:
6
+ * - /agents/{agentId}/AGENTS.md is plain Markdown guidance.
7
+ * - /agents/{agentId}/.meta#config is RDF runtime config.
8
+ * - Skill refs point at shared SKILL.md documents in Pod storage.
9
+ * - MCP servers are structured config entries, not mcp/*.json files.
15
10
  */
16
11
  Object.defineProperty(exports, "__esModule", { value: true });
17
12
  exports.resolveAgentConfig = resolveAgentConfig;
18
13
  const global_logger_factory_1 = require("global-logger-factory");
19
14
  const drizzle_solid_1 = require("@undefineds.co/drizzle-solid");
20
- const parse_agent_md_1 = require("./parse-agent-md");
21
15
  const agent_meta_schema_1 = require("./agent-meta-schema");
16
+ const parse_agent_instructions_1 = require("./parse-agent-instructions");
22
17
  const provider_1 = require("../../ai/schema/provider");
23
18
  const tables_1 = require("../../credential/schema/tables");
24
19
  const model_1 = require("../../ai/schema/model");
25
20
  const logger = (0, global_logger_factory_1.getLoggerFor)('AgentConfigResolver');
26
- function isExecutorType(value) {
27
- return value === 'codebuddy' || value === 'claude';
21
+ const AGENT_META_RESOURCE_ID = '.meta#config';
22
+ function isRuntimeKind(value) {
23
+ return value === 'codebuddy' || value === 'claude' || value === 'codex';
24
+ }
25
+ function createPodDb(ctx, agentId) {
26
+ const agentMeta = createAgentMetaTable(agentId);
27
+ return (0, drizzle_solid_1.drizzle)({
28
+ info: {
29
+ isLoggedIn: true,
30
+ webId: ctx.webId,
31
+ },
32
+ fetch: ctx.authenticatedFetch,
33
+ }, {
34
+ schema: {
35
+ agentConfig: agentMeta,
36
+ provider: provider_1.Provider,
37
+ credential: tables_1.Credential,
38
+ model: model_1.Model,
39
+ },
40
+ });
28
41
  }
29
42
  async function resolveModelId(db, modelRef) {
30
43
  if (!modelRef) {
@@ -36,161 +49,210 @@ async function resolveModelId(db, modelRef) {
36
49
  /**
37
50
  * Resolve a complete agent config from Pod storage.
38
51
  *
39
- * @param agentId - Agent folder name (e.g. 'secretary')
52
+ * @param agentId - Agent folder name, for example "secretary"
40
53
  * @param ctx - Pod access context
41
- * @returns Fully resolved config, or null if agent not found / disabled
54
+ * @returns Fully resolved config, or null if agent is missing / disabled / invalid
42
55
  */
43
56
  async function resolveAgentConfig(agentId, ctx) {
44
- const { podBaseUrl, authenticatedFetch, webId } = ctx;
45
- // 1. Fetch AGENT.md
46
- const agentMdUrl = new URL(`/agents/${agentId}/AGENT.md`, podBaseUrl).href;
47
- const mdResponse = await authenticatedFetch(agentMdUrl);
48
- let frontmatter = {};
49
- let promptFromMarkdown = '';
50
- if (mdResponse.ok) {
51
- const mdContent = await mdResponse.text();
52
- const parsed = (0, parse_agent_md_1.parseAgentMd)(mdContent);
53
- frontmatter = parsed.frontmatter;
54
- promptFromMarkdown = parsed.body;
55
- }
56
- else {
57
- logger.warn(`AGENT.md not found for ${agentId}: ${mdResponse.status}, fallback to Pod metadata`);
58
- }
59
- // 2. Query .meta
60
- const metaTable = agent_meta_schema_1.AgentMetaSchema.table('AgentMeta', {
57
+ const db = createPodDb(ctx, agentId);
58
+ return new AgentConfigResolver(agentId, db, db.schema?.agentConfig ?? createAgentMetaTable(agentId), new PodAgentResourceLoader({ agentId, ...ctx })).resolve();
59
+ }
60
+ class AgentConfigResolver {
61
+ constructor(agentId, db, metaTable, resources) {
62
+ this.agentId = agentId;
63
+ this.db = db;
64
+ this.metaTable = metaTable;
65
+ this.resources = resources;
66
+ }
67
+ async resolve() {
68
+ const metaRecord = await this.db.findById(this.metaTable, AGENT_META_RESOURCE_ID);
69
+ if (!metaRecord) {
70
+ logger.warn(`Agent config not found for ${this.agentId}: ${AGENT_META_RESOURCE_ID}`);
71
+ return null;
72
+ }
73
+ if (metaRecord.enabled === 'false') {
74
+ return null;
75
+ }
76
+ const providerUri = metaRecord.provider;
77
+ if (!providerUri) {
78
+ logger.error(`Agent ${this.agentId} has no provider in .meta`);
79
+ return null;
80
+ }
81
+ const provider = await this.db.findByIri(provider_1.Provider, providerUri);
82
+ if (!provider) {
83
+ logger.error(`Provider not found: ${providerUri}`);
84
+ return null;
85
+ }
86
+ const runtimeKind = metaRecord.runtimeKind;
87
+ if (!isRuntimeKind(runtimeKind)) {
88
+ logger.error(`Agent ${this.agentId} has invalid runtimeKind: ${runtimeKind ?? '(missing)'}`);
89
+ return null;
90
+ }
91
+ const profileResources = await this.resources.load(toStringArray(metaRecord.skills));
92
+ const credential = await this.resolveCredential(metaRecord.credential);
93
+ const modelName = await this.resolveModelName(provider, metaRecord.model);
94
+ const mcpServers = AgentMcpConfig.fromMeta(metaRecord.mcpServers).toRuntimeConfig();
95
+ const systemPrompt = profileResources.instructions || metaRecord.instructions || '';
96
+ return {
97
+ id: this.agentId,
98
+ displayName: metaRecord.name ?? this.agentId,
99
+ description: metaRecord.description,
100
+ systemPrompt,
101
+ executorType: runtimeKind,
102
+ apiKey: credential.apiKey,
103
+ baseUrl: credential.baseUrl ?? provider.baseUrl ?? undefined,
104
+ proxyUrl: credential.proxyUrl,
105
+ model: modelName,
106
+ maxTurns: metaRecord.maxTurns,
107
+ allowedTools: toStringArray(metaRecord.allowedTools),
108
+ disallowedTools: toStringArray(metaRecord.disallowedTools),
109
+ permissionMode: metaRecord.permissionMode,
110
+ mcpServers,
111
+ skillsContent: profileResources.skillsContent,
112
+ skills: profileResources.skills,
113
+ enabled: true,
114
+ };
115
+ }
116
+ async resolveCredential(credentialUri) {
117
+ if (!credentialUri) {
118
+ return { apiKey: '' };
119
+ }
120
+ const credential = await this.db.findByIri(tables_1.Credential, credentialUri);
121
+ if (!credential) {
122
+ logger.warn(`Credential not found: ${credentialUri}`);
123
+ return { apiKey: '' };
124
+ }
125
+ return {
126
+ apiKey: credential.apiKey ?? '',
127
+ baseUrl: credential.baseUrl ?? undefined,
128
+ proxyUrl: credential.proxyUrl ?? undefined,
129
+ };
130
+ }
131
+ async resolveModelName(provider, modelUri) {
132
+ const explicit = await resolveModelId(this.db, modelUri);
133
+ if (explicit) {
134
+ return explicit;
135
+ }
136
+ return resolveModelId(this.db, provider.defaultModel ?? provider.hasModel);
137
+ }
138
+ }
139
+ function createAgentMetaTable(agentId) {
140
+ return agent_meta_schema_1.AgentMetaSchema.table('AgentMeta', {
61
141
  base: `/agents/${agentId}/.meta`,
62
142
  subjectTemplate: '#{id}',
63
143
  });
64
- const session = {
65
- info: { isLoggedIn: true, webId },
66
- fetch: authenticatedFetch,
67
- };
68
- const db = (0, drizzle_solid_1.drizzle)(session, {
69
- schema: {
70
- agentMeta: metaTable,
71
- provider: provider_1.Provider,
72
- credential: tables_1.Credential,
73
- model: model_1.Model,
74
- },
75
- });
76
- const metaRecord = await db.query.agentMeta.findFirst();
77
- if (!metaRecord) {
78
- logger.warn(`.meta not found for agent ${agentId}`);
79
- return null;
80
- }
81
- if (metaRecord.enabled === 'false') {
82
- logger.debug(`Agent ${agentId} is disabled`);
83
- return null;
84
- }
85
- // 3. Resolve provider
86
- const providerUri = metaRecord.provider;
87
- if (!providerUri) {
88
- logger.error(`Agent ${agentId} has no provider in .meta`);
89
- return null;
90
- }
91
- const provider = await db.findByIri(provider_1.Provider, providerUri);
92
- if (!provider) {
93
- logger.error(`Provider not found: ${providerUri}`);
94
- return null;
95
- }
96
- const runtimeKind = metaRecord.runtimeKind;
97
- if (!isExecutorType(runtimeKind)) {
98
- logger.error(`Agent ${agentId} has invalid runtimeKind: ${runtimeKind ?? '(missing)'}`);
99
- return null;
100
- }
101
- // 4. Resolve credential
102
- const credentialUri = metaRecord.credential;
103
- let apiKey = '';
104
- let baseUrl = provider.baseUrl ?? undefined;
105
- let proxyUrl;
106
- if (credentialUri) {
107
- const cred = await db.findByIri(tables_1.Credential, credentialUri);
108
- if (cred) {
109
- apiKey = cred.apiKey ?? '';
110
- baseUrl = cred.baseUrl ?? baseUrl;
111
- proxyUrl = cred.proxyUrl ?? undefined;
112
- }
113
- }
114
- // 5. Resolve model
115
- let modelName = await resolveModelId(db, provider.defaultModel ?? provider.hasModel);
116
- const modelUri = metaRecord.model;
117
- if (modelUri) {
118
- const resolvedModel = await resolveModelId(db, modelUri);
119
- if (resolvedModel) {
120
- modelName = resolvedModel;
121
- }
122
- }
123
- // 6. Resolve skills
124
- const skillsContent = await resolveSkills(frontmatter.skills ?? [], podBaseUrl, agentId, authenticatedFetch);
125
- // 7. Convert MCP server defs
126
- const mcpServers = convertMcpServers(frontmatter['mcp-servers'] ?? []);
127
- // 8. Assemble
128
- const systemPrompt = promptFromMarkdown || metaRecord.instructions || '';
129
- return {
130
- id: agentId,
131
- displayName: metaRecord.name ?? frontmatter.name ?? agentId,
132
- description: metaRecord.description ?? frontmatter.description,
133
- systemPrompt,
134
- executorType: runtimeKind,
135
- apiKey,
136
- baseUrl,
137
- proxyUrl,
138
- model: modelName,
139
- maxTurns: frontmatter['max-turns'] ?? metaRecord.maxTurns,
140
- allowedTools: Array.isArray(frontmatter['allowed-tools'])
141
- ? frontmatter['allowed-tools']
142
- : undefined,
143
- disallowedTools: Array.isArray(frontmatter['disallowed-tools'])
144
- ? frontmatter['disallowed-tools']
145
- : undefined,
146
- permissionMode: frontmatter['permission-mode'],
147
- mcpServers,
148
- skillsContent: skillsContent || undefined,
149
- enabled: metaRecord.enabled !== 'false',
150
- };
151
144
  }
152
- /**
153
- * Resolve skill URIs to concatenated prompt content.
154
- *
155
- * Skills can be:
156
- * - Absolute: /skills/drizzle-solid → fetch /skills/drizzle-solid/SKILL.md
157
- * - Relative: ./skills/custom → fetch /agents/{agentId}/skills/custom/SKILL.md
158
- */
159
- async function resolveSkills(skillRefs, podBaseUrl, agentId, authenticatedFetch) {
160
- if (skillRefs.length === 0)
161
- return '';
162
- const parts = [];
163
- for (const ref of skillRefs) {
164
- const skillPath = ref.startsWith('./')
165
- ? `/agents/${agentId}/${ref.slice(2)}/SKILL.md`
166
- : `${ref}/SKILL.md`;
167
- const url = new URL(skillPath, podBaseUrl).href;
145
+ class PodAgentResourceLoader {
146
+ constructor(options) {
147
+ this.agentId = options.agentId;
148
+ this.podBaseUrl = options.podBaseUrl;
149
+ this.authenticatedFetch = options.authenticatedFetch;
150
+ this.skillRefs = new AgentSkillRefResolver(options.agentId);
151
+ }
152
+ async load(skillRefs) {
153
+ const instructions = await this.fetchAgentInstructions();
154
+ const skills = await this.resolveSkillRefs(skillRefs);
155
+ const skillsContent = skills
156
+ .map((skill) => (0, parse_agent_instructions_1.extractMarkdownBody)(skill.content))
157
+ .filter(Boolean)
158
+ .join('\n\n---\n\n');
159
+ return { instructions, skills, skillsContent: skillsContent || undefined };
160
+ }
161
+ async fetchAgentInstructions() {
162
+ const agentsMdUrl = new URL(`/agents/${this.agentId}/AGENTS.md`, this.podBaseUrl).href;
163
+ const response = await this.authenticatedFetch(agentsMdUrl);
164
+ if (!response.ok) {
165
+ logger.warn(`AGENTS.md not found for ${this.agentId}: ${response.status}, fallback to Pod metadata`);
166
+ return '';
167
+ }
168
+ return (0, parse_agent_instructions_1.parseAgentInstructions)(await response.text());
169
+ }
170
+ async resolveSkillRefs(refs) {
171
+ const skills = [];
172
+ for (const ref of refs) {
173
+ const skill = await this.resolveSkillRef(ref);
174
+ if (skill) {
175
+ skills.push(skill);
176
+ }
177
+ }
178
+ return skills;
179
+ }
180
+ async resolveSkillRef(ref) {
181
+ const resolvedPath = this.skillRefs.resolvePath(ref);
182
+ const url = new URL(resolvedPath, this.podBaseUrl).href;
168
183
  try {
169
- const res = await authenticatedFetch(url);
170
- if (res.ok) {
171
- const content = await res.text();
172
- // Parse SKILL.md — extract body (skip frontmatter)
173
- const { body } = (0, parse_agent_md_1.parseAgentMd)(content);
174
- if (body) {
175
- parts.push(body);
176
- }
184
+ const response = await this.authenticatedFetch(url);
185
+ if (!response.ok) {
186
+ logger.warn(`Agent skill ref not found: ${ref} (${response.status})`);
187
+ return undefined;
177
188
  }
178
- else {
179
- logger.warn(`Skill not found: ${ref} (${res.status})`);
189
+ const content = (await response.text()).trim();
190
+ if (!content) {
191
+ return undefined;
180
192
  }
193
+ return {
194
+ name: this.skillRefs.resolveName(ref, resolvedPath),
195
+ content,
196
+ };
181
197
  }
182
- catch (err) {
183
- logger.warn(`Failed to fetch skill ${ref}:`, err);
198
+ catch (error) {
199
+ logger.warn(`Failed to fetch agent skill ref ${ref}:`, error);
200
+ return undefined;
184
201
  }
185
202
  }
186
- return parts.join('\n\n---\n\n');
187
203
  }
188
- /**
189
- * Convert AGENT.md MCP server definitions to McpServerConfig map.
190
- */
191
- function convertMcpServers(defs) {
192
- const result = {};
193
- for (const def of defs) {
204
+ class AgentMcpConfig {
205
+ static fromMeta(value) {
206
+ return new AgentMcpConfig(this.toMcpServerDefs(value));
207
+ }
208
+ static toMcpServerDefs(value) {
209
+ if (!Array.isArray(value)) {
210
+ return [];
211
+ }
212
+ const defs = [];
213
+ for (const item of value) {
214
+ const parsed = AgentMcpConfig.parseMcpServerDef(item);
215
+ if (parsed) {
216
+ defs.push(parsed);
217
+ }
218
+ }
219
+ return defs;
220
+ }
221
+ static parseMcpServerDef(value) {
222
+ if (AgentMcpConfig.isAgentMcpServerDef(value)) {
223
+ return value;
224
+ }
225
+ if (typeof value !== 'string' || value.trim().length === 0) {
226
+ return undefined;
227
+ }
228
+ const trimmed = value.trim();
229
+ if (!trimmed.startsWith('{')) {
230
+ logger.warn(`Ignoring MCP server file ref '${value}'. Store structured MCP config in .meta instead.`);
231
+ return undefined;
232
+ }
233
+ try {
234
+ const parsed = JSON.parse(trimmed);
235
+ return AgentMcpConfig.isAgentMcpServerDef(parsed) ? parsed : undefined;
236
+ }
237
+ catch (error) {
238
+ logger.warn('Invalid MCP server JSON in .meta:', error);
239
+ return undefined;
240
+ }
241
+ }
242
+ static isAgentMcpServerDef(value) {
243
+ return Boolean(value && typeof value === 'object' && typeof value.name === 'string');
244
+ }
245
+ constructor(defs) {
246
+ this.defs = defs;
247
+ }
248
+ toRuntimeConfig() {
249
+ const result = {};
250
+ for (const def of this.defs) {
251
+ result[def.name] = this.toRuntimeServerConfig(def);
252
+ }
253
+ return result;
254
+ }
255
+ toRuntimeServerConfig(def) {
194
256
  const config = {};
195
257
  if (def.transport) {
196
258
  config.type = def.transport;
@@ -211,8 +273,62 @@ function convertMcpServers(defs) {
211
273
  config.url = def.url;
212
274
  if (def.headers)
213
275
  config.headers = def.headers;
214
- result[def.name] = config;
276
+ return config;
277
+ }
278
+ }
279
+ class AgentSkillRefResolver {
280
+ constructor(agentId) {
281
+ this.agentId = agentId;
282
+ }
283
+ resolvePath(ref) {
284
+ const normalized = this.normalizePackageRef(ref);
285
+ if (normalized.startsWith('/')) {
286
+ if (this.hasKnownMarkdownExtension(normalized)) {
287
+ return normalized;
288
+ }
289
+ return `${normalized}/SKILL.md`;
290
+ }
291
+ const relative = normalized.startsWith('.codex/skills/') || normalized.startsWith('skills/')
292
+ ? normalized
293
+ : `skills/${normalized}`;
294
+ if (this.hasKnownMarkdownExtension(relative)) {
295
+ return `/agents/${this.agentId}/${relative}`;
296
+ }
297
+ return `/agents/${this.agentId}/${relative}/SKILL.md`;
298
+ }
299
+ resolveName(ref, resolvedPath) {
300
+ const raw = this.normalizePackageRef(ref).replace(/\/$/, '');
301
+ if (raw.endsWith('/SKILL.md')) {
302
+ return this.sanitizeSkillName(raw.split('/').slice(-2, -1)[0] ?? 'skill');
303
+ }
304
+ const withoutPrefix = raw
305
+ .replace(/^\/+/, '')
306
+ .replace(/^\.codex\/skills\//, '')
307
+ .replace(/^skills\//, '');
308
+ if (withoutPrefix && !this.hasKnownMarkdownExtension(withoutPrefix)) {
309
+ return this.sanitizeSkillName(withoutPrefix.split('/').filter(Boolean).pop() ?? withoutPrefix);
310
+ }
311
+ const segments = resolvedPath.split('/').filter(Boolean);
312
+ const skillIndex = segments.lastIndexOf('SKILL.md');
313
+ return this.sanitizeSkillName(skillIndex > 0 ? segments[skillIndex - 1] : 'skill');
314
+ }
315
+ normalizePackageRef(ref) {
316
+ return ref.replace(/^\.\/+/, '').replace(/^\/+agents\/[^/]+\//, '/');
317
+ }
318
+ sanitizeSkillName(name) {
319
+ return name.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'skill';
320
+ }
321
+ hasKnownMarkdownExtension(path) {
322
+ return /\.(md|markdown)$/i.test(path);
323
+ }
324
+ }
325
+ function toStringArray(value) {
326
+ if (Array.isArray(value)) {
327
+ return value.filter((item) => typeof item === 'string' && item.length > 0);
328
+ }
329
+ if (typeof value === 'string' && value.length > 0) {
330
+ return [value];
215
331
  }
216
- return result;
332
+ return [];
217
333
  }
218
334
  //# sourceMappingURL=resolve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/agents/config/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Config Resolver\n *\n * Reads /agents/{agentId}/AGENT.md + /agents/{agentId}/.meta from Pod,\n * resolves provider/credential/model URIs, and assembles a ResolvedAgentConfig.\n *\n * Flow:\n * 1. Fetch AGENT.md → parse frontmatter + body\n * 2. Query .meta TTL → get provider/credential/model URIs\n * 3. Resolve URIs → Provider, Credential, Model records\n * 4. Fetch skills (if any) → concatenate prompt content\n * 5. Convert MCP server defs → McpServerConfig map\n * 6. Return ResolvedAgentConfig\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { drizzle } from '@undefineds.co/drizzle-solid';\nimport { parseAgentMd } from './parse-agent-md';\nimport { AgentMetaSchema } from './agent-meta-schema';\nimport { Provider } from '../../ai/schema/provider';\nimport { Credential } from '../../credential/schema/tables';\nimport { Model } from '../../ai/schema/model';\nimport type { ResolvedAgentConfig, AgentMcpServerDef } from './types';\nimport type { ExecutorType } from '../types';\nimport type { McpServerConfig } from '../types';\n\nconst logger = getLoggerFor('AgentConfigResolver');\n\nfunction isExecutorType(value: string | undefined): value is ExecutorType {\n return value === 'codebuddy' || value === 'claude';\n}\n\nasync function resolveModelId(\n db: any,\n modelRef: string | null | undefined,\n): Promise<string | undefined> {\n if (!modelRef) {\n return undefined;\n }\n\n const modelRecord = await db.findByIri(Model, modelRef);\n return modelRecord?.id ?? undefined;\n}\n\ninterface ResolveContext {\n podBaseUrl: string;\n authenticatedFetch: typeof fetch;\n webId?: string;\n}\n\n/**\n * Resolve a complete agent config from Pod storage.\n *\n * @param agentId - Agent folder name (e.g. 'secretary')\n * @param ctx - Pod access context\n * @returns Fully resolved config, or null if agent not found / disabled\n */\nexport async function resolveAgentConfig(\n agentId: string,\n ctx: ResolveContext,\n): Promise<ResolvedAgentConfig | null> {\n const { podBaseUrl, authenticatedFetch, webId } = ctx;\n\n // 1. Fetch AGENT.md\n const agentMdUrl = new URL(`/agents/${agentId}/AGENT.md`, podBaseUrl).href;\n const mdResponse = await authenticatedFetch(agentMdUrl);\n let frontmatter: ReturnType<typeof parseAgentMd>['frontmatter'] = {};\n let promptFromMarkdown = '';\n if (mdResponse.ok) {\n const mdContent = await mdResponse.text();\n const parsed = parseAgentMd(mdContent);\n frontmatter = parsed.frontmatter;\n promptFromMarkdown = parsed.body;\n } else {\n logger.warn(`AGENT.md not found for ${agentId}: ${mdResponse.status}, fallback to Pod metadata`);\n }\n\n // 2. Query .meta\n const metaTable = AgentMetaSchema.table('AgentMeta', {\n base: `/agents/${agentId}/.meta`,\n subjectTemplate: '#{id}',\n });\n\n const session = {\n info: { isLoggedIn: true, webId },\n fetch: authenticatedFetch,\n };\n const db: any = drizzle(session, {\n schema: {\n agentMeta: metaTable,\n provider: Provider,\n credential: Credential,\n model: Model,\n },\n });\n\n const metaRecord = await db.query.agentMeta.findFirst();\n if (!metaRecord) {\n logger.warn(`.meta not found for agent ${agentId}`);\n return null;\n }\n\n if (metaRecord.enabled === 'false') {\n logger.debug(`Agent ${agentId} is disabled`);\n return null;\n }\n\n // 3. Resolve provider\n const providerUri = metaRecord.provider;\n if (!providerUri) {\n logger.error(`Agent ${agentId} has no provider in .meta`);\n return null;\n }\n const provider = await db.findByIri(Provider, providerUri);\n if (!provider) {\n logger.error(`Provider not found: ${providerUri}`);\n return null;\n }\n\n const runtimeKind = metaRecord.runtimeKind;\n if (!isExecutorType(runtimeKind)) {\n logger.error(`Agent ${agentId} has invalid runtimeKind: ${runtimeKind ?? '(missing)'}`);\n return null;\n }\n\n // 4. Resolve credential\n const credentialUri = metaRecord.credential;\n let apiKey = '';\n let baseUrl = provider.baseUrl ?? undefined;\n let proxyUrl: string | undefined;\n\n if (credentialUri) {\n const cred = await db.findByIri(Credential, credentialUri);\n if (cred) {\n apiKey = (cred as any).apiKey ?? '';\n baseUrl = (cred as any).baseUrl ?? baseUrl;\n proxyUrl = (cred as any).proxyUrl ?? undefined;\n }\n }\n\n // 5. Resolve model\n let modelName = await resolveModelId(db, provider.defaultModel ?? provider.hasModel);\n const modelUri = metaRecord.model;\n if (modelUri) {\n const resolvedModel = await resolveModelId(db, modelUri);\n if (resolvedModel) {\n modelName = resolvedModel;\n }\n }\n\n // 6. Resolve skills\n const skillsContent = await resolveSkills(\n frontmatter.skills ?? [],\n podBaseUrl,\n agentId,\n authenticatedFetch,\n );\n\n // 7. Convert MCP server defs\n const mcpServers = convertMcpServers(frontmatter['mcp-servers'] ?? []);\n\n // 8. Assemble\n const systemPrompt = promptFromMarkdown || metaRecord.instructions || '';\n\n return {\n id: agentId,\n displayName: metaRecord.name ?? frontmatter.name ?? agentId,\n description: metaRecord.description ?? frontmatter.description,\n systemPrompt,\n executorType: runtimeKind,\n apiKey,\n baseUrl,\n proxyUrl,\n model: modelName,\n maxTurns: frontmatter['max-turns'] ?? metaRecord.maxTurns,\n allowedTools: Array.isArray(frontmatter['allowed-tools'])\n ? frontmatter['allowed-tools']\n : undefined,\n disallowedTools: Array.isArray(frontmatter['disallowed-tools'])\n ? frontmatter['disallowed-tools']\n : undefined,\n permissionMode: frontmatter['permission-mode'],\n mcpServers,\n skillsContent: skillsContent || undefined,\n enabled: metaRecord.enabled !== 'false',\n };\n}\n\n/**\n * Resolve skill URIs to concatenated prompt content.\n *\n * Skills can be:\n * - Absolute: /skills/drizzle-solid → fetch /skills/drizzle-solid/SKILL.md\n * - Relative: ./skills/custom → fetch /agents/{agentId}/skills/custom/SKILL.md\n */\nasync function resolveSkills(\n skillRefs: string[],\n podBaseUrl: string,\n agentId: string,\n authenticatedFetch: typeof fetch,\n): Promise<string> {\n if (skillRefs.length === 0) return '';\n\n const parts: string[] = [];\n\n for (const ref of skillRefs) {\n const skillPath = ref.startsWith('./')\n ? `/agents/${agentId}/${ref.slice(2)}/SKILL.md`\n : `${ref}/SKILL.md`;\n\n const url = new URL(skillPath, podBaseUrl).href;\n try {\n const res = await authenticatedFetch(url);\n if (res.ok) {\n const content = await res.text();\n // Parse SKILL.md — extract body (skip frontmatter)\n const { body } = parseAgentMd(content);\n if (body) {\n parts.push(body);\n }\n } else {\n logger.warn(`Skill not found: ${ref} (${res.status})`);\n }\n } catch (err) {\n logger.warn(`Failed to fetch skill ${ref}:`, err);\n }\n }\n\n return parts.join('\\n\\n---\\n\\n');\n}\n\n/**\n * Convert AGENT.md MCP server definitions to McpServerConfig map.\n */\nfunction convertMcpServers(\n defs: AgentMcpServerDef[],\n): Record<string, McpServerConfig> {\n const result: Record<string, McpServerConfig> = {};\n\n for (const def of defs) {\n const config: McpServerConfig = {};\n\n if (def.transport) {\n config.type = def.transport;\n } else if (def.command) {\n config.type = 'stdio';\n } else if (def.url) {\n config.type = 'sse';\n }\n\n if (def.command) config.command = def.command;\n if (def.args) config.args = def.args;\n if (def.env) config.env = def.env;\n if (def.url) config.url = def.url;\n if (def.headers) config.headers = def.headers;\n\n result[def.name] = config;\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/agents/config/resolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Config Resolver\n *\n * Reads a Pod-hosted Agent Profile:\n * - /agents/{agentId}/AGENTS.md is plain Markdown guidance.\n * - /agents/{agentId}/.meta#config is RDF runtime config.\n * - Skill refs point at shared SKILL.md documents in Pod storage.\n * - MCP servers are structured config entries, not mcp/*.json files.\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { drizzle } from '@undefineds.co/drizzle-solid';\nimport type { PodTable } from '@undefineds.co/drizzle-solid';\nimport { AgentMetaSchema } from './agent-meta-schema';\nimport { extractMarkdownBody, parseAgentInstructions } from './parse-agent-instructions';\nimport { Provider } from '../../ai/schema/provider';\nimport { Credential } from '../../credential/schema/tables';\nimport { Model } from '../../ai/schema/model';\nimport type {\n AgentMcpServerDef,\n AgentMetaRecord,\n AgentRuntimeKind,\n ResolvedAgentConfig,\n ResolvedAgentSkill,\n} from './types';\nimport type { McpServerConfig } from '../types';\n\nconst logger = getLoggerFor('AgentConfigResolver');\nconst AGENT_META_RESOURCE_ID = '.meta#config';\n\ninterface ResolveContext {\n podBaseUrl: string;\n authenticatedFetch: typeof fetch;\n webId?: string;\n}\n\ninterface AgentResourceLoaderOptions extends ResolveContext {\n agentId: string;\n}\n\ninterface AgentProfileResources {\n instructions: string;\n skills: ResolvedAgentSkill[];\n skillsContent?: string;\n}\n\nfunction isRuntimeKind(value: string | undefined): value is AgentRuntimeKind {\n return value === 'codebuddy' || value === 'claude' || value === 'codex';\n}\n\nfunction createPodDb(ctx: ResolveContext, agentId: string): any {\n const agentMeta = createAgentMetaTable(agentId);\n return drizzle({\n info: {\n isLoggedIn: true,\n webId: ctx.webId,\n },\n fetch: ctx.authenticatedFetch,\n } as any, {\n schema: {\n agentConfig: agentMeta,\n provider: Provider,\n credential: Credential,\n model: Model,\n },\n });\n}\n\nasync function resolveModelId(\n db: any,\n modelRef: string | null | undefined,\n): Promise<string | undefined> {\n if (!modelRef) {\n return undefined;\n }\n\n const modelRecord = await db.findByIri(Model, modelRef);\n return modelRecord?.id ?? undefined;\n}\n\n/**\n * Resolve a complete agent config from Pod storage.\n *\n * @param agentId - Agent folder name, for example \"secretary\"\n * @param ctx - Pod access context\n * @returns Fully resolved config, or null if agent is missing / disabled / invalid\n */\nexport async function resolveAgentConfig(\n agentId: string,\n ctx: ResolveContext,\n): Promise<ResolvedAgentConfig | null> {\n const db = createPodDb(ctx, agentId);\n return new AgentConfigResolver(\n agentId,\n db,\n db.schema?.agentConfig ?? createAgentMetaTable(agentId),\n new PodAgentResourceLoader({ agentId, ...ctx }),\n ).resolve();\n}\n\nclass AgentConfigResolver {\n public constructor(\n private readonly agentId: string,\n private readonly db: any,\n private readonly metaTable: PodTable,\n private readonly resources: PodAgentResourceLoader,\n ) {}\n\n public async resolve(): Promise<ResolvedAgentConfig | null> {\n const metaRecord = await this.db.findById(this.metaTable, AGENT_META_RESOURCE_ID) as AgentMetaRecord | null;\n if (!metaRecord) {\n logger.warn(`Agent config not found for ${this.agentId}: ${AGENT_META_RESOURCE_ID}`);\n return null;\n }\n\n if (metaRecord.enabled === 'false') {\n return null;\n }\n\n const providerUri = metaRecord.provider;\n if (!providerUri) {\n logger.error(`Agent ${this.agentId} has no provider in .meta`);\n return null;\n }\n\n const provider = await this.db.findByIri(Provider, providerUri);\n if (!provider) {\n logger.error(`Provider not found: ${providerUri}`);\n return null;\n }\n\n const runtimeKind = metaRecord.runtimeKind;\n if (!isRuntimeKind(runtimeKind)) {\n logger.error(`Agent ${this.agentId} has invalid runtimeKind: ${runtimeKind ?? '(missing)'}`);\n return null;\n }\n\n const profileResources = await this.resources.load(toStringArray(metaRecord.skills));\n const credential = await this.resolveCredential(metaRecord.credential);\n const modelName = await this.resolveModelName(provider, metaRecord.model);\n const mcpServers = AgentMcpConfig.fromMeta(metaRecord.mcpServers).toRuntimeConfig();\n const systemPrompt = profileResources.instructions || metaRecord.instructions || '';\n\n return {\n id: this.agentId,\n displayName: metaRecord.name ?? this.agentId,\n description: metaRecord.description,\n systemPrompt,\n executorType: runtimeKind,\n apiKey: credential.apiKey,\n baseUrl: credential.baseUrl ?? provider.baseUrl ?? undefined,\n proxyUrl: credential.proxyUrl,\n model: modelName,\n maxTurns: metaRecord.maxTurns,\n allowedTools: toStringArray(metaRecord.allowedTools),\n disallowedTools: toStringArray(metaRecord.disallowedTools),\n permissionMode: metaRecord.permissionMode,\n mcpServers,\n skillsContent: profileResources.skillsContent,\n skills: profileResources.skills,\n enabled: true,\n };\n }\n\n private async resolveCredential(credentialUri: string | undefined): Promise<{\n apiKey: string;\n baseUrl?: string;\n proxyUrl?: string;\n }> {\n if (!credentialUri) {\n return { apiKey: '' };\n }\n\n const credential = await this.db.findByIri(Credential, credentialUri);\n if (!credential) {\n logger.warn(`Credential not found: ${credentialUri}`);\n return { apiKey: '' };\n }\n\n return {\n apiKey: (credential as any).apiKey ?? '',\n baseUrl: (credential as any).baseUrl ?? undefined,\n proxyUrl: (credential as any).proxyUrl ?? undefined,\n };\n }\n\n private async resolveModelName(provider: any, modelUri: string | undefined): Promise<string | undefined> {\n const explicit = await resolveModelId(this.db, modelUri);\n if (explicit) {\n return explicit;\n }\n return resolveModelId(this.db, provider.defaultModel ?? provider.hasModel);\n }\n}\n\nfunction createAgentMetaTable(agentId: string): any {\n return AgentMetaSchema.table('AgentMeta', {\n base: `/agents/${agentId}/.meta`,\n subjectTemplate: '#{id}',\n });\n}\n\nclass PodAgentResourceLoader {\n private readonly skillRefs: AgentSkillRefResolver;\n\n public readonly agentId: string;\n public readonly podBaseUrl: string;\n public readonly authenticatedFetch: typeof fetch;\n\n public constructor(options: AgentResourceLoaderOptions) {\n this.agentId = options.agentId;\n this.podBaseUrl = options.podBaseUrl;\n this.authenticatedFetch = options.authenticatedFetch;\n this.skillRefs = new AgentSkillRefResolver(options.agentId);\n }\n\n public async load(skillRefs: string[]): Promise<AgentProfileResources> {\n const instructions = await this.fetchAgentInstructions();\n const skills = await this.resolveSkillRefs(skillRefs);\n const skillsContent = skills\n .map((skill) => extractMarkdownBody(skill.content))\n .filter(Boolean)\n .join('\\n\\n---\\n\\n');\n return { instructions, skills, skillsContent: skillsContent || undefined };\n }\n\n private async fetchAgentInstructions(): Promise<string> {\n const agentsMdUrl = new URL(`/agents/${this.agentId}/AGENTS.md`, this.podBaseUrl).href;\n const response = await this.authenticatedFetch(agentsMdUrl);\n if (!response.ok) {\n logger.warn(`AGENTS.md not found for ${this.agentId}: ${response.status}, fallback to Pod metadata`);\n return '';\n }\n\n return parseAgentInstructions(await response.text());\n }\n\n private async resolveSkillRefs(refs: string[]): Promise<ResolvedAgentSkill[]> {\n const skills: ResolvedAgentSkill[] = [];\n\n for (const ref of refs) {\n const skill = await this.resolveSkillRef(ref);\n if (skill) {\n skills.push(skill);\n }\n }\n\n return skills;\n }\n\n private async resolveSkillRef(ref: string): Promise<ResolvedAgentSkill | undefined> {\n const resolvedPath = this.skillRefs.resolvePath(ref);\n const url = new URL(resolvedPath, this.podBaseUrl).href;\n\n try {\n const response = await this.authenticatedFetch(url);\n if (!response.ok) {\n logger.warn(`Agent skill ref not found: ${ref} (${response.status})`);\n return undefined;\n }\n\n const content = (await response.text()).trim();\n if (!content) {\n return undefined;\n }\n\n return {\n name: this.skillRefs.resolveName(ref, resolvedPath),\n content,\n };\n } catch (error) {\n logger.warn(`Failed to fetch agent skill ref ${ref}:`, error);\n return undefined;\n }\n }\n}\n\nclass AgentMcpConfig {\n public static fromMeta(value: AgentMetaRecord['mcpServers']): AgentMcpConfig {\n return new AgentMcpConfig(this.toMcpServerDefs(value));\n }\n\n private static toMcpServerDefs(value: AgentMetaRecord['mcpServers']): AgentMcpServerDef[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n const defs: AgentMcpServerDef[] = [];\n for (const item of value) {\n const parsed = AgentMcpConfig.parseMcpServerDef(item);\n if (parsed) {\n defs.push(parsed);\n }\n }\n return defs;\n }\n\n private static parseMcpServerDef(value: unknown): AgentMcpServerDef | undefined {\n if (AgentMcpConfig.isAgentMcpServerDef(value)) {\n return value;\n }\n if (typeof value !== 'string' || value.trim().length === 0) {\n return undefined;\n }\n\n const trimmed = value.trim();\n if (!trimmed.startsWith('{')) {\n logger.warn(`Ignoring MCP server file ref '${value}'. Store structured MCP config in .meta instead.`);\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n return AgentMcpConfig.isAgentMcpServerDef(parsed) ? parsed : undefined;\n } catch (error) {\n logger.warn('Invalid MCP server JSON in .meta:', error);\n return undefined;\n }\n }\n\n private static isAgentMcpServerDef(value: unknown): value is AgentMcpServerDef {\n return Boolean(value && typeof value === 'object' && typeof (value as AgentMcpServerDef).name === 'string');\n }\n\n private constructor(private readonly defs: AgentMcpServerDef[]) {}\n\n public toRuntimeConfig(): Record<string, McpServerConfig> {\n const result: Record<string, McpServerConfig> = {};\n\n for (const def of this.defs) {\n result[def.name] = this.toRuntimeServerConfig(def);\n }\n\n return result;\n }\n\n private toRuntimeServerConfig(def: AgentMcpServerDef): McpServerConfig {\n const config: McpServerConfig = {};\n\n if (def.transport) {\n config.type = def.transport;\n } else if (def.command) {\n config.type = 'stdio';\n } else if (def.url) {\n config.type = 'sse';\n }\n\n if (def.command) config.command = def.command;\n if (def.args) config.args = def.args;\n if (def.env) config.env = def.env;\n if (def.url) config.url = def.url;\n if (def.headers) config.headers = def.headers;\n\n return config;\n }\n}\n\nclass AgentSkillRefResolver {\n public constructor(private readonly agentId: string) {}\n\n public resolvePath(ref: string): string {\n const normalized = this.normalizePackageRef(ref);\n if (normalized.startsWith('/')) {\n if (this.hasKnownMarkdownExtension(normalized)) {\n return normalized;\n }\n return `${normalized}/SKILL.md`;\n }\n\n const relative = normalized.startsWith('.codex/skills/') || normalized.startsWith('skills/')\n ? normalized\n : `skills/${normalized}`;\n if (this.hasKnownMarkdownExtension(relative)) {\n return `/agents/${this.agentId}/${relative}`;\n }\n return `/agents/${this.agentId}/${relative}/SKILL.md`;\n }\n\n public resolveName(ref: string, resolvedPath: string): string {\n const raw = this.normalizePackageRef(ref).replace(/\\/$/, '');\n if (raw.endsWith('/SKILL.md')) {\n return this.sanitizeSkillName(raw.split('/').slice(-2, -1)[0] ?? 'skill');\n }\n\n const withoutPrefix = raw\n .replace(/^\\/+/, '')\n .replace(/^\\.codex\\/skills\\//, '')\n .replace(/^skills\\//, '');\n if (withoutPrefix && !this.hasKnownMarkdownExtension(withoutPrefix)) {\n return this.sanitizeSkillName(withoutPrefix.split('/').filter(Boolean).pop() ?? withoutPrefix);\n }\n\n const segments = resolvedPath.split('/').filter(Boolean);\n const skillIndex = segments.lastIndexOf('SKILL.md');\n return this.sanitizeSkillName(skillIndex > 0 ? segments[skillIndex - 1] : 'skill');\n }\n\n private normalizePackageRef(ref: string): string {\n return ref.replace(/^\\.\\/+/, '').replace(/^\\/+agents\\/[^/]+\\//, '/');\n }\n\n private sanitizeSkillName(name: string): string {\n return name.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'skill';\n }\n\n private hasKnownMarkdownExtension(path: string): boolean {\n return /\\.(md|markdown)$/i.test(path);\n }\n}\n\nfunction toStringArray(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((item): item is string => typeof item === 'string' && item.length > 0);\n }\n if (typeof value === 'string' && value.length > 0) {\n return [value];\n }\n return [];\n}\n"]}