reqon-dsl 0.2.0 → 0.3.0
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/CHANGELOG.md +7 -0
- package/README.md +22 -0
- package/dist/ast/nodes.d.ts +83 -4
- package/dist/ast/nodes.js +14 -0
- package/dist/auth/circuit-breaker.js +7 -6
- package/dist/auth/rate-limiter.d.ts +4 -0
- package/dist/auth/rate-limiter.js +9 -16
- package/dist/cli.d.ts +13 -0
- package/dist/cli.js +84 -4
- package/dist/config/constants.d.ts +141 -0
- package/dist/config/constants.js +128 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.js +4 -0
- package/dist/control/index.d.ts +2 -0
- package/dist/control/index.js +1 -0
- package/dist/control/server.d.ts +88 -0
- package/dist/control/server.js +238 -0
- package/dist/control/types.d.ts +55 -0
- package/dist/control/types.js +7 -0
- package/dist/debug/cli-debugger.d.ts +17 -0
- package/dist/debug/cli-debugger.js +180 -0
- package/dist/debug/controller.d.ts +94 -0
- package/dist/debug/controller.js +45 -0
- package/dist/debug/index.d.ts +6 -0
- package/dist/debug/index.js +5 -0
- package/dist/errors/index.d.ts +67 -0
- package/dist/errors/index.js +89 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/state.d.ts +24 -0
- package/dist/index.d.ts +21 -1
- package/dist/index.js +33 -2
- package/dist/interpreter/context.d.ts +14 -0
- package/dist/interpreter/context.js +15 -0
- package/dist/interpreter/evaluator.d.ts +63 -1
- package/dist/interpreter/evaluator.js +186 -39
- package/dist/interpreter/executor.d.ts +70 -14
- package/dist/interpreter/executor.js +503 -174
- package/dist/interpreter/fetch-handler.d.ts +9 -0
- package/dist/interpreter/fetch-handler.js +133 -24
- package/dist/interpreter/http.d.ts +5 -0
- package/dist/interpreter/http.js +26 -12
- package/dist/interpreter/index.d.ts +3 -1
- package/dist/interpreter/index.js +2 -0
- package/dist/interpreter/pagination.d.ts +11 -2
- package/dist/interpreter/pagination.js +95 -31
- package/dist/interpreter/signals.d.ts +8 -0
- package/dist/interpreter/signals.js +12 -0
- package/dist/interpreter/source-manager.d.ts +75 -0
- package/dist/interpreter/source-manager.js +157 -0
- package/dist/interpreter/step-handlers/apply-handler.d.ts +29 -0
- package/dist/interpreter/step-handlers/apply-handler.js +79 -0
- package/dist/interpreter/step-handlers/for-handler.d.ts +13 -0
- package/dist/interpreter/step-handlers/for-handler.js +71 -4
- package/dist/interpreter/step-handlers/index.d.ts +4 -2
- package/dist/interpreter/step-handlers/index.js +4 -2
- package/dist/interpreter/step-handlers/match-handler.d.ts +9 -0
- package/dist/interpreter/step-handlers/match-handler.js +43 -16
- package/dist/interpreter/step-handlers/pause-handler.d.ts +52 -0
- package/dist/interpreter/step-handlers/pause-handler.js +87 -0
- package/dist/interpreter/step-handlers/store-handler.d.ts +11 -1
- package/dist/interpreter/step-handlers/store-handler.js +45 -13
- package/dist/interpreter/step-handlers/types.d.ts +3 -0
- package/dist/interpreter/step-handlers/validate-handler.d.ts +2 -1
- package/dist/interpreter/step-handlers/validate-handler.js +4 -2
- package/dist/interpreter/step-handlers/webhook-handler.d.ts +3 -0
- package/dist/interpreter/step-handlers/webhook-handler.js +18 -2
- package/dist/interpreter/store-manager.d.ts +46 -0
- package/dist/interpreter/store-manager.js +66 -0
- package/dist/lexer/index.d.ts +11 -4
- package/dist/lexer/index.js +11 -4
- package/dist/lexer/tokens.d.ts +17 -1
- package/dist/lexer/tokens.js +36 -0
- package/dist/mcp/index.d.ts +11 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.js +451 -0
- package/dist/oas/index.d.ts +2 -0
- package/dist/oas/index.js +1 -0
- package/dist/oas/mock-generator.d.ts +12 -0
- package/dist/oas/mock-generator.js +187 -0
- package/dist/observability/events.d.ts +244 -0
- package/dist/observability/events.js +90 -0
- package/dist/observability/index.d.ts +15 -0
- package/dist/observability/index.js +12 -0
- package/dist/observability/logger.d.ts +106 -0
- package/dist/observability/logger.js +259 -0
- package/dist/observability/otel.d.ts +135 -0
- package/dist/observability/otel.js +386 -0
- package/dist/parser/action-parser.d.ts +105 -0
- package/dist/parser/action-parser.js +645 -0
- package/dist/parser/expressions.d.ts +13 -0
- package/dist/parser/expressions.js +72 -2
- package/dist/parser/fetch-parser.d.ts +27 -0
- package/dist/parser/fetch-parser.js +269 -0
- package/dist/parser/index.d.ts +17 -0
- package/dist/parser/index.js +17 -0
- package/dist/parser/parser.d.ts +44 -46
- package/dist/parser/parser.js +122 -1070
- package/dist/parser/pipeline-parser.d.ts +12 -0
- package/dist/parser/pipeline-parser.js +52 -0
- package/dist/parser/schedule-parser.d.ts +7 -0
- package/dist/parser/schedule-parser.js +137 -0
- package/dist/parser/source-parser.d.ts +9 -0
- package/dist/parser/source-parser.js +151 -0
- package/dist/pause/index.d.ts +14 -0
- package/dist/pause/index.js +11 -0
- package/dist/pause/manager.d.ts +118 -0
- package/dist/pause/manager.js +245 -0
- package/dist/pause/state.d.ts +93 -0
- package/dist/pause/state.js +103 -0
- package/dist/pause/store.d.ts +61 -0
- package/dist/pause/store.js +156 -0
- package/dist/plugin.d.ts +9 -12
- package/dist/plugin.js +10 -13
- package/dist/stores/factory.d.ts +1 -1
- package/dist/stores/factory.js +3 -2
- package/dist/stores/file.d.ts +26 -0
- package/dist/stores/file.js +64 -10
- package/dist/stores/index.d.ts +16 -1
- package/dist/stores/index.js +16 -1
- package/dist/stores/memory.d.ts +4 -0
- package/dist/stores/memory.js +11 -0
- package/dist/stores/types.d.ts +17 -0
- package/dist/stores/types.js +12 -0
- package/dist/trace/index.d.ts +16 -0
- package/dist/trace/index.js +12 -0
- package/dist/trace/recorder.d.ts +71 -0
- package/dist/trace/recorder.js +144 -0
- package/dist/trace/replay.d.ts +132 -0
- package/dist/trace/replay.js +264 -0
- package/dist/trace/state.d.ts +102 -0
- package/dist/trace/state.js +86 -0
- package/dist/trace/store.d.ts +69 -0
- package/dist/trace/store.js +225 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/type-guards.d.ts +58 -0
- package/dist/utils/type-guards.js +92 -0
- package/dist/webhook/server.js +7 -6
- package/package.json +55 -6
- package/.claude/settings.local.json +0 -31
- package/.claude/skills/api-integration.md +0 -125
- package/.claude/skills/database-schema.md +0 -51
- package/.claude/skills/dsl-design.md +0 -80
- package/.claude/skills/property-testing.md +0 -143
- package/.claude/skills/reqon/SKILL.md +0 -44
- package/.claude/skills/reqon/references/examples.md +0 -206
- package/.claude/skills/reqon/references/syntax.md +0 -263
- package/.claude/skills/vscode-extension.md +0 -113
- package/.github/dependabot.yml +0 -32
- package/.github/pull_request_template.md +0 -21
- package/.github/workflows/ci.yml +0 -174
- package/.github/workflows/release.yml +0 -73
- package/CLAUDE.md +0 -72
- package/CONTRIBUTING.md +0 -161
- package/TODO.md +0 -51
- package/dist/auth/auth.test.d.ts +0 -1
- package/dist/auth/auth.test.js +0 -255
- package/dist/errors/errors.test.d.ts +0 -1
- package/dist/errors/errors.test.js +0 -165
- package/dist/execution/execution.test.d.ts +0 -1
- package/dist/execution/execution.test.js +0 -246
- package/dist/integration.test.d.ts +0 -1
- package/dist/integration.test.js +0 -168
- package/dist/interpreter/evaluator.test.d.ts +0 -1
- package/dist/interpreter/evaluator.test.js +0 -512
- package/dist/interpreter/http.test.d.ts +0 -1
- package/dist/interpreter/http.test.js +0 -299
- package/dist/interpreter/progress.test.d.ts +0 -1
- package/dist/interpreter/progress.test.js +0 -216
- package/dist/interpreter/schema-matcher.test.d.ts +0 -1
- package/dist/interpreter/schema-matcher.test.js +0 -122
- package/dist/lexer/lexer.d.ts +0 -24
- package/dist/lexer/lexer.js +0 -264
- package/dist/lexer/lexer.test.d.ts +0 -1
- package/dist/lexer/lexer.test.js +0 -259
- package/dist/loader/loader.test.d.ts +0 -1
- package/dist/loader/loader.test.js +0 -287
- package/dist/oas/oas.test.d.ts +0 -1
- package/dist/oas/oas.test.js +0 -218
- package/dist/parser/expressions.test.d.ts +0 -1
- package/dist/parser/expressions.test.js +0 -378
- package/dist/parser/match.test.d.ts +0 -1
- package/dist/parser/match.test.js +0 -254
- package/dist/parser/parser.test.d.ts +0 -1
- package/dist/parser/parser.test.js +0 -333
- package/dist/parser/schedule.test.d.ts +0 -1
- package/dist/parser/schedule.test.js +0 -241
- package/dist/scheduler/cron-parser.test.d.ts +0 -1
- package/dist/scheduler/cron-parser.test.js +0 -188
- package/dist/stores/file.test.d.ts +0 -1
- package/dist/stores/file.test.js +0 -165
- package/dist/stores/memory.test.d.ts +0 -1
- package/dist/stores/memory.test.js +0 -157
- package/dist/stores/stores.test.d.ts +0 -1
- package/dist/stores/stores.test.js +0 -158
- package/dist/sync/sync.test.d.ts +0 -1
- package/dist/sync/sync.test.js +0 -221
- package/docusaurus/README.md +0 -41
- package/docusaurus/docs/advanced/execution-state.md +0 -283
- package/docusaurus/docs/advanced/extending-reqon.md +0 -388
- package/docusaurus/docs/advanced/multi-file-missions.md +0 -250
- package/docusaurus/docs/advanced/parallel-execution.md +0 -353
- package/docusaurus/docs/api-reference.md +0 -443
- package/docusaurus/docs/authentication/api-key.md +0 -339
- package/docusaurus/docs/authentication/basic.md +0 -276
- package/docusaurus/docs/authentication/bearer.md +0 -282
- package/docusaurus/docs/authentication/oauth2.md +0 -317
- package/docusaurus/docs/authentication/overview.md +0 -251
- package/docusaurus/docs/cli.md +0 -229
- package/docusaurus/docs/core-concepts/actions.md +0 -286
- package/docusaurus/docs/core-concepts/missions.md +0 -264
- package/docusaurus/docs/core-concepts/schemas.md +0 -353
- package/docusaurus/docs/core-concepts/sources.md +0 -339
- package/docusaurus/docs/core-concepts/stores.md +0 -332
- package/docusaurus/docs/dsl-syntax/expressions.md +0 -361
- package/docusaurus/docs/dsl-syntax/fetch.md +0 -293
- package/docusaurus/docs/dsl-syntax/for-loops.md +0 -324
- package/docusaurus/docs/dsl-syntax/map.md +0 -345
- package/docusaurus/docs/dsl-syntax/match.md +0 -387
- package/docusaurus/docs/dsl-syntax/pipelines.md +0 -397
- package/docusaurus/docs/dsl-syntax/validate.md +0 -401
- package/docusaurus/docs/error-handling/dead-letter-queues.md +0 -399
- package/docusaurus/docs/error-handling/flow-control.md +0 -337
- package/docusaurus/docs/error-handling/retry-strategies.md +0 -368
- package/docusaurus/docs/examples.md +0 -488
- package/docusaurus/docs/getting-started.md +0 -256
- package/docusaurus/docs/http/circuit-breaker.md +0 -401
- package/docusaurus/docs/http/incremental-sync.md +0 -394
- package/docusaurus/docs/http/pagination.md +0 -361
- package/docusaurus/docs/http/rate-limiting.md +0 -383
- package/docusaurus/docs/http/requests.md +0 -328
- package/docusaurus/docs/http/retry.md +0 -402
- package/docusaurus/docs/intro.md +0 -90
- package/docusaurus/docs/openapi/loading-specs.md +0 -305
- package/docusaurus/docs/openapi/operation-calls.md +0 -314
- package/docusaurus/docs/openapi/overview.md +0 -212
- package/docusaurus/docs/openapi/response-validation.md +0 -344
- package/docusaurus/docs/scheduling/cron.md +0 -305
- package/docusaurus/docs/scheduling/daemon-mode.md +0 -317
- package/docusaurus/docs/scheduling/intervals.md +0 -289
- package/docusaurus/docs/scheduling/overview.md +0 -231
- package/docusaurus/docs/stores/custom-adapters.md +0 -376
- package/docusaurus/docs/stores/file.md +0 -236
- package/docusaurus/docs/stores/memory.md +0 -193
- package/docusaurus/docs/stores/overview.md +0 -274
- package/docusaurus/docs/stores/postgrest.md +0 -316
- package/docusaurus/docusaurus.config.ts +0 -148
- package/docusaurus/package-lock.json +0 -18029
- package/docusaurus/package.json +0 -47
- package/docusaurus/sidebars.ts +0 -155
- package/docusaurus/src/components/HomepageFeatures/index.tsx +0 -105
- package/docusaurus/src/components/HomepageFeatures/styles.module.css +0 -12
- package/docusaurus/src/css/custom.css +0 -169
- package/docusaurus/src/pages/index.module.css +0 -48
- package/docusaurus/src/pages/index.tsx +0 -110
- package/docusaurus/src/pages/markdown-page.md +0 -7
- package/docusaurus/static/.nojekyll +0 -0
- package/docusaurus/static/img/docusaurus-social-card.jpg +0 -0
- package/docusaurus/static/img/docusaurus.png +0 -0
- package/docusaurus/static/img/favicon.ico +0 -0
- package/docusaurus/static/img/logo.svg +0 -10
- package/docusaurus/static/img/undraw_docusaurus_mountain.svg +0 -171
- package/docusaurus/static/img/undraw_docusaurus_react.svg +0 -170
- package/docusaurus/static/img/undraw_docusaurus_tree.svg +0 -40
- package/docusaurus/tsconfig.json +0 -8
- package/examples/README.md +0 -112
- package/examples/error-handling/README.md +0 -150
- package/examples/error-handling/payment-processor.vague +0 -287
- package/examples/github-sync/README.md +0 -74
- package/examples/github-sync/fetch-issues.vague +0 -47
- package/examples/github-sync/fetch-prs.vague +0 -40
- package/examples/github-sync/mission.vague +0 -101
- package/examples/github-sync/normalize.vague +0 -70
- package/examples/jsonplaceholder/README.md +0 -28
- package/examples/jsonplaceholder/posts.vague +0 -48
- package/examples/petstore/README.md +0 -35
- package/examples/petstore/openapi.yaml +0 -97
- package/examples/petstore/sync.vague +0 -52
- package/examples/temporal-comparison/README.md +0 -297
- package/examples/temporal-comparison/reconciliation.vague +0 -355
- package/examples/temporal-comparison/temporal/activities/index.ts +0 -8
- package/examples/temporal-comparison/temporal/activities/shipstation.ts +0 -225
- package/examples/temporal-comparison/temporal/activities/shopify.ts +0 -257
- package/examples/temporal-comparison/temporal/activities/storage.ts +0 -198
- package/examples/temporal-comparison/temporal/activities/stripe.ts +0 -169
- package/examples/temporal-comparison/temporal/activities/validation.ts +0 -205
- package/examples/temporal-comparison/temporal/client/schedule.ts +0 -218
- package/examples/temporal-comparison/temporal/config/retry.ts +0 -63
- package/examples/temporal-comparison/temporal/types/index.ts +0 -129
- package/examples/temporal-comparison/temporal/workers/main.ts +0 -130
- package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +0 -262
- package/examples/xero/README.md +0 -88
- package/examples/xero/invoices.vague +0 -189
- package/src/api-integration.test.ts +0 -954
- package/src/ast/index.ts +0 -1
- package/src/ast/nodes.ts +0 -310
- package/src/auth/auth.test.ts +0 -326
- package/src/auth/circuit-breaker.test.ts +0 -390
- package/src/auth/circuit-breaker.ts +0 -379
- package/src/auth/credentials.test.ts +0 -273
- package/src/auth/credentials.ts +0 -246
- package/src/auth/index.ts +0 -40
- package/src/auth/oauth2-provider.ts +0 -177
- package/src/auth/rate-limiter.ts +0 -459
- package/src/auth/token-store.ts +0 -177
- package/src/auth/types.ts +0 -159
- package/src/benchmark/e2e.bench.ts +0 -288
- package/src/benchmark/evaluator.bench.ts +0 -331
- package/src/benchmark/fixtures.ts +0 -295
- package/src/benchmark/index.ts +0 -108
- package/src/benchmark/lexer.bench.ts +0 -69
- package/src/benchmark/parser.bench.ts +0 -103
- package/src/benchmark/resilience.bench.ts +0 -193
- package/src/benchmark/store.bench.ts +0 -147
- package/src/benchmark/utils.ts +0 -230
- package/src/cli.ts +0 -313
- package/src/errors/errors.test.ts +0 -234
- package/src/errors/index.ts +0 -223
- package/src/execution/execution.test.ts +0 -307
- package/src/execution/index.ts +0 -21
- package/src/execution/state.ts +0 -207
- package/src/execution/store.ts +0 -188
- package/src/index.ts +0 -169
- package/src/integration.test.ts +0 -192
- package/src/interpreter/context.ts +0 -57
- package/src/interpreter/evaluator.test.ts +0 -796
- package/src/interpreter/evaluator.ts +0 -245
- package/src/interpreter/executor.ts +0 -946
- package/src/interpreter/fetch-handler.ts +0 -302
- package/src/interpreter/http.test.ts +0 -423
- package/src/interpreter/http.ts +0 -308
- package/src/interpreter/index.ts +0 -32
- package/src/interpreter/pagination.ts +0 -207
- package/src/interpreter/progress.test.ts +0 -276
- package/src/interpreter/schema-matcher.test.ts +0 -160
- package/src/interpreter/schema-matcher.ts +0 -168
- package/src/interpreter/signals.ts +0 -73
- package/src/interpreter/step-handlers/for-handler.ts +0 -65
- package/src/interpreter/step-handlers/index.ts +0 -17
- package/src/interpreter/step-handlers/map-handler.ts +0 -24
- package/src/interpreter/step-handlers/match-handler.ts +0 -101
- package/src/interpreter/step-handlers/store-handler.ts +0 -78
- package/src/interpreter/step-handlers/types.ts +0 -17
- package/src/interpreter/step-handlers/validate-handler.ts +0 -30
- package/src/interpreter/step-handlers/webhook-handler.ts +0 -142
- package/src/lexer/index.ts +0 -18
- package/src/lexer/lexer.test.ts +0 -316
- package/src/lexer/tokens.ts +0 -179
- package/src/loader/index.ts +0 -288
- package/src/loader/loader.test.ts +0 -360
- package/src/oas/index.ts +0 -4
- package/src/oas/loader.ts +0 -126
- package/src/oas/oas.test.ts +0 -254
- package/src/oas/validator.ts +0 -299
- package/src/parser/base.ts +0 -124
- package/src/parser/expressions.test.ts +0 -525
- package/src/parser/expressions.ts +0 -314
- package/src/parser/index.ts +0 -3
- package/src/parser/match.test.ts +0 -296
- package/src/parser/parser.test.ts +0 -739
- package/src/parser/parser.ts +0 -1469
- package/src/parser/schedule.test.ts +0 -287
- package/src/parser/webhook.test.ts +0 -248
- package/src/plugin.ts +0 -83
- package/src/scheduler/cron-parser.test.ts +0 -236
- package/src/scheduler/cron-parser.ts +0 -236
- package/src/scheduler/index.ts +0 -10
- package/src/scheduler/scheduler.ts +0 -443
- package/src/scheduler/types.ts +0 -71
- package/src/stores/factory.ts +0 -104
- package/src/stores/file.test.ts +0 -276
- package/src/stores/file.ts +0 -211
- package/src/stores/index.ts +0 -6
- package/src/stores/memory.test.ts +0 -238
- package/src/stores/memory.ts +0 -63
- package/src/stores/postgrest.test.ts +0 -488
- package/src/stores/postgrest.ts +0 -263
- package/src/stores/stores.test.ts +0 -197
- package/src/stores/types.ts +0 -58
- package/src/sync/index.ts +0 -16
- package/src/sync/state.ts +0 -126
- package/src/sync/store.ts +0 -139
- package/src/sync/sync.test.ts +0 -271
- package/src/utils/async.ts +0 -10
- package/src/utils/file.ts +0 -106
- package/src/utils/index.ts +0 -14
- package/src/utils/logger.ts +0 -53
- package/src/utils/path.ts +0 -47
- package/src/webhook/index.ts +0 -15
- package/src/webhook/server.test.ts +0 -253
- package/src/webhook/server.ts +0 -389
- package/src/webhook/store.ts +0 -239
- package/src/webhook/types.ts +0 -93
- package/tsconfig.json +0 -17
- package/vitest.config.ts +0 -39
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pause Step Handler - Handles resource-free long pauses
|
|
3
|
+
*
|
|
4
|
+
* Creates a durable pause that persists state and releases resources,
|
|
5
|
+
* allowing execution to be resumed after extended periods.
|
|
6
|
+
*/
|
|
7
|
+
import { parseDuration, formatDuration } from '../../pause/state.js';
|
|
8
|
+
import { PauseSignal } from '../signals.js';
|
|
9
|
+
/**
|
|
10
|
+
* Handles pause step execution
|
|
11
|
+
*/
|
|
12
|
+
export class PauseHandler {
|
|
13
|
+
deps;
|
|
14
|
+
constructor(deps) {
|
|
15
|
+
this.deps = deps;
|
|
16
|
+
}
|
|
17
|
+
async execute(step) {
|
|
18
|
+
const duration = parseDuration(step.duration);
|
|
19
|
+
this.deps.log(`Starting pause for ${formatDuration(duration)}`);
|
|
20
|
+
// Capture current context variables
|
|
21
|
+
const variables = this.captureVariables();
|
|
22
|
+
// Build checkpoint
|
|
23
|
+
const checkpoint = {
|
|
24
|
+
stageIndex: this.deps.stageIndex,
|
|
25
|
+
stepIndex: this.deps.stepIndex + 1, // Resume AFTER this pause step
|
|
26
|
+
action: this.deps.actionName,
|
|
27
|
+
itemIndex: this.deps.loopItemIndex,
|
|
28
|
+
variables,
|
|
29
|
+
response: this.deps.ctx.response,
|
|
30
|
+
};
|
|
31
|
+
// Build resume triggers
|
|
32
|
+
const resumeTriggers = [];
|
|
33
|
+
if (step.resumeOn && step.resumeOn.length > 0) {
|
|
34
|
+
for (const trigger of step.resumeOn) {
|
|
35
|
+
if (trigger.type === 'timeout') {
|
|
36
|
+
resumeTriggers.push({ type: 'timeout' });
|
|
37
|
+
}
|
|
38
|
+
else if (trigger.type === 'webhook') {
|
|
39
|
+
resumeTriggers.push({ type: 'webhook', path: trigger.path });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Default to timeout only
|
|
45
|
+
resumeTriggers.push({ type: 'timeout' });
|
|
46
|
+
}
|
|
47
|
+
// Create the pause via pause manager
|
|
48
|
+
const pause = await this.deps.pauseManager.createPause({
|
|
49
|
+
executionId: this.deps.executionId,
|
|
50
|
+
mission: this.deps.mission,
|
|
51
|
+
duration,
|
|
52
|
+
checkpoint,
|
|
53
|
+
resumeTriggers,
|
|
54
|
+
});
|
|
55
|
+
// Emit pause event
|
|
56
|
+
this.deps.emit?.('mission.paused', {
|
|
57
|
+
pauseId: pause.id,
|
|
58
|
+
duration,
|
|
59
|
+
expiresAt: pause.expiresAt,
|
|
60
|
+
resumeTriggers: resumeTriggers.map((t) => t.type),
|
|
61
|
+
});
|
|
62
|
+
this.deps.log(`Pause ${pause.id} created - will expire at ${pause.expiresAt.toISOString()}`);
|
|
63
|
+
// Throw PauseSignal to stop execution
|
|
64
|
+
// The executor will catch this and handle appropriately
|
|
65
|
+
throw new PauseSignal(pause.id);
|
|
66
|
+
}
|
|
67
|
+
captureVariables() {
|
|
68
|
+
const variables = {};
|
|
69
|
+
let current = this.deps.ctx;
|
|
70
|
+
while (current) {
|
|
71
|
+
for (const [key, value] of current.variables) {
|
|
72
|
+
if (!(key in variables)) {
|
|
73
|
+
// Deep clone to ensure we capture the current state
|
|
74
|
+
try {
|
|
75
|
+
variables[key] = JSON.parse(JSON.stringify(value));
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// If value can't be serialized, skip it
|
|
79
|
+
variables[key] = '[non-serializable]';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
current = current.parent;
|
|
84
|
+
}
|
|
85
|
+
return variables;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import type { StoreStep } from '../../ast/nodes.js';
|
|
2
2
|
import type { StepHandler, StepHandlerDeps } from './types.js';
|
|
3
3
|
/**
|
|
4
|
-
* Handles store steps for persisting data
|
|
4
|
+
* Handles store steps for persisting data to configured store adapters.
|
|
5
|
+
* Supports bulk operations, upserts, and partial record updates.
|
|
5
6
|
*/
|
|
6
7
|
export declare class StoreHandler implements StepHandler<StoreStep> {
|
|
7
8
|
private deps;
|
|
8
9
|
constructor(deps: StepHandlerDeps);
|
|
10
|
+
/**
|
|
11
|
+
* Compute the storage key for a record based on step options.
|
|
12
|
+
* Uses the key expression if provided, otherwise falls back to record.id or a random key.
|
|
13
|
+
*/
|
|
14
|
+
private getRecordKey;
|
|
15
|
+
/**
|
|
16
|
+
* Emit a data.store event with operation metadata.
|
|
17
|
+
*/
|
|
18
|
+
private emitStoreEvent;
|
|
9
19
|
execute(step: StoreStep): Promise<void>;
|
|
10
20
|
private storeMany;
|
|
11
21
|
private storeOne;
|
|
@@ -1,16 +1,40 @@
|
|
|
1
1
|
import { evaluate } from '../evaluator.js';
|
|
2
|
+
import { RuntimeError } from '../../errors/index.js';
|
|
2
3
|
/**
|
|
3
|
-
* Handles store steps for persisting data
|
|
4
|
+
* Handles store steps for persisting data to configured store adapters.
|
|
5
|
+
* Supports bulk operations, upserts, and partial record updates.
|
|
4
6
|
*/
|
|
5
7
|
export class StoreHandler {
|
|
6
8
|
deps;
|
|
7
9
|
constructor(deps) {
|
|
8
10
|
this.deps = deps;
|
|
9
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Compute the storage key for a record based on step options.
|
|
14
|
+
* Uses the key expression if provided, otherwise falls back to record.id or a random key.
|
|
15
|
+
*/
|
|
16
|
+
getRecordKey(step, record) {
|
|
17
|
+
if (step.options.key) {
|
|
18
|
+
return String(evaluate(step.options.key, this.deps.ctx, record));
|
|
19
|
+
}
|
|
20
|
+
return String(record.id ?? Math.random());
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Emit a data.store event with operation metadata.
|
|
24
|
+
*/
|
|
25
|
+
emitStoreEvent(step, operation, itemCount, key) {
|
|
26
|
+
this.deps.emit?.('data.store', {
|
|
27
|
+
storeName: step.target,
|
|
28
|
+
storeType: this.deps.ctx.storeTypes.get(step.target) ?? 'unknown',
|
|
29
|
+
operation,
|
|
30
|
+
itemCount,
|
|
31
|
+
...(key !== undefined && { key }),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
10
34
|
async execute(step) {
|
|
11
35
|
const store = this.deps.ctx.stores.get(step.target);
|
|
12
36
|
if (!store) {
|
|
13
|
-
throw new
|
|
37
|
+
throw new RuntimeError(`Store not found: ${step.target}`, { line: 1, column: 1 }, undefined, { stepType: 'store' });
|
|
14
38
|
}
|
|
15
39
|
const source = evaluate(step.source, this.deps.ctx);
|
|
16
40
|
if (Array.isArray(source)) {
|
|
@@ -21,38 +45,46 @@ export class StoreHandler {
|
|
|
21
45
|
}
|
|
22
46
|
}
|
|
23
47
|
async storeMany(step, store, items) {
|
|
24
|
-
|
|
25
|
-
if
|
|
48
|
+
const operation = step.options.upsert ? 'upsert' : 'set';
|
|
49
|
+
// Check if we can use bulk operations
|
|
50
|
+
const canBulkSet = store.bulkSet && !step.options.upsert;
|
|
51
|
+
const canBulkUpsert = store.bulkUpsert && step.options.upsert;
|
|
52
|
+
if (canBulkSet || canBulkUpsert) {
|
|
26
53
|
const records = [];
|
|
27
54
|
for (const item of items) {
|
|
28
55
|
const record = item;
|
|
29
|
-
const key = step
|
|
30
|
-
? String(evaluate(step.options.key, this.deps.ctx, record))
|
|
31
|
-
: String(record.id ?? Math.random());
|
|
56
|
+
const key = this.getRecordKey(step, record);
|
|
32
57
|
if (step.options.partial !== undefined) {
|
|
33
58
|
record._partial = step.options.partial;
|
|
34
59
|
}
|
|
35
60
|
records.push({ key, value: record });
|
|
36
61
|
}
|
|
37
|
-
|
|
62
|
+
if (canBulkUpsert) {
|
|
63
|
+
await store.bulkUpsert(records);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
await store.bulkSet(records);
|
|
67
|
+
}
|
|
38
68
|
}
|
|
39
69
|
else {
|
|
40
|
-
// Fall back to individual operations for
|
|
70
|
+
// Fall back to individual operations for stores without bulk methods
|
|
41
71
|
for (const item of items) {
|
|
42
72
|
const record = item;
|
|
43
73
|
await this.storeRecord(step, store, record);
|
|
44
74
|
}
|
|
45
75
|
}
|
|
46
|
-
this.deps.log(`Stored ${items.length} items to ${step.target}`);
|
|
76
|
+
this.deps.log(`Stored ${items.length} ${items.length === 1 ? 'item' : 'items'} to ${step.target}`);
|
|
77
|
+
this.emitStoreEvent(step, operation, items.length);
|
|
47
78
|
}
|
|
48
79
|
async storeOne(step, store, record) {
|
|
80
|
+
const key = this.getRecordKey(step, record);
|
|
81
|
+
const operation = step.options.upsert ? 'upsert' : 'set';
|
|
49
82
|
await this.storeRecord(step, store, record);
|
|
50
83
|
this.deps.log(`Stored item to ${step.target}`);
|
|
84
|
+
this.emitStoreEvent(step, operation, 1, key);
|
|
51
85
|
}
|
|
52
86
|
async storeRecord(step, store, record) {
|
|
53
|
-
const key = step
|
|
54
|
-
? String(evaluate(step.options.key, this.deps.ctx, record))
|
|
55
|
-
: String(record.id ?? Math.random());
|
|
87
|
+
const key = this.getRecordKey(step, record);
|
|
56
88
|
if (step.options.partial !== undefined) {
|
|
57
89
|
record._partial = step.options.partial;
|
|
58
90
|
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { ActionStep } from '../../ast/nodes.js';
|
|
2
2
|
import type { ExecutionContext } from '../context.js';
|
|
3
|
+
import type { EventType } from '../../observability/index.js';
|
|
3
4
|
/**
|
|
4
5
|
* Dependencies injected into step handlers
|
|
5
6
|
*/
|
|
6
7
|
export interface StepHandlerDeps {
|
|
7
8
|
ctx: ExecutionContext;
|
|
8
9
|
log: (message: string) => void;
|
|
10
|
+
/** Optional event emitter for observability */
|
|
11
|
+
emit?: <T>(type: EventType, payload: T) => void;
|
|
9
12
|
}
|
|
10
13
|
/**
|
|
11
14
|
* Base interface for step handlers
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ValidateStep } from '../../ast/nodes.js';
|
|
2
2
|
import type { StepHandler, StepHandlerDeps } from './types.js';
|
|
3
3
|
/**
|
|
4
|
-
* Handles validate steps with assume constraints
|
|
4
|
+
* Handles validate steps with assume constraints.
|
|
5
|
+
* Evaluates constraint conditions and throws ValidationError on failure.
|
|
5
6
|
*/
|
|
6
7
|
export declare class ValidateHandler implements StepHandler<ValidateStep> {
|
|
7
8
|
private deps;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { evaluate } from '../evaluator.js';
|
|
2
|
+
import { ValidationError } from '../../errors/index.js';
|
|
2
3
|
/**
|
|
3
|
-
* Handles validate steps with assume constraints
|
|
4
|
+
* Handles validate steps with assume constraints.
|
|
5
|
+
* Evaluates constraint conditions and throws ValidationError on failure.
|
|
4
6
|
*/
|
|
5
7
|
export class ValidateHandler {
|
|
6
8
|
deps;
|
|
@@ -14,7 +16,7 @@ export class ValidateHandler {
|
|
|
14
16
|
if (!result) {
|
|
15
17
|
const message = constraint.message ?? `Validation failed: ${JSON.stringify(constraint.condition)}`;
|
|
16
18
|
if (constraint.severity === 'error') {
|
|
17
|
-
throw new
|
|
19
|
+
throw new ValidationError(message, { line: 1, column: 1 }, undefined, { constraint: JSON.stringify(constraint.condition), severity: 'error' });
|
|
18
20
|
}
|
|
19
21
|
else {
|
|
20
22
|
this.deps.log(`Warning: ${message}`);
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { WebhookStep } from '../../ast/nodes.js';
|
|
7
7
|
import type { ExecutionContext } from '../context.js';
|
|
8
8
|
import type { WebhookServer, WebhookRegistration, WebhookEvent } from '../../webhook/index.js';
|
|
9
|
+
import type { EventType } from '../../observability/index.js';
|
|
9
10
|
/**
|
|
10
11
|
* Dependencies for the webhook handler
|
|
11
12
|
*/
|
|
@@ -14,6 +15,8 @@ export interface WebhookHandlerDeps {
|
|
|
14
15
|
webhookServer: WebhookServer;
|
|
15
16
|
executionId: string;
|
|
16
17
|
log: (message: string) => void;
|
|
18
|
+
/** Optional event emitter for observability */
|
|
19
|
+
emit?: <T>(type: EventType, payload: T) => void;
|
|
17
20
|
}
|
|
18
21
|
/**
|
|
19
22
|
* Result of webhook handler execution
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { evaluate } from '../evaluator.js';
|
|
7
7
|
import { RetrySignal } from '../signals.js';
|
|
8
|
+
import { RuntimeError } from '../../errors/index.js';
|
|
8
9
|
/**
|
|
9
10
|
* Handler for webhook (wait) steps
|
|
10
11
|
*/
|
|
@@ -17,7 +18,7 @@ export class WebhookHandler {
|
|
|
17
18
|
* Execute the wait step
|
|
18
19
|
*/
|
|
19
20
|
async execute(step) {
|
|
20
|
-
const { ctx, webhookServer, executionId, log } = this.deps;
|
|
21
|
+
const { ctx, webhookServer, executionId, log, emit } = this.deps;
|
|
21
22
|
// Register webhook endpoint
|
|
22
23
|
const timeout = step.timeout ?? 300000; // 5 minutes default
|
|
23
24
|
const expectedEvents = step.expectedEvents ?? 1;
|
|
@@ -29,6 +30,14 @@ export class WebhookHandler {
|
|
|
29
30
|
});
|
|
30
31
|
const webhookUrl = webhookServer.getWebhookUrl(registration);
|
|
31
32
|
log(`Waiting for webhook: ${webhookUrl} (timeout: ${timeout}ms, expected: ${expectedEvents})`);
|
|
33
|
+
// Emit webhook.register event
|
|
34
|
+
emit?.('webhook.register', {
|
|
35
|
+
registrationId: registration.id,
|
|
36
|
+
path: registration.path,
|
|
37
|
+
webhookUrl,
|
|
38
|
+
timeout,
|
|
39
|
+
expectedEvents,
|
|
40
|
+
});
|
|
32
41
|
// Set the webhook URL in context for use in subsequent steps
|
|
33
42
|
ctx.response = {
|
|
34
43
|
webhookId: registration.id,
|
|
@@ -45,7 +54,7 @@ export class WebhookHandler {
|
|
|
45
54
|
}
|
|
46
55
|
// If not retrying, still return partial results
|
|
47
56
|
if (result.events.length === 0) {
|
|
48
|
-
throw new
|
|
57
|
+
throw new RuntimeError(`Webhook timeout: no events received within ${timeout}ms`, { line: 1, column: 1 }, undefined, { stepType: 'wait' });
|
|
49
58
|
}
|
|
50
59
|
}
|
|
51
60
|
// Filter events if filter expression provided
|
|
@@ -93,6 +102,13 @@ export class WebhookHandler {
|
|
|
93
102
|
log(`Warning: Store '${step.storage.target}' not found for webhook storage`);
|
|
94
103
|
}
|
|
95
104
|
}
|
|
105
|
+
// Emit webhook.complete event
|
|
106
|
+
emit?.('webhook.complete', {
|
|
107
|
+
registrationId: registration.id,
|
|
108
|
+
eventsReceived: events.length,
|
|
109
|
+
timedOut: result.timedOut ?? false,
|
|
110
|
+
storedTo: step.storage?.target,
|
|
111
|
+
});
|
|
96
112
|
// Clean up registration
|
|
97
113
|
await webhookServer.unregister(registration.id);
|
|
98
114
|
return {
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StoreManager handles store initialization and configuration.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from MissionExecutor to improve separation of concerns.
|
|
5
|
+
* Responsible for:
|
|
6
|
+
* - Creating store adapters based on store definitions
|
|
7
|
+
* - Managing custom store adapters
|
|
8
|
+
* - Resolving store types for development/production modes
|
|
9
|
+
*/
|
|
10
|
+
import type { StoreDefinition } from '../ast/nodes.js';
|
|
11
|
+
import type { ExecutionContext } from './context.js';
|
|
12
|
+
import type { StoreAdapter } from '../stores/types.js';
|
|
13
|
+
export interface StoreManagerConfig {
|
|
14
|
+
/** Custom store adapters by name */
|
|
15
|
+
customStores?: Record<string, StoreAdapter>;
|
|
16
|
+
/** Development mode - use file stores instead of sql/nosql (default: true) */
|
|
17
|
+
developmentMode?: boolean;
|
|
18
|
+
/** Base directory for file stores (default: '.reqon-data') */
|
|
19
|
+
dataDir?: string;
|
|
20
|
+
/** Logging function */
|
|
21
|
+
log?: (message: string) => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Manages store initialization and provides access to store adapters.
|
|
25
|
+
*/
|
|
26
|
+
export declare class StoreManager {
|
|
27
|
+
private config;
|
|
28
|
+
constructor(config?: StoreManagerConfig);
|
|
29
|
+
/**
|
|
30
|
+
* Initialize a store definition, creating the appropriate adapter.
|
|
31
|
+
*/
|
|
32
|
+
initializeStore(store: StoreDefinition, ctx: ExecutionContext): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Initialize multiple stores.
|
|
35
|
+
*/
|
|
36
|
+
initializeStores(stores: StoreDefinition[], ctx: ExecutionContext): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Get a store adapter from the context.
|
|
39
|
+
*/
|
|
40
|
+
getStore(ctx: ExecutionContext, storeName: string): StoreAdapter | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Get the store type for a given store name.
|
|
43
|
+
*/
|
|
44
|
+
getStoreType(ctx: ExecutionContext, storeName: string): string | undefined;
|
|
45
|
+
private log;
|
|
46
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StoreManager handles store initialization and configuration.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from MissionExecutor to improve separation of concerns.
|
|
5
|
+
* Responsible for:
|
|
6
|
+
* - Creating store adapters based on store definitions
|
|
7
|
+
* - Managing custom store adapters
|
|
8
|
+
* - Resolving store types for development/production modes
|
|
9
|
+
*/
|
|
10
|
+
import { createStore, resolveStoreType } from '../stores/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Manages store initialization and provides access to store adapters.
|
|
13
|
+
*/
|
|
14
|
+
export class StoreManager {
|
|
15
|
+
config;
|
|
16
|
+
constructor(config = {}) {
|
|
17
|
+
this.config = config;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initialize a store definition, creating the appropriate adapter.
|
|
21
|
+
*/
|
|
22
|
+
async initializeStore(store, ctx) {
|
|
23
|
+
// Check for custom store adapter
|
|
24
|
+
if (this.config.customStores?.[store.name]) {
|
|
25
|
+
ctx.stores.set(store.name, this.config.customStores[store.name]);
|
|
26
|
+
ctx.storeTypes.set(store.name, 'custom');
|
|
27
|
+
this.log(`Initialized store: ${store.name} (custom adapter)`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
// Use store factory to create appropriate adapter
|
|
31
|
+
const developmentMode = this.config.developmentMode ?? true;
|
|
32
|
+
const storeType = resolveStoreType(store.storeType, developmentMode);
|
|
33
|
+
const adapter = createStore({
|
|
34
|
+
type: storeType,
|
|
35
|
+
name: store.target,
|
|
36
|
+
baseDir: this.config.dataDir,
|
|
37
|
+
});
|
|
38
|
+
ctx.stores.set(store.name, adapter);
|
|
39
|
+
ctx.storeTypes.set(store.name, storeType);
|
|
40
|
+
const typeInfo = storeType !== store.storeType ? ` <- ${store.storeType}` : '';
|
|
41
|
+
this.log(`Initialized store: ${store.name} (${storeType}${typeInfo})`);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Initialize multiple stores.
|
|
45
|
+
*/
|
|
46
|
+
async initializeStores(stores, ctx) {
|
|
47
|
+
for (const store of stores) {
|
|
48
|
+
await this.initializeStore(store, ctx);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get a store adapter from the context.
|
|
53
|
+
*/
|
|
54
|
+
getStore(ctx, storeName) {
|
|
55
|
+
return ctx.stores.get(storeName);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the store type for a given store name.
|
|
59
|
+
*/
|
|
60
|
+
getStoreType(ctx, storeName) {
|
|
61
|
+
return ctx.storeTypes.get(storeName);
|
|
62
|
+
}
|
|
63
|
+
log(message) {
|
|
64
|
+
this.config.log?.(message);
|
|
65
|
+
}
|
|
66
|
+
}
|
package/dist/lexer/index.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Lexer module - wraps Vague lexer with Reqon keywords
|
|
4
|
+
* note: Importing this module auto-registers Reqon plugin with Vague
|
|
5
|
+
* exports:
|
|
6
|
+
* - ReqonLexer (alias for Vague Lexer)
|
|
7
|
+
* - ReqonTokenType, REQON_KEYWORDS
|
|
8
|
+
* related:
|
|
9
|
+
* - ./tokens.ts - Reqon-specific keywords (mission, action, fetch, etc.)
|
|
10
|
+
* - ../plugin.ts - registers keywords with Vague
|
|
11
|
+
* - ../parser/index.ts - consumes tokens
|
|
12
|
+
* ---
|
|
6
13
|
*/
|
|
7
14
|
import '../plugin.js';
|
|
8
15
|
export { Lexer, Lexer as ReqonLexer, TokenType, type Token } from 'vague-lang';
|
package/dist/lexer/index.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Lexer module - wraps Vague lexer with Reqon keywords
|
|
4
|
+
* note: Importing this module auto-registers Reqon plugin with Vague
|
|
5
|
+
* exports:
|
|
6
|
+
* - ReqonLexer (alias for Vague Lexer)
|
|
7
|
+
* - ReqonTokenType, REQON_KEYWORDS
|
|
8
|
+
* related:
|
|
9
|
+
* - ./tokens.ts - Reqon-specific keywords (mission, action, fetch, etc.)
|
|
10
|
+
* - ../plugin.ts - registers keywords with Vague
|
|
11
|
+
* - ../parser/index.ts - consumes tokens
|
|
12
|
+
* ---
|
|
6
13
|
*/
|
|
7
14
|
// Import plugin to auto-register Reqon keywords with Vague
|
|
8
15
|
import '../plugin.js';
|
package/dist/lexer/tokens.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export declare enum ReqonTokenType {
|
|
|
25
25
|
NOSQL = "NOSQL",
|
|
26
26
|
SQL = "SQL",
|
|
27
27
|
MEMORY = "MEMORY",
|
|
28
|
+
FILE = "FILE",
|
|
29
|
+
POSTGREST = "POSTGREST",
|
|
28
30
|
OAUTH2 = "OAUTH2",
|
|
29
31
|
BEARER = "BEARER",
|
|
30
32
|
BASIC = "BASIC",
|
|
@@ -51,12 +53,26 @@ export declare enum ReqonTokenType {
|
|
|
51
53
|
QUEUE = "QUEUE",
|
|
52
54
|
JUMP = "JUMP",
|
|
53
55
|
IS = "IS",
|
|
56
|
+
TRANSFORM = "TRANSFORM",
|
|
57
|
+
APPLY = "APPLY",
|
|
58
|
+
TO = "TO",
|
|
59
|
+
AS = "AS",
|
|
60
|
+
TRY = "TRY",
|
|
54
61
|
WAIT = "WAIT",
|
|
55
62
|
TIMEOUT = "TIMEOUT",
|
|
56
63
|
PATH = "PATH",
|
|
57
64
|
EXPECTED_EVENTS = "EXPECTED_EVENTS",
|
|
58
65
|
EVENT_FILTER = "EVENT_FILTER",
|
|
59
|
-
STORAGE = "STORAGE"
|
|
66
|
+
STORAGE = "STORAGE",
|
|
67
|
+
CHECKPOINT = "CHECKPOINT",
|
|
68
|
+
TRACE = "TRACE",
|
|
69
|
+
PAUSE = "PAUSE",
|
|
70
|
+
PERSIST = "PERSIST",
|
|
71
|
+
DURATION = "DURATION",
|
|
72
|
+
RESUME_ON = "RESUME_ON",
|
|
73
|
+
AFTER_STEP = "AFTER_STEP",
|
|
74
|
+
ON_FAILURE = "ON_FAILURE",
|
|
75
|
+
FULL = "FULL"
|
|
60
76
|
}
|
|
61
77
|
export type TokenType = VagueTokenType | ReqonTokenType;
|
|
62
78
|
export { TokenType as VagueTokenType } from 'vague-lang';
|
package/dist/lexer/tokens.js
CHANGED
|
@@ -29,6 +29,8 @@ export var ReqonTokenType;
|
|
|
29
29
|
ReqonTokenType["NOSQL"] = "NOSQL";
|
|
30
30
|
ReqonTokenType["SQL"] = "SQL";
|
|
31
31
|
ReqonTokenType["MEMORY"] = "MEMORY";
|
|
32
|
+
ReqonTokenType["FILE"] = "FILE";
|
|
33
|
+
ReqonTokenType["POSTGREST"] = "POSTGREST";
|
|
32
34
|
// Auth types
|
|
33
35
|
ReqonTokenType["OAUTH2"] = "OAUTH2";
|
|
34
36
|
ReqonTokenType["BEARER"] = "BEARER";
|
|
@@ -62,6 +64,12 @@ export var ReqonTokenType;
|
|
|
62
64
|
ReqonTokenType["JUMP"] = "JUMP";
|
|
63
65
|
// Type checking
|
|
64
66
|
ReqonTokenType["IS"] = "IS";
|
|
67
|
+
// Transforms
|
|
68
|
+
ReqonTokenType["TRANSFORM"] = "TRANSFORM";
|
|
69
|
+
ReqonTokenType["APPLY"] = "APPLY";
|
|
70
|
+
ReqonTokenType["TO"] = "TO";
|
|
71
|
+
ReqonTokenType["AS"] = "AS";
|
|
72
|
+
ReqonTokenType["TRY"] = "TRY";
|
|
65
73
|
// Webhook support
|
|
66
74
|
ReqonTokenType["WAIT"] = "WAIT";
|
|
67
75
|
ReqonTokenType["TIMEOUT"] = "TIMEOUT";
|
|
@@ -69,6 +77,16 @@ export var ReqonTokenType;
|
|
|
69
77
|
ReqonTokenType["EXPECTED_EVENTS"] = "EXPECTED_EVENTS";
|
|
70
78
|
ReqonTokenType["EVENT_FILTER"] = "EVENT_FILTER";
|
|
71
79
|
ReqonTokenType["STORAGE"] = "STORAGE";
|
|
80
|
+
// Durability features
|
|
81
|
+
ReqonTokenType["CHECKPOINT"] = "CHECKPOINT";
|
|
82
|
+
ReqonTokenType["TRACE"] = "TRACE";
|
|
83
|
+
ReqonTokenType["PAUSE"] = "PAUSE";
|
|
84
|
+
ReqonTokenType["PERSIST"] = "PERSIST";
|
|
85
|
+
ReqonTokenType["DURATION"] = "DURATION";
|
|
86
|
+
ReqonTokenType["RESUME_ON"] = "RESUME_ON";
|
|
87
|
+
ReqonTokenType["AFTER_STEP"] = "AFTER_STEP";
|
|
88
|
+
ReqonTokenType["ON_FAILURE"] = "ON_FAILURE";
|
|
89
|
+
ReqonTokenType["FULL"] = "FULL";
|
|
72
90
|
})(ReqonTokenType || (ReqonTokenType = {}));
|
|
73
91
|
// Re-export Vague's TokenType for convenience
|
|
74
92
|
export { TokenType as VagueTokenType } from 'vague-lang';
|
|
@@ -106,6 +124,8 @@ export const REQON_KEYWORDS = {
|
|
|
106
124
|
nosql: ReqonTokenType.NOSQL,
|
|
107
125
|
sql: ReqonTokenType.SQL,
|
|
108
126
|
memory: ReqonTokenType.MEMORY,
|
|
127
|
+
file: ReqonTokenType.FILE,
|
|
128
|
+
postgrest: ReqonTokenType.POSTGREST,
|
|
109
129
|
// Auth types
|
|
110
130
|
oauth2: ReqonTokenType.OAUTH2,
|
|
111
131
|
bearer: ReqonTokenType.BEARER,
|
|
@@ -136,6 +156,12 @@ export const REQON_KEYWORDS = {
|
|
|
136
156
|
jump: ReqonTokenType.JUMP,
|
|
137
157
|
// Type checking
|
|
138
158
|
is: ReqonTokenType.IS,
|
|
159
|
+
// Transforms
|
|
160
|
+
transform: ReqonTokenType.TRANSFORM,
|
|
161
|
+
apply: ReqonTokenType.APPLY,
|
|
162
|
+
to: ReqonTokenType.TO,
|
|
163
|
+
as: ReqonTokenType.AS,
|
|
164
|
+
try: ReqonTokenType.TRY,
|
|
139
165
|
// Webhook support
|
|
140
166
|
wait: ReqonTokenType.WAIT,
|
|
141
167
|
timeout: ReqonTokenType.TIMEOUT,
|
|
@@ -143,4 +169,14 @@ export const REQON_KEYWORDS = {
|
|
|
143
169
|
expectedEvents: ReqonTokenType.EXPECTED_EVENTS,
|
|
144
170
|
eventFilter: ReqonTokenType.EVENT_FILTER,
|
|
145
171
|
storage: ReqonTokenType.STORAGE,
|
|
172
|
+
// Durability features
|
|
173
|
+
checkpoint: ReqonTokenType.CHECKPOINT,
|
|
174
|
+
trace: ReqonTokenType.TRACE,
|
|
175
|
+
pause: ReqonTokenType.PAUSE,
|
|
176
|
+
persist: ReqonTokenType.PERSIST,
|
|
177
|
+
duration: ReqonTokenType.DURATION,
|
|
178
|
+
resumeOn: ReqonTokenType.RESUME_ON,
|
|
179
|
+
afterStep: ReqonTokenType.AFTER_STEP,
|
|
180
|
+
onFailure: ReqonTokenType.ON_FAILURE,
|
|
181
|
+
full: ReqonTokenType.FULL,
|
|
146
182
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Reqon MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Exposes Reqon pipeline capabilities via the Model Context Protocol.
|
|
6
|
+
*
|
|
7
|
+
* Tools:
|
|
8
|
+
* - reqon.execute: Execute a mission from DSL source
|
|
9
|
+
* - reqon.execute_file: Execute a mission from a file/folder path
|
|
10
|
+
* - reqon.query_store: Query data from a named store
|
|
11
|
+
* - reqon.list_stores: List available stores
|
|
12
|
+
*
|
|
13
|
+
* Resources:
|
|
14
|
+
* - reqon://stores - List all stores
|
|
15
|
+
* - reqon://stores/{name} - Access store data
|
|
16
|
+
*/
|
|
17
|
+
export {};
|