@undefineds.co/xpod 0.3.5 → 0.3.14

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 (253) hide show
  1. package/config/cli.json +1 -1
  2. package/config/cloud.json +54 -22
  3. package/config/local.json +56 -12
  4. package/config/resolver.json +10 -2
  5. package/config/xpod.base.json +50 -0
  6. package/config/xpod.json +8 -8
  7. package/dist/agents/config/resolve.js +10 -10
  8. package/dist/agents/config/resolve.js.map +1 -1
  9. package/dist/api/chatkit/index.d.ts +1 -1
  10. package/dist/api/chatkit/index.js.map +1 -1
  11. package/dist/api/chatkit/pod-store.d.ts +14 -11
  12. package/dist/api/chatkit/pod-store.js +114 -78
  13. package/dist/api/chatkit/pod-store.js.map +1 -1
  14. package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
  15. package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
  16. package/dist/api/chatkit/service.js +1 -1
  17. package/dist/api/chatkit/service.js.map +1 -1
  18. package/dist/api/chatkit/types.d.ts +11 -11
  19. package/dist/api/chatkit/types.js +3 -3
  20. package/dist/api/chatkit/types.js.map +1 -1
  21. package/dist/api/container/cloud.js +0 -8
  22. package/dist/api/container/cloud.js.map +1 -1
  23. package/dist/api/container/index.js +2 -1
  24. package/dist/api/container/index.js.map +1 -1
  25. package/dist/api/container/local.js +0 -7
  26. package/dist/api/container/local.js.map +1 -1
  27. package/dist/api/container/routes.js +3 -17
  28. package/dist/api/container/routes.js.map +1 -1
  29. package/dist/api/container/types.d.ts +0 -2
  30. package/dist/api/container/types.js.map +1 -1
  31. package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
  32. package/dist/api/handlers/PodManagementHandler.js +71 -1
  33. package/dist/api/handlers/PodManagementHandler.js.map +1 -1
  34. package/dist/api/handlers/RunHandler.js +5 -5
  35. package/dist/api/handlers/RunHandler.js.map +1 -1
  36. package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
  37. package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
  38. package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
  39. package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
  40. package/dist/api/runs/ManagedRunWorker.js +6 -6
  41. package/dist/api/runs/ManagedRunWorker.js.map +1 -1
  42. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
  43. package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
  44. package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
  45. package/dist/api/runs/RunStateCenter.d.ts +3 -3
  46. package/dist/api/runs/RunStateCenter.js +13 -13
  47. package/dist/api/runs/RunStateCenter.js.map +1 -1
  48. package/dist/api/runs/store.d.ts +4 -4
  49. package/dist/api/runs/store.js +2 -2
  50. package/dist/api/runs/store.js.map +1 -1
  51. package/dist/api/service/VectorStoreService.d.ts +1 -1
  52. package/dist/api/service/VectorStoreService.js +16 -16
  53. package/dist/api/service/VectorStoreService.js.map +1 -1
  54. package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
  55. package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
  56. package/dist/api/tasks/TaskMaterializer.js +11 -11
  57. package/dist/api/tasks/TaskMaterializer.js.map +1 -1
  58. package/dist/api/tasks/TaskService.d.ts +3 -3
  59. package/dist/api/tasks/TaskService.js +11 -7
  60. package/dist/api/tasks/TaskService.js.map +1 -1
  61. package/dist/api/tasks/store.d.ts +10 -4
  62. package/dist/api/tasks/store.js +14 -4
  63. package/dist/api/tasks/store.js.map +1 -1
  64. package/dist/api/workspace/types.d.ts +3 -3
  65. package/dist/api/workspace/types.js +6 -6
  66. package/dist/api/workspace/types.js.map +1 -1
  67. package/dist/cli/commands/config.js +2 -2
  68. package/dist/cli/commands/config.js.map +1 -1
  69. package/dist/cli/commands/start.js +9 -3
  70. package/dist/cli/commands/start.js.map +1 -1
  71. package/dist/components/components.jsonld +8 -2
  72. package/dist/components/context.jsonld +302 -51
  73. package/dist/http/search/SearchHttpHandler.js +8 -8
  74. package/dist/http/search/SearchHttpHandler.js.map +1 -1
  75. package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
  76. package/dist/identity/drizzle/PodLookupRepository.js +95 -4
  77. package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
  78. package/dist/identity/drizzle/db.js +4 -43
  79. package/dist/identity/drizzle/db.js.map +1 -1
  80. package/dist/identity/drizzle/schema.pg.d.ts +0 -5
  81. package/dist/identity/drizzle/schema.pg.js +2 -16
  82. package/dist/identity/drizzle/schema.pg.js.map +1 -1
  83. package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
  84. package/dist/identity/drizzle/schema.sqlite.js +2 -16
  85. package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
  86. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
  87. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
  88. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
  89. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
  90. package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
  91. package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
  92. package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
  93. package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
  94. package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
  95. package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
  96. package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
  97. package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
  98. package/dist/index.d.ts +12 -2
  99. package/dist/index.js +16 -4
  100. package/dist/index.js.map +1 -1
  101. package/dist/main.js +8 -2
  102. package/dist/main.js.map +1 -1
  103. package/dist/provision/ProvisionPodCreator.d.ts +3 -4
  104. package/dist/provision/ProvisionPodCreator.js +8 -13
  105. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  106. package/dist/provision/ProvisionPodCreator.jsonld +7 -7
  107. package/dist/runtime/Proxy.d.ts +0 -1
  108. package/dist/runtime/Proxy.js +0 -9
  109. package/dist/runtime/Proxy.js.map +1 -1
  110. package/dist/runtime/bootstrap.d.ts +1 -0
  111. package/dist/runtime/bootstrap.js +5 -2
  112. package/dist/runtime/bootstrap.js.map +1 -1
  113. package/dist/runtime/css-process.d.ts +12 -4
  114. package/dist/runtime/css-process.js +61 -14
  115. package/dist/runtime/css-process.js.map +1 -1
  116. package/dist/runtime/oidc-issuer.d.ts +3 -2
  117. package/dist/runtime/oidc-issuer.js +3 -2
  118. package/dist/runtime/oidc-issuer.js.map +1 -1
  119. package/dist/runtime/runtime-types.d.ts +1 -0
  120. package/dist/runtime/runtime-types.js.map +1 -1
  121. package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
  122. package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
  123. package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
  124. package/dist/solidfs/LocalSolidFS.d.ts +18 -0
  125. package/dist/solidfs/LocalSolidFS.js +539 -0
  126. package/dist/solidfs/LocalSolidFS.js.map +1 -0
  127. package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
  128. package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
  129. package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
  130. package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
  131. package/dist/solidfs/PodSolidFsHydrator.js +127 -0
  132. package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
  133. package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
  134. package/dist/solidfs/PodSolidFsSyncer.js +78 -0
  135. package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
  136. package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
  137. package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
  138. package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
  139. package/dist/solidfs/index.d.ts +7 -0
  140. package/dist/solidfs/index.js +24 -0
  141. package/dist/solidfs/index.js.map +1 -0
  142. package/dist/solidfs/types.d.ts +131 -0
  143. package/dist/solidfs/types.js +19 -0
  144. package/dist/solidfs/types.js.map +1 -0
  145. package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
  146. package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
  147. package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
  148. package/dist/storage/SparqlUpdateResourceStore.js +13 -0
  149. package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
  150. package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
  151. package/dist/storage/accessors/MinioDataAccessor.d.ts +2 -0
  152. package/dist/storage/accessors/MinioDataAccessor.js +13 -7
  153. package/dist/storage/accessors/MinioDataAccessor.js.map +1 -1
  154. package/dist/storage/accessors/MinioDataAccessor.jsonld +8 -0
  155. package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
  156. package/dist/storage/accessors/MixDataAccessor.js +511 -16
  157. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  158. package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
  159. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
  160. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
  161. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
  162. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
  163. package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
  164. package/dist/storage/quint/BaseQuintStore.js +51 -27
  165. package/dist/storage/quint/BaseQuintStore.js.map +1 -1
  166. package/dist/storage/quint/PgQuintStore.d.ts +1 -0
  167. package/dist/storage/quint/PgQuintStore.js +50 -32
  168. package/dist/storage/quint/PgQuintStore.js.map +1 -1
  169. package/dist/storage/quint/PgQuintStore.jsonld +4 -3
  170. package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
  171. package/dist/storage/quint/SqliteQuintStore.js +100 -0
  172. package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
  173. package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
  174. package/dist/storage/quint/types.d.ts +16 -0
  175. package/dist/storage/quint/types.js.map +1 -1
  176. package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
  177. package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
  178. package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
  179. package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
  180. package/dist/storage/rdf/RdfContentTypes.js +79 -0
  181. package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
  182. package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +76 -0
  183. package/dist/storage/rdf/RdfLocalQueryEngine.js +2636 -0
  184. package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
  185. package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
  186. package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
  187. package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
  188. package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
  189. package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
  190. package/dist/storage/rdf/RdfShadowComparator.js +47 -0
  191. package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
  192. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
  193. package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
  194. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
  195. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
  196. package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
  197. package/dist/storage/rdf/RdfTermDictionary.js +352 -0
  198. package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
  199. package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
  200. package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
  201. package/dist/storage/rdf/RdfTermSemantics.js +40 -0
  202. package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
  203. package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
  204. package/dist/storage/rdf/RdfTextIndex.js +569 -0
  205. package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
  206. package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
  207. package/dist/storage/rdf/RdfVectorIndex.js +631 -0
  208. package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
  209. package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
  210. package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
  211. package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
  212. package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
  213. package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
  214. package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
  215. package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
  216. package/dist/storage/rdf/SolidRdfEngine.d.ts +51 -0
  217. package/dist/storage/rdf/SolidRdfEngine.js +264 -0
  218. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
  219. package/dist/storage/rdf/SolidRdfEngine.jsonld +338 -0
  220. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
  221. package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
  222. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
  223. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
  224. package/dist/storage/rdf/index.d.ts +15 -0
  225. package/dist/storage/rdf/index.js +61 -0
  226. package/dist/storage/rdf/index.js.map +1 -0
  227. package/dist/storage/rdf/models-benchmark.d.ts +260 -0
  228. package/dist/storage/rdf/models-benchmark.js +1405 -0
  229. package/dist/storage/rdf/models-benchmark.js.map +1 -0
  230. package/dist/storage/rdf/types.d.ts +726 -0
  231. package/dist/storage/rdf/types.js +3 -0
  232. package/dist/storage/rdf/types.js.map +1 -0
  233. package/dist/storage/rdf/types.jsonld +316 -0
  234. package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
  235. package/dist/storage/vector/VectorIndexingListener.js +19 -19
  236. package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
  237. package/package.json +3 -2
  238. package/templates/pod/acp/.acr.hbs +39 -0
  239. package/templates/pod/acp/README.acr +18 -0
  240. package/templates/pod/acp/profile/card.acr +22 -0
  241. package/templates/pod/base/README$.md.hbs +27 -0
  242. package/templates/pod/base/profile/card$.ttl.hbs +13 -0
  243. package/templates/pod/wac/.acl.hbs +26 -0
  244. package/templates/pod/wac/README.acl.hbs +14 -0
  245. package/templates/pod/wac/profile/card.acl.hbs +19 -0
  246. package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
  247. package/dist/api/handlers/WebIdProfileHandler.js +0 -423
  248. package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
  249. package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
  250. package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
  251. package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
  252. package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
  253. package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
package/config/cli.json CHANGED
@@ -295,7 +295,7 @@
295
295
  },
296
296
  {
297
297
  "@type": "YargsParameter",
298
- "name": "idpUrl",
298
+ "name": "oidcIssuer",
299
299
  "options": {
300
300
  "type": "string",
301
301
  "hidden": true
package/config/cloud.json CHANGED
@@ -126,11 +126,14 @@
126
126
  "unstructuredDataAccessor": {
127
127
  "@id": "urn:undefineds:xpod:RemoteDataAccessor"
128
128
  },
129
- "presignedRedirectEnabled": true
129
+ "presignedRedirectEnabled": true,
130
+ "rdfFileDataAccessor": {
131
+ "@id": "urn:solid-server:default:FileDataAccessor"
132
+ }
130
133
  },
131
134
  {
132
- "comment": "PgQuintStore instance for QuintStoreSparqlDataAccessor (PostgreSQL backend).",
133
- "@id": "urn:undefineds:xpod:PgQuintStore",
135
+ "comment": "Compatibility QuintStore instance (PostgreSQL TEXT quints for fallback and migration).",
136
+ "@id": "urn:undefineds:xpod:CompatibilityQuintStore",
134
137
  "@type": "PgQuintStore",
135
138
  "options_driver": "pg",
136
139
  "connectionString": {
@@ -139,13 +142,57 @@
139
142
  }
140
143
  },
141
144
  {
142
- "comment": "DefaultSparqlEngine: QuintstoreSparqlEngine for cloud (with OPTIONAL optimization)",
143
- "@id": "urn:undefineds:xpod:DefaultSparqlEngine",
145
+ "comment": "Shared RDF write store: mirrors compatibility quints into the term-id RDF index.",
146
+ "@id": "urn:undefineds:xpod:QuintStore",
147
+ "@type": "ShadowRdfQuintStore",
148
+ "compatibilityStore": {
149
+ "@id": "urn:undefineds:xpod:CompatibilityQuintStore"
150
+ },
151
+ "index_path": {
152
+ "@id": "urn:solid-server:default:variable:rdfIndexPath",
153
+ "@type": "Variable"
154
+ },
155
+ "autoOpen": true,
156
+ "autoBackfill_enabled": true,
157
+ "autoBackfill_clear": true,
158
+ "autoBackfill_batchSize": 1000
159
+ },
160
+ {
161
+ "comment": "RDF term-id query engine backed by the shared cloud RDF index.",
162
+ "@id": "urn:undefineds:xpod:SolidRdfEngine",
163
+ "@type": "SolidRdfEngine",
164
+ "index_path": {
165
+ "@id": "urn:solid-server:default:variable:rdfIndexPath",
166
+ "@type": "Variable"
167
+ },
168
+ "compatibilityStore": {
169
+ "@id": "urn:undefineds:xpod:QuintStore"
170
+ },
171
+ "autoOpen": true
172
+ },
173
+ {
174
+ "comment": "Compatibility SPARQL engine backed by the shadow store, so fallback writes update both indexes.",
175
+ "@id": "urn:undefineds:xpod:CompatibilitySparqlEngine",
144
176
  "@type": "QuintstoreSparqlEngine",
145
177
  "store": {
146
- "@id": "urn:undefineds:xpod:PgQuintStore"
178
+ "@id": "urn:undefineds:xpod:QuintStore"
147
179
  }
148
180
  },
181
+ {
182
+ "comment": "Default SPARQL engine: SELECT/ASK use SolidRdfEngine, unsupported shapes fall back to Quintstore.",
183
+ "@id": "urn:undefineds:xpod:DefaultSparqlEngine",
184
+ "@type": "SolidRdfSparqlEngine",
185
+ "rdfEngine": {
186
+ "@id": "urn:undefineds:xpod:SolidRdfEngine"
187
+ },
188
+ "fallback": {
189
+ "@id": "urn:undefineds:xpod:CompatibilitySparqlEngine"
190
+ },
191
+ "shadowStore": {
192
+ "@id": "urn:undefineds:xpod:QuintStore"
193
+ },
194
+ "enablePrimary": true
195
+ },
149
196
  {
150
197
  "comment": "VectorStore using PostgreSQL",
151
198
  "@id": "urn:undefineds:xpod:VectorStore",
@@ -191,7 +238,7 @@
191
238
  "@id": "urn:undefineds:xpod:QuintStoreSparqlDataAccessor",
192
239
  "@type": "QuintStoreSparqlDataAccessor",
193
240
  "store": {
194
- "@id": "urn:undefineds:xpod:PgQuintStore"
241
+ "@id": "urn:undefineds:xpod:QuintStore"
195
242
  },
196
243
  "identifierStrategy": {
197
244
  "@id": "urn:solid-server:default:IdentifierStrategy"
@@ -512,21 +559,6 @@
512
559
  ]
513
560
  }
514
561
  },
515
- {
516
- "comment": "Override PodCreator with ProvisionPodCreator to support remote SP pod creation via provisionCode",
517
- "@type": "Override",
518
- "overrideInstance": {
519
- "@id": "urn:solid-server:default:PodCreator"
520
- },
521
- "overrideParameters": {
522
- "@type": "ProvisionPodCreator",
523
- "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
524
- "identifierGenerator": { "@id": "urn:solid-server:default:IdentifierGenerator" },
525
- "relativeWebIdPath": "/profile/card#me",
526
- "webIdStore": { "@id": "urn:solid-server:default:WebIdStore" },
527
- "podStore": { "@id": "urn:solid-server:default:PodStore" }
528
- }
529
- },
530
562
  {
531
563
  "comment": "Override create-pod template to pass provisionCode from sessionStorage into POST settings",
532
564
  "@type": "Override",
package/config/local.json CHANGED
@@ -21,16 +21,16 @@
21
21
  }
22
22
  },
23
23
  {
24
- "comment": "定义 idpUrl 变量(外部 IdP 基础 URL),设置后启用 SP 模式",
25
- "@id": "urn:solid-server:default:variable:idpUrl",
24
+ "comment": "定义 oidcIssuer 变量(外部 IdP 基础 URL),设置后启用 SP 模式",
25
+ "@id": "urn:solid-server:default:variable:oidcIssuer",
26
26
  "@type": "Variable"
27
27
  },
28
28
  {
29
- "comment": "Auto-detect OIDC Handler - 有 idpUrl 时启用 SP 模式,代理 JWKS",
29
+ "comment": "Auto-detect OIDC Handler - 有 oidcIssuer 时启用 SP 模式,代理 JWKS",
30
30
  "@id": "urn:undefineds:xpod:AutoDetectOidcHandler",
31
31
  "@type": "AutoDetectOidcHandler",
32
- "AutoDetectOidcHandler:_options_idpUrl": {
33
- "@id": "urn:solid-server:default:variable:idpUrl"
32
+ "AutoDetectOidcHandler:_options_oidcIssuer": {
33
+ "@id": "urn:solid-server:default:variable:oidcIssuer"
34
34
  },
35
35
  "AutoDetectOidcHandler:_options_cacheMs": 300000
36
36
  },
@@ -52,11 +52,11 @@
52
52
  }
53
53
  },
54
54
  {
55
- "comment": "Auto-detect Identity Provider Handler - 有 idpUrl 时禁用本地账户管理",
55
+ "comment": "Auto-detect Identity Provider Handler - 有 oidcIssuer 时禁用本地账户管理",
56
56
  "@id": "urn:undefineds:xpod:AutoDetectIdentityProviderHandler",
57
57
  "@type": "AutoDetectIdentityProviderHandler",
58
- "AutoDetectIdentityProviderHandler:_options_idpUrl": {
59
- "@id": "urn:solid-server:default:variable:idpUrl"
58
+ "AutoDetectIdentityProviderHandler:_options_oidcIssuer": {
59
+ "@id": "urn:solid-server:default:variable:oidcIssuer"
60
60
  },
61
61
  "AutoDetectIdentityProviderHandler:_options_source": {
62
62
  "@id": "urn:undefineds:xpod:SourceIdentityProviderHandler"
@@ -77,14 +77,30 @@
77
77
  "@value": "./data"
78
78
  },
79
79
  {
80
- "comment": "Shared QuintStore instance (SQLite for local)",
81
- "@id": "urn:undefineds:xpod:QuintStore",
80
+ "comment": "Compatibility QuintStore instance (SQLite TEXT quints for fallback and migration).",
81
+ "@id": "urn:undefineds:xpod:CompatibilityQuintStore",
82
82
  "@type": "SqliteQuintStore",
83
83
  "options_path": {
84
84
  "@id": "urn:solid-server:default:variable:sparqlEndpoint",
85
85
  "@type": "Variable"
86
86
  }
87
87
  },
88
+ {
89
+ "comment": "Shared RDF write store: mirrors compatibility quints into the term-id RDF index.",
90
+ "@id": "urn:undefineds:xpod:QuintStore",
91
+ "@type": "ShadowRdfQuintStore",
92
+ "compatibilityStore": {
93
+ "@id": "urn:undefineds:xpod:CompatibilityQuintStore"
94
+ },
95
+ "index_path": {
96
+ "@id": "urn:solid-server:default:variable:rdfIndexPath",
97
+ "@type": "Variable"
98
+ },
99
+ "autoOpen": true,
100
+ "autoBackfill_enabled": true,
101
+ "autoBackfill_clear": true,
102
+ "autoBackfill_batchSize": 1000
103
+ },
88
104
  {
89
105
  "comment": "VectorStore using SQLite (same db as QuintStore for JOIN)",
90
106
  "@id": "urn:undefineds:xpod:VectorStore",
@@ -112,13 +128,41 @@
112
128
  }
113
129
  },
114
130
  {
115
- "comment": "DefaultSparqlEngine: QuintstoreSparqlEngine for local (with OPTIONAL optimization)",
116
- "@id": "urn:undefineds:xpod:DefaultSparqlEngine",
131
+ "comment": "RDF term-id query engine backed by the shared local RDF index.",
132
+ "@id": "urn:undefineds:xpod:SolidRdfEngine",
133
+ "@type": "SolidRdfEngine",
134
+ "index_path": {
135
+ "@id": "urn:solid-server:default:variable:rdfIndexPath",
136
+ "@type": "Variable"
137
+ },
138
+ "compatibilityStore": {
139
+ "@id": "urn:undefineds:xpod:QuintStore"
140
+ },
141
+ "autoOpen": true
142
+ },
143
+ {
144
+ "comment": "Compatibility SPARQL engine backed by the shadow store, so fallback writes update both indexes.",
145
+ "@id": "urn:undefineds:xpod:CompatibilitySparqlEngine",
117
146
  "@type": "QuintstoreSparqlEngine",
118
147
  "store": {
119
148
  "@id": "urn:undefineds:xpod:QuintStore"
120
149
  }
121
150
  },
151
+ {
152
+ "comment": "Default SPARQL engine: SELECT/ASK use SolidRdfEngine, unsupported shapes fall back to Quintstore.",
153
+ "@id": "urn:undefineds:xpod:DefaultSparqlEngine",
154
+ "@type": "SolidRdfSparqlEngine",
155
+ "rdfEngine": {
156
+ "@id": "urn:undefineds:xpod:SolidRdfEngine"
157
+ },
158
+ "fallback": {
159
+ "@id": "urn:undefineds:xpod:CompatibilitySparqlEngine"
160
+ },
161
+ "shadowStore": {
162
+ "@id": "urn:undefineds:xpod:QuintStore"
163
+ },
164
+ "enablePrimary": true
165
+ },
122
166
  {
123
167
  "comment": "Use QuintStore for RDF data and local filesystem for other content.",
124
168
  "@id": "urn:undefineds:xpod:MixDataAccessor",
@@ -68,6 +68,14 @@
68
68
  "defaultValue": "sqlite:./quadstore.sqlite"
69
69
  }
70
70
  },
71
+ {
72
+ "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:rdfIndexPath",
73
+ "CombinedShorthandResolver:_resolvers_value": {
74
+ "@type": "KeyExtractor",
75
+ "key": "rdfIndexPath",
76
+ "defaultValue": "./rdf-index.sqlite"
77
+ }
78
+ },
71
79
  {
72
80
  "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:minioAccessKey",
73
81
  "CombinedShorthandResolver:_resolvers_value": {
@@ -288,10 +296,10 @@
288
296
  }
289
297
  },
290
298
  {
291
- "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:idpUrl",
299
+ "CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:oidcIssuer",
292
300
  "CombinedShorthandResolver:_resolvers_value": {
293
301
  "@type": "KeyExtractor",
294
- "key": "idpUrl",
302
+ "key": "oidcIssuer",
295
303
  "defaultValue": ""
296
304
  }
297
305
  },
@@ -136,6 +136,26 @@
136
136
  }
137
137
  }
138
138
  },
139
+ {
140
+ "comment": "Scope OIDC WebID choices to Pods known by the current storage provider.",
141
+ "@type": "Override",
142
+ "overrideInstance": {
143
+ "@id": "urn:solid-server:default:PickWebIdHandler"
144
+ },
145
+ "overrideParameters": {
146
+ "@type": "ScopedPickWebIdHandler",
147
+ "webIdStore": {
148
+ "@id": "urn:solid-server:default:WebIdStore"
149
+ },
150
+ "providerFactory": {
151
+ "@id": "urn:solid-server:default:IdentityProviderFactory"
152
+ },
153
+ "identityDbUrl": {
154
+ "@id": "urn:solid-server:default:variable:identityDbUrl",
155
+ "@type": "Variable"
156
+ }
157
+ }
158
+ },
139
159
  {
140
160
  "comment": "Override main HTML template to remove CSS default header/footer wrapper.",
141
161
  "@type": "Override",
@@ -148,6 +168,36 @@
148
168
  "template": "./templates/main.html.ejs"
149
169
  }
150
170
  },
171
+ {
172
+ "comment": "Override Pod resources templates to keep CSS-native profile/card while adding the Solid storage binding.",
173
+ "@type": "Override",
174
+ "overrideInstance": {
175
+ "@id": "urn:solid-server:default:PodResourcesGenerator"
176
+ },
177
+ "overrideParameters": {
178
+ "@type": "StaticFolderGenerator",
179
+ "templateFolder": "./templates/pod",
180
+ "resourcesGenerator": {
181
+ "@id": "urn:solid-server:default:TemplatedResourcesGenerator"
182
+ }
183
+ }
184
+ },
185
+ {
186
+ "comment": "Override PodCreator so every local/cloud Pod creation sets the Solid storage binding before CSS renders profile/card.",
187
+ "@type": "Override",
188
+ "overrideInstance": {
189
+ "@id": "urn:solid-server:default:PodCreator"
190
+ },
191
+ "overrideParameters": {
192
+ "@type": "ProvisionPodCreator",
193
+ "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
194
+ "identifierGenerator": { "@id": "urn:solid-server:default:IdentifierGenerator" },
195
+ "relativeWebIdPath": "/profile/card#me",
196
+ "webIdStore": { "@id": "urn:solid-server:default:WebIdStore" },
197
+ "podStore": { "@id": "urn:solid-server:default:PodStore" },
198
+ "identityDbUrl": { "@id": "urn:solid-server:default:variable:identityDbUrl" }
199
+ }
200
+ },
151
201
  {
152
202
  "comment": "Subgraph query engine wrapping default SPARQL engine (DefaultSparqlEngine defined in profile)",
153
203
  "@type": "SubgraphQueryEngine",
package/config/xpod.json CHANGED
@@ -16,8 +16,8 @@
16
16
  "@type": "Void"
17
17
  },
18
18
  {
19
- "comment": "定义 idpUrl 变量(外部 IdP 基础 URL)- SP 模式必填",
20
- "@id": "urn:solid-server:default:variable:idpUrl",
19
+ "comment": "定义 oidcIssuer 变量(外部 IdP 基础 URL)- SP 模式必填",
20
+ "@id": "urn:solid-server:default:variable:oidcIssuer",
21
21
  "@type": "Variable"
22
22
  },
23
23
  {
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "additionalBaseUrls": [
31
31
  {
32
- "@id": "urn:solid-server:default:variable:idpUrl"
32
+ "@id": "urn:solid-server:default:variable:oidcIssuer"
33
33
  }
34
34
  ]
35
35
  },
@@ -52,11 +52,11 @@
52
52
  }
53
53
  },
54
54
  {
55
- "comment": "Auto-detect OIDC Handler - 有 idpUrl 时启用 SP 模式",
55
+ "comment": "Auto-detect OIDC Handler - 有 oidcIssuer 时启用 SP 模式",
56
56
  "@id": "urn:undefineds:xpod:AutoDetectOidcHandler",
57
57
  "@type": "AutoDetectOidcHandler",
58
- "options_idpUrl": {
59
- "@id": "urn:solid-server:default:variable:idpUrl"
58
+ "options_oidcIssuer": {
59
+ "@id": "urn:solid-server:default:variable:oidcIssuer"
60
60
  },
61
61
  "options_cacheMs": 300000
62
62
  },
@@ -74,8 +74,8 @@
74
74
  "comment": "Auto-detect Identity Provider Handler",
75
75
  "@id": "urn:undefineds:xpod:AutoDetectIdentityProviderHandler",
76
76
  "@type": "AutoDetectIdentityProviderHandler",
77
- "options_idpUrl": {
78
- "@id": "urn:solid-server:default:variable:idpUrl"
77
+ "options_oidcIssuer": {
78
+ "@id": "urn:solid-server:default:variable:oidcIssuer"
79
79
  }
80
80
  },
81
81
  {
@@ -73,14 +73,14 @@ class AgentConfigResolver {
73
73
  if (metaRecord.enabled === 'false') {
74
74
  return null;
75
75
  }
76
- const providerUri = metaRecord.provider;
77
- if (!providerUri) {
76
+ const providerResource = metaRecord.provider;
77
+ if (!providerResource) {
78
78
  logger.error(`Agent ${this.agentId} has no provider in .meta`);
79
79
  return null;
80
80
  }
81
- const provider = await this.db.findByIri(provider_1.Provider, providerUri);
81
+ const provider = await this.db.findByIri(provider_1.Provider, providerResource);
82
82
  if (!provider) {
83
- logger.error(`Provider not found: ${providerUri}`);
83
+ logger.error(`Provider not found: ${providerResource}`);
84
84
  return null;
85
85
  }
86
86
  const runtimeKind = metaRecord.runtimeKind;
@@ -113,13 +113,13 @@ class AgentConfigResolver {
113
113
  enabled: true,
114
114
  };
115
115
  }
116
- async resolveCredential(credentialUri) {
117
- if (!credentialUri) {
116
+ async resolveCredential(credentialResource) {
117
+ if (!credentialResource) {
118
118
  return { apiKey: '' };
119
119
  }
120
- const credential = await this.db.findByIri(tables_1.Credential, credentialUri);
120
+ const credential = await this.db.findByIri(tables_1.Credential, credentialResource);
121
121
  if (!credential) {
122
- logger.warn(`Credential not found: ${credentialUri}`);
122
+ logger.warn(`Credential not found: ${credentialResource}`);
123
123
  return { apiKey: '' };
124
124
  }
125
125
  return {
@@ -128,8 +128,8 @@ class AgentConfigResolver {
128
128
  proxyUrl: credential.proxyUrl ?? undefined,
129
129
  };
130
130
  }
131
- async resolveModelName(provider, modelUri) {
132
- const explicit = await resolveModelId(this.db, modelUri);
131
+ async resolveModelName(provider, modelResource) {
132
+ const explicit = await resolveModelId(this.db, modelResource);
133
133
  if (explicit) {
134
134
  return explicit;
135
135
  }
@@ -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 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"]}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/agents/config/resolve.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AA+EH,gDAWC;AAxFD,iEAAqD;AACrD,gEAAuD;AAEvD,2DAAsD;AACtD,yEAAyF;AACzF,uDAAoD;AACpD,2DAA4D;AAC5D,iDAA8C;AAU9C,MAAM,MAAM,GAAG,IAAA,oCAAY,EAAC,qBAAqB,CAAC,CAAC;AACnD,MAAM,sBAAsB,GAAG,cAAc,CAAC;AAkB9C,SAAS,aAAa,CAAC,KAAyB;IAC9C,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,CAAC;AAC1E,CAAC;AAED,SAAS,WAAW,CAAC,GAAmB,EAAE,OAAe;IACvD,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,IAAA,uBAAO,EAAC;QACb,IAAI,EAAE;YACJ,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB;QACD,KAAK,EAAE,GAAG,CAAC,kBAAkB;KACvB,EAAE;QACR,MAAM,EAAE;YACN,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,mBAAQ;YAClB,UAAU,EAAE,mBAAU;YACtB,KAAK,EAAE,aAAK;SACb;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,EAAO,EACP,QAAmC;IAEnC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,aAAK,EAAE,QAAQ,CAAC,CAAC;IACxD,OAAO,WAAW,EAAE,EAAE,IAAI,SAAS,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CACtC,OAAe,EACf,GAAmB;IAEnB,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,IAAI,mBAAmB,CAC5B,OAAO,EACP,EAAE,EACF,EAAE,CAAC,MAAM,EAAE,WAAW,IAAI,oBAAoB,CAAC,OAAO,CAAC,EACvD,IAAI,sBAAsB,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC,CAChD,CAAC,OAAO,EAAE,CAAC;AACd,CAAC;AAED,MAAM,mBAAmB;IACvB,YACmB,OAAe,EACf,EAAO,EACP,SAAmB,EACnB,SAAiC;QAHjC,YAAO,GAAP,OAAO,CAAQ;QACf,OAAE,GAAF,EAAE,CAAK;QACP,cAAS,GAAT,SAAS,CAAU;QACnB,cAAS,GAAT,SAAS,CAAwB;IACjD,CAAC;IAEG,KAAK,CAAC,OAAO;QAClB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAA2B,CAAC;QAC5G,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,OAAO,KAAK,sBAAsB,EAAE,CAAC,CAAC;YACrF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,2BAA2B,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAQ,EAAE,gBAAgB,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,uBAAuB,gBAAgB,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,6BAA6B,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC;YAC7F,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,eAAe,EAAE,CAAC;QACpF,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;QAEpF,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,OAAO;YAChB,WAAW,EAAE,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;YAC5C,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,YAAY;YACZ,YAAY,EAAE,WAAW;YACzB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,SAAS;YAC5D,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC;YACpD,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC;YAC1D,cAAc,EAAE,UAAU,CAAC,cAAc;YACzC,UAAU;YACV,aAAa,EAAE,gBAAgB,CAAC,aAAa;YAC7C,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,kBAAsC;QAKpE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,mBAAU,EAAE,kBAAkB,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,yBAAyB,kBAAkB,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC;QAED,OAAO;YACL,MAAM,EAAG,UAAkB,CAAC,MAAM,IAAI,EAAE;YACxC,OAAO,EAAG,UAAkB,CAAC,OAAO,IAAI,SAAS;YACjD,QAAQ,EAAG,UAAkB,CAAC,QAAQ,IAAI,SAAS;SACpD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,QAAa,EAAE,aAAiC;QAC7E,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,mCAAe,CAAC,KAAK,CAAC,WAAW,EAAE;QACxC,IAAI,EAAE,WAAW,OAAO,QAAQ;QAChC,eAAe,EAAE,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,sBAAsB;IAO1B,YAAmB,OAAmC;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,SAAmB;QACnC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,MAAM;aACzB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,8CAAmB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aAClD,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,aAAa,CAAC,CAAC;QACvB,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,IAAI,SAAS,EAAE,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QACvF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,MAAM,4BAA4B,CAAC,CAAC;YACrG,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAA,iDAAsB,EAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAc;QAC3C,MAAM,MAAM,GAAyB,EAAE,CAAC;QAExC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,GAAW;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAExD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtE,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC;gBACnD,OAAO;aACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,mCAAmC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;CACF;AAED,MAAM,cAAc;IACX,MAAM,CAAC,QAAQ,CAAC,KAAoC;QACzD,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,KAAoC;QACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,KAAc;QAC7C,IAAI,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,iCAAiC,KAAK,kDAAkD,CAAC,CAAC;YACtG,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,KAAc;QAC/C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAA2B,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC9G,CAAC;IAED,YAAqC,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IAAG,CAAC;IAE3D,eAAe;QACpB,MAAM,MAAM,GAAoC,EAAE,CAAC;QAEnD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB,CAAC,GAAsB;QAClD,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC9B,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,GAAG,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC9C,IAAI,GAAG,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrC,IAAI,GAAG,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAClC,IAAI,GAAG,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAClC,IAAI,GAAG,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAE9C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,qBAAqB;IACzB,YAAoC,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEhD,WAAW,CAAC,GAAW;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/C,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,OAAO,GAAG,UAAU,WAAW,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;YAC1F,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,UAAU,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,OAAO,WAAW,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,WAAW,IAAI,CAAC,OAAO,IAAI,QAAQ,WAAW,CAAC;IACxD,CAAC;IAEM,WAAW,CAAC,GAAW,EAAE,YAAoB;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,aAAa,GAAG,GAAG;aACtB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;aACnB,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;aACjC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC5B,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,aAAa,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACrF,CAAC;IAEO,mBAAmB,CAAC,GAAW;QACrC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IACvE,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC;IACnF,CAAC;IAEO,yBAAyB,CAAC,IAAY;QAC5C,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;CACF;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC","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 providerResource = metaRecord.provider;\n if (!providerResource) {\n logger.error(`Agent ${this.agentId} has no provider in .meta`);\n return null;\n }\n\n const provider = await this.db.findByIri(Provider, providerResource);\n if (!provider) {\n logger.error(`Provider not found: ${providerResource}`);\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(credentialResource: string | undefined): Promise<{\n apiKey: string;\n baseUrl?: string;\n proxyUrl?: string;\n }> {\n if (!credentialResource) {\n return { apiKey: '' };\n }\n\n const credential = await this.db.findByIri(Credential, credentialResource);\n if (!credential) {\n logger.warn(`Credential not found: ${credentialResource}`);\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, modelResource: string | undefined): Promise<string | undefined> {\n const explicit = await resolveModelId(this.db, modelResource);\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"]}
@@ -10,7 +10,7 @@ export { PodChatKitStore, type PodChatKitStoreOptions } from './pod-store';
10
10
  export { ChatKitService, type AiProvider, type ChatKitServiceOptions, type StreamingResult, type NonStreamingResult, type ChatKitResult } from './service';
11
11
  export { RunStateCenter, type RunStateCenterOptions, type RunStateEvent } from '../runs/RunStateCenter';
12
12
  export { type AgentRuntimeConfig, type AgentRuntimeEvent, type RunnerProtocol, type RunnerType, type WorktreeSpec, } from '../runs/AgentRuntimeTypes';
13
- export { type WorkspaceUri } from '../workspace/types';
13
+ export { type WorkspaceRef } from '../workspace/types';
14
14
  export { type RunConversationMessage, type RunExecutionBackend, type RunExecutionInput, type RunEnqueueResult, } from '../runs/RunExecutionBackend';
15
15
  export { Run, RunStep, RunStatus, RunStepType, type RunRecord, type RunStepRecord, type RunStatusType, type RunStepTypeValue, } from '../runs/schema';
16
16
  export { type RunRecordData, type RunStepRecordData, type RunStore, } from '../runs/store';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/chatkit/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,SAAS;AACT,mCAakB;AAZhB,8FAAA,IAAI,OAAA;AACJ,gGAAA,MAAM,OAAA;AACN,iGAAA,OAAO,OAAA;AACP,oGAAA,UAAU,OAAA;AACV,qGAAA,WAAW,OAAA;AACX,uGAAA,aAAa,OAAA;AASf,QAAQ;AACR,iCAA8E;AAA/B,sGAAA,aAAa,OAAA;AAC5D,yCAA2E;AAAlE,4GAAA,eAAe,OAAA;AAExB,UAAU;AACV,qCAA2J;AAAlJ,yGAAA,cAAc,OAAA;AAEvB,OAAO;AACP,yDAAwG;AAA/F,gHAAA,cAAc,OAAA;AAevB,yCASwB;AARtB,6FAAA,GAAG,OAAA;AACH,iGAAA,OAAO,OAAA;AACP,mGAAA,SAAS,OAAA;AACT,qGAAA,WAAW,OAAA;AAWb,iFAO4C;AAN1C,wIAAA,0BAA0B,OAAA;AAC1B,wIAAA,0BAA0B,OAAA;AAC1B,sIAAA,wBAAwB,OAAA;AAK1B,qEAAsG;AAA7F,4HAAA,oBAAoB,OAAA;AAE7B,cAAc;AACd,6CAA+E;AAAtE,+GAAA,gBAAgB,OAAA","sourcesContent":["/**\n * ChatKit Module\n * \n * OpenAI ChatKit protocol implementation for xpod-api-server.\n */\n\n// Types\nexport * from './types';\n\n// Schema\nexport {\n Chat,\n Thread,\n Message,\n ChatStatus,\n MessageRole,\n MessageStatus,\n type ChatRecord,\n type ThreadRecord,\n type MessageRecord,\n type ChatStatusType,\n type MessageRoleType,\n type MessageStatusType,\n} from './schema';\n\n// Store\nexport { type ChatKitStore, type StoreContext, InMemoryStore } from './store';\nexport { PodChatKitStore, type PodChatKitStoreOptions } from './pod-store';\n\n// Service\nexport { ChatKitService, type AiProvider, type ChatKitServiceOptions, type StreamingResult, type NonStreamingResult, type ChatKitResult } from './service';\n\n// Runs\nexport { RunStateCenter, type RunStateCenterOptions, type RunStateEvent } from '../runs/RunStateCenter';\nexport {\n type AgentRuntimeConfig,\n type AgentRuntimeEvent,\n type RunnerProtocol,\n type RunnerType,\n type WorktreeSpec,\n} from '../runs/AgentRuntimeTypes';\nexport { type WorkspaceUri } from '../workspace/types';\nexport {\n type RunConversationMessage,\n type RunExecutionBackend,\n type RunExecutionInput,\n type RunEnqueueResult,\n} from '../runs/RunExecutionBackend';\nexport {\n Run,\n RunStep,\n RunStatus,\n RunStepType,\n type RunRecord,\n type RunStepRecord,\n type RunStatusType,\n type RunStepTypeValue,\n} from '../runs/schema';\nexport {\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from '../runs/store';\nexport {\n InngestRunExecutionBackend,\n XPOD_AGENT_RUN_FUNCTION_ID,\n XPOD_RUN_REQUESTED_EVENT,\n type InngestRunExecutionBackendOptions,\n type XpodRunRequestedEvent,\n type XpodRunRequestedEventData,\n} from '../runs/InngestRunExecutionBackend';\nexport { PiAgentRuntimeDriver, type PiAgentRuntimeDriverOptions } from '../runs/PiAgentRuntimeDriver';\n\n// AI Provider\nexport { VercelAiProvider, type VercelAiProviderOptions } from './ai-provider';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/chatkit/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,SAAS;AACT,mCAakB;AAZhB,8FAAA,IAAI,OAAA;AACJ,gGAAA,MAAM,OAAA;AACN,iGAAA,OAAO,OAAA;AACP,oGAAA,UAAU,OAAA;AACV,qGAAA,WAAW,OAAA;AACX,uGAAA,aAAa,OAAA;AASf,QAAQ;AACR,iCAA8E;AAA/B,sGAAA,aAAa,OAAA;AAC5D,yCAA2E;AAAlE,4GAAA,eAAe,OAAA;AAExB,UAAU;AACV,qCAA2J;AAAlJ,yGAAA,cAAc,OAAA;AAEvB,OAAO;AACP,yDAAwG;AAA/F,gHAAA,cAAc,OAAA;AAevB,yCASwB;AARtB,6FAAA,GAAG,OAAA;AACH,iGAAA,OAAO,OAAA;AACP,mGAAA,SAAS,OAAA;AACT,qGAAA,WAAW,OAAA;AAWb,iFAO4C;AAN1C,wIAAA,0BAA0B,OAAA;AAC1B,wIAAA,0BAA0B,OAAA;AAC1B,sIAAA,wBAAwB,OAAA;AAK1B,qEAAsG;AAA7F,4HAAA,oBAAoB,OAAA;AAE7B,cAAc;AACd,6CAA+E;AAAtE,+GAAA,gBAAgB,OAAA","sourcesContent":["/**\n * ChatKit Module\n * \n * OpenAI ChatKit protocol implementation for xpod-api-server.\n */\n\n// Types\nexport * from './types';\n\n// Schema\nexport {\n Chat,\n Thread,\n Message,\n ChatStatus,\n MessageRole,\n MessageStatus,\n type ChatRecord,\n type ThreadRecord,\n type MessageRecord,\n type ChatStatusType,\n type MessageRoleType,\n type MessageStatusType,\n} from './schema';\n\n// Store\nexport { type ChatKitStore, type StoreContext, InMemoryStore } from './store';\nexport { PodChatKitStore, type PodChatKitStoreOptions } from './pod-store';\n\n// Service\nexport { ChatKitService, type AiProvider, type ChatKitServiceOptions, type StreamingResult, type NonStreamingResult, type ChatKitResult } from './service';\n\n// Runs\nexport { RunStateCenter, type RunStateCenterOptions, type RunStateEvent } from '../runs/RunStateCenter';\nexport {\n type AgentRuntimeConfig,\n type AgentRuntimeEvent,\n type RunnerProtocol,\n type RunnerType,\n type WorktreeSpec,\n} from '../runs/AgentRuntimeTypes';\nexport { type WorkspaceRef } from '../workspace/types';\nexport {\n type RunConversationMessage,\n type RunExecutionBackend,\n type RunExecutionInput,\n type RunEnqueueResult,\n} from '../runs/RunExecutionBackend';\nexport {\n Run,\n RunStep,\n RunStatus,\n RunStepType,\n type RunRecord,\n type RunStepRecord,\n type RunStatusType,\n type RunStepTypeValue,\n} from '../runs/schema';\nexport {\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from '../runs/store';\nexport {\n InngestRunExecutionBackend,\n XPOD_AGENT_RUN_FUNCTION_ID,\n XPOD_RUN_REQUESTED_EVENT,\n type InngestRunExecutionBackendOptions,\n type XpodRunRequestedEvent,\n type XpodRunRequestedEventData,\n} from '../runs/InngestRunExecutionBackend';\nexport { PiAgentRuntimeDriver, type PiAgentRuntimeDriverOptions } from '../runs/PiAgentRuntimeDriver';\n\n// AI Provider\nexport { VercelAiProvider, type VercelAiProviderOptions } from './ai-provider';\n"]}
@@ -47,7 +47,7 @@ export declare class PodChatKitStore implements ChatKitStore<StoreContext>, RunS
47
47
  private isBaseRelativeChatResourceId;
48
48
  private buildChatResourceId;
49
49
  private chatSurfaceIdFromResourceId;
50
- private chatSurfaceIdFromIri;
50
+ private chatSurfaceIdFromResource;
51
51
  /**
52
52
  * 确保 Chat 容器存在,如果不存在则创建
53
53
  */
@@ -71,8 +71,8 @@ export declare class PodChatKitStore implements ChatKitStore<StoreContext>, RunS
71
71
  private generateThreadResourceId;
72
72
  private buildMessageResourceId;
73
73
  private generateMessageResourceId;
74
- private resolveDataResourceUriFromId;
75
- private baseRelativeIdFromSubjectUri;
74
+ private resolveDataResource;
75
+ private baseRelativeIdFromResource;
76
76
  private runRecordToData;
77
77
  private runStepRecordToData;
78
78
  private taskRecordToData;
@@ -82,17 +82,17 @@ export declare class PodChatKitStore implements ChatKitStore<StoreContext>, RunS
82
82
  */
83
83
  private messageRecordToItem;
84
84
  /**
85
- * 获取或构建 Chat IRI -> surface id 的映射缓存。
86
- * drizzle-solid 的 uri().link(Chat) 字段返回完整 URI,通过 Chat 的 @id 比对还原路径槽位。
85
+ * 获取或构建 Chat resource -> surface id 的映射缓存。
86
+ * drizzle-solid 的 link(Chat) 字段返回完整资源引用,通过 Chat 的 @id 比对还原路径槽位。
87
87
  */
88
- private getChatUriMap;
88
+ private getChatResourceMap;
89
89
  /**
90
- * 从 Chat URI 还原 surface id。
90
+ * 从 Chat resource 还原 surface id。
91
91
  * 优先通过 @id 映射;若调用方本来给的是裸 ID,则原样使用。
92
92
  */
93
- private resolveChatSurfaceFromUri;
94
- private isAbsoluteHttpIri;
95
- private parseThreadIri;
93
+ private resolveChatSurfaceFromResource;
94
+ private isAbsoluteHttpResource;
95
+ private parseThreadResource;
96
96
  private normalizeThreadCacheKey;
97
97
  private parseThreadResourceId;
98
98
  private resolveThreadRef;
@@ -189,8 +189,11 @@ export declare class PodChatKitStore implements ChatKitStore<StoreContext>, RunS
189
189
  */
190
190
  private extractProviderId;
191
191
  private pushAvailableModel;
192
- private resolvePodResourceIri;
192
+ private resolvePodResource;
193
193
  private findProviderForCredential;
194
+ private sortAiCredentialCandidates;
195
+ private isTruthyValue;
196
+ private timestampValue;
194
197
  getAiConfig(context: StoreContext): Promise<{
195
198
  providerId: string;
196
199
  baseUrl: string;