@code-yeongyu/senpi 2026.8.19 → 2026.8.20-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 (713) hide show
  1. package/CHANGELOG.md +133 -0
  2. package/dist/cli-main.js +4 -0
  3. package/dist/cli-main.js.map +1 -1
  4. package/dist/cli.js +31 -3
  5. package/dist/cli.js.map +1 -1
  6. package/dist/compile-cache.d.ts +2 -0
  7. package/dist/compile-cache.d.ts.map +1 -0
  8. package/dist/compile-cache.js +33 -0
  9. package/dist/compile-cache.js.map +1 -0
  10. package/dist/core/agent-session.d.ts +5 -0
  11. package/dist/core/agent-session.d.ts.map +1 -1
  12. package/dist/core/agent-session.js +94 -12
  13. package/dist/core/agent-session.js.map +1 -1
  14. package/dist/core/compaction/compaction.d.ts +6 -0
  15. package/dist/core/compaction/compaction.d.ts.map +1 -1
  16. package/dist/core/compaction/compaction.js +13 -0
  17. package/dist/core/compaction/compaction.js.map +1 -1
  18. package/dist/core/cursor-exec-bridge-session.d.ts +2 -1
  19. package/dist/core/cursor-exec-bridge-session.d.ts.map +1 -1
  20. package/dist/core/cursor-exec-bridge-session.js +5 -2
  21. package/dist/core/cursor-exec-bridge-session.js.map +1 -1
  22. package/dist/core/cursor-exec-bridge.d.ts +9 -1
  23. package/dist/core/cursor-exec-bridge.d.ts.map +1 -1
  24. package/dist/core/cursor-exec-bridge.js +26 -2
  25. package/dist/core/cursor-exec-bridge.js.map +1 -1
  26. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts +1 -1
  27. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.d.ts.map +1 -1
  28. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.js +5 -2
  29. package/dist/core/extensions/builtin/claude-sdk-oauth/custom-tools.js.map +1 -1
  30. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts +6 -4
  31. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.d.ts.map +1 -1
  32. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.js +24 -2
  33. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.js.map +1 -1
  34. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.d.ts +39 -0
  35. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.d.ts.map +1 -0
  36. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.js +31 -0
  37. package/dist/core/extensions/builtin/claude-sdk-oauth/sdk-boundary.lazy.js.map +1 -0
  38. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts +2 -0
  39. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +1 -1
  40. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js +35 -0
  41. package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +1 -1
  42. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.d.ts +1 -1
  43. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.d.ts.map +1 -1
  44. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.js +1 -0
  45. package/dist/core/extensions/builtin/claude-sdk-oauth/session-observability.js.map +1 -1
  46. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts +8 -0
  47. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts.map +1 -1
  48. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js +4 -1
  49. package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js.map +1 -1
  50. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
  51. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js +28 -1
  52. package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js.map +1 -1
  53. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +1 -1
  54. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js +5 -2
  55. package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +1 -1
  56. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  57. package/dist/core/extensions/builtin/compaction/index.js +5 -0
  58. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  59. package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
  60. package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
  61. package/dist/core/extensions/builtin/compaction/log.js +1 -0
  62. package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
  63. package/dist/core/extensions/builtin/compaction/speculative.d.ts +1 -0
  64. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  65. package/dist/core/extensions/builtin/compaction/speculative.js +4 -0
  66. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  67. package/dist/core/extensions/builtin/config-reload/index.d.ts.map +1 -1
  68. package/dist/core/extensions/builtin/config-reload/index.js +13 -10
  69. package/dist/core/extensions/builtin/config-reload/index.js.map +1 -1
  70. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts +8 -1
  71. package/dist/core/extensions/builtin/config-reload/watch-engine.d.ts.map +1 -1
  72. package/dist/core/extensions/builtin/config-reload/watch-engine.js +98 -18
  73. package/dist/core/extensions/builtin/config-reload/watch-engine.js.map +1 -1
  74. package/dist/core/extensions/builtin/config-reload/watch-event-source.d.ts +1 -1
  75. package/dist/core/extensions/builtin/config-reload/watch-event-source.d.ts.map +1 -1
  76. package/dist/core/extensions/builtin/config-reload/watch-event-source.js +7 -2
  77. package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
  78. package/dist/core/extensions/builtin/goal/elapsed-ticker.d.ts.map +1 -1
  79. package/dist/core/extensions/builtin/goal/elapsed-ticker.js +15 -1
  80. package/dist/core/extensions/builtin/goal/elapsed-ticker.js.map +1 -1
  81. package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
  82. package/dist/core/extensions/builtin/goal/index.js +7 -22
  83. package/dist/core/extensions/builtin/goal/index.js.map +1 -1
  84. package/dist/core/extensions/builtin/goal/stale-context.d.ts +9 -0
  85. package/dist/core/extensions/builtin/goal/stale-context.d.ts.map +1 -0
  86. package/dist/core/extensions/builtin/goal/stale-context.js +11 -0
  87. package/dist/core/extensions/builtin/goal/stale-context.js.map +1 -0
  88. package/dist/core/extensions/builtin/goal/wait-ticker.d.ts +8 -0
  89. package/dist/core/extensions/builtin/goal/wait-ticker.d.ts.map +1 -1
  90. package/dist/core/extensions/builtin/goal/wait-ticker.js +37 -3
  91. package/dist/core/extensions/builtin/goal/wait-ticker.js.map +1 -1
  92. package/dist/core/extensions/builtin/mcp/index.d.ts.map +1 -1
  93. package/dist/core/extensions/builtin/mcp/index.js +12 -1
  94. package/dist/core/extensions/builtin/mcp/index.js.map +1 -1
  95. package/dist/core/extensions/builtin/prompt-url-widget.d.ts.map +1 -1
  96. package/dist/core/extensions/builtin/prompt-url-widget.js +7 -15
  97. package/dist/core/extensions/builtin/prompt-url-widget.js.map +1 -1
  98. package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -1
  99. package/dist/core/extensions/builtin/rules/ui/rules-banner.js +21 -25
  100. package/dist/core/extensions/builtin/rules/ui/rules-banner.js.map +1 -1
  101. package/dist/core/extensions/builtin/todotools/index.d.ts.map +1 -1
  102. package/dist/core/extensions/builtin/todotools/index.js +20 -0
  103. package/dist/core/extensions/builtin/todotools/index.js.map +1 -1
  104. package/dist/core/extensions/builtin/todotools/native-todo-mirror.d.ts +3 -0
  105. package/dist/core/extensions/builtin/todotools/native-todo-mirror.d.ts.map +1 -0
  106. package/dist/core/extensions/builtin/todotools/native-todo-mirror.js +22 -0
  107. package/dist/core/extensions/builtin/todotools/native-todo-mirror.js.map +1 -0
  108. package/dist/core/extensions/builtin/webfetch/webfetch/content.lazy.d.ts +17 -0
  109. package/dist/core/extensions/builtin/webfetch/webfetch/content.lazy.d.ts.map +1 -0
  110. package/dist/core/extensions/builtin/webfetch/webfetch/content.lazy.js +22 -0
  111. package/dist/core/extensions/builtin/webfetch/webfetch/content.lazy.js.map +1 -0
  112. package/dist/core/extensions/builtin/webfetch/webfetch/tool.js +3 -3
  113. package/dist/core/extensions/builtin/webfetch/webfetch/tool.js.map +1 -1
  114. package/dist/core/messages.d.ts +9 -2
  115. package/dist/core/messages.d.ts.map +1 -1
  116. package/dist/core/messages.js +13 -18
  117. package/dist/core/messages.js.map +1 -1
  118. package/dist/core/retry-fallback/hint-policy.d.ts +3 -2
  119. package/dist/core/retry-fallback/hint-policy.d.ts.map +1 -1
  120. package/dist/core/retry-fallback/hint-policy.js +19 -8
  121. package/dist/core/retry-fallback/hint-policy.js.map +1 -1
  122. package/dist/core/retry-fallback/settings.js.map +1 -1
  123. package/dist/core/session-discovery.d.ts +16 -0
  124. package/dist/core/session-discovery.d.ts.map +1 -0
  125. package/dist/core/session-discovery.js +101 -0
  126. package/dist/core/session-discovery.js.map +1 -0
  127. package/dist/core/session-manager.d.ts +2 -1
  128. package/dist/core/session-manager.d.ts.map +1 -1
  129. package/dist/core/session-manager.js +4 -170
  130. package/dist/core/session-manager.js.map +1 -1
  131. package/dist/core/session-record.d.ts +14 -0
  132. package/dist/core/session-record.d.ts.map +1 -0
  133. package/dist/core/session-record.js +47 -0
  134. package/dist/core/session-record.js.map +1 -0
  135. package/dist/core/session-summary-cache.d.ts +40 -0
  136. package/dist/core/session-summary-cache.d.ts.map +1 -0
  137. package/dist/core/session-summary-cache.js +79 -0
  138. package/dist/core/session-summary-cache.js.map +1 -0
  139. package/dist/core/session-summary-lru.d.ts +54 -0
  140. package/dist/core/session-summary-lru.d.ts.map +1 -0
  141. package/dist/core/session-summary-lru.js +72 -0
  142. package/dist/core/session-summary-lru.js.map +1 -0
  143. package/dist/core/session-summary.d.ts +29 -0
  144. package/dist/core/session-summary.d.ts.map +1 -0
  145. package/dist/core/session-summary.js +90 -0
  146. package/dist/core/session-summary.js.map +1 -0
  147. package/dist/index.d.ts +1 -0
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +2 -0
  150. package/dist/index.js.map +1 -1
  151. package/dist/inspector-policy.d.ts +6 -0
  152. package/dist/inspector-policy.d.ts.map +1 -1
  153. package/dist/inspector-policy.js +6 -1
  154. package/dist/inspector-policy.js.map +1 -1
  155. package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
  156. package/dist/modes/interactive/components/earendil-announcement.js +8 -8
  157. package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
  158. package/dist/modes/interactive/components/progressive-transcript-container.d.ts +72 -0
  159. package/dist/modes/interactive/components/progressive-transcript-container.d.ts.map +1 -0
  160. package/dist/modes/interactive/components/progressive-transcript-container.js +150 -0
  161. package/dist/modes/interactive/components/progressive-transcript-container.js.map +1 -0
  162. package/dist/modes/interactive/components/status-indicator.d.ts +1 -1
  163. package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
  164. package/dist/modes/interactive/components/status-indicator.js +8 -2
  165. package/dist/modes/interactive/components/status-indicator.js.map +1 -1
  166. package/dist/modes/interactive/interactive-mode.d.ts +4 -0
  167. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  168. package/dist/modes/interactive/interactive-mode.js +127 -65
  169. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  170. package/dist/modes/interactive/split-trailing-assistant-text.d.ts +7 -0
  171. package/dist/modes/interactive/split-trailing-assistant-text.d.ts.map +1 -0
  172. package/dist/modes/interactive/split-trailing-assistant-text.js +19 -0
  173. package/dist/modes/interactive/split-trailing-assistant-text.js.map +1 -0
  174. package/dist/senpi +31 -3
  175. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-cjs/index.js +38 -13
  176. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-es/index.js +1 -1
  177. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-es/schemas/schemas_0.js +34 -12
  178. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/commands/ConverseCommand.d.ts +29 -0
  179. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/commands/ConverseStreamCommand.d.ts +15 -0
  180. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/commands/CountTokensCommand.d.ts +14 -0
  181. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/index.d.ts +1 -1
  182. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/models/models_0.d.ts +119 -1
  183. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/runtimeConfig.browser.d.ts +46 -46
  184. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/runtimeConfig.d.ts +36 -36
  185. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/runtimeConfig.native.d.ts +48 -48
  186. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/runtimeConfig.shared.d.ts +2 -2
  187. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/schemas/schemas_0.d.ts +3 -0
  188. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/ts3.4/index.d.ts +1 -1
  189. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/ts3.4/models/models_0.d.ts +76 -0
  190. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/ts3.4/runtimeConfig.browser.d.ts +70 -72
  191. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/ts3.4/runtimeConfig.d.ts +68 -68
  192. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/ts3.4/runtimeConfig.native.d.ts +86 -88
  193. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/ts3.4/runtimeConfig.shared.d.ts +3 -3
  194. package/node_modules/@aws-sdk/client-bedrock-runtime/dist-types/ts3.4/schemas/schemas_0.d.ts +3 -0
  195. package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +14 -14
  196. package/node_modules/@aws-sdk/core/dist-cjs/submodules/protocols/index.js +1328 -411
  197. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/index.js +8 -5
  198. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsJsonRpcProtocol.js +2 -2
  199. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/AwsRestJsonProtocol.js +3 -3
  200. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/JsonSettings.js +1 -0
  201. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/{JsonCodec.js → codec-v1/JsonCodec.js} +1 -1
  202. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/codec-v1/JsonSettings.js +1 -0
  203. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/{JsonShapeDeserializer.js → codec-v1/JsonShapeDeserializer.js} +6 -6
  204. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/{JsonShapeSerializer.js → codec-v1/JsonShapeSerializer.js} +8 -5
  205. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/codec-v2/JsonBytesStringAdapter.js +103 -0
  206. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/codec-v2/JsonCodec2.js +20 -0
  207. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/{experimental/BufferJsonShapeDeserializer.js → codec-v2/JsonShapeDeserializer2.js} +38 -18
  208. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/{experimental/ByteJsonShapeSerializer.js → codec-v2/JsonShapeSerializer2.js} +107 -71
  209. package/node_modules/@aws-sdk/core/dist-es/submodules/protocols/json/jsonReviver.js +93 -9
  210. package/node_modules/@aws-sdk/core/dist-types/submodules/client/util-endpoints/lib/aws/partitions.d.ts +54 -54
  211. package/node_modules/@aws-sdk/core/dist-types/submodules/client/util-user-agent-browser/defaultUserAgent.d.ts +1 -1
  212. package/node_modules/@aws-sdk/core/dist-types/submodules/client/util-user-agent-browser/defaultUserAgent.native.d.ts +1 -1
  213. package/node_modules/@aws-sdk/core/dist-types/submodules/client/util-user-agent-node/defaultUserAgent.d.ts +1 -1
  214. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/index.d.ts +9 -6
  215. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsJson1_0Protocol.d.ts +3 -2
  216. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsJson1_1Protocol.d.ts +3 -2
  217. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +4 -3
  218. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/AwsRestJsonProtocol.d.ts +5 -3
  219. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/JsonSettings.d.ts +7 -0
  220. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/{JsonCodec.d.ts → codec-v1/JsonCodec.d.ts} +4 -8
  221. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/codec-v1/JsonSettings.d.ts +7 -0
  222. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/{JsonShapeDeserializer.d.ts → codec-v1/JsonShapeDeserializer.d.ts} +3 -2
  223. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/{JsonShapeSerializer.d.ts → codec-v1/JsonShapeSerializer.d.ts} +3 -2
  224. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/codec-v2/JsonBytesStringAdapter.d.ts +51 -0
  225. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/codec-v2/JsonCodec2.d.ts +13 -0
  226. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/{experimental/BufferJsonShapeDeserializer.d.ts → codec-v2/JsonShapeDeserializer2.d.ts} +4 -3
  227. package/node_modules/@aws-sdk/core/dist-types/submodules/protocols/json/{experimental/ByteJsonShapeSerializer.d.ts → codec-v2/JsonShapeSerializer2.d.ts} +19 -16
  228. package/node_modules/@aws-sdk/core/dist-types/ts3.4/api-extractor-type-index.d.ts +4 -7
  229. package/node_modules/@aws-sdk/core/dist-types/ts3.4/index.d.ts +61 -21
  230. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConfigResolver.d.ts +13 -27
  231. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/AccountIdEndpointModeConstants.d.ts +4 -16
  232. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/NodeAccountIdEndpointModeConfigOptions.d.ts +5 -14
  233. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/account-id-endpoint/index.d.ts +16 -5
  234. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/emitWarningIfUnsupportedVersion.d.ts +4 -11
  235. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.browser.d.ts +107 -47
  236. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.d.ts +112 -39
  237. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/index.native.d.ts +107 -48
  238. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/longPollMiddleware.d.ts +13 -14
  239. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-host-header/hostHeaderMiddleware.d.ts +25 -35
  240. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-logger/loggerMiddleware.d.ts +14 -4
  241. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/configuration.d.ts +2 -6
  242. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.browser.d.ts +2 -5
  243. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/getRecursionDetectionPlugin.d.ts +2 -5
  244. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.browser.d.ts +2 -6
  245. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.d.ts +2 -10
  246. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-recursion-detection/recursionDetectionMiddleware.native.d.ts +2 -6
  247. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/check-features.d.ts +16 -20
  248. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/configurations.d.ts +21 -44
  249. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/constants.d.ts +7 -7
  250. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/encode-features.d.ts +2 -5
  251. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/middleware-user-agent/user-agent-middleware.d.ts +18 -18
  252. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/awsRegionConfig.d.ts +8 -11
  253. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/extensions.d.ts +14 -16
  254. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.browser.d.ts +1 -4
  255. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.d.ts +7 -14
  256. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/region-config-resolver/stsRegionDefaultResolver.native.d.ts +1 -4
  257. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setCredentialFeature.d.ts +6 -7
  258. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setFeature.d.ts +6 -12
  259. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/setTokenFeature.d.ts +6 -7
  260. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/aws.d.ts +2 -2
  261. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/isVirtualHostableS3Bucket.d.ts +4 -5
  262. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/parseArn.d.ts +2 -7
  263. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partition.d.ts +28 -38
  264. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/aws/partitions.d.ts +647 -638
  265. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/lib/isIpAddress.d.ts +1 -1
  266. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveDefaultAwsRegionalEndpointsConfig.d.ts +29 -56
  267. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/resolveEndpoint.d.ts +1 -1
  268. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointError.d.ts +1 -1
  269. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/EndpointRuleObject.d.ts +6 -1
  270. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/ErrorRuleObject.d.ts +1 -1
  271. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/RuleSetObject.d.ts +1 -1
  272. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/TreeRuleObject.d.ts +1 -1
  273. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-endpoints/types/shared.d.ts +12 -1
  274. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/configurations.d.ts +4 -7
  275. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/createUserAgentStringParsingProvider.d.ts +7 -14
  276. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.browser.d.ts +7 -2
  277. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.d.ts +15 -27
  278. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-browser/defaultUserAgent.native.d.ts +10 -18
  279. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/crt-availability.d.ts +3 -8
  280. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/defaultUserAgent.d.ts +14 -28
  281. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/getRuntimeUserAgentPair.d.ts +2 -6
  282. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/is-crt-available.d.ts +2 -5
  283. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/client/util-user-agent-node/nodeAppIdConfigOptions.d.ts +4 -13
  284. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4ASigner.d.ts +9 -10
  285. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/AwsSdkSigV4Signer.d.ts +39 -44
  286. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/NODE_AUTH_SCHEME_PREFERENCE_OPTIONS.d.ts +2 -5
  287. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.browser.d.ts +1 -6
  288. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-defaults.d.ts +1 -7
  289. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/clock-skew-node-config.d.ts +4 -13
  290. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/index.d.ts +23 -7
  291. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4AConfig.d.ts +13 -38
  292. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/aws_sdk/resolveAwsSdkSigV4Config.d.ts +57 -133
  293. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.browser.d.ts +32 -11
  294. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/index.d.ts +32 -9
  295. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getArrayForCommaSeparatedString.d.ts +1 -8
  296. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getBearerTokenEnvKey.d.ts +1 -6
  297. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getDateHeader.d.ts +2 -8
  298. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getSkewCorrectedDate.d.ts +1 -8
  299. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/getUpdatedSystemClockOffset.d.ts +6 -26
  300. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/index.d.ts +4 -4
  301. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/httpAuthSchemes/utils/isClockSkewed.d.ts +1 -9
  302. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ConfigurableSerdeContext.d.ts +5 -8
  303. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/ProtocolLib.d.ts +40 -74
  304. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/UnionSerde.d.ts +9 -24
  305. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/cbor/AwsSmithyRpcV2CborProtocol.d.ts +36 -25
  306. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/coercing-serializers.d.ts +3 -18
  307. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/common.d.ts +5 -2
  308. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/index.d.ts +30 -22
  309. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_0Protocol.d.ts +22 -22
  310. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJson1_1Protocol.d.ts +22 -22
  311. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsJsonRpcProtocol.d.ts +50 -29
  312. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/AwsRestJsonProtocol.d.ts +52 -36
  313. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonSettings.d.ts +4 -0
  314. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/awsExpectUnion.d.ts +1 -7
  315. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/codec-v1/JsonCodec.d.ts +11 -0
  316. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/codec-v1/JsonSettings.d.ts +4 -0
  317. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/codec-v1/JsonShapeDeserializer.d.ts +13 -0
  318. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/codec-v1/JsonShapeSerializer.d.ts +18 -0
  319. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/codec-v2/JsonBytesStringAdapter.d.ts +27 -0
  320. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/codec-v2/JsonCodec2.d.ts +9 -0
  321. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/codec-v2/JsonShapeDeserializer2.d.ts +15 -0
  322. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/codec-v2/JsonShapeSerializer2.d.ts +39 -0
  323. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/detectBufferParsing.d.ts +1 -1
  324. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReplacer.d.ts +7 -21
  325. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/jsonReviver.d.ts +7 -15
  326. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/needsReviver.d.ts +2 -11
  327. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/parseJsonBody.d.ts +14 -22
  328. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsEc2QueryProtocol.d.ts +18 -27
  329. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/AwsQueryProtocol.d.ts +57 -49
  330. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QuerySerializerSettings.d.ts +7 -13
  331. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/query/QueryShapeSerializer.d.ts +21 -16
  332. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/writeKey.d.ts +1 -4
  333. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/AwsRestXmlProtocol.d.ts +47 -31
  334. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlCodec.d.ts +17 -14
  335. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeDeserializer.d.ts +15 -20
  336. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/XmlShapeSerializer.d.ts +21 -21
  337. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/parseXmlBody.d.ts +4 -13
  338. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/xml/simpleFormatXml.d.ts +1 -6
  339. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/index.d.ts +3 -3
  340. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-arn-parser/arn.d.ts +14 -32
  341. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/util/util-format-url/format-url.d.ts +4 -2
  342. package/node_modules/@aws-sdk/core/package.json +6 -6
  343. package/node_modules/@aws-sdk/credential-provider-env/package.json +5 -5
  344. package/node_modules/@aws-sdk/credential-provider-http/package.json +7 -7
  345. package/node_modules/@aws-sdk/credential-provider-ini/package.json +13 -13
  346. package/node_modules/@aws-sdk/credential-provider-login/dist-cjs/index.js +35 -28
  347. package/node_modules/@aws-sdk/credential-provider-login/dist-es/LoginCredentialsFetcher.js +35 -28
  348. package/node_modules/@aws-sdk/credential-provider-login/dist-types/LoginCredentialsFetcher.d.ts +1 -0
  349. package/node_modules/@aws-sdk/credential-provider-login/dist-types/ts3.4/LoginCredentialsFetcher.d.ts +1 -0
  350. package/node_modules/@aws-sdk/credential-provider-login/package.json +6 -6
  351. package/node_modules/@aws-sdk/credential-provider-node/package.json +11 -11
  352. package/node_modules/@aws-sdk/credential-provider-process/package.json +5 -5
  353. package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +6 -6
  354. package/node_modules/@aws-sdk/credential-provider-sso/package.json +7 -7
  355. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +6 -6
  356. package/node_modules/@aws-sdk/eventstream-handler-node/package.json +4 -4
  357. package/node_modules/@aws-sdk/middleware-eventstream/package.json +4 -4
  358. package/node_modules/@aws-sdk/middleware-websocket/package.json +7 -7
  359. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  360. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  361. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  362. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  363. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  364. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.browser.d.ts +42 -42
  365. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.d.ts +42 -42
  366. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.native.d.ts +41 -41
  367. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/cognito-identity/runtimeConfig.shared.d.ts +2 -2
  368. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.browser.d.ts +43 -43
  369. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.d.ts +43 -43
  370. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.native.d.ts +42 -42
  371. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/signin/runtimeConfig.shared.d.ts +2 -2
  372. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.browser.d.ts +42 -42
  373. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.d.ts +42 -42
  374. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.native.d.ts +41 -41
  375. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso/runtimeConfig.shared.d.ts +2 -2
  376. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.browser.d.ts +42 -42
  377. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.d.ts +42 -42
  378. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.native.d.ts +41 -41
  379. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sso-oidc/runtimeConfig.shared.d.ts +2 -2
  380. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.browser.d.ts +44 -44
  381. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.d.ts +35 -35
  382. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.native.d.ts +43 -43
  383. package/node_modules/@aws-sdk/nested-clients/dist-types/submodules/sts/runtimeConfig.shared.d.ts +2 -2
  384. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.browser.d.ts +64 -66
  385. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.d.ts +65 -65
  386. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.native.d.ts +68 -70
  387. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/cognito-identity/runtimeConfig.shared.d.ts +3 -3
  388. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.browser.d.ts +67 -69
  389. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.d.ts +66 -66
  390. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.native.d.ts +71 -73
  391. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/signin/runtimeConfig.shared.d.ts +3 -3
  392. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.browser.d.ts +64 -66
  393. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.d.ts +65 -65
  394. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.native.d.ts +68 -70
  395. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso/runtimeConfig.shared.d.ts +3 -3
  396. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.browser.d.ts +64 -66
  397. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.d.ts +65 -65
  398. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.native.d.ts +68 -70
  399. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sso-oidc/runtimeConfig.shared.d.ts +3 -3
  400. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.browser.d.ts +68 -70
  401. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.d.ts +68 -68
  402. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.native.d.ts +72 -74
  403. package/node_modules/@aws-sdk/nested-clients/dist-types/ts3.4/submodules/sts/runtimeConfig.shared.d.ts +3 -3
  404. package/node_modules/@aws-sdk/nested-clients/package.json +8 -8
  405. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +4 -4
  406. package/node_modules/@aws-sdk/token-providers/package.json +6 -6
  407. package/node_modules/@aws-sdk/types/package.json +2 -2
  408. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  409. package/node_modules/@bufbuild/protobuf/README.md +12 -15
  410. package/node_modules/@bufbuild/protobuf/dist/commonjs/create.js +199 -162
  411. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.js +321 -153
  412. package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.js +601 -303
  413. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/message.d.ts +49 -0
  414. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/message.js +157 -0
  415. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.d.ts +27 -1
  416. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.js +80 -56
  417. package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.js +3 -80
  418. package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.js +12 -3
  419. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.d.ts +4 -0
  420. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.js +365 -127
  421. package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.js +393 -159
  422. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.d.ts +3 -1
  423. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.js +40 -8
  424. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.d.ts +37 -19
  425. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.js +281 -85
  426. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.d.ts +1 -1
  427. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.js +4 -1
  428. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.d.ts +19 -2
  429. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.js +47 -13
  430. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.d.ts +4 -4
  431. package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.js +35 -23
  432. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/json.d.ts +28 -0
  433. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/json.js +44 -0
  434. package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.js +12 -12
  435. package/node_modules/@bufbuild/protobuf/dist/esm/create.js +199 -162
  436. package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +321 -153
  437. package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +602 -304
  438. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/message.d.ts +49 -0
  439. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/message.js +152 -0
  440. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.d.ts +27 -1
  441. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js +79 -57
  442. package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js +1 -78
  443. package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +12 -3
  444. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.d.ts +4 -0
  445. package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js +365 -127
  446. package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +393 -159
  447. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.d.ts +3 -1
  448. package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js +40 -8
  449. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +37 -19
  450. package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +283 -87
  451. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.d.ts +1 -1
  452. package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.js +1 -1
  453. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +19 -2
  454. package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +46 -13
  455. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.d.ts +4 -4
  456. package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js +35 -23
  457. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/json.d.ts +28 -0
  458. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/json.js +41 -0
  459. package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +12 -12
  460. package/node_modules/@bufbuild/protobuf/package.json +2 -2
  461. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +24 -0
  462. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  463. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  464. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +38 -3
  465. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  466. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts +8 -1
  467. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
  468. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +25 -1
  469. package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -1
  470. package/node_modules/@earendil-works/pi-agent-core/package.json +6 -6
  471. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +2 -0
  472. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
  473. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +284 -209
  474. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
  475. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts +37 -0
  476. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts.map +1 -0
  477. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js +110 -0
  478. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -0
  479. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-task-args.d.ts +3 -0
  480. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-task-args.d.ts.map +1 -0
  481. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-task-args.js +17 -0
  482. package/node_modules/@earendil-works/pi-ai/dist/api/cursor-task-args.js.map +1 -0
  483. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.d.ts.map +1 -1
  484. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js +27 -11
  485. package/node_modules/@earendil-works/pi-ai/dist/cursor/selection-descriptor.js.map +1 -1
  486. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  487. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  488. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  489. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  490. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  491. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  492. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  493. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  494. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.d.ts.map +1 -1
  495. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js +2 -0
  496. package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/index.js.map +1 -1
  497. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +30 -0
  498. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
  499. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +33 -0
  500. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
  501. package/node_modules/@earendil-works/pi-ai/package.json +8 -8
  502. package/node_modules/@earendil-works/pi-pty/package.json +2 -2
  503. package/node_modules/@earendil-works/pi-telemetry/package.json +2 -2
  504. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  505. package/node_modules/@smithy/core/dist-cjs/submodules/cbor/index.js +1562 -339
  506. package/node_modules/@smithy/core/dist-cjs/submodules/event-streams/index.browser.js +23 -23
  507. package/node_modules/@smithy/core/dist-cjs/submodules/event-streams/index.js +23 -23
  508. package/node_modules/@smithy/core/dist-cjs/submodules/protocols/index.js +17 -13
  509. package/node_modules/@smithy/core/dist-cjs/submodules/schema/index.js +0 -10
  510. package/node_modules/@smithy/core/dist-es/submodules/cbor/CborCodec.js +4 -205
  511. package/node_modules/@smithy/core/dist-es/submodules/cbor/SmithyRpcV2CborProtocol.js +1 -2
  512. package/node_modules/@smithy/core/dist-es/submodules/cbor/cbor-encode.js +1 -1
  513. package/node_modules/@smithy/core/dist-es/submodules/cbor/codec-v1/CborShapeDeserializer.js +113 -0
  514. package/node_modules/@smithy/core/dist-es/submodules/cbor/codec-v1/CborShapeSerializer.js +103 -0
  515. package/node_modules/@smithy/core/dist-es/submodules/cbor/codec-v2/CborShapeDeserializer2.js +621 -0
  516. package/node_modules/@smithy/core/dist-es/submodules/cbor/codec-v2/CborShapeSerializer2.js +602 -0
  517. package/node_modules/@smithy/core/dist-es/submodules/cbor/index.js +5 -1
  518. package/node_modules/@smithy/core/dist-es/submodules/event-streams/EventStreamSerde.js +4 -4
  519. package/node_modules/@smithy/core/dist-es/submodules/event-streams/eventstream-codec/HeaderMarshaller.js +19 -19
  520. package/node_modules/@smithy/core/dist-es/submodules/protocols/RpcProtocol.js +3 -4
  521. package/node_modules/@smithy/core/dist-es/submodules/protocols/middleware-content-length/contentLengthMiddleware.js +6 -4
  522. package/node_modules/@smithy/core/dist-es/submodules/protocols/protocol-http/extensions/httpExtensionConfiguration.js +8 -5
  523. package/node_modules/@smithy/core/dist-es/submodules/schema/schemas/ListSchema.js +0 -2
  524. package/node_modules/@smithy/core/dist-es/submodules/schema/schemas/MapSchema.js +0 -2
  525. package/node_modules/@smithy/core/dist-es/submodules/schema/schemas/OperationSchema.js +0 -2
  526. package/node_modules/@smithy/core/dist-es/submodules/schema/schemas/SimpleSchema.js +0 -2
  527. package/node_modules/@smithy/core/dist-es/submodules/schema/schemas/StructureSchema.js +0 -2
  528. package/node_modules/@smithy/core/dist-types/submodules/cbor/CborCodec.d.ts +5 -27
  529. package/node_modules/@smithy/core/dist-types/submodules/cbor/SmithyRpcV2CborProtocol.d.ts +2 -2
  530. package/node_modules/@smithy/core/dist-types/submodules/cbor/codec-v1/CborShapeDeserializer.d.ts +13 -0
  531. package/node_modules/@smithy/core/dist-types/submodules/cbor/codec-v1/CborShapeSerializer.d.ts +15 -0
  532. package/node_modules/@smithy/core/dist-types/submodules/cbor/codec-v2/CborShapeDeserializer2.d.ts +18 -0
  533. package/node_modules/@smithy/core/dist-types/submodules/cbor/codec-v2/CborShapeSerializer2.d.ts +35 -0
  534. package/node_modules/@smithy/core/dist-types/submodules/cbor/index.d.ts +5 -1
  535. package/node_modules/@smithy/core/dist-types/submodules/client/smithy-client/extensions/defaultExtensionConfiguration.d.ts +1 -7
  536. package/node_modules/@smithy/core/dist-types/submodules/config/config-resolver/regionConfig/checkRegion.d.ts +2 -1
  537. package/node_modules/@smithy/core/dist-types/submodules/endpoints/util-endpoints/utils/evaluateCondition.d.ts +1 -1
  538. package/node_modules/@smithy/core/dist-types/submodules/endpoints/util-endpoints/utils/evaluateConditions.d.ts +1 -1
  539. package/node_modules/@smithy/core/dist-types/submodules/endpoints/util-endpoints/utils/evaluateExpression.d.ts +2 -2
  540. package/node_modules/@smithy/core/dist-types/submodules/endpoints/util-endpoints/utils/evaluateRules.d.ts +2 -2
  541. package/node_modules/@smithy/core/dist-types/submodules/endpoints/util-endpoints/utils/getEndpointProperties.d.ts +2 -2
  542. package/node_modules/@smithy/core/dist-types/submodules/endpoints/util-endpoints/utils/getReferenceValue.d.ts +2 -2
  543. package/node_modules/@smithy/core/dist-types/submodules/event-streams/EventStreamSerde.d.ts +14 -2
  544. package/node_modules/@smithy/core/dist-types/submodules/protocols/protocol-http/extensions/httpExtensionConfiguration.d.ts +7 -2
  545. package/node_modules/@smithy/core/dist-types/submodules/retry/util-retry/retries-2026-config.d.ts +2 -2
  546. package/node_modules/@smithy/core/dist-types/submodules/schema/TypeRegistry.d.ts +1 -1
  547. package/node_modules/@smithy/core/dist-types/submodules/serde/parse-utils.d.ts +5 -5
  548. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/CborCodec.d.ts +5 -27
  549. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/SmithyRpcV2CborProtocol.d.ts +2 -2
  550. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/codec-v1/CborShapeDeserializer.d.ts +13 -0
  551. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/codec-v1/CborShapeSerializer.d.ts +15 -0
  552. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/codec-v2/CborShapeDeserializer2.d.ts +18 -0
  553. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/codec-v2/CborShapeSerializer2.d.ts +35 -0
  554. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/cbor/index.d.ts +5 -1
  555. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/client/smithy-client/extensions/defaultExtensionConfiguration.d.ts +1 -7
  556. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/config/config-resolver/regionConfig/checkRegion.d.ts +2 -1
  557. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/endpoints/util-endpoints/utils/evaluateCondition.d.ts +1 -1
  558. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/endpoints/util-endpoints/utils/evaluateConditions.d.ts +1 -1
  559. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/endpoints/util-endpoints/utils/evaluateExpression.d.ts +2 -2
  560. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/endpoints/util-endpoints/utils/evaluateRules.d.ts +2 -2
  561. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/endpoints/util-endpoints/utils/getEndpointProperties.d.ts +2 -2
  562. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/endpoints/util-endpoints/utils/getReferenceValue.d.ts +2 -2
  563. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/event-streams/EventStreamSerde.d.ts +14 -2
  564. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/protocols/protocol-http/extensions/httpExtensionConfiguration.d.ts +7 -2
  565. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/retry/util-retry/retries-2026-config.d.ts +2 -2
  566. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/schema/TypeRegistry.d.ts +1 -1
  567. package/node_modules/@smithy/core/dist-types/ts3.4/submodules/serde/parse-utils.d.ts +5 -5
  568. package/node_modules/@smithy/core/package.json +4 -11
  569. package/node_modules/@smithy/credential-provider-imds/package.json +4 -12
  570. package/node_modules/@smithy/fetch-http-handler/package.json +5 -13
  571. package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +9 -2
  572. package/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +9 -2
  573. package/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +1 -1
  574. package/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +1 -1
  575. package/node_modules/@smithy/node-http-handler/package.json +5 -13
  576. package/node_modules/@smithy/signature-v4/dist-cjs/index.js +9 -9
  577. package/node_modules/@smithy/signature-v4/dist-es/HeaderFormatter.js +9 -9
  578. package/node_modules/@smithy/signature-v4/package.json +4 -12
  579. package/node_modules/@smithy/types/dist-types/schema/sentinels.d.ts +14 -14
  580. package/node_modules/@smithy/types/package.json +29 -39
  581. package/node_modules/@types/node/README.md +1 -1
  582. package/node_modules/@types/node/child_process.d.ts +0 -1
  583. package/node_modules/@types/node/crypto.d.ts +7 -7
  584. package/node_modules/@types/node/dns/promises.d.ts +5 -5
  585. package/node_modules/@types/node/dns.d.ts +5 -5
  586. package/node_modules/@types/node/fs.d.ts +7 -0
  587. package/node_modules/@types/node/http.d.ts +30 -0
  588. package/node_modules/@types/node/http2.d.ts +4 -4
  589. package/node_modules/@types/node/os.d.ts +30 -30
  590. package/node_modules/@types/node/package.json +2 -2
  591. package/node_modules/@types/node/perf_hooks.d.ts +2 -1
  592. package/node_modules/@types/node/process.d.ts +42 -43
  593. package/node_modules/@types/node/quic.d.ts +1049 -84
  594. package/node_modules/@types/node/sqlite.d.ts +14 -1
  595. package/node_modules/@types/node/stream/iter.d.ts +3 -2
  596. package/node_modules/@types/node/test.d.ts +61 -0
  597. package/node_modules/@types/node/v8.d.ts +20 -23
  598. package/package.json +36 -36
  599. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonCodec.d.ts +0 -19
  600. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeDeserializer.d.ts +0 -13
  601. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/JsonShapeSerializer.d.ts +0 -28
  602. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/BufferJsonShapeDeserializer.d.ts +0 -29
  603. package/node_modules/@aws-sdk/core/dist-types/ts3.4/submodules/protocols/json/experimental/ByteJsonShapeSerializer.d.ts +0 -57
  604. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/LICENSE +0 -201
  605. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/README.md +0 -9
  606. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -840
  607. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
  608. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
  609. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
  610. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/http2/ClientHttp2SessionRef.js +0 -50
  611. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
  612. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -241
  613. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -136
  614. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -46
  615. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -173
  616. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/node-http2.js +0 -2
  617. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/node-https.js +0 -2
  618. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
  619. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
  620. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
  621. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
  622. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
  623. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
  624. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
  625. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
  626. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
  627. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/http2/ClientHttp2SessionRef.d.ts +0 -46
  628. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
  629. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -47
  630. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -46
  631. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -36
  632. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -76
  633. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/node-http2.d.ts +0 -2
  634. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/node-https.d.ts +0 -2
  635. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
  636. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
  637. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
  638. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
  639. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -9
  640. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
  641. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
  642. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
  643. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/http2/ClientHttp2SessionRef.d.ts +0 -46
  644. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
  645. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -47
  646. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -46
  647. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -36
  648. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -76
  649. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2.d.ts +0 -2
  650. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-https.d.ts +0 -2
  651. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
  652. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
  653. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
  654. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
  655. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -9
  656. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
  657. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
  658. package/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler/package.json +0 -64
  659. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/LICENSE +0 -201
  660. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/README.md +0 -9
  661. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -840
  662. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
  663. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
  664. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
  665. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/http2/ClientHttp2SessionRef.js +0 -50
  666. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
  667. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -241
  668. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -136
  669. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -46
  670. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -173
  671. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/node-http2.js +0 -2
  672. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/node-https.js +0 -2
  673. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
  674. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
  675. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
  676. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
  677. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
  678. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
  679. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
  680. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
  681. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
  682. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/http2/ClientHttp2SessionRef.d.ts +0 -46
  683. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
  684. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -47
  685. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -46
  686. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -36
  687. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -76
  688. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/node-http2.d.ts +0 -2
  689. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/node-https.d.ts +0 -2
  690. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
  691. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
  692. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
  693. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
  694. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -9
  695. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
  696. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
  697. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
  698. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/http2/ClientHttp2SessionRef.d.ts +0 -46
  699. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
  700. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -47
  701. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -46
  702. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -36
  703. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -76
  704. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2.d.ts +0 -2
  705. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-https.d.ts +0 -2
  706. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
  707. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
  708. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
  709. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
  710. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -9
  711. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
  712. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
  713. package/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler/package.json +0 -64
@@ -1,3 +1,4 @@
1
+ import { isStaleExtensionContextError } from "./stale-context.js";
1
2
  import { formatGoalWaitLabel } from "./wait-progress.js";
2
3
  /** Footer countdown refresh cadence while a Goal continuation is delayed. */
3
4
  export const GOAL_WAIT_TICK_INTERVAL_MS = 1000;
@@ -50,8 +51,32 @@ export class GoalWaitTicker {
50
51
  this.ctx = undefined;
51
52
  this.kind = undefined;
52
53
  this.lastRenderedStatus = undefined;
53
- if (ctx !== undefined)
54
- this.render(ctx, undefined);
54
+ if (ctx !== undefined) {
55
+ try {
56
+ this.render(ctx, undefined);
57
+ }
58
+ catch (error) {
59
+ // A stale ctx cannot clear its own footer status; dropping it is enough.
60
+ if (!isStaleExtensionContextError(error))
61
+ throw error;
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Drop the interval and retained ctx without a final render. Used when a tick
67
+ * discovers the ctx was retired by a session replacement or reload: every
68
+ * render against it throws from now on, and a ticker that keeps ticking dead
69
+ * renders freezes the footer forever without crashing. The next sync() with a
70
+ * live ctx re-arms everything.
71
+ */
72
+ retire() {
73
+ if (this.intervalId !== undefined) {
74
+ clearInterval(this.intervalId);
75
+ this.intervalId = undefined;
76
+ }
77
+ this.ctx = undefined;
78
+ this.kind = undefined;
79
+ this.lastRenderedStatus = undefined;
55
80
  }
56
81
  tick() {
57
82
  if (this.ctx === undefined || this.kind === undefined)
@@ -65,7 +90,16 @@ export class GoalWaitTicker {
65
90
  if (status === this.lastRenderedStatus)
66
91
  return;
67
92
  this.lastRenderedStatus = status;
68
- this.render(this.ctx, status);
93
+ try {
94
+ this.render(this.ctx, status);
95
+ }
96
+ catch (error) {
97
+ if (isStaleExtensionContextError(error)) {
98
+ this.retire();
99
+ return;
100
+ }
101
+ throw error;
102
+ }
69
103
  }
70
104
  }
71
105
  //# sourceMappingURL=wait-ticker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait-ticker.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/wait-ticker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionContext } from \"../../types.ts\";\nimport type { ResumptionChannelCounts } from \"./monitor-continuation-types.ts\";\nimport { formatGoalWaitLabel, type GoalWaitKind, type GoalWaitLabelInput } from \"./wait-progress.ts\";\n\n/** Footer countdown refresh cadence while a Goal continuation is delayed. */\nexport const GOAL_WAIT_TICK_INTERVAL_MS = 1000;\nexport const GOAL_WAIT_STATUS_KEY = \"goal-wait\";\n\n/** Receives the freshly formatted footer status text (undefined clears the status). */\nexport type GoalWaitRender = (ctx: ExtensionContext, status: string | undefined) => void;\n\nexport interface GoalWaitTickerOptions {\n\treadonly render: GoalWaitRender;\n\t/** Injectable clock for tests; defaults to Date.now. */\n\treadonly now?: () => number;\n}\n\n/**\n * Drives a once-per-second footer countdown while a Goal continuation timer is\n * armed. Mirrors the existing GoalElapsedTicker and MonitorStatusTicker: the\n * interval is unref'd and unchanged visible labels are not rendered again.\n */\nexport class GoalWaitTicker {\n\tprivate readonly render: GoalWaitRender;\n\tprivate readonly now: () => number;\n\tprivate intervalId: NodeJS.Timeout | undefined;\n\tprivate ctx: ExtensionContext | undefined;\n\tprivate kind: GoalWaitKind | undefined;\n\tprivate dueAtMs = 0;\n\tprivate totalMs = 0;\n\tprivate channelCounts: ResumptionChannelCounts = {};\n\tprivate lastRenderedStatus: string | undefined;\n\n\tconstructor(options: GoalWaitTickerOptions) {\n\t\tthis.render = options.render;\n\t\tthis.now = options.now ?? Date.now;\n\t}\n\n\tget running(): boolean {\n\t\treturn this.intervalId !== undefined;\n\t}\n\n\t/** Render the current wait immediately and keep it live until stopped. */\n\tsync(ctx: ExtensionContext, input: GoalWaitLabelInput): void {\n\t\tthis.ctx = ctx;\n\t\tthis.kind = input.kind;\n\t\tthis.dueAtMs = this.now() + Math.max(0, input.remainingMs);\n\t\tthis.totalMs = input.totalMs;\n\t\tthis.channelCounts = { ...input.channelCounts };\n\t\tthis.lastRenderedStatus = undefined;\n\t\tthis.tick();\n\t\tif (this.intervalId !== undefined) return;\n\t\tconst handle = setInterval(() => this.tick(), GOAL_WAIT_TICK_INTERVAL_MS);\n\t\thandle.unref();\n\t\tthis.intervalId = handle;\n\t}\n\n\t/** Refresh channel wording without changing the countdown deadline. */\n\tsetChannelCounts(channelCounts: ResumptionChannelCounts): void {\n\t\tif (this.ctx === undefined || this.kind !== \"monitor\") return;\n\t\tthis.channelCounts = { ...channelCounts };\n\t\tthis.tick();\n\t}\n\n\t/** Stop ticking, clear the footer segment, and drop the retained context. */\n\tstop(): void {\n\t\tif (this.intervalId !== undefined) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = undefined;\n\t\t}\n\t\tconst ctx = this.ctx;\n\t\tthis.ctx = undefined;\n\t\tthis.kind = undefined;\n\t\tthis.lastRenderedStatus = undefined;\n\t\tif (ctx !== undefined) this.render(ctx, undefined);\n\t}\n\n\tprivate tick(): void {\n\t\tif (this.ctx === undefined || this.kind === undefined) return;\n\t\tconst status = formatGoalWaitLabel({\n\t\t\tkind: this.kind,\n\t\t\tremainingMs: Math.max(0, this.dueAtMs - this.now()),\n\t\t\ttotalMs: this.totalMs,\n\t\t\tchannelCounts: this.channelCounts,\n\t\t});\n\t\tif (status === this.lastRenderedStatus) return;\n\t\tthis.lastRenderedStatus = status;\n\t\tthis.render(this.ctx, status);\n\t}\n}\n"]}
1
+ {"version":3,"file":"wait-ticker.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/wait-ticker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionContext } from \"../../types.ts\";\nimport type { ResumptionChannelCounts } from \"./monitor-continuation-types.ts\";\nimport { isStaleExtensionContextError } from \"./stale-context.ts\";\nimport { formatGoalWaitLabel, type GoalWaitKind, type GoalWaitLabelInput } from \"./wait-progress.ts\";\n\n/** Footer countdown refresh cadence while a Goal continuation is delayed. */\nexport const GOAL_WAIT_TICK_INTERVAL_MS = 1000;\nexport const GOAL_WAIT_STATUS_KEY = \"goal-wait\";\n\n/** Receives the freshly formatted footer status text (undefined clears the status). */\nexport type GoalWaitRender = (ctx: ExtensionContext, status: string | undefined) => void;\n\nexport interface GoalWaitTickerOptions {\n\treadonly render: GoalWaitRender;\n\t/** Injectable clock for tests; defaults to Date.now. */\n\treadonly now?: () => number;\n}\n\n/**\n * Drives a once-per-second footer countdown while a Goal continuation timer is\n * armed. Mirrors the existing GoalElapsedTicker and MonitorStatusTicker: the\n * interval is unref'd and unchanged visible labels are not rendered again.\n */\nexport class GoalWaitTicker {\n\tprivate readonly render: GoalWaitRender;\n\tprivate readonly now: () => number;\n\tprivate intervalId: NodeJS.Timeout | undefined;\n\tprivate ctx: ExtensionContext | undefined;\n\tprivate kind: GoalWaitKind | undefined;\n\tprivate dueAtMs = 0;\n\tprivate totalMs = 0;\n\tprivate channelCounts: ResumptionChannelCounts = {};\n\tprivate lastRenderedStatus: string | undefined;\n\n\tconstructor(options: GoalWaitTickerOptions) {\n\t\tthis.render = options.render;\n\t\tthis.now = options.now ?? Date.now;\n\t}\n\n\tget running(): boolean {\n\t\treturn this.intervalId !== undefined;\n\t}\n\n\t/** Render the current wait immediately and keep it live until stopped. */\n\tsync(ctx: ExtensionContext, input: GoalWaitLabelInput): void {\n\t\tthis.ctx = ctx;\n\t\tthis.kind = input.kind;\n\t\tthis.dueAtMs = this.now() + Math.max(0, input.remainingMs);\n\t\tthis.totalMs = input.totalMs;\n\t\tthis.channelCounts = { ...input.channelCounts };\n\t\tthis.lastRenderedStatus = undefined;\n\t\tthis.tick();\n\t\tif (this.intervalId !== undefined) return;\n\t\tconst handle = setInterval(() => this.tick(), GOAL_WAIT_TICK_INTERVAL_MS);\n\t\thandle.unref();\n\t\tthis.intervalId = handle;\n\t}\n\n\t/** Refresh channel wording without changing the countdown deadline. */\n\tsetChannelCounts(channelCounts: ResumptionChannelCounts): void {\n\t\tif (this.ctx === undefined || this.kind !== \"monitor\") return;\n\t\tthis.channelCounts = { ...channelCounts };\n\t\tthis.tick();\n\t}\n\n\t/** Stop ticking, clear the footer segment, and drop the retained context. */\n\tstop(): void {\n\t\tif (this.intervalId !== undefined) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = undefined;\n\t\t}\n\t\tconst ctx = this.ctx;\n\t\tthis.ctx = undefined;\n\t\tthis.kind = undefined;\n\t\tthis.lastRenderedStatus = undefined;\n\t\tif (ctx !== undefined) {\n\t\t\ttry {\n\t\t\t\tthis.render(ctx, undefined);\n\t\t\t} catch (error) {\n\t\t\t\t// A stale ctx cannot clear its own footer status; dropping it is enough.\n\t\t\t\tif (!isStaleExtensionContextError(error)) throw error;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Drop the interval and retained ctx without a final render. Used when a tick\n\t * discovers the ctx was retired by a session replacement or reload: every\n\t * render against it throws from now on, and a ticker that keeps ticking dead\n\t * renders freezes the footer forever without crashing. The next sync() with a\n\t * live ctx re-arms everything.\n\t */\n\tprivate retire(): void {\n\t\tif (this.intervalId !== undefined) {\n\t\t\tclearInterval(this.intervalId);\n\t\t\tthis.intervalId = undefined;\n\t\t}\n\t\tthis.ctx = undefined;\n\t\tthis.kind = undefined;\n\t\tthis.lastRenderedStatus = undefined;\n\t}\n\n\tprivate tick(): void {\n\t\tif (this.ctx === undefined || this.kind === undefined) return;\n\t\tconst status = formatGoalWaitLabel({\n\t\t\tkind: this.kind,\n\t\t\tremainingMs: Math.max(0, this.dueAtMs - this.now()),\n\t\t\ttotalMs: this.totalMs,\n\t\t\tchannelCounts: this.channelCounts,\n\t\t});\n\t\tif (status === this.lastRenderedStatus) return;\n\t\tthis.lastRenderedStatus = status;\n\t\ttry {\n\t\t\tthis.render(this.ctx, status);\n\t\t} catch (error) {\n\t\t\tif (isStaleExtensionContextError(error)) {\n\t\t\t\tthis.retire();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,gBAAgB,EAAqB,MAAM,gBAAgB,CAAC;AAY1G,OAAO,EAAiB,UAAU,EAAE,MAAM,cAAc,CAAC;AAWzD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,UAAO,GAAG,gBAAgB,CA0J7F;AAWD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,gBAAgB,EAAqB,MAAM,gBAAgB,CAAC;AAY1G,OAAO,EAAiB,UAAU,EAAE,MAAM,cAAc,CAAC;AAWzD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,UAAO,GAAG,gBAAgB,CAsK7F;AAWD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E"}
@@ -113,7 +113,18 @@ export function createMcpExtension(service, sessionOwned = true) {
113
113
  })();
114
114
  return attachPromise;
115
115
  };
116
- pi.on("session_start", wrapAsync("mcp.session_start", (event, ctx) => attach(event, ctx), sink));
116
+ const onSessionStart = wrapAsync("mcp.session_start", (event, ctx) => attach(event, ctx), sink);
117
+ pi.on("session_start", (event, ctx) => {
118
+ const work = onSessionStart(event, ctx);
119
+ // Reload's runner.emit("session_start") is on the hot-reload critical path
120
+ // (~260ms when this awaits reconnect). Attach is already single-flight via
121
+ // attachPromise + service.#attachQueue; before_agent_start awaits it.
122
+ if (event.reason === "reload") {
123
+ void work;
124
+ return;
125
+ }
126
+ return work;
127
+ });
117
128
  pi.on("before_agent_start", async (event, ctx) => {
118
129
  try {
119
130
  // Elicitation (todo 41): point mid-call forms at this session's UI.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { bindToProviderScope } from \"@earendil-works/pi-ai/node/provider-scope\";\nimport type { ExtensionAPI, ExtensionContext, ExtensionFactory, SessionStartEvent } from \"../../types.ts\";\nimport { installMcpNativeToolSearchGate } from \"../tool-search/native-search.ts\";\nimport { registerMcpCommands } from \"./commands.ts\";\nimport {\n\tisMcpControlInventoryRequest,\n\tMCP_CONTROL_INVENTORY_CHANGED_EVENT,\n\tMCP_CONTROL_INVENTORY_REQUEST_EVENT,\n} from \"./control-inventory.ts\";\nimport { injectMcpInstructions, refreshMcpInstructionsForSession } from \"./instructions.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport { registerMcpPromptCommands } from \"./prompts.ts\";\nimport { expandMcpResourceMentions } from \"./resources.ts\";\nimport { getMcpService, McpService } from \"./service.ts\";\nimport {\n\tparseSkillMcpDeclarations,\n\ttype SkillLike,\n\ttype SkillMcpDeclarations,\n\tskillActivationTargets,\n} from \"./skills.ts\";\nimport { reportMcpAsyncError, safeEventBusOn, wrapAsync } from \"./wrap.ts\";\n\nconst MCP_BUILTIN_EXTENSION_PATH = \"<builtin:mcp>\";\n\nexport function createMcpExtension(service: McpService, sessionOwned = true): ExtensionFactory {\n\treturn (pi: ExtensionAPI): void => {\n\t\tlet attachPromise: Promise<void> | undefined;\n\t\tlet attachedSessionId: string | undefined;\n\t\tlet controlInventoryDisposed = false;\n\t\tconst unsubscribeControlInventoryRequest = safeEventBusOn(\n\t\t\tpi.events,\n\t\t\tMCP_CONTROL_INVENTORY_REQUEST_EVENT,\n\t\t\t(data) => {\n\t\t\t\tif (!isMcpControlInventoryRequest(data) || data.sessionId !== attachedSessionId) return;\n\t\t\t\tdata.respond(service.refreshWireStatusSnapshot(data.sessionId));\n\t\t\t},\n\t\t);\n\t\tconst unsubscribeWireStatus = service.onWireStatusChanged((sessionId, snapshot) => {\n\t\t\tif (sessionId === undefined || sessionId !== attachedSessionId) return;\n\t\t\tpi.events.emit(MCP_CONTROL_INVENTORY_CHANGED_EVENT, { sessionId, snapshot });\n\t\t});\n\t\tconst disposeControlInventory = (): void => {\n\t\t\tif (controlInventoryDisposed) return;\n\t\t\tcontrolInventoryDisposed = true;\n\t\t\tunsubscribeControlInventoryRequest();\n\t\t\tunsubscribeWireStatus();\n\t\t};\n\t\tconst sink = {\n\t\t\tlogger: {\n\t\t\t\terror(message: string, data?: unknown): void {\n\t\t\t\t\tcreateMcpLogger(\"service\").error(message, data);\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tregisterMcpCommands(pi, service);\n\n\t\tinstallMcpNativeToolSearchGate(() => {\n\t\t\tconst setting = service.getNativeToolSearchSetting();\n\t\t\treturn setting === true || setting === \"auto\";\n\t\t});\n\t\t// skills-carry-MCP (todo 37): skills declaring MCP servers (mcp.json\n\t\t// sidecar or SKILL.md frontmatter) register lazily with tools hidden;\n\t\t// loading a skill — /skill:<name> input or the model reading its SKILL.md —\n\t\t// reveals that skill's includeTools matches for the rest of the session.\n\t\tlet skillDecls: SkillMcpDeclarations = { servers: new Map(), warnings: [] };\n\t\tlet skillsByName = new Map<string, SkillLike>();\n\t\tconst loadedSkills = new Set<string>();\n\t\tconst revealSkill = (skillName: string): void => {\n\t\t\tif (loadedSkills.has(skillName) || !skillsByName.has(skillName)) return;\n\t\t\tloadedSkills.add(skillName);\n\t\t\tconst registered = service.getTierBSearchable();\n\t\t\tconst targets = skillActivationTargets(skillDecls, skillName, registered);\n\t\t\tif (targets.length > 0) service.activateSkillMcpTools(targets);\n\t\t};\n\t\tpi.on(\"input\", async (event, ctx) => {\n\t\t\tconst match = /^\\s*\\/skill:([A-Za-z0-9._-]+)/.exec(event.text);\n\t\t\tif (match) revealSkill(match[1]);\n\t\t\t// @mcp:<server>/<uri> mention expansion (todo 39): recognized mentions are\n\t\t\t// inlined via the sanctioned input transform; failures pass through\n\t\t\t// untouched with a one-line notice so submission is never blocked.\n\t\t\tif (event.text.includes(\"@mcp:\")) {\n\t\t\t\tconst expansion = await expandMcpResourceMentions(event.text, () => service.getMcpResourceServers());\n\t\t\t\tfor (const notice of expansion.notices) {\n\t\t\t\t\tcreateMcpLogger(\"resources\").warn(notice);\n\t\t\t\t\tvoid ctx.ui?.notify?.(notice, \"warning\");\n\t\t\t\t}\n\t\t\t\tif (expansion.changed) return { action: \"transform\", text: expansion.text };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\t\tpi.on(\"tool_call\", (event) => {\n\t\t\tif (event.toolName !== \"read\") return undefined;\n\t\t\tconst path = (event.input as { path?: string }).path;\n\t\t\tif (path === undefined) return undefined;\n\t\t\tfor (const [name, skill] of skillsByName) {\n\t\t\t\tif (path === skill.filePath || path.endsWith(skill.filePath)) revealSkill(name);\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\n\t\t// Attach is SINGLE-FLIGHT. session_start handlers are dispatched\n\t\t// fire-and-forget, so a slow attach (a cold MCP server's boot + catalog\n\t\t// collection is awaited inside attachSession) can still be in flight when\n\t\t// before_agent_start fires. The old `attached` boolean was only set on\n\t\t// completion, so before_agent_start would start a SECOND concurrent attach —\n\t\t// which found the connection entries already created (still \"connecting\"),\n\t\t// collected an empty catalog, and registered no MCP tools for turn 1; the\n\t\t// first attach then landed the real registration turns later. Memoizing the\n\t\t// in-flight promise makes before_agent_start await the ORIGINAL attach, so\n\t\t// the first turn's payload deterministically carries the MCP tool set.\n\t\t// session_start always starts a fresh attach (reloads must re-sync config).\n\t\tconst attach = (event: SessionStartEvent, ctx: ExtensionContext): Promise<void> => {\n\t\t\tattachedSessionId = ctx.sessionManager?.getSessionId?.();\n\t\t\tattachPromise = (async () => {\n\t\t\t\tawait service.attachSession(event, ctx, pi);\n\t\t\t\trefreshMcpInstructionsForSession(service);\n\t\t\t\tif (sessionOwned) registerMcpPromptCommands(service, pi, service.getMcpPromptServers());\n\t\t\t\telse registerMcpPromptCommands(pi, service.getMcpPromptServers());\n\t\t\t})();\n\t\t\treturn attachPromise;\n\t\t};\n\t\tpi.on(\n\t\t\t\"session_start\",\n\t\t\twrapAsync(\"mcp.session_start\", (event, ctx) => attach(event, ctx), sink),\n\t\t);\n\t\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\t\ttry {\n\t\t\t\t// Elicitation (todo 41): point mid-call forms at this session's UI.\n\t\t\t\tservice.setMcpElicitationUiProvider(() => ctx.ui);\n\t\t\t\tawait (attachPromise ?? attach({ type: \"session_start\", reason: \"startup\" }, ctx));\n\t\t\t\tconst skills = (event.systemPromptOptions.skills ?? []) as readonly SkillLike[];\n\t\t\t\tif (skills.length > 0) {\n\t\t\t\t\tskillsByName = new Map(skills.map((skill) => [skill.name, skill]));\n\t\t\t\t\tskillDecls = parseSkillMcpDeclarations(skills);\n\t\t\t\t\tconst declared = new Map(\n\t\t\t\t\t\t[...skillDecls.servers].map(([name, decl]) => [name, { raw: decl.raw, sourcePath: decl.sourcePath }]),\n\t\t\t\t\t);\n\t\t\t\t\tconst warnings = [\n\t\t\t\t\t\t...skillDecls.warnings,\n\t\t\t\t\t\t...(declared.size > 0 ? await service.attachSkillMcpServers(declared) : []),\n\t\t\t\t\t];\n\t\t\t\t\tfor (const warning of warnings) createMcpLogger(\"skills\").warn(warning);\n\t\t\t\t}\n\t\t\t\tconst systemPrompt = injectMcpInstructions(service, event.systemPrompt);\n\t\t\t\treturn systemPrompt === undefined ? undefined : { systemPrompt };\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\tawait reportMcpAsyncError(\"mcp.before_agent_start\", error, sink);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t});\n\t\tpi.on(\n\t\t\t\"session_shutdown\",\n\t\t\twrapAsync(\n\t\t\t\t\"mcp.session_shutdown\",\n\t\t\t\tasync (event) => {\n\t\t\t\t\tif (event.reason === \"reload\" && !sessionOwned) return;\n\t\t\t\t\tdisposeControlInventory();\n\t\t\t\t\tawait service.handleSessionShutdown(event);\n\t\t\t\t},\n\t\t\t\tsink,\n\t\t\t),\n\t\t);\n\t\tpi.on(\n\t\t\t\"session_extensions_removed\",\n\t\t\twrapAsync(\n\t\t\t\t\"mcp.session_extensions_removed\",\n\t\t\t\tasync (event) => {\n\t\t\t\t\tif (event.removed.some((extension) => extension.path === MCP_BUILTIN_EXTENSION_PATH)) {\n\t\t\t\t\t\tdisposeControlInventory();\n\t\t\t\t\t\tawait service.dispose(\"reload\");\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsink,\n\t\t\t),\n\t\t);\n\t};\n}\n\nfunction hasProviderScope(): boolean {\n\ttry {\n\t\tbindToProviderScope(() => undefined);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function mcpExtension(pi: ExtensionAPI): void | Promise<void> {\n\tconst sessionOwned = hasProviderScope();\n\treturn createMcpExtension(sessionOwned ? new McpService() : getMcpService(), sessionOwned)(pi);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/mcp/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { bindToProviderScope } from \"@earendil-works/pi-ai/node/provider-scope\";\nimport type { ExtensionAPI, ExtensionContext, ExtensionFactory, SessionStartEvent } from \"../../types.ts\";\nimport { installMcpNativeToolSearchGate } from \"../tool-search/native-search.ts\";\nimport { registerMcpCommands } from \"./commands.ts\";\nimport {\n\tisMcpControlInventoryRequest,\n\tMCP_CONTROL_INVENTORY_CHANGED_EVENT,\n\tMCP_CONTROL_INVENTORY_REQUEST_EVENT,\n} from \"./control-inventory.ts\";\nimport { injectMcpInstructions, refreshMcpInstructionsForSession } from \"./instructions.ts\";\nimport { createMcpLogger } from \"./log.ts\";\nimport { registerMcpPromptCommands } from \"./prompts.ts\";\nimport { expandMcpResourceMentions } from \"./resources.ts\";\nimport { getMcpService, McpService } from \"./service.ts\";\nimport {\n\tparseSkillMcpDeclarations,\n\ttype SkillLike,\n\ttype SkillMcpDeclarations,\n\tskillActivationTargets,\n} from \"./skills.ts\";\nimport { reportMcpAsyncError, safeEventBusOn, wrapAsync } from \"./wrap.ts\";\n\nconst MCP_BUILTIN_EXTENSION_PATH = \"<builtin:mcp>\";\n\nexport function createMcpExtension(service: McpService, sessionOwned = true): ExtensionFactory {\n\treturn (pi: ExtensionAPI): void => {\n\t\tlet attachPromise: Promise<void> | undefined;\n\t\tlet attachedSessionId: string | undefined;\n\t\tlet controlInventoryDisposed = false;\n\t\tconst unsubscribeControlInventoryRequest = safeEventBusOn(\n\t\t\tpi.events,\n\t\t\tMCP_CONTROL_INVENTORY_REQUEST_EVENT,\n\t\t\t(data) => {\n\t\t\t\tif (!isMcpControlInventoryRequest(data) || data.sessionId !== attachedSessionId) return;\n\t\t\t\tdata.respond(service.refreshWireStatusSnapshot(data.sessionId));\n\t\t\t},\n\t\t);\n\t\tconst unsubscribeWireStatus = service.onWireStatusChanged((sessionId, snapshot) => {\n\t\t\tif (sessionId === undefined || sessionId !== attachedSessionId) return;\n\t\t\tpi.events.emit(MCP_CONTROL_INVENTORY_CHANGED_EVENT, { sessionId, snapshot });\n\t\t});\n\t\tconst disposeControlInventory = (): void => {\n\t\t\tif (controlInventoryDisposed) return;\n\t\t\tcontrolInventoryDisposed = true;\n\t\t\tunsubscribeControlInventoryRequest();\n\t\t\tunsubscribeWireStatus();\n\t\t};\n\t\tconst sink = {\n\t\t\tlogger: {\n\t\t\t\terror(message: string, data?: unknown): void {\n\t\t\t\t\tcreateMcpLogger(\"service\").error(message, data);\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tregisterMcpCommands(pi, service);\n\n\t\tinstallMcpNativeToolSearchGate(() => {\n\t\t\tconst setting = service.getNativeToolSearchSetting();\n\t\t\treturn setting === true || setting === \"auto\";\n\t\t});\n\t\t// skills-carry-MCP (todo 37): skills declaring MCP servers (mcp.json\n\t\t// sidecar or SKILL.md frontmatter) register lazily with tools hidden;\n\t\t// loading a skill — /skill:<name> input or the model reading its SKILL.md —\n\t\t// reveals that skill's includeTools matches for the rest of the session.\n\t\tlet skillDecls: SkillMcpDeclarations = { servers: new Map(), warnings: [] };\n\t\tlet skillsByName = new Map<string, SkillLike>();\n\t\tconst loadedSkills = new Set<string>();\n\t\tconst revealSkill = (skillName: string): void => {\n\t\t\tif (loadedSkills.has(skillName) || !skillsByName.has(skillName)) return;\n\t\t\tloadedSkills.add(skillName);\n\t\t\tconst registered = service.getTierBSearchable();\n\t\t\tconst targets = skillActivationTargets(skillDecls, skillName, registered);\n\t\t\tif (targets.length > 0) service.activateSkillMcpTools(targets);\n\t\t};\n\t\tpi.on(\"input\", async (event, ctx) => {\n\t\t\tconst match = /^\\s*\\/skill:([A-Za-z0-9._-]+)/.exec(event.text);\n\t\t\tif (match) revealSkill(match[1]);\n\t\t\t// @mcp:<server>/<uri> mention expansion (todo 39): recognized mentions are\n\t\t\t// inlined via the sanctioned input transform; failures pass through\n\t\t\t// untouched with a one-line notice so submission is never blocked.\n\t\t\tif (event.text.includes(\"@mcp:\")) {\n\t\t\t\tconst expansion = await expandMcpResourceMentions(event.text, () => service.getMcpResourceServers());\n\t\t\t\tfor (const notice of expansion.notices) {\n\t\t\t\t\tcreateMcpLogger(\"resources\").warn(notice);\n\t\t\t\t\tvoid ctx.ui?.notify?.(notice, \"warning\");\n\t\t\t\t}\n\t\t\t\tif (expansion.changed) return { action: \"transform\", text: expansion.text };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\t\tpi.on(\"tool_call\", (event) => {\n\t\t\tif (event.toolName !== \"read\") return undefined;\n\t\t\tconst path = (event.input as { path?: string }).path;\n\t\t\tif (path === undefined) return undefined;\n\t\t\tfor (const [name, skill] of skillsByName) {\n\t\t\t\tif (path === skill.filePath || path.endsWith(skill.filePath)) revealSkill(name);\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\n\t\t// Attach is SINGLE-FLIGHT. session_start handlers are dispatched\n\t\t// fire-and-forget, so a slow attach (a cold MCP server's boot + catalog\n\t\t// collection is awaited inside attachSession) can still be in flight when\n\t\t// before_agent_start fires. The old `attached` boolean was only set on\n\t\t// completion, so before_agent_start would start a SECOND concurrent attach —\n\t\t// which found the connection entries already created (still \"connecting\"),\n\t\t// collected an empty catalog, and registered no MCP tools for turn 1; the\n\t\t// first attach then landed the real registration turns later. Memoizing the\n\t\t// in-flight promise makes before_agent_start await the ORIGINAL attach, so\n\t\t// the first turn's payload deterministically carries the MCP tool set.\n\t\t// session_start always starts a fresh attach (reloads must re-sync config).\n\t\tconst attach = (event: SessionStartEvent, ctx: ExtensionContext): Promise<void> => {\n\t\t\tattachedSessionId = ctx.sessionManager?.getSessionId?.();\n\t\t\tattachPromise = (async () => {\n\t\t\t\tawait service.attachSession(event, ctx, pi);\n\t\t\t\trefreshMcpInstructionsForSession(service);\n\t\t\t\tif (sessionOwned) registerMcpPromptCommands(service, pi, service.getMcpPromptServers());\n\t\t\t\telse registerMcpPromptCommands(pi, service.getMcpPromptServers());\n\t\t\t})();\n\t\t\treturn attachPromise;\n\t\t};\n\t\tconst onSessionStart = wrapAsync(\n\t\t\t\"mcp.session_start\",\n\t\t\t(event: SessionStartEvent, ctx: ExtensionContext) => attach(event, ctx),\n\t\t\tsink,\n\t\t);\n\t\tpi.on(\"session_start\", (event, ctx) => {\n\t\t\tconst work = onSessionStart(event, ctx);\n\t\t\t// Reload's runner.emit(\"session_start\") is on the hot-reload critical path\n\t\t\t// (~260ms when this awaits reconnect). Attach is already single-flight via\n\t\t\t// attachPromise + service.#attachQueue; before_agent_start awaits it.\n\t\t\tif (event.reason === \"reload\") {\n\t\t\t\tvoid work;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn work;\n\t\t});\n\t\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\t\ttry {\n\t\t\t\t// Elicitation (todo 41): point mid-call forms at this session's UI.\n\t\t\t\tservice.setMcpElicitationUiProvider(() => ctx.ui);\n\t\t\t\tawait (attachPromise ?? attach({ type: \"session_start\", reason: \"startup\" }, ctx));\n\t\t\t\tconst skills = (event.systemPromptOptions.skills ?? []) as readonly SkillLike[];\n\t\t\t\tif (skills.length > 0) {\n\t\t\t\t\tskillsByName = new Map(skills.map((skill) => [skill.name, skill]));\n\t\t\t\t\tskillDecls = parseSkillMcpDeclarations(skills);\n\t\t\t\t\tconst declared = new Map(\n\t\t\t\t\t\t[...skillDecls.servers].map(([name, decl]) => [name, { raw: decl.raw, sourcePath: decl.sourcePath }]),\n\t\t\t\t\t);\n\t\t\t\t\tconst warnings = [\n\t\t\t\t\t\t...skillDecls.warnings,\n\t\t\t\t\t\t...(declared.size > 0 ? await service.attachSkillMcpServers(declared) : []),\n\t\t\t\t\t];\n\t\t\t\t\tfor (const warning of warnings) createMcpLogger(\"skills\").warn(warning);\n\t\t\t\t}\n\t\t\t\tconst systemPrompt = injectMcpInstructions(service, event.systemPrompt);\n\t\t\t\treturn systemPrompt === undefined ? undefined : { systemPrompt };\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof Error)) throw error;\n\t\t\t\tawait reportMcpAsyncError(\"mcp.before_agent_start\", error, sink);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t});\n\t\tpi.on(\n\t\t\t\"session_shutdown\",\n\t\t\twrapAsync(\n\t\t\t\t\"mcp.session_shutdown\",\n\t\t\t\tasync (event) => {\n\t\t\t\t\tif (event.reason === \"reload\" && !sessionOwned) return;\n\t\t\t\t\tdisposeControlInventory();\n\t\t\t\t\tawait service.handleSessionShutdown(event);\n\t\t\t\t},\n\t\t\t\tsink,\n\t\t\t),\n\t\t);\n\t\tpi.on(\n\t\t\t\"session_extensions_removed\",\n\t\t\twrapAsync(\n\t\t\t\t\"mcp.session_extensions_removed\",\n\t\t\t\tasync (event) => {\n\t\t\t\t\tif (event.removed.some((extension) => extension.path === MCP_BUILTIN_EXTENSION_PATH)) {\n\t\t\t\t\t\tdisposeControlInventory();\n\t\t\t\t\t\tawait service.dispose(\"reload\");\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsink,\n\t\t\t),\n\t\t);\n\t};\n}\n\nfunction hasProviderScope(): boolean {\n\ttry {\n\t\tbindToProviderScope(() => undefined);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function mcpExtension(pi: ExtensionAPI): void | Promise<void> {\n\tconst sessionOwned = hasProviderScope();\n\treturn createMcpExtension(sessionOwned ? new McpService() : getMcpService(), sessionOwned)(pi);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-url-widget.d.ts","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/prompt-url-widget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,aAAa,CAAC;AA2DlE,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,EAAE,EAAE,YAAY,QA6FhE"}
1
+ {"version":3,"file":"prompt-url-widget.d.ts","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/prompt-url-widget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,aAAa,CAAC;AA2DlE,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,EAAE,EAAE,YAAY,QA2FhE"}
@@ -1,5 +1,4 @@
1
- import { Container, Text } from "@earendil-works/pi-tui";
2
- import { DynamicBorder } from "../../../modes/interactive/components/dynamic-border.js";
1
+ import { buildNoticeBox } from "../notice/index.js";
3
2
  const PR_PROMPT_PATTERN = /^\s*You are given one or more GitHub PR URLs:\s*(\S+)/im;
4
3
  const ISSUE_PROMPT_PATTERN = /^\s*Analyze GitHub issue\(s\):\s*(\S+)/im;
5
4
  function extractPromptMatch(prompt) {
@@ -40,19 +39,12 @@ function formatAuthor(author) {
40
39
  }
41
40
  export default function promptUrlWidgetExtension(pi) {
42
41
  const setWidget = (ctx, match, title, authorText) => {
43
- ctx.ui.setWidget("prompt-url", (_tui, thm) => {
44
- const titleText = title ? thm.fg("accent", title) : thm.fg("accent", match.url);
45
- const authorLine = authorText ? thm.fg("muted", authorText) : undefined;
46
- const urlLine = thm.fg("dim", match.url);
47
- const lines = [titleText];
48
- if (authorLine)
49
- lines.push(authorLine);
50
- lines.push(urlLine);
51
- const container = new Container();
52
- container.addChild(new DynamicBorder((s) => thm.fg("muted", s)));
53
- container.addChild(new Text(lines.join("\n"), 1, 0));
54
- return container;
55
- });
42
+ ctx.ui.setWidget("prompt-url", (_tui, thm) => buildNoticeBox({
43
+ title: title ?? match.url,
44
+ tone: "accent",
45
+ why: authorText ?? "Prompt URL detected.",
46
+ extra: [{ text: match.url, tone: "dim" }],
47
+ }, { expanded: false }, thm));
56
48
  };
57
49
  const applySessionName = (_ctx, match, title) => {
58
50
  const label = match.kind === "pr" ? "PR" : "Issue";
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-url-widget.js","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/prompt-url-widget.ts"],"names":[],"mappings":"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","sourcesContent":["import { Container, Text } from \"@earendil-works/pi-tui\";\nimport { DynamicBorder } from \"../../../modes/interactive/components/dynamic-border.ts\";\nimport type { ExtensionAPI, ExtensionContext } from \"../types.ts\";\n\nconst PR_PROMPT_PATTERN = /^\\s*You are given one or more GitHub PR URLs:\\s*(\\S+)/im;\nconst ISSUE_PROMPT_PATTERN = /^\\s*Analyze GitHub issue\\(s\\):\\s*(\\S+)/im;\n\ntype PromptMatch = {\n\tkind: \"pr\" | \"issue\";\n\turl: string;\n};\n\ntype GhMetadata = {\n\ttitle?: string;\n\tauthor?: {\n\t\tlogin?: string;\n\t\tname?: string | null;\n\t};\n};\n\nfunction extractPromptMatch(prompt: string): PromptMatch | undefined {\n\tconst prMatch = prompt.match(PR_PROMPT_PATTERN);\n\tif (prMatch?.[1]) {\n\t\treturn { kind: \"pr\", url: prMatch[1].trim() };\n\t}\n\n\tconst issueMatch = prompt.match(ISSUE_PROMPT_PATTERN);\n\tif (issueMatch?.[1]) {\n\t\treturn { kind: \"issue\", url: issueMatch[1].trim() };\n\t}\n\n\treturn undefined;\n}\n\nasync function fetchGhMetadata(\n\tpi: ExtensionAPI,\n\tkind: PromptMatch[\"kind\"],\n\turl: string,\n): Promise<GhMetadata | undefined> {\n\tconst args =\n\t\tkind === \"pr\" ? [\"pr\", \"view\", url, \"--json\", \"title,author\"] : [\"issue\", \"view\", url, \"--json\", \"title,author\"];\n\n\ttry {\n\t\tconst result = await pi.exec(\"gh\", args);\n\t\tif (result.code !== 0 || !result.stdout) return undefined;\n\t\treturn JSON.parse(result.stdout) as GhMetadata;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction formatAuthor(author?: GhMetadata[\"author\"]): string | undefined {\n\tif (!author) return undefined;\n\tconst name = author.name?.trim();\n\tconst login = author.login?.trim();\n\tif (name && login) return `${name} (@${login})`;\n\tif (login) return `@${login}`;\n\tif (name) return name;\n\treturn undefined;\n}\n\nexport default function promptUrlWidgetExtension(pi: ExtensionAPI) {\n\tconst setWidget = (ctx: ExtensionContext, match: PromptMatch, title?: string, authorText?: string) => {\n\t\tctx.ui.setWidget(\"prompt-url\", (_tui, thm) => {\n\t\t\tconst titleText = title ? thm.fg(\"accent\", title) : thm.fg(\"accent\", match.url);\n\t\t\tconst authorLine = authorText ? thm.fg(\"muted\", authorText) : undefined;\n\t\t\tconst urlLine = thm.fg(\"dim\", match.url);\n\n\t\t\tconst lines = [titleText];\n\t\t\tif (authorLine) lines.push(authorLine);\n\t\t\tlines.push(urlLine);\n\n\t\t\tconst container = new Container();\n\t\t\tcontainer.addChild(new DynamicBorder((s: string) => thm.fg(\"muted\", s)));\n\t\t\tcontainer.addChild(new Text(lines.join(\"\\n\"), 1, 0));\n\t\t\treturn container;\n\t\t});\n\t};\n\n\tconst applySessionName = (_ctx: ExtensionContext, match: PromptMatch, title?: string) => {\n\t\tconst label = match.kind === \"pr\" ? \"PR\" : \"Issue\";\n\t\tconst trimmedTitle = title?.trim();\n\t\tconst fallbackName = `${label}: ${match.url}`;\n\t\tconst desiredName = trimmedTitle ? `${label}: ${trimmedTitle} (${match.url})` : fallbackName;\n\t\tconst currentName = pi.getSessionName()?.trim();\n\t\tif (!currentName) {\n\t\t\tpi.setSessionName(desiredName);\n\t\t\treturn;\n\t\t}\n\t\tif (currentName === match.url || currentName === fallbackName) {\n\t\t\tpi.setSessionName(desiredName);\n\t\t}\n\t};\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tif (!ctx.hasUI) return;\n\t\tconst match = extractPromptMatch(event.prompt);\n\t\tif (!match) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetWidget(ctx, match);\n\t\tapplySessionName(ctx, match);\n\t\tvoid fetchGhMetadata(pi, match.kind, match.url).then((meta) => {\n\t\t\tconst title = meta?.title?.trim();\n\t\t\tconst authorText = formatAuthor(meta?.author);\n\t\t\tsetWidget(ctx, match, title, authorText);\n\t\t\tapplySessionName(ctx, match, title);\n\t\t});\n\t});\n\n\tconst getUserText = (content: string | { type: string; text?: string }[] | undefined): string => {\n\t\tif (!content) return \"\";\n\t\tif (typeof content === \"string\") return content;\n\t\treturn (\n\t\t\tcontent\n\t\t\t\t.filter((block): block is { type: \"text\"; text: string } => block.type === \"text\")\n\t\t\t\t.map((block) => block.text)\n\t\t\t\t.join(\"\\n\") ?? \"\"\n\t\t);\n\t};\n\n\tconst rebuildFromSession = (ctx: ExtensionContext) => {\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst entries = ctx.sessionManager.getEntries();\n\t\tconst lastMatch = [...entries].reverse().find((entry) => {\n\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"user\") return false;\n\t\t\tconst text = getUserText(entry.message.content);\n\t\t\treturn !!extractPromptMatch(text);\n\t\t});\n\n\t\tconst content =\n\t\t\tlastMatch?.type === \"message\" && lastMatch.message.role === \"user\" ? lastMatch.message.content : undefined;\n\t\tconst text = getUserText(content);\n\t\tconst match = text ? extractPromptMatch(text) : undefined;\n\t\tif (!match) {\n\t\t\tctx.ui.setWidget(\"prompt-url\", undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tsetWidget(ctx, match);\n\t\tapplySessionName(ctx, match);\n\t\tvoid fetchGhMetadata(pi, match.kind, match.url).then((meta) => {\n\t\t\tconst title = meta?.title?.trim();\n\t\t\tconst authorText = formatAuthor(meta?.author);\n\t\t\tsetWidget(ctx, match, title, authorText);\n\t\t\tapplySessionName(ctx, match, title);\n\t\t});\n\t};\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\trebuildFromSession(ctx);\n\t});\n}\n"]}
1
+ {"version":3,"file":"prompt-url-widget.js","sourceRoot":"","sources":["../../../../src/core/extensions/builtin/prompt-url-widget.ts"],"names":[],"mappings":"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","sourcesContent":["import { buildNoticeBox } from \"../notice/index.ts\";\nimport type { ExtensionAPI, ExtensionContext } from \"../types.ts\";\n\nconst PR_PROMPT_PATTERN = /^\\s*You are given one or more GitHub PR URLs:\\s*(\\S+)/im;\nconst ISSUE_PROMPT_PATTERN = /^\\s*Analyze GitHub issue\\(s\\):\\s*(\\S+)/im;\n\ntype PromptMatch = {\n\tkind: \"pr\" | \"issue\";\n\turl: string;\n};\n\ntype GhMetadata = {\n\ttitle?: string;\n\tauthor?: {\n\t\tlogin?: string;\n\t\tname?: string | null;\n\t};\n};\n\nfunction extractPromptMatch(prompt: string): PromptMatch | undefined {\n\tconst prMatch = prompt.match(PR_PROMPT_PATTERN);\n\tif (prMatch?.[1]) {\n\t\treturn { kind: \"pr\", url: prMatch[1].trim() };\n\t}\n\n\tconst issueMatch = prompt.match(ISSUE_PROMPT_PATTERN);\n\tif (issueMatch?.[1]) {\n\t\treturn { kind: \"issue\", url: issueMatch[1].trim() };\n\t}\n\n\treturn undefined;\n}\n\nasync function fetchGhMetadata(\n\tpi: ExtensionAPI,\n\tkind: PromptMatch[\"kind\"],\n\turl: string,\n): Promise<GhMetadata | undefined> {\n\tconst args =\n\t\tkind === \"pr\" ? [\"pr\", \"view\", url, \"--json\", \"title,author\"] : [\"issue\", \"view\", url, \"--json\", \"title,author\"];\n\n\ttry {\n\t\tconst result = await pi.exec(\"gh\", args);\n\t\tif (result.code !== 0 || !result.stdout) return undefined;\n\t\treturn JSON.parse(result.stdout) as GhMetadata;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction formatAuthor(author?: GhMetadata[\"author\"]): string | undefined {\n\tif (!author) return undefined;\n\tconst name = author.name?.trim();\n\tconst login = author.login?.trim();\n\tif (name && login) return `${name} (@${login})`;\n\tif (login) return `@${login}`;\n\tif (name) return name;\n\treturn undefined;\n}\n\nexport default function promptUrlWidgetExtension(pi: ExtensionAPI) {\n\tconst setWidget = (ctx: ExtensionContext, match: PromptMatch, title?: string, authorText?: string) => {\n\t\tctx.ui.setWidget(\"prompt-url\", (_tui, thm) =>\n\t\t\tbuildNoticeBox(\n\t\t\t\t{\n\t\t\t\t\ttitle: title ?? match.url,\n\t\t\t\t\ttone: \"accent\",\n\t\t\t\t\twhy: authorText ?? \"Prompt URL detected.\",\n\t\t\t\t\textra: [{ text: match.url, tone: \"dim\" }],\n\t\t\t\t},\n\t\t\t\t{ expanded: false },\n\t\t\t\tthm,\n\t\t\t),\n\t\t);\n\t};\n\n\tconst applySessionName = (_ctx: ExtensionContext, match: PromptMatch, title?: string) => {\n\t\tconst label = match.kind === \"pr\" ? \"PR\" : \"Issue\";\n\t\tconst trimmedTitle = title?.trim();\n\t\tconst fallbackName = `${label}: ${match.url}`;\n\t\tconst desiredName = trimmedTitle ? `${label}: ${trimmedTitle} (${match.url})` : fallbackName;\n\t\tconst currentName = pi.getSessionName()?.trim();\n\t\tif (!currentName) {\n\t\t\tpi.setSessionName(desiredName);\n\t\t\treturn;\n\t\t}\n\t\tif (currentName === match.url || currentName === fallbackName) {\n\t\t\tpi.setSessionName(desiredName);\n\t\t}\n\t};\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tif (!ctx.hasUI) return;\n\t\tconst match = extractPromptMatch(event.prompt);\n\t\tif (!match) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetWidget(ctx, match);\n\t\tapplySessionName(ctx, match);\n\t\tvoid fetchGhMetadata(pi, match.kind, match.url).then((meta) => {\n\t\t\tconst title = meta?.title?.trim();\n\t\t\tconst authorText = formatAuthor(meta?.author);\n\t\t\tsetWidget(ctx, match, title, authorText);\n\t\t\tapplySessionName(ctx, match, title);\n\t\t});\n\t});\n\n\tconst getUserText = (content: string | { type: string; text?: string }[] | undefined): string => {\n\t\tif (!content) return \"\";\n\t\tif (typeof content === \"string\") return content;\n\t\treturn (\n\t\t\tcontent\n\t\t\t\t.filter((block): block is { type: \"text\"; text: string } => block.type === \"text\")\n\t\t\t\t.map((block) => block.text)\n\t\t\t\t.join(\"\\n\") ?? \"\"\n\t\t);\n\t};\n\n\tconst rebuildFromSession = (ctx: ExtensionContext) => {\n\t\tif (!ctx.hasUI) return;\n\n\t\tconst entries = ctx.sessionManager.getEntries();\n\t\tconst lastMatch = [...entries].reverse().find((entry) => {\n\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"user\") return false;\n\t\t\tconst text = getUserText(entry.message.content);\n\t\t\treturn !!extractPromptMatch(text);\n\t\t});\n\n\t\tconst content =\n\t\t\tlastMatch?.type === \"message\" && lastMatch.message.role === \"user\" ? lastMatch.message.content : undefined;\n\t\tconst text = getUserText(content);\n\t\tconst match = text ? extractPromptMatch(text) : undefined;\n\t\tif (!match) {\n\t\t\tctx.ui.setWidget(\"prompt-url\", undefined);\n\t\t\treturn;\n\t\t}\n\n\t\tsetWidget(ctx, match);\n\t\tapplySessionName(ctx, match);\n\t\tvoid fetchGhMetadata(pi, match.kind, match.url).then((meta) => {\n\t\t\tconst title = meta?.title?.trim();\n\t\t\tconst authorText = formatAuthor(meta?.author);\n\t\t\tsetWidget(ctx, match, title, authorText);\n\t\t\tapplySessionName(ctx, match, title);\n\t\t});\n\t};\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\trebuildFromSession(ctx);\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rules-banner.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/ui/rules-banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iDAAiD,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC;CAC3E;AAED,qBAAa,WAAY,SAAQ,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK;IAMxC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAI/B,UAAU,IAAI,IAAI;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAuChG;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAM3E"}
1
+ {"version":3,"file":"rules-banner.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/ui/rules-banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iDAAiD,CAAC;AAE7E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC;CAC3E;AAED,qBAAa,WAAY,SAAQ,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK;IAMxC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAI/B,UAAU,IAAI,IAAI;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAoChG;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAM3E"}
@@ -1,5 +1,5 @@
1
1
  import { Container } from "@earendil-works/pi-tui";
2
- import { DynamicBorder } from "./dynamic-border.js";
2
+ import { buildNoticeBox } from "../../../notice/index.js";
3
3
  export class RulesBanner extends Container {
4
4
  constructor(props, theme) {
5
5
  super();
@@ -12,34 +12,30 @@ export class RulesBanner extends Container {
12
12
  invalidate() { }
13
13
  }
14
14
  export function renderBannerLines(props, theme, width) {
15
- const lines = [];
16
- const border = new DynamicBorder((str) => theme.fg("border", str));
17
15
  if (props.ruleCount === 0) {
18
- lines.push(...border.render(width));
19
- lines.push(`${theme.bold(theme.fg("accent", "[pi-rules]"))} No rules discovered`);
20
- lines.push(...border.render(width));
21
- return lines;
22
- }
23
- lines.push(...border.render(width));
24
- lines.push(`${theme.bold(theme.fg("accent", "[pi-rules]"))} ${theme.fg("muted", `${props.ruleCount} active rules`)}`);
25
- lines.push("");
26
- if (props.topRules) {
27
- for (const rule of props.topRules) {
28
- const hasDiagnostic = props.diagnostics.some((diagnostic) => diagnostic.source === rule.relativePath);
29
- const indicator = hasDiagnostic ? theme.fg("error", "⚠") : theme.fg("success", "●");
30
- let annotation = "";
31
- if (typeof rule.matchReason === "object" && rule.matchReason.kind === "glob") {
32
- annotation = ` ${theme.fg("muted", rule.matchReason.pattern)}`;
33
- }
34
- lines.push(` ${indicator} ${rule.relativePath}${annotation}`);
35
- }
16
+ return buildNoticeBox({
17
+ title: "[pi-rules] No rules discovered",
18
+ tone: "accent",
19
+ why: "No rules were discovered.",
20
+ }, { expanded: false }, theme).render(width);
36
21
  }
22
+ const extra = (props.topRules ?? []).map((rule) => {
23
+ const hasDiagnostic = props.diagnostics.some((diagnostic) => diagnostic.source === rule.relativePath);
24
+ const annotation = typeof rule.matchReason === "object" && rule.matchReason.kind === "glob" ? ` ${rule.matchReason.pattern}` : "";
25
+ return {
26
+ text: ` ${hasDiagnostic ? "⚠" : "●"} ${rule.relativePath}${annotation}`,
27
+ tone: hasDiagnostic ? "error" : "success",
28
+ };
29
+ });
37
30
  if (props.diagnostics.length > 0) {
38
- lines.push(` ${theme.fg("warning", `⚠ ${props.diagnostics.length} warning(s)`)}`);
31
+ extra.push({ text: ` ${props.diagnostics.length} warning(s)`, tone: "warning" });
39
32
  }
40
- lines.push("");
41
- lines.push(...border.render(width));
42
- return lines;
33
+ return buildNoticeBox({
34
+ title: `[pi-rules] ${props.ruleCount} active rules`,
35
+ tone: "accent",
36
+ why: `${props.ruleCount} active rules were discovered.`,
37
+ extra,
38
+ }, { expanded: false }, theme).render(width);
43
39
  }
44
40
  export function statusLineText(input, theme) {
45
41
  const base = `[pi-rules] ${input.ruleCount} active`;
@@ -1 +1 @@
1
- {"version":3,"file":"rules-banner.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/ui/rules-banner.ts"],"names":[],"mappings":"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","sourcesContent":["import { Container } from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../../../../modes/interactive/theme/theme.ts\";\nimport type { LoadedRule, RuleDiagnostic } from \"../rules/types.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\n\nexport interface RulesBannerProps {\n\truleCount: number;\n\tdiagnostics: ReadonlyArray<RuleDiagnostic>;\n\ttopRules?: ReadonlyArray<Pick<LoadedRule, \"relativePath\" | \"matchReason\">>;\n}\n\nexport class RulesBanner extends Container {\n\tprivate readonly props: RulesBannerProps;\n\tprivate readonly theme: Theme;\n\n\tconstructor(props: RulesBannerProps, theme: Theme) {\n\t\tsuper();\n\t\tthis.props = props;\n\t\tthis.theme = theme;\n\t}\n\n\toverride render(width: number): string[] {\n\t\treturn renderBannerLines(this.props, this.theme, width);\n\t}\n\n\toverride invalidate(): void {}\n}\n\nexport function renderBannerLines(props: RulesBannerProps, theme: Theme, width: number): string[] {\n\tconst lines: string[] = [];\n\tconst border = new DynamicBorder((str) => theme.fg(\"border\", str));\n\n\tif (props.ruleCount === 0) {\n\t\tlines.push(...border.render(width));\n\t\tlines.push(`${theme.bold(theme.fg(\"accent\", \"[pi-rules]\"))} No rules discovered`);\n\t\tlines.push(...border.render(width));\n\t\treturn lines;\n\t}\n\n\tlines.push(...border.render(width));\n\tlines.push(\n\t\t`${theme.bold(theme.fg(\"accent\", \"[pi-rules]\"))} ${theme.fg(\"muted\", `${props.ruleCount} active rules`)}`,\n\t);\n\tlines.push(\"\");\n\n\tif (props.topRules) {\n\t\tfor (const rule of props.topRules) {\n\t\t\tconst hasDiagnostic = props.diagnostics.some((diagnostic) => diagnostic.source === rule.relativePath);\n\t\t\tconst indicator = hasDiagnostic ? theme.fg(\"error\", \"⚠\") : theme.fg(\"success\", \"●\");\n\n\t\t\tlet annotation = \"\";\n\t\t\tif (typeof rule.matchReason === \"object\" && rule.matchReason.kind === \"glob\") {\n\t\t\t\tannotation = ` ${theme.fg(\"muted\", rule.matchReason.pattern)}`;\n\t\t\t}\n\n\t\t\tlines.push(` ${indicator} ${rule.relativePath}${annotation}`);\n\t\t}\n\t}\n\n\tif (props.diagnostics.length > 0) {\n\t\tlines.push(` ${theme.fg(\"warning\", `⚠ ${props.diagnostics.length} warning(s)`)}`);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(...border.render(width));\n\n\treturn lines;\n}\n\nexport interface StatusLineInput {\n\truleCount: number;\n\thasErrors: boolean;\n}\n\nexport function statusLineText(input: StatusLineInput, theme: Theme): string {\n\tconst base = `[pi-rules] ${input.ruleCount} active`;\n\tif (input.hasErrors) {\n\t\treturn theme.fg(\"muted\", `${base} · `) + theme.fg(\"error\", \"⚠ errors\");\n\t}\n\treturn theme.fg(\"muted\", base);\n}\n"]}
1
+ {"version":3,"file":"rules-banner.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/ui/rules-banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAmB,MAAM,0BAA0B,CAAC;AAS3E,MAAM,OAAO,WAAY,SAAQ,SAAS;IAIzC,YAAY,KAAuB,EAAE,KAAY;QAChD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAEQ,UAAU,KAAU,CAAC;CAC9B;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuB,EAAE,KAAY,EAAE,KAAa;IACrF,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,cAAc,CACpB;YACC,KAAK,EAAE,gCAAgC;YACvC,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,2BAA2B;SAChC,EACD,EAAE,QAAQ,EAAE,KAAK,EAAE,EACnB,KAAK,CACL,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAiB,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/D,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;QACtG,MAAM,UAAU,GACf,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChH,OAAO;YACN,IAAI,EAAE,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,GAAG,UAAU,EAAE;YACxE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAE,OAAiB,CAAC,CAAC,CAAE,SAAmB;SAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,cAAc,CACpB;QACC,KAAK,EAAE,cAAc,KAAK,CAAC,SAAS,eAAe;QACnD,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,gCAAgC;QACvD,KAAK;KACL,EACD,EAAE,QAAQ,EAAE,KAAK,EAAE,EACnB,KAAK,CACL,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAOD,MAAM,UAAU,cAAc,CAAC,KAAsB,EAAE,KAAY;IAClE,MAAM,IAAI,GAAG,cAAc,KAAK,CAAC,SAAS,SAAS,CAAC;IACpD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { Container } from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../../../../modes/interactive/theme/theme.ts\";\nimport { buildNoticeBox, type NoticeLine } from \"../../../notice/index.ts\";\nimport type { LoadedRule, RuleDiagnostic } from \"../rules/types.ts\";\n\nexport interface RulesBannerProps {\n\truleCount: number;\n\tdiagnostics: ReadonlyArray<RuleDiagnostic>;\n\ttopRules?: ReadonlyArray<Pick<LoadedRule, \"relativePath\" | \"matchReason\">>;\n}\n\nexport class RulesBanner extends Container {\n\tprivate readonly props: RulesBannerProps;\n\tprivate readonly theme: Theme;\n\n\tconstructor(props: RulesBannerProps, theme: Theme) {\n\t\tsuper();\n\t\tthis.props = props;\n\t\tthis.theme = theme;\n\t}\n\n\toverride render(width: number): string[] {\n\t\treturn renderBannerLines(this.props, this.theme, width);\n\t}\n\n\toverride invalidate(): void {}\n}\n\nexport function renderBannerLines(props: RulesBannerProps, theme: Theme, width: number): string[] {\n\tif (props.ruleCount === 0) {\n\t\treturn buildNoticeBox(\n\t\t\t{\n\t\t\t\ttitle: \"[pi-rules] No rules discovered\",\n\t\t\t\ttone: \"accent\",\n\t\t\t\twhy: \"No rules were discovered.\",\n\t\t\t},\n\t\t\t{ expanded: false },\n\t\t\ttheme,\n\t\t).render(width);\n\t}\n\n\tconst extra: NoticeLine[] = (props.topRules ?? []).map((rule) => {\n\t\tconst hasDiagnostic = props.diagnostics.some((diagnostic) => diagnostic.source === rule.relativePath);\n\t\tconst annotation =\n\t\t\ttypeof rule.matchReason === \"object\" && rule.matchReason.kind === \"glob\" ? ` ${rule.matchReason.pattern}` : \"\";\n\t\treturn {\n\t\t\ttext: ` ${hasDiagnostic ? \"⚠\" : \"●\"} ${rule.relativePath}${annotation}`,\n\t\t\ttone: hasDiagnostic ? (\"error\" as const) : (\"success\" as const),\n\t\t};\n\t});\n\tif (props.diagnostics.length > 0) {\n\t\textra.push({ text: ` ${props.diagnostics.length} warning(s)`, tone: \"warning\" });\n\t}\n\n\treturn buildNoticeBox(\n\t\t{\n\t\t\ttitle: `[pi-rules] ${props.ruleCount} active rules`,\n\t\t\ttone: \"accent\",\n\t\t\twhy: `${props.ruleCount} active rules were discovered.`,\n\t\t\textra,\n\t\t},\n\t\t{ expanded: false },\n\t\ttheme,\n\t).render(width);\n}\n\nexport interface StatusLineInput {\n\truleCount: number;\n\thasErrors: boolean;\n}\n\nexport function statusLineText(input: StatusLineInput, theme: Theme): string {\n\tconst base = `[pi-rules] ${input.ruleCount} active`;\n\tif (input.hasErrors) {\n\t\treturn theme.fg(\"muted\", `${base} · `) + theme.fg(\"error\", \"⚠ errors\");\n\t}\n\treturn theme.fg(\"muted\", base);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/todotools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAiBrE,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAsCjE;AAED,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACN,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACxB,gCAAgC,EAChC,+BAA+B,EAC/B,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,eAAe,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/todotools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAmBrE,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAyDjE;AAED,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACN,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,wBAAwB,EACxB,gCAAgC,EAChC,+BAA+B,EAC/B,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,eAAe,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { registerTodoCommand } from "./commands.js";
2
+ import { phasesFromCursorTodos } from "./native-todo-mirror.js";
2
3
  import { TASK_MANAGEMENT_SECTION } from "./prompt.js";
3
4
  import { clonePhases, getLatestPhasesFromBranchEntries, } from "./state.js";
5
+ import { TODO_STATE_ENTRY_TYPE } from "./todo-types.js";
4
6
  import { getTodoWidgetModel } from "./todo-widget.js";
5
7
  import { TodoWidgetComponent } from "./todo-widget-component.js";
6
8
  import { registerTodoTool } from "./tools/todo.js";
@@ -27,6 +29,24 @@ export default function todotoolsExtension(pi) {
27
29
  pi.on("session_tree", async (_event, ctx) => {
28
30
  syncFromSession(ctx);
29
31
  });
32
+ pi.on("message_end", async (event, ctx) => {
33
+ const message = event.message;
34
+ if (message?.role !== "assistant" || !Array.isArray(message.content)) {
35
+ return;
36
+ }
37
+ for (const block of message.content) {
38
+ if (block.type !== "toolCall" || block.name !== "todo" || block.arguments?.op) {
39
+ continue;
40
+ }
41
+ const phases = phasesFromCursorTodos(block.arguments?.todos);
42
+ if (phases.length === 0) {
43
+ continue;
44
+ }
45
+ setCurrentPhases(phases);
46
+ pi.appendEntry(TODO_STATE_ENTRY_TYPE, { schema: "v2", phases });
47
+ syncWidget(ctx);
48
+ }
49
+ });
30
50
  pi.on("before_agent_start", async (event) => {
31
51
  return {
32
52
  systemPrompt: `${event.systemPrompt}\n${TASK_MANAGEMENT_SECTION}`,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/todotools/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI, ExtensionContext } from \"../../types.ts\";\nimport { registerTodoCommand } from \"./commands.ts\";\nimport { TASK_MANAGEMENT_SECTION } from \"./prompt.ts\";\nimport {\n\tclonePhases,\n\tgetLatestPhasesFromBranchEntries,\n\ttype TodoCompletionTransition,\n\ttype TodoPhase,\n} from \"./state.ts\";\nimport { getTodoWidgetModel } from \"./todo-widget.ts\";\nimport { TodoWidgetComponent } from \"./todo-widget-component.ts\";\nimport { registerTodoTool } from \"./tools/todo.ts\";\n\nfunction getLatestPhases(ctx: ExtensionContext): TodoPhase[] {\n\treturn getLatestPhasesFromBranchEntries(ctx.sessionManager.getBranch());\n}\n\nexport default function todotoolsExtension(pi: ExtensionAPI): void {\n\tlet currentPhases: TodoPhase[] = [];\n\n\tconst getCurrentPhases = (): TodoPhase[] => clonePhases(currentPhases);\n\n\tconst setCurrentPhases = (phases: TodoPhase[]): void => {\n\t\tcurrentPhases = clonePhases(phases);\n\t};\n\n\tconst syncWidget = (ctx: ExtensionContext, completedTasks: readonly TodoCompletionTransition[] = []): void => {\n\t\tconst model = getTodoWidgetModel(currentPhases);\n\t\tctx.ui.setWidget(\n\t\t\t\"todo-sidebar\",\n\t\t\tmodel ? (tui, theme) => new TodoWidgetComponent(tui, theme, model, completedTasks) : undefined,\n\t\t);\n\t};\n\n\tconst syncFromSession = (ctx: ExtensionContext): void => {\n\t\tcurrentPhases = getLatestPhases(ctx);\n\t\tsyncWidget(ctx);\n\t};\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsyncFromSession(ctx);\n\t});\n\n\tpi.on(\"session_tree\", async (_event, ctx) => {\n\t\tsyncFromSession(ctx);\n\t});\n\n\tpi.on(\"before_agent_start\", async (event) => {\n\t\treturn {\n\t\t\tsystemPrompt: `${event.systemPrompt}\\n${TASK_MANAGEMENT_SECTION}`,\n\t\t};\n\t});\n\n\tregisterTodoTool(pi, { getCurrentPhases, setCurrentPhases, syncWidget });\n\tregisterTodoCommand(pi, { getCurrentPhases, setCurrentPhases, syncWidget });\n}\n\nexport { findPhaseFuzzy, findTaskFuzzy, registerTodoCommand, tokenizeTodoArgs } from \"./commands.ts\";\nexport { markdownToPhases, phasesToMarkdown, resolveTodoMarkdownPath } from \"./markdown.ts\";\nexport { TASK_MANAGEMENT_SECTION } from \"./prompt.ts\";\nexport {\n\tappendItems,\n\tapplyEntry,\n\tapplyOpsToPhases,\n\tapplyParams,\n\tclonePhases,\n\tcloneTask,\n\tDEFAULT_INIT_PHASE,\n\tfindPhaseByName,\n\tfindTaskByContent,\n\tformatSummary,\n\tgetCompletionTransitions,\n\tgetLatestPhasesFromBranchEntries,\n\tgetLatestTodosFromBranchEntries,\n\tgetTaskTargets,\n\tgetTodoMarker,\n\tgetTodoResultLines,\n\tgetTodoWidgetLines,\n\tinitPhases,\n\tisIncompleteTodo,\n\tisTerminalTodoStatus,\n\tisTodoItem,\n\tisTodoItemArray,\n\tisTodoPhase,\n\tisTodoPhaseArray,\n\tnextActionableTask,\n\tnormalizeInProgressTask,\n\tremoveTasks,\n\tresolvePhaseOrError,\n\tresolveTaskOrError,\n\tsanitizeTodoText,\n\tTODO_STATE_ENTRY_TYPE,\n\ttype TodoCompletionTransition,\n\ttype TodoItem,\n\ttype TodoOpEntry,\n\ttype TodoOperation,\n\ttype TodoPhase,\n\ttype TodoStateEntry,\n\ttype TodoStatus,\n\ttype TodoToolDetails,\n} from \"./state.ts\";\nexport { phaseRomanNumeral } from \"./tools/todo.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/todotools/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExtensionAPI, ExtensionContext } from \"../../types.ts\";\nimport { registerTodoCommand } from \"./commands.ts\";\nimport { phasesFromCursorTodos } from \"./native-todo-mirror.ts\";\nimport { TASK_MANAGEMENT_SECTION } from \"./prompt.ts\";\nimport {\n\tclonePhases,\n\tgetLatestPhasesFromBranchEntries,\n\ttype TodoCompletionTransition,\n\ttype TodoPhase,\n} from \"./state.ts\";\nimport { TODO_STATE_ENTRY_TYPE } from \"./todo-types.ts\";\nimport { getTodoWidgetModel } from \"./todo-widget.ts\";\nimport { TodoWidgetComponent } from \"./todo-widget-component.ts\";\nimport { registerTodoTool } from \"./tools/todo.ts\";\n\nfunction getLatestPhases(ctx: ExtensionContext): TodoPhase[] {\n\treturn getLatestPhasesFromBranchEntries(ctx.sessionManager.getBranch());\n}\n\nexport default function todotoolsExtension(pi: ExtensionAPI): void {\n\tlet currentPhases: TodoPhase[] = [];\n\n\tconst getCurrentPhases = (): TodoPhase[] => clonePhases(currentPhases);\n\n\tconst setCurrentPhases = (phases: TodoPhase[]): void => {\n\t\tcurrentPhases = clonePhases(phases);\n\t};\n\n\tconst syncWidget = (ctx: ExtensionContext, completedTasks: readonly TodoCompletionTransition[] = []): void => {\n\t\tconst model = getTodoWidgetModel(currentPhases);\n\t\tctx.ui.setWidget(\n\t\t\t\"todo-sidebar\",\n\t\t\tmodel ? (tui, theme) => new TodoWidgetComponent(tui, theme, model, completedTasks) : undefined,\n\t\t);\n\t};\n\n\tconst syncFromSession = (ctx: ExtensionContext): void => {\n\t\tcurrentPhases = getLatestPhases(ctx);\n\t\tsyncWidget(ctx);\n\t};\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsyncFromSession(ctx);\n\t});\n\n\tpi.on(\"session_tree\", async (_event, ctx) => {\n\t\tsyncFromSession(ctx);\n\t});\n\n\tpi.on(\"message_end\", async (event, ctx) => {\n\t\tconst message = event.message;\n\t\tif (message?.role !== \"assistant\" || !Array.isArray(message.content)) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const block of message.content) {\n\t\t\tif (block.type !== \"toolCall\" || block.name !== \"todo\" || block.arguments?.op) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst phases = phasesFromCursorTodos(block.arguments?.todos);\n\t\t\tif (phases.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tsetCurrentPhases(phases);\n\t\t\tpi.appendEntry(TODO_STATE_ENTRY_TYPE, { schema: \"v2\", phases });\n\t\t\tsyncWidget(ctx);\n\t\t}\n\t});\n\n\tpi.on(\"before_agent_start\", async (event) => {\n\t\treturn {\n\t\t\tsystemPrompt: `${event.systemPrompt}\\n${TASK_MANAGEMENT_SECTION}`,\n\t\t};\n\t});\n\n\tregisterTodoTool(pi, { getCurrentPhases, setCurrentPhases, syncWidget });\n\tregisterTodoCommand(pi, { getCurrentPhases, setCurrentPhases, syncWidget });\n}\n\nexport { findPhaseFuzzy, findTaskFuzzy, registerTodoCommand, tokenizeTodoArgs } from \"./commands.ts\";\nexport { markdownToPhases, phasesToMarkdown, resolveTodoMarkdownPath } from \"./markdown.ts\";\nexport { TASK_MANAGEMENT_SECTION } from \"./prompt.ts\";\nexport {\n\tappendItems,\n\tapplyEntry,\n\tapplyOpsToPhases,\n\tapplyParams,\n\tclonePhases,\n\tcloneTask,\n\tDEFAULT_INIT_PHASE,\n\tfindPhaseByName,\n\tfindTaskByContent,\n\tformatSummary,\n\tgetCompletionTransitions,\n\tgetLatestPhasesFromBranchEntries,\n\tgetLatestTodosFromBranchEntries,\n\tgetTaskTargets,\n\tgetTodoMarker,\n\tgetTodoResultLines,\n\tgetTodoWidgetLines,\n\tinitPhases,\n\tisIncompleteTodo,\n\tisTerminalTodoStatus,\n\tisTodoItem,\n\tisTodoItemArray,\n\tisTodoPhase,\n\tisTodoPhaseArray,\n\tnextActionableTask,\n\tnormalizeInProgressTask,\n\tremoveTasks,\n\tresolvePhaseOrError,\n\tresolveTaskOrError,\n\tsanitizeTodoText,\n\tTODO_STATE_ENTRY_TYPE,\n\ttype TodoCompletionTransition,\n\ttype TodoItem,\n\ttype TodoOpEntry,\n\ttype TodoOperation,\n\ttype TodoPhase,\n\ttype TodoStateEntry,\n\ttype TodoStatus,\n\ttype TodoToolDetails,\n} from \"./state.ts\";\nexport { phaseRomanNumeral } from \"./tools/todo.ts\";\n"]}
@@ -0,0 +1,3 @@
1
+ import type { TodoPhase } from "./todo-types.ts";
2
+ export declare function phasesFromCursorTodos(todos: unknown): TodoPhase[];
3
+ //# sourceMappingURL=native-todo-mirror.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-todo-mirror.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/todotools/native-todo-mirror.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAC;AAK7D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,CAkBjE"}
@@ -0,0 +1,22 @@
1
+ const STATUSES = new Set(["pending", "in_progress", "completed", "abandoned"]);
2
+ const DEFAULT_PHASE_NAME = "Tasks";
3
+ export function phasesFromCursorTodos(todos) {
4
+ if (!Array.isArray(todos)) {
5
+ return [];
6
+ }
7
+ const tasks = [];
8
+ for (const item of todos) {
9
+ if (!item || typeof item !== "object") {
10
+ continue;
11
+ }
12
+ const raw = item;
13
+ const content = typeof raw.content === "string" ? raw.content.trim() : "";
14
+ if (!content) {
15
+ continue;
16
+ }
17
+ const status = STATUSES.has(raw.status) ? raw.status : "pending";
18
+ tasks.push({ content, status });
19
+ }
20
+ return tasks.length > 0 ? [{ name: DEFAULT_PHASE_NAME, tasks }] : [];
21
+ }
22
+ //# sourceMappingURL=native-todo-mirror.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-todo-mirror.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/todotools/native-todo-mirror.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAa,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;AAC3F,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,MAAM,UAAU,qBAAqB,CAAC,KAAc;IACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvC,SAAS;QACV,CAAC;QACD,MAAM,GAAG,GAAG,IAA+C,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,SAAS;QACV,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAoB,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,MAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC","sourcesContent":["import type { TodoPhase, TodoStatus } from \"./todo-types.ts\";\n\nconst STATUSES = new Set<TodoStatus>([\"pending\", \"in_progress\", \"completed\", \"abandoned\"]);\nconst DEFAULT_PHASE_NAME = \"Tasks\";\n\nexport function phasesFromCursorTodos(todos: unknown): TodoPhase[] {\n\tif (!Array.isArray(todos)) {\n\t\treturn [];\n\t}\n\tconst tasks = [];\n\tfor (const item of todos) {\n\t\tif (!item || typeof item !== \"object\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst raw = item as { content?: unknown; status?: unknown };\n\t\tconst content = typeof raw.content === \"string\" ? raw.content.trim() : \"\";\n\t\tif (!content) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst status = STATUSES.has(raw.status as TodoStatus) ? (raw.status as TodoStatus) : \"pending\";\n\t\ttasks.push({ content, status });\n\t}\n\treturn tasks.length > 0 ? [{ name: DEFAULT_PHASE_NAME, tasks }] : [];\n}\n"]}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Lazy boundary for the HTML-to-text/markdown converters.
3
+ *
4
+ * `content.ts` pulls in jsdom (plus Readability and turndown), the single
5
+ * heaviest package in the CLI's startup import graph. Nothing is needed until
6
+ * the webfetch tool actually converts an HTML response, so the module loads on
7
+ * first conversion instead of at process start. Both call sites are already
8
+ * async, so deferring costs nothing beyond the one-time load the run would
9
+ * have paid anyway.
10
+ *
11
+ * Follows the repository's documented lazy-boundary pattern
12
+ * (`packages/ai/src/api/*.lazy.ts`); `test/startup-import-graph.test.ts` fails
13
+ * if a static edge to jsdom reappears.
14
+ */
15
+ export declare function htmlToMarkdown(html: string, url: string): Promise<string>;
16
+ export declare function htmlToText(html: string, url: string): Promise<string>;
17
+ //# sourceMappingURL=content.lazy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.lazy.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/content.lazy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/E;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3E"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Lazy boundary for the HTML-to-text/markdown converters.
3
+ *
4
+ * `content.ts` pulls in jsdom (plus Readability and turndown), the single
5
+ * heaviest package in the CLI's startup import graph. Nothing is needed until
6
+ * the webfetch tool actually converts an HTML response, so the module loads on
7
+ * first conversion instead of at process start. Both call sites are already
8
+ * async, so deferring costs nothing beyond the one-time load the run would
9
+ * have paid anyway.
10
+ *
11
+ * Follows the repository's documented lazy-boundary pattern
12
+ * (`packages/ai/src/api/*.lazy.ts`); `test/startup-import-graph.test.ts` fails
13
+ * if a static edge to jsdom reappears.
14
+ */
15
+ const loadContentModule = () => import("./content.js");
16
+ export async function htmlToMarkdown(html, url) {
17
+ return (await loadContentModule()).htmlToMarkdown(html, url);
18
+ }
19
+ export async function htmlToText(html, url) {
20
+ return (await loadContentModule()).htmlToText(html, url);
21
+ }
22
+ //# sourceMappingURL=content.lazy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.lazy.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/content.lazy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,GAAW;IAC7D,OAAO,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,GAAW;IACzD,OAAO,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC","sourcesContent":["/**\n * Lazy boundary for the HTML-to-text/markdown converters.\n *\n * `content.ts` pulls in jsdom (plus Readability and turndown), the single\n * heaviest package in the CLI's startup import graph. Nothing is needed until\n * the webfetch tool actually converts an HTML response, so the module loads on\n * first conversion instead of at process start. Both call sites are already\n * async, so deferring costs nothing beyond the one-time load the run would\n * have paid anyway.\n *\n * Follows the repository's documented lazy-boundary pattern\n * (`packages/ai/src/api/*.lazy.ts`); `test/startup-import-graph.test.ts` fails\n * if a static edge to jsdom reappears.\n */\n\nconst loadContentModule = () => import(\"./content.ts\");\n\nexport async function htmlToMarkdown(html: string, url: string): Promise<string> {\n\treturn (await loadContentModule()).htmlToMarkdown(html, url);\n}\n\nexport async function htmlToText(html: string, url: string): Promise<string> {\n\treturn (await loadContentModule()).htmlToText(html, url);\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { StringEnum } from "@earendil-works/pi-ai";
2
2
  import { Type } from "typebox";
3
3
  import { defineTool } from "../../../types.js";
4
- import { htmlToMarkdown, htmlToText } from "./content.js";
4
+ import { htmlToMarkdown, htmlToText } from "./content.lazy.js";
5
5
  import { clampTimeout, fetchUrl } from "./fetcher.js";
6
6
  const WEBFETCH_FORMATS = ["markdown", "text", "html"];
7
7
  const Params = Type.Object({
@@ -84,11 +84,11 @@ export const webfetch = defineTool({
84
84
  let text = raw;
85
85
  let converted = false;
86
86
  if (isHtml && format === "markdown") {
87
- text = htmlToMarkdown(raw, fetched.url);
87
+ text = await htmlToMarkdown(raw, fetched.url);
88
88
  converted = true;
89
89
  }
90
90
  else if (isHtml && format === "text") {
91
- text = htmlToText(raw, fetched.url);
91
+ text = await htmlToText(raw, fetched.url);
92
92
  converted = true;
93
93
  }
94
94
  const capped = capWebfetchOutput(text);