pi-x-ide 1.15.0 → 1.15.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 (131) hide show
  1. package/CHANGELOG.md +225 -0
  2. package/README.md +2 -3
  3. package/RELEASE.md +213 -0
  4. package/dist/src/pi/commands.js +0 -1
  5. package/dist/src/pi/connection.js +0 -3
  6. package/dist/src/pi/context.js +0 -3
  7. package/dist/src/pi/diagnostics.js +0 -1
  8. package/dist/src/pi/discovery.js +0 -3
  9. package/dist/src/pi/ide-host.js +0 -3
  10. package/dist/src/pi/index.js +0 -1
  11. package/dist/src/pi/install.js +22 -10
  12. package/dist/src/pi/reconnect.js +0 -1
  13. package/dist/src/pi/safety.js +0 -1
  14. package/dist/src/pi/state.js +0 -1
  15. package/dist/src/pi/ui.js +37 -16
  16. package/dist/src/pi/zed.js +5 -45
  17. package/dist/src/shared/config-options.js +0 -1
  18. package/dist/src/shared/config.js +0 -1
  19. package/dist/src/shared/display-width.js +98 -0
  20. package/dist/src/shared/errors.js +0 -3
  21. package/dist/src/shared/format.js +0 -3
  22. package/dist/src/shared/ide-server.js +0 -3
  23. package/dist/src/shared/lock-file.js +0 -1
  24. package/dist/src/shared/paths.js +0 -13
  25. package/dist/src/shared/platform.js +0 -14
  26. package/dist/src/shared/protocol.js +0 -1
  27. package/dist/src/shared/schema.js +0 -1
  28. package/dist/src/shared/ws.js +0 -1
  29. package/package.json +11 -7
  30. package/dist/package.json +0 -68
  31. package/dist/src/nvim/sidecar-schema.d.ts +0 -25
  32. package/dist/src/nvim/sidecar-schema.js +0 -64
  33. package/dist/src/nvim/sidecar-schema.js.map +0 -1
  34. package/dist/src/nvim/sidecar.d.ts +0 -16
  35. package/dist/src/nvim/sidecar.js +0 -174
  36. package/dist/src/nvim/sidecar.js.map +0 -1
  37. package/dist/src/pi/commands.d.ts +0 -20
  38. package/dist/src/pi/commands.js.map +0 -1
  39. package/dist/src/pi/connection.d.ts +0 -42
  40. package/dist/src/pi/connection.js.map +0 -1
  41. package/dist/src/pi/context.d.ts +0 -8
  42. package/dist/src/pi/context.js.map +0 -1
  43. package/dist/src/pi/diagnostics.d.ts +0 -10
  44. package/dist/src/pi/diagnostics.js.map +0 -1
  45. package/dist/src/pi/discovery.d.ts +0 -16
  46. package/dist/src/pi/discovery.js.map +0 -1
  47. package/dist/src/pi/ide-host.d.ts +0 -17
  48. package/dist/src/pi/ide-host.js.map +0 -1
  49. package/dist/src/pi/index.d.ts +0 -4
  50. package/dist/src/pi/index.js.map +0 -1
  51. package/dist/src/pi/install.d.ts +0 -55
  52. package/dist/src/pi/install.js.map +0 -1
  53. package/dist/src/pi/reconnect.d.ts +0 -6
  54. package/dist/src/pi/reconnect.js.map +0 -1
  55. package/dist/src/pi/safety.d.ts +0 -7
  56. package/dist/src/pi/safety.js.map +0 -1
  57. package/dist/src/pi/state.d.ts +0 -31
  58. package/dist/src/pi/state.js.map +0 -1
  59. package/dist/src/pi/ui.d.ts +0 -13
  60. package/dist/src/pi/ui.js.map +0 -1
  61. package/dist/src/pi/zed.d.ts +0 -31
  62. package/dist/src/pi/zed.js.map +0 -1
  63. package/dist/src/shared/config-options.d.ts +0 -50
  64. package/dist/src/shared/config-options.js.map +0 -1
  65. package/dist/src/shared/config.d.ts +0 -10
  66. package/dist/src/shared/config.js.map +0 -1
  67. package/dist/src/shared/errors.d.ts +0 -5
  68. package/dist/src/shared/errors.js.map +0 -1
  69. package/dist/src/shared/format.d.ts +0 -25
  70. package/dist/src/shared/format.js.map +0 -1
  71. package/dist/src/shared/ide-server.d.ts +0 -24
  72. package/dist/src/shared/ide-server.js.map +0 -1
  73. package/dist/src/shared/lock-file.d.ts +0 -17
  74. package/dist/src/shared/lock-file.js.map +0 -1
  75. package/dist/src/shared/paths.d.ts +0 -14
  76. package/dist/src/shared/paths.js.map +0 -1
  77. package/dist/src/shared/platform.d.ts +0 -5
  78. package/dist/src/shared/platform.js.map +0 -1
  79. package/dist/src/shared/protocol.d.ts +0 -138
  80. package/dist/src/shared/protocol.js.map +0 -1
  81. package/dist/src/shared/schema.d.ts +0 -10
  82. package/dist/src/shared/schema.js.map +0 -1
  83. package/dist/src/shared/ws.d.ts +0 -2
  84. package/dist/src/shared/ws.js.map +0 -1
  85. package/dist/test/connection.test.d.ts +0 -1
  86. package/dist/test/connection.test.js +0 -312
  87. package/dist/test/connection.test.js.map +0 -1
  88. package/dist/test/diagnostics.test.d.ts +0 -1
  89. package/dist/test/diagnostics.test.js +0 -168
  90. package/dist/test/diagnostics.test.js.map +0 -1
  91. package/dist/test/ide-server.test.d.ts +0 -1
  92. package/dist/test/ide-server.test.js +0 -50
  93. package/dist/test/ide-server.test.js.map +0 -1
  94. package/dist/test/install.test.d.ts +0 -1
  95. package/dist/test/install.test.js +0 -125
  96. package/dist/test/install.test.js.map +0 -1
  97. package/dist/test/nvim-sidecar.test.d.ts +0 -1
  98. package/dist/test/nvim-sidecar.test.js +0 -149
  99. package/dist/test/nvim-sidecar.test.js.map +0 -1
  100. package/dist/test/shared.test.d.ts +0 -1
  101. package/dist/test/shared.test.js +0 -522
  102. package/dist/test/shared.test.js.map +0 -1
  103. package/dist/test/zed.test.d.ts +0 -1
  104. package/dist/test/zed.test.js +0 -609
  105. package/dist/test/zed.test.js.map +0 -1
  106. package/src/nvim/sidecar-schema.ts +0 -71
  107. package/src/nvim/sidecar.ts +0 -223
  108. package/src/pi/commands.ts +0 -174
  109. package/src/pi/connection.ts +0 -241
  110. package/src/pi/context.ts +0 -105
  111. package/src/pi/diagnostics.ts +0 -115
  112. package/src/pi/discovery.ts +0 -152
  113. package/src/pi/ide-host.ts +0 -82
  114. package/src/pi/index.ts +0 -478
  115. package/src/pi/install.ts +0 -349
  116. package/src/pi/reconnect.ts +0 -33
  117. package/src/pi/safety.ts +0 -38
  118. package/src/pi/state.ts +0 -39
  119. package/src/pi/ui.ts +0 -200
  120. package/src/pi/zed.ts +0 -507
  121. package/src/shared/config-options.ts +0 -63
  122. package/src/shared/config.ts +0 -67
  123. package/src/shared/errors.ts +0 -43
  124. package/src/shared/format.ts +0 -109
  125. package/src/shared/ide-server.ts +0 -183
  126. package/src/shared/lock-file.ts +0 -67
  127. package/src/shared/paths.ts +0 -120
  128. package/src/shared/platform.ts +0 -79
  129. package/src/shared/protocol.ts +0 -161
  130. package/src/shared/schema.ts +0 -189
  131. package/src/shared/ws.ts +0 -8
package/CHANGELOG.md ADDED
@@ -0,0 +1,225 @@
1
+ # Changelog
2
+
3
+ ## [1.15.2](https://github.com/balaenis/pi-x-ide/compare/v1.15.1...v1.15.2) (2026-06-29)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **pi:** resolve package version from package root ([9a5db66](https://github.com/balaenis/pi-x-ide/commit/9a5db66780b85203730825abfd5f95d24b2c3a87))
9
+
10
+ ## [1.15.1](https://github.com/balaenis/pi-x-ide/compare/v1.15.0...v1.15.1) (2026-06-29)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **ui:** use grapheme-aware width for CJK-safe IDE status bar truncation ([9513960](https://github.com/balaenis/pi-x-ide/commit/95139605c36926be7e0ecb1553f823d3639a2b65))
16
+
17
+ ## [1.15.0](https://github.com/balaenis/pi-x-ide/compare/v1.14.0...v1.15.0) (2026-06-23)
18
+
19
+
20
+ ### Features
21
+
22
+ * **context:** wrap editor context in SELECTED_CONTEXT_MARKER for precise detection ([341e957](https://github.com/balaenis/pi-x-ide/commit/341e957e6f9ea32f60a90645f8fafa2e814bf267))
23
+
24
+ ## [1.14.0](https://github.com/balaenis/pi-x-ide/compare/v1.13.1...v1.14.0) (2026-06-22)
25
+
26
+
27
+ ### Features
28
+
29
+ * **jetbrains:** add JetBrains IDE plugin with lock-file, selection-tracking, and WebSocket server ([401e65d](https://github.com/balaenis/pi-x-ide/commit/401e65d50ed00f2803324c954560551f9ebe5c70)), closes [#47](https://github.com/balaenis/pi-x-ide/issues/47)
30
+ * **jetbrains:** add plugin icons, toolbar group, and icon references to actions ([ab5b0c4](https://github.com/balaenis/pi-x-ide/commit/ab5b0c483d004b2cc1d5950acbbdab9af8b9d9b6))
31
+ * **jetbrains:** add signing and publishPlugin support for JetBrains Marketplace ([d86f5e0](https://github.com/balaenis/pi-x-ide/commit/d86f5e0ec2769eeaec5a90b4c117c40d08e4df4e))
32
+ * **jetbrains:** run pi through login shell for proper PATH setup on native Unix and WSL ([7bf2924](https://github.com/balaenis/pi-x-ide/commit/7bf2924918692481c80a78fffd3ccffa67b166d3))
33
+ * **wsl:** add WSL-aware IDE discovery and cross-platform host resolution ([d8bd2e4](https://github.com/balaenis/pi-x-ide/commit/d8bd2e42687a79022a47337149169f03f1034b21))
34
+
35
+ ## [1.13.1](https://github.com/balaenis/pi-x-ide/compare/v1.13.0...v1.13.1) (2026-06-20)
36
+
37
+ ### Bug Fixes
38
+
39
+ - **vscode:** run pi through login shell in tmux terminal ([bee8563](https://github.com/balaenis/pi-x-ide/commit/bee8563bfde5623eb08d1db40260e50ea6ff2d94))
40
+
41
+ ## [1.13.0](https://github.com/balaenis/pi-x-ide/compare/v1.12.0...v1.13.0) (2026-06-19)
42
+
43
+ ### Features
44
+
45
+ - add error containment boundaries across all extension entry points ([064e725](https://github.com/balaenis/pi-x-ide/commit/064e72589f18979e57024166692627de7464edf0))
46
+
47
+ ### Bug Fixes
48
+
49
+ - guard stale extension context callbacks ([316b1c1](https://github.com/balaenis/pi-x-ide/commit/316b1c1cea974229c8bef94a94d105b31cc76796))
50
+ - **pi:** guard stale connection callbacks and extension ctx errors ([094975c](https://github.com/balaenis/pi-x-ide/commit/094975c0081a48fb08ae226f4d8f64b5b38b5084))
51
+
52
+ ## [1.12.0](https://github.com/balaenis/pi-x-ide/compare/v1.11.1...v1.12.0) (2026-06-16)
53
+
54
+ ### Features
55
+
56
+ - **ui:** add animated spinner for connecting state ([ae82969](https://github.com/balaenis/pi-x-ide/commit/ae82969223f79c6ce28315337e846888738649aa))
57
+
58
+ ## [1.11.1](https://github.com/balaenis/pi-x-ide/compare/v1.11.0...v1.11.1) (2026-06-15)
59
+
60
+ ### Bug Fixes
61
+
62
+ - **ci:** Modify the rules guide and trigger once release pr ([f468f5a](https://github.com/balaenis/pi-x-ide/commit/f468f5ab8d61227b1d16faf2719f218a17829ecc))
63
+
64
+ ## [1.11.0](https://github.com/balaenis/pi-x-ide/compare/v1.10.0...v1.11.0) (2026-06-14)
65
+
66
+ ### Features
67
+
68
+ - **diagnostics:** send diagnostic context to one connected Pi client instead of broadcasting ([9681fd4](https://github.com/balaenis/pi-x-ide/commit/9681fd4dcf88aad1a43a5c1d002219a2477c5279))
69
+
70
+ ### Bug Fixes
71
+
72
+ - **diagnostics:** escape primary context line marker to avoid markdown blockquote interpretation ([c2f005e](https://github.com/balaenis/pi-x-ide/commit/c2f005e8cd16c2743838d2e79d0ca0987a2e0a8d))
73
+
74
+ ## [1.10.0](https://github.com/balaenis/pi-x-ide/compare/v1.9.0...v1.10.0) (2026-06-14)
75
+
76
+ ### Features
77
+
78
+ - **diagnostics:** add configurable fix prompt for IDE diagnostics ([ca8621c](https://github.com/balaenis/pi-x-ide/commit/ca8621c6050c37ed921e20efcb4dd38907b1cbb9))
79
+ - **nvim:** verify sidecar binary against GitHub Release SHA-256 digest ([0cc1d9b](https://github.com/balaenis/pi-x-ide/commit/0cc1d9bf1ee5ef8f30d50374ffe68953c242d4ce))
80
+ - **vscode:** add Fix with Pi suggest quick action for diagnostics ([e8dc6d5](https://github.com/balaenis/pi-x-ide/commit/e8dc6d56543afb1d8019bcede0a540cacd440c6d))
81
+ - **vscode:** add Pi: Send diagnostic quick fix action ([d53d72b](https://github.com/balaenis/pi-x-ide/commit/d53d72bb1030f58da7f82136a75b95da2568f28a))
82
+ - **vscode:** hide pi terminal from user initially and show without stealing focus ([15ca612](https://github.com/balaenis/pi-x-ide/commit/15ca6121a4c25a1ed68cb6631372b5a100c77a7b))
83
+
84
+ ### Bug Fixes
85
+
86
+ - **pi:** wrap diagnostic context message with marker on both sides ([592da42](https://github.com/balaenis/pi-x-ide/commit/592da424d16a190c958eac86a70045405e91e936))
87
+
88
+ ## [1.9.0](https://github.com/balaenis/pi-x-ide/compare/v1.8.0...v1.9.0) (2026-06-13)
89
+
90
+ ### Features
91
+
92
+ - **vscode:** add useTmux setting to open Pi through tmux ([93cec4d](https://github.com/balaenis/pi-x-ide/commit/93cec4de9f2f51312db4c3a4672b2f2ffe2ddc61))
93
+
94
+ ### Bug Fixes
95
+
96
+ - **pi/install:** filter out unknown-reason candidates from auto-install ([375449b](https://github.com/balaenis/pi-x-ide/commit/375449b2306d8fa1098a30a0176eff9dc5f602e2))
97
+
98
+ ## [1.8.0](https://github.com/balaenis/pi-x-ide/compare/v1.7.0...v1.8.0) (2026-06-12)
99
+
100
+ ### Features
101
+
102
+ - **attach:** make TUI attach shortcut configurable via PI_X_IDE_ATTACH_SHORTCUT ([20a7e9c](https://github.com/balaenis/pi-x-ide/commit/20a7e9c80644d4a46cdc4459c7394faa7f3e21e5))
103
+ - **ide:** register Ctrl+Alt+K shortcut in Pi TUI for /ide attach ([9803840](https://github.com/balaenis/pi-x-ide/commit/9803840f73bc965dae3e0e0a53f7fccae173e2d7))
104
+
105
+ ## [1.7.0](https://github.com/balaenis/pi-x-ide/compare/v1.6.0...v1.7.0) (2026-06-12)
106
+
107
+ ### Features
108
+
109
+ - **zed:** add configurable poll interval env var and clean up env schema ([04d870e](https://github.com/balaenis/pi-x-ide/commit/04d870e88d756a2faea998e741f8893bc95c3a31))
110
+
111
+ ## [1.6.0](https://github.com/balaenis/pi-x-ide/compare/v1.5.1...v1.6.0) (2026-06-12)
112
+
113
+ ### Features
114
+
115
+ - **mise:** add compile and compile:all tasks ([517e9cd](https://github.com/balaenis/pi-x-ide/commit/517e9cdfe533294f69d71021680b471662104a32))
116
+ - **pi:** limit reconnect attempts and add handshake timeout ([4dc855e](https://github.com/balaenis/pi-x-ide/commit/4dc855e715f1b8bf141a0f055962af53ac581696))
117
+
118
+ ## [1.5.1](https://github.com/balaenis/pi-x-ide/compare/v1.5.0...v1.5.1) (2026-06-11)
119
+
120
+ ### Bug Fixes
121
+
122
+ - **nvim:** capture sidecar download stderr and handle job start failure ([eae98bf](https://github.com/balaenis/pi-x-ide/commit/eae98bfd7cd313f2e57b4c5665255df6ef30d25f))
123
+
124
+ ## [1.5.0](https://github.com/balaenis/pi-x-ide/compare/v1.4.3...v1.5.0) (2026-06-11)
125
+
126
+ ### Features
127
+
128
+ - **nvim:** auto-download sidecar binary from GitHub Releases ([85f8e0a](https://github.com/balaenis/pi-x-ide/commit/85f8e0a395cb12f436bf972628d0306e78ee0bf5))
129
+ - **nvim:** compile sidecar to standalone binary via bun ([c7b0763](https://github.com/balaenis/pi-x-ide/commit/c7b07632a5d5a683c48f7517334bc4033cb8d556))
130
+
131
+ ## [1.4.3](https://github.com/balaenis/pi-x-ide/compare/v1.4.2...v1.4.3) (2026-06-11)
132
+
133
+ ### Bug Fixes
134
+
135
+ - always create a fresh Pi terminal instead of reusing existing ([6ad4438](https://github.com/balaenis/pi-x-ide/commit/6ad4438acdd41ea6464c62a0f0ac2858b0c2f2d7))
136
+
137
+ ## [1.4.2](https://github.com/balaenis/pi-x-ide/compare/v1.4.1...v1.4.2) (2026-06-11)
138
+
139
+ ### Bug Fixes
140
+
141
+ - **pi:** normalize Windows drive letter to uppercase for path matching ([cb4e8ad](https://github.com/balaenis/pi-x-ide/commit/cb4e8adef41d2d80cf2577c3e33879c5aaceb52b))
142
+ - **pi:** skip extensionless search on Windows to avoid matching shell scripts ([bb47f76](https://github.com/balaenis/pi-x-ide/commit/bb47f761c7388f316c10d2a6eae53b839e486322))
143
+ - **pi:** update install notification on connection success or failure ([46a8901](https://github.com/balaenis/pi-x-ide/commit/46a8901fb271c4c4c6931c02f4da33794224f638))
144
+ - update notification messages to reference `/ide` instead of `/ide auto` ([cc27727](https://github.com/balaenis/pi-x-ide/commit/cc277274d1e0fda23e8fbf3e597de9924d2863f5))
145
+
146
+ ## [1.4.1](https://github.com/balaenis/pi-x-ide/compare/v1.4.0...v1.4.1) (2026-06-11)
147
+
148
+ ### Bug Fixes
149
+
150
+ - **docs:** replace lazy.nvim `rtp` with `init` block in install instructions ([1f186ff](https://github.com/balaenis/pi-x-ide/commit/1f186fffa6e050e495fcece71a8ddc185a4f217d))
151
+ - **nvim:** safely stop timer with pcall to prevent errors ([22c422e](https://github.com/balaenis/pi-x-ide/commit/22c422e53057eb2ed7c1b2b343851d751a936632))
152
+
153
+ ## [1.4.0](https://github.com/balaenis/pi-x-ide/compare/v1.3.0...v1.4.0) (2026-06-11)
154
+
155
+ ### Features
156
+
157
+ - **config:** support pi config env overrides ([1aa20c1](https://github.com/balaenis/pi-x-ide/commit/1aa20c1027ec2172c5ca86cdfb4c1fb362d616b1))
158
+
159
+ ## [1.3.0](https://github.com/balaenis/pi-x-ide/compare/v1.2.0...v1.3.0) (2026-06-10)
160
+
161
+ ### Features
162
+
163
+ - **vscode:** cache selection snapshot when terminal tab is active ([785f834](https://github.com/balaenis/pi-x-ide/commit/785f834a5092ec77944e7659ca0efa2c6a94f74b))
164
+ - **zed:** add Zed editor integration with SQLite polling ([90da726](https://github.com/balaenis/pi-x-ide/commit/90da726a4d997446f3d05d0b3fb9a439572bec9f))
165
+ - **zed:** support WSL+Windows path normalization for cross-OS Zed DB access ([963e975](https://github.com/balaenis/pi-x-ide/commit/963e975eb3e4824b8e46015ae324bfcc8c33f6c0))
166
+
167
+ ### Performance Improvements
168
+
169
+ - **zed:** skip DB snapshot when WAL unchanged, checkpoint into snapshot ([76a6dab](https://github.com/balaenis/pi-x-ide/commit/76a6dab7e6af78a534d9f7401901b1df813dd039))
170
+
171
+ ## [1.2.0](https://github.com/balaenis/pi-x-ide/compare/v1.1.0...v1.2.0) (2026-06-10)
172
+
173
+ ### Features
174
+
175
+ - **vscode:** add editor toolbar button to open Pi terminal ([6289dbd](https://github.com/balaenis/pi-x-ide/commit/6289dbdab4ba8414231cc38c883724f7a56efcb5))
176
+
177
+ ### Bug Fixes
178
+
179
+ - **pi:** restrict auto-connect to direct workspace matches ([6899dda](https://github.com/balaenis/pi-x-ide/commit/6899dda792571e2a51402f235d45c7ff3667eeb2))
180
+
181
+ ## [1.1.0](https://github.com/balaenis/pi-x-ide/compare/v1.0.5...v1.1.0) (2026-06-10)
182
+
183
+ ### Features
184
+
185
+ - **pi:** auto-install IDE extension and add /ide install command ([cbaeb11](https://github.com/balaenis/pi-x-ide/commit/cbaeb11dcd897790f68941b84b297505b370dac6)), closes [#6](https://github.com/balaenis/pi-x-ide/issues/6)
186
+
187
+ ## [1.0.5](https://github.com/balaenis/pi-x-ide/compare/v1.0.4...v1.0.5) (2026-06-10)
188
+
189
+ ### Bug Fixes
190
+
191
+ - build vsix error display name is taken ([477a044](https://github.com/balaenis/pi-x-ide/commit/477a0447b7c4fbfa0f582c47c649ea0e5c5983bd))
192
+
193
+ ## [1.0.4](https://github.com/balaenis/pi-x-ide/compare/v1.0.3...v1.0.4) (2026-06-10)
194
+
195
+ ### Bug Fixes
196
+
197
+ - build vsix error ([fab6668](https://github.com/balaenis/pi-x-ide/commit/fab66685ce416fa170a939d74564ca75d480ae50))
198
+
199
+ ## [1.0.3](https://github.com/balaenis/pi-x-ide/compare/v1.0.2...v1.0.3) (2026-06-10)
200
+
201
+ ### Bug Fixes
202
+
203
+ - force release ([6525d08](https://github.com/balaenis/pi-x-ide/commit/6525d083f661d40a7a9506e8cc93db3fd34a6893))
204
+
205
+ ## [1.0.2](https://github.com/balaenis/pi-x-ide/compare/v1.0.1...v1.0.2) (2026-06-10)
206
+
207
+ ### Bug Fixes
208
+
209
+ - release workflows ([30f6b70](https://github.com/balaenis/pi-x-ide/commit/30f6b70492746f376b5b0520aefc44be687603d1))
210
+
211
+ ## [1.0.1](https://github.com/balaenis/pi-x-ide/compare/v1.0.0...v1.0.1) (2026-06-10)
212
+
213
+ ### Bug Fixes
214
+
215
+ - test release pipeline ([2d887b8](https://github.com/balaenis/pi-x-ide/commit/2d887b8a27da44c116e4e6a42c69727c469c873d))
216
+
217
+ ## 1.0.0 (2026-06-09)
218
+
219
+ ### Features
220
+
221
+ - **ci:** add CI/CD workflows and release automation ([a989bfc](https://github.com/balaenis/pi-x-ide/commit/a989bfc2ed39644d9543e4f8a28ece48a0596612))
222
+ - **pi:** add argument completions for ide command ([bc95e88](https://github.com/balaenis/pi-x-ide/commit/bc95e887172ebea5b86263d330c16bad00de3047))
223
+ - **protocol:** broadcast selection_cleared when no active editor ([3fd4c32](https://github.com/balaenis/pi-x-ide/commit/3fd4c328e906b29c83fb61d8dfe6d84ba753b180))
224
+ - **vscode:** add extension icon and branding assets ([efb71b5](https://github.com/balaenis/pi-x-ide/commit/efb71b5852f6ea81097079c8b42f052a2bd67053))
225
+ - **vscode:** send editor selection snapshot on client init ([a268483](https://github.com/balaenis/pi-x-ide/commit/a2684832ba1f3f36ad73cf45a70ae8b76cc61270))
package/README.md CHANGED
@@ -6,7 +6,6 @@ Automatically attaches the currently opened or selected file and text range from
6
6
 
7
7
  <img width="3822" height="2010" alt="pi-x-ide-guide" src="https://github.com/user-attachments/assets/70abe40d-e4ac-4c2e-aca7-80d2e7867945" />
8
8
 
9
-
10
9
  ## Installation & Usage
11
10
 
12
11
  ### Install the Pi Extension Package
@@ -81,7 +80,7 @@ See [Configuration Reference](#neovim-2) for full setup options, commands, and t
81
80
 
82
81
  #### JetBrains IDEs
83
82
 
84
- Download the latest JetBrains plugin ZIP(pi-x-ide-jetbrains-*.zip) from the [latest GitHub Release](https://github.com/balaenis/pi-x-ide/releases/latest), then install it in your JetBrains IDE via **Settings | Plugins | ⚙ | Install Plugin from Disk...**.
83
+ Download the latest JetBrains plugin ZIP(pi-x-ide-jetbrains-\*.zip) from the [latest GitHub Release](https://github.com/balaenis/pi-x-ide/releases/latest), then install it in your JetBrains IDE via **Settings | Plugins | ⚙ | Install Plugin from Disk...**.
85
84
 
86
85
  ### Connect Pi & Verify
87
86
 
@@ -326,6 +325,6 @@ This project uses [Release Please](https://github.com/googleapis/release-please)
326
325
 
327
326
  See [RELEASE.md](RELEASE.md) for the full release guide.
328
327
 
329
- ## Acknowledgments
328
+ ## Reference
330
329
 
331
330
  - [opencode](https://github.com/anomalyco/opencode)
package/RELEASE.md ADDED
@@ -0,0 +1,213 @@
1
+ # Release Process
2
+
3
+ This project uses [Release Please](https://github.com/googleapis/release-please) for automated releases.
4
+
5
+ It follows two release channels:
6
+
7
+ - **Pre-release**: Normal PRs merged to `main` create `x.x.x-next.N` versions published to the `next` npm dist-tag for testing and feedback.
8
+ - **Stable Releases**: Release PRs merged to `main` create computed versions and publish to the `latest` npm dist-tag.
9
+
10
+ You can also trigger manual releases in the following ways:
11
+
12
+ - Push a tag in the format `v{semver}` (e.g. `v1.2.3`)
13
+ - Run the `publish.yml` workflow manually from the GitHub Actions tab and supply a channel `latest` or `next`.
14
+
15
+ ## First Release
16
+
17
+ Before automated releases will work, you need to perform the first release manually.
18
+
19
+ Why:
20
+
21
+ - The first release creates the npm package on npmjs.com.
22
+ - This then allows you to set up trusted publishing with GitHub Actions for future releases.
23
+
24
+ ### Steps
25
+
26
+ 1. Make sure the `package.json` is correct:
27
+ - Is the `version` correct?
28
+ - Is the package name correct?
29
+ - Do you have the right `keywords`?
30
+ - Do you have the right `repository` field?
31
+ - Do you have the right `author` field?
32
+
33
+ 2. Run `bunx npm login` to authenticate with npm.
34
+
35
+ 3. Run `mise run build` to build the package.
36
+
37
+ 4. Run `bun publish --access public` to publish the first version.
38
+
39
+ 5. Go to your npm package settings on npmjs.com and add a trusted publisher for GitHub Actions with:
40
+ - **Organization or user**: Your GitHub username/org
41
+ - **Repository**: Your repository name
42
+ - **Workflow filename**: `publish.yml` (the publish workflow filename)
43
+
44
+ 6. [Restrict token access](https://docs.npmjs.com/trusted-publishers#recommended-restrict-token-access-when-using-trusted-publishers) for maximum security.
45
+
46
+ ## Release Workflow
47
+
48
+ ### Conventional Commits
49
+
50
+ We follow [Conventional Commits](https://www.conventionalcommits.org/) specification:
51
+
52
+ - `fix:` patches
53
+ - `feat:` minor features
54
+ - `feat!:` or `fix!:` breaking changes
55
+
56
+ ### Pre-1.0 Versioning
57
+
58
+ While the version is `0.x.x`, breaking changes bump the **minor** version.
59
+
60
+ ### Release Process
61
+
62
+ 1. Push commits to the `main` branch
63
+ 2. Release Please will:
64
+ - Analyze commits
65
+ - Determine version bump
66
+ - Update `package.json`
67
+ - Update `CHANGELOG.md`
68
+ - Create a release PR
69
+
70
+ 3. Review and merge the Release Please PR
71
+
72
+ ### Commit Message Examples
73
+
74
+ - `fix: resolve IDE connection timeout`
75
+ - `feat: add VS Code workspace trust support`
76
+ - `feat!: change extension activation API`
77
+ - `docs: improve README`
78
+ - `chore: update dependencies`
79
+
80
+ ## Advanced Release Features
81
+
82
+ ### Force a Specific Version
83
+
84
+ Use the `Release-As` footer in your commit message to force a specific version, bypassing conventional commit analysis:
85
+
86
+ ```bash
87
+ git commit --allow-empty -m "chore: release 2.0.0" -m "Release-As: 2.0.0"
88
+ ```
89
+
90
+ This creates a commit:
91
+
92
+ ```
93
+ chore: release 2.0.0
94
+
95
+ Release-As: 2.0.0
96
+ ```
97
+
98
+ Release Please will open a PR for version `2.0.0` regardless of commit message types.
99
+
100
+ ### Update Extra Files During Release
101
+
102
+ If you have version numbers in other files beyond `package.json`, configure them in `release-please-config.json`:
103
+
104
+ ```json
105
+ {
106
+ "extra-files": [
107
+ "src/version.ts",
108
+ {
109
+ "type": "generic",
110
+ "path": "docs/VERSION.md"
111
+ },
112
+ {
113
+ "type": "json",
114
+ "path": "ide-plugins/vscode/package.json",
115
+ "jsonpath": "$.version"
116
+ }
117
+ ]
118
+ }
119
+ ```
120
+
121
+ **Supported file types:**
122
+
123
+ - Generic files (any type)
124
+ - JSON files (with JSONPath)
125
+ - YAML files (with JSONPath)
126
+ - XML files (with XPath)
127
+ - TOML files (with JSONPath)
128
+
129
+ ### Magic Comments for Version Markers
130
+
131
+ Use inline comments to mark where versions should be updated:
132
+
133
+ ```javascript
134
+ // x-release-please-version
135
+ const VERSION = "1.0.0";
136
+
137
+ // x-release-please-major
138
+ const MAJOR = "1";
139
+ ```
140
+
141
+ Or use block markers:
142
+
143
+ ```markdown
144
+ <!-- x-release-please-start-version -->
145
+
146
+ - Current version: 1.0.0
147
+ <!-- x-release-please-end -->
148
+ ```
149
+
150
+ Available markers:
151
+
152
+ - `x-release-please-version` - Full semver
153
+ - `x-release-please-major` - Major number
154
+ - `x-release-please-minor` - Minor number
155
+ - `x-release-please-patch` - Patch number
156
+
157
+ ## Do Not
158
+
159
+ - Manually edit Release Please PRs
160
+ - Manually create GitHub releases
161
+ - Modify version numbers directly
162
+
163
+ ## Publishing
164
+
165
+ Releases are automatically published to npm when the Release Please PR is merged.
166
+
167
+ ### NPM Trusted Publishing
168
+
169
+ This project supports [NPM Trusted Publishing](https://docs.npmjs.com/trusted-publishers) with GitHub Actions. No npm tokens are needed — authentication is handled automatically via OIDC (OpenID Connect).
170
+
171
+ **How it works:**
172
+
173
+ - Each publish uses short-lived, cryptographically-signed tokens specific to your workflow
174
+ - Tokens cannot be extracted or reused
175
+ - No need to manage or rotate long-lived credentials
176
+
177
+ **Setup required:**
178
+
179
+ 1. Go to your npm package settings on npmjs.com
180
+ 2. Add a trusted publisher for GitHub Actions with:
181
+ - **Organization or user**: Your GitHub username/org
182
+ - **Repository**: Your repository name
183
+ - **Workflow filename**: `publish.yml` (the publish workflow filename)
184
+ 3. Optionally, [restrict token access](https://docs.npmjs.com/trusted-publishers#recommended-restrict-token-access-when-using-trusted-publishers) for maximum security
185
+
186
+ When you merge a release PR, the GitHub Actions workflow will automatically:
187
+
188
+ 1. Build the package
189
+ 2. Publish to npm with OIDC authentication
190
+ 3. Create a GitHub release
191
+
192
+ ### Manual Releases
193
+
194
+ You can also manually trigger a release by pushing a tag in the format `v{semver}`:
195
+
196
+ ```bash
197
+ git tag v1.2.3
198
+ git push origin v1.2.3
199
+ ```
200
+
201
+ This will:
202
+
203
+ 1. Trigger the release workflow
204
+ 2. Build and publish to npm
205
+ 3. Create a GitHub release
206
+
207
+ Use manual releases for:
208
+
209
+ - Hot-fixes outside the normal release cycle
210
+ - Bypassing Release Please when needed
211
+ - Direct version control over releases
212
+
213
+ **Learn more:** See the [NPM Trusted Publishing documentation](https://docs.npmjs.com/trusted-publishers) for complete setup and best practices.
@@ -123,4 +123,3 @@ function attachLatest(runtime, ctx) {
123
123
  (0, ui_1.updateIdeUi)(runtime, ctx);
124
124
  ctx.ui.notify(`Attached ${mention}`, "info");
125
125
  }
126
- //# sourceMappingURL=commands.js.map
@@ -4,8 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.IdeConnection = exports.IdeConnectionTimeoutError = exports.IDE_CONNECT_TIMEOUT_MS = void 0;
7
- // ABOUTME: Implements the Pi-side WebSocket client that receives IDE selection notifications.
8
- // ABOUTME: Contains callback dispatch boundaries so IDE messages cannot crash the Pi process.
9
7
  const ws_1 = __importDefault(require("ws"));
10
8
  const config_1 = require("../shared/config");
11
9
  const protocol_1 = require("../shared/protocol");
@@ -208,4 +206,3 @@ function getServerInfo(response) {
208
206
  ide: typeof ide === "string" ? ide : undefined,
209
207
  };
210
208
  }
211
- //# sourceMappingURL=connection.js.map
@@ -18,8 +18,6 @@ function registerContextHandlers(pi, runtime) {
18
18
  return;
19
19
  runtime.turnSelection = runtime.latestSelection;
20
20
  }, ctx));
21
- // Merge the active editor context into the submitted user prompt rather than
22
- // adding a separate extension message.
23
21
  pi.on("message_end", (event, ctx) => (0, safety_1.runPiBoundary)("Pi message_end", runtime, () => {
24
22
  runtime.ctx = ctx;
25
23
  if (!runtime.enabled || !runtime.turnSelection)
@@ -68,4 +66,3 @@ function messageContainsMarker(message) {
68
66
  return (serialized.includes(`<${format_1.SYSTEM_REMINDER_TAG}><${format_1.SELECTED_CONTEXT_MARKER}>`) ||
69
67
  serialized.includes(diagnostics_1.DIAGNOSTIC_CONTEXT_MARKER));
70
68
  }
71
- //# sourceMappingURL=context.js.map
@@ -99,4 +99,3 @@ function fence(text) {
99
99
  const fenceMarker = text.includes("```") ? "````" : "```";
100
100
  return `${fenceMarker}\n${text}\n${fenceMarker}`;
101
101
  }
102
- //# sourceMappingURL=diagnostics.js.map
@@ -3,8 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sortCandidates = sortCandidates;
4
4
  exports.discoverIdeCandidates = discoverIdeCandidates;
5
5
  exports.resolveBestIdeCandidate = resolveBestIdeCandidate;
6
- // ABOUTME: Discovers IDE lock files and ranks candidates for Pi auto-connect.
7
- // ABOUTME: Scans local and WSL-visible Windows lock directories while cleaning stale files safely.
8
6
  const promises_1 = require("node:fs/promises");
9
7
  const node_path_1 = require("node:path");
10
8
  const protocol_1 = require("../shared/protocol");
@@ -119,4 +117,3 @@ async function isDeadWindowsPidLockReachable(lock, options, env) {
119
117
  async function resolveBestIdeCandidate(options) {
120
118
  return (await discoverIdeCandidates(options))[0];
121
119
  }
122
- //# sourceMappingURL=discovery.js.map
@@ -5,8 +5,6 @@ exports.resolveIdeHost = resolveIdeHost;
5
5
  exports.resolveWslDefaultGateway = resolveWslDefaultGateway;
6
6
  exports.parseDefaultGateway = parseDefaultGateway;
7
7
  exports.tcpReachable = tcpReachable;
8
- // ABOUTME: Resolves the host Pi should use when connecting to IDE WebSocket lock files.
9
- // ABOUTME: Handles config overrides and WSL-to-Windows gateway probing for native Windows IDEs.
10
8
  const node_child_process_1 = require("node:child_process");
11
9
  const node_net_1 = require("node:net");
12
10
  const node_util_1 = require("node:util");
@@ -69,4 +67,3 @@ function tcpReachable(host, port, timeoutMs = exports.IDE_HOST_TCP_PROBE_TIMEOUT
69
67
  socket.once("error", () => finish(false));
70
68
  });
71
69
  }
72
- //# sourceMappingURL=ide-host.js.map
@@ -370,4 +370,3 @@ function handleAtMentioned(runtime, params) {
370
370
  ctx.ui.pasteToEditor(text);
371
371
  ctx.ui.notify(`Attached ${text}`, "info");
372
372
  }
373
- //# sourceMappingURL=index.js.map
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.SUPPORTED_IDE_CLI_PROFILES = exports.PI_X_IDE_TARGET_VERSION = exports.PI_X_IDE_AUTO_INSTALL_ENV = exports.PI_X_IDE_EXTENSION_ID = void 0;
7
4
  exports.isAutoInstallEnabled = isAutoInstallEnabled;
@@ -15,15 +12,35 @@ exports.discoverInstallCandidates = discoverInstallCandidates;
15
12
  exports.selectAutoInstallCandidate = selectAutoInstallCandidate;
16
13
  exports.installIdeExtension = installIdeExtension;
17
14
  const node_child_process_1 = require("node:child_process");
15
+ const node_fs_1 = require("node:fs");
18
16
  const promises_1 = require("node:fs/promises");
19
17
  const node_path_1 = require("node:path");
20
18
  const node_util_1 = require("node:util");
21
- const package_json_1 = __importDefault(require("../../package.json"));
22
19
  const config_1 = require("../shared/config");
23
20
  const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
24
21
  exports.PI_X_IDE_EXTENSION_ID = "balaenis.pi-x-ide";
25
22
  exports.PI_X_IDE_AUTO_INSTALL_ENV = "PI_X_IDE_AUTO_INSTALL";
26
- exports.PI_X_IDE_TARGET_VERSION = package_json_1.default.version;
23
+ exports.PI_X_IDE_TARGET_VERSION = readPackageVersion();
24
+ function readPackageVersion(startDir = __dirname) {
25
+ let currentDir = startDir;
26
+ while (true) {
27
+ const packageJsonPath = (0, node_path_1.join)(currentDir, "package.json");
28
+ try {
29
+ const packageJson = JSON.parse((0, node_fs_1.readFileSync)(packageJsonPath, "utf8"));
30
+ if (packageJson.name === "pi-x-ide" && typeof packageJson.version === "string") {
31
+ return packageJson.version;
32
+ }
33
+ }
34
+ catch (error) {
35
+ if (error.code !== "ENOENT")
36
+ throw error;
37
+ }
38
+ const parentDir = (0, node_path_1.dirname)(currentDir);
39
+ if (parentDir === currentDir)
40
+ throw new Error("Unable to locate pi-x-ide package.json");
41
+ currentDir = parentDir;
42
+ }
43
+ }
27
44
  exports.SUPPORTED_IDE_CLI_PROFILES = [
28
45
  { id: "vscode", label: "VS Code", command: "code" },
29
46
  { id: "cursor", label: "Cursor", command: "cursor" },
@@ -130,7 +147,6 @@ async function findExecutable(command, env = process.env) {
130
147
  return candidate;
131
148
  }
132
149
  catch {
133
- // Keep searching PATH.
134
150
  }
135
151
  }
136
152
  return undefined;
@@ -255,9 +271,6 @@ function parsePathExt(env) {
255
271
  .split(";")
256
272
  .map((extension) => extension.trim())
257
273
  .filter(Boolean);
258
- // On Windows, skip extensionless search to avoid matching
259
- // non-executable shell scripts (e.g., VS Code ships both
260
- // `code` (sh) and `code.cmd` — only `.cmd` is executable).
261
274
  if (process.platform !== "win32") {
262
275
  return values.length > 0 ? ["", ...values] : [""];
263
276
  }
@@ -289,4 +302,3 @@ function getExecOutput(error, key) {
289
302
  return value.toString();
290
303
  return "";
291
304
  }
292
- //# sourceMappingURL=install.js.map
@@ -27,4 +27,3 @@ function formatReconnectLimitMessage(candidate) {
27
27
  function reconnectCandidateKey(candidate) {
28
28
  return `${candidate.path}:${candidate.lock.host}:${candidate.lock.port}:${candidate.mtimeMs}`;
29
29
  }
30
- //# sourceMappingURL=reconnect.js.map
@@ -17,4 +17,3 @@ function runPiBoundary(scope, runtime, action, ctx) {
17
17
  async function runPiBoundaryAsync(scope, runtime, action, ctx) {
18
18
  return (0, errors_1.safeRunAsync)(scope, action, (error) => containPiError(runtime, scope, error, ctx));
19
19
  }
20
- //# sourceMappingURL=safety.js.map
@@ -12,4 +12,3 @@ function createRuntime() {
12
12
  sessionGeneration: 0,
13
13
  };
14
14
  }
15
- //# sourceMappingURL=state.js.map