skedyul 1.6.0 → 1.7.1

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.
@@ -1290,6 +1290,45 @@ var ModelDefinitionSchema = z8.object({
1290
1290
  page: z8.string().optional(),
1291
1291
  env: EnvSchemaSchema.optional()
1292
1292
  });
1293
+ var EntityFieldDefinitionSchema = z8.object({
1294
+ handle: z8.string(),
1295
+ label: z8.string(),
1296
+ description: z8.string().optional(),
1297
+ type: z8.enum([
1298
+ "string",
1299
+ "long_string",
1300
+ "number",
1301
+ "boolean",
1302
+ "date",
1303
+ "datetime",
1304
+ "object"
1305
+ ]).optional(),
1306
+ isUnique: z8.boolean().optional(),
1307
+ /** @deprecated Prefer isUnique */
1308
+ matchCandidate: z8.boolean().optional(),
1309
+ required: z8.boolean().optional(),
1310
+ options: z8.array(
1311
+ z8.union([
1312
+ z8.string(),
1313
+ z8.object({ value: z8.string(), label: z8.string() })
1314
+ ])
1315
+ ).optional()
1316
+ });
1317
+ var EntityRelationshipDefinitionSchema = z8.object({
1318
+ handle: z8.string(),
1319
+ label: z8.string(),
1320
+ targetEntity: z8.string().optional(),
1321
+ description: z8.string().optional()
1322
+ });
1323
+ var EntityDefinitionSchema = z8.object({
1324
+ handle: z8.string(),
1325
+ label: z8.string(),
1326
+ labelPlural: z8.string().optional(),
1327
+ description: z8.string().optional(),
1328
+ fields: z8.array(EntityFieldDefinitionSchema),
1329
+ contextFields: z8.array(EntityFieldDefinitionSchema).optional(),
1330
+ relationships: z8.array(EntityRelationshipDefinitionSchema).optional()
1331
+ });
1293
1332
  var RelationshipCardinalitySchema = z8.enum([
1294
1333
  "ONE_TO_ONE",
1295
1334
  "ONE_TO_MANY"
@@ -1706,16 +1745,10 @@ var ListBlockDefinitionSchema = z8.object({
1706
1745
  icon: z8.string().optional(),
1707
1746
  emptyMessage: z8.string().optional()
1708
1747
  });
1709
- var ModelMapperBlockDefinitionSchema = z8.object({
1710
- type: z8.literal("model_mapper"),
1711
- /** The SHARED model handle from install config (e.g., "client", "patient") */
1712
- model: z8.string()
1713
- });
1714
1748
  var PageBlockDefinitionSchema = z8.union([
1715
1749
  CardBlockDefinitionSchema,
1716
1750
  LegacyFormBlockDefinitionSchema,
1717
- ListBlockDefinitionSchema,
1718
- ModelMapperBlockDefinitionSchema
1751
+ ListBlockDefinitionSchema
1719
1752
  ]);
1720
1753
  var PageContextModeSchema = z8.enum(["first", "many", "count", "all"]).transform((val) => val === "all" ? "many" : val);
1721
1754
  var PageContextFiltersSchema = z8.record(
@@ -1854,17 +1887,35 @@ var InstallConfigSchema = z8.object({
1854
1887
  /** Relationship definitions between SHARED models */
1855
1888
  relationships: z8.array(RelationshipDefinitionSchema).optional()
1856
1889
  });
1890
+ var SetupStepKindSchema = z8.enum(["app", "crm", "realtime", "env"]);
1891
+ var SetupStepDefinitionSchema = z8.object({
1892
+ handle: z8.string(),
1893
+ label: z8.string(),
1894
+ description: z8.string().optional(),
1895
+ kind: SetupStepKindSchema,
1896
+ requires: z8.array(z8.string()).optional(),
1897
+ entities: z8.array(z8.string()).optional(),
1898
+ workflowHandles: z8.array(z8.string()).optional(),
1899
+ envKeys: z8.array(z8.string()).optional(),
1900
+ listenToCrm: z8.boolean().optional(),
1901
+ listenToEnv: z8.boolean().optional(),
1902
+ capabilities: z8.array(z8.string()).optional()
1903
+ });
1857
1904
  var ProvisionConfigSchema = z8.object({
1858
1905
  env: EnvSchemaSchema.optional(),
1859
1906
  /** INTERNAL model definitions (app-owned, not visible to users) */
1860
1907
  models: z8.array(ModelDefinitionSchema).optional(),
1908
+ /** App entity contracts for install-time CRM maps (not shared models) */
1909
+ entities: z8.array(EntityDefinitionSchema).optional(),
1861
1910
  /** Relationship definitions between INTERNAL models */
1862
1911
  relationships: z8.array(RelationshipDefinitionSchema).optional(),
1863
1912
  channels: z8.array(ChannelDefinitionSchema).optional(),
1864
1913
  workflows: z8.array(WorkflowDefinitionSchema).optional(),
1865
1914
  /** Base navigation configuration for all pages (can be overridden per page) */
1866
1915
  navigation: NavigationConfigSchema.optional(),
1867
- pages: z8.array(PageDefinitionSchema).optional()
1916
+ pages: z8.array(PageDefinitionSchema).optional(),
1917
+ /** Install setup checklist steps (opt-in) */
1918
+ setup: z8.array(SetupStepDefinitionSchema).optional()
1868
1919
  });
1869
1920
  var SkedyulConfigSchema = z8.object({
1870
1921
  name: z8.string(),
@@ -3513,6 +3564,47 @@ var report = {
3513
3564
  return data;
3514
3565
  }
3515
3566
  };
3567
+ var setup = {
3568
+ async list() {
3569
+ const { data } = await callCore("setup.list", {});
3570
+ return data;
3571
+ },
3572
+ async get(handle) {
3573
+ const { data } = await callCore("setup.get", {
3574
+ handle
3575
+ });
3576
+ return data;
3577
+ },
3578
+ async complete(handle, metadata) {
3579
+ const { data } = await callCore("setup.complete", {
3580
+ handle,
3581
+ ...metadata ? { metadata } : {}
3582
+ });
3583
+ return data;
3584
+ },
3585
+ async skip(handle, metadata) {
3586
+ const { data } = await callCore("setup.skip", {
3587
+ handle,
3588
+ ...metadata ? { metadata } : {}
3589
+ });
3590
+ return data;
3591
+ },
3592
+ async invalidate(handle, reason, metadata) {
3593
+ const { data } = await callCore("setup.invalidate", {
3594
+ handle,
3595
+ ...reason ? { reason } : {},
3596
+ ...metadata ? { metadata } : {}
3597
+ });
3598
+ return data;
3599
+ },
3600
+ async capabilities() {
3601
+ const { data } = await callCore(
3602
+ "setup.capabilities",
3603
+ {}
3604
+ );
3605
+ return data.capabilities;
3606
+ }
3607
+ };
3516
3608
 
3517
3609
  // src/ratelimit/context.ts
3518
3610
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
@@ -4547,6 +4639,72 @@ async function handleProvision(body, hooks) {
4547
4639
  }
4548
4640
  }
4549
4641
 
4642
+ // src/server/handlers/setup-revalidate-handler.ts
4643
+ async function handleSetupRevalidate(body, hooks) {
4644
+ const revalidateHook = hooks?.setup?.revalidate;
4645
+ if (!revalidateHook) {
4646
+ return {
4647
+ status: 404,
4648
+ body: { error: "Setup revalidate handler not configured" }
4649
+ };
4650
+ }
4651
+ if (!body.context?.appInstallationId || !body.context?.workplace || !body.context?.app || !body.reason || !Array.isArray(body.steps)) {
4652
+ return {
4653
+ status: 400,
4654
+ body: {
4655
+ error: {
4656
+ code: -32602,
4657
+ message: "Missing context (appInstallationId, workplace, app, reason, and steps required)"
4658
+ }
4659
+ }
4660
+ };
4661
+ }
4662
+ const ctx = {
4663
+ env: body.env ?? {},
4664
+ workplace: body.context.workplace,
4665
+ appInstallationId: body.context.appInstallationId,
4666
+ app: body.context.app,
4667
+ reason: body.reason,
4668
+ steps: body.steps,
4669
+ crm: body.crm,
4670
+ envChange: body.envChange,
4671
+ invocation: body.invocation,
4672
+ log: createContextLogger()
4673
+ };
4674
+ const requestConfig = {
4675
+ baseUrl: body.env?.SKEDYUL_API_URL ?? process.env.SKEDYUL_API_URL ?? "",
4676
+ apiToken: body.env?.SKEDYUL_API_TOKEN ?? process.env.SKEDYUL_API_TOKEN ?? ""
4677
+ };
4678
+ try {
4679
+ const handler = typeof revalidateHook === "function" ? revalidateHook : revalidateHook.handler;
4680
+ const result = await runWithLogContext(
4681
+ { invocation: body.invocation },
4682
+ async () => {
4683
+ return await runWithConfig(requestConfig, async () => {
4684
+ return await handler(ctx);
4685
+ });
4686
+ }
4687
+ );
4688
+ return {
4689
+ status: 200,
4690
+ body: {
4691
+ completed: result?.completed ?? [],
4692
+ invalidated: result?.invalidated ?? []
4693
+ }
4694
+ };
4695
+ } catch (err) {
4696
+ return {
4697
+ status: 500,
4698
+ body: {
4699
+ error: {
4700
+ code: -32603,
4701
+ message: err instanceof Error ? err.message : String(err ?? "")
4702
+ }
4703
+ }
4704
+ };
4705
+ }
4706
+ }
4707
+
4550
4708
  // src/server/handler-helpers.ts
4551
4709
  function parseHandlerEnvelope(parsedBody) {
4552
4710
  if (typeof parsedBody !== "object" || parsedBody === null || Array.isArray(parsedBody) || !("env" in parsedBody) || !("request" in parsedBody)) {
@@ -4933,6 +5091,14 @@ async function handleProvisionRoute(req, ctx) {
4933
5091
  const result = await handleProvision(parseResult.data, ctx.config.hooks);
4934
5092
  return { status: result.status, body: result.body };
4935
5093
  }
5094
+ async function handleSetupRevalidateRoute(req, ctx) {
5095
+ const parseResult = parseJsonBody(req);
5096
+ if (!parseResult.success) {
5097
+ return parseResult.error;
5098
+ }
5099
+ const result = await handleSetupRevalidate(parseResult.data, ctx.config.hooks);
5100
+ return { status: result.status, body: result.body };
5101
+ }
4936
5102
  async function handleOAuthCallbackRoute(req, ctx) {
4937
5103
  const parseResult = parseJsonBody(req);
4938
5104
  if (!parseResult.success) {
@@ -5294,6 +5460,9 @@ async function routeRequest(req, ctx) {
5294
5460
  if (req.path === "/provision" && req.method === "POST") {
5295
5461
  return handleProvisionRoute(req, ctx);
5296
5462
  }
5463
+ if (req.path === "/setup/revalidate" && req.method === "POST") {
5464
+ return handleSetupRevalidateRoute(req, ctx);
5465
+ }
5297
5466
  if (req.path === "/oauth_callback" && req.method === "POST") {
5298
5467
  return handleOAuthCallbackRoute(req, ctx);
5299
5468
  }
@@ -5748,6 +5917,9 @@ function defineConfig(config) {
5748
5917
  function defineModel(model) {
5749
5918
  return model;
5750
5919
  }
5920
+ function defineEntity(entity) {
5921
+ return entity;
5922
+ }
5751
5923
  function defineChannel(channel) {
5752
5924
  return channel;
5753
5925
  }
@@ -5766,6 +5938,9 @@ function defineEnv(env) {
5766
5938
  function defineNavigation(navigation) {
5767
5939
  return navigation;
5768
5940
  }
5941
+ function defineSetupStep(step) {
5942
+ return step;
5943
+ }
5769
5944
 
5770
5945
  // src/config/schema-loader.ts
5771
5946
  import * as fs4 from "fs";
@@ -8230,6 +8405,9 @@ export {
8230
8405
  DatePickerComponentDefinitionSchema,
8231
8406
  DayOfWeekSchema,
8232
8407
  EmptyFormComponentDefinitionSchema,
8408
+ EntityDefinitionSchema,
8409
+ EntityFieldDefinitionSchema,
8410
+ EntityRelationshipDefinitionSchema,
8233
8411
  EnvSchemaSchema,
8234
8412
  EnvVariableDefinitionSchema,
8235
8413
  EnvVisibilitySchema,
@@ -8300,7 +8478,6 @@ export {
8300
8478
  ModelDefinitionSchema,
8301
8479
  ModelDependencySchema,
8302
8480
  ModelFieldDefinitionSchema,
8303
- ModelMapperBlockDefinitionSchema,
8304
8481
  MoneyMinorRangeSchema,
8305
8482
  NavigationBreadcrumbSchema,
8306
8483
  NavigationConfigSchema,
@@ -8351,6 +8528,8 @@ export {
8351
8528
  SequencerContextError,
8352
8529
  SequencerLockError,
8353
8530
  SequencerNotFoundError,
8531
+ SetupStepDefinitionSchema,
8532
+ SetupStepKindSchema,
8354
8533
  SkedyulConfigSchema,
8355
8534
  SkillExampleSchema,
8356
8535
  SkillMetadataSchema,
@@ -8440,11 +8619,13 @@ export {
8440
8619
  defineAgent,
8441
8620
  defineChannel,
8442
8621
  defineConfig,
8622
+ defineEntity,
8443
8623
  defineEnv,
8444
8624
  defineModel,
8445
8625
  defineNavigation,
8446
8626
  definePage,
8447
8627
  defineSchema,
8628
+ defineSetupStep,
8448
8629
  defineSkill,
8449
8630
  defineWorkflow,
8450
8631
  defineWorkflowYAML,
@@ -8506,6 +8687,7 @@ export {
8506
8687
  allow as sequencerAllow,
8507
8688
  release as sequencerRelease,
8508
8689
  server,
8690
+ setup,
8509
8691
  toGsm7,
8510
8692
  token,
8511
8693
  validateCRMSchema,
package/dist/index.d.ts CHANGED
@@ -8,15 +8,15 @@ export { DEFAULT_DOCKERFILE } from './dockerfile';
8
8
  export { InstallError, MissingRequiredFieldError, AuthenticationError, InvalidConfigurationError, ConnectionError, AppAuthInvalidError, } from './errors';
9
9
  export type { InstallErrorCode } from './errors';
10
10
  export { z };
11
- export { workplace, communicationChannel, instance, token, file, webhook, cron, event, resource, ai, call, report, configure, getConfig, runWithConfig, createInstanceClient, } from './core/client';
12
- export type { InstanceClient, InstanceContext, InstanceData, InstanceEnv, InstanceWriteOptions, InstanceGetOptions, InstanceCreateManyItem, InstanceUpdateManyItem, InstanceMeta, InstancePagination, InstanceListResult, InstanceListArgs, FileInfo, FileUrlResponse, FileUploadParams, FileUploadResult, WebhookCreateResult, WebhookListItem, WebhookDeleteByNameOptions, WebhookListOptions, CallStartParams, CallStartResult, CallAppendTranscriptParams, CallEndParams, CallSummarizeResult, CronSubscribeParams, CronSubscribeResult, CronSubscriptionItem, CronListOptions, EventCreateResult, EventCreateOptions, ResourceLinkParams, ResourceLinkResult, AITextContent, AIFileContent, AIImageContent, AIMessageContent, AIMessage, GenerateObjectOptions, GenerateObjectResult, ReportGenerateParams, ReportGenerateResult, ReportDefineParams, ReportDefineResult, ReportListParams, ReportListItem, ReportListResult, ReportDefinition, } from './core/client';
11
+ export { workplace, communicationChannel, instance, token, file, webhook, cron, event, resource, ai, call, report, setup, configure, getConfig, runWithConfig, createInstanceClient, } from './core/client';
12
+ export type { InstanceClient, InstanceContext, InstanceData, InstanceEnv, InstanceWriteOptions, InstanceGetOptions, InstanceCreateManyItem, InstanceUpdateManyItem, InstanceMeta, InstancePagination, InstanceListResult, InstanceListArgs, FileInfo, FileUrlResponse, FileUploadParams, FileUploadResult, WebhookCreateResult, WebhookListItem, WebhookDeleteByNameOptions, WebhookListOptions, CallStartParams, CallStartResult, CallAppendTranscriptParams, CallEndParams, CallSummarizeResult, CronSubscribeParams, CronSubscribeResult, CronSubscriptionItem, CronListOptions, EventCreateResult, EventCreateOptions, ResourceLinkParams, ResourceLinkResult, AITextContent, AIFileContent, AIImageContent, AIMessageContent, AIMessage, GenerateObjectOptions, GenerateObjectResult, ReportGenerateParams, ReportGenerateResult, ReportDefineParams, ReportDefineResult, ReportListParams, ReportListItem, ReportListResult, ReportDefinition, SetupStepStatus, SetupStepKindApi, SetupStepView, SetupListResult, } from './core/client';
13
13
  export { createContextLogger } from './server/logger';
14
14
  export type { ContextLogger } from './server/logger';
15
15
  declare const _default: {
16
16
  z: typeof z;
17
17
  };
18
18
  export default _default;
19
- export { defineConfig, defineModel, defineChannel, definePage, defineWorkflow, defineAgent, defineEnv, defineNavigation, getAllEnvKeys, getRequiredInstallEnvKeys, } from './config';
19
+ export { defineConfig, defineModel, defineEntity, defineChannel, definePage, defineWorkflow, defineAgent, defineEnv, defineNavigation, defineSetupStep, getAllEnvKeys, getRequiredInstallEnvKeys, } from './config';
20
20
  export { queuedFetch, requeue, resolveQueue, createQueueHandle, queuedFetchResponse, registerQueueConfig, runWithRateLimitExecutionContext, getRateLimitExecutionContext, defaultShouldRetry, QueueContextError, QueueNotFoundError, QueuedFetchExhaustedError, RequeueOutsideContextError, RateLimitBackendError, RateLimitExceededError, } from './ratelimit';
21
21
  export type { QueueInput, QueueSelector, Lease, QueueLimits, ResolvedQueue, RateLimitExecutionContext, RateLimitBackend, QueueScope, QueueConfig, SerializableQueueConfig, QueueRegistry, } from './ratelimit';
22
22
  export { sequencer, allow as sequencerAllow, acquire as sequencerAcquire, release as sequencerRelease, resolveSequencer, createSequencerHandle, registerSequencerConfig, clearRegisteredSequencerConfig, getSequencerConfig, getSequencerDefinitions, resetSequencerBackendForTests, memorySequencerBackend, platformSequencerBackend, SequencerContextError, SequencerNotFoundError, SequencerBackendError, SequencerLockError, } from './sequencer';
@@ -35,7 +35,7 @@ export type { CRMContext, SenderContext, ThreadContextItem, ThreadInfo, SandboxC
35
35
  export { MemoryEntryTypeSchema, MemoryEntrySchema, WorkingMemoryConfigSchema, SemanticMemoryConfigSchema, ExternalMemoryConfigSchema, MemoryConfigSchema, MemoryScopeSchema, MemoryQueryOptionsSchema, ConversationSummarySchema, AgentObservationSchema, ExternalDataCacheSchema, MemoryService, InMemoryStore, createInMemoryService, } from './memory';
36
36
  export type { MemoryEntryType, MemoryEntry, WorkingMemoryConfig as MemoryWorkingConfig, SemanticMemoryConfig as MemorySemanticConfig, ExternalMemoryConfig as MemoryExternalConfig, MemoryConfig, MemoryScope, MemoryQueryOptions, ConversationSummary, AgentObservation, ExternalDataCache, MemoryStore, } from './memory';
37
37
  export type { CRMFieldType, CRMFieldRequirement, CRMFieldOption, CRMFieldDefinition, CRMFieldSchema, CRMModelSchema, CRMCardinality, CRMOnDelete, CRMRelationshipLink, CRMRelationshipSchema, CRMSchema, CRMSchemaValidationResult, } from './schemas';
38
- export type { SkedyulConfig, SerializableSkedyulConfig, InstallConfig, ProvisionConfig, BaseDefinition, Scope, FieldOwner, Visibility, ComputeLayer, StructuredFilter, FilterOperator, FilterCondition, FieldOption, EnvVariable, EnvSchema, FieldType, Cardinality, OnDelete, InlineFieldDefinition, FieldVisibility, FieldDefinition, ModelDefinition, RelationshipLink, RelationshipDefinition, CapabilityType, ChannelCapability, ChannelBatchCapability, ChannelFieldPermissions, ChannelField, ChannelDefinition, WorkflowActionInput, WorkflowAction, WorkflowDefinition, AgentDefinition, NavigationItem, NavigationSection, NavigationSidebar, BreadcrumbItem, NavigationBreadcrumb, NavigationConfig, ContextMode, ContextItemModel, ContextItemTool, ContextItem, ContextDefinition, FormStyleProps, ButtonVariant, ButtonSize, ButtonProps, RelationshipExtension, FormHeader, FormActionDefinition, ActionDefinition, ModalFormDefinition, InputComponent, TextareaComponent, SelectComponent, ComboboxComponent, CheckboxComponent, DatePickerComponent, TimePickerComponent, StatusIndicator, FieldSettingComponent, ImageSettingComponent, FileSettingComponent, ListItemTemplate, ListComponent, EmptyFormComponent, AlertComponent, FormComponent, FormLayoutColumn, FormLayoutRow, FormLayoutConfig, FormProps, CardHeader, CardBlock, ListBlock, ModelMapperBlock, BlockDefinition, PageType, PageDefinition, HttpMethod, WebhookRequest, WebhookHandlerContext, WebhookHandlerResponse, WebhookHandlerFn, WebhookHandlerDefinition, Webhooks, WebhookHandlerMetadata, ModelDependency, ChannelDependency, WorkflowDependency, ResourceDependency, } from './config';
38
+ export type { SkedyulConfig, SerializableSkedyulConfig, InstallConfig, ProvisionConfig, BaseDefinition, Scope, FieldOwner, Visibility, ComputeLayer, StructuredFilter, FilterOperator, FilterCondition, FieldOption, EnvVariable, EnvSchema, FieldType, Cardinality, OnDelete, InlineFieldDefinition, FieldVisibility, FieldDefinition, ModelDefinition, RelationshipLink, RelationshipDefinition, CapabilityType, ChannelCapability, ChannelBatchCapability, ChannelFieldPermissions, ChannelField, ChannelDefinition, WorkflowActionInput, WorkflowAction, WorkflowDefinition, AgentDefinition, NavigationItem, NavigationSection, NavigationSidebar, BreadcrumbItem, NavigationBreadcrumb, NavigationConfig, ContextMode, ContextItemModel, ContextItemTool, ContextItem, ContextDefinition, FormStyleProps, ButtonVariant, ButtonSize, ButtonProps, RelationshipExtension, FormHeader, FormActionDefinition, ActionDefinition, ModalFormDefinition, InputComponent, TextareaComponent, SelectComponent, ComboboxComponent, CheckboxComponent, DatePickerComponent, TimePickerComponent, StatusIndicator, FieldSettingComponent, ImageSettingComponent, FileSettingComponent, ListItemTemplate, ListComponent, EmptyFormComponent, AlertComponent, FormComponent, FormLayoutColumn, FormLayoutRow, FormLayoutConfig, FormProps, CardHeader, CardBlock, ListBlock, BlockDefinition, SetupStepDefinition, SetupStepKind, PageType, PageDefinition, HttpMethod, WebhookRequest, WebhookHandlerContext, WebhookHandlerResponse, WebhookHandlerFn, WebhookHandlerDefinition, Webhooks, WebhookHandlerMetadata, ModelDependency, ChannelDependency, WorkflowDependency, ResourceDependency, } from './config';
39
39
  export { compileAgent, compileWorkflow } from './compiler';
40
40
  export type { ValidationError, ValidationWarning, ResolvedPersona, ResolvedTool, EventConfig as CompilerEventConfig, IRMemoryConfig, PolicyConfig, IRRuntimeConfig, AgentIR, WorkflowStepIR, WorkflowIR, CompilationResult, } from './compiler';
41
41
  export { TimeStampSchema, DayOfWeekSchema, TimeWindowSlotSchema, WaitUnitSchema, WaitInputRelativeSchema, WaitInputAbsoluteSchema, WaitInputSchema, } from './scheduling/types';