@undefineds.co/xpod 0.2.35 → 0.2.37

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 (274) hide show
  1. package/dist/agents/schema/agent-config.js +1 -1
  2. package/dist/agents/schema/agent-config.js.map +1 -1
  3. package/dist/agents/schema/create-agent-schema.js +17 -16
  4. package/dist/agents/schema/create-agent-schema.js.map +1 -1
  5. package/dist/agents/schema/tables.js +1 -1
  6. package/dist/agents/schema/tables.js.map +1 -1
  7. package/dist/ai/schema/config.js +1 -1
  8. package/dist/ai/schema/config.js.map +1 -1
  9. package/dist/ai/schema/model.js +2 -2
  10. package/dist/ai/schema/model.js.map +1 -1
  11. package/dist/ai/schema/provider.js +1 -1
  12. package/dist/ai/schema/provider.js.map +1 -1
  13. package/dist/ai/schema/vector-store.js +2 -2
  14. package/dist/ai/schema/vector-store.js.map +1 -1
  15. package/dist/credential/schema/tables.js +3 -3
  16. package/dist/credential/schema/tables.js.map +1 -1
  17. package/dist/runtime/Proxy.d.ts +1 -0
  18. package/dist/runtime/Proxy.js +9 -0
  19. package/dist/runtime/Proxy.js.map +1 -1
  20. package/package.json +2 -2
  21. package/node_modules/@undefineds.co/models/README.md +0 -578
  22. package/node_modules/@undefineds.co/models/dist/_drizzle-solid/columns.d.ts +0 -37
  23. package/node_modules/@undefineds.co/models/dist/_drizzle-solid/columns.js +0 -1
  24. package/node_modules/@undefineds.co/models/dist/_drizzle-solid/pod-table.d.ts +0 -3
  25. package/node_modules/@undefineds.co/models/dist/_drizzle-solid/pod-table.js +0 -1
  26. package/node_modules/@undefineds.co/models/dist/_drizzle-solid/types.d.ts +0 -40
  27. package/node_modules/@undefineds.co/models/dist/_drizzle-solid/types.js +0 -1
  28. package/node_modules/@undefineds.co/models/dist/agent.providers.d.ts +0 -13
  29. package/node_modules/@undefineds.co/models/dist/agent.providers.js +0 -69
  30. package/node_modules/@undefineds.co/models/dist/agent.repository.d.ts +0 -85
  31. package/node_modules/@undefineds.co/models/dist/agent.repository.js +0 -7
  32. package/node_modules/@undefineds.co/models/dist/agent.schema.d.ts +0 -1
  33. package/node_modules/@undefineds.co/models/dist/agent.schema.js +0 -1
  34. package/node_modules/@undefineds.co/models/dist/ai-config/index.d.ts +0 -61
  35. package/node_modules/@undefineds.co/models/dist/ai-config/index.js +0 -294
  36. package/node_modules/@undefineds.co/models/dist/ai-config.d.ts +0 -1
  37. package/node_modules/@undefineds.co/models/dist/ai-config.js +0 -1
  38. package/node_modules/@undefineds.co/models/dist/ai-model.schema.d.ts +0 -1
  39. package/node_modules/@undefineds.co/models/dist/ai-model.schema.js +0 -1
  40. package/node_modules/@undefineds.co/models/dist/ai-provider.schema.d.ts +0 -1
  41. package/node_modules/@undefineds.co/models/dist/ai-provider.schema.js +0 -1
  42. package/node_modules/@undefineds.co/models/dist/approval.schema.d.ts +0 -1
  43. package/node_modules/@undefineds.co/models/dist/approval.schema.js +0 -1
  44. package/node_modules/@undefineds.co/models/dist/audit.schema.d.ts +0 -1
  45. package/node_modules/@undefineds.co/models/dist/audit.schema.js +0 -1
  46. package/node_modules/@undefineds.co/models/dist/chat.repository.d.ts +0 -61
  47. package/node_modules/@undefineds.co/models/dist/chat.repository.js +0 -8
  48. package/node_modules/@undefineds.co/models/dist/chat.schema.d.ts +0 -1
  49. package/node_modules/@undefineds.co/models/dist/chat.schema.js +0 -1
  50. package/node_modules/@undefineds.co/models/dist/chat.utils.d.ts +0 -3
  51. package/node_modules/@undefineds.co/models/dist/chat.utils.js +0 -30
  52. package/node_modules/@undefineds.co/models/dist/contact.repository.d.ts +0 -85
  53. package/node_modules/@undefineds.co/models/dist/contact.repository.js +0 -8
  54. package/node_modules/@undefineds.co/models/dist/contact.schema.d.ts +0 -1
  55. package/node_modules/@undefineds.co/models/dist/contact.schema.js +0 -1
  56. package/node_modules/@undefineds.co/models/dist/core/agent-provider.schema.d.ts +0 -1
  57. package/node_modules/@undefineds.co/models/dist/core/agent-provider.schema.js +0 -1
  58. package/node_modules/@undefineds.co/models/dist/core/agent-status.schema.d.ts +0 -12
  59. package/node_modules/@undefineds.co/models/dist/core/agent-status.schema.js +0 -18
  60. package/node_modules/@undefineds.co/models/dist/core/agent.schema.d.ts +0 -72
  61. package/node_modules/@undefineds.co/models/dist/core/agent.schema.js +0 -38
  62. package/node_modules/@undefineds.co/models/dist/core/ai-config.schema.d.ts +0 -11
  63. package/node_modules/@undefineds.co/models/dist/core/ai-config.schema.js +0 -18
  64. package/node_modules/@undefineds.co/models/dist/core/ai-model.schema.d.ts +0 -15
  65. package/node_modules/@undefineds.co/models/dist/core/ai-model.schema.js +0 -21
  66. package/node_modules/@undefineds.co/models/dist/core/ai-provider.schema.d.ts +0 -16
  67. package/node_modules/@undefineds.co/models/dist/core/ai-provider.schema.js +0 -28
  68. package/node_modules/@undefineds.co/models/dist/core/approval.schema.d.ts +0 -21
  69. package/node_modules/@undefineds.co/models/dist/core/approval.schema.js +0 -33
  70. package/node_modules/@undefineds.co/models/dist/core/audit.schema.d.ts +0 -17
  71. package/node_modules/@undefineds.co/models/dist/core/audit.schema.js +0 -29
  72. package/node_modules/@undefineds.co/models/dist/core/chat.schema.d.ts +0 -36
  73. package/node_modules/@undefineds.co/models/dist/core/chat.schema.js +0 -45
  74. package/node_modules/@undefineds.co/models/dist/core/contact.schema.d.ts +0 -47
  75. package/node_modules/@undefineds.co/models/dist/core/contact.schema.js +0 -59
  76. package/node_modules/@undefineds.co/models/dist/core/credential.schema.d.ts +0 -56
  77. package/node_modules/@undefineds.co/models/dist/core/credential.schema.js +0 -40
  78. package/node_modules/@undefineds.co/models/dist/core/extension/extension.schema.d.ts +0 -4
  79. package/node_modules/@undefineds.co/models/dist/core/extension/extension.schema.js +0 -11
  80. package/node_modules/@undefineds.co/models/dist/core/extension/index.d.ts +0 -1
  81. package/node_modules/@undefineds.co/models/dist/core/extension/index.js +0 -1
  82. package/node_modules/@undefineds.co/models/dist/core/extension.d.ts +0 -1
  83. package/node_modules/@undefineds.co/models/dist/core/extension.js +0 -1
  84. package/node_modules/@undefineds.co/models/dist/core/favorite/favorite.schema.d.ts +0 -24
  85. package/node_modules/@undefineds.co/models/dist/core/favorite/favorite.schema.js +0 -34
  86. package/node_modules/@undefineds.co/models/dist/core/favorite/index.d.ts +0 -1
  87. package/node_modules/@undefineds.co/models/dist/core/favorite/index.js +0 -1
  88. package/node_modules/@undefineds.co/models/dist/core/file/file.schema.d.ts +0 -39
  89. package/node_modules/@undefineds.co/models/dist/core/file/file.schema.js +0 -51
  90. package/node_modules/@undefineds.co/models/dist/core/file/index.d.ts +0 -1
  91. package/node_modules/@undefineds.co/models/dist/core/file/index.js +0 -1
  92. package/node_modules/@undefineds.co/models/dist/core/file.d.ts +0 -1
  93. package/node_modules/@undefineds.co/models/dist/core/file.js +0 -1
  94. package/node_modules/@undefineds.co/models/dist/core/grant.schema.d.ts +0 -16
  95. package/node_modules/@undefineds.co/models/dist/core/grant.schema.js +0 -29
  96. package/node_modules/@undefineds.co/models/dist/core/import/import-job.schema.d.ts +0 -5
  97. package/node_modules/@undefineds.co/models/dist/core/import/import-job.schema.js +0 -5
  98. package/node_modules/@undefineds.co/models/dist/core/import/index.d.ts +0 -1
  99. package/node_modules/@undefineds.co/models/dist/core/import/index.js +0 -1
  100. package/node_modules/@undefineds.co/models/dist/core/import.d.ts +0 -1
  101. package/node_modules/@undefineds.co/models/dist/core/import.js +0 -1
  102. package/node_modules/@undefineds.co/models/dist/core/inbox-notification.schema.d.ts +0 -9
  103. package/node_modules/@undefineds.co/models/dist/core/inbox-notification.schema.js +0 -16
  104. package/node_modules/@undefineds.co/models/dist/core/index.d.ts +0 -31
  105. package/node_modules/@undefineds.co/models/dist/core/index.js +0 -32
  106. package/node_modules/@undefineds.co/models/dist/core/knowledge/index.d.ts +0 -1
  107. package/node_modules/@undefineds.co/models/dist/core/knowledge/index.js +0 -1
  108. package/node_modules/@undefineds.co/models/dist/core/knowledge/knowledge-folder.schema.d.ts +0 -7
  109. package/node_modules/@undefineds.co/models/dist/core/knowledge/knowledge-folder.schema.js +0 -6
  110. package/node_modules/@undefineds.co/models/dist/core/knowledge.d.ts +0 -1
  111. package/node_modules/@undefineds.co/models/dist/core/knowledge.js +0 -1
  112. package/node_modules/@undefineds.co/models/dist/core/message.schema.d.ts +0 -33
  113. package/node_modules/@undefineds.co/models/dist/core/message.schema.js +0 -49
  114. package/node_modules/@undefineds.co/models/dist/core/namespaces.d.ts +0 -176
  115. package/node_modules/@undefineds.co/models/dist/core/namespaces.js +0 -289
  116. package/node_modules/@undefineds.co/models/dist/core/profile.d.ts +0 -16
  117. package/node_modules/@undefineds.co/models/dist/core/profile.js +0 -19
  118. package/node_modules/@undefineds.co/models/dist/core/schema.d.ts +0 -304
  119. package/node_modules/@undefineds.co/models/dist/core/schema.js +0 -46
  120. package/node_modules/@undefineds.co/models/dist/core/session/index.d.ts +0 -1
  121. package/node_modules/@undefineds.co/models/dist/core/session/index.js +0 -1
  122. package/node_modules/@undefineds.co/models/dist/core/session/session.schema.d.ts +0 -6
  123. package/node_modules/@undefineds.co/models/dist/core/session/session.schema.js +0 -6
  124. package/node_modules/@undefineds.co/models/dist/core/session.d.ts +0 -1
  125. package/node_modules/@undefineds.co/models/dist/core/session.js +0 -1
  126. package/node_modules/@undefineds.co/models/dist/core/settings/index.d.ts +0 -1
  127. package/node_modules/@undefineds.co/models/dist/core/settings/index.js +0 -1
  128. package/node_modules/@undefineds.co/models/dist/core/settings/settings.schema.d.ts +0 -49
  129. package/node_modules/@undefineds.co/models/dist/core/settings/settings.schema.js +0 -63
  130. package/node_modules/@undefineds.co/models/dist/core/settings.d.ts +0 -1
  131. package/node_modules/@undefineds.co/models/dist/core/settings.js +0 -1
  132. package/node_modules/@undefineds.co/models/dist/core/thread.schema.d.ts +0 -28
  133. package/node_modules/@undefineds.co/models/dist/core/thread.schema.js +0 -36
  134. package/node_modules/@undefineds.co/models/dist/core/types/collaboration-blocks.d.ts +0 -52
  135. package/node_modules/@undefineds.co/models/dist/core/types/collaboration-blocks.js +0 -7
  136. package/node_modules/@undefineds.co/models/dist/core/types/message-block.d.ts +0 -270
  137. package/node_modules/@undefineds.co/models/dist/core/types/message-block.js +0 -125
  138. package/node_modules/@undefineds.co/models/dist/core/vector-store.schema.d.ts +0 -25
  139. package/node_modules/@undefineds.co/models/dist/core/vector-store.schema.js +0 -35
  140. package/node_modules/@undefineds.co/models/dist/core/vocab/_namespaces.d.ts +0 -1
  141. package/node_modules/@undefineds.co/models/dist/core/vocab/_namespaces.js +0 -3
  142. package/node_modules/@undefineds.co/models/dist/core/vocab/chat.vocab.d.ts +0 -16
  143. package/node_modules/@undefineds.co/models/dist/core/vocab/chat.vocab.js +0 -22
  144. package/node_modules/@undefineds.co/models/dist/core/vocab/contact.vocab.d.ts +0 -21
  145. package/node_modules/@undefineds.co/models/dist/core/vocab/contact.vocab.js +0 -22
  146. package/node_modules/@undefineds.co/models/dist/core/vocab/index.d.ts +0 -6
  147. package/node_modules/@undefineds.co/models/dist/core/vocab/index.js +0 -6
  148. package/node_modules/@undefineds.co/models/dist/core/vocab/message.vocab.d.ts +0 -20
  149. package/node_modules/@undefineds.co/models/dist/core/vocab/message.vocab.js +0 -24
  150. package/node_modules/@undefineds.co/models/dist/core/vocab/sidecar.vocab.d.ts +0 -46
  151. package/node_modules/@undefineds.co/models/dist/core/vocab/sidecar.vocab.js +0 -47
  152. package/node_modules/@undefineds.co/models/dist/core/vocab/thread.vocab.d.ts +0 -11
  153. package/node_modules/@undefineds.co/models/dist/core/vocab/thread.vocab.js +0 -14
  154. package/node_modules/@undefineds.co/models/dist/core/vocab/workspace.vocab.d.ts +0 -12
  155. package/node_modules/@undefineds.co/models/dist/core/vocab/workspace.vocab.js +0 -13
  156. package/node_modules/@undefineds.co/models/dist/core/vocab.d.ts +0 -1
  157. package/node_modules/@undefineds.co/models/dist/core/vocab.js +0 -1
  158. package/node_modules/@undefineds.co/models/dist/core/workspace.schema.d.ts +0 -35
  159. package/node_modules/@undefineds.co/models/dist/core/workspace.schema.js +0 -106
  160. package/node_modules/@undefineds.co/models/dist/core.d.ts +0 -1
  161. package/node_modules/@undefineds.co/models/dist/core.js +0 -1
  162. package/node_modules/@undefineds.co/models/dist/credential.schema.d.ts +0 -1
  163. package/node_modules/@undefineds.co/models/dist/credential.schema.js +0 -1
  164. package/node_modules/@undefineds.co/models/dist/discovery/index.d.ts +0 -31
  165. package/node_modules/@undefineds.co/models/dist/discovery/index.js +0 -147
  166. package/node_modules/@undefineds.co/models/dist/discovery/models.json +0 -2623
  167. package/node_modules/@undefineds.co/models/dist/discovery/providers.json +0 -156
  168. package/node_modules/@undefineds.co/models/dist/discovery/types.d.ts +0 -103
  169. package/node_modules/@undefineds.co/models/dist/discovery/types.js +0 -12
  170. package/node_modules/@undefineds.co/models/dist/discovery/vercel.d.ts +0 -25
  171. package/node_modules/@undefineds.co/models/dist/discovery/vercel.js +0 -95
  172. package/node_modules/@undefineds.co/models/dist/discovery.d.ts +0 -1
  173. package/node_modules/@undefineds.co/models/dist/discovery.js +0 -1
  174. package/node_modules/@undefineds.co/models/dist/extension/extension.schema.d.ts +0 -1
  175. package/node_modules/@undefineds.co/models/dist/extension/extension.schema.js +0 -1
  176. package/node_modules/@undefineds.co/models/dist/extension/index.d.ts +0 -1
  177. package/node_modules/@undefineds.co/models/dist/extension/index.js +0 -1
  178. package/node_modules/@undefineds.co/models/dist/extension.d.ts +0 -1
  179. package/node_modules/@undefineds.co/models/dist/extension.js +0 -1
  180. package/node_modules/@undefineds.co/models/dist/favorite/favorite.schema.d.ts +0 -1
  181. package/node_modules/@undefineds.co/models/dist/favorite/favorite.schema.js +0 -1
  182. package/node_modules/@undefineds.co/models/dist/favorite/index.d.ts +0 -2
  183. package/node_modules/@undefineds.co/models/dist/favorite/index.js +0 -7
  184. package/node_modules/@undefineds.co/models/dist/favorite/starred-sync.d.ts +0 -66
  185. package/node_modules/@undefineds.co/models/dist/favorite/starred-sync.js +0 -156
  186. package/node_modules/@undefineds.co/models/dist/favorite.d.ts +0 -1
  187. package/node_modules/@undefineds.co/models/dist/favorite.js +0 -1
  188. package/node_modules/@undefineds.co/models/dist/file/file.schema.d.ts +0 -1
  189. package/node_modules/@undefineds.co/models/dist/file/file.schema.js +0 -1
  190. package/node_modules/@undefineds.co/models/dist/file/index.d.ts +0 -1
  191. package/node_modules/@undefineds.co/models/dist/file/index.js +0 -1
  192. package/node_modules/@undefineds.co/models/dist/file.d.ts +0 -1
  193. package/node_modules/@undefineds.co/models/dist/file.js +0 -1
  194. package/node_modules/@undefineds.co/models/dist/fixtures/contracts-chat-contact.d.ts +0 -13
  195. package/node_modules/@undefineds.co/models/dist/fixtures/contracts-chat-contact.js +0 -76
  196. package/node_modules/@undefineds.co/models/dist/grant.schema.d.ts +0 -1
  197. package/node_modules/@undefineds.co/models/dist/grant.schema.js +0 -1
  198. package/node_modules/@undefineds.co/models/dist/import/import-job.schema.d.ts +0 -5
  199. package/node_modules/@undefineds.co/models/dist/import/import-job.schema.js +0 -5
  200. package/node_modules/@undefineds.co/models/dist/import/index.d.ts +0 -1
  201. package/node_modules/@undefineds.co/models/dist/import/index.js +0 -1
  202. package/node_modules/@undefineds.co/models/dist/import.d.ts +0 -1
  203. package/node_modules/@undefineds.co/models/dist/import.js +0 -1
  204. package/node_modules/@undefineds.co/models/dist/inbox-notification.schema.d.ts +0 -1
  205. package/node_modules/@undefineds.co/models/dist/inbox-notification.schema.js +0 -1
  206. package/node_modules/@undefineds.co/models/dist/index.d.ts +0 -41
  207. package/node_modules/@undefineds.co/models/dist/index.js +0 -83
  208. package/node_modules/@undefineds.co/models/dist/knowledge/index.d.ts +0 -1
  209. package/node_modules/@undefineds.co/models/dist/knowledge/index.js +0 -1
  210. package/node_modules/@undefineds.co/models/dist/knowledge/knowledge-folder.schema.d.ts +0 -1
  211. package/node_modules/@undefineds.co/models/dist/knowledge/knowledge-folder.schema.js +0 -1
  212. package/node_modules/@undefineds.co/models/dist/knowledge.d.ts +0 -1
  213. package/node_modules/@undefineds.co/models/dist/knowledge.js +0 -1
  214. package/node_modules/@undefineds.co/models/dist/message.repository.d.ts +0 -81
  215. package/node_modules/@undefineds.co/models/dist/message.repository.js +0 -8
  216. package/node_modules/@undefineds.co/models/dist/message.schema.d.ts +0 -1
  217. package/node_modules/@undefineds.co/models/dist/message.schema.js +0 -1
  218. package/node_modules/@undefineds.co/models/dist/namespaces.d.ts +0 -1
  219. package/node_modules/@undefineds.co/models/dist/namespaces.js +0 -1
  220. package/node_modules/@undefineds.co/models/dist/profile.d.ts +0 -1
  221. package/node_modules/@undefineds.co/models/dist/profile.js +0 -1
  222. package/node_modules/@undefineds.co/models/dist/repository.d.ts +0 -59
  223. package/node_modules/@undefineds.co/models/dist/repository.js +0 -186
  224. package/node_modules/@undefineds.co/models/dist/schema.d.ts +0 -1
  225. package/node_modules/@undefineds.co/models/dist/schema.js +0 -1
  226. package/node_modules/@undefineds.co/models/dist/session/index.d.ts +0 -1
  227. package/node_modules/@undefineds.co/models/dist/session/index.js +0 -1
  228. package/node_modules/@undefineds.co/models/dist/session/session.schema.d.ts +0 -1
  229. package/node_modules/@undefineds.co/models/dist/session/session.schema.js +0 -1
  230. package/node_modules/@undefineds.co/models/dist/session.d.ts +0 -1
  231. package/node_modules/@undefineds.co/models/dist/session.js +0 -1
  232. package/node_modules/@undefineds.co/models/dist/settings/index.d.ts +0 -1
  233. package/node_modules/@undefineds.co/models/dist/settings/index.js +0 -1
  234. package/node_modules/@undefineds.co/models/dist/settings/settings.schema.d.ts +0 -1
  235. package/node_modules/@undefineds.co/models/dist/settings/settings.schema.js +0 -1
  236. package/node_modules/@undefineds.co/models/dist/settings.d.ts +0 -1
  237. package/node_modules/@undefineds.co/models/dist/settings.js +0 -1
  238. package/node_modules/@undefineds.co/models/dist/sidecar/index.d.ts +0 -2
  239. package/node_modules/@undefineds.co/models/dist/sidecar/index.js +0 -2
  240. package/node_modules/@undefineds.co/models/dist/sidecar/persistence-mapping.d.ts +0 -51
  241. package/node_modules/@undefineds.co/models/dist/sidecar/persistence-mapping.js +0 -44
  242. package/node_modules/@undefineds.co/models/dist/sidecar/sidecar-events.d.ts +0 -632
  243. package/node_modules/@undefineds.co/models/dist/sidecar/sidecar-events.js +0 -133
  244. package/node_modules/@undefineds.co/models/dist/thread.repository.d.ts +0 -41
  245. package/node_modules/@undefineds.co/models/dist/thread.repository.js +0 -8
  246. package/node_modules/@undefineds.co/models/dist/thread.schema.d.ts +0 -1
  247. package/node_modules/@undefineds.co/models/dist/thread.schema.js +0 -1
  248. package/node_modules/@undefineds.co/models/dist/types/collaboration-blocks.d.ts +0 -52
  249. package/node_modules/@undefineds.co/models/dist/types/collaboration-blocks.js +0 -7
  250. package/node_modules/@undefineds.co/models/dist/types/message-block.d.ts +0 -270
  251. package/node_modules/@undefineds.co/models/dist/types/message-block.js +0 -125
  252. package/node_modules/@undefineds.co/models/dist/vocab/_namespaces.d.ts +0 -1
  253. package/node_modules/@undefineds.co/models/dist/vocab/_namespaces.js +0 -3
  254. package/node_modules/@undefineds.co/models/dist/vocab/chat.vocab.d.ts +0 -16
  255. package/node_modules/@undefineds.co/models/dist/vocab/chat.vocab.js +0 -22
  256. package/node_modules/@undefineds.co/models/dist/vocab/contact.vocab.d.ts +0 -21
  257. package/node_modules/@undefineds.co/models/dist/vocab/contact.vocab.js +0 -22
  258. package/node_modules/@undefineds.co/models/dist/vocab/index.d.ts +0 -6
  259. package/node_modules/@undefineds.co/models/dist/vocab/index.js +0 -6
  260. package/node_modules/@undefineds.co/models/dist/vocab/message.vocab.d.ts +0 -20
  261. package/node_modules/@undefineds.co/models/dist/vocab/message.vocab.js +0 -24
  262. package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.d.ts +0 -46
  263. package/node_modules/@undefineds.co/models/dist/vocab/sidecar.vocab.js +0 -47
  264. package/node_modules/@undefineds.co/models/dist/vocab/thread.vocab.d.ts +0 -11
  265. package/node_modules/@undefineds.co/models/dist/vocab/thread.vocab.js +0 -14
  266. package/node_modules/@undefineds.co/models/dist/vocab/workspace.vocab.d.ts +0 -12
  267. package/node_modules/@undefineds.co/models/dist/vocab/workspace.vocab.js +0 -13
  268. package/node_modules/@undefineds.co/models/dist/vocab.d.ts +0 -1
  269. package/node_modules/@undefineds.co/models/dist/vocab.js +0 -1
  270. package/node_modules/@undefineds.co/models/dist/workspace.repository.d.ts +0 -45
  271. package/node_modules/@undefineds.co/models/dist/workspace.repository.js +0 -8
  272. package/node_modules/@undefineds.co/models/dist/workspace.schema.d.ts +0 -1
  273. package/node_modules/@undefineds.co/models/dist/workspace.schema.js +0 -1
  274. package/node_modules/@undefineds.co/models/package.json +0 -67
@@ -28,5 +28,5 @@ exports.AgentConfig = agentConfigSchema.table('AgentConfig', {
28
28
  base: '/settings/ai/agents.ttl',
29
29
  subjectTemplate: '#{id}',
30
30
  });
31
- exports.AgentStatus = models_1.linxSchema.agentStatusTable;
31
+ exports.AgentStatus = models_1.agentStatusResource;
32
32
  //# sourceMappingURL=agent-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-config.js","sourceRoot":"","sources":["../../../src/agents/schema/agent-config.ts"],"names":[],"mappings":";;;AAAA,kDAAmD;AACnD,+DAA0D;AAE1D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,iBAAiB,GAAG,IAAA,uCAAiB,EAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;AAExD,QAAA,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,aAAa,EAAE;IAChE,IAAI,EAAE,yBAAyB;IAC/B,eAAe,EAAE,OAAO;CACzB,CAAQ,CAAC;AAEG,QAAA,WAAW,GAAG,mBAAU,CAAC,gBAAuB,CAAC","sourcesContent":["import { linxSchema } from '@undefineds.co/models';\nimport { createAgentSchema } from './create-agent-schema';\n\n/**\n * AgentConfig - Agent 配置\n *\n * RDF 示例:\n * <#indexing> a udfs:AgentConfig ;\n * foaf:name \"Indexing Agent\" ;\n * udfs:description \"文档索引 Agent,帮助用户的文件变得可检索\" ;\n * udfs:provider </settings/ai/providers.ttl#anthropic> ;\n * udfs:runtimeKind \"claude\" ;\n * udfs:model </settings/ai/models.ttl#glm-4.7> ;\n * udfs:systemPrompt \"你是 IndexAgent...\" ;\n * udfs:maxTurns \"20\" ;\n * udfs:enabled \"true\" .\n *\n * 说明:\n * - provider 指向通用 Provider,提供 baseUrl/defaultModel 等 Pod 配置\n * - runtimeKind 决定使用哪个 Agent Executor\n * - model 可以覆盖 provider 的 defaultModel\n * - instructions / systemPrompt 是 Agent 的核心提示词字段\n */\nconst agentConfigSchema = createAgentSchema({ nameRequired: false });\n\nexport const AgentConfig = agentConfigSchema.table('AgentConfig', {\n base: '/settings/ai/agents.ttl',\n subjectTemplate: '#{id}',\n}) as any;\n\nexport const AgentStatus = linxSchema.agentStatusTable as any;\n"]}
1
+ {"version":3,"file":"agent-config.js","sourceRoot":"","sources":["../../../src/agents/schema/agent-config.ts"],"names":[],"mappings":";;;AAAA,kDAA4D;AAC5D,+DAA0D;AAE1D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,iBAAiB,GAAG,IAAA,uCAAiB,EAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;AAExD,QAAA,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,aAAa,EAAE;IAChE,IAAI,EAAE,yBAAyB;IAC/B,eAAe,EAAE,OAAO;CACzB,CAAQ,CAAC;AAEG,QAAA,WAAW,GAAG,4BAA0B,CAAC","sourcesContent":["import { agentStatusResource } from '@undefineds.co/models';\nimport { createAgentSchema } from './create-agent-schema';\n\n/**\n * AgentConfig - Agent 配置\n *\n * RDF 示例:\n * <#indexing> a udfs:AgentConfig ;\n * foaf:name \"Indexing Agent\" ;\n * udfs:description \"文档索引 Agent,帮助用户的文件变得可检索\" ;\n * udfs:provider </settings/ai/providers.ttl#anthropic> ;\n * udfs:runtimeKind \"claude\" ;\n * udfs:model </settings/ai/models.ttl#glm-4.7> ;\n * udfs:systemPrompt \"你是 IndexAgent...\" ;\n * udfs:maxTurns \"20\" ;\n * udfs:enabled \"true\" .\n *\n * 说明:\n * - provider 指向通用 Provider,提供 baseUrl/defaultModel 等 Pod 配置\n * - runtimeKind 决定使用哪个 Agent Executor\n * - model 可以覆盖 provider 的 defaultModel\n * - instructions / systemPrompt 是 Agent 的核心提示词字段\n */\nconst agentConfigSchema = createAgentSchema({ nameRequired: false });\n\nexport const AgentConfig = agentConfigSchema.table('AgentConfig', {\n base: '/settings/ai/agents.ttl',\n subjectTemplate: '#{id}',\n}) as any;\n\nexport const AgentStatus = agentStatusResource as any;\n"]}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createAgentSchema = createAgentSchema;
4
4
  const models_1 = require("@undefineds.co/models");
5
+ const udfs_1 = require("../../vocab/udfs");
5
6
  const drizzle_solid_1 = require("@undefineds.co/drizzle-solid");
6
7
  function createAgentSchema(options = {}) {
7
8
  const nameColumn = (0, drizzle_solid_1.string)('name').predicate(models_1.FOAF.name);
@@ -10,25 +11,25 @@ function createAgentSchema(options = {}) {
10
11
  name: options.nameRequired === false ? nameColumn : nameColumn.notNull(),
11
12
  description: (0, drizzle_solid_1.text)('description').predicate(models_1.DCTerms.description),
12
13
  avatarUrl: (0, drizzle_solid_1.uri)('avatarUrl').predicate(models_1.VCARD.hasPhoto),
13
- instructions: (0, drizzle_solid_1.text)('instructions').predicate(models_1.UDFS.systemPrompt),
14
- provider: (0, drizzle_solid_1.uri)('provider').predicate(models_1.UDFS.provider),
15
- runtimeKind: (0, drizzle_solid_1.string)('runtimeKind').predicate(models_1.UDFS.runtimeKind),
16
- credential: (0, drizzle_solid_1.uri)('credential').predicate(models_1.UDFS.credential).link(models_1.credentialTable),
17
- model: (0, drizzle_solid_1.uri)('model').predicate(models_1.UDFS.model).link(models_1.aiModelTable),
18
- enabled: (0, drizzle_solid_1.string)('enabled').predicate(models_1.UDFS.enabled).default('true'),
19
- temperature: (0, drizzle_solid_1.real)('temperature').predicate(models_1.UDFS.temperature).default(0.7),
20
- tools: (0, drizzle_solid_1.text)('tools').array().predicate(models_1.UDFS.tools),
21
- contextRound: (0, drizzle_solid_1.integer)('contextRound').predicate(models_1.UDFS.contextRound).default(4),
22
- maxTurns: (0, drizzle_solid_1.integer)('maxTurns').predicate(models_1.UDFS.maxTurns),
23
- timeout: (0, drizzle_solid_1.integer)('timeout').predicate(models_1.UDFS.timeout),
24
- ttsModel: (0, drizzle_solid_1.uri)('ttsModel').predicate(models_1.UDFS.ttsModel).link(models_1.aiModelTable),
25
- videoModel: (0, drizzle_solid_1.uri)('videoModel').predicate(models_1.UDFS.videoModel).link(models_1.aiModelTable),
14
+ instructions: (0, drizzle_solid_1.text)('instructions').predicate((0, udfs_1.UDFS)('systemPrompt')),
15
+ provider: (0, drizzle_solid_1.uri)('provider').predicate((0, udfs_1.UDFS)('provider')),
16
+ runtimeKind: (0, drizzle_solid_1.string)('runtimeKind').predicate((0, udfs_1.UDFS)('runtimeKind')),
17
+ credential: (0, drizzle_solid_1.uri)('credential').predicate((0, udfs_1.UDFS)('credential')).link(models_1.credentialResource),
18
+ model: (0, drizzle_solid_1.uri)('model').predicate((0, udfs_1.UDFS)('model')).link(models_1.aiModelResource),
19
+ enabled: (0, drizzle_solid_1.string)('enabled').predicate((0, udfs_1.UDFS)('enabled')).default('true'),
20
+ temperature: (0, drizzle_solid_1.real)('temperature').predicate((0, udfs_1.UDFS)('temperature')).default(0.7),
21
+ tools: (0, drizzle_solid_1.text)('tools').array().predicate((0, udfs_1.UDFS)('tools')),
22
+ contextRound: (0, drizzle_solid_1.integer)('contextRound').predicate((0, udfs_1.UDFS)('contextRound')).default(4),
23
+ maxTurns: (0, drizzle_solid_1.integer)('maxTurns').predicate((0, udfs_1.UDFS)('maxTurns')),
24
+ timeout: (0, drizzle_solid_1.integer)('timeout').predicate((0, udfs_1.UDFS)('timeout')),
25
+ ttsModel: (0, drizzle_solid_1.uri)('ttsModel').predicate((0, udfs_1.UDFS)('ttsModel')).link(models_1.aiModelResource),
26
+ videoModel: (0, drizzle_solid_1.uri)('videoModel').predicate((0, udfs_1.UDFS)('videoModel')).link(models_1.aiModelResource),
26
27
  createdAt: (0, drizzle_solid_1.timestamp)('createdAt').predicate(models_1.DCTerms.created).notNull().defaultNow(),
27
28
  updatedAt: (0, drizzle_solid_1.timestamp)('updatedAt').predicate(models_1.DCTerms.modified).notNull().defaultNow(),
28
- deletedAt: (0, drizzle_solid_1.timestamp)('deletedAt').predicate(models_1.UDFS.deletedAt),
29
+ deletedAt: (0, drizzle_solid_1.timestamp)('deletedAt').predicate((0, udfs_1.UDFS)('deletedAt')),
29
30
  }, {
30
- type: models_1.UDFS.AgentConfig,
31
- namespace: models_1.UDFS,
31
+ type: udfs_1.UDFS.AgentConfig,
32
+ namespace: udfs_1.UDFS,
32
33
  });
33
34
  }
34
35
  //# sourceMappingURL=create-agent-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-agent-schema.js","sourceRoot":"","sources":["../../../src/agents/schema/create-agent-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DCTerms,\n FOAF,\n UDFS,\n VCARD,\n aiModelTable,\n credentialTable,\n} from '@undefineds.co/models';\nimport {\n integer,\n real,\n solidSchema,\n string,\n text,\n timestamp,\n uri,\n} from '@undefineds.co/drizzle-solid';\n\nexport interface CreateAgentSchemaOptions {\n nameRequired?: boolean;\n}\n\nexport function createAgentSchema(options: CreateAgentSchemaOptions = {}) {\n const nameColumn = string('name').predicate(FOAF.name);\n\n return solidSchema({\n id: string('id').primaryKey(),\n name: options.nameRequired === false ? nameColumn : nameColumn.notNull(),\n description: text('description').predicate(DCTerms.description),\n avatarUrl: uri('avatarUrl').predicate(VCARD.hasPhoto),\n instructions: text('instructions').predicate(UDFS.systemPrompt),\n provider: uri('provider').predicate(UDFS.provider),\n runtimeKind: string('runtimeKind').predicate(UDFS.runtimeKind),\n credential: uri('credential').predicate(UDFS.credential).link(credentialTable),\n model: uri('model').predicate(UDFS.model).link(aiModelTable),\n enabled: string('enabled').predicate(UDFS.enabled).default('true'),\n temperature: real('temperature').predicate(UDFS.temperature).default(0.7),\n tools: text('tools').array().predicate(UDFS.tools),\n contextRound: integer('contextRound').predicate(UDFS.contextRound).default(4),\n maxTurns: integer('maxTurns').predicate(UDFS.maxTurns),\n timeout: integer('timeout').predicate(UDFS.timeout),\n ttsModel: uri('ttsModel').predicate(UDFS.ttsModel).link(aiModelTable),\n videoModel: uri('videoModel').predicate(UDFS.videoModel).link(aiModelTable),\n createdAt: timestamp('createdAt').predicate(DCTerms.created).notNull().defaultNow(),\n updatedAt: timestamp('updatedAt').predicate(DCTerms.modified).notNull().defaultNow(),\n deletedAt: timestamp('deletedAt').predicate(UDFS.deletedAt),\n }, {\n type: UDFS.AgentConfig,\n namespace: UDFS,\n });\n}\n"]}
1
+ {"version":3,"file":"create-agent-schema.js","sourceRoot":"","sources":["../../../src/agents/schema/create-agent-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DCTerms,\n FOAF,\n VCARD,\n aiModelResource,\n credentialResource,\n} from '@undefineds.co/models';\nimport { UDFS } from '../../vocab/udfs';\nimport {\n integer,\n real,\n solidSchema,\n string,\n text,\n timestamp,\n uri,\n} from '@undefineds.co/drizzle-solid';\n\nexport interface CreateAgentSchemaOptions {\n nameRequired?: boolean;\n}\n\nexport function createAgentSchema(options: CreateAgentSchemaOptions = {}) {\n const nameColumn = string('name').predicate(FOAF.name);\n\n return solidSchema({\n id: string('id').primaryKey(),\n name: options.nameRequired === false ? nameColumn : nameColumn.notNull(),\n description: text('description').predicate(DCTerms.description),\n avatarUrl: uri('avatarUrl').predicate(VCARD.hasPhoto),\n instructions: text('instructions').predicate(UDFS('systemPrompt')),\n provider: uri('provider').predicate(UDFS('provider')),\n runtimeKind: string('runtimeKind').predicate(UDFS('runtimeKind')),\n credential: uri('credential').predicate(UDFS('credential')).link(credentialResource),\n model: uri('model').predicate(UDFS('model')).link(aiModelResource),\n enabled: string('enabled').predicate(UDFS('enabled')).default('true'),\n temperature: real('temperature').predicate(UDFS('temperature')).default(0.7),\n tools: text('tools').array().predicate(UDFS('tools')),\n contextRound: integer('contextRound').predicate(UDFS('contextRound')).default(4),\n maxTurns: integer('maxTurns').predicate(UDFS('maxTurns')),\n timeout: integer('timeout').predicate(UDFS('timeout')),\n ttsModel: uri('ttsModel').predicate(UDFS('ttsModel')).link(aiModelResource),\n videoModel: uri('videoModel').predicate(UDFS('videoModel')).link(aiModelResource),\n createdAt: timestamp('createdAt').predicate(DCTerms.created).notNull().defaultNow(),\n updatedAt: timestamp('updatedAt').predicate(DCTerms.modified).notNull().defaultNow(),\n deletedAt: timestamp('deletedAt').predicate(UDFS('deletedAt')),\n }, {\n type: UDFS.AgentConfig,\n namespace: UDFS,\n });\n}\n"]}
@@ -12,7 +12,7 @@ var RuntimeKind;
12
12
  RuntimeKind["CODEBUDDY"] = "codebuddy";
13
13
  RuntimeKind["CLAUDE"] = "claude";
14
14
  })(RuntimeKind || (exports.RuntimeKind = RuntimeKind = {}));
15
- exports.Provider = models_1.aiProviderTable;
15
+ exports.Provider = models_1.aiProviderResource;
16
16
  /**
17
17
  * Provider -> Model 关系定义
18
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/agents/schema/tables.ts"],"names":[],"mappings":";;;AAAA,gEAAyD;AACzD,kDAAwD;AACxD,iDAA8C;AAE9C;;GAEG;AACH,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;AACnB,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAEY,QAAA,QAAQ,GAAG,wBAAsB,CAAC;AAE/C;;GAEG;AACU,QAAA,iBAAiB,GAAG,IAAA,yBAAS,EAAC,gBAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACjE,KAAK,EAAE,GAAG,CAAC,aAAK,EAAE;QAChB,MAAM,EAAE,CAAC,gBAAQ,CAAC,YAAY,CAAC;QAC/B,UAAU,EAAE,CAAC,aAAK,CAAC,EAAS,CAAC;KAC9B,CAAC;CACH,CAAC,CAAC,CAAC","sourcesContent":["import { relations } from '@undefineds.co/drizzle-solid';\nimport { aiProviderTable } from '@undefineds.co/models';\nimport { Model } from '../../ai/schema/model';\n\n/**\n * 运行时类型(Agent SDK 类型)\n */\nexport enum RuntimeKind {\n CODEBUDDY = 'codebuddy',\n CLAUDE = 'claude',\n}\n\nexport const Provider = aiProviderTable as any;\n\n/**\n * Provider -> Model 关系定义\n */\nexport const ProviderRelations = relations(Provider, ({ one }) => ({\n model: one(Model, {\n fields: [Provider.defaultModel],\n references: [Model.id as any],\n }),\n}));\n"]}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/agents/schema/tables.ts"],"names":[],"mappings":";;;AAAA,gEAAyD;AACzD,kDAA2D;AAC3D,iDAA8C;AAE9C;;GAEG;AACH,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;AACnB,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAEY,QAAA,QAAQ,GAAG,2BAAyB,CAAC;AAElD;;GAEG;AACU,QAAA,iBAAiB,GAAG,IAAA,yBAAS,EAAC,gBAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACjE,KAAK,EAAE,GAAG,CAAC,aAAK,EAAE;QAChB,MAAM,EAAE,CAAC,gBAAQ,CAAC,YAAY,CAAC;QAC/B,UAAU,EAAE,CAAC,aAAK,CAAC,EAAS,CAAC;KAC9B,CAAC;CACH,CAAC,CAAC,CAAC","sourcesContent":["import { relations } from '@undefineds.co/drizzle-solid';\nimport { aiProviderResource } from '@undefineds.co/models';\nimport { Model } from '../../ai/schema/model';\n\n/**\n * 运行时类型(Agent SDK 类型)\n */\nexport enum RuntimeKind {\n CODEBUDDY = 'codebuddy',\n CLAUDE = 'claude',\n}\n\nexport const Provider = aiProviderResource as any;\n\n/**\n * Provider -> Model 关系定义\n */\nexport const ProviderRelations = relations(Provider, ({ one }) => ({\n model: one(Model, {\n fields: [Provider.defaultModel],\n references: [Model.id as any],\n }),\n}));\n"]}
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AIConfig = void 0;
4
4
  const models_1 = require("@undefineds.co/models");
5
- exports.AIConfig = models_1.linxSchema.aiConfigTable;
5
+ exports.AIConfig = models_1.aiConfigResource;
6
6
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/ai/schema/config.ts"],"names":[],"mappings":";;;AAAA,kDAAmD;AAEtC,QAAA,QAAQ,GAAG,mBAAU,CAAC,aAAoB,CAAC","sourcesContent":["import { linxSchema } from '@undefineds.co/models';\n\nexport const AIConfig = linxSchema.aiConfigTable as any;\n\nexport type AIConfigRow = typeof AIConfig.$inferSelect;\nexport type AIConfigInsert = typeof AIConfig.$inferInsert;\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/ai/schema/config.ts"],"names":[],"mappings":";;;AAAA,kDAAyD;AAE5C,QAAA,QAAQ,GAAG,yBAAuB,CAAC","sourcesContent":["import { aiConfigResource } from '@undefineds.co/models';\n\nexport const AIConfig = aiConfigResource as any;\n\nexport type AIConfigRow = typeof AIConfig.$inferSelect;\nexport type AIConfigInsert = typeof AIConfig.$inferInsert;\n"]}
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ProviderRelations = exports.ModelRelations = exports.Model = void 0;
4
4
  const drizzle_solid_1 = require("@undefineds.co/drizzle-solid");
5
5
  const models_1 = require("@undefineds.co/models");
6
- exports.Model = models_1.aiModelTable;
7
- const Provider = models_1.aiProviderTable;
6
+ exports.Model = models_1.aiModelResource;
7
+ const Provider = models_1.aiProviderResource;
8
8
  exports.ModelRelations = (0, drizzle_solid_1.relations)(exports.Model, ({ one }) => ({
9
9
  provider: one(Provider, {
10
10
  fields: [exports.Model.isProvidedBy],
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/ai/schema/model.ts"],"names":[],"mappings":";;;AAAA,gEAAyD;AACzD,kDAAsE;AAEzD,QAAA,KAAK,GAAG,qBAAmB,CAAC;AACzC,MAAM,QAAQ,GAAG,wBAAsB,CAAC;AAK3B,QAAA,cAAc,GAAG,IAAA,yBAAS,EAAC,aAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3D,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE;QACtB,MAAM,EAAE,CAAC,aAAK,CAAC,YAAY,CAAC;QAC5B,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAS,CAAC;KACjC,CAAC;CACH,CAAC,CAAC,CAAC;AAES,QAAA,iBAAiB,GAAG,IAAA,yBAAS,EAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,IAAI,CAAC,aAAK,EAAE;QAClB,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3B,UAAU,EAAE,CAAC,aAAK,CAAC,EAAS,CAAC;KAC9B,CAAC;CACH,CAAC,CAAC,CAAC","sourcesContent":["import { relations } from '@undefineds.co/drizzle-solid';\nimport { aiModelTable, aiProviderTable } from '@undefineds.co/models';\n\nexport const Model = aiModelTable as any;\nconst Provider = aiProviderTable as any;\n\nexport type ModelRow = typeof Model.$inferSelect;\nexport type ModelInsert = typeof Model.$inferInsert;\n\nexport const ModelRelations = relations(Model, ({ one }) => ({\n provider: one(Provider, {\n fields: [Model.isProvidedBy],\n references: [Provider.id as any],\n }),\n}));\n\nexport const ProviderRelations = relations(Provider, ({ many }) => ({\n models: many(Model, {\n fields: [Provider.hasModel],\n references: [Model.id as any],\n }),\n}));\n"]}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/ai/schema/model.ts"],"names":[],"mappings":";;;AAAA,gEAAyD;AACzD,kDAA4E;AAE/D,QAAA,KAAK,GAAG,wBAAsB,CAAC;AAC5C,MAAM,QAAQ,GAAG,2BAAyB,CAAC;AAK9B,QAAA,cAAc,GAAG,IAAA,yBAAS,EAAC,aAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3D,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE;QACtB,MAAM,EAAE,CAAC,aAAK,CAAC,YAAY,CAAC;QAC5B,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAS,CAAC;KACjC,CAAC;CACH,CAAC,CAAC,CAAC;AAES,QAAA,iBAAiB,GAAG,IAAA,yBAAS,EAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,IAAI,CAAC,aAAK,EAAE;QAClB,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3B,UAAU,EAAE,CAAC,aAAK,CAAC,EAAS,CAAC;KAC9B,CAAC;CACH,CAAC,CAAC,CAAC","sourcesContent":["import { relations } from '@undefineds.co/drizzle-solid';\nimport { aiModelResource, aiProviderResource } from '@undefineds.co/models';\n\nexport const Model = aiModelResource as any;\nconst Provider = aiProviderResource as any;\n\nexport type ModelRow = typeof Model.$inferSelect;\nexport type ModelInsert = typeof Model.$inferInsert;\n\nexport const ModelRelations = relations(Model, ({ one }) => ({\n provider: one(Provider, {\n fields: [Model.isProvidedBy],\n references: [Provider.id as any],\n }),\n}));\n\nexport const ProviderRelations = relations(Provider, ({ many }) => ({\n models: many(Model, {\n fields: [Provider.hasModel],\n references: [Model.id as any],\n }),\n}));\n"]}
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Provider = void 0;
4
4
  const models_1 = require("@undefineds.co/models");
5
- exports.Provider = models_1.aiProviderTable;
5
+ exports.Provider = models_1.aiProviderResource;
6
6
  //# sourceMappingURL=provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/ai/schema/provider.ts"],"names":[],"mappings":";;;AAAA,kDAAwD;AAE3C,QAAA,QAAQ,GAAG,wBAAsB,CAAC","sourcesContent":["import { aiProviderTable } from '@undefineds.co/models';\n\nexport const Provider = aiProviderTable as any;\n\nexport type ProviderRow = typeof Provider.$inferSelect;\nexport type ProviderInsert = typeof Provider.$inferInsert;\n"]}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/ai/schema/provider.ts"],"names":[],"mappings":";;;AAAA,kDAA2D;AAE9C,QAAA,QAAQ,GAAG,2BAAyB,CAAC","sourcesContent":["import { aiProviderResource } from '@undefineds.co/models';\n\nexport const Provider = aiProviderResource as any;\n\nexport type ProviderRow = typeof Provider.$inferSelect;\nexport type ProviderInsert = typeof Provider.$inferInsert;\n"]}
@@ -2,6 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.IndexedFile = exports.VectorStore = void 0;
4
4
  const models_1 = require("@undefineds.co/models");
5
- exports.VectorStore = models_1.linxSchema.vectorStoreTable;
6
- exports.IndexedFile = models_1.linxSchema.indexedFileTable;
5
+ exports.VectorStore = models_1.vectorStoreResource;
6
+ exports.IndexedFile = models_1.indexedFileResource;
7
7
  //# sourceMappingURL=vector-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../../src/ai/schema/vector-store.ts"],"names":[],"mappings":";;;AAAA,kDAAmD;AAEtC,QAAA,WAAW,GAAG,mBAAU,CAAC,gBAAuB,CAAC;AAKjD,QAAA,WAAW,GAAG,mBAAU,CAAC,gBAAuB,CAAC","sourcesContent":["import { linxSchema } from '@undefineds.co/models';\n\nexport const VectorStore = linxSchema.vectorStoreTable as any;\n\nexport type VectorStoreRow = typeof VectorStore.$inferSelect;\nexport type VectorStoreInsert = typeof VectorStore.$inferInsert;\n\nexport const IndexedFile = linxSchema.indexedFileTable as any;\n\nexport type IndexedFileRow = typeof IndexedFile.$inferSelect;\nexport type IndexedFileInsert = typeof IndexedFile.$inferInsert;\n"]}
1
+ {"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../../src/ai/schema/vector-store.ts"],"names":[],"mappings":";;;AAAA,kDAAiF;AAEpE,QAAA,WAAW,GAAG,4BAA0B,CAAC;AAKzC,QAAA,WAAW,GAAG,4BAA0B,CAAC","sourcesContent":["import { indexedFileResource, vectorStoreResource } from '@undefineds.co/models';\n\nexport const VectorStore = vectorStoreResource as any;\n\nexport type VectorStoreRow = typeof VectorStore.$inferSelect;\nexport type VectorStoreInsert = typeof VectorStore.$inferInsert;\n\nexport const IndexedFile = indexedFileResource as any;\n\nexport type IndexedFileRow = typeof IndexedFile.$inferSelect;\nexport type IndexedFileInsert = typeof IndexedFile.$inferInsert;\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Credential = exports.OAuthCredential = exports.ApiKeyCredential = void 0;
4
4
  const models_1 = require("@undefineds.co/models");
5
- exports.ApiKeyCredential = models_1.apiKeyCredentialTable;
6
- exports.OAuthCredential = models_1.oauthCredentialTable;
7
- exports.Credential = models_1.credentialTable;
5
+ exports.ApiKeyCredential = models_1.apiKeyCredentialResource;
6
+ exports.OAuthCredential = models_1.oauthCredentialResource;
7
+ exports.Credential = models_1.credentialResource;
8
8
  //# sourceMappingURL=tables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/credential/schema/tables.ts"],"names":[],"mappings":";;;AAAA,kDAI+B;AAElB,QAAA,gBAAgB,GAAG,8BAA4B,CAAC;AAChD,QAAA,eAAe,GAAG,6BAA2B,CAAC;AAC9C,QAAA,UAAU,GAAG,wBAAsB,CAAC","sourcesContent":["import {\n apiKeyCredentialTable,\n credentialTable,\n oauthCredentialTable,\n} from '@undefineds.co/models';\n\nexport const ApiKeyCredential = apiKeyCredentialTable as any;\nexport const OAuthCredential = oauthCredentialTable as any;\nexport const Credential = credentialTable as any;\n\nexport type ApiKeyCredentialRow = typeof ApiKeyCredential.$inferSelect;\nexport type ApiKeyCredentialInsert = typeof ApiKeyCredential.$inferInsert;\nexport type OAuthCredentialRow = typeof OAuthCredential.$inferSelect;\nexport type OAuthCredentialInsert = typeof OAuthCredential.$inferInsert;\nexport type CredentialRow = typeof Credential.$inferSelect;\nexport type CredentialInsert = typeof Credential.$inferInsert;\n"]}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../../src/credential/schema/tables.ts"],"names":[],"mappings":";;;AAAA,kDAI+B;AAElB,QAAA,gBAAgB,GAAG,iCAA+B,CAAC;AACnD,QAAA,eAAe,GAAG,gCAA8B,CAAC;AACjD,QAAA,UAAU,GAAG,2BAAyB,CAAC","sourcesContent":["import {\n apiKeyCredentialResource,\n credentialResource,\n oauthCredentialResource,\n} from '@undefineds.co/models';\n\nexport const ApiKeyCredential = apiKeyCredentialResource as any;\nexport const OAuthCredential = oauthCredentialResource as any;\nexport const Credential = credentialResource as any;\n\nexport type ApiKeyCredentialRow = typeof ApiKeyCredential.$inferSelect;\nexport type ApiKeyCredentialInsert = typeof ApiKeyCredential.$inferInsert;\nexport type OAuthCredentialRow = typeof OAuthCredential.$inferSelect;\nexport type OAuthCredentialInsert = typeof OAuthCredential.$inferInsert;\nexport type CredentialRow = typeof Credential.$inferSelect;\nexport type CredentialInsert = typeof Credential.$inferInsert;\n"]}
@@ -20,6 +20,7 @@ export declare class GatewayProxy {
20
20
  stop(): Promise<void>;
21
21
  private handleRequest;
22
22
  private shouldInspectRootMutation;
23
+ private isWebIdProfileRoute;
23
24
  private normalizeRootMutationProxyResponse;
24
25
  private sanitizeProxyResponseHeaders;
25
26
  private handleCorsPreflightRequest;
@@ -146,6 +146,10 @@ class GatewayProxy {
146
146
  this.proxy.web(req, res, { target: this.toProxyTarget(this.targets.api) });
147
147
  return;
148
148
  }
149
+ if (this.isWebIdProfileRoute(url) && this.targets.api) {
150
+ this.proxy.web(req, res, { target: this.toProxyTarget(this.targets.api) });
151
+ return;
152
+ }
149
153
  // 3. CSS Routing (Default)
150
154
  if (this.targets.css) {
151
155
  const interceptedRequest = req;
@@ -169,6 +173,11 @@ class GatewayProxy {
169
173
  const segments = pathname.split('/').filter(Boolean);
170
174
  return segments.length === 1 && !segments[0].startsWith('.');
171
175
  }
176
+ isWebIdProfileRoute(url) {
177
+ const pathname = new URL(url, 'http://localhost').pathname;
178
+ const segments = pathname.split('/').filter(Boolean);
179
+ return segments.length === 3 && segments[1] === 'profile' && segments[2] === 'card';
180
+ }
172
181
  normalizeRootMutationProxyResponse(proxyRes, body) {
173
182
  const headers = { ...proxyRes.headers };
174
183
  const statusCode = proxyRes.statusCode ?? 500;
@@ -1 +1 @@
1
- {"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../src/runtime/Proxy.ts"],"names":[],"mappings":"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","sourcesContent":["import httpProxy from 'http-proxy';\nimport http from 'http';\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { Supervisor } from '../supervisor/Supervisor';\nimport { nodeRuntimeHost } from './host/node/NodeRuntimeHost';\nimport type { RuntimeHost, RuntimeListenEndpoint } from './host/types';\n\ntype InterceptedRequest = http.IncomingMessage & { __xpodInspectRootMutation?: boolean };\n\n// CORS configuration matching CSS CorsHandler defaults\nconst CORS_CONFIG = {\n methods: ['GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE'],\n credentials: true,\n allowedHeaders: [\n 'Authorization', 'Content-Type', 'Accept', 'DPoP', 'Origin',\n 'X-Requested-With', 'If-Match', 'If-None-Match', 'Slug', 'Link',\n ],\n exposedHeaders: [\n 'Accept-Patch', 'Accept-Post', 'Accept-Put', 'Allow', 'Content-Range',\n 'ETag', 'Last-Modified', 'Link', 'Location', 'Updates-Via',\n 'WAC-Allow', 'Www-Authenticate', 'X-Request-Id',\n ],\n};\n\nexport class GatewayProxy {\n private readonly logger = getLoggerFor(this);\n private proxy: httpProxy;\n private server: http.Server;\n private targets: { css?: GatewayProxyTarget; api?: GatewayProxyTarget } = {};\n private readonly runtimeHost: RuntimeHost;\n private readonly listenEndpoint: RuntimeListenEndpoint;\n private readonly exitOnStop: boolean;\n private readonly shutdownHandler?: () => Promise<void>;\n private readonly baseUrl?: string;\n\n constructor(\n port: number | undefined,\n private supervisor: Supervisor,\n bindHost = '0.0.0.0',\n options: GatewayProxyOptions = {},\n ) {\n this.runtimeHost = options.runtimeHost ?? nodeRuntimeHost;\n this.listenEndpoint = options.listenEndpoint ?? this.runtimeHost.createListenEndpoint({\n port,\n host: bindHost,\n socketPath: options.socketPath,\n });\n this.exitOnStop = options.exitOnStop ?? false;\n this.shutdownHandler = options.shutdownHandler;\n this.baseUrl = options.baseUrl;\n this.proxy = httpProxy.createProxyServer({\n xfwd: true,\n });\n\n this.proxy.on('error', (err, _req, res) => {\n this.logger.error('Proxy error:', err);\n if (res && 'writeHead' in res && !res.headersSent) {\n res.writeHead(502, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Service Unavailable', details: err.message }));\n }\n });\n\n this.proxy.on('proxyRes', (proxyRes, req, res) => {\n this.sanitizeProxyResponseHeaders(req, proxyRes);\n const interceptedRequest = req as InterceptedRequest;\n const outgoing = res as http.ServerResponse;\n if (!interceptedRequest.__xpodInspectRootMutation || !outgoing || outgoing.headersSent) {\n return;\n }\n\n const chunks: Buffer[] = [];\n proxyRes.on('data', (chunk) => {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n proxyRes.on('end', () => {\n const originalBody = Buffer.concat(chunks);\n const rewritten = this.normalizeRootMutationProxyResponse(proxyRes, originalBody);\n outgoing.writeHead(rewritten.statusCode, rewritten.headers);\n outgoing.end(rewritten.body);\n });\n });\n\n this.server = http.createServer(this.handleRequest.bind(this));\n\n this.server.on('upgrade', (req, socket, head) => {\n const url = req.url ?? '/';\n\n // Route /ws/* WebSocket connections to API server\n if (url.startsWith('/ws/') && this.targets.api) {\n this.proxy.ws(req, socket, head, { target: this.toProxyTarget(this.targets.api) as any });\n } else if (this.targets.css) {\n this.proxy.ws(req, socket, head, { target: this.toProxyTarget(this.targets.css) as any });\n } else {\n socket.destroy();\n }\n });\n }\n\n public setTargets(targets: { css?: string | GatewayProxyTarget; api?: string | GatewayProxyTarget }): void {\n this.targets = {\n css: this.normalizeTarget(targets.css),\n api: this.normalizeTarget(targets.api),\n };\n }\n\n public async start(): Promise<void> {\n await this.runtimeHost.listen(this.server, this.listenEndpoint);\n this.logger.info(`Listening on ${this.runtimeHost.formatListenEndpoint(this.listenEndpoint)}`);\n }\n\n public stop(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.proxy.close();\n this.runtimeHost.close(this.server, this.listenEndpoint).then(() => {\n resolve();\n }, reject);\n });\n }\n\n private handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void {\n const url = req.url ?? '/';\n const origin = req.headers.origin;\n\n // Store original host for x-forwarded-host before any rewrites\n const originalHost = req.headers.host;\n\n // Set x-forwarded-proto based on CSS_BASE_URL\n const baseUrl = this.baseUrl ?? process.env.CSS_BASE_URL ?? '';\n if (baseUrl.startsWith('https')) {\n req.headers['x-forwarded-proto'] = 'https';\n }\n\n // Rewrite Host header to match CSS_BASE_URL for proper routing\n if (baseUrl) {\n try {\n const parsedBaseUrl = new URL(baseUrl);\n req.headers.host = parsedBaseUrl.host;\n req.headers['x-forwarded-host'] = parsedBaseUrl.host;\n } catch {\n if (!req.headers['x-forwarded-host']) {\n req.headers['x-forwarded-host'] = originalHost;\n }\n }\n } else if (!req.headers['x-forwarded-host']) {\n req.headers['x-forwarded-host'] = originalHost;\n }\n\n this.logger.debug(\n `${req.method} ${url} x-forwarded-proto=${req.headers['x-forwarded-proto']} x-forwarded-host=${req.headers['x-forwarded-host']} host=${req.headers.host}`,\n );\n\n // 1. Internal service endpoints\n if (url.startsWith('/service/')) {\n if (req.method === 'OPTIONS') {\n this.handleCorsPreflightRequest(res, origin);\n return;\n }\n if (origin) {\n this.addCorsHeaders(res, origin);\n }\n void this.handleInternalApi(req, res);\n return;\n }\n\n // 2. API Server Routing (/v1 or /api)\n\n // 2a. Dashboard UI is served by API server under /dashboard/*\n if ((url === '/dashboard' || url.startsWith('/dashboard/')) && this.targets.api) {\n this.proxy.web(req, res, { target: this.toProxyTarget(this.targets.api) as any });\n return;\n }\n\n if ((url.startsWith('/v1/') || url.startsWith('/api/') || url.startsWith('/provision/')) && this.targets.api) {\n this.proxy.web(req, res, { target: this.toProxyTarget(this.targets.api) as any });\n return;\n }\n\n // 3. CSS Routing (Default)\n if (this.targets.css) {\n const interceptedRequest = req as InterceptedRequest;\n interceptedRequest.__xpodInspectRootMutation = this.shouldInspectRootMutation(req);\n this.proxy.web(req, res, {\n target: this.toProxyTarget(this.targets.css) as any,\n ...(interceptedRequest.__xpodInspectRootMutation ? { selfHandleResponse: true } : {}),\n } as any);\n } else {\n res.writeHead(503);\n res.end('CSS Service Not Available');\n }\n }\n\n private shouldInspectRootMutation(req: http.IncomingMessage): boolean {\n const method = (req.method ?? 'GET').toUpperCase();\n if (![ 'POST', 'PUT', 'PATCH', 'DELETE' ].includes(method)) {\n return false;\n }\n\n const pathname = new URL(req.url ?? '/', 'http://localhost').pathname;\n const segments = pathname.split('/').filter(Boolean);\n return segments.length === 1 && !segments[0].startsWith('.');\n }\n\n private normalizeRootMutationProxyResponse(\n proxyRes: http.IncomingMessage,\n body: Buffer,\n ): { statusCode: number; headers: http.OutgoingHttpHeaders; body: Buffer } {\n const headers: http.OutgoingHttpHeaders = { ...proxyRes.headers };\n const statusCode = proxyRes.statusCode ?? 500;\n const contentType = typeof proxyRes.headers['content-type'] === 'string'\n ? proxyRes.headers['content-type']\n : Array.isArray(proxyRes.headers['content-type'])\n ? proxyRes.headers['content-type'][0] ?? ''\n : '';\n const bodyText = contentType.includes('application/json') ? body.toString('utf8') : '';\n\n if (\n statusCode === 500 &&\n bodyText.includes('Cannot obtain the parent of') &&\n bodyText.includes('because it is a root container')\n ) {\n const normalizedBody = Buffer.from(JSON.stringify({\n name: 'ForbiddenHttpError',\n message: 'Write to server root is not allowed.',\n statusCode: 403,\n errorCode: 'H403',\n details: { cause: 'root-container-write' },\n }));\n delete headers['content-length'];\n delete headers['transfer-encoding'];\n headers['content-type'] = 'application/json';\n headers['content-length'] = String(normalizedBody.byteLength);\n return { statusCode: 403, headers, body: normalizedBody };\n }\n\n delete headers['transfer-encoding'];\n headers['content-length'] = String(body.byteLength);\n return { statusCode, headers, body };\n }\n\n private sanitizeProxyResponseHeaders(req: http.IncomingMessage, proxyRes: http.IncomingMessage): void {\n const method = (req.method ?? 'GET').toUpperCase();\n const statusCode = proxyRes.statusCode ?? 200;\n const headers = proxyRes.headers as Record<string, string | string[] | undefined>;\n const transferEncoding = headers['transfer-encoding'];\n const hasTransferEncoding = Array.isArray(transferEncoding)\n ? transferEncoding.some((value) => value.toLowerCase().includes('chunked'))\n : typeof transferEncoding === 'string'\n ? transferEncoding.toLowerCase().includes('chunked')\n : false;\n\n if (method === 'HEAD' || statusCode === 204 || statusCode === 304 || (statusCode >= 100 && statusCode < 200)) {\n delete headers['transfer-encoding'];\n return;\n }\n\n if (hasTransferEncoding && headers['content-length'] !== undefined) {\n delete headers['content-length'];\n }\n }\n\n private handleCorsPreflightRequest(\n res: http.ServerResponse,\n origin: string | undefined,\n ): void {\n this.addCorsHeaders(res, origin);\n res.writeHead(204);\n res.end();\n }\n\n /**\n * Add CORS headers matching CSS CorsHandler configuration\n */\n private addCorsHeaders(res: http.ServerResponse, origin: string | undefined): void {\n res.setHeader('Access-Control-Allow-Origin', origin || '*');\n res.setHeader('Access-Control-Allow-Credentials', String(CORS_CONFIG.credentials));\n res.setHeader('Access-Control-Allow-Methods', CORS_CONFIG.methods.join(', '));\n res.setHeader('Access-Control-Allow-Headers', CORS_CONFIG.allowedHeaders.join(', '));\n res.setHeader('Access-Control-Expose-Headers', CORS_CONFIG.exposedHeaders.join(', '));\n }\n\n private async handleInternalApi(req: http.IncomingMessage, res: http.ServerResponse): Promise<void> {\n try {\n const reqUrl = req.url ?? '/';\n const parsed = new URL(reqUrl, 'http://localhost');\n const pathname = parsed.pathname;\n\n if (pathname === '/service/status') {\n const status = this.supervisor.getAllStatus();\n const cssReady = await this.isCssReady();\n const code = cssReady ? 200 : 503;\n res.writeHead(code, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(status));\n return;\n }\n\n if (pathname === '/service/logs') {\n const level = parsed.searchParams.get('level') ?? undefined;\n const source = parsed.searchParams.get('source') ?? undefined;\n const limitValue = parsed.searchParams.get('limit');\n const limit = limitValue ? parseInt(limitValue, 10) : undefined;\n\n const logs = this.supervisor.getLogs({\n level,\n source,\n limit: Number.isFinite(limit as number) ? limit : undefined,\n });\n\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(logs));\n return;\n }\n\n if (pathname === '/service/stop' && req.method === 'POST') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ ok: true }));\n setImmediate(() => {\n const shutdown = this.shutdownHandler ?? (() => this.supervisor.stopAll());\n void shutdown().then(() => {\n if (this.exitOnStop) {\n process.exit(0);\n }\n });\n });\n return;\n }\n\n res.writeHead(404);\n res.end('Not Found');\n } catch (error) {\n this.logger.error('Internal service endpoint failed:', error);\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n }\n res.end(JSON.stringify({ error: 'Internal Server Error' }));\n }\n }\n\n private async isCssReady(): Promise<boolean> {\n if (!this.targets.css) {\n return true;\n }\n\n return this.runtimeHost.isConnectionTargetReady(this.targets.css, 1_500);\n }\n\n private normalizeTarget(target?: string | GatewayProxyTarget): GatewayProxyTarget | undefined {\n if (!target) {\n return undefined;\n }\n if (typeof target === 'string') {\n return { url: target };\n }\n return target;\n }\n\n private toProxyTarget(target: GatewayProxyTarget): string | { socketPath: string; protocol: string } {\n if (target.socketPath) {\n return {\n socketPath: target.socketPath,\n protocol: 'http:',\n };\n }\n return target.url!;\n }\n}\n\nexport interface GatewayProxyTarget {\n url?: string;\n socketPath?: string;\n}\n\nexport interface GatewayProxyOptions {\n socketPath?: string;\n listenEndpoint?: RuntimeListenEndpoint;\n runtimeHost?: RuntimeHost;\n exitOnStop?: boolean;\n shutdownHandler?: () => Promise<void>;\n baseUrl?: string;\n}\n"]}
1
+ {"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../src/runtime/Proxy.ts"],"names":[],"mappings":"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","sourcesContent":["import httpProxy from 'http-proxy';\nimport http from 'http';\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { Supervisor } from '../supervisor/Supervisor';\nimport { nodeRuntimeHost } from './host/node/NodeRuntimeHost';\nimport type { RuntimeHost, RuntimeListenEndpoint } from './host/types';\n\ntype InterceptedRequest = http.IncomingMessage & { __xpodInspectRootMutation?: boolean };\n\n// CORS configuration matching CSS CorsHandler defaults\nconst CORS_CONFIG = {\n methods: ['GET', 'HEAD', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE'],\n credentials: true,\n allowedHeaders: [\n 'Authorization', 'Content-Type', 'Accept', 'DPoP', 'Origin',\n 'X-Requested-With', 'If-Match', 'If-None-Match', 'Slug', 'Link',\n ],\n exposedHeaders: [\n 'Accept-Patch', 'Accept-Post', 'Accept-Put', 'Allow', 'Content-Range',\n 'ETag', 'Last-Modified', 'Link', 'Location', 'Updates-Via',\n 'WAC-Allow', 'Www-Authenticate', 'X-Request-Id',\n ],\n};\n\nexport class GatewayProxy {\n private readonly logger = getLoggerFor(this);\n private proxy: httpProxy;\n private server: http.Server;\n private targets: { css?: GatewayProxyTarget; api?: GatewayProxyTarget } = {};\n private readonly runtimeHost: RuntimeHost;\n private readonly listenEndpoint: RuntimeListenEndpoint;\n private readonly exitOnStop: boolean;\n private readonly shutdownHandler?: () => Promise<void>;\n private readonly baseUrl?: string;\n\n constructor(\n port: number | undefined,\n private supervisor: Supervisor,\n bindHost = '0.0.0.0',\n options: GatewayProxyOptions = {},\n ) {\n this.runtimeHost = options.runtimeHost ?? nodeRuntimeHost;\n this.listenEndpoint = options.listenEndpoint ?? this.runtimeHost.createListenEndpoint({\n port,\n host: bindHost,\n socketPath: options.socketPath,\n });\n this.exitOnStop = options.exitOnStop ?? false;\n this.shutdownHandler = options.shutdownHandler;\n this.baseUrl = options.baseUrl;\n this.proxy = httpProxy.createProxyServer({\n xfwd: true,\n });\n\n this.proxy.on('error', (err, _req, res) => {\n this.logger.error('Proxy error:', err);\n if (res && 'writeHead' in res && !res.headersSent) {\n res.writeHead(502, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ error: 'Service Unavailable', details: err.message }));\n }\n });\n\n this.proxy.on('proxyRes', (proxyRes, req, res) => {\n this.sanitizeProxyResponseHeaders(req, proxyRes);\n const interceptedRequest = req as InterceptedRequest;\n const outgoing = res as http.ServerResponse;\n if (!interceptedRequest.__xpodInspectRootMutation || !outgoing || outgoing.headersSent) {\n return;\n }\n\n const chunks: Buffer[] = [];\n proxyRes.on('data', (chunk) => {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n });\n proxyRes.on('end', () => {\n const originalBody = Buffer.concat(chunks);\n const rewritten = this.normalizeRootMutationProxyResponse(proxyRes, originalBody);\n outgoing.writeHead(rewritten.statusCode, rewritten.headers);\n outgoing.end(rewritten.body);\n });\n });\n\n this.server = http.createServer(this.handleRequest.bind(this));\n\n this.server.on('upgrade', (req, socket, head) => {\n const url = req.url ?? '/';\n\n // Route /ws/* WebSocket connections to API server\n if (url.startsWith('/ws/') && this.targets.api) {\n this.proxy.ws(req, socket, head, { target: this.toProxyTarget(this.targets.api) as any });\n } else if (this.targets.css) {\n this.proxy.ws(req, socket, head, { target: this.toProxyTarget(this.targets.css) as any });\n } else {\n socket.destroy();\n }\n });\n }\n\n public setTargets(targets: { css?: string | GatewayProxyTarget; api?: string | GatewayProxyTarget }): void {\n this.targets = {\n css: this.normalizeTarget(targets.css),\n api: this.normalizeTarget(targets.api),\n };\n }\n\n public async start(): Promise<void> {\n await this.runtimeHost.listen(this.server, this.listenEndpoint);\n this.logger.info(`Listening on ${this.runtimeHost.formatListenEndpoint(this.listenEndpoint)}`);\n }\n\n public stop(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.proxy.close();\n this.runtimeHost.close(this.server, this.listenEndpoint).then(() => {\n resolve();\n }, reject);\n });\n }\n\n private handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void {\n const url = req.url ?? '/';\n const origin = req.headers.origin;\n\n // Store original host for x-forwarded-host before any rewrites\n const originalHost = req.headers.host;\n\n // Set x-forwarded-proto based on CSS_BASE_URL\n const baseUrl = this.baseUrl ?? process.env.CSS_BASE_URL ?? '';\n if (baseUrl.startsWith('https')) {\n req.headers['x-forwarded-proto'] = 'https';\n }\n\n // Rewrite Host header to match CSS_BASE_URL for proper routing\n if (baseUrl) {\n try {\n const parsedBaseUrl = new URL(baseUrl);\n req.headers.host = parsedBaseUrl.host;\n req.headers['x-forwarded-host'] = parsedBaseUrl.host;\n } catch {\n if (!req.headers['x-forwarded-host']) {\n req.headers['x-forwarded-host'] = originalHost;\n }\n }\n } else if (!req.headers['x-forwarded-host']) {\n req.headers['x-forwarded-host'] = originalHost;\n }\n\n this.logger.debug(\n `${req.method} ${url} x-forwarded-proto=${req.headers['x-forwarded-proto']} x-forwarded-host=${req.headers['x-forwarded-host']} host=${req.headers.host}`,\n );\n\n // 1. Internal service endpoints\n if (url.startsWith('/service/')) {\n if (req.method === 'OPTIONS') {\n this.handleCorsPreflightRequest(res, origin);\n return;\n }\n if (origin) {\n this.addCorsHeaders(res, origin);\n }\n void this.handleInternalApi(req, res);\n return;\n }\n\n // 2. API Server Routing (/v1 or /api)\n\n // 2a. Dashboard UI is served by API server under /dashboard/*\n if ((url === '/dashboard' || url.startsWith('/dashboard/')) && this.targets.api) {\n this.proxy.web(req, res, { target: this.toProxyTarget(this.targets.api) as any });\n return;\n }\n\n if ((url.startsWith('/v1/') || url.startsWith('/api/') || url.startsWith('/provision/')) && this.targets.api) {\n this.proxy.web(req, res, { target: this.toProxyTarget(this.targets.api) as any });\n return;\n }\n\n if (this.isWebIdProfileRoute(url) && this.targets.api) {\n this.proxy.web(req, res, { target: this.toProxyTarget(this.targets.api) as any });\n return;\n }\n\n // 3. CSS Routing (Default)\n if (this.targets.css) {\n const interceptedRequest = req as InterceptedRequest;\n interceptedRequest.__xpodInspectRootMutation = this.shouldInspectRootMutation(req);\n this.proxy.web(req, res, {\n target: this.toProxyTarget(this.targets.css) as any,\n ...(interceptedRequest.__xpodInspectRootMutation ? { selfHandleResponse: true } : {}),\n } as any);\n } else {\n res.writeHead(503);\n res.end('CSS Service Not Available');\n }\n }\n\n private shouldInspectRootMutation(req: http.IncomingMessage): boolean {\n const method = (req.method ?? 'GET').toUpperCase();\n if (![ 'POST', 'PUT', 'PATCH', 'DELETE' ].includes(method)) {\n return false;\n }\n\n const pathname = new URL(req.url ?? '/', 'http://localhost').pathname;\n const segments = pathname.split('/').filter(Boolean);\n return segments.length === 1 && !segments[0].startsWith('.');\n }\n\n private isWebIdProfileRoute(url: string): boolean {\n const pathname = new URL(url, 'http://localhost').pathname;\n const segments = pathname.split('/').filter(Boolean);\n return segments.length === 3 && segments[1] === 'profile' && segments[2] === 'card';\n }\n\n private normalizeRootMutationProxyResponse(\n proxyRes: http.IncomingMessage,\n body: Buffer,\n ): { statusCode: number; headers: http.OutgoingHttpHeaders; body: Buffer } {\n const headers: http.OutgoingHttpHeaders = { ...proxyRes.headers };\n const statusCode = proxyRes.statusCode ?? 500;\n const contentType = typeof proxyRes.headers['content-type'] === 'string'\n ? proxyRes.headers['content-type']\n : Array.isArray(proxyRes.headers['content-type'])\n ? proxyRes.headers['content-type'][0] ?? ''\n : '';\n const bodyText = contentType.includes('application/json') ? body.toString('utf8') : '';\n\n if (\n statusCode === 500 &&\n bodyText.includes('Cannot obtain the parent of') &&\n bodyText.includes('because it is a root container')\n ) {\n const normalizedBody = Buffer.from(JSON.stringify({\n name: 'ForbiddenHttpError',\n message: 'Write to server root is not allowed.',\n statusCode: 403,\n errorCode: 'H403',\n details: { cause: 'root-container-write' },\n }));\n delete headers['content-length'];\n delete headers['transfer-encoding'];\n headers['content-type'] = 'application/json';\n headers['content-length'] = String(normalizedBody.byteLength);\n return { statusCode: 403, headers, body: normalizedBody };\n }\n\n delete headers['transfer-encoding'];\n headers['content-length'] = String(body.byteLength);\n return { statusCode, headers, body };\n }\n\n private sanitizeProxyResponseHeaders(req: http.IncomingMessage, proxyRes: http.IncomingMessage): void {\n const method = (req.method ?? 'GET').toUpperCase();\n const statusCode = proxyRes.statusCode ?? 200;\n const headers = proxyRes.headers as Record<string, string | string[] | undefined>;\n const transferEncoding = headers['transfer-encoding'];\n const hasTransferEncoding = Array.isArray(transferEncoding)\n ? transferEncoding.some((value) => value.toLowerCase().includes('chunked'))\n : typeof transferEncoding === 'string'\n ? transferEncoding.toLowerCase().includes('chunked')\n : false;\n\n if (method === 'HEAD' || statusCode === 204 || statusCode === 304 || (statusCode >= 100 && statusCode < 200)) {\n delete headers['transfer-encoding'];\n return;\n }\n\n if (hasTransferEncoding && headers['content-length'] !== undefined) {\n delete headers['content-length'];\n }\n }\n\n private handleCorsPreflightRequest(\n res: http.ServerResponse,\n origin: string | undefined,\n ): void {\n this.addCorsHeaders(res, origin);\n res.writeHead(204);\n res.end();\n }\n\n /**\n * Add CORS headers matching CSS CorsHandler configuration\n */\n private addCorsHeaders(res: http.ServerResponse, origin: string | undefined): void {\n res.setHeader('Access-Control-Allow-Origin', origin || '*');\n res.setHeader('Access-Control-Allow-Credentials', String(CORS_CONFIG.credentials));\n res.setHeader('Access-Control-Allow-Methods', CORS_CONFIG.methods.join(', '));\n res.setHeader('Access-Control-Allow-Headers', CORS_CONFIG.allowedHeaders.join(', '));\n res.setHeader('Access-Control-Expose-Headers', CORS_CONFIG.exposedHeaders.join(', '));\n }\n\n private async handleInternalApi(req: http.IncomingMessage, res: http.ServerResponse): Promise<void> {\n try {\n const reqUrl = req.url ?? '/';\n const parsed = new URL(reqUrl, 'http://localhost');\n const pathname = parsed.pathname;\n\n if (pathname === '/service/status') {\n const status = this.supervisor.getAllStatus();\n const cssReady = await this.isCssReady();\n const code = cssReady ? 200 : 503;\n res.writeHead(code, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(status));\n return;\n }\n\n if (pathname === '/service/logs') {\n const level = parsed.searchParams.get('level') ?? undefined;\n const source = parsed.searchParams.get('source') ?? undefined;\n const limitValue = parsed.searchParams.get('limit');\n const limit = limitValue ? parseInt(limitValue, 10) : undefined;\n\n const logs = this.supervisor.getLogs({\n level,\n source,\n limit: Number.isFinite(limit as number) ? limit : undefined,\n });\n\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(logs));\n return;\n }\n\n if (pathname === '/service/stop' && req.method === 'POST') {\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify({ ok: true }));\n setImmediate(() => {\n const shutdown = this.shutdownHandler ?? (() => this.supervisor.stopAll());\n void shutdown().then(() => {\n if (this.exitOnStop) {\n process.exit(0);\n }\n });\n });\n return;\n }\n\n res.writeHead(404);\n res.end('Not Found');\n } catch (error) {\n this.logger.error('Internal service endpoint failed:', error);\n if (!res.headersSent) {\n res.writeHead(500, { 'Content-Type': 'application/json' });\n }\n res.end(JSON.stringify({ error: 'Internal Server Error' }));\n }\n }\n\n private async isCssReady(): Promise<boolean> {\n if (!this.targets.css) {\n return true;\n }\n\n return this.runtimeHost.isConnectionTargetReady(this.targets.css, 1_500);\n }\n\n private normalizeTarget(target?: string | GatewayProxyTarget): GatewayProxyTarget | undefined {\n if (!target) {\n return undefined;\n }\n if (typeof target === 'string') {\n return { url: target };\n }\n return target;\n }\n\n private toProxyTarget(target: GatewayProxyTarget): string | { socketPath: string; protocol: string } {\n if (target.socketPath) {\n return {\n socketPath: target.socketPath,\n protocol: 'http:',\n };\n }\n return target.url!;\n }\n}\n\nexport interface GatewayProxyTarget {\n url?: string;\n socketPath?: string;\n}\n\nexport interface GatewayProxyOptions {\n socketPath?: string;\n listenEndpoint?: RuntimeListenEndpoint;\n runtimeHost?: RuntimeHost;\n exitOnStop?: boolean;\n shutdownHandler?: () => Promise<void>;\n baseUrl?: string;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undefineds.co/xpod",
3
- "version": "0.2.35",
3
+ "version": "0.2.37",
4
4
  "description": "Xpod is an extended Community Solid Server, offering rich-feature, production-level Solid Pod and identity management.",
5
5
  "repository": "https://github.com/undefinedsco/xpod",
6
6
  "author": "developer@undefineds.co",
@@ -158,7 +158,7 @@
158
158
  "@mariozechner/pi-coding-agent": "^0.55.1",
159
159
  "@solid/community-server": "8.0.0-alpha.1",
160
160
  "@undefineds.co/drizzle-solid": "^0.3.4",
161
- "@undefineds.co/models": "0.1.1",
161
+ "@undefineds.co/models": "0.2.21",
162
162
  "abstract-level": "^1.0.4",
163
163
  "acme-client": "^5.1.3",
164
164
  "ai": "^6.0.6",