@dev-sergeev/datalab-kit 0.1.2 → 0.1.4

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 (355) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +23 -5
  3. package/THIRD_PARTY_NOTICES.md +6 -2
  4. package/docs/adr/0001-user-settings-priority.md +2 -0
  5. package/docs/adr/0002-package-delivery.md +8 -0
  6. package/node_modules/@pi-plugins/elapsed/LICENSE +21 -0
  7. package/node_modules/@pi-plugins/elapsed/README.md +45 -0
  8. package/node_modules/@pi-plugins/elapsed/dist/index.d.mts +8 -0
  9. package/node_modules/@pi-plugins/elapsed/dist/index.d.mts.map +1 -0
  10. package/node_modules/@pi-plugins/elapsed/dist/index.mjs +47 -0
  11. package/node_modules/@pi-plugins/elapsed/dist/index.mjs.map +1 -0
  12. package/node_modules/@pi-plugins/elapsed/package.json +65 -0
  13. package/node_modules/@tifan/pi-recap/README.md +61 -0
  14. package/node_modules/@tifan/pi-recap/package.json +43 -0
  15. package/node_modules/@tifan/pi-recap/src/index.ts +586 -0
  16. package/node_modules/@tifan/pi-recap/src/model-picker.ts +234 -0
  17. package/node_modules/@tifan/pi-recap/src/models.ts +180 -0
  18. package/node_modules/@tifan/pi-recap/src/sanitize.ts +119 -0
  19. package/node_modules/@tifan/pi-recap/src/tui.ts +155 -0
  20. package/node_modules/@zigai/pi-extension-internals/README.md +24 -0
  21. package/node_modules/@zigai/pi-extension-internals/dist/editor-enhancer-registry.d.ts +21 -0
  22. package/node_modules/@zigai/pi-extension-internals/dist/editor-enhancer-registry.js +233 -0
  23. package/node_modules/@zigai/pi-extension-internals/dist/index.d.ts +6 -0
  24. package/node_modules/@zigai/pi-extension-internals/dist/index.js +3 -0
  25. package/node_modules/@zigai/pi-extension-internals/dist/linked-method-patch.d.ts +34 -0
  26. package/node_modules/@zigai/pi-extension-internals/dist/linked-method-patch.js +272 -0
  27. package/node_modules/@zigai/pi-extension-internals/dist/pi-internal-import.d.ts +11 -0
  28. package/node_modules/@zigai/pi-extension-internals/dist/pi-internal-import.js +139 -0
  29. package/node_modules/@zigai/pi-extension-internals/package.json +41 -0
  30. package/node_modules/@zigai/pi-extension-settings/LICENSE +21 -0
  31. package/node_modules/@zigai/pi-extension-settings/README.md +36 -0
  32. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.d.ts +23 -0
  33. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.d.ts.map +1 -0
  34. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.js +75 -0
  35. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.js.map +1 -0
  36. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.d.ts +3 -0
  37. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.d.ts.map +1 -0
  38. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.js +5 -0
  39. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.js.map +1 -0
  40. package/node_modules/@zigai/pi-extension-settings/dist/cli.d.ts +6 -0
  41. package/node_modules/@zigai/pi-extension-settings/dist/cli.d.ts.map +1 -0
  42. package/node_modules/@zigai/pi-extension-settings/dist/cli.js +87 -0
  43. package/node_modules/@zigai/pi-extension-settings/dist/cli.js.map +1 -0
  44. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.d.ts +2 -0
  45. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.d.ts.map +1 -0
  46. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.js +2 -0
  47. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.js.map +1 -0
  48. package/node_modules/@zigai/pi-extension-settings/dist/definition.d.ts +159 -0
  49. package/node_modules/@zigai/pi-extension-settings/dist/definition.d.ts.map +1 -0
  50. package/node_modules/@zigai/pi-extension-settings/dist/definition.js +248 -0
  51. package/node_modules/@zigai/pi-extension-settings/dist/definition.js.map +1 -0
  52. package/node_modules/@zigai/pi-extension-settings/dist/file-system.d.ts +10 -0
  53. package/node_modules/@zigai/pi-extension-settings/dist/file-system.d.ts.map +1 -0
  54. package/node_modules/@zigai/pi-extension-settings/dist/file-system.js +115 -0
  55. package/node_modules/@zigai/pi-extension-settings/dist/file-system.js.map +1 -0
  56. package/node_modules/@zigai/pi-extension-settings/dist/index.d.ts +2 -0
  57. package/node_modules/@zigai/pi-extension-settings/dist/index.d.ts.map +1 -0
  58. package/node_modules/@zigai/pi-extension-settings/dist/index.js +2 -0
  59. package/node_modules/@zigai/pi-extension-settings/dist/index.js.map +1 -0
  60. package/node_modules/@zigai/pi-extension-settings/dist/json-value.d.ts +18 -0
  61. package/node_modules/@zigai/pi-extension-settings/dist/json-value.d.ts.map +1 -0
  62. package/node_modules/@zigai/pi-extension-settings/dist/json-value.js +56 -0
  63. package/node_modules/@zigai/pi-extension-settings/dist/json-value.js.map +1 -0
  64. package/node_modules/@zigai/pi-extension-settings/dist/paths.d.ts +11 -0
  65. package/node_modules/@zigai/pi-extension-settings/dist/paths.d.ts.map +1 -0
  66. package/node_modules/@zigai/pi-extension-settings/dist/paths.js +23 -0
  67. package/node_modules/@zigai/pi-extension-settings/dist/paths.js.map +1 -0
  68. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.d.ts +5 -0
  69. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.d.ts.map +1 -0
  70. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.js +21 -0
  71. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.js.map +1 -0
  72. package/node_modules/@zigai/pi-extension-settings/dist/pi.d.ts +106 -0
  73. package/node_modules/@zigai/pi-extension-settings/dist/pi.d.ts.map +1 -0
  74. package/node_modules/@zigai/pi-extension-settings/dist/pi.js +122 -0
  75. package/node_modules/@zigai/pi-extension-settings/dist/pi.js.map +1 -0
  76. package/node_modules/@zigai/pi-extension-settings/dist/pi.ts +2537 -0
  77. package/node_modules/@zigai/pi-extension-settings/dist/pi.ts.map +7 -0
  78. package/node_modules/@zigai/pi-extension-settings/dist/projects.d.ts +10 -0
  79. package/node_modules/@zigai/pi-extension-settings/dist/projects.d.ts.map +1 -0
  80. package/node_modules/@zigai/pi-extension-settings/dist/projects.js +177 -0
  81. package/node_modules/@zigai/pi-extension-settings/dist/projects.js.map +1 -0
  82. package/node_modules/@zigai/pi-extension-settings/dist/runtime.d.ts +40 -0
  83. package/node_modules/@zigai/pi-extension-settings/dist/runtime.d.ts.map +1 -0
  84. package/node_modules/@zigai/pi-extension-settings/dist/runtime.js +158 -0
  85. package/node_modules/@zigai/pi-extension-settings/dist/runtime.js.map +1 -0
  86. package/node_modules/@zigai/pi-extension-settings/dist/runtime.ts +158 -0
  87. package/node_modules/@zigai/pi-extension-settings/dist/runtime.ts.map +7 -0
  88. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.d.ts +19 -0
  89. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.d.ts.map +1 -0
  90. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.js +168 -0
  91. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.js.map +1 -0
  92. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.d.ts +9 -0
  93. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.d.ts.map +1 -0
  94. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.js +242 -0
  95. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.js.map +1 -0
  96. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.d.ts +59 -0
  97. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.d.ts.map +1 -0
  98. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.js +98 -0
  99. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.js.map +1 -0
  100. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.d.ts +80 -0
  101. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.d.ts.map +1 -0
  102. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.js +144 -0
  103. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.js.map +1 -0
  104. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.d.ts +5 -0
  105. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.d.ts.map +1 -0
  106. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.js +30 -0
  107. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.js.map +1 -0
  108. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.d.ts +10 -0
  109. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.d.ts.map +1 -0
  110. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.js +16 -0
  111. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.js.map +1 -0
  112. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.d.ts +54 -0
  113. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.d.ts.map +1 -0
  114. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.js +202 -0
  115. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.js.map +1 -0
  116. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.d.ts +5 -0
  117. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.d.ts.map +1 -0
  118. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.js +9 -0
  119. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.js.map +1 -0
  120. package/node_modules/@zigai/pi-extension-settings/docs/generation.md +71 -0
  121. package/node_modules/@zigai/pi-extension-settings/docs/manual-setup.md +98 -0
  122. package/node_modules/@zigai/pi-extension-settings/docs/runtime.md +100 -0
  123. package/node_modules/@zigai/pi-extension-settings/docs/ui-controls.md +31 -0
  124. package/node_modules/@zigai/pi-extension-settings/package.json +97 -0
  125. package/node_modules/@zigai/pi-mention-anything/README.md +113 -0
  126. package/node_modules/@zigai/pi-mention-anything/config.schema.json +313 -0
  127. package/node_modules/@zigai/pi-mention-anything/docs/command-protocol.md +106 -0
  128. package/node_modules/@zigai/pi-mention-anything/docs/providers.md +128 -0
  129. package/node_modules/@zigai/pi-mention-anything/examples/query-command.mjs +96 -0
  130. package/node_modules/@zigai/pi-mention-anything/examples/recursive-tree.ts +28 -0
  131. package/node_modules/@zigai/pi-mention-anything/examples/static.ts +28 -0
  132. package/node_modules/@zigai/pi-mention-anything/examples/tmux.ts +90 -0
  133. package/node_modules/@zigai/pi-mention-anything/examples/tree-settings.json +25 -0
  134. package/node_modules/@zigai/pi-mention-anything/package.json +58 -0
  135. package/node_modules/@zigai/pi-mention-anything/src/api.ts +75 -0
  136. package/node_modules/@zigai/pi-mention-anything/src/autocomplete.ts +231 -0
  137. package/node_modules/@zigai/pi-mention-anything/src/chain-autocomplete.ts +596 -0
  138. package/node_modules/@zigai/pi-mention-anything/src/chain-syntax.ts +345 -0
  139. package/node_modules/@zigai/pi-mention-anything/src/command-provider.ts +291 -0
  140. package/node_modules/@zigai/pi-mention-anything/src/configured-source.ts +66 -0
  141. package/node_modules/@zigai/pi-mention-anything/src/editor.ts +180 -0
  142. package/node_modules/@zigai/pi-mention-anything/src/expand-mentions.ts +162 -0
  143. package/node_modules/@zigai/pi-mention-anything/src/index.ts +54 -0
  144. package/node_modules/@zigai/pi-mention-anything/src/initial-suggestions.ts +190 -0
  145. package/node_modules/@zigai/pi-mention-anything/src/list-provider.ts +71 -0
  146. package/node_modules/@zigai/pi-mention-anything/src/mention-hub.ts +307 -0
  147. package/node_modules/@zigai/pi-mention-anything/src/mention-resolution.ts +374 -0
  148. package/node_modules/@zigai/pi-mention-anything/src/mention-syntax.ts +105 -0
  149. package/node_modules/@zigai/pi-mention-anything/src/register-mention.ts +89 -0
  150. package/node_modules/@zigai/pi-mention-anything/src/rendering.ts +53 -0
  151. package/node_modules/@zigai/pi-mention-anything/src/selected-items.ts +21 -0
  152. package/node_modules/@zigai/pi-mention-anything/src/selection-history.ts +135 -0
  153. package/node_modules/@zigai/pi-mention-anything/src/settings-input.ts +317 -0
  154. package/node_modules/@zigai/pi-mention-anything/src/settings.prevalidated.ts +57 -0
  155. package/node_modules/@zigai/pi-mention-anything/src/settings.ts +52 -0
  156. package/node_modules/@zigai/pi-mention-anything/src/source-contract.ts +174 -0
  157. package/node_modules/@zigai/pi-mention-anything/src/source-controller.ts +1070 -0
  158. package/node_modules/@zigai/pi-mention-anything/src/source-runtime.ts +99 -0
  159. package/node_modules/@zigai/pi-mention-skill/README.md +60 -0
  160. package/node_modules/@zigai/pi-mention-skill/config.schema.json +81 -0
  161. package/node_modules/@zigai/pi-mention-skill/package.json +56 -0
  162. package/node_modules/@zigai/pi-mention-skill/src/index.ts +60 -0
  163. package/node_modules/@zigai/pi-mention-skill/src/settings-input.ts +74 -0
  164. package/node_modules/@zigai/pi-mention-skill/src/settings.prevalidated.ts +18 -0
  165. package/node_modules/@zigai/pi-mention-skill/src/settings.ts +54 -0
  166. package/node_modules/@zigai/pi-mention-skill/src/skill-commands.ts +18 -0
  167. package/node_modules/@zigai/pi-mention-skill/src/skill-content.ts +60 -0
  168. package/node_modules/@zigai/pi-mention-skill/src/skill-provider.ts +105 -0
  169. package/node_modules/@zigai/pi-mention-skill/src/slash-skill-filter.ts +29 -0
  170. package/node_modules/argparse/LICENSE +21 -0
  171. package/node_modules/argparse/README.md +257 -0
  172. package/node_modules/argparse/index.js +3 -0
  173. package/node_modules/argparse/lib/action/append/constant.js +47 -0
  174. package/node_modules/argparse/lib/action/append.js +53 -0
  175. package/node_modules/argparse/lib/action/count.js +40 -0
  176. package/node_modules/argparse/lib/action/help.js +47 -0
  177. package/node_modules/argparse/lib/action/store/constant.js +43 -0
  178. package/node_modules/argparse/lib/action/store/false.js +27 -0
  179. package/node_modules/argparse/lib/action/store/true.js +26 -0
  180. package/node_modules/argparse/lib/action/store.js +50 -0
  181. package/node_modules/argparse/lib/action/subparsers.js +149 -0
  182. package/node_modules/argparse/lib/action/version.js +47 -0
  183. package/node_modules/argparse/lib/action.js +146 -0
  184. package/node_modules/argparse/lib/action_container.js +482 -0
  185. package/node_modules/argparse/lib/argparse.js +14 -0
  186. package/node_modules/argparse/lib/argument/error.js +50 -0
  187. package/node_modules/argparse/lib/argument/exclusive.js +54 -0
  188. package/node_modules/argparse/lib/argument/group.js +75 -0
  189. package/node_modules/argparse/lib/argument_parser.js +1161 -0
  190. package/node_modules/argparse/lib/const.js +21 -0
  191. package/node_modules/argparse/lib/help/added_formatters.js +87 -0
  192. package/node_modules/argparse/lib/help/formatter.js +795 -0
  193. package/node_modules/argparse/lib/namespace.js +76 -0
  194. package/node_modules/argparse/lib/utils.js +57 -0
  195. package/node_modules/argparse/package.json +34 -0
  196. package/node_modules/esprima/LICENSE.BSD +21 -0
  197. package/node_modules/esprima/README.md +46 -0
  198. package/node_modules/esprima/bin/esparse.js +139 -0
  199. package/node_modules/esprima/bin/esvalidate.js +236 -0
  200. package/node_modules/esprima/dist/esprima.js +6709 -0
  201. package/node_modules/esprima/package.json +112 -0
  202. package/node_modules/extend-shallow/LICENSE +21 -0
  203. package/node_modules/extend-shallow/README.md +61 -0
  204. package/node_modules/extend-shallow/index.js +33 -0
  205. package/node_modules/extend-shallow/package.json +56 -0
  206. package/node_modules/graceful-fs/LICENSE +15 -0
  207. package/node_modules/graceful-fs/README.md +143 -0
  208. package/node_modules/graceful-fs/clone.js +23 -0
  209. package/node_modules/graceful-fs/graceful-fs.js +448 -0
  210. package/node_modules/graceful-fs/legacy-streams.js +118 -0
  211. package/node_modules/graceful-fs/package.json +53 -0
  212. package/node_modules/graceful-fs/polyfills.js +355 -0
  213. package/node_modules/gray-matter/LICENSE +21 -0
  214. package/node_modules/gray-matter/README.md +565 -0
  215. package/node_modules/gray-matter/gray-matter.d.ts +114 -0
  216. package/node_modules/gray-matter/index.js +228 -0
  217. package/node_modules/gray-matter/lib/defaults.js +18 -0
  218. package/node_modules/gray-matter/lib/engine.js +30 -0
  219. package/node_modules/gray-matter/lib/engines.js +54 -0
  220. package/node_modules/gray-matter/lib/excerpt.js +32 -0
  221. package/node_modules/gray-matter/lib/parse.js +13 -0
  222. package/node_modules/gray-matter/lib/stringify.js +56 -0
  223. package/node_modules/gray-matter/lib/to-file.js +43 -0
  224. package/node_modules/gray-matter/lib/utils.js +66 -0
  225. package/node_modules/gray-matter/package.json +127 -0
  226. package/node_modules/is-extendable/LICENSE +21 -0
  227. package/node_modules/is-extendable/README.md +72 -0
  228. package/node_modules/is-extendable/index.js +13 -0
  229. package/node_modules/is-extendable/package.json +51 -0
  230. package/node_modules/js-yaml/LICENSE +21 -0
  231. package/node_modules/js-yaml/README.md +302 -0
  232. package/node_modules/js-yaml/bin/js-yaml.js +132 -0
  233. package/node_modules/js-yaml/dist/js-yaml.js +4024 -0
  234. package/node_modules/js-yaml/dist/js-yaml.min.js +1 -0
  235. package/node_modules/js-yaml/index.js +7 -0
  236. package/node_modules/js-yaml/lib/js-yaml/common.js +59 -0
  237. package/node_modules/js-yaml/lib/js-yaml/dumper.js +850 -0
  238. package/node_modules/js-yaml/lib/js-yaml/exception.js +43 -0
  239. package/node_modules/js-yaml/lib/js-yaml/loader.js +1679 -0
  240. package/node_modules/js-yaml/lib/js-yaml/mark.js +76 -0
  241. package/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
  242. package/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
  243. package/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
  244. package/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
  245. package/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
  246. package/node_modules/js-yaml/lib/js-yaml/schema.js +108 -0
  247. package/node_modules/js-yaml/lib/js-yaml/type/binary.js +138 -0
  248. package/node_modules/js-yaml/lib/js-yaml/type/bool.js +35 -0
  249. package/node_modules/js-yaml/lib/js-yaml/type/float.js +116 -0
  250. package/node_modules/js-yaml/lib/js-yaml/type/int.js +173 -0
  251. package/node_modules/js-yaml/lib/js-yaml/type/js/function.js +93 -0
  252. package/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +60 -0
  253. package/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +28 -0
  254. package/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
  255. package/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
  256. package/node_modules/js-yaml/lib/js-yaml/type/null.js +34 -0
  257. package/node_modules/js-yaml/lib/js-yaml/type/omap.js +44 -0
  258. package/node_modules/js-yaml/lib/js-yaml/type/pairs.js +53 -0
  259. package/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
  260. package/node_modules/js-yaml/lib/js-yaml/type/set.js +29 -0
  261. package/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
  262. package/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +88 -0
  263. package/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
  264. package/node_modules/js-yaml/lib/js-yaml.js +39 -0
  265. package/node_modules/js-yaml/package.json +52 -0
  266. package/node_modules/kind-of/LICENSE +21 -0
  267. package/node_modules/kind-of/README.md +367 -0
  268. package/node_modules/kind-of/index.js +129 -0
  269. package/node_modules/kind-of/package.json +88 -0
  270. package/node_modules/node-addon-api/common 2.gypi +21 -0
  271. package/node_modules/node-addon-api/except 2.gypi +25 -0
  272. package/node_modules/node-addon-api/napi 2.h +3463 -0
  273. package/node_modules/node-addon-api/napi-inl 2.h +7250 -0
  274. package/node_modules/node-addon-api/napi-inl.deprecated 2.h +186 -0
  275. package/node_modules/node-addon-api/node_addon_api 2.gyp +42 -0
  276. package/node_modules/node-addon-api/node_api 2.gyp +9 -0
  277. package/node_modules/node-addon-api/noexcept 2.gypi +26 -0
  278. package/node_modules/node-addon-api/nothing 2.c +0 -0
  279. package/node_modules/pi-toggle-skills/README.md +213 -0
  280. package/node_modules/pi-toggle-skills/package.json +60 -0
  281. package/node_modules/pi-toggle-skills/src/index.ts +112 -0
  282. package/node_modules/pi-toggle-skills/src/skill-discovery.ts +258 -0
  283. package/node_modules/pi-toggle-skills/src/skill-selector.ts +435 -0
  284. package/node_modules/pi-toggle-skills/toggle-skills 2.ts +316 -0
  285. package/node_modules/pi-toggle-skills/toggle-skills.ts +316 -0
  286. package/node_modules/pi-toggle-skills/vitest.config 2.ts +15 -0
  287. package/node_modules/pi-toggle-skills/vitest.config.ts +15 -0
  288. package/node_modules/proper-lockfile/LICENSE +21 -0
  289. package/node_modules/proper-lockfile/README.md +183 -0
  290. package/node_modules/proper-lockfile/index.js +40 -0
  291. package/node_modules/proper-lockfile/lib/adapter.js +85 -0
  292. package/node_modules/proper-lockfile/lib/lockfile.js +342 -0
  293. package/node_modules/proper-lockfile/lib/mtime-precision.js +55 -0
  294. package/node_modules/proper-lockfile/node_modules/retry/.npmignore +3 -0
  295. package/node_modules/proper-lockfile/node_modules/retry/.travis.yml +15 -0
  296. package/node_modules/proper-lockfile/node_modules/retry/License +21 -0
  297. package/node_modules/proper-lockfile/node_modules/retry/Makefile +18 -0
  298. package/node_modules/proper-lockfile/node_modules/retry/README.md +227 -0
  299. package/node_modules/proper-lockfile/node_modules/retry/equation.gif +0 -0
  300. package/node_modules/proper-lockfile/node_modules/retry/example/dns.js +31 -0
  301. package/node_modules/proper-lockfile/node_modules/retry/example/stop.js +40 -0
  302. package/node_modules/proper-lockfile/node_modules/retry/index.js +1 -0
  303. package/node_modules/proper-lockfile/node_modules/retry/lib/retry.js +100 -0
  304. package/node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js +158 -0
  305. package/node_modules/proper-lockfile/node_modules/retry/package.json +32 -0
  306. package/node_modules/proper-lockfile/node_modules/retry/test/common.js +10 -0
  307. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-forever.js +24 -0
  308. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-retry-operation.js +258 -0
  309. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-retry-wrap.js +101 -0
  310. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-timeouts.js +69 -0
  311. package/node_modules/proper-lockfile/package.json +71 -0
  312. package/node_modules/section-matter/LICENSE +21 -0
  313. package/node_modules/section-matter/README.md +236 -0
  314. package/node_modules/section-matter/index.js +136 -0
  315. package/node_modules/section-matter/package.json +55 -0
  316. package/node_modules/signal-exit/LICENSE.txt +16 -0
  317. package/node_modules/signal-exit/README.md +39 -0
  318. package/node_modules/signal-exit/index.js +202 -0
  319. package/node_modules/signal-exit/package.json +38 -0
  320. package/node_modules/signal-exit/signals.js +53 -0
  321. package/node_modules/sprintf-js/.npmignore +1 -0
  322. package/node_modules/sprintf-js/.npmignore 2 +1 -0
  323. package/node_modules/sprintf-js/LICENSE +24 -0
  324. package/node_modules/sprintf-js/LICENSE 2 +24 -0
  325. package/node_modules/sprintf-js/README 2.md +88 -0
  326. package/node_modules/sprintf-js/README.md +88 -0
  327. package/node_modules/sprintf-js/bower 2.json +14 -0
  328. package/node_modules/sprintf-js/bower.json +14 -0
  329. package/node_modules/sprintf-js/demo/angular.html +20 -0
  330. package/node_modules/sprintf-js/dist/angular-sprintf.min.js +4 -0
  331. package/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +1 -0
  332. package/node_modules/sprintf-js/dist/angular-sprintf.min.map +1 -0
  333. package/node_modules/sprintf-js/dist/sprintf.min.js +4 -0
  334. package/node_modules/sprintf-js/dist/sprintf.min.js.map +1 -0
  335. package/node_modules/sprintf-js/dist/sprintf.min.map +1 -0
  336. package/node_modules/sprintf-js/gruntfile 2.js +36 -0
  337. package/node_modules/sprintf-js/gruntfile.js +36 -0
  338. package/node_modules/sprintf-js/package 2.json +22 -0
  339. package/node_modules/sprintf-js/package.json +22 -0
  340. package/node_modules/sprintf-js/src/angular-sprintf.js +18 -0
  341. package/node_modules/sprintf-js/src/sprintf.js +208 -0
  342. package/node_modules/sprintf-js/test/test.js +82 -0
  343. package/node_modules/strip-bom-string/LICENSE +21 -0
  344. package/node_modules/strip-bom-string/README.md +66 -0
  345. package/node_modules/strip-bom-string/index.js +15 -0
  346. package/node_modules/strip-bom-string/package.json +60 -0
  347. package/node_modules/tree-sitter-bash/tree-sitter-bash 2.wasm +0 -0
  348. package/node_modules/typebox/license 2 +23 -0
  349. package/node_modules/typebox/package 2.json +87 -0
  350. package/node_modules/typebox/readme 2.md +370 -0
  351. package/node_modules/zod/compile 2.cjs +96 -0
  352. package/node_modules/zod/compile 2.js +52 -0
  353. package/node_modules/zod/index 2.cjs +52 -0
  354. package/node_modules/zod/index 2.js +7 -0
  355. package/package.json +13 -4
@@ -0,0 +1,21 @@
1
+ export type EditorFactory<Args extends readonly unknown[], Editor> = (...args: Args) => Editor;
2
+ export type EditorEnhancer<Args extends readonly unknown[], Editor> = (editor: Editor, ...args: Args) => Editor;
3
+ export type EditorEnhancerContext<Args extends readonly unknown[], Editor> = {
4
+ readonly hasUI: boolean;
5
+ readonly ui: {
6
+ getEditorComponent(): EditorFactory<Args, Editor> | undefined;
7
+ setEditorComponent(factory: EditorFactory<Args, Editor> | undefined): void;
8
+ };
9
+ };
10
+ export type EditorEnhancerHandle<Args extends readonly unknown[], Editor> = {
11
+ update(enhancer: EditorEnhancer<Args, Editor>): void;
12
+ dispose(): void;
13
+ };
14
+ /**
15
+ * Registers one keyed editor transformation in the shared editor factory stack.
16
+ *
17
+ * The key must come from `Symbol.for(...)` so independently bundled copies and extension
18
+ * reloads replace the same registration. The first registration owns the fallback factory;
19
+ * later registrations compose enhancers without changing that fallback.
20
+ */
21
+ export declare function registerEditorEnhancer<Args extends readonly unknown[], Editor>(ctx: EditorEnhancerContext<Args, Editor>, key: symbol, createDefaultEditor: EditorFactory<Args, Editor>, enhancer: EditorEnhancer<Args, Editor>): EditorEnhancerHandle<Args, Editor>;
@@ -0,0 +1,233 @@
1
+ const EDITOR_ENHANCER_PROTOCOL_VERSION = 1;
2
+ const EDITOR_ENHANCER_PROTOCOL = Symbol.for("zigai.pi-tweaks.editor-enhancer-protocol-version");
3
+ const EDITOR_ENHANCER_REGISTRY = Symbol.for("zigai.pi-tweaks.editor-enhancer-registry");
4
+ const EDITOR_ENHANCER_FACTORY = Symbol.for("zigai.pi-tweaks.editor-enhancer-factory");
5
+ function isUnknownDataDescriptor(descriptor) {
6
+ return descriptor !== undefined && Object.hasOwn(descriptor, "value");
7
+ }
8
+ /** Reads untrusted protocol data written by another bundled package copy. */
9
+ // oxlint-disable-next-line antislop/no-object-parameters -- Protocol data may be attached to any Pi UI or factory object.
10
+ function getOwnDataDescriptor(target, key) {
11
+ const descriptor = Object.getOwnPropertyDescriptor(target, key);
12
+ if (!isUnknownDataDescriptor(descriptor))
13
+ return undefined;
14
+ return descriptor;
15
+ }
16
+ function isNonNullObject(value) {
17
+ return typeof value === "object" && value !== null;
18
+ }
19
+ function isNumber(value) {
20
+ return typeof value === "number";
21
+ }
22
+ function isPropertyKey(value) {
23
+ return typeof value === "string" || typeof value === "number" || typeof value === "symbol";
24
+ }
25
+ function isGlobalSymbol(value) {
26
+ return typeof value === "symbol" && Symbol.keyFor(value) !== undefined;
27
+ }
28
+ // oxlint-disable-next-line antislop/no-object-parameters -- Enhancer records are intentionally structural protocol objects.
29
+ function hasOwnFunctionProperty(target, key) {
30
+ const descriptor = Object.getOwnPropertyDescriptor(target, key);
31
+ if (descriptor === undefined || !Object.hasOwn(descriptor, "value"))
32
+ return false;
33
+ const value = descriptor.value;
34
+ return typeof value === "function";
35
+ }
36
+ function hasValidEnhancerEntries(entries, legacy) {
37
+ for (const [key, entry] of entries) {
38
+ if (legacy) {
39
+ if (!isPropertyKey(key))
40
+ return false;
41
+ }
42
+ else if (!isGlobalSymbol(key)) {
43
+ return false;
44
+ }
45
+ if (!isNonNullObject(entry))
46
+ return false;
47
+ if (!hasOwnFunctionProperty(entry, "enhancer"))
48
+ return false;
49
+ }
50
+ return true;
51
+ }
52
+ function readRegistry(ui) {
53
+ const recordValue = getOwnDataDescriptor(ui, EDITOR_ENHANCER_REGISTRY)?.value;
54
+ if (recordValue === undefined)
55
+ return undefined;
56
+ if (!isNonNullObject(recordValue)) {
57
+ throw new TypeError("Incompatible editor enhancer registry");
58
+ }
59
+ const record = recordValue;
60
+ const version = getOwnDataDescriptor(record, EDITOR_ENHANCER_PROTOCOL)?.value;
61
+ if (version !== undefined && version !== EDITOR_ENHANCER_PROTOCOL_VERSION) {
62
+ let versionLabel = `invalid-${Object.prototype.toString.call(version).slice(8, -1).toLowerCase()}`;
63
+ if (isNumber(version))
64
+ versionLabel = version.toString();
65
+ throw new TypeError(`Unsupported editor enhancer protocol version ${versionLabel}`);
66
+ }
67
+ const baseFactory = getOwnDataDescriptor(record, "baseFactory")?.value;
68
+ const defaultFactory = getOwnDataDescriptor(record, "defaultFactory")?.value;
69
+ const enhancers = getOwnDataDescriptor(record, "enhancers")?.value;
70
+ const factory = getOwnDataDescriptor(record, "factory")?.value;
71
+ if ((baseFactory !== undefined && typeof baseFactory !== "function") ||
72
+ typeof defaultFactory !== "function" ||
73
+ !(enhancers instanceof Map) ||
74
+ !hasValidEnhancerEntries(enhancers, version === undefined) ||
75
+ typeof factory !== "function" ||
76
+ getOwnDataDescriptor(factory, EDITOR_ENHANCER_FACTORY)?.value !== true) {
77
+ throw new TypeError("Incompatible editor enhancer registry");
78
+ }
79
+ if (version === undefined &&
80
+ !Reflect.defineProperty(record, EDITOR_ENHANCER_PROTOCOL, {
81
+ configurable: true,
82
+ value: EDITOR_ENHANCER_PROTOCOL_VERSION,
83
+ })) {
84
+ throw new TypeError("Unable to mark legacy editor enhancer registry as protocol v1");
85
+ }
86
+ // SAFETY: The checks above validate every runtime field shared between independently
87
+ // bundled protocol copies. Generic arguments are fixed by the owning Pi UI instance.
88
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: Version, factories, map entries and factory marker are checked; the owning UI fixes generic editor arguments, which TypeScript cannot recover from cross-bundle symbol descriptors.
89
+ return record;
90
+ }
91
+ function markSharedFactory(factory) {
92
+ if (!Reflect.defineProperty(factory, EDITOR_ENHANCER_FACTORY, {
93
+ value: true,
94
+ })) {
95
+ throw new TypeError("Unable to mark the shared editor enhancer factory");
96
+ }
97
+ }
98
+ function isCurrentSharedFactory(factory, registry) {
99
+ return (factory !== undefined &&
100
+ factory === registry.factory &&
101
+ getOwnDataDescriptor(factory, EDITOR_ENHANCER_FACTORY)?.value === true);
102
+ }
103
+ function activateRegistry(ui, registry) {
104
+ const current = ui.getEditorComponent();
105
+ if (!isCurrentSharedFactory(current, registry)) {
106
+ registry.baseFactory = current;
107
+ }
108
+ ui.setEditorComponent(registry.factory);
109
+ }
110
+ /**
111
+ * Registers one keyed editor transformation in the shared editor factory stack.
112
+ *
113
+ * The key must come from `Symbol.for(...)` so independently bundled copies and extension
114
+ * reloads replace the same registration. The first registration owns the fallback factory;
115
+ * later registrations compose enhancers without changing that fallback.
116
+ */
117
+ export function registerEditorEnhancer(ctx, key, createDefaultEditor, enhancer) {
118
+ if (Symbol.keyFor(key) === undefined) {
119
+ throw new TypeError("Editor enhancer keys must be created with Symbol.for(...)");
120
+ }
121
+ if (!ctx.hasUI) {
122
+ return {
123
+ update() { },
124
+ dispose() { },
125
+ };
126
+ }
127
+ let created = false;
128
+ let registry = readRegistry(ctx.ui);
129
+ if (registry === undefined) {
130
+ const enhancers = new Map();
131
+ const createdRegistry = {
132
+ [EDITOR_ENHANCER_PROTOCOL]: EDITOR_ENHANCER_PROTOCOL_VERSION,
133
+ baseFactory: ctx.ui.getEditorComponent(),
134
+ defaultFactory: createDefaultEditor,
135
+ enhancers,
136
+ factory: (...args) => {
137
+ let editor = createdRegistry.baseFactory?.(...args) ??
138
+ createdRegistry.defaultFactory(...args);
139
+ for (const entry of enhancers.values()) {
140
+ editor = entry.enhancer(editor, ...args);
141
+ }
142
+ return editor;
143
+ },
144
+ };
145
+ markSharedFactory(createdRegistry.factory);
146
+ if (!Reflect.defineProperty(ctx.ui, EDITOR_ENHANCER_REGISTRY, {
147
+ configurable: true,
148
+ value: createdRegistry,
149
+ })) {
150
+ throw new TypeError("Unable to store the editor enhancer registry");
151
+ }
152
+ registry = createdRegistry;
153
+ created = true;
154
+ }
155
+ const previousEntry = registry.enhancers.get(key);
156
+ const previousBase = registry.baseFactory;
157
+ const entry = { enhancer };
158
+ registry.enhancers.set(key, entry);
159
+ try {
160
+ activateRegistry(ctx.ui, registry);
161
+ }
162
+ catch (cause) {
163
+ if (previousEntry === undefined)
164
+ registry.enhancers.delete(key);
165
+ else
166
+ registry.enhancers.set(key, previousEntry);
167
+ registry.baseFactory = previousBase;
168
+ if (created &&
169
+ getOwnDataDescriptor(ctx.ui, EDITOR_ENHANCER_REGISTRY)?.value === registry &&
170
+ !Reflect.deleteProperty(ctx.ui, EDITOR_ENHANCER_REGISTRY)) {
171
+ throw new TypeError("Unable to roll back the editor enhancer registry", { cause });
172
+ }
173
+ if (cause instanceof Error) {
174
+ throw cause;
175
+ }
176
+ throw new Error("Unable to activate the editor enhancer registry", { cause });
177
+ }
178
+ let disposed = false;
179
+ return {
180
+ update(nextEnhancer) {
181
+ if (disposed || registry.enhancers.get(key) !== entry) {
182
+ return;
183
+ }
184
+ const previousEnhancer = entry.enhancer;
185
+ const previousBase = registry.baseFactory;
186
+ entry.enhancer = nextEnhancer;
187
+ try {
188
+ activateRegistry(ctx.ui, registry);
189
+ }
190
+ catch (cause) {
191
+ entry.enhancer = previousEnhancer;
192
+ registry.baseFactory = previousBase;
193
+ throw cause;
194
+ }
195
+ },
196
+ dispose() {
197
+ if (disposed) {
198
+ return;
199
+ }
200
+ if (registry.enhancers.get(key) !== entry) {
201
+ disposed = true;
202
+ return;
203
+ }
204
+ if (registry.enhancers.size !== 1) {
205
+ const previousEntries = new Map(registry.enhancers);
206
+ registry.enhancers.delete(key);
207
+ try {
208
+ if (isCurrentSharedFactory(ctx.ui.getEditorComponent(), registry)) {
209
+ activateRegistry(ctx.ui, registry);
210
+ }
211
+ }
212
+ catch (cause) {
213
+ registry.enhancers.clear();
214
+ for (const [previousKey, previousEntry] of previousEntries) {
215
+ registry.enhancers.set(previousKey, previousEntry);
216
+ }
217
+ throw cause;
218
+ }
219
+ disposed = true;
220
+ return;
221
+ }
222
+ if (isCurrentSharedFactory(ctx.ui.getEditorComponent(), registry)) {
223
+ ctx.ui.setEditorComponent(registry.baseFactory);
224
+ }
225
+ if (getOwnDataDescriptor(ctx.ui, EDITOR_ENHANCER_REGISTRY)?.value === registry &&
226
+ !Reflect.deleteProperty(ctx.ui, EDITOR_ENHANCER_REGISTRY)) {
227
+ throw new TypeError("Unable to remove the editor enhancer registry");
228
+ }
229
+ registry.enhancers.delete(key);
230
+ disposed = true;
231
+ },
232
+ };
233
+ }
@@ -0,0 +1,6 @@
1
+ export { registerEditorEnhancer } from "./editor-enhancer-registry.ts";
2
+ export type { EditorEnhancer, EditorEnhancerContext, EditorEnhancerHandle, EditorFactory, } from "./editor-enhancer-registry.ts";
3
+ export { installKeyedLinkedMethodPatch, installLinkedMethodPatch, installLinkedRenderPatch, } from "./linked-method-patch.ts";
4
+ export type { KeyedLinkedMethodPatchHandle, LinkedMethod, LinkedMethodPatchHandle, } from "./linked-method-patch.ts";
5
+ export { loadPiInternalModule, loadPiRuntimeModule, warnPiInternalPatchUnavailable, } from "./pi-internal-import.ts";
6
+ export type { PiInternalModuleLoadOptions } from "./pi-internal-import.ts";
@@ -0,0 +1,3 @@
1
+ export { registerEditorEnhancer } from "./editor-enhancer-registry.js";
2
+ export { installKeyedLinkedMethodPatch, installLinkedMethodPatch, installLinkedRenderPatch, } from "./linked-method-patch.js";
3
+ export { loadPiInternalModule, loadPiRuntimeModule, warnPiInternalPatchUnavailable, } from "./pi-internal-import.js";
@@ -0,0 +1,34 @@
1
+ export type LinkedMethod<Instance, Args extends unknown[], Result> = (this: Instance, ...args: Args) => Result;
2
+ export type LinkedMethodPatchHandle<Instance, Args extends unknown[], Result> = {
3
+ /** The method immediately below this patch when it was installed. */
4
+ readonly predecessor: LinkedMethod<Instance, Args, Result>;
5
+ readonly patched: LinkedMethod<Instance, Args, Result>;
6
+ dispose(): void;
7
+ };
8
+ /** Uses the target as `this` when a method does not declare an explicit receiver. */
9
+ type MethodInstance<Target, Method> = Method extends (this: infer Instance, ...args: infer _Args) => infer _Result ? unknown extends Instance ? Target : Instance : never;
10
+ type MethodArgs<Method> = Method extends (this: infer _Instance, ...args: infer Args) => infer _Result ? Args : never;
11
+ type MethodResult<Method> = Method extends (this: infer _Instance, ...args: infer _Args) => infer Result ? Result : never;
12
+ type ExtractedLinkedMethod<Target, Method> = LinkedMethod<MethodInstance<Target, Method>, MethodArgs<Method>, MethodResult<Method>>;
13
+ /**
14
+ * Installs one removable method transform whose predecessor remains dynamically linked.
15
+ *
16
+ * This low-level operation intentionally installs a new layer on every call. Use
17
+ * `installKeyedLinkedMethodPatch` when an extension needs idempotent reload behavior.
18
+ * Independent layers may be disposed in any order without retaining stale closures.
19
+ */
20
+ export declare function installLinkedMethodPatch<Target extends object, Key extends keyof Target>(target: Target, key: Key, transform: (predecessor: ExtractedLinkedMethod<Target, Target[Key]>) => ExtractedLinkedMethod<Target, Target[Key]>): LinkedMethodPatchHandle<MethodInstance<Target, Target[Key]>, MethodArgs<Target[Key]>, MethodResult<Target[Key]>>;
21
+ export type KeyedLinkedMethodPatchHandle<Policy, Instance, Args extends unknown[], Result> = LinkedMethodPatchHandle<Instance, Args, Result> & {
22
+ update(policy: Policy): void;
23
+ };
24
+ /**
25
+ * Installs or updates one globally keyed linked method patch.
26
+ *
27
+ * The marker must come from `Symbol.for(...)`. Reinstalling the same marker updates its policy
28
+ * without adding another method layer, including when another bundled package copy installed it.
29
+ */
30
+ export declare function installKeyedLinkedMethodPatch<Target extends object, Key extends keyof Target, Policy>(target: Target, key: Key, marker: symbol, initialPolicy: Policy, transform: (predecessor: ExtractedLinkedMethod<Target, Target[Key]>, getPolicy: () => Policy) => ExtractedLinkedMethod<Target, Target[Key]>): KeyedLinkedMethodPatchHandle<Policy, MethodInstance<Target, Target[Key]>, MethodArgs<Target[Key]>, MethodResult<Target[Key]>>;
31
+ export declare function installLinkedRenderPatch<Target extends object & {
32
+ render: unknown;
33
+ }>(target: Target, transform: (predecessor: ExtractedLinkedMethod<Target, Target["render"]>) => ExtractedLinkedMethod<Target, Target["render"]>): LinkedMethodPatchHandle<MethodInstance<Target, Target["render"]>, MethodArgs<Target["render"]>, MethodResult<Target["render"]>>;
34
+ export {};
@@ -0,0 +1,272 @@
1
+ const PATCH_PREDECESSOR = Symbol.for("zigai.pi-tweaks.render-patch-predecessor");
2
+ const PATCH_PREDECESSOR_DESCRIPTOR = Symbol.for("zigai.pi-tweaks.render-patch-predecessor-descriptor");
3
+ const PATCH_PROTOCOL_VERSION = 1;
4
+ const PATCH_PROTOCOL = Symbol.for("zigai.pi-tweaks.render-patch-protocol-version");
5
+ function isUnknownDataDescriptor(descriptor) {
6
+ return descriptor !== undefined && Object.hasOwn(descriptor, "value");
7
+ }
8
+ /** Reads untrusted metadata written by another bundled package copy. */
9
+ // oxlint-disable-next-line antislop/no-object-parameters -- Metadata may be attached to any callable object.
10
+ function getOwnDataDescriptor(target, key) {
11
+ const descriptor = Object.getOwnPropertyDescriptor(target, key);
12
+ if (!isUnknownDataDescriptor(descriptor))
13
+ return undefined;
14
+ return descriptor;
15
+ }
16
+ function isNonNullObject(value) {
17
+ return typeof value === "object" && value !== null;
18
+ }
19
+ function isNumber(value) {
20
+ return typeof value === "number";
21
+ }
22
+ function getLinkedPredecessor(method) {
23
+ const version = getOwnDataDescriptor(method, PATCH_PROTOCOL)?.value;
24
+ if (version !== undefined && version !== PATCH_PROTOCOL_VERSION) {
25
+ let versionLabel = `invalid-${Object.prototype.toString.call(version).slice(8, -1).toLowerCase()}`;
26
+ if (isNumber(version))
27
+ versionLabel = version.toString();
28
+ throw new Error(`Unsupported linked method patch protocol version ${versionLabel}`);
29
+ }
30
+ const predecessor = getOwnDataDescriptor(method, PATCH_PREDECESSOR)?.value;
31
+ if (typeof predecessor !== "function") {
32
+ return undefined;
33
+ }
34
+ // SAFETY: installLinkedMethodPatch writes only a method with the same signature under
35
+ // this process-wide symbol, and the runtime check proves the reflected value is callable.
36
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: The versioned linked-patch protocol stores the same method signature; the callable check validates the reflected value, but TypeScript cannot retain generics through symbol descriptors.
37
+ return predecessor;
38
+ }
39
+ function getPredecessorDescriptor(method) {
40
+ const descriptor = getOwnDataDescriptor(method, PATCH_PREDECESSOR_DESCRIPTOR)?.value;
41
+ if (descriptor === undefined)
42
+ return undefined;
43
+ if (!isNonNullObject(descriptor)) {
44
+ throw new Error("Linked method patch has invalid predecessor descriptor metadata");
45
+ }
46
+ return descriptor;
47
+ }
48
+ function defineLinkedMetadata(method, predecessor, predecessorDescriptor, key) {
49
+ const metadata = [
50
+ [PATCH_PREDECESSOR, { configurable: true, value: predecessor, writable: true }],
51
+ [
52
+ PATCH_PREDECESSOR_DESCRIPTOR,
53
+ { configurable: true, value: predecessorDescriptor, writable: true },
54
+ ],
55
+ [PATCH_PROTOCOL, { configurable: true, value: PATCH_PROTOCOL_VERSION }],
56
+ ];
57
+ for (const [metadataKey, descriptor] of metadata) {
58
+ if (!Reflect.defineProperty(method, metadataKey, descriptor)) {
59
+ Reflect.deleteProperty(method, PATCH_PREDECESSOR);
60
+ Reflect.deleteProperty(method, PATCH_PREDECESSOR_DESCRIPTOR);
61
+ Reflect.deleteProperty(method, PATCH_PROTOCOL);
62
+ throw new TypeError(`Unable to attach linked patch metadata for ${String(key)}`);
63
+ }
64
+ }
65
+ }
66
+ function updateLinkedPredecessor(method, predecessor, predecessorDescriptor) {
67
+ if (!Reflect.set(method, PATCH_PREDECESSOR, predecessor) ||
68
+ !Reflect.set(method, PATCH_PREDECESSOR_DESCRIPTOR, predecessorDescriptor)) {
69
+ throw new Error("Unable to rewire linked method patch predecessor");
70
+ }
71
+ }
72
+ /**
73
+ * Installs one removable method transform whose predecessor remains dynamically linked.
74
+ *
75
+ * This low-level operation intentionally installs a new layer on every call. Use
76
+ * `installKeyedLinkedMethodPatch` when an extension needs idempotent reload behavior.
77
+ * Independent layers may be disposed in any order without retaining stale closures.
78
+ */
79
+ export function installLinkedMethodPatch(target, key, transform) {
80
+ const candidate = target[key];
81
+ if (typeof candidate !== "function") {
82
+ throw new TypeError(`Unable to patch non-function property ${String(key)}`);
83
+ }
84
+ // SAFETY: Target[Key] determines Method's this, arguments, and result types, while the
85
+ // runtime check proves the indexed value is callable. TypeScript cannot retain that
86
+ // conditional relationship after narrowing an indexed generic property.
87
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: Target[Key] supplies the exact method signature and candidate is checked callable; TypeScript loses that conditional indexed relationship after the unknown boundary.
88
+ const original = candidate;
89
+ const originalDescriptor = Object.getOwnPropertyDescriptor(target, key);
90
+ let patched;
91
+ const dynamicPredecessor = function (...args) {
92
+ const predecessor = getLinkedPredecessor(patched);
93
+ if (predecessor === undefined) {
94
+ throw new Error("Linked method patch lost its predecessor");
95
+ }
96
+ return predecessor.apply(this, args);
97
+ };
98
+ const transformed = transform(dynamicPredecessor);
99
+ if (typeof transformed !== "function") {
100
+ throw new TypeError(`Method transform for ${String(key)} returned a non-function`);
101
+ }
102
+ patched = transformed;
103
+ if (patched === original ||
104
+ Object.hasOwn(patched, PATCH_PREDECESSOR) ||
105
+ Object.hasOwn(patched, PATCH_PREDECESSOR_DESCRIPTOR) ||
106
+ Object.hasOwn(patched, PATCH_PROTOCOL)) {
107
+ throw new TypeError(`Method transform for ${String(key)} returned an installed method`);
108
+ }
109
+ if (!Object.isExtensible(patched)) {
110
+ throw new TypeError(`Method transform for ${String(key)} returned a non-extensible function`);
111
+ }
112
+ defineLinkedMetadata(patched, original, originalDescriptor, key);
113
+ let installed = false;
114
+ try {
115
+ installed = Reflect.set(target, key, patched) && target[key] === patched;
116
+ }
117
+ finally {
118
+ if (!installed) {
119
+ Reflect.deleteProperty(patched, PATCH_PREDECESSOR);
120
+ Reflect.deleteProperty(patched, PATCH_PREDECESSOR_DESCRIPTOR);
121
+ Reflect.deleteProperty(patched, PATCH_PROTOCOL);
122
+ }
123
+ }
124
+ if (!installed) {
125
+ throw new TypeError(`Unable to patch method ${String(key)}`);
126
+ }
127
+ let disposed = false;
128
+ return {
129
+ predecessor: original,
130
+ patched,
131
+ dispose() {
132
+ if (disposed)
133
+ return;
134
+ const predecessor = getLinkedPredecessor(patched);
135
+ if (predecessor === undefined) {
136
+ throw new Error("Linked method patch lost its predecessor");
137
+ }
138
+ const predecessorDescriptor = getPredecessorDescriptor(patched);
139
+ if (target[key] === patched) {
140
+ let restored;
141
+ if (predecessorDescriptor === undefined) {
142
+ restored = Reflect.deleteProperty(target, key);
143
+ }
144
+ else {
145
+ restored = Reflect.defineProperty(target, key, predecessorDescriptor);
146
+ }
147
+ if (!restored) {
148
+ throw new Error(`Unable to restore method ${String(key)}`);
149
+ }
150
+ disposed = true;
151
+ return;
152
+ }
153
+ const successor = target[key];
154
+ if (typeof successor !== "function") {
155
+ disposed = true;
156
+ return;
157
+ }
158
+ // SAFETY: A callable value at the patched key participates in the linked-method
159
+ // protocol only through getLinkedPredecessor's symbol validation. This cast lets
160
+ // that validation preserve Method's signature across the dynamically linked chain.
161
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: This callable is only traversed through version-checked linked metadata, never invoked; TypeScript cannot carry the installed method's signature through a reflected successor.
162
+ let current = successor;
163
+ const visited = new Set();
164
+ for (;;) {
165
+ if (visited.has(current)) {
166
+ throw new Error(`Unable to dispose cyclic method patch chain for ${String(key)}`);
167
+ }
168
+ visited.add(current);
169
+ const next = getLinkedPredecessor(current);
170
+ if (next === undefined) {
171
+ disposed = true;
172
+ return;
173
+ }
174
+ if (next === patched) {
175
+ updateLinkedPredecessor(current, predecessor, predecessorDescriptor);
176
+ disposed = true;
177
+ return;
178
+ }
179
+ current = next;
180
+ }
181
+ },
182
+ };
183
+ }
184
+ const KEYED_PATCH_PROTOCOL_VERSION = 1;
185
+ const KEYED_PATCH_PROTOCOL = Symbol.for("zigai.pi-tweaks.keyed-method-patch-protocol-version");
186
+ // oxlint-disable-next-line antislop/no-object-parameters -- Protocol handles are structural objects from another bundle copy.
187
+ function hasOwnFunctionProperty(target, key) {
188
+ return typeof getOwnDataDescriptor(target, key)?.value === "function";
189
+ }
190
+ /* oxlint-disable antislop/no-object-parameters -- This parses a protocol record created by another bundle copy. */
191
+ function readKeyedPatchHandle(record, methodKey) {
192
+ const version = getOwnDataDescriptor(record, KEYED_PATCH_PROTOCOL)?.value;
193
+ if (version !== KEYED_PATCH_PROTOCOL_VERSION) {
194
+ let versionLabel = `invalid-${Object.prototype.toString.call(version).slice(8, -1).toLowerCase()}`;
195
+ if (isNumber(version))
196
+ versionLabel = version.toString();
197
+ throw new TypeError(`Unsupported keyed method patch protocol version ${versionLabel}`);
198
+ }
199
+ if (getOwnDataDescriptor(record, "methodKey")?.value !== methodKey) {
200
+ throw new TypeError("Keyed method patch marker is already used for another method");
201
+ }
202
+ const handle = getOwnDataDescriptor(record, "handle")?.value;
203
+ if (!isNonNullObject(handle) ||
204
+ !hasOwnFunctionProperty(handle, "predecessor") ||
205
+ !hasOwnFunctionProperty(handle, "patched") ||
206
+ !hasOwnFunctionProperty(handle, "update") ||
207
+ !hasOwnFunctionProperty(handle, "dispose")) {
208
+ throw new TypeError("Incompatible keyed method patch handle");
209
+ }
210
+ // SAFETY: The shared record version and complete callable handle shape were validated.
211
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: Protocol version, method key and every callable handle member are validated; the globally keyed installer owns the policy/signature relationship that TypeScript cannot recover from descriptors.
212
+ return handle;
213
+ }
214
+ /* oxlint-enable antislop/no-object-parameters */
215
+ /**
216
+ * Installs or updates one globally keyed linked method patch.
217
+ *
218
+ * The marker must come from `Symbol.for(...)`. Reinstalling the same marker updates its policy
219
+ * without adding another method layer, including when another bundled package copy installed it.
220
+ */
221
+ export function installKeyedLinkedMethodPatch(target, key, marker, initialPolicy, transform) {
222
+ if (Symbol.keyFor(marker) === undefined) {
223
+ throw new TypeError("Keyed method patch markers must be created with Symbol.for(...)");
224
+ }
225
+ const installedRecord = getOwnDataDescriptor(target, marker)?.value;
226
+ if (installedRecord !== undefined) {
227
+ if (!isNonNullObject(installedRecord)) {
228
+ throw new TypeError("Incompatible keyed method patch record");
229
+ }
230
+ const handle = readKeyedPatchHandle(installedRecord, key);
231
+ handle.update(initialPolicy);
232
+ return handle;
233
+ }
234
+ let currentPolicy = initialPolicy;
235
+ const patch = installLinkedMethodPatch(target, key, (predecessor) => transform(predecessor, () => currentPolicy));
236
+ let disposed = false;
237
+ let record;
238
+ const handle = {
239
+ predecessor: patch.predecessor,
240
+ patched: patch.patched,
241
+ update(policy) {
242
+ if (!disposed)
243
+ currentPolicy = policy;
244
+ },
245
+ dispose() {
246
+ if (disposed)
247
+ return;
248
+ patch.dispose();
249
+ if (getOwnDataDescriptor(target, marker)?.value === record &&
250
+ !Reflect.deleteProperty(target, marker)) {
251
+ throw new TypeError(`Unable to remove keyed method patch ${String(marker)}`);
252
+ }
253
+ disposed = true;
254
+ },
255
+ };
256
+ record = {
257
+ [KEYED_PATCH_PROTOCOL]: KEYED_PATCH_PROTOCOL_VERSION,
258
+ methodKey: key,
259
+ handle,
260
+ };
261
+ if (!Reflect.defineProperty(target, marker, {
262
+ configurable: true,
263
+ value: record,
264
+ })) {
265
+ patch.dispose();
266
+ throw new TypeError(`Unable to store keyed method patch ${String(marker)}`);
267
+ }
268
+ return handle;
269
+ }
270
+ export function installLinkedRenderPatch(target, transform) {
271
+ return installLinkedMethodPatch(target, "render", transform);
272
+ }
@@ -0,0 +1,11 @@
1
+ export type PiInternalModuleLoadOptions<T> = {
2
+ readonly scope: string;
3
+ readonly feature: string;
4
+ readonly parse: (module: unknown) => T | undefined;
5
+ };
6
+ /** Reports a disabled best-effort patch without interrupting extension startup. */
7
+ export declare function warnPiInternalPatchUnavailable(scope: string, feature: string, cause?: unknown): void;
8
+ /** Loads and parses an unsupported Pi internal module, degrading to undefined on failure. */
9
+ export declare function loadPiInternalModule<T>(relativePath: string, options: PiInternalModuleLoadOptions<T>): Promise<T | undefined>;
10
+ /** Loads a runtime-owned export from Pi's bundle before its unbundled fallback module. */
11
+ export declare function loadPiRuntimeModule<T>(fallbackRelativePath: string, options: PiInternalModuleLoadOptions<T>): Promise<T | undefined>;