@letta-ai/letta-code 0.29.4 → 0.29.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/letta.js CHANGED
@@ -5462,7 +5462,7 @@ var package_default;
5462
5462
  var init_package = __esm(() => {
5463
5463
  package_default = {
5464
5464
  name: "@letta-ai/letta-code",
5465
- version: "0.29.4",
5465
+ version: "0.29.5",
5466
5466
  description: "Letta Code is a CLI tool for interacting with stateful Letta agents from the terminal.",
5467
5467
  type: "module",
5468
5468
  packageManager: "bun@1.3.0",
@@ -127383,6 +127383,9 @@ function validatePiProviderRegistration(providerName, config3) {
127383
127383
  }
127384
127384
 
127385
127385
  // src/backend/dev/pi-provider-mod-registry.ts
127386
+ function getPiProviderRegistryRevision() {
127387
+ return revisionCounter;
127388
+ }
127386
127389
  function bumpProviderRevision(providerName) {
127387
127390
  revisionCounter += 1;
127388
127391
  providerRevisions.set(providerName, revisionCounter);
@@ -345981,6 +345984,7 @@ async function loadLocalMods(options3) {
345981
345984
  const builtinCommandIds = new Set([...options3.builtinCommandIds ?? []]);
345982
345985
  const reservedToolNames = new Set([...options3.reservedToolNames ?? []]);
345983
345986
  const registry2 = createEmptyModRegistry(sources, generation2, capabilities, options3.registerCapabilitiesGlobally !== false);
345987
+ options3.onRegistryCreated?.(registry2);
345984
345988
  for (const source2 of sources) {
345985
345989
  for (const diagnostic of source2.diagnostics ?? []) {
345986
345990
  const owner = createModOwner(diagnostic.path, source2, generation2);
@@ -346191,6 +346195,13 @@ function createModEngine(options3) {
346191
346195
  const nextRegistry = await loadLocalMods({
346192
346196
  ...modOptions,
346193
346197
  generation: loadGeneration,
346198
+ onRegistryCreated: (registry2) => {
346199
+ loadingRegistry = registry2;
346200
+ if (!disposed && loadGeneration === generation2) {
346201
+ activeRegistry = registry2;
346202
+ publish();
346203
+ }
346204
+ },
346194
346205
  onChange: () => {
346195
346206
  if (!disposed && loadingRegistry && loadGeneration === generation2) {
346196
346207
  activeRegistry = loadingRegistry;
@@ -499514,6 +499525,8 @@ function ModelSelector({
499514
499525
  const [byokProviderAliases, setByokProviderAliases] = import_react91.useState(() => buildByokProviderAliases([]));
499515
499526
  const [openAICompatibleProxyHandles, setOpenAICompatibleProxyHandles] = import_react91.useState(() => getCachedOpenAICompatibleProxyHandles() ?? new Set);
499516
499527
  const [openAICompatibleProxyProviders, setOpenAICompatibleProxyProviders] = import_react91.useState(new Set);
499528
+ const providerRegistryRevision = import_react91.useSyncExternalStore(subscribePiProviderRegistry, getPiProviderRegistryRevision, getPiProviderRegistryRevision);
499529
+ const previousProviderRegistryRevision = import_react91.useRef(providerRegistryRevision);
499517
499530
  const mountedRef = import_react91.useRef(true);
499518
499531
  import_react91.useEffect(() => {
499519
499532
  mountedRef.current = true;
@@ -499576,8 +499589,12 @@ function ModelSelector({
499576
499589
  }
499577
499590
  });
499578
499591
  import_react91.useEffect(() => {
499592
+ if (previousProviderRegistryRevision.current !== providerRegistryRevision) {
499593
+ previousProviderRegistryRevision.current = providerRegistryRevision;
499594
+ clearAvailableModelsCache();
499595
+ }
499579
499596
  loadModels.current(forceRefreshOnMount ?? false);
499580
- }, [forceRefreshOnMount]);
499597
+ }, [forceRefreshOnMount, providerRegistryRevision]);
499581
499598
  import_react91.useEffect(() => {
499582
499599
  if (localModelCatalog) {
499583
499600
  setByokProviderAliases(buildByokProviderAliases([]));
@@ -500263,6 +500280,7 @@ var init_ModelSelector = __esm(async () => {
500263
500280
  init_available_models();
500264
500281
  init_model();
500265
500282
  init_remote_model_catalog();
500283
+ init_pi_provider_mod_registry();
500266
500284
  init_byok_providers();
500267
500285
  init_settings_manager();
500268
500286
  init_colors();
@@ -500549,8 +500567,9 @@ function ProviderSelector({
500549
500567
  const [awsProfiles, setAwsProfiles] = import_react94.useState([]);
500550
500568
  const [profileIndex, setProfileIndex] = import_react94.useState(0);
500551
500569
  const [isLoadingProfiles, setIsLoadingProfiles] = import_react94.useState(false);
500552
- const providers = import_react94.useMemo(() => getProviderConfigs(selectedTarget), [selectedTarget]);
500553
- const filteredProviders = import_react94.useMemo(() => filterProviderConfigs(providers, searchQuery), [providers, searchQuery]);
500570
+ import_react94.useSyncExternalStore(subscribePiProviderRegistry, getPiProviderRegistryRevision, getPiProviderRegistryRevision);
500571
+ const providers = getProviderConfigs(selectedTarget);
500572
+ const filteredProviders = filterProviderConfigs(providers, searchQuery);
500554
500573
  const showProviderStoreTabs = shouldShowProviderStoreTabs(hasCloudCredentials2);
500555
500574
  const connectedProviders = import_react94.useMemo(() => connectedProvidersByTarget[selectedTarget] ?? new Map, [connectedProvidersByTarget, selectedTarget]);
500556
500575
  const isLoading = isProviderTargetLoading({
@@ -501824,6 +501843,7 @@ function ProviderSelector({
501824
501843
  var import_react94, jsx_dev_runtime70, SOLID_LINE17 = "─", VISIBLE_PROVIDERS = 8;
501825
501844
  var init_ProviderSelector = __esm(async () => {
501826
501845
  init_available_models();
501846
+ init_pi_provider_mod_registry();
501827
501847
  init_use_terminal_width();
501828
501848
  init_byok_providers();
501829
501849
  init_chatgpt_usage_service();
@@ -541297,4 +541317,4 @@ function registerBunOAuthFlows() {
541297
541317
  registerBunOAuthFlows();
541298
541318
  await init_src5().then(() => exports_src2);
541299
541319
 
541300
- //# debugId=D4FE51D0A61DE3F364756E2164756E21
541320
+ //# debugId=E5837E6C26403C1164756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letta-ai/letta-code",
3
- "version": "0.29.4",
3
+ "version": "0.29.5",
4
4
  "description": "Letta Code is a CLI tool for interacting with stateful Letta agents from the terminal.",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.0",
@@ -15,6 +15,11 @@
15
15
  "timeoutMs": 15000,
16
16
  "reason": "Imports the real media module while Slack adapter tests replace it."
17
17
  },
18
+ {
19
+ "path": "src/cli/components/provider-mod-selector-refresh.test.tsx",
20
+ "timeoutMs": 15000,
21
+ "reason": "Renders Ink while mutating the backend mode, backend instance, provider registry, settings singleton, and model cache."
22
+ },
18
23
  {
19
24
  "path": "src/cli/message-search-cache-warm.test.ts",
20
25
  "timeoutMs": 15000,
@@ -13,8 +13,8 @@
13
13
  "src/cli/app/use-submit-handler.ts": 4077,
14
14
  "src/cli/components/AgentSelector.tsx": 1111,
15
15
  "src/cli/components/InputRich.tsx": 2219,
16
- "src/cli/components/ModelSelector.tsx": 1241,
17
- "src/cli/components/ProviderSelector.tsx": 1682,
16
+ "src/cli/components/ModelSelector.tsx": 1262,
17
+ "src/cli/components/ProviderSelector.tsx": 1692,
18
18
  "src/cli/components/ToolCallMessageRich.tsx": 1109,
19
19
  "src/cli/helpers/accumulator.ts": 1596,
20
20
  "src/cli/helpers/reflection-transcript.ts": 1956,
@@ -26,8 +26,8 @@
26
26
  "src/hooks/integration.test.ts": 1147,
27
27
  "src/index.ts": 2802,
28
28
  "src/mods/learning-harness.ts": 2434,
29
- "src/mods/mod-engine.test.ts": 2132,
30
- "src/mods/mod-engine.ts": 1838,
29
+ "src/mods/mod-engine.test.ts": 2153,
30
+ "src/mods/mod-engine.ts": 1847,
31
31
  "src/mods/package-installer.test.ts": 1248,
32
32
  "src/mods/package-installer.ts": 1201,
33
33
  "src/mods/package-registry.ts": 1033,