liminal 0.10.0 → 0.11.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 (90) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/L.ts +8 -2
  3. package/LEvent.ts +13 -7
  4. package/Sequence.ts +14 -0
  5. package/Strand.ts +18 -39
  6. package/assistant.ts +3 -4
  7. package/assistantStruct.ts +2 -1
  8. package/branch.ts +26 -0
  9. package/clear.ts +15 -0
  10. package/dist/L.d.ts +8 -2
  11. package/dist/L.js +8 -2
  12. package/dist/L.js.map +1 -1
  13. package/dist/LEvent.d.ts +12 -8
  14. package/dist/LEvent.js +8 -5
  15. package/dist/LEvent.js.map +1 -1
  16. package/dist/Sequence.d.ts +2 -0
  17. package/dist/Sequence.js +2 -0
  18. package/dist/Sequence.js.map +1 -0
  19. package/dist/Strand.d.ts +18 -13
  20. package/dist/Strand.js +2 -20
  21. package/dist/Strand.js.map +1 -1
  22. package/dist/assistant.js +3 -4
  23. package/dist/assistant.js.map +1 -1
  24. package/dist/assistantStruct.js +2 -1
  25. package/dist/assistantStruct.js.map +1 -1
  26. package/dist/branch.d.ts +4 -0
  27. package/dist/branch.js +18 -0
  28. package/dist/branch.js.map +1 -0
  29. package/dist/clear.d.ts +5 -0
  30. package/dist/clear.js +15 -0
  31. package/dist/clear.js.map +1 -0
  32. package/dist/events.d.ts +1 -1
  33. package/dist/events.js +1 -1
  34. package/dist/events.js.map +1 -1
  35. package/dist/index.d.ts +1 -0
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/internal/JsonValue.d.ts +5 -0
  39. package/dist/internal/JsonValue.js +2 -0
  40. package/dist/internal/JsonValue.js.map +1 -0
  41. package/dist/{Taggable.d.ts → internal/Taggable.d.ts} +1 -1
  42. package/dist/internal/Taggable.js.map +1 -0
  43. package/dist/messages.d.ts +5 -0
  44. package/dist/messages.js +5 -0
  45. package/dist/messages.js.map +1 -0
  46. package/dist/pretty.d.ts +2 -0
  47. package/dist/pretty.js +37 -0
  48. package/dist/pretty.js.map +1 -0
  49. package/dist/reduce.d.ts +2 -4
  50. package/dist/reduce.js +10 -29
  51. package/dist/reduce.js.map +1 -1
  52. package/dist/sequence_.d.ts +2 -0
  53. package/dist/sequence_.js +5 -0
  54. package/dist/sequence_.js.map +1 -0
  55. package/dist/strand_.d.ts +4 -0
  56. package/dist/strand_.js +18 -0
  57. package/dist/strand_.js.map +1 -0
  58. package/dist/system.d.ts +5 -0
  59. package/dist/system.js +11 -0
  60. package/dist/system.js.map +1 -0
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/dist/user.d.ts +1 -1
  63. package/dist/user.js +1 -1
  64. package/dist/user.js.map +1 -1
  65. package/dist/userJson.d.ts +6 -0
  66. package/dist/userJson.js +8 -0
  67. package/dist/userJson.js.map +1 -0
  68. package/events.ts +1 -1
  69. package/index.ts +1 -0
  70. package/internal/JsonValue.ts +5 -0
  71. package/{Taggable.ts → internal/Taggable.ts} +1 -1
  72. package/messages.ts +9 -0
  73. package/package.json +8 -6
  74. package/pretty.ts +41 -0
  75. package/reduce.ts +21 -45
  76. package/sequence_.ts +9 -0
  77. package/strand_.ts +25 -0
  78. package/system.ts +13 -0
  79. package/user.ts +1 -1
  80. package/userJson.ts +12 -0
  81. package/dist/Taggable.js.map +0 -1
  82. package/dist/turn.d.ts +0 -7
  83. package/dist/turn.js +0 -21
  84. package/dist/turn.js.map +0 -1
  85. package/dist/unsafeSet.d.ts +0 -5
  86. package/dist/unsafeSet.js +0 -13
  87. package/dist/unsafeSet.js.map +0 -1
  88. package/turn.ts +0 -25
  89. package/unsafeSet.ts +0 -15
  90. /package/dist/{Taggable.js → internal/Taggable.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # liminal
2
2
 
3
+ ## 0.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 48aa187: Rework mechanism of denoting strand boundary.
8
+
3
9
  ## 0.10.0
4
10
 
5
11
  ### Minor Changes
package/L.ts CHANGED
@@ -1,8 +1,14 @@
1
1
  export * from "./append.ts"
2
2
  export * from "./assistant.ts"
3
3
  export * from "./assistantStruct.ts"
4
+ export * from "./branch.ts"
5
+ export * from "./clear.ts"
4
6
  export * from "./events.ts"
7
+ export * from "./messages.ts"
5
8
  export * from "./reduce.ts"
6
- export * from "./turn.ts"
7
- export * from "./unsafeSet.ts"
9
+ export * from "./Sequence.ts"
10
+ export * from "./sequence_.ts"
11
+ export * from "./strand_.ts"
12
+ export * from "./system.ts"
8
13
  export * from "./user.ts"
14
+ export * from "./userJson.ts"
package/LEvent.ts CHANGED
@@ -1,17 +1,23 @@
1
1
  import { Message } from "@effect/ai/AiInput"
2
2
  import * as Schema from "effect/Schema"
3
3
 
4
+ export class Messages extends Schema.Array(Message) {}
5
+
6
+ /** An event in which one or more messages were added to the current strand's message list. */
4
7
  export class MessagesAppended extends Schema.TaggedClass<MessagesAppended>("MessagesAppended")("MessagesAppended", {
5
- messages: Schema.Array(Message),
8
+ messages: Messages,
6
9
  }) {}
7
10
 
8
- export class MessagesReduced extends Schema.TaggedClass<MessagesReduced>("MessagesReduced")("MessagesReduced", {
9
- previous: Schema.Array(Message),
10
- messages: Schema.Array(Message),
11
+ /** An event in which the current strand's message list is cleared. */
12
+ export class MessagesCleared extends Schema.TaggedClass<MessagesCleared>("MessagesCleared")("MessagesCleared", {
13
+ cleared: Messages,
11
14
  }) {}
12
15
 
13
- export type LEvent = typeof LEvent.Type
16
+ export type LEvent = typeof LEvent["Type"]
14
17
  export const LEvent: Schema.Union<[
15
18
  typeof MessagesAppended,
16
- typeof MessagesReduced,
17
- ]> = Schema.Union(MessagesAppended, MessagesReduced)
19
+ typeof MessagesCleared,
20
+ ]> = Schema.Union(
21
+ MessagesAppended,
22
+ MessagesCleared,
23
+ )
package/Sequence.ts ADDED
@@ -0,0 +1,14 @@
1
+ import * as Effect from "effect/Effect"
2
+
3
+ export type Sequence<P = never, R1 = never> = <Arg extends Array<Effect.Effect<any, any, any>>>(
4
+ ...steps: Arg
5
+ ) => Effect.Effect<
6
+ Arg extends [] ? void
7
+ : [Arg extends [...infer _0, infer L] ? L : never] extends [Effect.Effect<infer A, infer _E, infer _R>] ? A
8
+ : never,
9
+ Arg[number] extends never ? never : [Arg[number]] extends [Effect.Effect<infer _A, infer E, infer _R>] ? E : never,
10
+ Exclude<
11
+ Arg[number] extends never ? never : [Arg[number]] extends [Effect.Effect<infer _A, infer _E, infer R>] ? R : never,
12
+ P
13
+ > | R1
14
+ >
package/Strand.ts CHANGED
@@ -1,45 +1,24 @@
1
1
  import { Message } from "@effect/ai/AiInput"
2
- import * as AiTool from "@effect/ai/AiTool"
2
+ import type { AiTool } from "@effect/ai/AiTool"
3
3
  import * as Context from "effect/Context"
4
- import * as Effect from "effect/Effect"
5
- import * as Layer from "effect/Layer"
4
+ import * as Option from "effect/Option"
6
5
  import * as PubSub from "effect/PubSub"
7
6
  import type { LEvent } from "./LEvent.ts"
8
- import { normalize, type OptionallyTaggable } from "./Taggable.ts"
9
7
 
10
- export class Strand extends Context.Tag("liminal/Strand")<Strand, {
11
- readonly system?: string | undefined
12
- messages: Array<Message>
13
- tools?: Array<AiTool.AiTool<string>> | undefined
14
- readonly events: PubSub.PubSub<LEvent>
15
- }>() {
16
- /** Create a layer for a Strand, which represents an conversation isolate. */
17
- static new: OptionallyTaggable<Layer.Layer<Strand>> = (a0, ...aRest) =>
18
- Layer.effect(
19
- Strand,
20
- PubSub.unbounded<LEvent>().pipe(
21
- Effect.map((events) =>
22
- Strand.of({
23
- system: normalize(a0, aRest),
24
- messages: [],
25
- events,
26
- })
27
- ),
28
- ),
29
- )
30
-
31
- /** Create a layer for a Strand, which represents an conversation isolate. */
32
- static clone: OptionallyTaggable<Layer.Layer<Strand, never, Strand>> = (a0, ...aRest) =>
33
- Layer.effect(
34
- Strand,
35
- Effect.gen(function*() {
36
- const { system, messages, tools } = yield* Strand
37
- return Strand.of({
38
- system: a0 ? normalize(a0, aRest) : system,
39
- messages: [...messages],
40
- tools,
41
- events: yield* PubSub.unbounded<LEvent>(),
42
- })
43
- }),
44
- )
8
+ export declare namespace Strand {
9
+ export interface Service {
10
+ /** The parent strand. */
11
+ readonly parent: Option.Option<Service>
12
+ /** The pubsub with which the current strand's events are emitted. */
13
+ readonly events: PubSub.PubSub<LEvent>
14
+ /** The current system prompt to be passed along to the model. */
15
+ system: Option.Option<string>
16
+ /** The list of messages that the model uses to infer the next message. */
17
+ messages: Array<Message>
18
+ /** The tools available to the model. */
19
+ tools: Array<AiTool<string>>
20
+ }
45
21
  }
22
+
23
+ /** A context tag that denotes the boundary of a conversation isolate. */
24
+ export class Strand extends Context.Tag("liminal/Strand")<Strand, Strand.Service>() {}
package/assistant.ts CHANGED
@@ -1,19 +1,18 @@
1
1
  import type { AiError } from "@effect/ai/AiError"
2
2
  import { AssistantMessage, TextPart } from "@effect/ai/AiInput"
3
3
  import { AiLanguageModel } from "@effect/ai/AiLanguageModel"
4
- import * as AiToolkit from "@effect/ai/AiToolkit"
5
4
  import * as Effect from "effect/Effect"
5
+ import * as Option from "effect/Option"
6
6
  import { append } from "./append.ts"
7
7
  import { Strand } from "./Strand.ts"
8
8
 
9
9
  /** Infer an assistant message and append it to the conversation. */
10
10
  export const assistant: Effect.Effect<string, AiError, AiLanguageModel | Strand> = Effect.gen(function*() {
11
11
  const model = yield* AiLanguageModel
12
- const { system, messages, tools } = yield* Strand
12
+ const { system, messages } = yield* Strand
13
13
  const { text } = yield* model.generateText({
14
- system,
14
+ system: Option.getOrUndefined(system),
15
15
  prompt: messages,
16
- toolkit: AiToolkit.make(...tools ?? []) as never,
17
16
  })
18
17
  yield* append(
19
18
  new AssistantMessage({
@@ -2,6 +2,7 @@ import type { AiError } from "@effect/ai/AiError"
2
2
  import { AssistantMessage, TextPart } from "@effect/ai/AiInput"
3
3
  import { AiLanguageModel } from "@effect/ai/AiLanguageModel"
4
4
  import * as Effect from "effect/Effect"
5
+ import * as Option from "effect/Option"
5
6
  import * as Schema from "effect/Schema"
6
7
  import { append } from "./append.ts"
7
8
  import { Strand } from "./Strand.ts"
@@ -19,7 +20,7 @@ export const assistantStruct: {
19
20
  const model = yield* AiLanguageModel
20
21
  const { system, messages } = yield* Strand
21
22
  const { value, text } = yield* model.generateObject({
22
- system,
23
+ system: Option.getOrUndefined(system),
23
24
  schema: Schema.isSchema(schema) ? schema as Schema.Schema.AnyNoContext : Schema.Struct(schema),
24
25
  prompt: messages,
25
26
  })
package/branch.ts ADDED
@@ -0,0 +1,26 @@
1
+ import * as Effect from "effect/Effect"
2
+ import { flow, identity } from "effect/Function"
3
+ import * as Option from "effect/Option"
4
+ import * as PubSub from "effect/PubSub"
5
+ import type { LEvent } from "./LEvent.ts"
6
+ import type { Sequence } from "./Sequence.ts"
7
+ import { sequence } from "./sequence_.ts"
8
+ import { Strand } from "./Strand.ts"
9
+
10
+ /** Isolate the effect with a new strand in context. */
11
+ export const branch: Sequence<never, Strand> = flow(
12
+ sequence,
13
+ Effect.provideServiceEffect(
14
+ Strand,
15
+ Effect.gen(function*() {
16
+ const parent = yield* Strand
17
+ return Strand.of({
18
+ parent: Option.some(parent),
19
+ system: Option.map(parent.system, identity),
20
+ events: yield* PubSub.unbounded<LEvent>(),
21
+ messages: parent.messages.slice(),
22
+ tools: parent.tools.slice(),
23
+ })
24
+ }),
25
+ ),
26
+ )
package/clear.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { Message } from "@effect/ai/AiInput"
2
+ import * as Effect from "effect/Effect"
3
+ import { MessagesCleared } from "./LEvent.ts"
4
+ import { Strand } from "./Strand.ts"
5
+
6
+ /** Clear the strand's conversation. */
7
+ export const clear: Effect.Effect<Array<Message>, never, Strand> = Effect.gen(function*() {
8
+ const strand = yield* Strand
9
+ const { messages, events } = strand
10
+ strand.messages = []
11
+ yield* events.publish(MessagesCleared.make({
12
+ cleared: messages,
13
+ }))
14
+ return messages
15
+ })
package/dist/L.d.ts CHANGED
@@ -1,8 +1,14 @@
1
1
  export * from "./append.ts";
2
2
  export * from "./assistant.ts";
3
3
  export * from "./assistantStruct.ts";
4
+ export * from "./branch.ts";
5
+ export * from "./clear.ts";
4
6
  export * from "./events.ts";
7
+ export * from "./messages.ts";
5
8
  export * from "./reduce.ts";
6
- export * from "./turn.ts";
7
- export * from "./unsafeSet.ts";
9
+ export * from "./Sequence.ts";
10
+ export * from "./sequence_.ts";
11
+ export * from "./strand_.ts";
12
+ export * from "./system.ts";
8
13
  export * from "./user.ts";
14
+ export * from "./userJson.ts";
package/dist/L.js CHANGED
@@ -1,9 +1,15 @@
1
1
  export * from "./append.js";
2
2
  export * from "./assistant.js";
3
3
  export * from "./assistantStruct.js";
4
+ export * from "./branch.js";
5
+ export * from "./clear.js";
4
6
  export * from "./events.js";
7
+ export * from "./messages.js";
5
8
  export * from "./reduce.js";
6
- export * from "./turn.js";
7
- export * from "./unsafeSet.js";
9
+ export * from "./Sequence.js";
10
+ export * from "./sequence_.js";
11
+ export * from "./strand_.js";
12
+ export * from "./system.js";
8
13
  export * from "./user.js";
14
+ export * from "./userJson.js";
9
15
  //# sourceMappingURL=L.js.map
package/dist/L.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"L.js","sourceRoot":"","sources":["../L.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"L.js","sourceRoot":"","sources":["../L.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA"}
package/dist/LEvent.d.ts CHANGED
@@ -1,22 +1,26 @@
1
1
  import * as Schema from "effect/Schema";
2
+ declare const Messages_base: Schema.Array$<Schema.Union<[typeof import("@effect/ai/AiInput").UserMessage, typeof import("@effect/ai/AiInput").AssistantMessage, typeof import("@effect/ai/AiInput").ToolMessage]>>;
3
+ export declare class Messages extends Messages_base {
4
+ }
2
5
  declare const MessagesAppended_base: Schema.TaggedClass<MessagesAppended, "MessagesAppended", {
3
6
  readonly _tag: Schema.tag<"MessagesAppended">;
4
7
  } & {
5
- messages: Schema.Array$<Schema.Union<[typeof import("@effect/ai/AiInput").UserMessage, typeof import("@effect/ai/AiInput").AssistantMessage, typeof import("@effect/ai/AiInput").ToolMessage]>>;
8
+ messages: typeof Messages;
6
9
  }>;
10
+ /** An event in which one or more messages were added to the current strand's message list. */
7
11
  export declare class MessagesAppended extends MessagesAppended_base {
8
12
  }
9
- declare const MessagesReduced_base: Schema.TaggedClass<MessagesReduced, "MessagesReduced", {
10
- readonly _tag: Schema.tag<"MessagesReduced">;
13
+ declare const MessagesCleared_base: Schema.TaggedClass<MessagesCleared, "MessagesCleared", {
14
+ readonly _tag: Schema.tag<"MessagesCleared">;
11
15
  } & {
12
- previous: Schema.Array$<Schema.Union<[typeof import("@effect/ai/AiInput").UserMessage, typeof import("@effect/ai/AiInput").AssistantMessage, typeof import("@effect/ai/AiInput").ToolMessage]>>;
13
- messages: Schema.Array$<Schema.Union<[typeof import("@effect/ai/AiInput").UserMessage, typeof import("@effect/ai/AiInput").AssistantMessage, typeof import("@effect/ai/AiInput").ToolMessage]>>;
16
+ cleared: typeof Messages;
14
17
  }>;
15
- export declare class MessagesReduced extends MessagesReduced_base {
18
+ /** An event in which the current strand's message list is cleared. */
19
+ export declare class MessagesCleared extends MessagesCleared_base {
16
20
  }
17
- export type LEvent = typeof LEvent.Type;
21
+ export type LEvent = typeof LEvent["Type"];
18
22
  export declare const LEvent: Schema.Union<[
19
23
  typeof MessagesAppended,
20
- typeof MessagesReduced
24
+ typeof MessagesCleared
21
25
  ]>;
22
26
  export {};
package/dist/LEvent.js CHANGED
@@ -1,13 +1,16 @@
1
1
  import { Message } from "@effect/ai/AiInput";
2
2
  import * as Schema from "effect/Schema";
3
+ export class Messages extends Schema.Array(Message) {
4
+ }
5
+ /** An event in which one or more messages were added to the current strand's message list. */
3
6
  export class MessagesAppended extends Schema.TaggedClass("MessagesAppended")("MessagesAppended", {
4
- messages: Schema.Array(Message),
7
+ messages: Messages,
5
8
  }) {
6
9
  }
7
- export class MessagesReduced extends Schema.TaggedClass("MessagesReduced")("MessagesReduced", {
8
- previous: Schema.Array(Message),
9
- messages: Schema.Array(Message),
10
+ /** An event in which the current strand's message list is cleared. */
11
+ export class MessagesCleared extends Schema.TaggedClass("MessagesCleared")("MessagesCleared", {
12
+ cleared: Messages,
10
13
  }) {
11
14
  }
12
- export const LEvent = Schema.Union(MessagesAppended, MessagesReduced);
15
+ export const LEvent = Schema.Union(MessagesAppended, MessagesCleared);
13
16
  //# sourceMappingURL=LEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LEvent.js","sourceRoot":"","sources":["../LEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CAAmB,kBAAkB,CAAC,CAAC,kBAAkB,EAAE;IACjH,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;CAChC,CAAC;CAAG;AAEL,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,CAAkB,iBAAiB,CAAC,CAAC,iBAAiB,EAAE;IAC7G,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;CAChC,CAAC;CAAG;AAGL,MAAM,CAAC,MAAM,MAAM,GAGd,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAA"}
1
+ {"version":3,"file":"LEvent.js","sourceRoot":"","sources":["../LEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;CAAG;AAEtD,8FAA8F;AAC9F,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CAAmB,kBAAkB,CAAC,CAAC,kBAAkB,EAAE;IACjH,QAAQ,EAAE,QAAQ;CACnB,CAAC;CAAG;AAEL,sEAAsE;AACtE,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,CAAkB,iBAAiB,CAAC,CAAC,iBAAiB,EAAE;IAC7G,OAAO,EAAE,QAAQ;CAClB,CAAC;CAAG;AAGL,MAAM,CAAC,MAAM,MAAM,GAGd,MAAM,CAAC,KAAK,CACf,gBAAgB,EAChB,eAAe,CAChB,CAAA"}
@@ -0,0 +1,2 @@
1
+ import * as Effect from "effect/Effect";
2
+ export type Sequence<P = never, R1 = never> = <Arg extends Array<Effect.Effect<any, any, any>>>(...steps: Arg) => Effect.Effect<Arg extends [] ? void : [Arg extends [...infer _0, infer L] ? L : never] extends [Effect.Effect<infer A, infer _E, infer _R>] ? A : never, Arg[number] extends never ? never : [Arg[number]] extends [Effect.Effect<infer _A, infer E, infer _R>] ? E : never, Exclude<Arg[number] extends never ? never : [Arg[number]] extends [Effect.Effect<infer _A, infer _E, infer R>] ? R : never, P> | R1>;
@@ -0,0 +1,2 @@
1
+ import * as Effect from "effect/Effect";
2
+ //# sourceMappingURL=Sequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sequence.js","sourceRoot":"","sources":["../Sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA"}
package/dist/Strand.d.ts CHANGED
@@ -1,20 +1,25 @@
1
1
  import { Message } from "@effect/ai/AiInput";
2
- import * as AiTool from "@effect/ai/AiTool";
2
+ import type { AiTool } from "@effect/ai/AiTool";
3
3
  import * as Context from "effect/Context";
4
- import * as Layer from "effect/Layer";
4
+ import * as Option from "effect/Option";
5
5
  import * as PubSub from "effect/PubSub";
6
6
  import type { LEvent } from "./LEvent.ts";
7
- import { type OptionallyTaggable } from "./Taggable.ts";
8
- declare const Strand_base: Context.TagClass<Strand, "liminal/Strand", {
9
- readonly system?: string | undefined;
10
- messages: Array<Message>;
11
- tools?: Array<AiTool.AiTool<string>> | undefined;
12
- readonly events: PubSub.PubSub<LEvent>;
13
- }>;
7
+ export declare namespace Strand {
8
+ interface Service {
9
+ /** The parent strand. */
10
+ readonly parent: Option.Option<Service>;
11
+ /** The pubsub with which the current strand's events are emitted. */
12
+ readonly events: PubSub.PubSub<LEvent>;
13
+ /** The current system prompt to be passed along to the model. */
14
+ system: Option.Option<string>;
15
+ /** The list of messages that the model uses to infer the next message. */
16
+ messages: Array<Message>;
17
+ /** The tools available to the model. */
18
+ tools: Array<AiTool<string>>;
19
+ }
20
+ }
21
+ declare const Strand_base: Context.TagClass<Strand, "liminal/Strand", Strand.Service>;
22
+ /** A context tag that denotes the boundary of a conversation isolate. */
14
23
  export declare class Strand extends Strand_base {
15
- /** Create a layer for a Strand, which represents an conversation isolate. */
16
- static new: OptionallyTaggable<Layer.Layer<Strand>>;
17
- /** Create a layer for a Strand, which represents an conversation isolate. */
18
- static clone: OptionallyTaggable<Layer.Layer<Strand, never, Strand>>;
19
24
  }
20
25
  export {};
package/dist/Strand.js CHANGED
@@ -1,26 +1,8 @@
1
1
  import { Message } from "@effect/ai/AiInput";
2
- import * as AiTool from "@effect/ai/AiTool";
3
2
  import * as Context from "effect/Context";
4
- import * as Effect from "effect/Effect";
5
- import * as Layer from "effect/Layer";
3
+ import * as Option from "effect/Option";
6
4
  import * as PubSub from "effect/PubSub";
7
- import { normalize } from "./Taggable.js";
5
+ /** A context tag that denotes the boundary of a conversation isolate. */
8
6
  export class Strand extends Context.Tag("liminal/Strand")() {
9
- /** Create a layer for a Strand, which represents an conversation isolate. */
10
- static new = (a0, ...aRest) => Layer.effect(Strand, PubSub.unbounded().pipe(Effect.map((events) => Strand.of({
11
- system: normalize(a0, aRest),
12
- messages: [],
13
- events,
14
- }))));
15
- /** Create a layer for a Strand, which represents an conversation isolate. */
16
- static clone = (a0, ...aRest) => Layer.effect(Strand, Effect.gen(function* () {
17
- const { system, messages, tools } = yield* Strand;
18
- return Strand.of({
19
- system: a0 ? normalize(a0, aRest) : system,
20
- messages: [...messages],
21
- tools,
22
- events: yield* PubSub.unbounded(),
23
- });
24
- }));
25
7
  }
26
8
  //# sourceMappingURL=Strand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Strand.js","sourceRoot":"","sources":["../Strand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,SAAS,EAA2B,MAAM,eAAe,CAAA;AAElE,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAKrD;IACF,6EAA6E;IAC7E,MAAM,CAAC,GAAG,GAA4C,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CACrE,KAAK,CAAC,MAAM,CACV,MAAM,EACN,MAAM,CAAC,SAAS,EAAU,CAAC,IAAI,CAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACpB,MAAM,CAAC,EAAE,CAAC;QACR,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC;QAC5B,QAAQ,EAAE,EAAE;QACZ,MAAM;KACP,CAAC,CACH,CACF,CACF,CAAA;IAEH,6EAA6E;IAC7E,MAAM,CAAC,KAAK,GAA2D,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CACtF,KAAK,CAAC,MAAM,CACV,MAAM,EACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;QACjD,OAAO,MAAM,CAAC,EAAE,CAAC;YACf,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;YAC1C,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;YACvB,KAAK;YACL,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAU;SAC1C,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA"}
1
+ {"version":3,"file":"Strand.js","sourceRoot":"","sources":["../Strand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAkBvC,yEAAyE;AACzE,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAA0B;CAAG"}
package/dist/assistant.js CHANGED
@@ -1,17 +1,16 @@
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";
4
+ import * as Option from "effect/Option";
5
5
  import { append } from "./append.js";
6
6
  import { Strand } from "./Strand.js";
7
7
  /** Infer an assistant message and append it to the conversation. */
8
8
  export const assistant = Effect.gen(function* () {
9
9
  const model = yield* AiLanguageModel;
10
- const { system, messages, tools } = yield* Strand;
10
+ const { system, messages } = yield* Strand;
11
11
  const { text } = yield* model.generateText({
12
- system,
12
+ system: Option.getOrUndefined(system),
13
13
  prompt: messages,
14
- toolkit: AiToolkit.make(...tools ?? []),
15
14
  });
16
15
  yield* append(new AssistantMessage({
17
16
  parts: [new TextPart({ text })],
@@ -1 +1 @@
1
- {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../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,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAA6D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrG,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IACjD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,MAAM;QACN,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAU;KACjD,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,MAAM,CACX,IAAI,gBAAgB,CAAC;QACnB,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAChC,CAAC,CACH,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../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;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAA6D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrG,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,MAAM,CACX,IAAI,gBAAgB,CAAC;QACnB,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAChC,CAAC,CACH,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { AssistantMessage, TextPart } from "@effect/ai/AiInput";
2
2
  import { AiLanguageModel } from "@effect/ai/AiLanguageModel";
3
3
  import * as Effect from "effect/Effect";
4
+ import * as Option from "effect/Option";
4
5
  import * as Schema from "effect/Schema";
5
6
  import { append } from "./append.js";
6
7
  import { Strand } from "./Strand.js";
@@ -9,7 +10,7 @@ export const assistantStruct = Effect.fnUntraced(function* (schema) {
9
10
  const model = yield* AiLanguageModel;
10
11
  const { system, messages } = yield* Strand;
11
12
  const { value, text } = yield* model.generateObject({
12
- system,
13
+ system: Option.getOrUndefined(system),
13
14
  schema: Schema.isSchema(schema) ? schema : Schema.Struct(schema),
14
15
  prompt: messages,
15
16
  });
@@ -1 +1 @@
1
- {"version":3,"file":"assistantStruct.js","sourceRoot":"","sources":["../assistantStruct.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,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,mGAAmG;AACnG,MAAM,CAAC,MAAM,eAAe,GAOxB,MAAM,CAAC,UAAU,CACnB,QAAQ,CAAC,EAAC,MAAM;IACd,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC1C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;QAClD,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAoC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9F,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,MAAM,CACX,IAAI,gBAAgB,CAAC;QACnB,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAChC,CAAC,CACH,CAAA;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CACF,CAAA"}
1
+ {"version":3,"file":"assistantStruct.js","sourceRoot":"","sources":["../assistantStruct.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,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,mGAAmG;AACnG,MAAM,CAAC,MAAM,eAAe,GAOxB,MAAM,CAAC,UAAU,CACnB,QAAQ,CAAC,EAAC,MAAM;IACd,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC1C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;QAClD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAoC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9F,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,MAAM,CACX,IAAI,gBAAgB,CAAC;QACnB,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAChC,CAAC,CACH,CAAA;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CACF,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Sequence } from "./Sequence.ts";
2
+ import { Strand } from "./Strand.ts";
3
+ /** Isolate the effect with a new strand in context. */
4
+ export declare const branch: Sequence<never, Strand>;
package/dist/branch.js ADDED
@@ -0,0 +1,18 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { flow, identity } from "effect/Function";
3
+ import * as Option from "effect/Option";
4
+ import * as PubSub from "effect/PubSub";
5
+ import { sequence } from "./sequence_.js";
6
+ import { Strand } from "./Strand.js";
7
+ /** Isolate the effect with a new strand in context. */
8
+ export const branch = flow(sequence, Effect.provideServiceEffect(Strand, Effect.gen(function* () {
9
+ const parent = yield* Strand;
10
+ return Strand.of({
11
+ parent: Option.some(parent),
12
+ system: Option.map(parent.system, identity),
13
+ events: yield* PubSub.unbounded(),
14
+ messages: parent.messages.slice(),
15
+ tools: parent.tools.slice(),
16
+ });
17
+ })));
18
+ //# sourceMappingURL=branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,uDAAuD;AACvD,MAAM,CAAC,MAAM,MAAM,GAA4B,IAAI,CACjD,QAAQ,EACR,MAAM,CAAC,oBAAoB,CACzB,MAAM,EACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC5B,OAAO,MAAM,CAAC,EAAE,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC3C,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAU;QACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE;QACjC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE;KAC5B,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CACF,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { Message } from "@effect/ai/AiInput";
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>;
package/dist/clear.js ADDED
@@ -0,0 +1,15 @@
1
+ import { Message } from "@effect/ai/AiInput";
2
+ import * as Effect from "effect/Effect";
3
+ import { MessagesCleared } from "./LEvent.js";
4
+ import { Strand } from "./Strand.js";
5
+ /** Clear the strand's conversation. */
6
+ export const clear = Effect.gen(function* () {
7
+ const strand = yield* Strand;
8
+ const { messages, events } = strand;
9
+ strand.messages = [];
10
+ yield* events.publish(MessagesCleared.make({
11
+ cleared: messages,
12
+ }));
13
+ return messages;
14
+ });
15
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,uCAAuC;AACvC,MAAM,CAAC,MAAM,KAAK,GAAiD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC5B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACnC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAA;IACpB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;QACzC,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC,CAAA;IACH,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAC,CAAA"}
package/dist/events.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as Stream from "effect/Stream";
2
2
  import type { LEvent } from "./LEvent";
3
3
  import { Strand } from "./Strand.ts";
4
- /** Event stream underlying the current strand. */
4
+ /** Get a new event stream of the events of the current strand. */
5
5
  export declare const events: Stream.Stream<LEvent, never, Strand>;
package/dist/events.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import * as Stream from "effect/Stream";
3
3
  import { Strand } from "./Strand.js";
4
- /** Event stream underlying the current strand. */
4
+ /** Get a new event stream of the events of the current strand. */
5
5
  export const events = Stream.unwrap(Effect.map(Strand, ({ events }) => Stream.fromPubSub(events)));
6
6
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,kDAAkD;AAClD,MAAM,CAAC,MAAM,MAAM,GAAyC,MAAM,CAAC,MAAM,CACvE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAC9D,CAAA"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,kEAAkE;AAClE,MAAM,CAAC,MAAM,MAAM,GAAyC,MAAM,CAAC,MAAM,CACvE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAC9D,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * as L from "./L.ts";
2
2
  export * from "./LEvent.ts";
3
+ export * from "./pretty.ts";
3
4
  export * from "./Strand.ts";
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * as L from "./L.js";
2
2
  export * from "./LEvent.js";
3
+ export * from "./pretty.js";
3
4
  export * from "./Strand.js";
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
@@ -0,0 +1,5 @@
1
+ export type JsonValue = null | boolean | number | string | JsonValueArray | JsonValueObject;
2
+ export type JsonValueArray = Array<JsonValue> | ReadonlyArray<JsonValue>;
3
+ export type JsonValueObject = {
4
+ [key: string]: JsonValue;
5
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=JsonValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonValue.js","sourceRoot":"","sources":["../../internal/JsonValue.ts"],"names":[],"mappings":""}
@@ -3,7 +3,7 @@ export type Taggable<T> = {
3
3
  (template: TemplateStringsArray, ...substitutions: Array<unknown>): T;
4
4
  (template: string | TemplateStringsArray, ...substitutions: Array<unknown>): T;
5
5
  };
6
- export type OptionallyTaggable<T> = {
6
+ export type TaggableNullable<T> = {
7
7
  (value?: string | undefined): T;
8
8
  (template: TemplateStringsArray, ...substitutions: Array<unknown>): T;
9
9
  (template?: string | TemplateStringsArray | undefined, ...substitutions: Array<unknown>): T;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Taggable.js","sourceRoot":"","sources":["../../internal/Taggable.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,EAAM,EACN,QAAwB,EAAE,EAC2B,EAAE,CACvD,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAkB,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { Message } from "@effect/ai/AiInput";
2
+ import * as Effect from "effect/Effect";
3
+ import { Strand } from "./Strand.ts";
4
+ /** Get a copy of the current list of messages. */
5
+ export declare const messages: Effect.Effect<Array<Message>, never, Strand>;