@peers-app/peers-sdk 0.25.21 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/contracts/__tests__/builder.test.js +0 -2
  2. package/dist/contracts/__tests__/contract-provider-router.test.js +51 -0
  3. package/dist/contracts/__tests__/contract-proxy.test.js +21 -0
  4. package/dist/contracts/__tests__/contract-resolvers.test.js +84 -0
  5. package/dist/contracts/__tests__/legacy-removal.test.d.ts +1 -0
  6. package/dist/contracts/__tests__/legacy-removal.test.js +90 -0
  7. package/dist/contracts/__tests__/system-contracts.test.js +88 -0
  8. package/dist/contracts/__tests__/tool-catalog-inventory.test.d.ts +1 -0
  9. package/dist/contracts/__tests__/tool-catalog-inventory.test.js +44 -0
  10. package/dist/contracts/__tests__/tool-catalog-service.test.d.ts +1 -0
  11. package/dist/contracts/__tests__/tool-catalog-service.test.js +446 -0
  12. package/dist/contracts/__tests__/tool-catalog.test.d.ts +1 -0
  13. package/dist/contracts/__tests__/tool-catalog.test.js +649 -0
  14. package/dist/contracts/__tests__/workflow-context.test.d.ts +1 -0
  15. package/dist/contracts/__tests__/workflow-context.test.js +61 -0
  16. package/dist/contracts/builder.d.ts +9 -8
  17. package/dist/contracts/builder.js +34 -16
  18. package/dist/contracts/contract-provider-router.d.ts +12 -1
  19. package/dist/contracts/contract-provider-router.js +40 -2
  20. package/dist/contracts/contract-proxy.d.ts +20 -6
  21. package/dist/contracts/contract-proxy.js +23 -12
  22. package/dist/contracts/contract-resolvers.d.ts +22 -3
  23. package/dist/contracts/contract-resolvers.js +86 -7
  24. package/dist/contracts/extract.d.ts +7 -0
  25. package/dist/contracts/extract.js +3 -0
  26. package/dist/contracts/index.d.ts +11 -4
  27. package/dist/contracts/index.js +14 -2
  28. package/dist/contracts/registry.d.ts +3 -0
  29. package/dist/contracts/registry.js +2 -0
  30. package/dist/contracts/system/desktop-tools-contract.d.ts +5 -0
  31. package/dist/contracts/system/desktop-tools-contract.js +88 -0
  32. package/dist/contracts/system/host-tools-contract.d.ts +5 -0
  33. package/dist/contracts/system/host-tools-contract.js +76 -0
  34. package/dist/contracts/system/index.d.ts +3 -0
  35. package/dist/contracts/system/index.js +3 -0
  36. package/dist/contracts/system/tool-catalog-contract.d.ts +73 -0
  37. package/dist/contracts/system/tool-catalog-contract.js +70 -0
  38. package/dist/contracts/system-contracts.d.ts +3 -1
  39. package/dist/contracts/system-contracts.js +20 -6
  40. package/dist/contracts/tool-catalog-identity.d.ts +35 -0
  41. package/dist/contracts/tool-catalog-identity.js +88 -0
  42. package/dist/contracts/tool-catalog-migrations.d.ts +12 -0
  43. package/dist/contracts/tool-catalog-migrations.js +179 -0
  44. package/dist/contracts/tool-catalog-service.d.ts +30 -0
  45. package/dist/contracts/tool-catalog-service.js +287 -0
  46. package/dist/contracts/tool-catalog.d.ts +91 -0
  47. package/dist/contracts/tool-catalog.js +490 -0
  48. package/dist/contracts/types.d.ts +7 -5
  49. package/dist/data/messages.d.ts +3 -3
  50. package/dist/data/orm/sql.data-source.d.ts +5 -0
  51. package/dist/data/orm/sql.data-source.js +28 -10
  52. package/dist/data/orm/sql.data-source.test.d.ts +1 -1
  53. package/dist/data/orm/sql.data-source.test.js +160 -0
  54. package/dist/data/orm/table-container.d.ts +14 -0
  55. package/dist/data/orm/table-container.js +20 -0
  56. package/dist/data/tool-access-approvals.d.ts +6 -6
  57. package/dist/data/tool-catalog-fields.d.ts +31 -0
  58. package/dist/data/tool-catalog-fields.js +67 -0
  59. package/dist/data/tools.d.ts +38 -10
  60. package/dist/data/tools.js +31 -8
  61. package/dist/data/workflow-logs.d.ts +6 -2
  62. package/dist/data/workflow-logs.js +7 -5
  63. package/dist/data/workflow-runs.d.ts +6 -6
  64. package/dist/index.d.ts +0 -2
  65. package/dist/index.js +1 -3
  66. package/dist/package-loader/contract-package-loader.d.ts +12 -3
  67. package/dist/package-loader/contract-package-loader.js +54 -50
  68. package/dist/package-loader/contract-package-loader.test.d.ts +1 -1
  69. package/dist/package-loader/contract-package-loader.test.js +172 -13
  70. package/dist/package-loader/host-authority-loading.test.js +16 -3
  71. package/dist/package-loader/isolated-runtime.d.ts +14 -2
  72. package/dist/package-loader/isolated-table-gateway.d.ts +3 -1
  73. package/dist/package-loader/isolated-table-gateway.js +54 -5
  74. package/dist/package-loader/isolated-table-gateway.test.js +123 -0
  75. package/dist/package-loader/package-loader.d.ts +14 -2
  76. package/dist/package-loader/package-loader.js +184 -62
  77. package/dist/package-loader/package-loader.test.js +674 -1
  78. package/dist/package-loader/resolve-consumed-contracts.js +1 -1
  79. package/dist/system-ids.d.ts +6 -0
  80. package/dist/system-ids.js +7 -1
  81. package/dist/types/peers-package.d.ts +3 -2
  82. package/dist/types/workflow-run-context.d.ts +12 -2
  83. package/package.json +1 -1
  84. package/dist/tools/index.d.ts +0 -1
  85. package/dist/tools/index.js +0 -17
  86. package/dist/tools/tools-factory.d.ts +0 -5
  87. package/dist/tools/tools-factory.js +0 -34
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stagePackageContractResolvers = stagePackageContractResolvers;
4
+ exports.unregisterPackageContractResolvers = unregisterPackageContractResolvers;
3
5
  exports.registerContractResolver = registerContractResolver;
4
6
  exports.getContractResolver = getContractResolver;
5
7
  exports.verifyRemoteContractIdentity = verifyRemoteContractIdentity;
6
8
  exports.isSelfTrustedContractCaller = isSelfTrustedContractCaller;
9
+ exports.isLocalOnlyContractId = isLocalOnlyContractId;
7
10
  exports.authorizeRemoteContractCall = authorizeRemoteContractCall;
8
11
  exports.createLocalUserContextContractProviderRouter = createLocalUserContextContractProviderRouter;
9
12
  exports.createUserContextContractProviderRouter = createUserContextContractProviderRouter;
@@ -20,6 +23,47 @@ const contract_proxy_1 = require("./contract-proxy");
20
23
  const remote_contract_transport_1 = require("./remote-contract-transport");
21
24
  const types_1 = require("./types");
22
25
  const resolvers = new Map();
26
+ const packageResolvers = new WeakMap();
27
+ let stagedRegistration;
28
+ /**
29
+ * Capture synchronous bundle registrations without publishing candidate code.
30
+ * The returned callback replaces this context's provider resolvers only when
31
+ * called in the loader's guarded activation turn. Throwing evaluation discards
32
+ * the batch; asynchronous installation never holds a process-wide capture open.
33
+ * Package resolvers always require an owning context and cannot change system
34
+ * signed-out routing or another package's implementation.
35
+ * @internal
36
+ */
37
+ function stagePackageContractResolvers(dataContext, providerPackageId, evaluate) {
38
+ const pending = new Map();
39
+ const previous = stagedRegistration;
40
+ stagedRegistration = (contractId, version, resolver, opts = {}) => {
41
+ if (opts.providerPackageId && opts.providerPackageId !== providerPackageId)
42
+ throw new Error("A package cannot register another provider's contract resolver");
43
+ pending.set((0, types_1.contractKey)(contractId, version), resolver);
44
+ };
45
+ try {
46
+ evaluate();
47
+ }
48
+ finally {
49
+ stagedRegistration = previous;
50
+ }
51
+ return () => {
52
+ let providers = packageResolvers.get(dataContext);
53
+ if (!providers) {
54
+ providers = new Map();
55
+ packageResolvers.set(dataContext, providers);
56
+ }
57
+ // Give each activation its own resolver identity even if a legacy bundle
58
+ // reuses a function. Retained unscoped endpoints must detect that lifetime
59
+ // change just as provider-scoped endpoints detect activation generations.
60
+ providers.set(providerPackageId, new Map([...pending].map(([key, resolver]) => [key, (ctx) => resolver(ctx)])));
61
+ };
62
+ }
63
+ /** Retire one context's host resolver code without changing catalog history. @internal */
64
+ function unregisterPackageContractResolvers(dataContext, providerPackageId) {
65
+ packageResolvers.get(dataContext)?.delete(providerPackageId);
66
+ }
23
67
  /** Resolver keys that may run before a user context exists. */
24
68
  const resolversWithoutUser = new Set();
25
69
  const resolverKey = (contractId, version, providerPackageId) => providerPackageId
@@ -29,8 +73,14 @@ const resolverKey = (contractId, version, providerPackageId) => providerPackageI
29
73
  * Register the resolver that provides the live implementation for a contract version.
30
74
  * Later registrations for the same contract+version replace earlier ones (matching the
31
75
  * registry's "latest provider wins for dev contracts" behavior).
76
+ * During PackageLoader bundle evaluation, registration is staged for activation
77
+ * in the owning context; direct runtime registrations remain process-wide.
32
78
  */
33
79
  function registerContractResolver(contractId, version, resolver, opts = {}) {
80
+ if (stagedRegistration) {
81
+ stagedRegistration(contractId, version, resolver, opts);
82
+ return;
83
+ }
34
84
  const key = resolverKey(contractId, version, opts.providerPackageId);
35
85
  resolvers.set(key, resolver);
36
86
  if (opts.requiresUserContext === false) {
@@ -65,8 +115,26 @@ function contractRequiresUserContext(contractId, version) {
65
115
  * and the legacy unscoped registration remains the compatibility fallback.
66
116
  * An unscoped lookup may use a sole scoped resolver for callers that have not
67
117
  * yet adopted provider selection; multiple scoped providers remain ambiguous.
118
+ * Supplying `dataContext` first checks host packages activated in that context.
119
+ * Their staged registrations never replace global system/compatibility resolvers.
68
120
  */
69
- function getContractResolver(contractId, version, providerPackageId) {
121
+ function getContractResolver(contractId, version, providerPackageId, dataContext) {
122
+ const providers = dataContext && packageResolvers.get(dataContext);
123
+ const key = (0, types_1.contractKey)(contractId, version);
124
+ if (providers) {
125
+ if (providerPackageId) {
126
+ const owned = providers.get(providerPackageId)?.get(key);
127
+ if (owned)
128
+ return owned;
129
+ }
130
+ else {
131
+ const matches = [...providers.values()].flatMap((entries) => entries.get(key) ?? []);
132
+ if (matches.length > 1)
133
+ return undefined;
134
+ if (matches.length === 1)
135
+ return matches[0];
136
+ }
137
+ }
70
138
  const unscoped = resolvers.get(resolverKey(contractId, version));
71
139
  if (providerPackageId) {
72
140
  const scoped = resolvers.get(resolverKey(contractId, version, providerPackageId));
@@ -147,6 +215,8 @@ async function isSelfTrustedContractCaller(userContext, remoteIdentity) {
147
215
  }
148
216
  const permissionDenied = (call, reason) => new Error(`Permission denied: ${call.member} '${call.name}'.${call.operation} on contract ${call.contractId}${reason ? ` (${reason})` : ""}`);
149
217
  const localOnlyContractIds = new Set([
218
+ system_ids_1.hostToolsContractId,
219
+ system_ids_1.desktopToolsContractId,
150
220
  system_ids_1.contractCatalogContractId,
151
221
  system_ids_1.httpContractId,
152
222
  system_ids_1.identityContractId,
@@ -154,7 +224,12 @@ const localOnlyContractIds = new Set([
154
224
  system_ids_1.localFoldersContractId,
155
225
  system_ids_1.schedulerContractId,
156
226
  system_ids_1.toolAccessControlContractId,
227
+ system_ids_1.toolCatalogContractId,
157
228
  ]);
229
+ /** Whether a contract must remain on the local host, including Device Operations targets. */
230
+ function isLocalOnlyContractId(contractId) {
231
+ return localOnlyContractIds.has(contractId);
232
+ }
158
233
  /**
159
234
  * Authorize one inbound contract call from **another device**.
160
235
  *
@@ -169,7 +244,7 @@ const localOnlyContractIds = new Set([
169
244
  * group the provider belongs to, must be a tool run, the contract definition registered
170
245
  * for that group must mark the tool with {@link IContractTool.remoteAccessLevel}, and
171
246
  * the caller's role in that group must meet it. Missing loader, definition, or level
172
- * fails closed.
247
+ * fails closed. Catalog readiness precedes reading the group's definitions.
173
248
  *
174
249
  * @param call Inbound call.
175
250
  * @param userContext Provider's user context.
@@ -207,6 +282,7 @@ async function authorizeRemoteContractCall(call, userContext, remoteIdentity) {
207
282
  throw permissionDenied(call, "only tool runs are remotely callable");
208
283
  }
209
284
  const dataContext = userContext.getDataContext(dataContextId);
285
+ await dataContext.packageLoader?.catalogReady;
210
286
  const definition = dataContext.packageLoader?.contractRegistry?.getDefinition(call.contractId, call.version);
211
287
  const tool = definition?.tools.find((entry) => entry.name === call.name);
212
288
  if (!tool) {
@@ -240,7 +316,8 @@ function getAuthorizedLocalDataContext(userContext, requestedId) {
240
316
  }
241
317
  return userContext.getDataContext(dataContextId);
242
318
  }
243
- function getActiveProviderPackageId(dataContext, contractId, version) {
319
+ async function getActiveProviderPackageId(dataContext, contractId, version) {
320
+ await dataContext.packageLoader?.catalogReady;
244
321
  return dataContext.packageLoader?.getActiveContractProviderPackageId?.(contractId, version);
245
322
  }
246
323
  async function resolveDataContextEndpoint(dataContext, request, resolveVariable) {
@@ -263,7 +340,7 @@ async function resolveDataContextEndpoint(dataContext, request, resolveVariable)
263
340
  if (isolatedEndpoint) {
264
341
  return isolatedEndpoint;
265
342
  }
266
- const resolver = getContractResolver(request.contractId, request.version, request.providerPackageId);
343
+ const resolver = getContractResolver(request.contractId, request.version, request.providerPackageId, dataContext);
267
344
  if (!resolver) {
268
345
  throw new Error(`No contract provider registered for ${request.contractId} v${request.version}`);
269
346
  }
@@ -306,7 +383,8 @@ function resolvesWithoutUser(contractId, version, peekUserContext) {
306
383
  * deferred until each call. This prevents renderer startup from racing provider
307
384
  * registration. Calls may target only the local user's personal context or a
308
385
  * currently known group context; arbitrary valid IDs are rejected before
309
- * `UserContext.getDataContext` can create a new context.
386
+ * `UserContext.getDataContext` can create a new context. Provider selection waits
387
+ * for catalog readiness, including explicit provider requests on a cold context.
310
388
  *
311
389
  * Contracts registered with `requiresUserContext: false` resolve before sign-in
312
390
  * when `peekUserContext` reports that no user is loaded. Every other call still
@@ -352,6 +430,7 @@ function createLocalUserContextContractProviderRouter(transport, opts) {
352
430
  const userContext = await getUserContext();
353
431
  const dataContext = getAuthorizedLocalDataContext(userContext, dataContextId);
354
432
  if (requestedProviderPackageId) {
433
+ await dataContext.packageLoader?.catalogReady;
355
434
  const registered = dataContext.packageLoader?.contractRegistry.getRegisteredProviderIds(contractId, version) ?? [];
356
435
  if (!registered.includes(requestedProviderPackageId)) {
357
436
  throw new Error(`Package ${requestedProviderPackageId} is not a registered provider for ${contractId} v${version}`);
@@ -429,7 +508,7 @@ async function handleContractCall(call, opts) {
429
508
  const endpoint = await dataContext.packageLoader.resolveContractEndpoint({
430
509
  contractId: call.contractId,
431
510
  version: call.version,
432
- providerPackageId: getActiveProviderPackageId(dataContext, call.contractId, call.version),
511
+ providerPackageId: await getActiveProviderPackageId(dataContext, call.contractId, call.version),
433
512
  dataContextId: authorization.dataContextId,
434
513
  context: authorization.context ?? {},
435
514
  notify: async () => undefined,
@@ -441,7 +520,7 @@ async function handleContractCall(call, opts) {
441
520
  endpoint.dispose();
442
521
  }
443
522
  }
444
- const resolver = getContractResolver(call.contractId, call.version);
523
+ const resolver = getContractResolver(call.contractId, call.version, undefined, dataContext);
445
524
  if (!resolver) {
446
525
  throw new Error(`No contract provider registered for ${call.contractId} v${call.version}`);
447
526
  }
@@ -1,4 +1,5 @@
1
1
  import type { z } from "zod";
2
+ import type { ITool } from "../data/tools";
2
3
  import type { IField } from "../types/field-type";
3
4
  import type { IContractTable, IContractTool } from "./types";
4
5
  /**
@@ -20,6 +21,8 @@ export interface IExtractableTableDef {
20
21
  * Mirrors the subset of IToolInstance we need.
21
22
  */
22
23
  export interface IExtractableToolInstance {
24
+ /** Host-only workflow policy carried into the contract definition. */
25
+ requiresWorkflowRun?: boolean;
23
26
  tool: {
24
27
  name: string;
25
28
  usageDescription: string;
@@ -31,6 +34,10 @@ export interface IExtractableToolInstance {
31
34
  };
32
35
  /** See {@link IContractTool.remoteAccessLevel}. */
33
36
  remoteAccessLevel?: number;
37
+ requiresWorkflowRun?: boolean;
38
+ isAssistantRunner?: boolean;
39
+ configSchema?: ITool["configSchema"];
40
+ detailedDescription?: string;
34
41
  };
35
42
  }
36
43
  /** Override the schemaToFields implementation (useful for tests). */
@@ -48,6 +48,9 @@ function extractToolShape(inst) {
48
48
  usageDescription: tool.usageDescription,
49
49
  inputFields: tool.inputSchema?.fields ?? [],
50
50
  outputFields: tool.outputSchema?.fields ?? [],
51
+ ...((inst.requiresWorkflowRun ?? tool.requiresWorkflowRun) !== undefined
52
+ ? { requiresWorkflowRun: inst.requiresWorkflowRun ?? tool.requiresWorkflowRun }
53
+ : {}),
51
54
  ...(tool.remoteAccessLevel !== undefined ? { remoteAccessLevel: tool.remoteAccessLevel } : {}),
52
55
  };
53
56
  }
@@ -1,9 +1,9 @@
1
1
  export * from "./action-dispatch";
2
2
  export { ContractBuilder, definePackage, PackageBuilder } from "./builder";
3
- export { type ContractCallAuthorizer, type ContractProviderEndpointResolver, type ContractProviderPackageResolver, createContractProviderRouter, type IAuthorizedContractRoute, type IContractProviderEndpointRequest, type IContractProviderRouter, type IContractProviderRouterOptions, } from "./contract-provider-router";
3
+ export { type ContractCallAuthorizer, type ContractProviderEndpointResolver, type ContractProviderPackageResolver, createContractProviderRouter, type IAuthorizedContractRoute, type IContractProviderEndpointRequest, type IContractProviderRouter, type IContractProviderRouterOptions, RetiredContractProviderEndpointError, } from "./contract-provider-router";
4
4
  export { ContractProviders, ContractProvidersTable, contractProvidersMetaData, contractProvidersSchema, type IContractProviderRecord, } from "./contract-providers.table";
5
- export { authorizedContractActionNames, CONTRACT_CALL_RPC, type ContractMemberType, type ContractNotificationSink, type ContractPermissionCheck, type ContractToolDispatch, createContractConsumer, createContractProvider, createContractProviderEndpoint, createContractProviderSession, createRemoteContractConsumer, type IContractCall, type IContractCallContext, type IContractConsumer, type IContractConsumerBase, type IContractNotification, type IContractProviderEndpoint, type IContractProviderEndpointOptions, type IContractProviderSession, type IContractProviderSessionOptions, type IContractResolution, type IContractTableProxy, type IContractToolContext, type IContractToolTarget, type ITableProxy, sameUserContractPermissionCheck, validateContractActions, } from "./contract-proxy";
6
- export { authorizeRemoteContractCall, type ContractRemoteIdentity, type ContractResolver, createLocalUserContextContractProviderRouter, createUserContextContractProviderRouter, getContractResolver, handleContractCall, type IContractResolverRegistrationOptions, type ILocalContractVariableRequest, isSelfTrustedContractCaller, type LocalContractVariableResolver, registerContractResolver, verifyRemoteContractIdentity, } from "./contract-resolvers";
5
+ export { authorizedContractActionNames, CONTRACT_CALL_RPC, type ContractMemberType, type ContractNotificationSink, type ContractPermissionCheck, type ContractToolDispatch, createContractConsumer, createContractProvider, createContractProviderEndpoint, createContractProviderSession, createRemoteContractConsumer, type IContractCall, type IContractCallContext, type IContractConsumer, type IContractConsumerBase, type IContractNotification, type IContractProviderEndpoint, type IContractProviderEndpointOptions, type IContractProviderSession, type IContractProviderSessionOptions, type IContractResolution, type IContractTableProxy, type IContractToolContext, type IContractToolImplementation, type IContractToolTarget, type ITableProxy, requireWorkflowRunContext, sameUserContractPermissionCheck, validateContractActions, } from "./contract-proxy";
6
+ export { authorizeRemoteContractCall, type ContractRemoteIdentity, type ContractResolver, createLocalUserContextContractProviderRouter, createUserContextContractProviderRouter, getContractResolver, handleContractCall, type IContractResolverRegistrationOptions, type ILocalContractVariableRequest, isLocalOnlyContractId, isSelfTrustedContractCaller, type LocalContractVariableResolver, registerContractResolver, verifyRemoteContractIdentity, } from "./contract-resolvers";
7
7
  export { CONTRACT_NOTIFY_CHANNEL, CONTRACT_REQUEST_CHANNEL, connectionContractTransport, type IContractTransport, type IDuplexEmitter, inProcessTransportPair, } from "./contract-transport";
8
8
  export { Contracts, ContractsTable, contractsMetaData, contractsSchema, type IContractRecord, } from "./contracts.table";
9
9
  export { createLocalContractConsumer } from "./create-local-consumer";
@@ -14,7 +14,9 @@ export { PersistentContractRegistry } from "./persistent-registry";
14
14
  export { ContractRegistry, type IContractProviderRegistration } from "./registry";
15
15
  export { createRemoteContractEndpoint, getRemoteContractTransportFactory, type IRemoteContractHost, type IRemoteContractTarget, type RemoteContractTransportFactory, resolveRemoteTargetEndpoint, setRemoteContractTransportFactory, } from "./remote-contract-transport";
16
16
  export { CONTRACT_CATALOG_VERSION, contractCatalogProviderPackageId, getContractCatalogDefinition, type IContractCatalogConsumer, type IContractProviderInfo, type IListContractProvidersInput, } from "./system/contract-catalog-contract";
17
+ export * from "./system/desktop-tools-contract";
17
18
  export { DEVICE_OPERATIONS_CONTRACT_VERSION, DEVICE_OPERATIONS_MAX_QUERY_LENGTH, DEVICE_OPERATIONS_MAX_RESULT_BYTES, DEVICE_OPERATIONS_MAX_ROWS, DEVICE_OPERATIONS_MAX_TOOLS, type DeviceOperationCapability, deviceOperationsProviderPackageId, deviceOperationsToolIds, getDeviceOperationsContractDefinition, type IDeviceDatabaseQueryInput, type IDeviceDatabaseQueryResult, type IDeviceOperationStatus, type IDeviceToolListInput, type IDeviceToolLookupInput, type IDeviceToolLookupResult, type IDeviceToolRunInput, } from "./system/device-operations-contract";
19
+ export * from "./system/host-tools-contract";
18
20
  export { getHttpContractDefinition, HTTP_CONTRACT_VERSION, HTTP_DEFAULT_TIMEOUT_MS, HTTP_MAX_BODY_BYTES, HTTP_MAX_TIMEOUT_MS, httpProviderPackageId, type IHttpCancelInput, type IHttpConsumer, type IHttpCredentialInfo, type IHttpMultipartPart, type IHttpPolicyInfo, type IHttpRequestInput, type IHttpRequestResult, } from "./system/http-contract";
19
21
  export { getIdentityContractDefinition, IDENTITY_CONTRACT_VERSION, type IIdentityConsumer, type IIdentityKeyInfo, type IIdentityRegistryKey, type IIdentityRotateKeyInput, type IIdentityRotateKeyResult, type IIdentitySessionInfo, } from "./system/identity-contract";
20
22
  export { getInvitesContractDefinition, type IAcceptInviteResult, type ICreatedInvite, type IInvitePreview, type IInvitesConsumer, INVITES_CONTRACT_VERSION, } from "./system/invites-contract";
@@ -23,7 +25,12 @@ export { getLogsContractDefinition, type ILogsConsumer, LOGS_CONTRACT_VERSION, r
23
25
  export * from "./system/network-contracts";
24
26
  export { getSchedulerContractDefinition, type IScheduleInfo, type IScheduleInput, type ISchedulerConsumer, SCHEDULER_CONTRACT_VERSION, SCHEDULER_MAX_DELAY_MS, schedulerProviderPackageId, } from "./system/scheduler-contract";
25
27
  export { getToolAccessControlContractDefinition, type IToolAccessControlConsumer, TOOL_ACCESS_CONTROL_CONTRACT_VERSION, } from "./system/tool-access-control-contract";
26
- export { type ISystemContractRegistration, installSystemContracts, listSystemContracts, registerSystemContract, } from "./system-contracts";
28
+ export * from "./system/tool-catalog-contract";
29
+ export { type ISystemContractRegistration, installSystemContracts, isSystemContractId, listSystemContracts, registerSystemContract, } from "./system-contracts";
30
+ export * from "./tool-catalog";
31
+ export * from "./tool-catalog-identity";
32
+ export * from "./tool-catalog-migrations";
33
+ export * from "./tool-catalog-service";
27
34
  export type { IAlsoImplementsDeclaration, IConsumedContract, IConsumedContractHandle, IConsumedContractOptions, IContractDefinition, IContractEvent, IContractObservable, IContractTable, IContractTool, IPackageDefinitionResult, IRemoteContract, IRemoteContractConsumer, IRemoteContractHandle, IResolvedContract, IValidationError, IValidationResult, } from "./types";
28
35
  export { contractKey } from "./types";
29
36
  export { validateAlsoImplements, validateImmutability, validateProviderSatisfiesContract, } from "./validate";
@@ -14,8 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.contractCatalogProviderPackageId = exports.CONTRACT_CATALOG_VERSION = exports.setRemoteContractTransportFactory = exports.resolveRemoteTargetEndpoint = exports.getRemoteContractTransportFactory = exports.createRemoteContractEndpoint = exports.ContractRegistry = exports.PersistentContractRegistry = exports.waitForHostContractTransport = exports.subscribeHostContractTransport = exports.registerHostContractTransport = exports.getHostContractTransport = exports.hostContractConsumer = exports.setSchemaToFieldsFn = exports.extractToolShape = exports.extractTableShape = exports.createLocalContractConsumer = exports.contractsSchema = exports.contractsMetaData = exports.ContractsTable = exports.Contracts = exports.inProcessTransportPair = exports.connectionContractTransport = exports.CONTRACT_REQUEST_CHANNEL = exports.CONTRACT_NOTIFY_CHANNEL = exports.verifyRemoteContractIdentity = exports.registerContractResolver = exports.isSelfTrustedContractCaller = exports.handleContractCall = exports.getContractResolver = exports.createUserContextContractProviderRouter = exports.createLocalUserContextContractProviderRouter = exports.authorizeRemoteContractCall = exports.validateContractActions = exports.sameUserContractPermissionCheck = exports.createRemoteContractConsumer = exports.createContractProviderSession = exports.createContractProviderEndpoint = exports.createContractProvider = exports.createContractConsumer = exports.CONTRACT_CALL_RPC = exports.authorizedContractActionNames = exports.contractProvidersSchema = exports.contractProvidersMetaData = exports.ContractProvidersTable = exports.ContractProviders = exports.createContractProviderRouter = exports.PackageBuilder = exports.definePackage = exports.ContractBuilder = void 0;
18
- exports.validateProviderSatisfiesContract = exports.validateImmutability = exports.validateAlsoImplements = exports.contractKey = exports.registerSystemContract = exports.listSystemContracts = exports.installSystemContracts = exports.TOOL_ACCESS_CONTROL_CONTRACT_VERSION = exports.getToolAccessControlContractDefinition = exports.schedulerProviderPackageId = exports.SCHEDULER_MAX_DELAY_MS = exports.SCHEDULER_CONTRACT_VERSION = exports.getSchedulerContractDefinition = exports.resolveLogsContract = exports.LOGS_CONTRACT_VERSION = exports.getLogsContractDefinition = exports.localFoldersProviderPackageId = exports.LOCAL_FOLDERS_RESERVED_DIR = exports.LOCAL_FOLDERS_READ_RANGE_MAX = exports.LOCAL_FOLDERS_JOB_TTL_MS = exports.LOCAL_FOLDERS_HAVE_BATCH = exports.LOCAL_FOLDERS_GETBLOCKS_MAX_BYTES = exports.LOCAL_FOLDERS_GETBLOCKS_MAX_BLOCKS = exports.LOCAL_FOLDERS_CONTRACT_VERSION = exports.LOCAL_FOLDERS_CHUNK_MIN = exports.LOCAL_FOLDERS_CHUNK_MAX = exports.LOCAL_FOLDERS_CHUNK_AVG = exports.LOCAL_FOLDERS_ASSEMBLE_STALL_MS = exports.getLocalFoldersContractDefinition = exports.INVITES_CONTRACT_VERSION = exports.getInvitesContractDefinition = exports.IDENTITY_CONTRACT_VERSION = exports.getIdentityContractDefinition = exports.httpProviderPackageId = exports.HTTP_MAX_TIMEOUT_MS = exports.HTTP_MAX_BODY_BYTES = exports.HTTP_DEFAULT_TIMEOUT_MS = exports.HTTP_CONTRACT_VERSION = exports.getHttpContractDefinition = exports.getDeviceOperationsContractDefinition = exports.deviceOperationsToolIds = exports.deviceOperationsProviderPackageId = exports.DEVICE_OPERATIONS_MAX_TOOLS = exports.DEVICE_OPERATIONS_MAX_ROWS = exports.DEVICE_OPERATIONS_MAX_RESULT_BYTES = exports.DEVICE_OPERATIONS_MAX_QUERY_LENGTH = exports.DEVICE_OPERATIONS_CONTRACT_VERSION = exports.getContractCatalogDefinition = void 0;
17
+ exports.resolveRemoteTargetEndpoint = exports.getRemoteContractTransportFactory = exports.createRemoteContractEndpoint = exports.ContractRegistry = exports.PersistentContractRegistry = exports.waitForHostContractTransport = exports.subscribeHostContractTransport = exports.registerHostContractTransport = exports.getHostContractTransport = exports.hostContractConsumer = exports.setSchemaToFieldsFn = exports.extractToolShape = exports.extractTableShape = exports.createLocalContractConsumer = exports.contractsSchema = exports.contractsMetaData = exports.ContractsTable = exports.Contracts = exports.inProcessTransportPair = exports.connectionContractTransport = exports.CONTRACT_REQUEST_CHANNEL = exports.CONTRACT_NOTIFY_CHANNEL = exports.verifyRemoteContractIdentity = exports.registerContractResolver = exports.isSelfTrustedContractCaller = exports.isLocalOnlyContractId = exports.handleContractCall = exports.getContractResolver = exports.createUserContextContractProviderRouter = exports.createLocalUserContextContractProviderRouter = exports.authorizeRemoteContractCall = exports.validateContractActions = exports.sameUserContractPermissionCheck = exports.requireWorkflowRunContext = exports.createRemoteContractConsumer = exports.createContractProviderSession = exports.createContractProviderEndpoint = exports.createContractProvider = exports.createContractConsumer = exports.CONTRACT_CALL_RPC = exports.authorizedContractActionNames = exports.contractProvidersSchema = exports.contractProvidersMetaData = exports.ContractProvidersTable = exports.ContractProviders = exports.RetiredContractProviderEndpointError = exports.createContractProviderRouter = exports.PackageBuilder = exports.definePackage = exports.ContractBuilder = void 0;
18
+ exports.validateAlsoImplements = exports.contractKey = exports.registerSystemContract = exports.listSystemContracts = exports.isSystemContractId = exports.installSystemContracts = exports.TOOL_ACCESS_CONTROL_CONTRACT_VERSION = exports.getToolAccessControlContractDefinition = exports.schedulerProviderPackageId = exports.SCHEDULER_MAX_DELAY_MS = exports.SCHEDULER_CONTRACT_VERSION = exports.getSchedulerContractDefinition = exports.resolveLogsContract = exports.LOGS_CONTRACT_VERSION = exports.getLogsContractDefinition = exports.localFoldersProviderPackageId = exports.LOCAL_FOLDERS_RESERVED_DIR = exports.LOCAL_FOLDERS_READ_RANGE_MAX = exports.LOCAL_FOLDERS_JOB_TTL_MS = exports.LOCAL_FOLDERS_HAVE_BATCH = exports.LOCAL_FOLDERS_GETBLOCKS_MAX_BYTES = exports.LOCAL_FOLDERS_GETBLOCKS_MAX_BLOCKS = exports.LOCAL_FOLDERS_CONTRACT_VERSION = exports.LOCAL_FOLDERS_CHUNK_MIN = exports.LOCAL_FOLDERS_CHUNK_MAX = exports.LOCAL_FOLDERS_CHUNK_AVG = exports.LOCAL_FOLDERS_ASSEMBLE_STALL_MS = exports.getLocalFoldersContractDefinition = exports.INVITES_CONTRACT_VERSION = exports.getInvitesContractDefinition = exports.IDENTITY_CONTRACT_VERSION = exports.getIdentityContractDefinition = exports.httpProviderPackageId = exports.HTTP_MAX_TIMEOUT_MS = exports.HTTP_MAX_BODY_BYTES = exports.HTTP_DEFAULT_TIMEOUT_MS = exports.HTTP_CONTRACT_VERSION = exports.getHttpContractDefinition = exports.getDeviceOperationsContractDefinition = exports.deviceOperationsToolIds = exports.deviceOperationsProviderPackageId = exports.DEVICE_OPERATIONS_MAX_TOOLS = exports.DEVICE_OPERATIONS_MAX_ROWS = exports.DEVICE_OPERATIONS_MAX_RESULT_BYTES = exports.DEVICE_OPERATIONS_MAX_QUERY_LENGTH = exports.DEVICE_OPERATIONS_CONTRACT_VERSION = exports.getContractCatalogDefinition = exports.contractCatalogProviderPackageId = exports.CONTRACT_CATALOG_VERSION = exports.setRemoteContractTransportFactory = void 0;
19
+ exports.validateProviderSatisfiesContract = exports.validateImmutability = void 0;
19
20
  __exportStar(require("./action-dispatch"), exports);
20
21
  var builder_1 = require("./builder");
21
22
  Object.defineProperty(exports, "ContractBuilder", { enumerable: true, get: function () { return builder_1.ContractBuilder; } });
@@ -23,6 +24,7 @@ Object.defineProperty(exports, "definePackage", { enumerable: true, get: functio
23
24
  Object.defineProperty(exports, "PackageBuilder", { enumerable: true, get: function () { return builder_1.PackageBuilder; } });
24
25
  var contract_provider_router_1 = require("./contract-provider-router");
25
26
  Object.defineProperty(exports, "createContractProviderRouter", { enumerable: true, get: function () { return contract_provider_router_1.createContractProviderRouter; } });
27
+ Object.defineProperty(exports, "RetiredContractProviderEndpointError", { enumerable: true, get: function () { return contract_provider_router_1.RetiredContractProviderEndpointError; } });
26
28
  var contract_providers_table_1 = require("./contract-providers.table");
27
29
  Object.defineProperty(exports, "ContractProviders", { enumerable: true, get: function () { return contract_providers_table_1.ContractProviders; } });
28
30
  Object.defineProperty(exports, "ContractProvidersTable", { enumerable: true, get: function () { return contract_providers_table_1.ContractProvidersTable; } });
@@ -36,6 +38,7 @@ Object.defineProperty(exports, "createContractProvider", { enumerable: true, get
36
38
  Object.defineProperty(exports, "createContractProviderEndpoint", { enumerable: true, get: function () { return contract_proxy_1.createContractProviderEndpoint; } });
37
39
  Object.defineProperty(exports, "createContractProviderSession", { enumerable: true, get: function () { return contract_proxy_1.createContractProviderSession; } });
38
40
  Object.defineProperty(exports, "createRemoteContractConsumer", { enumerable: true, get: function () { return contract_proxy_1.createRemoteContractConsumer; } });
41
+ Object.defineProperty(exports, "requireWorkflowRunContext", { enumerable: true, get: function () { return contract_proxy_1.requireWorkflowRunContext; } });
39
42
  Object.defineProperty(exports, "sameUserContractPermissionCheck", { enumerable: true, get: function () { return contract_proxy_1.sameUserContractPermissionCheck; } });
40
43
  Object.defineProperty(exports, "validateContractActions", { enumerable: true, get: function () { return contract_proxy_1.validateContractActions; } });
41
44
  var contract_resolvers_1 = require("./contract-resolvers");
@@ -44,6 +47,7 @@ Object.defineProperty(exports, "createLocalUserContextContractProviderRouter", {
44
47
  Object.defineProperty(exports, "createUserContextContractProviderRouter", { enumerable: true, get: function () { return contract_resolvers_1.createUserContextContractProviderRouter; } });
45
48
  Object.defineProperty(exports, "getContractResolver", { enumerable: true, get: function () { return contract_resolvers_1.getContractResolver; } });
46
49
  Object.defineProperty(exports, "handleContractCall", { enumerable: true, get: function () { return contract_resolvers_1.handleContractCall; } });
50
+ Object.defineProperty(exports, "isLocalOnlyContractId", { enumerable: true, get: function () { return contract_resolvers_1.isLocalOnlyContractId; } });
47
51
  Object.defineProperty(exports, "isSelfTrustedContractCaller", { enumerable: true, get: function () { return contract_resolvers_1.isSelfTrustedContractCaller; } });
48
52
  Object.defineProperty(exports, "registerContractResolver", { enumerable: true, get: function () { return contract_resolvers_1.registerContractResolver; } });
49
53
  Object.defineProperty(exports, "verifyRemoteContractIdentity", { enumerable: true, get: function () { return contract_resolvers_1.verifyRemoteContractIdentity; } });
@@ -83,6 +87,7 @@ var contract_catalog_contract_1 = require("./system/contract-catalog-contract");
83
87
  Object.defineProperty(exports, "CONTRACT_CATALOG_VERSION", { enumerable: true, get: function () { return contract_catalog_contract_1.CONTRACT_CATALOG_VERSION; } });
84
88
  Object.defineProperty(exports, "contractCatalogProviderPackageId", { enumerable: true, get: function () { return contract_catalog_contract_1.contractCatalogProviderPackageId; } });
85
89
  Object.defineProperty(exports, "getContractCatalogDefinition", { enumerable: true, get: function () { return contract_catalog_contract_1.getContractCatalogDefinition; } });
90
+ __exportStar(require("./system/desktop-tools-contract"), exports);
86
91
  var device_operations_contract_1 = require("./system/device-operations-contract");
87
92
  Object.defineProperty(exports, "DEVICE_OPERATIONS_CONTRACT_VERSION", { enumerable: true, get: function () { return device_operations_contract_1.DEVICE_OPERATIONS_CONTRACT_VERSION; } });
88
93
  Object.defineProperty(exports, "DEVICE_OPERATIONS_MAX_QUERY_LENGTH", { enumerable: true, get: function () { return device_operations_contract_1.DEVICE_OPERATIONS_MAX_QUERY_LENGTH; } });
@@ -92,6 +97,7 @@ Object.defineProperty(exports, "DEVICE_OPERATIONS_MAX_TOOLS", { enumerable: true
92
97
  Object.defineProperty(exports, "deviceOperationsProviderPackageId", { enumerable: true, get: function () { return device_operations_contract_1.deviceOperationsProviderPackageId; } });
93
98
  Object.defineProperty(exports, "deviceOperationsToolIds", { enumerable: true, get: function () { return device_operations_contract_1.deviceOperationsToolIds; } });
94
99
  Object.defineProperty(exports, "getDeviceOperationsContractDefinition", { enumerable: true, get: function () { return device_operations_contract_1.getDeviceOperationsContractDefinition; } });
100
+ __exportStar(require("./system/host-tools-contract"), exports);
95
101
  var http_contract_1 = require("./system/http-contract");
96
102
  Object.defineProperty(exports, "getHttpContractDefinition", { enumerable: true, get: function () { return http_contract_1.getHttpContractDefinition; } });
97
103
  Object.defineProperty(exports, "HTTP_CONTRACT_VERSION", { enumerable: true, get: function () { return http_contract_1.HTTP_CONTRACT_VERSION; } });
@@ -132,10 +138,16 @@ Object.defineProperty(exports, "schedulerProviderPackageId", { enumerable: true,
132
138
  var tool_access_control_contract_1 = require("./system/tool-access-control-contract");
133
139
  Object.defineProperty(exports, "getToolAccessControlContractDefinition", { enumerable: true, get: function () { return tool_access_control_contract_1.getToolAccessControlContractDefinition; } });
134
140
  Object.defineProperty(exports, "TOOL_ACCESS_CONTROL_CONTRACT_VERSION", { enumerable: true, get: function () { return tool_access_control_contract_1.TOOL_ACCESS_CONTROL_CONTRACT_VERSION; } });
141
+ __exportStar(require("./system/tool-catalog-contract"), exports);
135
142
  var system_contracts_1 = require("./system-contracts");
136
143
  Object.defineProperty(exports, "installSystemContracts", { enumerable: true, get: function () { return system_contracts_1.installSystemContracts; } });
144
+ Object.defineProperty(exports, "isSystemContractId", { enumerable: true, get: function () { return system_contracts_1.isSystemContractId; } });
137
145
  Object.defineProperty(exports, "listSystemContracts", { enumerable: true, get: function () { return system_contracts_1.listSystemContracts; } });
138
146
  Object.defineProperty(exports, "registerSystemContract", { enumerable: true, get: function () { return system_contracts_1.registerSystemContract; } });
147
+ __exportStar(require("./tool-catalog"), exports);
148
+ __exportStar(require("./tool-catalog-identity"), exports);
149
+ __exportStar(require("./tool-catalog-migrations"), exports);
150
+ __exportStar(require("./tool-catalog-service"), exports);
139
151
  var types_1 = require("./types");
140
152
  Object.defineProperty(exports, "contractKey", { enumerable: true, get: function () { return types_1.contractKey; } });
141
153
  var validate_1 = require("./validate");
@@ -1,3 +1,4 @@
1
+ import type { ToolCatalog } from "./tool-catalog";
1
2
  import type { IAlsoImplementsDeclaration, IConsumedContract, IContractDefinition, IValidationResult } from "./types";
2
3
  /**
3
4
  * One contract-provider registration in an atomic
@@ -15,6 +16,8 @@ export interface IContractProviderRegistration {
15
16
  * be added when the registry is integrated with the runtime install flow.
16
17
  */
17
18
  export declare class ContractRegistry {
19
+ /** Runtime-owned catalog bound to this context, shared with isolated providers. */
20
+ toolCatalog?: ToolCatalog;
18
21
  /** All known contract definitions, keyed by contractKey. */
19
22
  private definitions;
20
23
  /** Active provider for each contract, keyed by contractKey. */
@@ -9,6 +9,8 @@ const validate_1 = require("./validate");
9
9
  * be added when the registry is integrated with the runtime install flow.
10
10
  */
11
11
  class ContractRegistry {
12
+ /** Runtime-owned catalog bound to this context, shared with isolated providers. */
13
+ toolCatalog;
12
14
  /** All known contract definitions, keyed by contractKey. */
13
15
  definitions = new Map();
14
16
  /** Active provider for each contract, keyed by contractKey. */
@@ -0,0 +1,5 @@
1
+ import type { IContractDefinition } from "../types";
2
+ /** Version of the local-only Electron utilities contract. */
3
+ export declare const DESKTOP_TOOLS_CONTRACT_VERSION = 1;
4
+ /** Portable desktop shapes; only an Electron host supplies executable providers. */
5
+ export declare function getDesktopToolsContractDefinition(): IContractDefinition;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DESKTOP_TOOLS_CONTRACT_VERSION = void 0;
4
+ exports.getDesktopToolsContractDefinition = getDesktopToolsContractDefinition;
5
+ const system_ids_1 = require("../../system-ids");
6
+ const field_type_1 = require("../../types/field-type");
7
+ const system_contracts_1 = require("../system-contracts");
8
+ const field = (name, type, description, optional = false) => ({
9
+ name,
10
+ type,
11
+ description,
12
+ ...(optional ? { optional: true } : {}),
13
+ });
14
+ /** Version of the local-only Electron utilities contract. */
15
+ exports.DESKTOP_TOOLS_CONTRACT_VERSION = 1;
16
+ /** Portable desktop shapes; only an Electron host supplies executable providers. */
17
+ function getDesktopToolsContractDefinition() {
18
+ const simple = (name, usageDescription) => ({
19
+ name,
20
+ usageDescription,
21
+ inputFields: [],
22
+ outputFields: [],
23
+ });
24
+ return {
25
+ contractId: system_ids_1.desktopToolsContractId,
26
+ version: exports.DESKTOP_TOOLS_CONTRACT_VERSION,
27
+ devTag: "dev",
28
+ name: "System Desktop Tools",
29
+ description: "Local desktop directories, app version and package publishing.",
30
+ tables: [],
31
+ observables: [],
32
+ events: [],
33
+ tools: [
34
+ {
35
+ ...simple("cd", "Change the workflow and thread working directory."),
36
+ requiresWorkflowRun: true,
37
+ inputFields: [field("dirPath", field_type_1.FieldType.string, "Directory path")],
38
+ },
39
+ {
40
+ ...simple("send-notification", "Send an OS notification linked to the workflow thread."),
41
+ requiresWorkflowRun: true,
42
+ inputFields: [
43
+ field("title", field_type_1.FieldType.string, "Title"),
44
+ field("body", field_type_1.FieldType.string, "Body", true),
45
+ {
46
+ ...field("priority", field_type_1.FieldType.string, "low, normal, high or critical", true),
47
+ defaultValue: "normal",
48
+ },
49
+ ],
50
+ },
51
+ simple("get-user-home-directory", "Get the path to the user's home directory"),
52
+ simple("get-peers-data-directory", "Get the path to the directory where Peers stores its data"),
53
+ {
54
+ ...simple("open-directory-in-os", "Open a directory in the OS file UI. Omitting dirPath opens the root directory."),
55
+ inputFields: [field("dirPath", field_type_1.FieldType.string, "Path to the directory to show", true)],
56
+ },
57
+ simple("get-peers-packages-directory", "Get the path to the directory where Peers stores its packages"),
58
+ {
59
+ ...simple("describe-directory-contents", "Get files and subdirectories as a string"),
60
+ inputFields: [
61
+ field("dirPath", field_type_1.FieldType.string, "Path to describe"),
62
+ {
63
+ ...field("recurseDepth", field_type_1.FieldType.number, "Depth to recurse; defaults to 0", true),
64
+ defaultValue: 0,
65
+ },
66
+ ],
67
+ },
68
+ simple("app-version", "This tool returns the version of the app. Rarely used, but useful for debugging."),
69
+ {
70
+ ...simple("publish-package", "Build signed tarball and pointer JSON for manual upload. Requires the package signing key in the user's personal group."),
71
+ inputFields: [
72
+ field("packageId", field_type_1.FieldType.string, "Package ID; either packageId or name is required", true),
73
+ field("name", field_type_1.FieldType.string, "Exact package name", true),
74
+ field("localPath", field_type_1.FieldType.string, "Override package source path", true),
75
+ field("versionTag", field_type_1.FieldType.string, "Version tag; defaults to stable", true),
76
+ field("version", field_type_1.FieldType.string, "Override package.json version", true),
77
+ field("outputDir", field_type_1.FieldType.string, "Artifact directory; defaults to dist/publish", true),
78
+ ],
79
+ },
80
+ ],
81
+ };
82
+ }
83
+ (0, system_contracts_1.registerSystemContract)({
84
+ providerPackageId: system_ids_1.peersSystemPackageId,
85
+ contractId: system_ids_1.desktopToolsContractId,
86
+ version: exports.DESKTOP_TOOLS_CONTRACT_VERSION,
87
+ getDefinition: getDesktopToolsContractDefinition,
88
+ });
@@ -0,0 +1,5 @@
1
+ import type { IContractDefinition } from "../types";
2
+ /** Version of the local-only host utilities contract. */
3
+ export declare const HOST_TOOLS_CONTRACT_VERSION = 1;
4
+ /** Host utilities; implementations are bound by peers-device to the authorized context. */
5
+ export declare function getHostToolsContractDefinition(): IContractDefinition;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HOST_TOOLS_CONTRACT_VERSION = void 0;
4
+ exports.getHostToolsContractDefinition = getHostToolsContractDefinition;
5
+ const system_ids_1 = require("../../system-ids");
6
+ const field_type_1 = require("../../types/field-type");
7
+ const system_contracts_1 = require("../system-contracts");
8
+ const device_operations_contract_1 = require("./device-operations-contract");
9
+ const field = (name, type, description, optional = false) => ({
10
+ name,
11
+ type,
12
+ description,
13
+ ...(optional ? { optional: true } : {}),
14
+ });
15
+ /** Version of the local-only host utilities contract. */
16
+ exports.HOST_TOOLS_CONTRACT_VERSION = 1;
17
+ /** Host utilities; implementations are bound by peers-device to the authorized context. */
18
+ function getHostToolsContractDefinition() {
19
+ const query = (0, device_operations_contract_1.getDeviceOperationsContractDefinition)().tools.find((t) => t.name === "queryDatabase");
20
+ if (!query)
21
+ throw new Error("Missing Device Operations query definition");
22
+ return {
23
+ contractId: system_ids_1.hostToolsContractId,
24
+ version: exports.HOST_TOOLS_CONTRACT_VERSION,
25
+ devTag: "dev",
26
+ name: "System Host Tools",
27
+ description: "Local group creation and bounded database queries.",
28
+ tables: [],
29
+ observables: [],
30
+ events: [],
31
+ tools: [
32
+ {
33
+ name: "default_assistant_runner",
34
+ usageDescription: "Run an assistant through hosted inference.",
35
+ requiresWorkflowRun: true,
36
+ inputFields: [
37
+ field("workflowRunId", field_type_1.FieldType.string, "Workflow run ID"),
38
+ field("assistantId", field_type_1.FieldType.string, "Assistant ID"),
39
+ field("messageContent", field_type_1.FieldType.string, "Override message", true),
40
+ ],
41
+ outputFields: [field("response", field_type_1.FieldType.string, "Assistant response")],
42
+ },
43
+ {
44
+ name: "tool-search",
45
+ usageDescription: "Search workflow-invocable tools available to the current user.",
46
+ requiresWorkflowRun: true,
47
+ inputFields: [field("searchText", field_type_1.FieldType.string, "Search text, all or omitted", true)],
48
+ outputFields: [],
49
+ },
50
+ {
51
+ name: "create-group",
52
+ usageDescription: "Create a new group owned by the current user. Invite others afterwards with the Invites contract or peers groups invite.",
53
+ inputFields: [
54
+ field("name", field_type_1.FieldType.string, "Display name of the new group"),
55
+ field("description", field_type_1.FieldType.string, "Optional description", true),
56
+ field("iconClassName", field_type_1.FieldType.string, "Bootstrap icon class, e.g. bi-people-fill", true),
57
+ ],
58
+ outputFields: [field("groupId", field_type_1.FieldType.id, "Created group ID")],
59
+ },
60
+ {
61
+ name: "query-database",
62
+ usageDescription: "Run a bounded read-only SQL query against the current data context. Only one SELECT or approved PRAGMA is allowed (no writes, CTEs, or multiple statements). List tables with PRAGMA table_list or SELECT name FROM sqlite_master WHERE type='table'. Results are capped at 500 rows / 1MB and are not redacted.",
63
+ inputFields: [
64
+ field("query", field_type_1.FieldType.string, "One SELECT or approved read-only PRAGMA. List tables with PRAGMA table_list or SELECT name FROM sqlite_master WHERE type='table'."),
65
+ ],
66
+ outputFields: query.outputFields,
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ (0, system_contracts_1.registerSystemContract)({
72
+ providerPackageId: system_ids_1.peersSystemPackageId,
73
+ contractId: system_ids_1.hostToolsContractId,
74
+ version: exports.HOST_TOOLS_CONTRACT_VERSION,
75
+ getDefinition: getHostToolsContractDefinition,
76
+ });
@@ -17,3 +17,6 @@ export { getInvitesContractDefinition, type IAcceptInviteResult, type ICreatedIn
17
17
  export { getLogsContractDefinition, type ILogsConsumer, LOGS_CONTRACT_VERSION, resolveLogsContract, } from "./logs-contract";
18
18
  export * from "./network-contracts";
19
19
  export { getToolAccessControlContractDefinition, type IToolAccessControlConsumer, TOOL_ACCESS_CONTROL_CONTRACT_VERSION, } from "./tool-access-control-contract";
20
+ import "./tool-catalog-contract";
21
+ export * from "./desktop-tools-contract";
22
+ export * from "./host-tools-contract";
@@ -51,3 +51,6 @@ __exportStar(require("./network-contracts"), exports);
51
51
  var tool_access_control_contract_1 = require("./tool-access-control-contract");
52
52
  Object.defineProperty(exports, "getToolAccessControlContractDefinition", { enumerable: true, get: function () { return tool_access_control_contract_1.getToolAccessControlContractDefinition; } });
53
53
  Object.defineProperty(exports, "TOOL_ACCESS_CONTROL_CONTRACT_VERSION", { enumerable: true, get: function () { return tool_access_control_contract_1.TOOL_ACCESS_CONTROL_CONTRACT_VERSION; } });
54
+ require("./tool-catalog-contract");
55
+ __exportStar(require("./desktop-tools-contract"), exports);
56
+ __exportStar(require("./host-tools-contract"), exports);