@canhta/dsh-autopilot 0.1.0-alpha.2 → 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: "连接测试失败",
@@ -6003,9 +6006,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6003
6006
  configureHint: "请先在此设置页面选择已安装的提供方,再启用调度器。"
6004
6007
  };
6005
6008
  //#endregion
6006
- //#region \0dsh-autopilot-css:C:\Users\Admin\Projects\Indie\dsh-autopilot\src\client\operations.module.css.mjs
6007
- const css$1 = ".gXqZ8G_page{box-sizing:border-box;min-width:0;height:100%;color:var(--dsw-alias-label-primary,#202124);background:var(--dsw-alias-bg-layer-1,#fff);padding:20px 24px;font-size:14px;overflow:auto}.gXqZ8G_header,.gXqZ8G_headerActions,.gXqZ8G_toolbar,.gXqZ8G_detailHeader,.gXqZ8G_detailActions{align-items:center;gap:8px;display:flex}.gXqZ8G_header{justify-content:space-between;gap:24px;margin-bottom:14px}.gXqZ8G_header h1{margin:0;font-size:20px;line-height:1.3}.gXqZ8G_header p,.gXqZ8G_summary>p{color:var(--dsw-alias-label-secondary,#5f6368);margin:4px 0 0}.gXqZ8G_headerActions{flex-wrap:wrap;justify-content:flex-end}.gXqZ8G_connectionNotice,.gXqZ8G_attention,.gXqZ8G_command,.gXqZ8G_notice,.gXqZ8G_blocker{border:1px solid var(--dsw-alias-border-l3,#d9dce1);border-radius:8px;margin:8px 0;padding:10px 12px}.gXqZ8G_attention,.gXqZ8G_blocker{border-color:var(--dsw-alias-state-warn-primary,#a15c00);color:var(--dsw-alias-state-warn-label,#713f00)}.gXqZ8G_connectionNotice,.gXqZ8G_command,.gXqZ8G_notice{background:var(--dsw-alias-bg-layer-2,#f7f8fa)}.gXqZ8G_tabs{border-bottom:1px solid var(--dsw-alias-border-l3,#d9dce1);gap:4px;margin-top:16px;display:flex;overflow-x:auto}.gXqZ8G_tabs button{appearance:none;color:var(--dsw-alias-label-secondary,#5f6368);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:10px 12px}.gXqZ8G_tabs button:hover{background:var(--dsw-alias-interactive-bg-hover,#f1f3f4)}.gXqZ8G_tabs button:focus-visible,.gXqZ8G_runLink:focus-visible{outline:2px solid var(--dsw-alias-brand-primary,#315efb);outline-offset:2px}.gXqZ8G_tabs .gXqZ8G_activeTab{border-bottom-color:var(--dsw-alias-brand-primary,#315efb);color:var(--dsw-alias-label-primary,#202124)}.gXqZ8G_content{min-width:0;padding-top:16px}.gXqZ8G_runsOnly,.gXqZ8G_split{min-width:0}.gXqZ8G_split{grid-template-columns:minmax(480px,1fr) minmax(380px,460px);gap:16px;display:grid}.gXqZ8G_listRegion{min-width:0}.gXqZ8G_toolbar{flex-wrap:wrap;margin-bottom:12px}.gXqZ8G_toolbar select{border:1px solid var(--dsw-alias-border-l4,#c7cbd1);min-height:34px;color:inherit;background:var(--dsw-alias-bg-layer-1,#fff);border-radius:8px;padding:0 10px}.gXqZ8G_checkbox{align-items:center;gap:6px;display:inline-flex}.gXqZ8G_resultCount{color:var(--dsw-alias-label-tertiary,#767b83);font-variant-numeric:tabular-nums;margin-left:auto}.gXqZ8G_tableScroll{max-width:100%;overflow-x:auto}.gXqZ8G_table{border-collapse:collapse;table-layout:fixed;width:100%}.gXqZ8G_table th{color:var(--dsw-alias-label-tertiary,#767b83);text-align:left;padding:8px 10px;font-size:12px;font-weight:600}.gXqZ8G_table th:first-child{width:30%}.gXqZ8G_table th:nth-child(2){width:25%}.gXqZ8G_table td{border-top:1px solid var(--dsw-alias-border-l3,#e2e4e8);vertical-align:middle;height:48px;padding:8px 10px}.gXqZ8G_table tr[data-selected=true]{background:var(--dsw-alias-interactive-bg-active,#edf2ff)}.gXqZ8G_runLink{width:100%;min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;display:grid}.gXqZ8G_runLink span,.gXqZ8G_stateLabel>span,.gXqZ8G_worktreeList code{color:var(--dsw-alias-label-secondary,#5f6368);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.gXqZ8G_stateLabel{justify-items:start;gap:3px;display:grid}.gXqZ8G_numeric{text-align:right;font-variant-numeric:tabular-nums}.gXqZ8G_detail{border-left:1px solid var(--dsw-alias-border-l3,#d9dce1);min-width:0;padding-left:16px}.gXqZ8G_detailHeader{justify-content:space-between;align-items:flex-start;margin-top:12px}.gXqZ8G_detailHeader h2,.gXqZ8G_summary h2,.gXqZ8G_empty h2{margin:0;font-size:17px}.gXqZ8G_detailHeader p,.gXqZ8G_reason{margin:4px 0 10px}.gXqZ8G_detail details{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);padding:12px 0}.gXqZ8G_detail summary{cursor:pointer;font-weight:600}.gXqZ8G_longText{white-space:pre-wrap;overflow-wrap:anywhere}.gXqZ8G_timeline{gap:10px;padding-left:20px;display:grid}.gXqZ8G_timeline li{gap:2px;display:grid}.gXqZ8G_timeline time,.gXqZ8G_timeline span{color:var(--dsw-alias-label-tertiary,#767b83);font-size:12px}.gXqZ8G_resource{grid-template-columns:100px minmax(0,1fr);gap:8px;margin-top:8px;display:grid}.gXqZ8G_resource code,.gXqZ8G_resource span{overflow-wrap:anywhere}.gXqZ8G_summary,.gXqZ8G_empty{max-width:820px;padding:16px 0}.gXqZ8G_summary dl{gap:0;margin:16px 0;display:grid}.gXqZ8G_summary dl>div{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);grid-template-columns:minmax(160px,1fr) minmax(180px,2fr);gap:12px;padding:10px 0;display:grid}.gXqZ8G_summary dt{color:var(--dsw-alias-label-secondary,#5f6368)}.gXqZ8G_summary dd{margin:0}.gXqZ8G_empty{text-align:center;color:var(--dsw-alias-label-secondary,#5f6368)}.gXqZ8G_worktreeList{gap:0;padding:0;list-style:none;display:grid}.gXqZ8G_worktreeList li{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);justify-content:space-between;gap:16px;padding:12px 0;display:flex}.gXqZ8G_worktreeList li>div{min-width:0;display:grid}.gXqZ8G_success{color:var(--dsw-alias-state-success-primary,#0a7a45)}.gXqZ8G_error{color:var(--dsw-alias-state-error-primary,#c62828)}@media (width<=1000px){.gXqZ8G_split{grid-template-columns:1fr}.gXqZ8G_detail{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);border-left:0;padding-top:16px;padding-left:0}}@media (width<=640px){.gXqZ8G_page{padding:16px 12px}.gXqZ8G_header{flex-direction:column;align-items:flex-start}.gXqZ8G_headerActions{justify-content:flex-start}.gXqZ8G_table th:nth-child(n+3),.gXqZ8G_table td:nth-child(n+3){display:none}.gXqZ8G_table th:first-child{width:52%}.gXqZ8G_table th:nth-child(2){width:48%}.gXqZ8G_toolbar>span:first-child{width:100%}.gXqZ8G_resultCount{margin-left:0}}@media (prefers-reduced-motion:reduce){.gXqZ8G_page *{scroll-behavior:auto;transition:none}}";
6008
- const tagId$1 = "@canhta/dsh-autopilot/C:\\Users\\Admin\\Projects\\Indie\\dsh-autopilot\\src\\client\\operations.module.css";
6009
+ //#region \0dsh-autopilot-css:/home/runner/work/dsh-autopilot/dsh-autopilot/src/client/operations.module.css.mjs
6010
+ const css$1 = ".Fc_jqa_page{box-sizing:border-box;min-width:0;height:100%;color:var(--dsw-alias-label-primary,#202124);background:var(--dsw-alias-bg-layer-1,#fff);padding:20px 24px;font-size:14px;overflow:auto}.Fc_jqa_header,.Fc_jqa_headerActions,.Fc_jqa_toolbar,.Fc_jqa_detailHeader,.Fc_jqa_detailActions{align-items:center;gap:8px;display:flex}.Fc_jqa_header{justify-content:space-between;gap:24px;margin-bottom:14px}.Fc_jqa_header h1{margin:0;font-size:20px;line-height:1.3}.Fc_jqa_header p,.Fc_jqa_summary>p{color:var(--dsw-alias-label-secondary,#5f6368);margin:4px 0 0}.Fc_jqa_headerActions{flex-wrap:wrap;justify-content:flex-end}.Fc_jqa_connectionNotice,.Fc_jqa_attention,.Fc_jqa_command,.Fc_jqa_notice,.Fc_jqa_blocker{border:1px solid var(--dsw-alias-border-l3,#d9dce1);border-radius:8px;margin:8px 0;padding:10px 12px}.Fc_jqa_attention,.Fc_jqa_blocker{border-color:var(--dsw-alias-state-warn-primary,#a15c00);color:var(--dsw-alias-state-warn-label,#713f00)}.Fc_jqa_connectionNotice,.Fc_jqa_command,.Fc_jqa_notice{background:var(--dsw-alias-bg-layer-2,#f7f8fa)}.Fc_jqa_tabs{border-bottom:1px solid var(--dsw-alias-border-l3,#d9dce1);gap:4px;margin-top:16px;display:flex;overflow-x:auto}.Fc_jqa_tabs button{appearance:none;color:var(--dsw-alias-label-secondary,#5f6368);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:10px 12px}.Fc_jqa_tabs button:hover{background:var(--dsw-alias-interactive-bg-hover,#f1f3f4)}.Fc_jqa_tabs button:focus-visible,.Fc_jqa_runLink:focus-visible{outline:2px solid var(--dsw-alias-brand-primary,#315efb);outline-offset:2px}.Fc_jqa_tabs .Fc_jqa_activeTab{border-bottom-color:var(--dsw-alias-brand-primary,#315efb);color:var(--dsw-alias-label-primary,#202124)}.Fc_jqa_content{min-width:0;padding-top:16px}.Fc_jqa_runsOnly,.Fc_jqa_split{min-width:0}.Fc_jqa_split{grid-template-columns:minmax(480px,1fr) minmax(380px,460px);gap:16px;display:grid}.Fc_jqa_listRegion{min-width:0}.Fc_jqa_toolbar{flex-wrap:wrap;margin-bottom:12px}.Fc_jqa_toolbar select{border:1px solid var(--dsw-alias-border-l4,#c7cbd1);min-height:34px;color:inherit;background:var(--dsw-alias-bg-layer-1,#fff);border-radius:8px;padding:0 10px}.Fc_jqa_checkbox{align-items:center;gap:6px;display:inline-flex}.Fc_jqa_resultCount{color:var(--dsw-alias-label-tertiary,#767b83);font-variant-numeric:tabular-nums;margin-left:auto}.Fc_jqa_tableScroll{max-width:100%;overflow-x:auto}.Fc_jqa_table{border-collapse:collapse;table-layout:fixed;width:100%}.Fc_jqa_table th{color:var(--dsw-alias-label-tertiary,#767b83);text-align:left;padding:8px 10px;font-size:12px;font-weight:600}.Fc_jqa_table th:first-child{width:30%}.Fc_jqa_table th:nth-child(2){width:25%}.Fc_jqa_table td{border-top:1px solid var(--dsw-alias-border-l3,#e2e4e8);vertical-align:middle;height:48px;padding:8px 10px}.Fc_jqa_table tr[data-selected=true]{background:var(--dsw-alias-interactive-bg-active,#edf2ff)}.Fc_jqa_runLink{width:100%;min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0;display:grid}.Fc_jqa_runLink span,.Fc_jqa_stateLabel>span,.Fc_jqa_worktreeList code{color:var(--dsw-alias-label-secondary,#5f6368);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.Fc_jqa_stateLabel{justify-items:start;gap:3px;display:grid}.Fc_jqa_numeric{text-align:right;font-variant-numeric:tabular-nums}.Fc_jqa_detail{border-left:1px solid var(--dsw-alias-border-l3,#d9dce1);min-width:0;padding-left:16px}.Fc_jqa_detailHeader{justify-content:space-between;align-items:flex-start;margin-top:12px}.Fc_jqa_detailHeader h2,.Fc_jqa_summary h2,.Fc_jqa_empty h2{margin:0;font-size:17px}.Fc_jqa_detailHeader p,.Fc_jqa_reason{margin:4px 0 10px}.Fc_jqa_detail details{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);padding:12px 0}.Fc_jqa_detail summary{cursor:pointer;font-weight:600}.Fc_jqa_longText{white-space:pre-wrap;overflow-wrap:anywhere}.Fc_jqa_timeline{gap:10px;padding-left:20px;display:grid}.Fc_jqa_timeline li{gap:2px;display:grid}.Fc_jqa_timeline time,.Fc_jqa_timeline span{color:var(--dsw-alias-label-tertiary,#767b83);font-size:12px}.Fc_jqa_resource{grid-template-columns:100px minmax(0,1fr);gap:8px;margin-top:8px;display:grid}.Fc_jqa_resource code,.Fc_jqa_resource span{overflow-wrap:anywhere}.Fc_jqa_summary,.Fc_jqa_empty{max-width:820px;padding:16px 0}.Fc_jqa_summary dl{gap:0;margin:16px 0;display:grid}.Fc_jqa_summary dl>div{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);grid-template-columns:minmax(160px,1fr) minmax(180px,2fr);gap:12px;padding:10px 0;display:grid}.Fc_jqa_summary dt{color:var(--dsw-alias-label-secondary,#5f6368)}.Fc_jqa_summary dd{margin:0}.Fc_jqa_empty{text-align:center;color:var(--dsw-alias-label-secondary,#5f6368)}.Fc_jqa_worktreeList{gap:0;padding:0;list-style:none;display:grid}.Fc_jqa_worktreeList li{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);justify-content:space-between;gap:16px;padding:12px 0;display:flex}.Fc_jqa_worktreeList li>div{min-width:0;display:grid}.Fc_jqa_success{color:var(--dsw-alias-state-success-primary,#0a7a45)}.Fc_jqa_error{color:var(--dsw-alias-state-error-primary,#c62828)}@media (width<=1000px){.Fc_jqa_split{grid-template-columns:1fr}.Fc_jqa_detail{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);border-left:0;padding-top:16px;padding-left:0}}@media (width<=640px){.Fc_jqa_page{padding:16px 12px}.Fc_jqa_header{flex-direction:column;align-items:flex-start}.Fc_jqa_headerActions{justify-content:flex-start}.Fc_jqa_table th:nth-child(n+3),.Fc_jqa_table td:nth-child(n+3){display:none}.Fc_jqa_table th:first-child{width:52%}.Fc_jqa_table th:nth-child(2){width:48%}.Fc_jqa_toolbar>span:first-child{width:100%}.Fc_jqa_resultCount{margin-left:0}}@media (prefers-reduced-motion:reduce){.Fc_jqa_page *{scroll-behavior:auto;transition:none}}";
6011
+ const tagId$1 = "@canhta/dsh-autopilot/operations.module.css";
6009
6012
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
6010
6013
  const element = document.createElement("style");
6011
6014
  element.dataset.plugin = "@canhta/dsh-autopilot";
@@ -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 = {
6017
- "attention": "gXqZ8G_attention",
6018
- "resultCount": "gXqZ8G_resultCount",
6019
- "error": "gXqZ8G_error",
6020
- "tableScroll": "gXqZ8G_tableScroll",
6021
- "table": "gXqZ8G_table",
6022
- "detailActions": "gXqZ8G_detailActions",
6023
- "blocker": "gXqZ8G_blocker",
6024
- "detailHeader": "gXqZ8G_detailHeader",
6025
- "activeTab": "gXqZ8G_activeTab",
6026
- "checkbox": "gXqZ8G_checkbox",
6027
- "reason": "gXqZ8G_reason",
6028
- "toolbar": "gXqZ8G_toolbar",
6029
- "listRegion": "gXqZ8G_listRegion",
6030
- "longText": "gXqZ8G_longText",
6031
- "split": "gXqZ8G_split",
6032
- "command": "gXqZ8G_command",
6033
- "detail": "gXqZ8G_detail",
6034
- "runsOnly": "gXqZ8G_runsOnly",
6035
- "tabs": "gXqZ8G_tabs",
6036
- "connectionNotice": "gXqZ8G_connectionNotice",
6037
- "content": "gXqZ8G_content",
6038
- "empty": "gXqZ8G_empty",
6039
- "resource": "gXqZ8G_resource",
6040
- "page": "gXqZ8G_page",
6041
- "header": "gXqZ8G_header",
6042
- "worktreeList": "gXqZ8G_worktreeList",
6043
- "numeric": "gXqZ8G_numeric",
6044
- "timeline": "gXqZ8G_timeline",
6045
- "runLink": "gXqZ8G_runLink",
6046
- "summary": "gXqZ8G_summary",
6047
- "notice": "gXqZ8G_notice",
6048
- "success": "gXqZ8G_success",
6049
- "stateLabel": "gXqZ8G_stateLabel",
6050
- "headerActions": "gXqZ8G_headerActions"
6020
+ "activeTab": "Fc_jqa_activeTab",
6021
+ "longText": "Fc_jqa_longText",
6022
+ "summary": "Fc_jqa_summary",
6023
+ "checkbox": "Fc_jqa_checkbox",
6024
+ "numeric": "Fc_jqa_numeric",
6025
+ "split": "Fc_jqa_split",
6026
+ "listRegion": "Fc_jqa_listRegion",
6027
+ "empty": "Fc_jqa_empty",
6028
+ "command": "Fc_jqa_command",
6029
+ "resultCount": "Fc_jqa_resultCount",
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
+ "detail": "Fc_jqa_detail",
6037
+ "worktreeList": "Fc_jqa_worktreeList",
6038
+ "detailHeader": "Fc_jqa_detailHeader",
6039
+ "header": "Fc_jqa_header",
6040
+ "runsOnly": "Fc_jqa_runsOnly",
6041
+ "page": "Fc_jqa_page",
6042
+ "stateLabel": "Fc_jqa_stateLabel",
6043
+ "reason": "Fc_jqa_reason",
6044
+ "tableScroll": "Fc_jqa_tableScroll",
6045
+ "tabs": "Fc_jqa_tabs",
6046
+ "connectionNotice": "Fc_jqa_connectionNotice",
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
@@ -6752,9 +6755,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6752
6755
  return state.command?.status === "pending" || state.command?.status === "accepted" || state.command?.status === "in-progress";
6753
6756
  }
6754
6757
  //#endregion
6755
- //#region \0dsh-autopilot-css:C:\Users\Admin\Projects\Indie\dsh-autopilot\src\client\settings.module.css.mjs
6756
- const css = ".rCFH-q_settings{max-width:920px;color:var(--dsw-alias-label-primary,#202124);padding:0 8px 24px;font-size:14px}.rCFH-q_settings h2{margin:0;font-size:20px;line-height:1.3}.rCFH-q_settings>p,.rCFH-q_providerCard p,.rCFH-q_gap{color:var(--dsw-alias-label-secondary,#5f6368)}.rCFH-q_settings fieldset{border:1px solid var(--dsw-alias-border-l3,#d9dce1);border-radius:10px;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:20px 0;padding:16px;display:grid}.rCFH-q_settings legend{padding:0 6px;font-weight:600}.rCFH-q_settings label{gap:6px;display:grid}.rCFH-q_settings select{border:1px solid var(--dsw-alias-border-l4,#c7cbd1);color:inherit;background:var(--dsw-alias-bg-layer-1,#fff);border-radius:8px;padding:0 10px}.rCFH-q_settings label>select,.rCFH-q_settings input{width:100%;min-height:34px}.rCFH-q_notice,.rCFH-q_fullWidth{grid-column:1/-1}.rCFH-q_notice,.rCFH-q_gap{border:1px solid var(--dsw-alias-border-l3,#d9dce1);background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;margin:8px 0;padding:10px 12px}.rCFH-q_gap{border-color:var(--dsw-alias-state-warn-primary,#a15c00)}.rCFH-q_providerCard{border:1px solid var(--dsw-alias-border-l3,#d9dce1);background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;padding:12px}.rCFH-q_providerCard>div:first-child,.rCFH-q_settingsFooter,.rCFH-q_credentialActions{align-items:center;gap:8px;display:flex}.rCFH-q_providerCard h3{margin:0 auto 0 0;font-size:15px}.rCFH-q_providerCard dl{gap:3px;margin:12px 0;display:grid}.rCFH-q_providerCard dt{color:var(--dsw-alias-label-secondary,#5f6368)}.rCFH-q_providerCard dd{overflow-wrap:anywhere;margin:0 0 6px}.rCFH-q_credential{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);gap:8px;padding-top:12px;display:grid}.rCFH-q_settings .rCFH-q_checkboxLabel{flex-direction:row;align-items:center;gap:8px;display:flex}.rCFH-q_checkboxLabel input[type=checkbox]{width:auto;min-height:auto;margin:0}.rCFH-q_notificationList{gap:12px;display:grid}.rCFH-q_notificationRow{border:1px solid var(--dsw-alias-border-l3,#d9dce1);background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:12px;display:grid}.rCFH-q_settings .rCFH-q_eventChoices{border:0;flex-wrap:wrap;grid-column:1/-1;gap:8px 16px;margin:0;padding:0;display:flex}.rCFH-q_eventChoices legend{width:100%;padding:0;font-weight:400}.rCFH-q_settingsFooter{flex-wrap:wrap}.rCFH-q_success{color:var(--dsw-alias-state-success-primary,#0a7a45)}.rCFH-q_error{color:var(--dsw-alias-state-error-primary,#c62828)}@media (width<=640px){.rCFH-q_settings fieldset{grid-template-columns:1fr}.rCFH-q_notice,.rCFH-q_fullWidth{grid-column:auto}.rCFH-q_notificationRow{grid-template-columns:1fr}.rCFH-q_eventChoices{grid-column:auto}}@media (prefers-reduced-motion:reduce){.rCFH-q_settings *{scroll-behavior:auto;transition:none}}";
6757
- const tagId = "@canhta/dsh-autopilot/C:\\Users\\Admin\\Projects\\Indie\\dsh-autopilot\\src\\client\\settings.module.css";
6758
+ //#region \0dsh-autopilot-css:/home/runner/work/dsh-autopilot/dsh-autopilot/src/client/settings.module.css.mjs
6759
+ const css = ".Rycwsq_settings{max-width:920px;color:var(--dsw-alias-label-primary,#202124);padding:0 8px 24px;font-size:14px}.Rycwsq_settings h2{margin:0;font-size:20px;line-height:1.3}.Rycwsq_settings>p,.Rycwsq_providerCard p,.Rycwsq_gap{color:var(--dsw-alias-label-secondary,#5f6368)}.Rycwsq_settings fieldset{border:1px solid var(--dsw-alias-border-l3,#d9dce1);border-radius:10px;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:20px 0;padding:16px;display:grid}.Rycwsq_settings legend{padding:0 6px;font-weight:600}.Rycwsq_settings label{gap:6px;display:grid}.Rycwsq_settings select{border:1px solid var(--dsw-alias-border-l4,#c7cbd1);color:inherit;background:var(--dsw-alias-bg-layer-1,#fff);border-radius:8px;padding:0 10px}.Rycwsq_settings label>select,.Rycwsq_settings input{width:100%;min-height:34px}.Rycwsq_notice,.Rycwsq_fullWidth{grid-column:1/-1}.Rycwsq_notice,.Rycwsq_gap{border:1px solid var(--dsw-alias-border-l3,#d9dce1);background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;margin:8px 0;padding:10px 12px}.Rycwsq_gap{border-color:var(--dsw-alias-state-warn-primary,#a15c00)}.Rycwsq_providerCard{border:1px solid var(--dsw-alias-border-l3,#d9dce1);background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;padding:12px}.Rycwsq_providerCard>div:first-child,.Rycwsq_settingsFooter,.Rycwsq_credentialActions{align-items:center;gap:8px;display:flex}.Rycwsq_providerCard h3{margin:0 auto 0 0;font-size:15px}.Rycwsq_providerCard dl{gap:3px;margin:12px 0;display:grid}.Rycwsq_providerCard dt{color:var(--dsw-alias-label-secondary,#5f6368)}.Rycwsq_providerCard dd{overflow-wrap:anywhere;margin:0 0 6px}.Rycwsq_credential{border-top:1px solid var(--dsw-alias-border-l3,#d9dce1);gap:8px;padding-top:12px;display:grid}.Rycwsq_settings .Rycwsq_checkboxLabel{flex-direction:row;align-items:center;gap:8px;display:flex}.Rycwsq_checkboxLabel input[type=checkbox]{width:auto;min-height:auto;margin:0}.Rycwsq_notificationList{gap:12px;display:grid}.Rycwsq_notificationRow{border:1px solid var(--dsw-alias-border-l3,#d9dce1);background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-radius:8px;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:12px;display:grid}.Rycwsq_settings .Rycwsq_eventChoices{border:0;flex-wrap:wrap;grid-column:1/-1;gap:8px 16px;margin:0;padding:0;display:flex}.Rycwsq_eventChoices legend{width:100%;padding:0;font-weight:400}.Rycwsq_settingsFooter{flex-wrap:wrap}.Rycwsq_success{color:var(--dsw-alias-state-success-primary,#0a7a45)}.Rycwsq_error{color:var(--dsw-alias-state-error-primary,#c62828)}@media (width<=640px){.Rycwsq_settings fieldset{grid-template-columns:1fr}.Rycwsq_notice,.Rycwsq_fullWidth{grid-column:auto}.Rycwsq_notificationRow{grid-template-columns:1fr}.Rycwsq_eventChoices{grid-column:auto}}@media (prefers-reduced-motion:reduce){.Rycwsq_settings *{scroll-behavior:auto;transition:none}}";
6760
+ const tagId = "@canhta/dsh-autopilot/settings.module.css";
6758
6761
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
6759
6762
  const element = document.createElement("style");
6760
6763
  element.dataset.plugin = "@canhta/dsh-autopilot";
@@ -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
- "notificationList": "rCFH-q_notificationList",
6767
- "eventChoices": "rCFH-q_eventChoices",
6768
- "settingsFooter": "rCFH-q_settingsFooter",
6769
- "checkboxLabel": "rCFH-q_checkboxLabel",
6770
- "success": "rCFH-q_success",
6771
- "providerCard": "rCFH-q_providerCard",
6772
- "settings": "rCFH-q_settings",
6773
- "notificationRow": "rCFH-q_notificationRow",
6774
- "credentialActions": "rCFH-q_credentialActions",
6775
- "notice": "rCFH-q_notice",
6776
- "error": "rCFH-q_error",
6777
- "gap": "rCFH-q_gap",
6778
- "fullWidth": "rCFH-q_fullWidth",
6779
- "credential": "rCFH-q_credential"
6769
+ "notificationRow": "Rycwsq_notificationRow",
6770
+ "eventChoices": "Rycwsq_eventChoices",
6771
+ "error": "Rycwsq_error",
6772
+ "notice": "Rycwsq_notice",
6773
+ "settingsFooter": "Rycwsq_settingsFooter",
6774
+ "credentialActions": "Rycwsq_credentialActions",
6775
+ "providerCard": "Rycwsq_providerCard",
6776
+ "gap": "Rycwsq_gap",
6777
+ "fullWidth": "Rycwsq_fullWidth",
6778
+ "settings": "Rycwsq_settings",
6779
+ "checkboxLabel": "Rycwsq_checkboxLabel",
6780
+ "success": "Rycwsq_success",
6781
+ "credential": "Rycwsq_credential",
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,