@wichayutdew/pi-workflows 0.3.0 → 1.0.1
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/README.md +55 -39
- package/dist/index.js +5771 -4794
- package/examples/mr-comments.workflow.yaml +2 -0
- package/package.json +1 -1
- package/schemas/workflow.schema.json +10 -1
- package/src/command-names.ts +7 -1
- package/src/commands.ts +126 -52
- package/src/config/catalog.ts +162 -0
- package/src/config/ceiling.ts +120 -116
- package/src/config/command-conflicts.ts +4 -4
- package/src/config/diagnostics.ts +28 -0
- package/src/config/load-settings.ts +37 -0
- package/src/config/load-types.ts +53 -0
- package/src/config/load-workflows.ts +135 -0
- package/src/config/load.ts +43 -311
- package/src/config/types.ts +150 -137
- package/src/config/validate.ts +12 -1261
- package/src/config/validation/permissions.ts +312 -0
- package/src/config/validation/prompt.ts +21 -0
- package/src/config/validation/settings.ts +122 -0
- package/src/config/validation/shared.ts +129 -0
- package/src/config/validation/shortcut.ts +118 -0
- package/src/config/validation/step.ts +228 -0
- package/src/config/validation/subagent.ts +288 -0
- package/src/config/validation/workflow.ts +156 -0
- package/src/config/yaml.ts +29 -0
- package/src/digest.ts +38 -6
- package/src/engine/checkpoint.ts +13 -9
- package/src/engine/create-run.ts +43 -0
- package/src/engine/gate-transitions.ts +187 -0
- package/src/engine/reconciliation-history.ts +88 -0
- package/src/engine/resume.ts +19 -7
- package/src/engine/run-advance.ts +122 -0
- package/src/engine/run-lifecycle.ts +124 -0
- package/src/engine/run-reconciliation.ts +116 -0
- package/src/engine/run-validation.ts +129 -0
- package/src/engine/state-types.ts +66 -0
- package/src/engine/state.ts +10 -193
- package/src/engine/transition-helpers.ts +28 -0
- package/src/engine/transition-types.ts +8 -0
- package/src/engine/transitions.ts +17 -471
- package/src/harness/action-context.ts +181 -0
- package/src/harness/catalog.ts +45 -0
- package/src/harness/context-idle.ts +21 -0
- package/src/harness/core-actions.ts +299 -0
- package/src/harness/delegation-control-actions.ts +250 -0
- package/src/harness/delegation-failure.ts +215 -0
- package/src/harness/delegation-plan.ts +219 -0
- package/src/harness/delegation-recovery-validation.ts +159 -0
- package/src/harness/delegation-response-actions.ts +295 -0
- package/src/harness/delegation-retry-policy.ts +118 -0
- package/src/harness/dependencies.ts +165 -0
- package/src/harness/gate-submission-action.ts +154 -0
- package/src/harness/lifecycle-actions.ts +154 -0
- package/src/harness/pause-actions.ts +120 -0
- package/src/harness/plannotator-result-actions.ts +123 -0
- package/src/harness/prompt-gate-actions.ts +270 -0
- package/src/harness/resume-action.ts +261 -0
- package/src/harness/start-actions.ts +183 -0
- package/src/harness/status-actions.ts +191 -0
- package/src/harness/step-execution-actions.ts +283 -0
- package/src/harness/types.ts +76 -0
- package/src/harness.ts +236 -2303
- package/src/index.ts +73 -11
- package/src/integrations/plannotator-requests.ts +127 -0
- package/src/integrations/plannotator-responses.ts +141 -0
- package/src/integrations/plannotator-types.ts +44 -0
- package/src/integrations/plannotator.ts +16 -235
- package/src/integrations/prompt-gate.ts +17 -10
- package/src/integrations/subagents/child-policy-envelope.ts +119 -0
- package/src/integrations/subagents/child-policy-paths.ts +66 -0
- package/src/integrations/subagents/child-policy-sections.ts +186 -0
- package/src/integrations/subagents/child-policy-types.ts +32 -0
- package/src/integrations/subagents/child-policy-validation.ts +163 -0
- package/src/integrations/subagents/child-runtime-completion.ts +56 -0
- package/src/integrations/subagents/child-runtime-dependencies.ts +47 -0
- package/src/integrations/subagents/child-runtime-files.ts +156 -0
- package/src/integrations/subagents/child-runtime-policy.ts +83 -0
- package/src/integrations/subagents/child-runtime-types.ts +30 -0
- package/src/integrations/subagents/child-runtime.ts +140 -301
- package/src/integrations/subagents/client-delegation.ts +181 -0
- package/src/integrations/subagents/client-messages.ts +66 -0
- package/src/integrations/subagents/client-types.ts +36 -0
- package/src/integrations/subagents/client.ts +127 -219
- package/src/integrations/subagents/delegated-result.ts +31 -0
- package/src/integrations/subagents/diagnostic-format.ts +40 -0
- package/src/integrations/subagents/diagnostic-text.ts +114 -0
- package/src/integrations/subagents/diagnostic-types.ts +77 -0
- package/src/integrations/subagents/diagnostics.ts +24 -977
- package/src/integrations/subagents/failure-correlation.ts +235 -0
- package/src/integrations/subagents/failure-transcript.ts +192 -0
- package/src/integrations/subagents/hidden-bash-failure.ts +98 -0
- package/src/integrations/subagents/protocol-events.ts +27 -0
- package/src/integrations/subagents/protocol.ts +30 -375
- package/src/integrations/subagents/replay-audit.ts +147 -0
- package/src/integrations/subagents/replay-safety.ts +82 -0
- package/src/integrations/subagents/session-diagnostics.ts +258 -0
- package/src/policy/approved-command-extraction.ts +71 -0
- package/src/policy/approved-commands.ts +15 -432
- package/src/policy/bash-authorization.ts +86 -0
- package/src/policy/bash-read-only.ts +161 -0
- package/src/policy/bash-types.ts +20 -0
- package/src/policy/bash.ts +4 -346
- package/src/policy/completion-batch.ts +21 -16
- package/src/policy/immutable-input.ts +5 -2
- package/src/policy/mcp-authorization.ts +71 -0
- package/src/policy/restricted-command.ts +141 -0
- package/src/policy/restricted-git.ts +30 -0
- package/src/policy/reviewed-artifact.ts +97 -0
- package/src/policy/reviewed-command-safety.ts +150 -0
- package/src/policy/reviewed-command-shape.ts +49 -0
- package/src/policy/reviewed-repository-contract.ts +138 -0
- package/src/policy/reviewed-repository-cwd.ts +102 -0
- package/src/policy/tool-call-authorization.ts +58 -0
- package/src/policy/tool-selection.ts +72 -0
- package/src/policy/tool-types.ts +14 -0
- package/src/policy/tools.ts +11 -150
- package/src/preflight.ts +96 -61
- package/src/prompt/main-workflow-notice.ts +41 -0
- package/src/prompt/retry-task.ts +83 -0
- package/src/prompt/step-contract.ts +101 -0
- package/src/prompt/step-sections.ts +75 -0
- package/src/prompt/step-task.ts +156 -0
- package/src/prompt/template.ts +83 -0
- package/src/prompt.ts +10 -254
- package/src/runtime/completion-tool.ts +3 -0
- package/src/runtime/main-step-completion.ts +78 -0
- package/src/runtime/main-step-lifecycle.ts +37 -0
- package/src/runtime/main-step-policy.ts +84 -0
- package/src/runtime/main-step-runtime-types.ts +64 -0
- package/src/runtime/main-step-runtime.ts +129 -200
- package/src/runtime/main-step-state.ts +85 -0
- package/src/runtime/serial-task-queue.ts +48 -13
- package/src/runtime/step-result.ts +48 -27
- package/src/workflow-list.ts +15 -6
- package/src/workflow-status/format-status.ts +52 -0
- package/src/workflow-status/formatting.ts +178 -0
- package/src/workflow-status/layout.ts +109 -0
- package/src/workflow-status/render-board.ts +101 -0
- package/src/workflow-status/render-path.ts +123 -0
- package/src/workflow-status/render-summary.ts +144 -0
- package/src/workflow-status/types.ts +40 -0
- package/src/workflow-status/view.ts +273 -0
- package/src/workflow-status.ts +20 -820
package/src/config/types.ts
CHANGED
|
@@ -7,193 +7,206 @@ export const SUBAGENT_RUNTIME_NAME_PATTERN =
|
|
|
7
7
|
|
|
8
8
|
export const TERMINAL_TARGETS = ['$done', '$pause'] as const;
|
|
9
9
|
export type TerminalTarget = (typeof TERMINAL_TARGETS)[number];
|
|
10
|
-
export type StepTarget = string
|
|
10
|
+
export type StepTarget = string;
|
|
11
11
|
|
|
12
12
|
export type BashMode = 'deny' | 'read-only' | 'allow-list' | 'unrestricted';
|
|
13
13
|
export type BashApprovalSource =
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
| 'verification-worker'
|
|
15
|
+
| 'verification-reviewer'
|
|
16
|
+
| 'remote-actions'
|
|
17
|
+
| 'remote-push'
|
|
18
|
+
| 'remote-drafts';
|
|
19
|
+
|
|
20
|
+
export type BashRule = {
|
|
21
|
+
readonly executable: string;
|
|
22
|
+
readonly argsPrefix: ReadonlyArray<string>;
|
|
23
|
+
};
|
|
20
24
|
|
|
21
|
-
export
|
|
22
|
-
mode: BashMode;
|
|
23
|
-
allow: BashRule
|
|
25
|
+
export type BashPermission = {
|
|
26
|
+
readonly mode: BashMode;
|
|
27
|
+
readonly allow: ReadonlyArray<BashRule>;
|
|
24
28
|
/**
|
|
25
29
|
* Exact commands extracted from the most recent human-approved artifact.
|
|
26
30
|
* They supplement `allow` only inside the correlated step execution.
|
|
27
31
|
*/
|
|
28
|
-
approvedSources?: BashApprovalSource
|
|
29
|
-
|
|
32
|
+
readonly approvedSources?: ReadonlyArray<BashApprovalSource>;
|
|
33
|
+
/**
|
|
34
|
+
* Sources whose command-only retry handoffs may refine an already approved
|
|
35
|
+
* command. The original reviewed identity and safety envelope remain fixed.
|
|
36
|
+
*/
|
|
37
|
+
readonly handoffSources?: ReadonlyArray<
|
|
38
|
+
'verification-worker' | 'verification-reviewer'
|
|
39
|
+
>;
|
|
40
|
+
};
|
|
30
41
|
|
|
31
|
-
export
|
|
42
|
+
export type StepPermissions = {
|
|
32
43
|
/** Exact Pi tool names, including direct MCP tools. */
|
|
33
|
-
tools: string
|
|
44
|
+
readonly tools: ReadonlyArray<string>;
|
|
34
45
|
/** MCP proxy selectors in `server` or `server/tool` form. */
|
|
35
|
-
mcp: string
|
|
46
|
+
readonly mcp: ReadonlyArray<string>;
|
|
36
47
|
/** Source-name/path fragments whose registered tools may be used. */
|
|
37
|
-
extensions: string
|
|
48
|
+
readonly extensions: ReadonlyArray<string>;
|
|
38
49
|
/** Skills the step prompt is allowed to use. */
|
|
39
|
-
skills: string
|
|
40
|
-
bash: BashPermission;
|
|
41
|
-
}
|
|
50
|
+
readonly skills: ReadonlyArray<string>;
|
|
51
|
+
readonly bash: BashPermission;
|
|
52
|
+
};
|
|
42
53
|
|
|
43
|
-
export
|
|
44
|
-
tools: string
|
|
45
|
-
extensions: string
|
|
46
|
-
skills: string
|
|
47
|
-
}
|
|
54
|
+
export type StepRequirements = {
|
|
55
|
+
readonly tools: ReadonlyArray<string>;
|
|
56
|
+
readonly extensions: ReadonlyArray<string>;
|
|
57
|
+
readonly skills: ReadonlyArray<string>;
|
|
58
|
+
};
|
|
48
59
|
|
|
49
60
|
export type SubagentContext = 'fresh';
|
|
50
61
|
|
|
51
|
-
export
|
|
52
|
-
maxTurns: number;
|
|
53
|
-
graceTurns?: number;
|
|
54
|
-
}
|
|
62
|
+
export type SubagentTurnBudget = {
|
|
63
|
+
readonly maxTurns: number;
|
|
64
|
+
readonly graceTurns?: number;
|
|
65
|
+
};
|
|
55
66
|
|
|
56
|
-
export
|
|
57
|
-
hard: number;
|
|
58
|
-
soft?: number;
|
|
59
|
-
block?: string
|
|
60
|
-
}
|
|
67
|
+
export type SubagentToolBudget = {
|
|
68
|
+
readonly hard: number;
|
|
69
|
+
readonly soft?: number;
|
|
70
|
+
readonly block?: ReadonlyArray<string> | '*';
|
|
71
|
+
};
|
|
61
72
|
|
|
62
|
-
export
|
|
73
|
+
export type StepSubagent = {
|
|
63
74
|
/** Pi Subagents agent profile launched for this isolated step. */
|
|
64
|
-
agent: string;
|
|
75
|
+
readonly agent: string;
|
|
65
76
|
/** Workflow steps always use a fresh context. */
|
|
66
|
-
context: SubagentContext;
|
|
67
|
-
model?: string;
|
|
68
|
-
timeoutMs: number;
|
|
69
|
-
turnBudget?: SubagentTurnBudget;
|
|
70
|
-
toolBudget?: SubagentToolBudget;
|
|
71
|
-
artifacts: boolean;
|
|
77
|
+
readonly context: SubagentContext;
|
|
78
|
+
readonly model?: string;
|
|
79
|
+
readonly timeoutMs: number;
|
|
80
|
+
readonly turnBudget?: SubagentTurnBudget;
|
|
81
|
+
readonly toolBudget?: SubagentToolBudget;
|
|
82
|
+
readonly artifacts: boolean;
|
|
72
83
|
/**
|
|
73
|
-
* Authorizes
|
|
74
|
-
* read-only
|
|
84
|
+
* Authorizes the bounded automatic recovery sequence in Bash modes broader
|
|
85
|
+
* than read-only. Every failed attempt must still have a complete,
|
|
86
|
+
* mutation-safe replay audit.
|
|
75
87
|
*/
|
|
76
|
-
retryToolFailures: boolean;
|
|
77
|
-
}
|
|
88
|
+
readonly retryToolFailures: boolean;
|
|
89
|
+
};
|
|
78
90
|
|
|
79
|
-
export type PromptSpec =
|
|
91
|
+
export type PromptSpec =
|
|
92
|
+
{ readonly inline: string } | { readonly file: string };
|
|
80
93
|
|
|
81
|
-
|
|
82
|
-
submitOutcome: string;
|
|
83
|
-
approvedOutcome: string;
|
|
84
|
-
rejectedOutcome: string;
|
|
85
|
-
}
|
|
94
|
+
type GateDefinition = {
|
|
95
|
+
readonly submitOutcome: string;
|
|
96
|
+
readonly approvedOutcome: string;
|
|
97
|
+
readonly rejectedOutcome: string;
|
|
98
|
+
};
|
|
86
99
|
|
|
87
|
-
export
|
|
88
|
-
provider: 'prompt';
|
|
89
|
-
}
|
|
100
|
+
export type PromptGate = GateDefinition & {
|
|
101
|
+
readonly provider: 'prompt';
|
|
102
|
+
};
|
|
90
103
|
|
|
91
|
-
export
|
|
92
|
-
provider: 'plannotator';
|
|
93
|
-
timeoutMs: number;
|
|
94
|
-
}
|
|
104
|
+
export type PlannotatorGate = GateDefinition & {
|
|
105
|
+
readonly provider: 'plannotator';
|
|
106
|
+
readonly timeoutMs: number;
|
|
107
|
+
};
|
|
95
108
|
|
|
96
109
|
export type WorkflowGate = PromptGate | PlannotatorGate;
|
|
97
110
|
|
|
98
|
-
export
|
|
99
|
-
title: string;
|
|
100
|
-
prompt: PromptSpec;
|
|
111
|
+
export type WorkflowStep = {
|
|
112
|
+
readonly title: string;
|
|
113
|
+
readonly prompt: PromptSpec;
|
|
101
114
|
/** Omit to execute this step in the main Pi agent. */
|
|
102
|
-
subagent?: StepSubagent;
|
|
103
|
-
permissions: StepPermissions;
|
|
104
|
-
requires: StepRequirements;
|
|
105
|
-
transitions: Record<string, StepTarget
|
|
106
|
-
gate?: WorkflowGate;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export
|
|
110
|
-
version: typeof WORKFLOW_SCHEMA_VERSION;
|
|
111
|
-
id: string;
|
|
112
|
-
command: string;
|
|
113
|
-
description: string;
|
|
114
|
-
start: string;
|
|
115
|
-
maxStepVisits: number;
|
|
116
|
-
summaryMaxChars: number;
|
|
117
|
-
steps: Record<string, WorkflowStep
|
|
118
|
-
}
|
|
115
|
+
readonly subagent?: StepSubagent;
|
|
116
|
+
readonly permissions: StepPermissions;
|
|
117
|
+
readonly requires: StepRequirements;
|
|
118
|
+
readonly transitions: Readonly<Record<string, StepTarget>>;
|
|
119
|
+
readonly gate?: WorkflowGate;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export type WorkflowDefinition = {
|
|
123
|
+
readonly version: typeof WORKFLOW_SCHEMA_VERSION;
|
|
124
|
+
readonly id: string;
|
|
125
|
+
readonly command: string;
|
|
126
|
+
readonly description: string;
|
|
127
|
+
readonly start: string;
|
|
128
|
+
readonly maxStepVisits: number;
|
|
129
|
+
readonly summaryMaxChars: number;
|
|
130
|
+
readonly steps: Readonly<Record<string, WorkflowStep>>;
|
|
131
|
+
};
|
|
119
132
|
|
|
120
133
|
export type WorkflowSourceKind = 'user' | 'project';
|
|
121
134
|
|
|
122
|
-
export
|
|
123
|
-
definition: WorkflowDefinition;
|
|
124
|
-
prompts: Record<string, string
|
|
125
|
-
digest: string;
|
|
126
|
-
stepDigests: Record<string, string
|
|
127
|
-
sourcePath: string;
|
|
128
|
-
sourceKind: WorkflowSourceKind;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export
|
|
132
|
-
tools: string
|
|
133
|
-
mcp: string
|
|
134
|
-
extensions: string
|
|
135
|
-
skills: string
|
|
136
|
-
bash: BashPermission;
|
|
137
|
-
subagent?: SubagentPermissionCeiling;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
export
|
|
141
|
-
agents: string
|
|
142
|
-
contexts: SubagentContext
|
|
143
|
-
models: string
|
|
144
|
-
maxTimeoutMs: number;
|
|
145
|
-
maxTurns: number;
|
|
146
|
-
maxGraceTurns: number;
|
|
147
|
-
maxToolCalls: number;
|
|
148
|
-
artifacts: boolean;
|
|
149
|
-
retryToolFailures: boolean;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export
|
|
153
|
-
version: typeof WORKFLOW_SCHEMA_VERSION;
|
|
154
|
-
allowProjectWorkflows: boolean;
|
|
155
|
-
statusShortcut: KeyId;
|
|
156
|
-
permissionCeiling?: PermissionCeiling;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export
|
|
160
|
-
level: 'warning' | 'error';
|
|
161
|
-
path: string;
|
|
162
|
-
message: string;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export
|
|
166
|
-
workflows:
|
|
167
|
-
settings: WorkflowSettings;
|
|
168
|
-
diagnostics: ConfigDiagnostic
|
|
169
|
-
userDirectory: string;
|
|
170
|
-
projectDirectory?: string;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
export const EMPTY_PERMISSIONS
|
|
135
|
+
export type LoadedWorkflow = {
|
|
136
|
+
readonly definition: WorkflowDefinition;
|
|
137
|
+
readonly prompts: Readonly<Record<string, string>>;
|
|
138
|
+
readonly digest: string;
|
|
139
|
+
readonly stepDigests: Readonly<Record<string, string>>;
|
|
140
|
+
readonly sourcePath: string;
|
|
141
|
+
readonly sourceKind: WorkflowSourceKind;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export type PermissionCeiling = {
|
|
145
|
+
readonly tools: ReadonlyArray<string>;
|
|
146
|
+
readonly mcp: ReadonlyArray<string>;
|
|
147
|
+
readonly extensions: ReadonlyArray<string>;
|
|
148
|
+
readonly skills: ReadonlyArray<string>;
|
|
149
|
+
readonly bash: BashPermission;
|
|
150
|
+
readonly subagent?: SubagentPermissionCeiling;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export type SubagentPermissionCeiling = {
|
|
154
|
+
readonly agents: ReadonlyArray<string>;
|
|
155
|
+
readonly contexts: ReadonlyArray<SubagentContext>;
|
|
156
|
+
readonly models: ReadonlyArray<string>;
|
|
157
|
+
readonly maxTimeoutMs: number;
|
|
158
|
+
readonly maxTurns: number;
|
|
159
|
+
readonly maxGraceTurns: number;
|
|
160
|
+
readonly maxToolCalls: number;
|
|
161
|
+
readonly artifacts: boolean;
|
|
162
|
+
readonly retryToolFailures: boolean;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export type WorkflowSettings = {
|
|
166
|
+
readonly version: typeof WORKFLOW_SCHEMA_VERSION;
|
|
167
|
+
readonly allowProjectWorkflows: boolean;
|
|
168
|
+
readonly statusShortcut: KeyId;
|
|
169
|
+
readonly permissionCeiling?: PermissionCeiling;
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export type ConfigDiagnostic = {
|
|
173
|
+
readonly level: 'warning' | 'error';
|
|
174
|
+
readonly path: string;
|
|
175
|
+
readonly message: string;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export type WorkflowCatalog = {
|
|
179
|
+
readonly workflows: ReadonlyMap<string, LoadedWorkflow>;
|
|
180
|
+
readonly settings: WorkflowSettings;
|
|
181
|
+
readonly diagnostics: ReadonlyArray<ConfigDiagnostic>;
|
|
182
|
+
readonly userDirectory: string;
|
|
183
|
+
readonly projectDirectory?: string;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export const EMPTY_PERMISSIONS = {
|
|
174
187
|
tools: [],
|
|
175
188
|
mcp: [],
|
|
176
189
|
extensions: [],
|
|
177
190
|
skills: [],
|
|
178
191
|
bash: { mode: 'deny', allow: [] },
|
|
179
|
-
};
|
|
192
|
+
} as const satisfies StepPermissions;
|
|
180
193
|
|
|
181
|
-
export const EMPTY_REQUIREMENTS
|
|
194
|
+
export const EMPTY_REQUIREMENTS = {
|
|
182
195
|
tools: [],
|
|
183
196
|
extensions: [],
|
|
184
197
|
skills: [],
|
|
185
|
-
};
|
|
198
|
+
} as const satisfies StepRequirements;
|
|
186
199
|
|
|
187
|
-
export const DEFAULT_STEP_SUBAGENT
|
|
200
|
+
export const DEFAULT_STEP_SUBAGENT = {
|
|
188
201
|
agent: 'pi-workflows.step',
|
|
189
202
|
context: 'fresh',
|
|
190
203
|
timeoutMs: 900_000,
|
|
191
204
|
artifacts: false,
|
|
192
205
|
retryToolFailures: false,
|
|
193
|
-
};
|
|
206
|
+
} as const satisfies StepSubagent;
|
|
194
207
|
|
|
195
|
-
export const DEFAULT_SETTINGS
|
|
208
|
+
export const DEFAULT_SETTINGS = {
|
|
196
209
|
version: WORKFLOW_SCHEMA_VERSION,
|
|
197
210
|
allowProjectWorkflows: false,
|
|
198
211
|
statusShortcut: DEFAULT_STATUS_SHORTCUT,
|
|
199
|
-
};
|
|
212
|
+
} as const satisfies WorkflowSettings;
|