@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.
- package/config/cli.json +1 -1
- package/config/cloud.json +54 -22
- package/config/local.json +56 -12
- package/config/resolver.json +10 -2
- package/config/xpod.base.json +50 -0
- package/config/xpod.json +8 -8
- package/dist/agents/config/resolve.js +10 -10
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +1 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +14 -11
- package/dist/api/chatkit/pod-store.js +114 -78
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/service.js +1 -1
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +11 -11
- package/dist/api/chatkit/types.js +3 -3
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/cloud.js +0 -8
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/index.js +2 -1
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +0 -7
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +3 -17
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +0 -2
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
- package/dist/api/handlers/PodManagementHandler.js +71 -1
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/RunHandler.js +5 -5
- package/dist/api/handlers/RunHandler.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
- package/dist/api/runs/ManagedRunWorker.js +6 -6
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +3 -3
- package/dist/api/runs/RunStateCenter.js +13 -13
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runs/store.d.ts +4 -4
- package/dist/api/runs/store.js +2 -2
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -1
- package/dist/api/service/VectorStoreService.js +16 -16
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
- package/dist/api/tasks/TaskMaterializer.js +11 -11
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +3 -3
- package/dist/api/tasks/TaskService.js +11 -7
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/api/tasks/store.d.ts +10 -4
- package/dist/api/tasks/store.js +14 -4
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/api/workspace/types.d.ts +3 -3
- package/dist/api/workspace/types.js +6 -6
- package/dist/api/workspace/types.js.map +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/start.js +9 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +8 -2
- package/dist/components/context.jsonld +302 -51
- package/dist/http/search/SearchHttpHandler.js +8 -8
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
- package/dist/identity/drizzle/PodLookupRepository.js +95 -4
- package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
- package/dist/identity/drizzle/db.js +4 -43
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +0 -5
- package/dist/identity/drizzle/schema.pg.js +2 -16
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
- package/dist/identity/drizzle/schema.sqlite.js +2 -16
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
- package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/main.js +8 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +3 -4
- package/dist/provision/ProvisionPodCreator.js +8 -13
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +7 -7
- package/dist/runtime/Proxy.d.ts +0 -1
- package/dist/runtime/Proxy.js +0 -9
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +5 -2
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +12 -4
- package/dist/runtime/css-process.js +61 -14
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/oidc-issuer.d.ts +3 -2
- package/dist/runtime/oidc-issuer.js +3 -2
- package/dist/runtime/oidc-issuer.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +1 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.d.ts +18 -0
- package/dist/solidfs/LocalSolidFS.js +539 -0
- package/dist/solidfs/LocalSolidFS.js.map +1 -0
- package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
- package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
- package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
- package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
- package/dist/solidfs/PodSolidFsHydrator.js +127 -0
- package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
- package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
- package/dist/solidfs/PodSolidFsSyncer.js +78 -0
- package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/index.d.ts +7 -0
- package/dist/solidfs/index.js +24 -0
- package/dist/solidfs/index.js.map +1 -0
- package/dist/solidfs/types.d.ts +131 -0
- package/dist/solidfs/types.js +19 -0
- package/dist/solidfs/types.js.map +1 -0
- package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
- package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
- package/dist/storage/SparqlUpdateResourceStore.js +13 -0
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
- package/dist/storage/accessors/MinioDataAccessor.d.ts +2 -0
- package/dist/storage/accessors/MinioDataAccessor.js +13 -7
- package/dist/storage/accessors/MinioDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MinioDataAccessor.jsonld +8 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
- package/dist/storage/accessors/MixDataAccessor.js +511 -16
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
- package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
- package/dist/storage/quint/BaseQuintStore.js +51 -27
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +1 -0
- package/dist/storage/quint/PgQuintStore.js +50 -32
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.jsonld +4 -3
- package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
- package/dist/storage/quint/SqliteQuintStore.js +100 -0
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
- package/dist/storage/quint/types.d.ts +16 -0
- package/dist/storage/quint/types.js.map +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
- package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
- package/dist/storage/rdf/RdfContentTypes.js +79 -0
- package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +76 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js +2636 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
- package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
- package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
- package/dist/storage/rdf/RdfShadowComparator.js +47 -0
- package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
- package/dist/storage/rdf/RdfTermDictionary.js +352 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
- package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +40 -0
- package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
- package/dist/storage/rdf/RdfTextIndex.js +569 -0
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
- package/dist/storage/rdf/RdfVectorIndex.js +631 -0
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
- package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
- package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +51 -0
- package/dist/storage/rdf/SolidRdfEngine.js +264 -0
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfEngine.jsonld +338 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
- package/dist/storage/rdf/index.d.ts +15 -0
- package/dist/storage/rdf/index.js +61 -0
- package/dist/storage/rdf/index.js.map +1 -0
- package/dist/storage/rdf/models-benchmark.d.ts +260 -0
- package/dist/storage/rdf/models-benchmark.js +1405 -0
- package/dist/storage/rdf/models-benchmark.js.map +1 -0
- package/dist/storage/rdf/types.d.ts +726 -0
- package/dist/storage/rdf/types.js +3 -0
- package/dist/storage/rdf/types.js.map +1 -0
- package/dist/storage/rdf/types.jsonld +316 -0
- package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
- package/dist/storage/vector/VectorIndexingListener.js +19 -19
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/package.json +3 -2
- package/templates/pod/acp/.acr.hbs +39 -0
- package/templates/pod/acp/README.acr +18 -0
- package/templates/pod/acp/profile/card.acr +22 -0
- package/templates/pod/base/README$.md.hbs +27 -0
- package/templates/pod/base/profile/card$.ttl.hbs +13 -0
- package/templates/pod/wac/.acl.hbs +26 -0
- package/templates/pod/wac/README.acl.hbs +14 -0
- package/templates/pod/wac/profile/card.acl.hbs +19 -0
- package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
- package/dist/api/handlers/WebIdProfileHandler.js +0 -423
- package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
- package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
- package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
- package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
package/config/cli.json
CHANGED
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": "
|
|
133
|
-
"@id": "urn:undefineds:xpod:
|
|
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": "
|
|
143
|
-
"@id": "urn:undefineds:xpod:
|
|
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:
|
|
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:
|
|
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": "定义
|
|
25
|
-
"@id": "urn:solid-server:default:variable:
|
|
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 - 有
|
|
29
|
+
"comment": "Auto-detect OIDC Handler - 有 oidcIssuer 时启用 SP 模式,代理 JWKS",
|
|
30
30
|
"@id": "urn:undefineds:xpod:AutoDetectOidcHandler",
|
|
31
31
|
"@type": "AutoDetectOidcHandler",
|
|
32
|
-
"AutoDetectOidcHandler:
|
|
33
|
-
"@id": "urn:solid-server:default:variable:
|
|
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 - 有
|
|
55
|
+
"comment": "Auto-detect Identity Provider Handler - 有 oidcIssuer 时禁用本地账户管理",
|
|
56
56
|
"@id": "urn:undefineds:xpod:AutoDetectIdentityProviderHandler",
|
|
57
57
|
"@type": "AutoDetectIdentityProviderHandler",
|
|
58
|
-
"AutoDetectIdentityProviderHandler:
|
|
59
|
-
"@id": "urn:solid-server:default:variable:
|
|
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": "
|
|
81
|
-
"@id": "urn:undefineds:xpod:
|
|
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": "
|
|
116
|
-
"@id": "urn:undefineds:xpod:
|
|
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",
|
package/config/resolver.json
CHANGED
|
@@ -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:
|
|
299
|
+
"CombinedShorthandResolver:_resolvers_key": "urn:solid-server:default:variable:oidcIssuer",
|
|
292
300
|
"CombinedShorthandResolver:_resolvers_value": {
|
|
293
301
|
"@type": "KeyExtractor",
|
|
294
|
-
"key": "
|
|
302
|
+
"key": "oidcIssuer",
|
|
295
303
|
"defaultValue": ""
|
|
296
304
|
}
|
|
297
305
|
},
|
package/config/xpod.base.json
CHANGED
|
@@ -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": "定义
|
|
20
|
-
"@id": "urn:solid-server:default:variable:
|
|
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:
|
|
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 - 有
|
|
55
|
+
"comment": "Auto-detect OIDC Handler - 有 oidcIssuer 时启用 SP 模式",
|
|
56
56
|
"@id": "urn:undefineds:xpod:AutoDetectOidcHandler",
|
|
57
57
|
"@type": "AutoDetectOidcHandler",
|
|
58
|
-
"
|
|
59
|
-
"@id": "urn:solid-server:default:variable:
|
|
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
|
-
"
|
|
78
|
-
"@id": "urn:solid-server:default:variable:
|
|
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
|
|
77
|
-
if (!
|
|
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,
|
|
81
|
+
const provider = await this.db.findByIri(provider_1.Provider, providerResource);
|
|
82
82
|
if (!provider) {
|
|
83
|
-
logger.error(`Provider not found: ${
|
|
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(
|
|
117
|
-
if (!
|
|
116
|
+
async resolveCredential(credentialResource) {
|
|
117
|
+
if (!credentialResource) {
|
|
118
118
|
return { apiKey: '' };
|
|
119
119
|
}
|
|
120
|
-
const credential = await this.db.findByIri(tables_1.Credential,
|
|
120
|
+
const credential = await this.db.findByIri(tables_1.Credential, credentialResource);
|
|
121
121
|
if (!credential) {
|
|
122
|
-
logger.warn(`Credential not found: ${
|
|
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,
|
|
132
|
-
const explicit = await resolveModelId(this.db,
|
|
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":"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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 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
|
|
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
|
|
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
|
|
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
|
|
75
|
-
private
|
|
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
|
|
86
|
-
* drizzle-solid 的
|
|
85
|
+
* 获取或构建 Chat resource -> surface id 的映射缓存。
|
|
86
|
+
* drizzle-solid 的 link(Chat) 字段返回完整资源引用,通过 Chat 的 @id 比对还原路径槽位。
|
|
87
87
|
*/
|
|
88
|
-
private
|
|
88
|
+
private getChatResourceMap;
|
|
89
89
|
/**
|
|
90
|
-
* 从 Chat
|
|
90
|
+
* 从 Chat resource 还原 surface id。
|
|
91
91
|
* 优先通过 @id 映射;若调用方本来给的是裸 ID,则原样使用。
|
|
92
92
|
*/
|
|
93
|
-
private
|
|
94
|
-
private
|
|
95
|
-
private
|
|
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
|
|
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;
|