@dungle-scrubs/tallow 0.9.3 → 0.9.6

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 (207) hide show
  1. package/dist/cli.js +7 -4
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -1
  4. package/dist/config.js +1 -1
  5. package/dist/interactive-mode-patch.d.ts +24 -10
  6. package/dist/interactive-mode-patch.d.ts.map +1 -1
  7. package/dist/interactive-mode-patch.js +285 -148
  8. package/dist/interactive-mode-patch.js.map +1 -1
  9. package/dist/interactive-reset.d.ts +49 -0
  10. package/dist/interactive-reset.d.ts.map +1 -0
  11. package/dist/interactive-reset.js +40 -0
  12. package/dist/interactive-reset.js.map +1 -0
  13. package/dist/pi-tui-editor-patch.d.ts +10 -0
  14. package/dist/pi-tui-editor-patch.d.ts.map +1 -0
  15. package/dist/pi-tui-editor-patch.js +159 -0
  16. package/dist/pi-tui-editor-patch.js.map +1 -0
  17. package/dist/pi-tui-patch.d.ts +2 -0
  18. package/dist/pi-tui-patch.d.ts.map +1 -0
  19. package/dist/pi-tui-patch.js +563 -0
  20. package/dist/pi-tui-patch.js.map +1 -0
  21. package/dist/pi-tui-settings-list-patch.d.ts +11 -0
  22. package/dist/pi-tui-settings-list-patch.d.ts.map +1 -0
  23. package/dist/pi-tui-settings-list-patch.js +38 -0
  24. package/dist/pi-tui-settings-list-patch.js.map +1 -0
  25. package/dist/reset-diagnostics.d.ts +69 -0
  26. package/dist/reset-diagnostics.d.ts.map +1 -0
  27. package/dist/reset-diagnostics.js +41 -0
  28. package/dist/reset-diagnostics.js.map +1 -0
  29. package/dist/sdk.d.ts +5 -21
  30. package/dist/sdk.d.ts.map +1 -1
  31. package/dist/sdk.js +180 -149
  32. package/dist/sdk.js.map +1 -1
  33. package/dist/workspace-transition-interactive.d.ts +1 -0
  34. package/dist/workspace-transition-interactive.d.ts.map +1 -1
  35. package/dist/workspace-transition-interactive.js +7 -17
  36. package/dist/workspace-transition-interactive.js.map +1 -1
  37. package/extensions/__integration__/audit-findings.test.ts +6 -16
  38. package/extensions/__integration__/teams-runtime.test.ts +4 -1
  39. package/extensions/_icons/index.ts +2 -4
  40. package/extensions/_shared/__tests__/image-metadata.test.ts +33 -0
  41. package/extensions/_shared/__tests__/terminal-links.test.ts +18 -0
  42. package/extensions/_shared/image-metadata.ts +99 -0
  43. package/extensions/_shared/inline-preview.ts +1 -1
  44. package/extensions/_shared/pid-registry.ts +0 -1
  45. package/extensions/_shared/terminal-links.ts +22 -0
  46. package/extensions/ask-user-question-tool/index.ts +0 -3
  47. package/extensions/clear/__tests__/clear.test.ts +270 -3
  48. package/extensions/command-expansion/index.ts +1 -1
  49. package/extensions/context-files/index.ts +5 -1
  50. package/extensions/context-fork/__tests__/context-fork.test.ts +94 -1
  51. package/extensions/context-fork/extension.json +1 -1
  52. package/extensions/context-fork/index.ts +32 -0
  53. package/extensions/edit-tool-enhanced/index.ts +2 -1
  54. package/extensions/hooks/index.ts +33 -11
  55. package/extensions/loop/index.ts +14 -1
  56. package/extensions/lsp/index.ts +64 -13
  57. package/extensions/lsp/package.json +2 -2
  58. package/extensions/permissions/__tests__/permissions.test.ts +4 -4
  59. package/extensions/random-spinner/index.ts +7 -642
  60. package/extensions/read-tool-enhanced/index.ts +6 -8
  61. package/extensions/render-stabilizer/__tests__/render-stabilizer.test.ts +4 -5
  62. package/extensions/render-stabilizer/index.ts +6 -6
  63. package/extensions/show-system-prompt/__tests__/show-system-prompt.test.ts +1 -1
  64. package/extensions/slash-command-bridge/__tests__/slash-command-bridge.test.ts +26 -0
  65. package/extensions/slash-command-bridge/index.ts +14 -2
  66. package/extensions/subagent-tool/index.ts +1 -1
  67. package/extensions/subagent-tool/model-resolver.ts +274 -7
  68. package/extensions/tasks/__tests__/state-ui.test.ts +3 -3
  69. package/extensions/tasks/__tests__/widget-subagents.test.ts +2 -2
  70. package/extensions/tasks/commands/register-tasks-extension.ts +10 -10
  71. package/extensions/tasks/state/index.ts +1 -1
  72. package/extensions/tasks/ui/index.ts +2 -7
  73. package/extensions/teams-tool/tools/register-extension.ts +1 -3
  74. package/extensions/web-search-tool/index.ts +2 -1
  75. package/extensions/write-tool-enhanced/__tests__/write-tool-enhanced.test.ts +21 -6
  76. package/extensions/write-tool-enhanced/index.ts +2 -1
  77. package/node_modules/@mariozechner/pi-tui/README.md +56 -34
  78. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts +18 -13
  79. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts.map +1 -1
  80. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js +182 -113
  81. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js.map +1 -1
  82. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js +3 -3
  83. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  84. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts +45 -36
  85. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts.map +1 -1
  86. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js +489 -325
  87. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js.map +1 -1
  88. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts +1 -99
  89. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts.map +1 -1
  90. package/node_modules/@mariozechner/pi-tui/dist/components/image.js +17 -192
  91. package/node_modules/@mariozechner/pi-tui/dist/components/image.js.map +1 -1
  92. package/node_modules/@mariozechner/pi-tui/dist/components/input.d.ts.map +1 -1
  93. package/node_modules/@mariozechner/pi-tui/dist/components/input.js +57 -60
  94. package/node_modules/@mariozechner/pi-tui/dist/components/input.js.map +1 -1
  95. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts +2 -69
  96. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts.map +1 -1
  97. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js +5 -102
  98. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js.map +1 -1
  99. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.d.ts.map +1 -1
  100. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js +111 -53
  101. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js.map +1 -1
  102. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts +19 -1
  103. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts.map +1 -1
  104. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js +78 -67
  105. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js.map +1 -1
  106. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts +0 -2
  107. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  108. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js +12 -23
  109. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js.map +1 -1
  110. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts +8 -10
  111. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts.map +1 -1
  112. package/node_modules/@mariozechner/pi-tui/dist/index.js +6 -9
  113. package/node_modules/@mariozechner/pi-tui/dist/index.js.map +1 -1
  114. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts +108 -238
  115. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts.map +1 -1
  116. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js +108 -365
  117. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js.map +1 -1
  118. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts +33 -48
  119. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts.map +1 -1
  120. package/node_modules/@mariozechner/pi-tui/dist/keys.js +239 -155
  121. package/node_modules/@mariozechner/pi-tui/dist/keys.js.map +1 -1
  122. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts +14 -94
  123. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts.map +1 -1
  124. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js +44 -186
  125. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js.map +1 -1
  126. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts +13 -58
  127. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts.map +1 -1
  128. package/node_modules/@mariozechner/pi-tui/dist/terminal.js +78 -111
  129. package/node_modules/@mariozechner/pi-tui/dist/terminal.js.map +1 -1
  130. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts +24 -110
  131. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts.map +1 -1
  132. package/node_modules/@mariozechner/pi-tui/dist/tui.js +188 -435
  133. package/node_modules/@mariozechner/pi-tui/dist/tui.js.map +1 -1
  134. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts +0 -18
  135. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts.map +1 -1
  136. package/node_modules/@mariozechner/pi-tui/dist/utils.js +251 -119
  137. package/node_modules/@mariozechner/pi-tui/dist/utils.js.map +1 -1
  138. package/node_modules/@mariozechner/pi-tui/package.json +6 -6
  139. package/node_modules/@mariozechner/pi-tui/src/__tests__/__snapshots__/render.test.ts.snap +3 -40
  140. package/node_modules/@mariozechner/pi-tui/src/__tests__/image-component.test.ts +71 -81
  141. package/node_modules/@mariozechner/pi-tui/src/__tests__/render.test.ts +0 -33
  142. package/node_modules/@mariozechner/pi-tui/src/__tests__/terminal-image.test.ts +93 -334
  143. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-render-scheduling.test.ts +1 -1
  144. package/node_modules/@mariozechner/pi-tui/src/__tests__/utils.test.ts +11 -196
  145. package/node_modules/@mariozechner/pi-tui/src/autocomplete.ts +228 -142
  146. package/node_modules/@mariozechner/pi-tui/src/components/cancellable-loader.ts +3 -3
  147. package/node_modules/@mariozechner/pi-tui/src/components/editor.ts +624 -390
  148. package/node_modules/@mariozechner/pi-tui/src/components/image.ts +17 -227
  149. package/node_modules/@mariozechner/pi-tui/src/components/input.ts +71 -63
  150. package/node_modules/@mariozechner/pi-tui/src/components/loader.ts +5 -137
  151. package/node_modules/@mariozechner/pi-tui/src/components/markdown.ts +143 -52
  152. package/node_modules/@mariozechner/pi-tui/src/components/select-list.ts +136 -70
  153. package/node_modules/@mariozechner/pi-tui/src/components/settings-list.ts +11 -23
  154. package/node_modules/@mariozechner/pi-tui/src/index.ts +17 -36
  155. package/node_modules/@mariozechner/pi-tui/src/keybindings.ts +148 -421
  156. package/node_modules/@mariozechner/pi-tui/src/keys.ts +253 -181
  157. package/node_modules/@mariozechner/pi-tui/src/terminal-image.ts +51 -252
  158. package/node_modules/@mariozechner/pi-tui/src/terminal.ts +78 -133
  159. package/node_modules/@mariozechner/pi-tui/src/tui.ts +202 -478
  160. package/node_modules/@mariozechner/pi-tui/src/utils.ts +289 -125
  161. package/node_modules/@mariozechner/pi-tui/tsconfig.build.json +1 -0
  162. package/package.json +13 -13
  163. package/packages/tallow-tui/node_modules/@types/mime-types/README.md +8 -2
  164. package/packages/tallow-tui/node_modules/@types/mime-types/index.d.ts +6 -0
  165. package/packages/tallow-tui/node_modules/@types/mime-types/package.json +9 -3
  166. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup-data.js +18 -0
  167. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup.js +116 -384
  168. package/packages/tallow-tui/node_modules/get-east-asian-width/package.json +5 -4
  169. package/packages/tallow-tui/node_modules/get-east-asian-width/utilities.js +24 -0
  170. package/packages/tallow-tui/node_modules/marked/README.md +5 -4
  171. package/packages/tallow-tui/node_modules/marked/bin/main.js +10 -8
  172. package/packages/tallow-tui/node_modules/marked/bin/marked.js +2 -1
  173. package/packages/tallow-tui/node_modules/marked/lib/marked.d.ts +156 -125
  174. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js +67 -2179
  175. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js.map +3 -3
  176. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js +67 -2201
  177. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js.map +3 -3
  178. package/packages/tallow-tui/node_modules/marked/man/marked.1 +4 -2
  179. package/packages/tallow-tui/node_modules/marked/man/marked.1.md +2 -1
  180. package/packages/tallow-tui/node_modules/marked/package.json +26 -34
  181. package/runtime/model-metadata-overrides.ts +10 -1
  182. package/runtime/pid-schema.ts +26 -6
  183. package/skills/tallow-expert/SKILL.md +1 -3
  184. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts +0 -32
  185. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts.map +0 -1
  186. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js +0 -46
  187. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js.map +0 -1
  188. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts +0 -52
  189. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts.map +0 -1
  190. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js +0 -89
  191. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js.map +0 -1
  192. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts +0 -14
  193. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts.map +0 -1
  194. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js +0 -55
  195. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js.map +0 -1
  196. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-change-listener.test.ts +0 -121
  197. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-ghost-text.test.ts +0 -112
  198. package/node_modules/@mariozechner/pi-tui/src/__tests__/mouse-events.test.ts +0 -134
  199. package/node_modules/@mariozechner/pi-tui/src/__tests__/settings-list.test.ts +0 -49
  200. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-diff-regression.test.ts +0 -555
  201. package/node_modules/@mariozechner/pi-tui/src/border-styles.ts +0 -60
  202. package/node_modules/@mariozechner/pi-tui/src/components/bordered-box.ts +0 -113
  203. package/node_modules/@mariozechner/pi-tui/src/test-utils/capability-env.ts +0 -56
  204. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs +0 -2211
  205. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs.map +0 -7
  206. package/packages/tallow-tui/node_modules/marked/lib/marked.d.cts +0 -728
  207. package/packages/tallow-tui/node_modules/marked/marked.min.js +0 -69
@@ -14,7 +14,7 @@
14
14
  import { type ChildProcess, spawn } from "node:child_process";
15
15
  import * as fs from "node:fs";
16
16
  import * as path from "node:path";
17
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
17
+ import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
18
18
  import { Type } from "@sinclair/typebox";
19
19
  import { StreamMessageReader, StreamMessageWriter } from "vscode-jsonrpc/node";
20
20
  import {
@@ -1088,8 +1088,18 @@ async function sendAndFormat<T>(
1088
1088
  * @param pi - Extension API for registering tools and event handlers
1089
1089
  */
1090
1090
  export default function lspExtension(pi: ExtensionAPI) {
1091
+ /**
1092
+ * Bridge generic tool typing across upstream TypeBox/API changes.
1093
+ *
1094
+ * @param tool - Tool definition object
1095
+ * @returns Nothing
1096
+ */
1097
+ const registerTool = (tool: unknown): void => {
1098
+ pi.registerTool(tool as Parameters<ExtensionAPI["registerTool"]>[0]);
1099
+ };
1100
+
1091
1101
  // Tool: Go to Definition
1092
- pi.registerTool({
1102
+ registerTool({
1093
1103
  name: "lsp_definition",
1094
1104
  label: "lsp_definition",
1095
1105
  description: `Jump to the definition of a symbol at a specific location in a file. Uses Language Server Protocol for precise navigation.
@@ -1105,7 +1115,13 @@ SUPPORTED: TypeScript, Python (ty/pyright), Rust, Swift, PHP (intelephense)`,
1105
1115
  line: Type.Number({ description: "Line number (1-indexed)" }),
1106
1116
  character: Type.Number({ description: "Character/column position (1-indexed)" }),
1107
1117
  }),
1108
- async execute(_toolCallId, params, signal, _onUpdate, ctx) {
1118
+ async execute(
1119
+ _toolCallId: string,
1120
+ params: { file: string; line: number; character: number },
1121
+ signal: AbortSignal | undefined,
1122
+ _onUpdate: unknown,
1123
+ ctx: ExtensionContext
1124
+ ) {
1109
1125
  const setup = await withFileConnection(
1110
1126
  params,
1111
1127
  signal,
@@ -1131,7 +1147,7 @@ SUPPORTED: TypeScript, Python (ty/pyright), Rust, Swift, PHP (intelephense)`,
1131
1147
  });
1132
1148
 
1133
1149
  // Tool: Find References
1134
- pi.registerTool({
1150
+ registerTool({
1135
1151
  name: "lsp_references",
1136
1152
  label: "lsp_references",
1137
1153
  description: `Find all references to a symbol at a specific location. Returns all files and locations where the symbol is used.
@@ -1148,7 +1164,18 @@ WHEN TO USE:
1148
1164
  Type.Boolean({ description: "Include the declaration in results (default: true)" })
1149
1165
  ),
1150
1166
  }),
1151
- async execute(_toolCallId, params, signal, _onUpdate, ctx) {
1167
+ async execute(
1168
+ _toolCallId: string,
1169
+ params: {
1170
+ file: string;
1171
+ line: number;
1172
+ character: number;
1173
+ includeDeclaration?: boolean;
1174
+ },
1175
+ signal: AbortSignal | undefined,
1176
+ _onUpdate: unknown,
1177
+ ctx: ExtensionContext
1178
+ ) {
1152
1179
  const setup = await withFileConnection(
1153
1180
  params,
1154
1181
  signal,
@@ -1177,7 +1204,7 @@ WHEN TO USE:
1177
1204
  });
1178
1205
 
1179
1206
  // Tool: Hover (Type Info)
1180
- pi.registerTool({
1207
+ registerTool({
1181
1208
  name: "lsp_hover",
1182
1209
  label: "lsp_hover",
1183
1210
  description: `Get type information and documentation for a symbol at a specific location.
@@ -1191,7 +1218,13 @@ WHEN TO USE:
1191
1218
  line: Type.Number({ description: "Line number (1-indexed)" }),
1192
1219
  character: Type.Number({ description: "Character/column position (1-indexed)" }),
1193
1220
  }),
1194
- async execute(_toolCallId, params, signal, _onUpdate, ctx) {
1221
+ async execute(
1222
+ _toolCallId: string,
1223
+ params: { file: string; line: number; character: number },
1224
+ signal: AbortSignal | undefined,
1225
+ _onUpdate: unknown,
1226
+ ctx: ExtensionContext
1227
+ ) {
1195
1228
  const setup = await withFileConnection(
1196
1229
  params,
1197
1230
  signal,
@@ -1216,7 +1249,7 @@ WHEN TO USE:
1216
1249
  });
1217
1250
 
1218
1251
  // Tool: Document Symbols
1219
- pi.registerTool({
1252
+ registerTool({
1220
1253
  name: "lsp_symbols",
1221
1254
  label: "lsp_symbols",
1222
1255
  description: `List all symbols (functions, classes, variables, etc.) in a file.
@@ -1228,7 +1261,13 @@ WHEN TO USE:
1228
1261
  parameters: Type.Object({
1229
1262
  file: Type.String({ description: "Path to the file" }),
1230
1263
  }),
1231
- async execute(_toolCallId, params, signal, _onUpdate, ctx) {
1264
+ async execute(
1265
+ _toolCallId: string,
1266
+ params: { file: string },
1267
+ signal: AbortSignal | undefined,
1268
+ _onUpdate: unknown,
1269
+ ctx: ExtensionContext
1270
+ ) {
1232
1271
  const setup = await withFileConnection(
1233
1272
  params,
1234
1273
  signal,
@@ -1250,7 +1289,7 @@ WHEN TO USE:
1250
1289
  });
1251
1290
 
1252
1291
  // Tool: Workspace Symbol Search
1253
- pi.registerTool({
1292
+ registerTool({
1254
1293
  name: "lsp_workspace_symbols",
1255
1294
  label: "lsp_workspace_symbols",
1256
1295
  description: `Search for symbols across the entire workspace/project by name.
@@ -1267,7 +1306,13 @@ WHEN TO USE:
1267
1306
  })
1268
1307
  ),
1269
1308
  }),
1270
- async execute(_toolCallId, params, signal, _onUpdate, _ctx) {
1309
+ async execute(
1310
+ _toolCallId: string,
1311
+ params: { query: string; language?: string },
1312
+ signal: AbortSignal | undefined,
1313
+ _onUpdate: unknown,
1314
+ _ctx: ExtensionContext
1315
+ ) {
1271
1316
  const language = params.language || "typescript";
1272
1317
 
1273
1318
  // For workspace symbols, we need an active connection
@@ -1321,12 +1366,18 @@ WHEN TO USE:
1321
1366
  });
1322
1367
 
1323
1368
  // Tool: Check LSP Status
1324
- pi.registerTool({
1369
+ registerTool({
1325
1370
  name: "lsp_status",
1326
1371
  label: "lsp_status",
1327
1372
  description: "Check which language servers are running and their capabilities.",
1328
1373
  parameters: Type.Object({}),
1329
- async execute(_toolCallId, _params, signal, _onUpdate, ctx) {
1374
+ async execute(
1375
+ _toolCallId: string,
1376
+ _params: Record<string, never>,
1377
+ signal: AbortSignal | undefined,
1378
+ _onUpdate: unknown,
1379
+ ctx: ExtensionContext
1380
+ ) {
1330
1381
  const lines: string[] = ["LSP Server Status:"];
1331
1382
  const startupTimeoutMs = getEffectiveStartupTimeoutMs(ctx.cwd);
1332
1383
 
@@ -3,8 +3,8 @@
3
3
  "version": "1.0.0",
4
4
  "type": "module",
5
5
  "dependencies": {
6
- "@sinclair/typebox": "^0.34.0",
6
+ "@sinclair/typebox": "^0.34.49",
7
7
  "vscode-languageserver-protocol": "^3.17.5",
8
- "vscode-jsonrpc": "^8.2.0"
8
+ "vscode-jsonrpc": "^8.2.1"
9
9
  }
10
10
  }
@@ -5,7 +5,7 @@
5
5
  * other test files in the same Bun worker. Tests cover command/handler
6
6
  * registration and event handler presence without mocking the _shared modules.
7
7
  */
8
- import { afterEach, describe, expect, test } from "bun:test";
8
+ import { describe, expect, test } from "bun:test";
9
9
  import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
10
10
  import { ExtensionHarness } from "../../../test-utils/extension-harness.js";
11
11
  import registerPermissions from "../index.js";
@@ -71,7 +71,7 @@ describe("permissions extension registration", () => {
71
71
  describe("tool_call handler", () => {
72
72
  test("skips bash tool (handled by shell-policy)", async () => {
73
73
  const { handlers } = captureRegistrations();
74
- const result = await handlers.tool_call!(
74
+ const result = await handlers.tool_call?.(
75
75
  { type: "tool_call", toolName: "bash", toolCallId: "t1", input: { command: "ls" } },
76
76
  { cwd: "/tmp", hasUI: false, ui: {} } as unknown as ExtensionContext
77
77
  );
@@ -81,7 +81,7 @@ describe("tool_call handler", () => {
81
81
 
82
82
  test("skips bg_bash tool (handled by shell-policy)", async () => {
83
83
  const { handlers } = captureRegistrations();
84
- const result = await handlers.tool_call!(
84
+ const result = await handlers.tool_call?.(
85
85
  { type: "tool_call", toolName: "bg_bash", toolCallId: "t2", input: { command: "ls" } },
86
86
  { cwd: "/tmp", hasUI: false, ui: {} } as unknown as ExtensionContext
87
87
  );
@@ -92,7 +92,7 @@ describe("tool_call handler", () => {
92
92
  const { handlers } = captureRegistrations();
93
93
  // Session-start hasn't been called yet, so currentCwd is "", and
94
94
  // getPermissions("") returns empty rules → skip
95
- const result = await handlers.tool_call!(
95
+ const result = await handlers.tool_call?.(
96
96
  {
97
97
  type: "tool_call",
98
98
  toolName: "read",