liminal 0.5.8 → 0.5.9

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 (60) hide show
  1. package/Agent.ts +3 -0
  2. package/CHANGELOG.md +6 -0
  3. package/Context.ts +1 -10
  4. package/Fiber.ts +10 -2
  5. package/L/_infer.ts +6 -8
  6. package/L/assistant.ts +1 -1
  7. package/L/branch.ts +9 -12
  8. package/L/catch.ts +3 -4
  9. package/L/emit.ts +1 -1
  10. package/L/rune.ts +24 -13
  11. package/LEvent.ts +1 -1
  12. package/ModelRegistry.ts +0 -8
  13. package/Rune.ts +1 -0
  14. package/Tool.ts +31 -0
  15. package/ToolRegistry.ts +5 -0
  16. package/dist/Agent.d.ts +2 -0
  17. package/dist/Agent.js +2 -0
  18. package/dist/Agent.js.map +1 -1
  19. package/dist/Context.d.ts +1 -2
  20. package/dist/Context.js +0 -8
  21. package/dist/Context.js.map +1 -1
  22. package/dist/Fiber.d.ts +1 -3
  23. package/dist/Fiber.js +10 -2
  24. package/dist/Fiber.js.map +1 -1
  25. package/dist/L/_infer.js +6 -7
  26. package/dist/L/_infer.js.map +1 -1
  27. package/dist/L/assistant.js +1 -1
  28. package/dist/L/assistant.js.map +1 -1
  29. package/dist/L/branch.js +9 -10
  30. package/dist/L/branch.js.map +1 -1
  31. package/dist/L/catch.js +3 -4
  32. package/dist/L/catch.js.map +1 -1
  33. package/dist/L/emit.js +1 -1
  34. package/dist/L/emit.js.map +1 -1
  35. package/dist/L/rune.d.ts +5 -3
  36. package/dist/L/rune.js +11 -4
  37. package/dist/L/rune.js.map +1 -1
  38. package/dist/LEvent.js +1 -1
  39. package/dist/LEvent.js.map +1 -1
  40. package/dist/ModelRegistry.d.ts +0 -1
  41. package/dist/ModelRegistry.js +0 -7
  42. package/dist/ModelRegistry.js.map +1 -1
  43. package/dist/Rune.d.ts +1 -0
  44. package/dist/Rune.js.map +1 -1
  45. package/dist/Tool.d.ts +9 -0
  46. package/dist/Tool.js +31 -0
  47. package/dist/Tool.js.map +1 -0
  48. package/dist/ToolRegistry.d.ts +5 -0
  49. package/dist/ToolRegistry.js +5 -0
  50. package/dist/ToolRegistry.js.map +1 -0
  51. package/dist/index.d.ts +2 -0
  52. package/dist/index.js +2 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/tsconfig.tsbuildinfo +1 -1
  55. package/index.ts +2 -0
  56. package/package.json +1 -1
  57. package/cli/main.ts +0 -1
  58. package/dist/cli/main.d.ts +0 -1
  59. package/dist/cli/main.js +0 -3
  60. package/dist/cli/main.js.map +0 -1
package/Agent.ts CHANGED
@@ -5,11 +5,13 @@ import { MessageRegistry, MessageRegistryContext } from "./MessageRegistry.ts"
5
5
  import { ModelRegistry, ModelRegistryContext } from "./ModelRegistry.ts"
6
6
  import type { Rune } from "./Rune.ts"
7
7
  import type { Runic } from "./Runic.ts"
8
+ import { ToolRegistry, ToolRegistryContext } from "./ToolRegistry.ts"
8
9
 
9
10
  export interface AgentConfig<T, E> {
10
11
  handler?: ((this: Fiber<T>, event: E) => void) | undefined
11
12
  models?: ModelRegistry
12
13
  messages?: MessageRegistry
14
+ tools?: ToolRegistry
13
15
  signal?: AbortSignal | undefined
14
16
  }
15
17
 
@@ -28,6 +30,7 @@ export function Agent<Y extends Rune, T>(
28
30
  [HandlerContext, config?.handler],
29
31
  [ModelRegistryContext, config?.models ?? new ModelRegistry()],
30
32
  [MessageRegistryContext, config?.messages ?? new MessageRegistry()],
33
+ [ToolRegistryContext, config?.tools ?? new ToolRegistry()],
31
34
  ])
32
35
  .run(() => new Fiber(runic).resolution().then(onfulfilled, onrejected))
33
36
  },
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # liminal
2
2
 
3
+ ## 0.5.9
4
+
5
+ ### Patch Changes
6
+
7
+ - dbd5e93: Reintroduced tools and various examples.
8
+
3
9
  ## 0.5.8
4
10
 
5
11
  ### Patch Changes
package/Context.ts CHANGED
@@ -14,15 +14,6 @@ export class Context extends Map<ContextHandle, unknown> {
14
14
  return super.get(context) as never
15
15
  }
16
16
 
17
- getOrInit<V>(context: ContextHandle<V>, init: () => V): V {
18
- if (this.has(context)) {
19
- return this.get(context) as V
20
- }
21
- const instance = init()
22
- this.set(context, instance)
23
- return instance
24
- }
25
-
26
17
  set<V>(context: ContextHandle<V>, value: V): this {
27
18
  super.set(context, value)
28
19
  return this
@@ -44,7 +35,7 @@ export class Context extends Map<ContextHandle, unknown> {
44
35
  }
45
36
 
46
37
  export type ContextHandle<V = any> = {
47
- clone?: ((value: V) => V) | undefined
38
+ clone: ((value: V) => V) | undefined
48
39
  }
49
40
 
50
41
  export function ContextHandle<V>(clone?: (value: V) => V): ContextHandle<V> {
package/Fiber.ts CHANGED
@@ -50,8 +50,8 @@ export class Fiber<T = any> {
50
50
  this.abort = controller.abort.bind(controller)
51
51
  }
52
52
 
53
- static async join<F extends Array<Fiber>>(fibers: F): Promise<{ [I in keyof F]: F[I]["T"] }> {
54
- return await Promise.all(fibers.map((fiber) => fiber.resolution())) as never
53
+ fork<T>(runic: Runic<Rune, T>): Fiber<T> {
54
+ return new Fiber(runic, this)
55
55
  }
56
56
 
57
57
  resolution(this: Fiber<T>): Promise<T> {
@@ -75,9 +75,17 @@ export class Fiber<T = any> {
75
75
  current = await iterator.next(nextArg)
76
76
  }
77
77
  const { value } = current
78
+ this.status = {
79
+ type: "resolved",
80
+ value,
81
+ }
78
82
  abort()
79
83
  resolve(value)
80
84
  } catch (exception) {
85
+ this.status = {
86
+ type: "rejected",
87
+ exception,
88
+ }
81
89
  abort(exception)
82
90
  reject(exception)
83
91
  }
package/L/_infer.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { SchemaObject } from "liminal-schema"
2
2
  import { assert } from "liminal-util"
3
- import { Context, ContextHandle } from "../Context.ts"
3
+ import { Context } from "../Context.ts"
4
4
  import { InferenceRequested, Inferred, type LEvent } from "../LEvent.ts"
5
5
  import { MessageRegistryContext } from "../MessageRegistry.ts"
6
6
  import { ModelRegistryContext } from "../ModelRegistry.ts"
@@ -14,20 +14,18 @@ export function* _infer(schema?: SchemaObject): Generator<Rune<LEvent>, string>
14
14
  assert(modelRegistry)
15
15
  const model = modelRegistry.peek()
16
16
  assert(model)
17
- const requestId = context.getOrInit(InferenceRequestCounterContext, () => new InferenceRequestCounter()).next()
17
+ const requestId = InferenceCounter.next()
18
18
  yield* emit(new InferenceRequested(requestId, schema))
19
19
  const messageRegistry = context.get(MessageRegistryContext)
20
20
  assert(messageRegistry)
21
- const inference = yield* rune(() => model.resolve(messageRegistry.messages, schema))
21
+ const inference = yield* rune(() => model.resolve(messageRegistry.messages, schema), "infer")
22
22
  yield* emit(new Inferred(requestId, inference))
23
23
  return inference
24
24
  }
25
25
 
26
- class InferenceRequestCounter {
27
- count: number = 0
28
- next(): number {
26
+ class InferenceCounter {
27
+ static count: number = 0
28
+ static next(): number {
29
29
  return this.count++
30
30
  }
31
31
  }
32
-
33
- const InferenceRequestCounterContext: ContextHandle<InferenceRequestCounter> = ContextHandle()
package/L/assistant.ts CHANGED
@@ -15,7 +15,7 @@ export const assistant: assistant = Object.assign(
15
15
  const inference = yield* _infer(schema)
16
16
  yield* _message("assistant", [{ part: inference }])
17
17
  const input = JSON.parse(inference)
18
- return yield* rune(() => validate(type, input))
18
+ return yield* rune(() => validate(type, input), "validate_assistant_message")
19
19
  },
20
20
  {
21
21
  *[Symbol.iterator]() {
package/L/branch.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Context } from "../Context.ts"
2
- import { Fiber } from "../Fiber.ts"
3
2
  import { type Rune } from "../Rune.ts"
4
3
  import type { Runic } from "../Runic.ts"
5
4
  import { rune } from "./rune.ts"
@@ -15,22 +14,20 @@ export function branch<XR extends Record<keyof any, Runic>>(
15
14
  ): branch<Runic.Y<XR[keyof XR]> | Rune<never>, { [K in keyof XR]: Runic.T<XR[K]> }>
16
15
  export function* branch(value: Runic | Array<Runic> | Record<keyof any, Runic>): branch<Rune, any> {
17
16
  const context = Context.ensure()
18
- const parent = yield* rune((fiber) => fiber)
17
+ const parent = yield* rune
19
18
  if (Array.isArray(value)) {
20
- const fibers = value.map((runic) => context.clone().run(() => new Fiber(runic, parent)))
21
- return yield* rune(() => Fiber.join(fibers))
19
+ const fibers = value.map((runic) => context.clone().run(() => parent.fork(runic)))
20
+ return yield* rune(() => Promise.all(fibers.map((fiber) => fiber.resolution())), "branch")
22
21
  } else if (typeof value === "object") {
23
- const fibers = Object.values(value).map(
24
- (runic) => context.clone().run(() => new Fiber(runic, parent)),
25
- )
22
+ const fibers = Object.values(value).map((runic) => context.clone().run(() => parent.fork(runic)))
26
23
  return yield* rune(async () => {
27
24
  const keys = Object.keys(value)
28
- return await Fiber
29
- .join(fibers)
25
+ return await Promise
26
+ .all(fibers.map((fiber) => fiber.resolution()))
30
27
  .then((resolved) => resolved.map((value, i) => [keys[i], value]))
31
28
  .then(Object.fromEntries)
32
- })
29
+ }, "branch")
33
30
  }
34
- const fiber = context.clone().run(() => new Fiber(typeof value === "function" ? value() : value, parent))
35
- return yield* rune(() => fiber.resolution())
31
+ const fiber = context.clone().run(() => parent.fork(typeof value === "function" ? value() : value))
32
+ return yield* rune(() => fiber.resolution(), "branch")
36
33
  }
package/L/catch.ts CHANGED
@@ -1,17 +1,16 @@
1
- import { Fiber } from "../Fiber.ts"
2
1
  import type { Rune } from "../Rune.ts"
3
2
  import type { Runic } from "../Runic.ts"
4
3
  import { rune } from "./rune.ts"
5
4
 
6
5
  export { catch_ as catch }
7
6
  function* catch_<Y extends Rune, T>(runic: Runic<Y, T>): Generator<Rune<Y>, CatchResult<T>> {
8
- return yield* rune(async () => {
7
+ return yield* rune(async (fiber) => {
9
8
  try {
10
- return { resolved: await new Fiber(runic).resolution() }
9
+ return { resolved: await fiber.fork(runic).resolution() }
11
10
  } catch (exception: unknown) {
12
11
  return { rejected: exception }
13
12
  }
14
- })
13
+ }, "catch")
15
14
  }
16
15
  Object.defineProperty(catch_, "name", { value: "catch" })
17
16
 
package/L/emit.ts CHANGED
@@ -9,6 +9,6 @@ export interface emit<E> extends Generator<Rune<E>, void> {}
9
9
  export function* emit<const E>(event: EnsureNarrow<E>): emit<E> {
10
10
  const context = Context.ensure()
11
11
  const handler = context.get(HandlerContext)
12
- const fiber = yield* rune((fiber) => fiber)
12
+ const fiber = yield* rune
13
13
  handler?.call(fiber, event)
14
14
  }
package/L/rune.ts CHANGED
@@ -1,19 +1,30 @@
1
1
  import { Fiber } from "../Fiber.ts"
2
2
  import { type Rune, RuneKey } from "../Rune.ts"
3
3
 
4
- export interface rune<T> extends Iterable<Rune<never>, T> {
5
- <E>(): Generator<Rune<E>, T>
4
+ export interface rune extends Iterable<Rune<never>, Fiber> {
5
+ <R>(source: (fiber: Fiber) => R, debug?: string): Iterable<Rune<never>, Awaited<R>> & {
6
+ <E>(): Generator<Rune<E>, Awaited<R>>
7
+ }
6
8
  }
7
-
8
- export function rune<R>(source: (fiber: Fiber) => R): rune<Awaited<R>> {
9
- return Object.assign(
10
- function*<E>(): Generator<Rune<E>, Awaited<R>> {
11
- return yield Object.assign(source, { [RuneKey]: true } as never)
12
- },
13
- {
14
- *[Symbol.iterator](): Generator<Rune<never>, Awaited<R>> {
15
- return yield Object.assign(source, { [RuneKey]: true } as never)
9
+ export const rune: rune = Object.assign(
10
+ function<R>(source: (fiber: Fiber) => R, debug?: string) {
11
+ return Object.assign(
12
+ function*<E>(): Generator<Rune<E>, Awaited<R>> {
13
+ return yield Object.assign(source, { [RuneKey]: true, debug } as never)
16
14
  },
15
+ {
16
+ *[Symbol.iterator](): Generator<Rune<never>, Awaited<R>> {
17
+ return yield Object.assign(source, { [RuneKey]: true, debug } as never)
18
+ },
19
+ },
20
+ )
21
+ },
22
+ {
23
+ *[Symbol.iterator](): Generator<Rune<never>, Fiber> {
24
+ return yield Object.assign((fiber: Fiber) => fiber, {
25
+ [RuneKey]: true,
26
+ debug: "get_current_fiber",
27
+ } as never)
17
28
  },
18
- )
19
- }
29
+ },
30
+ )
package/LEvent.ts CHANGED
@@ -58,5 +58,5 @@ export class FiberResolved extends EventBase(LEventTag, "fiber_resolved") {
58
58
  }
59
59
 
60
60
  export function isLEvent(value: unknown): value is LEvent {
61
- return typeof value === "object" && value !== null && LEventTag in value
61
+ return typeof value === "object" && value !== null && "brand" in value && value.brand === LEventTag
62
62
  }
package/ModelRegistry.ts CHANGED
@@ -6,14 +6,6 @@ export class ModelRegistry {
6
6
  declare head?: ModelRegistryNode | undefined
7
7
  declare tail?: ModelRegistryNode | undefined
8
8
 
9
- constructor(models?: Array<Model>) {
10
- if (models) {
11
- for (const model of models) {
12
- this.register(model)
13
- }
14
- }
15
- }
16
-
17
9
  peek() {
18
10
  return this.tail?.model
19
11
  }
package/Rune.ts CHANGED
@@ -4,6 +4,7 @@ export interface Rune<out E = any> {
4
4
  E: E
5
5
  (fiber: Fiber): any
6
6
  [RuneKey]: true
7
+ debug?: string
7
8
  }
8
9
 
9
10
  export declare namespace Rune {
package/Tool.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { type LType, type SchemaObject, toJSONSchema, validate, type Value, type ValueObject } from "liminal-schema"
2
+ import { subtle } from "node:crypto"
3
+
4
+ export class Tool {
5
+ static async make<T extends ValueObject>(
6
+ description: string,
7
+ type: LType<T>,
8
+ f: (arg: T) => Value | Promise<Value>,
9
+ ) {
10
+ const encoder = new TextEncoder()
11
+ const schema = toJSONSchema(type)
12
+ const buffer = await subtle.digest("SHA-256", encoder.encode(description + "\n\n" + JSON.stringify(schema)))
13
+ const bytes = new Uint8Array(buffer)
14
+ let binary = ""
15
+ for (const b of bytes) binary += String.fromCharCode(b)
16
+ const base64 = btoa(binary)
17
+ .replace(/\+/g, "-")
18
+ .replace(/\//g, "_")
19
+ .replace(/=+$/, "")
20
+ return new Tool(base64, description, schema, async (arg) => {
21
+ return await f(await validate(type, arg) as never)
22
+ })
23
+ }
24
+
25
+ constructor(
26
+ readonly name: string,
27
+ readonly description: string,
28
+ readonly parameterSchema: SchemaObject,
29
+ readonly f: (arg: any) => Value | Promise<Value>,
30
+ ) {}
31
+ }
@@ -0,0 +1,5 @@
1
+ import { ContextHandle } from "liminal"
2
+ import type { Tool } from "./Tool"
3
+
4
+ export class ToolRegistry extends Set<Tool> {}
5
+ export const ToolRegistryContext: ContextHandle<ToolRegistry> = ContextHandle()
package/dist/Agent.d.ts CHANGED
@@ -3,10 +3,12 @@ import { MessageRegistry } from "./MessageRegistry.ts";
3
3
  import { ModelRegistry } from "./ModelRegistry.ts";
4
4
  import type { Rune } from "./Rune.ts";
5
5
  import type { Runic } from "./Runic.ts";
6
+ import { ToolRegistry } from "./ToolRegistry.ts";
6
7
  export interface AgentConfig<T, E> {
7
8
  handler?: ((this: Fiber<T>, event: E) => void) | undefined;
8
9
  models?: ModelRegistry;
9
10
  messages?: MessageRegistry;
11
+ tools?: ToolRegistry;
10
12
  signal?: AbortSignal | undefined;
11
13
  }
12
14
  export interface Agent<out T, out E> extends PromiseLike<T> {
package/dist/Agent.js CHANGED
@@ -3,6 +3,7 @@ import { Fiber } from "./Fiber.js";
3
3
  import { HandlerContext } from "./Handler.js";
4
4
  import { MessageRegistry, MessageRegistryContext } from "./MessageRegistry.js";
5
5
  import { ModelRegistry, ModelRegistryContext } from "./ModelRegistry.js";
6
+ import { ToolRegistry, ToolRegistryContext } from "./ToolRegistry.js";
6
7
  export function Agent(runic, config) {
7
8
  return {
8
9
  then(onfulfilled, onrejected) {
@@ -10,6 +11,7 @@ export function Agent(runic, config) {
10
11
  [HandlerContext, config?.handler],
11
12
  [ModelRegistryContext, config?.models ?? new ModelRegistry()],
12
13
  [MessageRegistryContext, config?.messages ?? new MessageRegistry()],
14
+ [ToolRegistryContext, config?.tools ?? new ToolRegistry()],
13
15
  ])
14
16
  .run(() => new Fiber(runic).resolution().then(onfulfilled, onrejected));
15
17
  },
package/dist/Agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Agent.js","sourceRoot":"","sources":["../Agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAgBxE,MAAM,UAAU,KAAK,CACnB,KAAkB,EAClB,MAAkC;IAElC,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,UAAU;YAC1B,OAAO,IAAI,OAAO,CAAC;gBACjB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;gBACjC,CAAC,oBAAoB,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBAC7D,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI,eAAe,EAAE,CAAC;aACpE,CAAC;iBACC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAA;QAC3E,CAAC;KACsD,CAAA;AAC3D,CAAC"}
1
+ {"version":3,"file":"Agent.js","sourceRoot":"","sources":["../Agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAGxE,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAerE,MAAM,UAAU,KAAK,CACnB,KAAkB,EAClB,MAAkC;IAElC,OAAO;QACL,IAAI,CAAC,WAAW,EAAE,UAAU;YAC1B,OAAO,IAAI,OAAO,CAAC;gBACjB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;gBACjC,CAAC,oBAAoB,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBAC7D,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,IAAI,IAAI,eAAe,EAAE,CAAC;gBACnE,CAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI,YAAY,EAAE,CAAC;aAC3D,CAAC;iBACC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAA;QAC3E,CAAC;KACsD,CAAA;AAC3D,CAAC"}
package/dist/Context.d.ts CHANGED
@@ -1,12 +1,11 @@
1
1
  export declare class Context extends Map<ContextHandle, unknown> {
2
2
  static ensure(): Context;
3
3
  get<V>(context: ContextHandle<V>): V | undefined;
4
- getOrInit<V>(context: ContextHandle<V>, init: () => V): V;
5
4
  set<V>(context: ContextHandle<V>, value: V): this;
6
5
  run<R>(callback: () => R): R;
7
6
  clone(overrides?: Iterable<[ContextHandle, unknown]>): Context;
8
7
  }
9
8
  export type ContextHandle<V = any> = {
10
- clone?: ((value: V) => V) | undefined;
9
+ clone: ((value: V) => V) | undefined;
11
10
  };
12
11
  export declare function ContextHandle<V>(clone?: (value: V) => V): ContextHandle<V>;
package/dist/Context.js CHANGED
@@ -10,14 +10,6 @@ export class Context extends Map {
10
10
  get(context) {
11
11
  return super.get(context);
12
12
  }
13
- getOrInit(context, init) {
14
- if (this.has(context)) {
15
- return this.get(context);
16
- }
17
- const instance = init();
18
- this.set(context, instance);
19
- return instance;
20
- }
21
13
  set(context, value) {
22
14
  super.set(context, value);
23
15
  return this;
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","sourceRoot":"","sources":["../Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAW,CAAA;AAEhD,MAAM,OAAO,OAAQ,SAAQ,GAA2B;IACtD,MAAM,CAAC,MAAM;QACX,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAClC,MAAM,CAAC,OAAO,CAAC,CAAA;QACf,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,GAAG,CAAI,OAAyB;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAU,CAAA;IACpC,CAAC;IAED,SAAS,CAAI,OAAyB,EAAE,IAAa;QACnD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAM,CAAA;QAC/B,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAA;QACvB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC3B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,GAAG,CAAI,OAAyB,EAAE,KAAQ;QACxC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAI,QAAiB;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,SAA8C;QAClD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAA;QACtC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAMD,MAAM,UAAU,aAAa,CAAI,KAAuB;IACtD,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAW,CAAA;AAEhD,MAAM,OAAO,OAAQ,SAAQ,GAA2B;IACtD,MAAM,CAAC,MAAM;QACX,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAClC,MAAM,CAAC,OAAO,CAAC,CAAA;QACf,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,GAAG,CAAI,OAAyB;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAU,CAAA;IACpC,CAAC;IAED,GAAG,CAAI,OAAyB,EAAE,KAAQ;QACxC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAI,QAAiB;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,SAA8C;QAClD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAA;QACtC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAMD,MAAM,UAAU,aAAa,CAAI,KAAuB;IACtD,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC"}
package/dist/Fiber.d.ts CHANGED
@@ -27,8 +27,6 @@ export declare class Fiber<T = any> {
27
27
  abort: (reason?: any) => void;
28
28
  status: FiberStatus<T>;
29
29
  constructor(runic: Runic<Rune, T>, parent?: Fiber);
30
- static join<F extends Array<Fiber>>(fibers: F): Promise<{
31
- [I in keyof F]: F[I]["T"];
32
- }>;
30
+ fork<T>(runic: Runic<Rune, T>): Fiber<T>;
33
31
  resolution(this: Fiber<T>): Promise<T>;
34
32
  }
package/dist/Fiber.js CHANGED
@@ -23,8 +23,8 @@ export class Fiber {
23
23
  ]);
24
24
  this.abort = controller.abort.bind(controller);
25
25
  }
26
- static async join(fibers) {
27
- return await Promise.all(fibers.map((fiber) => fiber.resolution()));
26
+ fork(runic) {
27
+ return new Fiber(runic, this);
28
28
  }
29
29
  resolution() {
30
30
  const { status, abort } = this;
@@ -47,10 +47,18 @@ export class Fiber {
47
47
  current = await iterator.next(nextArg);
48
48
  }
49
49
  const { value } = current;
50
+ this.status = {
51
+ type: "resolved",
52
+ value,
53
+ };
50
54
  abort();
51
55
  resolve(value);
52
56
  }
53
57
  catch (exception) {
58
+ this.status = {
59
+ type: "rejected",
60
+ exception,
61
+ };
54
62
  abort(exception);
55
63
  reject(exception);
56
64
  }
package/dist/Fiber.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Fiber.js","sourceRoot":"","sources":["../Fiber.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Fiber.js","sourceRoot":"","sources":["../Fiber.ts"],"names":[],"mappings":"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"}
package/dist/L/_infer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { assert } from "liminal-util";
2
- import { Context, ContextHandle } from "../Context.js";
2
+ import { Context } from "../Context.js";
3
3
  import { InferenceRequested, Inferred } from "../LEvent.js";
4
4
  import { MessageRegistryContext } from "../MessageRegistry.js";
5
5
  import { ModelRegistryContext } from "../ModelRegistry.js";
@@ -11,19 +11,18 @@ export function* _infer(schema) {
11
11
  assert(modelRegistry);
12
12
  const model = modelRegistry.peek();
13
13
  assert(model);
14
- const requestId = context.getOrInit(InferenceRequestCounterContext, () => new InferenceRequestCounter()).next();
14
+ const requestId = InferenceCounter.next();
15
15
  yield* emit(new InferenceRequested(requestId, schema));
16
16
  const messageRegistry = context.get(MessageRegistryContext);
17
17
  assert(messageRegistry);
18
- const inference = yield* rune(() => model.resolve(messageRegistry.messages, schema));
18
+ const inference = yield* rune(() => model.resolve(messageRegistry.messages, schema), "infer");
19
19
  yield* emit(new Inferred(requestId, inference));
20
20
  return inference;
21
21
  }
22
- class InferenceRequestCounter {
23
- count = 0;
24
- next() {
22
+ class InferenceCounter {
23
+ static count = 0;
24
+ static next() {
25
25
  return this.count++;
26
26
  }
27
27
  }
28
- const InferenceRequestCounterContext = ContextHandle();
29
28
  //# sourceMappingURL=_infer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_infer.js","sourceRoot":"","sources":["../../L/_infer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,MAAqB;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,CAAA;IACrB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAA;IAClC,MAAM,CAAC,KAAK,CAAC,CAAA;IACb,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/G,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3D,MAAM,CAAC,eAAe,CAAC,CAAA;IACvB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IACpF,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;IAC/C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,uBAAuB;IAC3B,KAAK,GAAW,CAAC,CAAA;IACjB,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;CACF;AAED,MAAM,8BAA8B,GAA2C,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"_infer.js","sourceRoot":"","sources":["../../L/_infer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,MAAqB;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,CAAA;IACrB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAA;IAClC,MAAM,CAAC,KAAK,CAAC,CAAA;IACb,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAA;IACzC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC3D,MAAM,CAAC,eAAe,CAAC,CAAA;IACvB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;IAC7F,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;IAC/C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,gBAAgB;IACpB,MAAM,CAAC,KAAK,GAAW,CAAC,CAAA;IACxB,MAAM,CAAC,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC"}
@@ -7,7 +7,7 @@ export const assistant = Object.assign(function* (type) {
7
7
  const inference = yield* _infer(schema);
8
8
  yield* _message("assistant", [{ part: inference }]);
9
9
  const input = JSON.parse(inference);
10
- return yield* rune(() => validate(type, input));
10
+ return yield* rune(() => validate(type, input), "validate_assistant_message");
11
11
  }, {
12
12
  *[Symbol.iterator]() {
13
13
  const inference = yield* _infer();
@@ -1 +1 @@
1
- {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../L/assistant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAMhC,MAAM,CAAC,MAAM,SAAS,GAAc,MAAM,CAAC,MAAM,CAC/C,QAAQ,CAAC,EAAI,IAAc;IACzB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACvC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACnC,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;AACjD,CAAC,EACD;IACE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,CAAA;QACjC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACnD,OAAO,SAAS,CAAA;IAClB,CAAC;CACF,CACF,CAAA"}
1
+ {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../../L/assistant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGnE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAMhC,MAAM,CAAC,MAAM,SAAS,GAAc,MAAM,CAAC,MAAM,CAC/C,QAAQ,CAAC,EAAI,IAAc;IACzB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACvC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACnC,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,4BAA4B,CAAC,CAAA;AAC/E,CAAC,EACD;IACE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,CAAA;QACjC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACnD,OAAO,SAAS,CAAA;IAClB,CAAC;CACF,CACF,CAAA"}
package/dist/L/branch.js CHANGED
@@ -1,25 +1,24 @@
1
1
  import { Context } from "../Context.js";
2
- import { Fiber } from "../Fiber.js";
3
2
  import {} from "../Rune.js";
4
3
  import { rune } from "./rune.js";
5
4
  export function* branch(value) {
6
5
  const context = Context.ensure();
7
- const parent = yield* rune((fiber) => fiber);
6
+ const parent = yield* rune;
8
7
  if (Array.isArray(value)) {
9
- const fibers = value.map((runic) => context.clone().run(() => new Fiber(runic, parent)));
10
- return yield* rune(() => Fiber.join(fibers));
8
+ const fibers = value.map((runic) => context.clone().run(() => parent.fork(runic)));
9
+ return yield* rune(() => Promise.all(fibers.map((fiber) => fiber.resolution())), "branch");
11
10
  }
12
11
  else if (typeof value === "object") {
13
- const fibers = Object.values(value).map((runic) => context.clone().run(() => new Fiber(runic, parent)));
12
+ const fibers = Object.values(value).map((runic) => context.clone().run(() => parent.fork(runic)));
14
13
  return yield* rune(async () => {
15
14
  const keys = Object.keys(value);
16
- return await Fiber
17
- .join(fibers)
15
+ return await Promise
16
+ .all(fibers.map((fiber) => fiber.resolution()))
18
17
  .then((resolved) => resolved.map((value, i) => [keys[i], value]))
19
18
  .then(Object.fromEntries);
20
- });
19
+ }, "branch");
21
20
  }
22
- const fiber = context.clone().run(() => new Fiber(typeof value === "function" ? value() : value, parent));
23
- return yield* rune(() => fiber.resolution());
21
+ const fiber = context.clone().run(() => parent.fork(typeof value === "function" ? value() : value));
22
+ return yield* rune(() => fiber.resolution(), "branch");
24
23
  }
25
24
  //# sourceMappingURL=branch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../L/branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAa,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAWhC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,KAAsD;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QACxF,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IAC9C,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAC/D,CAAA;QACD,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC/B,OAAO,MAAM,KAAK;iBACf,IAAI,CAAC,MAAM,CAAC;iBACZ,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;iBAChE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACzG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;AAC9C,CAAC"}
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../L/branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAa,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAWhC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,KAAsD;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAClF,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC5F,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACjG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC/B,OAAO,MAAM,OAAO;iBACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;iBAC9C,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;iBAChE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAC7B,CAAC,EAAE,QAAQ,CAAC,CAAA;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IACnG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAA;AACxD,CAAC"}
package/dist/L/catch.js CHANGED
@@ -1,15 +1,14 @@
1
- import { Fiber } from "../Fiber.js";
2
1
  import { rune } from "./rune.js";
3
2
  export { catch_ as catch };
4
3
  function* catch_(runic) {
5
- return yield* rune(async () => {
4
+ return yield* rune(async (fiber) => {
6
5
  try {
7
- return { resolved: await new Fiber(runic).resolution() };
6
+ return { resolved: await fiber.fork(runic).resolution() };
8
7
  }
9
8
  catch (exception) {
10
9
  return { rejected: exception };
11
10
  }
12
- });
11
+ }, "catch");
13
12
  }
14
13
  Object.defineProperty(catch_, "name", { value: "catch" });
15
14
  //# sourceMappingURL=catch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catch.js","sourceRoot":"","sources":["../../L/catch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAA;AAC1B,QAAQ,CAAC,CAAC,MAAM,CAAoB,KAAkB;IACpD,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC;YACH,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAA;QAC1D,CAAC;QAAC,OAAO,SAAkB,EAAE,CAAC;YAC5B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;QAChC,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AACD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"catch.js","sourceRoot":"","sources":["../../L/catch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAA;AAC1B,QAAQ,CAAC,CAAC,MAAM,CAAoB,KAAkB;IACpD,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAA;QAC3D,CAAC;QAAC,OAAO,SAAkB,EAAE,CAAC;YAC5B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;QAChC,CAAC;IACH,CAAC,EAAE,OAAO,CAAC,CAAA;AACb,CAAC;AACD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA"}
package/dist/L/emit.js CHANGED
@@ -4,7 +4,7 @@ import { rune } from "./rune.js";
4
4
  export function* emit(event) {
5
5
  const context = Context.ensure();
6
6
  const handler = context.get(HandlerContext);
7
- const fiber = yield* rune((fiber) => fiber);
7
+ const fiber = yield* rune;
8
8
  handler?.call(fiber, event);
9
9
  }
10
10
  //# sourceMappingURL=emit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../L/emit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAU,KAAsB;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAC3C,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC7B,CAAC"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../L/emit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAIhC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAU,KAAsB;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA;IACzB,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC7B,CAAC"}
package/dist/L/rune.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { Fiber } from "../Fiber.ts";
2
2
  import { type Rune } from "../Rune.ts";
3
- export interface rune<T> extends Iterable<Rune<never>, T> {
4
- <E>(): Generator<Rune<E>, T>;
3
+ export interface rune extends Iterable<Rune<never>, Fiber> {
4
+ <R>(source: (fiber: Fiber) => R, debug?: string): Iterable<Rune<never>, Awaited<R>> & {
5
+ <E>(): Generator<Rune<E>, Awaited<R>>;
6
+ };
5
7
  }
6
- export declare function rune<R>(source: (fiber: Fiber) => R): rune<Awaited<R>>;
8
+ export declare const rune: rune;