liminal 0.15.0 → 0.17.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 (226) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/Digest.ts +30 -0
  3. package/Envelope.ts +16 -0
  4. package/F/F.ts +1 -0
  5. package/{L.ts → L/L.ts} +9 -4
  6. package/L/append.ts +14 -0
  7. package/{assistant.ts → L/assistant.ts} +10 -9
  8. package/{assistantSchema.ts → L/assistantSchema.ts} +8 -7
  9. package/{assistantStream.ts → L/assistantStream.ts} +8 -11
  10. package/L/branch.ts +20 -0
  11. package/L/clear.ts +14 -0
  12. package/L/disable.ts +13 -0
  13. package/L/enable.ts +24 -0
  14. package/L/events.ts +11 -0
  15. package/L/json.ts +12 -0
  16. package/L/line.ts +22 -0
  17. package/{handle.ts → L/listen.ts} +6 -5
  18. package/L/messages.ts +10 -0
  19. package/L/prev.ts +4 -0
  20. package/L/provide.ts +10 -0
  21. package/L/self.ts +5 -0
  22. package/L/send.ts +56 -0
  23. package/L/system.ts +25 -0
  24. package/L/thread.ts +16 -0
  25. package/L/toolkit.ts +14 -0
  26. package/{user.test.ts → L/user.test.ts} +5 -2
  27. package/L/user.ts +32 -0
  28. package/LEvent.ts +23 -13
  29. package/Thread.ts +67 -0
  30. package/dist/Digest.d.ts +17 -0
  31. package/dist/Digest.js +7 -0
  32. package/dist/Digest.js.map +1 -0
  33. package/dist/Envelope.d.ts +13 -0
  34. package/dist/Envelope.js +2 -0
  35. package/dist/Envelope.js.map +1 -0
  36. package/dist/F/F.d.ts +1 -0
  37. package/dist/F/F.js +2 -0
  38. package/dist/F/F.js.map +1 -0
  39. package/dist/{L.d.ts → L/L.d.ts} +9 -4
  40. package/dist/{L.js → L/L.js} +9 -4
  41. package/dist/L/L.js.map +1 -0
  42. package/dist/{append.d.ts → L/append.d.ts} +3 -3
  43. package/dist/L/append.js +10 -0
  44. package/dist/L/append.js.map +1 -0
  45. package/dist/{assistant.d.ts → L/assistant.d.ts} +3 -3
  46. package/dist/{assistant.js → L/assistant.js} +8 -8
  47. package/dist/L/assistant.js.map +1 -0
  48. package/dist/{assistantSchema.d.ts → L/assistantSchema.d.ts} +4 -4
  49. package/dist/{assistantSchema.js → L/assistantSchema.js} +5 -5
  50. package/dist/L/assistantSchema.js.map +1 -0
  51. package/dist/{assistantStream.d.ts → L/assistantStream.d.ts} +3 -3
  52. package/dist/{assistantStream.js → L/assistantStream.js} +6 -6
  53. package/dist/L/assistantStream.js.map +1 -0
  54. package/dist/L/branch.d.ts +3 -0
  55. package/dist/L/branch.js +19 -0
  56. package/dist/L/branch.js.map +1 -0
  57. package/dist/{clear.d.ts → L/clear.d.ts} +3 -3
  58. package/dist/L/clear.js +12 -0
  59. package/dist/L/clear.js.map +1 -0
  60. package/dist/{disable.d.ts → L/disable.d.ts} +2 -2
  61. package/dist/L/disable.js +10 -0
  62. package/dist/L/disable.js.map +1 -0
  63. package/dist/{enable.d.ts → L/enable.d.ts} +2 -2
  64. package/dist/L/enable.js +13 -0
  65. package/dist/L/enable.js.map +1 -0
  66. package/dist/L/events.d.ts +5 -0
  67. package/dist/L/events.js +6 -0
  68. package/dist/L/events.js.map +1 -0
  69. package/dist/L/json.d.ts +5 -0
  70. package/dist/L/json.js +8 -0
  71. package/dist/L/json.js.map +1 -0
  72. package/dist/L/line.d.ts +5 -0
  73. package/dist/L/line.js +11 -0
  74. package/dist/L/line.js.map +1 -0
  75. package/dist/{handle.d.ts → L/listen.d.ts} +4 -4
  76. package/dist/{handle.js → L/listen.js} +4 -4
  77. package/dist/L/listen.js.map +1 -0
  78. package/dist/{messages.d.ts → L/messages.d.ts} +2 -2
  79. package/dist/L/messages.js +5 -0
  80. package/dist/L/messages.js.map +1 -0
  81. package/dist/L/prev.d.ts +5 -0
  82. package/dist/L/prev.js +5 -0
  83. package/dist/L/prev.js.map +1 -0
  84. package/dist/L/provide.d.ts +3 -0
  85. package/dist/L/provide.js +4 -0
  86. package/dist/L/provide.js.map +1 -0
  87. package/dist/L/self.d.ts +3 -0
  88. package/dist/L/self.js +4 -0
  89. package/dist/L/self.js.map +1 -0
  90. package/dist/L/send.d.ts +6 -0
  91. package/dist/L/send.js +34 -0
  92. package/dist/L/send.js.map +1 -0
  93. package/dist/L/system.d.ts +5 -0
  94. package/dist/L/system.js +14 -0
  95. package/dist/L/system.js.map +1 -0
  96. package/dist/L/thread.d.ts +3 -0
  97. package/dist/L/thread.js +15 -0
  98. package/dist/L/thread.js.map +1 -0
  99. package/dist/L/toolkit.d.ts +4 -0
  100. package/dist/L/toolkit.js +9 -0
  101. package/dist/L/toolkit.js.map +1 -0
  102. package/dist/L/user.d.ts +6 -0
  103. package/dist/{user.js → L/user.js} +3 -3
  104. package/dist/L/user.js.map +1 -0
  105. package/dist/L/user.test.js.map +1 -0
  106. package/dist/LEvent.d.ts +143 -15
  107. package/dist/LEvent.js +12 -9
  108. package/dist/LEvent.js.map +1 -1
  109. package/dist/Thread.d.ts +52 -0
  110. package/dist/Thread.js +32 -0
  111. package/dist/Thread.js.map +1 -0
  112. package/dist/index.d.ts +6 -3
  113. package/dist/index.js +6 -3
  114. package/dist/index.js.map +1 -1
  115. package/dist/patterns/Debate.d.ts +1 -0
  116. package/dist/patterns/Debate.js +3 -0
  117. package/dist/patterns/Debate.js.map +1 -0
  118. package/dist/patterns/Model.d.ts +6 -0
  119. package/dist/patterns/{coalesce_models.js → Model.js} +5 -6
  120. package/dist/patterns/Model.js.map +1 -0
  121. package/dist/patterns/Route.d.ts +3 -0
  122. package/dist/patterns/Route.js +14 -0
  123. package/dist/patterns/Route.js.map +1 -0
  124. package/dist/tsconfig.tsbuildinfo +1 -1
  125. package/dist/util/JsonValue.js.map +1 -1
  126. package/dist/util/NeverTool.d.ts +3 -0
  127. package/dist/util/NeverTool.js +3 -0
  128. package/dist/util/NeverTool.js.map +1 -0
  129. package/dist/util/Taggable.d.ts +5 -5
  130. package/dist/util/Taggable.js +10 -15
  131. package/dist/util/Taggable.js.map +1 -1
  132. package/dist/util/extract.d.ts +3 -0
  133. package/dist/util/extract.js +2 -0
  134. package/dist/util/extract.js.map +1 -0
  135. package/dist/util/messageCodec.d.ts +98 -0
  136. package/dist/util/messageCodec.js +5 -0
  137. package/dist/util/messageCodec.js.map +1 -0
  138. package/dist/util/{fixRaw.js → normalizeRaw.js} +1 -1
  139. package/dist/util/normalizeRaw.js.map +1 -0
  140. package/dist/util/prefix.d.ts +1 -0
  141. package/dist/util/prefix.js +2 -0
  142. package/dist/util/prefix.js.map +1 -0
  143. package/dist/util/raw.d.ts +6 -0
  144. package/dist/util/raw.js +5 -0
  145. package/dist/util/raw.js.map +1 -0
  146. package/index.ts +6 -3
  147. package/package.json +22 -9
  148. package/patterns/Debate.ts +2 -0
  149. package/patterns/{coalesce_models.ts → Model.ts} +6 -7
  150. package/patterns/{match_gist.ts → Route.ts} +11 -9
  151. package/util/JsonValue.ts +2 -2
  152. package/util/NeverTool.ts +10 -0
  153. package/util/Taggable.ts +27 -34
  154. package/util/extract.ts +7 -0
  155. package/util/messageCodec.ts +5 -0
  156. package/util/prefix.ts +1 -0
  157. package/util/raw.ts +27 -0
  158. package/LPretty.ts +0 -41
  159. package/Strand.ts +0 -49
  160. package/append.ts +0 -13
  161. package/branch.ts +0 -26
  162. package/clear.ts +0 -15
  163. package/disable.ts +0 -8
  164. package/dist/L.js.map +0 -1
  165. package/dist/LPretty.d.ts +0 -4
  166. package/dist/LPretty.js +0 -37
  167. package/dist/LPretty.js.map +0 -1
  168. package/dist/Strand.d.ts +0 -36
  169. package/dist/Strand.js +0 -18
  170. package/dist/Strand.js.map +0 -1
  171. package/dist/append.js +0 -10
  172. package/dist/append.js.map +0 -1
  173. package/dist/assistant.js.map +0 -1
  174. package/dist/assistantSchema.js.map +0 -1
  175. package/dist/assistantStream.js.map +0 -1
  176. package/dist/branch.d.ts +0 -4
  177. package/dist/branch.js +0 -18
  178. package/dist/branch.js.map +0 -1
  179. package/dist/clear.js +0 -14
  180. package/dist/clear.js.map +0 -1
  181. package/dist/disable.js +0 -7
  182. package/dist/disable.js.map +0 -1
  183. package/dist/enable.js +0 -6
  184. package/dist/enable.js.map +0 -1
  185. package/dist/events.d.ts +0 -5
  186. package/dist/events.js +0 -6
  187. package/dist/events.js.map +0 -1
  188. package/dist/handle.js.map +0 -1
  189. package/dist/messages.js +0 -5
  190. package/dist/messages.js.map +0 -1
  191. package/dist/patterns/coalesce_models.d.ts +0 -6
  192. package/dist/patterns/coalesce_models.js.map +0 -1
  193. package/dist/patterns/match_gist.d.ts +0 -3
  194. package/dist/patterns/match_gist.js +0 -16
  195. package/dist/patterns/match_gist.js.map +0 -1
  196. package/dist/sequence.d.ts +0 -2
  197. package/dist/sequence.js +0 -5
  198. package/dist/sequence.js.map +0 -1
  199. package/dist/strand_.d.ts +0 -4
  200. package/dist/strand_.js +0 -8
  201. package/dist/strand_.js.map +0 -1
  202. package/dist/system.d.ts +0 -5
  203. package/dist/system.js +0 -12
  204. package/dist/system.js.map +0 -1
  205. package/dist/user.d.ts +0 -4
  206. package/dist/user.js.map +0 -1
  207. package/dist/user.test.js.map +0 -1
  208. package/dist/userJson.d.ts +0 -6
  209. package/dist/userJson.js +0 -9
  210. package/dist/userJson.js.map +0 -1
  211. package/dist/util/Sequence.d.ts +0 -2
  212. package/dist/util/Sequence.js +0 -2
  213. package/dist/util/Sequence.js.map +0 -1
  214. package/dist/util/fixRaw.js.map +0 -1
  215. package/enable.ts +0 -15
  216. package/events.ts +0 -10
  217. package/messages.ts +0 -9
  218. package/sequence.ts +0 -9
  219. package/strand_.ts +0 -11
  220. package/system.ts +0 -12
  221. package/user.ts +0 -21
  222. package/userJson.ts +0 -14
  223. package/util/Sequence.ts +0 -11
  224. /package/dist/{user.test.d.ts → L/user.test.d.ts} +0 -0
  225. /package/dist/util/{fixRaw.d.ts → normalizeRaw.d.ts} +0 -0
  226. /package/util/{fixRaw.ts → normalizeRaw.ts} +0 -0
package/Thread.ts ADDED
@@ -0,0 +1,67 @@
1
+ import { Message } from "@effect/ai/AiInput"
2
+ import * as Brand from "effect/Brand"
3
+ import * as Effect from "effect/Effect"
4
+ import * as Option from "effect/Option"
5
+ import * as PubSub from "effect/PubSub"
6
+ import * as Schema from "effect/Schema"
7
+ import type { Mutable } from "effect/Types"
8
+ import { line } from "./L/line.ts"
9
+ import { self } from "./L/self.ts"
10
+ import type { LEvent } from "./LEvent.ts"
11
+ import type { NeverTool } from "./util/NeverTool.ts"
12
+ import { prefix } from "./util/prefix.ts"
13
+
14
+ export const ThreadIdTypeId: unique symbol = Symbol.for(prefix("ThreadNameTypeId"))
15
+ export type ThreadId = string & Brand.Brand<typeof ThreadIdTypeId>
16
+ export const ThreadId: Schema.brand<typeof Schema.String, typeof ThreadIdTypeId> = Schema.String.pipe(
17
+ Schema.brand(ThreadIdTypeId),
18
+ )
19
+
20
+ export class ThreadState extends Schema.Class<ThreadState>(prefix("ThreadState"))({
21
+ /** The system prompt to be passed along to the model. */
22
+ system: Schema.Option(Schema.String),
23
+ /** The messages based off of which the model infers the next message. */
24
+ messages: Schema.Array(Message).pipe(Schema.mutable),
25
+ }) {
26
+ static default = (): ThreadState =>
27
+ ThreadState.make({
28
+ system: Option.none(),
29
+ messages: [],
30
+ })
31
+ }
32
+
33
+ export interface ThreadInit {
34
+ /** The unique id of the thread. */
35
+ readonly id: ThreadId
36
+ /** The parent thread. */
37
+ readonly parent: Option.Option<Thread>
38
+ /** The pubsub with which thread-specific events are emitted. */
39
+ readonly events: PubSub.PubSub<LEvent>
40
+ /** The state of the current thread. */
41
+ readonly state: Mutable<ThreadState>
42
+ /** The tools to be made accessible to the model. */
43
+ tools: Option.Option<Set<NeverTool>>
44
+ }
45
+
46
+ export const ThreadTypeId: unique symbol = Symbol.for(prefix("Thread"))
47
+ export type ThreadTypeId = typeof ThreadTypeId
48
+
49
+ interface ThreadMembers extends ThreadInit {
50
+ readonly [ThreadTypeId]: ThreadTypeId
51
+ }
52
+
53
+ /** A conversation isolate. */
54
+ export interface Thread extends line<Thread>, ThreadMembers, Effect.Effect<ThreadId> {}
55
+
56
+ export const Thread = (init: ThreadInit): Thread => {
57
+ const members = {
58
+ [ThreadTypeId]: ThreadTypeId,
59
+ ...init,
60
+ } satisfies ThreadMembers
61
+ const self_ = Object.assign(
62
+ ((...args) => line(...args).pipe(Effect.provideService(self, self_))) satisfies line<Thread>,
63
+ Effect.succeed(init.id),
64
+ members,
65
+ ) as Thread
66
+ return self_
67
+ }
@@ -0,0 +1,17 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Option from "effect/Option";
4
+ import * as Schema from "effect/Schema";
5
+ import type { Thread } from "./Thread.ts";
6
+ export declare const DigestTypeId: unique symbol;
7
+ export type DigestTypeId = typeof DigestTypeId;
8
+ export declare const Digest: <const K extends string, A = string, I = string>(key: K, schema?: Schema.Schema<A, I>) => <Self>() => DigestClass<K, A, I, Self>;
9
+ export interface DigestClass<K extends string, A, I, Self> extends Effect.Effect<A, never, Self> {
10
+ new (_: never): this;
11
+ readonly Type: A;
12
+ readonly Encoded: I;
13
+ readonly [DigestTypeId]: DigestTypeId;
14
+ readonly key: K;
15
+ readonly digest: Effect.Effect<void, never, Self>;
16
+ readonly layer: <E, R>(f: (state: Option.Option<A>, inbox: Thread) => Effect.Effect<A, E, R>) => Layer.Layer<Self, E, Exclude<R, Self | Thread>>;
17
+ }
package/dist/Digest.js ADDED
@@ -0,0 +1,7 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Option from "effect/Option";
4
+ import * as Schema from "effect/Schema";
5
+ import { prefix } from "./util/prefix.js";
6
+ export const DigestTypeId = Symbol.for(prefix("Digest"));
7
+ //# sourceMappingURL=Digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Digest.js","sourceRoot":"","sources":["../Digest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAkB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { Thread } from "./Thread.ts";
2
+ export type Envelope = ({
3
+ to: Array<Thread>;
4
+ cc?: never;
5
+ } | {
6
+ to?: never;
7
+ cc: Array<Thread>;
8
+ } | {
9
+ to: Array<Thread>;
10
+ cc: Array<Thread>;
11
+ }) & {
12
+ bcc?: Array<Thread>;
13
+ };
@@ -0,0 +1,2 @@
1
+ import { Thread } from "./Thread.js";
2
+ //# sourceMappingURL=Envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Envelope.js","sourceRoot":"","sources":["../Envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA"}
package/dist/F/F.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "../L/json.ts";
package/dist/F/F.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "../L/json.js";
2
+ //# sourceMappingURL=F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"F.js","sourceRoot":"","sources":["../../F/F.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -4,12 +4,17 @@ export * from "./assistantSchema.ts";
4
4
  export * from "./assistantStream.ts";
5
5
  export * from "./branch.ts";
6
6
  export * from "./clear.ts";
7
+ export * from "./disable.ts";
7
8
  export * from "./enable.ts";
8
9
  export * from "./events.ts";
9
- export * from "./handle.ts";
10
+ export * from "./line.ts";
11
+ export * from "./listen.ts";
10
12
  export * from "./messages.ts";
11
- export * from "./sequence.ts";
12
- export * from "./strand_.ts";
13
+ export * from "./prev.ts";
14
+ export * from "./provide.ts";
15
+ export * from "./self.ts";
16
+ export * from "./send.ts";
13
17
  export * from "./system.ts";
18
+ export * from "./thread.ts";
19
+ export * from "./toolkit.ts";
14
20
  export * from "./user.ts";
15
- export * from "./userJson.ts";
@@ -4,13 +4,18 @@ export * from "./assistantSchema.js";
4
4
  export * from "./assistantStream.js";
5
5
  export * from "./branch.js";
6
6
  export * from "./clear.js";
7
+ export * from "./disable.js";
7
8
  export * from "./enable.js";
8
9
  export * from "./events.js";
9
- export * from "./handle.js";
10
+ export * from "./line.js";
11
+ export * from "./listen.js";
10
12
  export * from "./messages.js";
11
- export * from "./sequence.js";
12
- export * from "./strand_.js";
13
+ export * from "./prev.js";
14
+ export * from "./provide.js";
15
+ export * from "./self.js";
16
+ export * from "./send.js";
13
17
  export * from "./system.js";
18
+ export * from "./thread.js";
19
+ export * from "./toolkit.js";
14
20
  export * from "./user.js";
15
- export * from "./userJson.js";
16
21
  //# sourceMappingURL=L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"L.js","sourceRoot":"","sources":["../../L/L.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { Message } from "@effect/ai/AiInput";
2
2
  import * as Effect from "effect/Effect";
3
- import { Strand } from "./Strand.ts";
4
- /** Append messages to the current strand's message list. */
5
- export declare const append: (...messages: Array<Message>) => Effect.Effect<void, never, Strand>;
3
+ import type { Thread } from "../Thread.ts";
4
+ /** Append messages to the thread. */
5
+ export declare const append: (...messages: Array<Message>) => Effect.Effect<void, never, Thread>;
@@ -0,0 +1,10 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { MessagesAppendedEvent } from "../LEvent.js";
3
+ import { self } from "./self.js";
4
+ /** Append messages to the thread. */
5
+ export const append = Effect.fnUntraced(function* (...messages) {
6
+ const { state, events } = yield* self;
7
+ state.messages.push(...messages);
8
+ yield* events.publish(MessagesAppendedEvent.make({ messages }));
9
+ });
10
+ //# sourceMappingURL=append.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"append.js","sourceRoot":"","sources":["../../L/append.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,qCAAqC;AACrC,MAAM,CAAC,MAAM,MAAM,GAEuB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,GAAG,QAAQ;IAC/E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IACrC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;IAChC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACjE,CAAC,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import type { AiError } from "@effect/ai/AiError";
2
2
  import { AiLanguageModel } from "@effect/ai/AiLanguageModel";
3
3
  import * as Effect from "effect/Effect";
4
- import { Strand } from "./Strand.ts";
5
- /** Infer an assistant message and append it to the conversation. */
6
- export declare const assistant: Effect.Effect<string, AiError, AiLanguageModel | Strand>;
4
+ import type { Thread } from "../Thread.ts";
5
+ /** Infer an assistant message and append it to the thread. */
6
+ export declare const assistant: Effect.Effect<string, AiError, AiLanguageModel | Thread>;
@@ -1,25 +1,25 @@
1
1
  import { AssistantMessage, TextPart } from "@effect/ai/AiInput";
2
2
  import { AiLanguageModel } from "@effect/ai/AiLanguageModel";
3
- import * as AiToolkit from "@effect/ai/AiToolkit";
4
3
  import * as Effect from "effect/Effect";
5
4
  import * as Option from "effect/Option";
6
5
  import { append } from "./append.js";
7
- import { Strand } from "./Strand.js";
8
- /** Infer an assistant message and append it to the conversation. */
6
+ import { self } from "./self.js";
7
+ import { toolkit } from "./toolkit.js";
8
+ /** Infer an assistant message and append it to the thread. */
9
9
  export const assistant = Effect.gen(function* () {
10
10
  const model = yield* AiLanguageModel;
11
- const { system, messages, tools } = yield* Strand;
11
+ const { state: { system, messages: prompt } } = yield* self;
12
12
  let { text, results } = yield* model.generateText({
13
13
  system: Option.getOrUndefined(system),
14
- prompt: messages,
15
- toolkit: AiToolkit.make(...tools),
14
+ prompt,
15
+ toolkit,
16
16
  });
17
17
  // TODO: this shouldn't be necessary. Bug in Effect AI?
18
18
  if (!text.trim()) {
19
19
  text = results.values().next().value?.result;
20
20
  }
21
- yield* append(new AssistantMessage({
22
- parts: [new TextPart({ text })],
21
+ yield* append(AssistantMessage.make({
22
+ parts: [TextPart.make({ text })],
23
23
  }));
24
24
  return text;
25
25
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../L/assistant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,SAAS,GAA6D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrG,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IAC3D,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QAChD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM;QACN,OAAO;KACR,CAAC,CAAA;IACF,uDAAuD;IACvD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAyB,CAAA;IACjE,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CACX,gBAAgB,CAAC,IAAI,CAAC;QACpB,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KACjC,CAAC,CACH,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
@@ -2,12 +2,12 @@ import type { AiError } from "@effect/ai/AiError";
2
2
  import { AiLanguageModel } from "@effect/ai/AiLanguageModel";
3
3
  import * as Effect from "effect/Effect";
4
4
  import * as Schema from "effect/Schema";
5
- import { Strand } from "./Strand.ts";
6
- import { type JsonValue } from "./util/JsonValue.ts";
5
+ import type { Thread } from "../Thread.ts";
6
+ import { type JsonValue } from "../util/JsonValue.ts";
7
7
  /** Infer a structured assistant message and append its JSON representation to the conversation. */
8
8
  export declare const assistantSchema: {
9
9
  <F extends Record<string, Schema.Schema.AnyNoContext>>(fields: F): Effect.Effect<{
10
10
  [K in keyof F]: Schema.Schema.Type<F[K]>;
11
- }, AiError, AiLanguageModel | Strand>;
12
- <O, I extends JsonValue>(schema: Schema.Schema<O, I, never>): Effect.Effect<O, AiError, AiLanguageModel | Strand>;
11
+ }, AiError, AiLanguageModel | Thread>;
12
+ <O, I extends JsonValue>(schema: Schema.Schema<O, I, never>): Effect.Effect<O, AiError, AiLanguageModel | Thread>;
13
13
  };
@@ -4,13 +4,13 @@ import * as Effect from "effect/Effect";
4
4
  import * as Option from "effect/Option";
5
5
  import * as Schema from "effect/Schema";
6
6
  import * as SchemaAST from "effect/SchemaAST";
7
+ import { encodeJsonc } from "../util/JsonValue.js";
7
8
  import { append } from "./append.js";
8
- import { Strand } from "./Strand.js";
9
- import { encodeJsonc } from "./util/JsonValue.js";
9
+ import { self } from "./self.js";
10
10
  /** Infer a structured assistant message and append its JSON representation to the conversation. */
11
11
  export const assistantSchema = Effect.fnUntraced(function* (schema) {
12
12
  const model = yield* AiLanguageModel;
13
- const { system, messages } = yield* Strand;
13
+ const { state: { system, messages } } = yield* self;
14
14
  const isSchema = Schema.isSchema(schema);
15
15
  const schema_ = isSchema ? schema : Schema.Struct(schema);
16
16
  const isObject = !isSchema || isObjectSchema(SchemaAST.encodedAST(schema.ast));
@@ -20,9 +20,9 @@ export const assistantSchema = Effect.fnUntraced(function* (schema) {
20
20
  schema: wrapped,
21
21
  prompt: messages,
22
22
  }).pipe(Effect.map(({ value }) => isObject ? value : value["inner"]));
23
- yield* append(new AssistantMessage({
23
+ yield* append(AssistantMessage.make({
24
24
  parts: [
25
- new TextPart({
25
+ TextPart.make({
26
26
  text: yield* encodeJsonc(schema_)(value),
27
27
  }),
28
28
  ],
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantSchema.js","sourceRoot":"","sources":["../../L/assistantSchema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,mGAAmG;AACnG,MAAM,CAAC,MAAM,eAAe,GAOxB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,MAAM;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IAEnD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAA+B,CAAA;IACvF,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC9E,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAEtE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;QACxC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAC7D,CAAA;IAED,KAAK,CAAC,CAAC,MAAM,CACX,gBAAgB,CAAC,IAAI,CAAC;QACpB,KAAK,EAAE;YACL,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;aACzC,CAAC;SACH;KACF,CAAC,CACH,CAAA;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,GAAkB,EAAW,EAAE;IACrD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,KAAK,YAAY,CAAC;QAClB,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -2,6 +2,6 @@ import type { AiError } from "@effect/ai/AiError";
2
2
  import { AiLanguageModel } from "@effect/ai/AiLanguageModel";
3
3
  import type { AiResponse } from "@effect/ai/AiResponse";
4
4
  import * as Stream from "effect/Stream";
5
- import { Strand } from "./Strand";
6
- /** Get a streamed inference from the assistant without appending it to the strand's messages. */
7
- export declare const assistantStream: Stream.Stream<AiResponse, AiError, AiLanguageModel | Strand>;
5
+ import type { Thread } from "../Thread.ts";
6
+ /** Get a stream of an assistant message (does not append the message to the thread). */
7
+ export declare const assistantStream: Stream.Stream<AiResponse, AiError, AiLanguageModel | Thread>;
@@ -1,17 +1,17 @@
1
1
  import { AiLanguageModel } from "@effect/ai/AiLanguageModel";
2
- import * as AiToolkit from "@effect/ai/AiToolkit";
3
2
  import * as Effect from "effect/Effect";
4
3
  import * as Option from "effect/Option";
5
4
  import * as Stream from "effect/Stream";
6
- import { Strand } from "./Strand";
7
- /** Get a streamed inference from the assistant without appending it to the strand's messages. */
5
+ import { self } from "./self.js";
6
+ import { toolkit } from "./toolkit.js";
7
+ /** Get a stream of an assistant message (does not append the message to the thread). */
8
8
  export const assistantStream = Stream.unwrap(Effect.gen(function* () {
9
9
  const model = yield* AiLanguageModel;
10
- const { system, messages, tools } = yield* Strand;
10
+ const { state: { system, messages: prompt } } = yield* self;
11
11
  return model.streamText({
12
12
  system: Option.getOrUndefined(system),
13
- prompt: messages,
14
- toolkit: AiToolkit.make(...tools),
13
+ prompt,
14
+ toolkit,
15
15
  });
16
16
  }));
17
17
  //# sourceMappingURL=assistantStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantStream.js","sourceRoot":"","sources":["../../L/assistantStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,wFAAwF;AACxF,MAAM,CAAC,MAAM,eAAe,GAAiE,MAAM,CAAC,MAAM,CACxG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IAC3D,OAAO,KAAK,CAAC,UAAU,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM;QACN,OAAO;KACR,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CAAA"}
@@ -0,0 +1,3 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { Thread } from "../Thread.ts";
3
+ export declare const branch: Effect.Effect<Thread, never, Thread>;
@@ -0,0 +1,19 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Option from "effect/Option";
3
+ import * as PubSub from "effect/PubSub";
4
+ import { Thread, ThreadState } from "../Thread.js";
5
+ import { self } from "./self.js";
6
+ export const branch = Effect.gen(function* () {
7
+ const parent = yield* self;
8
+ return Thread({
9
+ id: parent.id,
10
+ parent: Option.some(parent),
11
+ events: yield* PubSub.unbounded(),
12
+ state: ThreadState.make({
13
+ system: parent.state.system,
14
+ messages: [...parent.state.messages ?? []],
15
+ }),
16
+ tools: parent.tools.pipe(Option.map((v) => new Set(v))),
17
+ });
18
+ });
19
+ //# sourceMappingURL=branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../L/branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAyC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IAC1B,OAAO,MAAM,CAAC;QACZ,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAU;QACzC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;YAC3B,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC3C,CAAC;QACF,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { Message } from "@effect/ai/AiInput";
2
2
  import * as Effect from "effect/Effect";
3
- import { Strand } from "./Strand.ts";
4
- /** Clear the strand's conversation. */
5
- export declare const clear: Effect.Effect<Array<Message>, never, Strand>;
3
+ import type { Thread } from "../Thread.ts";
4
+ /** Clear the thread of messages. */
5
+ export declare const clear: Effect.Effect<Array<Message>, never, Thread>;
@@ -0,0 +1,12 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { ThreadClearedEvent } from "../LEvent.js";
3
+ import { self } from "./self.js";
4
+ /** Clear the thread of messages. */
5
+ export const clear = Effect.gen(function* () {
6
+ const { state, events } = yield* self;
7
+ const cleared = state.messages;
8
+ state.messages = [];
9
+ yield* events.publish(ThreadClearedEvent.make({ cleared }));
10
+ return cleared;
11
+ });
12
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../L/clear.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,oCAAoC;AACpC,MAAM,CAAC,MAAM,KAAK,GAAiD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAA;IAC9B,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAA;IACnB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC3D,OAAO,OAAO,CAAA;AAChB,CAAC,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import * as AiTool from "@effect/ai/AiTool";
2
2
  import * as Effect from "effect/Effect";
3
- import { Strand } from "./Strand";
4
- export declare const disable: (tool: AiTool.Any) => Effect.Effect<void, never, Strand>;
3
+ import type { Thread } from "../Thread.ts";
4
+ export declare const disable: (tool: AiTool.Any) => Effect.Effect<void, never, Thread>;
@@ -0,0 +1,10 @@
1
+ import * as AiTool from "@effect/ai/AiTool";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Option from "effect/Option";
4
+ import { self } from "./self.js";
5
+ export const disable = (tool) => Effect.map(self, ({ tools }) => {
6
+ if (Option.isSome(tools)) {
7
+ tools.value.delete(tool);
8
+ }
9
+ });
10
+ //# sourceMappingURL=disable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable.js","sourceRoot":"","sources":["../../L/disable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAsC,EAAE,CAC9E,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7B,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAiB,CAAC,CAAA;IACvC,CAAC;AACH,CAAC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { AiTool, AnyStructSchema, Handler } from "@effect/ai/AiTool";
2
2
  import * as Effect from "effect/Effect";
3
3
  import type { Schema } from "effect/Schema";
4
- import { Strand } from "./Strand.ts";
5
- export declare const enable: <K extends string, E extends Schema.All, R>(toolkit: AiTool<K, AnyStructSchema, Schema.Any, E, R>) => Effect.Effect<void, E, Handler<K> | Strand | R>;
4
+ import type { Thread } from "../Thread.ts";
5
+ export declare const enable: <K extends string, E extends Schema.All, R>(tool: AiTool<K, AnyStructSchema, Schema.Any, E, R>) => Effect.Effect<void, E, Handler<K> | Thread | R>;
@@ -0,0 +1,13 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Option from "effect/Option";
3
+ import { self } from "./self.js";
4
+ export const enable = (tool) => Effect.map(self, (thread) => {
5
+ const tool_ = tool;
6
+ Option.match(thread.tools, {
7
+ onSome: (value) => value.add(tool_),
8
+ onNone: () => {
9
+ thread.tools = Option.some(new Set([tool_]));
10
+ },
11
+ });
12
+ });
13
+ //# sourceMappingURL=enable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable.js","sourceRoot":"","sources":["../../L/enable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAG,CAKpB,IAAkD,EACD,EAAE,CACnD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1B,MAAM,KAAK,GAAc,IAAa,CAAA;IACtC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;QACzB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACnC,MAAM,EAAE,GAAG,EAAE;YACX,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC9C,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as Stream from "effect/Stream";
2
+ import type { LEvent } from "../LEvent.ts";
3
+ import type { Thread } from "../Thread.ts";
4
+ /** A stream of thread events. */
5
+ export declare const events: Stream.Stream<LEvent, never, Thread>;
@@ -0,0 +1,6 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Stream from "effect/Stream";
3
+ import { self } from "./self.js";
4
+ /** A stream of thread events. */
5
+ export const events = self.pipe(Effect.map(({ events }) => Stream.fromPubSub(events)), Stream.unwrap);
6
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../L/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,iCAAiC;AACjC,MAAM,CAAC,MAAM,MAAM,GAAyC,IAAI,CAAC,IAAI,CACnE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EACrD,MAAM,CAAC,MAAM,CACd,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type * as Schema from "effect/Schema";
3
+ import { type JsonValue } from "../util/JsonValue.ts";
4
+ /** Stringify and append some JSON as a user message to the conversation. */
5
+ export declare const json: <A, I extends JsonValue>(value: A, schema?: Schema.Schema<A, I>) => Effect.Effect<string>;
package/dist/L/json.js ADDED
@@ -0,0 +1,8 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { encodeJsonc } from "../util/JsonValue.js";
3
+ /** Stringify and append some JSON as a user message to the conversation. */
4
+ export const json = Effect.fnUntraced(function* (value, schema) {
5
+ const encoded = schema ? encodeJsonc(schema)(value) : JSON.stringify(value, null, 2);
6
+ return `\`\`\`json${schema ? "c" : ""}\n${encoded}\n\`\`\``;
7
+ });
8
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../L/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAA;AAElE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,IAAI,GAGY,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,MAAM;IACpE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACpF,OAAO,aAAa,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,UAAU,CAAA;AAC7D,CAAC,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from "effect/Effect";
2
+ export interface line<RIn = never, E = never, ROut = never> {
3
+ <Arg extends Array<Effect.All.EffectAny>>(...steps: Arg): Effect.Effect<Arg extends [] ? void : Arg extends [...infer _0, infer L extends Effect.All.EffectAny] ? Effect.Effect.Success<L> : never, Effect.Effect.Error<Arg[number]> | E, Exclude<Effect.Effect.Context<Arg[number]>, RIn> | ROut>;
4
+ }
5
+ export declare const line: line;
package/dist/L/line.js ADDED
@@ -0,0 +1,11 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { prev } from "./prev.js";
3
+ export const line = Effect.fnUntraced(function* (...steps) {
4
+ let acc;
5
+ while (steps.length) {
6
+ const current = steps.shift();
7
+ acc = yield* current.pipe(Effect.provideService(prev, acc));
8
+ }
9
+ return acc;
10
+ });
11
+ //# sourceMappingURL=line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line.js","sourceRoot":"","sources":["../../L/line.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAahC,MAAM,CAAC,MAAM,IAAI,GAAS,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,GAAG,KAAK;IAC5D,IAAI,GAAY,CAAA;IAChB,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;QAC9B,GAAG,GAAG,KAAK,CAAC,CAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAwB,CAAA;IACrF,CAAC;IACD,OAAO,GAAY,CAAA;AACrB,CAAC,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import type { RuntimeFiber } from "effect/Fiber";
3
3
  import * as Scope from "effect/Scope";
4
- import type { LEvent } from "./LEvent.ts";
5
- import { Strand } from "./Strand.ts";
6
- /** Attach an event handler to process the events of the current strand. */
7
- export declare const listen: <A, E, R>(f: (event: LEvent) => Effect.Effect<A, E, R>) => Effect.Effect<RuntimeFiber<void, E>, never, Strand | R | Scope.Scope>;
4
+ import type { LEvent } from "../LEvent.ts";
5
+ import type { Thread } from "../Thread.ts";
6
+ /** Attach an event handler to process thread events. */
7
+ export declare const listen: <A, E, R>(f: (event: LEvent) => Effect.Effect<A, E, R>) => Effect.Effect<RuntimeFiber<void, E>, never, Thread | R | Scope.Scope>;
@@ -1,14 +1,14 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import * as Scope from "effect/Scope";
3
3
  import * as Stream from "effect/Stream";
4
- import { Strand } from "./Strand.js";
5
- /** Attach an event handler to process the events of the current strand. */
4
+ import { self } from "./self.js";
5
+ /** Attach an event handler to process thread events. */
6
6
  export const listen = Effect.fnUntraced(function* (f) {
7
7
  const latch = yield* Effect.makeLatch(false);
8
- const { events } = yield* Strand;
8
+ const { events } = yield* self;
9
9
  const dequeue = yield* events.subscribe;
10
10
  const fiber = yield* latch.open.pipe(Effect.zipRight(Stream.fromQueue(dequeue).pipe(Stream.runForEach(f), Effect.fork)));
11
11
  yield* latch.await;
12
12
  return fiber;
13
13
  });
14
- //# sourceMappingURL=handle.js.map
14
+ //# sourceMappingURL=listen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../L/listen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,wDAAwD;AACxD,MAAM,CAAC,MAAM,MAAM,GAE0D,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,CAAC;IACxG,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAA;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAClC,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5B,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,IAAI,CACZ,CACF,CACF,CAAA;IACD,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IAClB,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { Message } from "@effect/ai/AiInput";
2
2
  import * as Effect from "effect/Effect";
3
- import { Strand } from "./Strand.ts";
3
+ import type { Thread } from "../Thread.ts";
4
4
  /** Get a copy of the current list of messages. */
5
- export declare const messages: Effect.Effect<Array<Message>, never, Strand>;
5
+ export declare const messages: Effect.Effect<Array<Message>, never, Thread>;
@@ -0,0 +1,5 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { self } from "./self.js";
3
+ /** Get a copy of the current list of messages. */
4
+ export const messages = Effect.map(self, ({ state: { messages: [...messages] } }) => messages);
5
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../L/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,kDAAkD;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAiD,MAAM,CAAC,GAAG,CAC9E,IAAI,EACJ,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,CACrD,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as Context from "effect/Context";
2
+ declare const prev_base: Context.TagClass<prev, "liminal/prev", unknown>;
3
+ export declare class prev extends prev_base {
4
+ }
5
+ export {};
package/dist/L/prev.js ADDED
@@ -0,0 +1,5 @@
1
+ import * as Context from "effect/Context";
2
+ import { prefix } from "../util/prefix.js";
3
+ export class prev extends Context.Tag(prefix("prev"))() {
4
+ }
5
+ //# sourceMappingURL=prev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prev.js","sourceRoot":"","sources":["../../L/prev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,MAAM,OAAO,IAAK,SAAQ,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAiB;CAAG"}