freddie 0.0.107 → 0.0.109

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "freddie",
3
- "version": "0.0.107",
3
+ "version": "0.0.109",
4
4
  "type": "module",
5
5
  "description": "Open JS agent harness built on pi-mono, floosie, xstate, and anentrypoint-design",
6
6
  "bin": {
@@ -26,8 +26,8 @@
26
26
  "@mariozechner/pi-ai": "^0.70.6",
27
27
  "@mariozechner/pi-coding-agent": "^0.70.6",
28
28
  "@mariozechner/pi-tui": "^0.70.6",
29
- "acptoapi": "^1.0.104",
30
- "anentrypoint-design": "^0.0.127",
29
+ "acptoapi": "^1.0.106",
30
+ "anentrypoint-design": "^0.0.132",
31
31
  "commander": "^14.0.0",
32
32
  "express": "^5.0.0",
33
33
  "flatspace": "^1.0.18",
@@ -1,14 +1,17 @@
1
- import { createRequire } from 'module'
2
1
  import { getConfigValue } from '../config.js'
3
2
  import { MATRIX_FILE } from './model-matrix.js'
4
3
  import { callLLM as bridgeCall, isReachable as bridgeReachable } from './acptoapi-bridge.js'
4
+ import * as sdkNs from 'acptoapi'
5
5
  export { matrixUsable } from './model-matrix.js'
6
6
 
7
- const _require = createRequire(import.meta.url)
8
- const sdk = _require('acptoapi')
7
+ // `acptoapi` is externalized by vite (browser) so the host environment
8
+ // supplies it (thebird ships docs/lib/acptoapi-browser.js via importmap).
9
+ // Node CLI gets the real CJS package. Defensive `|| {}` keeps the bundle
10
+ // boot-safe if either env hands back an empty namespace.
11
+ const sdk = (sdkNs && (sdkNs.default || sdkNs)) || {}
9
12
 
10
- export const PROVIDER_KEYS = sdk.PROVIDER_KEYS
11
- export const DEFAULTS = sdk.PROVIDER_DEFAULTS
13
+ export const PROVIDER_KEYS = sdk.PROVIDER_KEYS || {}
14
+ export const DEFAULTS = sdk.PROVIDER_DEFAULTS || {}
12
15
 
13
16
  const toTools = s => s?.length ? s.map(t => ({ type: 'function', function: { name: t.name, description: t.description || '', parameters: t.parameters || { type: 'object', properties: {} } } })) : undefined
14
17
 
@@ -45,7 +48,7 @@ function buildModel({ provider, model, inputModel }) {
45
48
  const links = pref.map(p => `${p.provider}/${p.model || DEFAULTS[p.provider] || ''}`.replace(/\/$/, '')).filter(s => s.includes('/'))
46
49
  if (links.length) return links.join(', ')
47
50
  }
48
- const auto = sdk.buildAutoChain(undefined)
51
+ const auto = typeof sdk.buildAutoChain === 'function' ? sdk.buildAutoChain(undefined) : []
49
52
  const keyed = Array.isArray(auto) ? auto.filter(l => { const p = l.model.split('/')[0]; const env = PROVIDER_KEYS[p]; return env && process.env[env] }) : []
50
53
  if (keyed.length) return keyed.map(l => l.model).join(', ')
51
54
  return null
@@ -55,7 +58,7 @@ export function resolveCallLLM({ provider, model } = {}) {
55
58
  return async (input) => {
56
59
  const m = buildModel({ provider, model, inputModel: input.model })
57
60
  if (!m) {
58
- const status = sdk.getStatus().map(s => `${s.provider}(ok=${s.ok},fails=${s.failCount})`).join(', ')
61
+ const status = typeof sdk.getStatus === 'function' ? sdk.getStatus().map(s => `${s.provider}(ok=${s.ok},fails=${s.failCount})`).join(', ') : ''
59
62
  throw new Error('no LLM backend reachable: set a provider API key or start acptoapi (http://127.0.0.1:4800/v1)' + (status ? ' | sampler: ' + status : ''))
60
63
  }
61
64
  try {
@@ -69,6 +72,10 @@ export function resolveCallLLM({ provider, model } = {}) {
69
72
  if (/^queue\//.test(m)) opts.queuesMap = getConfigValue('agent.model_queues', {}) || {}
70
73
  if (m.includes(',') || /^queue\//.test(m)) opts.matrixSource = process.env.FREDDIE_MATRIX_URL || MATRIX_FILE
71
74
 
75
+ if (typeof sdk.chat !== 'function') {
76
+ // Browser context: no node-side sdk; route via HTTP bridge.
77
+ return await bridgeCall({ ...input, model: m })
78
+ }
72
79
  const r = await sdk.chat(opts)
73
80
  return adapt(r)
74
81
  } catch (e) {
@@ -1,12 +1,11 @@
1
1
  // Upstream model enumeration lives in acptoapi. This module is a thin shim
2
2
  // over GET /v1/models so freddie has zero direct vendor connectivity.
3
- import { createRequire } from 'module'
4
3
  import { getAcptoapiUrl } from './acptoapi-bridge.js'
5
4
  import { saveConfigValue, getConfigValue } from '../config.js'
6
5
  import { logger } from '../observability/log.js'
6
+ import * as _sdkNs from 'acptoapi'
7
7
 
8
- const _require = createRequire(import.meta.url)
9
- const _sdk = _require('acptoapi')
8
+ const _sdk = (_sdkNs && (_sdkNs.default || _sdkNs)) || {}
10
9
  const log = logger('model-discovery')
11
10
 
12
11
  const NON_KEY_PROVIDERS = ['claude-cli', 'kilo', 'opencode', 'ollama']