@pi-in-go/pigpen-acp 0.1.0

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 (134) hide show
  1. package/CREDITS.md +23 -0
  2. package/LICENSE +22 -0
  3. package/README.md +110 -0
  4. package/extensions/acp/cmd/pig-acp/e2e_llm_test.go +168 -0
  5. package/extensions/acp/cmd/pig-acp/e2e_test.go +541 -0
  6. package/extensions/acp/cmd/pig-acp/go.mod +6 -0
  7. package/extensions/acp/cmd/pig-acp/internal/acp/agent.go +784 -0
  8. package/extensions/acp/cmd/pig-acp/internal/acp/agent_builtin_test.go +536 -0
  9. package/extensions/acp/cmd/pig-acp/internal/acp/agent_commands_test.go +199 -0
  10. package/extensions/acp/cmd/pig-acp/internal/acp/agent_config_test.go +530 -0
  11. package/extensions/acp/cmd/pig-acp/internal/acp/agent_helpers_test.go +215 -0
  12. package/extensions/acp/cmd/pig-acp/internal/acp/agent_load_test.go +333 -0
  13. package/extensions/acp/cmd/pig-acp/internal/acp/agent_prompt.go +289 -0
  14. package/extensions/acp/cmd/pig-acp/internal/acp/agent_session_test.go +429 -0
  15. package/extensions/acp/cmd/pig-acp/internal/acp/auth.go +61 -0
  16. package/extensions/acp/cmd/pig-acp/internal/acp/bench_test.go +47 -0
  17. package/extensions/acp/cmd/pig-acp/internal/acp/helpers_test.go +421 -0
  18. package/extensions/acp/cmd/pig-acp/internal/acp/main_test.go +28 -0
  19. package/extensions/acp/cmd/pig-acp/internal/acp/mutation_extra_test.go +142 -0
  20. package/extensions/acp/cmd/pig-acp/internal/acp/paths.go +77 -0
  21. package/extensions/acp/cmd/pig-acp/internal/acp/pisessions.go +317 -0
  22. package/extensions/acp/cmd/pig-acp/internal/acp/protocol.go +188 -0
  23. package/extensions/acp/cmd/pig-acp/internal/acp/server.go +218 -0
  24. package/extensions/acp/cmd/pig-acp/internal/acp/server_test.go +386 -0
  25. package/extensions/acp/cmd/pig-acp/internal/acp/session.go +1068 -0
  26. package/extensions/acp/cmd/pig-acp/internal/acp/session_diff_test.go +183 -0
  27. package/extensions/acp/cmd/pig-acp/internal/acp/session_events_test.go +443 -0
  28. package/extensions/acp/cmd/pig-acp/internal/acp/session_extra_test.go +547 -0
  29. package/extensions/acp/cmd/pig-acp/internal/acp/session_usage_test.go +198 -0
  30. package/extensions/acp/cmd/pig-acp/internal/acp/settings.go +79 -0
  31. package/extensions/acp/cmd/pig-acp/internal/acp/slash.go +278 -0
  32. package/extensions/acp/cmd/pig-acp/internal/acp/slash_test.go +128 -0
  33. package/extensions/acp/cmd/pig-acp/internal/acp/startup.go +156 -0
  34. package/extensions/acp/cmd/pig-acp/internal/acp/store.go +118 -0
  35. package/extensions/acp/cmd/pig-acp/internal/acp/store_paths_test.go +466 -0
  36. package/extensions/acp/cmd/pig-acp/internal/acp/translate.go +352 -0
  37. package/extensions/acp/cmd/pig-acp/internal/acp/translate_test.go +105 -0
  38. package/extensions/acp/cmd/pig-acp/internal/acp/twin_test.go +28 -0
  39. package/extensions/acp/cmd/pig-acp/internal/acp/types.go +202 -0
  40. package/extensions/acp/cmd/pig-acp/internal/jsonrpc/bench_test.go +24 -0
  41. package/extensions/acp/cmd/pig-acp/internal/jsonrpc/jsonrpc.go +302 -0
  42. package/extensions/acp/cmd/pig-acp/internal/jsonrpc/jsonrpc_test.go +320 -0
  43. package/extensions/acp/cmd/pig-acp/internal/jsonrpc/twin_test.go +28 -0
  44. package/extensions/acp/cmd/pig-acp/internal/pirpc/kill_unix.go +19 -0
  45. package/extensions/acp/cmd/pig-acp/internal/pirpc/kill_windows.go +11 -0
  46. package/extensions/acp/cmd/pig-acp/internal/pirpc/process.go +530 -0
  47. package/extensions/acp/cmd/pig-acp/internal/pirpc/process_test.go +355 -0
  48. package/extensions/acp/cmd/pig-acp/internal/pirpc/twin_test.go +28 -0
  49. package/extensions/acp/cmd/pig-acp/main.go +177 -0
  50. package/extensions/acp/cmd/pig-acp/main_test.go +213 -0
  51. package/extensions/acp/cmd/pig-acp/sigpipe_unix.go +10 -0
  52. package/extensions/acp/cmd/pig-acp/sigpipe_windows.go +5 -0
  53. package/extensions/acp/cmd/pig-acp/testdata/ask/extension.go +28 -0
  54. package/extensions/acp/cmd/pig-acp/testdata/ask/go.mod +7 -0
  55. package/extensions/acp/cmd/pig-acp/testdata/ask/go.sum +2 -0
  56. package/extensions/acp/cmd/pig-acp/testdata/gate/extension.go +37 -0
  57. package/extensions/acp/cmd/pig-acp/testdata/gate/go.mod +7 -0
  58. package/extensions/acp/cmd/pig-acp/testdata/gate/go.sum +2 -0
  59. package/extensions/acp/cmd/pig-acp/twin_test.go +28 -0
  60. package/extensions/acp/extension.go +63 -0
  61. package/extensions/acp/extension_test.go +111 -0
  62. package/extensions/acp/fakehost_test.go +548 -0
  63. package/extensions/acp/go.mod +6 -0
  64. package/extensions/acp/go.sum +2 -0
  65. package/package.json +41 -0
  66. package/port/PORT.md +147 -0
  67. package/port/interop/package-lock.json +89 -0
  68. package/port/interop/package.json +13 -0
  69. package/port/interop/run.mjs +229 -0
  70. package/port/mutate.mjs +110 -0
  71. package/port/mutation-results.txt +107 -0
  72. package/port/mutations.json +748 -0
  73. package/port/oracle/pi-acp/LICENSE +21 -0
  74. package/port/oracle/pi-acp/README.md +209 -0
  75. package/port/oracle/pi-acp/package.json +65 -0
  76. package/port/oracle/pi-acp/src/acp/agent.ts +1661 -0
  77. package/port/oracle/pi-acp/src/acp/auth-required.ts +37 -0
  78. package/port/oracle/pi-acp/src/acp/auth.ts +59 -0
  79. package/port/oracle/pi-acp/src/acp/paths.ts +15 -0
  80. package/port/oracle/pi-acp/src/acp/pi-commands.ts +59 -0
  81. package/port/oracle/pi-acp/src/acp/pi-sessions.ts +333 -0
  82. package/port/oracle/pi-acp/src/acp/pi-settings.ts +75 -0
  83. package/port/oracle/pi-acp/src/acp/session-store.ts +68 -0
  84. package/port/oracle/pi-acp/src/acp/session.ts +1078 -0
  85. package/port/oracle/pi-acp/src/acp/slash-commands.ts +197 -0
  86. package/port/oracle/pi-acp/src/acp/translate/bash.ts +100 -0
  87. package/port/oracle/pi-acp/src/acp/translate/pi-messages.ts +17 -0
  88. package/port/oracle/pi-acp/src/acp/translate/pi-tools.ts +51 -0
  89. package/port/oracle/pi-acp/src/acp/translate/prompt.ts +71 -0
  90. package/port/oracle/pi-acp/src/index.ts +82 -0
  91. package/port/oracle/pi-acp/src/pi-rpc/command.ts +16 -0
  92. package/port/oracle/pi-acp/src/pi-rpc/process.ts +432 -0
  93. package/port/oracle/pi-acp/test/component/agent-steering-followup-modes.test.ts +143 -0
  94. package/port/oracle/pi-acp/test/component/session-diff.test.ts +214 -0
  95. package/port/oracle/pi-acp/test/component/session-events.test.ts +1102 -0
  96. package/port/oracle/pi-acp/test/component/session-list-and-load.test.ts +129 -0
  97. package/port/oracle/pi-acp/test/component/session-list-custom-session-dir.test.ts +52 -0
  98. package/port/oracle/pi-acp/test/component/session-list-scoped.test.ts +76 -0
  99. package/port/oracle/pi-acp/test/component/session-load-toolresult.test.ts +68 -0
  100. package/port/oracle/pi-acp/test/component/session-queue-cancel.test.ts +43 -0
  101. package/port/oracle/pi-acp/test/component/session-slash-commands.test.ts +37 -0
  102. package/port/oracle/pi-acp/test/component/session-thinking-modes.test.ts +22 -0
  103. package/port/oracle/pi-acp/test/component/session-title-long-session.test.ts +56 -0
  104. package/port/oracle/pi-acp/test/component/session-updatedAt-message-only.test.ts +57 -0
  105. package/port/oracle/pi-acp/test/helpers/fakes.ts +87 -0
  106. package/port/oracle/pi-acp/test/unit/auth-methods-terminal-auth-meta.test.ts +22 -0
  107. package/port/oracle/pi-acp/test/unit/builtin-commands.test.ts +60 -0
  108. package/port/oracle/pi-acp/test/unit/context-usage.test.ts +204 -0
  109. package/port/oracle/pi-acp/test/unit/merge-commands.test.ts +19 -0
  110. package/port/oracle/pi-acp/test/unit/model-thinking-levels.test.ts +268 -0
  111. package/port/oracle/pi-acp/test/unit/new-session-auth-required-when-no-models.test.ts +51 -0
  112. package/port/oracle/pi-acp/test/unit/new-session-pi-not-found.test.ts +26 -0
  113. package/port/oracle/pi-acp/test/unit/new-session-runtime-startup-errors.test.ts +148 -0
  114. package/port/oracle/pi-acp/test/unit/pi-command.test.ts +44 -0
  115. package/port/oracle/pi-acp/test/unit/pi-commands.test.ts +32 -0
  116. package/port/oracle/pi-acp/test/unit/pi-enable-embed-context-flag.test.ts +35 -0
  117. package/port/oracle/pi-acp/test/unit/pi-messages.test.ts +29 -0
  118. package/port/oracle/pi-acp/test/unit/pi-rpc-request-timeout.test.ts +137 -0
  119. package/port/oracle/pi-acp/test/unit/pi-rpc-session-path.test.ts +93 -0
  120. package/port/oracle/pi-acp/test/unit/pi-tools.test.ts +40 -0
  121. package/port/oracle/pi-acp/test/unit/prompt-to-pi-message.test.ts +74 -0
  122. package/port/oracle/pi-acp/test/unit/session-config-options.test.ts +217 -0
  123. package/port/oracle/pi-acp/test/unit/session-delete.test.ts +170 -0
  124. package/port/oracle/pi-acp/test/unit/session-restore.test.ts +239 -0
  125. package/port/oracle/pi-acp/test/unit/slash-commands.test.ts +36 -0
  126. package/port/oracle/pi-acp/test/unit/startup-info-env.test.ts +84 -0
  127. package/port/oracle/pi-acp/test/unit/startup-info-load-session.test.ts +53 -0
  128. package/port/oracle/pi-acp/test/unit/startup-info-project-packages.test.ts +74 -0
  129. package/port/oracle/pi-acp/test/unit/stdout-destroyed-does-not-crash.test.ts +32 -0
  130. package/port/oracle/pi-acp/test/unit/thinking-level-rpc.test.ts +43 -0
  131. package/port/schema/LICENSE +191 -0
  132. package/port/schema/schema.json +8015 -0
  133. package/port/upstream-tests.json +201 -0
  134. package/provenance.json +28 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sergii Kozak
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,209 @@
1
+ # pi-acp
2
+
3
+ ACP ([Agent Client Protocol](https://agentclientprotocol.com/overview/introduction)) adapter for [`pi`](https://github.com/earendil-works/pi) coding agent (fka shitty coding agent).
4
+
5
+ `pi-acp` communicates **ACP JSON-RPC 2.0 over stdio** to an ACP client (e.g. Zed editor) and spawns `pi --mode rpc`, bridging requests/events between the two.
6
+
7
+ ## Status
8
+
9
+ This is an MVP-style adapter intended to be useful today and easy to iterate on. Some ACP features may be not implemented or are not supported (see [Limitations](#limitations)). Development is centered around [Zed](https://zed.dev) editor support, other clients may have varying levels of compatibility.
10
+
11
+ Expect some minor breaking changes.
12
+
13
+ ## Features
14
+
15
+ - Streams assistant output as ACP `agent_message_chunk`
16
+ - Maps pi tool execution to ACP `tool_call` / `tool_call_update`
17
+ - Tool call locations are surfaced when available for ACP clients that support opening the referenced file/context
18
+ - Relative file paths from pi are resolved against the session cwd before being emitted as ACP tool locations, which enables follow-along features in clients like Zed
19
+ - For `edit`, `pi-acp` attempts to infer a 1-based line number from a unique `oldText` match in the pre-edit file snapshot and includes it in the emitted tool location when possible
20
+ - For `edit`, `pi-acp` snapshots the file before the tool runs and emits an ACP **structured diff** (`oldText`/`newText`) on completion when possible
21
+ - Session persistence
22
+ - pi stores its own sessions in `~/.pi/agent/sessions/...`
23
+ - `pi-acp` stores a small mapping file at `~/.pi/pi-acp/session-map.json` so `session/load` can reattach to a previous pi session file
24
+ - Slash commands
25
+ - Loads file-based slash commands compatible with pi’s conventions
26
+ - Adds a small set of built-in commands for headless/editor usage
27
+ - Supports skill commands (if enabled in pi settings, they appear as `/skill:skill-name` in the ACP client)
28
+ - Context window usage
29
+ - Reports pi's real context occupancy (`get_session_stats` → `contextUsage`) to the client as ACP `usage_update` after each turn, on `session/new` and `session/load`, and after a model switch
30
+ - Requires a pi version whose `get_session_stats` response includes `contextUsage`; otherwise no usage is reported
31
+ - Right after compaction pi may not have a trustworthy token count yet, so the client keeps the previous value until the next model response
32
+ - Skills are loaded by pi directly and are available in ACP sessions
33
+ - (Zed) `pi-acp` emits “startup info” block into the session (pi version, context, skills, prompts, extensions - similar to `pi` in the terminal). You can disable it by setting `quietStartup: true` in pi settings (`~/.pi/agent/settings.json` or `<project>/.pi/settings.json`). When `quietStartup` is enabled, `pi-acp` will still emit a 'New version available' message if the installed pi version is outdated.
34
+ - (Zed) Session history is supported in Zed starting with [`v0.225.0`](https://zed.dev/releases/preview/0.225.0). Session loading / history maps to pi's session files. Sessions can be resumed both in `pi` and in the ACP client.
35
+
36
+ ## Prerequisites
37
+
38
+ Make sure pi is installed
39
+
40
+ ```bash
41
+ npm install -g @earendil-works/pi-coding-agent
42
+ ```
43
+
44
+ - Node.js 22+
45
+ - `pi` v0.81.0+ installed and available on your `PATH` (the adapter runs the `pi` executable)
46
+ - Configure `pi` separately for your model providers/API keys
47
+
48
+ ## Install
49
+
50
+ ### Add pi-acp to your ACP client, e.g. [Zed](https://zed.dev/docs/agents/external-agents/)
51
+
52
+ #### Using ACP Registry in Zed or other clients that support it:
53
+
54
+ In Zed launch the registry with `zed: acp registry` command and select `pi ACP` adapter from the list. This will automatically add the agent server configuration to your `settings.json` and keep it up to date:
55
+
56
+ ```json
57
+ "agent_servers": {
58
+ "pi-acp": {
59
+ "type": "registry",
60
+ },
61
+ }
62
+ ```
63
+
64
+ #### Using with `npx` (no global install needed, always loads the latest version):
65
+
66
+ Add the following to your Zed `settings.json`:
67
+
68
+ ```json
69
+ "agent_servers": {
70
+ "pi": {
71
+ "type": "custom",
72
+ "command": "npx",
73
+ "args": ["-y", "pi-acp"],
74
+ "env": {}
75
+ }
76
+ }
77
+ ```
78
+
79
+ #### Global install
80
+
81
+ ```bash
82
+ npm install -g pi-acp
83
+ ```
84
+
85
+ ```json
86
+ "agent_servers": {
87
+ "pi": {
88
+ "type": "custom",
89
+ "command": "pi-acp",
90
+ "args": [],
91
+ "env": {}
92
+ }
93
+ }
94
+ ```
95
+
96
+ #### From source
97
+
98
+ ```bash
99
+ npm install
100
+ npm run build
101
+ ```
102
+
103
+ Point your ACP client to the built `dist/index.js`:
104
+
105
+ ```json
106
+ "agent_servers": {
107
+ "pi": {
108
+ "type": "custom",
109
+ "command": "node",
110
+ "args": ["/path/to/pi-acp/dist/index.js"],
111
+ "env": {}
112
+ }
113
+ }
114
+ ```
115
+
116
+ ### Environment variables
117
+
118
+ - `PI_ACP_ENABLE_EMBEDDED_CONTEXT=true` advertises ACP `promptCapabilities.embeddedContext` support to the client.
119
+ - Default: unset/any other value means `false`.
120
+ - When disabled, compliant ACP clients should avoid sending embedded `resource` blocks. If they send them anyway, `pi-acp` still degrades gracefully by converting them into plain-text prompt context.
121
+
122
+ You can add the environment variable in the Zed settings with:
123
+
124
+ ```json
125
+ "agent_servers": {
126
+ "pi": {
127
+ "type": "custom",
128
+ "command": "node",
129
+ "args": ["/path/to/pi-acp/dist/index.js"],
130
+ "env": {
131
+ "PI_ACP_ENABLE_EMBEDDED_CONTEXT": "true",
132
+ }
133
+ }
134
+ }
135
+ ```
136
+
137
+ ### Slash commands
138
+
139
+ `pi-acp` supports slash commands:
140
+
141
+ #### 1) File-based commands (aka prompts)
142
+
143
+ Loaded from:
144
+
145
+ - User commands: `~/.pi/agent/prompts/**/*.md`
146
+ - Project commands: `<cwd>/.pi/prompts/**/*.md`
147
+
148
+ #### 2) Built-in commands
149
+
150
+ - `/compact [instructions...]` – run pi compaction (optionally with custom instructions)
151
+ - `/autocompact on|off|toggle` – toggle automatic compaction
152
+ - `/export` – export the current session to HTML in the session `cwd`
153
+ - `/session` – show session stats (tokens/messages/cost/session file)
154
+ - `/name <name>` – set session display name
155
+ - `/queue all|one-at-a-time` – set pi queue mode (unstable feature)
156
+ - `/changelog` – print the installed pi changelog (best-effort)
157
+ - `/steering` - maps to `pi` Steering Mode, get/set
158
+ - `/follow-up` - pats to `pi` Follow-up Mode, get/set
159
+
160
+ Other built-in commands:
161
+
162
+ - `/model` - not implemented (use the model selector UI in Zed)
163
+ - `/thinking` - maps to 'mode' selector in Zed
164
+ - `/clear` - not implemented (use ACP client 'new' command)
165
+
166
+ #### 3) Skill commands
167
+
168
+ - Skill commands can be enabled in pi settings and will appear in the slash command list in ACP client as `/skill:skill-name`.
169
+
170
+ **Note**: Slash commands provided by pi extensions are not currently supported.
171
+
172
+ ## Authentication (ACP Registry support)
173
+
174
+ This agent supports **Terminal Auth** for the [ACP Registry](https://agentclientprotocol.com/get-started/registry).
175
+ In Zed, this will show an **Authenticate** banner that launches pi in a terminal.
176
+ Launch pi in a terminal for interactive login/setup:
177
+
178
+ ```bash
179
+ pi-acp --terminal-login
180
+ ```
181
+
182
+ Your ACP client can also invoke this automatically based on the agent's advertised `authMethods`.
183
+
184
+ ## Development
185
+
186
+ ```bash
187
+ npm install
188
+ npm run dev # run from src via tsx
189
+ npm run build
190
+ npm run lint
191
+ npm run test
192
+ ```
193
+
194
+ Project layout:
195
+
196
+ - `src/acp/*` – ACP server + translation layer
197
+ - `src/pi-rpc/*` – pi subprocess wrapper (RPC protocol)
198
+
199
+ ## Limitations
200
+
201
+ - No ACP filesystem delegation (`fs/*`) and no ACP terminal delegation (`terminal/*`). pi reads/writes and executes locally.
202
+ - MCP servers are accepted in ACP params and stored in session state, but not wired through to pi in this adapter. If you use [pi MCP adapter](https://github.com/nicobailon/pi-mcp-adapter) it will be available in the ACP client.
203
+ - Assistant streaming is currently sent as `agent_message_chunk` (no separate thought stream).
204
+ - Queue is implemented client-side and should work like pi's `one-at-a-time`
205
+ - ~~ACP clients don't yet suport session history, but ACP sessions from `pi-acp` can be `/resume`d in pi directly~~
206
+
207
+ ## License
208
+
209
+ MIT (see [LICENSE](LICENSE)).
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "pi-acp",
3
+ "version": "0.0.34",
4
+ "description": "ACP adapter for pi coding agent",
5
+ "license": "MIT",
6
+ "author": "Sergii Kozak <svkozak@gmail.com>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/svkozak/pi-acp.git"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public",
13
+ "provenance": true
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/svkozak/pi-acp/issues"
17
+ },
18
+ "homepage": "https://github.com/svkozak/pi-acp#readme",
19
+ "keywords": [
20
+ "acp",
21
+ "agent-client-protocol",
22
+ "pi-coding-agent",
23
+ "adapter"
24
+ ],
25
+ "engines": {
26
+ "node": ">=20"
27
+ },
28
+ "type": "module",
29
+ "main": "dist/index.js",
30
+ "bin": {
31
+ "pi-acp": "dist/index.js"
32
+ },
33
+ "files": [
34
+ "dist"
35
+ ],
36
+ "scripts": {
37
+ "dev": "tsx src/index.ts",
38
+ "build": "tsup",
39
+ "start": "node dist/index.js",
40
+ "format": "prettier . --write",
41
+ "typecheck": "tsc --noEmit",
42
+ "lint": "eslint .",
43
+ "test": "node --import tsx --test test/**/*.test.ts",
44
+ "smoke": "node scripts/smoke-acp.mjs",
45
+ "prepack": "npm run build",
46
+ "prepublishOnly": "npm run test && npm run build"
47
+ },
48
+ "dependencies": {
49
+ "@agentclientprotocol/sdk": "^0.26.0",
50
+ "cross-spawn": "^7.0.6",
51
+ "zod": "^3.25.0"
52
+ },
53
+ "devDependencies": {
54
+ "@eslint/js": "^9.17.0",
55
+ "@types/cross-spawn": "^6.0.6",
56
+ "@types/node": "^22.0.0",
57
+ "eslint": "^9.17.0",
58
+ "globals": "^15.14.0",
59
+ "prettier": "^3.8.3",
60
+ "tsup": "^8.0.0",
61
+ "tsx": "^4.0.0",
62
+ "typescript": "^5.6.0",
63
+ "typescript-eslint": "^8.18.0"
64
+ }
65
+ }