@daniel156161/prism 0.2.82 → 0.2.83

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.
Files changed (23) hide show
  1. package/dist/prism-extensions/integrations/ai-memory-http.d.ts +1 -0
  2. package/dist/prism-extensions/integrations/ai-memory-http.js +12 -2
  3. package/dist/prism-extensions/integrations/ai-memory-http.js.map +1 -1
  4. package/dist/prism-extensions/integrations/ai-memory-system.d.ts +1 -0
  5. package/dist/prism-extensions/integrations/ai-memory-system.js +23 -14
  6. package/dist/prism-extensions/integrations/ai-memory-system.js.map +1 -1
  7. package/node_modules/@earendil-works/pi-coding-agent/dist/cli.js +1 -1
  8. package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +6 -11
  9. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +1 -1
  10. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +5 -0
  11. package/node_modules/@earendil-works/pi-coding-agent/dist/core/auth-storage.js +1 -1
  12. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/loader.js +3 -1
  13. package/node_modules/@earendil-works/pi-coding-agent/dist/core/prism-session-db.js +128 -0
  14. package/node_modules/@earendil-works/pi-coding-agent/dist/core/project-trust.js +1 -1
  15. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +1 -1
  16. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +39 -37
  17. package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +20 -16
  18. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/session-selector.js +4 -0
  19. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +233 -12
  20. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +1 -1
  21. package/package.json +2 -1
  22. package/src/prism-extensions/integrations/ai-memory-http.ts +11 -2
  23. package/src/prism-extensions/integrations/ai-memory-system.ts +22 -12
@@ -7,6 +7,7 @@
7
7
  * aborted". The tool call is still reported as an error to the model, but the
8
8
  * message now explains *why* it failed and which route/base URL was involved.
9
9
  */
10
+ export declare function configuredAiMemoryBaseUrl(env?: NodeJS.ProcessEnv): string | undefined;
10
11
  export declare function aiMemoryBaseUrl(env?: NodeJS.ProcessEnv): string;
11
12
  export declare function aiMemoryRequestTimeoutMs(env?: NodeJS.ProcessEnv): number;
12
13
  export declare function aiMemoryStatusTimeoutMs(env?: NodeJS.ProcessEnv): number;
@@ -7,14 +7,24 @@
7
7
  * aborted". The tool call is still reported as an error to the model, but the
8
8
  * message now explains *why* it failed and which route/base URL was involved.
9
9
  */
10
+ import { readSettings } from "../core/shared-config.js";
10
11
  import { formatApiFailure, formatInvalidJsonFailure, formatTransportFailure } from "./ai-memory-errors.js";
11
- const DEFAULT_BASE_URL = "http://127.0.0.1:8765";
12
12
  const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
13
13
  const DEFAULT_STATUS_TIMEOUT_MS = 1_500;
14
14
  const DEFAULT_INJECT_TIMEOUT_MS = 1_200;
15
15
  const DEFAULT_INJECT_CACHE_TTL_MS = 60_000;
16
+ export function configuredAiMemoryBaseUrl(env = process.env) {
17
+ const raw = env.PRISM_AI_MEMORY_BASE_URL ?? env.AI_MEMORY_BASE_URL ?? readSettings(undefined, env)?.aiMemory?.baseUrl ?? readSettings(undefined, env)?.aiMemoryBaseUrl;
18
+ if (typeof raw !== "string")
19
+ return undefined;
20
+ const trimmed = raw.trim().replace(/\/+$/, "");
21
+ return trimmed || undefined;
22
+ }
16
23
  export function aiMemoryBaseUrl(env = process.env) {
17
- return (env.PRISM_AI_MEMORY_BASE_URL || env.AI_MEMORY_BASE_URL || DEFAULT_BASE_URL).replace(/\/+$/, "");
24
+ const baseUrl = configuredAiMemoryBaseUrl(env);
25
+ if (!baseUrl)
26
+ throw new Error("AI Memory base URL is not configured. Set PRISM_AI_MEMORY_BASE_URL or aiMemory.baseUrl.");
27
+ return baseUrl;
18
28
  }
19
29
  function positiveIntegerSetting(value, fallback) {
20
30
  const parsed = Number(value);
@@ -1 +1 @@
1
- {"version":3,"file":"ai-memory-http.js","sourceRoot":"","sources":["../../../src/prism-extensions/integrations/ai-memory-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-memory-http.js","sourceRoot":"","sources":["../../../src/prism-extensions/integrations/ai-memory-http.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { type ThemeLike } from "../ui/tool-call-rendering.js";
4
4
  export declare function resetAiMemoryCaches(): void;
5
5
  export declare function shouldEnableAiMemory(env?: NodeJS.ProcessEnv): boolean;
6
6
  export declare function shouldInjectAiMemoryCandidates(env?: NodeJS.ProcessEnv): boolean;
7
+ export declare function shouldInjectAiMemoryAlwaysContext(env?: NodeJS.ProcessEnv): boolean;
7
8
  export declare function formatSearchResponse(data: any): string;
8
9
  export declare function formatAiMemoryCandidate(row: any): string;
9
10
  export declare function buildAiMemoryContextMessage(results: any[]): any | undefined;
@@ -1,7 +1,7 @@
1
1
  import { Type } from "typebox";
2
2
  import { readSettings } from "../core/shared-config.js";
3
3
  import { formatDegradedNotice } from "./ai-memory-errors.js";
4
- import { aiMemoryBaseUrl, aiMemoryInjectCacheTtlMs, aiMemoryInjectTimeoutMs, aiMemoryRequestTimeoutMs, aiMemoryStatusTimeoutMs, deleteJson, getJson, methodJson, postJson, putJson, } from "./ai-memory-http.js";
4
+ import { aiMemoryBaseUrl, configuredAiMemoryBaseUrl, aiMemoryInjectCacheTtlMs, aiMemoryInjectTimeoutMs, aiMemoryRequestTimeoutMs, aiMemoryStatusTimeoutMs, deleteJson, getJson, methodJson, postJson, putJson, } from "./ai-memory-http.js";
5
5
  import { isAiMemoryWriteTool, renderAiMemoryWriteResult } from "./ai-memory-write-preview.js";
6
6
  import { renderCollapsibleTextResult } from "../ui/collapsed-text-rendering.js";
7
7
  import { obsidianOpenUrl } from "./obsidian-memory.js";
@@ -50,7 +50,7 @@ export function shouldEnableAiMemory(env = process.env) {
50
50
  return envValue;
51
51
  const settings = readSettings(undefined, env);
52
52
  const settingsValue = booleanSetting(settings?.aiMemory?.enabled ?? settings?.aiMemoryEnabled);
53
- return settingsValue ?? true;
53
+ return settingsValue ?? configuredAiMemoryBaseUrl(env) !== undefined;
54
54
  }
55
55
  export function shouldInjectAiMemoryCandidates(env = process.env) {
56
56
  const envValue = booleanSetting(env.PRISM_AI_MEMORY_INJECT_CANDIDATES ?? env.PI_AI_MEMORY_INJECT_CANDIDATES);
@@ -58,7 +58,15 @@ export function shouldInjectAiMemoryCandidates(env = process.env) {
58
58
  return envValue;
59
59
  const settings = readSettings(undefined, env);
60
60
  const settingsValue = booleanSetting(settings?.aiMemory?.injectCandidates ?? settings?.aiMemoryInjectCandidates);
61
- return settingsValue ?? true;
61
+ return settingsValue ?? configuredAiMemoryBaseUrl(env) !== undefined;
62
+ }
63
+ export function shouldInjectAiMemoryAlwaysContext(env = process.env) {
64
+ const envValue = booleanSetting(env.PRISM_AI_MEMORY_INJECT_ALWAYS_CONTEXT ?? env.PI_AI_MEMORY_INJECT_ALWAYS_CONTEXT);
65
+ if (envValue !== undefined)
66
+ return envValue;
67
+ const settings = readSettings(undefined, env);
68
+ const settingsValue = booleanSetting(settings?.aiMemory?.injectAlwaysContext ?? settings?.aiMemoryInjectAlwaysContext);
69
+ return settingsValue ?? configuredAiMemoryBaseUrl(env) !== undefined;
62
70
  }
63
71
  function aiMemoryContextLimit(env = process.env) {
64
72
  return clampLimit(env.PRISM_AI_MEMORY_CONTEXT_LIMIT ?? env.PI_AI_MEMORY_CONTEXT_LIMIT, DEFAULT_CONTEXT_LIMIT);
@@ -535,18 +543,19 @@ export default function aiMemorySystemExtension(pi) {
535
543
  pi.on?.("before_agent_start", async (event, ctx) => {
536
544
  const patch = {};
537
545
  // Always-loaded durable context (mapped from 00 Kontext) is injected as a
538
- // system-prompt chunk so it remains in the cached prefix.
539
- try {
540
- const alwaysBlock = buildAlwaysContextMessage(await loadAlwaysContext())?.content?.trim();
541
- if (alwaysBlock) {
542
- const prev = String(event?.systemPrompt ?? "");
543
- patch.systemPrompt = `${prev}${prev ? "\n\n" : ""}${alwaysBlock}`;
546
+ // system-prompt chunk so it remains in the cached prefix. It is opt-in so a
547
+ // missing local AI Memory daemon does not produce startup/per-turn warnings.
548
+ if (shouldInjectAiMemoryAlwaysContext()) {
549
+ try {
550
+ const alwaysBlock = buildAlwaysContextMessage(await loadAlwaysContext())?.content?.trim();
551
+ if (alwaysBlock) {
552
+ const prev = String(event?.systemPrompt ?? "");
553
+ patch.systemPrompt = `${prev}${prev ? "\n\n" : ""}${alwaysBlock}`;
554
+ }
555
+ }
556
+ catch (error) {
557
+ reportBackgroundFailure(ctx, "always-context injection", error);
544
558
  }
545
- }
546
- catch (error) {
547
- // Best-effort, but never silent: a broken API would otherwise drop durable
548
- // context without anyone noticing.
549
- reportBackgroundFailure(ctx, "always-context injection", error);
550
559
  }
551
560
  // Query-specific candidates (independent of the always-context block).
552
561
  const query = String(event?.prompt ?? "").trim();
@@ -1 +1 @@
1
- {"version":3,"file":"ai-memory-system.js","sourceRoot":"","sources":["../../../src/prism-extensions/integrations/ai-memory-system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-memory-system.js","sourceRoot":"","sources":["../../../src/prism-extensions/integrations/ai-memory-system.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  import { APP_NAME } from "./config.js";
9
9
  import { configureHttpDispatcher } from "./core/http-dispatcher.js";
10
10
  import { main } from "./main.js";
11
- process.title = APP_NAME;
11
+ process.title = "▲";
12
12
  process.env.PI_CODING_AGENT = "true";
13
13
  process.env.AI_AGENT = "pi";
14
14
  process.emitWarning = (() => { });
@@ -321,10 +321,9 @@ export function getThemesDir() {
321
321
  if (isBunBinary) {
322
322
  return join(getPackageDir(), "theme");
323
323
  }
324
- // Theme is in modes/interactive/theme/ relative to src/ or dist/
325
- const packageDir = getPackageDir();
326
- const srcOrDist = existsSync(join(packageDir, "src")) ? "src" : "dist";
327
- return join(packageDir, srcOrDist, "modes", "interactive", "theme");
324
+ // Prism: use __dirname so built-in themes resolve from the actual dist/,
325
+ // not PI_PACKAGE_DIR which may point to a config-only dir without dist/.
326
+ return join(__dirname, "modes", "interactive", "theme");
328
327
  }
329
328
  /**
330
329
  * Get path to HTML export template directory (shipped with package)
@@ -336,9 +335,7 @@ export function getExportTemplateDir() {
336
335
  if (isBunBinary) {
337
336
  return join(getPackageDir(), "export-html");
338
337
  }
339
- const packageDir = getPackageDir();
340
- const srcOrDist = existsSync(join(packageDir, "src")) ? "src" : "dist";
341
- return join(packageDir, srcOrDist, "core", "export-html");
338
+ return join(__dirname, "core", "export-html");
342
339
  }
343
340
  /** Get path to package.json */
344
341
  export function getPackageJsonPath() {
@@ -370,9 +367,7 @@ export function getInteractiveAssetsDir() {
370
367
  if (isBunBinary) {
371
368
  return join(getPackageDir(), "assets");
372
369
  }
373
- const packageDir = getPackageDir();
374
- const srcOrDist = existsSync(join(packageDir, "src")) ? "src" : "dist";
375
- return join(packageDir, srcOrDist, "modes", "interactive", "assets");
370
+ return join(__dirname, "modes", "interactive", "assets");
376
371
  }
377
372
  /** Get path to a bundled interactive asset */
378
373
  export function getBundledInteractiveAssetPath(name) {
@@ -426,7 +421,7 @@ export function getModelsPath() {
426
421
  }
427
422
  /** Get path to auth.json */
428
423
  export function getAuthPath() {
429
- return join(getAgentDir(), "auth.json");
424
+ return process.env.PRISM_AUTH_PATH || process.env.PI_AUTH_PATH || join(getAgentDir(), "auth.json");
430
425
  }
431
426
  /** Get path to settings.json */
432
427
  export function getSettingsPath() {
@@ -55,7 +55,7 @@ export async function createAgentSessionServices(options) {
55
55
  const agentDir = options.agentDir ? resolvePath(options.agentDir) : getAgentDir();
56
56
  const modelRuntime = options.modelRuntime ??
57
57
  (await ModelRuntime.create({
58
- authPath: join(agentDir, "auth.json"),
58
+ authPath: process.env.PRISM_AUTH_PATH || process.env.PI_AUTH_PATH || join(agentDir, "auth.json"),
59
59
  modelsPath: join(agentDir, "models.json"),
60
60
  signal: options.modelRuntimeSignal,
61
61
  }));
@@ -2084,6 +2084,11 @@ export class AgentSession {
2084
2084
  // Context overflow is handled by compaction, not retry.
2085
2085
  if (isContextOverflow(message, this.model?.contextWindow ?? 0))
2086
2086
  return false;
2087
+ // Prism: provider account/quota usage limits need a user decision (wait, switch model, or cancel).
2088
+ // Do not auto-retry them with the generic exponential backoff, because provider reset
2089
+ // windows are often much longer than the retry delay.
2090
+ if (/GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient_quota|out of budget|quota exceeded|billing|usage[_\s-]*limit|usage_limit_reached/i.test(message.errorMessage || ""))
2091
+ return false;
2087
2092
  return isRetryableAssistantError(message);
2088
2093
  }
2089
2094
  /**
@@ -14,7 +14,7 @@ const AUTH_FILE_WRITE_OPTIONS = { encoding: "utf-8", mode: 0o600 };
14
14
  let sharedAuthFileReadState;
15
15
  export class FileAuthStorageBackend {
16
16
  authPath;
17
- constructor(authPath = join(getAgentDir(), "auth.json")) {
17
+ constructor(authPath = (process.env.PRISM_AUTH_PATH || process.env.PI_AUTH_PATH || join(getAgentDir(), "auth.json"))) {
18
18
  this.authPath = normalizePath(authPath);
19
19
  }
20
20
  ensureParentDir() {
@@ -9,6 +9,7 @@ import { fileURLToPath } from "node:url";
9
9
  import * as _bundledPiAgentCore from "@earendil-works/pi-agent-core";
10
10
  import * as _bundledPiAiCompat from "@earendil-works/pi-ai/compat";
11
11
  import * as _bundledPiAiOauth from "@earendil-works/pi-ai/oauth";
12
+ import * as _prismPiAiOpenAICompletions from "@earendil-works/pi-ai/api/openai-completions";
12
13
  import * as _bundledPiAiProviders from "@earendil-works/pi-ai/providers/all";
13
14
  import * as _bundledPiTui from "@earendil-works/pi-tui";
14
15
  import { createJiti } from "jiti/static";
@@ -21,12 +22,13 @@ import * as _bundledTypeboxValue from "typebox/value";
21
22
  import { CONFIG_DIR_NAME, getAgentDir, isBunBinary } from "../../config.js";
22
23
  // NOTE: This import works because loader.ts exports are NOT re-exported from index.ts,
23
24
  // avoiding a circular dependency. Extensions can import from @earendil-works/pi-coding-agent.
24
- import * as _bundledPiCodingAgent from "../../index.js";
25
+ import * as _bundledPiCodingAgent from "./index.js";
25
26
  import { resolvePath } from "../../utils/paths.js";
26
27
  import { createEventBus } from "../event-bus.js";
27
28
  import { execCommand } from "../exec.js";
28
29
  import { readPiManifest } from "../pi-manifest.js";
29
30
  import { createSyntheticSourceInfo } from "../source-info.js";
31
+ globalThis.__PRISM_PI_AI_OPENAI_COMPLETIONS__ = _prismPiAiOpenAICompletions;
30
32
  import { time } from "../timings.js";
31
33
  /** Modules available to extensions via virtualModules (for compiled Bun binary) */
32
34
  const VIRTUAL_MODULES = {
@@ -0,0 +1,128 @@
1
+ import { createRequire } from "node:module";
2
+ import { mkdirSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { homedir } from "node:os";
5
+ const require = createRequire(import.meta.url);
6
+ export function getSessionBackend() {
7
+ return process.env.PRISM_SESSION_BACKEND || "db";
8
+ }
9
+ export function findMostRecentSessionFromDb(sessionDir) {
10
+ try {
11
+ const db = openDb();
12
+ const row = db.prepare("SELECT file_path FROM sessions WHERE session_dir = ? ORDER BY updated_at DESC LIMIT 1").get(sessionDir);
13
+ db.close();
14
+ return row?.file_path || null;
15
+ } catch { return null; }
16
+ }
17
+ export function deleteSessionFromDb(filePath) {
18
+ if (!filePath) return;
19
+ try {
20
+ const db = openDb();
21
+ db.prepare("DELETE FROM sessions WHERE file_path = ?").run(filePath);
22
+ db.close();
23
+ } catch { }
24
+ }
25
+ function openDb() {
26
+ const prismDir = process.env.PRISM_CODING_AGENT_DIR || process.env.PI_CODING_AGENT_DIR || join(homedir(), ".prism");
27
+ const dbPath = join(prismDir, "sessions.db");
28
+ mkdirSync(dirname(dbPath), { recursive: true });
29
+ const { DatabaseSync } = require("node:sqlite");
30
+ const db = new DatabaseSync(dbPath);
31
+ db.exec("PRAGMA journal_mode=WAL");
32
+ db.exec("PRAGMA synchronous=NORMAL");
33
+ db.exec("CREATE TABLE IF NOT EXISTS sessions (id TEXT PRIMARY KEY, file_path TEXT UNIQUE, cwd TEXT, session_dir TEXT, created_at TEXT, updated_at TEXT, parent_session TEXT, version INTEGER, header_json TEXT NOT NULL)");
34
+ db.exec("CREATE TABLE IF NOT EXISTS entries (session_id TEXT NOT NULL, entry_id TEXT NOT NULL, idx INTEGER NOT NULL, parent_id TEXT, type TEXT, timestamp TEXT, data_json TEXT NOT NULL, PRIMARY KEY (session_id, entry_id), FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE)");
35
+ db.exec("CREATE INDEX IF NOT EXISTS idx_entries_session_idx ON entries(session_id, idx)");
36
+ db.exec("CREATE INDEX IF NOT EXISTS idx_sessions_updated ON sessions(updated_at)");
37
+ return db;
38
+ }
39
+ export function mirrorSessionFileToDb(filePath, entries, cwd, sessionDir) {
40
+ if (!filePath) return;
41
+ const header = entries.find((entry) => entry?.type === "session" && typeof entry.id === "string");
42
+ if (!header) return;
43
+ const rows = entries.filter((entry) => entry !== header);
44
+ const db = openDb();
45
+ const updatedAt = rows.at(-1)?.timestamp || header.timestamp || new Date().toISOString();
46
+ const insertSession = db.prepare("INSERT INTO sessions (id, file_path, cwd, session_dir, created_at, updated_at, parent_session, version, header_json) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET file_path=excluded.file_path, cwd=excluded.cwd, session_dir=excluded.session_dir, updated_at=excluded.updated_at, parent_session=excluded.parent_session, version=excluded.version, header_json=excluded.header_json");
47
+ const insertEntry = db.prepare("INSERT INTO entries (session_id, entry_id, idx, parent_id, type, timestamp, data_json) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(session_id, entry_id) DO UPDATE SET idx=excluded.idx, parent_id=excluded.parent_id, type=excluded.type, timestamp=excluded.timestamp, data_json=excluded.data_json");
48
+ const deleteEntries = db.prepare("DELETE FROM entries WHERE session_id = ?");
49
+ db.exec("BEGIN");
50
+ try {
51
+ insertSession.run(header.id, filePath, header.cwd || cwd || "", sessionDir || dirname(filePath), header.timestamp || "", updatedAt, header.parentSession || null, header.version || null, JSON.stringify(header));
52
+ deleteEntries.run(header.id);
53
+ rows.forEach((entry, idx) => insertEntry.run(header.id, typeof entry.id === "string" ? entry.id : String(idx), idx, entry.parentId ?? null, entry.type || null, entry.timestamp || null, JSON.stringify(entry)));
54
+ db.exec("COMMIT");
55
+ } catch (error) {
56
+ db.exec("ROLLBACK");
57
+ db.close();
58
+ throw error;
59
+ }
60
+ db.close();
61
+ }
62
+ export function mirrorEntryToDb(filePath, header, entry, cwd, sessionDir, index) {
63
+ if (!filePath || !header?.id || !entry) return;
64
+ const db = openDb();
65
+ const insertSession = db.prepare("INSERT INTO sessions (id, file_path, cwd, session_dir, created_at, updated_at, parent_session, version, header_json) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET file_path=excluded.file_path, cwd=excluded.cwd, session_dir=excluded.session_dir, updated_at=excluded.updated_at, parent_session=excluded.parent_session, version=excluded.version, header_json=excluded.header_json");
66
+ const insertEntry = db.prepare("INSERT INTO entries (session_id, entry_id, idx, parent_id, type, timestamp, data_json) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(session_id, entry_id) DO UPDATE SET idx=excluded.idx, parent_id=excluded.parent_id, type=excluded.type, timestamp=excluded.timestamp, data_json=excluded.data_json");
67
+ insertSession.run(header.id, filePath, header.cwd || cwd || "", sessionDir || dirname(filePath), header.timestamp || "", entry.timestamp || header.timestamp || new Date().toISOString(), header.parentSession || null, header.version || null, JSON.stringify(header));
68
+ insertEntry.run(header.id, typeof entry.id === "string" ? entry.id : String(index ?? 0), Number.isInteger(index) ? index : 0, entry.parentId ?? null, entry.type || null, entry.timestamp || null, JSON.stringify(entry));
69
+ db.close();
70
+ }
71
+ export function loadEntriesFromDb(filePath) {
72
+ if (!filePath) return null;
73
+ try {
74
+ const db = openDb();
75
+ const session = db.prepare("SELECT id, header_json FROM sessions WHERE file_path = ?").get(filePath);
76
+ if (!session) { db.close(); return null; }
77
+ const entryRows = db.prepare("SELECT data_json FROM entries WHERE session_id = ? ORDER BY idx ASC").all(session.id);
78
+ db.close();
79
+ return [JSON.parse(session.header_json), ...entryRows.map((r) => JSON.parse(r.data_json))];
80
+ } catch { return null; }
81
+ }
82
+ async function buildSessionsFromRows(db, sessionRows, onProgress) {
83
+ const sessions = [];
84
+ let loaded = 0;
85
+ const total = sessionRows.length;
86
+ for (const row of sessionRows) {
87
+ try {
88
+ const entryRows = db.prepare("SELECT data_json FROM entries WHERE session_id = ? ORDER BY idx ASC").all(row.id);
89
+ let messageCount = 0, firstMessage = "";
90
+ const allMessages = [];
91
+ let name;
92
+ for (const { data_json } of entryRows) {
93
+ const e = JSON.parse(data_json);
94
+ if (e.type === "session_info" && e.name?.trim()) name = e.name.trim();
95
+ if (e.type !== "message") continue;
96
+ messageCount++;
97
+ const msg = e.message;
98
+ if (!msg?.content || (msg.role !== "user" && msg.role !== "assistant")) continue;
99
+ const text = [].concat(msg.content).filter((p) => p?.type === "text").map((p) => p.text).join(" ").trim();
100
+ if (!text) continue;
101
+ allMessages.push(text);
102
+ if (!firstMessage && msg.role === "user") firstMessage = text;
103
+ }
104
+ sessions.push({ path: row.file_path || row.id, id: row.id, cwd: row.cwd || "", name, parentSessionPath: row.parent_session || undefined, created: new Date(row.created_at || 0), modified: new Date(row.updated_at || row.created_at || 0), messageCount, firstMessage: firstMessage || "(no messages)", allMessagesText: allMessages.join(" ") });
105
+ } catch {}
106
+ loaded++;
107
+ onProgress?.(loaded, total);
108
+ }
109
+ return sessions;
110
+ }
111
+ export async function listSessionsFromDb(dir, onProgress) {
112
+ try {
113
+ const db = openDb();
114
+ const sessionRows = db.prepare("SELECT id, file_path, cwd, created_at, updated_at, parent_session FROM sessions WHERE session_dir = ? ORDER BY updated_at DESC").all(dir);
115
+ const sessions = await buildSessionsFromRows(db, sessionRows, onProgress);
116
+ db.close();
117
+ return sessions;
118
+ } catch { return []; }
119
+ }
120
+ export async function listAllSessionsFromDb(onProgress) {
121
+ try {
122
+ const db = openDb();
123
+ const sessionRows = db.prepare("SELECT id, file_path, cwd, created_at, updated_at, parent_session FROM sessions ORDER BY updated_at DESC").all();
124
+ const sessions = await buildSessionsFromRows(db, sessionRows, onProgress);
125
+ db.close();
126
+ return sessions;
127
+ } catch { return []; }
128
+ }
@@ -2,7 +2,7 @@ import { CONFIG_DIR_NAME } from "../config.js";
2
2
  import { emitProjectTrustEvent } from "./extensions/runner.js";
3
3
  import { getProjectTrustOptions, hasTrustRequiringProjectResources, } from "./trust-manager.js";
4
4
  function formatProjectTrustPrompt(cwd) {
5
- return `Trust project folder?\n${cwd}\n\nThis allows pi to load ${CONFIG_DIR_NAME} settings and resources, install missing project packages, and execute project extensions.`;
5
+ return `Trust project folder?\n${cwd}\n\nThis allows Prism to load ${CONFIG_DIR_NAME} settings and resources, install missing project packages, and execute project extensions.`;
6
6
  }
7
7
  async function selectProjectTrustOption(cwd, ctx) {
8
8
  const options = getProjectTrustOptions(cwd, { includeSessionOnly: true });
@@ -67,7 +67,7 @@ export async function createAgentSession(options = {}) {
67
67
  const cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());
68
68
  const agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();
69
69
  let resourceLoader = options.resourceLoader;
70
- const authPath = options.agentDir ? join(agentDir, "auth.json") : undefined;
70
+ const authPath = process.env.PRISM_AUTH_PATH || process.env.PI_AUTH_PATH || (options.agentDir ? join(agentDir, "auth.json") : undefined);
71
71
  const modelsPath = options.agentDir ? join(agentDir, "models.json") : undefined;
72
72
  const modelRuntime = options.modelRuntime ?? (await ModelRuntime.create({ authPath, modelsPath }));
73
73
  const settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);
@@ -3,6 +3,7 @@ import { randomUUID } from "crypto";
3
3
  import { appendFileSync, closeSync, createReadStream, existsSync, mkdirSync, openSync, readdirSync, readSync, statSync, writeFileSync, } from "fs";
4
4
  import { readdir, stat } from "fs/promises";
5
5
  import { join, resolve } from "path";
6
+ import { findMostRecentSessionFromDb, getSessionBackend, listAllSessionsFromDb, listSessionsFromDb, loadEntriesFromDb, mirrorEntryToDb, mirrorSessionFileToDb } from "./prism-session-db.js";
6
7
  import { createInterface } from "readline";
7
8
  import { StringDecoder } from "string_decoder";
8
9
  import { getAgentDir as getDefaultAgentDir, getSessionsDir } from "../config.js";
@@ -634,12 +635,23 @@ export class SessionManager {
634
635
  this._rewriteFile();
635
636
  }
636
637
  this._buildIndex();
638
+ if (getSessionBackend() !== "file") { try { mirrorSessionFileToDb(this.sessionFile, this.fileEntries, this.cwd, this.sessionDir); } catch { } }
637
639
  this.flushed = true;
638
640
  }
639
641
  else {
640
- const explicitPath = this.sessionFile;
641
- this.newSession();
642
- this.sessionFile = explicitPath; // preserve explicit path from --session flag
642
+ const dbEntries = getSessionBackend() !== "file" ? loadEntriesFromDb(this.sessionFile) : null;
643
+ if (dbEntries) {
644
+ this.fileEntries = dbEntries;
645
+ const header = this.fileEntries.find((e) => e.type === "session");
646
+ this.sessionId = header?.id ?? createSessionId();
647
+ this._buildIndex();
648
+ if (getSessionBackend() !== "file") { try { mirrorSessionFileToDb(this.sessionFile, this.fileEntries, this.cwd, this.sessionDir); } catch {} }
649
+ this.flushed = true;
650
+ } else {
651
+ const explicitPath = this.sessionFile;
652
+ this.newSession();
653
+ this.sessionFile = explicitPath;
654
+ }
643
655
  }
644
656
  }
645
657
  newSession(options) {
@@ -693,6 +705,8 @@ export class SessionManager {
693
705
  _rewriteFile() {
694
706
  if (!this.persist || !this.sessionFile)
695
707
  return;
708
+ if (getSessionBackend() !== "file") { try { mirrorSessionFileToDb(this.sessionFile, this.fileEntries, this.cwd, this.sessionDir); } catch { } }
709
+ if (getSessionBackend() === "db") return;
696
710
  const fd = openSync(this.sessionFile, "w");
697
711
  try {
698
712
  for (const entry of this.fileEntries) {
@@ -724,30 +738,14 @@ export class SessionManager {
724
738
  _persist(entry) {
725
739
  if (!this.persist || !this.sessionFile)
726
740
  return;
727
- const hasAssistant = this.fileEntries.some((e) => e.type === "message" && e.message.role === "assistant");
728
- if (!hasAssistant) {
729
- if (this.flushed) {
730
- appendFileSync(this.sessionFile, `${JSON.stringify(entry)}\n`);
731
- }
732
- else {
733
- // Mark as not flushed so when assistant arrives, all entries get written
734
- this.flushed = false;
735
- }
736
- return;
737
- }
741
+ // Prism: persist every entry immediately. Pi defers session writes until the
742
+ // first assistant message, which can lose user prompts if multiple harnesses
743
+ // run at once or a process exits before the assistant response is recorded.
738
744
  if (!this.flushed) {
739
- const fd = openSync(this.sessionFile, "wx");
740
- try {
741
- for (const e of this.fileEntries) {
742
- writeFileSync(fd, `${JSON.stringify(e)}\n`);
743
- }
744
- }
745
- finally {
746
- closeSync(fd);
747
- }
745
+ if (getSessionBackend() !== "db") { const fd = openSync(this.sessionFile, "wx"); try { for (const e of this.fileEntries) { writeFileSync(fd, `${JSON.stringify(e)}\n`); } } finally { closeSync(fd); } }
748
746
  this.flushed = true;
749
747
  }
750
- else {
748
+ else if (getSessionBackend() !== "db") {
751
749
  appendFileSync(this.sessionFile, `${JSON.stringify(entry)}\n`);
752
750
  }
753
751
  }
@@ -756,6 +754,7 @@ export class SessionManager {
756
754
  this.byId.set(entry.id, entry);
757
755
  this.leafId = entry.id;
758
756
  this._persist(entry);
757
+ if (getSessionBackend() !== "file") { try { mirrorEntryToDb(this.sessionFile, this.fileEntries.find((e) => e.type === "session"), entry, this.cwd, this.sessionDir, this.fileEntries.length - 2); } catch { } }
759
758
  }
760
759
  /** Append a message as child of current leaf, then advance leaf. Returns entry id.
761
760
  * Does not allow writing CompactionSummaryMessage and BranchSummaryMessage directly.
@@ -1201,6 +1200,7 @@ export class SessionManager {
1201
1200
  header = firstEntry?.type === "session" ? firstEntry : null;
1202
1201
  }
1203
1202
  }
1203
+ if (!header && getSessionBackend() !== "file") { try { preloadedFileEntries = loadEntriesFromDb(resolvedPath) ?? undefined; header = preloadedFileEntries?.find((e) => e.type === "session") ?? null; } catch {} }
1204
1204
  const cwd = cwdOverride ?? (header ? getSessionHeaderCwd(header) : undefined) ?? process.cwd();
1205
1205
  // If no sessionDir provided, derive from file's parent directory
1206
1206
  const dir = sessionDir ? normalizePath(sessionDir) : resolve(resolvedPath, "..");
@@ -1214,7 +1214,7 @@ export class SessionManager {
1214
1214
  static continueRecent(cwd, sessionDir) {
1215
1215
  const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);
1216
1216
  const filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);
1217
- const mostRecent = findMostRecentSession(dir, filterCwd ? cwd : undefined);
1217
+ const mostRecent = getSessionBackend() === "file" ? findMostRecentSession(dir, filterCwd ? cwd : undefined) : findMostRecentSessionFromDb(dir);
1218
1218
  if (mostRecent) {
1219
1219
  return new SessionManager(cwd, dir, mostRecent, true);
1220
1220
  }
@@ -1234,7 +1234,8 @@ export class SessionManager {
1234
1234
  static forkFrom(sourcePath, targetCwd, sessionDir, options) {
1235
1235
  const resolvedSourcePath = resolvePath(sourcePath);
1236
1236
  const resolvedTargetCwd = resolvePath(targetCwd);
1237
- const sourceEntries = loadEntriesFromFile(resolvedSourcePath);
1237
+ let sourceEntries = loadEntriesFromFile(resolvedSourcePath);
1238
+ if (sourceEntries.length === 0 && getSessionBackend() !== "file") { try { sourceEntries = loadEntriesFromDb(resolvedSourcePath) ?? []; } catch {} }
1238
1239
  if (sourceEntries.length === 0) {
1239
1240
  throw new Error(`Cannot fork: source session file is empty or invalid: ${resolvedSourcePath}`);
1240
1241
  }
@@ -1263,12 +1264,10 @@ export class SessionManager {
1263
1264
  cwd: resolvedTargetCwd,
1264
1265
  parentSession: resolvedSourcePath,
1265
1266
  };
1266
- writeFileSync(newSessionFile, `${JSON.stringify(newHeader)}\n`, { flag: "wx" });
1267
- // Copy all non-header entries from source
1268
- for (const entry of sourceEntries) {
1269
- if (entry.type !== "session") {
1270
- appendFileSync(newSessionFile, `${JSON.stringify(entry)}\n`);
1271
- }
1267
+ if (getSessionBackend() !== "file") { try { mirrorSessionFileToDb(newSessionFile, [newHeader, ...sourceEntries.filter((e) => e.type !== "session")], resolvedTargetCwd, dir); } catch {} }
1268
+ if (getSessionBackend() !== "db") {
1269
+ writeFileSync(newSessionFile, `${JSON.stringify(newHeader)}\n`, { flag: "wx" });
1270
+ for (const entry of sourceEntries) { if (entry.type !== "session") appendFileSync(newSessionFile, `${JSON.stringify(entry)}\n`); }
1272
1271
  }
1273
1272
  return new SessionManager(resolvedTargetCwd, dir, newSessionFile, true);
1274
1273
  }
@@ -1280,11 +1279,14 @@ export class SessionManager {
1280
1279
  */
1281
1280
  static async list(cwd, sessionDir, onProgress) {
1282
1281
  const dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);
1283
- const filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);
1284
- const resolvedCwd = resolvePath(cwd);
1285
- const sessions = (await listSessionsFromDir(dir, onProgress)).filter((session) => !filterCwd || sessionCwdMatches(session.cwd, resolvedCwd));
1286
- sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
1287
- return sessions;
1282
+ if (getSessionBackend() === "file") {
1283
+ const filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);
1284
+ const resolvedCwd = resolvePath(cwd);
1285
+ const sessions = (await listSessionsFromDir(dir, onProgress)).filter((session) => !filterCwd || sessionCwdMatches(session.cwd, resolvedCwd));
1286
+ sessions.sort((a, b) => b.modified.getTime() - a.modified.getTime());
1287
+ return sessions;
1288
+ }
1289
+ return listSessionsFromDb(dir, onProgress);
1288
1290
  }
1289
1291
  static async listAll(sessionDirOrOnProgress, onProgress) {
1290
1292
  const customSessionDir = typeof sessionDirOrOnProgress === "string" ? normalizePath(sessionDirOrOnProgress) : undefined;
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * System prompt construction and project context loading
3
3
  */
4
- import { getDocsPath, getExamplesPath, getReadmePath } from "../config.js";
4
+ import { existsSync } from "node:fs";
5
+ import { join } from "node:path";
5
6
  import { formatSkillsForPrompt } from "./skills.js";
6
7
  /** Build the system prompt with tools, guidelines, and context */
7
8
  export function buildSystemPrompt(options) {
@@ -32,10 +33,22 @@ export function buildSystemPrompt(options) {
32
33
  prompt += `\nCurrent working directory: ${promptCwd}`;
33
34
  return prompt;
34
35
  }
35
- // Get absolute paths to documentation and examples
36
- const readmePath = getReadmePath();
37
- const docsPath = getDocsPath();
38
- const examplesPath = getExamplesPath();
36
+ // Get absolute paths to project documentation and examples.
37
+ // Only project docs are advertised here. Harness/pi docs can be linked into the project docs
38
+ // tree (for example docs/pi) when a project wants them in the prompt.
39
+ const resolvedCwd = cwd;
40
+ const existingPath = (filePath) => existsSync(filePath) ? filePath : undefined;
41
+ const firstExistingPath = (filePaths) => filePaths.find((filePath) => existsSync(filePath));
42
+ const projectReadmePath = firstExistingPath(["README.md", "README.MD", "readme.md"].map((name) => join(resolvedCwd, name)));
43
+ const projectDocsPath = existingPath(join(resolvedCwd, "docs"));
44
+ const projectExamplesPath = existingPath(join(resolvedCwd, "examples"));
45
+ const documentationLines = [];
46
+ if (projectReadmePath) documentationLines.push(`- Main documentation: ${projectReadmePath}`);
47
+ if (projectDocsPath) documentationLines.push(`- Additional docs: ${projectDocsPath}`);
48
+ if (projectExamplesPath) documentationLines.push(`- Examples: ${projectExamplesPath}`);
49
+ if (projectDocsPath || projectExamplesPath) documentationLines.push("- When reading these docs or examples, resolve docs/... under Additional docs and examples/... under Examples, not the current working directory");
50
+ if (projectDocsPath) documentationLines.push("- When working on this project, read the relevant docs and follow .md cross-references before implementing");
51
+ const documentationSection = documentationLines.length > 0 ? `\n\nProject documentation (read only when relevant):\n${documentationLines.join("\n")}` : "";
39
52
  // Build tools list based on selected tools.
40
53
  // A tool appears in Available tools only when the caller provides a one-line snippet.
41
54
  const tools = selectedTools || ["read", "bash", "edit", "write"];
@@ -70,7 +83,7 @@ export function buildSystemPrompt(options) {
70
83
  addGuideline("Be concise in your responses");
71
84
  addGuideline("Show file paths clearly when working with files");
72
85
  const guidelines = guidelinesList.map((g) => `- ${g}`).join("\n");
73
- let prompt = `You are an expert coding assistant operating inside pi, a coding agent harness. You help users by reading files, executing commands, editing code, and writing new files.
86
+ let prompt = `You are an expert coding assistant operating inside prism, a coding agent harness. You help users by reading files, executing commands, editing code, and writing new files.
74
87
 
75
88
  Available tools:
76
89
  ${toolsList}
@@ -78,16 +91,7 @@ ${toolsList}
78
91
  In addition to the tools above, you may have access to other custom tools depending on the project.
79
92
 
80
93
  Guidelines:
81
- ${guidelines}
82
-
83
- Pi documentation (read only when the user asks about pi itself, its SDK, extensions, themes, skills, or TUI):
84
- - Main documentation: ${readmePath}
85
- - Additional docs: ${docsPath}
86
- - Examples: ${examplesPath} (extensions, custom tools, SDK)
87
- - When reading pi docs or examples, resolve docs/... under Additional docs and examples/... under Examples, not the current working directory
88
- - When asked about: extensions (docs/extensions.md, examples/extensions/), themes (docs/themes.md), skills (docs/skills.md), prompt templates (docs/prompt-templates.md), TUI components (docs/tui.md), keybindings (docs/keybindings.md), SDK integrations (docs/sdk.md), custom providers (docs/custom-provider.md), adding models (docs/models.md), pi packages (docs/packages.md), environment variables (docs/environment-variables.md)
89
- - When working on pi topics, read the docs and examples, and follow .md cross-references before implementing
90
- - Always read pi .md files completely and follow links to related docs (e.g., tui.md for TUI API details)`;
94
+ ${guidelines}${documentationSection}`;
91
95
  if (appendSection) {
92
96
  prompt += appendSection;
93
97
  }
@@ -1,4 +1,5 @@
1
1
  import { spawnSync } from "node:child_process";
2
+ import { deleteSessionFromDb } from "../../../core/prism-session-db.js";
2
3
  import { existsSync } from "node:fs";
3
4
  import { unlink } from "node:fs/promises";
4
5
  import * as os from "node:os";
@@ -539,6 +540,9 @@ class SessionList {
539
540
  * Delete a session file, trying the `trash` CLI first, then falling back to unlink
540
541
  */
541
542
  async function deleteSessionFile(sessionPath) {
543
+ const _backend = process.env.PRISM_SESSION_BACKEND || "db";
544
+ if (_backend !== "file") { try { deleteSessionFromDb(sessionPath); } catch {} }
545
+ if (_backend === "db" && !existsSync(sessionPath)) return { ok: true, method: "trash" };
542
546
  // Try `trash` first (if installed)
543
547
  const trashArgs = sessionPath.startsWith("-") ? ["--", sessionPath] : [sessionPath];
544
548
  const trashResult = spawnSync("trash", trashArgs, { encoding: "utf-8" });
@@ -464,12 +464,15 @@ export class InteractiveMode {
464
464
  }));
465
465
  // Convert extension commands to SlashCommand format
466
466
  const builtinCommandNames = new Set(slashCommands.map((c) => c.name));
467
+ const prismInternalCommandExtensions = new Set(["caveman-mode.ts", "clear-session.ts", "git-commit.ts", "plan-command.ts", "voice-command.ts", "obsidian-memory.ts", "logseq-memory.ts", "honcho-memory.ts", "research-tools.ts", "ai-memory-system.ts", "rp-memory.ts", "manifest-provider.ts", "ollama-provider.ts", "toolbox.ts", "context-usage.ts", "prism-status.ts", "toolbar.ts", "pi-mcp-adapter"]);
468
+ const prismInternalCommandNpmPackages = new Set(["pi-mcp-adapter"]);
469
+ const isPrismInternalCommand = (cmd) => (() => { const prismExtensionPath = String(cmd.sourceInfo?.path || "").replaceAll("\\", "/"); const prismExtensionSource = String(cmd.sourceInfo?.source || ""); return prismInternalCommandExtensions.has(path.basename(prismExtensionPath)) || Array.from(prismInternalCommandNpmPackages).some((pkg) => prismExtensionSource === "npm:" + pkg || prismExtensionPath.includes("/node_modules/" + pkg + "/")); })();
467
470
  const extensionCommands = this.session.extensionRunner
468
471
  .getRegisteredCommands()
469
472
  .filter((cmd) => !builtinCommandNames.has(cmd.name))
470
473
  .map((cmd) => ({
471
474
  name: cmd.invocationName,
472
- description: this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),
475
+ description: isPrismInternalCommand(cmd) ? cmd.description : this.prefixAutocompleteDescription(cmd.description, cmd.sourceInfo),
473
476
  getArgumentCompletions: cmd.getArgumentCompletions,
474
477
  }));
475
478
  // Build skill commands from session.skills (if enabled)
@@ -658,7 +661,7 @@ export class InteractiveMode {
658
661
  await this.themeController.applyFromSettings();
659
662
  // Add header with keybindings from config (unless silenced)
660
663
  if (this.options.verbose || !this.settingsManager.getQuietStartup()) {
661
- const logo = theme.bold(theme.fg("accent", APP_NAME)) + theme.fg("dim", ` v${this.version}`);
664
+ const logo = " \u001b[38;5;196mp\u001b[38;5;202mr\u001b[38;5;226mi\u001b[38;5;46ms\u001b[38;5;51mm\u001b[0m v0.2.83";
662
665
  // Build startup instructions using keybinding hint helpers
663
666
  const hint = (keybinding, description) => keyHint(keybinding, description);
664
667
  const expandedInstructions = [
@@ -690,7 +693,7 @@ export class InteractiveMode {
690
693
  hint("app.tools.expand", "more"),
691
694
  ].join(theme.fg("muted", " · "));
692
695
  const compactOnboarding = theme.fg("dim", `Press ${keyText("app.tools.expand")} to show full startup help and loaded resources.`);
693
- const onboarding = theme.fg("dim", `Pi can explain its own features and look up its docs. Ask it how to use or extend Pi.`);
696
+ const onboarding = theme.fg("dim", `Prism can explain its own features and look up its docs. Ask it how to use or extend Prism.`);
694
697
  this.builtInHeader = new ExpandableText(() => `${logo}\n${compactInstructions}\n${compactOnboarding}\n\n${onboarding}`, () => `${logo}\n${expandedInstructions}\n\n${onboarding}`, this.getStartupExpansionState(), 1, 0);
695
698
  // Setup UI layout
696
699
  this.headerContainer.addChild(new Spacer(1));
@@ -727,10 +730,10 @@ export class InteractiveMode {
727
730
  const cwdBasename = path.basename(this.sessionManager.getCwd());
728
731
  const sessionName = this.sessionManager.getSessionName();
729
732
  if (sessionName) {
730
- this.ui.terminal.setTitle(`${APP_TITLE} - ${sessionName} - ${cwdBasename}`);
733
+ this.ui.terminal.setTitle(`▲ - ${sessionName} - ${cwdBasename}`);
731
734
  }
732
735
  else {
733
- this.ui.terminal.setTitle(`${APP_TITLE} - ${cwdBasename}`);
736
+ this.ui.terminal.setTitle(`▲ - ${cwdBasename}`);
734
737
  }
735
738
  }
736
739
  /**
@@ -794,6 +797,7 @@ export class InteractiveMode {
794
797
  }
795
798
  catch (error) {
796
799
  const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
800
+ errorMessage = this.humanizeUsageLimitError(errorMessage);
797
801
  this.showError(errorMessage);
798
802
  }
799
803
  }
@@ -804,7 +808,8 @@ export class InteractiveMode {
804
808
  }
805
809
  catch (error) {
806
810
  const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
807
- this.showError(errorMessage);
811
+ errorMessage = this.humanizeUsageLimitError(errorMessage);
812
+ this.showError(errorMessage);
808
813
  }
809
814
  }
810
815
  }
@@ -816,6 +821,7 @@ export class InteractiveMode {
816
821
  }
817
822
  catch (error) {
818
823
  const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
824
+ errorMessage = this.humanizeUsageLimitError(errorMessage);
819
825
  this.showError(errorMessage);
820
826
  }
821
827
  }
@@ -892,14 +898,19 @@ export class InteractiveMode {
892
898
  const entries = parseChangelog(changelogPath);
893
899
  if (!lastVersion) {
894
900
  // Fresh install - record the version, send telemetry, don't show changelog
895
- this.settingsManager.setLastChangelogVersion(VERSION);
896
- this.reportInstallTelemetry(VERSION);
901
+ this.settingsManager.setLastChangelogVersion("0.84.1");
902
+ this.reportInstallTelemetry("0.84.1");
897
903
  return undefined;
898
904
  }
899
905
  const newEntries = getNewEntries(entries, lastVersion);
906
+ if (entries.length > 0 && newEntries.length === entries.length) {
907
+ this.settingsManager.setLastChangelogVersion("0.84.1");
908
+ this.reportInstallTelemetry("0.84.1");
909
+ return normalizeChangelogLinks(entries[0].content, entries[0]);
910
+ }
900
911
  if (newEntries.length > 0) {
901
- this.settingsManager.setLastChangelogVersion(VERSION);
902
- this.reportInstallTelemetry(VERSION);
912
+ this.settingsManager.setLastChangelogVersion("0.84.1");
913
+ this.reportInstallTelemetry("0.84.1");
903
914
  return newEntries.map((e) => normalizeChangelogLinks(e.content, e)).join("\n\n");
904
915
  }
905
916
  return undefined;
@@ -1237,7 +1248,7 @@ export class InteractiveMode {
1237
1248
  const skillsResult = this.session.resourceLoader.getSkills();
1238
1249
  const promptsResult = this.session.resourceLoader.getPrompts();
1239
1250
  const themesResult = this.session.resourceLoader.getThemes();
1240
- const extensions = options?.extensions ??
1251
+ let extensions = options?.extensions ??
1241
1252
  this.session.resourceLoader
1242
1253
  .getExtensions()
1243
1254
  .extensions.filter((extension) => !extension.hidden)
@@ -1308,6 +1319,9 @@ export class InteractiveMode {
1308
1319
  const promptCompactList = formatCompactList(templates.map((template) => `/${template.name}`));
1309
1320
  addLoadedSection("Prompts", promptCompactList, templateList);
1310
1321
  }
1322
+ const prismInternalExtensions = new Set(["caveman-mode.ts", "clear-session.ts", "git-commit.ts", "plan-command.ts", "voice-command.ts", "obsidian-memory.ts", "logseq-memory.ts", "honcho-memory.ts", "research-tools.ts", "ai-memory-system.ts", "rp-memory.ts", "manifest-provider.ts", "ollama-provider.ts", "toolbox.ts", "context-usage.ts", "prism-status.ts", "toolbar.ts", "pi-mcp-adapter"]);
1323
+ const prismInternalNpmPackages = new Set(["pi-mcp-adapter"]);
1324
+ extensions = extensions.filter((extension) => !(() => { const prismExtensionPath = String(extension.path || "").replaceAll("\\", "/"); const prismExtensionSource = String(extension.sourceInfo?.source || ""); return prismInternalExtensions.has(path.basename(prismExtensionPath)) || Array.from(prismInternalNpmPackages).some((pkg) => prismExtensionSource === "npm:" + pkg || prismExtensionPath.includes("/node_modules/" + pkg + "/")); })());
1311
1325
  if (extensions.length > 0) {
1312
1326
  const groups = this.buildScopeGroups(extensions);
1313
1327
  const extList = this.formatScopeGroups(groups, {
@@ -1319,7 +1333,8 @@ export class InteractiveMode {
1319
1333
  }
1320
1334
  // Show loaded themes (excluding built-in)
1321
1335
  const loadedThemes = themesResult.themes;
1322
- const customThemes = loadedThemes.filter((t) => t.sourcePath);
1336
+ const prismInternalThemes = new Set(["soft-green"]);
1337
+ const customThemes = loadedThemes.filter((t) => t.sourcePath && !prismInternalThemes.has(t.name));
1323
1338
  if (customThemes.length > 0) {
1324
1339
  const groups = this.buildScopeGroups(customThemes.map((loadedTheme) => ({
1325
1340
  path: loadedTheme.sourcePath,
@@ -2395,6 +2410,27 @@ export class InteractiveMode {
2395
2410
  await this.handleCompactCommand(customInstructions);
2396
2411
  return;
2397
2412
  }
2413
+ if (text === "/plan" || text.startsWith("/plan ")) {
2414
+ const task = text.startsWith("/plan ") ? text.slice(6).trim() : "";
2415
+ this.editor.setText("");
2416
+ await this.startPrismPlanMode(task);
2417
+ return;
2418
+ }
2419
+ if (text === "/plan:approve") {
2420
+ this.editor.setText("");
2421
+ await this.approvePrismPlan();
2422
+ return;
2423
+ }
2424
+ if (text === "/plan:reject") {
2425
+ this.editor.setText("");
2426
+ this.rejectPrismPlan();
2427
+ return;
2428
+ }
2429
+ if (text === "/plan:cancel") {
2430
+ this.editor.setText("");
2431
+ this.cancelPrismPlan();
2432
+ return;
2433
+ }
2398
2434
  if (text === "/reload") {
2399
2435
  this.editor.setText("");
2400
2436
  await this.handleReloadCommand();
@@ -2659,6 +2695,8 @@ export class InteractiveMode {
2659
2695
  break;
2660
2696
  case "agent_settled":
2661
2697
  await this.checkShutdownRequested();
2698
+ void this.maybeShowUsageLimitRecoveryMenu(event);
2699
+ void this.maybeShowPrismPlanApprovalMenu(event);
2662
2700
  break;
2663
2701
  case "compaction_start": {
2664
2702
  if (this.settingsManager.getShowTerminalProgress()) {
@@ -2757,6 +2795,189 @@ export class InteractiveMode {
2757
2795
  }
2758
2796
  }
2759
2797
  }
2798
+ formatUsageLimitDuration(ms) {
2799
+ const totalMinutes = Math.ceil(ms / 60000);
2800
+ const hours = Math.floor(totalMinutes / 60);
2801
+ const minutes = totalMinutes % 60;
2802
+ const parts = [];
2803
+ if (hours > 0) parts.push(hours + "h");
2804
+ if (minutes > 0 || parts.length === 0) parts.push(minutes + "min");
2805
+ return parts.join(" ");
2806
+ }
2807
+ humanizeUsageLimitError(errorMessage) {
2808
+ return String(errorMessage || "").replace(/(~|about\s*)?(\d+)\s*min\b/gi, (_match, prefix, minutes) => {
2809
+ return (prefix || "") + this.formatUsageLimitDuration(Number(minutes) * 60 * 1000);
2810
+ });
2811
+ }
2812
+ extractUsageLimitWaitMs(errorMessage) {
2813
+ const text = String(errorMessage || "");
2814
+ const parsedSeconds = text.match(/"(?:resets_in_seconds|X-Codex-Primary-Reset-After-Seconds|Retry-After)"\s*:?\s*"?(\d+)"?/i)?.[1];
2815
+ if (parsedSeconds) return Number(parsedSeconds) * 1000;
2816
+ const resetAt = text.match(/"(?:resets_at|X-Codex-Primary-Reset-At)"\s*:?\s*"?(\d+)"?/i)?.[1];
2817
+ if (resetAt) {
2818
+ const resetMs = Number(resetAt) * 1000 - Date.now();
2819
+ if (Number.isFinite(resetMs) && resetMs > 0) return resetMs;
2820
+ }
2821
+ const hours = text.match(/(?:~|about\s*)?(\d+)\s*h(?:our)?/i)?.[1];
2822
+ if (hours) return Number(hours) * 60 * 60 * 1000;
2823
+ const minutes = text.match(/(?:~|about\s*)?(\d+)\s*min/i)?.[1];
2824
+ if (minutes) return Number(minutes) * 60 * 1000;
2825
+ const seconds = text.match(/(?:~|about\s*)?(\d+)\s*s(?:ec|econd)?/i)?.[1];
2826
+ if (seconds) return Number(seconds) * 1000;
2827
+ return 5 * 60 * 1000;
2828
+ }
2829
+ getUsageLimitError(event) {
2830
+ const last = event?.messages?.[event.messages.length - 1];
2831
+ let errorMessage = last?.errorMessage || last?.content?.find?.((block) => block?.type === "text")?.text || "";
2832
+ if (last?.role !== "assistant" || last?.stopReason !== "error") return undefined;
2833
+ errorMessage = this.humanizeUsageLimitError(errorMessage);
2834
+ return /usage limit|try again in/i.test(errorMessage) ? String(errorMessage) : undefined;
2835
+ }
2836
+ removeLastAssistantErrorFromState() {
2837
+ const messages = this.agent.state.messages;
2838
+ const last = messages[messages.length - 1];
2839
+ if (last?.role === "assistant" && last?.stopReason === "error") this.agent.state.messages = messages.slice(0, -1);
2840
+ }
2841
+ async continueAfterUsageLimitRecovery() {
2842
+ try {
2843
+ await this.agent.continue();
2844
+ } catch (error) {
2845
+ this.showError(error instanceof Error ? error.message : String(error));
2846
+ }
2847
+ }
2848
+ maybeShowUsageLimitRecoveryMenu(event) {
2849
+ const errorMessage = this.getUsageLimitError(event);
2850
+ if (!errorMessage) return;
2851
+ const delayMs = this.extractUsageLimitWaitMs(errorMessage);
2852
+ const waitLabel = "Wait " + this.formatUsageLimitDuration(delayMs) + " then retry";
2853
+ this.showSelector((done) => {
2854
+ const selector = new ExtensionSelectorComponent("Usage limit hit", [waitLabel, "Change model and retry", "Cancel"], async (selected) => {
2855
+ done();
2856
+ if (selected === "Cancel") return;
2857
+ this.removeLastAssistantErrorFromState();
2858
+ if (selected === waitLabel) {
2859
+ const endTime = Date.now() + delayMs;
2860
+ const updateCountdown = () => {
2861
+ const remaining = Math.max(0, endTime - Date.now());
2862
+ this.showStatus("Waiting " + this.formatUsageLimitDuration(remaining) + " for usage limit, then retrying...");
2863
+ this.ui.requestRender();
2864
+ };
2865
+ updateCountdown();
2866
+ const countdownInterval = setInterval(updateCountdown, 60000);
2867
+ setTimeout(() => { clearInterval(countdownInterval); void this.continueAfterUsageLimitRecovery(); }, delayMs);
2868
+ return;
2869
+ }
2870
+ this.showUsageLimitModelSelector();
2871
+ }, () => {
2872
+ done();
2873
+ this.ui.requestRender();
2874
+ }, { tui: this.ui });
2875
+ return { component: selector, focus: selector };
2876
+ });
2877
+ }
2878
+ showUsageLimitModelSelector(initialSearchInput) {
2879
+ this.showSelector((done) => {
2880
+ const selector = new ModelSelectorComponent(this.ui, this.session.model, this.settingsManager, this.session.modelRegistry, this.session.scopedModels, async (model) => {
2881
+ try {
2882
+ await this.session.setModel(model);
2883
+ this.footer.invalidate();
2884
+ this.updateEditorBorderColor();
2885
+ done();
2886
+ this.showStatus("Model: " + model.id + "; retrying...");
2887
+ void this.maybeWarnAboutAnthropicSubscriptionAuth(model);
2888
+ this.checkDaxnutsEasterEgg(model);
2889
+ void this.continueAfterUsageLimitRecovery();
2890
+ } catch (error) {
2891
+ done();
2892
+ this.showError(error instanceof Error ? error.message : String(error));
2893
+ }
2894
+ }, () => {
2895
+ done();
2896
+ this.ui.requestRender();
2897
+ }, initialSearchInput);
2898
+ return { component: selector, focus: selector };
2899
+ });
2900
+ }
2901
+ getPrismReadOnlyToolNames() {
2902
+ const readOnly = new Set(["read", "grep", "find", "ls", "obsidian_memory_read", "obsidian_memory_search", "obsidian_memory_list", "web_search", "web_fetch"]);
2903
+ return this.session.getActiveToolNames().filter((name) => readOnly.has(name));
2904
+ }
2905
+ setPrismPlanStatus(enabled) {
2906
+ this.prismPlanMode = enabled;
2907
+ this.setExtensionStatus("prism-mode", enabled ? "[Plan]" : undefined);
2908
+ this.footer.invalidate();
2909
+ }
2910
+ async startPrismPlanMode(task) {
2911
+ if (!this.prismPlanPreviousTools) this.prismPlanPreviousTools = this.session.getActiveToolNames();
2912
+ if (this.prismPlanLeafId === undefined) this.prismPlanLeafId = this.session.sessionManager.getLeafId();
2913
+ this.session.setActiveToolsByName(this.getPrismReadOnlyToolNames());
2914
+ this.setPrismPlanStatus(true);
2915
+ globalThis.__PRISM_MANIFEST_TIER_OVERRIDE__ = "plan";
2916
+ const prompt = "PLAN MODE ACTIVE. You must only inspect and plan. Do not modify files or run mutating commands. Ask concise clarification questions if needed. When ready, write the full implementation plan, then end with exactly: /plan:ready\n\nTask: " + (task || "Create an implementation plan for the user's next change.");
2917
+ await this.session.prompt(prompt);
2918
+ }
2919
+ getPrismLastAssistantText(event) {
2920
+ const last = event?.messages?.[event.messages.length - 1];
2921
+ if (last?.role !== "assistant") return "";
2922
+ return (last.content || []).map((block) => block?.type === "text" ? block.text || "" : "").join("\n");
2923
+ }
2924
+ maybeShowPrismPlanApprovalMenu(event) {
2925
+ if (!this.prismPlanMode) return;
2926
+ const text = this.getPrismLastAssistantText(event);
2927
+ if (!text.includes("/plan:ready")) return;
2928
+ this.prismPlanText = text.replace("/plan:ready", "").trim();
2929
+ this.showSelector((done) => {
2930
+ const selector = new ExtensionSelectorComponent("Plan ready", ["Approve -> make changes", "Reject -> add more context", "Cancel plan"], async (selected) => {
2931
+ done();
2932
+ if (selected.startsWith("Approve")) return void this.approvePrismPlan();
2933
+ if (selected.startsWith("Reject")) return this.rejectPrismPlan();
2934
+ this.cancelPrismPlan();
2935
+ }, () => {
2936
+ done();
2937
+ this.ui.requestRender();
2938
+ }, { tui: this.ui });
2939
+ return { component: selector, focus: selector };
2940
+ });
2941
+ }
2942
+ restorePrismPlanTools() {
2943
+ if (this.prismPlanPreviousTools) this.session.setActiveToolsByName(this.prismPlanPreviousTools);
2944
+ this.prismPlanPreviousTools = undefined;
2945
+ if (globalThis.__PRISM_MANIFEST_TIER_OVERRIDE__ === "plan") globalThis.__PRISM_MANIFEST_TIER_OVERRIDE__ = undefined;
2946
+ this.setPrismPlanStatus(false);
2947
+ }
2948
+ restorePrismPlanBranch() {
2949
+ if (this.prismPlanLeafId === undefined) return;
2950
+ if (this.prismPlanLeafId === null) {
2951
+ this.session.sessionManager.resetLeaf();
2952
+ } else {
2953
+ this.session.sessionManager.branch(this.prismPlanLeafId);
2954
+ }
2955
+ this.agent.state.messages = this.session.sessionManager.buildSessionContext().messages;
2956
+ this.prismPlanLeafId = undefined;
2957
+ }
2958
+ async approvePrismPlan() {
2959
+ if (!this.prismPlanMode) return this.showWarning("No active plan to approve.");
2960
+ const planText = this.prismPlanText || "";
2961
+ this.prismPlanText = undefined;
2962
+ this.restorePrismPlanBranch();
2963
+ this.restorePrismPlanTools();
2964
+ await this.session.prompt("Implement this plan:\n\n" + planText);
2965
+ }
2966
+ rejectPrismPlan() {
2967
+ if (!this.prismPlanMode) return this.showWarning("No active plan to reject.");
2968
+ this.prismPlanText = undefined;
2969
+ this.editor.setText("/plan ");
2970
+ this.showStatus("Add more context after /plan and submit.");
2971
+ this.ui.requestRender();
2972
+ }
2973
+ cancelPrismPlan() {
2974
+ if (!this.prismPlanMode) return this.showWarning("No active plan to cancel.");
2975
+ this.restorePrismPlanBranch();
2976
+ this.prismPlanText = undefined;
2977
+ this.restorePrismPlanTools();
2978
+ this.showStatus("Plan cancelled");
2979
+ this.ui.requestRender();
2980
+ }
2760
2981
  /** Extract text content from a user message */
2761
2982
  getUserMessageText(message) {
2762
2983
  if (message.role !== "user")
@@ -202,7 +202,7 @@ export class CombinedAutocompleteProvider {
202
202
  prefix: atPrefix,
203
203
  };
204
204
  }
205
- if (!options.force && textBeforeCursor.startsWith("/")) {
205
+ if (textBeforeCursor.startsWith("/")) {
206
206
  const spaceIndex = textBeforeCursor.indexOf(" ");
207
207
  if (spaceIndex === -1) {
208
208
  const prefix = textBeforeCursor.slice(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daniel156161/prism",
3
- "version": "0.2.82",
3
+ "version": "0.2.83",
4
4
  "description": "Prism-branded wrapper around pi that stores config in ~/.prism",
5
5
  "type": "module",
6
6
  "engines": {
@@ -27,6 +27,7 @@
27
27
  "dependencies": {
28
28
  "@earendil-works/pi-ai": "^0.84.1",
29
29
  "@earendil-works/pi-coding-agent": "^0.84.1",
30
+ "eventsource": "^3.0.7",
30
31
  "pi-mcp-adapter": "^2.21.2",
31
32
  "pkce-challenge": "^6.0.0",
32
33
  "typebox": "^1.3.11"
@@ -8,16 +8,25 @@
8
8
  * message now explains *why* it failed and which route/base URL was involved.
9
9
  */
10
10
 
11
+ import { readSettings } from "../core/shared-config.js"
11
12
  import { formatApiFailure, formatInvalidJsonFailure, formatTransportFailure, type AiMemoryRequestContext } from "./ai-memory-errors.js"
12
13
 
13
- const DEFAULT_BASE_URL = "http://127.0.0.1:8765"
14
14
  const DEFAULT_REQUEST_TIMEOUT_MS = 30_000
15
15
  const DEFAULT_STATUS_TIMEOUT_MS = 1_500
16
16
  const DEFAULT_INJECT_TIMEOUT_MS = 1_200
17
17
  const DEFAULT_INJECT_CACHE_TTL_MS = 60_000
18
18
 
19
+ export function configuredAiMemoryBaseUrl(env: NodeJS.ProcessEnv = process.env): string | undefined {
20
+ const raw = env.PRISM_AI_MEMORY_BASE_URL ?? env.AI_MEMORY_BASE_URL ?? readSettings(undefined, env)?.aiMemory?.baseUrl ?? readSettings(undefined, env)?.aiMemoryBaseUrl
21
+ if (typeof raw !== "string") return undefined
22
+ const trimmed = raw.trim().replace(/\/+$/, "")
23
+ return trimmed || undefined
24
+ }
25
+
19
26
  export function aiMemoryBaseUrl(env: NodeJS.ProcessEnv = process.env): string {
20
- return (env.PRISM_AI_MEMORY_BASE_URL || env.AI_MEMORY_BASE_URL || DEFAULT_BASE_URL).replace(/\/+$/, "")
27
+ const baseUrl = configuredAiMemoryBaseUrl(env)
28
+ if (!baseUrl) throw new Error("AI Memory base URL is not configured. Set PRISM_AI_MEMORY_BASE_URL or aiMemory.baseUrl.")
29
+ return baseUrl
21
30
  }
22
31
 
23
32
  function positiveIntegerSetting(value: unknown, fallback: number): number {
@@ -5,6 +5,7 @@ import { readSettings } from "../core/shared-config.js"
5
5
  import { formatDegradedNotice } from "./ai-memory-errors.js"
6
6
  import {
7
7
  aiMemoryBaseUrl,
8
+ configuredAiMemoryBaseUrl,
8
9
  aiMemoryInjectCacheTtlMs,
9
10
  aiMemoryInjectTimeoutMs,
10
11
  aiMemoryRequestTimeoutMs,
@@ -63,7 +64,7 @@ export function shouldEnableAiMemory(env: NodeJS.ProcessEnv = process.env): bool
63
64
  if (envValue !== undefined) return envValue
64
65
  const settings = readSettings(undefined, env)
65
66
  const settingsValue = booleanSetting(settings?.aiMemory?.enabled ?? settings?.aiMemoryEnabled)
66
- return settingsValue ?? true
67
+ return settingsValue ?? configuredAiMemoryBaseUrl(env) !== undefined
67
68
  }
68
69
 
69
70
  export function shouldInjectAiMemoryCandidates(env: NodeJS.ProcessEnv = process.env): boolean {
@@ -71,7 +72,15 @@ export function shouldInjectAiMemoryCandidates(env: NodeJS.ProcessEnv = process.
71
72
  if (envValue !== undefined) return envValue
72
73
  const settings = readSettings(undefined, env)
73
74
  const settingsValue = booleanSetting(settings?.aiMemory?.injectCandidates ?? settings?.aiMemoryInjectCandidates)
74
- return settingsValue ?? true
75
+ return settingsValue ?? configuredAiMemoryBaseUrl(env) !== undefined
76
+ }
77
+
78
+ export function shouldInjectAiMemoryAlwaysContext(env: NodeJS.ProcessEnv = process.env): boolean {
79
+ const envValue = booleanSetting(env.PRISM_AI_MEMORY_INJECT_ALWAYS_CONTEXT ?? env.PI_AI_MEMORY_INJECT_ALWAYS_CONTEXT)
80
+ if (envValue !== undefined) return envValue
81
+ const settings = readSettings(undefined, env)
82
+ const settingsValue = booleanSetting(settings?.aiMemory?.injectAlwaysContext ?? settings?.aiMemoryInjectAlwaysContext)
83
+ return settingsValue ?? configuredAiMemoryBaseUrl(env) !== undefined
75
84
  }
76
85
 
77
86
  function aiMemoryContextLimit(env: NodeJS.ProcessEnv = process.env): number {
@@ -577,17 +586,18 @@ export default function aiMemorySystemExtension(pi: ExtensionAPI): void {
577
586
  const patch: { systemPrompt?: string; message?: any } = {}
578
587
 
579
588
  // Always-loaded durable context (mapped from 00 Kontext) is injected as a
580
- // system-prompt chunk so it remains in the cached prefix.
581
- try {
582
- const alwaysBlock = buildAlwaysContextMessage(await loadAlwaysContext())?.content?.trim()
583
- if (alwaysBlock) {
584
- const prev = String(event?.systemPrompt ?? "")
585
- patch.systemPrompt = `${prev}${prev ? "\n\n" : ""}${alwaysBlock}`
589
+ // system-prompt chunk so it remains in the cached prefix. It is opt-in so a
590
+ // missing local AI Memory daemon does not produce startup/per-turn warnings.
591
+ if (shouldInjectAiMemoryAlwaysContext()) {
592
+ try {
593
+ const alwaysBlock = buildAlwaysContextMessage(await loadAlwaysContext())?.content?.trim()
594
+ if (alwaysBlock) {
595
+ const prev = String(event?.systemPrompt ?? "")
596
+ patch.systemPrompt = `${prev}${prev ? "\n\n" : ""}${alwaysBlock}`
597
+ }
598
+ } catch (error) {
599
+ reportBackgroundFailure(ctx, "always-context injection", error)
586
600
  }
587
- } catch (error) {
588
- // Best-effort, but never silent: a broken API would otherwise drop durable
589
- // context without anyone noticing.
590
- reportBackgroundFailure(ctx, "always-context injection", error)
591
601
  }
592
602
 
593
603
  // Query-specific candidates (independent of the always-context block).