@rkat/mobkit-sdk 0.6.14 → 0.6.16

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 (50) hide show
  1. package/dist/agent-builder.d.ts.map +1 -1
  2. package/dist/agent-builder.js +20 -3
  3. package/dist/agent-builder.js.map +1 -1
  4. package/dist/builder.d.ts +14 -0
  5. package/dist/builder.d.ts.map +1 -1
  6. package/dist/builder.js +54 -2
  7. package/dist/builder.js.map +1 -1
  8. package/dist/cjs/agent-builder.cjs +19 -2
  9. package/dist/cjs/builder.cjs +54 -2
  10. package/dist/cjs/config/auth.cjs +10 -2
  11. package/dist/cjs/config/memory.cjs +5 -7
  12. package/dist/cjs/config/session-store.cjs +10 -2
  13. package/dist/cjs/errors.cjs +16 -5
  14. package/dist/cjs/helpers.cjs +15 -2
  15. package/dist/cjs/index.cjs +13 -3
  16. package/dist/cjs/runtime.cjs +227 -2
  17. package/dist/cjs/types.cjs +187 -9
  18. package/dist/config/auth.d.ts +2 -0
  19. package/dist/config/auth.d.ts.map +1 -1
  20. package/dist/config/auth.js +10 -2
  21. package/dist/config/auth.js.map +1 -1
  22. package/dist/config/memory.d.ts +1 -0
  23. package/dist/config/memory.d.ts.map +1 -1
  24. package/dist/config/memory.js +5 -7
  25. package/dist/config/memory.js.map +1 -1
  26. package/dist/config/session-store.d.ts +2 -0
  27. package/dist/config/session-store.d.ts.map +1 -1
  28. package/dist/config/session-store.js +10 -2
  29. package/dist/config/session-store.js.map +1 -1
  30. package/dist/errors.d.ts +7 -2
  31. package/dist/errors.d.ts.map +1 -1
  32. package/dist/errors.js +14 -4
  33. package/dist/errors.js.map +1 -1
  34. package/dist/helpers.d.ts +5 -0
  35. package/dist/helpers.d.ts.map +1 -1
  36. package/dist/helpers.js +15 -2
  37. package/dist/helpers.js.map +1 -1
  38. package/dist/index.d.ts +4 -4
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +3 -3
  41. package/dist/index.js.map +1 -1
  42. package/dist/runtime.d.ts +37 -1
  43. package/dist/runtime.d.ts.map +1 -1
  44. package/dist/runtime.js +229 -4
  45. package/dist/runtime.js.map +1 -1
  46. package/dist/types.d.ts +69 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/dist/types.js +176 -9
  49. package/dist/types.js.map +1 -1
  50. package/package.json +1 -1
@@ -25,9 +25,9 @@
25
25
  * ```
26
26
  */
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.parseMobStructuralEvent = exports.parsePersistedEvent = exports.parseReconcileEdgesReport = exports.parseRediscoverReport = exports.parseGatingPendingEntry = exports.parseGatingAuditEntry = exports.parseGatingDecisionResult = exports.parseGatingEvaluateResult = exports.parseRuntimeRouteResult = exports.parseMemberSnapshot = exports.parseCallToolResult = exports.parseMemoryIndexResult = exports.parseMemoryStoreInfo = exports.parseMemoryQueryResult = exports.parseDeliveryHistoryResult = exports.parseDeliveryResult = exports.parseRoutingResolution = exports.parseSendMessageResult = exports.parseSubscribeResult = exports.parseEventEnvelope = exports.parseKeepAliveConfig = exports.parseSpawnResult = exports.parseReconcileResult = exports.parseCapabilitiesResult = exports.parseStatusResult = exports.ErrorCategory = exports.MEMBER_STATE_RETIRING = exports.MEMBER_STATE_ACTIVE = exports.isMobEventsStaleError = exports.isRpcError = exports.MobkitRpcError = exports.NotConnectedError = exports.ContractMismatchError = exports.CapabilityUnavailableError = exports.MOB_EVENTS_STALE_CURSOR_CODE = exports.MobEventsStaleError = exports.RpcError = exports.TransportError = exports.MobKitError = exports.CallbackDispatcher = exports.sessionQueryToDict = exports.preSpawnDataToDict = exports.discoverySpecToDict = exports.SessionBuildOptions = exports.SseBridge = exports.ToolCaller = exports.MobHandle = exports.MobKitRuntime = exports.MobKitBuilder = exports.MobKit = void 0;
29
- exports.buildConsoleRoute = exports.defineModule = exports.defineModuleTool = exports.decorateModuleTool = exports.decorateModuleSpec = exports.defineModuleSpec = exports.sessionStore = exports.memory = exports.auth = exports.EventStream = exports.isToolCallRequested = exports.isTurnCompleted = exports.isRunFailed = exports.isRunCompleted = exports.isTextComplete = exports.isTextDelta = exports.parseAgentEventFromSse = exports.parseMobEventFromSse = exports.parseAgentEvent = exports.parseBlobUploadResult = exports.parseLeaseRenewResult = exports.parseLeaseAcquireResult = exports.leaseGrantToDict = exports.parseLeaseGrant = exports.sessionSnapshotToDict = exports.parseSessionSnapshot = exports.parseContinuityResolveState = exports.parseContinuityFailure = exports.continuityRecordToDict = exports.parseContinuityRecord = exports.parseIdentityStatus = exports.agentBuildDraftToDict = exports.parseAgentBuildDraft = exports.parseAgentBuildContext = exports.externalToolDefToDict = exports.parseExternalToolDef = exports.managedPeerEdgeToDict = exports.parseManagedPeerEdge = exports.dispatchInputToDict = exports.parseDispatchInput = exports.durableAgentSpecToDict = exports.parseDurableAgentSpec = exports.eventQueryToDict = exports.parseErrorEvent = exports.parseLoopIterationRecord = exports.parseLoopRecord = exports.parseFrameRecord = exports.parseFailureRecord = exports.parseStepRecord = exports.parseMobRun = void 0;
30
- exports.MobkitAsyncClient = exports.MobkitTypedClient = exports.encodeSseEvent = exports.parseSseStream = exports.createJsonRpcHttpTransport = exports.createGatewayAsyncTransport = exports.createGatewaySyncTransport = exports.buildJsonRpcRequest = exports.PersistentTransport = exports.buildConsoleRoutes = exports.buildConsoleExperienceRoute = exports.buildConsoleModulesRoute = void 0;
28
+ exports.parseRediscoverReport = exports.parseGatingPendingEntry = exports.parseGatingAuditEntry = exports.parseGatingDecisionResult = exports.parseGatingEvaluateResult = exports.parseRuntimeRouteResult = exports.parseMemberSnapshot = exports.parseCallToolResult = exports.parseMemoryIndexResult = exports.parseMemoryStoreInfo = exports.parseMemoryQueryResult = exports.parseDeliveryHistoryResult = exports.parseDeliveryResult = exports.parseRoutingResolution = exports.parseSendMessageResult = exports.parseSubscribeResult = exports.parseEventEnvelope = exports.parseKeepAliveConfig = exports.parseSpawnResult = exports.parseReconcileResult = exports.parseCapabilitiesResult = exports.parseStatusResult = exports.ErrorCategory = exports.MEMBER_STATE_RETIRING = exports.MEMBER_STATE_ACTIVE = exports.isMobEventsStaleError = exports.isRpcError = exports.MobkitRpcError = exports.NotConnectedError = exports.ContractMismatchError = exports.MemoryBackendUnavailableError = exports.CapabilityUnavailableError = exports.MEMORY_BACKEND_UNAVAILABLE_CODE = exports.CAPABILITY_UNAVAILABLE_CODE = exports.MOB_EVENTS_STALE_CURSOR_CODE = exports.MobEventsStaleError = exports.RpcError = exports.TransportError = exports.MobKitError = exports.CallbackDispatcher = exports.sessionQueryToDict = exports.preSpawnDataToDict = exports.discoverySpecToDict = exports.SessionBuildOptions = exports.SseBridge = exports.ToolCaller = exports.MobHandle = exports.MobKitRuntime = exports.MobKitBuilder = exports.MobKit = void 0;
29
+ exports.isToolCallRequested = exports.isTurnCompleted = exports.isRunFailed = exports.isRunCompleted = exports.isTextComplete = exports.isTextDelta = exports.parseAgentEventFromSse = exports.parseMobEventFromSse = exports.parseAgentEvent = exports.parseBlobUploadResult = exports.leaseRenewResultToDict = exports.parseLeaseRenewResult = exports.leaseAcquireResultToDict = exports.parseLeaseAcquireResult = exports.leaseGrantToDict = exports.parseLeaseGrant = exports.sessionSnapshotToDict = exports.parseSessionSnapshot = exports.parseContinuityResolveState = exports.parseContinuityFailure = exports.continuityRecordToDict = exports.parseContinuityRecord = exports.parseIdentityStatus = exports.agentBuildDraftToDict = exports.parseAgentBuildDraft = exports.parseAgentBuildContext = exports.externalToolDefToDict = exports.parseExternalToolDef = exports.managedPeerEdgeToDict = exports.parseManagedPeerEdge = exports.dispatchInputToDict = exports.parseDispatchInput = exports.durableAgentSpecToDict = exports.parseDurableAgentSpec = exports.eventQueryToDict = exports.parseErrorEvent = exports.parseLoopIterationRecord = exports.parseLoopRecord = exports.parseFrameRecord = exports.parseFailureRecord = exports.parseStepRecord = exports.parseModelsCatalogResult = exports.parseCrossMobContactEntry = exports.parseMobRunSnapshot = exports.parseHelperResult = exports.parseRichMemberSnapshot = exports.parseMobRun = exports.parseMobStructuralEvent = exports.parsePersistedEvent = exports.parseReconcileEdgesReport = void 0;
30
+ exports.MobkitAsyncClient = exports.MobkitTypedClient = exports.encodeSseEvent = exports.parseSseStream = exports.createJsonRpcHttpTransport = exports.createGatewayAsyncTransport = exports.createGatewaySyncTransport = exports.buildJsonRpcRequest = exports.PersistentTransport = exports.buildConsoleRoutes = exports.buildConsoleExperienceRoute = exports.buildConsoleModulesRoute = exports.buildConsoleRoute = exports.defineModule = exports.defineModuleTool = exports.decorateModuleTool = exports.decorateModuleSpec = exports.defineModuleSpec = exports.sessionStore = exports.memory = exports.auth = exports.EventStream = void 0;
31
31
  // -- Builder + Runtime ----------------------------------------------------
32
32
  var builder_js_1 = require("./builder.cjs");
33
33
  Object.defineProperty(exports, "MobKit", { enumerable: true, get: function () { return builder_js_1.MobKit; } });
@@ -53,7 +53,10 @@ Object.defineProperty(exports, "TransportError", { enumerable: true, get: functi
53
53
  Object.defineProperty(exports, "RpcError", { enumerable: true, get: function () { return errors_js_1.RpcError; } });
54
54
  Object.defineProperty(exports, "MobEventsStaleError", { enumerable: true, get: function () { return errors_js_1.MobEventsStaleError; } });
55
55
  Object.defineProperty(exports, "MOB_EVENTS_STALE_CURSOR_CODE", { enumerable: true, get: function () { return errors_js_1.MOB_EVENTS_STALE_CURSOR_CODE; } });
56
+ Object.defineProperty(exports, "CAPABILITY_UNAVAILABLE_CODE", { enumerable: true, get: function () { return errors_js_1.CAPABILITY_UNAVAILABLE_CODE; } });
57
+ Object.defineProperty(exports, "MEMORY_BACKEND_UNAVAILABLE_CODE", { enumerable: true, get: function () { return errors_js_1.MEMORY_BACKEND_UNAVAILABLE_CODE; } });
56
58
  Object.defineProperty(exports, "CapabilityUnavailableError", { enumerable: true, get: function () { return errors_js_1.CapabilityUnavailableError; } });
59
+ Object.defineProperty(exports, "MemoryBackendUnavailableError", { enumerable: true, get: function () { return errors_js_1.MemoryBackendUnavailableError; } });
57
60
  Object.defineProperty(exports, "ContractMismatchError", { enumerable: true, get: function () { return errors_js_1.ContractMismatchError; } });
58
61
  Object.defineProperty(exports, "NotConnectedError", { enumerable: true, get: function () { return errors_js_1.NotConnectedError; } });
59
62
  Object.defineProperty(exports, "MobkitRpcError", { enumerable: true, get: function () { return errors_js_1.MobkitRpcError; } });
@@ -90,6 +93,11 @@ Object.defineProperty(exports, "parseReconcileEdgesReport", { enumerable: true,
90
93
  Object.defineProperty(exports, "parsePersistedEvent", { enumerable: true, get: function () { return types_js_1.parsePersistedEvent; } });
91
94
  Object.defineProperty(exports, "parseMobStructuralEvent", { enumerable: true, get: function () { return types_js_1.parseMobStructuralEvent; } });
92
95
  Object.defineProperty(exports, "parseMobRun", { enumerable: true, get: function () { return types_js_1.parseMobRun; } });
96
+ Object.defineProperty(exports, "parseRichMemberSnapshot", { enumerable: true, get: function () { return types_js_1.parseRichMemberSnapshot; } });
97
+ Object.defineProperty(exports, "parseHelperResult", { enumerable: true, get: function () { return types_js_1.parseHelperResult; } });
98
+ Object.defineProperty(exports, "parseMobRunSnapshot", { enumerable: true, get: function () { return types_js_1.parseMobRunSnapshot; } });
99
+ Object.defineProperty(exports, "parseCrossMobContactEntry", { enumerable: true, get: function () { return types_js_1.parseCrossMobContactEntry; } });
100
+ Object.defineProperty(exports, "parseModelsCatalogResult", { enumerable: true, get: function () { return types_js_1.parseModelsCatalogResult; } });
93
101
  Object.defineProperty(exports, "parseStepRecord", { enumerable: true, get: function () { return types_js_1.parseStepRecord; } });
94
102
  Object.defineProperty(exports, "parseFailureRecord", { enumerable: true, get: function () { return types_js_1.parseFailureRecord; } });
95
103
  Object.defineProperty(exports, "parseFrameRecord", { enumerable: true, get: function () { return types_js_1.parseFrameRecord; } });
@@ -119,7 +127,9 @@ Object.defineProperty(exports, "sessionSnapshotToDict", { enumerable: true, get:
119
127
  Object.defineProperty(exports, "parseLeaseGrant", { enumerable: true, get: function () { return types_js_1.parseLeaseGrant; } });
120
128
  Object.defineProperty(exports, "leaseGrantToDict", { enumerable: true, get: function () { return types_js_1.leaseGrantToDict; } });
121
129
  Object.defineProperty(exports, "parseLeaseAcquireResult", { enumerable: true, get: function () { return types_js_1.parseLeaseAcquireResult; } });
130
+ Object.defineProperty(exports, "leaseAcquireResultToDict", { enumerable: true, get: function () { return types_js_1.leaseAcquireResultToDict; } });
122
131
  Object.defineProperty(exports, "parseLeaseRenewResult", { enumerable: true, get: function () { return types_js_1.parseLeaseRenewResult; } });
132
+ Object.defineProperty(exports, "leaseRenewResultToDict", { enumerable: true, get: function () { return types_js_1.leaseRenewResultToDict; } });
123
133
  Object.defineProperty(exports, "parseBlobUploadResult", { enumerable: true, get: function () { return types_js_1.parseBlobUploadResult; } });
124
134
  // -- Typed events ---------------------------------------------------------
125
135
  var events_js_1 = require("./events.cjs");
@@ -206,6 +206,20 @@ class MobKitRuntime {
206
206
  if (this._config.eventLog) {
207
207
  runtimeOptions.event_log = serializeConfig(this._config.eventLog);
208
208
  }
209
+ if (this._config.consoleConfigPath) {
210
+ runtimeOptions.console_config_path = this._config.consoleConfigPath;
211
+ }
212
+ if (this._config.consoleRequireAppAuth !== null) {
213
+ runtimeOptions.console_require_app_auth =
214
+ this._config.consoleRequireAppAuth;
215
+ }
216
+ if (this._config.demoLlm) {
217
+ runtimeOptions.demo_llm = true;
218
+ }
219
+ if (this._config.implicitDelegateIdleRetireSecs !== undefined) {
220
+ runtimeOptions.implicit_delegate_idle_retire_secs =
221
+ this._config.implicitDelegateIdleRetireSecs;
222
+ }
209
223
  params.runtime_options = runtimeOptions;
210
224
  if (this._config.persistentState) {
211
225
  params.persistent_state = this._config.persistentState;
@@ -213,6 +227,15 @@ class MobKitRuntime {
213
227
  if (this._config.rosterProvider !== null) {
214
228
  params.has_roster_provider = true;
215
229
  }
230
+ if (this._config.continuityStore !== null) {
231
+ params.has_continuity_store = true;
232
+ }
233
+ if (this._config.leaseProvider !== null) {
234
+ params.has_lease_provider = true;
235
+ }
236
+ if (this._config.scratchDir !== null) {
237
+ params.scratch_dir = this._config.scratchDir;
238
+ }
216
239
  if (this._config.topologyProvider !== null) {
217
240
  params.has_topology_provider = true;
218
241
  }
@@ -231,7 +254,19 @@ class MobKitRuntime {
231
254
  const response = (await this._transport.sendAsync(request));
232
255
  if ("error" in response) {
233
256
  const err = response.error;
234
- throw new errors_js_1.RpcError(Number(err.code ?? -1), String(err.message ?? String(err)), rid, method, err.data);
257
+ const code = Number(err.code ?? -1);
258
+ const message = String(err.message ?? String(err));
259
+ if (code === errors_js_1.CAPABILITY_UNAVAILABLE_CODE) {
260
+ throw new errors_js_1.CapabilityUnavailableError(message, rid, method, err.data);
261
+ }
262
+ if (code === errors_js_1.MEMORY_BACKEND_UNAVAILABLE_CODE) {
263
+ throw new errors_js_1.MemoryBackendUnavailableError(message, rid, method, err.data);
264
+ }
265
+ const rpcError = new errors_js_1.RpcError(code, message, rid, method, err.data);
266
+ if (code === errors_js_1.MOB_EVENTS_STALE_CURSOR_CODE) {
267
+ throw errors_js_1.MobEventsStaleError.fromRpcError(rpcError);
268
+ }
269
+ throw rpcError;
235
270
  }
236
271
  return response.result;
237
272
  }
@@ -311,6 +346,14 @@ class MobKitRuntime {
311
346
  async deleteIdentity(identity) {
312
347
  return this._rpc("mobkit/delete_identity", { identity });
313
348
  }
349
+ /** Inspect identity continuity/runtime state. */
350
+ async inspectIdentity(identity) {
351
+ return this._rpc("mobkit/inspect_identity", { identity });
352
+ }
353
+ /** Re-run identity-first reconciliation. */
354
+ async reconcileIdentity() {
355
+ return this._rpc("mobkit/reconcile_identity", {});
356
+ }
314
357
  }
315
358
  exports.MobKitRuntime = MobKitRuntime;
316
359
  // -- MobHandle ------------------------------------------------------------
@@ -337,6 +380,9 @@ class MobHandle {
337
380
  async capabilities() {
338
381
  return (0, types_js_1.parseCapabilitiesResult)(await this._runtime._rpc("mobkit/capabilities"));
339
382
  }
383
+ async modelsCatalog() {
384
+ return (0, types_js_1.parseModelsCatalogResult)(await this._runtime._rpc("mobkit/models/catalog"));
385
+ }
340
386
  // -- Spawn & reconcile --------------------------------------------------
341
387
  async spawn(spec) {
342
388
  return (0, types_js_1.parseSpawnResult)(await this._runtime._rpc("mobkit/spawn_member", (0, models_js_1.discoverySpecToDict)(spec)));
@@ -528,7 +574,19 @@ class MobHandle {
528
574
  }
529
575
  if ("error" in body) {
530
576
  const err = body.error;
531
- throw new errors_js_1.RpcError(Number(err.code ?? -1), String(err.message ?? String(err)), id, method, err.data);
577
+ const code = Number(err.code ?? -1);
578
+ const message = String(err.message ?? String(err));
579
+ if (code === errors_js_1.CAPABILITY_UNAVAILABLE_CODE) {
580
+ throw new errors_js_1.CapabilityUnavailableError(message, id, method, err.data);
581
+ }
582
+ if (code === errors_js_1.MEMORY_BACKEND_UNAVAILABLE_CODE) {
583
+ throw new errors_js_1.MemoryBackendUnavailableError(message, id, method, err.data);
584
+ }
585
+ const rpcError = new errors_js_1.RpcError(code, message, id, method, err.data);
586
+ if (code === errors_js_1.MOB_EVENTS_STALE_CURSOR_CODE) {
587
+ throw errors_js_1.MobEventsStaleError.fromRpcError(rpcError);
588
+ }
589
+ throw rpcError;
532
590
  }
533
591
  if (!response.ok) {
534
592
  throw new errors_js_1.TransportError(`multipart RPC failed (status=${response.status}): ${responseText}`);
@@ -583,6 +641,14 @@ class MobHandle {
583
641
  member_id: memberId,
584
642
  });
585
643
  }
644
+ async memberStatus(memberId) {
645
+ return (0, types_js_1.parseRichMemberSnapshot)(await this._runtime._rpc("mobkit/member_status", { member_id: memberId }));
646
+ }
647
+ async forceCancelMember(memberId) {
648
+ await this._runtime._rpc("mobkit/force_cancel_member", {
649
+ member_id: memberId,
650
+ });
651
+ }
586
652
  /**
587
653
  * Wait until all current mob members are startup-ready for orchestration.
588
654
  *
@@ -607,6 +673,18 @@ class MobHandle {
607
673
  };
608
674
  }
609
675
  // -- Flows --------------------------------------------------------------
676
+ async cancelFlow(runId) {
677
+ await this._runtime._rpc("mobkit/cancel_flow", { run_id: runId });
678
+ }
679
+ async flowStatus(runId) {
680
+ const raw = await this._runtime._rpc("mobkit/flow_status", { run_id: runId });
681
+ if (raw === null)
682
+ return null;
683
+ if (typeof raw === "object" && raw !== null && raw.status === "not_found") {
684
+ return null;
685
+ }
686
+ return (0, types_js_1.parseMobRunSnapshot)(raw);
687
+ }
610
688
  /**
611
689
  * List all configured flow IDs in this mob definition. Relays meerkat
612
690
  * 0.6's `MobHandle::list_flows`. Order is unspecified.
@@ -672,6 +750,38 @@ class MobHandle {
672
750
  }
673
751
  throw new Error(`unexpected run_flow response: ${JSON.stringify(raw)}`);
674
752
  }
753
+ async collectCompleted() {
754
+ const raw = await this._runtime._rpc("mobkit/collect_completed");
755
+ const entries = typeof raw === "object" && raw !== null
756
+ ? (Array.isArray(raw.completed)
757
+ ? raw.completed
758
+ : [])
759
+ : Array.isArray(raw)
760
+ ? raw
761
+ : [];
762
+ const result = [];
763
+ for (const entry of entries) {
764
+ const record = typeof entry === "object" && entry !== null
765
+ ? entry
766
+ : {};
767
+ const memberId = String(record.member_id ?? "");
768
+ result.push([memberId, (0, types_js_1.parseRichMemberSnapshot)(record.snapshot ?? record)]);
769
+ }
770
+ return result;
771
+ }
772
+ // -- Scheduling ---------------------------------------------------------
773
+ async schedulingEvaluate(schedules, tickMs) {
774
+ return this._runtime._rpc("mobkit/scheduling/evaluate", {
775
+ schedules: [...schedules],
776
+ tick_ms: tickMs,
777
+ });
778
+ }
779
+ async schedulingDispatch(schedules, tickMs) {
780
+ return this._runtime._rpc("mobkit/scheduling/dispatch", {
781
+ schedules: [...schedules],
782
+ tick_ms: tickMs,
783
+ });
784
+ }
675
785
  // -- Routing ------------------------------------------------------------
676
786
  async resolveRouting(recipient, options) {
677
787
  return (0, types_js_1.parseRoutingResolution)(await this._runtime._rpc("mobkit/routing/resolve", {
@@ -754,6 +864,9 @@ class MobHandle {
754
864
  toolCaller(moduleId) {
755
865
  return new ToolCaller(this, moduleId);
756
866
  }
867
+ async sessionStoreBigQuery(options) {
868
+ return this._runtime._rpc("mobkit/session_store/bigquery", options);
869
+ }
757
870
  // -- Gating -------------------------------------------------------------
758
871
  async gatingEvaluate(action, actorId, options) {
759
872
  return (0, types_js_1.parseGatingEvaluateResult)(await this._runtime._rpc("mobkit/gating/evaluate", {
@@ -797,6 +910,118 @@ class MobHandle {
797
910
  async reconcileEdges() {
798
911
  return (0, types_js_1.parseReconcileEdgesReport)(await this._runtime._rpc("mobkit/reconcile_edges"));
799
912
  }
913
+ // -- Cross-mob ----------------------------------------------------------
914
+ async listExternalMobs() {
915
+ const raw = await this._runtime._rpc("mobkit/cross_mob/directory");
916
+ const mobs = typeof raw === "object" && raw !== null
917
+ ? (Array.isArray(raw.mobs)
918
+ ? raw.mobs
919
+ : [])
920
+ : [];
921
+ return mobs.map(types_js_1.parseCrossMobContactEntry);
922
+ }
923
+ async peerInfo(memberId) {
924
+ const raw = await this._runtime._rpc("mobkit/cross_mob/peer_info", {
925
+ member_id: memberId,
926
+ });
927
+ const out = {};
928
+ if (typeof raw === "object" && raw !== null) {
929
+ for (const [k, v] of Object.entries(raw)) {
930
+ out[k] = String(v);
931
+ }
932
+ }
933
+ return out;
934
+ }
935
+ async peerPubkey() {
936
+ const raw = await this._runtime._rpc("mobkit/peer_pubkey");
937
+ return typeof raw === "object" && raw !== null
938
+ ? String(raw.pubkey_b64 ?? "")
939
+ : "";
940
+ }
941
+ async wireLocal(localMemberId, remoteCommsName, remotePeerId, remoteAddress, options) {
942
+ const params = {
943
+ local_member_id: localMemberId,
944
+ remote_comms_name: remoteCommsName,
945
+ remote_peer_id: remotePeerId,
946
+ remote_address: remoteAddress,
947
+ };
948
+ if (options?.remotePubkeyB64) {
949
+ params.remote_pubkey_b64 = options.remotePubkeyB64;
950
+ }
951
+ await this._runtime._rpc("mobkit/cross_mob/wire_local", params);
952
+ }
953
+ async unwireLocal(localMemberId, remoteCommsName, remotePeerId, remoteAddress, options) {
954
+ const params = {
955
+ local_member_id: localMemberId,
956
+ remote_comms_name: remoteCommsName,
957
+ remote_peer_id: remotePeerId,
958
+ remote_address: remoteAddress,
959
+ };
960
+ if (options?.remotePubkeyB64) {
961
+ params.remote_pubkey_b64 = options.remotePubkeyB64;
962
+ }
963
+ await this._runtime._rpc("mobkit/cross_mob/unwire_local", params);
964
+ }
965
+ async wireCrossMob(localMemberId, remoteMemberId, remoteHandle) {
966
+ const localInfo = await this.peerInfo(localMemberId);
967
+ const remoteInfo = await remoteHandle.peerInfo(remoteMemberId);
968
+ await this.wireLocal(localMemberId, remoteInfo.comms_name, remoteInfo.peer_id, remoteInfo.address);
969
+ try {
970
+ await remoteHandle.wireLocal(remoteMemberId, localInfo.comms_name, localInfo.peer_id, localInfo.address);
971
+ }
972
+ catch (err) {
973
+ try {
974
+ await this.unwireLocal(localMemberId, remoteInfo.comms_name, remoteInfo.peer_id, remoteInfo.address);
975
+ }
976
+ catch {
977
+ // Best-effort rollback; preserve the original remote error.
978
+ }
979
+ throw err;
980
+ }
981
+ }
982
+ async sendCrossMob(remoteMemberId, remoteHandle, message) {
983
+ return remoteHandle.send(remoteMemberId, message);
984
+ }
985
+ // -- Helper members -----------------------------------------------------
986
+ async spawnHelper(agentIdentity, task, options) {
987
+ const helperOptions = {};
988
+ if (options?.role)
989
+ helperOptions.role = options.role;
990
+ if (options?.runtimeMode)
991
+ helperOptions.runtime_mode = options.runtimeMode;
992
+ if (options?.backend)
993
+ helperOptions.backend = options.backend;
994
+ const params = { agent_identity: agentIdentity, task };
995
+ if (Object.keys(helperOptions).length > 0)
996
+ params.options = helperOptions;
997
+ return (0, types_js_1.parseHelperResult)(await this._runtime._rpc("mobkit/spawn_helper", params));
998
+ }
999
+ async forkHelper(sourceMemberId, agentIdentity, task, options) {
1000
+ const helperOptions = {};
1001
+ if (options?.role)
1002
+ helperOptions.role = options.role;
1003
+ if (options?.runtimeMode)
1004
+ helperOptions.runtime_mode = options.runtimeMode;
1005
+ if (options?.backend)
1006
+ helperOptions.backend = options.backend;
1007
+ const params = {
1008
+ source_member_id: sourceMemberId,
1009
+ agent_identity: agentIdentity,
1010
+ task,
1011
+ };
1012
+ if (options?.forkContext)
1013
+ params.fork_context = options.forkContext;
1014
+ if (Object.keys(helperOptions).length > 0)
1015
+ params.options = helperOptions;
1016
+ return (0, types_js_1.parseHelperResult)(await this._runtime._rpc("mobkit/fork_helper", params));
1017
+ }
1018
+ async attachSession(role, agentIdentity, sessionId) {
1019
+ return (0, types_js_1.parseRichMemberSnapshot)(await this._runtime._rpc("mobkit/attach_existing_session", {
1020
+ role,
1021
+ agent_identity: agentIdentity,
1022
+ session_id: sessionId,
1023
+ }));
1024
+ }
800
1025
  // -- Mob/run labels — mobkit-side sidecar metadata ----------------------
801
1026
  /**
802
1027
  * Replace the label set associated with this mob.
@@ -39,6 +39,15 @@ exports.parseFrameRecord = parseFrameRecord;
39
39
  exports.parseLoopRecord = parseLoopRecord;
40
40
  exports.parseLoopIterationRecord = parseLoopIterationRecord;
41
41
  exports.parseMobRun = parseMobRun;
42
+ exports.parseMobUnreachablePeer = parseMobUnreachablePeer;
43
+ exports.parsePeerConnectivitySnapshot = parsePeerConnectivitySnapshot;
44
+ exports.parseRichMemberSnapshot = parseRichMemberSnapshot;
45
+ exports.parseHelperResult = parseHelperResult;
46
+ exports.parseMobRunSnapshot = parseMobRunSnapshot;
47
+ exports.parseCrossMobContactEntry = parseCrossMobContactEntry;
48
+ exports.parseCatalogEntry = parseCatalogEntry;
49
+ exports.parseProviderDefaults = parseProviderDefaults;
50
+ exports.parseModelsCatalogResult = parseModelsCatalogResult;
42
51
  exports.parseErrorEvent = parseErrorEvent;
43
52
  exports.parseDurableAgentSpec = parseDurableAgentSpec;
44
53
  exports.durableAgentSpecToDict = durableAgentSpecToDict;
@@ -64,7 +73,9 @@ exports.sessionSnapshotToDict = sessionSnapshotToDict;
64
73
  exports.parseLeaseGrant = parseLeaseGrant;
65
74
  exports.leaseGrantToDict = leaseGrantToDict;
66
75
  exports.parseLeaseAcquireResult = parseLeaseAcquireResult;
76
+ exports.leaseAcquireResultToDict = leaseAcquireResultToDict;
67
77
  exports.parseLeaseRenewResult = parseLeaseRenewResult;
78
+ exports.leaseRenewResultToDict = leaseRenewResultToDict;
68
79
  // -- Helpers (internal) ---------------------------------------------------
69
80
  function asRecord(value) {
70
81
  if (typeof value === "object" && value !== null) {
@@ -94,6 +105,15 @@ function asStringRecord(value) {
94
105
  }
95
106
  return result;
96
107
  }
108
+ function validateAgentIdentity(identity) {
109
+ if (identity.length === 0 ||
110
+ identity.trim() !== identity ||
111
+ /\s/.test(identity) ||
112
+ identity.includes("/")) {
113
+ throw new Error(`invalid agent identity: ${identity}`);
114
+ }
115
+ return identity;
116
+ }
97
117
  // -- Constants ------------------------------------------------------------
98
118
  exports.MEMBER_STATE_ACTIVE = "active";
99
119
  exports.MEMBER_STATE_RETIRING = "retiring";
@@ -341,6 +361,24 @@ function parseRediscoverReport(raw) {
341
361
  }
342
362
  function parseUnifiedEvent(raw) {
343
363
  const d = asRecord(raw);
364
+ if (d.kind === "agent") {
365
+ return {
366
+ kind: "agent",
367
+ agentId: String(d.agent_id ?? d.agentId ?? ""),
368
+ eventType: String(d.event_type ?? d.eventType ?? ""),
369
+ payload: typeof d.payload === "object" && d.payload !== null
370
+ ? asRecord(d.payload)
371
+ : null,
372
+ };
373
+ }
374
+ if (d.kind === "module") {
375
+ return {
376
+ kind: "module",
377
+ module: String(d.module ?? ""),
378
+ eventType: String(d.event_type ?? d.eventType ?? ""),
379
+ payload: asRecord(d.payload),
380
+ };
381
+ }
344
382
  if ("Agent" in d) {
345
383
  const agent = asRecord(d.Agent);
346
384
  return {
@@ -530,6 +568,103 @@ function parseMobRun(raw) {
530
568
  loopIterationOutputs: iterOutputs,
531
569
  };
532
570
  }
571
+ function parseMobUnreachablePeer(raw) {
572
+ const d = asRecord(raw);
573
+ return {
574
+ peer: String(d.peer ?? ""),
575
+ reason: typeof d.reason === "string" ? d.reason : null,
576
+ };
577
+ }
578
+ function parsePeerConnectivitySnapshot(raw) {
579
+ const d = asRecord(raw);
580
+ return {
581
+ reachablePeerCount: Number(d.reachable_peer_count ?? 0),
582
+ unknownPeerCount: Number(d.unknown_peer_count ?? 0),
583
+ unreachablePeers: asRecordArray(d.unreachable_peers).map(parseMobUnreachablePeer),
584
+ };
585
+ }
586
+ function parseRichMemberSnapshot(raw) {
587
+ const d = asRecord(raw);
588
+ return {
589
+ status: String(d.status ?? "unknown"),
590
+ outputPreview: typeof d.output_preview === "string" ? d.output_preview : null,
591
+ error: typeof d.error === "string" ? d.error : null,
592
+ tokensUsed: Number(d.tokens_used ?? 0),
593
+ isFinal: Boolean(d.is_final),
594
+ currentSessionId: typeof d.current_session_id === "string" ? d.current_session_id : null,
595
+ peerConnectivity: typeof d.peer_connectivity === "object" && d.peer_connectivity !== null
596
+ ? parsePeerConnectivitySnapshot(d.peer_connectivity)
597
+ : null,
598
+ };
599
+ }
600
+ function parseHelperResult(raw) {
601
+ const d = asRecord(raw);
602
+ return {
603
+ output: typeof d.output === "string" ? d.output : null,
604
+ tokensUsed: Number(d.tokens_used ?? 0),
605
+ sessionId: typeof d.session_id === "string" ? d.session_id : null,
606
+ };
607
+ }
608
+ function parseMobRunSnapshot(raw) {
609
+ const d = asRecord(raw);
610
+ return {
611
+ runId: String(d.run_id ?? ""),
612
+ mobId: String(d.mob_id ?? ""),
613
+ flowId: String(d.flow_id ?? ""),
614
+ status: String(d.status ?? "unknown"),
615
+ stepLedger: asRecordArray(d.step_ledger),
616
+ failureLedger: asRecordArray(d.failure_ledger),
617
+ };
618
+ }
619
+ function parseCrossMobContactEntry(raw) {
620
+ const d = asRecord(raw);
621
+ let transport = d.transport;
622
+ if (typeof transport === "object" && transport !== null) {
623
+ const t = asRecord(transport);
624
+ if (typeof t.Tcp === "string")
625
+ transport = `tcp://${t.Tcp}`;
626
+ else if (typeof t.Uds === "string")
627
+ transport = `uds://${t.Uds}`;
628
+ else
629
+ transport = "inproc";
630
+ }
631
+ else if (transport === "Inproc") {
632
+ transport = "inproc";
633
+ }
634
+ return {
635
+ mobId: String(d.mob_id ?? ""),
636
+ transport: String(transport ?? ""),
637
+ };
638
+ }
639
+ function parseCatalogEntry(raw) {
640
+ const d = asRecord(raw);
641
+ const profile = asRecord(d.profile);
642
+ return {
643
+ id: String(d.id ?? ""),
644
+ displayName: String(d.display_name ?? ""),
645
+ provider: String(d.provider ?? ""),
646
+ tier: String(d.tier ?? ""),
647
+ contextWindow: d.context_window == null ? null : Number(d.context_window),
648
+ maxOutputTokens: d.max_output_tokens == null ? null : Number(d.max_output_tokens),
649
+ vision: Boolean(profile.vision),
650
+ imageToolResults: Boolean(profile.image_tool_results),
651
+ };
652
+ }
653
+ function parseProviderDefaults(raw) {
654
+ const d = asRecord(raw);
655
+ return {
656
+ provider: String(d.provider ?? ""),
657
+ defaultModelId: String(d.default_model_id ?? ""),
658
+ models: asRecordArray(d.models).map(parseCatalogEntry),
659
+ };
660
+ }
661
+ function parseModelsCatalogResult(raw) {
662
+ const d = asRecord(raw);
663
+ return {
664
+ models: asRecordArray(d.models).map(parseCatalogEntry),
665
+ providerDefaults: asRecordArray(d.provider_defaults).map(parseProviderDefaults),
666
+ };
667
+ }
533
668
  // -- ErrorCategory / ErrorEvent -------------------------------------------
534
669
  exports.ErrorCategory = {
535
670
  SPAWN_FAILURE: "spawn_failure",
@@ -579,7 +714,7 @@ function parseErrorEvent(raw) {
579
714
  function parseDurableAgentSpec(raw) {
580
715
  const d = asRecord(raw);
581
716
  return {
582
- identity: String(d.identity ?? ""),
717
+ identity: validateAgentIdentity(String(d.identity ?? "")),
583
718
  profile: String(d.profile ?? ""),
584
719
  addressability: String(d.addressability ?? "addressable"),
585
720
  displayName: typeof d.display_name === "string" ? d.display_name : null,
@@ -719,10 +854,16 @@ function dispatchInputToDict(input) {
719
854
  }
720
855
  function parseManagedPeerEdge(raw) {
721
856
  const d = asRecord(raw);
722
- return { a: String(d.a ?? ""), b: String(d.b ?? "") };
857
+ const a = validateAgentIdentity(String(d.a ?? ""));
858
+ const b = validateAgentIdentity(String(d.b ?? ""));
859
+ if (a === b) {
860
+ throw new Error(`managed peer edge cannot connect an identity to itself: ${a}`);
861
+ }
862
+ return a < b ? { a, b } : { a: b, b: a };
723
863
  }
724
864
  function managedPeerEdgeToDict(edge) {
725
- return { a: edge.a, b: edge.b };
865
+ const parsed = parseManagedPeerEdge(edge);
866
+ return { a: parsed.a, b: parsed.b };
726
867
  }
727
868
  function parseExternalToolDef(raw) {
728
869
  const d = asRecord(raw);
@@ -897,31 +1038,68 @@ function parseLeaseGrant(raw) {
897
1038
  return {
898
1039
  identity: String(d.identity ?? ""),
899
1040
  fencingToken: Number(d.fencing_token ?? 0),
900
- ttlMs: Number(d.ttl_ms ?? 0),
1041
+ ttlMs: Number(d.ttl ?? d.ttl_ms ?? 0),
901
1042
  };
902
1043
  }
903
1044
  function leaseGrantToDict(grant) {
904
1045
  return {
905
1046
  identity: grant.identity,
906
1047
  fencing_token: grant.fencingToken,
907
- ttl_ms: grant.ttlMs,
1048
+ ttl: grant.ttlMs,
908
1049
  };
909
1050
  }
910
1051
  function parseLeaseAcquireResult(raw) {
911
1052
  const d = asRecord(raw);
912
- const wireStatus = String(d.status ?? "acquired");
1053
+ const wireStatus = String(d.result ?? d.status ?? "acquired");
913
1054
  const status = wireStatus === "already_held" ? "alreadyHeld" : "acquired";
914
1055
  return {
915
1056
  status,
916
- grant: d.grant != null ? parseLeaseGrant(d.grant) : undefined,
1057
+ identity: typeof d.identity === "string" ? d.identity : undefined,
1058
+ grant: d.grant != null
1059
+ ? parseLeaseGrant(d.grant)
1060
+ : status === "acquired"
1061
+ ? parseLeaseGrant(d)
1062
+ : undefined,
917
1063
  holder: typeof d.holder === "string" ? d.holder : undefined,
918
1064
  };
919
1065
  }
1066
+ function leaseAcquireResultToDict(result) {
1067
+ if (result.status === "alreadyHeld") {
1068
+ return {
1069
+ result: "already_held",
1070
+ identity: result.identity ?? result.grant?.identity ?? "",
1071
+ holder: result.holder ?? "",
1072
+ };
1073
+ }
1074
+ const grant = result.grant;
1075
+ return {
1076
+ result: "acquired",
1077
+ ...(grant ? leaseGrantToDict(grant) : {}),
1078
+ };
1079
+ }
920
1080
  function parseLeaseRenewResult(raw) {
921
1081
  const d = asRecord(raw);
922
- const status = String(d.status ?? "renewed");
1082
+ const status = String(d.result ?? d.status ?? "renewed");
923
1083
  return {
924
1084
  status,
925
- grant: d.grant != null ? parseLeaseGrant(d.grant) : undefined,
1085
+ identity: typeof d.identity === "string" ? d.identity : undefined,
1086
+ grant: d.grant != null
1087
+ ? parseLeaseGrant(d.grant)
1088
+ : status === "renewed"
1089
+ ? parseLeaseGrant(d)
1090
+ : undefined,
1091
+ };
1092
+ }
1093
+ function leaseRenewResultToDict(result) {
1094
+ if (result.status === "lost") {
1095
+ return {
1096
+ result: "lost",
1097
+ identity: result.identity ?? result.grant?.identity ?? "",
1098
+ };
1099
+ }
1100
+ const grant = result.grant;
1101
+ return {
1102
+ result: "renewed",
1103
+ ...(grant ? leaseGrantToDict(grant) : {}),
926
1104
  };
927
1105
  }
@@ -6,6 +6,7 @@ export interface GoogleAuthConfig {
6
6
  readonly discoveryUrl: string;
7
7
  readonly audience: string | null;
8
8
  readonly leewaySeconds: number;
9
+ toDict(): Record<string, unknown>;
9
10
  }
10
11
  export declare function google(clientId: string, options?: {
11
12
  discoveryUrl?: string;
@@ -18,6 +19,7 @@ export interface JwtAuthConfig {
18
19
  readonly issuer: string | null;
19
20
  readonly audience: string | null;
20
21
  readonly leewaySeconds: number;
22
+ toDict(): Record<string, unknown>;
21
23
  }
22
24
  export declare function jwt(sharedSecret: string, options?: {
23
25
  issuer?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/config/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,MAAM,CACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,gBAAgB,CASlB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,GAAG,CACjB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,aAAa,CAOf;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/config/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAgB,MAAM,CACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,gBAAgB,CAalB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAgB,GAAG,CACjB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,aAAa,CAWf;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB"}