freddie 0.0.107 → 0.0.108

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.108",
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",
@@ -4,11 +4,20 @@ import { MATRIX_FILE } from './model-matrix.js'
4
4
  import { callLLM as bridgeCall, isReachable as bridgeReachable } from './acptoapi-bridge.js'
5
5
  export { matrixUsable } from './model-matrix.js'
6
6
 
7
- const _require = createRequire(import.meta.url)
8
- const sdk = _require('acptoapi')
7
+ // In browser bundles createRequire('acptoapi') resolves to an empty/stub
8
+ // module acptoapi is a node-only CJS package. Guard so consumers (browser
9
+ // freddie) fall through to the acptoapi-bridge HTTP path instead of crashing
10
+ // with 'sdk.buildAutoChain is not a function'.
11
+ let sdk = {}
12
+ try {
13
+ const _require = createRequire(import.meta.url)
14
+ sdk = _require('acptoapi') || {}
15
+ } catch {
16
+ sdk = {}
17
+ }
9
18
 
10
- export const PROVIDER_KEYS = sdk.PROVIDER_KEYS
11
- export const DEFAULTS = sdk.PROVIDER_DEFAULTS
19
+ export const PROVIDER_KEYS = sdk.PROVIDER_KEYS || {}
20
+ export const DEFAULTS = sdk.PROVIDER_DEFAULTS || {}
12
21
 
13
22
  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
23
 
@@ -45,7 +54,7 @@ function buildModel({ provider, model, inputModel }) {
45
54
  const links = pref.map(p => `${p.provider}/${p.model || DEFAULTS[p.provider] || ''}`.replace(/\/$/, '')).filter(s => s.includes('/'))
46
55
  if (links.length) return links.join(', ')
47
56
  }
48
- const auto = sdk.buildAutoChain(undefined)
57
+ const auto = typeof sdk.buildAutoChain === 'function' ? sdk.buildAutoChain(undefined) : []
49
58
  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
59
  if (keyed.length) return keyed.map(l => l.model).join(', ')
51
60
  return null
@@ -55,7 +64,7 @@ export function resolveCallLLM({ provider, model } = {}) {
55
64
  return async (input) => {
56
65
  const m = buildModel({ provider, model, inputModel: input.model })
57
66
  if (!m) {
58
- const status = sdk.getStatus().map(s => `${s.provider}(ok=${s.ok},fails=${s.failCount})`).join(', ')
67
+ const status = typeof sdk.getStatus === 'function' ? sdk.getStatus().map(s => `${s.provider}(ok=${s.ok},fails=${s.failCount})`).join(', ') : ''
59
68
  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
69
  }
61
70
  try {
@@ -69,6 +78,10 @@ export function resolveCallLLM({ provider, model } = {}) {
69
78
  if (/^queue\//.test(m)) opts.queuesMap = getConfigValue('agent.model_queues', {}) || {}
70
79
  if (m.includes(',') || /^queue\//.test(m)) opts.matrixSource = process.env.FREDDIE_MATRIX_URL || MATRIX_FILE
71
80
 
81
+ if (typeof sdk.chat !== 'function') {
82
+ // Browser context: no node-side sdk; route via HTTP bridge.
83
+ return await bridgeCall({ ...input, model: m })
84
+ }
72
85
  const r = await sdk.chat(opts)
73
86
  return adapt(r)
74
87
  } catch (e) {