effect-assistant 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/README.md +1 -1
  2. package/dist/Assistant.d.ts +74 -28
  3. package/dist/Assistant.d.ts.map +1 -1
  4. package/dist/Assistant.js +11 -4
  5. package/dist/Assistant.js.map +1 -1
  6. package/dist/AssistantActivity.d.ts +10 -16
  7. package/dist/AssistantActivity.d.ts.map +1 -1
  8. package/dist/AssistantActivity.js +11 -4
  9. package/dist/AssistantActivity.js.map +1 -1
  10. package/dist/AssistantEngine.d.ts +39 -1
  11. package/dist/AssistantEngine.d.ts.map +1 -1
  12. package/dist/AssistantEngine.js +81 -28
  13. package/dist/AssistantEngine.js.map +1 -1
  14. package/dist/AssistantEvent.d.ts +52 -70
  15. package/dist/AssistantEvent.d.ts.map +1 -1
  16. package/dist/AssistantEvent.js +28 -57
  17. package/dist/AssistantEvent.js.map +1 -1
  18. package/dist/AssistantLoop.d.ts +7 -5
  19. package/dist/AssistantLoop.d.ts.map +1 -1
  20. package/dist/AssistantLoop.js +6 -3
  21. package/dist/AssistantLoop.js.map +1 -1
  22. package/dist/Block.js.map +1 -1
  23. package/dist/BlockKit.d.ts +14 -18
  24. package/dist/BlockKit.d.ts.map +1 -1
  25. package/dist/BlockKit.js +4 -7
  26. package/dist/BlockKit.js.map +1 -1
  27. package/dist/ChatLog.js +1 -1
  28. package/dist/Compaction.d.ts +8 -4
  29. package/dist/Compaction.d.ts.map +1 -1
  30. package/dist/Compaction.js +12 -15
  31. package/dist/Compaction.js.map +1 -1
  32. package/dist/CurrentChat.d.ts +2 -1
  33. package/dist/CurrentChat.d.ts.map +1 -1
  34. package/dist/CurrentChat.js.map +1 -1
  35. package/dist/Instructions.js +1 -1
  36. package/dist/Skill.d.ts +33 -0
  37. package/dist/Skill.d.ts.map +1 -1
  38. package/dist/Skill.js +27 -1
  39. package/dist/Skill.js.map +1 -1
  40. package/dist/Specialist.d.ts +4 -1
  41. package/dist/Specialist.d.ts.map +1 -1
  42. package/dist/Specialist.js.map +1 -1
  43. package/dist/Timeline.d.ts +482 -0
  44. package/dist/Timeline.d.ts.map +1 -0
  45. package/dist/Timeline.js +572 -0
  46. package/dist/Timeline.js.map +1 -0
  47. package/dist/ToolDiscovery.d.ts +4 -5
  48. package/dist/ToolDiscovery.d.ts.map +1 -1
  49. package/dist/ToolDiscovery.js +5 -4
  50. package/dist/ToolDiscovery.js.map +1 -1
  51. package/dist/ToolFailure.d.ts +1 -1
  52. package/dist/ToolFailure.js +1 -1
  53. package/dist/ToolFailure.js.map +1 -1
  54. package/dist/index.d.ts +2 -5
  55. package/dist/index.js +4 -7
  56. package/dist/internal/chat.js +11 -37
  57. package/dist/internal/chat.js.map +1 -1
  58. package/dist/internal/events.d.ts +15 -16
  59. package/dist/internal/events.d.ts.map +1 -1
  60. package/dist/internal/events.js +29 -28
  61. package/dist/internal/events.js.map +1 -1
  62. package/dist/internal/history.js +26 -58
  63. package/dist/internal/history.js.map +1 -1
  64. package/dist/internal/input.js +7 -0
  65. package/dist/internal/input.js.map +1 -0
  66. package/dist/internal/loop.d.ts +2 -2
  67. package/dist/internal/loop.d.ts.map +1 -1
  68. package/dist/internal/loop.js +21 -56
  69. package/dist/internal/loop.js.map +1 -1
  70. package/dist/internal/skills.js +6 -1
  71. package/dist/internal/skills.js.map +1 -1
  72. package/dist/internal/specialists.js +7 -7
  73. package/dist/internal/specialists.js.map +1 -1
  74. package/dist/internal/toolkit.d.ts +6 -20
  75. package/dist/internal/toolkit.d.ts.map +1 -1
  76. package/dist/internal/toolkit.js +10 -31
  77. package/dist/internal/toolkit.js.map +1 -1
  78. package/dist/internal/tools.js +2 -21
  79. package/dist/internal/tools.js.map +1 -1
  80. package/dist/internal/turns.d.ts.map +1 -1
  81. package/dist/internal/turns.js +24 -43
  82. package/dist/internal/turns.js.map +1 -1
  83. package/package.json +3 -2
  84. package/src/Assistant.ts +75 -29
  85. package/src/AssistantActivity.ts +11 -18
  86. package/src/AssistantEngine.ts +110 -43
  87. package/src/AssistantEvent.ts +46 -74
  88. package/src/AssistantLoop.ts +7 -5
  89. package/src/Block.ts +1 -1
  90. package/src/BlockKit.ts +18 -31
  91. package/src/Compaction.ts +8 -21
  92. package/src/CurrentChat.ts +2 -1
  93. package/src/Skill.ts +34 -1
  94. package/src/Specialist.ts +4 -1
  95. package/src/Timeline.ts +861 -0
  96. package/src/ToolDiscovery.ts +5 -13
  97. package/src/ToolFailure.ts +1 -1
  98. package/src/index.ts +5 -20
  99. package/src/internal/chat.ts +8 -57
  100. package/src/internal/events.ts +43 -43
  101. package/src/internal/history.ts +36 -101
  102. package/src/internal/input.ts +3 -0
  103. package/src/internal/loop.ts +31 -101
  104. package/src/internal/skills.ts +11 -0
  105. package/src/internal/specialists.ts +6 -9
  106. package/src/internal/toolkit.ts +17 -60
  107. package/src/internal/tools.ts +2 -53
  108. package/src/internal/turns.ts +37 -79
  109. package/dist/AppEvent.d.ts +0 -111
  110. package/dist/AppEvent.d.ts.map +0 -1
  111. package/dist/AppEvent.js +0 -71
  112. package/dist/AppEvent.js.map +0 -1
  113. package/dist/ChatView.d.ts +0 -459
  114. package/dist/ChatView.d.ts.map +0 -1
  115. package/dist/ChatView.js +0 -496
  116. package/dist/ChatView.js.map +0 -1
  117. package/dist/Decision.d.ts +0 -145
  118. package/dist/Decision.d.ts.map +0 -1
  119. package/dist/Decision.js +0 -178
  120. package/dist/Decision.js.map +0 -1
  121. package/dist/DecisionId.d.ts +0 -37
  122. package/dist/DecisionId.d.ts.map +0 -1
  123. package/dist/DecisionId.js +0 -44
  124. package/dist/DecisionId.js.map +0 -1
  125. package/dist/internal/decisions.js +0 -66
  126. package/dist/internal/decisions.js.map +0 -1
  127. package/src/AppEvent.ts +0 -134
  128. package/src/ChatView.ts +0 -658
  129. package/src/Decision.ts +0 -241
  130. package/src/DecisionId.ts +0 -46
  131. package/src/internal/decisions.ts +0 -131
package/src/Skill.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @since 0.1.0
9
9
  */
10
+ import type * as Tool from "effect/ai/Tool"
10
11
  import type * as Instructions from "./Instructions.ts"
11
12
 
12
13
  /**
@@ -23,6 +24,11 @@ export interface Skill<R = never> {
23
24
  readonly description: string
24
25
  /** Text, or an Effect resolved each time the skill is loaded. */
25
26
  readonly instructions: Instructions.Instructions<R>
27
+ /**
28
+ * The tools its instructions use. A loop offers the skill only when its toolkit has every one of
29
+ * them, matched by name. Unset, a loop always offers it.
30
+ */
31
+ readonly tools?: ReadonlyArray<Tool.Any> | undefined
26
32
  }
27
33
 
28
34
  /**
@@ -34,6 +40,11 @@ export interface Skill<R = never> {
34
40
  * the skill. The instructions are text, or an Effect that is resolved each time the skill is
35
41
  * loaded.
36
42
  *
43
+ * `tools` lists the tools the instructions use. A loop whose toolkit lacks any of them, matched by
44
+ * name, leaves the skill out of its catalog and of `load_skill`, so a loop that gets its tools per
45
+ * user (by role, say) never offers a playbook it can't follow. A tool that only `ToolDiscovery`
46
+ * finds isn't in the toolkit, so it doesn't count. Without `tools`, every loop offers the skill.
47
+ *
37
48
  * **Example** (Defining a playbook for ordering campaigns)
38
49
  *
39
50
  * ```ts
@@ -51,6 +62,26 @@ export interface Skill<R = never> {
51
62
  * )
52
63
  * ```
53
64
  *
65
+ * **Example** (Offering a skill only with the tools it uses)
66
+ *
67
+ * ```ts
68
+ * import { Skill } from "effect-assistant"
69
+ * import * as Tool from "effect/ai/Tool"
70
+ * import * as Schema from "effect/Schema"
71
+ *
72
+ * const StartCampaign = Tool.make("start_campaign", {
73
+ * parameters: Schema.Struct({ campaignId: Schema.String, budget: Schema.Finite }),
74
+ * success: Schema.String
75
+ * })
76
+ *
77
+ * // Left out of a loop whose toolkit has no start_campaign, like a viewer's.
78
+ * const orderingCampaigns = Skill.make("Ordering a campaign", {
79
+ * description: "Use when the user wants to order or start a campaign.",
80
+ * instructions: "When you know who it should reach and the budget, call start_campaign.",
81
+ * tools: [StartCampaign]
82
+ * })
83
+ * ```
84
+ *
54
85
  * @category constructors
55
86
  * @since 0.1.0
56
87
  */
@@ -61,8 +92,10 @@ export const make = <R = never>(
61
92
  readonly description: string
62
93
  /** Text, or an Effect resolved each time the skill is loaded. */
63
94
  readonly instructions: Instructions.Instructions<R>
95
+ /** The tools its instructions use: a loop whose toolkit lacks one leaves the skill out. */
96
+ readonly tools?: ReadonlyArray<Tool.Any> | undefined
64
97
  }
65
- ): Skill<R> => ({ name, description: options.description, instructions: options.instructions })
98
+ ): Skill<R> => ({ name, description: options.description, instructions: options.instructions, tools: options.tools })
66
99
 
67
100
  /**
68
101
  * Extracts the services that skills need when they're loaded.
package/src/Specialist.ts CHANGED
@@ -127,7 +127,10 @@ export interface LoopOptions<T extends Record<string, Tool.Any> = Record<never,
127
127
  readonly instructions: string | Instructions.Resolved
128
128
  /** The loop's tools, as a native toolkit whose handlers come from the layer. */
129
129
  readonly toolkit?: Toolkit.Toolkit<T> | undefined
130
- /** Playbooks, listed as a catalog in the prompt and loaded with `load_skill` when one matches. */
130
+ /**
131
+ * Playbooks, listed as a catalog in the prompt and loaded with `load_skill` when one matches. A
132
+ * skill made with `tools` is left out when the toolkit lacks one of them.
133
+ */
131
134
  readonly skills?: ReadonlyArray<Skill<RS>> | undefined
132
135
  /** The model calls allowed per brief. Defaults to 8. */
133
136
  readonly maxSteps?: number | undefined