@canhta/dsh-autopilot 0.1.0-alpha.3 → 0.1.0-alpha.4

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.
@@ -3,9 +3,10 @@ import { type ReactNode } from 'react';
3
3
  import type { OperationsSnapshot, ProviderTestResult } from '../web/contract.js';
4
4
  import type { AutopilotTranslate } from './settings-draft.js';
5
5
  type Provider = OperationsSnapshot['providers'][number];
6
- export declare function ProviderConnectionSection({ providers, selectedProvider, codeHostProvider, allowWorkflowChanges, credentials, onSelectProvider, onSelectCodeHostProvider, onAllowWorkflowChanges, onOpenSettings, onTestProvider, onSetCredential, onUnsetCredential, t, }: {
6
+ export declare function ProviderConnectionSection({ providers, selectedProvider, codeHostProviders, codeHostProvider, allowWorkflowChanges, credentials, onSelectProvider, onSelectCodeHostProvider, onAllowWorkflowChanges, onOpenSettings, onTestProvider, onSetCredential, onUnsetCredential, t, }: {
7
7
  readonly providers: readonly Provider[];
8
8
  readonly selectedProvider: string;
9
+ readonly codeHostProviders: readonly Provider[];
9
10
  readonly codeHostProvider: string;
10
11
  readonly allowWorkflowChanges: boolean;
11
12
  readonly credentials: Record<string, CredentialInfo> | undefined;
@@ -78,17 +78,18 @@ export declare const en: {
78
78
  removeWorktree: string;
79
79
  settingsIntro: string;
80
80
  providerSection: string;
81
+ codeHostProviderSection: string;
81
82
  policySection: string;
82
83
  budgetSection: string;
83
84
  provider: string;
84
85
  codeHostProviderReference: string;
86
+ codeHostConfigureHint: string;
85
87
  allowWorkflowChanges: string;
86
88
  providerSettingsOwnership: string;
87
89
  providerAvailable: string;
88
90
  providerUnavailable: string;
89
91
  providerConfigUnknown: string;
90
92
  configurationNamespace: string;
91
- mcpNotice: string;
92
93
  testConnection: string;
93
94
  testReady: string;
94
95
  testFailed: string;
@@ -78,17 +78,18 @@ export declare const zh: {
78
78
  removeWorktree: string;
79
79
  settingsIntro: string;
80
80
  providerSection: string;
81
+ codeHostProviderSection: string;
81
82
  policySection: string;
82
83
  budgetSection: string;
83
84
  provider: string;
84
85
  codeHostProviderReference: string;
86
+ codeHostConfigureHint: string;
85
87
  allowWorkflowChanges: string;
86
88
  providerSettingsOwnership: string;
87
89
  providerAvailable: string;
88
90
  providerUnavailable: string;
89
91
  providerConfigUnknown: string;
90
92
  configurationNamespace: string;
91
- mcpNotice: string;
92
93
  testConnection: string;
93
94
  testReady: string;
94
95
  testFailed: string;
@@ -103,6 +103,13 @@ export interface CodeHostProvider {
103
103
  publishChanges(request: CodeHostProviderRequest): Promise<void>;
104
104
  createPullRequest(request: CodeHostProviderRequest): Promise<PullRequestReceipt>;
105
105
  }
106
+ /** Stable, secret-free metadata for one currently accepting code-host provider generation. */
107
+ export interface CodeHostProviderRegistration {
108
+ readonly id: CodeHostProviderId;
109
+ readonly displayName: string;
110
+ readonly configurationNamespace: string;
111
+ readonly capabilities: readonly CodeHostCapability[];
112
+ }
106
113
  export interface CodeHostPublisher {
107
114
  reconcile(publication: CodeHostPublication, signal?: AbortSignal): Promise<CodeHostReconciliation>;
108
115
  createBranch(publication: CodeHostPublication, signal?: AbortSignal): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  import { type Context, Service } from '@deepseek-ai/cordis';
2
- import { type CodeHostBinding, type CodeHostProvider, type CodeHostProviderId, type CodeHostPublisher } from './model.js';
2
+ import { type CodeHostBinding, type CodeHostProvider, type CodeHostProviderId, type CodeHostProviderRegistration, type CodeHostPublisher } from './model.js';
3
3
  declare module '@deepseek-ai/cordis' {
4
4
  interface Context {
5
5
  codeHost: CodeHost;
@@ -12,6 +12,8 @@ export declare class CodeHost extends Service {
12
12
  constructor(ctx: Context);
13
13
  /** Register one complete provider generation; the disposer fences new calls, aborts active work, and drains it. */
14
14
  register(provider: CodeHostProvider): () => Promise<void>;
15
+ /** Return stable, secret-free metadata for every currently accepting provider generation. */
16
+ providerRegistrations(): readonly CodeHostProviderRegistration[];
15
17
  /** Register the single provider-owned target snapshot used for future execution claims. */
16
18
  registerBinding(binding: CodeHostBinding): () => void;
17
19
  /** Return the current provider-owned target, or fail before a run can snapshot an unavailable binding. */
@@ -724,6 +724,37 @@ export declare const operationsSnapshotSchema: z.ZodObject<{
724
724
  reason: z.ZodString;
725
725
  }, z.core.$strip>], "status">;
726
726
  }, z.core.$strip>>;
727
+ codeHostProviders: z.ZodArray<z.ZodObject<{
728
+ id: z.ZodString;
729
+ displayName: z.ZodString;
730
+ configurationNamespace: z.ZodString;
731
+ selected: z.ZodBoolean;
732
+ availability: z.ZodEnum<{
733
+ available: "available";
734
+ unavailable: "unavailable";
735
+ }>;
736
+ setup: z.ZodDiscriminatedUnion<[z.ZodObject<{
737
+ status: z.ZodLiteral<"available">;
738
+ mcpServerName: z.ZodString;
739
+ resources: z.ZodArray<z.ZodObject<{
740
+ label: z.ZodString;
741
+ value: z.ZodString;
742
+ }, z.core.$strip>>;
743
+ credentialRefs: z.ZodArray<z.ZodObject<{
744
+ label: z.ZodString;
745
+ ref: z.ZodString;
746
+ }, z.core.$strip>>;
747
+ lookup: z.ZodDiscriminatedUnion<[z.ZodObject<{
748
+ status: z.ZodLiteral<"available">;
749
+ }, z.core.$strip>, z.ZodObject<{
750
+ status: z.ZodLiteral<"unavailable">;
751
+ reason: z.ZodString;
752
+ }, z.core.$strip>], "status">;
753
+ }, z.core.$strip>, z.ZodObject<{
754
+ status: z.ZodLiteral<"unavailable">;
755
+ reason: z.ZodString;
756
+ }, z.core.$strip>], "status">;
757
+ }, z.core.$strip>>;
727
758
  runs: z.ZodObject<{
728
759
  items: z.ZodArray<z.ZodObject<{
729
760
  runId: z.ZodString;
package/lib/client.js CHANGED
@@ -5536,6 +5536,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5536
5536
  changedAt: string().datetime()
5537
5537
  }),
5538
5538
  providers: array(providerViewSchema),
5539
+ codeHostProviders: array(providerViewSchema),
5539
5540
  runs: object({
5540
5541
  items: array(runSummarySchema),
5541
5542
  total: number().int().min(0),
@@ -5772,17 +5773,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5772
5773
  removeWorktree: "Remove worktree",
5773
5774
  settingsIntro: "Choose the installed tracker binding and operational limits. Provider credentials remain in DSH MCP connections.",
5774
5775
  providerSection: "Provider & project",
5776
+ codeHostProviderSection: "Code host provider",
5775
5777
  policySection: "Schedule & capacity",
5776
5778
  budgetSection: "Budget",
5777
5779
  provider: "Tracker provider",
5778
5780
  codeHostProviderReference: "Code host provider reference",
5781
+ codeHostConfigureHint: "Enter the code host provider reference above (for example, \"github\") to bind it.",
5779
5782
  allowWorkflowChanges: "Allow provider-owned workflow file changes",
5780
- providerSettingsOwnership: "Project, binding, repository and mapping values stay in each provider’s registered DSH Settings namespace. Open DSH settings to edit them.",
5783
+ providerSettingsOwnership: "Project, binding, repository, mapping values and the official MCP server connection all live in DSH Settings, not here. Autopilot stores only which MCP server name to use and never asks for the vendor token.",
5781
5784
  providerAvailable: "Available",
5782
5785
  providerUnavailable: "Unavailable",
5783
5786
  providerConfigUnknown: "Configuration is checked on demand",
5784
5787
  configurationNamespace: "Settings namespace",
5785
- mcpNotice: "Connect the matching official MCP server in DSH. Autopilot stores only its binding name and never asks for the vendor token.",
5786
5788
  testConnection: "Test connection",
5787
5789
  testReady: "Connection ready",
5788
5790
  testFailed: "Connection test failed",
@@ -5928,17 +5930,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5928
5930
  removeWorktree: "移除工作树",
5929
5931
  settingsIntro: "选择已安装的工单绑定和运维限制。提供方凭据仍由 DSH MCP 连接管理。",
5930
5932
  providerSection: "提供方与项目",
5933
+ codeHostProviderSection: "代码托管提供方",
5931
5934
  policySection: "计划与容量",
5932
5935
  budgetSection: "预算",
5933
5936
  provider: "工单提供方",
5934
5937
  codeHostProviderReference: "代码托管提供方引用",
5938
+ codeHostConfigureHint: "请在上方填写代码托管提供方引用(例如 “github”)以完成绑定。",
5935
5939
  allowWorkflowChanges: "允许提供方拥有的工作流文件更改",
5936
- providerSettingsOwnership: "项目、绑定、仓库和映射值保留在各提供方注册的 DSH 设置命名空间中。请打开 DSH 设置进行编辑。",
5940
+ providerSettingsOwnership: "项目、绑定、仓库、映射值以及官方 MCP 服务器连接均保留在 DSH 设置中,而非此处。Autopilot 只保存要使用的 MCP 服务器名称,绝不会索取提供方令牌。",
5937
5941
  providerAvailable: "可用",
5938
5942
  providerUnavailable: "不可用",
5939
5943
  providerConfigUnknown: "按需检查配置",
5940
5944
  configurationNamespace: "设置命名空间",
5941
- mcpNotice: "请在 DSH 中连接相应的官方 MCP 服务器。Autopilot 只保存绑定名称,绝不会索取提供方令牌。",
5942
5945
  testConnection: "测试连接",
5943
5946
  testReady: "连接可用",
5944
5947
  testFailed: "连接测试失败",
@@ -6014,40 +6017,40 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6014
6017
  document.head.appendChild(element);
6015
6018
  }
6016
6019
  var operations_module_css_default = {
6020
+ "activeTab": "Fc_jqa_activeTab",
6021
+ "longText": "Fc_jqa_longText",
6022
+ "summary": "Fc_jqa_summary",
6017
6023
  "checkbox": "Fc_jqa_checkbox",
6018
- "worktreeList": "Fc_jqa_worktreeList",
6019
- "header": "Fc_jqa_header",
6020
- "toolbar": "Fc_jqa_toolbar",
6024
+ "numeric": "Fc_jqa_numeric",
6025
+ "split": "Fc_jqa_split",
6021
6026
  "listRegion": "Fc_jqa_listRegion",
6022
- "table": "Fc_jqa_table",
6023
- "resultCount": "Fc_jqa_resultCount",
6024
6027
  "empty": "Fc_jqa_empty",
6025
- "resource": "Fc_jqa_resource",
6026
- "split": "Fc_jqa_split",
6027
- "runLink": "Fc_jqa_runLink",
6028
- "summary": "Fc_jqa_summary",
6029
- "content": "Fc_jqa_content",
6030
- "error": "Fc_jqa_error",
6031
- "attention": "Fc_jqa_attention",
6032
- "reason": "Fc_jqa_reason",
6033
6028
  "command": "Fc_jqa_command",
6034
- "stateLabel": "Fc_jqa_stateLabel",
6029
+ "resultCount": "Fc_jqa_resultCount",
6035
6030
  "headerActions": "Fc_jqa_headerActions",
6031
+ "detailActions": "Fc_jqa_detailActions",
6032
+ "success": "Fc_jqa_success",
6033
+ "error": "Fc_jqa_error",
6034
+ "resource": "Fc_jqa_resource",
6035
+ "timeline": "Fc_jqa_timeline",
6036
6036
  "detail": "Fc_jqa_detail",
6037
- "runsOnly": "Fc_jqa_runsOnly",
6037
+ "worktreeList": "Fc_jqa_worktreeList",
6038
6038
  "detailHeader": "Fc_jqa_detailHeader",
6039
- "tableScroll": "Fc_jqa_tableScroll",
6039
+ "header": "Fc_jqa_header",
6040
+ "runsOnly": "Fc_jqa_runsOnly",
6040
6041
  "page": "Fc_jqa_page",
6041
- "activeTab": "Fc_jqa_activeTab",
6042
- "numeric": "Fc_jqa_numeric",
6043
- "timeline": "Fc_jqa_timeline",
6044
- "blocker": "Fc_jqa_blocker",
6042
+ "stateLabel": "Fc_jqa_stateLabel",
6043
+ "reason": "Fc_jqa_reason",
6044
+ "tableScroll": "Fc_jqa_tableScroll",
6045
6045
  "tabs": "Fc_jqa_tabs",
6046
- "longText": "Fc_jqa_longText",
6047
- "success": "Fc_jqa_success",
6048
- "notice": "Fc_jqa_notice",
6049
6046
  "connectionNotice": "Fc_jqa_connectionNotice",
6050
- "detailActions": "Fc_jqa_detailActions"
6047
+ "blocker": "Fc_jqa_blocker",
6048
+ "attention": "Fc_jqa_attention",
6049
+ "toolbar": "Fc_jqa_toolbar",
6050
+ "content": "Fc_jqa_content",
6051
+ "notice": "Fc_jqa_notice",
6052
+ "table": "Fc_jqa_table",
6053
+ "runLink": "Fc_jqa_runLink"
6051
6054
  };
6052
6055
  //#endregion
6053
6056
  //#region src/client/OperationsAtoms.tsx
@@ -6763,20 +6766,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6763
6766
  document.head.appendChild(element);
6764
6767
  }
6765
6768
  var settings_module_css_default = {
6766
- "fullWidth": "Rycwsq_fullWidth",
6767
- "notificationList": "Rycwsq_notificationList",
6768
- "notice": "Rycwsq_notice",
6769
- "checkboxLabel": "Rycwsq_checkboxLabel",
6769
+ "notificationRow": "Rycwsq_notificationRow",
6770
6770
  "eventChoices": "Rycwsq_eventChoices",
6771
- "success": "Rycwsq_success",
6772
- "providerCard": "Rycwsq_providerCard",
6771
+ "error": "Rycwsq_error",
6772
+ "notice": "Rycwsq_notice",
6773
6773
  "settingsFooter": "Rycwsq_settingsFooter",
6774
+ "credentialActions": "Rycwsq_credentialActions",
6775
+ "providerCard": "Rycwsq_providerCard",
6774
6776
  "gap": "Rycwsq_gap",
6777
+ "fullWidth": "Rycwsq_fullWidth",
6778
+ "settings": "Rycwsq_settings",
6779
+ "checkboxLabel": "Rycwsq_checkboxLabel",
6780
+ "success": "Rycwsq_success",
6775
6781
  "credential": "Rycwsq_credential",
6776
- "error": "Rycwsq_error",
6777
- "credentialActions": "Rycwsq_credentialActions",
6778
- "notificationRow": "Rycwsq_notificationRow",
6779
- "settings": "Rycwsq_settings"
6782
+ "notificationList": "Rycwsq_notificationList"
6780
6783
  };
6781
6784
  //#endregion
6782
6785
  //#region src/client/SettingsCapabilitySections.tsx
@@ -7066,11 +7069,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7066
7069
  }
7067
7070
  //#endregion
7068
7071
  //#region src/client/SettingsProviderSection.tsx
7069
- function ProviderConnectionSection({ providers, selectedProvider, codeHostProvider, allowWorkflowChanges, credentials, onSelectProvider, onSelectCodeHostProvider, onAllowWorkflowChanges, onOpenSettings, onTestProvider, onSetCredential, onUnsetCredential, t }) {
7072
+ function ProviderConnectionSection({ providers, selectedProvider, codeHostProviders, codeHostProvider, allowWorkflowChanges, credentials, onSelectProvider, onSelectCodeHostProvider, onAllowWorkflowChanges, onOpenSettings, onTestProvider, onSetCredential, onUnsetCredential, t }) {
7070
7073
  const [tests, setTests] = (0, react.useState)({});
7071
7074
  const testRequests = (0, react.useRef)(/* @__PURE__ */ new Map());
7072
7075
  const codeHostProviderInputId = (0, react.useId)();
7073
7076
  const activeProvider = providers.find((provider) => provider.id === selectedProvider);
7077
+ const activeCodeHostProvider = codeHostProviders.find((provider) => provider.id === codeHostProvider);
7074
7078
  (0, react.useEffect)(() => () => {
7075
7079
  for (const request of testRequests.current.values()) request.abort();
7076
7080
  testRequests.current.clear();
@@ -7105,7 +7109,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7105
7109
  if (testRequests.current.get(provider.id) === request) testRequests.current.delete(provider.id);
7106
7110
  }
7107
7111
  };
7108
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", { children: [
7112
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", { children: [
7109
7113
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("providerSection") }),
7110
7114
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("provider"), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
7111
7115
  value: selectedProvider,
@@ -7118,14 +7122,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7118
7122
  children: selectedProvider
7119
7123
  })]
7120
7124
  })] }),
7121
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
7122
- htmlFor: codeHostProviderInputId,
7123
- children: [t("codeHostProviderReference"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Input, {
7124
- id: codeHostProviderInputId,
7125
- value: codeHostProvider,
7126
- onChange: (event) => onSelectCodeHostProvider(event.currentTarget.value)
7127
- })]
7128
- }),
7129
7125
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
7130
7126
  className: `${settings_module_css_default.checkboxLabel} ${settings_module_css_default.fullWidth}`,
7131
7127
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
@@ -7147,10 +7143,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7147
7143
  className: `${settings_module_css_default.notice} ${settings_module_css_default.fullWidth}`,
7148
7144
  children: t("providerSettingsOwnership")
7149
7145
  }),
7150
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
7151
- className: settings_module_css_default.notice,
7152
- children: t("mcpNotice")
7153
- }),
7154
7146
  activeProvider === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
7155
7147
  className: `${settings_module_css_default.gap} ${settings_module_css_default.fullWidth}`,
7156
7148
  children: t("configureHint")
@@ -7163,9 +7155,36 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7163
7155
  onUnsetCredential,
7164
7156
  t
7165
7157
  })
7166
- ] });
7158
+ ] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", { children: [
7159
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: t("codeHostProviderSection") }),
7160
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
7161
+ htmlFor: codeHostProviderInputId,
7162
+ className: settings_module_css_default.fullWidth,
7163
+ children: [t("codeHostProviderReference"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Input, {
7164
+ id: codeHostProviderInputId,
7165
+ value: codeHostProvider,
7166
+ onChange: (event) => onSelectCodeHostProvider(event.currentTarget.value)
7167
+ })]
7168
+ }),
7169
+ codeHostProvider === "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
7170
+ className: `${settings_module_css_default.gap} ${settings_module_css_default.fullWidth}`,
7171
+ children: t("codeHostConfigureHint")
7172
+ }) : activeCodeHostProvider === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
7173
+ className: `${settings_module_css_default.gap} ${settings_module_css_default.fullWidth}`,
7174
+ children: t("configureHint")
7175
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderCard, {
7176
+ provider: activeCodeHostProvider,
7177
+ test: void 0,
7178
+ canTest: false,
7179
+ credentials,
7180
+ onTest: () => Promise.resolve(),
7181
+ onSetCredential,
7182
+ onUnsetCredential,
7183
+ t
7184
+ })
7185
+ ] })] });
7167
7186
  }
7168
- function ProviderCard({ provider, test, credentials, onTest, onSetCredential, onUnsetCredential, t }) {
7187
+ function ProviderCard({ provider, test, canTest = true, credentials, onTest, onSetCredential, onUnsetCredential, t }) {
7169
7188
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
7170
7189
  className: `${settings_module_css_default.providerCard} ${settings_module_css_default.fullWidth}`,
7171
7190
  children: [
@@ -7195,13 +7214,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7195
7214
  t
7196
7215
  }, credential.ref))
7197
7216
  ] }),
7198
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7217
+ canTest ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7199
7218
  size: "sm",
7200
7219
  variant: "outline",
7201
7220
  disabled: provider.availability !== "available" || test === "testing",
7202
7221
  onClick: () => void onTest(),
7203
7222
  children: t("testConnection")
7204
- }),
7223
+ }) : null,
7205
7224
  test === void 0 || test === "testing" ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
7206
7225
  role: "status",
7207
7226
  className: test.status === "ready" ? settings_module_css_default.success : settings_module_css_default.error,
@@ -7426,6 +7445,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7426
7445
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProviderConnectionSection, {
7427
7446
  providers: host?.providers ?? [],
7428
7447
  selectedProvider: draft.trackerProvider,
7448
+ codeHostProviders: host?.codeHostProviders ?? [],
7429
7449
  codeHostProvider: draft.codeHostProvider,
7430
7450
  allowWorkflowChanges: draft.allowWorkflowChanges,
7431
7451
  credentials,