liminal 0.16.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 (145) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/Digest.ts +30 -0
  3. package/Envelope.ts +15 -47
  4. package/F/F.ts +1 -0
  5. package/L/L.ts +6 -7
  6. package/L/append.ts +4 -4
  7. package/L/assistant.ts +2 -2
  8. package/L/assistantSchema.ts +2 -2
  9. package/L/assistantStream.ts +2 -2
  10. package/L/branch.ts +4 -17
  11. package/L/clear.ts +4 -4
  12. package/L/disable.ts +2 -2
  13. package/L/enable.ts +2 -2
  14. package/L/events.ts +2 -2
  15. package/L/{userJson.ts → json.ts} +3 -5
  16. package/L/line.ts +22 -0
  17. package/L/{handle.ts → listen.ts} +2 -2
  18. package/L/messages.ts +2 -2
  19. package/L/prev.ts +4 -0
  20. package/L/provide.ts +10 -0
  21. package/L/{Self.ts → self.ts} +1 -1
  22. package/L/send.ts +56 -0
  23. package/L/system.ts +18 -7
  24. package/L/thread.ts +5 -17
  25. package/L/toolkit.ts +2 -2
  26. package/L/user.test.ts +4 -1
  27. package/L/user.ts +15 -5
  28. package/LEvent.ts +23 -13
  29. package/Thread.ts +19 -21
  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 -15
  34. package/dist/Envelope.js +1 -29
  35. package/dist/Envelope.js.map +1 -1
  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/L.d.ts +6 -7
  40. package/dist/L/L.js +6 -7
  41. package/dist/L/L.js.map +1 -1
  42. package/dist/L/append.js +4 -4
  43. package/dist/L/append.js.map +1 -1
  44. package/dist/L/assistant.js +2 -2
  45. package/dist/L/assistantSchema.js +2 -2
  46. package/dist/L/assistantStream.js +2 -2
  47. package/dist/L/branch.d.ts +1 -4
  48. package/dist/L/branch.js +4 -7
  49. package/dist/L/branch.js.map +1 -1
  50. package/dist/L/clear.js +4 -4
  51. package/dist/L/clear.js.map +1 -1
  52. package/dist/L/disable.js +2 -2
  53. package/dist/L/enable.js +2 -2
  54. package/dist/L/events.js +2 -2
  55. package/dist/L/{userJson.d.ts → json.d.ts} +1 -2
  56. package/dist/L/{userJson.js → json.js} +3 -4
  57. package/dist/L/json.js.map +1 -0
  58. package/dist/L/line.d.ts +5 -0
  59. package/dist/L/line.js +11 -0
  60. package/dist/L/line.js.map +1 -0
  61. package/dist/L/{handle.js → listen.js} +3 -3
  62. package/dist/L/{handle.js.map → listen.js.map} +1 -1
  63. package/dist/L/messages.js +2 -2
  64. package/dist/L/prev.d.ts +5 -0
  65. package/dist/L/prev.js +5 -0
  66. package/dist/L/prev.js.map +1 -0
  67. package/dist/L/provide.d.ts +3 -0
  68. package/dist/L/provide.js +4 -0
  69. package/dist/L/provide.js.map +1 -0
  70. package/dist/L/{Self.d.ts → self.d.ts} +1 -1
  71. package/dist/L/self.js +4 -0
  72. package/dist/L/self.js.map +1 -0
  73. package/dist/L/send.d.ts +6 -0
  74. package/dist/L/send.js +34 -0
  75. package/dist/L/send.js.map +1 -0
  76. package/dist/L/system.d.ts +3 -3
  77. package/dist/L/system.js +6 -4
  78. package/dist/L/system.js.map +1 -1
  79. package/dist/L/thread.d.ts +1 -4
  80. package/dist/L/thread.js +5 -7
  81. package/dist/L/thread.js.map +1 -1
  82. package/dist/L/toolkit.js +2 -2
  83. package/dist/L/user.d.ts +5 -3
  84. package/dist/L/user.js +3 -3
  85. package/dist/L/user.js.map +1 -1
  86. package/dist/L/user.test.js.map +1 -1
  87. package/dist/LEvent.d.ts +143 -15
  88. package/dist/LEvent.js +12 -9
  89. package/dist/LEvent.js.map +1 -1
  90. package/dist/Thread.d.ts +15 -18
  91. package/dist/Thread.js +7 -13
  92. package/dist/Thread.js.map +1 -1
  93. package/dist/index.d.ts +4 -2
  94. package/dist/index.js +4 -2
  95. package/dist/index.js.map +1 -1
  96. package/dist/patterns/Route.js +2 -2
  97. package/dist/patterns/Route.js.map +1 -1
  98. package/dist/tsconfig.tsbuildinfo +1 -1
  99. package/dist/util/Taggable.d.ts +5 -4
  100. package/dist/util/Taggable.js +11 -0
  101. package/dist/util/Taggable.js.map +1 -1
  102. package/dist/util/extract.d.ts +3 -0
  103. package/dist/util/extract.js +2 -0
  104. package/dist/util/extract.js.map +1 -0
  105. package/dist/util/messageCodec.d.ts +98 -0
  106. package/dist/util/messageCodec.js +5 -0
  107. package/dist/util/messageCodec.js.map +1 -0
  108. package/dist/util/raw.d.ts +6 -0
  109. package/dist/util/raw.js +5 -0
  110. package/dist/util/raw.js.map +1 -0
  111. package/index.ts +4 -2
  112. package/package.json +22 -10
  113. package/patterns/Route.ts +5 -1
  114. package/util/Taggable.ts +30 -11
  115. package/util/extract.ts +7 -0
  116. package/util/messageCodec.ts +5 -0
  117. package/util/raw.ts +27 -0
  118. package/L/fqn.ts +0 -9
  119. package/L/raw.ts +0 -30
  120. package/L/sequence.ts +0 -9
  121. package/L/to.ts +0 -4
  122. package/LPretty.ts +0 -41
  123. package/dist/L/Self.js +0 -4
  124. package/dist/L/Self.js.map +0 -1
  125. package/dist/L/fqn.d.ts +0 -3
  126. package/dist/L/fqn.js +0 -8
  127. package/dist/L/fqn.js.map +0 -1
  128. package/dist/L/raw.d.ts +0 -3
  129. package/dist/L/raw.js +0 -18
  130. package/dist/L/raw.js.map +0 -1
  131. package/dist/L/sequence.d.ts +0 -2
  132. package/dist/L/sequence.js +0 -5
  133. package/dist/L/sequence.js.map +0 -1
  134. package/dist/L/to.d.ts +0 -3
  135. package/dist/L/to.js +0 -3
  136. package/dist/L/to.js.map +0 -1
  137. package/dist/L/userJson.js.map +0 -1
  138. package/dist/LPretty.d.ts +0 -4
  139. package/dist/LPretty.js +0 -37
  140. package/dist/LPretty.js.map +0 -1
  141. package/dist/util/Sequencer.d.ts +0 -4
  142. package/dist/util/Sequencer.js +0 -2
  143. package/dist/util/Sequencer.js.map +0 -1
  144. package/util/Sequencer.ts +0 -13
  145. /package/dist/L/{handle.d.ts → listen.d.ts} +0 -0
@@ -1,5 +1,6 @@
1
1
  import * as Effect from "effect/Effect";
2
- export type Taggable<A, E, R> = <L extends Array<unknown>, E1 = never, R1 = never>(template?: TaggableArg0 | Effect.Effect<string | undefined, E1, R1>, ...substitutions: L) => Effect.Effect<A, ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Error<ExtractEffect<L>>) | E | E1, ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Context<ExtractEffect<L>>) | R | R1>;
3
- export type TaggableArg0 = TemplateStringsArray | string | undefined;
4
- type ExtractEffect<T extends Array<unknown>> = Extract<T[number], Effect.All.EffectAny>;
5
- export {};
2
+ import type { ExtractE, ExtractR } from "./extract.ts";
3
+ import { type TemplateStringsArrayLike } from "./raw.ts";
4
+ export type TaggableArg0 = TemplateStringsArrayLike | string | Effect.Effect<string, any, any>;
5
+ export type TaggableArgRest<E0 extends TaggableArg0> = E0 extends TemplateStringsArrayLike ? Array<unknown> : [];
6
+ export declare const normalize: <A0 extends TaggableArg0, ARest extends TaggableArgRest<A0>>(a0: A0, ...aRest: ARest) => Effect.Effect<string, ExtractE<A0 | ARest[number]>, ExtractR<A0 | ARest[number]>>;
@@ -1,2 +1,13 @@
1
1
  import * as Effect from "effect/Effect";
2
+ import { YieldWrap } from "effect/Utils";
3
+ import { raw } from "./raw.js";
4
+ export const normalize = Effect.fnUntraced(function* (a0, ...aRest) {
5
+ if (Effect.isEffect(a0)) {
6
+ return yield* a0;
7
+ }
8
+ if (typeof a0 === "string") {
9
+ return a0;
10
+ }
11
+ return yield* raw(a0, ...aRest);
12
+ });
2
13
  //# sourceMappingURL=Taggable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Taggable.js","sourceRoot":"","sources":["../../util/Taggable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"Taggable.js","sourceRoot":"","sources":["../../util/Taggable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,OAAO,EAAE,GAAG,EAAiC,MAAM,UAAU,CAAA;AAK7D,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAIlD,EAAM,EACN,GAAG,KAAY;IAYf,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,CAAC,EAAE,CAAA;IAClB,CAAC;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAA;AACjC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import * as Effect from "effect/Effect";
2
+ export type ExtractE<T> = [Extract<T, Effect.Effect<any, any, any>>] extends [never] ? never : Effect.Effect.Error<Extract<T, Effect.Effect<any, any, any>>>;
3
+ export type ExtractR<T> = [Extract<T, Effect.Effect<any, any, any>>] extends [never] ? never : Effect.Effect.Context<Extract<T, Effect.Effect<any, any, any>>>;
@@ -0,0 +1,2 @@
1
+ import * as Effect from "effect/Effect";
2
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../util/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA"}
@@ -0,0 +1,98 @@
1
+ export declare const decode: (i: {
2
+ readonly _tag: "UserMessage";
3
+ readonly parts: readonly ({
4
+ readonly _tag: "TextPart";
5
+ readonly text: string;
6
+ } | {
7
+ readonly _tag: "ImagePart";
8
+ readonly data: string;
9
+ readonly mediaType?: string | undefined;
10
+ } | {
11
+ readonly _tag: "ImageUrlPart";
12
+ readonly url: string;
13
+ } | {
14
+ readonly _tag: "FilePart";
15
+ readonly data: string;
16
+ readonly name?: string | undefined;
17
+ readonly mediaType?: string | undefined;
18
+ } | {
19
+ readonly _tag: "FileUrlPart";
20
+ readonly url: string;
21
+ })[];
22
+ readonly userName?: string | undefined;
23
+ } | {
24
+ readonly _tag: "AssistantMessage";
25
+ readonly parts: readonly ({
26
+ readonly _tag: "TextPart";
27
+ readonly text: string;
28
+ } | {
29
+ readonly _tag: "ReasoningPart";
30
+ readonly reasoningText: string;
31
+ readonly signature?: string | undefined;
32
+ } | {
33
+ readonly _tag: "RedactedReasoningPart";
34
+ readonly redactedText: string;
35
+ } | {
36
+ readonly _tag: "ToolCallPart";
37
+ readonly name: string;
38
+ readonly id: string;
39
+ readonly params: unknown;
40
+ })[];
41
+ } | {
42
+ readonly _tag: "ToolMessage";
43
+ readonly parts: readonly {
44
+ readonly _tag: "ToolCallResultPart";
45
+ readonly name: string;
46
+ readonly id: string;
47
+ readonly result: unknown;
48
+ }[];
49
+ }, overrideOptions?: import("effect/SchemaAST").ParseOptions) => import("effect/Effect").Effect<import("@effect/ai/AiInput").UserMessage | import("@effect/ai/AiInput").AssistantMessage | import("@effect/ai/AiInput").ToolMessage, import("effect/ParseResult").ParseError, never>;
50
+ export declare const encode: (a: import("@effect/ai/AiInput").UserMessage | import("@effect/ai/AiInput").AssistantMessage | import("@effect/ai/AiInput").ToolMessage, overrideOptions?: import("effect/SchemaAST").ParseOptions) => import("effect/Effect").Effect<{
51
+ readonly _tag: "UserMessage";
52
+ readonly parts: readonly ({
53
+ readonly _tag: "TextPart";
54
+ readonly text: string;
55
+ } | {
56
+ readonly _tag: "ImagePart";
57
+ readonly data: string;
58
+ readonly mediaType?: string | undefined;
59
+ } | {
60
+ readonly _tag: "ImageUrlPart";
61
+ readonly url: string;
62
+ } | {
63
+ readonly _tag: "FilePart";
64
+ readonly data: string;
65
+ readonly name?: string | undefined;
66
+ readonly mediaType?: string | undefined;
67
+ } | {
68
+ readonly _tag: "FileUrlPart";
69
+ readonly url: string;
70
+ })[];
71
+ readonly userName?: string | undefined;
72
+ } | {
73
+ readonly _tag: "AssistantMessage";
74
+ readonly parts: readonly ({
75
+ readonly _tag: "TextPart";
76
+ readonly text: string;
77
+ } | {
78
+ readonly _tag: "ReasoningPart";
79
+ readonly reasoningText: string;
80
+ readonly signature?: string | undefined;
81
+ } | {
82
+ readonly _tag: "RedactedReasoningPart";
83
+ readonly redactedText: string;
84
+ } | {
85
+ readonly _tag: "ToolCallPart";
86
+ readonly name: string;
87
+ readonly id: string;
88
+ readonly params: unknown;
89
+ })[];
90
+ } | {
91
+ readonly _tag: "ToolMessage";
92
+ readonly parts: readonly {
93
+ readonly _tag: "ToolCallResultPart";
94
+ readonly name: string;
95
+ readonly id: string;
96
+ readonly result: unknown;
97
+ }[];
98
+ }, import("effect/ParseResult").ParseError, never>;
@@ -0,0 +1,5 @@
1
+ import { Message } from "@effect/ai/AiInput";
2
+ import * as Schema from "effect/Schema";
3
+ export const decode = Schema.decode(Message);
4
+ export const encode = Schema.encode(Message);
5
+ //# sourceMappingURL=messageCodec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageCodec.js","sourceRoot":"","sources":["../../util/messageCodec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC5C,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type { ExtractE, ExtractR } from "./extract.ts";
3
+ export type TemplateStringsArrayLike = {
4
+ raw: readonly string[] | ArrayLike<string>;
5
+ };
6
+ export declare const raw: <Substitutions extends Array<unknown>>(template: TemplateStringsArrayLike, ...substitutions: Substitutions) => Effect.Effect<string, ExtractE<Substitutions[number]>, ExtractR<Substitutions[number]>>;
@@ -0,0 +1,5 @@
1
+ import * as Effect from "effect/Effect";
2
+ export const raw = Effect.fnUntraced(function* (template, ...substitutions) {
3
+ return String.raw(template, ...yield* Effect.all(substitutions.map((v) => Effect.isEffect(v) ? v : Effect.succeed(v))));
4
+ });
5
+ //# sourceMappingURL=raw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw.js","sourceRoot":"","sources":["../../util/raw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAQvC,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC5C,QAAkC,EAClC,GAAG,aAA4B;IAQ/B,OAAO,MAAM,CAAC,GAAG,CACf,QAAQ,EACR,GAAG,KAAK,CAAC,CAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAIxF,CACH,CAAA;AACH,CAAC,CAAC,CAAA"}
package/index.ts CHANGED
@@ -1,5 +1,7 @@
1
+ export * from "./Digest.ts"
1
2
  export * from "./Envelope.ts"
2
- export * as default from "./L/L.ts"
3
+ export * as F from "./F/F.ts"
4
+ export * as L from "./L/L.ts"
3
5
  export * from "./LEvent.ts"
4
- export * as LPretty from "./LPretty.ts"
5
6
  export * from "./Thread.ts"
7
+ export * as messageCodec from "./util/messageCodec.ts"
package/package.json CHANGED
@@ -1,21 +1,29 @@
1
1
  {
2
2
  "name": "liminal",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/harrysolovay/liminal.git",
7
7
  "directory": "liminal"
8
8
  },
9
- "peerDependencies": {
10
- "@effect/ai": "^0.25.2",
11
- "effect": "^3.17.7"
12
- },
13
9
  "exports": {
14
- ".": "./index.ts",
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "bun": "./index.ts"
13
+ },
15
14
  "./package.json": "./package.json",
16
- "./patterns/Route": "./patterns/Route.ts",
17
- "./patterns/Model": "./patterns/Model.ts",
18
- "./patterns/Debate": "./patterns/Debate.ts"
15
+ "./patterns/Route": {
16
+ "import": "./dist/patterns/Route.js",
17
+ "bun": "./patterns/Route.ts"
18
+ },
19
+ "./patterns/Model": {
20
+ "import": "./dist/patterns/Model.js",
21
+ "bun": "./patterns/Model.ts"
22
+ },
23
+ "./patterns/Debate": {
24
+ "import": "./dist/patterns/Debate.js",
25
+ "bun": "./patterns/Debate.ts"
26
+ }
19
27
  },
20
28
  "description": "An Effect AI toolkit for conversation state management.",
21
29
  "homepage": "https://liminal.land",
@@ -27,5 +35,9 @@
27
35
  "provenance": true
28
36
  },
29
37
  "sideEffects": false,
30
- "type": "module"
38
+ "type": "module",
39
+ "peerDependencies": {
40
+ "@effect/ai": "^0.25.2",
41
+ "effect": "^3.17.7"
42
+ }
31
43
  }
package/patterns/Route.ts CHANGED
@@ -9,13 +9,17 @@ export const byDescription: <R extends Record<string, Effect.All.EffectAny>>(rou
9
9
  ([R[keyof R]] extends [never] ? never : Effect.Effect.Context<R[keyof R]>) | Thread
10
10
  > = Effect.fnUntraced(function*(routes) {
11
11
  const descriptions = Object.keys(routes)
12
- const description = yield* L.branch(
12
+ const description = yield* L.line(
13
13
  L.user`
14
14
  Which of the following descriptions best matches the current conversation?
15
15
 
16
16
  - ${descriptions.join("\n -")}
17
17
  `,
18
18
  L.assistantSchema(Schema.Literal(...descriptions)),
19
+ ).pipe(
20
+ L.provide(
21
+ L.branch,
22
+ ),
19
23
  )
20
24
  return yield* routes[description]!
21
25
  })
package/util/Taggable.ts CHANGED
@@ -1,14 +1,33 @@
1
1
  import * as Effect from "effect/Effect"
2
+ import { YieldWrap } from "effect/Utils"
3
+ import type { ExtractE, ExtractR } from "./extract.ts"
4
+ import { raw, type TemplateStringsArrayLike } from "./raw.ts"
2
5
 
3
- export type Taggable<A, E, R> = <L extends Array<unknown>, E1 = never, R1 = never>(
4
- template?: TaggableArg0 | Effect.Effect<string | undefined, E1, R1>,
5
- ...substitutions: L
6
- ) => Effect.Effect<
7
- A,
8
- ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Error<ExtractEffect<L>>) | E | E1,
9
- ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Context<ExtractEffect<L>>) | R | R1
10
- >
6
+ export type TaggableArg0 = TemplateStringsArrayLike | string | Effect.Effect<string, any, any>
7
+ export type TaggableArgRest<E0 extends TaggableArg0> = E0 extends TemplateStringsArrayLike ? Array<unknown> : []
11
8
 
12
- export type TaggableArg0 = TemplateStringsArray | string | undefined
13
-
14
- type ExtractEffect<T extends Array<unknown>> = Extract<T[number], Effect.All.EffectAny>
9
+ export const normalize = Effect.fnUntraced(function*<
10
+ A0 extends TaggableArg0,
11
+ ARest extends TaggableArgRest<A0>,
12
+ >(
13
+ a0: A0,
14
+ ...aRest: ARest
15
+ ): Generator<
16
+ YieldWrap<
17
+ Effect.Effect<
18
+ string,
19
+ ExtractE<A0 | ARest[number]>,
20
+ ExtractR<A0 | ARest[number]>
21
+ >
22
+ >,
23
+ string,
24
+ never
25
+ > {
26
+ if (Effect.isEffect(a0)) {
27
+ return yield* a0
28
+ }
29
+ if (typeof a0 === "string") {
30
+ return a0
31
+ }
32
+ return yield* raw(a0, ...aRest)
33
+ })
@@ -0,0 +1,7 @@
1
+ import * as Effect from "effect/Effect"
2
+
3
+ export type ExtractE<T> = [Extract<T, Effect.Effect<any, any, any>>] extends [never] ? never
4
+ : Effect.Effect.Error<Extract<T, Effect.Effect<any, any, any>>>
5
+
6
+ export type ExtractR<T> = [Extract<T, Effect.Effect<any, any, any>>] extends [never] ? never
7
+ : Effect.Effect.Context<Extract<T, Effect.Effect<any, any, any>>>
@@ -0,0 +1,5 @@
1
+ import { Message } from "@effect/ai/AiInput"
2
+ import * as Schema from "effect/Schema"
3
+
4
+ export const decode = Schema.decode(Message)
5
+ export const encode = Schema.encode(Message)
package/util/raw.ts ADDED
@@ -0,0 +1,27 @@
1
+ import * as Effect from "effect/Effect"
2
+ import type { YieldWrap } from "effect/Utils"
3
+ import type { ExtractE, ExtractR } from "./extract.ts"
4
+
5
+ export type TemplateStringsArrayLike = {
6
+ raw: readonly string[] | ArrayLike<string>
7
+ }
8
+
9
+ export const raw = Effect.fnUntraced(function*<Substitutions extends Array<unknown>>(
10
+ template: TemplateStringsArrayLike,
11
+ ...substitutions: Substitutions
12
+ ): Generator<
13
+ YieldWrap<
14
+ Effect.Effect<Array<string>, ExtractE<Substitutions[number]>, ExtractR<Substitutions[number]>>
15
+ >,
16
+ string,
17
+ never
18
+ > {
19
+ return String.raw(
20
+ template,
21
+ ...yield* (Effect.all(substitutions.map((v) => Effect.isEffect(v) ? v : Effect.succeed(v))) as Effect.Effect<
22
+ Array<string>,
23
+ ExtractE<Substitutions[number]>,
24
+ ExtractR<Substitutions[number]>
25
+ >),
26
+ )
27
+ })
package/L/fqn.ts DELETED
@@ -1,9 +0,0 @@
1
- import * as Effect from "effect/Effect"
2
- import * as Option from "effect/Option"
3
- import { type Thread, ThreadFqn } from "../Thread.ts"
4
- import { Self } from "./Self.ts"
5
-
6
- export const fqn = (id: string): Effect.Effect<void, never, Thread> =>
7
- Effect.map(Self, (thread) => {
8
- thread.state.fqn = Option.some(ThreadFqn.make(id))
9
- })
package/L/raw.ts DELETED
@@ -1,30 +0,0 @@
1
- import * as Effect from "effect/Effect"
2
- import { normalizeRaw } from "../util/normalizeRaw.ts"
3
- import type { TaggableArg0 } from "../util/Taggable.ts"
4
-
5
- export const raw: <
6
- A0 extends TaggableArg0 | Effect.Effect<string | undefined, any, any>,
7
- L extends Array<unknown>,
8
- >(
9
- a0: A0,
10
- ...aRest: L
11
- ) => Effect.Effect<
12
- string | (undefined extends A0 ? undefined : never)
13
- > = Effect.fnUntraced(function*(a0, ...aRest) {
14
- const a0_: TaggableArg0 = Effect.isEffect(a0)
15
- ? yield* a0 as Effect.Effect<TaggableArg0>
16
- : a0
17
- if (!a0_) return undefined as never
18
- const aRest_ = yield* Effect.all(
19
- aRest.map((v) =>
20
- Effect.isEffect(v)
21
- ? v
22
- : Effect.succeed(v)
23
- ),
24
- ) as never as Effect.Effect<Array<unknown>>
25
- return typeof a0_ === "string"
26
- ? aRest_.length === 0
27
- ? a0_
28
- : [a0_, ...aRest_].join("")
29
- : normalizeRaw(a0_, aRest_)
30
- })
package/L/sequence.ts DELETED
@@ -1,9 +0,0 @@
1
- import * as Effect from "effect/Effect"
2
- import type { Sequencer } from "../util/Sequencer.ts"
3
-
4
- export const sequence: Sequencer = (...steps) =>
5
- Effect.all(steps, {
6
- concurrency: 1,
7
- }).pipe(
8
- Effect.map((v: Array<never>) => v.pop()!) as never,
9
- )
package/L/to.ts DELETED
@@ -1,4 +0,0 @@
1
- import { Envelope } from "../Envelope.ts"
2
- import type { Thread } from "../Thread.ts"
3
-
4
- export const to = (...to: Array<Thread>): Envelope => Envelope({ to })
package/LPretty.ts DELETED
@@ -1,41 +0,0 @@
1
- import type { Message } from "@effect/ai/AiInput"
2
- import type { LEvent } from "./LEvent.ts"
3
-
4
- const GRAY = "\x1b[90m"
5
- const RESET = "\x1b[0m"
6
- const BOLD = "\x1b[1m"
7
- const GRAY_BG = "\x1b[47m"
8
-
9
- export const event: (event: typeof LEvent["Type"]) => string = (event) => {
10
- let text = `${GRAY}${event._tag}${RESET}`
11
- switch (event._tag) {
12
- case "MessagesAppended": {
13
- text += event.messages.map(message).join("\n")
14
- break
15
- }
16
- case "MessagesCleared": {
17
- text += `\n${event.cleared.length} messages cleared.`
18
- break
19
- }
20
- }
21
- return text
22
- }
23
-
24
- export const message = ({ _tag, parts }: Message): string => {
25
- let value = ""
26
- for (const part of parts) {
27
- value += `\n${BOLD}${_tag}\n${GRAY_BG}`
28
- switch (part._tag) {
29
- case "TextPart": {
30
- value += `${part.text}`
31
- break
32
- }
33
- default: {
34
- value += `${JSON.stringify(part, null, 2)}`
35
- break
36
- }
37
- }
38
- value += RESET
39
- }
40
- return value
41
- }
package/dist/L/Self.js DELETED
@@ -1,4 +0,0 @@
1
- import * as Context from "effect/Context";
2
- import { prefix } from "../util/prefix.js";
3
- export const Self = Context.GenericTag(prefix("Self"));
4
- //# sourceMappingURL=Self.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Self.js","sourceRoot":"","sources":["../../L/Self.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,MAAM,CAAC,MAAM,IAAI,GAAgC,OAAO,CAAC,UAAU,CAAS,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA"}
package/dist/L/fqn.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { type Thread } from "../Thread.ts";
3
- export declare const fqn: (id: string) => Effect.Effect<void, never, Thread>;
package/dist/L/fqn.js DELETED
@@ -1,8 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Option from "effect/Option";
3
- import { ThreadFqn } from "../Thread.js";
4
- import { Self } from "./Self.js";
5
- export const fqn = (id) => Effect.map(Self, (thread) => {
6
- thread.state.fqn = Option.some(ThreadFqn.make(id));
7
- });
8
- //# sourceMappingURL=fqn.js.map
package/dist/L/fqn.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"fqn.js","sourceRoot":"","sources":["../../L/fqn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAe,SAAS,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,EAAU,EAAsC,EAAE,CACpE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA"}
package/dist/L/raw.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import type { TaggableArg0 } from "../util/Taggable.ts";
3
- export declare const raw: <A0 extends TaggableArg0 | Effect.Effect<string | undefined, any, any>, L extends Array<unknown>>(a0: A0, ...aRest: L) => Effect.Effect<string | (undefined extends A0 ? undefined : never)>;
package/dist/L/raw.js DELETED
@@ -1,18 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import { normalizeRaw } from "../util/normalizeRaw.js";
3
- export const raw = Effect.fnUntraced(function* (a0, ...aRest) {
4
- const a0_ = Effect.isEffect(a0)
5
- ? yield* a0
6
- : a0;
7
- if (!a0_)
8
- return undefined;
9
- const aRest_ = yield* Effect.all(aRest.map((v) => Effect.isEffect(v)
10
- ? v
11
- : Effect.succeed(v)));
12
- return typeof a0_ === "string"
13
- ? aRest_.length === 0
14
- ? a0_
15
- : [a0_, ...aRest_].join("")
16
- : normalizeRaw(a0_, aRest_);
17
- });
18
- //# sourceMappingURL=raw.js.map
package/dist/L/raw.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"raw.js","sourceRoot":"","sources":["../../L/raw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAGtD,MAAM,CAAC,MAAM,GAAG,GAQZ,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,EAAE,EAAE,GAAG,KAAK;IAC1C,MAAM,GAAG,GAAiB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,CAAC,CAAC,KAAK,CAAC,CAAC,EAAiC;QAC1C,CAAC,CAAC,EAAE,CAAA;IACN,IAAI,CAAC,GAAG;QAAE,OAAO,SAAkB,CAAA;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACd,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CACtB,CACwC,CAAA;IAC3C,OAAO,OAAO,GAAG,KAAK,QAAQ;QAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YACnB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC/B,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- import type { Sequencer } from "../util/Sequencer.ts";
2
- export declare const sequence: Sequencer;
@@ -1,5 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- export const sequence = (...steps) => Effect.all(steps, {
3
- concurrency: 1,
4
- }).pipe(Effect.map((v) => v.pop()));
5
- //# sourceMappingURL=sequence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sequence.js","sourceRoot":"","sources":["../../L/sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,MAAM,CAAC,MAAM,QAAQ,GAAc,CAAC,GAAG,KAAK,EAAE,EAAE,CAC9C,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/L/to.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { Envelope } from "../Envelope.ts";
2
- import type { Thread } from "../Thread.ts";
3
- export declare const to: (...to: Array<Thread>) => Envelope;
package/dist/L/to.js DELETED
@@ -1,3 +0,0 @@
1
- import { Envelope } from "../Envelope.js";
2
- export const to = (...to) => Envelope({ to });
3
- //# sourceMappingURL=to.js.map
package/dist/L/to.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"to.js","sourceRoot":"","sources":["../../L/to.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGzC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAiB,EAAY,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"userJson.js","sourceRoot":"","sources":["../../L/userJson.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,QAAQ,GAGqB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,KAAK,EAAE,MAAM;IACjF,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,KAAK,CAAC,CAAC,IAAI,CAAA,aAAa,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,UAAU,CAAA;AACxE,CAAC,CAAC,CAAA"}
package/dist/LPretty.d.ts DELETED
@@ -1,4 +0,0 @@
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;
package/dist/LPretty.js DELETED
@@ -1,37 +0,0 @@
1
- const GRAY = "\x1b[90m";
2
- const RESET = "\x1b[0m";
3
- const BOLD = "\x1b[1m";
4
- const GRAY_BG = "\x1b[47m";
5
- export const event = (event) => {
6
- let text = `${GRAY}${event._tag}${RESET}`;
7
- switch (event._tag) {
8
- case "MessagesAppended": {
9
- text += event.messages.map(message).join("\n");
10
- break;
11
- }
12
- case "MessagesCleared": {
13
- text += `\n${event.cleared.length} messages cleared.`;
14
- break;
15
- }
16
- }
17
- return text;
18
- };
19
- export const message = ({ _tag, parts }) => {
20
- let value = "";
21
- for (const part of parts) {
22
- value += `\n${BOLD}${_tag}\n${GRAY_BG}`;
23
- switch (part._tag) {
24
- case "TextPart": {
25
- value += `${part.text}`;
26
- break;
27
- }
28
- default: {
29
- value += `${JSON.stringify(part, null, 2)}`;
30
- break;
31
- }
32
- }
33
- value += RESET;
34
- }
35
- return value;
36
- };
37
- //# sourceMappingURL=LPretty.js.map
@@ -1 +0,0 @@
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"}
@@ -1,4 +0,0 @@
1
- import type * as Effect from "effect/Effect";
2
- export interface Sequencer<Provides = never, Requires = 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]>, Exclude<Effect.Effect.Context<Arg[number]>, Provides> | Requires>;
4
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Sequencer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sequencer.js","sourceRoot":"","sources":["../../util/Sequencer.ts"],"names":[],"mappings":""}
package/util/Sequencer.ts DELETED
@@ -1,13 +0,0 @@
1
- import type * as Effect from "effect/Effect"
2
-
3
- export interface Sequencer<Provides = never, Requires = never> {
4
- <Arg extends Array<Effect.All.EffectAny>>(
5
- ...steps: Arg
6
- ): Effect.Effect<
7
- Arg extends [] ? void
8
- : Arg extends [...infer _0, infer L extends Effect.All.EffectAny] ? Effect.Effect.Success<L>
9
- : never,
10
- Effect.Effect.Error<Arg[number]>,
11
- Exclude<Effect.Effect.Context<Arg[number]>, Provides> | Requires
12
- >
13
- }
File without changes