soraacode 0.2.0 → 0.2.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 (353) hide show
  1. package/LICENSE +21 -0
  2. package/bin/soraacode.exe +10 -0
  3. package/package.json +17 -25
  4. package/{script/postinstall.mjs → postinstall.mjs} +5 -5
  5. package/AGENTS.md +0 -131
  6. package/Dockerfile +0 -18
  7. package/README.md +0 -15
  8. package/bin/opencode +0 -199
  9. package/bin/soraacode +0 -199
  10. package/bunfig.toml +0 -7
  11. package/git +0 -0
  12. package/migration/20260511173437_session-metadata/migration.sql +0 -1
  13. package/migration/20260511173437_session-metadata/snapshot.json +0 -1500
  14. package/parsers-config.ts +0 -1
  15. package/script/bench-search.ts +0 -94
  16. package/script/bench-test-suite.ts +0 -52
  17. package/script/build-headless.ts +0 -51
  18. package/script/build.ts +0 -245
  19. package/script/generate.ts +0 -14
  20. package/script/httpapi-exercise.ts +0 -1
  21. package/script/profile-test-files.ts +0 -42
  22. package/script/publish.ts +0 -213
  23. package/script/run-workspace-server +0 -106
  24. package/script/schema.ts +0 -77
  25. package/script/time.ts +0 -6
  26. package/script/trace-imports.ts +0 -153
  27. package/soraacode-0.1.7.tgz +0 -0
  28. package/specs/effect/error-boundaries-plan.md +0 -235
  29. package/specs/effect/errors.md +0 -207
  30. package/specs/effect/facades.md +0 -218
  31. package/specs/effect/guide.md +0 -247
  32. package/specs/effect/instance-context.md +0 -13
  33. package/specs/effect/loose-ends.md +0 -30
  34. package/specs/effect/migration.md +0 -62
  35. package/specs/effect/routes.md +0 -61
  36. package/specs/effect/schema.md +0 -88
  37. package/specs/effect/server-package.md +0 -58
  38. package/specs/effect/todo.md +0 -241
  39. package/specs/effect/tools.md +0 -88
  40. package/specs/openapi-translation-cleanup.md +0 -204
  41. package/specs/tui-plugins.md +0 -544
  42. package/specs/v2/api.ts +0 -67
  43. package/specs/v2/message-shape.md +0 -136
  44. package/specs/v2/notifications.md +0 -13
  45. package/specs/v2/tui-command-shim.md +0 -67
  46. package/src/account/account.ts +0 -481
  47. package/src/account/repo.ts +0 -171
  48. package/src/account/schema.ts +0 -99
  49. package/src/account/url.ts +0 -8
  50. package/src/acp/agent.ts +0 -95
  51. package/src/acp/config-option.ts +0 -206
  52. package/src/acp/content.ts +0 -269
  53. package/src/acp/directory.ts +0 -212
  54. package/src/acp/error.ts +0 -97
  55. package/src/acp/event.ts +0 -421
  56. package/src/acp/permission.ts +0 -254
  57. package/src/acp/profile.ts +0 -42
  58. package/src/acp/service.ts +0 -1226
  59. package/src/acp/session.ts +0 -232
  60. package/src/acp/tool.ts +0 -364
  61. package/src/acp/usage.ts +0 -243
  62. package/src/agent/agent.ts +0 -450
  63. package/src/agent/generate.txt +0 -75
  64. package/src/agent/prompt/compaction.txt +0 -5
  65. package/src/agent/prompt/explore.txt +0 -18
  66. package/src/agent/prompt/summary.txt +0 -11
  67. package/src/agent/prompt/title.txt +0 -44
  68. package/src/agent/subagent-permissions.ts +0 -27
  69. package/src/audio.d.ts +0 -14
  70. package/src/auth/index.ts +0 -97
  71. package/src/background/job.ts +0 -37
  72. package/src/bus/global.ts +0 -22
  73. package/src/cli/bootstrap.ts +0 -11
  74. package/src/cli/cmd/cmd.ts +0 -7
  75. package/src/cli/cmd/serve.ts +0 -24
  76. package/src/cli/effect/prompt.ts +0 -37
  77. package/src/cli/effect-cmd.ts +0 -96
  78. package/src/cli/error.ts +0 -130
  79. package/src/cli/heap.ts +0 -45
  80. package/src/cli/logo.ts +0 -2
  81. package/src/cli/network.ts +0 -80
  82. package/src/cli/ui.ts +0 -132
  83. package/src/command/index.ts +0 -177
  84. package/src/command/template/initialize.txt +0 -66
  85. package/src/command/template/review.txt +0 -101
  86. package/src/config/agent.ts +0 -59
  87. package/src/config/command.ts +0 -39
  88. package/src/config/config.ts +0 -707
  89. package/src/config/entry-name.ts +0 -19
  90. package/src/config/managed.ts +0 -69
  91. package/src/config/markdown.ts +0 -36
  92. package/src/config/parse.ts +0 -61
  93. package/src/config/paths.ts +0 -45
  94. package/src/config/plugin.ts +0 -79
  95. package/src/config/v2-compat.ts +0 -449
  96. package/src/config/variable.ts +0 -91
  97. package/src/control-plane/adapters/index.ts +0 -41
  98. package/src/control-plane/adapters/worktree.ts +0 -96
  99. package/src/control-plane/dev/README.md +0 -19
  100. package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
  101. package/src/control-plane/types.ts +0 -59
  102. package/src/control-plane/util.ts +0 -39
  103. package/src/control-plane/workspace-adapter-runtime.ts +0 -51
  104. package/src/control-plane/workspace-context.ts +0 -26
  105. package/src/control-plane/workspace.ts +0 -966
  106. package/src/effect/app-node-builder-v1.ts +0 -12
  107. package/src/effect/app-runtime.ts +0 -135
  108. package/src/effect/bootstrap-runtime.ts +0 -19
  109. package/src/effect/bridge.ts +0 -84
  110. package/src/effect/config-service.ts +0 -67
  111. package/src/effect/instance-ref.ts +0 -11
  112. package/src/effect/instance-registry.ts +0 -12
  113. package/src/effect/instance-state.ts +0 -69
  114. package/src/effect/promise.ts +0 -17
  115. package/src/effect/run-service.ts +0 -47
  116. package/src/effect/runner.ts +0 -217
  117. package/src/effect/runtime-flags.ts +0 -78
  118. package/src/env/index.ts +0 -41
  119. package/src/event-manifest.ts +0 -3
  120. package/src/event-v2-bridge.ts +0 -71
  121. package/src/format/formatter.ts +0 -404
  122. package/src/format/index.ts +0 -203
  123. package/src/git/index.ts +0 -348
  124. package/src/id/id.ts +0 -80
  125. package/src/ide/index.ts +0 -54
  126. package/src/image/image.ts +0 -172
  127. package/src/index-headless.ts +0 -89
  128. package/src/index.ts +0 -93
  129. package/src/installation/index.ts +0 -336
  130. package/src/lsp/client.ts +0 -650
  131. package/src/lsp/diagnostic.ts +0 -29
  132. package/src/lsp/language.ts +0 -121
  133. package/src/lsp/launch.ts +0 -21
  134. package/src/lsp/lsp.ts +0 -507
  135. package/src/lsp/server.ts +0 -1983
  136. package/src/markdown.d.ts +0 -4
  137. package/src/mcp/auth.ts +0 -163
  138. package/src/mcp/browser.ts +0 -37
  139. package/src/mcp/catalog.ts +0 -170
  140. package/src/mcp/index.ts +0 -1004
  141. package/src/mcp/oauth-callback.ts +0 -194
  142. package/src/mcp/oauth-provider.ts +0 -259
  143. package/src/node.ts +0 -4
  144. package/src/patch/index.ts +0 -686
  145. package/src/permission/arity.ts +0 -163
  146. package/src/permission/evaluate.ts +0 -1
  147. package/src/permission/index.ts +0 -223
  148. package/src/plugin/github-copilot/copilot.ts +0 -415
  149. package/src/plugin/github-copilot/models.ts +0 -261
  150. package/src/plugin/index.ts +0 -298
  151. package/src/plugin/install.ts +0 -439
  152. package/src/plugin/loader.ts +0 -237
  153. package/src/plugin/meta.ts +0 -188
  154. package/src/plugin/openai/README.md +0 -31
  155. package/src/plugin/openai/codex.ts +0 -575
  156. package/src/plugin/openai/ws-pool.ts +0 -271
  157. package/src/plugin/openai/ws.ts +0 -383
  158. package/src/plugin/pty-environment.ts +0 -24
  159. package/src/plugin/shared.ts +0 -323
  160. package/src/project/bootstrap-service.ts +0 -9
  161. package/src/project/bootstrap.ts +0 -58
  162. package/src/project/instance-context.ts +0 -24
  163. package/src/project/instance-runtime.ts +0 -16
  164. package/src/project/instance-store.ts +0 -213
  165. package/src/project/project.ts +0 -483
  166. package/src/project/vcs.ts +0 -423
  167. package/src/provider/auth.ts +0 -229
  168. package/src/provider/error.ts +0 -195
  169. package/src/provider/model-status.ts +0 -8
  170. package/src/provider/provider.ts +0 -1955
  171. package/src/provider/transform.ts +0 -1923
  172. package/src/question/index.ts +0 -161
  173. package/src/question/schema.ts +0 -4
  174. package/src/server/auth.ts +0 -48
  175. package/src/server/event.ts +0 -10
  176. package/src/server/global-lifecycle.ts +0 -28
  177. package/src/server/mdns.ts +0 -47
  178. package/src/server/proxy-util.ts +0 -48
  179. package/src/server/routes/instance/httpapi/AGENTS.md +0 -39
  180. package/src/server/routes/instance/httpapi/api.ts +0 -97
  181. package/src/server/routes/instance/httpapi/errors.ts +0 -193
  182. package/src/server/routes/instance/httpapi/groups/config.ts +0 -65
  183. package/src/server/routes/instance/httpapi/groups/control-plane.ts +0 -35
  184. package/src/server/routes/instance/httpapi/groups/control.ts +0 -76
  185. package/src/server/routes/instance/httpapi/groups/event.ts +0 -29
  186. package/src/server/routes/instance/httpapi/groups/experimental.ts +0 -275
  187. package/src/server/routes/instance/httpapi/groups/file.ts +0 -185
  188. package/src/server/routes/instance/httpapi/groups/global.ts +0 -139
  189. package/src/server/routes/instance/httpapi/groups/instance.ts +0 -206
  190. package/src/server/routes/instance/httpapi/groups/mcp.ts +0 -156
  191. package/src/server/routes/instance/httpapi/groups/metadata.ts +0 -18
  192. package/src/server/routes/instance/httpapi/groups/permission.ts +0 -61
  193. package/src/server/routes/instance/httpapi/groups/project-copy.ts +0 -32
  194. package/src/server/routes/instance/httpapi/groups/project.ts +0 -93
  195. package/src/server/routes/instance/httpapi/groups/provider.ts +0 -101
  196. package/src/server/routes/instance/httpapi/groups/pty.ts +0 -172
  197. package/src/server/routes/instance/httpapi/groups/query.ts +0 -12
  198. package/src/server/routes/instance/httpapi/groups/question.ts +0 -74
  199. package/src/server/routes/instance/httpapi/groups/session.ts +0 -462
  200. package/src/server/routes/instance/httpapi/groups/sync.ts +0 -113
  201. package/src/server/routes/instance/httpapi/groups/tui.ts +0 -208
  202. package/src/server/routes/instance/httpapi/groups/workspace.ts +0 -141
  203. package/src/server/routes/instance/httpapi/handlers/config.ts +0 -34
  204. package/src/server/routes/instance/httpapi/handlers/control-plane.ts +0 -37
  205. package/src/server/routes/instance/httpapi/handlers/control.ts +0 -43
  206. package/src/server/routes/instance/httpapi/handlers/event.ts +0 -99
  207. package/src/server/routes/instance/httpapi/handlers/experimental.ts +0 -193
  208. package/src/server/routes/instance/httpapi/handlers/file.ts +0 -139
  209. package/src/server/routes/instance/httpapi/handlers/global.ts +0 -126
  210. package/src/server/routes/instance/httpapi/handlers/instance.ts +0 -110
  211. package/src/server/routes/instance/httpapi/handlers/mcp.ts +0 -111
  212. package/src/server/routes/instance/httpapi/handlers/permission.ts +0 -41
  213. package/src/server/routes/instance/httpapi/handlers/project-copy.ts +0 -83
  214. package/src/server/routes/instance/httpapi/handlers/project.ts +0 -63
  215. package/src/server/routes/instance/httpapi/handlers/provider.ts +0 -116
  216. package/src/server/routes/instance/httpapi/handlers/pty.ts +0 -273
  217. package/src/server/routes/instance/httpapi/handlers/question.ts +0 -54
  218. package/src/server/routes/instance/httpapi/handlers/session-errors.ts +0 -21
  219. package/src/server/routes/instance/httpapi/handlers/session.ts +0 -442
  220. package/src/server/routes/instance/httpapi/handlers/sync.ts +0 -89
  221. package/src/server/routes/instance/httpapi/handlers/tui.ts +0 -131
  222. package/src/server/routes/instance/httpapi/handlers/workspace.ts +0 -102
  223. package/src/server/routes/instance/httpapi/lifecycle.ts +0 -54
  224. package/src/server/routes/instance/httpapi/middleware/authorization.ts +0 -150
  225. package/src/server/routes/instance/httpapi/middleware/compression.ts +0 -64
  226. package/src/server/routes/instance/httpapi/middleware/cors-vary.ts +0 -29
  227. package/src/server/routes/instance/httpapi/middleware/error.ts +0 -44
  228. package/src/server/routes/instance/httpapi/middleware/fence.ts +0 -25
  229. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +0 -43
  230. package/src/server/routes/instance/httpapi/middleware/proxy.ts +0 -131
  231. package/src/server/routes/instance/httpapi/middleware/schema-error.ts +0 -41
  232. package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +0 -250
  233. package/src/server/routes/instance/httpapi/public.ts +0 -537
  234. package/src/server/routes/instance/httpapi/server.ts +0 -325
  235. package/src/server/routes/instance/httpapi/websocket-tracker.ts +0 -60
  236. package/src/server/server.ts +0 -224
  237. package/src/server/shared/fence.ts +0 -60
  238. package/src/server/shared/pty-ticket.ts +0 -15
  239. package/src/server/shared/public-ui.ts +0 -12
  240. package/src/server/shared/tui-control.ts +0 -28
  241. package/src/server/shared/ui.ts +0 -108
  242. package/src/server/shared/workspace-routing.ts +0 -45
  243. package/src/server/tui-event.ts +0 -1
  244. package/src/session/compaction.ts +0 -608
  245. package/src/session/instruction.ts +0 -237
  246. package/src/session/llm/AGENTS.md +0 -90
  247. package/src/session/llm/ai-sdk.ts +0 -291
  248. package/src/session/llm/native-request.ts +0 -196
  249. package/src/session/llm/native-runtime.ts +0 -195
  250. package/src/session/llm/request.ts +0 -226
  251. package/src/session/llm.ts +0 -390
  252. package/src/session/message-error.ts +0 -14
  253. package/src/session/message-v2.ts +0 -742
  254. package/src/session/message.ts +0 -148
  255. package/src/session/overflow.ts +0 -34
  256. package/src/session/processor.ts +0 -732
  257. package/src/session/prompt/build-switch.txt +0 -5
  258. package/src/session/prompt/default.txt +0 -35
  259. package/src/session/prompt/plan-mode.txt +0 -70
  260. package/src/session/prompt/plan.txt +0 -26
  261. package/src/session/prompt.ts +0 -1631
  262. package/src/session/reminders.ts +0 -92
  263. package/src/session/retry.ts +0 -209
  264. package/src/session/revert.ts +0 -136
  265. package/src/session/run-state.ts +0 -151
  266. package/src/session/schema.ts +0 -26
  267. package/src/session/session.ts +0 -1016
  268. package/src/session/status.ts +0 -56
  269. package/src/session/summary.ts +0 -160
  270. package/src/session/system.ts +0 -123
  271. package/src/session/todo.ts +0 -74
  272. package/src/session/tools.ts +0 -590
  273. package/src/share/session.ts +0 -58
  274. package/src/share/share-next.ts +0 -371
  275. package/src/skill/discovery.ts +0 -140
  276. package/src/skill/index.ts +0 -354
  277. package/src/snapshot/index.ts +0 -807
  278. package/src/sql.d.ts +0 -4
  279. package/src/storage/schema.ts +0 -5
  280. package/src/storage/storage.ts +0 -327
  281. package/src/sync/README.md +0 -179
  282. package/src/sync/schema.ts +0 -11
  283. package/src/temporary.ts +0 -31
  284. package/src/tool/apply_patch.ts +0 -313
  285. package/src/tool/apply_patch.txt +0 -14
  286. package/src/tool/code-mode.ts +0 -310
  287. package/src/tool/edit.ts +0 -737
  288. package/src/tool/edit.txt +0 -13
  289. package/src/tool/external-directory.ts +0 -49
  290. package/src/tool/glob.ts +0 -76
  291. package/src/tool/glob.txt +0 -7
  292. package/src/tool/grep.ts +0 -115
  293. package/src/tool/grep.txt +0 -7
  294. package/src/tool/invalid.ts +0 -21
  295. package/src/tool/json-schema.ts +0 -164
  296. package/src/tool/lsp.ts +0 -113
  297. package/src/tool/lsp.txt +0 -1
  298. package/src/tool/mcp-websearch.ts +0 -96
  299. package/src/tool/plan-enter.txt +0 -1
  300. package/src/tool/plan-exit.txt +0 -1
  301. package/src/tool/plan.ts +0 -79
  302. package/src/tool/question.ts +0 -44
  303. package/src/tool/question.txt +0 -1
  304. package/src/tool/read.ts +0 -386
  305. package/src/tool/read.txt +0 -13
  306. package/src/tool/registry.ts +0 -455
  307. package/src/tool/schema.ts +0 -14
  308. package/src/tool/shell/id.ts +0 -19
  309. package/src/tool/shell/prompt.ts +0 -293
  310. package/src/tool/shell/shell.txt +0 -21
  311. package/src/tool/shell.ts +0 -645
  312. package/src/tool/skill.ts +0 -70
  313. package/src/tool/skill.txt +0 -1
  314. package/src/tool/task.ts +0 -371
  315. package/src/tool/task.txt +0 -11
  316. package/src/tool/todo.ts +0 -46
  317. package/src/tool/todowrite.txt +0 -11
  318. package/src/tool/tool.ts +0 -183
  319. package/src/tool/truncate.ts +0 -156
  320. package/src/tool/truncation-dir.ts +0 -4
  321. package/src/tool/webfetch.ts +0 -192
  322. package/src/tool/webfetch.txt +0 -9
  323. package/src/tool/websearch.ts +0 -143
  324. package/src/tool/websearch.txt +0 -9
  325. package/src/tool/write.ts +0 -104
  326. package/src/tool/write.txt +0 -11
  327. package/src/util/archive.ts +0 -17
  328. package/src/util/bom.ts +0 -27
  329. package/src/util/data-url.ts +0 -9
  330. package/src/util/defer.ts +0 -10
  331. package/src/util/effect-http-client.ts +0 -11
  332. package/src/util/error.ts +0 -16
  333. package/src/util/filesystem.ts +0 -251
  334. package/src/util/html.ts +0 -8
  335. package/src/util/iife.ts +0 -3
  336. package/src/util/lazy.ts +0 -20
  337. package/src/util/local-context.ts +0 -25
  338. package/src/util/locale.ts +0 -4
  339. package/src/util/media.ts +0 -26
  340. package/src/util/process.ts +0 -177
  341. package/src/util/proxy-env.ts +0 -72
  342. package/src/util/queue.ts +0 -32
  343. package/src/util/record.ts +0 -3
  344. package/src/util/repository.ts +0 -232
  345. package/src/util/rpc.ts +0 -66
  346. package/src/util/signal.ts +0 -12
  347. package/src/util/timeout.ts +0 -13
  348. package/src/util/token.ts +0 -1
  349. package/src/util/wildcard.ts +0 -59
  350. package/src/worktree/index.ts +0 -623
  351. package/sst-env.d.ts +0 -10
  352. package/tsconfig.headless.json +0 -13
  353. package/tsconfig.json +0 -16
@@ -1,293 +0,0 @@
1
- import { Schema } from "effect"
2
- import DESCRIPTION from "./shell.txt"
3
- import { PositiveInt } from "@soraacode/core/schema"
4
- import { Global } from "@soraacode/core/global"
5
- import { ShellID } from "./id"
6
-
7
- const PS = new Set(["powershell", "pwsh"])
8
- const CMD = new Set(["cmd"])
9
-
10
- export type Limits = {
11
- maxLines: number
12
- maxBytes: number
13
- }
14
-
15
- export function parameterSchema() {
16
- return Schema.Struct({
17
- command: Schema.String.annotate({ description: "The command to execute" }),
18
- timeout: Schema.optional(PositiveInt).annotate({ description: "Optional timeout in milliseconds" }),
19
- workdir: Schema.optional(Schema.String).annotate({
20
- description: `The working directory to run the command in. Defaults to the current directory. Use this instead of 'cd' commands.`,
21
- }),
22
- })
23
- }
24
-
25
- export const Parameters = parameterSchema()
26
- export type Parameters = Schema.Schema.Type<typeof Parameters>
27
-
28
- function renderPrompt(template: string, values: Record<string, string>) {
29
- return template.replace(/\$\{(\w+)\}/g, (_, key: string) => {
30
- const value = values[key]
31
- if (value === undefined) throw new Error(`Missing shell prompt value: ${key}`)
32
- return value
33
- })
34
- }
35
-
36
- function shellDisplayName(name: string) {
37
- if (name === "pwsh") return "PowerShell (7+)"
38
- if (name === "powershell") return "Windows PowerShell (5.1)"
39
- if (name === "cmd") return "cmd.exe"
40
- return name
41
- }
42
-
43
- function powershellNotes(name: string) {
44
- if (name === "pwsh") {
45
- return `# PowerShell (7+) shell notes
46
- - This cross-platform shell supports pipeline chain operators (\`&&\` and \`||\`).
47
- - Use double quotes for interpolated strings (\`"Hello $name"\`), single quotes for verbatim strings.
48
- - Prefer full cmdlet names like \`Get-ChildItem\`, \`Set-Content\`, \`Remove-Item\`, and \`New-Item\` over aliases.
49
- - Use \`$(...)\` for subexpressions. Use \`@(...)\` for array expressions.
50
- - To call a native executable whose path contains spaces, use the call operator: \`& "path/to/exe" args\`.
51
- - Escape special characters with the PowerShell backtick character.`
52
- }
53
- if (name === "powershell") {
54
- return `# Windows PowerShell (5.1) shell notes
55
- - Use \`cmd1; if ($?) { cmd2 }\` to chain dependent commands.
56
- - Use double quotes for interpolated strings (\`"Hello $name"\`), single quotes for verbatim strings.
57
- - Prefer full cmdlet names like \`Get-ChildItem\`, \`Set-Content\`, \`Remove-Item\`, and \`New-Item\` over aliases.
58
- - Use \`$(...)\` for subexpressions. Use \`@(...)\` for array expressions.
59
- - To call a native executable whose path contains spaces, use the call operator: \`& "path/to/exe" args\`.
60
- - Escape special characters with the PowerShell backtick character.`
61
- }
62
- return ""
63
- }
64
-
65
- function chainGuidance(name: string) {
66
- if (name === "powershell") {
67
- return "If the commands depend on each other and must run sequentially, avoid '&&' in this shell because Windows PowerShell (5.1) does not support it. Use PowerShell conditionals such as `cmd1; if ($?) { cmd2 }` when later commands must depend on earlier success."
68
- }
69
- if (PS.has(name)) {
70
- return "If the commands depend on each other and must run sequentially, use a single bash tool call with '&&' to chain them together (e.g., `git add . && git commit -m \"message\" && git push`). For instance, if one operation must complete before another starts (like New-Item before Copy-Item, Write before bash for git operations, or git add before git commit), run these operations sequentially instead."
71
- }
72
- if (CMD.has(name)) {
73
- return "If the commands depend on each other and must run sequentially, use a single bash tool call with `&&` to chain them together (e.g., `mkdir out && dir out`). For instance, if one operation must complete before another starts, run these operations sequentially instead."
74
- }
75
- return "If the commands depend on each other and must run sequentially, use a single Bash call with '&&' to chain them together (e.g., `git add . && git commit -m \"message\" && git push`). For instance, if one operation must complete before another starts (like mkdir before cp, Write before Bash for git operations, or git add before git commit), run these operations sequentially instead."
76
- }
77
-
78
- function bashCommandSection(chain: string, limits: Limits, defaultTimeoutMs: number) {
79
- return `Before executing the command, please follow these steps:
80
-
81
- 1. Directory Verification:
82
- - If the command will create new directories or files, first use \`ls\` to verify the parent directory exists and is the correct location
83
- - For example, before running "mkdir foo/bar", first use \`ls foo\` to check that "foo" exists and is the intended parent directory
84
-
85
- 2. Command Execution:
86
- - Always quote file paths that contain spaces with double quotes (e.g., rm "path with spaces/file.txt")
87
- - Examples of proper quoting:
88
- - mkdir "/Users/name/My Documents" (correct)
89
- - mkdir /Users/name/My Documents (incorrect - will fail)
90
- - python "/path/with spaces/script.py" (correct)
91
- - python /path/with spaces/script.py (incorrect - will fail)
92
- - After ensuring proper quoting, execute the command.
93
- - Capture the output of the command.
94
-
95
- Usage notes:
96
- - The command argument is required.
97
- - You can specify an optional timeout in milliseconds. If not specified, commands will time out after ${defaultTimeoutMs}ms.
98
- - If the output exceeds ${limits.maxLines} lines or ${limits.maxBytes} bytes, it will be truncated and the full output will be written to a file. You can use Read with offset/limit to read specific sections or Grep to search the full content. Do NOT use \`head\`, \`tail\`, or other truncation commands to limit output; the full output will already be captured to a file for more precise searching.
99
-
100
- - Avoid using Bash with the \`find\`, \`grep\`, \`cat\`, \`head\`, \`tail\`, \`sed\`, \`awk\`, or \`echo\` commands, unless explicitly instructed or when these commands are truly necessary for the task. Instead, always prefer using the dedicated tools for these commands:
101
- - File search: Use Glob (NOT find or ls)
102
- - Content search: Use Grep (NOT grep or rg)
103
- - Read files: Use Read (NOT cat/head/tail)
104
- - Edit files: Use Edit (NOT sed/awk)
105
- - Write files: Use Write (NOT echo >/cat <<EOF)
106
- - Communication: Output text directly (NOT echo/printf)
107
- - When issuing multiple commands:
108
- - If the commands are independent and can run in parallel, make multiple bash tool calls in a single message. For example, if you need to run "git status" and "git diff", send a single message with two bash tool calls in parallel.
109
- - ${chain}
110
- - Use ';' only when you need to run commands sequentially but don't care if earlier commands fail
111
- - DO NOT use newlines to separate commands (newlines are ok in quoted strings)
112
- - AVOID using \`cd <directory> && <command>\`. Use the \`workdir\` parameter to change directories instead.
113
- <good-example>
114
- Use workdir="/foo/bar" with command: pytest tests
115
- </good-example>
116
- <bad-example>
117
- cd /foo/bar && pytest tests
118
- </bad-example>`
119
- }
120
-
121
- function powershellCommandSection(
122
- name: string,
123
- chain: string,
124
- pathSep: string,
125
- limits: Limits,
126
- defaultTimeoutMs: number,
127
- ) {
128
- return `${powershellNotes(name)}
129
-
130
- Before executing the command, please follow these steps:
131
-
132
- 1. Directory Verification:
133
- - If the command will create new directories or files, first use \`Test-Path -LiteralPath <parent>\` to verify the parent directory exists and is the correct location
134
- - For example, before creating \`foo${pathSep}bar\`, first use \`Test-Path -LiteralPath "foo"\` to check that \`foo\` exists and is the intended parent directory
135
-
136
- 2. Command Execution:
137
- - Always quote file paths that contain spaces with double quotes (e.g., Remove-Item -LiteralPath "path with spaces${pathSep}file.txt")
138
- - Examples of proper quoting:
139
- - New-Item -ItemType Directory -Path "My Documents" (correct)
140
- - New-Item -ItemType Directory -Path My Documents (incorrect - path is split)
141
- - & "path with spaces${pathSep}script.ps1" (correct)
142
- - path with spaces${pathSep}script.ps1 (incorrect - path is split and not invoked)
143
- - After ensuring proper quoting, execute the command.
144
- - Capture the output of the command.
145
-
146
- Usage notes:
147
- - The command argument is required.
148
- - You can specify an optional timeout in milliseconds. If not specified, commands will time out after ${defaultTimeoutMs}ms.
149
- - If the output exceeds ${limits.maxLines} lines or ${limits.maxBytes} bytes, it will be truncated and the full output will be written to a file. You can use Read with offset/limit to read specific sections or Grep to search the full content. Do NOT use \`Select-Object -First\`, \`Select-Object -Last\`, or other truncation commands to limit output; the full output will already be captured to a file for more precise searching.
150
-
151
- - Avoid using Shell with PowerShell file/content cmdlets unless explicitly instructed or when these cmdlets are truly necessary for the task. Instead, always prefer using the dedicated tools for these commands:
152
- - File search: Use Glob (NOT Get-ChildItem)
153
- - Content search: Use Grep (NOT Select-String)
154
- - Read files: Use Read (NOT Get-Content)
155
- - Edit files: Use Edit (NOT Set-Content)
156
- - Write files: Use Write (NOT Set-Content/Out-File or here-strings)
157
- - Communication: Output text directly (NOT Write-Output/Write-Host)
158
- - When issuing multiple commands:
159
- - If the commands are independent and can run in parallel, make multiple bash tool calls in a single message. For example, if you need to run "git status" and "git diff", send a single message with two bash tool calls in parallel.
160
- - ${chain}
161
- - Use \`;\` only when you need to run commands sequentially but don't care if earlier commands fail
162
- - DO NOT use newlines to separate commands (newlines are ok in quoted strings)
163
- - AVOID changing directories inside the command. Use the \`workdir\` parameter to change directories instead.
164
- <good-example>
165
- Use workdir="project${pathSep}subdir" with command: pytest tests
166
- </good-example>
167
- <bad-example>
168
- ${name === "powershell" ? `Set-Location -LiteralPath "project${pathSep}subdir"; if ($?) { pytest tests }` : `Set-Location -LiteralPath "project${pathSep}subdir" && pytest tests`}
169
- </bad-example>`
170
- }
171
-
172
- function cmdCommandSection(chain: string, limits: Limits, defaultTimeoutMs: number) {
173
- return `# cmd.exe shell notes
174
- - Use double quotes for paths with spaces.
175
- - Use %VAR% for environment variables.
176
- - Use \`if exist\` for existence checks.
177
- - Use \`call\` when invoking batch files from another batch-style command.
178
-
179
- Before executing the command, please follow these steps:
180
-
181
- 1. Directory Verification:
182
- - If the command will create new directories or files, first use \`if exist\` to verify the parent directory exists and is the correct location
183
- - For example, before creating \`foo\\bar\`, first use \`if exist "foo\\" dir "foo"\` to check that \`foo\` exists and is the intended parent directory
184
-
185
- 2. Command Execution:
186
- - Always quote file paths that contain spaces with double quotes (e.g., del "path with spaces\\file.txt")
187
- - Examples of proper quoting:
188
- - mkdir "My Documents" (correct)
189
- - mkdir My Documents (incorrect - path is split)
190
- - call "path with spaces\\script.bat" (correct)
191
- - path with spaces\\script.bat (incorrect - path is split and not invoked correctly)
192
- - After ensuring proper quoting, execute the command.
193
- - Capture the output of the command.
194
-
195
- Usage notes:
196
- - The command argument is required.
197
- - You can specify an optional timeout in milliseconds. If not specified, commands will time out after ${defaultTimeoutMs}ms.
198
- - If the output exceeds ${limits.maxLines} lines or ${limits.maxBytes} bytes, it will be truncated and the full output will be written to a file. You can use Read with offset/limit to read specific sections or Grep to search the full content. Do NOT use \`more\` or other pagination commands to limit output; the full output will already be captured to a file for more precise searching.
199
-
200
- - Avoid using Shell with cmd.exe file/content commands unless explicitly instructed or when these commands are truly necessary for the task. Instead, always prefer using the dedicated tools for these commands:
201
- - File search: Use Glob (NOT dir /s)
202
- - Content search: Use Grep (NOT findstr)
203
- - Read files: Use Read (NOT type)
204
- - Edit files: Use Edit (NOT copy)
205
- - Write files: Use Write (NOT echo > file)
206
- - Communication: Output text directly (NOT echo)
207
- - When issuing multiple commands:
208
- - If the commands are independent and can run in parallel, make multiple bash tool calls in a single message. For example, if you need to run "dir" and "where cmd", send a single message with two bash tool calls in parallel.
209
- - ${chain}
210
- - Use \`&\` only when you need to run commands sequentially but don't care if earlier commands fail
211
- - DO NOT use newlines to separate commands (newlines are ok in quoted strings)
212
- - AVOID changing directories inside the command. Use the \`workdir\` parameter to change directories instead.
213
- <good-example>
214
- Use workdir="project\\subdir" with command: dir
215
- </good-example>
216
- <bad-example>
217
- cd /d "project\\subdir" && dir
218
- </bad-example>`
219
- }
220
-
221
- function profile(name: string, platform: NodeJS.Platform, limits: Limits, defaultTimeoutMs: number) {
222
- const isPowerShell = PS.has(name)
223
- const chain = chainGuidance(name)
224
- if (CMD.has(name)) {
225
- return {
226
- intro: `Executes a given ${shellDisplayName(name)} command with optional timeout, ensuring proper handling and security measures.`,
227
- workdirSection:
228
- "All commands run in the current working directory by default. Use the `workdir` parameter if you need to run a command in a different directory. AVOID changing directories inside the command - use `workdir` instead.",
229
- commandSection: cmdCommandSection(chain, limits, defaultTimeoutMs),
230
- gitCommands: "git commands",
231
- gitCommandRestriction: "git commands",
232
- createPrInstruction: "Create PR using a temporary body file so cmd.exe quoting stays simple.",
233
- createPrExample: `(\n echo ## Summary\n echo - ^<1-3 bullet points^>\n) > pr-body.txt\ngh pr create --title "the pr title" --body-file pr-body.txt`,
234
- }
235
- }
236
- if (isPowerShell) {
237
- return {
238
- intro: `Executes a given ${shellDisplayName(name)} command with optional timeout, ensuring proper handling and security measures.`,
239
- workdirSection:
240
- "All commands run in the current working directory by default. Use the `workdir` parameter if you need to run a command in a different directory. AVOID changing directories inside the command - use `workdir` instead.",
241
- commandSection: powershellCommandSection(
242
- name,
243
- chain,
244
- platform === "win32" ? "\\" : "/",
245
- limits,
246
- defaultTimeoutMs,
247
- ),
248
- gitCommands: "git commands",
249
- gitCommandRestriction: "git commands",
250
- createPrInstruction: "Create PR using gh pr create with a PowerShell here-string to pass the body correctly.",
251
- createPrExample: `gh pr create --title "the pr title" --body @'
252
- ## Summary
253
- - <1-3 bullet points>
254
- '@`,
255
- }
256
- }
257
- return {
258
- intro:
259
- "Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures.",
260
- workdirSection:
261
- "All commands run in the current working directory by default. Use the `workdir` parameter if you need to run a command in a different directory. AVOID using `cd <directory> && <command>` patterns - use `workdir` instead.",
262
- commandSection: bashCommandSection(chain, limits, defaultTimeoutMs),
263
- gitCommands: "bash commands",
264
- gitCommandRestriction: "git bash commands",
265
- createPrInstruction:
266
- "Create PR using gh pr create with the format below. Use a HEREDOC to pass the body to ensure correct formatting.",
267
- createPrExample: `gh pr create --title "the pr title" --body "$(cat <<'EOF'
268
- ## Summary
269
- <1-3 bullet points>`,
270
- }
271
- }
272
-
273
- export function render(name: string, platform: NodeJS.Platform, limits: Limits, defaultTimeoutMs: number) {
274
- const selected = profile(name, platform, limits, defaultTimeoutMs)
275
- return {
276
- description: renderPrompt(DESCRIPTION, {
277
- intro: selected.intro,
278
- os: platform,
279
- shell: name,
280
- tmp: Global.Path.tmp,
281
- workdirSection: selected.workdirSection,
282
- commandSection: selected.commandSection,
283
- gitCommands: selected.gitCommands,
284
- toolName: ShellID.ToolID,
285
- gitCommandRestriction: selected.gitCommandRestriction,
286
- createPrInstruction: selected.createPrInstruction,
287
- createPrExample: selected.createPrExample,
288
- }),
289
- parameters: parameterSchema(),
290
- }
291
- }
292
-
293
- export * as ShellPrompt from "./prompt"
@@ -1,21 +0,0 @@
1
- ${intro}
2
-
3
- Be aware: OS: ${os}, Shell: ${shell}
4
-
5
- ${workdirSection}
6
-
7
- Use `${tmp}` for temporary work outside the workspace. This directory has already been created, already exists, and is pre-approved for external directory access.
8
-
9
- IMPORTANT: This tool is for terminal operations like git, npm, docker, etc. DO NOT use it for file operations (reading, writing, editing, searching, finding files) - use the specialized tools for this instead.
10
-
11
- ${commandSection}
12
-
13
- # Git and GitHub
14
- - Only commit, amend, push, or create PRs when explicitly requested.
15
- - Before committing, inspect `git status`, `git diff`, and `git log --oneline -10`; stage only intended files and never commit secrets.
16
- - Write a concise commit message that matches the repo style.
17
- - Do not update git config, skip hooks, use interactive `-i`, force-push, or create empty commits unless explicitly requested.
18
- - If a commit fails or hooks reject it, fix the issue and create a new commit; do not amend the failed commit.
19
- - Before creating a PR, inspect status, diff, remote tracking, recent commits, and the diff from the base branch.
20
- - Review all commits included in the PR, not just the latest commit.
21
- - Use `gh` for GitHub tasks, including PRs, issues, checks, and releases; return the PR URL when done.