@soederpop/luca 0.0.35 → 0.0.36

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soederpop/luca",
3
- "version": "0.0.35",
3
+ "version": "0.0.36",
4
4
  "website": "https://luca.soederpop.com",
5
5
  "description": "lightweight universal conversational architecture AKA Le Ultimate Component Architecture AKA Last Universal Common Ancestor, part AI part Human",
6
6
  "author": "jon soeder aka the people's champ <jon@soederpop.com>",
@@ -104,7 +104,7 @@
104
104
  "chokidar": "^3.5.3",
105
105
  "cli-markdown": "^3.5.0",
106
106
  "compromise": "^14.14.5",
107
- "contentbase": "^0.1.7",
107
+ "contentbase": "^0.2.0",
108
108
  "cors": "^2.8.5",
109
109
  "detect-port": "^1.5.1",
110
110
  "dotenv": "^17.2.4",
@@ -1,5 +1,5 @@
1
1
  // Auto-generated bootstrap content
2
- // Generated at: 2026-03-27T03:29:28.307Z
2
+ // Generated at: 2026-03-28T00:36:31.608Z
3
3
  // Source: docs/bootstrap/*.md, docs/bootstrap/templates/*, docs/examples/*.md, docs/tutorials/*.md
4
4
  //
5
5
  // Do not edit manually. Run: luca build-bootstrap
@@ -1,4 +1,4 @@
1
1
  // Generated at compile time — do not edit manually
2
- export const BUILD_SHA = 'd0aa900'
2
+ export const BUILD_SHA = 'acd8dd0'
3
3
  export const BUILD_BRANCH = 'main'
4
- export const BUILD_DATE = '2026-03-27T03:29:29Z'
4
+ export const BUILD_DATE = '2026-03-28T00:36:32Z'
@@ -1,7 +1,7 @@
1
1
  import { setBuildTimeData, setContainerBuildTimeData } from './index.js';
2
2
 
3
3
  // Auto-generated introspection registry data
4
- // Generated at: 2026-03-27T03:29:26.633Z
4
+ // Generated at: 2026-03-28T00:36:29.946Z
5
5
 
6
6
  setBuildTimeData('features.googleDocs', {
7
7
  "id": "features.googleDocs",
@@ -12056,270 +12056,6 @@ setBuildTimeData('clients.openai', {
12056
12056
  ]
12057
12057
  });
12058
12058
 
12059
- setBuildTimeData('clients.elevenlabs', {
12060
- "id": "clients.elevenlabs",
12061
- "description": "ElevenLabs client — text-to-speech synthesis via the ElevenLabs REST API. Provides methods for listing voices, listing models, and generating speech audio. Audio is returned as a Buffer; use `say()` for a convenience method that writes to disk.",
12062
- "shortcut": "clients.elevenlabs",
12063
- "className": "ElevenLabsClient",
12064
- "methods": {
12065
- "beforeRequest": {
12066
- "description": "Inject the xi-api-key header before each request.",
12067
- "parameters": {},
12068
- "required": [],
12069
- "returns": "void"
12070
- },
12071
- "connect": {
12072
- "description": "Validate the API key by listing available models.",
12073
- "parameters": {},
12074
- "required": [],
12075
- "returns": "Promise<this>",
12076
- "examples": [
12077
- {
12078
- "language": "ts",
12079
- "code": "await el.connect()"
12080
- }
12081
- ]
12082
- },
12083
- "listVoices": {
12084
- "description": "List available voices with optional search and filtering.",
12085
- "parameters": {
12086
- "options": {
12087
- "type": "{\n search?: string\n category?: string\n voice_type?: string\n page_size?: number\n next_page_token?: string\n }",
12088
- "description": "Query parameters for filtering voices"
12089
- }
12090
- },
12091
- "required": [],
12092
- "returns": "Promise<any>",
12093
- "examples": [
12094
- {
12095
- "language": "ts",
12096
- "code": "const voices = await el.listVoices()\nconst premade = await el.listVoices({ category: 'premade' })"
12097
- }
12098
- ]
12099
- },
12100
- "getVoice": {
12101
- "description": "Get details for a single voice.",
12102
- "parameters": {
12103
- "voiceId": {
12104
- "type": "string",
12105
- "description": "The voice ID to look up"
12106
- }
12107
- },
12108
- "required": [
12109
- "voiceId"
12110
- ],
12111
- "returns": "Promise<any>",
12112
- "examples": [
12113
- {
12114
- "language": "ts",
12115
- "code": "const voice = await el.getVoice('21m00Tcm4TlvDq8ikWAM')\nconsole.log(voice.name, voice.settings)"
12116
- }
12117
- ]
12118
- },
12119
- "listModels": {
12120
- "description": "List available TTS models.",
12121
- "parameters": {},
12122
- "required": [],
12123
- "returns": "Promise<any[]>",
12124
- "examples": [
12125
- {
12126
- "language": "ts",
12127
- "code": "const models = await el.listModels()\nconsole.log(models.map(m => m.model_id))"
12128
- }
12129
- ]
12130
- },
12131
- "synthesize": {
12132
- "description": "Synthesize speech from text, returning audio as a Buffer.",
12133
- "parameters": {
12134
- "text": {
12135
- "type": "string",
12136
- "description": "The text to convert to speech"
12137
- },
12138
- "options": {
12139
- "type": "SynthesizeOptions",
12140
- "description": "Voice, model, format, and voice settings overrides",
12141
- "properties": {
12142
- "voiceId": {
12143
- "type": "string",
12144
- "description": ""
12145
- },
12146
- "modelId": {
12147
- "type": "string",
12148
- "description": ""
12149
- },
12150
- "outputFormat": {
12151
- "type": "string",
12152
- "description": ""
12153
- },
12154
- "voiceSettings": {
12155
- "type": "ElevenLabsVoiceSettings",
12156
- "description": ""
12157
- },
12158
- "disableCache": {
12159
- "type": "boolean",
12160
- "description": ""
12161
- }
12162
- }
12163
- }
12164
- },
12165
- "required": [
12166
- "text"
12167
- ],
12168
- "returns": "Promise<Buffer>",
12169
- "examples": [
12170
- {
12171
- "language": "ts",
12172
- "code": "const audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data\n\nconst custom = await el.synthesize('Hello', {\n voiceId: '21m00Tcm4TlvDq8ikWAM',\n voiceSettings: { stability: 0.5, similarityBoost: 0.8 }\n})"
12173
- }
12174
- ]
12175
- },
12176
- "say": {
12177
- "description": "Synthesize speech and write the audio to a file.",
12178
- "parameters": {
12179
- "text": {
12180
- "type": "string",
12181
- "description": "The text to convert to speech"
12182
- },
12183
- "outputPath": {
12184
- "type": "string",
12185
- "description": "File path to write the audio to"
12186
- },
12187
- "options": {
12188
- "type": "SynthesizeOptions",
12189
- "description": "Voice, model, format, and voice settings overrides",
12190
- "properties": {
12191
- "voiceId": {
12192
- "type": "string",
12193
- "description": ""
12194
- },
12195
- "modelId": {
12196
- "type": "string",
12197
- "description": ""
12198
- },
12199
- "outputFormat": {
12200
- "type": "string",
12201
- "description": ""
12202
- },
12203
- "voiceSettings": {
12204
- "type": "ElevenLabsVoiceSettings",
12205
- "description": ""
12206
- },
12207
- "disableCache": {
12208
- "type": "boolean",
12209
- "description": ""
12210
- }
12211
- }
12212
- }
12213
- },
12214
- "required": [
12215
- "text",
12216
- "outputPath"
12217
- ],
12218
- "returns": "Promise<string>",
12219
- "examples": [
12220
- {
12221
- "language": "ts",
12222
- "code": "const path = await el.say('Hello world', './hello.mp3')\nconsole.log(`Audio saved to ${path}`)"
12223
- }
12224
- ]
12225
- }
12226
- },
12227
- "getters": {
12228
- "apiKey": {
12229
- "description": "The resolved API key from options or environment.",
12230
- "returns": "string"
12231
- }
12232
- },
12233
- "events": {
12234
- "failure": {
12235
- "name": "failure",
12236
- "description": "Event emitted by ElevenLabsClient",
12237
- "arguments": {}
12238
- },
12239
- "voices": {
12240
- "name": "voices",
12241
- "description": "Event emitted by ElevenLabsClient",
12242
- "arguments": {}
12243
- },
12244
- "speech": {
12245
- "name": "speech",
12246
- "description": "Event emitted by ElevenLabsClient",
12247
- "arguments": {}
12248
- }
12249
- },
12250
- "state": {},
12251
- "options": {},
12252
- "envVars": [],
12253
- "examples": [
12254
- {
12255
- "language": "ts",
12256
- "code": "const el = container.client('elevenlabs')\nawait el.connect()\nconst voices = await el.listVoices()\nconst audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data"
12257
- }
12258
- ],
12259
- "types": {
12260
- "SynthesizeOptions": {
12261
- "description": "",
12262
- "properties": {
12263
- "voiceId": {
12264
- "type": "string",
12265
- "description": "",
12266
- "optional": true
12267
- },
12268
- "modelId": {
12269
- "type": "string",
12270
- "description": "",
12271
- "optional": true
12272
- },
12273
- "outputFormat": {
12274
- "type": "string",
12275
- "description": "",
12276
- "optional": true
12277
- },
12278
- "voiceSettings": {
12279
- "type": "ElevenLabsVoiceSettings",
12280
- "description": "",
12281
- "optional": true
12282
- },
12283
- "disableCache": {
12284
- "type": "boolean",
12285
- "description": "",
12286
- "optional": true
12287
- }
12288
- }
12289
- },
12290
- "ElevenLabsVoiceSettings": {
12291
- "description": "",
12292
- "properties": {
12293
- "stability": {
12294
- "type": "number",
12295
- "description": "",
12296
- "optional": true
12297
- },
12298
- "similarityBoost": {
12299
- "type": "number",
12300
- "description": "",
12301
- "optional": true
12302
- },
12303
- "style": {
12304
- "type": "number",
12305
- "description": "",
12306
- "optional": true
12307
- },
12308
- "speed": {
12309
- "type": "number",
12310
- "description": "",
12311
- "optional": true
12312
- },
12313
- "useSpeakerBoost": {
12314
- "type": "boolean",
12315
- "description": "",
12316
- "optional": true
12317
- }
12318
- }
12319
- }
12320
- }
12321
- });
12322
-
12323
12059
  setBuildTimeData('clients.supabase', {
12324
12060
  "id": "clients.supabase",
12325
12061
  "description": "Supabase client for the Luca container system. Wraps the official `@supabase/supabase-js` SDK and exposes it through Luca's typed state, events, and introspection system. The SDK is isomorphic so this single implementation works in both Node and browser containers. Use `client.sdk` for full SDK access, or use the convenience wrappers for common operations (auth, database queries, storage, edge functions, realtime).",
@@ -12499,21 +12235,285 @@ setBuildTimeData('clients.supabase', {
12499
12235
  "description": "Returns the Supabase Storage client for managing buckets and files.",
12500
12236
  "returns": "any"
12501
12237
  },
12502
- "functions": {
12503
- "description": "Returns the Supabase Functions client.",
12504
- "returns": "any"
12238
+ "functions": {
12239
+ "description": "Returns the Supabase Functions client.",
12240
+ "returns": "any"
12241
+ }
12242
+ },
12243
+ "events": {},
12244
+ "state": {},
12245
+ "options": {},
12246
+ "envVars": [],
12247
+ "examples": [
12248
+ {
12249
+ "language": "ts",
12250
+ "code": "const supabase = container.client('supabase', {\n supabaseUrl: 'https://xyz.supabase.co',\n supabaseKey: 'your-anon-key',\n})\n\n// Query data\nconst { data } = await supabase.from('users').select('*')\n\n// Auth\nawait supabase.signInWithPassword('user@example.com', 'password')\n\n// Realtime\nsupabase.subscribe('changes', 'users', (payload) => {\n console.log('Change:', payload)\n})"
12251
+ }
12252
+ ]
12253
+ });
12254
+
12255
+ setBuildTimeData('clients.elevenlabs', {
12256
+ "id": "clients.elevenlabs",
12257
+ "description": "ElevenLabs client — text-to-speech synthesis via the ElevenLabs REST API. Provides methods for listing voices, listing models, and generating speech audio. Audio is returned as a Buffer; use `say()` for a convenience method that writes to disk.",
12258
+ "shortcut": "clients.elevenlabs",
12259
+ "className": "ElevenLabsClient",
12260
+ "methods": {
12261
+ "beforeRequest": {
12262
+ "description": "Inject the xi-api-key header before each request.",
12263
+ "parameters": {},
12264
+ "required": [],
12265
+ "returns": "void"
12266
+ },
12267
+ "connect": {
12268
+ "description": "Validate the API key by listing available models.",
12269
+ "parameters": {},
12270
+ "required": [],
12271
+ "returns": "Promise<this>",
12272
+ "examples": [
12273
+ {
12274
+ "language": "ts",
12275
+ "code": "await el.connect()"
12276
+ }
12277
+ ]
12278
+ },
12279
+ "listVoices": {
12280
+ "description": "List available voices with optional search and filtering.",
12281
+ "parameters": {
12282
+ "options": {
12283
+ "type": "{\n search?: string\n category?: string\n voice_type?: string\n page_size?: number\n next_page_token?: string\n }",
12284
+ "description": "Query parameters for filtering voices"
12285
+ }
12286
+ },
12287
+ "required": [],
12288
+ "returns": "Promise<any>",
12289
+ "examples": [
12290
+ {
12291
+ "language": "ts",
12292
+ "code": "const voices = await el.listVoices()\nconst premade = await el.listVoices({ category: 'premade' })"
12293
+ }
12294
+ ]
12295
+ },
12296
+ "getVoice": {
12297
+ "description": "Get details for a single voice.",
12298
+ "parameters": {
12299
+ "voiceId": {
12300
+ "type": "string",
12301
+ "description": "The voice ID to look up"
12302
+ }
12303
+ },
12304
+ "required": [
12305
+ "voiceId"
12306
+ ],
12307
+ "returns": "Promise<any>",
12308
+ "examples": [
12309
+ {
12310
+ "language": "ts",
12311
+ "code": "const voice = await el.getVoice('21m00Tcm4TlvDq8ikWAM')\nconsole.log(voice.name, voice.settings)"
12312
+ }
12313
+ ]
12314
+ },
12315
+ "listModels": {
12316
+ "description": "List available TTS models.",
12317
+ "parameters": {},
12318
+ "required": [],
12319
+ "returns": "Promise<any[]>",
12320
+ "examples": [
12321
+ {
12322
+ "language": "ts",
12323
+ "code": "const models = await el.listModels()\nconsole.log(models.map(m => m.model_id))"
12324
+ }
12325
+ ]
12326
+ },
12327
+ "synthesize": {
12328
+ "description": "Synthesize speech from text, returning audio as a Buffer.",
12329
+ "parameters": {
12330
+ "text": {
12331
+ "type": "string",
12332
+ "description": "The text to convert to speech"
12333
+ },
12334
+ "options": {
12335
+ "type": "SynthesizeOptions",
12336
+ "description": "Voice, model, format, and voice settings overrides",
12337
+ "properties": {
12338
+ "voiceId": {
12339
+ "type": "string",
12340
+ "description": ""
12341
+ },
12342
+ "modelId": {
12343
+ "type": "string",
12344
+ "description": ""
12345
+ },
12346
+ "outputFormat": {
12347
+ "type": "string",
12348
+ "description": ""
12349
+ },
12350
+ "voiceSettings": {
12351
+ "type": "ElevenLabsVoiceSettings",
12352
+ "description": ""
12353
+ },
12354
+ "disableCache": {
12355
+ "type": "boolean",
12356
+ "description": ""
12357
+ }
12358
+ }
12359
+ }
12360
+ },
12361
+ "required": [
12362
+ "text"
12363
+ ],
12364
+ "returns": "Promise<Buffer>",
12365
+ "examples": [
12366
+ {
12367
+ "language": "ts",
12368
+ "code": "const audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data\n\nconst custom = await el.synthesize('Hello', {\n voiceId: '21m00Tcm4TlvDq8ikWAM',\n voiceSettings: { stability: 0.5, similarityBoost: 0.8 }\n})"
12369
+ }
12370
+ ]
12371
+ },
12372
+ "say": {
12373
+ "description": "Synthesize speech and write the audio to a file.",
12374
+ "parameters": {
12375
+ "text": {
12376
+ "type": "string",
12377
+ "description": "The text to convert to speech"
12378
+ },
12379
+ "outputPath": {
12380
+ "type": "string",
12381
+ "description": "File path to write the audio to"
12382
+ },
12383
+ "options": {
12384
+ "type": "SynthesizeOptions",
12385
+ "description": "Voice, model, format, and voice settings overrides",
12386
+ "properties": {
12387
+ "voiceId": {
12388
+ "type": "string",
12389
+ "description": ""
12390
+ },
12391
+ "modelId": {
12392
+ "type": "string",
12393
+ "description": ""
12394
+ },
12395
+ "outputFormat": {
12396
+ "type": "string",
12397
+ "description": ""
12398
+ },
12399
+ "voiceSettings": {
12400
+ "type": "ElevenLabsVoiceSettings",
12401
+ "description": ""
12402
+ },
12403
+ "disableCache": {
12404
+ "type": "boolean",
12405
+ "description": ""
12406
+ }
12407
+ }
12408
+ }
12409
+ },
12410
+ "required": [
12411
+ "text",
12412
+ "outputPath"
12413
+ ],
12414
+ "returns": "Promise<string>",
12415
+ "examples": [
12416
+ {
12417
+ "language": "ts",
12418
+ "code": "const path = await el.say('Hello world', './hello.mp3')\nconsole.log(`Audio saved to ${path}`)"
12419
+ }
12420
+ ]
12421
+ }
12422
+ },
12423
+ "getters": {
12424
+ "apiKey": {
12425
+ "description": "The resolved API key from options or environment.",
12426
+ "returns": "string"
12427
+ }
12428
+ },
12429
+ "events": {
12430
+ "failure": {
12431
+ "name": "failure",
12432
+ "description": "Event emitted by ElevenLabsClient",
12433
+ "arguments": {}
12434
+ },
12435
+ "voices": {
12436
+ "name": "voices",
12437
+ "description": "Event emitted by ElevenLabsClient",
12438
+ "arguments": {}
12439
+ },
12440
+ "speech": {
12441
+ "name": "speech",
12442
+ "description": "Event emitted by ElevenLabsClient",
12443
+ "arguments": {}
12505
12444
  }
12506
12445
  },
12507
- "events": {},
12508
12446
  "state": {},
12509
12447
  "options": {},
12510
12448
  "envVars": [],
12511
12449
  "examples": [
12512
12450
  {
12513
12451
  "language": "ts",
12514
- "code": "const supabase = container.client('supabase', {\n supabaseUrl: 'https://xyz.supabase.co',\n supabaseKey: 'your-anon-key',\n})\n\n// Query data\nconst { data } = await supabase.from('users').select('*')\n\n// Auth\nawait supabase.signInWithPassword('user@example.com', 'password')\n\n// Realtime\nsupabase.subscribe('changes', 'users', (payload) => {\n console.log('Change:', payload)\n})"
12452
+ "code": "const el = container.client('elevenlabs')\nawait el.connect()\nconst voices = await el.listVoices()\nconst audio = await el.synthesize('Hello world')\n// audio is a Buffer of mp3 data"
12515
12453
  }
12516
- ]
12454
+ ],
12455
+ "types": {
12456
+ "SynthesizeOptions": {
12457
+ "description": "",
12458
+ "properties": {
12459
+ "voiceId": {
12460
+ "type": "string",
12461
+ "description": "",
12462
+ "optional": true
12463
+ },
12464
+ "modelId": {
12465
+ "type": "string",
12466
+ "description": "",
12467
+ "optional": true
12468
+ },
12469
+ "outputFormat": {
12470
+ "type": "string",
12471
+ "description": "",
12472
+ "optional": true
12473
+ },
12474
+ "voiceSettings": {
12475
+ "type": "ElevenLabsVoiceSettings",
12476
+ "description": "",
12477
+ "optional": true
12478
+ },
12479
+ "disableCache": {
12480
+ "type": "boolean",
12481
+ "description": "",
12482
+ "optional": true
12483
+ }
12484
+ }
12485
+ },
12486
+ "ElevenLabsVoiceSettings": {
12487
+ "description": "",
12488
+ "properties": {
12489
+ "stability": {
12490
+ "type": "number",
12491
+ "description": "",
12492
+ "optional": true
12493
+ },
12494
+ "similarityBoost": {
12495
+ "type": "number",
12496
+ "description": "",
12497
+ "optional": true
12498
+ },
12499
+ "style": {
12500
+ "type": "number",
12501
+ "description": "",
12502
+ "optional": true
12503
+ },
12504
+ "speed": {
12505
+ "type": "number",
12506
+ "description": "",
12507
+ "optional": true
12508
+ },
12509
+ "useSpeakerBoost": {
12510
+ "type": "boolean",
12511
+ "description": "",
12512
+ "optional": true
12513
+ }
12514
+ }
12515
+ }
12516
+ }
12517
12517
  });
12518
12518
 
12519
12519
  setBuildTimeData('clients.comfyui', {
@@ -30591,39 +30591,234 @@ export const introspectionData = [
30591
30591
  "description": "Event emitted by OpenAIClient",
30592
30592
  "arguments": {}
30593
30593
  },
30594
- "failure": {
30595
- "name": "failure",
30596
- "description": "Event emitted by OpenAIClient",
30597
- "arguments": {}
30594
+ "failure": {
30595
+ "name": "failure",
30596
+ "description": "Event emitted by OpenAIClient",
30597
+ "arguments": {}
30598
+ },
30599
+ "completion": {
30600
+ "name": "completion",
30601
+ "description": "Event emitted by OpenAIClient",
30602
+ "arguments": {}
30603
+ },
30604
+ "embedding": {
30605
+ "name": "embedding",
30606
+ "description": "Event emitted by OpenAIClient",
30607
+ "arguments": {}
30608
+ },
30609
+ "image": {
30610
+ "name": "image",
30611
+ "description": "Event emitted by OpenAIClient",
30612
+ "arguments": {}
30613
+ },
30614
+ "models": {
30615
+ "name": "models",
30616
+ "description": "Event emitted by OpenAIClient",
30617
+ "arguments": {}
30618
+ }
30619
+ },
30620
+ "state": {},
30621
+ "options": {},
30622
+ "envVars": [],
30623
+ "examples": [
30624
+ {
30625
+ "language": "ts",
30626
+ "code": "const openai = container.client('openai', { defaultModel: 'gpt-4o' })\nconst answer = await openai.ask('What is the meaning of life?')\nconsole.log(answer)"
30627
+ }
30628
+ ]
30629
+ },
30630
+ {
30631
+ "id": "clients.supabase",
30632
+ "description": "Supabase client for the Luca container system. Wraps the official `@supabase/supabase-js` SDK and exposes it through Luca's typed state, events, and introspection system. The SDK is isomorphic so this single implementation works in both Node and browser containers. Use `client.sdk` for full SDK access, or use the convenience wrappers for common operations (auth, database queries, storage, edge functions, realtime).",
30633
+ "shortcut": "clients.supabase",
30634
+ "className": "SupabaseClient",
30635
+ "methods": {
30636
+ "from": {
30637
+ "description": "Start a query on a Postgres table or view.",
30638
+ "parameters": {
30639
+ "table": {
30640
+ "type": "string",
30641
+ "description": "The table or view name to query"
30642
+ }
30643
+ },
30644
+ "required": [
30645
+ "table"
30646
+ ],
30647
+ "returns": "void"
30648
+ },
30649
+ "rpc": {
30650
+ "description": "Call a Postgres function (RPC).",
30651
+ "parameters": {
30652
+ "fn": {
30653
+ "type": "string",
30654
+ "description": "The function name"
30655
+ },
30656
+ "params": {
30657
+ "type": "Record<string, unknown>",
30658
+ "description": "Arguments to pass to the function"
30659
+ },
30660
+ "options": {
30661
+ "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
30662
+ "description": "Optional settings (head, get, count)"
30663
+ }
30664
+ },
30665
+ "required": [
30666
+ "fn"
30667
+ ],
30668
+ "returns": "void"
30669
+ },
30670
+ "signInWithPassword": {
30671
+ "description": "Sign in with email and password.",
30672
+ "parameters": {
30673
+ "email": {
30674
+ "type": "string",
30675
+ "description": "Parameter email"
30676
+ },
30677
+ "password": {
30678
+ "type": "string",
30679
+ "description": "Parameter password"
30680
+ }
30681
+ },
30682
+ "required": [
30683
+ "email",
30684
+ "password"
30685
+ ],
30686
+ "returns": "void"
30687
+ },
30688
+ "signUp": {
30689
+ "description": "Create a new user account with email and password.",
30690
+ "parameters": {
30691
+ "email": {
30692
+ "type": "string",
30693
+ "description": "Parameter email"
30694
+ },
30695
+ "password": {
30696
+ "type": "string",
30697
+ "description": "Parameter password"
30698
+ }
30699
+ },
30700
+ "required": [
30701
+ "email",
30702
+ "password"
30703
+ ],
30704
+ "returns": "void"
30705
+ },
30706
+ "signOut": {
30707
+ "description": "Sign the current user out.",
30708
+ "parameters": {},
30709
+ "required": [],
30710
+ "returns": "void"
30711
+ },
30712
+ "getSession": {
30713
+ "description": "Get the current session, if any.",
30714
+ "parameters": {},
30715
+ "required": [],
30716
+ "returns": "void"
30717
+ },
30718
+ "getUser": {
30719
+ "description": "Get the current user, if any.",
30720
+ "parameters": {},
30721
+ "required": [],
30722
+ "returns": "void"
30723
+ },
30724
+ "invoke": {
30725
+ "description": "Invoke a Supabase Edge Function by name.",
30726
+ "parameters": {
30727
+ "name": {
30728
+ "type": "string",
30729
+ "description": "Parameter name"
30730
+ },
30731
+ "body": {
30732
+ "type": "any",
30733
+ "description": "Parameter body"
30734
+ }
30735
+ },
30736
+ "required": [
30737
+ "name"
30738
+ ],
30739
+ "returns": "void"
30740
+ },
30741
+ "subscribe": {
30742
+ "description": "Subscribe to realtime changes on a Postgres table.",
30743
+ "parameters": {
30744
+ "channelName": {
30745
+ "type": "string",
30746
+ "description": "A name for this subscription channel"
30747
+ },
30748
+ "table": {
30749
+ "type": "string",
30750
+ "description": "The table to listen to"
30751
+ },
30752
+ "callback": {
30753
+ "type": "(payload: any) => void",
30754
+ "description": "Called with the payload on each change"
30755
+ },
30756
+ "event": {
30757
+ "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
30758
+ "description": "The event type to listen for (default: all changes)"
30759
+ }
30760
+ },
30761
+ "required": [
30762
+ "channelName",
30763
+ "table",
30764
+ "callback"
30765
+ ],
30766
+ "returns": "RealtimeChannel"
30767
+ },
30768
+ "unsubscribe": {
30769
+ "description": "Unsubscribe and remove a realtime channel by name.",
30770
+ "parameters": {
30771
+ "channelName": {
30772
+ "type": "string",
30773
+ "description": "The channel name to remove"
30774
+ }
30775
+ },
30776
+ "required": [
30777
+ "channelName"
30778
+ ],
30779
+ "returns": "void"
30780
+ },
30781
+ "unsubscribeAll": {
30782
+ "description": "Unsubscribe and remove all realtime channels.",
30783
+ "parameters": {},
30784
+ "required": [],
30785
+ "returns": "void"
30598
30786
  },
30599
- "completion": {
30600
- "name": "completion",
30601
- "description": "Event emitted by OpenAIClient",
30602
- "arguments": {}
30787
+ "connect": {
30788
+ "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
30789
+ "parameters": {},
30790
+ "required": [],
30791
+ "returns": "void"
30603
30792
  },
30604
- "embedding": {
30605
- "name": "embedding",
30606
- "description": "Event emitted by OpenAIClient",
30607
- "arguments": {}
30793
+ "disconnect": {
30794
+ "description": "Disconnect by signing out and removing all realtime channels.",
30795
+ "parameters": {},
30796
+ "required": [],
30797
+ "returns": "void"
30798
+ }
30799
+ },
30800
+ "getters": {
30801
+ "sdk": {
30802
+ "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
30803
+ "returns": "SupabaseSDKClient<any, any>"
30608
30804
  },
30609
- "image": {
30610
- "name": "image",
30611
- "description": "Event emitted by OpenAIClient",
30612
- "arguments": {}
30805
+ "storage": {
30806
+ "description": "Returns the Supabase Storage client for managing buckets and files.",
30807
+ "returns": "any"
30613
30808
  },
30614
- "models": {
30615
- "name": "models",
30616
- "description": "Event emitted by OpenAIClient",
30617
- "arguments": {}
30809
+ "functions": {
30810
+ "description": "Returns the Supabase Functions client.",
30811
+ "returns": "any"
30618
30812
  }
30619
30813
  },
30814
+ "events": {},
30620
30815
  "state": {},
30621
30816
  "options": {},
30622
30817
  "envVars": [],
30623
30818
  "examples": [
30624
30819
  {
30625
30820
  "language": "ts",
30626
- "code": "const openai = container.client('openai', { defaultModel: 'gpt-4o' })\nconst answer = await openai.ask('What is the meaning of life?')\nconsole.log(answer)"
30821
+ "code": "const supabase = container.client('supabase', {\n supabaseUrl: 'https://xyz.supabase.co',\n supabaseKey: 'your-anon-key',\n})\n\n// Query data\nconst { data } = await supabase.from('users').select('*')\n\n// Auth\nawait supabase.signInWithPassword('user@example.com', 'password')\n\n// Realtime\nsupabase.subscribe('changes', 'users', (payload) => {\n console.log('Change:', payload)\n})"
30627
30822
  }
30628
30823
  ]
30629
30824
  },
@@ -30890,201 +31085,6 @@ export const introspectionData = [
30890
31085
  }
30891
31086
  }
30892
31087
  },
30893
- {
30894
- "id": "clients.supabase",
30895
- "description": "Supabase client for the Luca container system. Wraps the official `@supabase/supabase-js` SDK and exposes it through Luca's typed state, events, and introspection system. The SDK is isomorphic so this single implementation works in both Node and browser containers. Use `client.sdk` for full SDK access, or use the convenience wrappers for common operations (auth, database queries, storage, edge functions, realtime).",
30896
- "shortcut": "clients.supabase",
30897
- "className": "SupabaseClient",
30898
- "methods": {
30899
- "from": {
30900
- "description": "Start a query on a Postgres table or view.",
30901
- "parameters": {
30902
- "table": {
30903
- "type": "string",
30904
- "description": "The table or view name to query"
30905
- }
30906
- },
30907
- "required": [
30908
- "table"
30909
- ],
30910
- "returns": "void"
30911
- },
30912
- "rpc": {
30913
- "description": "Call a Postgres function (RPC).",
30914
- "parameters": {
30915
- "fn": {
30916
- "type": "string",
30917
- "description": "The function name"
30918
- },
30919
- "params": {
30920
- "type": "Record<string, unknown>",
30921
- "description": "Arguments to pass to the function"
30922
- },
30923
- "options": {
30924
- "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
30925
- "description": "Optional settings (head, get, count)"
30926
- }
30927
- },
30928
- "required": [
30929
- "fn"
30930
- ],
30931
- "returns": "void"
30932
- },
30933
- "signInWithPassword": {
30934
- "description": "Sign in with email and password.",
30935
- "parameters": {
30936
- "email": {
30937
- "type": "string",
30938
- "description": "Parameter email"
30939
- },
30940
- "password": {
30941
- "type": "string",
30942
- "description": "Parameter password"
30943
- }
30944
- },
30945
- "required": [
30946
- "email",
30947
- "password"
30948
- ],
30949
- "returns": "void"
30950
- },
30951
- "signUp": {
30952
- "description": "Create a new user account with email and password.",
30953
- "parameters": {
30954
- "email": {
30955
- "type": "string",
30956
- "description": "Parameter email"
30957
- },
30958
- "password": {
30959
- "type": "string",
30960
- "description": "Parameter password"
30961
- }
30962
- },
30963
- "required": [
30964
- "email",
30965
- "password"
30966
- ],
30967
- "returns": "void"
30968
- },
30969
- "signOut": {
30970
- "description": "Sign the current user out.",
30971
- "parameters": {},
30972
- "required": [],
30973
- "returns": "void"
30974
- },
30975
- "getSession": {
30976
- "description": "Get the current session, if any.",
30977
- "parameters": {},
30978
- "required": [],
30979
- "returns": "void"
30980
- },
30981
- "getUser": {
30982
- "description": "Get the current user, if any.",
30983
- "parameters": {},
30984
- "required": [],
30985
- "returns": "void"
30986
- },
30987
- "invoke": {
30988
- "description": "Invoke a Supabase Edge Function by name.",
30989
- "parameters": {
30990
- "name": {
30991
- "type": "string",
30992
- "description": "Parameter name"
30993
- },
30994
- "body": {
30995
- "type": "any",
30996
- "description": "Parameter body"
30997
- }
30998
- },
30999
- "required": [
31000
- "name"
31001
- ],
31002
- "returns": "void"
31003
- },
31004
- "subscribe": {
31005
- "description": "Subscribe to realtime changes on a Postgres table.",
31006
- "parameters": {
31007
- "channelName": {
31008
- "type": "string",
31009
- "description": "A name for this subscription channel"
31010
- },
31011
- "table": {
31012
- "type": "string",
31013
- "description": "The table to listen to"
31014
- },
31015
- "callback": {
31016
- "type": "(payload: any) => void",
31017
- "description": "Called with the payload on each change"
31018
- },
31019
- "event": {
31020
- "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
31021
- "description": "The event type to listen for (default: all changes)"
31022
- }
31023
- },
31024
- "required": [
31025
- "channelName",
31026
- "table",
31027
- "callback"
31028
- ],
31029
- "returns": "RealtimeChannel"
31030
- },
31031
- "unsubscribe": {
31032
- "description": "Unsubscribe and remove a realtime channel by name.",
31033
- "parameters": {
31034
- "channelName": {
31035
- "type": "string",
31036
- "description": "The channel name to remove"
31037
- }
31038
- },
31039
- "required": [
31040
- "channelName"
31041
- ],
31042
- "returns": "void"
31043
- },
31044
- "unsubscribeAll": {
31045
- "description": "Unsubscribe and remove all realtime channels.",
31046
- "parameters": {},
31047
- "required": [],
31048
- "returns": "void"
31049
- },
31050
- "connect": {
31051
- "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
31052
- "parameters": {},
31053
- "required": [],
31054
- "returns": "void"
31055
- },
31056
- "disconnect": {
31057
- "description": "Disconnect by signing out and removing all realtime channels.",
31058
- "parameters": {},
31059
- "required": [],
31060
- "returns": "void"
31061
- }
31062
- },
31063
- "getters": {
31064
- "sdk": {
31065
- "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
31066
- "returns": "SupabaseSDKClient<any, any>"
31067
- },
31068
- "storage": {
31069
- "description": "Returns the Supabase Storage client for managing buckets and files.",
31070
- "returns": "any"
31071
- },
31072
- "functions": {
31073
- "description": "Returns the Supabase Functions client.",
31074
- "returns": "any"
31075
- }
31076
- },
31077
- "events": {},
31078
- "state": {},
31079
- "options": {},
31080
- "envVars": [],
31081
- "examples": [
31082
- {
31083
- "language": "ts",
31084
- "code": "const supabase = container.client('supabase', {\n supabaseUrl: 'https://xyz.supabase.co',\n supabaseKey: 'your-anon-key',\n})\n\n// Query data\nconst { data } = await supabase.from('users').select('*')\n\n// Auth\nawait supabase.signInWithPassword('user@example.com', 'password')\n\n// Realtime\nsupabase.subscribe('changes', 'users', (payload) => {\n console.log('Change:', payload)\n})"
31085
- }
31086
- ]
31087
- },
31088
31088
  {
31089
31089
  "id": "clients.comfyui",
31090
31090
  "description": "ComfyUI client — execute Stable Diffusion workflows via the ComfyUI API. Connects to a ComfyUI instance to queue prompts, track execution via WebSocket or polling, and download generated images. Supports both UI-format and API-format workflows with automatic conversion.",
@@ -1,7 +1,7 @@
1
1
  import { setBuildTimeData, setContainerBuildTimeData } from './index.js';
2
2
 
3
3
  // Auto-generated introspection registry data
4
- // Generated at: 2026-03-27T03:29:26.519Z
4
+ // Generated at: 2026-03-28T00:36:29.836Z
5
5
 
6
6
  setBuildTimeData('features.googleDocs', {
7
7
  "id": "features.googleDocs",
@@ -1,7 +1,7 @@
1
1
  import { setBuildTimeData, setContainerBuildTimeData } from './index.js';
2
2
 
3
3
  // Auto-generated introspection registry data
4
- // Generated at: 2026-03-27T03:29:26.528Z
4
+ // Generated at: 2026-03-28T00:36:29.848Z
5
5
 
6
6
  setBuildTimeData('features.containerLink', {
7
7
  "id": "features.containerLink",
@@ -1,5 +1,5 @@
1
1
  // Auto-generated Python bridge script
2
- // Generated at: 2026-03-27T03:29:29.124Z
2
+ // Generated at: 2026-03-28T00:36:32.420Z
3
3
  // Source: src/python/bridge.py
4
4
  //
5
5
  // Do not edit manually. Run: luca build-python-bridge
@@ -1,5 +1,5 @@
1
1
  // Auto-generated scaffold and MCP readme content
2
- // Generated at: 2026-03-27T03:29:27.470Z
2
+ // Generated at: 2026-03-28T00:36:30.792Z
3
3
  // Source: docs/scaffolds/*.md, docs/examples/assistant/, and docs/mcp/readme.md
4
4
  //
5
5
  // Do not edit manually. Run: luca build-scaffolds