@notionhq/apps 0.0.20 → 0.0.22

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 (45) hide show
  1. package/README.md +2 -1
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +2 -0
  5. package/dist/notion-as-code/custom-agent.d.ts +75 -1
  6. package/dist/notion-as-code/custom-agent.d.ts.map +1 -1
  7. package/dist/notion-as-code/custom-agent.js +11 -0
  8. package/dist/notion-as-code/custom-agent.test.d.ts +2 -0
  9. package/dist/notion-as-code/custom-agent.test.d.ts.map +1 -0
  10. package/dist/notion-as-code/database.d.ts +5 -1
  11. package/dist/notion-as-code/database.d.ts.map +1 -1
  12. package/dist/notion-as-code/database.js +3 -1
  13. package/dist/notion-as-code/index.d.ts +2 -2
  14. package/dist/notion-as-code/index.d.ts.map +1 -1
  15. package/dist/notion-as-code/intents.d.ts +133 -11
  16. package/dist/notion-as-code/intents.d.ts.map +1 -1
  17. package/dist/notion-as-code/notion-as-code-types.test.d.ts +2 -0
  18. package/dist/notion-as-code/notion-as-code-types.test.d.ts.map +1 -0
  19. package/dist/notion-as-code/page.d.ts +2 -2
  20. package/dist/notion-as-code/page.d.ts.map +1 -1
  21. package/dist/workflow-access.d.ts +29 -0
  22. package/dist/workflow-access.d.ts.map +1 -1
  23. package/dist/workflow-access.js +23 -0
  24. package/dist/workflow.d.ts +1 -0
  25. package/dist/workflow.d.ts.map +1 -1
  26. package/dist/workflow.js +2 -0
  27. package/docs/BUILD.md +1 -1
  28. package/package.json +1 -1
  29. package/skills/notion-as-code/SKILL.md +13 -7
  30. package/skills/workflow/SKILL.md +5 -5
  31. package/src/cli/build.test.ts +5 -0
  32. package/src/index.ts +1 -0
  33. package/src/notion-as-code/custom-agent.test.ts +79 -0
  34. package/src/notion-as-code/custom-agent.ts +111 -2
  35. package/src/notion-as-code/database.test.ts +38 -0
  36. package/src/notion-as-code/database.ts +7 -0
  37. package/src/notion-as-code/index.ts +39 -1
  38. package/src/notion-as-code/intents.ts +219 -24
  39. package/src/notion-as-code/notion-as-code-types.test.ts +167 -0
  40. package/src/notion-as-code/page.test.ts +24 -0
  41. package/src/notion-as-code/page.ts +2 -2
  42. package/src/workflow-access-types.test.ts +8 -4
  43. package/src/workflow-access.ts +41 -0
  44. package/src/workflow.test.ts +5 -4
  45. package/src/workflow.ts +1 -0
@@ -39,6 +39,7 @@ type WorkflowHandlerResult = {
39
39
  status: "success";
40
40
  } | WorkflowWaitUntilResult;
41
41
  export type { WorkflowAccess, WorkflowAccessAgentLevel, WorkflowAccessBindings, WorkflowAccessDeclaration, WorkflowAccessDeclarations, WorkflowAccessLevel, WorkflowAccessLevelFor, WorkflowAccessResource, WorkflowAccessResourceLevel, WorkflowAccessResourceType, WorkflowAccessRequirement, WorkflowAccessRequirements, WorkflowAccessValue, } from "./workflow-access.js";
42
+ export { access } from "./workflow-access.js";
42
43
  export type WorkflowEvent = WorkflowEventMap[keyof WorkflowEventMap];
43
44
  export type WorkflowEventForTrigger<T extends WorkflowTrigger> = WorkflowEventMap[T["type"]];
44
45
  export type WorkflowEventForTriggers<T extends readonly WorkflowTrigger[]> = WorkflowEventForTrigger<T[number]>;
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"}
package/dist/workflow.js CHANGED
@@ -18,6 +18,7 @@ import { readRunMetadata } from "./runtime-metadata.js";
18
18
  import { createWorkflowTriggers } from "./triggers.generated.js";
19
19
  import { createWorkflowStepState } from "./workflow-state.js";
20
20
  const MAX_WORKFLOW_WAIT_MS = 7 * 24 * 60 * 60 * 1e3;
21
+ import { access } from "./workflow-access.js";
21
22
  import {
22
23
  connections
23
24
  } from "./connections.js";
@@ -341,6 +342,7 @@ function isNodeError(error) {
341
342
  return error instanceof Error && "code" in error;
342
343
  }
343
344
  export {
345
+ access,
344
346
  connections,
345
347
  workflow
346
348
  };
package/docs/BUILD.md CHANGED
@@ -209,7 +209,7 @@ resources may already have changed when a deployment fails.
209
209
 
210
210
  ## Workflow access
211
211
 
212
- `workflow({ access: { handbook: { resource: handbook, level: "view" } }, ... })`
212
+ `workflow({ access: { handbook: access.view(handbook) }, ... })`
213
213
  declares access to a NaC resource and a named runtime binding. The manifest
214
214
  contains only the alias and its symbolic `{ type, resourceId, level }`
215
215
  requirement; live IDs are not build output.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@notionhq/apps",
3
- "version": "0.0.20",
3
+ "version": "0.0.22",
4
4
  "description": "An SDK for building workflow apps for Notion",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -25,7 +25,8 @@ are shared across capabilities or do not have a natural capability owner. Module
25
25
  evaluation must work without credentials or network access.
26
26
 
27
27
  To configure a workflow's access to a declared page, database, data source, or
28
- custom agent, pass its handle in `access: { alias: { resource: handle, level } }`.
28
+ custom agent, use the matching helper, such as
29
+ `access: { guide: access.view(guide), analyst: access.call(analyst) }`.
29
30
  The handler receives the live identity as `context.access.alias.id`; importing
30
31
  a declaration alone does not request access. See the
31
32
  [workflow skill](../workflow/SKILL.md#resources-created-with-the-app) for levels
@@ -124,12 +125,17 @@ use `{ type: "resourceId", resourceId: parent.resourceId }`; child helpers set
124
125
  this reference for you. Pages and databases without a parent default to private
125
126
  top-level resources in the Apps workspace.
126
127
 
127
- Several fields, including database covers and custom-agent triggers,
128
- still have incomplete types. A field typed as `unknown` is not proof
129
- that any payload is supported. Check implementation and examples before using
130
- it; do not assume parity with other Notion as Code packages. Database views are
131
- typed with `ViewSchema`; standalone declarations accept `ViewArgs`, which adds
132
- the owning `databaseResourceId`.
128
+ Page and database covers accept `{ type: "url", url, position? }`. Custom-agent
129
+ triggers are discriminated unions for recurrence, page-added, and
130
+ property-updated triggers. Weekly recurrences require at least one weekday, and
131
+ property-updated triggers require property conditions or
132
+ `triggerWhenPageContentEdited: true`.
133
+
134
+ Database page layouts are typed against their keyed data-source schema. Reference
135
+ property resource IDs, not schema keys. The SDK restricts relation groups to
136
+ relation properties and narrows standalone property styles by property type.
137
+ Database views are typed with `ViewSchema`; standalone declarations accept
138
+ `ViewArgs`, which adds the owning `databaseResourceId`.
133
139
 
134
140
  The Apps SDK exposes a subset of Notion as Code. Data sources are nested inside
135
141
  `database(resourceId, { datasources: { ... } })`, not declared by a separate
@@ -132,7 +132,7 @@ export const guide = page({
132
132
  Import the handle into the workflow and declare the named binding it needs:
133
133
 
134
134
  ```ts
135
- import { workflow } from "@notionhq/apps";
135
+ import { access, workflow } from "@notionhq/apps";
136
136
  import { triggers } from "@notionhq/apps/triggers";
137
137
 
138
138
  import { guide } from "./sayHello/lib/notion.js";
@@ -141,7 +141,7 @@ export default workflow({
141
141
  name: "Read guide",
142
142
  description: "Reads the App's guide on a recurring schedule.",
143
143
  triggers: [triggers.scheduled()],
144
- access: { guide: { resource: guide, level: "view" } },
144
+ access: { guide: access.view(guide) },
145
145
  handler: async (_event, context) => {
146
146
  await context.step("Read guide", () =>
147
147
  context.notion.pages.retrieve({ page_id: context.access.guide.id }),
@@ -155,9 +155,9 @@ declarations in `access` work too. Importing a declaration alone provisions the
155
155
  resource but does not create a `context.access` alias. An `access` entry declares
156
156
  the needed permission level and a named binding for that NaC resource.
157
157
 
158
- `access` accepts page, database, data-source, and custom-agent handles. Pages,
159
- databases, and data sources support `view`, `comment`, `edit`, and `fullAccess`;
160
- custom agents support only `call`. Keys are workflow-local aliases. The handler's
158
+ `access.view()`, `access.comment()`, `access.edit()`, and `access.fullAccess()`
159
+ accept page, database, and data-source handles. `access.call()` accepts custom-agent
160
+ handles. Keys are workflow-local aliases. The handler's
161
161
  typed `context.access` exposes each declared alias as a readonly `{ type, id }`,
162
162
  not the declaration handle or a permission-management API. UI-granted resources
163
163
  are permissions only: they do not create `context.access` aliases.
@@ -217,6 +217,11 @@ describe("buildApp", () => {
217
217
  access: {
218
218
  home: { type: "page", resourceId: "home", level: "view" },
219
219
  records: { type: "database", resourceId: "records", level: "edit" },
220
+ fullRecords: {
221
+ type: "database",
222
+ resourceId: "records",
223
+ level: "fullAccess",
224
+ },
220
225
  source: {
221
226
  type: "dataSource",
222
227
  resourceId: "records-source",
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ export { teamspace } from "./notion-as-code/teamspace.js";
6
6
  export { view } from "./notion-as-code/view.js";
7
7
  export { sync } from "./sync.js";
8
8
  export {
9
+ access,
9
10
  workflow,
10
11
  type Workflow,
11
12
  type WorkflowAccess,
@@ -0,0 +1,79 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import { notion } from "./index.js";
4
+ import { finishMetadataRecording, startMetadataRecording } from "./recorder.js";
5
+
6
+ describe("Notion-as-Code custom agent declarations", () => {
7
+ it("records typed recurrence and database triggers", () => {
8
+ const recorder = startMetadataRecording();
9
+
10
+ notion.customAgent({
11
+ resourceId: "triage-agent",
12
+ name: "Triage agent",
13
+ triggers: [
14
+ {
15
+ type: "recurrence",
16
+ resourceId: "weekday-trigger",
17
+ frequency: "week",
18
+ interval: 1,
19
+ start: "2026-09-21T09:00:00",
20
+ timeZone: "America/Los_Angeles",
21
+ weekdays: { MO: true, FR: true },
22
+ },
23
+ {
24
+ type: "property_updated",
25
+ resourceId: "task-update-trigger",
26
+ dataSourceResourceId: "tasks",
27
+ propertyConditions: {
28
+ status: { type: "property_edited" },
29
+ },
30
+ triggerWhenPageContentEdited: true,
31
+ },
32
+ ],
33
+ });
34
+
35
+ expect(finishMetadataRecording(recorder).intents).toEqual([
36
+ {
37
+ type: "custom_agent",
38
+ resourceId: "triage-agent",
39
+ name: "Triage agent",
40
+ triggers: [
41
+ {
42
+ type: "recurrence",
43
+ resourceId: "weekday-trigger",
44
+ frequency: "week",
45
+ interval: 1,
46
+ start: "2026-09-21T09:00:00",
47
+ timeZone: "America/Los_Angeles",
48
+ weekdays: { MO: true, FR: true },
49
+ },
50
+ {
51
+ type: "property_updated",
52
+ resourceId: "task-update-trigger",
53
+ dataSourceResourceId: "tasks",
54
+ propertyConditions: {
55
+ status: { type: "property_edited" },
56
+ },
57
+ triggerWhenPageContentEdited: true,
58
+ },
59
+ ],
60
+ },
61
+ ]);
62
+ });
63
+
64
+ it("rejects reserved resource IDs inside triggers", () => {
65
+ expect(() =>
66
+ notion.customAgent({
67
+ resourceId: "triage-agent",
68
+ name: "Triage agent",
69
+ triggers: [
70
+ {
71
+ type: "page_added",
72
+ resourceId: "__notion_apps_trigger",
73
+ dataSourceResourceId: "tasks",
74
+ },
75
+ ],
76
+ }),
77
+ ).toThrow("reserved");
78
+ });
79
+ });
@@ -2,6 +2,105 @@ import type { CustomAgentIntent, NotionAsCodeIcon, ResourceId } from "./intents.
2
2
  import { recordIntent } from "./recorder.js";
3
3
  import { assertUserResourceId } from "./resource.js";
4
4
 
5
+ type RecurrenceWeekday = "MO" | "TU" | "WE" | "TH" | "FR" | "SA" | "SU";
6
+
7
+ /** A nonempty selection of weekdays for a weekly recurrence. */
8
+ export type RecurrenceWeekdays = {
9
+ [Day in RecurrenceWeekday]?: true;
10
+ } & {
11
+ [Day in RecurrenceWeekday]: Required<Pick<Record<RecurrenceWeekday, true>, Day>>;
12
+ }[RecurrenceWeekday];
13
+
14
+ export type MonthlyWeekdayOccurrence = "1st" | "2nd" | "3rd" | "4th" | "last";
15
+
16
+ export type MonthlyRecurrenceRestriction =
17
+ | { type: "day_of_month"; day: number }
18
+ | {
19
+ type: "weekday_of_month";
20
+ weekday: RecurrenceWeekday;
21
+ occurrence: MonthlyWeekdayOccurrence;
22
+ };
23
+
24
+ export type RecurrenceScheduleEnd =
25
+ | { type: "date"; endsAt: string }
26
+ | { type: "occurrences"; count: number };
27
+
28
+ type RecurrenceScheduleBase = {
29
+ interval: number;
30
+ start: string;
31
+ timeZone: string;
32
+ end?: RecurrenceScheduleEnd;
33
+ };
34
+
35
+ export type HourlyRecurrenceSchedule = RecurrenceScheduleBase & {
36
+ frequency: "hour";
37
+ };
38
+
39
+ export type DailyRecurrenceSchedule = RecurrenceScheduleBase & {
40
+ frequency: "day";
41
+ };
42
+
43
+ export type WeeklyRecurrenceSchedule = RecurrenceScheduleBase & {
44
+ frequency: "week";
45
+ weekdays: RecurrenceWeekdays;
46
+ };
47
+
48
+ export type MonthlyRecurrenceSchedule = RecurrenceScheduleBase & {
49
+ frequency: "month";
50
+ monthlyRestriction: MonthlyRecurrenceRestriction;
51
+ };
52
+
53
+ export type YearlyRecurrenceSchedule = RecurrenceScheduleBase & {
54
+ frequency: "year";
55
+ };
56
+
57
+ export type CustomAgentRecurrenceSchedule = (
58
+ | HourlyRecurrenceSchedule
59
+ | DailyRecurrenceSchedule
60
+ | WeeklyRecurrenceSchedule
61
+ | MonthlyRecurrenceSchedule
62
+ | YearlyRecurrenceSchedule
63
+ ) & {
64
+ type: "recurrence";
65
+ };
66
+
67
+ export type CustomAgentTriggerBase = {
68
+ resourceId: ResourceId;
69
+ enabled?: boolean;
70
+ };
71
+
72
+ export type CustomAgentRecurrenceTrigger = CustomAgentTriggerBase & CustomAgentRecurrenceSchedule;
73
+
74
+ export type PropertyTriggerCondition = {
75
+ type: "property_edited";
76
+ };
77
+
78
+ export type CustomAgentPageAddedTrigger = CustomAgentTriggerBase & {
79
+ type: "page_added";
80
+ dataSourceResourceId: ResourceId;
81
+ };
82
+
83
+ type PropertyUpdatedTriggerTarget =
84
+ | {
85
+ propertyConditions: Readonly<Record<ResourceId, PropertyTriggerCondition>>;
86
+ triggerWhenPageContentEdited?: boolean;
87
+ }
88
+ | {
89
+ propertyConditions?: never;
90
+ triggerWhenPageContentEdited: true;
91
+ };
92
+
93
+ export type CustomAgentPropertyUpdatedTrigger = CustomAgentTriggerBase &
94
+ PropertyUpdatedTriggerTarget & {
95
+ type: "property_updated";
96
+ dataSourceResourceId: ResourceId;
97
+ };
98
+
99
+ export type CustomAgentTrigger =
100
+ | CustomAgentRecurrenceTrigger
101
+ | CustomAgentPageAddedTrigger
102
+ | CustomAgentPropertyUpdatedTrigger;
103
+
5
104
  export type CustomAgentArgs = {
6
105
  resourceId: ResourceId;
7
106
  name: string;
@@ -9,8 +108,7 @@ export type CustomAgentArgs = {
9
108
  instructions?: string;
10
109
  model?: "ambrosia-tart-high" | "opal-quince-medium" | "almond-croissant-low";
11
110
  sharedResources?: readonly ResourceId[];
12
- // TODO: Port custom agent trigger types.
13
- triggers?: readonly unknown[];
111
+ triggers?: readonly CustomAgentTrigger[];
14
112
  };
15
113
 
16
114
  export type CustomAgentHandle = {
@@ -24,6 +122,17 @@ export function customAgent(args: CustomAgentArgs): CustomAgentHandle {
24
122
  for (const resourceId of args.sharedResources ?? []) {
25
123
  assertUserResourceId(resourceId);
26
124
  }
125
+ for (const trigger of args.triggers ?? []) {
126
+ assertUserResourceId(trigger.resourceId);
127
+ if (trigger.type === "page_added" || trigger.type === "property_updated") {
128
+ assertUserResourceId(trigger.dataSourceResourceId);
129
+ }
130
+ if (trigger.type === "property_updated") {
131
+ for (const propertyResourceId of Object.keys(trigger.propertyConditions ?? {})) {
132
+ assertUserResourceId(propertyResourceId);
133
+ }
134
+ }
135
+ }
27
136
  recordIntent({ type: "custom_agent", ...args } satisfies {
28
137
  type: "custom_agent";
29
138
  } & CustomAgentIntent);
@@ -8,6 +8,44 @@ import { APPS_WORKSPACE_RESOURCE_ID } from "./intents.js";
8
8
  import { finishMetadataRecording, startMetadataRecording } from "./recorder.js";
9
9
 
10
10
  describe("Notion-as-Code database declarations", () => {
11
+ it("records a single-source page layout on the data source", () => {
12
+ const recorder = startMetadataRecording();
13
+
14
+ notion.database("layout-database", {
15
+ dataSourceResourceId: "layout-source",
16
+ name: "Tasks",
17
+ schema: {
18
+ Name: { type: "title", resourceId: "name" },
19
+ Estimate: { type: "number", resourceId: "estimate" },
20
+ },
21
+ pageLayout: {
22
+ main: [
23
+ { type: "properties", properties: [{ property: "name" }] },
24
+ { type: "property", property: "estimate", style: "large" },
25
+ ],
26
+ pinnedProperties: ["estimate"],
27
+ },
28
+ });
29
+
30
+ expect(finishMetadataRecording(recorder).intents).toEqual([
31
+ expect.objectContaining({
32
+ resourceId: "layout-database",
33
+ dataSources: [
34
+ expect.objectContaining({
35
+ resourceId: "layout-source",
36
+ pageLayout: {
37
+ main: [
38
+ { type: "properties", properties: [{ property: "name" }] },
39
+ { type: "property", property: "estimate", style: "large" },
40
+ ],
41
+ pinnedProperties: ["estimate"],
42
+ },
43
+ }),
44
+ ],
45
+ }),
46
+ ]);
47
+ });
48
+
11
49
  it("converts the single-source form with keyed schemas and resolved property names", () => {
12
50
  const recorder = startMetadataRecording();
13
51
  const schema = {
@@ -2,6 +2,7 @@ import type { Database } from "../database.js";
2
2
  import {
3
3
  APPS_WORKSPACE_RESOURCE_ID,
4
4
  type DatabaseIntent,
5
+ type DatabasePageLayout,
5
6
  type DataSourceDefinition,
6
7
  type NotionAsCodeIcon,
7
8
  type NotionAsCodeProperty,
@@ -26,6 +27,7 @@ export type DataSourceArgs<Schema extends NotionAsCodeSchema = NotionAsCodeSchem
26
27
  name?: never;
27
28
  schema: Schema;
28
29
  icon?: NotionAsCodeIcon;
30
+ pageLayout?: DatabasePageLayout<Schema>;
29
31
  };
30
32
 
31
33
  /** Data sources keyed by the names used to access their handles. */
@@ -42,6 +44,7 @@ type SingleSourceDatabaseOptions<Schema extends NotionAsCodeSchema = NotionAsCod
42
44
  dataSourceResourceId: ResourceId;
43
45
  name: string;
44
46
  schema: Schema;
47
+ pageLayout?: DatabasePageLayout<Schema>;
45
48
  datasources?: never;
46
49
  };
47
50
 
@@ -61,6 +64,7 @@ type MultiSourceDatabaseOptions<DataSources extends DataSourceMap = DataSourceMa
61
64
  datasources: DataSources;
62
65
  dataSourceResourceId?: never;
63
66
  schema?: never;
67
+ pageLayout?: never;
64
68
  } & (keyof NoInfer<DataSources> extends never
65
69
  ? { views: NonEmptyViewSchemas }
66
70
  : { views?: readonly ViewSchema[] });
@@ -76,6 +80,7 @@ type ViewOnlyDatabaseOptions = DatabaseMetadata & {
76
80
  datasources?: never;
77
81
  dataSourceResourceId?: never;
78
82
  schema?: never;
83
+ pageLayout?: never;
79
84
  views: NonEmptyViewSchemas;
80
85
  };
81
86
 
@@ -255,6 +260,7 @@ function buildDatabaseHandle(
255
260
  resourceId: args.dataSourceResourceId,
256
261
  name: args.name,
257
262
  properties: normalizeProperties(args.schema),
263
+ ...(args.pageLayout === undefined ? {} : { pageLayout: args.pageLayout }),
258
264
  };
259
265
  const handle = recordDatabase(databaseResourceId, args, parent, [
260
266
  { key: "dataSource", schema: args.schema, definition: source },
@@ -295,6 +301,7 @@ function normalizeDatabaseMetadata(args: DatabaseArgs): DatabaseMetadata {
295
301
  schema: _schema,
296
302
  datasources: _datasources,
297
303
  dataSourceResourceId: _dataSourceResourceId,
304
+ pageLayout: _pageLayout,
298
305
  ...metadata
299
306
  } = args;
300
307
  return metadata;
@@ -2,6 +2,9 @@ import { createNotion } from "./handles.js";
2
2
 
3
3
  export { APPS_RESERVED_RESOURCE_ID_PREFIX, APPS_WORKSPACE_RESOURCE_ID } from "./intents.js";
4
4
  export type {
5
+ ContentPageLayoutTab,
6
+ DatabasePageLayout,
7
+ DatabasePageLayoutTab,
5
8
  DatabaseIntent,
6
9
  DataSourceDefinition,
7
10
  NotionAsCodeIcon,
@@ -10,10 +13,45 @@ export type {
10
13
  NotionAsCodeSchema,
11
14
  NotionAsCodeSelectOption,
12
15
  NotionAsCodeStatusOption,
16
+ PageCoverReference,
17
+ PageLayoutMainModule,
18
+ PageLayoutNumberAndFormulaStyle,
19
+ PageLayoutPersonStyle,
20
+ PageLayoutPropertiesModule,
21
+ PageLayoutPropertyConfig,
22
+ PageLayoutPropertyModule,
23
+ PageLayoutPropertySection,
24
+ PageLayoutRelationConfig,
25
+ PageLayoutRelationsGroupModule,
26
+ PageLayoutSidebarModule,
13
27
  Parent,
14
28
  ResourceId,
29
+ RollupBaseAggregationType,
30
+ RollupDateAggregationType,
31
+ RollupNumberAggregationType,
32
+ RollupTargetPropertyType,
33
+ ViewPageLayoutTab,
15
34
  } from "./intents.js";
16
- export type { CustomAgentArgs, CustomAgentHandle } from "./custom-agent.js";
35
+ export type {
36
+ CustomAgentArgs,
37
+ CustomAgentHandle,
38
+ CustomAgentPageAddedTrigger,
39
+ CustomAgentPropertyUpdatedTrigger,
40
+ CustomAgentRecurrenceSchedule,
41
+ CustomAgentRecurrenceTrigger,
42
+ CustomAgentTrigger,
43
+ CustomAgentTriggerBase,
44
+ DailyRecurrenceSchedule,
45
+ HourlyRecurrenceSchedule,
46
+ MonthlyRecurrenceRestriction,
47
+ MonthlyRecurrenceSchedule,
48
+ MonthlyWeekdayOccurrence,
49
+ PropertyTriggerCondition,
50
+ RecurrenceScheduleEnd,
51
+ RecurrenceWeekdays,
52
+ WeeklyRecurrenceSchedule,
53
+ YearlyRecurrenceSchedule,
54
+ } from "./custom-agent.js";
17
55
  export type {
18
56
  ChildDatabaseArgs,
19
57
  ChildDatabaseFactory,