@spinabot/brigade 1.19.4 → 1.20.0
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/convex/config.d.ts +2 -2
- package/convex/schema.d.ts +4 -4
- package/dist/agents/agent-loop.d.ts.map +1 -1
- package/dist/agents/agent-loop.js +54 -20
- package/dist/agents/agent-loop.js.map +1 -1
- package/dist/agents/content-quality-retry.d.ts.map +1 -1
- package/dist/agents/content-quality-retry.js +3 -22
- package/dist/agents/content-quality-retry.js.map +1 -1
- package/dist/agents/error-classifier.d.ts.map +1 -1
- package/dist/agents/error-classifier.js +2 -0
- package/dist/agents/error-classifier.js.map +1 -1
- package/dist/agents/memory/extract.d.ts.map +1 -1
- package/dist/agents/memory/extract.js +9 -44
- package/dist/agents/memory/extract.js.map +1 -1
- package/dist/agents/model-resolution.d.ts.map +1 -1
- package/dist/agents/model-resolution.js +9 -3
- package/dist/agents/model-resolution.js.map +1 -1
- package/dist/agents/ollama-native/ollama-json.d.ts +6 -0
- package/dist/agents/ollama-native/ollama-json.d.ts.map +1 -0
- package/dist/agents/ollama-native/ollama-json.js +126 -0
- package/dist/agents/ollama-native/ollama-json.js.map +1 -0
- package/dist/agents/ollama-native/register.d.ts +12 -0
- package/dist/agents/ollama-native/register.d.ts.map +1 -0
- package/dist/agents/ollama-native/register.js +37 -0
- package/dist/agents/ollama-native/register.js.map +1 -0
- package/dist/agents/ollama-native/stream.d.ts +59 -0
- package/dist/agents/ollama-native/stream.d.ts.map +1 -0
- package/dist/agents/ollama-native/stream.js +532 -0
- package/dist/agents/ollama-native/stream.js.map +1 -0
- package/dist/agents/payload-mutators.d.ts +0 -21
- package/dist/agents/payload-mutators.d.ts.map +1 -1
- package/dist/agents/payload-mutators.js +0 -58
- package/dist/agents/payload-mutators.js.map +1 -1
- package/dist/agents/thinking-fallback.d.ts.map +1 -1
- package/dist/agents/thinking-fallback.js +32 -10
- package/dist/agents/thinking-fallback.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/cli/commands/connect.d.ts.map +1 -1
- package/dist/cli/commands/connect.js +31 -43
- package/dist/cli/commands/connect.js.map +1 -1
- package/dist/cli/commands/update.d.ts +0 -6
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +9 -124
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/program/build-program.d.ts.map +1 -1
- package/dist/cli/program/build-program.js +1 -5
- package/dist/cli/program/build-program.js.map +1 -1
- package/dist/core/server.js +5 -24
- package/dist/core/server.js.map +1 -1
- package/dist/integrations/ollama.d.ts +29 -36
- package/dist/integrations/ollama.d.ts.map +1 -1
- package/dist/integrations/ollama.js +213 -78
- package/dist/integrations/ollama.js.map +1 -1
- package/dist/providers/catalog.js +1 -1
- package/dist/providers/validate-key.js +1 -1
- package/dist/system-prompt/guidance.d.ts.map +1 -1
- package/dist/system-prompt/guidance.js +2 -9
- package/dist/system-prompt/guidance.js.map +1 -1
- package/package.json +5 -2
- package/dist/agents/tool-name-repair.d.ts +0 -28
- package/dist/agents/tool-name-repair.d.ts.map +0 -1
- package/dist/agents/tool-name-repair.js +0 -168
- package/dist/agents/tool-name-repair.js.map +0 -1
- package/dist/shared/reasoning-tags.d.ts +0 -14
- package/dist/shared/reasoning-tags.d.ts.map +0 -1
- package/dist/shared/reasoning-tags.js +0 -71
- package/dist/shared/reasoning-tags.js.map +0 -1
|
@@ -9,12 +9,9 @@
|
|
|
9
9
|
* via the `~/.brigade/models.json` mechanism Pi exposes for custom providers.
|
|
10
10
|
* Each model the user has pulled becomes a Pi `Model<"openai-completions">`.
|
|
11
11
|
*
|
|
12
|
-
* Capability
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* IMAGES. We read that first and only fall back to name-pattern guessing when the
|
|
16
|
-
* probe is unavailable (older daemon / offline). Context window still isn't
|
|
17
|
-
* reported, so that stays a safe default.
|
|
12
|
+
* Capability inference is best-effort — Ollama doesn't tell us a model's
|
|
13
|
+
* context window or whether it reasons. We pattern-match the model name
|
|
14
|
+
* against well-known families and fall back to safe defaults.
|
|
18
15
|
*/
|
|
19
16
|
export interface OllamaModelSummary {
|
|
20
17
|
id: string;
|
|
@@ -41,30 +38,17 @@ export interface InferredCapabilities {
|
|
|
41
38
|
input: ("text" | "image")[];
|
|
42
39
|
}
|
|
43
40
|
export declare function inferOllamaModelCapabilities(modelId: string): InferredCapabilities;
|
|
44
|
-
/** What `/api/show` tells us about a model — all best-effort / nullable. */
|
|
45
|
-
export interface OllamaModelInfo {
|
|
46
|
-
/** Lower-cased capability tags, or null when the probe failed. */
|
|
47
|
-
capabilities: string[] | null;
|
|
48
|
-
/** The model's real max context window (tokens), or null when unknown. */
|
|
49
|
-
contextLength: number | null;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* AUTHORITATIVE model probe — POST /api/show for one model and return its
|
|
53
|
-
* capabilities (`"thinking"`/`"tools"`/`"vision"`) AND its real context window.
|
|
54
|
-
* This is the source of truth — far better than guessing from the model name.
|
|
55
|
-
* Best-effort: any failure (older Ollama, daemon down, timeout) yields nulls so
|
|
56
|
-
* callers fall back to `inferOllamaModelCapabilities`.
|
|
57
|
-
*/
|
|
58
|
-
export declare function fetchOllamaModelInfo(modelId: string, baseUrl?: string): Promise<OllamaModelInfo>;
|
|
59
|
-
/** Back-compat helper — capability tags only. Prefer `fetchOllamaModelInfo`. */
|
|
60
|
-
export declare function fetchOllamaCapabilities(modelId: string, baseUrl?: string): Promise<string[] | null>;
|
|
61
41
|
/**
|
|
62
|
-
* Write Brigade's Ollama provider entry into Pi's `~/.brigade/models.json
|
|
63
|
-
*
|
|
64
|
-
*
|
|
42
|
+
* Write Brigade's Ollama provider entry into Pi's `~/.brigade/models.json` as a
|
|
43
|
+
* NATIVE provider — `api:"ollama"` (dispatched to our /api/chat transport) with
|
|
44
|
+
* the base URL (no `/v1`). Pi's `ModelRegistry.refresh()` picks this up and
|
|
45
|
+
* exposes the models as regular Pi models from then on.
|
|
65
46
|
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
47
|
+
* Other providers' entries in the file are left untouched (we only rewrite the
|
|
48
|
+
* `ollama` key). Within the `ollama` entry, discovery OWNS the model list +
|
|
49
|
+
* capabilities (they're re-derived every run), but an operator-set real apiKey
|
|
50
|
+
* and custom headers are PRESERVED across the rewrite — only the keyless sentinel
|
|
51
|
+
* is replaced.
|
|
68
52
|
*/
|
|
69
53
|
export declare function writeOllamaToModelsJson(modelsJsonPath: string, baseUrl: string, models: OllamaModelSummary[]): Promise<void>;
|
|
70
54
|
/**
|
|
@@ -74,14 +58,23 @@ export declare function writeOllamaToModelsJson(modelsJsonPath: string, baseUrl:
|
|
|
74
58
|
*
|
|
75
59
|
* Called when the model registry MISSES an `ollama/<model>` id: the user has
|
|
76
60
|
* almost certainly `ollama pull`ed a model since onboarding. We re-query the
|
|
77
|
-
* local daemon, merge the full catalog into models.json (
|
|
78
|
-
* +
|
|
79
|
-
* requested model
|
|
80
|
-
* (daemon down, no models) it returns `
|
|
81
|
-
* normal "not registered" guidance.
|
|
61
|
+
* local daemon, merge the full catalog into models.json (native `api:"ollama"`
|
|
62
|
+
* routing + capability inference + zero cost), and return the CANONICAL catalog
|
|
63
|
+
* id of the requested model (or `null` if it isn't installed). Best-effort:
|
|
64
|
+
* never throws — on any failure (daemon down, no models) it returns `null` and
|
|
65
|
+
* the caller surfaces the normal "not registered" guidance.
|
|
82
66
|
*
|
|
83
|
-
* The caller is responsible for `modelRegistry.refresh()` + re-`find()`
|
|
84
|
-
* this resolves
|
|
67
|
+
* The caller is responsible for `modelRegistry.refresh()` + re-`find()` with the
|
|
68
|
+
* returned canonical id after this resolves non-null, so Pi picks up the
|
|
69
|
+
* freshly-written entries.
|
|
70
|
+
*/
|
|
71
|
+
export declare function rediscoverOllamaModel(modelsJsonPath: string, modelId: string, baseUrl?: string): Promise<string | null>;
|
|
72
|
+
/**
|
|
73
|
+
* One-time migration: rewrite a pre-existing OpenAI-compat Ollama provider entry
|
|
74
|
+
* (`api:"openai-completions"` + a `/v1` base URL) to the native shape
|
|
75
|
+
* (`api:"ollama"`, base URL without `/v1`). Idempotent + best-effort — existing
|
|
76
|
+
* users would otherwise stay silently on the degraded `/v1` path (no reliable
|
|
77
|
+
* native tool_calls) until they re-onboarded. Returns true when it rewrote.
|
|
85
78
|
*/
|
|
86
|
-
export declare function
|
|
79
|
+
export declare function migrateOllamaProviderToNative(modelsJsonPath: string): Promise<boolean>;
|
|
87
80
|
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/integrations/ollama.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/integrations/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoDH,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,MAAyB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA+C5G;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC5B;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAgElF;AA6DD;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC5C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqFf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CAC1C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAyB,GAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkCxB;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiC5F"}
|
|
@@ -9,24 +9,58 @@
|
|
|
9
9
|
* via the `~/.brigade/models.json` mechanism Pi exposes for custom providers.
|
|
10
10
|
* Each model the user has pulled becomes a Pi `Model<"openai-completions">`.
|
|
11
11
|
*
|
|
12
|
-
* Capability
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* IMAGES. We read that first and only fall back to name-pattern guessing when the
|
|
16
|
-
* probe is unavailable (older daemon / offline). Context window still isn't
|
|
17
|
-
* reported, so that stays a safe default.
|
|
12
|
+
* Capability inference is best-effort — Ollama doesn't tell us a model's
|
|
13
|
+
* context window or whether it reasons. We pattern-match the model name
|
|
14
|
+
* against well-known families and fall back to safe defaults.
|
|
18
15
|
*/
|
|
19
16
|
import * as fs from "node:fs/promises";
|
|
20
17
|
import path from "node:path";
|
|
21
18
|
import { tryGetRuntimeContext } from "../storage/runtime-context.js";
|
|
22
|
-
|
|
19
|
+
import { classifyUrlForSsrf } from "../infra/net/fetch-guard.js";
|
|
20
|
+
// 127.0.0.1, not "localhost": on IPv6-preferring hosts "localhost" resolves to
|
|
21
|
+
// ::1 while Ollama binds IPv4 → ECONNREFUSED. Use the explicit v4 loopback.
|
|
22
|
+
const DEFAULT_BASE_URL = "http://127.0.0.1:11434";
|
|
23
23
|
const TIMEOUT_MS = 5000;
|
|
24
|
+
// Placeholder apiKeys Brigade writes for keyless local Ollama. Treated as "no
|
|
25
|
+
// real credential" so a re-discovery rewrite doesn't mistake a sentinel for an
|
|
26
|
+
// operator-set key worth preserving. Kept in sync with the stream transport's set.
|
|
27
|
+
const OLLAMA_SENTINEL_API_KEYS = new Set([
|
|
28
|
+
"ollama-local-no-auth-required",
|
|
29
|
+
"ollama-local",
|
|
30
|
+
"ollama",
|
|
31
|
+
]);
|
|
32
|
+
// Cap simultaneous /api/show probes so a box with many pulled models doesn't
|
|
33
|
+
// fire dozens of concurrent requests (which stalls onboarding/rediscovery).
|
|
34
|
+
const SHOW_PROBE_CONCURRENCY = 8;
|
|
35
|
+
/** Map over items with a bounded worker pool (results keyed by input index). */
|
|
36
|
+
async function mapWithConcurrency(items, limit, fn) {
|
|
37
|
+
const results = new Array(items.length);
|
|
38
|
+
let next = 0;
|
|
39
|
+
const worker = async () => {
|
|
40
|
+
while (next < items.length) {
|
|
41
|
+
const idx = next++;
|
|
42
|
+
results[idx] = await fn(items[idx]);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
await Promise.all(Array.from({ length: Math.min(Math.max(1, limit), items.length || 1) }, worker));
|
|
46
|
+
return results;
|
|
47
|
+
}
|
|
24
48
|
/**
|
|
25
49
|
* Hit Ollama's `/api/tags` and return the user's locally-installed models.
|
|
26
50
|
* Throws a friendly error if the server isn't running or returns no models.
|
|
27
51
|
*/
|
|
28
52
|
export async function discoverOllamaModels(baseUrl = DEFAULT_BASE_URL) {
|
|
29
|
-
|
|
53
|
+
// Strip a trailing `/v1` (someone may pass the OpenAI-compat endpoint) + any
|
|
54
|
+
// trailing slashes, matching fetchOllamaModelInfo + writeOllamaToModelsJson —
|
|
55
|
+
// `/api/tags` is a native path, so `.../v1/api/tags` would 404.
|
|
56
|
+
const url = `${baseUrl.replace(/\/+$/, "").replace(/\/v1$/i, "")}/api/tags`;
|
|
57
|
+
// SSRF guard on the config-driven base URL. allowPrivateNetwork lets local /
|
|
58
|
+
// LAN Ollama through; only genuinely dangerous targets (cloud-metadata /
|
|
59
|
+
// link-local) are refused — no real Ollama listens there.
|
|
60
|
+
const ssrfReason = await classifyUrlForSsrf(url, { allowPrivateNetwork: true });
|
|
61
|
+
if (ssrfReason) {
|
|
62
|
+
throw new Error(`That Ollama server address isn't allowed (${ssrfReason}). Point it at your local or network Ollama.`);
|
|
63
|
+
}
|
|
30
64
|
const controller = new AbortController();
|
|
31
65
|
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
32
66
|
let response;
|
|
@@ -73,14 +107,29 @@ export function inferOllamaModelCapabilities(modelId) {
|
|
|
73
107
|
// - `qwen3.5*` — base chat, not the reasoning fork
|
|
74
108
|
// Originally `^qwen3\b` matched all of these and triggered the bug.
|
|
75
109
|
//
|
|
76
|
-
// Reasoning patterns that ARE safe to mark
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
// -
|
|
80
|
-
// - `
|
|
110
|
+
// Reasoning patterns that ARE safe to mark (dedicated reasoning models — they
|
|
111
|
+
// return STRUCTURED tool_calls + native `thinking` even with thinking on, so
|
|
112
|
+
// no prose-narration risk; anchored so they can't catch a tool-caller sibling):
|
|
113
|
+
// - `deepseek-r1*` — explicit r1 (reasoning) line
|
|
114
|
+
// - `qwq*` — Qwen with Questions (reasoning fork)
|
|
115
|
+
// - `*-thinking*` — explicit thinking variant naming convention
|
|
116
|
+
// - `gpt-oss*` — OpenAI open-weight reasoning (harmony format)
|
|
117
|
+
// - `magistral*` — Mistral's reasoning model (`^magistral` ≠ `mistral*`)
|
|
118
|
+
// - `phi4*-reasoning*` — Phi-4 reasoning variants (bare `phi4` stays non-reasoning)
|
|
119
|
+
// - `exaone-deep*` — LG EXAONE Deep reasoning line (`exaone3.5` excluded)
|
|
120
|
+
// - `smallthinker*` — SmallThinker ("thinker" ≠ "thinking", so anchored)
|
|
121
|
+
// - `o1*` / `o3*` — OpenAI o-series via Ollama (rare)
|
|
122
|
+
// Deliberately EXCLUDED (hybrid think/non-think, default non-reasoning, strong
|
|
123
|
+
// tool-callers): `qwen3`, `cogito`, `deepseek-v3.1` — forcing thinking on risks
|
|
124
|
+
// the prose-narration bug with no automatic net. Opt in via /thinking instead.
|
|
81
125
|
const reasoning = /^deepseek-r1\b/.test(id) ||
|
|
82
126
|
/^qwq\b/.test(id) ||
|
|
83
127
|
/-thinking\b/.test(id) ||
|
|
128
|
+
/^gpt-oss\b/.test(id) ||
|
|
129
|
+
/^magistral\b/.test(id) ||
|
|
130
|
+
/^phi4(?:-mini)?-reasoning\b/.test(id) ||
|
|
131
|
+
/^exaone-deep\b/.test(id) ||
|
|
132
|
+
/^smallthinker\b/.test(id) ||
|
|
84
133
|
/\bo1\b/.test(id) ||
|
|
85
134
|
/\bo3\b/.test(id);
|
|
86
135
|
// Vision-capable families — text+image input.
|
|
@@ -101,62 +150,68 @@ export function inferOllamaModelCapabilities(modelId) {
|
|
|
101
150
|
const input = vision ? ["text", "image"] : ["text"];
|
|
102
151
|
return { reasoning, contextWindow, maxTokens, input };
|
|
103
152
|
}
|
|
104
|
-
/** Pull `<arch>.context_length` out of `/api/show`'s `model_info` (the key is
|
|
105
|
-
* architecture-prefixed, e.g. `qwen3.context_length`). */
|
|
106
|
-
function extractContextLength(modelInfo) {
|
|
107
|
-
if (!modelInfo || typeof modelInfo !== "object")
|
|
108
|
-
return null;
|
|
109
|
-
for (const [k, v] of Object.entries(modelInfo)) {
|
|
110
|
-
if (k.endsWith(".context_length") && typeof v === "number" && Number.isFinite(v) && v > 0) {
|
|
111
|
-
return Math.floor(v);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
153
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
154
|
+
* Best-effort per-model probe of Ollama's `/api/show`. Returns whether the model
|
|
155
|
+
* accepts images (`vision` capability) and its real trained context window
|
|
156
|
+
* (`<arch>.context_length`). Any failure yields nulls so the caller falls back
|
|
157
|
+
* to the name-heuristic. NOTE: we deliberately do NOT derive `reasoning` from
|
|
158
|
+
* the `thinking` capability — defaulting local models to thinking-on turns them
|
|
159
|
+
* into narrators that emit tool intent as prose instead of structured calls, so
|
|
160
|
+
* reasoning stays name-heuristic (thinking off by default; opt in via /thinking).
|
|
122
161
|
*/
|
|
123
|
-
|
|
124
|
-
const url = `${baseUrl.replace(
|
|
162
|
+
async function fetchOllamaModelInfo(modelId, baseUrl = DEFAULT_BASE_URL) {
|
|
163
|
+
const url = `${baseUrl.replace(/\/+$/, "").replace(/\/v1$/i, "")}/api/show`;
|
|
164
|
+
// SSRF guard (same config-driven base URL as the turn traffic). Best-effort
|
|
165
|
+
// probe: on a blocked target, fall back to the name-heuristic rather than throw.
|
|
166
|
+
if (await classifyUrlForSsrf(url, { allowPrivateNetwork: true })) {
|
|
167
|
+
return { vision: null, contextLength: null };
|
|
168
|
+
}
|
|
125
169
|
const controller = new AbortController();
|
|
126
170
|
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
127
171
|
try {
|
|
128
172
|
const res = await fetch(url, {
|
|
129
173
|
method: "POST",
|
|
130
174
|
headers: { "Content-Type": "application/json" },
|
|
131
|
-
|
|
175
|
+
// Send both keys — modern Ollama reads `model`; older builds read `name`.
|
|
176
|
+
body: JSON.stringify({ model: modelId, name: modelId }),
|
|
132
177
|
signal: controller.signal,
|
|
133
178
|
});
|
|
134
179
|
if (!res.ok)
|
|
135
|
-
return {
|
|
180
|
+
return { vision: null, contextLength: null };
|
|
136
181
|
const body = (await res.json());
|
|
137
|
-
const
|
|
182
|
+
const caps = Array.isArray(body.capabilities)
|
|
138
183
|
? body.capabilities.map((c) => String(c).toLowerCase())
|
|
139
184
|
: null;
|
|
140
|
-
|
|
185
|
+
const vision = caps ? caps.includes("vision") : null;
|
|
186
|
+
let contextLength = null;
|
|
187
|
+
if (body.model_info && typeof body.model_info === "object") {
|
|
188
|
+
for (const [k, v] of Object.entries(body.model_info)) {
|
|
189
|
+
if (k.endsWith(".context_length") && typeof v === "number" && Number.isFinite(v) && v > 0) {
|
|
190
|
+
contextLength = Math.floor(v);
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return { vision, contextLength };
|
|
141
196
|
}
|
|
142
197
|
catch {
|
|
143
|
-
return {
|
|
198
|
+
return { vision: null, contextLength: null };
|
|
144
199
|
}
|
|
145
200
|
finally {
|
|
146
201
|
clearTimeout(timer);
|
|
147
202
|
}
|
|
148
203
|
}
|
|
149
|
-
/** Back-compat helper — capability tags only. Prefer `fetchOllamaModelInfo`. */
|
|
150
|
-
export async function fetchOllamaCapabilities(modelId, baseUrl = DEFAULT_BASE_URL) {
|
|
151
|
-
return (await fetchOllamaModelInfo(modelId, baseUrl)).capabilities;
|
|
152
|
-
}
|
|
153
204
|
/**
|
|
154
|
-
* Write Brigade's Ollama provider entry into Pi's `~/.brigade/models.json
|
|
155
|
-
*
|
|
156
|
-
*
|
|
205
|
+
* Write Brigade's Ollama provider entry into Pi's `~/.brigade/models.json` as a
|
|
206
|
+
* NATIVE provider — `api:"ollama"` (dispatched to our /api/chat transport) with
|
|
207
|
+
* the base URL (no `/v1`). Pi's `ModelRegistry.refresh()` picks this up and
|
|
208
|
+
* exposes the models as regular Pi models from then on.
|
|
157
209
|
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
210
|
+
* Other providers' entries in the file are left untouched (we only rewrite the
|
|
211
|
+
* `ollama` key). Within the `ollama` entry, discovery OWNS the model list +
|
|
212
|
+
* capabilities (they're re-derived every run), but an operator-set real apiKey
|
|
213
|
+
* and custom headers are PRESERVED across the rewrite — only the keyless sentinel
|
|
214
|
+
* is replaced.
|
|
160
215
|
*/
|
|
161
216
|
export async function writeOllamaToModelsJson(modelsJsonPath, baseUrl, models) {
|
|
162
217
|
let existing = { providers: {} };
|
|
@@ -169,36 +224,51 @@ export async function writeOllamaToModelsJson(modelsJsonPath, baseUrl, models) {
|
|
|
169
224
|
catch {
|
|
170
225
|
// File missing or unparseable — start fresh. Pi treats an absent file as no config.
|
|
171
226
|
}
|
|
172
|
-
//
|
|
173
|
-
|
|
174
|
-
//
|
|
175
|
-
|
|
176
|
-
|
|
227
|
+
// Native transport: base URL WITHOUT /v1 (Brigade registers api:"ollama" → /api/chat).
|
|
228
|
+
const nativeBaseUrl = baseUrl.replace(/\/+$/, "").replace(/\/v1$/i, "");
|
|
229
|
+
// Probe /api/show for real vision + context (bounded concurrency, best-effort);
|
|
230
|
+
// fall back to the name-heuristic when unreachable. Reasoning stays name-heuristic.
|
|
231
|
+
const modelDefs = await mapWithConcurrency(models, SHOW_PROBE_CONCURRENCY, async (m) => {
|
|
232
|
+
const caps = inferOllamaModelCapabilities(m.id);
|
|
177
233
|
const info = await fetchOllamaModelInfo(m.id, baseUrl);
|
|
178
|
-
const
|
|
179
|
-
const reasoning = caps ? caps.includes("thinking") : guess.reasoning;
|
|
180
|
-
const vision = caps ? caps.includes("vision") : guess.input.includes("image");
|
|
234
|
+
const vision = info.vision ?? caps.input.includes("image");
|
|
181
235
|
const input = vision ? ["text", "image"] : ["text"];
|
|
182
|
-
|
|
183
|
-
// guess (32k) is only a fallback. This value also drives the runtime
|
|
184
|
-
// num_ctx we inject, so an accurate number prevents silent truncation.
|
|
185
|
-
const contextWindow = info.contextLength ?? guess.contextWindow;
|
|
236
|
+
const contextWindow = info.contextLength ?? caps.contextWindow;
|
|
186
237
|
return {
|
|
187
238
|
id: m.id,
|
|
188
239
|
name: m.name + (m.parameterSize ? ` (${m.parameterSize})` : ""),
|
|
189
|
-
reasoning,
|
|
240
|
+
reasoning: caps.reasoning,
|
|
190
241
|
input,
|
|
191
242
|
contextWindow,
|
|
192
|
-
maxTokens:
|
|
243
|
+
maxTokens: caps.maxTokens,
|
|
193
244
|
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, // local = free
|
|
245
|
+
// Per-model baseUrl (belt-and-suspenders): the native stream reads
|
|
246
|
+
// model.baseUrl, so carry it on each model in case Pi's registry doesn't
|
|
247
|
+
// propagate the provider baseUrl onto registry-loaded models.
|
|
248
|
+
baseUrl: nativeBaseUrl,
|
|
194
249
|
};
|
|
195
|
-
})
|
|
250
|
+
});
|
|
251
|
+
// Preserve operator-set auth across a re-discovery rewrite: a remote/authed
|
|
252
|
+
// Ollama proxy may carry a REAL apiKey and/or custom headers under this entry.
|
|
253
|
+
// Discovery owns the model LIST, but must not silently wipe credentials — only
|
|
254
|
+
// fall back to the sentinel when no real key was set.
|
|
255
|
+
const prevOllama = existing.providers["ollama"];
|
|
256
|
+
const prevApiKey = typeof prevOllama?.apiKey === "string" && !OLLAMA_SENTINEL_API_KEYS.has(prevOllama.apiKey)
|
|
257
|
+
? prevOllama.apiKey
|
|
258
|
+
: undefined;
|
|
259
|
+
const prevHeaders = prevOllama?.headers && typeof prevOllama.headers === "object" && !Array.isArray(prevOllama.headers)
|
|
260
|
+
? prevOllama.headers
|
|
261
|
+
: undefined;
|
|
196
262
|
existing.providers["ollama"] = {
|
|
197
|
-
|
|
198
|
-
api
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
263
|
+
// Native transport: base URL WITHOUT /v1; Brigade registers api:"ollama"
|
|
264
|
+
// (→ /api/chat) so tool-calls + thinking come back structured.
|
|
265
|
+
baseUrl: nativeBaseUrl,
|
|
266
|
+
api: "ollama",
|
|
267
|
+
// Ollama (local) ignores the API key, but Pi requires apiKey to be set when
|
|
268
|
+
// defining custom models for a non-built-in provider. Preserve a real
|
|
269
|
+
// operator key if one was set; otherwise use a sentinel value.
|
|
270
|
+
apiKey: prevApiKey ?? "ollama-local-no-auth-required",
|
|
271
|
+
...(prevHeaders ? { headers: prevHeaders } : {}),
|
|
202
272
|
models: modelDefs,
|
|
203
273
|
};
|
|
204
274
|
// In convex mode resolveModelsPath routes to the OS cache dir, which may
|
|
@@ -228,14 +298,15 @@ export async function writeOllamaToModelsJson(modelsJsonPath, baseUrl, models) {
|
|
|
228
298
|
*
|
|
229
299
|
* Called when the model registry MISSES an `ollama/<model>` id: the user has
|
|
230
300
|
* almost certainly `ollama pull`ed a model since onboarding. We re-query the
|
|
231
|
-
* local daemon, merge the full catalog into models.json (
|
|
232
|
-
* +
|
|
233
|
-
* requested model
|
|
234
|
-
* (daemon down, no models) it returns `
|
|
235
|
-
* normal "not registered" guidance.
|
|
301
|
+
* local daemon, merge the full catalog into models.json (native `api:"ollama"`
|
|
302
|
+
* routing + capability inference + zero cost), and return the CANONICAL catalog
|
|
303
|
+
* id of the requested model (or `null` if it isn't installed). Best-effort:
|
|
304
|
+
* never throws — on any failure (daemon down, no models) it returns `null` and
|
|
305
|
+
* the caller surfaces the normal "not registered" guidance.
|
|
236
306
|
*
|
|
237
|
-
* The caller is responsible for `modelRegistry.refresh()` + re-`find()`
|
|
238
|
-
* this resolves
|
|
307
|
+
* The caller is responsible for `modelRegistry.refresh()` + re-`find()` with the
|
|
308
|
+
* returned canonical id after this resolves non-null, so Pi picks up the
|
|
309
|
+
* freshly-written entries.
|
|
239
310
|
*/
|
|
240
311
|
export async function rediscoverOllamaModel(modelsJsonPath, modelId, baseUrl = DEFAULT_BASE_URL) {
|
|
241
312
|
let discovered;
|
|
@@ -245,13 +316,77 @@ export async function rediscoverOllamaModel(modelsJsonPath, modelId, baseUrl = D
|
|
|
245
316
|
catch {
|
|
246
317
|
// Daemon unreachable / no models — let the caller surface the standard
|
|
247
318
|
// guidance (run `ollama pull`, check the daemon is up).
|
|
248
|
-
return
|
|
319
|
+
return null;
|
|
249
320
|
}
|
|
250
321
|
if (discovered.length === 0)
|
|
322
|
+
return null;
|
|
323
|
+
// Honor the "never throws" contract: writeOllamaToModelsJson can throw on an fs
|
|
324
|
+
// error (EACCES/ENOSPC/read-only cache dir). Swallow it → null so the caller
|
|
325
|
+
// surfaces the standard "not registered" guidance instead of an opaque reject.
|
|
326
|
+
try {
|
|
327
|
+
await writeOllamaToModelsJson(modelsJsonPath, baseUrl, discovered);
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
// Return the CANONICAL catalog id that matched, so the caller re-finds the
|
|
333
|
+
// EXACT id Pi registered (Pi's find is an exact id match — NOT tolerant). We
|
|
334
|
+
// match on id OR name, tolerating a leading `ollama/` provider prefix AND a
|
|
335
|
+
// missing `:latest` tag: a composed ref (`ollama/llama3.2`) or a tag-less id
|
|
336
|
+
// (`qwen3` when only `qwen3:latest` is installed) must resolve to the real
|
|
337
|
+
// catalog id, else it's a hard "model not registered" (Ollama has no synth
|
|
338
|
+
// fallback) EVEN THOUGH the model is pulled + in the catalog.
|
|
339
|
+
const wanted = modelId.trim().replace(/^ollama\//i, "");
|
|
340
|
+
const match = discovered.find((m) => m.id === wanted ||
|
|
341
|
+
m.name === wanted ||
|
|
342
|
+
m.id === `${wanted}:latest` ||
|
|
343
|
+
m.name === `${wanted}:latest`);
|
|
344
|
+
return match ? match.id : null;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* One-time migration: rewrite a pre-existing OpenAI-compat Ollama provider entry
|
|
348
|
+
* (`api:"openai-completions"` + a `/v1` base URL) to the native shape
|
|
349
|
+
* (`api:"ollama"`, base URL without `/v1`). Idempotent + best-effort — existing
|
|
350
|
+
* users would otherwise stay silently on the degraded `/v1` path (no reliable
|
|
351
|
+
* native tool_calls) until they re-onboarded. Returns true when it rewrote.
|
|
352
|
+
*/
|
|
353
|
+
export async function migrateOllamaProviderToNative(modelsJsonPath) {
|
|
354
|
+
let parsed;
|
|
355
|
+
try {
|
|
356
|
+
parsed = JSON.parse(await fs.readFile(modelsJsonPath, "utf8"));
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
return false; // no/invalid file → nothing to migrate
|
|
360
|
+
}
|
|
361
|
+
const entry = parsed.providers?.ollama;
|
|
362
|
+
if (!entry)
|
|
363
|
+
return false;
|
|
364
|
+
const baseUrl = typeof entry.baseUrl === "string" ? entry.baseUrl : "";
|
|
365
|
+
const needsMigration = entry.api !== "ollama" || /\/v1\/?$/i.test(baseUrl);
|
|
366
|
+
if (!needsMigration)
|
|
251
367
|
return false;
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
368
|
+
entry.api = "ollama";
|
|
369
|
+
if (baseUrl)
|
|
370
|
+
entry.baseUrl = baseUrl.replace(/\/+$/, "").replace(/\/v1$/i, "");
|
|
371
|
+
try {
|
|
372
|
+
await fs.writeFile(modelsJsonPath, JSON.stringify(parsed, null, 2), "utf8");
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
// Convex mode: the file above is the regenerable OS-cache mirror; the DURABLE
|
|
378
|
+
// copy is the sealed "models" blob. Push the migrated catalog there too, or the
|
|
379
|
+
// migration fixes only the cache and the next boot re-materialises the stale
|
|
380
|
+
// blob (openai-completions/v1) — migration would silently re-run forever and
|
|
381
|
+
// never persist. Mirrors writeOllamaToModelsJson's blob push.
|
|
382
|
+
const rctx = tryGetRuntimeContext();
|
|
383
|
+
if (rctx?.mode === "convex") {
|
|
384
|
+
await rctx.store.auth
|
|
385
|
+
.writeAuthFileBlob("main", "models", parsed)
|
|
386
|
+
.catch((err) => {
|
|
387
|
+
console.error(`brigade: models catalog migrate→convex failed — ${err.message}`);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
return true;
|
|
256
391
|
}
|
|
257
392
|
//# sourceMappingURL=ollama.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/integrations/ollama.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/integrations/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ function buildRequest(providerId, apiKey) {
|
|
|
32
32
|
case "ollama":
|
|
33
33
|
// Ollama runs locally; `/api/tags` is auth-free and lists installed models.
|
|
34
34
|
return {
|
|
35
|
-
url: "http://
|
|
35
|
+
url: "http://127.0.0.1:11434/api/tags",
|
|
36
36
|
init: { method: "GET" },
|
|
37
37
|
};
|
|
38
38
|
case "anthropic": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guidance.d.ts","sourceRoot":"","sources":["../../src/system-prompt/guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,kVAI0K,CAAC;AAEjN;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,aAAa,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAYT;AAID;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,+bAM4E,CAAC;AAIjH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,u7EAU4I,CAAC;AAIhL;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,6pDAU0D,CAAC;AAIvF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,quDAY4G,CAAC;AAIzI;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,qyJA+CmK,CAAC;AAInM;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,+nDAQiU,CAAC;AAI7V;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,wnGAUsP,CAAC;AAIrR;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,kxNA6CoF,CAAC;AAIrH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,+/BAS4E,CAAC;AAIrH;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"guidance.d.ts","sourceRoot":"","sources":["../../src/system-prompt/guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,kVAI0K,CAAC;AAEjN;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,aAAa,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAYT;AAID;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,+bAM4E,CAAC;AAIjH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,u7EAU4I,CAAC;AAIhL;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,6pDAU0D,CAAC;AAIvF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,quDAY4G,CAAC;AAIzI;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,qyJA+CmK,CAAC;AAInM;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,+nDAQiU,CAAC;AAI7V;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,wnGAUsP,CAAC;AAIrR;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,kxNA6CoF,CAAC;AAIrH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,+/BAS4E,CAAC;AAIrH;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAuBlF"}
|
|
@@ -386,16 +386,9 @@ export function pickModelFamilyGuidance(modelId) {
|
|
|
386
386
|
// Anthropic family — already follows the patterns the system prompt teaches.
|
|
387
387
|
if (/(?:^|\/)claude(?:\d|[-_.:]|$)/.test(id))
|
|
388
388
|
return null;
|
|
389
|
-
// Unknown / niche —
|
|
390
|
-
|
|
391
|
-
// happily answered "I'm Claude" / "I'm Ornith, powered by OpenAI and
|
|
392
|
-
// Anthropic". Give them the generic identity anchor so the base model's
|
|
393
|
-
// training identity never leaks.
|
|
394
|
-
return GENERIC_IDENTITY_GUIDANCE;
|
|
389
|
+
// Unknown / niche — fall through to no extra guidance.
|
|
390
|
+
return null;
|
|
395
391
|
}
|
|
396
|
-
const GENERIC_IDENTITY_GUIDANCE = `# Identity override
|
|
397
|
-
|
|
398
|
-
You are the assistant defined by the persona files above — you run inside Brigade. The underlying language model is only the engine; it is NOT your identity. When asked who or what you are, answer from the persona files. Never identify as the base model or its vendor — never say you are "Claude", "GPT", "ChatGPT", "Gemini", "Gemma", "Llama", "Qwen", "DeepSeek", "Ornith", "an OpenAI / Anthropic / Google model", "an open-source coding assistant", or "a large language model". If the persona files don't specify a name, call yourself Brigade.`;
|
|
399
392
|
const OPENAI_FAMILY_GUIDANCE = `# Identity override (OpenAI family)
|
|
400
393
|
|
|
401
394
|
Your baseline training tells you to identify as "ChatGPT", "GPT", "an AI assistant from OpenAI", "your coding assistant", "an AI coding assistant", or to identify with the project in your working directory. None of that applies here. When asked who you are, draw your identity from the persona files above — never say "I am ChatGPT" / "I'm GPT" / "I'm an AI coding assistant" / "I'm here to help you with this codebase".
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/system-prompt/guidance.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/system-prompt/guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,oFAAoF;AAEpF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;gNAIuK,CAAC;AAEjN;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,wBAAwB,CACvC,OAA2B,EAC3B,aAAiC;IAEjC,IAAI,CAAC,aAAa,IAAI,aAAa,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC5D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,uDAAuD;IACvD,IAAI,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,IAAI,CAAC;AACb,CAAC;AAED,oEAAoE;AAEpE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;gHAMyE,CAAC;AAEjH,4EAA4E;AAE5E;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;+KAUyI,CAAC;AAEhL,sFAAsF;AAEtF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;sFAUuD,CAAC;AAEvF,sFAAsF;AAEtF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;wIAYyG,CAAC;AAEzI,oGAAoG;AAEpG;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kMA+CgK,CAAC;AAEnM,4FAA4F;AAE5F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;4VAQ8T,CAAC;AAE7V,yGAAyG;AAEzG;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;oRAUmP,CAAC;AAErR,8FAA8F;AAE9F;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oHA6CiF,CAAC;AAErH,4GAA4G;AAE5G;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;oHASyE,CAAC;AAErH,6EAA6E;AAE7E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA2B;IAClE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,0EAA0E;IAC1E,2EAA2E;IAC3E,sDAAsD;IACtD,IAAI,gDAAgD,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/D,OAAO,sBAAsB,CAAC;IAC/B,CAAC;IACD,2EAA2E;IAC3E,yEAAyE;IACzE,qEAAqE;IACrE,6EAA6E;IAC7E,sEAAsE;IACtE,wCAAwC;IACxC,IAAI,yCAAyC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACxD,OAAO,sBAAsB,CAAC;IAC/B,CAAC;IACD,6EAA6E;IAC7E,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,uDAAuD;IACvD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,sBAAsB,GAAG;;;;0RAI2P,CAAC;AAE3R,MAAM,sBAAsB,GAAG;;;;uTAIwR,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spinabot/brigade",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.0",
|
|
4
4
|
"description": "Brigade — your personal AI crew",
|
|
5
5
|
"homepage": "https://brigade.spinabot.com",
|
|
6
6
|
"author": "Spinabot <hello@brigade-agent.ai>",
|
|
@@ -248,7 +248,10 @@
|
|
|
248
248
|
},
|
|
249
249
|
"exceljs": {
|
|
250
250
|
"uuid": "^11.1.1"
|
|
251
|
-
}
|
|
251
|
+
},
|
|
252
|
+
"@earendil-works/pi-ai": "0.79.9",
|
|
253
|
+
"@earendil-works/pi-agent-core": "0.79.9",
|
|
254
|
+
"@earendil-works/pi-tui": "0.79.9"
|
|
252
255
|
},
|
|
253
256
|
"keywords": [
|
|
254
257
|
"ai",
|