@positronic/core 0.0.55 → 0.0.57

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 (60) hide show
  1. package/dist/src/dsl/agent-messages.js +4 -75
  2. package/dist/src/dsl/brain-runner.js +131 -47
  3. package/dist/src/dsl/brain-state-machine.js +318 -482
  4. package/dist/src/dsl/builder/brain.js +35 -1
  5. package/dist/src/dsl/constants.js +14 -2
  6. package/dist/src/dsl/create-brain.js +4 -1
  7. package/dist/src/dsl/execution/constants.js +2 -2
  8. package/dist/src/dsl/execution/event-stream.js +837 -272
  9. package/dist/src/dsl/signal-validation.js +157 -0
  10. package/dist/src/dsl/types.js +2 -2
  11. package/dist/src/index.js +5 -2
  12. package/dist/src/memory/scoped-memory.js +176 -0
  13. package/dist/src/memory/types.js +12 -0
  14. package/dist/src/tools/index.js +150 -47
  15. package/dist/src/ui/generate-ui.js +6 -3
  16. package/dist/src/yaml/data-validator.js +195 -0
  17. package/dist/types/clients/types.d.ts +39 -2
  18. package/dist/types/clients/types.d.ts.map +1 -1
  19. package/dist/types/dsl/agent-messages.d.ts +8 -14
  20. package/dist/types/dsl/agent-messages.d.ts.map +1 -1
  21. package/dist/types/dsl/brain-runner.d.ts +27 -7
  22. package/dist/types/dsl/brain-runner.d.ts.map +1 -1
  23. package/dist/types/dsl/brain-state-machine.d.ts +92 -23
  24. package/dist/types/dsl/brain-state-machine.d.ts.map +1 -1
  25. package/dist/types/dsl/brain.d.ts +2 -2
  26. package/dist/types/dsl/brain.d.ts.map +1 -1
  27. package/dist/types/dsl/builder/brain.d.ts +56 -35
  28. package/dist/types/dsl/builder/brain.d.ts.map +1 -1
  29. package/dist/types/dsl/constants.d.ts +8 -0
  30. package/dist/types/dsl/constants.d.ts.map +1 -1
  31. package/dist/types/dsl/create-brain.d.ts +17 -17
  32. package/dist/types/dsl/create-brain.d.ts.map +1 -1
  33. package/dist/types/dsl/definitions/blocks.d.ts +3 -3
  34. package/dist/types/dsl/definitions/blocks.d.ts.map +1 -1
  35. package/dist/types/dsl/definitions/events.d.ts +40 -3
  36. package/dist/types/dsl/definitions/events.d.ts.map +1 -1
  37. package/dist/types/dsl/definitions/run-params.d.ts +17 -9
  38. package/dist/types/dsl/definitions/run-params.d.ts.map +1 -1
  39. package/dist/types/dsl/execution/constants.d.ts +2 -2
  40. package/dist/types/dsl/execution/constants.d.ts.map +1 -1
  41. package/dist/types/dsl/execution/event-stream.d.ts +12 -5
  42. package/dist/types/dsl/execution/event-stream.d.ts.map +1 -1
  43. package/dist/types/dsl/signal-validation.d.ts +36 -0
  44. package/dist/types/dsl/signal-validation.d.ts.map +1 -0
  45. package/dist/types/dsl/types.d.ts +91 -2
  46. package/dist/types/dsl/types.d.ts.map +1 -1
  47. package/dist/types/index.d.ts +12 -7
  48. package/dist/types/index.d.ts.map +1 -1
  49. package/dist/types/memory/scoped-memory.d.ts +22 -0
  50. package/dist/types/memory/scoped-memory.d.ts.map +1 -0
  51. package/dist/types/memory/types.d.ts +106 -0
  52. package/dist/types/memory/types.d.ts.map +1 -0
  53. package/dist/types/tools/index.d.ts +101 -32
  54. package/dist/types/tools/index.d.ts.map +1 -1
  55. package/dist/types/ui/generate-ui.d.ts.map +1 -1
  56. package/dist/types/yaml/data-validator.d.ts +27 -1
  57. package/dist/types/yaml/data-validator.d.ts.map +1 -1
  58. package/dist/types/yaml/types.d.ts +10 -0
  59. package/dist/types/yaml/types.d.ts.map +1 -1
  60. package/package.json +1 -1
@@ -388,6 +388,7 @@ export var Brain = /*#__PURE__*/ function() {
388
388
  _define_property(this, "optionsSchema", void 0);
389
389
  _define_property(this, "components", void 0);
390
390
  _define_property(this, "defaultTools", void 0);
391
+ _define_property(this, "memoryProvider", void 0);
391
392
  this.title = title;
392
393
  this.description = description;
393
394
  this.blocks = [];
@@ -435,6 +436,7 @@ export var Brain = /*#__PURE__*/ function() {
435
436
  nextBrain.optionsSchema = this.optionsSchema;
436
437
  nextBrain.components = this.components;
437
438
  nextBrain.defaultTools = this.defaultTools;
439
+ nextBrain.memoryProvider = this.memoryProvider;
438
440
  return nextBrain;
439
441
  }
440
442
  },
@@ -446,6 +448,7 @@ export var Brain = /*#__PURE__*/ function() {
446
448
  nextBrain.services = this.services;
447
449
  nextBrain.components = this.components;
448
450
  nextBrain.defaultTools = this.defaultTools;
451
+ nextBrain.memoryProvider = this.memoryProvider;
449
452
  return nextBrain;
450
453
  }
451
454
  },
@@ -470,6 +473,7 @@ export var Brain = /*#__PURE__*/ function() {
470
473
  nextBrain.services = this.services;
471
474
  nextBrain.components = components;
472
475
  nextBrain.defaultTools = this.defaultTools;
476
+ nextBrain.memoryProvider = this.memoryProvider;
473
477
  return nextBrain;
474
478
  }
475
479
  },
@@ -500,6 +504,33 @@ export var Brain = /*#__PURE__*/ function() {
500
504
  return next;
501
505
  }
502
506
  },
507
+ {
508
+ /**
509
+ * Configure a memory provider for this brain.
510
+ * When configured, steps receive a scoped memory instance in their context.
511
+ *
512
+ * @param provider - The memory provider to use
513
+ *
514
+ * @example
515
+ * ```typescript
516
+ * import { createMem0Provider } from '@positronic/mem0';
517
+ *
518
+ * const memory = createMem0Provider({ apiKey: process.env.MEM0_API_KEY });
519
+ *
520
+ * const myBrain = brain('my-brain')
521
+ * .withMemory(memory)
522
+ * .brain('agent', async ({ memory }) => {
523
+ * const prefs = await memory.search('user preferences');
524
+ * return { system: `User preferences: ${prefs}`, prompt: 'Help me' };
525
+ * });
526
+ * ```
527
+ */ key: "withMemory",
528
+ value: function withMemory(provider) {
529
+ var next = this.nextBrain();
530
+ next.memoryProvider = provider;
531
+ return next;
532
+ }
533
+ },
503
534
  {
504
535
  key: "step",
505
536
  value: function step(title, action) {
@@ -876,7 +907,8 @@ export var Brain = /*#__PURE__*/ function() {
876
907
  options: validatedOptions,
877
908
  services: this.services,
878
909
  components: this.components,
879
- defaultTools: this.defaultTools
910
+ defaultTools: this.defaultTools,
911
+ memoryProvider: this.memoryProvider
880
912
  }));
881
913
  return [
882
914
  5,
@@ -912,6 +944,8 @@ export var Brain = /*#__PURE__*/ function() {
912
944
  nextBrain.components = this.components;
913
945
  // Copy defaultTools to the next brain
914
946
  nextBrain.defaultTools = this.defaultTools;
947
+ // Copy memoryProvider to the next brain
948
+ nextBrain.memoryProvider = this.memoryProvider;
915
949
  return nextBrain;
916
950
  }
917
951
  }
@@ -1,5 +1,7 @@
1
1
  export var BRAIN_EVENTS = {
2
2
  START: 'brain:start',
3
+ // RESTART is deprecated - use START for all brain starts (fresh or resume)
4
+ // Kept temporarily for backwards compatibility during transition
3
5
  RESTART: 'brain:restart',
4
6
  STEP_START: 'step:start',
5
7
  STEP_COMPLETE: 'step:complete',
@@ -8,6 +10,8 @@ export var BRAIN_EVENTS = {
8
10
  ERROR: 'brain:error',
9
11
  COMPLETE: 'brain:complete',
10
12
  CANCELLED: 'brain:cancelled',
13
+ PAUSED: 'brain:paused',
14
+ RESUMED: 'brain:resumed',
11
15
  WEBHOOK: 'brain:webhook',
12
16
  WEBHOOK_RESPONSE: 'brain:webhook_response',
13
17
  // Agent step events
@@ -18,12 +22,20 @@ export var BRAIN_EVENTS = {
18
22
  AGENT_ASSISTANT_MESSAGE: 'agent:assistant_message',
19
23
  AGENT_COMPLETE: 'agent:complete',
20
24
  AGENT_TOKEN_LIMIT: 'agent:token_limit',
21
- AGENT_WEBHOOK: 'agent:webhook'
25
+ AGENT_ITERATION_LIMIT: 'agent:iteration_limit',
26
+ AGENT_WEBHOOK: 'agent:webhook',
27
+ AGENT_RAW_RESPONSE_MESSAGE: 'agent:raw_response_message',
28
+ AGENT_USER_MESSAGE: 'agent:user_message'
22
29
  };
23
30
  export var STATUS = {
24
31
  PENDING: 'pending',
25
32
  RUNNING: 'running',
26
33
  COMPLETE: 'complete',
27
34
  ERROR: 'error',
28
- CANCELLED: 'cancelled'
35
+ CANCELLED: 'cancelled',
36
+ WAITING: 'waiting',
37
+ PAUSED: 'paused',
38
+ // Internal status for tracking when execution is inside an agent loop.
39
+ // Publicly this maps to RUNNING for consumers.
40
+ AGENT_LOOP: 'agent_loop'
29
41
  };
@@ -41,7 +41,7 @@ import { brain as coreBrain } from './builder/brain.js';
41
41
  * }));
42
42
  * ```
43
43
  */ export function createBrain(config) {
44
- var services = config.services, components = config.components, defaultTools = config.defaultTools;
44
+ var services = config.services, components = config.components, defaultTools = config.defaultTools, memory = config.memory;
45
45
  // Implementation
46
46
  function brain(titleOrConfig, agentConfig) {
47
47
  var base = coreBrain(titleOrConfig);
@@ -51,6 +51,9 @@ import { brain as coreBrain } from './builder/brain.js';
51
51
  if (defaultTools) {
52
52
  base = base.withTools(defaultTools);
53
53
  }
54
+ if (memory) {
55
+ base = base.withMemory(memory);
56
+ }
54
57
  if (services) {
55
58
  base = base.withServices(services);
56
59
  }
@@ -7,8 +7,8 @@
7
7
  };
8
8
  /**
9
9
  * Default system prompt prepended to all agent steps.
10
- * Explains tool execution quirks to the LLM.
11
- */ export var DEFAULT_AGENT_SYSTEM_PROMPT = "## Tool Execution Behavior\n- Tools are executed sequentially in the order you call them\n- If a tool triggers a webhook (e.g., human approval), remaining tools in your response will NOT execute - you'll need to call them again after resuming\n- When waiting on multiple webhooks (e.g., Slack + email), the first webhook response received will resume execution\n- Terminal tools end the agent immediately - no further tools or iterations will run\n\n## Resumption Context\nWhen resuming after a webhook response, that response appears as the tool result in your conversation history.";
10
+ * Explains the headless nature of Positronic Brains.
11
+ */ export var DEFAULT_AGENT_SYSTEM_PROMPT = "## You Are a Positronic Brain\n\nYou are running as an automated agent in a headless workflow. This is NOT a chat interface - there is no user watching your text output.\n\n**To communicate with users, you MUST use tool calls.** Look at your available tools and use them to send messages, notifications, or create pages for user interaction.\n\n## Tool Execution\n- Tools execute sequentially in the order you call them\n- Webhook-triggering tools pause execution until the webhook fires\n- Terminal tools (like 'done') end the agent immediately\n\n## Resumption\nWhen resuming after a webhook, that response appears as the tool result in your conversation history.";
12
12
  /**
13
13
  * Maximum number of retries for step execution.
14
14
  */ export var MAX_RETRIES = 1;