@rkat/mobkit-sdk 0.4.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 (82) hide show
  1. package/dist/agent-builder.d.ts +44 -0
  2. package/dist/agent-builder.d.ts.map +1 -0
  3. package/dist/agent-builder.js +111 -0
  4. package/dist/agent-builder.js.map +1 -0
  5. package/dist/builder.d.ts +74 -0
  6. package/dist/builder.d.ts.map +1 -0
  7. package/dist/builder.js +145 -0
  8. package/dist/builder.js.map +1 -0
  9. package/dist/cjs/agent-builder.cjs +114 -0
  10. package/dist/cjs/builder.cjs +182 -0
  11. package/dist/cjs/client.cjs +182 -0
  12. package/dist/cjs/config/auth.cjs +44 -0
  13. package/dist/cjs/config/index.cjs +51 -0
  14. package/dist/cjs/config/memory.cjs +28 -0
  15. package/dist/cjs/config/session-store.cjs +41 -0
  16. package/dist/cjs/errors.cjs +82 -0
  17. package/dist/cjs/events.cjs +176 -0
  18. package/dist/cjs/helpers.cjs +72 -0
  19. package/dist/cjs/index.cjs +130 -0
  20. package/dist/cjs/models.cjs +124 -0
  21. package/dist/cjs/runtime.cjs +476 -0
  22. package/dist/cjs/sse.cjs +79 -0
  23. package/dist/cjs/transport.cjs +282 -0
  24. package/dist/cjs/types.cjs +376 -0
  25. package/dist/client.d.ts +79 -0
  26. package/dist/client.d.ts.map +1 -0
  27. package/dist/client.js +178 -0
  28. package/dist/client.js.map +1 -0
  29. package/dist/config/auth.d.ts +28 -0
  30. package/dist/config/auth.d.ts.map +1 -0
  31. package/dist/config/auth.js +39 -0
  32. package/dist/config/auth.js.map +1 -0
  33. package/dist/config/index.d.ts +16 -0
  34. package/dist/config/index.d.ts.map +1 -0
  35. package/dist/config/index.js +16 -0
  36. package/dist/config/index.js.map +1 -0
  37. package/dist/config/memory.d.ts +16 -0
  38. package/dist/config/memory.d.ts.map +1 -0
  39. package/dist/config/memory.js +25 -0
  40. package/dist/config/memory.js.map +1 -0
  41. package/dist/config/session-store.d.ts +23 -0
  42. package/dist/config/session-store.d.ts.map +1 -0
  43. package/dist/config/session-store.js +36 -0
  44. package/dist/config/session-store.js.map +1 -0
  45. package/dist/errors.d.ts +48 -0
  46. package/dist/errors.d.ts.map +1 -0
  47. package/dist/errors.js +74 -0
  48. package/dist/errors.js.map +1 -0
  49. package/dist/events.d.ts +126 -0
  50. package/dist/events.d.ts.map +1 -0
  51. package/dist/events.js +164 -0
  52. package/dist/events.js.map +1 -0
  53. package/dist/helpers.d.ts +58 -0
  54. package/dist/helpers.d.ts.map +1 -0
  55. package/dist/helpers.js +62 -0
  56. package/dist/helpers.js.map +1 -0
  57. package/dist/index.cjs +2 -0
  58. package/dist/index.d.ts +48 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +49 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/models.d.ts +61 -0
  63. package/dist/models.d.ts.map +1 -0
  64. package/dist/models.js +118 -0
  65. package/dist/models.js.map +1 -0
  66. package/dist/runtime.d.ts +131 -0
  67. package/dist/runtime.d.ts.map +1 -0
  68. package/dist/runtime.js +470 -0
  69. package/dist/runtime.js.map +1 -0
  70. package/dist/sse.d.ts +21 -0
  71. package/dist/sse.d.ts.map +1 -0
  72. package/dist/sse.js +76 -0
  73. package/dist/sse.js.map +1 -0
  74. package/dist/transport.d.ts +84 -0
  75. package/dist/transport.d.ts.map +1 -0
  76. package/dist/transport.js +275 -0
  77. package/dist/transport.js.map +1 -0
  78. package/dist/types.d.ts +209 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +348 -0
  81. package/dist/types.js.map +1 -0
  82. package/package.json +34 -0
@@ -0,0 +1,44 @@
1
+ /**
2
+ * SessionAgentBuilder protocol and CallbackDispatcher.
3
+ *
4
+ * The builder protocol uses imperative mutation: buildAgent receives a
5
+ * mutable SessionBuildOptions and modifies it in place.
6
+ */
7
+ import { SessionBuildOptions } from "./models.js";
8
+ import { type ErrorEvent } from "./types.js";
9
+ /**
10
+ * Protocol for building agents during session creation.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const builder: SessionAgentBuilder = {
15
+ * async buildAgent(opts) {
16
+ * opts.profileName = "assistant";
17
+ * opts.registerTool("search", searchHandler);
18
+ * },
19
+ * };
20
+ * ```
21
+ */
22
+ export interface SessionAgentBuilder {
23
+ buildAgent(options: SessionBuildOptions): Promise<void>;
24
+ }
25
+ export type ErrorCallback = (event: ErrorEvent) => void | Promise<void>;
26
+ /**
27
+ * Routes incoming JSON-RPC callbacks from the Rust runtime to the
28
+ * registered SessionAgentBuilder and tool handlers.
29
+ *
30
+ * Tool handlers are scoped by a build-level scope_id to prevent
31
+ * cross-session handler bleed in concurrent sessions.
32
+ */
33
+ export declare class CallbackDispatcher {
34
+ private _builder;
35
+ private _errorCallback;
36
+ private readonly _toolHandlers;
37
+ private readonly _scopeTools;
38
+ registerBuilder(builder: SessionAgentBuilder): void;
39
+ registerErrorCallback(callback: ErrorCallback): void;
40
+ /** Remove all tool handlers for a scope. Call when a session ends. */
41
+ releaseScope(scopeId: string): void;
42
+ handleCallback(method: string, params: Record<string, unknown>): Promise<unknown>;
43
+ }
44
+ //# sourceMappingURL=agent-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-builder.d.ts","sourceRoot":"","sources":["../src/agent-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAoB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAI9D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD;AAID,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAIxE;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAE3D,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAInD,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAIpD,sEAAsE;IACtE,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU7B,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;CAwFpB"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * SessionAgentBuilder protocol and CallbackDispatcher.
3
+ *
4
+ * The builder protocol uses imperative mutation: buildAgent receives a
5
+ * mutable SessionBuildOptions and modifies it in place.
6
+ */
7
+ import { SessionBuildOptions } from "./models.js";
8
+ import { parseErrorEvent } from "./types.js";
9
+ // -- CallbackDispatcher ---------------------------------------------------
10
+ /**
11
+ * Routes incoming JSON-RPC callbacks from the Rust runtime to the
12
+ * registered SessionAgentBuilder and tool handlers.
13
+ *
14
+ * Tool handlers are scoped by a build-level scope_id to prevent
15
+ * cross-session handler bleed in concurrent sessions.
16
+ */
17
+ export class CallbackDispatcher {
18
+ _builder = null;
19
+ _errorCallback = null;
20
+ _toolHandlers = new Map();
21
+ _scopeTools = new Map();
22
+ registerBuilder(builder) {
23
+ this._builder = builder;
24
+ }
25
+ registerErrorCallback(callback) {
26
+ this._errorCallback = callback;
27
+ }
28
+ /** Remove all tool handlers for a scope. Call when a session ends. */
29
+ releaseScope(scopeId) {
30
+ const tools = this._scopeTools.get(scopeId);
31
+ if (tools) {
32
+ for (const toolName of tools) {
33
+ this._toolHandlers.delete(`${scopeId}:${toolName}`);
34
+ }
35
+ this._scopeTools.delete(scopeId);
36
+ }
37
+ }
38
+ async handleCallback(method, params) {
39
+ if (method === "mobkit/on_error") {
40
+ if (this._errorCallback !== null) {
41
+ const event = parseErrorEvent(params);
42
+ try {
43
+ await this._errorCallback(event);
44
+ }
45
+ catch {
46
+ // Fire-and-forget — swallow error callback failures
47
+ }
48
+ }
49
+ return null;
50
+ }
51
+ if (method === "callback/build_agent") {
52
+ if (this._builder === null) {
53
+ throw new Error("no SessionAgentBuilder registered");
54
+ }
55
+ const rawOptions = {
56
+ ...(typeof params.options === "object" && params.options !== null
57
+ ? params.options
58
+ : {}),
59
+ };
60
+ const scopeId = String(rawOptions.scope_id ?? "");
61
+ if (!scopeId) {
62
+ throw new Error("callback/build_agent requires scope_id in options");
63
+ }
64
+ delete rawOptions.scope_id;
65
+ const opts = new SessionBuildOptions();
66
+ if (rawOptions.app_context !== undefined) {
67
+ opts.appContext = rawOptions.app_context;
68
+ }
69
+ if (Array.isArray(rawOptions.additional_instructions)) {
70
+ opts.additionalInstructions = rawOptions.additional_instructions.filter((v) => typeof v === "string");
71
+ }
72
+ if (typeof rawOptions.session_id === "string") {
73
+ opts.sessionId = rawOptions.session_id;
74
+ }
75
+ if (typeof rawOptions.labels === "object" &&
76
+ rawOptions.labels !== null) {
77
+ opts.labels = rawOptions.labels;
78
+ }
79
+ if (typeof rawOptions.profile_name === "string") {
80
+ opts.profileName = rawOptions.profile_name;
81
+ }
82
+ await this._builder.buildAgent(opts);
83
+ // Capture tool handlers scoped to this build
84
+ const toolNames = [];
85
+ for (const [name, handler] of opts.toolHandlers) {
86
+ this._toolHandlers.set(`${scopeId}:${name}`, handler);
87
+ toolNames.push(name);
88
+ }
89
+ this._scopeTools.set(scopeId, toolNames);
90
+ return opts.toDict();
91
+ }
92
+ if (method === "callback/call_tool") {
93
+ const scopeId = String(params.scope_id ?? "");
94
+ if (!scopeId) {
95
+ throw new Error("callback/call_tool requires scope_id");
96
+ }
97
+ const toolName = String(params.tool ?? "");
98
+ const args = (typeof params.arguments === "object" && params.arguments !== null
99
+ ? params.arguments
100
+ : {});
101
+ const handler = this._toolHandlers.get(`${scopeId}:${toolName}`);
102
+ if (!handler) {
103
+ throw new Error(`no handler registered for tool: ${toolName} (scope: ${scopeId})`);
104
+ }
105
+ const result = await handler(args);
106
+ return { content: result };
107
+ }
108
+ throw new Error(`unknown callback method: ${method}`);
109
+ }
110
+ }
111
+ //# sourceMappingURL=agent-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-builder.js","sourceRoot":"","sources":["../src/agent-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAoB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AAyB9D,4EAA4E;AAE5E;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACrB,QAAQ,GAA+B,IAAI,CAAC;IAC5C,cAAc,GAAyB,IAAI,CAAC;IACnC,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE3D,eAAe,CAAC,OAA4B;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,qBAAqB,CAAC,QAAuB;QAC3C,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;IACjC,CAAC;IAED,sEAAsE;IACtE,YAAY,CAAC,OAAe;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,MAAc,EACd,MAA+B;QAE/B,IAAI,MAAM,KAAK,iBAAiB,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;gBAAC,MAAM,CAAC;oBACP,oDAAoD;gBACtD,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,KAAK,sBAAsB,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,UAAU,GAAG;gBACjB,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;oBAC/D,CAAC,CAAE,MAAM,CAAC,OAAmC;oBAC7C,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,UAAU,CAAC,QAAQ,CAAC;YAE3B,MAAM,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC;YAC3C,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,uBAAuB,CAAC,MAAM,CACrE,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC9C,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC;YACzC,CAAC;YACD,IACE,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ;gBACrC,UAAU,CAAC,MAAM,KAAK,IAAI,EAC1B,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAgC,CAAC;YAC5D,CAAC;YACD,IAAI,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAChD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC;YAC7C,CAAC;YAED,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAErC,6CAA6C;YAC7C,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBACtD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAEzC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,MAAM,KAAK,oBAAoB,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,CACX,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI;gBAC/D,CAAC,CAAC,MAAM,CAAC,SAAS;gBAClB,CAAC,CAAC,EAAE,CACoB,CAAC;YAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,YAAY,OAAO,GAAG,CAClE,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;CACF"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * MobKit builder chain — chainable configuration for the runtime.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import { MobKit } from "@rkat/mobkit-sdk";
7
+ *
8
+ * const rt = await MobKit.builder()
9
+ * .mob("config/mob.toml")
10
+ * .sessionService(builder, store)
11
+ * .discovery(discoverFn)
12
+ * .build();
13
+ *
14
+ * const handle = rt.mobHandle();
15
+ * const status = await handle.status();
16
+ * ```
17
+ */
18
+ import type { SessionAgentBuilder, ErrorCallback } from "./agent-builder.js";
19
+ import type { MobKitRuntime } from "./runtime.js";
20
+ export interface MobKitBuilderConfig {
21
+ mobConfigPath: string | null;
22
+ sessionBuilder: SessionAgentBuilder | null;
23
+ sessionStore: unknown;
24
+ discoveryCallback: unknown;
25
+ preSpawnCallback: unknown;
26
+ errorCallback: ErrorCallback | null;
27
+ eventLog: Record<string, unknown> | null;
28
+ gatingConfigPath: string | null;
29
+ routingConfigPath: string | null;
30
+ schedulingFiles: string[];
31
+ memoryConfig: unknown;
32
+ authConfig: unknown;
33
+ gatewayBin: string | null;
34
+ modules: unknown[];
35
+ }
36
+ /**
37
+ * Chainable builder for MobKit runtime configuration.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const rt = await MobKit.builder()
42
+ * .mob("config/mob.toml")
43
+ * .gateway("./target/release/phase0b_rpc_gateway")
44
+ * .build();
45
+ * ```
46
+ */
47
+ export declare class MobKitBuilder {
48
+ /** @internal */
49
+ readonly _config: MobKitBuilderConfig;
50
+ mob(configPath: string): this;
51
+ sessionService(builder: SessionAgentBuilder, store?: unknown): this;
52
+ discovery(callback: unknown): this;
53
+ preSpawn(callback: unknown): this;
54
+ eventLog(options: {
55
+ storage: unknown;
56
+ [key: string]: unknown;
57
+ }): this;
58
+ onError(callback: ErrorCallback): this;
59
+ gating(configPath: string): this;
60
+ routing(configPath: string): this;
61
+ scheduling(...scheduleFiles: string[]): this;
62
+ memory(config?: unknown, options?: {
63
+ stores?: string[];
64
+ }): this;
65
+ auth(config: unknown): this;
66
+ gateway(binPath: string): this;
67
+ modules(moduleSpecs: unknown[]): this;
68
+ build(): Promise<MobKitRuntime>;
69
+ private _applyConventionDefaults;
70
+ }
71
+ export declare class MobKit {
72
+ static builder(): MobKitBuilder;
73
+ }
74
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB;AAuBD;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAmB;IAExD,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAK7B,cAAc,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAMnE,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKlC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAKjC,QAAQ,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI;IAKpE,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAKtC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKhC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKjC,UAAU,CAAC,GAAG,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAK5C,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAM/D,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAK3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI;IAK/B,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAOrC,OAAO,CAAC,wBAAwB;CA0BjC;AAID,qBAAa,MAAM;IACjB,MAAM,CAAC,OAAO,IAAI,aAAa;CAGhC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * MobKit builder chain — chainable configuration for the runtime.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import { MobKit } from "@rkat/mobkit-sdk";
7
+ *
8
+ * const rt = await MobKit.builder()
9
+ * .mob("config/mob.toml")
10
+ * .sessionService(builder, store)
11
+ * .discovery(discoverFn)
12
+ * .build();
13
+ *
14
+ * const handle = rt.mobHandle();
15
+ * const status = await handle.status();
16
+ * ```
17
+ */
18
+ import { existsSync } from "node:fs";
19
+ function defaultConfig() {
20
+ return {
21
+ mobConfigPath: null,
22
+ sessionBuilder: null,
23
+ sessionStore: null,
24
+ discoveryCallback: null,
25
+ preSpawnCallback: null,
26
+ errorCallback: null,
27
+ eventLog: null,
28
+ gatingConfigPath: null,
29
+ routingConfigPath: null,
30
+ schedulingFiles: [],
31
+ memoryConfig: null,
32
+ authConfig: null,
33
+ gatewayBin: null,
34
+ modules: [],
35
+ };
36
+ }
37
+ // -- MobKitBuilder --------------------------------------------------------
38
+ /**
39
+ * Chainable builder for MobKit runtime configuration.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * const rt = await MobKit.builder()
44
+ * .mob("config/mob.toml")
45
+ * .gateway("./target/release/phase0b_rpc_gateway")
46
+ * .build();
47
+ * ```
48
+ */
49
+ export class MobKitBuilder {
50
+ /** @internal */
51
+ _config = defaultConfig();
52
+ mob(configPath) {
53
+ this._config.mobConfigPath = configPath;
54
+ return this;
55
+ }
56
+ sessionService(builder, store) {
57
+ this._config.sessionBuilder = builder;
58
+ this._config.sessionStore = store ?? null;
59
+ return this;
60
+ }
61
+ discovery(callback) {
62
+ this._config.discoveryCallback = callback;
63
+ return this;
64
+ }
65
+ preSpawn(callback) {
66
+ this._config.preSpawnCallback = callback;
67
+ return this;
68
+ }
69
+ eventLog(options) {
70
+ this._config.eventLog = { ...options };
71
+ return this;
72
+ }
73
+ onError(callback) {
74
+ this._config.errorCallback = callback;
75
+ return this;
76
+ }
77
+ gating(configPath) {
78
+ this._config.gatingConfigPath = configPath;
79
+ return this;
80
+ }
81
+ routing(configPath) {
82
+ this._config.routingConfigPath = configPath;
83
+ return this;
84
+ }
85
+ scheduling(...scheduleFiles) {
86
+ this._config.schedulingFiles = scheduleFiles;
87
+ return this;
88
+ }
89
+ memory(config, options) {
90
+ this._config.memoryConfig =
91
+ config ?? { stores: options?.stores ?? [] };
92
+ return this;
93
+ }
94
+ auth(config) {
95
+ this._config.authConfig = config;
96
+ return this;
97
+ }
98
+ gateway(binPath) {
99
+ this._config.gatewayBin = binPath;
100
+ return this;
101
+ }
102
+ modules(moduleSpecs) {
103
+ this._config.modules = moduleSpecs;
104
+ return this;
105
+ }
106
+ async build() {
107
+ this._applyConventionDefaults();
108
+ // Dynamic import to break circular dep (runtime imports from builder config type)
109
+ const { MobKitRuntime } = await import("./runtime.js");
110
+ return MobKitRuntime._create(this._config);
111
+ }
112
+ _applyConventionDefaults() {
113
+ if (this._config.gatingConfigPath === null) {
114
+ const candidate = "config/gating.toml";
115
+ if (existsSync(candidate)) {
116
+ this._config.gatingConfigPath = candidate;
117
+ }
118
+ }
119
+ if (this._config.routingConfigPath === null) {
120
+ const candidate = "deployment/routing.toml";
121
+ if (existsSync(candidate)) {
122
+ this._config.routingConfigPath = candidate;
123
+ }
124
+ }
125
+ if (this._config.schedulingFiles.length === 0) {
126
+ const files = [];
127
+ const defaultFile = "config/defaults/schedules.toml";
128
+ if (existsSync(defaultFile))
129
+ files.push(defaultFile);
130
+ const overrideFile = "deployment/schedules.toml";
131
+ if (existsSync(overrideFile))
132
+ files.push(overrideFile);
133
+ if (files.length > 0) {
134
+ this._config.schedulingFiles = files;
135
+ }
136
+ }
137
+ }
138
+ }
139
+ // -- MobKit static factory ------------------------------------------------
140
+ export class MobKit {
141
+ static builder() {
142
+ return new MobKitBuilder();
143
+ }
144
+ }
145
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ /**
3
+ * SessionAgentBuilder protocol and CallbackDispatcher.
4
+ *
5
+ * The builder protocol uses imperative mutation: buildAgent receives a
6
+ * mutable SessionBuildOptions and modifies it in place.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CallbackDispatcher = void 0;
10
+ const models_js_1 = require("./models.cjs");
11
+ const types_js_1 = require("./types.cjs");
12
+ // -- CallbackDispatcher ---------------------------------------------------
13
+ /**
14
+ * Routes incoming JSON-RPC callbacks from the Rust runtime to the
15
+ * registered SessionAgentBuilder and tool handlers.
16
+ *
17
+ * Tool handlers are scoped by a build-level scope_id to prevent
18
+ * cross-session handler bleed in concurrent sessions.
19
+ */
20
+ class CallbackDispatcher {
21
+ _builder = null;
22
+ _errorCallback = null;
23
+ _toolHandlers = new Map();
24
+ _scopeTools = new Map();
25
+ registerBuilder(builder) {
26
+ this._builder = builder;
27
+ }
28
+ registerErrorCallback(callback) {
29
+ this._errorCallback = callback;
30
+ }
31
+ /** Remove all tool handlers for a scope. Call when a session ends. */
32
+ releaseScope(scopeId) {
33
+ const tools = this._scopeTools.get(scopeId);
34
+ if (tools) {
35
+ for (const toolName of tools) {
36
+ this._toolHandlers.delete(`${scopeId}:${toolName}`);
37
+ }
38
+ this._scopeTools.delete(scopeId);
39
+ }
40
+ }
41
+ async handleCallback(method, params) {
42
+ if (method === "mobkit/on_error") {
43
+ if (this._errorCallback !== null) {
44
+ const event = (0, types_js_1.parseErrorEvent)(params);
45
+ try {
46
+ await this._errorCallback(event);
47
+ }
48
+ catch {
49
+ // Fire-and-forget — swallow error callback failures
50
+ }
51
+ }
52
+ return null;
53
+ }
54
+ if (method === "callback/build_agent") {
55
+ if (this._builder === null) {
56
+ throw new Error("no SessionAgentBuilder registered");
57
+ }
58
+ const rawOptions = {
59
+ ...(typeof params.options === "object" && params.options !== null
60
+ ? params.options
61
+ : {}),
62
+ };
63
+ const scopeId = String(rawOptions.scope_id ?? "");
64
+ if (!scopeId) {
65
+ throw new Error("callback/build_agent requires scope_id in options");
66
+ }
67
+ delete rawOptions.scope_id;
68
+ const opts = new models_js_1.SessionBuildOptions();
69
+ if (rawOptions.app_context !== undefined) {
70
+ opts.appContext = rawOptions.app_context;
71
+ }
72
+ if (Array.isArray(rawOptions.additional_instructions)) {
73
+ opts.additionalInstructions = rawOptions.additional_instructions.filter((v) => typeof v === "string");
74
+ }
75
+ if (typeof rawOptions.session_id === "string") {
76
+ opts.sessionId = rawOptions.session_id;
77
+ }
78
+ if (typeof rawOptions.labels === "object" &&
79
+ rawOptions.labels !== null) {
80
+ opts.labels = rawOptions.labels;
81
+ }
82
+ if (typeof rawOptions.profile_name === "string") {
83
+ opts.profileName = rawOptions.profile_name;
84
+ }
85
+ await this._builder.buildAgent(opts);
86
+ // Capture tool handlers scoped to this build
87
+ const toolNames = [];
88
+ for (const [name, handler] of opts.toolHandlers) {
89
+ this._toolHandlers.set(`${scopeId}:${name}`, handler);
90
+ toolNames.push(name);
91
+ }
92
+ this._scopeTools.set(scopeId, toolNames);
93
+ return opts.toDict();
94
+ }
95
+ if (method === "callback/call_tool") {
96
+ const scopeId = String(params.scope_id ?? "");
97
+ if (!scopeId) {
98
+ throw new Error("callback/call_tool requires scope_id");
99
+ }
100
+ const toolName = String(params.tool ?? "");
101
+ const args = (typeof params.arguments === "object" && params.arguments !== null
102
+ ? params.arguments
103
+ : {});
104
+ const handler = this._toolHandlers.get(`${scopeId}:${toolName}`);
105
+ if (!handler) {
106
+ throw new Error(`no handler registered for tool: ${toolName} (scope: ${scopeId})`);
107
+ }
108
+ const result = await handler(args);
109
+ return { content: result };
110
+ }
111
+ throw new Error(`unknown callback method: ${method}`);
112
+ }
113
+ }
114
+ exports.CallbackDispatcher = CallbackDispatcher;