@soederpop/luca 0.1.3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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-04-03T01:24:52.289Z
4
+ // Generated at: 2026-04-05T06:58:06.272Z
5
5
 
6
6
  setBuildTimeData('features.googleDocs', {
7
7
  "id": "features.googleDocs",
@@ -8692,6 +8692,19 @@ setBuildTimeData('features.processManager', {
8692
8692
  ],
8693
8693
  "returns": "void"
8694
8694
  },
8695
+ "setupToolsConsumer": {
8696
+ "description": "When an assistant uses processManager, inject system prompt guidance about how to manage processes safely and effectively.",
8697
+ "parameters": {
8698
+ "consumer": {
8699
+ "type": "Helper",
8700
+ "description": "Parameter consumer"
8701
+ }
8702
+ },
8703
+ "required": [
8704
+ "consumer"
8705
+ ],
8706
+ "returns": "void"
8707
+ },
8695
8708
  "spawn": {
8696
8709
  "description": "Spawn a long-running process and return a handle immediately. The returned SpawnHandler provides events for stdout/stderr streaming, exit/crash notifications, and methods to kill or await the process.",
8697
8710
  "parameters": {
@@ -11111,6 +11124,19 @@ setBuildTimeData('features.contentDb', {
11111
11124
  "shortcut": "features.contentDb",
11112
11125
  "className": "ContentDb",
11113
11126
  "methods": {
11127
+ "setupToolsConsumer": {
11128
+ "description": "When an assistant uses contentDb, inject system prompt guidance about progressive document exploration.",
11129
+ "parameters": {
11130
+ "consumer": {
11131
+ "type": "Helper",
11132
+ "description": "Parameter consumer"
11133
+ }
11134
+ },
11135
+ "required": [
11136
+ "consumer"
11137
+ ],
11138
+ "returns": "void"
11139
+ },
11114
11140
  "renderTree": {
11115
11141
  "description": "Render a tree view of the collection directory structure. Built with container.fs so it works without the `tree` binary.",
11116
11142
  "parameters": {
@@ -11838,270 +11864,198 @@ setBuildTimeData('clients.websocket', {
11838
11864
  "envVars": []
11839
11865
  });
11840
11866
 
11841
- setBuildTimeData('clients.openai', {
11842
- "id": "clients.openai",
11843
- "description": "OpenAI client wraps the OpenAI SDK for chat completions, responses API, embeddings, and image generation. Provides convenience methods for common operations while tracking token usage and request counts. Supports both the Chat Completions API and the newer Responses API.",
11844
- "shortcut": "clients.openai",
11845
- "className": "OpenAIClient",
11867
+ setBuildTimeData('clients.supabase', {
11868
+ "id": "clients.supabase",
11869
+ "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).",
11870
+ "shortcut": "clients.supabase",
11871
+ "className": "SupabaseClient",
11846
11872
  "methods": {
11847
- "connect": {
11848
- "description": "Test the API connection by listing models.",
11849
- "parameters": {},
11850
- "required": [],
11851
- "returns": "Promise<this>",
11852
- "examples": [
11853
- {
11854
- "language": "ts",
11855
- "code": "await openai.connect()"
11856
- }
11857
- ]
11858
- },
11859
- "createChatCompletion": {
11860
- "description": "Create a chat completion using the Chat Completions API.",
11873
+ "from": {
11874
+ "description": "Start a query on a Postgres table or view.",
11861
11875
  "parameters": {
11862
- "messages": {
11863
- "type": "OpenAI.Chat.Completions.ChatCompletionMessageParam[]",
11864
- "description": "Array of chat messages"
11865
- },
11866
- "options": {
11867
- "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
11868
- "description": "Additional parameters for the completion"
11876
+ "table": {
11877
+ "type": "string",
11878
+ "description": "The table or view name to query"
11869
11879
  }
11870
11880
  },
11871
11881
  "required": [
11872
- "messages"
11882
+ "table"
11873
11883
  ],
11874
- "returns": "Promise<OpenAI.Chat.Completions.ChatCompletion>",
11875
- "examples": [
11876
- {
11877
- "language": "ts",
11878
- "code": "const response = await openai.createChatCompletion([\n { role: 'system', content: 'You are a helpful assistant.' },\n { role: 'user', content: 'Hello!' }\n])\nconsole.log(response.choices[0]?.message?.content)"
11879
- }
11880
- ]
11884
+ "returns": "void"
11881
11885
  },
11882
- "createResponse": {
11883
- "description": "Create a response using the Responses API.",
11886
+ "rpc": {
11887
+ "description": "Call a Postgres function (RPC).",
11884
11888
  "parameters": {
11885
- "input": {
11886
- "type": "OpenAI.Responses.ResponseInput | string",
11887
- "description": "The input prompt or message array"
11889
+ "fn": {
11890
+ "type": "string",
11891
+ "description": "The function name"
11888
11892
  },
11889
- "options": {
11890
- "type": "Partial<OpenAI.Responses.ResponseCreateParamsNonStreaming>",
11891
- "description": "Additional parameters for the response"
11892
- }
11893
- },
11894
- "required": [
11895
- "input"
11896
- ],
11897
- "returns": "Promise<OpenAI.Responses.Response>",
11898
- "examples": [
11899
- {
11900
- "language": "ts",
11901
- "code": "const response = await openai.createResponse('Explain quantum computing')"
11902
- }
11903
- ]
11904
- },
11905
- "streamResponse": {
11906
- "description": "Stream a response using the Responses API.",
11907
- "parameters": {
11908
- "input": {
11909
- "type": "OpenAI.Responses.ResponseInput | string",
11910
- "description": "The input prompt or message array"
11893
+ "params": {
11894
+ "type": "Record<string, unknown>",
11895
+ "description": "Arguments to pass to the function"
11911
11896
  },
11912
11897
  "options": {
11913
- "type": "Partial<OpenAI.Responses.ResponseCreateParamsStreaming>",
11914
- "description": "Additional parameters for the streaming response"
11898
+ "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
11899
+ "description": "Optional settings (head, get, count)"
11915
11900
  }
11916
11901
  },
11917
11902
  "required": [
11918
- "input"
11903
+ "fn"
11919
11904
  ],
11920
- "returns": "Promise<AsyncIterable<OpenAI.Responses.ResponseStreamEvent>>",
11921
- "examples": [
11922
- {
11923
- "language": "ts",
11924
- "code": "const stream = await openai.streamResponse('Write a poem')\nfor await (const event of stream) {\n if (event.type === 'response.output_text.delta') {\n process.stdout.write(event.delta)\n }\n}"
11925
- }
11926
- ]
11905
+ "returns": "void"
11927
11906
  },
11928
- "createCompletion": {
11929
- "description": "Create a legacy text completion.",
11907
+ "signInWithPassword": {
11908
+ "description": "Sign in with email and password.",
11930
11909
  "parameters": {
11931
- "prompt": {
11910
+ "email": {
11932
11911
  "type": "string",
11933
- "description": "The text prompt to complete"
11912
+ "description": "Parameter email"
11934
11913
  },
11935
- "options": {
11936
- "type": "Partial<OpenAI.Completions.CompletionCreateParams>",
11937
- "description": "Additional parameters for the completion"
11914
+ "password": {
11915
+ "type": "string",
11916
+ "description": "Parameter password"
11938
11917
  }
11939
11918
  },
11940
11919
  "required": [
11941
- "prompt"
11920
+ "email",
11921
+ "password"
11942
11922
  ],
11943
- "returns": "Promise<OpenAI.Completions.Completion>",
11944
- "examples": [
11945
- {
11946
- "language": "ts",
11947
- "code": "const response = await openai.createCompletion('Once upon a time')"
11948
- }
11949
- ]
11923
+ "returns": "void"
11950
11924
  },
11951
- "createEmbedding": {
11952
- "description": "Create text embeddings for semantic search or similarity comparisons.",
11925
+ "signUp": {
11926
+ "description": "Create a new user account with email and password.",
11953
11927
  "parameters": {
11954
- "input": {
11955
- "type": "string | string[]",
11956
- "description": "A string or array of strings to embed"
11928
+ "email": {
11929
+ "type": "string",
11930
+ "description": "Parameter email"
11957
11931
  },
11958
- "options": {
11959
- "type": "Partial<OpenAI.Embeddings.EmbeddingCreateParams>",
11960
- "description": "Additional parameters (model, etc.)"
11932
+ "password": {
11933
+ "type": "string",
11934
+ "description": "Parameter password"
11961
11935
  }
11962
11936
  },
11963
11937
  "required": [
11964
- "input"
11938
+ "email",
11939
+ "password"
11965
11940
  ],
11966
- "returns": "Promise<OpenAI.Embeddings.CreateEmbeddingResponse>",
11967
- "examples": [
11968
- {
11969
- "language": "ts",
11970
- "code": "const response = await openai.createEmbedding('Hello world')\nconsole.log(response.data[0].embedding.length)"
11971
- }
11972
- ]
11941
+ "returns": "void"
11973
11942
  },
11974
- "createImage": {
11975
- "description": "Generate an image from a text prompt using DALL-E.",
11943
+ "signOut": {
11944
+ "description": "Sign the current user out.",
11945
+ "parameters": {},
11946
+ "required": [],
11947
+ "returns": "void"
11948
+ },
11949
+ "getSession": {
11950
+ "description": "Get the current session, if any.",
11951
+ "parameters": {},
11952
+ "required": [],
11953
+ "returns": "void"
11954
+ },
11955
+ "getUser": {
11956
+ "description": "Get the current user, if any.",
11957
+ "parameters": {},
11958
+ "required": [],
11959
+ "returns": "void"
11960
+ },
11961
+ "invoke": {
11962
+ "description": "Invoke a Supabase Edge Function by name.",
11976
11963
  "parameters": {
11977
- "prompt": {
11964
+ "name": {
11978
11965
  "type": "string",
11979
- "description": "Description of the image to generate"
11966
+ "description": "Parameter name"
11980
11967
  },
11981
- "options": {
11982
- "type": "Partial<OpenAI.Images.ImageGenerateParams>",
11983
- "description": "Additional parameters (size, n, etc.)"
11968
+ "body": {
11969
+ "type": "any",
11970
+ "description": "Parameter body"
11984
11971
  }
11985
11972
  },
11986
11973
  "required": [
11987
- "prompt"
11974
+ "name"
11988
11975
  ],
11989
- "returns": "Promise<OpenAI.Images.ImagesResponse>",
11990
- "examples": [
11991
- {
11992
- "language": "ts",
11993
- "code": "const response = await openai.createImage('A sunset over mountains')\nconsole.log(response.data[0].url)"
11994
- }
11995
- ]
11996
- },
11997
- "listModels": {
11998
- "description": "List all available models.",
11999
- "parameters": {},
12000
- "required": [],
12001
- "returns": "Promise<OpenAI.Models.ModelsPage>",
12002
- "examples": [
12003
- {
12004
- "language": "ts",
12005
- "code": "const models = await openai.listModels()"
12006
- }
12007
- ]
11976
+ "returns": "void"
12008
11977
  },
12009
- "ask": {
12010
- "description": "Ask a single question and get a text response. Convenience wrapper around `createChatCompletion` for simple Q&A.",
11978
+ "subscribe": {
11979
+ "description": "Subscribe to realtime changes on a Postgres table.",
12011
11980
  "parameters": {
12012
- "question": {
11981
+ "channelName": {
12013
11982
  "type": "string",
12014
- "description": "The question to ask"
11983
+ "description": "A name for this subscription channel"
12015
11984
  },
12016
- "options": {
12017
- "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
12018
- "description": "Additional completion parameters"
11985
+ "table": {
11986
+ "type": "string",
11987
+ "description": "The table to listen to"
11988
+ },
11989
+ "callback": {
11990
+ "type": "(payload: any) => void",
11991
+ "description": "Called with the payload on each change"
11992
+ },
11993
+ "event": {
11994
+ "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
11995
+ "description": "The event type to listen for (default: all changes)"
12019
11996
  }
12020
11997
  },
12021
11998
  "required": [
12022
- "question"
11999
+ "channelName",
12000
+ "table",
12001
+ "callback"
12023
12002
  ],
12024
- "returns": "Promise<string>",
12025
- "examples": [
12026
- {
12027
- "language": "ts",
12028
- "code": "const answer = await openai.ask('What is 2 + 2?')\nconsole.log(answer) // '4'"
12029
- }
12030
- ]
12003
+ "returns": "RealtimeChannel"
12031
12004
  },
12032
- "chat": {
12033
- "description": "Send a multi-turn conversation and get a text response. Convenience wrapper around `createChatCompletion` that returns just the text.",
12005
+ "unsubscribe": {
12006
+ "description": "Unsubscribe and remove a realtime channel by name.",
12034
12007
  "parameters": {
12035
- "messages": {
12036
- "type": "OpenAI.Chat.Completions.ChatCompletionMessageParam[]",
12037
- "description": "Array of chat messages"
12038
- },
12039
- "options": {
12040
- "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
12041
- "description": "Additional completion parameters"
12008
+ "channelName": {
12009
+ "type": "string",
12010
+ "description": "The channel name to remove"
12042
12011
  }
12043
12012
  },
12044
12013
  "required": [
12045
- "messages"
12014
+ "channelName"
12046
12015
  ],
12047
- "returns": "Promise<string>",
12048
- "examples": [
12049
- {
12050
- "language": "ts",
12051
- "code": "const reply = await openai.chat([\n { role: 'system', content: 'You are a pirate.' },\n { role: 'user', content: 'Hello!' }\n])"
12052
- }
12053
- ]
12054
- }
12055
- },
12056
- "getters": {
12057
- "defaultModel": {
12058
- "description": "The default model used for completions, from options or 'gpt-4o'.",
12059
- "returns": "string"
12060
- },
12061
- "raw": {
12062
- "description": "The underlying OpenAI SDK instance for advanced use cases.",
12063
- "returns": "OpenAI"
12064
- }
12065
- },
12066
- "events": {
12067
- "connected": {
12068
- "name": "connected",
12069
- "description": "Event emitted by OpenAIClient",
12070
- "arguments": {}
12016
+ "returns": "void"
12071
12017
  },
12072
- "failure": {
12073
- "name": "failure",
12074
- "description": "Event emitted by OpenAIClient",
12075
- "arguments": {}
12018
+ "unsubscribeAll": {
12019
+ "description": "Unsubscribe and remove all realtime channels.",
12020
+ "parameters": {},
12021
+ "required": [],
12022
+ "returns": "void"
12076
12023
  },
12077
- "completion": {
12078
- "name": "completion",
12079
- "description": "Event emitted by OpenAIClient",
12080
- "arguments": {}
12024
+ "connect": {
12025
+ "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
12026
+ "parameters": {},
12027
+ "required": [],
12028
+ "returns": "void"
12081
12029
  },
12082
- "embedding": {
12083
- "name": "embedding",
12084
- "description": "Event emitted by OpenAIClient",
12085
- "arguments": {}
12030
+ "disconnect": {
12031
+ "description": "Disconnect by signing out and removing all realtime channels.",
12032
+ "parameters": {},
12033
+ "required": [],
12034
+ "returns": "void"
12035
+ }
12036
+ },
12037
+ "getters": {
12038
+ "sdk": {
12039
+ "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
12040
+ "returns": "SupabaseSDKClient<any, any>"
12086
12041
  },
12087
- "image": {
12088
- "name": "image",
12089
- "description": "Event emitted by OpenAIClient",
12090
- "arguments": {}
12042
+ "storage": {
12043
+ "description": "Returns the Supabase Storage client for managing buckets and files.",
12044
+ "returns": "any"
12091
12045
  },
12092
- "models": {
12093
- "name": "models",
12094
- "description": "Event emitted by OpenAIClient",
12095
- "arguments": {}
12046
+ "functions": {
12047
+ "description": "Returns the Supabase Functions client.",
12048
+ "returns": "any"
12096
12049
  }
12097
12050
  },
12051
+ "events": {},
12098
12052
  "state": {},
12099
12053
  "options": {},
12100
12054
  "envVars": [],
12101
12055
  "examples": [
12102
12056
  {
12103
12057
  "language": "ts",
12104
- "code": "const openai = container.client('openai', { defaultModel: 'gpt-4o' })\nconst answer = await openai.ask('What is the meaning of life?')\nconsole.log(answer)"
12058
+ "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})"
12105
12059
  }
12106
12060
  ]
12107
12061
  });
@@ -12403,6 +12357,274 @@ setBuildTimeData('clients.comfyui', {
12403
12357
  }
12404
12358
  });
12405
12359
 
12360
+ setBuildTimeData('clients.openai', {
12361
+ "id": "clients.openai",
12362
+ "description": "OpenAI client — wraps the OpenAI SDK for chat completions, responses API, embeddings, and image generation. Provides convenience methods for common operations while tracking token usage and request counts. Supports both the Chat Completions API and the newer Responses API.",
12363
+ "shortcut": "clients.openai",
12364
+ "className": "OpenAIClient",
12365
+ "methods": {
12366
+ "connect": {
12367
+ "description": "Test the API connection by listing models.",
12368
+ "parameters": {},
12369
+ "required": [],
12370
+ "returns": "Promise<this>",
12371
+ "examples": [
12372
+ {
12373
+ "language": "ts",
12374
+ "code": "await openai.connect()"
12375
+ }
12376
+ ]
12377
+ },
12378
+ "createChatCompletion": {
12379
+ "description": "Create a chat completion using the Chat Completions API.",
12380
+ "parameters": {
12381
+ "messages": {
12382
+ "type": "OpenAI.Chat.Completions.ChatCompletionMessageParam[]",
12383
+ "description": "Array of chat messages"
12384
+ },
12385
+ "options": {
12386
+ "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
12387
+ "description": "Additional parameters for the completion"
12388
+ }
12389
+ },
12390
+ "required": [
12391
+ "messages"
12392
+ ],
12393
+ "returns": "Promise<OpenAI.Chat.Completions.ChatCompletion>",
12394
+ "examples": [
12395
+ {
12396
+ "language": "ts",
12397
+ "code": "const response = await openai.createChatCompletion([\n { role: 'system', content: 'You are a helpful assistant.' },\n { role: 'user', content: 'Hello!' }\n])\nconsole.log(response.choices[0]?.message?.content)"
12398
+ }
12399
+ ]
12400
+ },
12401
+ "createResponse": {
12402
+ "description": "Create a response using the Responses API.",
12403
+ "parameters": {
12404
+ "input": {
12405
+ "type": "OpenAI.Responses.ResponseInput | string",
12406
+ "description": "The input prompt or message array"
12407
+ },
12408
+ "options": {
12409
+ "type": "Partial<OpenAI.Responses.ResponseCreateParamsNonStreaming>",
12410
+ "description": "Additional parameters for the response"
12411
+ }
12412
+ },
12413
+ "required": [
12414
+ "input"
12415
+ ],
12416
+ "returns": "Promise<OpenAI.Responses.Response>",
12417
+ "examples": [
12418
+ {
12419
+ "language": "ts",
12420
+ "code": "const response = await openai.createResponse('Explain quantum computing')"
12421
+ }
12422
+ ]
12423
+ },
12424
+ "streamResponse": {
12425
+ "description": "Stream a response using the Responses API.",
12426
+ "parameters": {
12427
+ "input": {
12428
+ "type": "OpenAI.Responses.ResponseInput | string",
12429
+ "description": "The input prompt or message array"
12430
+ },
12431
+ "options": {
12432
+ "type": "Partial<OpenAI.Responses.ResponseCreateParamsStreaming>",
12433
+ "description": "Additional parameters for the streaming response"
12434
+ }
12435
+ },
12436
+ "required": [
12437
+ "input"
12438
+ ],
12439
+ "returns": "Promise<AsyncIterable<OpenAI.Responses.ResponseStreamEvent>>",
12440
+ "examples": [
12441
+ {
12442
+ "language": "ts",
12443
+ "code": "const stream = await openai.streamResponse('Write a poem')\nfor await (const event of stream) {\n if (event.type === 'response.output_text.delta') {\n process.stdout.write(event.delta)\n }\n}"
12444
+ }
12445
+ ]
12446
+ },
12447
+ "createCompletion": {
12448
+ "description": "Create a legacy text completion.",
12449
+ "parameters": {
12450
+ "prompt": {
12451
+ "type": "string",
12452
+ "description": "The text prompt to complete"
12453
+ },
12454
+ "options": {
12455
+ "type": "Partial<OpenAI.Completions.CompletionCreateParams>",
12456
+ "description": "Additional parameters for the completion"
12457
+ }
12458
+ },
12459
+ "required": [
12460
+ "prompt"
12461
+ ],
12462
+ "returns": "Promise<OpenAI.Completions.Completion>",
12463
+ "examples": [
12464
+ {
12465
+ "language": "ts",
12466
+ "code": "const response = await openai.createCompletion('Once upon a time')"
12467
+ }
12468
+ ]
12469
+ },
12470
+ "createEmbedding": {
12471
+ "description": "Create text embeddings for semantic search or similarity comparisons.",
12472
+ "parameters": {
12473
+ "input": {
12474
+ "type": "string | string[]",
12475
+ "description": "A string or array of strings to embed"
12476
+ },
12477
+ "options": {
12478
+ "type": "Partial<OpenAI.Embeddings.EmbeddingCreateParams>",
12479
+ "description": "Additional parameters (model, etc.)"
12480
+ }
12481
+ },
12482
+ "required": [
12483
+ "input"
12484
+ ],
12485
+ "returns": "Promise<OpenAI.Embeddings.CreateEmbeddingResponse>",
12486
+ "examples": [
12487
+ {
12488
+ "language": "ts",
12489
+ "code": "const response = await openai.createEmbedding('Hello world')\nconsole.log(response.data[0].embedding.length)"
12490
+ }
12491
+ ]
12492
+ },
12493
+ "createImage": {
12494
+ "description": "Generate an image from a text prompt using DALL-E.",
12495
+ "parameters": {
12496
+ "prompt": {
12497
+ "type": "string",
12498
+ "description": "Description of the image to generate"
12499
+ },
12500
+ "options": {
12501
+ "type": "Partial<OpenAI.Images.ImageGenerateParams>",
12502
+ "description": "Additional parameters (size, n, etc.)"
12503
+ }
12504
+ },
12505
+ "required": [
12506
+ "prompt"
12507
+ ],
12508
+ "returns": "Promise<OpenAI.Images.ImagesResponse>",
12509
+ "examples": [
12510
+ {
12511
+ "language": "ts",
12512
+ "code": "const response = await openai.createImage('A sunset over mountains')\nconsole.log(response.data[0].url)"
12513
+ }
12514
+ ]
12515
+ },
12516
+ "listModels": {
12517
+ "description": "List all available models.",
12518
+ "parameters": {},
12519
+ "required": [],
12520
+ "returns": "Promise<OpenAI.Models.ModelsPage>",
12521
+ "examples": [
12522
+ {
12523
+ "language": "ts",
12524
+ "code": "const models = await openai.listModels()"
12525
+ }
12526
+ ]
12527
+ },
12528
+ "ask": {
12529
+ "description": "Ask a single question and get a text response. Convenience wrapper around `createChatCompletion` for simple Q&A.",
12530
+ "parameters": {
12531
+ "question": {
12532
+ "type": "string",
12533
+ "description": "The question to ask"
12534
+ },
12535
+ "options": {
12536
+ "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
12537
+ "description": "Additional completion parameters"
12538
+ }
12539
+ },
12540
+ "required": [
12541
+ "question"
12542
+ ],
12543
+ "returns": "Promise<string>",
12544
+ "examples": [
12545
+ {
12546
+ "language": "ts",
12547
+ "code": "const answer = await openai.ask('What is 2 + 2?')\nconsole.log(answer) // '4'"
12548
+ }
12549
+ ]
12550
+ },
12551
+ "chat": {
12552
+ "description": "Send a multi-turn conversation and get a text response. Convenience wrapper around `createChatCompletion` that returns just the text.",
12553
+ "parameters": {
12554
+ "messages": {
12555
+ "type": "OpenAI.Chat.Completions.ChatCompletionMessageParam[]",
12556
+ "description": "Array of chat messages"
12557
+ },
12558
+ "options": {
12559
+ "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
12560
+ "description": "Additional completion parameters"
12561
+ }
12562
+ },
12563
+ "required": [
12564
+ "messages"
12565
+ ],
12566
+ "returns": "Promise<string>",
12567
+ "examples": [
12568
+ {
12569
+ "language": "ts",
12570
+ "code": "const reply = await openai.chat([\n { role: 'system', content: 'You are a pirate.' },\n { role: 'user', content: 'Hello!' }\n])"
12571
+ }
12572
+ ]
12573
+ }
12574
+ },
12575
+ "getters": {
12576
+ "defaultModel": {
12577
+ "description": "The default model used for completions, from options or 'gpt-4o'.",
12578
+ "returns": "string"
12579
+ },
12580
+ "raw": {
12581
+ "description": "The underlying OpenAI SDK instance for advanced use cases.",
12582
+ "returns": "OpenAI"
12583
+ }
12584
+ },
12585
+ "events": {
12586
+ "connected": {
12587
+ "name": "connected",
12588
+ "description": "Event emitted by OpenAIClient",
12589
+ "arguments": {}
12590
+ },
12591
+ "failure": {
12592
+ "name": "failure",
12593
+ "description": "Event emitted by OpenAIClient",
12594
+ "arguments": {}
12595
+ },
12596
+ "completion": {
12597
+ "name": "completion",
12598
+ "description": "Event emitted by OpenAIClient",
12599
+ "arguments": {}
12600
+ },
12601
+ "embedding": {
12602
+ "name": "embedding",
12603
+ "description": "Event emitted by OpenAIClient",
12604
+ "arguments": {}
12605
+ },
12606
+ "image": {
12607
+ "name": "image",
12608
+ "description": "Event emitted by OpenAIClient",
12609
+ "arguments": {}
12610
+ },
12611
+ "models": {
12612
+ "name": "models",
12613
+ "description": "Event emitted by OpenAIClient",
12614
+ "arguments": {}
12615
+ }
12616
+ },
12617
+ "state": {},
12618
+ "options": {},
12619
+ "envVars": [],
12620
+ "examples": [
12621
+ {
12622
+ "language": "ts",
12623
+ "code": "const openai = container.client('openai', { defaultModel: 'gpt-4o' })\nconst answer = await openai.ask('What is the meaning of life?')\nconsole.log(answer)"
12624
+ }
12625
+ ]
12626
+ });
12627
+
12406
12628
  setBuildTimeData('clients.elevenlabs', {
12407
12629
  "id": "clients.elevenlabs",
12408
12630
  "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.",
@@ -12667,202 +12889,6 @@ setBuildTimeData('clients.elevenlabs', {
12667
12889
  }
12668
12890
  });
12669
12891
 
12670
- setBuildTimeData('clients.supabase', {
12671
- "id": "clients.supabase",
12672
- "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).",
12673
- "shortcut": "clients.supabase",
12674
- "className": "SupabaseClient",
12675
- "methods": {
12676
- "from": {
12677
- "description": "Start a query on a Postgres table or view.",
12678
- "parameters": {
12679
- "table": {
12680
- "type": "string",
12681
- "description": "The table or view name to query"
12682
- }
12683
- },
12684
- "required": [
12685
- "table"
12686
- ],
12687
- "returns": "void"
12688
- },
12689
- "rpc": {
12690
- "description": "Call a Postgres function (RPC).",
12691
- "parameters": {
12692
- "fn": {
12693
- "type": "string",
12694
- "description": "The function name"
12695
- },
12696
- "params": {
12697
- "type": "Record<string, unknown>",
12698
- "description": "Arguments to pass to the function"
12699
- },
12700
- "options": {
12701
- "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
12702
- "description": "Optional settings (head, get, count)"
12703
- }
12704
- },
12705
- "required": [
12706
- "fn"
12707
- ],
12708
- "returns": "void"
12709
- },
12710
- "signInWithPassword": {
12711
- "description": "Sign in with email and password.",
12712
- "parameters": {
12713
- "email": {
12714
- "type": "string",
12715
- "description": "Parameter email"
12716
- },
12717
- "password": {
12718
- "type": "string",
12719
- "description": "Parameter password"
12720
- }
12721
- },
12722
- "required": [
12723
- "email",
12724
- "password"
12725
- ],
12726
- "returns": "void"
12727
- },
12728
- "signUp": {
12729
- "description": "Create a new user account with email and password.",
12730
- "parameters": {
12731
- "email": {
12732
- "type": "string",
12733
- "description": "Parameter email"
12734
- },
12735
- "password": {
12736
- "type": "string",
12737
- "description": "Parameter password"
12738
- }
12739
- },
12740
- "required": [
12741
- "email",
12742
- "password"
12743
- ],
12744
- "returns": "void"
12745
- },
12746
- "signOut": {
12747
- "description": "Sign the current user out.",
12748
- "parameters": {},
12749
- "required": [],
12750
- "returns": "void"
12751
- },
12752
- "getSession": {
12753
- "description": "Get the current session, if any.",
12754
- "parameters": {},
12755
- "required": [],
12756
- "returns": "void"
12757
- },
12758
- "getUser": {
12759
- "description": "Get the current user, if any.",
12760
- "parameters": {},
12761
- "required": [],
12762
- "returns": "void"
12763
- },
12764
- "invoke": {
12765
- "description": "Invoke a Supabase Edge Function by name.",
12766
- "parameters": {
12767
- "name": {
12768
- "type": "string",
12769
- "description": "Parameter name"
12770
- },
12771
- "body": {
12772
- "type": "any",
12773
- "description": "Parameter body"
12774
- }
12775
- },
12776
- "required": [
12777
- "name"
12778
- ],
12779
- "returns": "void"
12780
- },
12781
- "subscribe": {
12782
- "description": "Subscribe to realtime changes on a Postgres table.",
12783
- "parameters": {
12784
- "channelName": {
12785
- "type": "string",
12786
- "description": "A name for this subscription channel"
12787
- },
12788
- "table": {
12789
- "type": "string",
12790
- "description": "The table to listen to"
12791
- },
12792
- "callback": {
12793
- "type": "(payload: any) => void",
12794
- "description": "Called with the payload on each change"
12795
- },
12796
- "event": {
12797
- "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
12798
- "description": "The event type to listen for (default: all changes)"
12799
- }
12800
- },
12801
- "required": [
12802
- "channelName",
12803
- "table",
12804
- "callback"
12805
- ],
12806
- "returns": "RealtimeChannel"
12807
- },
12808
- "unsubscribe": {
12809
- "description": "Unsubscribe and remove a realtime channel by name.",
12810
- "parameters": {
12811
- "channelName": {
12812
- "type": "string",
12813
- "description": "The channel name to remove"
12814
- }
12815
- },
12816
- "required": [
12817
- "channelName"
12818
- ],
12819
- "returns": "void"
12820
- },
12821
- "unsubscribeAll": {
12822
- "description": "Unsubscribe and remove all realtime channels.",
12823
- "parameters": {},
12824
- "required": [],
12825
- "returns": "void"
12826
- },
12827
- "connect": {
12828
- "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
12829
- "parameters": {},
12830
- "required": [],
12831
- "returns": "void"
12832
- },
12833
- "disconnect": {
12834
- "description": "Disconnect by signing out and removing all realtime channels.",
12835
- "parameters": {},
12836
- "required": [],
12837
- "returns": "void"
12838
- }
12839
- },
12840
- "getters": {
12841
- "sdk": {
12842
- "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
12843
- "returns": "SupabaseSDKClient<any, any>"
12844
- },
12845
- "storage": {
12846
- "description": "Returns the Supabase Storage client for managing buckets and files.",
12847
- "returns": "any"
12848
- },
12849
- "functions": {
12850
- "description": "Returns the Supabase Functions client.",
12851
- "returns": "any"
12852
- }
12853
- },
12854
- "events": {},
12855
- "state": {},
12856
- "options": {},
12857
- "envVars": [],
12858
- "examples": [
12859
- {
12860
- "language": "ts",
12861
- "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})"
12862
- }
12863
- ]
12864
- });
12865
-
12866
12892
  setBuildTimeData('servers.mcp', {
12867
12893
  "id": "servers.mcp",
12868
12894
  "description": "MCP (Model Context Protocol) server for exposing tools, resources, and prompts to AI clients like Claude Code. Uses the low-level MCP SDK Server class directly with Zod 4 native JSON Schema conversion. Register tools, resources, and prompts programmatically, then start the server over stdio (for CLI integration) or HTTP (for remote access).",
@@ -14229,6 +14255,19 @@ setBuildTimeData('features.browserUse', {
14229
14255
  "shortcut": "features.browserUse",
14230
14256
  "className": "BrowserUse",
14231
14257
  "methods": {
14258
+ "setupToolsConsumer": {
14259
+ "description": "When an assistant uses browserUse, inject system prompt guidance about the browser interaction loop.",
14260
+ "parameters": {
14261
+ "consumer": {
14262
+ "type": "Helper",
14263
+ "description": "Parameter consumer"
14264
+ }
14265
+ },
14266
+ "required": [
14267
+ "consumer"
14268
+ ],
14269
+ "returns": "void"
14270
+ },
14232
14271
  "afterInitialize": {
14233
14272
  "description": "",
14234
14273
  "parameters": {},
@@ -15236,6 +15275,11 @@ setBuildTimeData('features.skillsLibrary', {
15236
15275
  "name": "skillDiscovered",
15237
15276
  "description": "Event emitted by SkillsLibrary",
15238
15277
  "arguments": {}
15278
+ },
15279
+ "foundSkills": {
15280
+ "name": "foundSkills",
15281
+ "description": "Event emitted by SkillsLibrary",
15282
+ "arguments": {}
15239
15283
  }
15240
15284
  },
15241
15285
  "state": {},
@@ -15764,6 +15808,475 @@ setBuildTimeData('features.assistant', {
15764
15808
  ]
15765
15809
  });
15766
15810
 
15811
+ setBuildTimeData('features.memory', {
15812
+ "id": "features.memory",
15813
+ "description": "Semantic memory storage and retrieval for AI agents. Provides categorized memory with embedding-based search, metadata filtering, epoch tracking, and assistant tool integration. Built natively on Luca's SQLite and semanticSearch features.",
15814
+ "shortcut": "features.memory",
15815
+ "className": "Memory",
15816
+ "methods": {
15817
+ "initDb": {
15818
+ "description": "Initialize the SQLite database and create tables. Called automatically on first use, but can be called explicitly.",
15819
+ "parameters": {},
15820
+ "required": [],
15821
+ "returns": "void",
15822
+ "examples": [
15823
+ {
15824
+ "language": "ts",
15825
+ "code": "const mem = container.feature('memory')\nawait mem.initDb()"
15826
+ }
15827
+ ]
15828
+ },
15829
+ "remember": {
15830
+ "description": "Tool handler: store a memory, deduplicating by similarity.",
15831
+ "parameters": {
15832
+ "args": {
15833
+ "type": "{ category: string; text: string; metadata?: Record<string, any> }",
15834
+ "description": "Parameter args"
15835
+ }
15836
+ },
15837
+ "required": [
15838
+ "args"
15839
+ ],
15840
+ "returns": "void"
15841
+ },
15842
+ "recall": {
15843
+ "description": "Tool handler: search memories by semantic similarity.",
15844
+ "parameters": {
15845
+ "args": {
15846
+ "type": "{ category: string; query: string; n_results?: number }",
15847
+ "description": "Parameter args"
15848
+ }
15849
+ },
15850
+ "required": [
15851
+ "args"
15852
+ ],
15853
+ "returns": "void"
15854
+ },
15855
+ "forgetCategory": {
15856
+ "description": "Tool handler: wipe all memories in a category.",
15857
+ "parameters": {
15858
+ "args": {
15859
+ "type": "{ category: string }",
15860
+ "description": "Parameter args"
15861
+ }
15862
+ },
15863
+ "required": [
15864
+ "args"
15865
+ ],
15866
+ "returns": "void"
15867
+ },
15868
+ "listCategories": {
15869
+ "description": "Tool handler: list all categories with counts.",
15870
+ "parameters": {},
15871
+ "required": [],
15872
+ "returns": "void"
15873
+ },
15874
+ "setupToolsConsumer": {
15875
+ "description": "When an assistant uses memory, inject system prompt guidance.",
15876
+ "parameters": {
15877
+ "consumer": {
15878
+ "type": "Helper",
15879
+ "description": "Parameter consumer"
15880
+ }
15881
+ },
15882
+ "required": [
15883
+ "consumer"
15884
+ ],
15885
+ "returns": "void"
15886
+ },
15887
+ "create": {
15888
+ "description": "Create a new memory in the given category.",
15889
+ "parameters": {
15890
+ "category": {
15891
+ "type": "string",
15892
+ "description": "The category to store the memory in"
15893
+ },
15894
+ "text": {
15895
+ "type": "string",
15896
+ "description": "The text content of the memory"
15897
+ },
15898
+ "metadata": {
15899
+ "type": "Record<string, any>",
15900
+ "description": "Optional metadata key-value pairs"
15901
+ }
15902
+ },
15903
+ "required": [
15904
+ "category",
15905
+ "text"
15906
+ ],
15907
+ "returns": "Promise<MemoryRecord>",
15908
+ "examples": [
15909
+ {
15910
+ "language": "ts",
15911
+ "code": "const mem = container.feature('memory')\nawait mem.create('facts', 'The user lives in Austin', { confidence: 0.9 })"
15912
+ }
15913
+ ]
15914
+ },
15915
+ "createUnique": {
15916
+ "description": "Create a memory only if no sufficiently similar memory exists.",
15917
+ "parameters": {
15918
+ "category": {
15919
+ "type": "string",
15920
+ "description": "The category to store the memory in"
15921
+ },
15922
+ "text": {
15923
+ "type": "string",
15924
+ "description": "The text content of the memory"
15925
+ },
15926
+ "metadata": {
15927
+ "type": "Record<string, any>",
15928
+ "description": "Optional metadata"
15929
+ },
15930
+ "similarityThreshold": {
15931
+ "type": "any",
15932
+ "description": "Minimum cosine similarity to consider a duplicate (0-1, default 0.95)"
15933
+ }
15934
+ },
15935
+ "required": [
15936
+ "category",
15937
+ "text"
15938
+ ],
15939
+ "returns": "Promise<MemoryRecord | null>",
15940
+ "examples": [
15941
+ {
15942
+ "language": "ts",
15943
+ "code": "const mem = container.feature('memory')\nawait mem.createUnique('facts', 'User prefers dark mode', {}, 0.9)"
15944
+ }
15945
+ ]
15946
+ },
15947
+ "get": {
15948
+ "description": "Get a memory by ID.",
15949
+ "parameters": {
15950
+ "category": {
15951
+ "type": "string",
15952
+ "description": "The category the memory belongs to"
15953
+ },
15954
+ "id": {
15955
+ "type": "number",
15956
+ "description": "The memory ID"
15957
+ }
15958
+ },
15959
+ "required": [
15960
+ "category",
15961
+ "id"
15962
+ ],
15963
+ "returns": "Promise<MemoryRecord | null>"
15964
+ },
15965
+ "getAll": {
15966
+ "description": "Get all memories in a category, with optional metadata filtering.",
15967
+ "parameters": {
15968
+ "category": {
15969
+ "type": "string",
15970
+ "description": "The category to query"
15971
+ },
15972
+ "options": {
15973
+ "type": "{ limit?: number; sortOrder?: 'asc' | 'desc'; filterMetadata?: Record<string, any> }",
15974
+ "description": "Query options",
15975
+ "properties": {
15976
+ "limit": {
15977
+ "type": "any",
15978
+ "description": "Max results (default 20)"
15979
+ },
15980
+ "sortOrder": {
15981
+ "type": "any",
15982
+ "description": "'asc' or 'desc' by created_at (default 'desc')"
15983
+ },
15984
+ "filterMetadata": {
15985
+ "type": "any",
15986
+ "description": "Filter by metadata key-value pairs"
15987
+ }
15988
+ }
15989
+ }
15990
+ },
15991
+ "required": [
15992
+ "category"
15993
+ ],
15994
+ "returns": "Promise<MemoryRecord[]>"
15995
+ },
15996
+ "update": {
15997
+ "description": "Update a memory's text and/or metadata.",
15998
+ "parameters": {
15999
+ "category": {
16000
+ "type": "string",
16001
+ "description": "The category the memory belongs to"
16002
+ },
16003
+ "id": {
16004
+ "type": "number",
16005
+ "description": "The memory ID"
16006
+ },
16007
+ "updates": {
16008
+ "type": "{ text?: string; metadata?: Record<string, any> }",
16009
+ "description": "Fields to update",
16010
+ "properties": {
16011
+ "text": {
16012
+ "type": "any",
16013
+ "description": "New text content (re-embeds automatically)"
16014
+ },
16015
+ "metadata": {
16016
+ "type": "any",
16017
+ "description": "Metadata to merge"
16018
+ }
16019
+ }
16020
+ }
16021
+ },
16022
+ "required": [
16023
+ "category",
16024
+ "id",
16025
+ "updates"
16026
+ ],
16027
+ "returns": "Promise<MemoryRecord | null>"
16028
+ },
16029
+ "delete": {
16030
+ "description": "Delete a specific memory.",
16031
+ "parameters": {
16032
+ "category": {
16033
+ "type": "string",
16034
+ "description": "The category"
16035
+ },
16036
+ "id": {
16037
+ "type": "number",
16038
+ "description": "The memory ID"
16039
+ }
16040
+ },
16041
+ "required": [
16042
+ "category",
16043
+ "id"
16044
+ ],
16045
+ "returns": "Promise<boolean>"
16046
+ },
16047
+ "wipeCategory": {
16048
+ "description": "Delete all memories in a category.",
16049
+ "parameters": {
16050
+ "category": {
16051
+ "type": "string",
16052
+ "description": "The category to wipe"
16053
+ }
16054
+ },
16055
+ "required": [
16056
+ "category"
16057
+ ],
16058
+ "returns": "Promise<number>"
16059
+ },
16060
+ "wipeAll": {
16061
+ "description": "Delete all memories across all categories in this namespace.",
16062
+ "parameters": {},
16063
+ "required": [],
16064
+ "returns": "Promise<number>"
16065
+ },
16066
+ "count": {
16067
+ "description": "Count memories in a category (or all categories if omitted).",
16068
+ "parameters": {
16069
+ "category": {
16070
+ "type": "string",
16071
+ "description": "Optional category to count"
16072
+ }
16073
+ },
16074
+ "required": [],
16075
+ "returns": "Promise<number>"
16076
+ },
16077
+ "categories": {
16078
+ "description": "List all categories that have memories.",
16079
+ "parameters": {},
16080
+ "required": [],
16081
+ "returns": "Promise<string[]>"
16082
+ },
16083
+ "search": {
16084
+ "description": "Search memories by semantic similarity.",
16085
+ "parameters": {
16086
+ "category": {
16087
+ "type": "string",
16088
+ "description": "The category to search in"
16089
+ },
16090
+ "query": {
16091
+ "type": "string",
16092
+ "description": "The search query (will be embedded)"
16093
+ },
16094
+ "nResults": {
16095
+ "type": "any",
16096
+ "description": "Maximum number of results (default 5)"
16097
+ },
16098
+ "options": {
16099
+ "type": "{ maxDistance?: number; filterMetadata?: Record<string, any> }",
16100
+ "description": "Additional search options",
16101
+ "properties": {
16102
+ "maxDistance": {
16103
+ "type": "any",
16104
+ "description": "Maximum cosine distance threshold (0-2, default none)"
16105
+ },
16106
+ "filterMetadata": {
16107
+ "type": "any",
16108
+ "description": "Filter by metadata key-value pairs"
16109
+ }
16110
+ }
16111
+ }
16112
+ },
16113
+ "required": [
16114
+ "category",
16115
+ "query"
16116
+ ],
16117
+ "returns": "Promise<MemorySearchResult[]>"
16118
+ },
16119
+ "getEpoch": {
16120
+ "description": "Get the current epoch value.",
16121
+ "parameters": {},
16122
+ "required": [],
16123
+ "returns": "number"
16124
+ },
16125
+ "setEpoch": {
16126
+ "description": "Set the epoch to a specific value.",
16127
+ "parameters": {
16128
+ "value": {
16129
+ "type": "number",
16130
+ "description": "The new epoch value"
16131
+ }
16132
+ },
16133
+ "required": [
16134
+ "value"
16135
+ ],
16136
+ "returns": "void"
16137
+ },
16138
+ "incrementEpoch": {
16139
+ "description": "Increment the epoch by 1.",
16140
+ "parameters": {},
16141
+ "required": [],
16142
+ "returns": "Promise<number>"
16143
+ },
16144
+ "createEvent": {
16145
+ "description": "Create a timestamped event memory in the 'events' category, automatically tagged with the current epoch.",
16146
+ "parameters": {
16147
+ "text": {
16148
+ "type": "string",
16149
+ "description": "The event description"
16150
+ },
16151
+ "metadata": {
16152
+ "type": "Record<string, any>",
16153
+ "description": "Optional additional metadata"
16154
+ }
16155
+ },
16156
+ "required": [
16157
+ "text"
16158
+ ],
16159
+ "returns": "Promise<MemoryRecord>"
16160
+ },
16161
+ "getEvents": {
16162
+ "description": "Get events, optionally filtered by epoch.",
16163
+ "parameters": {
16164
+ "options": {
16165
+ "type": "{ epoch?: number; limit?: number }",
16166
+ "description": "Query options",
16167
+ "properties": {
16168
+ "epoch": {
16169
+ "type": "any",
16170
+ "description": "Filter to a specific epoch"
16171
+ },
16172
+ "limit": {
16173
+ "type": "any",
16174
+ "description": "Max results (default 10)"
16175
+ }
16176
+ }
16177
+ }
16178
+ },
16179
+ "required": [],
16180
+ "returns": "Promise<MemoryRecord[]>"
16181
+ },
16182
+ "exportToJson": {
16183
+ "description": "Export all memories in this namespace to a JSON-serializable object.",
16184
+ "parameters": {},
16185
+ "required": [],
16186
+ "returns": "Promise<{ namespace: string; epoch: number; memories: MemoryRecord[] }>"
16187
+ },
16188
+ "importFromJson": {
16189
+ "description": "Import memories from a JSON export. Optionally replaces all existing memories.",
16190
+ "parameters": {
16191
+ "data": {
16192
+ "type": "{ namespace?: string; epoch?: number; memories: Array<{ category: string; document: string; metadata?: Record<string, any> }> }",
16193
+ "description": "The exported data object"
16194
+ },
16195
+ "replace": {
16196
+ "type": "any",
16197
+ "description": "If true, wipe existing memories before importing (default true)"
16198
+ }
16199
+ },
16200
+ "required": [
16201
+ "data"
16202
+ ],
16203
+ "returns": "Promise<number>"
16204
+ }
16205
+ },
16206
+ "getters": {},
16207
+ "events": {
16208
+ "dbInitialized": {
16209
+ "name": "dbInitialized",
16210
+ "description": "Event emitted by Memory",
16211
+ "arguments": {}
16212
+ },
16213
+ "memoryCreated": {
16214
+ "name": "memoryCreated",
16215
+ "description": "Event emitted by Memory",
16216
+ "arguments": {}
16217
+ },
16218
+ "memoryDeleted": {
16219
+ "name": "memoryDeleted",
16220
+ "description": "Event emitted by Memory",
16221
+ "arguments": {}
16222
+ },
16223
+ "epochChanged": {
16224
+ "name": "epochChanged",
16225
+ "description": "Event emitted by Memory",
16226
+ "arguments": {}
16227
+ }
16228
+ },
16229
+ "state": {},
16230
+ "options": {},
16231
+ "envVars": [],
16232
+ "examples": [
16233
+ {
16234
+ "language": "ts",
16235
+ "code": "const mem = container.feature('memory')\nawait mem.create('user-prefs', 'Prefers dark mode', { source: 'onboarding' })\nconst results = await mem.search('user-prefs', 'UI preferences')"
16236
+ }
16237
+ ],
16238
+ "types": {
16239
+ "MemoryRecord": {
16240
+ "description": "--- Types ---",
16241
+ "properties": {
16242
+ "id": {
16243
+ "type": "number",
16244
+ "description": ""
16245
+ },
16246
+ "category": {
16247
+ "type": "string",
16248
+ "description": ""
16249
+ },
16250
+ "document": {
16251
+ "type": "string",
16252
+ "description": ""
16253
+ },
16254
+ "metadata": {
16255
+ "type": "Record<string, any>",
16256
+ "description": ""
16257
+ },
16258
+ "created_at": {
16259
+ "type": "string",
16260
+ "description": ""
16261
+ },
16262
+ "updated_at": {
16263
+ "type": "string",
16264
+ "description": ""
16265
+ }
16266
+ }
16267
+ },
16268
+ "MemorySearchResult": {
16269
+ "description": "",
16270
+ "properties": {
16271
+ "distance": {
16272
+ "type": "number",
16273
+ "description": ""
16274
+ }
16275
+ }
16276
+ }
16277
+ }
16278
+ });
16279
+
15767
16280
  setBuildTimeData('features.claudeCode', {
15768
16281
  "id": "features.claudeCode",
15769
16282
  "description": "Claude Code CLI wrapper feature. Spawns and manages Claude Code sessions as subprocesses, streaming structured JSON events back through the container's event system. Sessions are long-lived: each call to `run()` spawns a `claude -p` process with `--output-format stream-json`, parses NDJSON from stdout line-by-line, and emits typed events on the feature's event bus.",
@@ -18375,6 +18888,98 @@ setBuildTimeData('features.fileTools', {
18375
18888
  "envVars": []
18376
18889
  });
18377
18890
 
18891
+ setBuildTimeData('features.codingTools', {
18892
+ "id": "features.codingTools",
18893
+ "description": "Shell primitives for AI coding assistants: rg, ls, cat, sed, awk. Wraps standard Unix tools into the assistant tool surface with LLM-optimized descriptions and system prompt guidance. These are the raw, flexible tools for reading, searching, and exploring code. Compose with other features (fileTools, processManager, skillsLibrary) in assistant hooks for a complete coding tool surface. Usage: ```typescript assistant.use(container.feature('codingTools')) ```",
18894
+ "shortcut": "features.codingTools",
18895
+ "className": "CodingTools",
18896
+ "methods": {
18897
+ "rg": {
18898
+ "description": "",
18899
+ "parameters": {
18900
+ "args": {
18901
+ "type": "{ args: string; cwd?: string }",
18902
+ "description": "Parameter args"
18903
+ }
18904
+ },
18905
+ "required": [
18906
+ "args"
18907
+ ],
18908
+ "returns": "Promise<string>"
18909
+ },
18910
+ "ls": {
18911
+ "description": "",
18912
+ "parameters": {
18913
+ "args": {
18914
+ "type": "{ args?: string; cwd?: string }",
18915
+ "description": "Parameter args"
18916
+ }
18917
+ },
18918
+ "required": [
18919
+ "args"
18920
+ ],
18921
+ "returns": "Promise<string>"
18922
+ },
18923
+ "cat": {
18924
+ "description": "",
18925
+ "parameters": {
18926
+ "args": {
18927
+ "type": "{ args: string; cwd?: string }",
18928
+ "description": "Parameter args"
18929
+ }
18930
+ },
18931
+ "required": [
18932
+ "args"
18933
+ ],
18934
+ "returns": "Promise<string>"
18935
+ },
18936
+ "sed": {
18937
+ "description": "",
18938
+ "parameters": {
18939
+ "args": {
18940
+ "type": "{ args: string; cwd?: string }",
18941
+ "description": "Parameter args"
18942
+ }
18943
+ },
18944
+ "required": [
18945
+ "args"
18946
+ ],
18947
+ "returns": "Promise<string>"
18948
+ },
18949
+ "awk": {
18950
+ "description": "",
18951
+ "parameters": {
18952
+ "args": {
18953
+ "type": "{ args: string; cwd?: string }",
18954
+ "description": "Parameter args"
18955
+ }
18956
+ },
18957
+ "required": [
18958
+ "args"
18959
+ ],
18960
+ "returns": "Promise<string>"
18961
+ },
18962
+ "setupToolsConsumer": {
18963
+ "description": "",
18964
+ "parameters": {
18965
+ "consumer": {
18966
+ "type": "Helper",
18967
+ "description": "Parameter consumer"
18968
+ }
18969
+ },
18970
+ "required": [
18971
+ "consumer"
18972
+ ],
18973
+ "returns": "void"
18974
+ }
18975
+ },
18976
+ "getters": {},
18977
+ "events": {},
18978
+ "state": {},
18979
+ "options": {},
18980
+ "envVars": []
18981
+ });
18982
+
18378
18983
  // Container introspection data
18379
18984
  setContainerBuildTimeData('Container', {
18380
18985
  "className": "Container",
@@ -27562,6 +28167,19 @@ export const introspectionData = [
27562
28167
  ],
27563
28168
  "returns": "void"
27564
28169
  },
28170
+ "setupToolsConsumer": {
28171
+ "description": "When an assistant uses processManager, inject system prompt guidance about how to manage processes safely and effectively.",
28172
+ "parameters": {
28173
+ "consumer": {
28174
+ "type": "Helper",
28175
+ "description": "Parameter consumer"
28176
+ }
28177
+ },
28178
+ "required": [
28179
+ "consumer"
28180
+ ],
28181
+ "returns": "void"
28182
+ },
27565
28183
  "spawn": {
27566
28184
  "description": "Spawn a long-running process and return a handle immediately. The returned SpawnHandler provides events for stdout/stderr streaming, exit/crash notifications, and methods to kill or await the process.",
27567
28185
  "parameters": {
@@ -29974,6 +30592,19 @@ export const introspectionData = [
29974
30592
  "shortcut": "features.contentDb",
29975
30593
  "className": "ContentDb",
29976
30594
  "methods": {
30595
+ "setupToolsConsumer": {
30596
+ "description": "When an assistant uses contentDb, inject system prompt guidance about progressive document exploration.",
30597
+ "parameters": {
30598
+ "consumer": {
30599
+ "type": "Helper",
30600
+ "description": "Parameter consumer"
30601
+ }
30602
+ },
30603
+ "required": [
30604
+ "consumer"
30605
+ ],
30606
+ "returns": "void"
30607
+ },
29977
30608
  "renderTree": {
29978
30609
  "description": "Render a tree view of the collection directory structure. Built with container.fs so it works without the `tree` binary.",
29979
30610
  "parameters": {
@@ -30698,269 +31329,197 @@ export const introspectionData = [
30698
31329
  "envVars": []
30699
31330
  },
30700
31331
  {
30701
- "id": "clients.openai",
30702
- "description": "OpenAI client wraps the OpenAI SDK for chat completions, responses API, embeddings, and image generation. Provides convenience methods for common operations while tracking token usage and request counts. Supports both the Chat Completions API and the newer Responses API.",
30703
- "shortcut": "clients.openai",
30704
- "className": "OpenAIClient",
31332
+ "id": "clients.supabase",
31333
+ "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).",
31334
+ "shortcut": "clients.supabase",
31335
+ "className": "SupabaseClient",
30705
31336
  "methods": {
30706
- "connect": {
30707
- "description": "Test the API connection by listing models.",
30708
- "parameters": {},
30709
- "required": [],
30710
- "returns": "Promise<this>",
30711
- "examples": [
30712
- {
30713
- "language": "ts",
30714
- "code": "await openai.connect()"
30715
- }
30716
- ]
30717
- },
30718
- "createChatCompletion": {
30719
- "description": "Create a chat completion using the Chat Completions API.",
31337
+ "from": {
31338
+ "description": "Start a query on a Postgres table or view.",
30720
31339
  "parameters": {
30721
- "messages": {
30722
- "type": "OpenAI.Chat.Completions.ChatCompletionMessageParam[]",
30723
- "description": "Array of chat messages"
30724
- },
30725
- "options": {
30726
- "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
30727
- "description": "Additional parameters for the completion"
31340
+ "table": {
31341
+ "type": "string",
31342
+ "description": "The table or view name to query"
30728
31343
  }
30729
31344
  },
30730
31345
  "required": [
30731
- "messages"
31346
+ "table"
30732
31347
  ],
30733
- "returns": "Promise<OpenAI.Chat.Completions.ChatCompletion>",
30734
- "examples": [
30735
- {
30736
- "language": "ts",
30737
- "code": "const response = await openai.createChatCompletion([\n { role: 'system', content: 'You are a helpful assistant.' },\n { role: 'user', content: 'Hello!' }\n])\nconsole.log(response.choices[0]?.message?.content)"
30738
- }
30739
- ]
31348
+ "returns": "void"
30740
31349
  },
30741
- "createResponse": {
30742
- "description": "Create a response using the Responses API.",
31350
+ "rpc": {
31351
+ "description": "Call a Postgres function (RPC).",
30743
31352
  "parameters": {
30744
- "input": {
30745
- "type": "OpenAI.Responses.ResponseInput | string",
30746
- "description": "The input prompt or message array"
31353
+ "fn": {
31354
+ "type": "string",
31355
+ "description": "The function name"
30747
31356
  },
30748
- "options": {
30749
- "type": "Partial<OpenAI.Responses.ResponseCreateParamsNonStreaming>",
30750
- "description": "Additional parameters for the response"
30751
- }
30752
- },
30753
- "required": [
30754
- "input"
30755
- ],
30756
- "returns": "Promise<OpenAI.Responses.Response>",
30757
- "examples": [
30758
- {
30759
- "language": "ts",
30760
- "code": "const response = await openai.createResponse('Explain quantum computing')"
30761
- }
30762
- ]
30763
- },
30764
- "streamResponse": {
30765
- "description": "Stream a response using the Responses API.",
30766
- "parameters": {
30767
- "input": {
30768
- "type": "OpenAI.Responses.ResponseInput | string",
30769
- "description": "The input prompt or message array"
31357
+ "params": {
31358
+ "type": "Record<string, unknown>",
31359
+ "description": "Arguments to pass to the function"
30770
31360
  },
30771
31361
  "options": {
30772
- "type": "Partial<OpenAI.Responses.ResponseCreateParamsStreaming>",
30773
- "description": "Additional parameters for the streaming response"
31362
+ "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
31363
+ "description": "Optional settings (head, get, count)"
30774
31364
  }
30775
31365
  },
30776
31366
  "required": [
30777
- "input"
31367
+ "fn"
30778
31368
  ],
30779
- "returns": "Promise<AsyncIterable<OpenAI.Responses.ResponseStreamEvent>>",
30780
- "examples": [
30781
- {
30782
- "language": "ts",
30783
- "code": "const stream = await openai.streamResponse('Write a poem')\nfor await (const event of stream) {\n if (event.type === 'response.output_text.delta') {\n process.stdout.write(event.delta)\n }\n}"
30784
- }
30785
- ]
31369
+ "returns": "void"
30786
31370
  },
30787
- "createCompletion": {
30788
- "description": "Create a legacy text completion.",
31371
+ "signInWithPassword": {
31372
+ "description": "Sign in with email and password.",
30789
31373
  "parameters": {
30790
- "prompt": {
31374
+ "email": {
30791
31375
  "type": "string",
30792
- "description": "The text prompt to complete"
31376
+ "description": "Parameter email"
30793
31377
  },
30794
- "options": {
30795
- "type": "Partial<OpenAI.Completions.CompletionCreateParams>",
30796
- "description": "Additional parameters for the completion"
31378
+ "password": {
31379
+ "type": "string",
31380
+ "description": "Parameter password"
30797
31381
  }
30798
31382
  },
30799
31383
  "required": [
30800
- "prompt"
31384
+ "email",
31385
+ "password"
30801
31386
  ],
30802
- "returns": "Promise<OpenAI.Completions.Completion>",
30803
- "examples": [
30804
- {
30805
- "language": "ts",
30806
- "code": "const response = await openai.createCompletion('Once upon a time')"
30807
- }
30808
- ]
31387
+ "returns": "void"
30809
31388
  },
30810
- "createEmbedding": {
30811
- "description": "Create text embeddings for semantic search or similarity comparisons.",
31389
+ "signUp": {
31390
+ "description": "Create a new user account with email and password.",
30812
31391
  "parameters": {
30813
- "input": {
30814
- "type": "string | string[]",
30815
- "description": "A string or array of strings to embed"
31392
+ "email": {
31393
+ "type": "string",
31394
+ "description": "Parameter email"
30816
31395
  },
30817
- "options": {
30818
- "type": "Partial<OpenAI.Embeddings.EmbeddingCreateParams>",
30819
- "description": "Additional parameters (model, etc.)"
31396
+ "password": {
31397
+ "type": "string",
31398
+ "description": "Parameter password"
30820
31399
  }
30821
31400
  },
30822
31401
  "required": [
30823
- "input"
31402
+ "email",
31403
+ "password"
30824
31404
  ],
30825
- "returns": "Promise<OpenAI.Embeddings.CreateEmbeddingResponse>",
30826
- "examples": [
30827
- {
30828
- "language": "ts",
30829
- "code": "const response = await openai.createEmbedding('Hello world')\nconsole.log(response.data[0].embedding.length)"
30830
- }
30831
- ]
31405
+ "returns": "void"
30832
31406
  },
30833
- "createImage": {
30834
- "description": "Generate an image from a text prompt using DALL-E.",
31407
+ "signOut": {
31408
+ "description": "Sign the current user out.",
31409
+ "parameters": {},
31410
+ "required": [],
31411
+ "returns": "void"
31412
+ },
31413
+ "getSession": {
31414
+ "description": "Get the current session, if any.",
31415
+ "parameters": {},
31416
+ "required": [],
31417
+ "returns": "void"
31418
+ },
31419
+ "getUser": {
31420
+ "description": "Get the current user, if any.",
31421
+ "parameters": {},
31422
+ "required": [],
31423
+ "returns": "void"
31424
+ },
31425
+ "invoke": {
31426
+ "description": "Invoke a Supabase Edge Function by name.",
30835
31427
  "parameters": {
30836
- "prompt": {
31428
+ "name": {
30837
31429
  "type": "string",
30838
- "description": "Description of the image to generate"
31430
+ "description": "Parameter name"
30839
31431
  },
30840
- "options": {
30841
- "type": "Partial<OpenAI.Images.ImageGenerateParams>",
30842
- "description": "Additional parameters (size, n, etc.)"
31432
+ "body": {
31433
+ "type": "any",
31434
+ "description": "Parameter body"
30843
31435
  }
30844
31436
  },
30845
31437
  "required": [
30846
- "prompt"
31438
+ "name"
30847
31439
  ],
30848
- "returns": "Promise<OpenAI.Images.ImagesResponse>",
30849
- "examples": [
30850
- {
30851
- "language": "ts",
30852
- "code": "const response = await openai.createImage('A sunset over mountains')\nconsole.log(response.data[0].url)"
30853
- }
30854
- ]
30855
- },
30856
- "listModels": {
30857
- "description": "List all available models.",
30858
- "parameters": {},
30859
- "required": [],
30860
- "returns": "Promise<OpenAI.Models.ModelsPage>",
30861
- "examples": [
30862
- {
30863
- "language": "ts",
30864
- "code": "const models = await openai.listModels()"
30865
- }
30866
- ]
31440
+ "returns": "void"
30867
31441
  },
30868
- "ask": {
30869
- "description": "Ask a single question and get a text response. Convenience wrapper around `createChatCompletion` for simple Q&A.",
31442
+ "subscribe": {
31443
+ "description": "Subscribe to realtime changes on a Postgres table.",
30870
31444
  "parameters": {
30871
- "question": {
31445
+ "channelName": {
30872
31446
  "type": "string",
30873
- "description": "The question to ask"
31447
+ "description": "A name for this subscription channel"
30874
31448
  },
30875
- "options": {
30876
- "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
30877
- "description": "Additional completion parameters"
31449
+ "table": {
31450
+ "type": "string",
31451
+ "description": "The table to listen to"
31452
+ },
31453
+ "callback": {
31454
+ "type": "(payload: any) => void",
31455
+ "description": "Called with the payload on each change"
31456
+ },
31457
+ "event": {
31458
+ "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
31459
+ "description": "The event type to listen for (default: all changes)"
30878
31460
  }
30879
31461
  },
30880
31462
  "required": [
30881
- "question"
31463
+ "channelName",
31464
+ "table",
31465
+ "callback"
30882
31466
  ],
30883
- "returns": "Promise<string>",
30884
- "examples": [
30885
- {
30886
- "language": "ts",
30887
- "code": "const answer = await openai.ask('What is 2 + 2?')\nconsole.log(answer) // '4'"
30888
- }
30889
- ]
31467
+ "returns": "RealtimeChannel"
30890
31468
  },
30891
- "chat": {
30892
- "description": "Send a multi-turn conversation and get a text response. Convenience wrapper around `createChatCompletion` that returns just the text.",
31469
+ "unsubscribe": {
31470
+ "description": "Unsubscribe and remove a realtime channel by name.",
30893
31471
  "parameters": {
30894
- "messages": {
30895
- "type": "OpenAI.Chat.Completions.ChatCompletionMessageParam[]",
30896
- "description": "Array of chat messages"
30897
- },
30898
- "options": {
30899
- "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
30900
- "description": "Additional completion parameters"
31472
+ "channelName": {
31473
+ "type": "string",
31474
+ "description": "The channel name to remove"
30901
31475
  }
30902
31476
  },
30903
31477
  "required": [
30904
- "messages"
31478
+ "channelName"
30905
31479
  ],
30906
- "returns": "Promise<string>",
30907
- "examples": [
30908
- {
30909
- "language": "ts",
30910
- "code": "const reply = await openai.chat([\n { role: 'system', content: 'You are a pirate.' },\n { role: 'user', content: 'Hello!' }\n])"
30911
- }
30912
- ]
30913
- }
30914
- },
30915
- "getters": {
30916
- "defaultModel": {
30917
- "description": "The default model used for completions, from options or 'gpt-4o'.",
30918
- "returns": "string"
30919
- },
30920
- "raw": {
30921
- "description": "The underlying OpenAI SDK instance for advanced use cases.",
30922
- "returns": "OpenAI"
30923
- }
30924
- },
30925
- "events": {
30926
- "connected": {
30927
- "name": "connected",
30928
- "description": "Event emitted by OpenAIClient",
30929
- "arguments": {}
31480
+ "returns": "void"
30930
31481
  },
30931
- "failure": {
30932
- "name": "failure",
30933
- "description": "Event emitted by OpenAIClient",
30934
- "arguments": {}
31482
+ "unsubscribeAll": {
31483
+ "description": "Unsubscribe and remove all realtime channels.",
31484
+ "parameters": {},
31485
+ "required": [],
31486
+ "returns": "void"
30935
31487
  },
30936
- "completion": {
30937
- "name": "completion",
30938
- "description": "Event emitted by OpenAIClient",
30939
- "arguments": {}
31488
+ "connect": {
31489
+ "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
31490
+ "parameters": {},
31491
+ "required": [],
31492
+ "returns": "void"
30940
31493
  },
30941
- "embedding": {
30942
- "name": "embedding",
30943
- "description": "Event emitted by OpenAIClient",
30944
- "arguments": {}
31494
+ "disconnect": {
31495
+ "description": "Disconnect by signing out and removing all realtime channels.",
31496
+ "parameters": {},
31497
+ "required": [],
31498
+ "returns": "void"
31499
+ }
31500
+ },
31501
+ "getters": {
31502
+ "sdk": {
31503
+ "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
31504
+ "returns": "SupabaseSDKClient<any, any>"
30945
31505
  },
30946
- "image": {
30947
- "name": "image",
30948
- "description": "Event emitted by OpenAIClient",
30949
- "arguments": {}
31506
+ "storage": {
31507
+ "description": "Returns the Supabase Storage client for managing buckets and files.",
31508
+ "returns": "any"
30950
31509
  },
30951
- "models": {
30952
- "name": "models",
30953
- "description": "Event emitted by OpenAIClient",
30954
- "arguments": {}
31510
+ "functions": {
31511
+ "description": "Returns the Supabase Functions client.",
31512
+ "returns": "any"
30955
31513
  }
30956
31514
  },
31515
+ "events": {},
30957
31516
  "state": {},
30958
31517
  "options": {},
30959
31518
  "envVars": [],
30960
31519
  "examples": [
30961
31520
  {
30962
31521
  "language": "ts",
30963
- "code": "const openai = container.client('openai', { defaultModel: 'gpt-4o' })\nconst answer = await openai.ask('What is the meaning of life?')\nconsole.log(answer)"
31522
+ "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})"
30964
31523
  }
30965
31524
  ]
30966
31525
  },
@@ -31260,6 +31819,273 @@ export const introspectionData = [
31260
31819
  }
31261
31820
  }
31262
31821
  },
31822
+ {
31823
+ "id": "clients.openai",
31824
+ "description": "OpenAI client — wraps the OpenAI SDK for chat completions, responses API, embeddings, and image generation. Provides convenience methods for common operations while tracking token usage and request counts. Supports both the Chat Completions API and the newer Responses API.",
31825
+ "shortcut": "clients.openai",
31826
+ "className": "OpenAIClient",
31827
+ "methods": {
31828
+ "connect": {
31829
+ "description": "Test the API connection by listing models.",
31830
+ "parameters": {},
31831
+ "required": [],
31832
+ "returns": "Promise<this>",
31833
+ "examples": [
31834
+ {
31835
+ "language": "ts",
31836
+ "code": "await openai.connect()"
31837
+ }
31838
+ ]
31839
+ },
31840
+ "createChatCompletion": {
31841
+ "description": "Create a chat completion using the Chat Completions API.",
31842
+ "parameters": {
31843
+ "messages": {
31844
+ "type": "OpenAI.Chat.Completions.ChatCompletionMessageParam[]",
31845
+ "description": "Array of chat messages"
31846
+ },
31847
+ "options": {
31848
+ "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
31849
+ "description": "Additional parameters for the completion"
31850
+ }
31851
+ },
31852
+ "required": [
31853
+ "messages"
31854
+ ],
31855
+ "returns": "Promise<OpenAI.Chat.Completions.ChatCompletion>",
31856
+ "examples": [
31857
+ {
31858
+ "language": "ts",
31859
+ "code": "const response = await openai.createChatCompletion([\n { role: 'system', content: 'You are a helpful assistant.' },\n { role: 'user', content: 'Hello!' }\n])\nconsole.log(response.choices[0]?.message?.content)"
31860
+ }
31861
+ ]
31862
+ },
31863
+ "createResponse": {
31864
+ "description": "Create a response using the Responses API.",
31865
+ "parameters": {
31866
+ "input": {
31867
+ "type": "OpenAI.Responses.ResponseInput | string",
31868
+ "description": "The input prompt or message array"
31869
+ },
31870
+ "options": {
31871
+ "type": "Partial<OpenAI.Responses.ResponseCreateParamsNonStreaming>",
31872
+ "description": "Additional parameters for the response"
31873
+ }
31874
+ },
31875
+ "required": [
31876
+ "input"
31877
+ ],
31878
+ "returns": "Promise<OpenAI.Responses.Response>",
31879
+ "examples": [
31880
+ {
31881
+ "language": "ts",
31882
+ "code": "const response = await openai.createResponse('Explain quantum computing')"
31883
+ }
31884
+ ]
31885
+ },
31886
+ "streamResponse": {
31887
+ "description": "Stream a response using the Responses API.",
31888
+ "parameters": {
31889
+ "input": {
31890
+ "type": "OpenAI.Responses.ResponseInput | string",
31891
+ "description": "The input prompt or message array"
31892
+ },
31893
+ "options": {
31894
+ "type": "Partial<OpenAI.Responses.ResponseCreateParamsStreaming>",
31895
+ "description": "Additional parameters for the streaming response"
31896
+ }
31897
+ },
31898
+ "required": [
31899
+ "input"
31900
+ ],
31901
+ "returns": "Promise<AsyncIterable<OpenAI.Responses.ResponseStreamEvent>>",
31902
+ "examples": [
31903
+ {
31904
+ "language": "ts",
31905
+ "code": "const stream = await openai.streamResponse('Write a poem')\nfor await (const event of stream) {\n if (event.type === 'response.output_text.delta') {\n process.stdout.write(event.delta)\n }\n}"
31906
+ }
31907
+ ]
31908
+ },
31909
+ "createCompletion": {
31910
+ "description": "Create a legacy text completion.",
31911
+ "parameters": {
31912
+ "prompt": {
31913
+ "type": "string",
31914
+ "description": "The text prompt to complete"
31915
+ },
31916
+ "options": {
31917
+ "type": "Partial<OpenAI.Completions.CompletionCreateParams>",
31918
+ "description": "Additional parameters for the completion"
31919
+ }
31920
+ },
31921
+ "required": [
31922
+ "prompt"
31923
+ ],
31924
+ "returns": "Promise<OpenAI.Completions.Completion>",
31925
+ "examples": [
31926
+ {
31927
+ "language": "ts",
31928
+ "code": "const response = await openai.createCompletion('Once upon a time')"
31929
+ }
31930
+ ]
31931
+ },
31932
+ "createEmbedding": {
31933
+ "description": "Create text embeddings for semantic search or similarity comparisons.",
31934
+ "parameters": {
31935
+ "input": {
31936
+ "type": "string | string[]",
31937
+ "description": "A string or array of strings to embed"
31938
+ },
31939
+ "options": {
31940
+ "type": "Partial<OpenAI.Embeddings.EmbeddingCreateParams>",
31941
+ "description": "Additional parameters (model, etc.)"
31942
+ }
31943
+ },
31944
+ "required": [
31945
+ "input"
31946
+ ],
31947
+ "returns": "Promise<OpenAI.Embeddings.CreateEmbeddingResponse>",
31948
+ "examples": [
31949
+ {
31950
+ "language": "ts",
31951
+ "code": "const response = await openai.createEmbedding('Hello world')\nconsole.log(response.data[0].embedding.length)"
31952
+ }
31953
+ ]
31954
+ },
31955
+ "createImage": {
31956
+ "description": "Generate an image from a text prompt using DALL-E.",
31957
+ "parameters": {
31958
+ "prompt": {
31959
+ "type": "string",
31960
+ "description": "Description of the image to generate"
31961
+ },
31962
+ "options": {
31963
+ "type": "Partial<OpenAI.Images.ImageGenerateParams>",
31964
+ "description": "Additional parameters (size, n, etc.)"
31965
+ }
31966
+ },
31967
+ "required": [
31968
+ "prompt"
31969
+ ],
31970
+ "returns": "Promise<OpenAI.Images.ImagesResponse>",
31971
+ "examples": [
31972
+ {
31973
+ "language": "ts",
31974
+ "code": "const response = await openai.createImage('A sunset over mountains')\nconsole.log(response.data[0].url)"
31975
+ }
31976
+ ]
31977
+ },
31978
+ "listModels": {
31979
+ "description": "List all available models.",
31980
+ "parameters": {},
31981
+ "required": [],
31982
+ "returns": "Promise<OpenAI.Models.ModelsPage>",
31983
+ "examples": [
31984
+ {
31985
+ "language": "ts",
31986
+ "code": "const models = await openai.listModels()"
31987
+ }
31988
+ ]
31989
+ },
31990
+ "ask": {
31991
+ "description": "Ask a single question and get a text response. Convenience wrapper around `createChatCompletion` for simple Q&A.",
31992
+ "parameters": {
31993
+ "question": {
31994
+ "type": "string",
31995
+ "description": "The question to ask"
31996
+ },
31997
+ "options": {
31998
+ "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
31999
+ "description": "Additional completion parameters"
32000
+ }
32001
+ },
32002
+ "required": [
32003
+ "question"
32004
+ ],
32005
+ "returns": "Promise<string>",
32006
+ "examples": [
32007
+ {
32008
+ "language": "ts",
32009
+ "code": "const answer = await openai.ask('What is 2 + 2?')\nconsole.log(answer) // '4'"
32010
+ }
32011
+ ]
32012
+ },
32013
+ "chat": {
32014
+ "description": "Send a multi-turn conversation and get a text response. Convenience wrapper around `createChatCompletion` that returns just the text.",
32015
+ "parameters": {
32016
+ "messages": {
32017
+ "type": "OpenAI.Chat.Completions.ChatCompletionMessageParam[]",
32018
+ "description": "Array of chat messages"
32019
+ },
32020
+ "options": {
32021
+ "type": "Partial<OpenAI.Chat.Completions.ChatCompletionCreateParams>",
32022
+ "description": "Additional completion parameters"
32023
+ }
32024
+ },
32025
+ "required": [
32026
+ "messages"
32027
+ ],
32028
+ "returns": "Promise<string>",
32029
+ "examples": [
32030
+ {
32031
+ "language": "ts",
32032
+ "code": "const reply = await openai.chat([\n { role: 'system', content: 'You are a pirate.' },\n { role: 'user', content: 'Hello!' }\n])"
32033
+ }
32034
+ ]
32035
+ }
32036
+ },
32037
+ "getters": {
32038
+ "defaultModel": {
32039
+ "description": "The default model used for completions, from options or 'gpt-4o'.",
32040
+ "returns": "string"
32041
+ },
32042
+ "raw": {
32043
+ "description": "The underlying OpenAI SDK instance for advanced use cases.",
32044
+ "returns": "OpenAI"
32045
+ }
32046
+ },
32047
+ "events": {
32048
+ "connected": {
32049
+ "name": "connected",
32050
+ "description": "Event emitted by OpenAIClient",
32051
+ "arguments": {}
32052
+ },
32053
+ "failure": {
32054
+ "name": "failure",
32055
+ "description": "Event emitted by OpenAIClient",
32056
+ "arguments": {}
32057
+ },
32058
+ "completion": {
32059
+ "name": "completion",
32060
+ "description": "Event emitted by OpenAIClient",
32061
+ "arguments": {}
32062
+ },
32063
+ "embedding": {
32064
+ "name": "embedding",
32065
+ "description": "Event emitted by OpenAIClient",
32066
+ "arguments": {}
32067
+ },
32068
+ "image": {
32069
+ "name": "image",
32070
+ "description": "Event emitted by OpenAIClient",
32071
+ "arguments": {}
32072
+ },
32073
+ "models": {
32074
+ "name": "models",
32075
+ "description": "Event emitted by OpenAIClient",
32076
+ "arguments": {}
32077
+ }
32078
+ },
32079
+ "state": {},
32080
+ "options": {},
32081
+ "envVars": [],
32082
+ "examples": [
32083
+ {
32084
+ "language": "ts",
32085
+ "code": "const openai = container.client('openai', { defaultModel: 'gpt-4o' })\nconst answer = await openai.ask('What is the meaning of life?')\nconsole.log(answer)"
32086
+ }
32087
+ ]
32088
+ },
31263
32089
  {
31264
32090
  "id": "clients.elevenlabs",
31265
32091
  "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.",
@@ -31523,201 +32349,6 @@ export const introspectionData = [
31523
32349
  }
31524
32350
  }
31525
32351
  },
31526
- {
31527
- "id": "clients.supabase",
31528
- "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).",
31529
- "shortcut": "clients.supabase",
31530
- "className": "SupabaseClient",
31531
- "methods": {
31532
- "from": {
31533
- "description": "Start a query on a Postgres table or view.",
31534
- "parameters": {
31535
- "table": {
31536
- "type": "string",
31537
- "description": "The table or view name to query"
31538
- }
31539
- },
31540
- "required": [
31541
- "table"
31542
- ],
31543
- "returns": "void"
31544
- },
31545
- "rpc": {
31546
- "description": "Call a Postgres function (RPC).",
31547
- "parameters": {
31548
- "fn": {
31549
- "type": "string",
31550
- "description": "The function name"
31551
- },
31552
- "params": {
31553
- "type": "Record<string, unknown>",
31554
- "description": "Arguments to pass to the function"
31555
- },
31556
- "options": {
31557
- "type": "{ head?: boolean; get?: boolean; count?: \"exact\" | \"planned\" | \"estimated\" }",
31558
- "description": "Optional settings (head, get, count)"
31559
- }
31560
- },
31561
- "required": [
31562
- "fn"
31563
- ],
31564
- "returns": "void"
31565
- },
31566
- "signInWithPassword": {
31567
- "description": "Sign in with email and password.",
31568
- "parameters": {
31569
- "email": {
31570
- "type": "string",
31571
- "description": "Parameter email"
31572
- },
31573
- "password": {
31574
- "type": "string",
31575
- "description": "Parameter password"
31576
- }
31577
- },
31578
- "required": [
31579
- "email",
31580
- "password"
31581
- ],
31582
- "returns": "void"
31583
- },
31584
- "signUp": {
31585
- "description": "Create a new user account with email and password.",
31586
- "parameters": {
31587
- "email": {
31588
- "type": "string",
31589
- "description": "Parameter email"
31590
- },
31591
- "password": {
31592
- "type": "string",
31593
- "description": "Parameter password"
31594
- }
31595
- },
31596
- "required": [
31597
- "email",
31598
- "password"
31599
- ],
31600
- "returns": "void"
31601
- },
31602
- "signOut": {
31603
- "description": "Sign the current user out.",
31604
- "parameters": {},
31605
- "required": [],
31606
- "returns": "void"
31607
- },
31608
- "getSession": {
31609
- "description": "Get the current session, if any.",
31610
- "parameters": {},
31611
- "required": [],
31612
- "returns": "void"
31613
- },
31614
- "getUser": {
31615
- "description": "Get the current user, if any.",
31616
- "parameters": {},
31617
- "required": [],
31618
- "returns": "void"
31619
- },
31620
- "invoke": {
31621
- "description": "Invoke a Supabase Edge Function by name.",
31622
- "parameters": {
31623
- "name": {
31624
- "type": "string",
31625
- "description": "Parameter name"
31626
- },
31627
- "body": {
31628
- "type": "any",
31629
- "description": "Parameter body"
31630
- }
31631
- },
31632
- "required": [
31633
- "name"
31634
- ],
31635
- "returns": "void"
31636
- },
31637
- "subscribe": {
31638
- "description": "Subscribe to realtime changes on a Postgres table.",
31639
- "parameters": {
31640
- "channelName": {
31641
- "type": "string",
31642
- "description": "A name for this subscription channel"
31643
- },
31644
- "table": {
31645
- "type": "string",
31646
- "description": "The table to listen to"
31647
- },
31648
- "callback": {
31649
- "type": "(payload: any) => void",
31650
- "description": "Called with the payload on each change"
31651
- },
31652
- "event": {
31653
- "type": "\"INSERT\" | \"UPDATE\" | \"DELETE\" | \"*\"",
31654
- "description": "The event type to listen for (default: all changes)"
31655
- }
31656
- },
31657
- "required": [
31658
- "channelName",
31659
- "table",
31660
- "callback"
31661
- ],
31662
- "returns": "RealtimeChannel"
31663
- },
31664
- "unsubscribe": {
31665
- "description": "Unsubscribe and remove a realtime channel by name.",
31666
- "parameters": {
31667
- "channelName": {
31668
- "type": "string",
31669
- "description": "The channel name to remove"
31670
- }
31671
- },
31672
- "required": [
31673
- "channelName"
31674
- ],
31675
- "returns": "void"
31676
- },
31677
- "unsubscribeAll": {
31678
- "description": "Unsubscribe and remove all realtime channels.",
31679
- "parameters": {},
31680
- "required": [],
31681
- "returns": "void"
31682
- },
31683
- "connect": {
31684
- "description": "Connect is a no-op since the Supabase SDK initializes on construction. The client is ready to use immediately after creation.",
31685
- "parameters": {},
31686
- "required": [],
31687
- "returns": "void"
31688
- },
31689
- "disconnect": {
31690
- "description": "Disconnect by signing out and removing all realtime channels.",
31691
- "parameters": {},
31692
- "required": [],
31693
- "returns": "void"
31694
- }
31695
- },
31696
- "getters": {
31697
- "sdk": {
31698
- "description": "Returns the raw Supabase SDK client for full access to all SDK methods.",
31699
- "returns": "SupabaseSDKClient<any, any>"
31700
- },
31701
- "storage": {
31702
- "description": "Returns the Supabase Storage client for managing buckets and files.",
31703
- "returns": "any"
31704
- },
31705
- "functions": {
31706
- "description": "Returns the Supabase Functions client.",
31707
- "returns": "any"
31708
- }
31709
- },
31710
- "events": {},
31711
- "state": {},
31712
- "options": {},
31713
- "envVars": [],
31714
- "examples": [
31715
- {
31716
- "language": "ts",
31717
- "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})"
31718
- }
31719
- ]
31720
- },
31721
32352
  {
31722
32353
  "id": "servers.mcp",
31723
32354
  "description": "MCP (Model Context Protocol) server for exposing tools, resources, and prompts to AI clients like Claude Code. Uses the low-level MCP SDK Server class directly with Zod 4 native JSON Schema conversion. Register tools, resources, and prompts programmatically, then start the server over stdio (for CLI integration) or HTTP (for remote access).",
@@ -33078,6 +33709,19 @@ export const introspectionData = [
33078
33709
  "shortcut": "features.browserUse",
33079
33710
  "className": "BrowserUse",
33080
33711
  "methods": {
33712
+ "setupToolsConsumer": {
33713
+ "description": "When an assistant uses browserUse, inject system prompt guidance about the browser interaction loop.",
33714
+ "parameters": {
33715
+ "consumer": {
33716
+ "type": "Helper",
33717
+ "description": "Parameter consumer"
33718
+ }
33719
+ },
33720
+ "required": [
33721
+ "consumer"
33722
+ ],
33723
+ "returns": "void"
33724
+ },
33081
33725
  "afterInitialize": {
33082
33726
  "description": "",
33083
33727
  "parameters": {},
@@ -34083,6 +34727,11 @@ export const introspectionData = [
34083
34727
  "name": "skillDiscovered",
34084
34728
  "description": "Event emitted by SkillsLibrary",
34085
34729
  "arguments": {}
34730
+ },
34731
+ "foundSkills": {
34732
+ "name": "foundSkills",
34733
+ "description": "Event emitted by SkillsLibrary",
34734
+ "arguments": {}
34086
34735
  }
34087
34736
  },
34088
34737
  "state": {},
@@ -34609,6 +35258,474 @@ export const introspectionData = [
34609
35258
  }
34610
35259
  ]
34611
35260
  },
35261
+ {
35262
+ "id": "features.memory",
35263
+ "description": "Semantic memory storage and retrieval for AI agents. Provides categorized memory with embedding-based search, metadata filtering, epoch tracking, and assistant tool integration. Built natively on Luca's SQLite and semanticSearch features.",
35264
+ "shortcut": "features.memory",
35265
+ "className": "Memory",
35266
+ "methods": {
35267
+ "initDb": {
35268
+ "description": "Initialize the SQLite database and create tables. Called automatically on first use, but can be called explicitly.",
35269
+ "parameters": {},
35270
+ "required": [],
35271
+ "returns": "void",
35272
+ "examples": [
35273
+ {
35274
+ "language": "ts",
35275
+ "code": "const mem = container.feature('memory')\nawait mem.initDb()"
35276
+ }
35277
+ ]
35278
+ },
35279
+ "remember": {
35280
+ "description": "Tool handler: store a memory, deduplicating by similarity.",
35281
+ "parameters": {
35282
+ "args": {
35283
+ "type": "{ category: string; text: string; metadata?: Record<string, any> }",
35284
+ "description": "Parameter args"
35285
+ }
35286
+ },
35287
+ "required": [
35288
+ "args"
35289
+ ],
35290
+ "returns": "void"
35291
+ },
35292
+ "recall": {
35293
+ "description": "Tool handler: search memories by semantic similarity.",
35294
+ "parameters": {
35295
+ "args": {
35296
+ "type": "{ category: string; query: string; n_results?: number }",
35297
+ "description": "Parameter args"
35298
+ }
35299
+ },
35300
+ "required": [
35301
+ "args"
35302
+ ],
35303
+ "returns": "void"
35304
+ },
35305
+ "forgetCategory": {
35306
+ "description": "Tool handler: wipe all memories in a category.",
35307
+ "parameters": {
35308
+ "args": {
35309
+ "type": "{ category: string }",
35310
+ "description": "Parameter args"
35311
+ }
35312
+ },
35313
+ "required": [
35314
+ "args"
35315
+ ],
35316
+ "returns": "void"
35317
+ },
35318
+ "listCategories": {
35319
+ "description": "Tool handler: list all categories with counts.",
35320
+ "parameters": {},
35321
+ "required": [],
35322
+ "returns": "void"
35323
+ },
35324
+ "setupToolsConsumer": {
35325
+ "description": "When an assistant uses memory, inject system prompt guidance.",
35326
+ "parameters": {
35327
+ "consumer": {
35328
+ "type": "Helper",
35329
+ "description": "Parameter consumer"
35330
+ }
35331
+ },
35332
+ "required": [
35333
+ "consumer"
35334
+ ],
35335
+ "returns": "void"
35336
+ },
35337
+ "create": {
35338
+ "description": "Create a new memory in the given category.",
35339
+ "parameters": {
35340
+ "category": {
35341
+ "type": "string",
35342
+ "description": "The category to store the memory in"
35343
+ },
35344
+ "text": {
35345
+ "type": "string",
35346
+ "description": "The text content of the memory"
35347
+ },
35348
+ "metadata": {
35349
+ "type": "Record<string, any>",
35350
+ "description": "Optional metadata key-value pairs"
35351
+ }
35352
+ },
35353
+ "required": [
35354
+ "category",
35355
+ "text"
35356
+ ],
35357
+ "returns": "Promise<MemoryRecord>",
35358
+ "examples": [
35359
+ {
35360
+ "language": "ts",
35361
+ "code": "const mem = container.feature('memory')\nawait mem.create('facts', 'The user lives in Austin', { confidence: 0.9 })"
35362
+ }
35363
+ ]
35364
+ },
35365
+ "createUnique": {
35366
+ "description": "Create a memory only if no sufficiently similar memory exists.",
35367
+ "parameters": {
35368
+ "category": {
35369
+ "type": "string",
35370
+ "description": "The category to store the memory in"
35371
+ },
35372
+ "text": {
35373
+ "type": "string",
35374
+ "description": "The text content of the memory"
35375
+ },
35376
+ "metadata": {
35377
+ "type": "Record<string, any>",
35378
+ "description": "Optional metadata"
35379
+ },
35380
+ "similarityThreshold": {
35381
+ "type": "any",
35382
+ "description": "Minimum cosine similarity to consider a duplicate (0-1, default 0.95)"
35383
+ }
35384
+ },
35385
+ "required": [
35386
+ "category",
35387
+ "text"
35388
+ ],
35389
+ "returns": "Promise<MemoryRecord | null>",
35390
+ "examples": [
35391
+ {
35392
+ "language": "ts",
35393
+ "code": "const mem = container.feature('memory')\nawait mem.createUnique('facts', 'User prefers dark mode', {}, 0.9)"
35394
+ }
35395
+ ]
35396
+ },
35397
+ "get": {
35398
+ "description": "Get a memory by ID.",
35399
+ "parameters": {
35400
+ "category": {
35401
+ "type": "string",
35402
+ "description": "The category the memory belongs to"
35403
+ },
35404
+ "id": {
35405
+ "type": "number",
35406
+ "description": "The memory ID"
35407
+ }
35408
+ },
35409
+ "required": [
35410
+ "category",
35411
+ "id"
35412
+ ],
35413
+ "returns": "Promise<MemoryRecord | null>"
35414
+ },
35415
+ "getAll": {
35416
+ "description": "Get all memories in a category, with optional metadata filtering.",
35417
+ "parameters": {
35418
+ "category": {
35419
+ "type": "string",
35420
+ "description": "The category to query"
35421
+ },
35422
+ "options": {
35423
+ "type": "{ limit?: number; sortOrder?: 'asc' | 'desc'; filterMetadata?: Record<string, any> }",
35424
+ "description": "Query options",
35425
+ "properties": {
35426
+ "limit": {
35427
+ "type": "any",
35428
+ "description": "Max results (default 20)"
35429
+ },
35430
+ "sortOrder": {
35431
+ "type": "any",
35432
+ "description": "'asc' or 'desc' by created_at (default 'desc')"
35433
+ },
35434
+ "filterMetadata": {
35435
+ "type": "any",
35436
+ "description": "Filter by metadata key-value pairs"
35437
+ }
35438
+ }
35439
+ }
35440
+ },
35441
+ "required": [
35442
+ "category"
35443
+ ],
35444
+ "returns": "Promise<MemoryRecord[]>"
35445
+ },
35446
+ "update": {
35447
+ "description": "Update a memory's text and/or metadata.",
35448
+ "parameters": {
35449
+ "category": {
35450
+ "type": "string",
35451
+ "description": "The category the memory belongs to"
35452
+ },
35453
+ "id": {
35454
+ "type": "number",
35455
+ "description": "The memory ID"
35456
+ },
35457
+ "updates": {
35458
+ "type": "{ text?: string; metadata?: Record<string, any> }",
35459
+ "description": "Fields to update",
35460
+ "properties": {
35461
+ "text": {
35462
+ "type": "any",
35463
+ "description": "New text content (re-embeds automatically)"
35464
+ },
35465
+ "metadata": {
35466
+ "type": "any",
35467
+ "description": "Metadata to merge"
35468
+ }
35469
+ }
35470
+ }
35471
+ },
35472
+ "required": [
35473
+ "category",
35474
+ "id",
35475
+ "updates"
35476
+ ],
35477
+ "returns": "Promise<MemoryRecord | null>"
35478
+ },
35479
+ "delete": {
35480
+ "description": "Delete a specific memory.",
35481
+ "parameters": {
35482
+ "category": {
35483
+ "type": "string",
35484
+ "description": "The category"
35485
+ },
35486
+ "id": {
35487
+ "type": "number",
35488
+ "description": "The memory ID"
35489
+ }
35490
+ },
35491
+ "required": [
35492
+ "category",
35493
+ "id"
35494
+ ],
35495
+ "returns": "Promise<boolean>"
35496
+ },
35497
+ "wipeCategory": {
35498
+ "description": "Delete all memories in a category.",
35499
+ "parameters": {
35500
+ "category": {
35501
+ "type": "string",
35502
+ "description": "The category to wipe"
35503
+ }
35504
+ },
35505
+ "required": [
35506
+ "category"
35507
+ ],
35508
+ "returns": "Promise<number>"
35509
+ },
35510
+ "wipeAll": {
35511
+ "description": "Delete all memories across all categories in this namespace.",
35512
+ "parameters": {},
35513
+ "required": [],
35514
+ "returns": "Promise<number>"
35515
+ },
35516
+ "count": {
35517
+ "description": "Count memories in a category (or all categories if omitted).",
35518
+ "parameters": {
35519
+ "category": {
35520
+ "type": "string",
35521
+ "description": "Optional category to count"
35522
+ }
35523
+ },
35524
+ "required": [],
35525
+ "returns": "Promise<number>"
35526
+ },
35527
+ "categories": {
35528
+ "description": "List all categories that have memories.",
35529
+ "parameters": {},
35530
+ "required": [],
35531
+ "returns": "Promise<string[]>"
35532
+ },
35533
+ "search": {
35534
+ "description": "Search memories by semantic similarity.",
35535
+ "parameters": {
35536
+ "category": {
35537
+ "type": "string",
35538
+ "description": "The category to search in"
35539
+ },
35540
+ "query": {
35541
+ "type": "string",
35542
+ "description": "The search query (will be embedded)"
35543
+ },
35544
+ "nResults": {
35545
+ "type": "any",
35546
+ "description": "Maximum number of results (default 5)"
35547
+ },
35548
+ "options": {
35549
+ "type": "{ maxDistance?: number; filterMetadata?: Record<string, any> }",
35550
+ "description": "Additional search options",
35551
+ "properties": {
35552
+ "maxDistance": {
35553
+ "type": "any",
35554
+ "description": "Maximum cosine distance threshold (0-2, default none)"
35555
+ },
35556
+ "filterMetadata": {
35557
+ "type": "any",
35558
+ "description": "Filter by metadata key-value pairs"
35559
+ }
35560
+ }
35561
+ }
35562
+ },
35563
+ "required": [
35564
+ "category",
35565
+ "query"
35566
+ ],
35567
+ "returns": "Promise<MemorySearchResult[]>"
35568
+ },
35569
+ "getEpoch": {
35570
+ "description": "Get the current epoch value.",
35571
+ "parameters": {},
35572
+ "required": [],
35573
+ "returns": "number"
35574
+ },
35575
+ "setEpoch": {
35576
+ "description": "Set the epoch to a specific value.",
35577
+ "parameters": {
35578
+ "value": {
35579
+ "type": "number",
35580
+ "description": "The new epoch value"
35581
+ }
35582
+ },
35583
+ "required": [
35584
+ "value"
35585
+ ],
35586
+ "returns": "void"
35587
+ },
35588
+ "incrementEpoch": {
35589
+ "description": "Increment the epoch by 1.",
35590
+ "parameters": {},
35591
+ "required": [],
35592
+ "returns": "Promise<number>"
35593
+ },
35594
+ "createEvent": {
35595
+ "description": "Create a timestamped event memory in the 'events' category, automatically tagged with the current epoch.",
35596
+ "parameters": {
35597
+ "text": {
35598
+ "type": "string",
35599
+ "description": "The event description"
35600
+ },
35601
+ "metadata": {
35602
+ "type": "Record<string, any>",
35603
+ "description": "Optional additional metadata"
35604
+ }
35605
+ },
35606
+ "required": [
35607
+ "text"
35608
+ ],
35609
+ "returns": "Promise<MemoryRecord>"
35610
+ },
35611
+ "getEvents": {
35612
+ "description": "Get events, optionally filtered by epoch.",
35613
+ "parameters": {
35614
+ "options": {
35615
+ "type": "{ epoch?: number; limit?: number }",
35616
+ "description": "Query options",
35617
+ "properties": {
35618
+ "epoch": {
35619
+ "type": "any",
35620
+ "description": "Filter to a specific epoch"
35621
+ },
35622
+ "limit": {
35623
+ "type": "any",
35624
+ "description": "Max results (default 10)"
35625
+ }
35626
+ }
35627
+ }
35628
+ },
35629
+ "required": [],
35630
+ "returns": "Promise<MemoryRecord[]>"
35631
+ },
35632
+ "exportToJson": {
35633
+ "description": "Export all memories in this namespace to a JSON-serializable object.",
35634
+ "parameters": {},
35635
+ "required": [],
35636
+ "returns": "Promise<{ namespace: string; epoch: number; memories: MemoryRecord[] }>"
35637
+ },
35638
+ "importFromJson": {
35639
+ "description": "Import memories from a JSON export. Optionally replaces all existing memories.",
35640
+ "parameters": {
35641
+ "data": {
35642
+ "type": "{ namespace?: string; epoch?: number; memories: Array<{ category: string; document: string; metadata?: Record<string, any> }> }",
35643
+ "description": "The exported data object"
35644
+ },
35645
+ "replace": {
35646
+ "type": "any",
35647
+ "description": "If true, wipe existing memories before importing (default true)"
35648
+ }
35649
+ },
35650
+ "required": [
35651
+ "data"
35652
+ ],
35653
+ "returns": "Promise<number>"
35654
+ }
35655
+ },
35656
+ "getters": {},
35657
+ "events": {
35658
+ "dbInitialized": {
35659
+ "name": "dbInitialized",
35660
+ "description": "Event emitted by Memory",
35661
+ "arguments": {}
35662
+ },
35663
+ "memoryCreated": {
35664
+ "name": "memoryCreated",
35665
+ "description": "Event emitted by Memory",
35666
+ "arguments": {}
35667
+ },
35668
+ "memoryDeleted": {
35669
+ "name": "memoryDeleted",
35670
+ "description": "Event emitted by Memory",
35671
+ "arguments": {}
35672
+ },
35673
+ "epochChanged": {
35674
+ "name": "epochChanged",
35675
+ "description": "Event emitted by Memory",
35676
+ "arguments": {}
35677
+ }
35678
+ },
35679
+ "state": {},
35680
+ "options": {},
35681
+ "envVars": [],
35682
+ "examples": [
35683
+ {
35684
+ "language": "ts",
35685
+ "code": "const mem = container.feature('memory')\nawait mem.create('user-prefs', 'Prefers dark mode', { source: 'onboarding' })\nconst results = await mem.search('user-prefs', 'UI preferences')"
35686
+ }
35687
+ ],
35688
+ "types": {
35689
+ "MemoryRecord": {
35690
+ "description": "--- Types ---",
35691
+ "properties": {
35692
+ "id": {
35693
+ "type": "number",
35694
+ "description": ""
35695
+ },
35696
+ "category": {
35697
+ "type": "string",
35698
+ "description": ""
35699
+ },
35700
+ "document": {
35701
+ "type": "string",
35702
+ "description": ""
35703
+ },
35704
+ "metadata": {
35705
+ "type": "Record<string, any>",
35706
+ "description": ""
35707
+ },
35708
+ "created_at": {
35709
+ "type": "string",
35710
+ "description": ""
35711
+ },
35712
+ "updated_at": {
35713
+ "type": "string",
35714
+ "description": ""
35715
+ }
35716
+ }
35717
+ },
35718
+ "MemorySearchResult": {
35719
+ "description": "",
35720
+ "properties": {
35721
+ "distance": {
35722
+ "type": "number",
35723
+ "description": ""
35724
+ }
35725
+ }
35726
+ }
35727
+ }
35728
+ },
34612
35729
  {
34613
35730
  "id": "features.claudeCode",
34614
35731
  "description": "Claude Code CLI wrapper feature. Spawns and manages Claude Code sessions as subprocesses, streaming structured JSON events back through the container's event system. Sessions are long-lived: each call to `run()` spawns a `claude -p` process with `--output-format stream-json`, parses NDJSON from stdout line-by-line, and emits typed events on the feature's event bus.",
@@ -37213,6 +38330,97 @@ export const introspectionData = [
37213
38330
  "state": {},
37214
38331
  "options": {},
37215
38332
  "envVars": []
38333
+ },
38334
+ {
38335
+ "id": "features.codingTools",
38336
+ "description": "Shell primitives for AI coding assistants: rg, ls, cat, sed, awk. Wraps standard Unix tools into the assistant tool surface with LLM-optimized descriptions and system prompt guidance. These are the raw, flexible tools for reading, searching, and exploring code. Compose with other features (fileTools, processManager, skillsLibrary) in assistant hooks for a complete coding tool surface. Usage: ```typescript assistant.use(container.feature('codingTools')) ```",
38337
+ "shortcut": "features.codingTools",
38338
+ "className": "CodingTools",
38339
+ "methods": {
38340
+ "rg": {
38341
+ "description": "",
38342
+ "parameters": {
38343
+ "args": {
38344
+ "type": "{ args: string; cwd?: string }",
38345
+ "description": "Parameter args"
38346
+ }
38347
+ },
38348
+ "required": [
38349
+ "args"
38350
+ ],
38351
+ "returns": "Promise<string>"
38352
+ },
38353
+ "ls": {
38354
+ "description": "",
38355
+ "parameters": {
38356
+ "args": {
38357
+ "type": "{ args?: string; cwd?: string }",
38358
+ "description": "Parameter args"
38359
+ }
38360
+ },
38361
+ "required": [
38362
+ "args"
38363
+ ],
38364
+ "returns": "Promise<string>"
38365
+ },
38366
+ "cat": {
38367
+ "description": "",
38368
+ "parameters": {
38369
+ "args": {
38370
+ "type": "{ args: string; cwd?: string }",
38371
+ "description": "Parameter args"
38372
+ }
38373
+ },
38374
+ "required": [
38375
+ "args"
38376
+ ],
38377
+ "returns": "Promise<string>"
38378
+ },
38379
+ "sed": {
38380
+ "description": "",
38381
+ "parameters": {
38382
+ "args": {
38383
+ "type": "{ args: string; cwd?: string }",
38384
+ "description": "Parameter args"
38385
+ }
38386
+ },
38387
+ "required": [
38388
+ "args"
38389
+ ],
38390
+ "returns": "Promise<string>"
38391
+ },
38392
+ "awk": {
38393
+ "description": "",
38394
+ "parameters": {
38395
+ "args": {
38396
+ "type": "{ args: string; cwd?: string }",
38397
+ "description": "Parameter args"
38398
+ }
38399
+ },
38400
+ "required": [
38401
+ "args"
38402
+ ],
38403
+ "returns": "Promise<string>"
38404
+ },
38405
+ "setupToolsConsumer": {
38406
+ "description": "",
38407
+ "parameters": {
38408
+ "consumer": {
38409
+ "type": "Helper",
38410
+ "description": "Parameter consumer"
38411
+ }
38412
+ },
38413
+ "required": [
38414
+ "consumer"
38415
+ ],
38416
+ "returns": "void"
38417
+ }
38418
+ },
38419
+ "getters": {},
38420
+ "events": {},
38421
+ "state": {},
38422
+ "options": {},
38423
+ "envVars": []
37216
38424
  }
37217
38425
  ];
37218
38426