skedyul 1.4.4 → 1.4.7
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/dist/cli/index.js +83 -16
- package/dist/config/app-config.d.ts +5 -0
- package/dist/config/types/app-event.d.ts +40 -0
- package/dist/config/types/index.d.ts +1 -0
- package/dist/dedicated/server.js +38 -2
- package/dist/esm/index.mjs +166 -65
- package/dist/events/types.d.ts +11 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +168 -65
- package/dist/ratelimit/errors.d.ts +6 -0
- package/dist/ratelimit/index.d.ts +1 -1
- package/dist/schemas/agent-schema-v3.d.ts +4 -0
- package/dist/schemas/agent-schema-v3.js +3 -1
- package/dist/schemas/agent-schema-v3.mjs +3 -1
- package/dist/schemas.d.ts +138 -0
- package/dist/server.js +38 -2
- package/dist/serverless/server.mjs +38 -2
- package/dist/triggers/types.d.ts +3 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/tool.d.ts +21 -2
- package/dist/workflows/types.d.ts +8 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -89,6 +89,7 @@ __export(index_exports, {
|
|
|
89
89
|
EventSubscriptionSchema: () => EventSubscriptionSchema,
|
|
90
90
|
EventTypeSchema: () => EventTypeSchema,
|
|
91
91
|
EventWaitSchema: () => EventWaitSchema,
|
|
92
|
+
EventWiringPanelComponentDefinitionSchema: () => EventWiringPanelComponentDefinitionSchema,
|
|
92
93
|
EventsConfigSchema: () => EventsConfigSchema,
|
|
93
94
|
ExternalDataCacheSchema: () => ExternalDataCacheSchema,
|
|
94
95
|
ExternalMemoryConfigSchema: () => ExternalMemoryConfigSchema2,
|
|
@@ -173,6 +174,7 @@ __export(index_exports, {
|
|
|
173
174
|
QueueNotFoundError: () => QueueNotFoundError,
|
|
174
175
|
QueuedFetchExhaustedError: () => QueuedFetchExhaustedError,
|
|
175
176
|
RateLimitBackendError: () => RateLimitBackendError,
|
|
177
|
+
RateLimitExceededError: () => RateLimitExceededError,
|
|
176
178
|
RelationshipCardinalitySchema: () => RelationshipCardinalitySchema,
|
|
177
179
|
RelationshipDefinitionSchema: () => RelationshipDefinitionSchema,
|
|
178
180
|
RelationshipExtensionSchema: () => RelationshipExtensionSchema,
|
|
@@ -717,7 +719,9 @@ var ThreadEventTypeSchema = import_v43.z.enum([
|
|
|
717
719
|
"thread.workflow.completed",
|
|
718
720
|
// Scheduled events
|
|
719
721
|
"thread.follow_up.due",
|
|
720
|
-
"thread.reminder.due"
|
|
722
|
+
"thread.reminder.due",
|
|
723
|
+
// Signal events
|
|
724
|
+
"thread.signal.created"
|
|
721
725
|
]);
|
|
722
726
|
var CustomEventTypeSchema = import_v43.z.string().regex(/^custom\.[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$/, {
|
|
723
727
|
message: "Custom event type must match pattern: custom.{namespace}.{event}"
|
|
@@ -1809,6 +1813,21 @@ var AlertComponentDefinitionSchema = FormV2StylePropsSchema.extend({
|
|
|
1809
1813
|
variant: import_v47.z.enum(["default", "destructive"]).optional()
|
|
1810
1814
|
})
|
|
1811
1815
|
});
|
|
1816
|
+
var EventWiringPanelComponentDefinitionSchema = FormV2StylePropsSchema.extend({
|
|
1817
|
+
component: import_v47.z.literal("EventWiringPanel"),
|
|
1818
|
+
props: import_v47.z.object({
|
|
1819
|
+
eventTypes: import_v47.z.array(
|
|
1820
|
+
import_v47.z.object({
|
|
1821
|
+
type: import_v47.z.string(),
|
|
1822
|
+
label: import_v47.z.string(),
|
|
1823
|
+
glofoxType: import_v47.z.string().optional(),
|
|
1824
|
+
description: import_v47.z.string().optional(),
|
|
1825
|
+
icon: import_v47.z.string().optional()
|
|
1826
|
+
})
|
|
1827
|
+
),
|
|
1828
|
+
recommendedWorkflowHandle: import_v47.z.string().optional()
|
|
1829
|
+
})
|
|
1830
|
+
});
|
|
1812
1831
|
var ModalFormDefinitionSchema = import_v47.z.object({
|
|
1813
1832
|
header: PageFormHeaderSchema,
|
|
1814
1833
|
handler: import_v47.z.string(),
|
|
@@ -1849,7 +1868,8 @@ var FormV2ComponentDefinitionSchema = import_v47.z.discriminatedUnion("component
|
|
|
1849
1868
|
FileSettingComponentDefinitionSchema,
|
|
1850
1869
|
ListComponentDefinitionSchema,
|
|
1851
1870
|
EmptyFormComponentDefinitionSchema,
|
|
1852
|
-
AlertComponentDefinitionSchema
|
|
1871
|
+
AlertComponentDefinitionSchema,
|
|
1872
|
+
EventWiringPanelComponentDefinitionSchema
|
|
1853
1873
|
]);
|
|
1854
1874
|
var FormV2PropsDefinitionSchema = import_v47.z.object({
|
|
1855
1875
|
formVersion: import_v47.z.literal("v2"),
|
|
@@ -3679,6 +3699,57 @@ var AppAuthInvalidError = class extends Error {
|
|
|
3679
3699
|
}
|
|
3680
3700
|
};
|
|
3681
3701
|
|
|
3702
|
+
// src/ratelimit/errors.ts
|
|
3703
|
+
var QueueContextError = class extends Error {
|
|
3704
|
+
constructor(message) {
|
|
3705
|
+
super(message);
|
|
3706
|
+
this.code = "QUEUE_CONTEXT_ERROR";
|
|
3707
|
+
this.name = "QueueContextError";
|
|
3708
|
+
}
|
|
3709
|
+
};
|
|
3710
|
+
var QueueNotFoundError = class extends Error {
|
|
3711
|
+
constructor(queueName) {
|
|
3712
|
+
super(`Queue "${queueName}" is not defined in skedyul.config queues`);
|
|
3713
|
+
this.code = "QUEUE_NOT_FOUND";
|
|
3714
|
+
this.name = "QueueNotFoundError";
|
|
3715
|
+
}
|
|
3716
|
+
};
|
|
3717
|
+
var QueuedFetchExhaustedError = class extends Error {
|
|
3718
|
+
constructor(attempts, maxRetries, causeError) {
|
|
3719
|
+
super(
|
|
3720
|
+
`queuedFetch exhausted retries after ${attempts} attempts (maxRetries=${maxRetries})`
|
|
3721
|
+
);
|
|
3722
|
+
this.code = "QUEUED_FETCH_EXHAUSTED";
|
|
3723
|
+
this.name = "QueuedFetchExhaustedError";
|
|
3724
|
+
this.attempts = attempts;
|
|
3725
|
+
this.maxRetries = maxRetries;
|
|
3726
|
+
this.causeError = causeError;
|
|
3727
|
+
}
|
|
3728
|
+
};
|
|
3729
|
+
var RequeueOutsideContextError = class extends Error {
|
|
3730
|
+
constructor() {
|
|
3731
|
+
super("requeue() can only be called inside an active queuedFetch operation");
|
|
3732
|
+
this.code = "REQUEUE_OUTSIDE_CONTEXT";
|
|
3733
|
+
this.name = "RequeueOutsideContextError";
|
|
3734
|
+
}
|
|
3735
|
+
};
|
|
3736
|
+
var RateLimitBackendError = class extends Error {
|
|
3737
|
+
constructor(message, statusCode) {
|
|
3738
|
+
super(message);
|
|
3739
|
+
this.code = "RATE_LIMIT_BACKEND_ERROR";
|
|
3740
|
+
this.name = "RateLimitBackendError";
|
|
3741
|
+
this.statusCode = statusCode;
|
|
3742
|
+
}
|
|
3743
|
+
};
|
|
3744
|
+
var RateLimitExceededError = class extends Error {
|
|
3745
|
+
constructor(retryAfterMs, message = "Rate limit exceeded. Please try again later.") {
|
|
3746
|
+
super(message);
|
|
3747
|
+
this.code = "RATE_LIMITED";
|
|
3748
|
+
this.name = "RateLimitExceededError";
|
|
3749
|
+
this.retryAfterMs = retryAfterMs;
|
|
3750
|
+
}
|
|
3751
|
+
};
|
|
3752
|
+
|
|
3682
3753
|
// src/server/context-logger.ts
|
|
3683
3754
|
var import_async_hooks3 = require("async_hooks");
|
|
3684
3755
|
var logContextStorage = new import_async_hooks3.AsyncLocalStorage();
|
|
@@ -3776,6 +3847,7 @@ function buildToolMetadata(registry) {
|
|
|
3776
3847
|
const rawRetries = tool.retries ?? toolConfig.retries;
|
|
3777
3848
|
const timeout = typeof rawTimeout === "number" && rawTimeout > 0 ? rawTimeout : 1e4;
|
|
3778
3849
|
const retries = typeof rawRetries === "number" && rawRetries >= 1 ? rawRetries : 1;
|
|
3850
|
+
const queueTouchPoints = tool.queueTouchPoints ?? toolConfig.queueTouchPoints;
|
|
3779
3851
|
return {
|
|
3780
3852
|
name: tool.name,
|
|
3781
3853
|
displayName: tool.label || tool.name,
|
|
@@ -3785,10 +3857,12 @@ function buildToolMetadata(registry) {
|
|
|
3785
3857
|
// Include timeout/retries at top-level for tools/list response (used by syncExecutableTools)
|
|
3786
3858
|
timeout,
|
|
3787
3859
|
retries,
|
|
3860
|
+
queueTouchPoints,
|
|
3788
3861
|
config: {
|
|
3789
3862
|
timeout,
|
|
3790
3863
|
retries,
|
|
3791
|
-
completionHints: toolConfig.completionHints
|
|
3864
|
+
completionHints: toolConfig.completionHints,
|
|
3865
|
+
queueTouchPoints
|
|
3792
3866
|
}
|
|
3793
3867
|
};
|
|
3794
3868
|
});
|
|
@@ -3931,6 +4005,27 @@ function createCallToolHandler(registry, state, onMaxRequests) {
|
|
|
3931
4005
|
cursor: functionResult.cursor
|
|
3932
4006
|
};
|
|
3933
4007
|
} catch (error) {
|
|
4008
|
+
if (error instanceof RateLimitExceededError) {
|
|
4009
|
+
return {
|
|
4010
|
+
success: false,
|
|
4011
|
+
output: null,
|
|
4012
|
+
billing: { credits: 0 },
|
|
4013
|
+
meta: {
|
|
4014
|
+
success: false,
|
|
4015
|
+
message: error.message,
|
|
4016
|
+
toolName
|
|
4017
|
+
},
|
|
4018
|
+
error: {
|
|
4019
|
+
code: "RATE_LIMITED",
|
|
4020
|
+
message: error.message,
|
|
4021
|
+
category: "external"
|
|
4022
|
+
},
|
|
4023
|
+
retry: {
|
|
4024
|
+
allowed: true,
|
|
4025
|
+
afterMs: error.retryAfterMs
|
|
4026
|
+
}
|
|
4027
|
+
};
|
|
4028
|
+
}
|
|
3934
4029
|
if (error instanceof AppAuthInvalidError) {
|
|
3935
4030
|
return {
|
|
3936
4031
|
output: null,
|
|
@@ -4294,7 +4389,8 @@ function serializeConfig(config) {
|
|
|
4294
4389
|
description: tool.description,
|
|
4295
4390
|
// Read timeout/retries from top-level first, then fallback to config
|
|
4296
4391
|
timeout: tool.timeout ?? tool.config?.timeout,
|
|
4297
|
-
retries: tool.retries ?? tool.config?.retries
|
|
4392
|
+
retries: tool.retries ?? tool.config?.retries,
|
|
4393
|
+
queueTouchPoints: tool.queueTouchPoints ?? tool.config?.queueTouchPoints
|
|
4298
4394
|
})) : [],
|
|
4299
4395
|
webhooks: webhookRegistry ? Object.values(webhookRegistry).map((w) => ({
|
|
4300
4396
|
name: w.name,
|
|
@@ -4304,6 +4400,7 @@ function serializeConfig(config) {
|
|
|
4304
4400
|
})) : [],
|
|
4305
4401
|
provision: isProvisionConfig(config.provision) ? config.provision : void 0,
|
|
4306
4402
|
agents: config.agents,
|
|
4403
|
+
events: config.events,
|
|
4307
4404
|
queues: config.queues
|
|
4308
4405
|
};
|
|
4309
4406
|
}
|
|
@@ -5715,17 +5812,37 @@ var CONFIG_FILE_NAMES = [
|
|
|
5715
5812
|
"skedyul.config.mjs",
|
|
5716
5813
|
"skedyul.config.cjs"
|
|
5717
5814
|
];
|
|
5815
|
+
function loadTypeScriptConfigModule(absolutePath) {
|
|
5816
|
+
try {
|
|
5817
|
+
require("tsx/cjs");
|
|
5818
|
+
delete require.cache[absolutePath];
|
|
5819
|
+
const module2 = require(absolutePath);
|
|
5820
|
+
return module2.default ?? module2;
|
|
5821
|
+
} catch (error) {
|
|
5822
|
+
throw new Error(
|
|
5823
|
+
`Cannot load TypeScript config: ${absolutePath}: ${error instanceof Error ? error.message : String(error)}`
|
|
5824
|
+
);
|
|
5825
|
+
}
|
|
5826
|
+
}
|
|
5718
5827
|
async function transpileTypeScript(filePath) {
|
|
5719
5828
|
const content = fs3.readFileSync(filePath, "utf-8");
|
|
5720
5829
|
const configDir = path3.dirname(path3.resolve(filePath));
|
|
5721
5830
|
let transpiled = content.replace(/import\s+type\s+\{[^}]+\}\s+from\s+['"][^'"]+['"]\s*;?\n?/g, "").replace(/import\s+\{\s*defineConfig\s*\}\s+from\s+['"]skedyul['"]\s*;?\n?/g, "").replace(/:\s*SkedyulConfig/g, "").replace(/export\s+default\s+/, "module.exports = ").replace(/defineConfig\s*\(\s*\{/, "{").replace(/\}\s*\)\s*;?\s*$/, "}");
|
|
5722
5831
|
transpiled = transpiled.replace(
|
|
5723
5832
|
/import\s+(\w+)\s+from\s+['"](\.[^'"]+)['"]\s*(?:with\s*\{[^}]*\})?/g,
|
|
5724
|
-
(
|
|
5833
|
+
(_match, varName, relativePath) => {
|
|
5725
5834
|
const absolutePath = path3.resolve(configDir, relativePath);
|
|
5726
5835
|
return `const ${varName} = require('${absolutePath.replace(/\\/g, "/")}')`;
|
|
5727
5836
|
}
|
|
5728
5837
|
);
|
|
5838
|
+
transpiled = transpiled.replace(
|
|
5839
|
+
/import\s+\{\s*([^}]+)\s*\}\s+from\s+['"](\.[^'"]+)['"]\s*;?\n?/g,
|
|
5840
|
+
(_match, namedImports, relativePath) => {
|
|
5841
|
+
const absolutePath = path3.resolve(configDir, relativePath);
|
|
5842
|
+
return `const { ${namedImports.trim()} } = require('${absolutePath.replace(/\\/g, "/")}')
|
|
5843
|
+
`;
|
|
5844
|
+
}
|
|
5845
|
+
);
|
|
5729
5846
|
transpiled = transpiled.replace(/import\s*\(\s*['"][^'"]+['"]\s*\)/g, "null");
|
|
5730
5847
|
return transpiled;
|
|
5731
5848
|
}
|
|
@@ -5736,16 +5853,9 @@ async function loadConfig(configPath) {
|
|
|
5736
5853
|
}
|
|
5737
5854
|
const isTypeScript = absolutePath.endsWith(".ts");
|
|
5738
5855
|
try {
|
|
5739
|
-
let moduleToLoad = absolutePath;
|
|
5740
5856
|
if (isTypeScript) {
|
|
5741
|
-
const transpiled = await transpileTypeScript(absolutePath);
|
|
5742
|
-
const tempDir = os.tmpdir();
|
|
5743
|
-
const tempFile = path3.join(tempDir, `skedyul-config-${Date.now()}.cjs`);
|
|
5744
|
-
fs3.writeFileSync(tempFile, transpiled);
|
|
5745
|
-
moduleToLoad = tempFile;
|
|
5746
5857
|
try {
|
|
5747
|
-
const
|
|
5748
|
-
const config2 = module3.default || module3;
|
|
5858
|
+
const config2 = loadTypeScriptConfigModule(absolutePath);
|
|
5749
5859
|
if (!config2 || typeof config2 !== "object") {
|
|
5750
5860
|
throw new Error("Config file must export a configuration object");
|
|
5751
5861
|
}
|
|
@@ -5753,16 +5863,31 @@ async function loadConfig(configPath) {
|
|
|
5753
5863
|
throw new Error('Config must have a "name" property');
|
|
5754
5864
|
}
|
|
5755
5865
|
return config2;
|
|
5756
|
-
}
|
|
5866
|
+
} catch (tsxError) {
|
|
5867
|
+
const transpiled = await transpileTypeScript(absolutePath);
|
|
5868
|
+
const tempFile = path3.join(os.tmpdir(), `skedyul-config-${Date.now()}.cjs`);
|
|
5869
|
+
fs3.writeFileSync(tempFile, transpiled);
|
|
5757
5870
|
try {
|
|
5758
|
-
|
|
5759
|
-
|
|
5871
|
+
const module3 = require(tempFile);
|
|
5872
|
+
const config2 = module3.default || module3;
|
|
5873
|
+
if (!config2 || typeof config2 !== "object") {
|
|
5874
|
+
throw new Error("Config file must export a configuration object");
|
|
5875
|
+
}
|
|
5876
|
+
if (!config2.name || typeof config2.name !== "string") {
|
|
5877
|
+
throw new Error('Config must have a "name" property');
|
|
5878
|
+
}
|
|
5879
|
+
return config2;
|
|
5880
|
+
} finally {
|
|
5881
|
+
try {
|
|
5882
|
+
fs3.unlinkSync(tempFile);
|
|
5883
|
+
} catch {
|
|
5884
|
+
}
|
|
5760
5885
|
}
|
|
5761
5886
|
}
|
|
5762
5887
|
}
|
|
5763
5888
|
const module2 = await import(
|
|
5764
5889
|
/* webpackIgnore: true */
|
|
5765
|
-
|
|
5890
|
+
absolutePath
|
|
5766
5891
|
);
|
|
5767
5892
|
const config = module2.default || module2;
|
|
5768
5893
|
if (!config || typeof config !== "object") {
|
|
@@ -5813,49 +5938,6 @@ function getRequiredInstallEnvKeys(config) {
|
|
|
5813
5938
|
return Object.entries(provision.env).filter(([, def]) => def.required).map(([key]) => key);
|
|
5814
5939
|
}
|
|
5815
5940
|
|
|
5816
|
-
// src/ratelimit/errors.ts
|
|
5817
|
-
var QueueContextError = class extends Error {
|
|
5818
|
-
constructor(message) {
|
|
5819
|
-
super(message);
|
|
5820
|
-
this.code = "QUEUE_CONTEXT_ERROR";
|
|
5821
|
-
this.name = "QueueContextError";
|
|
5822
|
-
}
|
|
5823
|
-
};
|
|
5824
|
-
var QueueNotFoundError = class extends Error {
|
|
5825
|
-
constructor(queueName) {
|
|
5826
|
-
super(`Queue "${queueName}" is not defined in skedyul.config queues`);
|
|
5827
|
-
this.code = "QUEUE_NOT_FOUND";
|
|
5828
|
-
this.name = "QueueNotFoundError";
|
|
5829
|
-
}
|
|
5830
|
-
};
|
|
5831
|
-
var QueuedFetchExhaustedError = class extends Error {
|
|
5832
|
-
constructor(attempts, maxRetries, causeError) {
|
|
5833
|
-
super(
|
|
5834
|
-
`queuedFetch exhausted retries after ${attempts} attempts (maxRetries=${maxRetries})`
|
|
5835
|
-
);
|
|
5836
|
-
this.code = "QUEUED_FETCH_EXHAUSTED";
|
|
5837
|
-
this.name = "QueuedFetchExhaustedError";
|
|
5838
|
-
this.attempts = attempts;
|
|
5839
|
-
this.maxRetries = maxRetries;
|
|
5840
|
-
this.causeError = causeError;
|
|
5841
|
-
}
|
|
5842
|
-
};
|
|
5843
|
-
var RequeueOutsideContextError = class extends Error {
|
|
5844
|
-
constructor() {
|
|
5845
|
-
super("requeue() can only be called inside an active queuedFetch operation");
|
|
5846
|
-
this.code = "REQUEUE_OUTSIDE_CONTEXT";
|
|
5847
|
-
this.name = "RequeueOutsideContextError";
|
|
5848
|
-
}
|
|
5849
|
-
};
|
|
5850
|
-
var RateLimitBackendError = class extends Error {
|
|
5851
|
-
constructor(message, statusCode) {
|
|
5852
|
-
super(message);
|
|
5853
|
-
this.code = "RATE_LIMIT_BACKEND_ERROR";
|
|
5854
|
-
this.name = "RateLimitBackendError";
|
|
5855
|
-
this.statusCode = statusCode;
|
|
5856
|
-
}
|
|
5857
|
-
};
|
|
5858
|
-
|
|
5859
5941
|
// src/ratelimit/resolve-queue-key.ts
|
|
5860
5942
|
function resolveEndpointHandle(config, invocation) {
|
|
5861
5943
|
if (config.endpoint) {
|
|
@@ -6299,11 +6381,30 @@ async function executeWithRetries(operation, maxRetries) {
|
|
|
6299
6381
|
const timeoutMs = operation.resolved.config.timeout ?? 12e4;
|
|
6300
6382
|
const retryDelayMs = operation.resolved.config.retryDelayMs ?? 1e3;
|
|
6301
6383
|
const shouldRetryFn = getQueueConfigWithRetry(operation.resolved.name)?.shouldRetry ?? defaultShouldRetry;
|
|
6302
|
-
|
|
6303
|
-
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6384
|
+
let lease;
|
|
6385
|
+
try {
|
|
6386
|
+
lease = await backend.acquire(
|
|
6387
|
+
operation.resolved.queueKey,
|
|
6388
|
+
operation.resolved.limits,
|
|
6389
|
+
timeoutMs
|
|
6390
|
+
);
|
|
6391
|
+
} catch (acquireError) {
|
|
6392
|
+
if (acquireError instanceof RateLimitBackendError && acquireError.statusCode === 408) {
|
|
6393
|
+
const retryAfterMs = Math.max(
|
|
6394
|
+
operation.resolved.limits.minTime ?? 1e3,
|
|
6395
|
+
operation.resolved.config.retryDelayMs ?? 1e3
|
|
6396
|
+
);
|
|
6397
|
+
throw new RateLimitExceededError(retryAfterMs);
|
|
6398
|
+
}
|
|
6399
|
+
if (acquireError instanceof Error && acquireError.message.includes("timed out")) {
|
|
6400
|
+
const retryAfterMs = Math.max(
|
|
6401
|
+
operation.resolved.limits.minTime ?? 1e3,
|
|
6402
|
+
operation.resolved.config.retryDelayMs ?? 1e3
|
|
6403
|
+
);
|
|
6404
|
+
throw new RateLimitExceededError(retryAfterMs);
|
|
6405
|
+
}
|
|
6406
|
+
throw acquireError;
|
|
6407
|
+
}
|
|
6307
6408
|
operation.lease = lease;
|
|
6308
6409
|
setActiveQueuedOperationLease(lease);
|
|
6309
6410
|
try {
|
|
@@ -7790,6 +7891,7 @@ var index_default = { z: import_v413.z };
|
|
|
7790
7891
|
EventSubscriptionSchema,
|
|
7791
7892
|
EventTypeSchema,
|
|
7792
7893
|
EventWaitSchema,
|
|
7894
|
+
EventWiringPanelComponentDefinitionSchema,
|
|
7793
7895
|
EventsConfigSchema,
|
|
7794
7896
|
ExternalDataCacheSchema,
|
|
7795
7897
|
ExternalMemoryConfigSchema,
|
|
@@ -7874,6 +7976,7 @@ var index_default = { z: import_v413.z };
|
|
|
7874
7976
|
QueueNotFoundError,
|
|
7875
7977
|
QueuedFetchExhaustedError,
|
|
7876
7978
|
RateLimitBackendError,
|
|
7979
|
+
RateLimitExceededError,
|
|
7877
7980
|
RelationshipCardinalitySchema,
|
|
7878
7981
|
RelationshipDefinitionSchema,
|
|
7879
7982
|
RelationshipExtensionSchema,
|
|
@@ -25,3 +25,9 @@ export declare class RateLimitBackendError extends Error {
|
|
|
25
25
|
readonly statusCode?: number;
|
|
26
26
|
constructor(message: string, statusCode?: number);
|
|
27
27
|
}
|
|
28
|
+
/** Thrown when queuedFetch cannot acquire a rate-limit slot within the queue timeout. */
|
|
29
|
+
export declare class RateLimitExceededError extends Error {
|
|
30
|
+
readonly code = "RATE_LIMITED";
|
|
31
|
+
readonly retryAfterMs: number;
|
|
32
|
+
constructor(retryAfterMs: number, message?: string);
|
|
33
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { queuedFetch, requeue, resolveQueue, createQueueHandle, queuedFetchResponse, } from './queued-fetch';
|
|
2
2
|
export type { QueueInput, QueueSelector, Lease, QueueLimits, ResolvedQueue, RateLimitExecutionContext, RateLimitBackend, } from './types';
|
|
3
|
-
export { QueueContextError, QueueNotFoundError, QueuedFetchExhaustedError, RequeueOutsideContextError, RateLimitBackendError, } from './errors';
|
|
3
|
+
export { QueueContextError, QueueNotFoundError, QueuedFetchExhaustedError, RequeueOutsideContextError, RateLimitBackendError, RateLimitExceededError, } from './errors';
|
|
4
4
|
export { registerQueueConfig, clearRegisteredQueueConfig, getQueueDefinitions, getQueueConfig, } from './config-loader';
|
|
5
5
|
export { runWithRateLimitExecutionContext, getRateLimitExecutionContext, } from './context';
|
|
6
6
|
export { resolveQueueKey, toQueueLimits } from './resolve-queue-key';
|
|
@@ -539,6 +539,7 @@ export declare const AgentYAMLV3Schema: z.ZodObject<{
|
|
|
539
539
|
"thread.workflow.completed": "thread.workflow.completed";
|
|
540
540
|
"thread.follow_up.due": "thread.follow_up.due";
|
|
541
541
|
"thread.reminder.due": "thread.reminder.due";
|
|
542
|
+
"thread.signal.created": "thread.signal.created";
|
|
542
543
|
}>, z.ZodString]>>>;
|
|
543
544
|
condition: z.ZodOptional<z.ZodString>;
|
|
544
545
|
emits: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodEnum<{
|
|
@@ -555,6 +556,7 @@ export declare const AgentYAMLV3Schema: z.ZodObject<{
|
|
|
555
556
|
"thread.workflow.completed": "thread.workflow.completed";
|
|
556
557
|
"thread.follow_up.due": "thread.follow_up.due";
|
|
557
558
|
"thread.reminder.due": "thread.reminder.due";
|
|
559
|
+
"thread.signal.created": "thread.signal.created";
|
|
558
560
|
}>, z.ZodString]>>>;
|
|
559
561
|
waits: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
560
562
|
event: z.ZodUnion<readonly [z.ZodEnum<{
|
|
@@ -571,6 +573,7 @@ export declare const AgentYAMLV3Schema: z.ZodObject<{
|
|
|
571
573
|
"thread.workflow.completed": "thread.workflow.completed";
|
|
572
574
|
"thread.follow_up.due": "thread.follow_up.due";
|
|
573
575
|
"thread.reminder.due": "thread.reminder.due";
|
|
576
|
+
"thread.signal.created": "thread.signal.created";
|
|
574
577
|
}>, z.ZodString]>;
|
|
575
578
|
timeout: z.ZodOptional<z.ZodString>;
|
|
576
579
|
onTimeout: z.ZodOptional<z.ZodString>;
|
|
@@ -589,6 +592,7 @@ export declare const AgentYAMLV3Schema: z.ZodObject<{
|
|
|
589
592
|
"thread.workflow.completed": "thread.workflow.completed";
|
|
590
593
|
"thread.follow_up.due": "thread.follow_up.due";
|
|
591
594
|
"thread.reminder.due": "thread.reminder.due";
|
|
595
|
+
"thread.signal.created": "thread.signal.created";
|
|
592
596
|
}>, z.ZodString]>>>;
|
|
593
597
|
cancelCondition: z.ZodOptional<z.ZodString>;
|
|
594
598
|
}, z.core.$strip>>;
|
|
@@ -76,7 +76,9 @@ var ThreadEventTypeSchema = import_v4.z.enum([
|
|
|
76
76
|
"thread.workflow.completed",
|
|
77
77
|
// Scheduled events
|
|
78
78
|
"thread.follow_up.due",
|
|
79
|
-
"thread.reminder.due"
|
|
79
|
+
"thread.reminder.due",
|
|
80
|
+
// Signal events
|
|
81
|
+
"thread.signal.created"
|
|
80
82
|
]);
|
|
81
83
|
var CustomEventTypeSchema = import_v4.z.string().regex(/^custom\.[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$/, {
|
|
82
84
|
message: "Custom event type must match pattern: custom.{namespace}.{event}"
|
|
@@ -23,7 +23,9 @@ var ThreadEventTypeSchema = z.enum([
|
|
|
23
23
|
"thread.workflow.completed",
|
|
24
24
|
// Scheduled events
|
|
25
25
|
"thread.follow_up.due",
|
|
26
|
-
"thread.reminder.due"
|
|
26
|
+
"thread.reminder.due",
|
|
27
|
+
// Signal events
|
|
28
|
+
"thread.signal.created"
|
|
27
29
|
]);
|
|
28
30
|
var CustomEventTypeSchema = z.string().regex(/^custom\.[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*$/, {
|
|
29
31
|
message: "Custom event type must match pattern: custom.{namespace}.{event}"
|
package/dist/schemas.d.ts
CHANGED
|
@@ -901,6 +901,25 @@ export declare const AlertComponentDefinitionSchema: z.ZodObject<{
|
|
|
901
901
|
}>>;
|
|
902
902
|
}, z.core.$strip>;
|
|
903
903
|
}, z.core.$strip>;
|
|
904
|
+
/** Event wiring overview for app install pages */
|
|
905
|
+
export declare const EventWiringPanelComponentDefinitionSchema: z.ZodObject<{
|
|
906
|
+
id: z.ZodString;
|
|
907
|
+
row: z.ZodNumber;
|
|
908
|
+
col: z.ZodNumber;
|
|
909
|
+
className: z.ZodOptional<z.ZodString>;
|
|
910
|
+
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
911
|
+
component: z.ZodLiteral<"EventWiringPanel">;
|
|
912
|
+
props: z.ZodObject<{
|
|
913
|
+
eventTypes: z.ZodArray<z.ZodObject<{
|
|
914
|
+
type: z.ZodString;
|
|
915
|
+
label: z.ZodString;
|
|
916
|
+
glofoxType: z.ZodOptional<z.ZodString>;
|
|
917
|
+
description: z.ZodOptional<z.ZodString>;
|
|
918
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
919
|
+
}, z.core.$strip>>;
|
|
920
|
+
recommendedWorkflowHandle: z.ZodOptional<z.ZodString>;
|
|
921
|
+
}, z.core.$strip>;
|
|
922
|
+
}, z.core.$strip>;
|
|
904
923
|
/** Forward declaration for FieldSetting with modalForm */
|
|
905
924
|
export type FormV2ComponentDefinition = z.infer<typeof FormV2ComponentDefinitionSchema>;
|
|
906
925
|
/** Modal form definition for nested forms */
|
|
@@ -1248,6 +1267,23 @@ export declare const FormV2ComponentDefinitionSchema: z.ZodDiscriminatedUnion<[z
|
|
|
1248
1267
|
destructive: "destructive";
|
|
1249
1268
|
}>>;
|
|
1250
1269
|
}, z.core.$strip>;
|
|
1270
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
1271
|
+
id: z.ZodString;
|
|
1272
|
+
row: z.ZodNumber;
|
|
1273
|
+
col: z.ZodNumber;
|
|
1274
|
+
className: z.ZodOptional<z.ZodString>;
|
|
1275
|
+
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
1276
|
+
component: z.ZodLiteral<"EventWiringPanel">;
|
|
1277
|
+
props: z.ZodObject<{
|
|
1278
|
+
eventTypes: z.ZodArray<z.ZodObject<{
|
|
1279
|
+
type: z.ZodString;
|
|
1280
|
+
label: z.ZodString;
|
|
1281
|
+
glofoxType: z.ZodOptional<z.ZodString>;
|
|
1282
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1283
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
1284
|
+
}, z.core.$strip>>;
|
|
1285
|
+
recommendedWorkflowHandle: z.ZodOptional<z.ZodString>;
|
|
1286
|
+
}, z.core.$strip>;
|
|
1251
1287
|
}, z.core.$strip>], "component">;
|
|
1252
1288
|
/** FormV2 props definition */
|
|
1253
1289
|
export declare const FormV2PropsDefinitionSchema: z.ZodObject<{
|
|
@@ -1530,6 +1566,23 @@ export declare const FormV2PropsDefinitionSchema: z.ZodObject<{
|
|
|
1530
1566
|
destructive: "destructive";
|
|
1531
1567
|
}>>;
|
|
1532
1568
|
}, z.core.$strip>;
|
|
1569
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
1570
|
+
id: z.ZodString;
|
|
1571
|
+
row: z.ZodNumber;
|
|
1572
|
+
col: z.ZodNumber;
|
|
1573
|
+
className: z.ZodOptional<z.ZodString>;
|
|
1574
|
+
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
1575
|
+
component: z.ZodLiteral<"EventWiringPanel">;
|
|
1576
|
+
props: z.ZodObject<{
|
|
1577
|
+
eventTypes: z.ZodArray<z.ZodObject<{
|
|
1578
|
+
type: z.ZodString;
|
|
1579
|
+
label: z.ZodString;
|
|
1580
|
+
glofoxType: z.ZodOptional<z.ZodString>;
|
|
1581
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1582
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
1583
|
+
}, z.core.$strip>>;
|
|
1584
|
+
recommendedWorkflowHandle: z.ZodOptional<z.ZodString>;
|
|
1585
|
+
}, z.core.$strip>;
|
|
1533
1586
|
}, z.core.$strip>], "component">>;
|
|
1534
1587
|
layout: z.ZodObject<{
|
|
1535
1588
|
type: z.ZodLiteral<"form">;
|
|
@@ -1853,6 +1906,23 @@ export declare const CardBlockDefinitionSchema: z.ZodObject<{
|
|
|
1853
1906
|
destructive: "destructive";
|
|
1854
1907
|
}>>;
|
|
1855
1908
|
}, z.core.$strip>;
|
|
1909
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
1910
|
+
id: z.ZodString;
|
|
1911
|
+
row: z.ZodNumber;
|
|
1912
|
+
col: z.ZodNumber;
|
|
1913
|
+
className: z.ZodOptional<z.ZodString>;
|
|
1914
|
+
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
1915
|
+
component: z.ZodLiteral<"EventWiringPanel">;
|
|
1916
|
+
props: z.ZodObject<{
|
|
1917
|
+
eventTypes: z.ZodArray<z.ZodObject<{
|
|
1918
|
+
type: z.ZodString;
|
|
1919
|
+
label: z.ZodString;
|
|
1920
|
+
glofoxType: z.ZodOptional<z.ZodString>;
|
|
1921
|
+
description: z.ZodOptional<z.ZodString>;
|
|
1922
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
1923
|
+
}, z.core.$strip>>;
|
|
1924
|
+
recommendedWorkflowHandle: z.ZodOptional<z.ZodString>;
|
|
1925
|
+
}, z.core.$strip>;
|
|
1856
1926
|
}, z.core.$strip>], "component">>;
|
|
1857
1927
|
layout: z.ZodObject<{
|
|
1858
1928
|
type: z.ZodLiteral<"form">;
|
|
@@ -2280,6 +2350,23 @@ export declare const PageBlockDefinitionSchema: z.ZodUnion<readonly [z.ZodObject
|
|
|
2280
2350
|
destructive: "destructive";
|
|
2281
2351
|
}>>;
|
|
2282
2352
|
}, z.core.$strip>;
|
|
2353
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
2354
|
+
id: z.ZodString;
|
|
2355
|
+
row: z.ZodNumber;
|
|
2356
|
+
col: z.ZodNumber;
|
|
2357
|
+
className: z.ZodOptional<z.ZodString>;
|
|
2358
|
+
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
2359
|
+
component: z.ZodLiteral<"EventWiringPanel">;
|
|
2360
|
+
props: z.ZodObject<{
|
|
2361
|
+
eventTypes: z.ZodArray<z.ZodObject<{
|
|
2362
|
+
type: z.ZodString;
|
|
2363
|
+
label: z.ZodString;
|
|
2364
|
+
glofoxType: z.ZodOptional<z.ZodString>;
|
|
2365
|
+
description: z.ZodOptional<z.ZodString>;
|
|
2366
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
2367
|
+
}, z.core.$strip>>;
|
|
2368
|
+
recommendedWorkflowHandle: z.ZodOptional<z.ZodString>;
|
|
2369
|
+
}, z.core.$strip>;
|
|
2283
2370
|
}, z.core.$strip>], "component">>;
|
|
2284
2371
|
layout: z.ZodObject<{
|
|
2285
2372
|
type: z.ZodLiteral<"form">;
|
|
@@ -2813,6 +2900,23 @@ export declare const PageDefinitionSchema: z.ZodObject<{
|
|
|
2813
2900
|
destructive: "destructive";
|
|
2814
2901
|
}>>;
|
|
2815
2902
|
}, z.core.$strip>;
|
|
2903
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
2904
|
+
id: z.ZodString;
|
|
2905
|
+
row: z.ZodNumber;
|
|
2906
|
+
col: z.ZodNumber;
|
|
2907
|
+
className: z.ZodOptional<z.ZodString>;
|
|
2908
|
+
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
2909
|
+
component: z.ZodLiteral<"EventWiringPanel">;
|
|
2910
|
+
props: z.ZodObject<{
|
|
2911
|
+
eventTypes: z.ZodArray<z.ZodObject<{
|
|
2912
|
+
type: z.ZodString;
|
|
2913
|
+
label: z.ZodString;
|
|
2914
|
+
glofoxType: z.ZodOptional<z.ZodString>;
|
|
2915
|
+
description: z.ZodOptional<z.ZodString>;
|
|
2916
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
2917
|
+
}, z.core.$strip>>;
|
|
2918
|
+
recommendedWorkflowHandle: z.ZodOptional<z.ZodString>;
|
|
2919
|
+
}, z.core.$strip>;
|
|
2816
2920
|
}, z.core.$strip>], "component">>;
|
|
2817
2921
|
layout: z.ZodObject<{
|
|
2818
2922
|
type: z.ZodLiteral<"form">;
|
|
@@ -3682,6 +3786,23 @@ export declare const ProvisionConfigSchema: z.ZodObject<{
|
|
|
3682
3786
|
destructive: "destructive";
|
|
3683
3787
|
}>>;
|
|
3684
3788
|
}, z.core.$strip>;
|
|
3789
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
3790
|
+
id: z.ZodString;
|
|
3791
|
+
row: z.ZodNumber;
|
|
3792
|
+
col: z.ZodNumber;
|
|
3793
|
+
className: z.ZodOptional<z.ZodString>;
|
|
3794
|
+
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
3795
|
+
component: z.ZodLiteral<"EventWiringPanel">;
|
|
3796
|
+
props: z.ZodObject<{
|
|
3797
|
+
eventTypes: z.ZodArray<z.ZodObject<{
|
|
3798
|
+
type: z.ZodString;
|
|
3799
|
+
label: z.ZodString;
|
|
3800
|
+
glofoxType: z.ZodOptional<z.ZodString>;
|
|
3801
|
+
description: z.ZodOptional<z.ZodString>;
|
|
3802
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
3803
|
+
}, z.core.$strip>>;
|
|
3804
|
+
recommendedWorkflowHandle: z.ZodOptional<z.ZodString>;
|
|
3805
|
+
}, z.core.$strip>;
|
|
3685
3806
|
}, z.core.$strip>], "component">>;
|
|
3686
3807
|
layout: z.ZodObject<{
|
|
3687
3808
|
type: z.ZodLiteral<"form">;
|
|
@@ -4388,6 +4509,23 @@ export declare const SkedyulConfigSchema: z.ZodObject<{
|
|
|
4388
4509
|
destructive: "destructive";
|
|
4389
4510
|
}>>;
|
|
4390
4511
|
}, z.core.$strip>;
|
|
4512
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
4513
|
+
id: z.ZodString;
|
|
4514
|
+
row: z.ZodNumber;
|
|
4515
|
+
col: z.ZodNumber;
|
|
4516
|
+
className: z.ZodOptional<z.ZodString>;
|
|
4517
|
+
hidden: z.ZodOptional<z.ZodBoolean>;
|
|
4518
|
+
component: z.ZodLiteral<"EventWiringPanel">;
|
|
4519
|
+
props: z.ZodObject<{
|
|
4520
|
+
eventTypes: z.ZodArray<z.ZodObject<{
|
|
4521
|
+
type: z.ZodString;
|
|
4522
|
+
label: z.ZodString;
|
|
4523
|
+
glofoxType: z.ZodOptional<z.ZodString>;
|
|
4524
|
+
description: z.ZodOptional<z.ZodString>;
|
|
4525
|
+
icon: z.ZodOptional<z.ZodString>;
|
|
4526
|
+
}, z.core.$strip>>;
|
|
4527
|
+
recommendedWorkflowHandle: z.ZodOptional<z.ZodString>;
|
|
4528
|
+
}, z.core.$strip>;
|
|
4391
4529
|
}, z.core.$strip>], "component">>;
|
|
4392
4530
|
layout: z.ZodObject<{
|
|
4393
4531
|
type: z.ZodLiteral<"form">;
|