@moxt-ai/mobius 0.0.337 → 0.0.339

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.
@@ -1 +1 @@
1
- {"version":3,"file":"session-configurations.d.ts","sourceRoot":"","sources":["../../../src/session/live/session-configurations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAEnG,MAAM,MAAM,0BAA0B,GAAG,6BAA6B,CAAC;AAWvE,eAAO,MAAM,iCAAiC,UAAW,OAAO,KAAG,SAAS,0BAA0B,EAajG,CAAC;AAEN,MAAM,MAAM,+BAA+B,GAAG,CAC1C,aAAa,EAAE,0BAA0B,EACzC,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,qBAAa,qBAAqB;;IAG9B,QAAQ,CAAC,MAAM,QAAO,SAAS,0BAA0B,EAAE,CAAmB;IAE9E,QAAQ,CAAC,OAAO,YAAa,SAAS,mBAAmB,EAAE,KAAG,IAAI,CAYhE;IAEF,QAAQ,CAAC,MAAM,WAAY,mBAAmB,KAAG,IAAI,CAMnD;IAEF,QAAQ,CAAC,OAAO,WACJ,SAAS,0BAA0B,EAAE,WACpC,SAAS,mBAAmB,EAAE,SAChC,+BAA+B,UAC9B,WAAW,KACpB,OAAO,CAAC,IAAI,CAAC,CAsBd;CACL"}
1
+ {"version":3,"file":"session-configurations.d.ts","sourceRoot":"","sources":["../../../src/session/live/session-configurations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAEnG,MAAM,MAAM,0BAA0B,GAAG,6BAA6B,CAAC;AAOvE,eAAO,MAAM,iCAAiC,UAAW,OAAO,KAAG,SAAS,0BAA0B,EAQ5F,CAAC;AAEX,MAAM,MAAM,+BAA+B,GAAG,CAC1C,aAAa,EAAE,0BAA0B,EACzC,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,qBAAa,qBAAqB;;IAG9B,QAAQ,CAAC,MAAM,QAAO,SAAS,0BAA0B,EAAE,CAAmB;IAE9E,QAAQ,CAAC,OAAO,YAAa,SAAS,mBAAmB,EAAE,KAAG,IAAI,CAYhE;IAEF,QAAQ,CAAC,MAAM,WAAY,mBAAmB,KAAG,IAAI,CAMnD;IAEF,QAAQ,CAAC,OAAO,WACJ,SAAS,0BAA0B,EAAE,WACpC,SAAS,mBAAmB,EAAE,SAChC,+BAA+B,UAC9B,WAAW,KACpB,OAAO,CAAC,IAAI,CAAC,CAsBd;CACL"}
@@ -1,18 +1,16 @@
1
1
  import { z } from "zod";
2
- const storedSessionConfigurationsSchema = z
3
- .array(z.discriminatedUnion("type", [
2
+ const storedSessionConfigurationSchema = z.discriminatedUnion("type", [
4
3
  z.object({ booleanValue: z.boolean(), configId: z.string().max(128), type: z.literal("boolean") }),
5
4
  z.object({ configId: z.string().max(128), type: z.literal("select"), value: z.string().max(500) }),
6
- ]))
7
- .max(100);
8
- export const decodeStoredSessionConfigurations = (value) => storedSessionConfigurationsSchema.parse(Array.isArray(value)
9
- ? value.filter((configuration) => typeof configuration !== "object" ||
10
- configuration === null ||
11
- !("type" in configuration) ||
12
- typeof configuration.type !== "string" ||
13
- configuration.type === "boolean" ||
14
- configuration.type === "select")
15
- : value);
5
+ ]);
6
+ export const decodeStoredSessionConfigurations = (value) => z
7
+ .array(z.unknown())
8
+ .max(100)
9
+ .parse(value)
10
+ .flatMap((configuration) => {
11
+ const decoded = storedSessionConfigurationSchema.safeParse(configuration);
12
+ return decoded.success ? [decoded.data] : [];
13
+ });
16
14
  export class SessionConfigurations {
17
15
  #selected = [];
18
16
  stored = () => this.#selected;
@@ -1 +1 @@
1
- {"version":3,"file":"session-configurations.js","sourceRoot":"","sources":["../../../src/session/live/session-configurations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-configurations.js","sourceRoot":"","sources":["../../../src/session/live/session-configurations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,gCAAgC,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAClE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAClG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;CACrG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,KAAc,EAAyC,EAAE,CACvG,CAAC;KACI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KAClB,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,KAAK,CAAC;KACZ,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;IACvB,MAAM,OAAO,GAAG,gCAAgC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC,CAAC,CAAC;AAOX,MAAM,OAAO,qBAAqB;IAC9B,SAAS,GAA0C,EAAE,CAAC;IAE7C,MAAM,GAAG,GAA0C,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;IAErE,OAAO,GAAG,CAAC,OAAuC,EAAQ,EAAE;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CACjF,CAAC;YACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAC;YACrB,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,KAAK,SAAS;gBAC7B,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC/E,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;QAChF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEO,MAAM,GAAG,CAAC,MAA2B,EAAQ,EAAE;QACpD,MAAM,QAAQ,GACV,MAAM,CAAC,IAAI,KAAK,SAAS;YACrB,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC7E,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;QAC9E,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnH,CAAC,CAAC;IAEO,OAAO,GAAG,KAAK,EACpB,MAA6C,EAC7C,OAAuC,EACvC,KAAsC,EACtC,MAAmB,EACN,EAAE;QACf,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QACxB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CACjF,CAAC;YACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxB,SAAS;YACb,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,EAAE,CAAC;oBAClD,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACnC,CAAC;gBACD,SAAS;YACb,CAAC;YACD,IACI,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,KAAK;gBACxC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,EACjE,CAAC;gBACC,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;IACL,CAAC,CAAC;CACL"}
@@ -4,9 +4,20 @@ export declare class RuntimeTurnActivity {
4
4
  #private;
5
5
  readonly acceptsPrompts: () => boolean;
6
6
  readonly count: () => number;
7
+ readonly describe: () => {
8
+ readonly turns: number;
9
+ readonly backgroundSources: number;
10
+ };
7
11
  readonly setBackgroundActivity: (source: object, active: boolean) => void;
8
12
  readonly start: (turn: ActiveRuntimeTurn) => void;
9
13
  readonly finish: (turn: ActiveRuntimeTurn) => void;
10
- readonly reserveWhenIdle: (signal: AbortSignal) => Promise<Disposable>;
14
+ readonly whenIdle: (signal: AbortSignal) => Promise<void>;
15
+ /**
16
+ * Close admission only after the Runtime has had no work for `quietMilliseconds`.
17
+ * The moment a reply finishes is when a user is most likely to continue, so idle
18
+ * alone is not an upgrade window. Checking and reserving happen synchronously, so
19
+ * no prompt can be admitted between them.
20
+ */
21
+ readonly reserveIfQuiet: (quietMilliseconds: number) => Disposable | null;
11
22
  }
12
23
  //# sourceMappingURL=runtime-turn-activity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-turn-activity.d.ts","sourceRoot":"","sources":["../../../src/session/turn/runtime-turn-activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAO1D,iGAAiG;AACjG,qBAAa,mBAAmB;;IAK5B,QAAQ,CAAC,cAAc,QAAO,OAAO,CAAwC;IAE7E,QAAQ,CAAC,KAAK,QAAO,MAAM,CAAoD;IAE/E,QAAQ,CAAC,qBAAqB,WAAY,MAAM,UAAU,OAAO,KAAG,IAAI,CAOtE;IAQF,QAAQ,CAAC,KAAK,SAAU,iBAAiB,KAAG,IAAI,CAE9C;IAEF,QAAQ,CAAC,MAAM,SAAU,iBAAiB,KAAG,IAAI,CAI/C;IAEF,QAAQ,CAAC,eAAe,WAAY,WAAW,KAAG,OAAO,CAAC,UAAU,CAAC,CA0BnE;CACL"}
1
+ {"version":3,"file":"runtime-turn-activity.d.ts","sourceRoot":"","sources":["../../../src/session/turn/runtime-turn-activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,iGAAiG;AACjG,qBAAa,mBAAmB;;IAQ5B,QAAQ,CAAC,cAAc,QAAO,OAAO,CAAoB;IAEzD,QAAQ,CAAC,KAAK,QAAO,MAAM,CAAoD;IAE/E,QAAQ,CAAC,QAAQ,QAAO;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAGnF;IAEH,QAAQ,CAAC,qBAAqB,WAAY,MAAM,UAAU,OAAO,KAAG,IAAI,CAWtE;IAEF,QAAQ,CAAC,KAAK,SAAU,iBAAiB,KAAG,IAAI,CAG9C;IAEF,QAAQ,CAAC,MAAM,SAAU,iBAAiB,KAAG,IAAI,CAG/C;IAYF,QAAQ,CAAC,QAAQ,WAAY,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC,CAiBtD;IAEF;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,sBAAuB,MAAM,KAAG,UAAU,GAAG,IAAI,CAatE;CACL"}
@@ -2,57 +2,83 @@
2
2
  export class RuntimeTurnActivity {
3
3
  #turns = new Set();
4
4
  #backgroundSources = new Set();
5
- #admission = { kind: "open" };
6
- acceptsPrompts = () => this.#admission.kind !== "reserved";
5
+ #idleWaiters = new Set();
6
+ // When work last started or stopped; the quiet period is measured from here.
7
+ #changedAt = Date.now();
8
+ #reserved = false;
9
+ acceptsPrompts = () => !this.#reserved;
7
10
  count = () => this.#turns.size + this.#backgroundSources.size;
11
+ describe = () => ({
12
+ turns: this.#turns.size,
13
+ backgroundSources: this.#backgroundSources.size,
14
+ });
8
15
  setBackgroundActivity = (source, active) => {
16
+ // Agents repeat unchanged reports; only a transition counts as activity.
17
+ if (active === this.#backgroundSources.has(source)) {
18
+ return;
19
+ }
9
20
  if (active) {
10
21
  this.#backgroundSources.add(source);
11
22
  }
12
23
  else {
13
24
  this.#backgroundSources.delete(source);
14
25
  }
15
- this.#reserveIfIdle();
26
+ this.#changed();
16
27
  };
17
- #reserveIfIdle() {
18
- if (this.count() === 0 && this.#admission.kind === "waiting") {
19
- this.#admission.reserve();
20
- }
21
- }
22
28
  start = (turn) => {
23
29
  this.#turns.add(turn);
30
+ this.#changed();
24
31
  };
25
32
  finish = (turn) => {
26
33
  this.#turns.delete(turn);
27
- // Close admission synchronously with the last completion.
28
- this.#reserveIfIdle();
34
+ this.#changed();
29
35
  };
30
- reserveWhenIdle = (signal) => {
36
+ #changed() {
37
+ this.#changedAt = Date.now();
38
+ if (this.count() === 0) {
39
+ for (const resolve of this.#idleWaiters) {
40
+ resolve();
41
+ }
42
+ this.#idleWaiters.clear();
43
+ }
44
+ }
45
+ whenIdle = (signal) => {
31
46
  signal.throwIfAborted();
32
- if (this.#admission.kind !== "open") {
33
- throw new Error("A daemon upgrade already owns admission");
47
+ if (this.count() === 0) {
48
+ return Promise.resolve();
34
49
  }
35
50
  return new Promise((resolve, reject) => {
36
51
  const abort = () => {
37
- this.#admission = { kind: "open" };
38
- signal.removeEventListener("abort", abort);
52
+ this.#idleWaiters.delete(idle);
39
53
  reject(signal.reason);
40
54
  };
41
- const reserve = () => {
42
- this.#admission = { kind: "reserved" };
55
+ const idle = () => {
43
56
  signal.removeEventListener("abort", abort);
44
- resolve({
45
- [Symbol.dispose]: () => {
46
- this.#admission = { kind: "open" };
47
- },
48
- });
57
+ resolve();
49
58
  };
50
- this.#admission = { kind: "waiting", reserve };
59
+ this.#idleWaiters.add(idle);
51
60
  signal.addEventListener("abort", abort, { once: true });
52
- if (this.count() === 0) {
53
- reserve();
54
- }
55
61
  });
56
62
  };
63
+ /**
64
+ * Close admission only after the Runtime has had no work for `quietMilliseconds`.
65
+ * The moment a reply finishes is when a user is most likely to continue, so idle
66
+ * alone is not an upgrade window. Checking and reserving happen synchronously, so
67
+ * no prompt can be admitted between them.
68
+ */
69
+ reserveIfQuiet = (quietMilliseconds) => {
70
+ if (this.#reserved) {
71
+ throw new Error("A daemon upgrade already owns admission");
72
+ }
73
+ if (this.count() > 0 || Date.now() - this.#changedAt < quietMilliseconds) {
74
+ return null;
75
+ }
76
+ this.#reserved = true;
77
+ return {
78
+ [Symbol.dispose]: () => {
79
+ this.#reserved = false;
80
+ },
81
+ };
82
+ };
57
83
  }
58
84
  //# sourceMappingURL=runtime-turn-activity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-turn-activity.js","sourceRoot":"","sources":["../../../src/session/turn/runtime-turn-activity.ts"],"names":[],"mappings":"AAOA,iGAAiG;AACjG,MAAM,OAAO,mBAAmB;IACnB,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IACtC,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAChD,UAAU,GAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAEvC,cAAc,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC;IAEpE,KAAK,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IAEtE,qBAAqB,GAAG,CAAC,MAAc,EAAE,MAAe,EAAQ,EAAE;QACvE,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,cAAc;QACV,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IAEQ,KAAK,GAAG,CAAC,IAAuB,EAAQ,EAAE;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEO,MAAM,GAAG,CAAC,IAAuB,EAAQ,EAAE;QAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,0DAA0D;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEO,eAAe,GAAG,CAAC,MAAmB,EAAuB,EAAE;QACpE,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,GAAS,EAAE;gBACrB,IAAI,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACnC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC3C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,GAAS,EAAE;gBACvB,IAAI,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBACvC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC3C,OAAO,CAAC;oBACJ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;wBACnB,IAAI,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oBACvC,CAAC;iBACJ,CAAC,CAAC;YACP,CAAC,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;YAC/C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;YACd,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;CACL"}
1
+ {"version":3,"file":"runtime-turn-activity.js","sourceRoot":"","sources":["../../../src/session/turn/runtime-turn-activity.ts"],"names":[],"mappings":"AAEA,iGAAiG;AACjG,MAAM,OAAO,mBAAmB;IACnB,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IACtC,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,YAAY,GAAG,IAAI,GAAG,EAAc,CAAC;IAC9C,6EAA6E;IAC7E,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,SAAS,GAAG,KAAK,CAAC;IAET,cAAc,GAAG,GAAY,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAEhD,KAAK,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IAEtE,QAAQ,GAAG,GAAmE,EAAE,CAAC,CAAC;QACvF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACvB,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI;KAClD,CAAC,CAAC;IAEM,qBAAqB,GAAG,CAAC,MAAc,EAAE,MAAe,EAAQ,EAAE;QACvE,yEAAyE;QACzE,IAAI,MAAM,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO;QACX,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC,CAAC;IAEO,KAAK,GAAG,CAAC,IAAuB,EAAQ,EAAE;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC,CAAC;IAEO,MAAM,GAAG,CAAC,IAAuB,EAAQ,EAAE;QAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,QAAQ;QACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtC,OAAO,EAAE,CAAC;YACd,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IAEQ,QAAQ,GAAG,CAAC,MAAmB,EAAiB,EAAE;QACvD,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,GAAS,EAAE;gBACrB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC,CAAC;YACF,MAAM,IAAI,GAAG,GAAS,EAAE;gBACpB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC3C,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF;;;;;OAKG;IACM,cAAc,GAAG,CAAC,iBAAyB,EAAqB,EAAE;QACvE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,OAAO;YACH,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;gBACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAC3B,CAAC;SACJ,CAAC;IACN,CAAC,CAAC;CACL"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moxt-ai/mobius",
3
- "version": "0.0.337",
3
+ "version": "0.0.339",
4
4
  "description": "Mobius CLI for pairing and running local AI agent services.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -47,7 +47,7 @@
47
47
  },
48
48
  "devDependencies": {
49
49
  "@anthropic-ai/sdk": "0.122.0",
50
- "@moxt-ai/mobius-sdk": "0.0.132",
50
+ "@moxt-ai/mobius-sdk": "0.0.134",
51
51
  "@moxt-ai/mobius-test": "0.0.1",
52
52
  "@types/node": "^24.13.5",
53
53
  "@types/semver": "^7.8.0",