@shipfox/api-workflows 11.0.0 → 12.1.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/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +107 -0
- package/README.md +75 -0
- package/dist/core/agent-defaults.d.ts +2 -1
- package/dist/core/agent-defaults.d.ts.map +1 -1
- package/dist/core/agent-defaults.js.map +1 -1
- package/dist/core/checkout.d.ts +7 -21
- package/dist/core/checkout.d.ts.map +1 -1
- package/dist/core/checkout.js +122 -41
- package/dist/core/checkout.js.map +1 -1
- package/dist/core/entities/job-execution.d.ts +8 -0
- package/dist/core/entities/job-execution.d.ts.map +1 -1
- package/dist/core/entities/job-execution.js +13 -1
- package/dist/core/entities/job-execution.js.map +1 -1
- package/dist/core/entities/job-listener-event.d.ts +2 -0
- package/dist/core/entities/job-listener-event.d.ts.map +1 -1
- package/dist/core/entities/job-listener-event.js.map +1 -1
- package/dist/core/entities/step.d.ts +13 -3
- package/dist/core/entities/step.d.ts.map +1 -1
- package/dist/core/entities/step.js +6 -0
- package/dist/core/entities/step.js.map +1 -1
- package/dist/core/entities/workflow-run-attempt.d.ts +1 -0
- package/dist/core/entities/workflow-run-attempt.d.ts.map +1 -1
- package/dist/core/entities/workflow-run-attempt.js.map +1 -1
- package/dist/core/entities/workflow-run.d.ts +17 -0
- package/dist/core/entities/workflow-run.d.ts.map +1 -1
- package/dist/core/entities/workflow-run.js.map +1 -1
- package/dist/core/errors.d.ts +9 -2
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +10 -5
- package/dist/core/errors.js.map +1 -1
- package/dist/core/job-execution.d.ts.map +1 -1
- package/dist/core/job-execution.js +14 -8
- package/dist/core/job-execution.js.map +1 -1
- package/dist/core/job-transition/decide-job-activation.d.ts +1 -0
- package/dist/core/job-transition/decide-job-activation.d.ts.map +1 -1
- package/dist/core/job-transition/decide-job-activation.js +1 -0
- package/dist/core/job-transition/decide-job-activation.js.map +1 -1
- package/dist/core/job-transition/derive-job-success.d.ts +1 -0
- package/dist/core/job-transition/derive-job-success.d.ts.map +1 -1
- package/dist/core/job-transition/derive-job-success.js +5 -8
- package/dist/core/job-transition/derive-job-success.js.map +1 -1
- package/dist/core/listener-execution-materialization.d.ts +6 -3
- package/dist/core/listener-execution-materialization.d.ts.map +1 -1
- package/dist/core/listener-execution-materialization.js +44 -6
- package/dist/core/listener-execution-materialization.js.map +1 -1
- package/dist/core/resolve-trigger-reference.d.ts +11 -0
- package/dist/core/resolve-trigger-reference.d.ts.map +1 -0
- package/dist/core/resolve-trigger-reference.js +39 -0
- package/dist/core/resolve-trigger-reference.js.map +1 -0
- package/dist/core/run-workflow.d.ts +1 -0
- package/dist/core/run-workflow.d.ts.map +1 -1
- package/dist/core/run-workflow.js +1 -0
- package/dist/core/run-workflow.js.map +1 -1
- package/dist/core/step-config/agent.d.ts +1 -2
- package/dist/core/step-config/agent.d.ts.map +1 -1
- package/dist/core/step-config/agent.js +22 -7
- package/dist/core/step-config/agent.js.map +1 -1
- package/dist/core/step-config/assemble-run-context.d.ts +19 -8
- package/dist/core/step-config/assemble-run-context.d.ts.map +1 -1
- package/dist/core/step-config/assemble-run-context.js +51 -19
- package/dist/core/step-config/assemble-run-context.js.map +1 -1
- package/dist/core/step-config/complete-step-dispatch-config.d.ts.map +1 -1
- package/dist/core/step-config/complete-step-dispatch-config.js +72 -4
- package/dist/core/step-config/complete-step-dispatch-config.js.map +1 -1
- package/dist/core/step-config/index.d.ts +1 -0
- package/dist/core/step-config/index.d.ts.map +1 -1
- package/dist/core/step-config/index.js +1 -0
- package/dist/core/step-config/index.js.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.d.ts +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.d.ts.map +1 -1
- package/dist/core/step-config/materialize-job-execution-steps.js +49 -8
- package/dist/core/step-config/materialize-job-execution-steps.js.map +1 -1
- package/dist/core/step-config/materialize-workflow-model.d.ts +3 -3
- package/dist/core/step-config/materialize-workflow-model.d.ts.map +1 -1
- package/dist/core/step-config/materialize-workflow-model.js +9 -5
- package/dist/core/step-config/materialize-workflow-model.js.map +1 -1
- package/dist/core/step-config/resolve-job-execution-name.d.ts +3 -3
- package/dist/core/step-config/resolve-job-execution-name.d.ts.map +1 -1
- package/dist/core/step-config/resolve-job-execution-name.js +24 -13
- package/dist/core/step-config/resolve-job-execution-name.js.map +1 -1
- package/dist/core/step-config/resolve-step-config.d.ts.map +1 -1
- package/dist/core/step-config/resolve-step-config.js +174 -9
- package/dist/core/step-config/resolve-step-config.js.map +1 -1
- package/dist/core/step-config/resolve-workflow-run-name.d.ts +19 -0
- package/dist/core/step-config/resolve-workflow-run-name.d.ts.map +1 -0
- package/dist/core/step-config/resolve-workflow-run-name.js +73 -0
- package/dist/core/step-config/resolve-workflow-run-name.js.map +1 -0
- package/dist/core/step-transition/decide-step-transition.js.map +1 -1
- package/dist/core/step-transition/evaluate-gate.d.ts +2 -1
- package/dist/core/step-transition/evaluate-gate.d.ts.map +1 -1
- package/dist/core/step-transition/evaluate-gate.js +5 -3
- package/dist/core/step-transition/evaluate-gate.js.map +1 -1
- package/dist/core/workflow-run-creation.d.ts +3 -0
- package/dist/core/workflow-run-creation.d.ts.map +1 -1
- package/dist/core/workflow-run-creation.js +22 -7
- package/dist/core/workflow-run-creation.js.map +1 -1
- package/dist/db/db.d.ts +278 -10
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +2 -0
- package/dist/db/db.js.map +1 -1
- package/dist/db/index.d.ts +3 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/job-listener-events.d.ts +2 -0
- package/dist/db/job-listener-events.d.ts.map +1 -1
- package/dist/db/job-listener-events.js +1 -0
- package/dist/db/job-listener-events.js.map +1 -1
- package/dist/db/job-listeners.d.ts +2 -0
- package/dist/db/job-listeners.d.ts.map +1 -1
- package/dist/db/job-listeners.js +81 -21
- package/dist/db/job-listeners.js.map +1 -1
- package/dist/db/schema/job-executions.d.ts +3 -3
- package/dist/db/schema/job-executions.d.ts.map +1 -1
- package/dist/db/schema/job-executions.js +8 -4
- package/dist/db/schema/job-executions.js.map +1 -1
- package/dist/db/schema/job-listener-events.d.ts +20 -0
- package/dist/db/schema/job-listener-events.d.ts.map +1 -1
- package/dist/db/schema/job-listener-events.js +2 -0
- package/dist/db/schema/job-listener-events.js.map +1 -1
- package/dist/db/schema/step-attempts.js +2 -2
- package/dist/db/schema/step-attempts.js.map +1 -1
- package/dist/db/schema/steps.d.ts +4 -2
- package/dist/db/schema/steps.d.ts.map +1 -1
- package/dist/db/schema/steps.js +1 -1
- package/dist/db/schema/steps.js.map +1 -1
- package/dist/db/schema/workflow-run-attempts.d.ts +21 -2
- package/dist/db/schema/workflow-run-attempts.d.ts.map +1 -1
- package/dist/db/schema/workflow-run-attempts.js +2 -0
- package/dist/db/schema/workflow-run-attempts.js.map +1 -1
- package/dist/db/schema/workflow-run-counters.d.ts +43 -0
- package/dist/db/schema/workflow-run-counters.d.ts.map +1 -0
- package/dist/db/schema/workflow-run-counters.js +10 -0
- package/dist/db/schema/workflow-run-counters.js.map +1 -0
- package/dist/db/schema/workflow-runs.d.ts +54 -1
- package/dist/db/schema/workflow-runs.d.ts.map +1 -1
- package/dist/db/schema/workflow-runs.js +10 -2
- package/dist/db/schema/workflow-runs.js.map +1 -1
- package/dist/db/workflow-runs/job-executions.d.ts.map +1 -1
- package/dist/db/workflow-runs/job-executions.js +35 -14
- package/dist/db/workflow-runs/job-executions.js.map +1 -1
- package/dist/db/workflow-runs/jobs.d.ts +2 -0
- package/dist/db/workflow-runs/jobs.d.ts.map +1 -1
- package/dist/db/workflow-runs/jobs.js +9 -5
- package/dist/db/workflow-runs/jobs.js.map +1 -1
- package/dist/db/workflow-runs/queries.d.ts +51 -0
- package/dist/db/workflow-runs/queries.d.ts.map +1 -1
- package/dist/db/workflow-runs/queries.js +82 -2
- package/dist/db/workflow-runs/queries.js.map +1 -1
- package/dist/db/workflow-runs/run-create.d.ts +1 -0
- package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-create.js +159 -32
- package/dist/db/workflow-runs/run-create.js.map +1 -1
- package/dist/db/workflow-runs/run-rerun.d.ts.map +1 -1
- package/dist/db/workflow-runs/run-rerun.js +13 -5
- package/dist/db/workflow-runs/run-rerun.js.map +1 -1
- package/dist/db/workflow-runs/shared.d.ts +1 -0
- package/dist/db/workflow-runs/shared.d.ts.map +1 -1
- package/dist/db/workflow-runs/shared.js +2 -1
- package/dist/db/workflow-runs/shared.js.map +1 -1
- package/dist/db/workflow-runs/steps.js +3 -3
- package/dist/db/workflow-runs/steps.js.map +1 -1
- package/dist/db/workflow-runs.d.ts +4 -3
- package/dist/db/workflow-runs.d.ts.map +1 -1
- package/dist/db/workflow-runs.js +3 -2
- package/dist/db/workflow-runs.js.map +1 -1
- package/dist/metrics/instance.d.ts +1 -0
- package/dist/metrics/instance.d.ts.map +1 -1
- package/dist/metrics/instance.js +9 -0
- package/dist/metrics/instance.js.map +1 -1
- package/dist/presentation/dto/checkout-token.d.ts +1 -0
- package/dist/presentation/dto/checkout-token.d.ts.map +1 -1
- package/dist/presentation/dto/checkout-token.js +1 -0
- package/dist/presentation/dto/checkout-token.js.map +1 -1
- package/dist/presentation/dto/index.d.ts +1 -1
- package/dist/presentation/dto/index.d.ts.map +1 -1
- package/dist/presentation/dto/index.js +1 -1
- package/dist/presentation/dto/index.js.map +1 -1
- package/dist/presentation/dto/step.d.ts.map +1 -1
- package/dist/presentation/dto/step.js +2 -2
- package/dist/presentation/dto/step.js.map +1 -1
- package/dist/presentation/dto/workflow-run.d.ts +3 -1
- package/dist/presentation/dto/workflow-run.d.ts.map +1 -1
- package/dist/presentation/dto/workflow-run.js +34 -0
- package/dist/presentation/dto/workflow-run.js.map +1 -1
- package/dist/presentation/inter-module.d.ts.map +1 -1
- package/dist/presentation/inter-module.js +31 -3
- package/dist/presentation/inter-module.js.map +1 -1
- package/dist/presentation/routes/checkout-token.d.ts +1 -1
- package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
- package/dist/presentation/routes/checkout-token.js +32 -20
- package/dist/presentation/routes/checkout-token.js.map +1 -1
- package/dist/presentation/routes/leased-step.d.ts +2 -0
- package/dist/presentation/routes/leased-step.d.ts.map +1 -1
- package/dist/presentation/routes/leased-step.js +2 -1
- package/dist/presentation/routes/leased-step.js.map +1 -1
- package/dist/presentation/routes/list-runs.d.ts.map +1 -1
- package/dist/presentation/routes/list-runs.js +9 -3
- package/dist/presentation/routes/list-runs.js.map +1 -1
- package/dist/presentation/routes/project-access.d.ts +1 -0
- package/dist/presentation/routes/project-access.d.ts.map +1 -1
- package/dist/presentation/routes/report-step.d.ts.map +1 -1
- package/dist/presentation/routes/report-step.js +9 -2
- package/dist/presentation/routes/report-step.js.map +1 -1
- package/dist/presentation/subscribers/on-job-steps-settled.js +1 -1
- package/dist/presentation/subscribers/on-job-steps-settled.js.map +1 -1
- package/dist/presentation/subscribers/on-runner-job-claimed.d.ts.map +1 -1
- package/dist/presentation/subscribers/on-runner-job-claimed.js +21 -0
- package/dist/presentation/subscribers/on-runner-job-claimed.js.map +1 -1
- package/dist/temporal/activities/index.d.ts.map +1 -1
- package/dist/temporal/activities/index.js +2 -1
- package/dist/temporal/activities/index.js.map +1 -1
- package/dist/temporal/activities/orchestration-activities.d.ts +1 -0
- package/dist/temporal/activities/orchestration-activities.d.ts.map +1 -1
- package/dist/temporal/activities/orchestration-activities.js.map +1 -1
- package/dist/temporal/constants.d.ts +1 -0
- package/dist/temporal/constants.d.ts.map +1 -1
- package/dist/temporal/constants.js +1 -0
- package/dist/temporal/constants.js.map +1 -1
- package/dist/temporal/index.d.ts +1 -1
- package/dist/temporal/index.d.ts.map +1 -1
- package/dist/temporal/index.js +1 -1
- package/dist/temporal/index.js.map +1 -1
- package/dist/temporal/workflows/index.bundle.js +82 -43
- package/dist/temporal/workflows/index.d.ts +1 -1
- package/dist/temporal/workflows/index.d.ts.map +1 -1
- package/dist/temporal/workflows/index.js +1 -1
- package/dist/temporal/workflows/index.js.map +1 -1
- package/dist/temporal/workflows/job-execution-orchestration.d.ts +5 -0
- package/dist/temporal/workflows/job-execution-orchestration.d.ts.map +1 -1
- package/dist/temporal/workflows/job-execution-orchestration.js +77 -43
- package/dist/temporal/workflows/job-execution-orchestration.js.map +1 -1
- package/dist/temporal/workflows/test-env.d.ts +5 -1
- package/dist/temporal/workflows/test-env.d.ts.map +1 -1
- package/dist/temporal/workflows/test-env.js +32 -11
- package/dist/temporal/workflows/test-env.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0000_initial.sql +14 -2
- package/drizzle/0001_windy_sunfire.sql +1 -0
- package/drizzle/meta/0000_snapshot.json +93 -1
- package/drizzle/meta/0001_snapshot.json +1711 -0
- package/drizzle/meta/_journal.json +2 -2
- package/package.json +19 -19
- package/src/core/agent-defaults.ts +2 -1
- package/src/core/checkout.test.ts +378 -67
- package/src/core/checkout.ts +142 -59
- package/src/core/entities/job-execution.test.ts +21 -0
- package/src/core/entities/job-execution.ts +24 -0
- package/src/core/entities/job-listener-event.ts +3 -0
- package/src/core/entities/step.ts +15 -3
- package/src/core/entities/workflow-run-attempt.ts +1 -0
- package/src/core/entities/workflow-run.ts +16 -0
- package/src/core/errors.ts +21 -7
- package/src/core/job-execution.ts +27 -4
- package/src/core/job-transition/decide-job-activation.test.ts +4 -0
- package/src/core/job-transition/decide-job-activation.ts +2 -0
- package/src/core/job-transition/derive-job-success.test.ts +12 -0
- package/src/core/job-transition/derive-job-success.ts +6 -9
- package/src/core/listener-execution-materialization.test.ts +2 -0
- package/src/core/listener-execution-materialization.ts +57 -11
- package/src/core/resolve-trigger-reference.test.ts +160 -0
- package/src/core/resolve-trigger-reference.ts +53 -0
- package/src/core/run-workflow.ts +2 -0
- package/src/core/step-config/agent.ts +29 -12
- package/src/core/step-config/assemble-run-context.test.ts +149 -6
- package/src/core/step-config/assemble-run-context.ts +87 -25
- package/src/core/step-config/complete-step-dispatch-config.test.ts +125 -2
- package/src/core/step-config/complete-step-dispatch-config.ts +83 -1
- package/src/core/step-config/index.ts +7 -0
- package/src/core/step-config/materialize-job-execution-steps.test.ts +250 -1
- package/src/core/step-config/materialize-job-execution-steps.ts +57 -10
- package/src/core/step-config/materialize-workflow-model.test.ts +212 -4
- package/src/core/step-config/materialize-workflow-model.ts +33 -28
- package/src/core/step-config/resolve-job-execution-name.test.ts +37 -15
- package/src/core/step-config/resolve-job-execution-name.ts +30 -15
- package/src/core/step-config/resolve-step-config.ts +175 -10
- package/src/core/step-config/resolve-workflow-run-name.test.ts +115 -0
- package/src/core/step-config/resolve-workflow-run-name.ts +108 -0
- package/src/core/step-transition/decide-step-transition.ts +2 -2
- package/src/core/step-transition/evaluate-gate.test.ts +8 -0
- package/src/core/step-transition/evaluate-gate.ts +8 -1
- package/src/core/workflow-run-creation.test.ts +7 -4
- package/src/core/workflow-run-creation.ts +13 -7
- package/src/db/db.ts +2 -0
- package/src/db/index.ts +6 -0
- package/src/db/job-listener-events.test.ts +19 -0
- package/src/db/job-listener-events.ts +3 -0
- package/src/db/job-listeners.test.ts +187 -5
- package/src/db/job-listeners.ts +122 -30
- package/src/db/schema/job-executions.ts +12 -5
- package/src/db/schema/job-listener-events.ts +3 -0
- package/src/db/schema/step-attempts.ts +2 -2
- package/src/db/schema/steps.ts +2 -1
- package/src/db/schema/workflow-run-attempts.ts +2 -0
- package/src/db/schema/workflow-run-counters.ts +13 -0
- package/src/db/schema/workflow-runs.ts +11 -2
- package/src/db/workflow-runs/job-executions.ts +37 -15
- package/src/db/workflow-runs/jobs.ts +17 -4
- package/src/db/workflow-runs/queries.test.ts +206 -0
- package/src/db/workflow-runs/queries.ts +146 -2
- package/src/db/workflow-runs/run-create.test.ts +606 -8
- package/src/db/workflow-runs/run-create.ts +185 -40
- package/src/db/workflow-runs/run-rerun.test.ts +61 -2
- package/src/db/workflow-runs/run-rerun.ts +15 -5
- package/src/db/workflow-runs/shared.ts +2 -0
- package/src/db/workflow-runs/steps.ts +3 -3
- package/src/db/workflow-runs.ts +7 -0
- package/src/metrics/instance.ts +14 -0
- package/src/presentation/dto/checkout-token.test.ts +19 -9
- package/src/presentation/dto/checkout-token.ts +2 -1
- package/src/presentation/dto/index.ts +1 -1
- package/src/presentation/dto/job.test.ts +9 -0
- package/src/presentation/dto/step.test.ts +12 -0
- package/src/presentation/dto/step.ts +5 -2
- package/src/presentation/dto/workflow-run.ts +44 -2
- package/src/presentation/inter-module.test.ts +165 -0
- package/src/presentation/inter-module.ts +38 -4
- package/src/presentation/routes/checkout-token.test.ts +357 -142
- package/src/presentation/routes/checkout-token.ts +56 -26
- package/src/presentation/routes/get-run.test.ts +2 -0
- package/src/presentation/routes/get-step-secrets.test.ts +7 -2
- package/src/presentation/routes/leased-step.ts +9 -1
- package/src/presentation/routes/list-runs.test.ts +57 -0
- package/src/presentation/routes/list-runs.ts +8 -3
- package/src/presentation/routes/report-step.test.ts +25 -0
- package/src/presentation/routes/report-step.ts +10 -2
- package/src/presentation/subscribers/on-job-steps-settled.ts +1 -1
- package/src/presentation/subscribers/on-runner-job-claimed.test.ts +49 -0
- package/src/presentation/subscribers/on-runner-job-claimed.ts +22 -0
- package/src/temporal/activities/index.ts +1 -0
- package/src/temporal/activities/orchestration-activities.ts +1 -0
- package/src/temporal/constants.ts +1 -0
- package/src/temporal/index.ts +1 -0
- package/src/temporal/workflows/index.ts +1 -0
- package/src/temporal/workflows/job-execution-orchestration.test.ts +142 -6
- package/src/temporal/workflows/job-execution-orchestration.ts +99 -50
- package/src/temporal/workflows/run-orchestration.test.ts +1 -1
- package/src/temporal/workflows/test-env.ts +50 -13
- package/test/factories/project.ts +2 -0
- package/test/factories/workflow-model.ts +80 -26
- package/test/factories/workflow-run.ts +4 -1
- package/test/fixtures/agent-inter-module.ts +2 -1
- package/test/fixtures/job-with-steps.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/drizzle/0001_agent_tool_materialization.sql +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type {WorkflowModel} from '@shipfox/api-definitions-dto';
|
|
2
|
+
import {evaluationTraceEntry} from '@shipfox/expression';
|
|
2
3
|
import type {AgentDefaultsResolver} from './agent-defaults.js';
|
|
3
4
|
import type {
|
|
4
5
|
AgentToolMaterializationContext,
|
|
@@ -31,7 +32,9 @@ export interface MaterializeListenerExecutionParams {
|
|
|
31
32
|
readonly run: Pick<
|
|
32
33
|
WorkflowRun,
|
|
33
34
|
| 'id'
|
|
35
|
+
| 'number'
|
|
34
36
|
| 'name'
|
|
37
|
+
| 'workflowName'
|
|
35
38
|
| 'definitionId'
|
|
36
39
|
| 'projectId'
|
|
37
40
|
| 'workspaceId'
|
|
@@ -39,7 +42,9 @@ export interface MaterializeListenerExecutionParams {
|
|
|
39
42
|
| 'triggerPayload'
|
|
40
43
|
| 'inputs'
|
|
41
44
|
>;
|
|
42
|
-
readonly job: Pick<Job, 'id' | 'key'
|
|
45
|
+
readonly job: Pick<Job, 'id' | 'key'> & Partial<Pick<Job, 'name'>>;
|
|
46
|
+
readonly vars?: Record<string, string> | undefined;
|
|
47
|
+
readonly variableResolutionError?: InterpolationUnresolvableError | undefined;
|
|
43
48
|
readonly sequence: number;
|
|
44
49
|
readonly triggerEvents: readonly WorkflowExecutionEvent[];
|
|
45
50
|
readonly priorExecutions: readonly JobExecution[];
|
|
@@ -49,7 +54,7 @@ export interface MaterializeListenerExecutionParams {
|
|
|
49
54
|
}
|
|
50
55
|
|
|
51
56
|
export interface MaterializedListenerExecution {
|
|
52
|
-
readonly
|
|
57
|
+
readonly nameOverride: string | null;
|
|
53
58
|
readonly runner: readonly string[];
|
|
54
59
|
readonly status: JobExecutionStatus;
|
|
55
60
|
readonly statusReason: 'unknown' | null;
|
|
@@ -61,14 +66,18 @@ export interface MaterializedListenerExecution {
|
|
|
61
66
|
export async function materializeListenerExecution(
|
|
62
67
|
params: MaterializeListenerExecutionParams,
|
|
63
68
|
): Promise<MaterializedListenerExecution> {
|
|
64
|
-
|
|
65
|
-
let
|
|
69
|
+
let executionName = params.job.name ?? params.job.key;
|
|
70
|
+
let nameOverride: string | null = null;
|
|
66
71
|
let evaluationTrace: readonly PersistedEvaluationTraceEntry[] = [];
|
|
67
72
|
let runner: readonly string[] = [];
|
|
68
73
|
let steps: readonly MaterializedWorkflowStep[] = [];
|
|
69
74
|
let status: JobExecutionStatus = 'pending';
|
|
75
|
+
if (params.variableResolutionError) {
|
|
76
|
+
evaluationTrace = [variableResolutionTrace(params.variableResolutionError)];
|
|
77
|
+
}
|
|
70
78
|
|
|
71
79
|
try {
|
|
80
|
+
if (params.variableResolutionError) throw params.variableResolutionError;
|
|
72
81
|
if (!params.model) throw new PermanentListenerMaterializationError('Run attempt has no model');
|
|
73
82
|
const modelJob = params.model.jobs.find((job) => job.key === params.job.key);
|
|
74
83
|
if (!modelJob) {
|
|
@@ -77,16 +86,34 @@ export async function materializeListenerExecution(
|
|
|
77
86
|
);
|
|
78
87
|
}
|
|
79
88
|
|
|
89
|
+
const materializationJob = {
|
|
90
|
+
...params.job,
|
|
91
|
+
name: params.job.name ?? modelJob.name ?? null,
|
|
92
|
+
};
|
|
93
|
+
executionName = materializationJob.name ?? params.job.key;
|
|
94
|
+
|
|
80
95
|
const resolvedName = resolveJobExecutionName({
|
|
81
96
|
definitionId: params.run.definitionId,
|
|
82
97
|
job: modelJob,
|
|
83
|
-
|
|
84
|
-
|
|
98
|
+
context: listenerExecutionContext({
|
|
99
|
+
...params,
|
|
100
|
+
job: materializationJob,
|
|
101
|
+
nameOverride: null,
|
|
102
|
+
executionName,
|
|
103
|
+
status,
|
|
104
|
+
}).values,
|
|
85
105
|
});
|
|
86
|
-
|
|
106
|
+
nameOverride = resolvedName.nameOverride;
|
|
107
|
+
executionName = nameOverride ?? executionName;
|
|
87
108
|
evaluationTrace = resolvedName.trace;
|
|
88
109
|
|
|
89
|
-
const context = listenerExecutionContext({
|
|
110
|
+
const context = listenerExecutionContext({
|
|
111
|
+
...params,
|
|
112
|
+
job: materializationJob,
|
|
113
|
+
nameOverride,
|
|
114
|
+
executionName,
|
|
115
|
+
status,
|
|
116
|
+
});
|
|
90
117
|
runner = materializeJobRunner({
|
|
91
118
|
job: modelJob,
|
|
92
119
|
context,
|
|
@@ -109,7 +136,7 @@ export async function materializeListenerExecution(
|
|
|
109
136
|
}
|
|
110
137
|
|
|
111
138
|
return {
|
|
112
|
-
|
|
139
|
+
nameOverride,
|
|
113
140
|
runner,
|
|
114
141
|
status,
|
|
115
142
|
statusReason: status === 'failed' ? 'unknown' : null,
|
|
@@ -119,12 +146,29 @@ export async function materializeListenerExecution(
|
|
|
119
146
|
};
|
|
120
147
|
}
|
|
121
148
|
|
|
149
|
+
function variableResolutionTrace(
|
|
150
|
+
error: InterpolationUnresolvableError,
|
|
151
|
+
): PersistedEvaluationTraceEntry {
|
|
152
|
+
return {
|
|
153
|
+
...evaluationTraceEntry({
|
|
154
|
+
expression: error.source,
|
|
155
|
+
roots: ['vars'],
|
|
156
|
+
fillTarget: 'execution-creation',
|
|
157
|
+
evaluatedAt: 'execution-creation',
|
|
158
|
+
degraded: true,
|
|
159
|
+
}),
|
|
160
|
+
field: error.field,
|
|
161
|
+
...(error.envKey === undefined ? {} : {envKey: error.envKey}),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
122
165
|
function listenerExecutionContext(
|
|
123
166
|
params: Pick<
|
|
124
167
|
MaterializeListenerExecutionParams,
|
|
125
|
-
'run' | 'job' | 'sequence' | 'triggerEvents' | 'priorExecutions'
|
|
168
|
+
'run' | 'job' | 'vars' | 'sequence' | 'triggerEvents' | 'priorExecutions'
|
|
126
169
|
> & {
|
|
127
170
|
readonly executionName: string;
|
|
171
|
+
readonly nameOverride: string | null;
|
|
128
172
|
readonly status: JobExecutionStatus;
|
|
129
173
|
},
|
|
130
174
|
) {
|
|
@@ -132,8 +176,10 @@ function listenerExecutionContext(
|
|
|
132
176
|
run: params.run,
|
|
133
177
|
triggerPayload: params.run.triggerPayload,
|
|
134
178
|
inputs: params.run.inputs,
|
|
135
|
-
|
|
179
|
+
vars: params.vars,
|
|
180
|
+
job: {...params.job, name: params.job.name ?? null},
|
|
136
181
|
sequence: params.sequence,
|
|
182
|
+
nameOverride: params.nameOverride,
|
|
137
183
|
executionName: params.executionName,
|
|
138
184
|
status: params.status,
|
|
139
185
|
triggerEvents: params.triggerEvents,
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';
|
|
2
|
+
import type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';
|
|
3
|
+
import type {TriggerPayload} from './entities/workflow-run.js';
|
|
4
|
+
import {resolveWorkflowRunTriggerReference} from './resolve-trigger-reference.js';
|
|
5
|
+
|
|
6
|
+
describe('resolveWorkflowRunTriggerReference', () => {
|
|
7
|
+
const workspaceId = crypto.randomUUID();
|
|
8
|
+
const connectionId = crypto.randomUUID();
|
|
9
|
+
|
|
10
|
+
it.each([
|
|
11
|
+
{
|
|
12
|
+
event: 'push',
|
|
13
|
+
externalRepositoryId: 'github:42',
|
|
14
|
+
ref: 'refs/heads/main',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
event: 'pull_request',
|
|
18
|
+
externalRepositoryId: 'github:43',
|
|
19
|
+
ref: 'refs/pull/12/head',
|
|
20
|
+
},
|
|
21
|
+
])('resolves the normalized %s trigger facts with its project', async (reference) => {
|
|
22
|
+
const integrations = {
|
|
23
|
+
resolveTriggerReference: vi.fn().mockResolvedValue({
|
|
24
|
+
externalRepositoryId: reference.externalRepositoryId,
|
|
25
|
+
ref: reference.ref,
|
|
26
|
+
commit: 'a'.repeat(40),
|
|
27
|
+
actor: 'octocat',
|
|
28
|
+
}),
|
|
29
|
+
resolveSourceRepository: vi.fn().mockResolvedValue({
|
|
30
|
+
connection: {id: connectionId, provider: 'github', slug: 'github-main'},
|
|
31
|
+
repository: {
|
|
32
|
+
externalRepositoryId: reference.externalRepositoryId,
|
|
33
|
+
owner: 'acme',
|
|
34
|
+
name: 'api',
|
|
35
|
+
fullName: 'acme/api',
|
|
36
|
+
defaultBranch: 'main',
|
|
37
|
+
visibility: 'private' as const,
|
|
38
|
+
cloneUrl: 'https://github.com/acme/api.git',
|
|
39
|
+
htmlUrl: 'https://github.com/acme/api',
|
|
40
|
+
},
|
|
41
|
+
}),
|
|
42
|
+
} as unknown as IntegrationsModuleClient;
|
|
43
|
+
const projects = {
|
|
44
|
+
getProjectBySource: vi.fn().mockResolvedValue({project: {id: 'project-1'}}),
|
|
45
|
+
} as unknown as ProjectsModuleClient;
|
|
46
|
+
const triggerPayload: TriggerPayload = {
|
|
47
|
+
provider: 'github',
|
|
48
|
+
source: 'github-main',
|
|
49
|
+
event: reference.event,
|
|
50
|
+
deliveryId: 'delivery-1',
|
|
51
|
+
data: {event: reference.event},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
await expect(
|
|
55
|
+
resolveWorkflowRunTriggerReference({
|
|
56
|
+
workspaceId,
|
|
57
|
+
triggerConnectionId: connectionId,
|
|
58
|
+
triggerPayload,
|
|
59
|
+
integrations,
|
|
60
|
+
projects,
|
|
61
|
+
}),
|
|
62
|
+
).resolves.toEqual({
|
|
63
|
+
project: {id: 'project-1'},
|
|
64
|
+
repository: 'acme/api',
|
|
65
|
+
ref: reference.ref,
|
|
66
|
+
commit: 'a'.repeat(40),
|
|
67
|
+
actor: 'octocat',
|
|
68
|
+
});
|
|
69
|
+
expect(projects.getProjectBySource).toHaveBeenCalledWith({
|
|
70
|
+
workspaceId,
|
|
71
|
+
sourceConnectionId: connectionId,
|
|
72
|
+
sourceExternalRepositoryId: reference.externalRepositoryId,
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('returns null for a provider event without a source-control reference', async () => {
|
|
77
|
+
const resolveTriggerReference = vi.fn().mockResolvedValue(null);
|
|
78
|
+
const resolveSourceRepository = vi.fn();
|
|
79
|
+
const integrations = {
|
|
80
|
+
resolveTriggerReference,
|
|
81
|
+
resolveSourceRepository,
|
|
82
|
+
} as unknown as IntegrationsModuleClient;
|
|
83
|
+
const projects = {
|
|
84
|
+
getProjectBySource: vi.fn(),
|
|
85
|
+
} as unknown as ProjectsModuleClient;
|
|
86
|
+
|
|
87
|
+
await expect(
|
|
88
|
+
resolveWorkflowRunTriggerReference({
|
|
89
|
+
workspaceId,
|
|
90
|
+
triggerConnectionId: connectionId,
|
|
91
|
+
triggerPayload: {
|
|
92
|
+
provider: 'linear',
|
|
93
|
+
source: 'linear-main',
|
|
94
|
+
event: 'Issue.create',
|
|
95
|
+
deliveryId: 'delivery-1',
|
|
96
|
+
data: {type: 'Issue'},
|
|
97
|
+
},
|
|
98
|
+
integrations,
|
|
99
|
+
projects,
|
|
100
|
+
}),
|
|
101
|
+
).resolves.toBeNull();
|
|
102
|
+
expect(resolveSourceRepository).not.toHaveBeenCalled();
|
|
103
|
+
expect(projects.getProjectBySource).not.toHaveBeenCalled();
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it.each([
|
|
107
|
+
'trigger reference',
|
|
108
|
+
'project lookup',
|
|
109
|
+
'source repository lookup',
|
|
110
|
+
] as const)('returns null when %s fails during enrichment', async (failure) => {
|
|
111
|
+
const integrations = {
|
|
112
|
+
resolveTriggerReference:
|
|
113
|
+
failure === 'trigger reference'
|
|
114
|
+
? vi.fn().mockRejectedValue(new Error('trigger reference unavailable'))
|
|
115
|
+
: vi.fn().mockResolvedValue({
|
|
116
|
+
externalRepositoryId: 'github:42',
|
|
117
|
+
ref: 'refs/heads/main',
|
|
118
|
+
commit: 'a'.repeat(40),
|
|
119
|
+
}),
|
|
120
|
+
resolveSourceRepository:
|
|
121
|
+
failure === 'source repository lookup'
|
|
122
|
+
? vi.fn().mockRejectedValue(new Error('source repository unavailable'))
|
|
123
|
+
: vi.fn().mockResolvedValue({
|
|
124
|
+
connection: {id: connectionId, provider: 'github', slug: 'github-main'},
|
|
125
|
+
repository: {
|
|
126
|
+
externalRepositoryId: 'github:42',
|
|
127
|
+
owner: 'acme',
|
|
128
|
+
name: 'api',
|
|
129
|
+
fullName: 'acme/api',
|
|
130
|
+
defaultBranch: 'main',
|
|
131
|
+
visibility: 'private' as const,
|
|
132
|
+
cloneUrl: 'https://github.com/acme/api.git',
|
|
133
|
+
htmlUrl: 'https://github.com/acme/api',
|
|
134
|
+
},
|
|
135
|
+
}),
|
|
136
|
+
} as unknown as IntegrationsModuleClient;
|
|
137
|
+
const projects = {
|
|
138
|
+
getProjectBySource:
|
|
139
|
+
failure === 'project lookup'
|
|
140
|
+
? vi.fn().mockRejectedValue(new Error('project lookup unavailable'))
|
|
141
|
+
: vi.fn().mockResolvedValue({project: {id: 'project-1'}}),
|
|
142
|
+
} as unknown as ProjectsModuleClient;
|
|
143
|
+
|
|
144
|
+
await expect(
|
|
145
|
+
resolveWorkflowRunTriggerReference({
|
|
146
|
+
workspaceId,
|
|
147
|
+
triggerConnectionId: connectionId,
|
|
148
|
+
triggerPayload: {
|
|
149
|
+
provider: 'github',
|
|
150
|
+
source: 'github-main',
|
|
151
|
+
event: 'push',
|
|
152
|
+
deliveryId: 'delivery-1',
|
|
153
|
+
data: {event: 'push'},
|
|
154
|
+
},
|
|
155
|
+
integrations,
|
|
156
|
+
projects,
|
|
157
|
+
}),
|
|
158
|
+
).resolves.toBeNull();
|
|
159
|
+
});
|
|
160
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type {IntegrationsModuleClient} from '@shipfox/api-integration-core-dto/inter-module';
|
|
2
|
+
import type {ProjectsModuleClient} from '@shipfox/api-projects-dto/inter-module';
|
|
3
|
+
import type {TriggerPayload, WorkflowRunTriggerReference} from './entities/workflow-run.js';
|
|
4
|
+
|
|
5
|
+
export async function resolveWorkflowRunTriggerReference(params: {
|
|
6
|
+
workspaceId: string;
|
|
7
|
+
triggerConnectionId?: string | undefined;
|
|
8
|
+
triggerPayload: TriggerPayload;
|
|
9
|
+
integrations?: IntegrationsModuleClient | undefined;
|
|
10
|
+
projects?: ProjectsModuleClient | undefined;
|
|
11
|
+
}): Promise<WorkflowRunTriggerReference | null> {
|
|
12
|
+
if (
|
|
13
|
+
params.triggerConnectionId === undefined ||
|
|
14
|
+
!('data' in params.triggerPayload) ||
|
|
15
|
+
params.integrations === undefined ||
|
|
16
|
+
params.projects === undefined
|
|
17
|
+
) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const reference = await params.integrations.resolveTriggerReference({
|
|
23
|
+
workspaceId: params.workspaceId,
|
|
24
|
+
connectionId: params.triggerConnectionId,
|
|
25
|
+
payload: params.triggerPayload.data,
|
|
26
|
+
});
|
|
27
|
+
if (reference === null) return null;
|
|
28
|
+
|
|
29
|
+
const [projectResult, sourceResult] = await Promise.all([
|
|
30
|
+
params.projects.getProjectBySource({
|
|
31
|
+
workspaceId: params.workspaceId,
|
|
32
|
+
sourceConnectionId: params.triggerConnectionId,
|
|
33
|
+
sourceExternalRepositoryId: reference.externalRepositoryId,
|
|
34
|
+
}),
|
|
35
|
+
params.integrations.resolveSourceRepository({
|
|
36
|
+
workspaceId: params.workspaceId,
|
|
37
|
+
connectionId: params.triggerConnectionId,
|
|
38
|
+
externalRepositoryId: reference.externalRepositoryId,
|
|
39
|
+
}),
|
|
40
|
+
]);
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
project: projectResult.project === null ? null : {id: projectResult.project.id},
|
|
44
|
+
repository: `${sourceResult.repository.owner}/${sourceResult.repository.name}`,
|
|
45
|
+
ref: reference.ref,
|
|
46
|
+
commit: reference.commit,
|
|
47
|
+
actor: reference.actor,
|
|
48
|
+
};
|
|
49
|
+
} catch {
|
|
50
|
+
// Trigger metadata is best-effort and must not block run creation.
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
package/src/core/run-workflow.ts
CHANGED
|
@@ -15,6 +15,7 @@ export interface RunWorkflowParams {
|
|
|
15
15
|
projectId: string;
|
|
16
16
|
definitionId: string;
|
|
17
17
|
triggerPayload: TriggerPayload;
|
|
18
|
+
triggerConnectionId?: string | undefined;
|
|
18
19
|
inputs?: Record<string, unknown> | undefined;
|
|
19
20
|
triggerIdempotencyKey?: string | undefined;
|
|
20
21
|
integrations?: IntegrationsModuleClient | undefined;
|
|
@@ -47,6 +48,7 @@ export async function runWorkflow(
|
|
|
47
48
|
name: definition.name,
|
|
48
49
|
model,
|
|
49
50
|
triggerPayload: params.triggerPayload,
|
|
51
|
+
triggerConnectionId: params.triggerConnectionId,
|
|
50
52
|
inputs: params.inputs,
|
|
51
53
|
sourceSnapshot: definition.sourceSnapshot,
|
|
52
54
|
triggerIdempotencyKey: params.triggerIdempotencyKey,
|
|
@@ -42,6 +42,7 @@ interface AgentFieldResolutions {
|
|
|
42
42
|
readonly prompt: FieldResolution;
|
|
43
43
|
readonly model: FieldResolution | undefined;
|
|
44
44
|
readonly provider: FieldResolution | undefined;
|
|
45
|
+
readonly thinking: FieldResolution | undefined;
|
|
45
46
|
readonly hasTemplates: boolean;
|
|
46
47
|
}
|
|
47
48
|
|
|
@@ -72,9 +73,11 @@ export async function resolveAgentStepConfig(
|
|
|
72
73
|
|
|
73
74
|
if (usesAuthoredMode) return authoredAgentStepConfig(params.step, fields);
|
|
74
75
|
|
|
75
|
-
const
|
|
76
|
-
fields.model?.kind === 'residual' ||
|
|
77
|
-
|
|
76
|
+
const hasDeferredAgentField =
|
|
77
|
+
fields.model?.kind === 'residual' ||
|
|
78
|
+
fields.provider?.kind === 'residual' ||
|
|
79
|
+
fields.thinking?.kind === 'residual';
|
|
80
|
+
if (hasDeferredAgentField) return deferredAgentStepConfig(params, fields);
|
|
78
81
|
|
|
79
82
|
return await agentStepConfigWithDefaults(params.step, params, fields);
|
|
80
83
|
}
|
|
@@ -119,7 +122,10 @@ export async function completeAgentConfig(params: {
|
|
|
119
122
|
harness: agent.harness ?? readConfigHarness(params.config),
|
|
120
123
|
provider,
|
|
121
124
|
model,
|
|
122
|
-
thinking:
|
|
125
|
+
thinking:
|
|
126
|
+
agent.thinking === undefined
|
|
127
|
+
? readConfigThinking(params.config)
|
|
128
|
+
: completeAgentField({field: 'agent.thinking', template: agent.thinking, params}),
|
|
123
129
|
resolveAgentDefaults: params.resolveAgentDefaults,
|
|
124
130
|
definitionId: params.definitionId,
|
|
125
131
|
});
|
|
@@ -138,7 +144,7 @@ export async function completeAgentConfig(params: {
|
|
|
138
144
|
}
|
|
139
145
|
|
|
140
146
|
function completeAgentField(args: {
|
|
141
|
-
readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';
|
|
147
|
+
readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking';
|
|
142
148
|
readonly template: ResolvedField;
|
|
143
149
|
readonly params: {
|
|
144
150
|
readonly context: WorkflowEvaluationContext;
|
|
@@ -161,7 +167,7 @@ export async function completeAgentDefaults(params: {
|
|
|
161
167
|
readonly harness: WorkflowModelAgentStep['harness'] | undefined;
|
|
162
168
|
readonly provider: string | undefined;
|
|
163
169
|
readonly model: string | undefined;
|
|
164
|
-
readonly thinking:
|
|
170
|
+
readonly thinking: string | undefined;
|
|
165
171
|
readonly resolveAgentDefaults?: AgentDefaultsResolver | undefined;
|
|
166
172
|
readonly definitionId: string;
|
|
167
173
|
}): Promise<ResolvedAgentDefaults> {
|
|
@@ -218,12 +224,23 @@ function resolveAgentFields(params: ResolveAgentStepConfigParams): AgentFieldRes
|
|
|
218
224
|
trace,
|
|
219
225
|
definitionId: params.definitionId,
|
|
220
226
|
});
|
|
227
|
+
const thinking = resolveOptionalAgentField({
|
|
228
|
+
field: 'agent.thinking',
|
|
229
|
+
value: params.step.thinking,
|
|
230
|
+
template: params.step.templates?.thinking,
|
|
231
|
+
context: params.context,
|
|
232
|
+
mode: params.mode,
|
|
233
|
+
diagnostics,
|
|
234
|
+
trace,
|
|
235
|
+
definitionId: params.definitionId,
|
|
236
|
+
});
|
|
221
237
|
const hasTemplates =
|
|
222
238
|
params.step.templates?.prompt !== undefined ||
|
|
223
239
|
params.step.templates?.model !== undefined ||
|
|
224
|
-
params.step.templates?.provider !== undefined
|
|
240
|
+
params.step.templates?.provider !== undefined ||
|
|
241
|
+
params.step.templates?.thinking !== undefined;
|
|
225
242
|
|
|
226
|
-
return {diagnostics, trace, prompt, model, provider, hasTemplates};
|
|
243
|
+
return {diagnostics, trace, prompt, model, provider, thinking, hasTemplates};
|
|
227
244
|
}
|
|
228
245
|
|
|
229
246
|
function authoredAgentStepConfig(
|
|
@@ -260,7 +277,7 @@ function deferredAgentStepConfig(
|
|
|
260
277
|
...(fields.model === undefined ? {} : {model: dispatchPlanField(fields.model)}),
|
|
261
278
|
...(fields.provider === undefined ? {} : {provider: dispatchPlanField(fields.provider)}),
|
|
262
279
|
...(step.harness === undefined ? {} : {harness: step.harness}),
|
|
263
|
-
...(
|
|
280
|
+
...(fields.thinking === undefined ? {} : {thinking: dispatchPlanField(fields.thinking)}),
|
|
264
281
|
...agentToolsConfig(step),
|
|
265
282
|
...materializedAgentIntegrationsConfig(params),
|
|
266
283
|
},
|
|
@@ -284,7 +301,7 @@ async function agentStepConfigWithDefaults(
|
|
|
284
301
|
harness: step.harness,
|
|
285
302
|
provider: providerValue,
|
|
286
303
|
model: modelValue,
|
|
287
|
-
thinking:
|
|
304
|
+
thinking: frozenFieldValue(fields.thinking),
|
|
288
305
|
resolveAgentDefaults: params.resolveAgentDefaults,
|
|
289
306
|
definitionId: params.definitionId,
|
|
290
307
|
});
|
|
@@ -384,7 +401,7 @@ function frozenFieldValue(field: FieldResolution | undefined): string | undefine
|
|
|
384
401
|
}
|
|
385
402
|
|
|
386
403
|
function resolveAgentField(params: {
|
|
387
|
-
readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';
|
|
404
|
+
readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking';
|
|
388
405
|
readonly value: string;
|
|
389
406
|
readonly template: ResolvedField['segments'] | undefined;
|
|
390
407
|
readonly context: WorkflowEvaluationContext;
|
|
@@ -414,7 +431,7 @@ function resolveAgentField(params: {
|
|
|
414
431
|
}
|
|
415
432
|
|
|
416
433
|
function resolveOptionalAgentField(params: {
|
|
417
|
-
readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider';
|
|
434
|
+
readonly field: 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking';
|
|
418
435
|
readonly value: string | undefined;
|
|
419
436
|
readonly template: ResolvedField['segments'] | undefined;
|
|
420
437
|
readonly context: WorkflowEvaluationContext;
|