@brainpilot/runtime 0.0.5 → 0.0.6

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 (74) hide show
  1. package/README.md +61 -0
  2. package/dist/agent-error.d.ts +51 -0
  3. package/dist/agent-error.d.ts.map +1 -0
  4. package/dist/agent-error.js +163 -0
  5. package/dist/agent-error.js.map +1 -0
  6. package/dist/agent-factory.d.ts.map +1 -1
  7. package/dist/agent-factory.js +36 -6
  8. package/dist/agent-factory.js.map +1 -1
  9. package/dist/events.d.ts +18 -0
  10. package/dist/events.d.ts.map +1 -1
  11. package/dist/events.js +24 -0
  12. package/dist/events.js.map +1 -1
  13. package/dist/extensions/agent-status.d.ts +91 -0
  14. package/dist/extensions/agent-status.d.ts.map +1 -0
  15. package/dist/extensions/agent-status.js +103 -0
  16. package/dist/extensions/agent-status.js.map +1 -0
  17. package/dist/extensions/trace-reminder.d.ts +94 -0
  18. package/dist/extensions/trace-reminder.d.ts.map +1 -0
  19. package/dist/extensions/trace-reminder.js +153 -0
  20. package/dist/extensions/trace-reminder.js.map +1 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/mailbox.d.ts +37 -1
  26. package/dist/mailbox.d.ts.map +1 -1
  27. package/dist/mailbox.js +79 -2
  28. package/dist/mailbox.js.map +1 -1
  29. package/dist/mas-agent.d.ts +74 -12
  30. package/dist/mas-agent.d.ts.map +1 -1
  31. package/dist/mas-agent.js +158 -33
  32. package/dist/mas-agent.js.map +1 -1
  33. package/dist/materialize-skills.d.ts +40 -0
  34. package/dist/materialize-skills.d.ts.map +1 -0
  35. package/dist/materialize-skills.js +141 -0
  36. package/dist/materialize-skills.js.map +1 -0
  37. package/dist/mock-agent.d.ts.map +1 -1
  38. package/dist/mock-agent.js +13 -1
  39. package/dist/mock-agent.js.map +1 -1
  40. package/dist/personas.d.ts +16 -0
  41. package/dist/personas.d.ts.map +1 -1
  42. package/dist/personas.js +651 -8
  43. package/dist/personas.js.map +1 -1
  44. package/dist/pi-provider.d.ts +5 -0
  45. package/dist/pi-provider.d.ts.map +1 -1
  46. package/dist/pi-provider.js +7 -1
  47. package/dist/pi-provider.js.map +1 -1
  48. package/dist/provider-config.d.ts +5 -0
  49. package/dist/provider-config.d.ts.map +1 -1
  50. package/dist/provider-config.js +2 -0
  51. package/dist/provider-config.js.map +1 -1
  52. package/dist/server.d.ts +2 -2
  53. package/dist/server.d.ts.map +1 -1
  54. package/dist/server.js +82 -8
  55. package/dist/server.js.map +1 -1
  56. package/dist/session-manager.d.ts +311 -8
  57. package/dist/session-manager.d.ts.map +1 -1
  58. package/dist/session-manager.js +896 -39
  59. package/dist/session-manager.js.map +1 -1
  60. package/dist/tools/skill-search.d.ts +53 -0
  61. package/dist/tools/skill-search.d.ts.map +1 -0
  62. package/dist/tools/skill-search.js +269 -0
  63. package/dist/tools/skill-search.js.map +1 -0
  64. package/dist/tools/system-tools.d.ts +22 -1
  65. package/dist/tools/system-tools.d.ts.map +1 -1
  66. package/dist/tools/system-tools.js +149 -21
  67. package/dist/tools/system-tools.js.map +1 -1
  68. package/dist/trace.d.ts +27 -1
  69. package/dist/trace.d.ts.map +1 -1
  70. package/dist/trace.js +60 -3
  71. package/dist/trace.js.map +1 -1
  72. package/dist/types.d.ts +51 -5
  73. package/dist/types.d.ts.map +1 -1
  74. package/package.json +6 -2
@@ -1,3 +1,5 @@
1
+ import { MailboxFullError } from "../mailbox.js";
2
+ import { createSkillSearchTool } from "./skill-search.js";
1
3
  function ok(text) {
2
4
  return { content: [{ type: "text", text }] };
3
5
  }
@@ -19,7 +21,23 @@ export function createSendMessageTool(deps) {
19
21
  const content = String(params.content ?? "");
20
22
  const msgType = params.msg_type ?? deriveMsgType(deps.fromAgent, to);
21
23
  await deps.ensureAgent(to);
22
- await deps.mailbox.write({ fromAgent: deps.fromAgent, toAgent: to, content, msgType });
24
+ try {
25
+ await deps.mailbox.write({ fromAgent: deps.fromAgent, toAgent: to, content, msgType });
26
+ }
27
+ catch (err) {
28
+ // #76 backpressure: the target inbox is full. Signal a failed tool call
29
+ // (isError) so the sending agent sees the rejection and backs off,
30
+ // rather than silently dropping the message or growing the inbox.
31
+ if (err instanceof MailboxFullError) {
32
+ return { ...ok(`cannot deliver to ${to}: ${err.message}`), isError: true };
33
+ }
34
+ throw err;
35
+ }
36
+ // #76: actively wake the target so it consumes the inbox and runs. This is
37
+ // fire-and-forget — the sending agent's turn returns immediately ("you
38
+ // never poll", per the A2A persona); the target's run proceeds in its own
39
+ // delivery loop. Without this the message is written but never read.
40
+ deps.wakeAgent(to);
23
41
  return ok(`delivered to ${to}`);
24
42
  },
25
43
  };
@@ -29,6 +47,36 @@ function deriveMsgType(from, to) {
29
47
  return "result_deliver";
30
48
  return "task_delegate";
31
49
  }
50
+ export function createAskUserTool(deps) {
51
+ return {
52
+ name: "ask_user",
53
+ description: "Ask the human user a question and wait for their answer. Use when you need a decision or information only the user can provide. Returns the user's answer as text.",
54
+ parameters: {
55
+ type: "object",
56
+ properties: {
57
+ question: { type: "string", description: "The question to show the user" },
58
+ options: {
59
+ type: "array",
60
+ items: { type: "string" },
61
+ description: "Optional choices to offer the user",
62
+ },
63
+ allow_free_text: {
64
+ type: "boolean",
65
+ description: "Whether the user may type a free-text answer (default true)",
66
+ },
67
+ },
68
+ required: ["question"],
69
+ },
70
+ execute: async (params) => {
71
+ const answer = await deps.requestUserInput({
72
+ question: String(params.question ?? ""),
73
+ options: Array.isArray(params.options) ? params.options : undefined,
74
+ allow_free_text: typeof params.allow_free_text === "boolean" ? params.allow_free_text : undefined,
75
+ });
76
+ return ok(answer);
77
+ },
78
+ };
79
+ }
32
80
  export function createCreateAgentTool(deps) {
33
81
  return {
34
82
  name: "create_agent",
@@ -64,7 +112,9 @@ export function createDestroyAgentTool(deps) {
64
112
  export function createRecordTraceTool(deps) {
65
113
  return {
66
114
  name: "record_trace",
67
- description: "Record a reasoning/trace event into the Graph of Trace.",
115
+ description: "Notify the Trace Agent of a reasoning/trace event. The Trace Agent is a " +
116
+ "real agent that owns the Graph of Trace; it decides whether to create a " +
117
+ "new node, update an existing one, or merge with a sibling.",
68
118
  parameters: {
69
119
  type: "object",
70
120
  properties: {
@@ -75,16 +125,52 @@ export function createRecordTraceTool(deps) {
75
125
  required: ["description"],
76
126
  },
77
127
  execute: async (params) => {
78
- const node = deps.trace.createNode({
79
- title: String(params.description ?? "trace"),
80
- type: "trace",
81
- status: "completed",
82
- agent: deps.fromAgent,
83
- description: String(params.description ?? ""),
84
- content: String(params.context ?? ""),
85
- artifacts: (params.artifacts ?? []).map((p) => ({ path: p })),
86
- });
87
- return ok(`trace recorded: ${node.id}`);
128
+ // §10 (legacy parity): record_trace does NOT mutate the graph directly.
129
+ // Instead it dispatches a [Trace Event] envelope into the trace agent's
130
+ // mailbox; the trace agent — a real Pi AgentSession — receives it and
131
+ // calls create_trace_node / update_trace_node / add_trace_relation as the
132
+ // editor. This keeps the trace agent's status authentically live in the
133
+ // Agents panel (otherwise it would be a permanently-dormant placeholder)
134
+ // and lets the trace agent merge/dedupe across multiple sources, which is
135
+ // exactly the persona we already ship for it.
136
+ const description = String(params.description ?? "");
137
+ const context = String(params.context ?? "");
138
+ const artifacts = params.artifacts ?? [];
139
+ const lines = [`[Trace Event]`, `Description: ${description}`];
140
+ if (context)
141
+ lines.push(`Context: ${context}`);
142
+ lines.push("", "Artifacts:");
143
+ if (artifacts.length === 0) {
144
+ lines.push("(none)");
145
+ }
146
+ else {
147
+ for (const a of artifacts)
148
+ lines.push(`- ${a}`);
149
+ }
150
+ const envelope = lines.join("\n");
151
+ // Spawn-on-demand: the trace agent is a real Pi session. ensureAgent
152
+ // creates one if it doesn't exist yet (idempotent) and resurrects a
153
+ // stopped one. That spawn is what finally surfaces the trace agent as
154
+ // "idle/running" in the Agents panel.
155
+ await deps.ensureAgent("trace");
156
+ try {
157
+ await deps.mailbox.write({
158
+ fromAgent: deps.fromAgent,
159
+ toAgent: "trace",
160
+ content: envelope,
161
+ msgType: "trace_event",
162
+ });
163
+ }
164
+ catch (err) {
165
+ if (err instanceof MailboxFullError) {
166
+ return { ...ok(`cannot deliver to trace: ${err.message}`), isError: true };
167
+ }
168
+ throw err;
169
+ }
170
+ // Fire-and-forget: kick the trace agent's delivery loop so the envelope
171
+ // is consumed in its own run rather than sitting unread.
172
+ deps.wakeAgent("trace");
173
+ return ok("trace event dispatched");
88
174
  },
89
175
  };
90
176
  }
@@ -104,14 +190,18 @@ export function createTraceNodeTool(deps) {
104
190
  required: ["title"],
105
191
  },
106
192
  execute: async (params) => {
107
- const parentId = params.parent_id ? String(params.parent_id) : undefined;
193
+ // Honour an explicit parent_id; otherwise chain to the most recent node so
194
+ // the graph stays connected instead of accumulating orphan nodes.
195
+ const explicitParent = params.parent_id ? String(params.parent_id) : undefined;
196
+ const parentId = explicitParent ?? deps.trace.getLastNodeId();
197
+ const relation = explicitParent ? "parent" : "follows";
108
198
  const node = deps.trace.createNode({
109
199
  title: String(params.title ?? ""),
110
200
  type: params.type ? String(params.type) : undefined,
111
201
  status: params.status ? String(params.status) : undefined,
112
202
  description: params.description ? String(params.description) : undefined,
113
203
  agent: deps.fromAgent,
114
- parents: parentId ? [{ id: parentId, relation: "parent" }] : undefined,
204
+ parents: parentId ? [{ id: parentId, relation }] : undefined,
115
205
  });
116
206
  return ok(`node ${node.id} created`);
117
207
  },
@@ -146,12 +236,20 @@ export function createUpdateTraceNodeTool(deps) {
146
236
  export function createAddTraceRelationTool(deps) {
147
237
  return {
148
238
  name: "add_trace_relation",
149
- description: "Add a relation (edge) between two trace nodes.",
239
+ description: "Add a directed dependency edge between two trace nodes. DIRECTION MATTERS: " +
240
+ "`from_id` is the PREREQUISITE (the earlier source work that must exist first), " +
241
+ "`to_id` is the DEPENDENT (the later downstream work that relies on it). The " +
242
+ "edge points from_id ──▶ to_id, read as \"to_id depends_on from_id\". " +
243
+ "Example: a librarian survey is the prerequisite of an experimentalist synthesis, " +
244
+ "so call add_trace_relation(from_id=<survey>, to_id=<synthesis>) — NOT the reverse. " +
245
+ "Rule of thumb: the prerequisite (from_id) is almost always the node that was " +
246
+ "created earlier; if you find yourself pointing from a later node to an earlier " +
247
+ "one, you have the arguments backwards.",
150
248
  parameters: {
151
249
  type: "object",
152
250
  properties: {
153
- from_id: { type: "string" },
154
- to_id: { type: "string" },
251
+ from_id: { type: "string", description: "Prerequisite / earlier source node." },
252
+ to_id: { type: "string", description: "Dependent / later downstream node." },
155
253
  explanation: { type: "string" },
156
254
  },
157
255
  required: ["from_id", "to_id", "explanation"],
@@ -176,6 +274,7 @@ export function createGetTraceGraphTool(deps) {
176
274
  export function allSystemTools(deps) {
177
275
  const tools = [
178
276
  createSendMessageTool(deps),
277
+ createAskUserTool(deps),
179
278
  createCreateAgentTool(deps),
180
279
  createDestroyAgentTool(deps),
181
280
  createRecordTraceTool(deps),
@@ -183,6 +282,7 @@ export function allSystemTools(deps) {
183
282
  createUpdateTraceNodeTool(deps),
184
283
  createAddTraceRelationTool(deps),
185
284
  createGetTraceGraphTool(deps),
285
+ createSkillSearchTool(deps),
186
286
  ];
187
287
  return new Map(tools.map((t) => [t.name, t]));
188
288
  }
@@ -192,18 +292,41 @@ export function allSystemTools(deps) {
192
292
  * tools (read/bash/grep/...) are controlled separately via `builtinToolsForRole`.
193
293
  */
194
294
  export const AGENT_TOOL_CONFIG = {
195
- principal: ["send_message", "create_agent", "destroy_agent", "record_trace"],
295
+ // skill_search opens the router skill library (the long-tail domain catalog
296
+ // not in <available_skills>). Trace is deliberately excluded: it is a
297
+ // graph-only recorder, not a domain reasoner.
298
+ principal: [
299
+ "send_message",
300
+ "create_agent",
301
+ "destroy_agent",
302
+ "record_trace",
303
+ "ask_user",
304
+ "skill_search",
305
+ ],
196
306
  trace: ["create_trace_node", "update_trace_node", "add_trace_relation", "get_trace_graph"],
197
- expert: ["send_message", "record_trace"],
307
+ expert: ["send_message", "record_trace", "skill_search"],
308
+ // Auditor: comms + self-trace only. Deliberately NO `get_trace_graph` —
309
+ // evidence is restricted to the session workspace; the audit must not
310
+ // dredge the trace graph or other agents' internal state. skill_search is
311
+ // included so an audit can resolve a methodology skill referenced in a draft.
312
+ auditor: ["send_message", "record_trace", "skill_search"],
313
+ // Writer: needs ask_user to present format/style options before drafting.
314
+ writer: ["send_message", "record_trace", "ask_user", "skill_search"],
198
315
  // Default for any other expert-like agent.
199
- _default: ["send_message", "record_trace"],
316
+ _default: ["send_message", "record_trace", "skill_search"],
200
317
  };
201
318
  /**
202
319
  * Built-in Pi tool allowlist per role. Valid Pi builtin names:
203
320
  * `bash, edit, find, glob, grep, ls, read, write`.
204
321
  */
205
322
  export const BUILTIN_TOOL_CONFIG = {
206
- principal: [],
323
+ // PI is the user-facing orchestrator: it must be able to inspect and touch the
324
+ // workspace directly (read a file, run a quick check, make a small edit) for
325
+ // the lightweight framing / synthesis its persona promises. Substantial domain
326
+ // work is still delegated to experts — that's a persona discipline, not a tool
327
+ // restriction. Previously `[]`, which made PI truthfully report it could not
328
+ // read/write/bash, contradicting its own prompt.
329
+ principal: ["read", "write", "edit", "bash", "grep", "find", "glob", "ls"],
207
330
  trace: ["read"],
208
331
  expert: ["read", "grep", "find"],
209
332
  _default: ["read", "grep", "find"],
@@ -218,6 +341,11 @@ export const BUILTIN_TOOL_CONFIG_BY_NAME = {
218
341
  experimentalist: ["read", "write", "edit", "bash", "grep", "find", "glob", "ls"],
219
342
  writer: ["read", "write", "edit", "grep", "find", "glob", "ls"],
220
343
  librarian: ["read", "grep", "find", "glob"],
344
+ // Auditor: read-only inspection + `write` for its own audit report. NO `edit`
345
+ // (must not modify other agents' artefacts). `bash` is included for
346
+ // grep/awk/jq/diff style filesystem inspection — its read-only discipline is
347
+ // enforced by the auditor persona, not by the tool whitelist.
348
+ auditor: ["read", "grep", "find", "glob", "bash", "write"],
221
349
  };
222
350
  export function systemToolNamesForRole(role, agentName) {
223
351
  // `trace` agent keyed by role; principal by role; experts share `_default`
@@ -1 +1 @@
1
- {"version":3,"file":"system-tools.js","sourceRoot":"","sources":["../../src/tools/system-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-tools.js","sourceRoot":"","sources":["../../src/tools/system-tools.ts"],"names":[],"mappings":"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"}
package/dist/trace.d.ts CHANGED
@@ -1,10 +1,20 @@
1
1
  import type { TraceGraph, TraceNode } from "@brainpilot/protocol";
2
+ /** Mutation kind reported to the `onChange` listener. */
3
+ export type TraceChangeOp = "created" | "updated";
2
4
  export declare class GraphOfTrace {
3
5
  readonly sessionId: string;
4
6
  private readonly persistPath?;
7
+ private readonly onChange?;
5
8
  private readonly nodes;
6
9
  private writeChain;
7
- constructor(sessionId: string, persistPath?: string | undefined);
10
+ /** Id of the most recently created node — used to chain auto-captured nodes. */
11
+ private lastNodeId;
12
+ /**
13
+ * @param onChange invoked after every node create/update/relation mutation so
14
+ * a hosting layer (SessionManager) can push a live `CUSTOM:trace_node` event.
15
+ * Kept decoupled from the EventBus so the store stays unit-testable on its own.
16
+ */
17
+ constructor(sessionId: string, persistPath?: string | undefined, onChange?: ((op: TraceChangeOp, node: TraceNode) => void) | undefined);
8
18
  createNode(input: {
9
19
  title: string;
10
20
  type?: string;
@@ -22,9 +32,25 @@ export declare class GraphOfTrace {
22
32
  path: string;
23
33
  type?: string;
24
34
  }>;
35
+ metadata?: Record<string, unknown>;
25
36
  id?: string;
26
37
  }): TraceNode;
38
+ /**
39
+ * Create a node automatically chained to the most recent node (deterministic
40
+ * hook capture, §8). When no prior node exists it becomes a root. `metadata.auto`
41
+ * is set so the UI can distinguish infra-captured milestones from LLM traces.
42
+ */
43
+ createChainedNode(input: {
44
+ title: string;
45
+ type?: string;
46
+ status?: string;
47
+ agent?: string;
48
+ description?: string;
49
+ metadata?: Record<string, unknown>;
50
+ }): TraceNode;
27
51
  updateNode(id: string, updates: Partial<TraceNode>): TraceNode | undefined;
52
+ /** Id of the most recently created node, if any. */
53
+ getLastNodeId(): string | undefined;
28
54
  addRelation(fromId: string, toId: string, explanation: string, relation?: string): boolean;
29
55
  getNode(id: string): TraceNode | undefined;
30
56
  getGraph(): TraceGraph;
@@ -1 +1 @@
1
- {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMlE,qBAAa,YAAY;IAKrB,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAL/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,UAAU,CAAoC;gBAG3C,SAAS,EAAE,MAAM,EACT,WAAW,CAAC,EAAE,MAAM,YAAA;IAGvC,UAAU,CAAC,KAAK,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzE,SAAS,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACnD,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,SAAS;IA8Bb,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS;IAQ1E,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,OAAO;IAchG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,QAAQ,IAAI,UAAU;IAOtB,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAK7B,OAAO,CAAC,OAAO;IAWT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMlE,yDAAyD;AACzD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;AAElD,qBAAa,YAAY;IAYrB,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAb5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,UAAU,CAAoC;IACtD,gFAAgF;IAChF,OAAO,CAAC,UAAU,CAAqB;IAEvC;;;;OAIG;gBAEQ,SAAS,EAAE,MAAM,EACT,WAAW,CAAC,EAAE,MAAM,YAAA,EACpB,QAAQ,CAAC,GAAE,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,aAAA;IAG1E,UAAU,CAAC,KAAK,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzE,SAAS,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,SAAS;IAiCb;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,SAAS;IAab,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS;IAS1E,oDAAoD;IACpD,aAAa,IAAI,MAAM,GAAG,SAAS;IAInC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,SAAe,GAAG,OAAO;IA+BhG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,QAAQ,IAAI,UAAU;IAOtB,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAY7B,OAAO,CAAC,OAAO;IAWT,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
package/dist/trace.js CHANGED
@@ -14,11 +14,20 @@ function now() {
14
14
  export class GraphOfTrace {
15
15
  sessionId;
16
16
  persistPath;
17
+ onChange;
17
18
  nodes = new Map();
18
19
  writeChain = Promise.resolve();
19
- constructor(sessionId, persistPath) {
20
+ /** Id of the most recently created node — used to chain auto-captured nodes. */
21
+ lastNodeId;
22
+ /**
23
+ * @param onChange invoked after every node create/update/relation mutation so
24
+ * a hosting layer (SessionManager) can push a live `CUSTOM:trace_node` event.
25
+ * Kept decoupled from the EventBus so the store stays unit-testable on its own.
26
+ */
27
+ constructor(sessionId, persistPath, onChange) {
20
28
  this.sessionId = sessionId;
21
29
  this.persistPath = persistPath;
30
+ this.onChange = onChange;
22
31
  }
23
32
  createNode(input) {
24
33
  const id = input.id ?? `node_${randomUUID()}`;
@@ -39,6 +48,7 @@ export class GraphOfTrace {
39
48
  createdAt: now(),
40
49
  updatedAt: now(),
41
50
  toolCalls: [],
51
+ ...(input.metadata ? { metadata: input.metadata } : {}),
42
52
  };
43
53
  this.nodes.set(id, node);
44
54
  // Maintain reverse edges.
@@ -47,22 +57,60 @@ export class GraphOfTrace {
47
57
  if (parent && !parent.childIds.includes(id))
48
58
  parent.childIds.push(id);
49
59
  }
60
+ this.lastNodeId = id;
50
61
  this.persist();
62
+ this.onChange?.("created", node);
51
63
  return node;
52
64
  }
65
+ /**
66
+ * Create a node automatically chained to the most recent node (deterministic
67
+ * hook capture, §8). When no prior node exists it becomes a root. `metadata.auto`
68
+ * is set so the UI can distinguish infra-captured milestones from LLM traces.
69
+ */
70
+ createChainedNode(input) {
71
+ const parent = this.lastNodeId ? this.nodes.get(this.lastNodeId) : undefined;
72
+ return this.createNode({
73
+ title: input.title,
74
+ type: input.type ?? "milestone",
75
+ status: input.status ?? "completed",
76
+ agent: input.agent,
77
+ description: input.description,
78
+ parents: parent ? [{ id: parent.id, relation: "follows" }] : undefined,
79
+ metadata: { auto: true, ...input.metadata },
80
+ });
81
+ }
53
82
  updateNode(id, updates) {
54
83
  const node = this.nodes.get(id);
55
84
  if (!node)
56
85
  return undefined;
57
86
  Object.assign(node, updates, { id, updatedAt: now() });
58
87
  this.persist();
88
+ this.onChange?.("updated", node);
59
89
  return node;
60
90
  }
91
+ /** Id of the most recently created node, if any. */
92
+ getLastNodeId() {
93
+ return this.lastNodeId;
94
+ }
61
95
  addRelation(fromId, toId, explanation, relation = "depends_on") {
62
- const from = this.nodes.get(fromId);
63
- const to = this.nodes.get(toId);
96
+ let from = this.nodes.get(fromId);
97
+ let to = this.nodes.get(toId);
64
98
  if (!from || !to)
65
99
  return false;
100
+ // Chronology guard (#110): a `depends_on` edge must point prerequisite → dependent,
101
+ // i.e. the source (`from`) is created no later than the dependent (`to`). The Trace
102
+ // agent (an LLM) sometimes passes the arguments reversed ("synthesis depends_on
103
+ // survey" written as from=synthesis,to=survey), producing edges that point backward
104
+ // in time. Time is a hard fact, so when a depends_on edge would run later→earlier we
105
+ // swap the endpoints to restore the semantic direction. Other relation kinds
106
+ // (parent/follows/produced/…) are left untouched.
107
+ if (relation === "depends_on" &&
108
+ from.createdAt &&
109
+ to.createdAt &&
110
+ from.createdAt > to.createdAt) {
111
+ [from, to] = [to, from];
112
+ [fromId, toId] = [toId, fromId];
113
+ }
66
114
  if (!to.parents.some((p) => p.id === fromId)) {
67
115
  to.parents.push({ id: fromId, relation, explanation });
68
116
  to.parentIds.push(fromId);
@@ -71,6 +119,7 @@ export class GraphOfTrace {
71
119
  from.childIds.push(toId);
72
120
  to.updatedAt = now();
73
121
  this.persist();
122
+ this.onChange?.("updated", to);
74
123
  return true;
75
124
  }
76
125
  getNode(id) {
@@ -86,6 +135,14 @@ export class GraphOfTrace {
86
135
  this.nodes.clear();
87
136
  for (const n of graph.nodes)
88
137
  this.nodes.set(n.id, n);
138
+ // Resume chaining from the last-created node (by createdAt, falling back to
139
+ // insertion order) so post-restore auto nodes link to existing history.
140
+ let last;
141
+ for (const n of this.nodes.values()) {
142
+ if (!last || (n.createdAt ?? "") >= (last.createdAt ?? ""))
143
+ last = n;
144
+ }
145
+ this.lastNodeId = last?.id;
89
146
  }
90
147
  persist() {
91
148
  if (!this.persistPath)
package/dist/trace.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,EAAY,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,SAAS,GAAG;IACV,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,YAAY;IAKZ;IACQ;IALF,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC9C,UAAU,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEtD,YACW,SAAiB,EACT,WAAoB;QAD5B,cAAS,GAAT,SAAS,CAAQ;QACT,gBAAW,GAAX,WAAW,CAAS;IACpC,CAAC;IAEJ,UAAU,CAAC,KAWV;QACC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,QAAQ,UAAU,EAAE,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAc;YACtB,EAAE;YACF,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;YACjC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO;YACP,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;YAChC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,GAAG,EAAE;YAChB,SAAS,EAAE,GAAG,EAAE;YAChB,SAAS,EAAE,EAAE;SACd,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,0BAA0B;QAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,EAAU,EAAE,OAA2B;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,IAAY,EAAE,WAAmB,EAAE,QAAQ,GAAG,YAAY;QACpF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;YAC7C,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YACvD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,EAAE,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ;QACN,OAAO;YACL,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE;YACrD,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAiB;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;aAC9B,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,MAAM,SAAS,CAAC,IAAI,CAAC,WAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7E,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -21,7 +21,13 @@ export interface IAgentSession {
21
21
  subscribe(listener: (event: PiAgentEvent) => void): () => void;
22
22
  /** Send a prompt. Resolves when the run completes (or is aborted). */
23
23
  prompt(text: string): Promise<void>;
24
- /** Hard-abort the active run. */
24
+ /**
25
+ * Hard-abort the active run. For the real Pi session this aborts the provider
26
+ * stream AND awaits the agent returning to idle (SDK `AgentSession.abort()`
27
+ * is itself `abort() + waitForIdle()`); the mock/test sessions signal their
28
+ * loop to stop. Callers that must fence the old stream before starting a new
29
+ * run should await this (see `MasAgent.abort`, #101).
30
+ */
25
31
  abort(): Promise<void>;
26
32
  /** Tear down; release resources. */
27
33
  dispose(): void;
@@ -100,6 +106,10 @@ export type PiAssistantMessageEvent = {
100
106
  type: "reasoning_start";
101
107
  } | {
102
108
  type: "reasoning_end";
109
+ } | {
110
+ type: "error";
111
+ error?: unknown;
112
+ reason?: string;
103
113
  } | {
104
114
  type: string;
105
115
  [k: string]: unknown;
@@ -108,6 +118,22 @@ export type PiAssistantMessageEvent = {
108
118
  export interface PiMessage {
109
119
  role: string;
110
120
  content?: PiContentBlock[];
121
+ /**
122
+ * Provider-reported token usage, present on finalized assistant messages
123
+ * (Pi's `AssistantMessage.usage`). The runtime reads this on `message_end`
124
+ * to accumulate real per-session/per-agent token stats. Optional + loose
125
+ * because user/tool messages and mock feeds may omit it.
126
+ */
127
+ usage?: PiUsage;
128
+ [k: string]: unknown;
129
+ }
130
+ /** Pi/provider token usage counters (mirrors `@earendil-works/pi-ai` Usage). */
131
+ export interface PiUsage {
132
+ input?: number;
133
+ output?: number;
134
+ cacheRead?: number;
135
+ cacheWrite?: number;
136
+ totalTokens?: number;
111
137
  [k: string]: unknown;
112
138
  }
113
139
  export interface PiContentBlock {
@@ -134,11 +160,27 @@ export type AgentSessionFactory = (params: {
134
160
  /** System prompt for the agent. */
135
161
  systemPrompt: string;
136
162
  /**
137
- * App-controlled skill directories loaded for this agent (template dir shared
138
- * by all sessions + this session's own dir). Replaces the host-global skill
139
- * discovery see agent-factory `noSkills: true`.
163
+ * Explicit skill directories to load through Pi's native skill pipeline
164
+ * (`additionalSkillPaths`). Host-global auto-discovery stays disabled
165
+ * (`noSkills: true`); these dirs are loaded on top of that. Typically a single
166
+ * entry: `<dataRoot>/bp_template/skills`. Omitted by the mock factory.
167
+ */
168
+ skillPaths?: string[];
169
+ /**
170
+ * 意图二 fallback (Pi-native hooks): invoked by the trace-reminder extension
171
+ * when an expert was reminded once and STILL did not report back, so the host
172
+ * can write a fallback note into the principal's mailbox (the PI never
173
+ * dead-waits). Omitted by the mock factory.
174
+ */
175
+ onUnreplied?: (agentName: string) => void;
176
+ /**
177
+ * #97: compute a fresh "team status" block to inject at the top of every turn
178
+ * (via the agent-status extension's Pi `context` hook). Called once per turn;
179
+ * returns "" when there is nothing to inject. Supplied only for the principal
180
+ * (the coordinator that benefits from the whole-team view); omitted for other
181
+ * roles and by the mock factory.
140
182
  */
141
- skillPaths: string[];
183
+ renderAgentStatus?: () => string;
142
184
  /**
143
185
  * Per-session LLM provider resolved from providers.json. When omitted, the
144
186
  * factory falls back to Pi's env-based default (Docker/static compat).
@@ -146,6 +188,10 @@ export type AgentSessionFactory = (params: {
146
188
  providerConfig?: {
147
189
  providerId: string;
148
190
  baseUrl?: string;
191
+ /** #63: wire protocol (Pi models.json api). Defaults to anthropic-messages. */
192
+ api?: string;
193
+ /** #68: coarse adapter family (auto/openai/anthropic); derives api when api unset. */
194
+ adapter?: string;
149
195
  apiKey: string;
150
196
  modelId?: string;
151
197
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@brainpilot/runtime",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
+ "engines": {
5
+ "node": ">=22"
6
+ },
4
7
  "license": "Apache-2.0",
5
8
  "type": "module",
6
9
  "description": "BrainPilot Runtime — Pi SDK orchestration, SessionManager, Mailbox, GoT, state authority, HTTP server",
@@ -34,7 +37,8 @@
34
37
  "start": "node ./dist/server.js"
35
38
  },
36
39
  "dependencies": {
37
- "@brainpilot/protocol": "^0.0.5",
40
+ "@brainpilot/protocol": "^0.0.6",
41
+ "@brainpilot/skills": "^0.0.6",
38
42
  "@earendil-works/pi-coding-agent": "^0.79.0",
39
43
  "@hono/node-server": "^1.19.0",
40
44
  "@modelcontextprotocol/sdk": "^1.0.0",