liminal 0.11.0 → 0.12.2

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 (112) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/L.ts +4 -3
  3. package/{pretty.ts → LPretty.ts} +3 -3
  4. package/Strand.ts +24 -4
  5. package/append.ts +1 -1
  6. package/assistant.ts +3 -1
  7. package/assistantStream.ts +25 -0
  8. package/branch.ts +3 -3
  9. package/clear.ts +1 -1
  10. package/disable.ts +5 -0
  11. package/dist/L.d.ts +4 -3
  12. package/dist/L.js +4 -3
  13. package/dist/L.js.map +1 -1
  14. package/dist/LPretty.d.ts +4 -0
  15. package/dist/{pretty.js → LPretty.js} +4 -4
  16. package/dist/LPretty.js.map +1 -0
  17. package/dist/Strand.d.ts +9 -3
  18. package/dist/Strand.js +11 -1
  19. package/dist/Strand.js.map +1 -1
  20. package/dist/append.d.ts +1 -1
  21. package/dist/append.js +0 -1
  22. package/dist/append.js.map +1 -1
  23. package/dist/assistant.js +3 -1
  24. package/dist/assistant.js.map +1 -1
  25. package/dist/assistantStream.d.ts +7 -0
  26. package/dist/assistantStream.js +17 -0
  27. package/dist/assistantStream.js.map +1 -0
  28. package/dist/branch.d.ts +1 -1
  29. package/dist/branch.js +2 -2
  30. package/dist/branch.js.map +1 -1
  31. package/dist/clear.d.ts +1 -1
  32. package/dist/clear.js +0 -1
  33. package/dist/clear.js.map +1 -1
  34. package/dist/disable.d.ts +4 -0
  35. package/dist/disable.js +3 -0
  36. package/dist/disable.js.map +1 -0
  37. package/dist/enable.d.ts +5 -0
  38. package/dist/enable.js +3 -0
  39. package/dist/enable.js.map +1 -0
  40. package/dist/events.d.ts +2 -2
  41. package/dist/events.js +2 -2
  42. package/dist/events.js.map +1 -1
  43. package/dist/handle.d.ts +7 -0
  44. package/dist/handle.js +14 -0
  45. package/dist/handle.js.map +1 -0
  46. package/dist/index.d.ts +1 -1
  47. package/dist/index.js +1 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/sequence.d.ts +2 -0
  50. package/dist/{sequence_.js → sequence.js} +1 -1
  51. package/dist/sequence.js.map +1 -0
  52. package/dist/strand_.d.ts +1 -1
  53. package/dist/strand_.js +3 -13
  54. package/dist/strand_.js.map +1 -1
  55. package/dist/system.d.ts +3 -3
  56. package/dist/system.js +3 -2
  57. package/dist/system.js.map +1 -1
  58. package/dist/tsconfig.tsbuildinfo +1 -1
  59. package/dist/user.d.ts +3 -4
  60. package/dist/user.js +8 -9
  61. package/dist/user.js.map +1 -1
  62. package/dist/user.test.js.map +1 -0
  63. package/dist/userJson.d.ts +4 -4
  64. package/dist/userJson.js +2 -4
  65. package/dist/userJson.js.map +1 -1
  66. package/dist/{internal → util}/JsonValue.d.ts +2 -0
  67. package/dist/util/JsonValue.js +82 -0
  68. package/dist/util/JsonValue.js.map +1 -0
  69. package/dist/util/Sequence.d.ts +2 -0
  70. package/dist/util/Sequence.js +2 -0
  71. package/dist/util/Sequence.js.map +1 -0
  72. package/dist/util/Taggable.d.ts +6 -0
  73. package/dist/util/Taggable.js +21 -0
  74. package/dist/util/Taggable.js.map +1 -0
  75. package/enable.ts +8 -0
  76. package/events.ts +5 -4
  77. package/handle.ts +25 -0
  78. package/index.ts +1 -1
  79. package/package.json +4 -4
  80. package/{sequence_.ts → sequence.ts} +1 -1
  81. package/strand_.ts +3 -17
  82. package/system.ts +8 -9
  83. package/user.test.ts +30 -0
  84. package/user.ts +15 -11
  85. package/userJson.ts +7 -7
  86. package/util/JsonValue.ts +97 -0
  87. package/util/Sequence.ts +9 -0
  88. package/util/Taggable.ts +47 -0
  89. package/Sequence.ts +0 -14
  90. package/dist/Sequence.d.ts +0 -2
  91. package/dist/Sequence.js +0 -2
  92. package/dist/Sequence.js.map +0 -1
  93. package/dist/internal/JsonValue.js +0 -2
  94. package/dist/internal/JsonValue.js.map +0 -1
  95. package/dist/internal/Taggable.d.ts +0 -11
  96. package/dist/internal/Taggable.js +0 -2
  97. package/dist/internal/Taggable.js.map +0 -1
  98. package/dist/pretty.d.ts +0 -2
  99. package/dist/pretty.js.map +0 -1
  100. package/dist/reduce.d.ts +0 -4
  101. package/dist/reduce.js +0 -20
  102. package/dist/reduce.js.map +0 -1
  103. package/dist/sequence_.d.ts +0 -2
  104. package/dist/sequence_.js.map +0 -1
  105. package/dist/todo.test.js +0 -3
  106. package/dist/todo.test.js.map +0 -1
  107. package/internal/JsonValue.ts +0 -5
  108. package/internal/Taggable.ts +0 -17
  109. package/reduce.ts +0 -32
  110. package/todo.test.ts +0 -3
  111. package/tsconfig.json +0 -18
  112. /package/dist/{todo.test.d.ts → user.test.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # liminal
2
2
 
3
+ ## 0.12.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 6df720c: Fix NPM publish.
8
+
9
+ ## 0.12.0
10
+
11
+ ### Minor Changes
12
+
13
+ - a04ae8b: Introduce L.handle / rework strand event-handling mechanism.
14
+
15
+ ## 0.11.1
16
+
17
+ ### Patch Changes
18
+
19
+ - feee30f: Testing provenance capture in changeset-driven publishes.
20
+
3
21
  ## 0.11.0
4
22
 
5
23
  ### Minor Changes
package/L.ts CHANGED
@@ -1,13 +1,14 @@
1
1
  export * from "./append.ts"
2
2
  export * from "./assistant.ts"
3
+ export * from "./assistantStream.ts"
3
4
  export * from "./assistantStruct.ts"
4
5
  export * from "./branch.ts"
5
6
  export * from "./clear.ts"
7
+ export * from "./enable.ts"
6
8
  export * from "./events.ts"
9
+ export * from "./handle.ts"
7
10
  export * from "./messages.ts"
8
- export * from "./reduce.ts"
9
- export * from "./Sequence.ts"
10
- export * from "./sequence_.ts"
11
+ export * from "./sequence.ts"
11
12
  export * from "./strand_.ts"
12
13
  export * from "./system.ts"
13
14
  export * from "./user.ts"
@@ -6,11 +6,11 @@ const RESET = "\x1b[0m"
6
6
  const BOLD = "\x1b[1m"
7
7
  const GRAY_BG = "\x1b[47m"
8
8
 
9
- export const pretty: (event: typeof LEvent["Type"]) => string = (event) => {
9
+ export const event: (event: typeof LEvent["Type"]) => string = (event) => {
10
10
  let text = `${GRAY}${event._tag}${RESET}`
11
11
  switch (event._tag) {
12
12
  case "MessagesAppended": {
13
- text += event.messages.map(formatMessage).join("\n")
13
+ text += event.messages.map(message).join("\n")
14
14
  break
15
15
  }
16
16
  case "MessagesCleared": {
@@ -21,7 +21,7 @@ export const pretty: (event: typeof LEvent["Type"]) => string = (event) => {
21
21
  return text
22
22
  }
23
23
 
24
- const formatMessage = ({ _tag, parts }: Message): string => {
24
+ export const message = ({ _tag, parts }: Message): string => {
25
25
  let value = ""
26
26
  for (const part of parts) {
27
27
  value += `\n${BOLD}${_tag}\n${GRAY_BG}`
package/Strand.ts CHANGED
@@ -1,6 +1,8 @@
1
- import { Message } from "@effect/ai/AiInput"
2
- import type { AiTool } from "@effect/ai/AiTool"
1
+ import type { Message } from "@effect/ai/AiInput"
2
+ import type * as AiToolkit from "@effect/ai/AiToolkit"
3
3
  import * as Context from "effect/Context"
4
+ import * as Effect from "effect/Effect"
5
+ import * as Layer from "effect/Layer"
4
6
  import * as Option from "effect/Option"
5
7
  import * as PubSub from "effect/PubSub"
6
8
  import type { LEvent } from "./LEvent.ts"
@@ -16,9 +18,27 @@ export declare namespace Strand {
16
18
  /** The list of messages that the model uses to infer the next message. */
17
19
  messages: Array<Message>
18
20
  /** The tools available to the model. */
19
- tools: Array<AiTool<string>>
21
+ tools: Set<AiToolkit.Any>
20
22
  }
21
23
  }
22
24
 
23
25
  /** A context tag that denotes the boundary of a conversation isolate. */
24
- export class Strand extends Context.Tag("liminal/Strand")<Strand, Strand.Service>() {}
26
+ export class Strand extends Context.Tag("liminal/Strand")<Strand, Strand.Service>() {
27
+ static layer: (init?: {
28
+ system?: string | undefined
29
+ messages?: Array<Message> | undefined
30
+ tools?: Set<AiToolkit.Any>
31
+ }) => Layer.Layer<Strand> = ({ system, messages, tools } = {}) =>
32
+ Layer.effect(
33
+ Strand,
34
+ Effect.gen(function*() {
35
+ return Strand.of({
36
+ parent: yield* Effect.serviceOption(Strand),
37
+ events: yield* PubSub.unbounded<LEvent>(),
38
+ system: Option.fromNullable(system),
39
+ messages: [...messages ?? []],
40
+ tools: new Set(tools ?? []),
41
+ })
42
+ }),
43
+ )
44
+ }
package/append.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Message } from "@effect/ai/AiInput"
1
+ import type { Message } from "@effect/ai/AiInput"
2
2
  import * as Effect from "effect/Effect"
3
3
  import { MessagesAppended } from "./LEvent.ts"
4
4
  import { Strand } from "./Strand.ts"
package/assistant.ts CHANGED
@@ -1,6 +1,7 @@
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"
4
5
  import * as Effect from "effect/Effect"
5
6
  import * as Option from "effect/Option"
6
7
  import { append } from "./append.ts"
@@ -9,10 +10,11 @@ import { Strand } from "./Strand.ts"
9
10
  /** Infer an assistant message and append it to the conversation. */
10
11
  export const assistant: Effect.Effect<string, AiError, AiLanguageModel | Strand> = Effect.gen(function*() {
11
12
  const model = yield* AiLanguageModel
12
- const { system, messages } = yield* Strand
13
+ const { system, messages, tools } = yield* Strand
13
14
  const { text } = yield* model.generateText({
14
15
  system: Option.getOrUndefined(system),
15
16
  prompt: messages,
17
+ toolkit: AiToolkit.merge(...tools) as never,
16
18
  })
17
19
  yield* append(
18
20
  new AssistantMessage({
@@ -0,0 +1,25 @@
1
+ import type { AiError } from "@effect/ai/AiError"
2
+ import { AiLanguageModel } from "@effect/ai/AiLanguageModel"
3
+ import type { AiResponse } from "@effect/ai/AiResponse"
4
+ import * as AiToolkit from "@effect/ai/AiToolkit"
5
+ import * as Effect from "effect/Effect"
6
+ import * as Option from "effect/Option"
7
+ import * as Stream from "effect/Stream"
8
+ import { Strand } from "./Strand"
9
+
10
+ /** Get a streamed inference from the assistant without appending it to the strand's messages. */
11
+ export const assistantStream: Stream.Stream<
12
+ AiResponse,
13
+ AiError,
14
+ AiLanguageModel | Strand
15
+ > = Stream.unwrap(
16
+ Effect.gen(function*() {
17
+ const model = yield* AiLanguageModel
18
+ const { system, messages, tools } = yield* Strand
19
+ return model.streamText({
20
+ system: Option.getOrUndefined(system),
21
+ prompt: messages,
22
+ toolkit: AiToolkit.merge(...tools) as never,
23
+ })
24
+ }),
25
+ )
package/branch.ts CHANGED
@@ -3,9 +3,9 @@ import { flow, identity } from "effect/Function"
3
3
  import * as Option from "effect/Option"
4
4
  import * as PubSub from "effect/PubSub"
5
5
  import type { LEvent } from "./LEvent.ts"
6
- import type { Sequence } from "./Sequence.ts"
7
- import { sequence } from "./sequence_.ts"
6
+ import { sequence } from "./sequence.ts"
8
7
  import { Strand } from "./Strand.ts"
8
+ import type { Sequence } from "./util/Sequence.ts"
9
9
 
10
10
  /** Isolate the effect with a new strand in context. */
11
11
  export const branch: Sequence<never, Strand> = flow(
@@ -19,7 +19,7 @@ export const branch: Sequence<never, Strand> = flow(
19
19
  system: Option.map(parent.system, identity),
20
20
  events: yield* PubSub.unbounded<LEvent>(),
21
21
  messages: parent.messages.slice(),
22
- tools: parent.tools.slice(),
22
+ tools: new Set(parent.tools),
23
23
  })
24
24
  }),
25
25
  ),
package/clear.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Message } from "@effect/ai/AiInput"
1
+ import type { Message } from "@effect/ai/AiInput"
2
2
  import * as Effect from "effect/Effect"
3
3
  import { MessagesCleared } from "./LEvent.ts"
4
4
  import { Strand } from "./Strand.ts"
package/disable.ts ADDED
@@ -0,0 +1,5 @@
1
+ import * as AiTool from "@effect/ai/AiTool"
2
+ import type { AiToolkit } from "@effect/ai/AiToolkit"
3
+ import * as Effect from "effect/Effect"
4
+
5
+ export declare const disable: (toolkit: AiToolkit<AiTool.Any>) => Effect.Effect<void>
package/dist/L.d.ts CHANGED
@@ -1,13 +1,14 @@
1
1
  export * from "./append.ts";
2
2
  export * from "./assistant.ts";
3
+ export * from "./assistantStream.ts";
3
4
  export * from "./assistantStruct.ts";
4
5
  export * from "./branch.ts";
5
6
  export * from "./clear.ts";
7
+ export * from "./enable.ts";
6
8
  export * from "./events.ts";
9
+ export * from "./handle.ts";
7
10
  export * from "./messages.ts";
8
- export * from "./reduce.ts";
9
- export * from "./Sequence.ts";
10
- export * from "./sequence_.ts";
11
+ export * from "./sequence.ts";
11
12
  export * from "./strand_.ts";
12
13
  export * from "./system.ts";
13
14
  export * from "./user.ts";
package/dist/L.js CHANGED
@@ -1,13 +1,14 @@
1
1
  export * from "./append.js";
2
2
  export * from "./assistant.js";
3
+ export * from "./assistantStream.js";
3
4
  export * from "./assistantStruct.js";
4
5
  export * from "./branch.js";
5
6
  export * from "./clear.js";
7
+ export * from "./enable.js";
6
8
  export * from "./events.js";
9
+ export * from "./handle.js";
7
10
  export * from "./messages.js";
8
- export * from "./reduce.js";
9
- export * from "./Sequence.js";
10
- export * from "./sequence_.js";
11
+ export * from "./sequence.js";
11
12
  export * from "./strand_.js";
12
13
  export * from "./system.js";
13
14
  export * from "./user.js";
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,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"}
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,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Message } from "@effect/ai/AiInput";
2
+ import type { LEvent } from "./LEvent.ts";
3
+ export declare const event: (event: typeof LEvent["Type"]) => string;
4
+ export declare const message: ({ _tag, parts }: Message) => string;
@@ -2,11 +2,11 @@ const GRAY = "\x1b[90m";
2
2
  const RESET = "\x1b[0m";
3
3
  const BOLD = "\x1b[1m";
4
4
  const GRAY_BG = "\x1b[47m";
5
- export const pretty = (event) => {
5
+ export const event = (event) => {
6
6
  let text = `${GRAY}${event._tag}${RESET}`;
7
7
  switch (event._tag) {
8
8
  case "MessagesAppended": {
9
- text += event.messages.map(formatMessage).join("\n");
9
+ text += event.messages.map(message).join("\n");
10
10
  break;
11
11
  }
12
12
  case "MessagesCleared": {
@@ -16,7 +16,7 @@ export const pretty = (event) => {
16
16
  }
17
17
  return text;
18
18
  };
19
- const formatMessage = ({ _tag, parts }) => {
19
+ export const message = ({ _tag, parts }) => {
20
20
  let value = "";
21
21
  for (const part of parts) {
22
22
  value += `\n${BOLD}${_tag}\n${GRAY_BG}`;
@@ -34,4 +34,4 @@ const formatMessage = ({ _tag, parts }) => {
34
34
  }
35
35
  return value;
36
36
  };
37
- //# sourceMappingURL=pretty.js.map
37
+ //# sourceMappingURL=LPretty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LPretty.js","sourceRoot":"","sources":["../LPretty.ts"],"names":[],"mappings":"AAGA,MAAM,IAAI,GAAG,UAAU,CAAA;AACvB,MAAM,KAAK,GAAG,SAAS,CAAA;AACvB,MAAM,IAAI,GAAG,SAAS,CAAA;AACtB,MAAM,OAAO,GAAG,UAAU,CAAA;AAE1B,MAAM,CAAC,MAAM,KAAK,GAA6C,CAAC,KAAK,EAAE,EAAE;IACvE,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE,CAAA;IACzC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9C,MAAK;QACP,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,oBAAoB,CAAA;YACrD,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAW,EAAU,EAAE;IAC1D,IAAI,KAAK,GAAG,EAAE,CAAA;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,CAAA;QACvC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBACvB,MAAK;YACP,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;gBAC3C,MAAK;YACP,CAAC;QACH,CAAC;QACD,KAAK,IAAI,KAAK,CAAA;IAChB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
package/dist/Strand.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { Message } from "@effect/ai/AiInput";
2
- import type { AiTool } from "@effect/ai/AiTool";
1
+ import type { Message } from "@effect/ai/AiInput";
2
+ import type * as AiToolkit from "@effect/ai/AiToolkit";
3
3
  import * as Context from "effect/Context";
4
+ import * as Layer from "effect/Layer";
4
5
  import * as Option from "effect/Option";
5
6
  import * as PubSub from "effect/PubSub";
6
7
  import type { LEvent } from "./LEvent.ts";
@@ -15,11 +16,16 @@ export declare namespace Strand {
15
16
  /** The list of messages that the model uses to infer the next message. */
16
17
  messages: Array<Message>;
17
18
  /** The tools available to the model. */
18
- tools: Array<AiTool<string>>;
19
+ tools: Set<AiToolkit.Any>;
19
20
  }
20
21
  }
21
22
  declare const Strand_base: Context.TagClass<Strand, "liminal/Strand", Strand.Service>;
22
23
  /** A context tag that denotes the boundary of a conversation isolate. */
23
24
  export declare class Strand extends Strand_base {
25
+ static layer: (init?: {
26
+ system?: string | undefined;
27
+ messages?: Array<Message> | undefined;
28
+ tools?: Set<AiToolkit.Any>;
29
+ }) => Layer.Layer<Strand>;
24
30
  }
25
31
  export {};
package/dist/Strand.js CHANGED
@@ -1,8 +1,18 @@
1
- import { Message } from "@effect/ai/AiInput";
2
1
  import * as Context from "effect/Context";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
3
4
  import * as Option from "effect/Option";
4
5
  import * as PubSub from "effect/PubSub";
5
6
  /** A context tag that denotes the boundary of a conversation isolate. */
6
7
  export class Strand extends Context.Tag("liminal/Strand")() {
8
+ static layer = ({ system, messages, tools } = {}) => Layer.effect(Strand, Effect.gen(function* () {
9
+ return Strand.of({
10
+ parent: yield* Effect.serviceOption(Strand),
11
+ events: yield* PubSub.unbounded(),
12
+ system: Option.fromNullable(system),
13
+ messages: [...messages ?? []],
14
+ tools: new Set(tools ?? []),
15
+ });
16
+ }));
7
17
  }
8
18
  //# 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;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"}
1
+ {"version":3,"file":"Strand.js","sourceRoot":"","sources":["../Strand.ts"],"names":[],"mappings":"AAEA,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;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAkBvC,yEAAyE;AACzE,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAA0B;IACjF,MAAM,CAAC,KAAK,GAIgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAC/D,KAAK,CAAC,MAAM,CACV,MAAM,EACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,OAAO,MAAM,CAAC,EAAE,CAAC;YACf,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;YAC3C,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAU;YACzC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,CAAC,GAAG,QAAQ,IAAI,EAAE,CAAC;YAC7B,KAAK,EAAE,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;SAC5B,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA"}
package/dist/append.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Message } from "@effect/ai/AiInput";
1
+ import type { Message } from "@effect/ai/AiInput";
2
2
  import * as Effect from "effect/Effect";
3
3
  import { Strand } from "./Strand.ts";
4
4
  /** Append messages to the current strand's message list. */
package/dist/append.js CHANGED
@@ -1,4 +1,3 @@
1
- import { Message } from "@effect/ai/AiInput";
2
1
  import * as Effect from "effect/Effect";
3
2
  import { MessagesAppended } from "./LEvent.js";
4
3
  import { Strand } from "./Strand.js";
@@ -1 +1 @@
1
- {"version":3,"file":"append.js","sourceRoot":"","sources":["../append.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,MAAM,GAEuB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,GAAG,QAAQ;IAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;IACjC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"append.js","sourceRoot":"","sources":["../append.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,MAAM,GAEuB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,GAAG,QAAQ;IAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;IACjC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC,CAAC,CAAA"}
package/dist/assistant.js CHANGED
@@ -1,5 +1,6 @@
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";
3
4
  import * as Effect from "effect/Effect";
4
5
  import * as Option from "effect/Option";
5
6
  import { append } from "./append.js";
@@ -7,10 +8,11 @@ import { Strand } from "./Strand.js";
7
8
  /** Infer an assistant message and append it to the conversation. */
8
9
  export const assistant = Effect.gen(function* () {
9
10
  const model = yield* AiLanguageModel;
10
- const { system, messages } = yield* Strand;
11
+ const { system, messages, tools } = yield* Strand;
11
12
  const { text } = yield* model.generateText({
12
13
  system: Option.getOrUndefined(system),
13
14
  prompt: messages,
15
+ toolkit: AiToolkit.merge(...tools),
14
16
  });
15
17
  yield* append(new AssistantMessage({
16
18
  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,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
+ {"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,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,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAU;KAC5C,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"}
@@ -0,0 +1,7 @@
1
+ import type { AiError } from "@effect/ai/AiError";
2
+ import { AiLanguageModel } from "@effect/ai/AiLanguageModel";
3
+ import type { AiResponse } from "@effect/ai/AiResponse";
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>;
@@ -0,0 +1,17 @@
1
+ import { AiLanguageModel } from "@effect/ai/AiLanguageModel";
2
+ import * as AiToolkit from "@effect/ai/AiToolkit";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Option from "effect/Option";
5
+ 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. */
8
+ export const assistantStream = Stream.unwrap(Effect.gen(function* () {
9
+ const model = yield* AiLanguageModel;
10
+ const { system, messages, tools } = yield* Strand;
11
+ return model.streamText({
12
+ system: Option.getOrUndefined(system),
13
+ prompt: messages,
14
+ toolkit: AiToolkit.merge(...tools),
15
+ });
16
+ }));
17
+ //# sourceMappingURL=assistantStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantStream.js","sourceRoot":"","sources":["../assistantStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,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,UAAU,CAAA;AAEjC,iGAAiG;AACjG,MAAM,CAAC,MAAM,eAAe,GAIxB,MAAM,CAAC,MAAM,CACf,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IACjD,OAAO,KAAK,CAAC,UAAU,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAU;KAC5C,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CAAA"}
package/dist/branch.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Sequence } from "./Sequence.ts";
2
1
  import { Strand } from "./Strand.ts";
2
+ import type { Sequence } from "./util/Sequence.ts";
3
3
  /** Isolate the effect with a new strand in context. */
4
4
  export declare const branch: Sequence<never, Strand>;
package/dist/branch.js CHANGED
@@ -2,7 +2,7 @@ import * as Effect from "effect/Effect";
2
2
  import { flow, identity } from "effect/Function";
3
3
  import * as Option from "effect/Option";
4
4
  import * as PubSub from "effect/PubSub";
5
- import { sequence } from "./sequence_.js";
5
+ import { sequence } from "./sequence.js";
6
6
  import { Strand } from "./Strand.js";
7
7
  /** Isolate the effect with a new strand in context. */
8
8
  export const branch = flow(sequence, Effect.provideServiceEffect(Strand, Effect.gen(function* () {
@@ -12,7 +12,7 @@ export const branch = flow(sequence, Effect.provideServiceEffect(Strand, Effect.
12
12
  system: Option.map(parent.system, identity),
13
13
  events: yield* PubSub.unbounded(),
14
14
  messages: parent.messages.slice(),
15
- tools: parent.tools.slice(),
15
+ tools: new Set(parent.tools),
16
16
  });
17
17
  })));
18
18
  //# sourceMappingURL=branch.js.map
@@ -1 +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"}
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;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,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,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;KAC7B,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CACF,CAAA"}
package/dist/clear.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Message } from "@effect/ai/AiInput";
1
+ import type { Message } from "@effect/ai/AiInput";
2
2
  import * as Effect from "effect/Effect";
3
3
  import { Strand } from "./Strand.ts";
4
4
  /** Clear the strand's conversation. */
package/dist/clear.js CHANGED
@@ -1,4 +1,3 @@
1
- import { Message } from "@effect/ai/AiInput";
2
1
  import * as Effect from "effect/Effect";
3
2
  import { MessagesCleared } from "./LEvent.js";
4
3
  import { Strand } from "./Strand.js";
package/dist/clear.js.map CHANGED
@@ -1 +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"}
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../clear.ts"],"names":[],"mappings":"AACA,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"}
@@ -0,0 +1,4 @@
1
+ import * as AiTool from "@effect/ai/AiTool";
2
+ import type { AiToolkit } from "@effect/ai/AiToolkit";
3
+ import * as Effect from "effect/Effect";
4
+ export declare const disable: (toolkit: AiToolkit<AiTool.Any>) => Effect.Effect<void>;
@@ -0,0 +1,3 @@
1
+ import * as AiTool from "@effect/ai/AiTool";
2
+ import * as Effect from "effect/Effect";
3
+ //# sourceMappingURL=disable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable.js","sourceRoot":"","sources":["../disable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as AiTool from "@effect/ai/AiTool";
2
+ import type { AiToolkit } from "@effect/ai/AiToolkit";
3
+ import * as Effect from "effect/Effect";
4
+ import type { Strand } from "./Strand.ts";
5
+ export declare const enable: <Tools extends AiTool.Any>(toolkit: AiToolkit<Tools>) => Effect.Effect<never, never, AiTool.Handler<Tools["name"]> | Strand>;
package/dist/enable.js ADDED
@@ -0,0 +1,3 @@
1
+ import * as AiTool from "@effect/ai/AiTool";
2
+ import * as Effect from "effect/Effect";
3
+ //# sourceMappingURL=enable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable.js","sourceRoot":"","sources":["../enable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA"}
package/dist/events.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as Stream from "effect/Stream";
2
- import type { LEvent } from "./LEvent";
2
+ import type { LEvent } from "./LEvent.ts";
3
3
  import { Strand } from "./Strand.ts";
4
- /** Get a new event stream of the events of the current strand. */
4
+ /** A stream of events from 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
- /** Get a new event stream of the events of the current strand. */
5
- export const events = Stream.unwrap(Effect.map(Strand, ({ events }) => Stream.fromPubSub(events)));
4
+ /** A stream of events from the current strand. */
5
+ export const events = Strand.pipe(Effect.map(({ events }) => Stream.fromPubSub(events)), Stream.unwrap);
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,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"}
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,IAAI,CACrE,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,7 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type { RuntimeFiber } from "effect/Fiber";
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 handle: <A, E, R>(f: (event: LEvent) => Effect.Effect<A, E, R>) => Effect.Effect<RuntimeFiber<void, E>, never, Strand | R | Scope.Scope>;
package/dist/handle.js ADDED
@@ -0,0 +1,14 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Scope from "effect/Scope";
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. */
6
+ export const handle = Effect.fnUntraced(function* (f) {
7
+ const latch = yield* Effect.makeLatch(false);
8
+ const { events } = yield* Strand;
9
+ const dequeue = yield* events.subscribe;
10
+ const fiber = yield* latch.open.pipe(Effect.zipRight(Stream.fromQueue(dequeue).pipe(Stream.runForEach(f), Effect.fork)));
11
+ yield* latch.await;
12
+ return fiber;
13
+ });
14
+ //# sourceMappingURL=handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle.js","sourceRoot":"","sources":["../handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,2EAA2E;AAC3E,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,MAAM,CAAA;IAChC,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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * as L from "./L.ts";
2
2
  export * from "./LEvent.ts";
3
- export * from "./pretty.ts";
3
+ export * as LPretty from "./LPretty.ts";
4
4
  export * from "./Strand.ts";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export * as L from "./L.js";
2
2
  export * from "./LEvent.js";
3
- export * from "./pretty.js";
3
+ export * as LPretty from "./LPretty.js";
4
4
  export * from "./Strand.js";
5
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;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,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,cAAc,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { Sequence } from "./util/Sequence";
2
+ export declare const sequence: Sequence;
@@ -2,4 +2,4 @@ import * as Effect from "effect/Effect";
2
2
  export const sequence = (...steps) => Effect.all(steps, {
3
3
  concurrency: 1,
4
4
  }).pipe(Effect.map((v) => v.pop()));
5
- //# sourceMappingURL=sequence_.js.map
5
+ //# 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;AAGvC,MAAM,CAAC,MAAM,QAAQ,GAAa,CAAC,GAAG,KAAK,EAAE,EAAE,CAC7C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;IAChB,WAAW,EAAE,CAAC;CACf,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,GAAG,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAG,CAAU,CACnD,CAAA"}
package/dist/strand_.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type Sequence } from "./Sequence.ts";
2
1
  import { Strand } from "./Strand.ts";
2
+ import { type Sequence } from "./util/Sequence.ts";
3
3
  /** Isolate the effect with a new strand in context. */
4
4
  export declare const strand: Sequence<Strand>;