effect-assistant 0.0.0-stage → 0.2.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 (172) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -2
  3. package/dist/AppEvent.d.ts +111 -0
  4. package/dist/AppEvent.d.ts.map +1 -0
  5. package/dist/AppEvent.js +71 -0
  6. package/dist/AppEvent.js.map +1 -0
  7. package/dist/Assistant.d.ts +403 -0
  8. package/dist/Assistant.d.ts.map +1 -0
  9. package/dist/Assistant.js +126 -0
  10. package/dist/Assistant.js.map +1 -0
  11. package/dist/AssistantActivity.d.ts +85 -0
  12. package/dist/AssistantActivity.d.ts.map +1 -0
  13. package/dist/AssistantActivity.js +105 -0
  14. package/dist/AssistantActivity.js.map +1 -0
  15. package/dist/AssistantEngine.d.ts +116 -0
  16. package/dist/AssistantEngine.d.ts.map +1 -0
  17. package/dist/AssistantEngine.js +255 -0
  18. package/dist/AssistantEngine.js.map +1 -0
  19. package/dist/AssistantEvent.d.ts +551 -0
  20. package/dist/AssistantEvent.d.ts.map +1 -0
  21. package/dist/AssistantEvent.js +473 -0
  22. package/dist/AssistantEvent.js.map +1 -0
  23. package/dist/AssistantLoop.d.ts +173 -0
  24. package/dist/AssistantLoop.d.ts.map +1 -0
  25. package/dist/AssistantLoop.js +111 -0
  26. package/dist/AssistantLoop.js.map +1 -0
  27. package/dist/AssistantToolCall.d.ts +32 -0
  28. package/dist/AssistantToolCall.d.ts.map +1 -0
  29. package/dist/AssistantToolCall.js +37 -0
  30. package/dist/AssistantToolCall.js.map +1 -0
  31. package/dist/Block.d.ts +69 -0
  32. package/dist/Block.d.ts.map +1 -0
  33. package/dist/Block.js +39 -0
  34. package/dist/Block.js.map +1 -0
  35. package/dist/BlockKit.d.ts +180 -0
  36. package/dist/BlockKit.d.ts.map +1 -0
  37. package/dist/BlockKit.js +148 -0
  38. package/dist/BlockKit.js.map +1 -0
  39. package/dist/ChatId.d.ts +31 -0
  40. package/dist/ChatId.d.ts.map +1 -0
  41. package/dist/ChatId.js +36 -0
  42. package/dist/ChatId.js.map +1 -0
  43. package/dist/ChatLog.d.ts +109 -0
  44. package/dist/ChatLog.d.ts.map +1 -0
  45. package/dist/ChatLog.js +177 -0
  46. package/dist/ChatLog.js.map +1 -0
  47. package/dist/ChatView.d.ts +408 -0
  48. package/dist/ChatView.d.ts.map +1 -0
  49. package/dist/ChatView.js +443 -0
  50. package/dist/ChatView.js.map +1 -0
  51. package/dist/Chats.d.ts +110 -0
  52. package/dist/Chats.d.ts.map +1 -0
  53. package/dist/Chats.js +98 -0
  54. package/dist/Chats.js.map +1 -0
  55. package/dist/Compaction.d.ts +105 -0
  56. package/dist/Compaction.d.ts.map +1 -0
  57. package/dist/Compaction.js +126 -0
  58. package/dist/Compaction.js.map +1 -0
  59. package/dist/CurrentChat.d.ts +40 -0
  60. package/dist/CurrentChat.d.ts.map +1 -0
  61. package/dist/CurrentChat.js +33 -0
  62. package/dist/CurrentChat.js.map +1 -0
  63. package/dist/InputId.d.ts +38 -0
  64. package/dist/InputId.d.ts.map +1 -0
  65. package/dist/InputId.js +43 -0
  66. package/dist/InputId.js.map +1 -0
  67. package/dist/Instructions.d.ts +56 -0
  68. package/dist/Instructions.d.ts.map +1 -0
  69. package/dist/Instructions.js +50 -0
  70. package/dist/Instructions.js.map +1 -0
  71. package/dist/Memory.d.ts +190 -0
  72. package/dist/Memory.d.ts.map +1 -0
  73. package/dist/Memory.js +216 -0
  74. package/dist/Memory.js.map +1 -0
  75. package/dist/RunId.d.ts +41 -0
  76. package/dist/RunId.d.ts.map +1 -0
  77. package/dist/RunId.js +46 -0
  78. package/dist/RunId.js.map +1 -0
  79. package/dist/Skill.d.ts +72 -0
  80. package/dist/Skill.d.ts.map +1 -0
  81. package/dist/Skill.js +58 -0
  82. package/dist/Skill.js.map +1 -0
  83. package/dist/Specialist.d.ts +267 -0
  84. package/dist/Specialist.d.ts.map +1 -0
  85. package/dist/Specialist.js +119 -0
  86. package/dist/Specialist.js.map +1 -0
  87. package/dist/ToolDiscovery.d.ts +107 -0
  88. package/dist/ToolDiscovery.d.ts.map +1 -0
  89. package/dist/ToolDiscovery.js +140 -0
  90. package/dist/ToolDiscovery.js.map +1 -0
  91. package/dist/ToolFailure.d.ts +66 -0
  92. package/dist/ToolFailure.d.ts.map +1 -0
  93. package/dist/ToolFailure.js +79 -0
  94. package/dist/ToolFailure.js.map +1 -0
  95. package/dist/_virtual/_rolldown/runtime.js +13 -0
  96. package/dist/index.d.ts +24 -0
  97. package/dist/index.js +24 -0
  98. package/dist/internal/chat.js +177 -0
  99. package/dist/internal/chat.js.map +1 -0
  100. package/dist/internal/events.d.ts +46 -0
  101. package/dist/internal/events.d.ts.map +1 -0
  102. package/dist/internal/events.js +65 -0
  103. package/dist/internal/events.js.map +1 -0
  104. package/dist/internal/history.js +147 -0
  105. package/dist/internal/history.js.map +1 -0
  106. package/dist/internal/instructions.js +11 -0
  107. package/dist/internal/instructions.js.map +1 -0
  108. package/dist/internal/loop.d.ts +73 -0
  109. package/dist/internal/loop.d.ts.map +1 -0
  110. package/dist/internal/loop.js +131 -0
  111. package/dist/internal/loop.js.map +1 -0
  112. package/dist/internal/schema.js +14 -0
  113. package/dist/internal/schema.js.map +1 -0
  114. package/dist/internal/skills.js +28 -0
  115. package/dist/internal/skills.js.map +1 -0
  116. package/dist/internal/specialists.js +272 -0
  117. package/dist/internal/specialists.js.map +1 -0
  118. package/dist/internal/telemetry.js +85 -0
  119. package/dist/internal/telemetry.js.map +1 -0
  120. package/dist/internal/toolkit.d.ts +62 -0
  121. package/dist/internal/toolkit.d.ts.map +1 -0
  122. package/dist/internal/toolkit.js +108 -0
  123. package/dist/internal/toolkit.js.map +1 -0
  124. package/dist/internal/tools.js +113 -0
  125. package/dist/internal/tools.js.map +1 -0
  126. package/dist/internal/turns.d.ts +64 -0
  127. package/dist/internal/turns.d.ts.map +1 -0
  128. package/dist/internal/turns.js +214 -0
  129. package/dist/internal/turns.js.map +1 -0
  130. package/dist/internal/uuid.js +45 -0
  131. package/dist/internal/uuid.js.map +1 -0
  132. package/dist/internal/writer.d.ts +12 -0
  133. package/dist/internal/writer.d.ts.map +1 -0
  134. package/package.json +52 -3
  135. package/src/AppEvent.ts +134 -0
  136. package/src/Assistant.ts +589 -0
  137. package/src/AssistantActivity.ts +150 -0
  138. package/src/AssistantEngine.ts +343 -0
  139. package/src/AssistantEvent.ts +569 -0
  140. package/src/AssistantLoop.ts +209 -0
  141. package/src/AssistantToolCall.ts +40 -0
  142. package/src/Block.ts +84 -0
  143. package/src/BlockKit.ts +298 -0
  144. package/src/ChatId.ts +36 -0
  145. package/src/ChatLog.ts +247 -0
  146. package/src/ChatView.ts +587 -0
  147. package/src/Chats.ts +122 -0
  148. package/src/Compaction.ts +207 -0
  149. package/src/CurrentChat.ts +47 -0
  150. package/src/InputId.ts +43 -0
  151. package/src/Instructions.ts +72 -0
  152. package/src/Memory.ts +276 -0
  153. package/src/RunId.ts +46 -0
  154. package/src/Skill.ts +91 -0
  155. package/src/Specialist.ts +355 -0
  156. package/src/ToolDiscovery.ts +179 -0
  157. package/src/ToolFailure.ts +74 -0
  158. package/src/index.ts +120 -0
  159. package/src/internal/chat.ts +323 -0
  160. package/src/internal/events.ts +100 -0
  161. package/src/internal/history.ts +294 -0
  162. package/src/internal/instructions.ts +9 -0
  163. package/src/internal/loop.ts +274 -0
  164. package/src/internal/schema.ts +25 -0
  165. package/src/internal/skills.ts +37 -0
  166. package/src/internal/specialists.ts +410 -0
  167. package/src/internal/telemetry.ts +125 -0
  168. package/src/internal/toolkit.ts +188 -0
  169. package/src/internal/tools.ts +159 -0
  170. package/src/internal/turns.ts +410 -0
  171. package/src/internal/uuid.ts +50 -0
  172. package/src/internal/writer.ts +12 -0
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Registers an application's own events with an assistant.
3
+ *
4
+ * An app event is a tagged schema for something the application reports into a chat, such as a
5
+ * workflow's progress, a webhook, a summary for compaction, or the draft the user opened.
6
+ * {@link make} registers one with two choices: whether storing it wakes a turn (`wakes`), and
7
+ * how the model reads it (`render`).
8
+ *
9
+ * @since 0.1.0
10
+ */
11
+ import * as Predicate from "effect/Predicate"
12
+ import type * as Schema from "effect/Schema"
13
+ import * as SchemaAST from "effect/SchemaAST"
14
+
15
+ /**
16
+ * Schema for one of the application's own events.
17
+ *
18
+ * It is a tagged struct or class (`Schema.TaggedStruct`, `Schema.TaggedClass`) that needs no
19
+ * services.
20
+ *
21
+ * @category models
22
+ * @since 0.1.0
23
+ */
24
+ export type EventSchema = Schema.Codec<{ readonly _tag: string }, { readonly _tag: string }> & {
25
+ readonly fields: { readonly _tag: { readonly ast: SchemaAST.AST } }
26
+ }
27
+
28
+ /**
29
+ * Describes how the model reads an event.
30
+ *
31
+ * `"json"` shows the event's tag and fields as JSON. A function shows the text it returns for the
32
+ * event.
33
+ *
34
+ * @category models
35
+ * @since 0.1.0
36
+ */
37
+ export type Render<A> = "json" | ((event: A) => string)
38
+
39
+ /**
40
+ * Represents one of the application's events, registered with an assistant.
41
+ *
42
+ * It holds the event's schema and tag, whether storing it wakes a turn, and how the model reads
43
+ * it. A `render` of `undefined` means the model doesn't read it.
44
+ *
45
+ * @category models
46
+ * @since 0.1.0
47
+ */
48
+ export interface AppEvent<S extends EventSchema = EventSchema> {
49
+ readonly schema: S
50
+ readonly tag: string
51
+ readonly wakes: boolean
52
+ readonly render: Render<S["Type"]> | undefined
53
+ }
54
+
55
+ /**
56
+ * Represents any registered event, for generic constraints.
57
+ *
58
+ * @category utility types
59
+ * @since 0.1.0
60
+ */
61
+ export type Any = AppEvent<any>
62
+
63
+ /**
64
+ * Extracts the type of a registered event's values.
65
+ *
66
+ * @category utility types
67
+ * @since 0.1.0
68
+ */
69
+ export type Type<E extends Any> = E["schema"]["Type"]
70
+
71
+ const tagOf = (schema: EventSchema): string => {
72
+ const ast = schema.fields._tag.ast
73
+
74
+ if (SchemaAST.isLiteral(ast) && Predicate.isString(ast.literal)) return ast.literal
75
+
76
+ throw new Error("An app event is a tagged struct or class.")
77
+ }
78
+
79
+ /**
80
+ * Registers one of the application's events with an assistant.
81
+ *
82
+ * **Details**
83
+ *
84
+ * Storing the event wakes a turn only when `wakes` is `true`; it defaults to `false`. `render`
85
+ * defaults to `"json"` for an event that wakes a turn. An event that doesn't wake a turn and has
86
+ * no `render` isn't read by the model.
87
+ *
88
+ * The schema must be a tagged struct or class whose `_tag` is a string literal; `make` throws
89
+ * otherwise.
90
+ *
91
+ * **Example** (Registering an event that wakes a turn)
92
+ *
93
+ * ```ts
94
+ * import { AppEvent, Assistant, InputId } from "effect-assistant"
95
+ * import * as Schema from "effect/Schema"
96
+ *
97
+ * class OrderShipped extends Schema.TaggedClass<OrderShipped>()("OrderShipped", {
98
+ * id: InputId.InputId,
99
+ * orderId: Schema.String,
100
+ * carrier: Schema.String
101
+ * }) {}
102
+ *
103
+ * export const MyAssistant = Assistant.make("my-assistant", {
104
+ * events: [
105
+ * AppEvent.make(OrderShipped, {
106
+ * wakes: true,
107
+ * render: (shipped) =>
108
+ * `Order ${shipped.orderId} shipped with ${shipped.carrier}. Tell the user if it matters.`
109
+ * })
110
+ * ]
111
+ * })
112
+ * ```
113
+ *
114
+ * @category constructors
115
+ * @since 0.1.0
116
+ */
117
+ export const make = <S extends EventSchema>(
118
+ schema: S,
119
+ options?: {
120
+ /** Whether storing it starts a turn, like a user's message. Default false. */
121
+ readonly wakes?: boolean | undefined
122
+ /** How the model reads it in its history. */
123
+ readonly render?: Render<S["Type"]> | undefined
124
+ }
125
+ ): AppEvent<S> => {
126
+ const wakes = options?.wakes ?? false
127
+
128
+ return {
129
+ schema,
130
+ tag: tagOf(schema),
131
+ wakes,
132
+ render: options?.render ?? (wakes ? "json" : undefined)
133
+ }
134
+ }