@auxx/sdk 0.0.12 → 0.0.14
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.
- package/lib/api/api.js +3 -1
- package/lib/api/schemas.js +4 -0
- package/lib/auth/auth.js +3 -0
- package/lib/build/server/find-tool-server-modules.js +279 -0
- package/lib/build/server/find-workflow-block-server-modules.js +10 -2
- package/lib/build/server/generate-server-entry.js +46 -1
- package/lib/build/server/zod-to-provider-tool-schema.js +42 -0
- package/lib/client/workflow/index.d.ts +1 -1
- package/lib/client/workflow/index.d.ts.map +1 -1
- package/lib/commands/build/validate-typescript.js +33 -2
- package/lib/commands/build.js +3 -26
- package/lib/commands/dev/bundle-javascript.js +17 -1
- package/lib/commands/dev/prepare-build-context.js +11 -2
- package/lib/commands/dev/server-builder.js +2 -1
- package/lib/commands/dev/upload.js +5 -1
- package/lib/commands/dev.js +4 -1
- package/lib/commands/version/create/bundle-javascript.js +10 -0
- package/lib/commands/version/create.js +40 -3
- package/lib/constants/app-fields-files.js +1 -0
- package/lib/env-loader.js +17 -1
- package/lib/env.js +1 -0
- package/lib/root/app.d.ts +7 -2
- package/lib/root/app.d.ts.map +1 -1
- package/lib/root/fields/define-field.d.ts +67 -0
- package/lib/root/fields/define-field.d.ts.map +1 -0
- package/lib/root/fields/define-field.js +21 -0
- package/lib/root/fields/field-types.d.ts +47 -0
- package/lib/root/fields/field-types.d.ts.map +1 -0
- package/lib/root/fields/field-types.js +25 -0
- package/lib/root/fields/index.d.ts +3 -0
- package/lib/root/fields/index.d.ts.map +1 -0
- package/lib/root/fields/index.js +2 -0
- package/lib/root/index.d.ts +5 -2
- package/lib/root/index.d.ts.map +1 -1
- package/lib/root/index.js +3 -1
- package/lib/root/tools/define-tool.d.ts +4 -0
- package/lib/root/tools/define-tool.d.ts.map +1 -0
- package/lib/root/tools/define-tool.js +21 -0
- package/lib/root/tools/index.d.ts +5 -0
- package/lib/root/tools/index.d.ts.map +1 -0
- package/lib/root/tools/index.js +3 -0
- package/lib/root/tools/refs.d.ts +9 -0
- package/lib/root/tools/refs.d.ts.map +1 -0
- package/lib/root/tools/refs.js +4 -0
- package/lib/root/tools/types.d.ts +91 -0
- package/lib/root/tools/types.d.ts.map +1 -0
- package/lib/root/tools/types.js +1 -0
- package/lib/root/workflow/types.d.ts +28 -14
- package/lib/root/workflow/types.d.ts.map +1 -1
- package/lib/root/workflow/types.js +3 -0
- package/lib/root/workflow/utils.d.ts +4 -4
- package/lib/root/workflow/utils.d.ts.map +1 -1
- package/lib/runtime/workflow.js +19 -2
- package/lib/server/connections.d.ts +5 -0
- package/lib/server/connections.d.ts.map +1 -1
- package/lib/server/entities.d.ts +44 -0
- package/lib/server/entities.d.ts.map +1 -0
- package/lib/server/entities.js +3 -0
- package/lib/server/index.d.ts +2 -0
- package/lib/server/index.d.ts.map +1 -1
- package/lib/server/storage.d.ts +30 -3
- package/lib/server/storage.d.ts.map +1 -1
- package/lib/shared/errors.d.ts +34 -0
- package/lib/shared/errors.d.ts.map +1 -1
- package/lib/shared/errors.js +56 -0
- package/lib/shared/index.d.ts +1 -1
- package/lib/shared/index.d.ts.map +1 -1
- package/lib/shared/index.js +1 -1
- package/lib/util/add-auxx-hidden-directory-to-ts-config.js +6 -2
- package/lib/util/compile-and-extract-catalog.js +318 -0
- package/lib/util/ensure-app-fields-types.js +26 -0
- package/lib/util/generate-app-fields-types.js +63 -0
- package/lib/util/warn-if-app-type-annotated.js +9 -0
- package/package.json +9 -1
- package/template/src/events/connection-added.event.ts +17 -2
- package/template/tsconfig.json +1 -1
|
@@ -5,7 +5,7 @@ import { combineAsync, complete, isErrored } from '../../errors.js';
|
|
|
5
5
|
import { calculateBundleSha } from '../../util/calculate-bundle-sha.js';
|
|
6
6
|
import { spinnerify } from '../../util/spinner.js';
|
|
7
7
|
import { uploadBundle } from '../../util/upload-bundle.js';
|
|
8
|
-
export async function upload({ contents, appId, targetOrganizationId, environmentVariables, cliVersion, settingsSchema, }) {
|
|
8
|
+
export async function upload({ contents, appId, targetOrganizationId, environmentVariables, cliVersion, settingsSchema, catalog, }) {
|
|
9
9
|
return await spinnerify('Uploading...', () => `Upload complete at ${new Date().toLocaleTimeString()}`, async () => {
|
|
10
10
|
const [clientBundle, serverBundle] = contents;
|
|
11
11
|
const clientSha = calculateBundleSha(clientBundle);
|
|
@@ -34,6 +34,9 @@ export async function upload({ contents, appId, targetOrganizationId, environmen
|
|
|
34
34
|
if (settingsSchema) {
|
|
35
35
|
process.stdout.write(`${chalk.green('✓ ')}Settings schema included\n`);
|
|
36
36
|
}
|
|
37
|
+
if (catalog && (catalog.tools.length || catalog.toolsets.length)) {
|
|
38
|
+
process.stdout.write(`${chalk.green('✓ ')}Catalog extracted (${catalog.tools.length} tools, ${catalog.toolsets.length} toolsets, ${catalog.workflow.blocks.length} blocks, ${catalog.triggers.length} triggers, ${catalog.actions.length} actions)\n`);
|
|
39
|
+
}
|
|
37
40
|
const deployResult = await api.createDeployment({
|
|
38
41
|
appId,
|
|
39
42
|
clientBundleSha: clientSha,
|
|
@@ -42,6 +45,7 @@ export async function upload({ contents, appId, targetOrganizationId, environmen
|
|
|
42
45
|
targetOrganizationId,
|
|
43
46
|
environmentVariables,
|
|
44
47
|
settingsSchema,
|
|
48
|
+
catalog,
|
|
45
49
|
metadata: { cliVersion },
|
|
46
50
|
});
|
|
47
51
|
if (isErrored(deployResult)) {
|
package/lib/commands/dev.js
CHANGED
|
@@ -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)) {
|
|
@@ -129,7 +131,7 @@ export const dev = new Command('dev')
|
|
|
129
131
|
});
|
|
130
132
|
cleanupFunctions.push(cleanupTs);
|
|
131
133
|
let haveBundlingErrors = false;
|
|
132
|
-
const cleanupJs = bundleJavaScript(async (contents, settingsSchema) => {
|
|
134
|
+
const cleanupJs = bundleJavaScript(async (contents, settingsSchema, catalog) => {
|
|
133
135
|
if (haveBundlingErrors) {
|
|
134
136
|
process.stdout.write(`${chalk.green('✓')} Bundling errors fixed\n`);
|
|
135
137
|
haveBundlingErrors = false;
|
|
@@ -141,6 +143,7 @@ export const dev = new Command('dev')
|
|
|
141
143
|
environmentVariables,
|
|
142
144
|
cliVersion,
|
|
143
145
|
settingsSchema,
|
|
146
|
+
catalog,
|
|
144
147
|
});
|
|
145
148
|
if (isErrored(uploadResult)) {
|
|
146
149
|
printUploadError(uploadResult);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { complete, errored, isErrored } from '../../../errors.js';
|
|
2
|
+
import { compileAndExtractCatalog, } from '../../../util/compile-and-extract-catalog.js';
|
|
2
3
|
import { compileAndExtractSettingsSchema } from '../../../util/compile-and-extract-settings.js';
|
|
3
4
|
import { prepareBuildContext } from '../../dev/prepare-build-context.js';
|
|
4
5
|
export async function bundleJavaScript() {
|
|
@@ -26,8 +27,17 @@ export async function bundleJavaScript() {
|
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
const settingsSchema = await compileAndExtractSettingsSchema();
|
|
30
|
+
const catalogResult = await compileAndExtractCatalog();
|
|
31
|
+
if (isErrored(catalogResult)) {
|
|
32
|
+
return errored({
|
|
33
|
+
code: 'ERROR_EXTRACTING_CATALOG',
|
|
34
|
+
error: catalogResult.error,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const catalog = catalogResult.value;
|
|
29
38
|
return complete({
|
|
30
39
|
bundles: [builds.client.outputFiles[0].text, builds.server.outputFiles[0].text],
|
|
31
40
|
settingsSchema,
|
|
41
|
+
catalog,
|
|
32
42
|
});
|
|
33
43
|
}
|
|
@@ -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
|
-
.
|
|
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,16 +62,28 @@ 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
|
}
|
|
65
77
|
process.exit(1);
|
|
66
78
|
}
|
|
67
|
-
const { bundles, settingsSchema } = bundleResult.value;
|
|
79
|
+
const { bundles, settingsSchema, catalog } = bundleResult.value;
|
|
68
80
|
const [clientBundle, serverBundle] = bundles;
|
|
69
81
|
if (settingsSchema) {
|
|
70
82
|
process.stdout.write(`${chalk.green('✓ ')}Settings schema extracted\n`);
|
|
71
83
|
}
|
|
84
|
+
if (catalog && (catalog.tools.length || catalog.toolsets.length)) {
|
|
85
|
+
process.stdout.write(`${chalk.green('✓ ')}Catalog extracted (${catalog.tools.length} tools, ${catalog.toolsets.length} toolsets, ${catalog.workflow.blocks.length} blocks, ${catalog.triggers.length} triggers, ${catalog.actions.length} actions)\n`);
|
|
86
|
+
}
|
|
72
87
|
const deployResult = await spinnerify('Uploading...', 'Upload complete', async () => {
|
|
73
88
|
const cliVersionResult = loadAuxxCliVersion();
|
|
74
89
|
if (isErrored(cliVersionResult)) {
|
|
@@ -112,7 +127,9 @@ export const versionCreate = new Command('create')
|
|
|
112
127
|
serverBundleSha: serverSha,
|
|
113
128
|
deploymentType: 'production',
|
|
114
129
|
settingsSchema,
|
|
130
|
+
catalog,
|
|
115
131
|
metadata: { cliVersion },
|
|
132
|
+
publish: options.publish,
|
|
116
133
|
});
|
|
117
134
|
if (isErrored(result)) {
|
|
118
135
|
printFetcherError('Error creating deployment', result);
|
|
@@ -125,6 +142,26 @@ export const versionCreate = new Command('create')
|
|
|
125
142
|
process.exit(1);
|
|
126
143
|
}
|
|
127
144
|
const deployment = deployResult.value;
|
|
128
|
-
|
|
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');
|
|
129
166
|
process.exit(0);
|
|
130
167
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const APP_FIELDS_TYPES_FILENAME = 'app-fields.d.ts';
|
package/lib/env-loader.js
CHANGED
|
@@ -1,2 +1,18 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, resolve } from 'node:path';
|
|
1
3
|
import dotenv from 'dotenv';
|
|
2
|
-
|
|
4
|
+
function findEnvFile() {
|
|
5
|
+
let dir = resolve(process.cwd());
|
|
6
|
+
const root = dirname(dir) === dir ? dir : '/';
|
|
7
|
+
while (true) {
|
|
8
|
+
const candidate = join(dir, '.env');
|
|
9
|
+
if (existsSync(candidate))
|
|
10
|
+
return candidate;
|
|
11
|
+
const parent = dirname(dir);
|
|
12
|
+
if (parent === dir || dir === root)
|
|
13
|
+
break;
|
|
14
|
+
dir = parent;
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
dotenv.config({ path: findEnvFile() });
|
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,6 +1,8 @@
|
|
|
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
|
-
import type {
|
|
4
|
+
import type { ToolDefinition, Toolset } from './tools/types.js';
|
|
5
|
+
import type { Trigger, WorkflowBlock } from './workflow/types.js';
|
|
4
6
|
export interface Permission {
|
|
5
7
|
resource: 'records' | 'workflows' | 'api' | 'storage' | 'users';
|
|
6
8
|
actions: ('read' | 'write' | 'delete')[];
|
|
@@ -43,8 +45,11 @@ export interface App {
|
|
|
43
45
|
};
|
|
44
46
|
readonly workflow?: {
|
|
45
47
|
readonly blocks?: WorkflowBlock[];
|
|
46
|
-
readonly triggers?:
|
|
48
|
+
readonly triggers?: Trigger[];
|
|
47
49
|
};
|
|
50
|
+
readonly tools?: ReadonlyArray<ToolDefinition>;
|
|
51
|
+
readonly toolsets?: ReadonlyArray<Toolset>;
|
|
52
|
+
readonly fields?: ReadonlyArray<AppFieldDefinition>;
|
|
48
53
|
readonly settings?: {
|
|
49
54
|
readonly organization?: ScopedSettingsSchema;
|
|
50
55
|
};
|
package/lib/root/app.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/lib/root/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
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
|
-
export type {
|
|
7
|
-
export {
|
|
7
|
+
export type { AuxxRefMeta, EntityRefKind, ToolActionContext, ToolActionEntity, ToolActionParticipant, ToolActionSurface, ToolAgentSurface, ToolConfig, ToolDefinition, ToolExecuteContext, Toolset, } from './tools/index.js';
|
|
8
|
+
export { defineTool, refs, z } from './tools/index.js';
|
|
9
|
+
export type { ArrayInputOptions, BaseType, BaseWorkflowFieldOptions, BooleanInputOptions, Connection, InferFieldType, InferWorkflowInput, InferWorkflowOutput, NumberInputOptions, SelectInputOptions, SelectOption, StringInputOptions, StructInputOptions, Trigger, TriggerAgentSurface, TriggerWorkflowSurface, WorkflowArrayNode, WorkflowBlock, WorkflowBlockConfig, WorkflowBooleanNode, WorkflowCategory, WorkflowExecuteContext, WorkflowExecuteFunction, WorkflowExecutionContext, WorkflowFieldNode, WorkflowNode, WorkflowNodeProps, WorkflowNumberNode, WorkflowOrganization, WorkflowPanelProps, WorkflowSchema, WorkflowSDK, WorkflowSelectNode, WorkflowStringNode, WorkflowStructNode, WorkflowUser, } from './workflow/index.js';
|
|
10
|
+
export { defineTrigger, Workflow } from './workflow/index.js';
|
|
8
11
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/root/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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,2 +1,4 @@
|
|
|
1
|
+
export { defineField, defineFields, FIELD_TYPES, } from './fields/index.js';
|
|
1
2
|
export { Settings } from './settings/index.js';
|
|
2
|
-
export {
|
|
3
|
+
export { defineTool, refs, z } from './tools/index.js';
|
|
4
|
+
export { defineTrigger, Workflow } from './workflow/index.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { z } from 'zod/v4';
|
|
2
|
+
import type { ToolDefinition } from './types.js';
|
|
3
|
+
export declare function defineTool<TInput extends z.ZodTypeAny, TOutput extends z.ZodTypeAny>(tool: ToolDefinition<TInput, TOutput>): ToolDefinition<TInput, TOutput>;
|
|
4
|
+
//# sourceMappingURL=define-tool.d.ts.map
|
|
@@ -0,0 +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,CA4BjC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const TOOL_ID_RE = /^[a-zA-Z0-9_-]{1,64}$/;
|
|
2
|
+
export function defineTool(tool) {
|
|
3
|
+
if (!TOOL_ID_RE.test(tool.id)) {
|
|
4
|
+
throw new Error(`defineTool: invalid id "${tool.id}" — must match ${TOOL_ID_RE.source}`);
|
|
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
|
+
}
|
|
20
|
+
return tool;
|
|
21
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { z } from 'zod/v4';
|
|
2
|
+
export { defineTool } from './define-tool.js';
|
|
3
|
+
export { type AuxxRefMeta, refs } from './refs.js';
|
|
4
|
+
export type { EntityRefKind, ToolActionContext, ToolActionEntity, ToolActionParticipant, ToolActionSurface, ToolAgentSurface, ToolConfig, ToolDefinition, ToolExecuteContext, Toolset, } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/root/tools/index.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,WAAW,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAClD,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,OAAO,GACR,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import type { EntityRefKind } from './types.js';
|
|
3
|
+
export interface AuxxRefMeta {
|
|
4
|
+
readonly kind: EntityRefKind;
|
|
5
|
+
}
|
|
6
|
+
export declare const refs: {
|
|
7
|
+
entity: <K extends EntityRefKind>(kind: K) => z.ZodString;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../../src/root/tools/refs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAU/C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAC7B;AAOD,eAAO,MAAM,IAAI;aACN,CAAC,SAAS,aAAa,QAAQ,CAAC;CAE1C,CAAA"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { ComponentType } from 'react';
|
|
2
|
+
import type { z } from 'zod/v4';
|
|
3
|
+
export interface ToolActionEntity {
|
|
4
|
+
id: string;
|
|
5
|
+
entityDefinitionId: string;
|
|
6
|
+
entityDefinitionSlug: string;
|
|
7
|
+
displayName: string;
|
|
8
|
+
fields: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface ToolActionParticipant {
|
|
11
|
+
email: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
isInternal: boolean;
|
|
14
|
+
contact?: ToolActionEntity;
|
|
15
|
+
}
|
|
16
|
+
export interface ToolActionContext {
|
|
17
|
+
threadId: string;
|
|
18
|
+
ticket?: ToolActionEntity;
|
|
19
|
+
participants: ToolActionParticipant[];
|
|
20
|
+
entities: ToolActionEntity[];
|
|
21
|
+
}
|
|
22
|
+
export type EntityRefKind = 'contact' | 'company' | 'deal' | 'ticket' | 'task' | 'user' | 'article' | 'thread';
|
|
23
|
+
export interface ToolConfig {
|
|
24
|
+
readonly requiresConnection?: boolean;
|
|
25
|
+
readonly timeout?: number;
|
|
26
|
+
readonly idempotent?: boolean;
|
|
27
|
+
readonly streaming?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export type AgentSurface = 'internal' | 'chat' | 'email' | 'builder';
|
|
30
|
+
export interface ToolAgentSurface {
|
|
31
|
+
readonly name?: string;
|
|
32
|
+
readonly description?: string;
|
|
33
|
+
readonly toolsetSlug?: string;
|
|
34
|
+
readonly streaming?: boolean;
|
|
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
|
+
}>;
|
|
50
|
+
}
|
|
51
|
+
export interface ToolActionSurface {
|
|
52
|
+
readonly label: string;
|
|
53
|
+
readonly description?: string;
|
|
54
|
+
readonly icon?: string | ComponentType;
|
|
55
|
+
readonly color?: string;
|
|
56
|
+
readonly surface: 'ticket-header' | 'email-editor';
|
|
57
|
+
readonly requiresConfirmation?: boolean;
|
|
58
|
+
readonly confirmationMessage?: string;
|
|
59
|
+
readonly shouldShow?: (ctx: ToolActionContext) => boolean;
|
|
60
|
+
readonly getDefaults?: (ctx: ToolActionContext) => Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
export interface ToolDefinition<TInput extends z.ZodTypeAny = z.ZodTypeAny, TOutput extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
63
|
+
readonly id: string;
|
|
64
|
+
readonly name: string;
|
|
65
|
+
readonly description: string;
|
|
66
|
+
readonly icon?: string | ComponentType;
|
|
67
|
+
readonly inputs: TInput;
|
|
68
|
+
readonly outputs: TOutput;
|
|
69
|
+
readonly exampleOutput?: z.output<TOutput>;
|
|
70
|
+
readonly config?: ToolConfig;
|
|
71
|
+
readonly execute: (input: z.input<TInput>, ctx: ToolExecuteContext) => Promise<z.output<TOutput>> | AsyncGenerator<unknown, z.output<TOutput>>;
|
|
72
|
+
readonly agent?: ToolAgentSurface;
|
|
73
|
+
readonly action?: ToolActionSurface;
|
|
74
|
+
}
|
|
75
|
+
export interface Toolset {
|
|
76
|
+
readonly id: string;
|
|
77
|
+
readonly name: string;
|
|
78
|
+
readonly description: string;
|
|
79
|
+
readonly icon?: string | ComponentType;
|
|
80
|
+
readonly tools: readonly string[];
|
|
81
|
+
readonly subGroup?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface ToolExecuteContext {
|
|
84
|
+
readonly organizationId: string;
|
|
85
|
+
readonly userId: string | null;
|
|
86
|
+
readonly appInstallationId: string;
|
|
87
|
+
readonly sessionId: string;
|
|
88
|
+
readonly agentId: string | null;
|
|
89
|
+
readonly triggerId: string | null;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/root/tools/types.ts"],"names":[],"mappings":"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"}
|