@auxx/sdk 0.0.13 → 0.0.15

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 (54) hide show
  1. package/lib/api/api.js +2 -1
  2. package/lib/api/schemas.js +3 -0
  3. package/lib/auth/auth.js +3 -0
  4. package/lib/commands/build/validate-typescript.js +33 -2
  5. package/lib/commands/build.js +3 -26
  6. package/lib/commands/dev.js +2 -0
  7. package/lib/commands/version/create/bundle-javascript.js +7 -1
  8. package/lib/commands/version/create.js +35 -2
  9. package/lib/constants/app-fields-files.js +1 -0
  10. package/lib/env.js +1 -0
  11. package/lib/root/app.d.ts +2 -0
  12. package/lib/root/app.d.ts.map +1 -1
  13. package/lib/root/fields/define-field.d.ts +67 -0
  14. package/lib/root/fields/define-field.d.ts.map +1 -0
  15. package/lib/root/fields/define-field.js +21 -0
  16. package/lib/root/fields/field-types.d.ts +47 -0
  17. package/lib/root/fields/field-types.d.ts.map +1 -0
  18. package/lib/root/fields/field-types.js +25 -0
  19. package/lib/root/fields/index.d.ts +3 -0
  20. package/lib/root/fields/index.d.ts.map +1 -0
  21. package/lib/root/fields/index.js +2 -0
  22. package/lib/root/index.d.ts +1 -0
  23. package/lib/root/index.d.ts.map +1 -1
  24. package/lib/root/index.js +1 -0
  25. package/lib/root/tools/define-tool.d.ts.map +1 -1
  26. package/lib/root/tools/define-tool.js +14 -0
  27. package/lib/root/tools/types.d.ts +16 -22
  28. package/lib/root/tools/types.d.ts.map +1 -1
  29. package/lib/root/workflow/types.d.ts +1 -0
  30. package/lib/root/workflow/types.d.ts.map +1 -1
  31. package/lib/runtime/workflow.js +2 -2
  32. package/lib/server/connections.d.ts +4 -0
  33. package/lib/server/connections.d.ts.map +1 -1
  34. package/lib/server/entities.d.ts +44 -0
  35. package/lib/server/entities.d.ts.map +1 -0
  36. package/lib/server/entities.js +3 -0
  37. package/lib/server/index.d.ts +2 -1
  38. package/lib/server/index.d.ts.map +1 -1
  39. package/lib/server/storage.d.ts +30 -3
  40. package/lib/server/storage.d.ts.map +1 -1
  41. package/lib/shared/errors.d.ts +30 -0
  42. package/lib/shared/errors.d.ts.map +1 -1
  43. package/lib/shared/errors.js +48 -0
  44. package/lib/shared/index.d.ts +1 -1
  45. package/lib/shared/index.d.ts.map +1 -1
  46. package/lib/shared/index.js +1 -1
  47. package/lib/util/add-auxx-hidden-directory-to-ts-config.js +6 -2
  48. package/lib/util/compile-and-extract-catalog.js +40 -1
  49. package/lib/util/ensure-app-fields-types.js +26 -0
  50. package/lib/util/generate-app-fields-types.js +63 -0
  51. package/lib/util/warn-if-app-type-annotated.js +9 -0
  52. package/package.json +5 -1
  53. package/template/src/events/connection-added.event.ts +17 -2
  54. package/template/tsconfig.json +1 -1
package/lib/api/api.js CHANGED
@@ -123,7 +123,7 @@ class ApiImpl {
123
123
  }
124
124
  return complete(result.value);
125
125
  }
126
- async createDeployment({ appId, clientBundleSha, serverBundleSha, deploymentType, settingsSchema, catalog, targetOrganizationId, environmentVariables, version, metadata, }) {
126
+ async createDeployment({ appId, clientBundleSha, serverBundleSha, deploymentType, settingsSchema, catalog, targetOrganizationId, environmentVariables, version, metadata, publish, }) {
127
127
  const result = await this.fetcher.post({
128
128
  path: `/api/v1/apps/${appId}/deployments`,
129
129
  body: {
@@ -136,6 +136,7 @@ class ApiImpl {
136
136
  environmentVariables,
137
137
  version,
138
138
  metadata,
139
+ publish,
139
140
  },
140
141
  schema: createDeploymentResponseSchema,
141
142
  });
@@ -69,6 +69,9 @@ export const confirmBundlesResponseSchema = z.object({
69
69
  export const createDeploymentResponseSchema = z.object({
70
70
  deploymentId: z.string(),
71
71
  version: z.string().nullable(),
72
+ status: z.string().optional(),
73
+ publishError: z.string().optional(),
74
+ unchanged: z.boolean().optional(),
72
75
  });
73
76
  export const deploymentSchema = z.object({
74
77
  id: z.string(),
package/lib/auth/auth.js CHANGED
@@ -14,6 +14,9 @@ class Authenticator {
14
14
  isRefreshingToken = false;
15
15
  refreshTimeout = null;
16
16
  async ensureAuthed() {
17
+ if (process.env.AUXX_API_KEY) {
18
+ return { success: true, value: process.env.AUXX_API_KEY };
19
+ }
17
20
  const existingTokenResult = await getKeychain().load();
18
21
  if (isError(existingTokenResult)) {
19
22
  return this.promptToAuthenticate();
@@ -1,6 +1,11 @@
1
+ import chalk from 'chalk';
1
2
  import path from 'path';
2
- import { complete, errored } from '../../errors.js';
3
- import { getDiagnostics, readConfig, typeScriptErrorSchema } from '../../util/typescript.js';
3
+ import { complete, errored, isErrored } from '../../errors.js';
4
+ import { ensureAppFieldsTypes } from '../../util/ensure-app-fields-types.js';
5
+ import { generateAppEnvTypes } from '../../util/generate-app-env-types.js';
6
+ import { hardExit } from '../../util/hard-exit.js';
7
+ import { spinnerify } from '../../util/spinner.js';
8
+ import { getDiagnostics, printTsError, readConfig, typeScriptErrorSchema, } from '../../util/typescript.js';
4
9
  export async function validateTypeScript() {
5
10
  try {
6
11
  const program = await readConfig(path.resolve('tsconfig.json'));
@@ -22,3 +27,29 @@ export async function validateTypeScript() {
22
27
  return errored({ code: 'FILE_SYSTEM_ERROR', error });
23
28
  }
24
29
  }
30
+ export async function validateTypeScriptOrExit() {
31
+ const appEnvTypesResult = await generateAppEnvTypes();
32
+ if (isErrored(appEnvTypesResult)) {
33
+ process.stderr.write(chalk.yellow(`⚠ Could not generate src/auxx-env.d.ts at ${appEnvTypesResult.error.path}. TypeScript image imports may show warnings.\n`));
34
+ }
35
+ else if (appEnvTypesResult.value === 'skipped_unmanaged') {
36
+ process.stderr.write(chalk.yellow('⚠ Skipping src/auxx-env.d.ts generation because the existing file is unmanaged.\n'));
37
+ }
38
+ await ensureAppFieldsTypes();
39
+ const tsResult = await spinnerify('Validating TypeScript...', 'TypeScript validation passed', validateTypeScript);
40
+ if (isErrored(tsResult)) {
41
+ if (tsResult.error.code === 'VALIDATE_TYPE_SCRIPT_ERROR') {
42
+ process.stdout.write('\n');
43
+ process.stderr.write(chalk.red(`✖ Found ${tsResult.error.errors.length} TypeScript error(s):\n`));
44
+ const errorsToShow = tsResult.error.errors.slice(0, 10);
45
+ for (const error of errorsToShow) {
46
+ printTsError(error);
47
+ }
48
+ if (tsResult.error.errors.length > 10) {
49
+ process.stderr.write(chalk.yellow(`\n ... and ${tsResult.error.errors.length - 10} more error(s)\n`));
50
+ }
51
+ process.exit(1);
52
+ }
53
+ hardExit(`TypeScript validation failed: ${tsResult.error.error}`);
54
+ }
55
+ }
@@ -2,12 +2,11 @@ import chalk from 'chalk';
2
2
  import { Command } from 'commander';
3
3
  import { isErrored } from '../errors.js';
4
4
  import { ensureAppEntryPoint } from '../util/ensure-app-entry-point.js';
5
- import { printJsError, printTsError } from '../util/error-reporting.js';
6
- import { generateAppEnvTypes } from '../util/generate-app-env-types.js';
5
+ import { printJsError } from '../util/error-reporting.js';
7
6
  import { hardExit } from '../util/hard-exit.js';
8
7
  import { spinnerify } from '../util/spinner.js';
9
8
  import { buildJavaScript } from './build/build-javascript.js';
10
- import { validateTypeScript } from './build/validate-typescript.js';
9
+ import { validateTypeScriptOrExit } from './build/validate-typescript.js';
11
10
  export const build = new Command('build')
12
11
  .description('Build your Auxx app for production')
13
12
  .action(async () => {
@@ -17,29 +16,7 @@ export const build = new Command('build')
17
16
  hardExit(`Could not find app entry point at ${entryPointResult.error}\n` +
18
17
  ` Make sure you have a src/index.ts file in your project.`);
19
18
  }
20
- const appEnvTypesResult = await generateAppEnvTypes();
21
- if (isErrored(appEnvTypesResult)) {
22
- process.stderr.write(chalk.yellow(`⚠ Could not generate src/auxx-env.d.ts at ${appEnvTypesResult.error.path}. TypeScript image imports may show warnings.\n`));
23
- }
24
- else if (appEnvTypesResult.value === 'skipped_unmanaged') {
25
- process.stderr.write(chalk.yellow('⚠ Skipping src/auxx-env.d.ts generation because the existing file is unmanaged.\n'));
26
- }
27
- const tsResult = await spinnerify('Validating TypeScript...', 'TypeScript validation passed', validateTypeScript);
28
- if (isErrored(tsResult)) {
29
- if (tsResult.error.code === 'VALIDATE_TYPESCRIPT_ERROR') {
30
- process.stdout.write('\n');
31
- process.stderr.write(chalk.red(`✖ Found ${tsResult.error.errors.length} TypeScript error(s):\n`));
32
- const errorsToShow = tsResult.error.errors.slice(0, 10);
33
- for (const error of errorsToShow) {
34
- await printTsError(error);
35
- }
36
- if (tsResult.error.errors.length > 10) {
37
- process.stderr.write(chalk.yellow(`\n ... and ${tsResult.error.errors.length - 10} more error(s)\n`));
38
- }
39
- process.exit(1);
40
- }
41
- hardExit('TypeScript validation failed: ' + tsResult.error.error.message);
42
- }
19
+ await validateTypeScriptOrExit();
43
20
  const buildResult = await spinnerify('Building JavaScript...', 'JavaScript build completed', buildJavaScript);
44
21
  if (isErrored(buildResult)) {
45
22
  if (buildResult.error.code === 'BUILD_JAVASCRIPT_ERROR') {
@@ -9,6 +9,7 @@ import { isErrored } from '../errors.js';
9
9
  import { printUploadError } from '../print-errors.js';
10
10
  import { addAuxxHiddenDirectoryToTsConfig } from '../util/add-auxx-hidden-directory-to-ts-config.js';
11
11
  import { ensureAppEntryPoint } from '../util/ensure-app-entry-point.js';
12
+ import { ensureAppFieldsTypes } from '../util/ensure-app-fields-types.js';
12
13
  import { generateAppEnvTypes } from '../util/generate-app-env-types.js';
13
14
  import { generateGitignore } from '../util/generate-gitignore.js';
14
15
  import { generateSettingsFiles } from '../util/generate-settings-files.js';
@@ -69,6 +70,7 @@ export const dev = new Command('dev')
69
70
  else if (appEnvTypesResult.value === 'skipped_unmanaged') {
70
71
  process.stderr.write(chalk.yellow('Skipping src/auxx-env.d.ts generation because the existing file is unmanaged. Add imports for @auxx/sdk/client and @auxx/sdk/global manually.\n'));
71
72
  }
73
+ await ensureAppFieldsTypes();
72
74
  if (USE_SETTINGS) {
73
75
  const updateTsconfigResult = await addAuxxHiddenDirectoryToTsConfig();
74
76
  if (isErrored(updateTsconfigResult)) {
@@ -28,7 +28,13 @@ export async function bundleJavaScript() {
28
28
  }
29
29
  const settingsSchema = await compileAndExtractSettingsSchema();
30
30
  const catalogResult = await compileAndExtractCatalog();
31
- const catalog = isErrored(catalogResult) ? undefined : catalogResult.value;
31
+ if (isErrored(catalogResult)) {
32
+ return errored({
33
+ code: 'ERROR_EXTRACTING_CATALOG',
34
+ error: catalogResult.error,
35
+ });
36
+ }
37
+ const catalog = catalogResult.value;
32
38
  return complete({
33
39
  bundles: [builds.client.outputFiles[0].text, builds.server.outputFiles[0].text],
34
40
  settingsSchema,
@@ -16,11 +16,13 @@ import { loadAuxxCliVersion } from '../../util/load-auxx-cli-version.js';
16
16
  import { spinnerify } from '../../util/spinner.js';
17
17
  import { printJsError } from '../../util/typescript.js';
18
18
  import { uploadBundle } from '../../util/upload-bundle.js';
19
+ import { validateTypeScriptOrExit } from '../build/validate-typescript.js';
19
20
  import { printBuildContextError } from '../dev/prepare-build-context.js';
20
21
  import { bundleJavaScript } from './create/bundle-javascript.js';
21
22
  export const versionCreate = new Command('create')
22
23
  .description('Create a new deployment of your auxx app')
23
- .action(async () => {
24
+ .option('--publish', 'Submit the deployment for review and publish it once approved')
25
+ .action(async (options) => {
24
26
  if (USE_APP_TS) {
25
27
  const appEntryPointResult = await ensureAppEntryPoint();
26
28
  if (isErrored(appEntryPointResult)) {
@@ -33,6 +35,7 @@ export const versionCreate = new Command('create')
33
35
  exitWithMissingAppSettings();
34
36
  }
35
37
  }
38
+ await validateTypeScriptOrExit();
36
39
  await authenticator.ensureAuthed();
37
40
  const appSlugResult = await getAppSlugFromPackageJson();
38
41
  if (isErrored(appSlugResult)) {
@@ -59,6 +62,15 @@ export const versionCreate = new Command('create')
59
62
  printBuildContextError(error);
60
63
  }
61
64
  }
65
+ else if (bundleResult.error.code === 'ERROR_EXTRACTING_CATALOG') {
66
+ const catalogError = bundleResult.error.error;
67
+ const detail = 'message' in catalogError
68
+ ? catalogError.message
69
+ : 'error' in catalogError
70
+ ? catalogError.error.message
71
+ : '';
72
+ process.stderr.write(`${chalk.red('✖ ')}Catalog extraction failed (${catalogError.code})${detail ? `: ${detail}` : ''}\n`);
73
+ }
62
74
  else {
63
75
  printBuildContextError(bundleResult.error.error);
64
76
  }
@@ -117,6 +129,7 @@ export const versionCreate = new Command('create')
117
129
  settingsSchema,
118
130
  catalog,
119
131
  metadata: { cliVersion },
132
+ publish: options.publish,
120
133
  });
121
134
  if (isErrored(result)) {
122
135
  printFetcherError('Error creating deployment', result);
@@ -129,6 +142,26 @@ export const versionCreate = new Command('create')
129
142
  process.exit(1);
130
143
  }
131
144
  const deployment = deployResult.value;
132
- process.stdout.write(`\nDeployment ${chalk.green(deployment.version ?? deployment.deploymentId)} created!\n\n`);
145
+ if (deployment.unchanged) {
146
+ process.stdout.write(`\n${chalk.gray('●')} Unchanged — skipped (${deployment.version ?? deployment.deploymentId})\n\n`);
147
+ process.exit(0);
148
+ }
149
+ process.stdout.write(`\nDeployment ${chalk.green(deployment.version ?? deployment.deploymentId)} created!\n`);
150
+ if (options.publish) {
151
+ if (deployment.publishError) {
152
+ process.stderr.write(`${chalk.red('✖ ')}Publish failed: ${deployment.publishError}\n`);
153
+ process.exit(1);
154
+ }
155
+ if (deployment.status === 'published') {
156
+ process.stdout.write(`${chalk.green('✓ ')}Published — live for installed organizations\n`);
157
+ }
158
+ else if (deployment.status === 'pending-review') {
159
+ process.stdout.write(`${chalk.yellow('● ')}Submitted for review (publishes on approval)\n`);
160
+ }
161
+ else if (deployment.status) {
162
+ process.stdout.write(`Status: ${deployment.status}\n`);
163
+ }
164
+ }
165
+ process.stdout.write('\n');
133
166
  process.exit(0);
134
167
  });
@@ -0,0 +1 @@
1
+ export const APP_FIELDS_TYPES_FILENAME = 'app-fields.d.ts';
package/lib/env.js CHANGED
@@ -6,3 +6,4 @@ export const AUTH_API = `${APP_URL}/api/auth`;
6
6
  export const USE_APP_TS = process.env.USE_APP_TS !== 'false';
7
7
  export const USE_SETTINGS = process.env.USE_SETTINGS !== 'false';
8
8
  export const SDK_CLIENT_ID = process.env.AUXX_SDK_CLIENT_ID || 'auxx-sdk-cli';
9
+ export const AUXX_API_KEY = process.env.AUXX_API_KEY;
package/lib/root/app.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { BulkRecordAction, RecordAction, RecordWidget } from '../client/record-actions.js';
2
+ import type { AppFieldDefinition } from './fields/index.js';
2
3
  import type { ScopedSettingsSchema } from './settings/settings-schema.js';
3
4
  import type { ToolDefinition, Toolset } from './tools/types.js';
4
5
  import type { Trigger, WorkflowBlock } from './workflow/types.js';
@@ -48,6 +49,7 @@ export interface App {
48
49
  };
49
50
  readonly tools?: ReadonlyArray<ToolDefinition>;
50
51
  readonly toolsets?: ReadonlyArray<Toolset>;
52
+ readonly fields?: ReadonlyArray<AppFieldDefinition>;
51
53
  readonly settings?: {
52
54
  readonly organization?: ScopedSettingsSchema;
53
55
  };
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/root/app.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAIjE,MAAM,WAAW,UAAU;IAEzB,QAAQ,EAAE,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAA;IAE/D,OAAO,EAAE,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAA;IAExC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAKD,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,MAAM,CAAA;IAEZ,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAE1B,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAuBD,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,UAAU,MAAM,CAAC;QACf,KAAK,MAAM,GAAG,YAAY,CAAA;QAC1B,KAAK,UAAU,GAAG,gBAAgB,CAAA;QAClC,KAAK,MAAM,GAAG,YAAY,CAAA;KAC3B;IACD,UAAU,QAAQ,CAAC,GAAE;IACrB,UAAU,QAAQ,CAAC,GAAE;CACtB;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAC5C,CAAA;IAED,QAAQ,CAAC,aAAa,CAAC,EAAE;QACvB,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACpC,CAAA;QACD,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjB,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACrC,CAAA;QACD,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACpC,CAAA;KACF,CAAA;IAED,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAElB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAA;QAEjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;KAC9B,CAAA;IAOD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAK9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAE1C,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAA;KAC7C,CAAA;CAIF"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/root/app.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAIjE,MAAM,WAAW,UAAU;IAEzB,QAAQ,EAAE,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAA;IAE/D,OAAO,EAAE,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAA;IAExC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAKD,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,MAAM,CAAA;IAEZ,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAE1B,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAuBD,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,UAAU,MAAM,CAAC;QACf,KAAK,MAAM,GAAG,YAAY,CAAA;QAC1B,KAAK,UAAU,GAAG,gBAAgB,CAAA;QAClC,KAAK,MAAM,GAAG,YAAY,CAAA;KAC3B;IACD,UAAU,QAAQ,CAAC,GAAE;IACrB,UAAU,QAAQ,CAAC,GAAE;CACtB;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAC5C,CAAA;IAED,QAAQ,CAAC,aAAa,CAAC,EAAE;QACvB,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACpC,CAAA;QACD,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjB,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACrC,CAAA;QACD,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;SACpC,CAAA;KACF,CAAA;IAED,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAElB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAA;QAEjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;KAC9B,CAAA;IAOD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAK9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAQ1C,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;IAEnD,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAA;KAC7C,CAAA;CAIF"}
@@ -0,0 +1,67 @@
1
+ import type { EntityRefKind } from '../tools/types.js';
2
+ import type { FieldCapabilities, FieldScope, FieldSelectOption, FieldType } from './field-types.js';
3
+ type SelectFieldType = 'SINGLE_SELECT' | 'MULTI_SELECT' | 'TAGS';
4
+ type ScalarFieldType = Exclude<FieldType, SelectFieldType | 'RELATIONSHIP' | 'CALC' | 'ACTOR'>;
5
+ interface BaseAppFieldDefinition {
6
+ readonly appFieldKey: string;
7
+ readonly targetEntity: EntityRefKind;
8
+ readonly scope: FieldScope;
9
+ readonly name: string;
10
+ readonly description?: string;
11
+ readonly capabilities?: FieldCapabilities;
12
+ }
13
+ interface ScalarAppFieldDefinition extends BaseAppFieldDefinition {
14
+ readonly type: ScalarFieldType;
15
+ readonly options?: never;
16
+ readonly relationship?: never;
17
+ readonly calc?: never;
18
+ }
19
+ interface SelectAppFieldDefinition extends BaseAppFieldDefinition {
20
+ readonly type: SelectFieldType;
21
+ readonly options: readonly FieldSelectOption[];
22
+ readonly relationship?: never;
23
+ readonly calc?: never;
24
+ }
25
+ interface RelationshipAppFieldDefinition extends BaseAppFieldDefinition {
26
+ readonly type: 'RELATIONSHIP';
27
+ readonly relationship: {
28
+ readonly targetEntity: EntityRefKind;
29
+ readonly cardinality: 'one' | 'many';
30
+ };
31
+ readonly options?: never;
32
+ readonly calc?: never;
33
+ }
34
+ interface CalcAppFieldDefinition extends BaseAppFieldDefinition {
35
+ readonly type: 'CALC';
36
+ readonly calc: {
37
+ readonly expression: string;
38
+ };
39
+ readonly options?: never;
40
+ readonly relationship?: never;
41
+ }
42
+ export type AppFieldDefinition = ScalarAppFieldDefinition | SelectAppFieldDefinition | RelationshipAppFieldDefinition | CalcAppFieldDefinition;
43
+ export declare function defineField<const F extends AppFieldDefinition>(field: F): F;
44
+ export declare function defineFields<const F extends readonly AppFieldDefinition[]>(fields: F): F;
45
+ type OptionValues<F> = F extends {
46
+ options: readonly (infer O)[];
47
+ } ? O extends {
48
+ value: infer V;
49
+ } ? V : string : string;
50
+ export type FieldValueType<F extends AppFieldDefinition> = F extends {
51
+ type: 'SINGLE_SELECT';
52
+ } ? OptionValues<F> : F extends {
53
+ type: 'MULTI_SELECT' | 'TAGS';
54
+ } ? OptionValues<F>[] : F extends {
55
+ type: 'NUMBER' | 'CURRENCY';
56
+ } ? number : F extends {
57
+ type: 'CHECKBOX';
58
+ } ? boolean : F extends {
59
+ type: 'JSON';
60
+ } ? unknown : F extends {
61
+ type: 'RELATIONSHIP';
62
+ } ? string : string;
63
+ export type AppFieldValues<F extends readonly AppFieldDefinition[]> = {
64
+ [K in F[number] as K['appFieldKey']]: FieldValueType<K>;
65
+ };
66
+ export {};
67
+ //# sourceMappingURL=define-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-field.d.ts","sourceRoot":"","sources":["../../../src/root/fields/define-field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ const APP_FIELD_KEY_RE = /^[a-zA-Z][a-zA-Z0-9_]{0,63}$/;
2
+ export function defineField(field) {
3
+ if (!APP_FIELD_KEY_RE.test(field.appFieldKey)) {
4
+ throw new Error(`defineField: invalid appFieldKey "${field.appFieldKey}" — must match ${APP_FIELD_KEY_RE.source}`);
5
+ }
6
+ return field;
7
+ }
8
+ export function defineFields(fields) {
9
+ const seen = new Set();
10
+ for (const field of fields) {
11
+ if (!APP_FIELD_KEY_RE.test(field.appFieldKey)) {
12
+ throw new Error(`defineFields: invalid appFieldKey "${field.appFieldKey}" — must match ${APP_FIELD_KEY_RE.source}`);
13
+ }
14
+ const dedupeKey = `${field.targetEntity}:${field.appFieldKey}`;
15
+ if (seen.has(dedupeKey)) {
16
+ throw new Error(`defineFields: duplicate appFieldKey "${field.appFieldKey}" on entity "${field.targetEntity}"`);
17
+ }
18
+ seen.add(dedupeKey);
19
+ }
20
+ return fields;
21
+ }
@@ -0,0 +1,47 @@
1
+ export declare const FIELD_TYPES: readonly ["TEXT", "EMAIL", "URL", "RICH_TEXT", "PHONE", "PHONE_INTL", "ADDRESS", "ADDRESS_STRUCT", "FILE", "DATE", "DATETIME", "TIME", "NUMBER", "CURRENCY", "CHECKBOX", "JSON", "NAME", "SINGLE_SELECT", "MULTI_SELECT", "TAGS", "RELATIONSHIP", "CALC", "ACTOR"];
2
+ export type FieldType = (typeof FIELD_TYPES)[number];
3
+ export interface FieldCapabilities {
4
+ filterable?: boolean;
5
+ sortable?: boolean;
6
+ creatable?: boolean;
7
+ updatable?: boolean;
8
+ required?: boolean;
9
+ unique?: boolean;
10
+ computed?: boolean;
11
+ hidden?: boolean;
12
+ }
13
+ export type FieldScope = 'installation' | 'connection';
14
+ export interface FieldSelectOption {
15
+ value: string;
16
+ label?: string;
17
+ color?: string;
18
+ }
19
+ export interface FieldTypeValueMap {
20
+ TEXT: string;
21
+ EMAIL: string;
22
+ URL: string;
23
+ RICH_TEXT: string;
24
+ PHONE: string;
25
+ PHONE_INTL: string;
26
+ ADDRESS: string;
27
+ DATE: string;
28
+ DATETIME: string;
29
+ TIME: string;
30
+ NUMBER: number;
31
+ CURRENCY: number;
32
+ CHECKBOX: boolean;
33
+ JSON: unknown;
34
+ NAME: string;
35
+ SINGLE_SELECT: string;
36
+ MULTI_SELECT: string[];
37
+ TAGS: string[];
38
+ ADDRESS_STRUCT: Record<string, unknown>;
39
+ FILE: {
40
+ url: string;
41
+ name?: string;
42
+ };
43
+ RELATIONSHIP: string;
44
+ CALC: string | number;
45
+ ACTOR: string | string[];
46
+ }
47
+ //# sourceMappingURL=field-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/root/fields/field-types.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,WAAW,oQAwBd,CAAA;AAGV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAOpD,MAAM,WAAW,iBAAiB;IAEhC,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,SAAS,CAAC,EAAE,OAAO,CAAA;IAGnB,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAIlB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAGD,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,CAAA;AAGtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAQD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACzB"}
@@ -0,0 +1,25 @@
1
+ export const FIELD_TYPES = [
2
+ 'TEXT',
3
+ 'EMAIL',
4
+ 'URL',
5
+ 'RICH_TEXT',
6
+ 'PHONE',
7
+ 'PHONE_INTL',
8
+ 'ADDRESS',
9
+ 'ADDRESS_STRUCT',
10
+ 'FILE',
11
+ 'DATE',
12
+ 'DATETIME',
13
+ 'TIME',
14
+ 'NUMBER',
15
+ 'CURRENCY',
16
+ 'CHECKBOX',
17
+ 'JSON',
18
+ 'NAME',
19
+ 'SINGLE_SELECT',
20
+ 'MULTI_SELECT',
21
+ 'TAGS',
22
+ 'RELATIONSHIP',
23
+ 'CALC',
24
+ 'ACTOR',
25
+ ];
@@ -0,0 +1,3 @@
1
+ export { type AppFieldDefinition, type AppFieldValues, defineField, defineFields, type FieldValueType, } from './define-field.js';
2
+ export { FIELD_TYPES, type FieldCapabilities, type FieldScope, type FieldSelectOption, type FieldType, type FieldTypeValueMap, } from './field-types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/root/fields/index.ts"],"names":[],"mappings":"AA0BA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { defineField, defineFields, } from './define-field.js';
2
+ export { FIELD_TYPES, } from './field-types.js';
@@ -1,6 +1,7 @@
1
1
  export type { BulkRecordAction, RecordAction, RecordActionContext, } from '../client/record-actions.js';
2
2
  export type { TriggerContext, WorkflowContext, WorkflowInput, WorkflowOutput, } from '../server/workflow/index.js';
3
3
  export type { App, AppSettings, Permission } from './app.js';
4
+ export { type AppFieldDefinition, type AppFieldValues, defineField, defineFields, FIELD_TYPES, type FieldCapabilities, type FieldScope, type FieldSelectOption, type FieldType, type FieldTypeValueMap, type FieldValueType, } from './fields/index.js';
4
5
  export { Settings } from './settings/index.js';
5
6
  export type { BaseSettingOptions, BooleanSettingOptions, NumberSettingOptions, SelectSettingOptions, SettingsBooleanNode, SettingsNode, SettingsNumberNode, SettingsSchema, SettingsSelectNode, SettingsStringNode, SettingsStructNode, StringSettingOptions, StructSettingOptions, } from './settings/settings-schema.js';
6
7
  export type { AuxxRefMeta, EntityRefKind, ToolActionContext, ToolActionEntity, ToolActionParticipant, ToolActionSurface, ToolAgentSurface, ToolConfig, ToolDefinition, ToolExecuteContext, Toolset, } from './tools/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/root/index.ts"],"names":[],"mappings":"AASA,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,YAAY,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,6BAA6B,CAAA;AACpC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,OAAO,GACR,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAA;AACtD,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EAEZ,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAEjB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/root/index.ts"],"names":[],"mappings":"AASA,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,YAAY,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,6BAA6B,CAAA;AACpC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE5D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAA;AACtC,YAAY,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,OAAO,GACR,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAA;AACtD,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EAEZ,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,EACP,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EAEjB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
package/lib/root/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { defineField, defineFields, FIELD_TYPES, } from './fields/index.js';
1
2
  export { Settings } from './settings/index.js';
2
3
  export { defineTool, refs, z } from './tools/index.js';
3
4
  export { defineTrigger, Workflow } from './workflow/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"define-tool.d.ts","sourceRoot":"","sources":["../../../src/root/tools/define-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAkBhD,wBAAgB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,EAClF,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAKjC"}
1
+ {"version":3,"file":"define-tool.d.ts","sourceRoot":"","sources":["../../../src/root/tools/define-tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAkBhD,wBAAgB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,EAAE,OAAO,SAAS,CAAC,CAAC,UAAU,EAClF,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CA4BjC"}
@@ -3,5 +3,19 @@ export function defineTool(tool) {
3
3
  if (!TOOL_ID_RE.test(tool.id)) {
4
4
  throw new Error(`defineTool: invalid id "${tool.id}" — must match ${TOOL_ID_RE.source}`);
5
5
  }
6
+ if (tool.exampleOutput !== undefined) {
7
+ const parsed = tool.outputs.safeParse(tool.exampleOutput);
8
+ if (!parsed.success) {
9
+ throw new Error(`defineTool: tool "${tool.id}" exampleOutput does not satisfy its outputs schema — ${parsed.error.message}`);
10
+ }
11
+ try {
12
+ if (JSON.stringify(tool.exampleOutput) === undefined) {
13
+ throw new Error('serializes to undefined (function or top-level undefined)');
14
+ }
15
+ }
16
+ catch (err) {
17
+ throw new Error(`defineTool: tool "${tool.id}" exampleOutput is not JSON-serializable — ${err instanceof Error ? err.message : String(err)}`);
18
+ }
19
+ }
6
20
  return tool;
7
21
  }
@@ -26,12 +26,27 @@ export interface ToolConfig {
26
26
  readonly idempotent?: boolean;
27
27
  readonly streaming?: boolean;
28
28
  }
29
+ export type AgentSurface = 'internal' | 'chat' | 'email' | 'builder';
29
30
  export interface ToolAgentSurface {
30
31
  readonly name?: string;
31
32
  readonly description?: string;
32
33
  readonly toolsetSlug?: string;
33
34
  readonly streaming?: boolean;
34
35
  readonly idempotent?: boolean;
36
+ readonly surfaces?: AgentSurface[];
37
+ readonly externalSafe?: boolean;
38
+ readonly inputBindings?: ReadonlyArray<{
39
+ name: string;
40
+ default: {
41
+ kind: 'var';
42
+ ref: string | readonly string[];
43
+ } | {
44
+ kind: 'const';
45
+ value: unknown;
46
+ } | {
47
+ kind: 'model';
48
+ };
49
+ }>;
35
50
  }
36
51
  export interface ToolActionSurface {
37
52
  readonly label: string;
@@ -51,6 +66,7 @@ export interface ToolDefinition<TInput extends z.ZodTypeAny = z.ZodTypeAny, TOut
51
66
  readonly icon?: string | ComponentType;
52
67
  readonly inputs: TInput;
53
68
  readonly outputs: TOutput;
69
+ readonly exampleOutput?: z.output<TOutput>;
54
70
  readonly config?: ToolConfig;
55
71
  readonly execute: (input: z.input<TInput>, ctx: ToolExecuteContext) => Promise<z.output<TOutput>> | AsyncGenerator<unknown, z.output<TOutput>>;
56
72
  readonly agent?: ToolAgentSurface;
@@ -71,27 +87,5 @@ export interface ToolExecuteContext {
71
87
  readonly sessionId: string;
72
88
  readonly agentId: string | null;
73
89
  readonly triggerId: string | null;
74
- readonly entities: {
75
- findByIntegrationId: (input: {
76
- kind: EntityRefKind;
77
- source: string;
78
- externalId: string;
79
- }) => Promise<{
80
- recordId: string;
81
- displayName: string | null;
82
- } | null>;
83
- findContactByEmail: (input: {
84
- email: string;
85
- }) => Promise<{
86
- recordId: string;
87
- displayName: string | null;
88
- } | null>;
89
- findContactByPhone: (input: {
90
- phone: string;
91
- }) => Promise<{
92
- recordId: string;
93
- displayName: string | null;
94
- } | null>;
95
- };
96
90
  }
97
91
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/root/tools/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/root/tools/types.ts"],"names":[],"mappings":"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"}
@@ -121,6 +121,7 @@ export interface PollingState {
121
121
  state: Record<string, unknown>;
122
122
  connection: {
123
123
  value: string;
124
+ fields?: Record<string, string>;
124
125
  metadata?: Record<string, unknown>;
125
126
  } | null;
126
127
  }