@dungle-scrubs/tallow 0.9.4 → 0.9.7

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 (212) hide show
  1. package/dist/cli.js +8 -5
  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 -12
  6. package/dist/interactive-mode-patch.d.ts.map +1 -1
  7. package/dist/interactive-mode-patch.js +229 -146
  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/process-cleanup.js +1 -1
  26. package/dist/process-cleanup.js.map +1 -1
  27. package/dist/reset-diagnostics.d.ts +69 -0
  28. package/dist/reset-diagnostics.d.ts.map +1 -0
  29. package/dist/reset-diagnostics.js +41 -0
  30. package/dist/reset-diagnostics.js.map +1 -0
  31. package/dist/sdk.d.ts +7 -23
  32. package/dist/sdk.d.ts.map +1 -1
  33. package/dist/sdk.js +211 -174
  34. package/dist/sdk.js.map +1 -1
  35. package/dist/workspace-transition-interactive.d.ts +1 -0
  36. package/dist/workspace-transition-interactive.d.ts.map +1 -1
  37. package/dist/workspace-transition-interactive.js +8 -18
  38. package/dist/workspace-transition-interactive.js.map +1 -1
  39. package/extensions/__integration__/audit-findings.test.ts +4 -5
  40. package/extensions/_icons/index.ts +2 -4
  41. package/extensions/_shared/__tests__/image-metadata.test.ts +33 -0
  42. package/extensions/_shared/__tests__/shell-policy.test.ts +19 -0
  43. package/extensions/_shared/__tests__/terminal-links.test.ts +18 -0
  44. package/extensions/_shared/image-metadata.ts +99 -0
  45. package/extensions/_shared/inline-preview.ts +1 -1
  46. package/extensions/_shared/shell-policy.ts +121 -1
  47. package/extensions/_shared/terminal-links.ts +22 -0
  48. package/extensions/ask-user-question-tool/index.ts +0 -3
  49. package/extensions/clear/__tests__/clear.test.ts +269 -2
  50. package/extensions/command-expansion/index.ts +9 -3
  51. package/extensions/context-files/index.ts +5 -1
  52. package/extensions/context-fork/__tests__/context-fork.test.ts +94 -1
  53. package/extensions/context-fork/extension.json +1 -1
  54. package/extensions/context-fork/frontmatter-index.ts +6 -1
  55. package/extensions/context-fork/index.ts +32 -0
  56. package/extensions/edit-tool-enhanced/index.ts +2 -1
  57. package/extensions/git-status/__tests__/git-status.test.ts +65 -2
  58. package/extensions/git-status/index.ts +268 -98
  59. package/extensions/hooks/index.ts +33 -11
  60. package/extensions/loop/index.ts +14 -1
  61. package/extensions/lsp/index.ts +64 -13
  62. package/extensions/lsp/package.json +2 -2
  63. package/extensions/minimal-skill-display/index.ts +7 -1
  64. package/extensions/random-spinner/index.ts +7 -642
  65. package/extensions/read-tool-enhanced/index.ts +13 -10
  66. package/extensions/render-stabilizer/__tests__/render-stabilizer.test.ts +2 -3
  67. package/extensions/render-stabilizer/index.ts +6 -6
  68. package/extensions/rewind/__tests__/session-files.test.ts +115 -0
  69. package/extensions/rewind/__tests__/snapshots.test.ts +23 -0
  70. package/extensions/rewind/index.ts +5 -0
  71. package/extensions/rewind/session-files.ts +138 -0
  72. package/extensions/rewind/snapshots.ts +104 -5
  73. package/extensions/skill-commands/index.ts +6 -1
  74. package/extensions/slash-command-bridge/__tests__/slash-command-bridge.test.ts +26 -0
  75. package/extensions/slash-command-bridge/index.ts +14 -2
  76. package/extensions/subagent-tool/model-resolver.ts +274 -7
  77. package/extensions/subagent-tool/schema.ts +1 -2
  78. package/extensions/tasks/commands/register-tasks-extension.ts +9 -9
  79. package/extensions/teams-tool/tools/register-extension.ts +1 -3
  80. package/extensions/teams-tool/tools/teammate-tools.ts +1 -2
  81. package/extensions/web-search-tool/index.ts +2 -1
  82. package/extensions/wezterm-pane-control/index.ts +1 -2
  83. package/extensions/write-tool-enhanced/index.ts +2 -1
  84. package/node_modules/@mariozechner/pi-tui/README.md +56 -34
  85. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts +18 -13
  86. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts.map +1 -1
  87. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js +182 -113
  88. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js.map +1 -1
  89. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js +3 -3
  90. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  91. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts +45 -36
  92. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts.map +1 -1
  93. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js +489 -325
  94. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js.map +1 -1
  95. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts +1 -99
  96. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts.map +1 -1
  97. package/node_modules/@mariozechner/pi-tui/dist/components/image.js +17 -192
  98. package/node_modules/@mariozechner/pi-tui/dist/components/image.js.map +1 -1
  99. package/node_modules/@mariozechner/pi-tui/dist/components/input.d.ts.map +1 -1
  100. package/node_modules/@mariozechner/pi-tui/dist/components/input.js +57 -60
  101. package/node_modules/@mariozechner/pi-tui/dist/components/input.js.map +1 -1
  102. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts +2 -69
  103. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts.map +1 -1
  104. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js +5 -102
  105. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js.map +1 -1
  106. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.d.ts.map +1 -1
  107. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js +111 -53
  108. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js.map +1 -1
  109. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts +19 -1
  110. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts.map +1 -1
  111. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js +78 -67
  112. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js.map +1 -1
  113. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts +1 -25
  114. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  115. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js +13 -50
  116. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js.map +1 -1
  117. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts +8 -10
  118. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts.map +1 -1
  119. package/node_modules/@mariozechner/pi-tui/dist/index.js +6 -9
  120. package/node_modules/@mariozechner/pi-tui/dist/index.js.map +1 -1
  121. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts +108 -238
  122. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts.map +1 -1
  123. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js +108 -365
  124. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js.map +1 -1
  125. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts +33 -48
  126. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts.map +1 -1
  127. package/node_modules/@mariozechner/pi-tui/dist/keys.js +239 -155
  128. package/node_modules/@mariozechner/pi-tui/dist/keys.js.map +1 -1
  129. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts +14 -94
  130. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts.map +1 -1
  131. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js +44 -186
  132. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js.map +1 -1
  133. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts +13 -58
  134. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts.map +1 -1
  135. package/node_modules/@mariozechner/pi-tui/dist/terminal.js +78 -111
  136. package/node_modules/@mariozechner/pi-tui/dist/terminal.js.map +1 -1
  137. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts +24 -110
  138. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts.map +1 -1
  139. package/node_modules/@mariozechner/pi-tui/dist/tui.js +188 -435
  140. package/node_modules/@mariozechner/pi-tui/dist/tui.js.map +1 -1
  141. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts +0 -18
  142. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts.map +1 -1
  143. package/node_modules/@mariozechner/pi-tui/dist/utils.js +251 -119
  144. package/node_modules/@mariozechner/pi-tui/dist/utils.js.map +1 -1
  145. package/node_modules/@mariozechner/pi-tui/package.json +6 -6
  146. package/node_modules/@mariozechner/pi-tui/src/__tests__/__snapshots__/render.test.ts.snap +3 -40
  147. package/node_modules/@mariozechner/pi-tui/src/__tests__/image-component.test.ts +71 -81
  148. package/node_modules/@mariozechner/pi-tui/src/__tests__/render.test.ts +0 -33
  149. package/node_modules/@mariozechner/pi-tui/src/__tests__/terminal-image.test.ts +93 -334
  150. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-render-scheduling.test.ts +1 -1
  151. package/node_modules/@mariozechner/pi-tui/src/__tests__/utils.test.ts +11 -196
  152. package/node_modules/@mariozechner/pi-tui/src/autocomplete.ts +228 -142
  153. package/node_modules/@mariozechner/pi-tui/src/components/cancellable-loader.ts +3 -3
  154. package/node_modules/@mariozechner/pi-tui/src/components/editor.ts +624 -390
  155. package/node_modules/@mariozechner/pi-tui/src/components/image.ts +17 -227
  156. package/node_modules/@mariozechner/pi-tui/src/components/input.ts +71 -63
  157. package/node_modules/@mariozechner/pi-tui/src/components/loader.ts +5 -137
  158. package/node_modules/@mariozechner/pi-tui/src/components/markdown.ts +143 -52
  159. package/node_modules/@mariozechner/pi-tui/src/components/select-list.ts +136 -70
  160. package/node_modules/@mariozechner/pi-tui/src/components/settings-list.ts +12 -51
  161. package/node_modules/@mariozechner/pi-tui/src/index.ts +17 -36
  162. package/node_modules/@mariozechner/pi-tui/src/keybindings.ts +148 -421
  163. package/node_modules/@mariozechner/pi-tui/src/keys.ts +253 -181
  164. package/node_modules/@mariozechner/pi-tui/src/terminal-image.ts +51 -252
  165. package/node_modules/@mariozechner/pi-tui/src/terminal.ts +78 -133
  166. package/node_modules/@mariozechner/pi-tui/src/tui.ts +202 -478
  167. package/node_modules/@mariozechner/pi-tui/src/utils.ts +289 -125
  168. package/node_modules/@mariozechner/pi-tui/tsconfig.build.json +1 -0
  169. package/package.json +13 -13
  170. package/packages/tallow-tui/node_modules/@types/mime-types/README.md +8 -2
  171. package/packages/tallow-tui/node_modules/@types/mime-types/index.d.ts +6 -0
  172. package/packages/tallow-tui/node_modules/@types/mime-types/package.json +9 -3
  173. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup-data.js +18 -0
  174. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup.js +116 -384
  175. package/packages/tallow-tui/node_modules/get-east-asian-width/package.json +5 -4
  176. package/packages/tallow-tui/node_modules/get-east-asian-width/utilities.js +24 -0
  177. package/packages/tallow-tui/node_modules/marked/README.md +5 -4
  178. package/packages/tallow-tui/node_modules/marked/bin/main.js +10 -8
  179. package/packages/tallow-tui/node_modules/marked/bin/marked.js +2 -1
  180. package/packages/tallow-tui/node_modules/marked/lib/marked.d.ts +156 -125
  181. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js +67 -2179
  182. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js.map +3 -3
  183. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js +67 -2201
  184. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js.map +3 -3
  185. package/packages/tallow-tui/node_modules/marked/man/marked.1 +4 -2
  186. package/packages/tallow-tui/node_modules/marked/man/marked.1.md +2 -1
  187. package/packages/tallow-tui/node_modules/marked/package.json +26 -34
  188. package/skills/tallow-expert/SKILL.md +3 -5
  189. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts +0 -32
  190. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts.map +0 -1
  191. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js +0 -46
  192. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js.map +0 -1
  193. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts +0 -52
  194. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts.map +0 -1
  195. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js +0 -89
  196. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js.map +0 -1
  197. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts +0 -14
  198. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts.map +0 -1
  199. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js +0 -55
  200. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js.map +0 -1
  201. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-change-listener.test.ts +0 -121
  202. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-ghost-text.test.ts +0 -112
  203. package/node_modules/@mariozechner/pi-tui/src/__tests__/mouse-events.test.ts +0 -134
  204. package/node_modules/@mariozechner/pi-tui/src/__tests__/settings-list.test.ts +0 -81
  205. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-diff-regression.test.ts +0 -555
  206. package/node_modules/@mariozechner/pi-tui/src/border-styles.ts +0 -60
  207. package/node_modules/@mariozechner/pi-tui/src/components/bordered-box.ts +0 -113
  208. package/node_modules/@mariozechner/pi-tui/src/test-utils/capability-env.ts +0 -56
  209. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs +0 -2211
  210. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs.map +0 -7
  211. package/packages/tallow-tui/node_modules/marked/lib/marked.d.cts +0 -728
  212. package/packages/tallow-tui/node_modules/marked/marked.min.js +0 -69
@@ -1610,11 +1610,40 @@ export default function (pi: ExtensionAPI) {
1610
1610
  }
1611
1611
  });
1612
1612
 
1613
- // Hook into session_switch fires after switching sessions
1614
- pi.on("session_switch", async (event) => {
1613
+ // session_switch/session_fork were removed upstream in favor of session_start
1614
+ // with a reason discriminator. Preserve hook compatibility here.
1615
+ pi.on("session_start", async (event) => {
1616
+ if (event.reason === "resume" || event.reason === "new") {
1617
+ await runHooks("session_switch", {
1618
+ reason: event.reason,
1619
+ previousSessionFile: event.previousSessionFile,
1620
+ });
1621
+ }
1622
+ if (event.reason === "fork") {
1623
+ await runHooks("session_fork", {
1624
+ previousSessionFile: event.previousSessionFile,
1625
+ });
1626
+ }
1627
+ });
1628
+ (
1629
+ pi as unknown as {
1630
+ on: (event: string, handler: (event: Record<string, unknown>) => Promise<void>) => void;
1631
+ }
1632
+ ).on("session_switch", async (event) => {
1615
1633
  await runHooks("session_switch", {
1616
- reason: event.reason,
1617
- previousSessionFile: event.previousSessionFile,
1634
+ reason: String(event.reason ?? "resume"),
1635
+ previousSessionFile:
1636
+ typeof event.previousSessionFile === "string" ? event.previousSessionFile : undefined,
1637
+ });
1638
+ });
1639
+ (
1640
+ pi as unknown as {
1641
+ on: (event: string, handler: (event: Record<string, unknown>) => Promise<void>) => void;
1642
+ }
1643
+ ).on("session_fork", async (event) => {
1644
+ await runHooks("session_fork", {
1645
+ previousSessionFile:
1646
+ typeof event.previousSessionFile === "string" ? event.previousSessionFile : undefined,
1618
1647
  });
1619
1648
  });
1620
1649
 
@@ -1631,13 +1660,6 @@ export default function (pi: ExtensionAPI) {
1631
1660
  }
1632
1661
  });
1633
1662
 
1634
- // Hook into session_fork — fires after forking
1635
- pi.on("session_fork", async (event) => {
1636
- await runHooks("session_fork", {
1637
- previousSessionFile: event.previousSessionFile,
1638
- });
1639
- });
1640
-
1641
1663
  // Hook into session_before_tree — fires before tree navigation (can cancel)
1642
1664
  pi.on("session_before_tree", async (event, ctx) => {
1643
1665
  const result = await runHooks(
@@ -798,7 +798,20 @@ export default function loopExtension(pi: ExtensionAPI): void {
798
798
  stopLoop(ctx, "Loop stopped (session shutdown)");
799
799
  });
800
800
 
801
- pi.on("session_switch", async (_event, ctx) => {
801
+ pi.on("session_start", async (event, ctx) => {
802
+ if (event.reason !== "startup") {
803
+ stopLoop(ctx, `Loop stopped (session ${event.reason})`);
804
+ }
805
+ });
806
+
807
+ (
808
+ pi as unknown as {
809
+ on: (
810
+ event: string,
811
+ handler: (event: unknown, ctx: ExtensionContext) => Promise<void>
812
+ ) => void;
813
+ }
814
+ ).on("session_switch", async (_event, ctx) => {
802
815
  stopLoop(ctx, "Loop stopped (session switch)");
803
816
  });
804
817
  }
@@ -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
  }
@@ -12,6 +12,7 @@ import * as fs from "node:fs";
12
12
  import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
13
13
  import { loadSkills, stripFrontmatter } from "@mariozechner/pi-coding-agent";
14
14
  import { Text } from "@mariozechner/pi-tui";
15
+ import { getTallowHomeDir } from "../_shared/tallow-paths.js";
15
16
  import {
16
17
  DEFAULT_SKILL_ICON,
17
18
  getPackageSkillPaths,
@@ -38,7 +39,12 @@ export default function (pi: ExtensionAPI) {
38
39
 
39
40
  function reloadSkills() {
40
41
  try {
41
- const loaded = loadSkills({ skillPaths: getPackageSkillPaths() });
42
+ const loaded = loadSkills({
43
+ cwd: process.cwd(),
44
+ agentDir: getTallowHomeDir(),
45
+ skillPaths: getPackageSkillPaths(),
46
+ includeDefaults: false,
47
+ });
42
48
  skills = loaded.skills.map((s) => ({
43
49
  name: s.name,
44
50
  filePath: s.filePath,