@daniel156161/prism 0.2.91 → 0.2.96

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 (59) hide show
  1. package/README.md +0 -50
  2. package/dist/pi/pi-context-files.d.ts +6 -0
  3. package/dist/pi/pi-context-files.js +17 -0
  4. package/dist/pi/pi-context-files.js.map +1 -0
  5. package/dist/pi/pi-extensions.d.ts +0 -1
  6. package/dist/pi/pi-extensions.js +7 -22
  7. package/dist/pi/pi-extensions.js.map +1 -1
  8. package/dist/pi/pi-npm-extension-entry.d.ts +2 -0
  9. package/dist/pi/pi-npm-extension-entry.js +74 -0
  10. package/dist/pi/pi-npm-extension-entry.js.map +1 -0
  11. package/dist/pi/pi-package.js +4 -0
  12. package/dist/pi/pi-package.js.map +1 -1
  13. package/dist/pi/pi-patch-context-files.d.ts +12 -0
  14. package/dist/pi/pi-patch-context-files.js +46 -0
  15. package/dist/pi/pi-patch-context-files.js.map +1 -0
  16. package/dist/pi/pi-patch-interactive.js +5 -1
  17. package/dist/pi/pi-patch-interactive.js.map +1 -1
  18. package/dist/pi/plan-mode-tools.d.ts +13 -0
  19. package/dist/pi/plan-mode-tools.js +54 -0
  20. package/dist/pi/plan-mode-tools.js.map +1 -0
  21. package/dist/prism-extensions/core/mex-anchor.d.ts +9 -0
  22. package/dist/prism-extensions/core/mex-anchor.js +29 -0
  23. package/dist/prism-extensions/core/mex-anchor.js.map +1 -0
  24. package/dist/prism-extensions/core/mex-cli.d.ts +68 -0
  25. package/dist/prism-extensions/core/mex-cli.js +183 -0
  26. package/dist/prism-extensions/core/mex-cli.js.map +1 -0
  27. package/dist/prism-extensions/core/mex-graph-db.d.ts +26 -0
  28. package/dist/prism-extensions/core/mex-graph-db.js +69 -0
  29. package/dist/prism-extensions/core/mex-graph-db.js.map +1 -0
  30. package/dist/prism-extensions/integrations/ai-memory-system.js +27 -6
  31. package/dist/prism-extensions/integrations/ai-memory-system.js.map +1 -1
  32. package/dist/prism-extensions/integrations/mex-memory.d.ts +21 -0
  33. package/dist/prism-extensions/integrations/mex-memory.js +231 -0
  34. package/dist/prism-extensions/integrations/mex-memory.js.map +1 -0
  35. package/dist/prism-extensions/tools/builtin-tools.js +2 -0
  36. package/dist/prism-extensions/tools/builtin-tools.js.map +1 -1
  37. package/dist/prism-extensions/tools/mex-tools.d.ts +2 -0
  38. package/dist/prism-extensions/tools/mex-tools.js +78 -0
  39. package/dist/prism-extensions/tools/mex-tools.js.map +1 -0
  40. package/dist/prism-extensions/ui/toolbar.d.ts +2 -0
  41. package/dist/prism-extensions/ui/toolbar.js +10 -1
  42. package/dist/prism-extensions/ui/toolbar.js.map +1 -1
  43. package/node_modules/@earendil-works/pi-coding-agent/dist/core/resource-loader.js +15 -0
  44. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +6 -6
  45. package/package.json +5 -6
  46. package/src/prism-extensions/README.md +10 -1
  47. package/src/prism-extensions/core/mex-anchor.ts +29 -0
  48. package/src/prism-extensions/core/mex-cli.ts +217 -0
  49. package/src/prism-extensions/core/mex-graph-db.ts +76 -0
  50. package/src/prism-extensions/integrations/ai-memory-system.ts +30 -6
  51. package/src/prism-extensions/integrations/mex-memory.ts +264 -0
  52. package/src/prism-extensions/tools/builtin-tools.ts +2 -0
  53. package/src/prism-extensions/tools/mex-tools.ts +93 -0
  54. package/src/prism-extensions/ui/toolbar.ts +10 -1
  55. package/src/prism-extensions/commands/voice-command.ts +0 -49
  56. package/src/prism-extensions/core/voice-runtime.ts +0 -322
  57. package/src/prism-extensions/core/voicebox-client.ts +0 -205
  58. package/src/prism-extensions/core/voicebox-service.ts +0 -137
  59. package/src/prism-extensions/integrations/honcho-memory.ts +0 -299
@@ -0,0 +1,231 @@
1
+ import { Type } from "typebox";
2
+ import { buildCheckArgs, buildGetArgs, buildImpactArgs, buildLogArgs, buildQueryArgs, buildScopeArgs, buildTimelineArgs, hasMexScaffold, isMexAvailable, MEX_LOG_TYPES, MEX_RELATIONS, runMex, } from "../core/mex-cli.js";
3
+ import { describeMexGraphEnsure, ensureMexGraphDb, hasMexGraphDb, isMexAutoGraphEnabled, needsMexGraphAction, } from "../core/mex-graph-db.js";
4
+ import { textToolResult } from "../tools/toolbox-utils.js";
5
+ import { formatBracketedToolCall, renderSingleLineToolCall } from "../ui/tool-call-rendering.js";
6
+ const MEX_STATUS_KEY = "mex";
7
+ const MEX_STATUS_LABEL = "🕸 mex";
8
+ const MEX_STATUS_BUILDING_LABEL = "🕸 mex ⟳";
9
+ const RETRIEVAL_PARAMS = {
10
+ detail: Type.Optional(Type.String({ description: "minimal | standard | source. Default minimal." })),
11
+ maxNodes: Type.Optional(Type.Number({ description: "Maximum nodes to return." })),
12
+ maxOutputTokens: Type.Optional(Type.Number({ description: "Hard output token ceiling." })),
13
+ maxSourceLines: Type.Optional(Type.Number({ description: "Per-node source line cap (detail=source)." })),
14
+ };
15
+ export function formatMexOutput(action, result) {
16
+ const text = result.output || (result.ok ? `mex ${action} produced no output.` : `mex ${action} failed.`);
17
+ return textToolResult(text, { action, ok: result.ok, exitCode: result.exitCode });
18
+ }
19
+ /** Registers the mex code-graph tools. Exported for tests. */
20
+ export function registerMexTools(pi, options = {}) {
21
+ const registered = [];
22
+ const exec = async (action, args) => {
23
+ // For code-graph actions we must have a `.mex/` scaffold.
24
+ // Otherwise `mex` itself may auto-create the scaffold/DB, which we explicitly want to avoid.
25
+ if (needsMexGraphAction(action)) {
26
+ const ensured = await ensureMexGraphDb(graphEnsureOptions(options));
27
+ if (ensured.status === "no-scaffold" || ensured.status === "disabled") {
28
+ return formatMexOutput(action, {
29
+ ok: false,
30
+ exitCode: 1,
31
+ output: `mex ${action} disabled: missing .mex scaffold (needed for graph.db). Run npx mex-agent setup in the repo root, or disable mex via PRISM_DISABLE_MEX=1.`,
32
+ });
33
+ }
34
+ }
35
+ return formatMexOutput(action, await runMex(args, options));
36
+ };
37
+ function register(tool) {
38
+ registered.push(tool.name);
39
+ pi.registerTool(tool);
40
+ }
41
+ register({
42
+ name: "mex_scope",
43
+ label: "Mex Scope",
44
+ description: "Retrieve a compact, task-relevant code neighborhood from the local mex code graph (JSONL: symbols, signatures, relations, node ids).",
45
+ promptSnippet: "Use mex_scope first for codebase questions to get a compact set of relevant symbols instead of scanning files.",
46
+ promptGuidelines: [
47
+ "Describe the task in natural language, e.g. 'trace the authentication flow'.",
48
+ "Scope matching is word-based, not semantic. If results look weak, rephrase once, then fall back to grep/read.",
49
+ "Expand promising node ids with mex_get instead of reading whole files.",
50
+ ],
51
+ parameters: Type.Object({
52
+ task: Type.String({ description: "Task description, e.g. 'trace the authentication flow'." }),
53
+ ...RETRIEVAL_PARAMS,
54
+ fingerprint: Type.Optional(Type.Boolean({ description: "Attach node fingerprints (grounding workflow)." })),
55
+ }),
56
+ async execute(_id, params) {
57
+ return exec("scope", buildScopeArgs(params.task, params));
58
+ },
59
+ renderCall(args, theme, context) {
60
+ return renderSingleLineToolCall(formatBracketedToolCall("mex scope", args?.task, theme), context);
61
+ },
62
+ });
63
+ register({
64
+ name: "mex_get",
65
+ label: "Mex Get",
66
+ description: "Expand source code for specific mex code-graph node ids returned by mex_scope, mex_query, or mex_impact.",
67
+ promptSnippet: "Expand mex node ids to source instead of reading whole files.",
68
+ parameters: Type.Object({
69
+ ids: Type.Array(Type.String({ description: "Node id, e.g. function:a3f8...c21" })),
70
+ maxSourceLines: Type.Optional(Type.Number({ description: "Per-node source line cap." })),
71
+ maxOutputTokens: Type.Optional(Type.Number({ description: "Hard output token ceiling." })),
72
+ }),
73
+ async execute(_id, params) {
74
+ return exec("get", buildGetArgs(params.ids, params));
75
+ },
76
+ renderCall(args, theme, context) {
77
+ const ids = Array.isArray(args?.ids) ? args.ids : [];
78
+ return renderSingleLineToolCall(formatBracketedToolCall("mex get", ids.length > 1 ? `${ids[0]} +${ids.length - 1}` : ids[0], theme), context);
79
+ },
80
+ });
81
+ register({
82
+ name: "mex_query",
83
+ label: "Mex Query",
84
+ description: `Query structural code relations in the mex graph: ${MEX_RELATIONS.join(", ")}.`,
85
+ promptSnippet: "Use mex_query for precise structural questions like who calls a function or where a symbol is defined.",
86
+ parameters: Type.Object({
87
+ relation: Type.String({ description: MEX_RELATIONS.join(" | ") }),
88
+ target: Type.String({ description: "Symbol or file name." }),
89
+ ...RETRIEVAL_PARAMS,
90
+ }),
91
+ async execute(_id, params) {
92
+ return exec("query", buildQueryArgs(params.relation, params.target, params));
93
+ },
94
+ renderCall(args, theme, context) {
95
+ return renderSingleLineToolCall(formatBracketedToolCall("mex query", [args?.relation, args?.target].filter(Boolean).join(" "), theme), context);
96
+ },
97
+ });
98
+ register({
99
+ name: "mex_impact",
100
+ label: "Mex Impact",
101
+ description: "Show the transitive code and wiki blast radius for a symbol or file before refactoring.",
102
+ promptSnippet: "Use mex_impact before refactors to see what a symbol or file change touches.",
103
+ parameters: Type.Object({
104
+ target: Type.String({ description: "Symbol name or file path." }),
105
+ depth: Type.Optional(Type.Number({ description: "Transitive caller depth. Default 2." })),
106
+ ...RETRIEVAL_PARAMS,
107
+ }),
108
+ async execute(_id, params) {
109
+ return exec("impact", buildImpactArgs(params.target, params));
110
+ },
111
+ renderCall(args, theme, context) {
112
+ return renderSingleLineToolCall(formatBracketedToolCall("mex impact", args?.target, theme), context);
113
+ },
114
+ });
115
+ register({
116
+ name: "mex_log",
117
+ label: "Mex Log",
118
+ description: `Append a ${MEX_LOG_TYPES.join("/")} entry to the repo-local mex event log (.mex/events).`,
119
+ promptSnippet: "Log durable repo decisions, risks, or todos into the mex event log.",
120
+ promptGuidelines: [
121
+ "Log decisions only when they are actually settled in this conversation.",
122
+ "Keep entries short and repo-specific; no secrets, credentials, or private hostnames.",
123
+ ],
124
+ parameters: Type.Object({
125
+ message: Type.String({ description: "Short entry text." }),
126
+ type: Type.Optional(Type.String({ description: `${MEX_LOG_TYPES.join(" | ")}. Default note.` })),
127
+ files: Type.Optional(Type.Array(Type.String({ description: "Related file path." }))),
128
+ status: Type.Optional(Type.String({ description: "Lifecycle status, e.g. decided or implemented." })),
129
+ }),
130
+ async execute(_id, params) {
131
+ return exec("log", buildLogArgs(params.message, params));
132
+ },
133
+ renderCall(args, theme, context) {
134
+ return renderSingleLineToolCall(formatBracketedToolCall(`mex log ${String(args?.type ?? "note")}`, args?.message, theme), context);
135
+ },
136
+ });
137
+ return registered;
138
+ }
139
+ export default function mexMemoryExtension(pi) {
140
+ const cwd = process.cwd();
141
+ if (!isMexAvailable(process.env, cwd))
142
+ return;
143
+ registerMexTools(pi, { cwd });
144
+ pi.on?.("session_start", (_event, ctx) => {
145
+ ctx?.ui?.setStatus?.(MEX_STATUS_KEY, mexStatusLabel(cwd));
146
+ void autoBuildMissingGraph(cwd, ctx);
147
+ });
148
+ pi.registerCommand("mex", {
149
+ description: "Mex code graph: /mex [status] | graph | check | timeline | scope <task>",
150
+ handler: async (args, ctx) => {
151
+ const [sub, ...rest] = (args || "").trim().split(/\s+/);
152
+ const argument = rest.join(" ").trim();
153
+ const action = (sub || "status").toLowerCase();
154
+ try {
155
+ if (action === "status") {
156
+ const result = await runMex(buildCheckArgs({ quiet: true }), { cwd });
157
+ const lines = [
158
+ `mex scaffold: ${hasMexScaffold(cwd) ? mexPathLabel(cwd) : "missing"}`,
159
+ `mex graph.db: ${hasMexGraphDb(cwd) ? "present" : isMexAutoGraphEnabled() ? "missing (auto-build on demand)" : "missing (auto-build disabled)"}`,
160
+ result.output,
161
+ ];
162
+ ctx.ui.notify(lines.filter(Boolean).join("\n"), result.ok ? "info" : "warning");
163
+ return;
164
+ }
165
+ if (action === "graph") {
166
+ // Never let `mex graph` create a scaffold/DB in `~/.mex` when we're running outside a repo scaffold.
167
+ // Don't rebuild when graph.db already exists; just skip to avoid touching ~/.mex.
168
+ const ensured = await ensureMexGraphDb({ cwd, env: process.env, runner: undefined, timeoutMs: 300_000 });
169
+ const message = describeMexGraphEnsure(ensured);
170
+ if (message)
171
+ ctx.ui.notify(message, ensured.status === "built" ? "info" : "warning");
172
+ else
173
+ ctx.ui.notify("mex graph skipped.", ensured.status === "built" ? "info" : "warning");
174
+ return;
175
+ }
176
+ if (action === "check") {
177
+ const result = await runMex(buildCheckArgs({}), { cwd, timeoutMs: 300_000 });
178
+ ctx.ui.notify(result.output || "No drift output.", result.ok ? "info" : "warning");
179
+ return;
180
+ }
181
+ if (action === "timeline") {
182
+ const result = await runMex(buildTimelineArgs({ limit: 20 }), { cwd });
183
+ ctx.ui.notify(result.output || "No mex events.", "info");
184
+ return;
185
+ }
186
+ if (action === "scope") {
187
+ if (!argument)
188
+ return ctx.ui.notify("Usage: /mex scope <task>", "warning");
189
+ const result = await runMex(buildScopeArgs(argument, {}), { cwd });
190
+ ctx.ui.notify(result.output || "No scope results.", result.ok ? "info" : "warning");
191
+ return;
192
+ }
193
+ ctx.ui.notify("Usage: /mex [status] | graph | check | timeline | scope <task>", "warning");
194
+ }
195
+ catch (error) {
196
+ ctx.ui.notify(`mex command failed:\n${error instanceof Error ? error.message : String(error)}`, "error");
197
+ }
198
+ },
199
+ });
200
+ }
201
+ function mexPathLabel(cwd) {
202
+ return `${cwd.replace(/\/+$/, "")}/.mex`;
203
+ }
204
+ function graphEnsureOptions(options) {
205
+ return { cwd: options.cwd, env: options.env, runner: options.runner };
206
+ }
207
+ /** Only a scaffold with a usable code graph counts as "mex is working"; otherwise the segment stays hidden. */
208
+ export function mexStatusLabel(cwd = process.cwd()) {
209
+ return hasMexScaffold(cwd) && hasMexGraphDb(cwd) ? MEX_STATUS_LABEL : undefined;
210
+ }
211
+ /** Builds a missing code graph in the background so the first graph tool call is not blocked. */
212
+ async function autoBuildMissingGraph(cwd, ctx) {
213
+ if (!hasMexScaffold(cwd) || hasMexGraphDb(cwd) || !isMexAutoGraphEnabled())
214
+ return undefined;
215
+ ctx?.ui?.setStatus?.(MEX_STATUS_KEY, MEX_STATUS_BUILDING_LABEL);
216
+ try {
217
+ const result = await ensureMexGraphDb({ cwd });
218
+ const message = describeMexGraphEnsure(result);
219
+ if (message)
220
+ ctx?.ui?.notify?.(message, result.status === "built" ? "info" : "warning");
221
+ return result;
222
+ }
223
+ catch (error) {
224
+ ctx?.ui?.notify?.(`mex graph build failed:\n${error instanceof Error ? error.message : String(error)}`, "warning");
225
+ return undefined;
226
+ }
227
+ finally {
228
+ ctx?.ui?.setStatus?.(MEX_STATUS_KEY, mexStatusLabel(cwd));
229
+ }
230
+ }
231
+ //# sourceMappingURL=mex-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mex-memory.js","sourceRoot":"","sources":["../../../src/prism-extensions/integrations/mex-memory.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { createDiagnosticToolboxTools } from "./diagnostic-tools.js";
2
2
  import { createPrismDiagnosticToolboxTools } from "./prism-diagnostic-tools.js";
3
3
  import { createSshConfigTool } from "./ssh-config-tool.js";
4
+ import { createMexToolboxTools } from "./mex-tools.js";
4
5
  export function defineToolboxTool(definition) {
5
6
  return { source: "toolbox/builtin", ...definition };
6
7
  }
@@ -8,6 +9,7 @@ export const builtinToolboxTools = [
8
9
  createSshConfigTool(),
9
10
  ...createDiagnosticToolboxTools(),
10
11
  ...createPrismDiagnosticToolboxTools(),
12
+ ...createMexToolboxTools(),
11
13
  ];
12
14
  export function createBuiltinToolboxTools() {
13
15
  return builtinToolboxTools.map((tool) => ({ ...tool }));
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-tools.js","sourceRoot":"","sources":["../../../src/prism-extensions/tools/builtin-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,MAAM,UAAU,iBAAiB,CAAC,UAAiC;IACjE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,EAAE,CAAA;AACrD,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAA4B;IAC1D,mBAAmB,EAAE;IACrB,GAAG,4BAA4B,EAAE;IACjC,GAAG,iCAAiC,EAAE;CACvC,CAAA;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC"}
1
+ {"version":3,"file":"builtin-tools.js","sourceRoot":"","sources":["../../../src/prism-extensions/tools/builtin-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,MAAM,UAAU,iBAAiB,CAAC,UAAiC;IACjE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,EAAE,CAAA;AACrD,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAA4B;IAC1D,mBAAmB,EAAE;IACrB,GAAG,4BAA4B,EAAE;IACjC,GAAG,iCAAiC,EAAE;IACtC,GAAG,qBAAqB,EAAE;CAC3B,CAAA;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolboxToolDefinition } from "./toolbox.js";
2
+ export declare function createMexToolboxTools(): ToolboxToolDefinition[];
@@ -0,0 +1,78 @@
1
+ import { Type } from "typebox";
2
+ import { buildCheckArgs, buildGraphArgs, buildTimelineArgs, hasMexScaffold, isMexCliInstalled, MEX_LOG_TYPES, runMex, } from "../core/mex-cli.js";
3
+ import { textToolResult, timeoutMs } from "./toolbox-utils.js";
4
+ const MEX_TAGS = ["mex", "codegraph", "graph", "wiki", "scaffold", "drift", "documentation", "memory"];
5
+ function runOptions(params, fallbackTimeout) {
6
+ return {
7
+ cwd: typeof params.cwd === "string" && params.cwd.trim() ? params.cwd.trim() : process.cwd(),
8
+ timeoutMs: timeoutMs(params.timeoutMs, fallbackTimeout),
9
+ };
10
+ }
11
+ function guardScaffold(cwd) {
12
+ if (!isMexCliInstalled())
13
+ throw new Error("mex CLI not found. Install it with: npm install -g mex-agent");
14
+ if (!hasMexScaffold(cwd))
15
+ throw new Error(`No .mex scaffold in ${cwd}. Run 'npx mex-agent setup' first.`);
16
+ }
17
+ async function execute(action, args, options) {
18
+ guardScaffold(options.cwd ?? process.cwd());
19
+ const result = await runMex(args, options);
20
+ return textToolResult(result.output || `mex ${action} produced no output.`, { action, ok: result.ok, exitCode: result.exitCode, cwd: options.cwd });
21
+ }
22
+ function createMexGraphBuildTool() {
23
+ return {
24
+ name: "mex_graph_build",
25
+ label: "Mex Graph Build",
26
+ description: "Rebuild the local mex code knowledge graph (.mex/graph.db) so scope/query/impact results are current.",
27
+ tags: [...MEX_TAGS, "build", "index", "rebuild"],
28
+ parameters: Type.Object({
29
+ cwd: Type.Optional(Type.String({ description: "Repository root. Defaults to the current working directory." })),
30
+ json: Type.Optional(Type.Boolean({ description: "Return the build summary as JSON." })),
31
+ timeoutMs: Type.Optional(Type.Number({ description: "Command timeout in milliseconds. Default 120000." })),
32
+ }),
33
+ async execute(_id, params) {
34
+ const options = runOptions(params, 120_000);
35
+ return execute("graph", buildGraphArgs({ json: params.json, root: params.cwd }), options);
36
+ },
37
+ };
38
+ }
39
+ function createMexCheckTool() {
40
+ return {
41
+ name: "mex_check",
42
+ label: "Mex Check",
43
+ description: "Run mex drift detection between the .mex wiki and the codebase (paths, commands, dependencies, links, grounded symbols).",
44
+ tags: [...MEX_TAGS, "check", "health", "stale", "validate"],
45
+ parameters: Type.Object({
46
+ cwd: Type.Optional(Type.String({ description: "Repository root. Defaults to the current working directory." })),
47
+ json: Type.Optional(Type.Boolean({ description: "Return the full drift report as JSON." })),
48
+ quiet: Type.Optional(Type.Boolean({ description: "Single-line summary only." })),
49
+ timeoutMs: Type.Optional(Type.Number({ description: "Command timeout in milliseconds. Default 120000." })),
50
+ }),
51
+ async execute(_id, params) {
52
+ return execute("check", buildCheckArgs({ json: params.json, quiet: params.quiet }), runOptions(params, 120_000));
53
+ },
54
+ };
55
+ }
56
+ function createMexTimelineTool() {
57
+ return {
58
+ name: "mex_timeline",
59
+ label: "Mex Timeline",
60
+ description: `Read recent entries from the mex event log (${MEX_LOG_TYPES.join("/")}) for repo history and past decisions.`,
61
+ tags: [...MEX_TAGS, "timeline", "events", "decisions", "history", "log"],
62
+ parameters: Type.Object({
63
+ cwd: Type.Optional(Type.String({ description: "Repository root. Defaults to the current working directory." })),
64
+ since: Type.Optional(Type.String({ description: "YYYY-MM-DD or relative like 30d." })),
65
+ type: Type.Optional(Type.String({ description: MEX_LOG_TYPES.join(" | ") })),
66
+ limit: Type.Optional(Type.Number({ description: "Maximum entries." })),
67
+ json: Type.Optional(Type.Boolean({ description: "Return events as JSON." })),
68
+ timeoutMs: Type.Optional(Type.Number({ description: "Command timeout in milliseconds. Default 30000." })),
69
+ }),
70
+ async execute(_id, params) {
71
+ return execute("timeline", buildTimelineArgs(params), runOptions(params, 30_000));
72
+ },
73
+ };
74
+ }
75
+ export function createMexToolboxTools() {
76
+ return [createMexGraphBuildTool(), createMexCheckTool(), createMexTimelineTool()];
77
+ }
78
+ //# sourceMappingURL=mex-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mex-tools.js","sourceRoot":"","sources":["../../../src/prism-extensions/tools/mex-tools.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,8 @@ export declare function providerModelLabel(model: {
17
17
  export declare function modeLabel(ctx: ExtensionContext, statuses?: ReadonlyMap<string, string>): string;
18
18
  export declare function thinkingLabel(ctx: ExtensionContext, getThinkingLevel?: () => unknown): string;
19
19
  export declare function toolbarAccent(theme: ThemeLike, text: string): string;
20
+ /** Role-play status is only worth a toolbar slot while a role-play is actually running. */
21
+ export declare function rpLabel(status: string | undefined): string | undefined;
20
22
  export declare function cavemanColor(mode: string): number;
21
23
  export declare function cavemanLabel(status: string | undefined): string | undefined;
22
24
  export declare function contextBarLabel(usage: any): string;
@@ -63,6 +63,13 @@ export function thinkingLabel(ctx, getThinkingLevel) {
63
63
  export function toolbarAccent(theme, text) {
64
64
  return fg(theme, "accent", text);
65
65
  }
66
+ /** Role-play status is only worth a toolbar slot while a role-play is actually running. */
67
+ export function rpLabel(status) {
68
+ const value = status?.trim();
69
+ if (!value || /^RP:\s*off$/i.test(value))
70
+ return undefined;
71
+ return value;
72
+ }
66
73
  export function cavemanColor(mode) {
67
74
  const normalized = mode.toLowerCase();
68
75
  if (normalized === "lite")
@@ -193,7 +200,9 @@ class ToolbarFooter {
193
200
  const obsidian = statuses?.get("obsidian-memory");
194
201
  const logseq = statuses?.get("logseq-memory");
195
202
  const aiMemory = statuses?.get("ai-memory");
196
- return [joinDistributed([mode ? fg(this.theme, "success", mode) : undefined, model, fg(this.theme, "accent", `🔧 ${toolCalls}`), fg(this.theme, "dim", `↑${formatTokens(input)}`), fg(this.theme, "dim", `↓${formatTokens(output)}`), fg(this.theme, "success", `$${cost.toFixed(4)}`), context, caveman, obsidian, logseq, aiMemory ? `AI Memory: ${aiMemory}` : undefined, thinking].filter(Boolean), Math.max(0, width))];
203
+ const mex = statuses?.get("mex");
204
+ const rp = rpLabel(statuses?.get("rp"));
205
+ return [joinDistributed([mode ? fg(this.theme, "success", mode) : undefined, model, fg(this.theme, "accent", `🔧 ${toolCalls}`), fg(this.theme, "dim", `↑${formatTokens(input)}`), fg(this.theme, "dim", `↓${formatTokens(output)}`), fg(this.theme, "success", `$${cost.toFixed(4)}`), context, caveman, obsidian, logseq, aiMemory ? `AI Memory: ${aiMemory}` : undefined, mex, rp, thinking].filter(Boolean), Math.max(0, width))];
197
206
  }
198
207
  }
199
208
  export default function toolbarExtension(pi) {
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../../src/prism-extensions/ui/toolbar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../../src/prism-extensions/ui/toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,CAAA;AAU5E,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,IAAY;IACjD,OAAO,aAAa,KAAK,IAAI,IAAI,UAAU,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AAC1E,CAAC;AAED,SAAS,EAAE,CAAC,KAAgB,EAAE,IAAY,EAAE,IAAY;IACtD,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/C,CAAC;AAGD,MAAM,UAAU,gBAAgB,CAAC,OAA2B;IAC1D,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,OAAO,CAAA;IACzG,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,OAAO,CAAA;AAClH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAA2B,EAAE,QAAiB;IACxE,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;IAC7C,IAAI,QAAQ,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAA;IACnG,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACtC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC1C,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IACxC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,KAAK,CAAA;IAClF,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC1C,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACtC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IACxC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,OAAO,CAAA;AACzF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAqD;IACtF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,QAAQ,IAAI,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IACzG,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,EAAE,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;IACrE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAA;IACjE,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAA;AAC5B,CAAC;AAGD,MAAM,UAAU,SAAS,CAAC,GAAqB,EAAE,QAAsC;IACrF,MAAM,UAAU,GAAG,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,CAAA;IAC9C,IAAI,UAAU;QAAE,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAA;IACtD,IAAI,GAAG,EAAE,UAAU,EAAE,EAAE;QAAE,OAAO,QAAQ,CAAA;IACxC,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAqB,EAAE,gBAAgC;IACnF,IAAI,GAAY,CAAA;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,gBAAgB,EAAE,EAAE,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,GAAG,SAAS,CAAA;IACjB,CAAC;IACD,GAAG,KAAK,GAAG,EAAE,aAAa,IAAI,GAAG,EAAE,KAAK,EAAE,aAAa,IAAI,GAAG,EAAE,OAAO,EAAE,aAAa,IAAI,GAAG,EAAE,eAAe,EAAE,gBAAgB,EAAE,EAAE,IAAI,KAAK,CAAA;IAC7I,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,KAAK,CAAA;IAC5D,OAAO,aAAa,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAgB,EAAE,IAAY;IAC1D,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,OAAO,CAAC,MAA0B;IAChD,MAAM,KAAK,GAAG,MAAM,EAAE,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC1D,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IACrC,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,GAAG,CAAA;IACrC,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,GAAG,CAAA;IACrC,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,GAAG,CAAA;IACtC,IAAI,UAAU,KAAK,aAAa;QAAE,OAAO,EAAE,CAAA;IAC3C,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAA;IACvC,IAAI,UAAU,KAAK,cAAc;QAAE,OAAO,GAAG,CAAA;IAC7C,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1F,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACvB,MAAM,KAAK,GAAG,cAAc,IAAI,CAAC,WAAW,EAAE,EAAE,CAAA;IAChD,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAU;IACxC,IAAI,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QAChH,OAAO,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,GAAG,CAAA;IAC1C,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,gCAAgC,CAAA;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/D,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAA;AAClH,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACvB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,SAAS,CAAC,KAAU;IAC3B,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAA;IACxB,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;IACnK,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAsD,EAAE,KAAU;IAClF,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,WAAW,CAAC,CAAA;IAC1D,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,YAAY,CAAC,CAAA;IAC7D,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAqB;IAChD,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;IAC5D,MAAM,OAAO,GAAG,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAA;IACzD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,CAAA;QACpD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/D,IAAI,OAAO,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE;oBAAE,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU;wBAAE,KAAK,CAAC,SAAS,IAAI,CAAC,CAAA;gBAC/F,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;YAChC,CAAC;iBAAM,IAAI,OAAO,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3F,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAe,EAAE,KAAa;IAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAE/D,MAAM,SAAS,GAAG,GAAG,CAAA;IACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3E,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAA;IAC1C,IAAI,QAAQ,GAAG,KAAK;QAAE,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;IAEtE,IAAI,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;IAC5B,IAAI,SAAS,GAAG,QAAQ,CAAA;IACxB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;QAChD,KAAK,IAAI,WAAW,CAAA;QACpB,SAAS,IAAI,CAAC,CAAA;QACd,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;QAC5C,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAA;IACtE,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACzE,CAAC;AAED,MAAM,aAAa;IACY,MAAM;IAAuD,KAAK;IAA8B,UAAU;IAAiF,gBAAgB;IAAxO,YAA6B,MAA0C,EAAmB,KAAgB,EAAmB,UAAwE,EAAmB,gBAAgC;sBAA3N,MAAM;qBAAuD,KAAK;0BAA8B,UAAU;gCAAiF,gBAAgB;IAAmB,CAAC;IAC5P,UAAU,KAAU,CAAC;IACrB,MAAM,CAAC,KAAa;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QACzB,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,EAAE,CAAC,CAAA;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,EAAE,CAAA;QACzD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC7E,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACrF,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;QAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,EAAE,CAAA;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACtC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;QAC/K,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;QACvF,MAAM,QAAQ,GAAG,QAAQ,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,CAAA;QAC7C,MAAM,QAAQ,GAAG,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;QAC3C,MAAM,GAAG,GAAG,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QAChC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QAEvC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IACnb,CAAC;CACF;AAED,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAgB;IACvD,IAAI,UAAwC,CAAA;IAC5C,SAAS,OAAO,CAAC,GAAqB;QACpC,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS;YAAE,OAAM;QAC7C,UAAU,GAAG,GAAG,CAAA;QAChB,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAS,EAAE,KAAgB,EAAE,UAAe,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAA;IAC3J,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,CAAC,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC3I,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAW,EAAE,GAAqB,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1E,CAAC;AACH,CAAC"}
@@ -104,6 +104,21 @@ export function loadProjectContextFiles(options) {
104
104
  currentDir = parentDir;
105
105
  }
106
106
  contextFiles.push(...ancestorContextFiles);
107
+ // prism: extra context files (e.g. .mex/AGENTS.md) load like AGENTS.md so they appear under "Context".
108
+ for (const extraContextEntry of (process.env.PRISM_EXTRA_CONTEXT_FILES ?? "").split("\n")) {
109
+ const extraContextPath = extraContextEntry.trim();
110
+ if (!extraContextPath || seenPaths.has(extraContextPath))
111
+ continue;
112
+ try {
113
+ if (!statSync(extraContextPath).isFile())
114
+ continue;
115
+ contextFiles.push({ path: extraContextPath, content: readFileSync(extraContextPath, "utf-8") });
116
+ seenPaths.add(extraContextPath);
117
+ }
118
+ catch {
119
+ // Unreadable extra context file: ignore, it is optional by design.
120
+ }
121
+ }
107
122
  return contextFiles;
108
123
  }
109
124
  export class DefaultResourceLoader {
@@ -484,8 +484,8 @@ export class InteractiveMode {
484
484
  }));
485
485
  // Convert extension commands to SlashCommand format
486
486
  const builtinCommandNames = new Set(slashCommands.map((c) => c.name));
487
- const prismInternalCommandExtensions = new Set(["caveman-mode.ts", "clear-session.ts", "eval-command.ts", "git-commit.ts", "plan-command.ts", "prompt-review-command.ts", "self-improve-command.ts", "voice-command.ts", "vote-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", "self-improvement-tools.ts", "context-usage.ts", "prism-status.ts", "toolbar.ts", "pi-mcp-adapter"]);
488
- const prismInternalCommandNpmPackages = new Set(["pi-mcp-adapter"]);
487
+ const prismInternalCommandExtensions = new Set(["caveman-mode.ts", "clear-session.ts", "eval-command.ts", "git-commit.ts", "plan-command.ts", "prompt-review-command.ts", "self-improve-command.ts", "vote-command.ts", "obsidian-memory.ts", "logseq-memory.ts", "research-tools.ts", "ai-memory-system.ts", "rp-memory.ts", "mex-memory.ts", "manifest-provider.ts", "ollama-provider.ts", "toolbox.ts", "self-improvement-tools.ts", "context-usage.ts", "prism-status.ts", "toolbar.ts", "pi-mcp-adapter", "@juicesharp/rpiv-voice", "@juicesharp/rpiv-todo"]);
488
+ const prismInternalCommandNpmPackages = new Set(["pi-mcp-adapter", "@juicesharp/rpiv-voice", "@juicesharp/rpiv-todo"]);
489
489
  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 + "/")); })();
490
490
  const extensionCommands = this.session.extensionRunner
491
491
  .getRegisteredCommands()
@@ -679,7 +679,7 @@ export class InteractiveMode {
679
679
  await this.themeController.applyFromSettings();
680
680
  // Add header with keybindings from config (unless silenced)
681
681
  if (this.options.verbose || !this.settingsManager.getQuietStartup()) {
682
- 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.90";
682
+ 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.96";
683
683
  // Build startup instructions using keybinding hint helpers
684
684
  const hint = (keybinding, description) => keyHint(keybinding, description);
685
685
  const expandedInstructions = [
@@ -1348,8 +1348,8 @@ export class InteractiveMode {
1348
1348
  const promptCompactList = formatCompactList(templates.map((template) => `/${template.name}`));
1349
1349
  addLoadedSection("Prompts", promptCompactList, templateList);
1350
1350
  }
1351
- const prismInternalExtensions = new Set(["caveman-mode.ts", "clear-session.ts", "eval-command.ts", "git-commit.ts", "plan-command.ts", "prompt-review-command.ts", "self-improve-command.ts", "voice-command.ts", "vote-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", "self-improvement-tools.ts", "context-usage.ts", "prism-status.ts", "toolbar.ts", "pi-mcp-adapter"]);
1352
- const prismInternalNpmPackages = new Set(["pi-mcp-adapter"]);
1351
+ const prismInternalExtensions = new Set(["caveman-mode.ts", "clear-session.ts", "eval-command.ts", "git-commit.ts", "plan-command.ts", "prompt-review-command.ts", "self-improve-command.ts", "vote-command.ts", "obsidian-memory.ts", "logseq-memory.ts", "research-tools.ts", "ai-memory-system.ts", "rp-memory.ts", "mex-memory.ts", "manifest-provider.ts", "ollama-provider.ts", "toolbox.ts", "self-improvement-tools.ts", "context-usage.ts", "prism-status.ts", "toolbar.ts", "pi-mcp-adapter", "@juicesharp/rpiv-voice", "@juicesharp/rpiv-todo"]);
1352
+ const prismInternalNpmPackages = new Set(["pi-mcp-adapter", "@juicesharp/rpiv-voice", "@juicesharp/rpiv-todo"]);
1353
1353
  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 + "/")); })());
1354
1354
  if (extensions.length > 0) {
1355
1355
  const groups = this.buildScopeGroups(extensions);
@@ -2932,7 +2932,7 @@ export class InteractiveMode {
2932
2932
  });
2933
2933
  }
2934
2934
  getPrismReadOnlyToolNames() {
2935
- const readOnly = new Set(["read", "grep", "find", "ls", "obsidian_memory_read", "obsidian_memory_search", "obsidian_memory_list", "web_search", "web_fetch"]);
2935
+ const readOnly = new Set(["read", "grep", "find", "ls", "web_search", "web_fetch", "obsidian_memory_read", "obsidian_memory_search", "obsidian_memory_list", "logseq_read", "logseq_search", "logseq_list", "ai_memory_search", "ai_memory_read", "ai_memory_status", "ai_memory_vault_list", "mex_scope", "mex_get", "mex_query", "mex_impact", "rp_state", "rp_search", "toolbox_search", "self_improvement_list", "todo"]);
2936
2936
  return this.session.getActiveToolNames().filter((name) => readOnly.has(name));
2937
2937
  }
2938
2938
  setPrismPlanStatus(enabled) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@daniel156161/prism",
3
- "version": "0.2.91",
3
+ "version": "0.2.96",
4
4
  "description": "Prism-branded wrapper around pi that stores config in ~/.prism",
5
5
  "type": "module",
6
6
  "engines": {
@@ -27,11 +27,10 @@
27
27
  "dependencies": {
28
28
  "@earendil-works/pi-ai": "^0.84.2",
29
29
  "@earendil-works/pi-coding-agent": "^0.84.2",
30
- "eventsource": "^5.1.0",
31
- "fast-uri": "^3.1.5",
32
- "pi-mcp-adapter": "^2.26.0",
33
- "pkce-challenge": "^6.0.0",
34
- "typebox": "^1.3.14"
30
+ "@juicesharp/rpiv-todo": "^2.6.2",
31
+ "@juicesharp/rpiv-voice": "^2.6.2",
32
+ "pi-mcp-adapter": "^2.26.1",
33
+ "typebox": "^1.3.15"
35
34
  },
36
35
  "bundledDependencies": [
37
36
  "@earendil-works/pi-coding-agent"
@@ -2,7 +2,7 @@
2
2
  Prism extension code is grouped by responsibility:
3
3
  - `commands/` — slash-command extensions (`/caveman`, `/plan`, `/git-commit`, `/self-improve`, `/eval`, `/vote`, `/prompt-review`, terminal clearing).
4
4
  - `core/` — shared config and utility primitives used by multiple extensions.
5
- - `integrations/` — external integrations and agent tools (Obsidian memory, AI Memory search/read, web research).
5
+ - `integrations/` — external integrations and agent tools (Obsidian memory, AI Memory search/read, web research, mex code graph).
6
6
  - `providers/` — optional model/provider adapters (Ollama, Manifest).
7
7
  - `tools/` — toolbox registry, hidden built-in toolbox tools, and self-improvement persistence tools.
8
8
  - `ui/` — toolbar, status, context usage and tool-call rendering helpers.
@@ -17,3 +17,12 @@ Prism's self-improvement helpers are intentionally human-gated:
17
17
  - `/prompt-review <focus>` reviews prompts/behavior patterns and proposes safer candidates without auto-applying them.
18
18
 
19
19
  See `docs/safe-harness-improvement.md` for the full workflow and safety boundaries.
20
+
21
+ ## mex code graph
22
+ `integrations/mex-memory.ts` only loads when the `mex` CLI (`npm install -g mex-agent`) is installed **and** the current repo has a `.mex/` scaffold (`npx mex-agent setup`). It then exposes `mex_scope`, `mex_get`, `mex_query`, `mex_impact`, `mex_log` plus the `/mex` command. Maintenance commands (`mex_graph_build`, `mex_check`, `mex_timeline`) live in the hidden toolbox.
23
+
24
+ A missing `.mex/graph.db` is rebuilt automatically via `core/mex-graph-db.ts`: in the background on session start and lazily before the first graph-reading tool call. It requires an existing `.mex/` scaffold; without one nothing is built. Builds are deduplicated per scaffold and failures degrade to mex's own `GRAPH_UNAVAILABLE` handling.
25
+
26
+ The `🕸 mex` toolbar segment only appears when mex actually works, i.e. scaffold **and** a non-empty `graph.db`. While a build runs it shows `🕸 mex ⟳`; disabled, scaffold-less or failed states show nothing.
27
+
28
+ Env switches: `PRISM_DISABLE_MEX=1` (off), `PRISM_MEX_FORCE=1` (load without scaffold), `PRISM_MEX_BIN` (custom binary), `PRISM_MEX_TELEMETRY=1` (allow mex telemetry; off by default), `PRISM_DISABLE_MEX_AUTO_GRAPH=1` (never auto-build `graph.db`).
@@ -0,0 +1,29 @@
1
+ import * as fs from "node:fs"
2
+ import * as path from "node:path"
3
+ import { isMexAvailable, mexScaffoldDir } from "./mex-cli.js"
4
+
5
+ /** Anchor file every mex scaffold exposes as its always-loaded entry point. */
6
+ export const MEX_ANCHOR_FILE = "AGENTS.md"
7
+
8
+ export function mexAnchorPath(cwd: string = process.cwd()): string {
9
+ return path.join(mexScaffoldDir(cwd), MEX_ANCHOR_FILE)
10
+ }
11
+
12
+ export function isMexAnchorEnabled(env: NodeJS.ProcessEnv = process.env): boolean {
13
+ return env.PRISM_DISABLE_MEX_ANCHOR !== "1"
14
+ }
15
+
16
+ /**
17
+ * Absolute path of `.mex/AGENTS.md` when it should be loaded as a pi context file,
18
+ * i.e. the mex CLI plus scaffold are available and the anchor is not disabled.
19
+ */
20
+ export function mexAnchorContextFile(cwd: string = process.cwd(), env: NodeJS.ProcessEnv = process.env): string | undefined {
21
+ if (!isMexAnchorEnabled(env)) return undefined
22
+ if (!isMexAvailable(env, cwd)) return undefined
23
+ const anchor = mexAnchorPath(cwd)
24
+ try {
25
+ return fs.statSync(anchor).isFile() ? anchor : undefined
26
+ } catch {
27
+ return undefined
28
+ }
29
+ }