@exagone313/dsh-podman 0.2.0-rc.2

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.
Files changed (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -0
  3. package/README.zh.md +41 -0
  4. package/cordis.patch.yml +17 -0
  5. package/dist/approval-reasons.d.ts +129 -0
  6. package/dist/approval-reasons.js +253 -0
  7. package/dist/approval-reasons.test.d.ts +1 -0
  8. package/dist/approval-reasons.test.js +115 -0
  9. package/dist/approval.d.ts +29 -0
  10. package/dist/approval.js +412 -0
  11. package/dist/approval.test.d.ts +1 -0
  12. package/dist/approval.test.js +462 -0
  13. package/dist/card-route.d.ts +15 -0
  14. package/dist/card-route.js +478 -0
  15. package/dist/card-route.test.d.ts +1 -0
  16. package/dist/card-route.test.js +181 -0
  17. package/dist/card-test-support.d.ts +15 -0
  18. package/dist/card-test-support.js +160 -0
  19. package/dist/client/ContainerCard.d.ts +6 -0
  20. package/dist/client/ContainerCard.js +79 -0
  21. package/dist/client/card-client.d.ts +6 -0
  22. package/dist/client/card-client.js +47 -0
  23. package/dist/client/card-protocol.d.ts +101 -0
  24. package/dist/client/card-protocol.js +10 -0
  25. package/dist/client/container-card-caches.d.ts +10 -0
  26. package/dist/client/container-card-caches.js +31 -0
  27. package/dist/client/container-card-controller.d.ts +107 -0
  28. package/dist/client/container-card-controller.js +207 -0
  29. package/dist/client/container-card-create-modal.d.ts +24 -0
  30. package/dist/client/container-card-create-modal.js +109 -0
  31. package/dist/client/container-card-directory-styles.d.ts +5 -0
  32. package/dist/client/container-card-directory-styles.js +246 -0
  33. package/dist/client/container-card-directory.d.ts +12 -0
  34. package/dist/client/container-card-directory.js +144 -0
  35. package/dist/client/container-card-editors.d.ts +30 -0
  36. package/dist/client/container-card-editors.js +116 -0
  37. package/dist/client/container-card-images.d.ts +37 -0
  38. package/dist/client/container-card-images.js +35 -0
  39. package/dist/client/container-card-paths.d.ts +20 -0
  40. package/dist/client/container-card-paths.js +88 -0
  41. package/dist/client/container-card-row.d.ts +30 -0
  42. package/dist/client/container-card-row.js +54 -0
  43. package/dist/client/container-card-secrets.d.ts +21 -0
  44. package/dist/client/container-card-secrets.js +71 -0
  45. package/dist/client/container-card-shared.d.ts +55 -0
  46. package/dist/client/container-card-shared.js +152 -0
  47. package/dist/client/container-card-styles.d.ts +21 -0
  48. package/dist/client/container-card-styles.js +143 -0
  49. package/dist/client/container-card-volumes.d.ts +12 -0
  50. package/dist/client/container-card-volumes.js +37 -0
  51. package/dist/client/container-card-workspace.d.ts +31 -0
  52. package/dist/client/container-card-workspace.js +24 -0
  53. package/dist/client/directory-picker.d.ts +12 -0
  54. package/dist/client/directory-picker.js +30 -0
  55. package/dist/client/index.d.ts +5 -0
  56. package/dist/client/index.js +4419 -0
  57. package/dist/client/locales.d.ts +9 -0
  58. package/dist/client/locales.js +370 -0
  59. package/dist/client/read-only-approval.d.ts +8 -0
  60. package/dist/client/read-only-approval.js +63 -0
  61. package/dist/client/slot-contract.d.ts +12 -0
  62. package/dist/client/slot-contract.js +4 -0
  63. package/dist/client/terminal-styles.d.ts +5 -0
  64. package/dist/client/terminal-styles.js +31 -0
  65. package/dist/client/tool-views.d.ts +8 -0
  66. package/dist/client/tool-views.js +241 -0
  67. package/dist/containers.test.d.ts +1 -0
  68. package/dist/containers.test.js +443 -0
  69. package/dist/daemons.test.d.ts +1 -0
  70. package/dist/daemons.test.js +153 -0
  71. package/dist/fs-provider.d.ts +23 -0
  72. package/dist/fs-provider.js +184 -0
  73. package/dist/fs-provider.test.d.ts +1 -0
  74. package/dist/fs-provider.test.js +260 -0
  75. package/dist/generated/version.d.ts +2 -0
  76. package/dist/generated/version.js +6 -0
  77. package/dist/grpc/proto/dshctl/v1/control.proto +133 -0
  78. package/dist/grpc/proto/dshguest/v1/guest.proto +79 -0
  79. package/dist/grpc/runtime-client.d.ts +5 -0
  80. package/dist/grpc/runtime-client.js +43 -0
  81. package/dist/guest-rpc.d.ts +62 -0
  82. package/dist/guest-rpc.js +391 -0
  83. package/dist/images.test.d.ts +1 -0
  84. package/dist/images.test.js +79 -0
  85. package/dist/index.d.ts +22 -0
  86. package/dist/index.js +140 -0
  87. package/dist/misc.test.d.ts +1 -0
  88. package/dist/misc.test.js +141 -0
  89. package/dist/mount-enums.d.ts +22 -0
  90. package/dist/mount-enums.js +81 -0
  91. package/dist/mount-input.d.ts +14 -0
  92. package/dist/mount-input.js +64 -0
  93. package/dist/mounts.test.d.ts +1 -0
  94. package/dist/mounts.test.js +408 -0
  95. package/dist/output-reader.d.ts +34 -0
  96. package/dist/output-reader.js +87 -0
  97. package/dist/paths.test.d.ts +1 -0
  98. package/dist/paths.test.js +74 -0
  99. package/dist/preferences.d.ts +6 -0
  100. package/dist/preferences.js +27 -0
  101. package/dist/project-path.d.ts +6 -0
  102. package/dist/project-path.js +73 -0
  103. package/dist/project-path.test.d.ts +1 -0
  104. package/dist/project-path.test.js +52 -0
  105. package/dist/prompts.d.ts +13 -0
  106. package/dist/prompts.js +149 -0
  107. package/dist/public.d.ts +4 -0
  108. package/dist/public.js +63 -0
  109. package/dist/read-only-shell.d.ts +14 -0
  110. package/dist/read-only-shell.js +150 -0
  111. package/dist/read-only-shell.test.d.ts +1 -0
  112. package/dist/read-only-shell.test.js +127 -0
  113. package/dist/secrets.test.d.ts +1 -0
  114. package/dist/secrets.test.js +181 -0
  115. package/dist/settings-commands.test.d.ts +1 -0
  116. package/dist/settings-commands.test.js +549 -0
  117. package/dist/settings-create.test.d.ts +1 -0
  118. package/dist/settings-create.test.js +394 -0
  119. package/dist/settings-mounts.test.d.ts +1 -0
  120. package/dist/settings-mounts.test.js +467 -0
  121. package/dist/settings-paths.test.d.ts +1 -0
  122. package/dist/settings-paths.test.js +65 -0
  123. package/dist/settings-schema.d.ts +14 -0
  124. package/dist/settings-schema.js +14 -0
  125. package/dist/settings-workspaces.test.d.ts +1 -0
  126. package/dist/settings-workspaces.test.js +265 -0
  127. package/dist/spill-store.d.ts +17 -0
  128. package/dist/spill-store.js +54 -0
  129. package/dist/spill-store.test.d.ts +1 -0
  130. package/dist/spill-store.test.js +59 -0
  131. package/dist/subprocess.d.ts +9 -0
  132. package/dist/subprocess.js +369 -0
  133. package/dist/subprocess.test.d.ts +1 -0
  134. package/dist/subprocess.test.js +234 -0
  135. package/dist/test-support.d.ts +328 -0
  136. package/dist/test-support.js +437 -0
  137. package/dist/tool-defs.d.ts +26 -0
  138. package/dist/tool-defs.js +188 -0
  139. package/dist/tool-handlers.d.ts +2 -0
  140. package/dist/tool-handlers.js +546 -0
  141. package/dist/tool-params.d.ts +803 -0
  142. package/dist/tool-params.js +494 -0
  143. package/dist/tool-schemas.d.ts +2 -0
  144. package/dist/tool-schemas.js +5 -0
  145. package/dist/tool-views.d.ts +2 -0
  146. package/dist/tool-views.js +56 -0
  147. package/dist/views.test.d.ts +1 -0
  148. package/dist/views.test.js +23 -0
  149. package/dist/volumes.test.d.ts +1 -0
  150. package/dist/volumes.test.js +40 -0
  151. package/dist/workspace-binding.d.ts +40 -0
  152. package/dist/workspace-binding.js +275 -0
  153. package/dist/workspace-binding.test.d.ts +1 -0
  154. package/dist/workspace-binding.test.js +337 -0
  155. package/docs/architecture.md +173 -0
  156. package/docs/architecture.zh.md +129 -0
  157. package/docs/configuration.md +160 -0
  158. package/docs/configuration.zh.md +147 -0
  159. package/docs/development.md +142 -0
  160. package/docs/development.zh.md +135 -0
  161. package/docs/install-dsh-and-dsh-podman.md +165 -0
  162. package/docs/install-dsh-and-dsh-podman.zh.md +145 -0
  163. package/docs/usage.md +393 -0
  164. package/docs/usage.zh.md +315 -0
  165. package/package.json +119 -0
@@ -0,0 +1,9 @@
1
+ export declare const NS = "podman";
2
+ export type ContainerPluginKey = "cardTitle" | "cardDescription" | "reload" | "reloading" | "notice" | "configTitle" | "defaultImage" | "socketsRoot" | "projectsRoot" | "defaultImageHint" | "save" | "discard" | "workspacesTitle" | "noContainers" | "createContainer" | "containersTitle" | "containerName" | "workspace" | "image" | "status" | "created" | "projects" | "remove" | "removePod" | "confirmRemovePod" | "recreate" | "recreateWithImage" | "imagesTitle" | "imageId" | "baseImage" | "imageTag" | "builtAt" | "packages" | "volumesTitle" | "createVolume" | "removeVolume" | "volumeName" | "secretsTitle" | "createSecret" | "secretName" | "secretCharset" | "selectImage" | "setSecret" | "removeSecret" | "removeImage" | "rebuildImage" | "rebuildAllImages" | "buildImage" | "build" | "buildImageTitle" | "pullImage" | "setDefaultImage" | "setDefaultImageTitle" | "baseImagesTitle" | "customImagesTitle" | "primitive" | "packageManager" | "parent" | "cancel" | "removeTag" | "env" | "secretEnv" | "envTitle" | "envKey" | "envValue" | "addEnv" | "removeEnv" | "secretLength" | "containerSecretsTitle" | "attachSecret" | "secretEnvName" | "detachSecret" | "none" | "unavailable" | "busy" | "confirmTitle" | "confirm" | "confirmRemoveContainer" | "confirmRecreate" | "confirmRemoveImage" | "confirmRebuildImage" | "confirmRebuildAllImages" | "confirmRemoveVolume" | "confirmSetSecret" | "confirmRemoveSecret" | "confirmDetachSecret" | "mountsTitle" | "addMount" | "mountKind" | "mountProject" | "mountProjectPath" | "browse" | "browseTitle" | "browseSelect" | "browseLoading" | "browseError" | "browseUnavailable" | "browseHidden" | "browseTruncated" | "browseOutsideRoot" | "mountDestination" | "pathsTitle" | "noPaths" | "editPaths" | "addPath" | "add" | "moveUp" | "moveDown" | "apply" | "dragToReorder" | "remountWaiting" | "remountApprove" | "remountReject" | "mountVolume" | "mountSecret" | "mountMode" | "readOnly" | "readWrite" | "remountReadOnly" | "remountReadWrite" | "confirmRemountReadOnly" | "confirmRemountReadWrite" | "confirmRemoveMount" | "cachesTitle" | "noCaches" | "cacheUsage" | "cacheKeepLatest" | "confirmCacheKeepLatest" | "cacheRemoveAll" | "confirmCacheRemoveAll" | "addContainer" | "invalidContainerName" | "containerNameTaken" | "invalidName" | "invalidImageId" | "terminalSignal" | "terminalExitCode" | "terminalRunning" | "terminalFailed" | "terminalDone" | "terminalNoOutput" | "terminalCollapseAria" | "terminalExpandAria" | "terminalExpandRest" | "toolTitle_container_bash" | "toolTitle_container_exec" | "toolTitle_container_read" | "toolTitle_container_write" | "toolTitle_container_edit" | "toolTitle_container_glob" | "toolTitle_container_grep" | "toolTitle_container_list" | "toolTitle_container_start" | "toolTitle_container_recreate" | "toolTitle_container_remove" | "toolTitle_container_mount_list" | "toolTitle_container_mount_add" | "toolTitle_container_mount_remove" | "toolTitle_container_mount_update" | "toolTitle_container_path_set" | "toolTitle_container_path_add" | "toolTitle_container_path_remove" | "toolTitle_container_secret_add" | "toolTitle_container_secret_remove" | "toolTitle_image_list" | "toolTitle_image_get" | "toolTitle_image_build" | "toolTitle_image_rebuild" | "toolTitle_image_rebuild_all" | "toolTitle_image_remove" | "toolTitle_volume_list" | "toolTitle_volume_create" | "toolTitle_volume_remove" | "toolTitle_secret_list" | "toolTitle_secret_create" | "toolTitle_secret_remove" | "toolTitle_daemon_start" | "toolTitle_daemon_list" | "toolTitle_daemon_logs" | "toolTitle_daemon_restart" | "toolTitle_daemon_stop";
3
+ export declare const en: Record<ContainerPluginKey, string>;
4
+ export declare const zh: Record<ContainerPluginKey, string>;
5
+ declare module "@deepseek-ai/dsh-client-ui-slots" {
6
+ interface LocaleNamespaceMap {
7
+ "podman": ContainerPluginKey;
8
+ }
9
+ }
@@ -0,0 +1,370 @@
1
+ // SPDX-FileCopyrightText: 2026 Elouan Martinet <exa@elou.world>
2
+ //
3
+ // SPDX-License-Identifier: MIT
4
+ export const NS = "podman";
5
+ export const en = {
6
+ cardTitle: "dsh-podman",
7
+ cardDescription: "Manage the guest containers and their images.",
8
+ reload: "Reload this view",
9
+ reloading: "Reloading…",
10
+ notice: "Notice",
11
+ configTitle: "Configuration",
12
+ defaultImage: "Default image",
13
+ socketsRoot: "Sockets root",
14
+ projectsRoot: "Projects root",
15
+ defaultImageHint: "Image used when a workspace has no image of its own.",
16
+ save: "Save",
17
+ discard: "Discard",
18
+ workspacesTitle: "Workspaces",
19
+ noContainers: "This workspace has no containers yet.",
20
+ createContainer: "Create container",
21
+ containersTitle: "Containers",
22
+ containerName: "Container",
23
+ workspace: "Workspace",
24
+ image: "Image",
25
+ status: "Status",
26
+ created: "Created",
27
+ projects: "Projects",
28
+ remove: "Remove",
29
+ removePod: "Remove pod",
30
+ confirmRemovePod: "Remove this workspace's pod and all its containers? Volume and project data is kept.",
31
+ recreate: "Recreate",
32
+ recreateWithImage: "Recreate with image",
33
+ imagesTitle: "Images",
34
+ imageId: "Image ID",
35
+ baseImage: "Base image",
36
+ imageTag: "Tag",
37
+ builtAt: "Built at",
38
+ packages: "Packages",
39
+ volumesTitle: "Volumes",
40
+ createVolume: "Create volume",
41
+ removeVolume: "Remove",
42
+ volumeName: "Volume name",
43
+ secretsTitle: "Secrets",
44
+ createSecret: "Create secret",
45
+ secretName: "Secret name",
46
+ secretCharset: "Charset",
47
+ setSecret: "Set value",
48
+ removeSecret: "Remove",
49
+ removeImage: "Remove",
50
+ rebuildImage: "Rebuild",
51
+ rebuildAllImages: "Rebuild all",
52
+ buildImage: "Build image",
53
+ build: "Build",
54
+ buildImageTitle: "Build an image",
55
+ pullImage: "Pull",
56
+ setDefaultImage: "Set default",
57
+ setDefaultImageTitle: "Set default image",
58
+ baseImagesTitle: "Base images",
59
+ customImagesTitle: "Custom images",
60
+ primitive: "Primitive",
61
+ packageManager: "Package manager",
62
+ parent: "Parent",
63
+ selectImage: "Select an image",
64
+ cancel: "Cancel",
65
+ removeTag: "Remove",
66
+ env: "Env",
67
+ secretEnv: "Secret env",
68
+ envTitle: "Environment variables",
69
+ envKey: "Key",
70
+ envValue: "Value",
71
+ addEnv: "Add",
72
+ removeEnv: "Remove",
73
+ secretLength: "Length",
74
+ containerSecretsTitle: "Secret env vars",
75
+ attachSecret: "Attach",
76
+ secretEnvName: "Env var",
77
+ detachSecret: "Detach",
78
+ none: "None",
79
+ unavailable: "The container plugin is not available.",
80
+ busy: "Working…",
81
+ confirmTitle: "Confirm action",
82
+ confirm: "Confirm",
83
+ confirmRemoveContainer: "Remove the default container of this workspace?",
84
+ confirmRecreate: "Recreate this container? Its ephemeral state is lost.",
85
+ confirmRemoveImage: "Remove this image? Containers using it must be recreated from another image.",
86
+ confirmRebuildImage: "Rebuild this image in place?",
87
+ confirmRebuildAllImages: "Rebuild every image in dependency order (base first)?",
88
+ confirmRemoveVolume: "Remove this volume and its data?",
89
+ confirmSetSecret: "Overwrite this secret's value?",
90
+ confirmRemoveSecret: "Remove this secret? Containers using it must drop it first.",
91
+ confirmDetachSecret: "Detach this secret environment variable from the container?",
92
+ mountsTitle: "Mounts",
93
+ addMount: "Add mount",
94
+ mountKind: "Kind",
95
+ mountProject: "Project",
96
+ mountProjectPath: "Project path",
97
+ browse: "Browse…",
98
+ browseTitle: "Select a project directory",
99
+ browseSelect: "Select this directory",
100
+ browseLoading: "Loading…",
101
+ browseError: "Could not read this directory.",
102
+ browseUnavailable: "This deployment has no directory picker.",
103
+ browseHidden: "Show hidden",
104
+ browseTruncated: "Too many folders to list; only the beginning is shown.",
105
+ browseOutsideRoot: "Choose a directory inside the projects root.",
106
+ mountDestination: "Destination",
107
+ pathsTitle: "PATH additions",
108
+ noPaths: "No PATH additions.",
109
+ editPaths: "Edit PATH additions",
110
+ addPath: "Path to add",
111
+ add: "Add",
112
+ moveUp: "Move up",
113
+ moveDown: "Move down",
114
+ apply: "Apply",
115
+ dragToReorder: "Drag to reorder",
116
+ remountWaiting: "Waiting for approval",
117
+ remountApprove: "Remount & run",
118
+ remountReject: "Reject",
119
+ mountVolume: "Volume",
120
+ mountSecret: "Secret",
121
+ mountMode: "Mode",
122
+ readOnly: "Read-only",
123
+ readWrite: "Read-write",
124
+ remountReadOnly: "Remount as read-only",
125
+ remountReadWrite: "Remount as read-write",
126
+ confirmRemountReadOnly: "Remount this mount as read-only and recreate the container?",
127
+ confirmRemountReadWrite: "Remount this mount as read-write and recreate the container?",
128
+ confirmRemoveMount: "Remove this mount from the container and recreate it?",
129
+ cachesTitle: "Package caches",
130
+ noCaches: "No package cache is configured.",
131
+ cacheUsage: "{size} · {n} files",
132
+ cacheKeepLatest: "Keep latest versions",
133
+ confirmCacheKeepLatest: "Remove older cached package versions? Current versions are kept.",
134
+ cacheRemoveAll: "Remove all",
135
+ confirmCacheRemoveAll: "Remove every cached package? The next build re-downloads what it needs.",
136
+ addContainer: "Add container",
137
+ invalidContainerName: "Invalid container name",
138
+ containerNameTaken: "Container name already exists",
139
+ invalidName: "Start with a letter or digit; only letters, digits, '.', '_', '-' (max 64).",
140
+ invalidImageId: "Start with a letter, digit, or '_'; only letters, digits, '.', '_', '-', '/', ':' (max 128).",
141
+ terminalSignal: "signal {signal}",
142
+ terminalExitCode: "exit code {code}",
143
+ terminalRunning: "Running",
144
+ terminalFailed: "Failed",
145
+ terminalDone: "Done",
146
+ terminalNoOutput: "No output",
147
+ terminalCollapseAria: "Collapse output",
148
+ terminalExpandAria: "Expand the remaining {n} output lines",
149
+ terminalExpandRest: "… {n} more lines",
150
+ toolTitle_container_bash: "Container bash",
151
+ toolTitle_container_exec: "Container exec",
152
+ toolTitle_container_read: "Container read",
153
+ toolTitle_container_write: "Container write",
154
+ toolTitle_container_edit: "Container edit",
155
+ toolTitle_container_glob: "Container glob",
156
+ toolTitle_container_grep: "Container grep",
157
+ toolTitle_container_list: "List containers",
158
+ toolTitle_container_start: "Start container",
159
+ toolTitle_container_recreate: "Recreate container",
160
+ toolTitle_container_remove: "Remove container",
161
+ toolTitle_container_mount_list: "List mounts",
162
+ toolTitle_container_mount_add: "Add mount",
163
+ toolTitle_container_mount_remove: "Remove mount",
164
+ toolTitle_container_mount_update: "Change mount mode",
165
+ toolTitle_container_path_set: "Set PATH additions",
166
+ toolTitle_container_path_add: "Add PATH entry",
167
+ toolTitle_container_path_remove: "Remove PATH entry",
168
+ toolTitle_container_secret_add: "Attach secret",
169
+ toolTitle_container_secret_remove: "Detach secret",
170
+ toolTitle_image_list: "List images",
171
+ toolTitle_image_get: "Inspect image",
172
+ toolTitle_image_build: "Build image",
173
+ toolTitle_image_rebuild: "Rebuild image",
174
+ toolTitle_image_rebuild_all: "Rebuild all images",
175
+ toolTitle_image_remove: "Remove image",
176
+ toolTitle_volume_list: "List volumes",
177
+ toolTitle_volume_create: "Create volume",
178
+ toolTitle_volume_remove: "Remove volume",
179
+ toolTitle_secret_list: "List secrets",
180
+ toolTitle_secret_create: "Create secret",
181
+ toolTitle_secret_remove: "Remove secret",
182
+ toolTitle_daemon_start: "Start daemon",
183
+ toolTitle_daemon_list: "List daemons",
184
+ toolTitle_daemon_logs: "Daemon logs",
185
+ toolTitle_daemon_restart: "Restart daemon",
186
+ toolTitle_daemon_stop: "Stop daemon",
187
+ };
188
+ export const zh = {
189
+ cardTitle: "dsh-podman",
190
+ cardDescription: "管理工作区容器及其镜像。",
191
+ reload: "刷新此视图",
192
+ reloading: "刷新中…",
193
+ notice: "提示",
194
+ configTitle: "配置",
195
+ defaultImage: "默认镜像",
196
+ socketsRoot: "套接字根目录",
197
+ projectsRoot: "项目根目录",
198
+ defaultImageHint: "工作区没有自带镜像时使用的镜像。",
199
+ save: "保存",
200
+ discard: "放弃",
201
+ workspacesTitle: "工作区",
202
+ noContainers: "该工作区还没有容器。",
203
+ createContainer: "创建容器",
204
+ containersTitle: "容器",
205
+ containerName: "容器",
206
+ workspace: "工作区",
207
+ image: "镜像",
208
+ status: "状态",
209
+ created: "创建时间",
210
+ projects: "项目",
211
+ remove: "移除",
212
+ removePod: "移除 Pod",
213
+ confirmRemovePod: "移除该工作区的 Pod 及其所有容器?卷和项目数据会保留。",
214
+ recreate: "重建",
215
+ recreateWithImage: "使用镜像重建",
216
+ imagesTitle: "镜像",
217
+ imageId: "镜像 ID",
218
+ baseImage: "基础镜像",
219
+ imageTag: "标签",
220
+ builtAt: "构建时间",
221
+ packages: "软件包",
222
+ volumesTitle: "卷",
223
+ createVolume: "创建卷",
224
+ removeVolume: "移除",
225
+ volumeName: "卷名称",
226
+ secretsTitle: "机密",
227
+ createSecret: "创建机密",
228
+ secretName: "机密名称",
229
+ secretCharset: "字符集",
230
+ setSecret: "设置值",
231
+ removeSecret: "移除",
232
+ removeImage: "移除",
233
+ rebuildImage: "重建",
234
+ rebuildAllImages: "重建全部",
235
+ buildImage: "构建镜像",
236
+ build: "构建",
237
+ buildImageTitle: "构建镜像",
238
+ pullImage: "拉取",
239
+ setDefaultImage: "设为默认",
240
+ setDefaultImageTitle: "设置默认镜像",
241
+ baseImagesTitle: "基础镜像",
242
+ customImagesTitle: "自定义镜像",
243
+ primitive: "源镜像",
244
+ packageManager: "包管理器",
245
+ parent: "父镜像",
246
+ selectImage: "选择镜像",
247
+ cancel: "取消",
248
+ removeTag: "移除",
249
+ env: "环境变量",
250
+ secretEnv: "机密环境变量",
251
+ envTitle: "环境变量",
252
+ envKey: "键",
253
+ envValue: "值",
254
+ addEnv: "添加",
255
+ removeEnv: "移除",
256
+ secretLength: "长度",
257
+ containerSecretsTitle: "机密环境变量",
258
+ attachSecret: "注入",
259
+ secretEnvName: "变量名",
260
+ detachSecret: "移除",
261
+ none: "无",
262
+ unavailable: "容器插件不可用。",
263
+ busy: "处理中…",
264
+ confirmTitle: "确认操作",
265
+ confirm: "确认",
266
+ confirmRemoveContainer: "移除该工作区的默认容器?",
267
+ confirmRecreate: "重建该容器?其临时状态将丢失。",
268
+ confirmRemoveImage: "移除该镜像?使用它的容器需要用其他镜像重建。",
269
+ confirmRebuildImage: "就地重建该镜像?",
270
+ confirmRebuildAllImages: "按依赖顺序重建全部镜像(先基础镜像)?",
271
+ confirmRemoveVolume: "移除该卷及其数据?",
272
+ confirmSetSecret: "覆盖该机密的值?",
273
+ confirmRemoveSecret: "移除该机密?使用它的容器需先移除注入。",
274
+ confirmDetachSecret: "从容器上移除该机密环境变量?",
275
+ mountsTitle: "挂载",
276
+ addMount: "添加挂载",
277
+ mountKind: "类型",
278
+ mountProject: "项目",
279
+ mountProjectPath: "项目路径",
280
+ browse: "浏览…",
281
+ browseTitle: "选择项目目录",
282
+ browseSelect: "选择此目录",
283
+ browseLoading: "加载中…",
284
+ browseError: "无法读取此目录。",
285
+ browseUnavailable: "此部署没有目录选择器。",
286
+ browseHidden: "显示隐藏项",
287
+ browseTruncated: "文件夹过多,仅显示开头部分。",
288
+ browseOutsideRoot: "请选择项目根目录内的目录。",
289
+ mountDestination: "目标路径",
290
+ pathsTitle: "PATH 附加项",
291
+ noPaths: "没有 PATH 附加项。",
292
+ editPaths: "编辑 PATH 附加项",
293
+ addPath: "要添加的路径",
294
+ add: "添加",
295
+ moveUp: "上移",
296
+ moveDown: "下移",
297
+ apply: "应用",
298
+ dragToReorder: "拖动以重新排序",
299
+ remountWaiting: "等待审批",
300
+ remountApprove: "重新挂载并运行",
301
+ remountReject: "拒绝",
302
+ mountVolume: "卷",
303
+ mountSecret: "机密",
304
+ mountMode: "模式",
305
+ readOnly: "只读",
306
+ readWrite: "读写",
307
+ remountReadOnly: "重新挂载为只读",
308
+ remountReadWrite: "重新挂载为读写",
309
+ confirmRemountReadOnly: "将该挂载重新挂载为只读并重建容器?",
310
+ confirmRemountReadWrite: "将该挂载重新挂载为读写并重建容器?",
311
+ confirmRemoveMount: "从容器中移除该挂载并重建容器?",
312
+ cachesTitle: "软件包缓存",
313
+ noCaches: "未配置软件包缓存。",
314
+ cacheUsage: "{size} · {n} 个文件",
315
+ cacheKeepLatest: "保留最新版本",
316
+ confirmCacheKeepLatest: "移除较旧的缓存软件包版本?当前版本会保留。",
317
+ cacheRemoveAll: "全部移除",
318
+ confirmCacheRemoveAll: "移除所有缓存的软件包?下次构建会重新下载所需内容。",
319
+ addContainer: "添加容器",
320
+ invalidContainerName: "容器名称无效",
321
+ containerNameTaken: "容器名称已存在",
322
+ invalidName: "以字母或数字开头,仅可使用字母、数字、'.'、'_'、'-'(最长 64 个字符)。",
323
+ invalidImageId: "以字母、数字或 '_' 开头,仅可使用字母、数字、'.'、'_'、'-'、'/'、':'(最长 128 个字符)。",
324
+ terminalSignal: "信号 {signal}",
325
+ terminalExitCode: "退出码 {code}",
326
+ terminalRunning: "运行中",
327
+ terminalFailed: "失败",
328
+ terminalDone: "已完成",
329
+ terminalNoOutput: "无输出",
330
+ terminalCollapseAria: "收起输出",
331
+ terminalExpandAria: "展开其余 {n} 行输出",
332
+ terminalExpandRest: "… 其余 {n} 行",
333
+ toolTitle_container_bash: "容器 Bash",
334
+ toolTitle_container_exec: "容器执行",
335
+ toolTitle_container_read: "读取容器文件",
336
+ toolTitle_container_write: "写入容器文件",
337
+ toolTitle_container_edit: "编辑容器文件",
338
+ toolTitle_container_glob: "容器文件匹配",
339
+ toolTitle_container_grep: "容器文件搜索",
340
+ toolTitle_container_list: "列出容器",
341
+ toolTitle_container_start: "启动容器",
342
+ toolTitle_container_recreate: "重建容器",
343
+ toolTitle_container_remove: "移除容器",
344
+ toolTitle_container_mount_list: "列出挂载",
345
+ toolTitle_container_mount_add: "添加挂载",
346
+ toolTitle_container_mount_remove: "移除挂载",
347
+ toolTitle_container_mount_update: "更改挂载模式",
348
+ toolTitle_container_path_set: "设置 PATH 附加项",
349
+ toolTitle_container_path_add: "添加 PATH 条目",
350
+ toolTitle_container_path_remove: "移除 PATH 条目",
351
+ toolTitle_container_secret_add: "注入机密",
352
+ toolTitle_container_secret_remove: "移除机密注入",
353
+ toolTitle_image_list: "列出镜像",
354
+ toolTitle_image_get: "查看镜像",
355
+ toolTitle_image_build: "构建镜像",
356
+ toolTitle_image_rebuild: "重建镜像",
357
+ toolTitle_image_rebuild_all: "重建全部镜像",
358
+ toolTitle_image_remove: "移除镜像",
359
+ toolTitle_volume_list: "列出卷",
360
+ toolTitle_volume_create: "创建卷",
361
+ toolTitle_volume_remove: "移除卷",
362
+ toolTitle_secret_list: "列出机密",
363
+ toolTitle_secret_create: "创建机密",
364
+ toolTitle_secret_remove: "移除机密",
365
+ toolTitle_daemon_start: "启动守护进程",
366
+ toolTitle_daemon_list: "列出守护进程",
367
+ toolTitle_daemon_logs: "守护进程日志",
368
+ toolTitle_daemon_restart: "重启守护进程",
369
+ toolTitle_daemon_stop: "停止守护进程",
370
+ };
@@ -0,0 +1,8 @@
1
+ import { type PendingApproval } from "@deepseek-ai/dsh-client-ui-approval/client";
2
+ import { type ReactNode } from "react";
3
+ import { type ContainerPluginKey } from "./locales.js";
4
+ export declare const BUILTIN_PROMPT_PREFIX = "dsh_podman_builtin_";
5
+ export declare function ReadOnlyApprovalPanel(props: {
6
+ t: (key: ContainerPluginKey) => string;
7
+ matched: PendingApproval;
8
+ }): ReactNode;
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from "@deepseek-ai/dsh-client-ui-primitives";
3
+ import { useState } from "react";
4
+ // The reserved tool-name prefix for prompts this plugin raises about built-in
5
+ // operations. The panel takes over the composer for those only, so the
6
+ // harness's own approvals keep its labels.
7
+ export const BUILTIN_PROMPT_PREFIX = "dsh_podman_builtin_";
8
+ export function ReadOnlyApprovalPanel(props) {
9
+ // Keying the flow on the request remounts it for each new prompt, so the
10
+ // answered state never leaks between prompts.
11
+ return _jsx(ReadOnlyApprovalFlow, { ...props }, props.matched.key);
12
+ }
13
+ function ReadOnlyApprovalFlow({ t, matched, }) {
14
+ const [answered, setAnswered] = useState(false);
15
+ const answer = (outcome) => {
16
+ setAnswered(true);
17
+ void matched.answer(outcome).catch(() => setAnswered(false));
18
+ };
19
+ return (_jsx("div", { style: {
20
+ display: "flex",
21
+ flexDirection: "column",
22
+ alignItems: "center",
23
+ padding: "8px calc(var(--dsh-composer-side-clearance) + 16px) 12px",
24
+ }, children: _jsxs("div", { style: {
25
+ overflow: "hidden",
26
+ width: "100%",
27
+ maxWidth: "var(--dsh-chat-content-width)",
28
+ border: "1px solid var(--dsw-alias-state-warn-secondary)",
29
+ borderRadius: "20px",
30
+ background: "var(--dsw-specific-input-major)",
31
+ boxShadow: "var(--dsw-shadow-lv2)",
32
+ }, children: [_jsxs("div", { style: {
33
+ display: "flex",
34
+ alignItems: "center",
35
+ gap: "8px",
36
+ padding: "10px 16px",
37
+ background: "var(--dsw-alias-state-warn-tertiary)",
38
+ color: "var(--dsw-alias-state-warn-primary)",
39
+ fontSize: "13px",
40
+ lineHeight: "18px",
41
+ }, children: [_jsx("span", { style: {
42
+ width: "8px",
43
+ height: "8px",
44
+ borderRadius: "50%",
45
+ background: "var(--dsw-alias-state-warn-primary)",
46
+ } }), t("remountWaiting")] }), _jsx("div", { style: {
47
+ boxSizing: "border-box",
48
+ maxHeight: "var(--dsh-composer-text-max-height)",
49
+ overflowY: "auto",
50
+ padding: "12px 16px 0",
51
+ }, children: _jsx("div", { style: {
52
+ color: "var(--dsw-alias-label-primary)",
53
+ fontSize: "15px",
54
+ fontWeight: 500,
55
+ lineHeight: "24px",
56
+ whiteSpace: "pre-line",
57
+ }, children: matched.reason ?? "" }) }), _jsxs("div", { style: {
58
+ display: "flex",
59
+ justifyContent: "flex-end",
60
+ gap: "8px",
61
+ padding: "14px 16px",
62
+ }, children: [_jsx(Button, { variant: "outline", size: "sm", disabled: answered, onClick: () => answer("rejected"), children: t("remountReject") }), _jsx(Button, { variant: "primary", size: "sm", disabled: answered, onClick: () => answer("allowed-once"), children: t("remountApprove") })] })] }) }));
63
+ }
@@ -0,0 +1,12 @@
1
+ declare module "@deepseek-ai/dsh-client-ui-slots" {
2
+ interface SlotMap {
3
+ "settings.plugin.item": {
4
+ kind: "keyed";
5
+ scope: "root";
6
+ owner: {
7
+ children?: never;
8
+ };
9
+ };
10
+ }
11
+ }
12
+ export {};
@@ -0,0 +1,4 @@
1
+ // SPDX-FileCopyrightText: 2026 Elouan Martinet <exa@elou.world>
2
+ //
3
+ // SPDX-License-Identifier: MIT
4
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { Context as ClientContext } from "@deepseek-ai/cordis";
2
+ export declare const TERMINAL_CLASS = "dsh-podman-terminal";
3
+ export declare const TERMINAL_STYLES = "\n.dsh-podman-terminal {\n --dsl-terminal-font: var(--dsw-font-markdown-code-block-small);\n --dsl-terminal-line-height: 18px;\n --dsl-terminal-output-max-height: 224px;\n margin: 4px 0 4px 4px;\n border: 1px solid var(--dsw-alias-border-l1);\n}\n";
4
+ /** Inject the terminal card stylesheet for the owning plugin lifetime. */
5
+ export declare function installTerminalStyles(ctx: ClientContext): void;
@@ -0,0 +1,31 @@
1
+ // SPDX-FileCopyrightText: 2026 Elouan Martinet <exa@elou.world>
2
+ //
3
+ // SPDX-License-Identifier: MIT
4
+ // The class passed to TerminalBlock for podman command results.
5
+ export const TERMINAL_CLASS = "dsh-podman-terminal";
6
+ // Mirrors ui-tool's .terminalBody/.terminal so a podman command result matches
7
+ // the built-in Bash result: small code font (12px/18px), 224px output cap,
8
+ // 4px indent, l1 border.
9
+ export const TERMINAL_STYLES = `
10
+ .dsh-podman-terminal {
11
+ --dsl-terminal-font: var(--dsw-font-markdown-code-block-small);
12
+ --dsl-terminal-line-height: 18px;
13
+ --dsl-terminal-output-max-height: 224px;
14
+ margin: 4px 0 4px 4px;
15
+ border: 1px solid var(--dsw-alias-border-l1);
16
+ }
17
+ `;
18
+ /** Inject the terminal card stylesheet for the owning plugin lifetime. */
19
+ export function installTerminalStyles(ctx) {
20
+ if (typeof document === "undefined")
21
+ return;
22
+ ctx.effect(() => {
23
+ const tag = document.createElement("style");
24
+ tag.dataset.plugin = "@exagone313/dsh-podman";
25
+ tag.textContent = TERMINAL_STYLES;
26
+ document.head.appendChild(tag);
27
+ return () => {
28
+ tag.remove();
29
+ };
30
+ }, "podman: terminal styles");
31
+ }
@@ -0,0 +1,8 @@
1
+ import type { PropsLocale } from "@deepseek-ai/dsh-client-ui-slots";
2
+ import type { ToolCallViewProps } from "@deepseek-ai/dsh-client-ui-tool/client";
3
+ import { NS } from "./locales.js";
4
+ /** The wire tool names this package owns a row for. */
5
+ export declare const TOOL_VIEW_KEYS: readonly string[];
6
+ export type PodmanToolRowProps = ToolCallViewProps & PropsLocale<typeof NS>;
7
+ /** Render one podman tool call as an icon-titled, expandable row. */
8
+ export declare function PodmanToolRow({ toolName, block, cwd, home, inspect, t, }: PodmanToolRowProps): import("react").JSX.Element;