@dev-sergeev/datalab-kit 0.1.1 → 0.1.3

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 (339) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +26 -8
  3. package/THIRD_PARTY_NOTICES.md +6 -2
  4. package/dist/extension.js +8 -1
  5. package/dist/recap.d.ts +2 -0
  6. package/dist/recap.js +31 -0
  7. package/docs/adr/0002-package-delivery.md +2 -0
  8. package/node_modules/@gotgenes/pi-permission-system/src/authority/permission-prompt-component.ts +0 -11
  9. package/node_modules/@gotgenes/pi-permission-system/src/config/config-store.ts +0 -5
  10. package/node_modules/@gotgenes/pi-permission-system/src/index.ts +3 -15
  11. package/node_modules/@pi-plugins/elapsed/LICENSE +21 -0
  12. package/node_modules/@pi-plugins/elapsed/README.md +45 -0
  13. package/node_modules/@pi-plugins/elapsed/dist/index.d.mts +8 -0
  14. package/node_modules/@pi-plugins/elapsed/dist/index.d.mts.map +1 -0
  15. package/node_modules/@pi-plugins/elapsed/dist/index.mjs +47 -0
  16. package/node_modules/@pi-plugins/elapsed/dist/index.mjs.map +1 -0
  17. package/node_modules/@pi-plugins/elapsed/package.json +65 -0
  18. package/node_modules/@tifan/pi-recap/README.md +61 -0
  19. package/node_modules/@tifan/pi-recap/package.json +43 -0
  20. package/node_modules/@tifan/pi-recap/src/index.ts +584 -0
  21. package/node_modules/@tifan/pi-recap/src/model-picker.ts +233 -0
  22. package/node_modules/@tifan/pi-recap/src/models.ts +183 -0
  23. package/node_modules/@tifan/pi-recap/src/sanitize.ts +119 -0
  24. package/node_modules/@tifan/pi-recap/src/tui.ts +155 -0
  25. package/node_modules/@zigai/pi-extension-internals/README.md +24 -0
  26. package/node_modules/@zigai/pi-extension-internals/dist/editor-enhancer-registry.d.ts +21 -0
  27. package/node_modules/@zigai/pi-extension-internals/dist/editor-enhancer-registry.js +233 -0
  28. package/node_modules/@zigai/pi-extension-internals/dist/index.d.ts +6 -0
  29. package/node_modules/@zigai/pi-extension-internals/dist/index.js +3 -0
  30. package/node_modules/@zigai/pi-extension-internals/dist/linked-method-patch.d.ts +34 -0
  31. package/node_modules/@zigai/pi-extension-internals/dist/linked-method-patch.js +272 -0
  32. package/node_modules/@zigai/pi-extension-internals/dist/pi-internal-import.d.ts +11 -0
  33. package/node_modules/@zigai/pi-extension-internals/dist/pi-internal-import.js +139 -0
  34. package/node_modules/@zigai/pi-extension-internals/package.json +41 -0
  35. package/node_modules/@zigai/pi-extension-settings/LICENSE +21 -0
  36. package/node_modules/@zigai/pi-extension-settings/README.md +36 -0
  37. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.d.ts +23 -0
  38. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.d.ts.map +1 -0
  39. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.js +75 -0
  40. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.js.map +1 -0
  41. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.d.ts +3 -0
  42. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.d.ts.map +1 -0
  43. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.js +5 -0
  44. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.js.map +1 -0
  45. package/node_modules/@zigai/pi-extension-settings/dist/cli.d.ts +6 -0
  46. package/node_modules/@zigai/pi-extension-settings/dist/cli.d.ts.map +1 -0
  47. package/node_modules/@zigai/pi-extension-settings/dist/cli.js +87 -0
  48. package/node_modules/@zigai/pi-extension-settings/dist/cli.js.map +1 -0
  49. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.d.ts +2 -0
  50. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.d.ts.map +1 -0
  51. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.js +2 -0
  52. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.js.map +1 -0
  53. package/node_modules/@zigai/pi-extension-settings/dist/definition.d.ts +159 -0
  54. package/node_modules/@zigai/pi-extension-settings/dist/definition.d.ts.map +1 -0
  55. package/node_modules/@zigai/pi-extension-settings/dist/definition.js +248 -0
  56. package/node_modules/@zigai/pi-extension-settings/dist/definition.js.map +1 -0
  57. package/node_modules/@zigai/pi-extension-settings/dist/file-system.d.ts +10 -0
  58. package/node_modules/@zigai/pi-extension-settings/dist/file-system.d.ts.map +1 -0
  59. package/node_modules/@zigai/pi-extension-settings/dist/file-system.js +115 -0
  60. package/node_modules/@zigai/pi-extension-settings/dist/file-system.js.map +1 -0
  61. package/node_modules/@zigai/pi-extension-settings/dist/index.d.ts +2 -0
  62. package/node_modules/@zigai/pi-extension-settings/dist/index.d.ts.map +1 -0
  63. package/node_modules/@zigai/pi-extension-settings/dist/index.js +2 -0
  64. package/node_modules/@zigai/pi-extension-settings/dist/index.js.map +1 -0
  65. package/node_modules/@zigai/pi-extension-settings/dist/json-value.d.ts +18 -0
  66. package/node_modules/@zigai/pi-extension-settings/dist/json-value.d.ts.map +1 -0
  67. package/node_modules/@zigai/pi-extension-settings/dist/json-value.js +56 -0
  68. package/node_modules/@zigai/pi-extension-settings/dist/json-value.js.map +1 -0
  69. package/node_modules/@zigai/pi-extension-settings/dist/paths.d.ts +11 -0
  70. package/node_modules/@zigai/pi-extension-settings/dist/paths.d.ts.map +1 -0
  71. package/node_modules/@zigai/pi-extension-settings/dist/paths.js +23 -0
  72. package/node_modules/@zigai/pi-extension-settings/dist/paths.js.map +1 -0
  73. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.d.ts +5 -0
  74. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.d.ts.map +1 -0
  75. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.js +21 -0
  76. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.js.map +1 -0
  77. package/node_modules/@zigai/pi-extension-settings/dist/pi.d.ts +106 -0
  78. package/node_modules/@zigai/pi-extension-settings/dist/pi.d.ts.map +1 -0
  79. package/node_modules/@zigai/pi-extension-settings/dist/pi.js +122 -0
  80. package/node_modules/@zigai/pi-extension-settings/dist/pi.js.map +1 -0
  81. package/node_modules/@zigai/pi-extension-settings/dist/pi.ts +2537 -0
  82. package/node_modules/@zigai/pi-extension-settings/dist/pi.ts.map +7 -0
  83. package/node_modules/@zigai/pi-extension-settings/dist/projects.d.ts +10 -0
  84. package/node_modules/@zigai/pi-extension-settings/dist/projects.d.ts.map +1 -0
  85. package/node_modules/@zigai/pi-extension-settings/dist/projects.js +177 -0
  86. package/node_modules/@zigai/pi-extension-settings/dist/projects.js.map +1 -0
  87. package/node_modules/@zigai/pi-extension-settings/dist/runtime.d.ts +40 -0
  88. package/node_modules/@zigai/pi-extension-settings/dist/runtime.d.ts.map +1 -0
  89. package/node_modules/@zigai/pi-extension-settings/dist/runtime.js +158 -0
  90. package/node_modules/@zigai/pi-extension-settings/dist/runtime.js.map +1 -0
  91. package/node_modules/@zigai/pi-extension-settings/dist/runtime.ts +158 -0
  92. package/node_modules/@zigai/pi-extension-settings/dist/runtime.ts.map +7 -0
  93. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.d.ts +19 -0
  94. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.d.ts.map +1 -0
  95. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.js +168 -0
  96. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.js.map +1 -0
  97. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.d.ts +9 -0
  98. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.d.ts.map +1 -0
  99. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.js +242 -0
  100. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.js.map +1 -0
  101. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.d.ts +59 -0
  102. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.d.ts.map +1 -0
  103. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.js +98 -0
  104. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.js.map +1 -0
  105. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.d.ts +80 -0
  106. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.d.ts.map +1 -0
  107. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.js +144 -0
  108. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.js.map +1 -0
  109. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.d.ts +5 -0
  110. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.d.ts.map +1 -0
  111. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.js +30 -0
  112. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.js.map +1 -0
  113. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.d.ts +10 -0
  114. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.d.ts.map +1 -0
  115. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.js +16 -0
  116. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.js.map +1 -0
  117. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.d.ts +54 -0
  118. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.d.ts.map +1 -0
  119. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.js +202 -0
  120. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.js.map +1 -0
  121. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.d.ts +5 -0
  122. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.d.ts.map +1 -0
  123. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.js +9 -0
  124. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.js.map +1 -0
  125. package/node_modules/@zigai/pi-extension-settings/docs/generation.md +71 -0
  126. package/node_modules/@zigai/pi-extension-settings/docs/manual-setup.md +98 -0
  127. package/node_modules/@zigai/pi-extension-settings/docs/runtime.md +100 -0
  128. package/node_modules/@zigai/pi-extension-settings/docs/ui-controls.md +31 -0
  129. package/node_modules/@zigai/pi-extension-settings/package.json +97 -0
  130. package/node_modules/@zigai/pi-mention-anything/README.md +113 -0
  131. package/node_modules/@zigai/pi-mention-anything/config.schema.json +313 -0
  132. package/node_modules/@zigai/pi-mention-anything/docs/command-protocol.md +106 -0
  133. package/node_modules/@zigai/pi-mention-anything/docs/providers.md +128 -0
  134. package/node_modules/@zigai/pi-mention-anything/examples/query-command.mjs +96 -0
  135. package/node_modules/@zigai/pi-mention-anything/examples/recursive-tree.ts +28 -0
  136. package/node_modules/@zigai/pi-mention-anything/examples/static.ts +28 -0
  137. package/node_modules/@zigai/pi-mention-anything/examples/tmux.ts +90 -0
  138. package/node_modules/@zigai/pi-mention-anything/examples/tree-settings.json +25 -0
  139. package/node_modules/@zigai/pi-mention-anything/package.json +58 -0
  140. package/node_modules/@zigai/pi-mention-anything/src/api.ts +75 -0
  141. package/node_modules/@zigai/pi-mention-anything/src/autocomplete.ts +231 -0
  142. package/node_modules/@zigai/pi-mention-anything/src/chain-autocomplete.ts +596 -0
  143. package/node_modules/@zigai/pi-mention-anything/src/chain-syntax.ts +345 -0
  144. package/node_modules/@zigai/pi-mention-anything/src/command-provider.ts +291 -0
  145. package/node_modules/@zigai/pi-mention-anything/src/configured-source.ts +66 -0
  146. package/node_modules/@zigai/pi-mention-anything/src/editor.ts +180 -0
  147. package/node_modules/@zigai/pi-mention-anything/src/expand-mentions.ts +162 -0
  148. package/node_modules/@zigai/pi-mention-anything/src/index.ts +54 -0
  149. package/node_modules/@zigai/pi-mention-anything/src/initial-suggestions.ts +190 -0
  150. package/node_modules/@zigai/pi-mention-anything/src/list-provider.ts +71 -0
  151. package/node_modules/@zigai/pi-mention-anything/src/mention-hub.ts +307 -0
  152. package/node_modules/@zigai/pi-mention-anything/src/mention-resolution.ts +374 -0
  153. package/node_modules/@zigai/pi-mention-anything/src/mention-syntax.ts +105 -0
  154. package/node_modules/@zigai/pi-mention-anything/src/register-mention.ts +89 -0
  155. package/node_modules/@zigai/pi-mention-anything/src/rendering.ts +53 -0
  156. package/node_modules/@zigai/pi-mention-anything/src/selected-items.ts +21 -0
  157. package/node_modules/@zigai/pi-mention-anything/src/selection-history.ts +135 -0
  158. package/node_modules/@zigai/pi-mention-anything/src/settings-input.ts +317 -0
  159. package/node_modules/@zigai/pi-mention-anything/src/settings.prevalidated.ts +57 -0
  160. package/node_modules/@zigai/pi-mention-anything/src/settings.ts +52 -0
  161. package/node_modules/@zigai/pi-mention-anything/src/source-contract.ts +174 -0
  162. package/node_modules/@zigai/pi-mention-anything/src/source-controller.ts +1070 -0
  163. package/node_modules/@zigai/pi-mention-anything/src/source-runtime.ts +99 -0
  164. package/node_modules/@zigai/pi-mention-skill/README.md +60 -0
  165. package/node_modules/@zigai/pi-mention-skill/config.schema.json +81 -0
  166. package/node_modules/@zigai/pi-mention-skill/package.json +56 -0
  167. package/node_modules/@zigai/pi-mention-skill/src/index.ts +60 -0
  168. package/node_modules/@zigai/pi-mention-skill/src/settings-input.ts +74 -0
  169. package/node_modules/@zigai/pi-mention-skill/src/settings.prevalidated.ts +18 -0
  170. package/node_modules/@zigai/pi-mention-skill/src/settings.ts +54 -0
  171. package/node_modules/@zigai/pi-mention-skill/src/skill-commands.ts +18 -0
  172. package/node_modules/@zigai/pi-mention-skill/src/skill-content.ts +60 -0
  173. package/node_modules/@zigai/pi-mention-skill/src/skill-provider.ts +105 -0
  174. package/node_modules/@zigai/pi-mention-skill/src/slash-skill-filter.ts +29 -0
  175. package/node_modules/argparse/LICENSE +21 -0
  176. package/node_modules/argparse/README.md +257 -0
  177. package/node_modules/argparse/index.js +3 -0
  178. package/node_modules/argparse/lib/action/append/constant.js +47 -0
  179. package/node_modules/argparse/lib/action/append.js +53 -0
  180. package/node_modules/argparse/lib/action/count.js +40 -0
  181. package/node_modules/argparse/lib/action/help.js +47 -0
  182. package/node_modules/argparse/lib/action/store/constant.js +43 -0
  183. package/node_modules/argparse/lib/action/store/false.js +27 -0
  184. package/node_modules/argparse/lib/action/store/true.js +26 -0
  185. package/node_modules/argparse/lib/action/store.js +50 -0
  186. package/node_modules/argparse/lib/action/subparsers.js +149 -0
  187. package/node_modules/argparse/lib/action/version.js +47 -0
  188. package/node_modules/argparse/lib/action.js +146 -0
  189. package/node_modules/argparse/lib/action_container.js +482 -0
  190. package/node_modules/argparse/lib/argparse.js +14 -0
  191. package/node_modules/argparse/lib/argument/error.js +50 -0
  192. package/node_modules/argparse/lib/argument/exclusive.js +54 -0
  193. package/node_modules/argparse/lib/argument/group.js +75 -0
  194. package/node_modules/argparse/lib/argument_parser.js +1161 -0
  195. package/node_modules/argparse/lib/const.js +21 -0
  196. package/node_modules/argparse/lib/help/added_formatters.js +87 -0
  197. package/node_modules/argparse/lib/help/formatter.js +795 -0
  198. package/node_modules/argparse/lib/namespace.js +76 -0
  199. package/node_modules/argparse/lib/utils.js +57 -0
  200. package/node_modules/argparse/package.json +34 -0
  201. package/node_modules/esprima/LICENSE.BSD +21 -0
  202. package/node_modules/esprima/README.md +46 -0
  203. package/node_modules/esprima/bin/esparse.js +139 -0
  204. package/node_modules/esprima/bin/esvalidate.js +236 -0
  205. package/node_modules/esprima/dist/esprima.js +6709 -0
  206. package/node_modules/esprima/package.json +112 -0
  207. package/node_modules/extend-shallow/LICENSE +21 -0
  208. package/node_modules/extend-shallow/README.md +61 -0
  209. package/node_modules/extend-shallow/index.js +33 -0
  210. package/node_modules/extend-shallow/package.json +56 -0
  211. package/node_modules/graceful-fs/LICENSE +15 -0
  212. package/node_modules/graceful-fs/README.md +143 -0
  213. package/node_modules/graceful-fs/clone.js +23 -0
  214. package/node_modules/graceful-fs/graceful-fs.js +448 -0
  215. package/node_modules/graceful-fs/legacy-streams.js +118 -0
  216. package/node_modules/graceful-fs/package.json +53 -0
  217. package/node_modules/graceful-fs/polyfills.js +355 -0
  218. package/node_modules/gray-matter/LICENSE +21 -0
  219. package/node_modules/gray-matter/README.md +565 -0
  220. package/node_modules/gray-matter/gray-matter.d.ts +114 -0
  221. package/node_modules/gray-matter/index.js +228 -0
  222. package/node_modules/gray-matter/lib/defaults.js +18 -0
  223. package/node_modules/gray-matter/lib/engine.js +30 -0
  224. package/node_modules/gray-matter/lib/engines.js +54 -0
  225. package/node_modules/gray-matter/lib/excerpt.js +32 -0
  226. package/node_modules/gray-matter/lib/parse.js +13 -0
  227. package/node_modules/gray-matter/lib/stringify.js +56 -0
  228. package/node_modules/gray-matter/lib/to-file.js +43 -0
  229. package/node_modules/gray-matter/lib/utils.js +66 -0
  230. package/node_modules/gray-matter/package.json +127 -0
  231. package/node_modules/is-extendable/LICENSE +21 -0
  232. package/node_modules/is-extendable/README.md +72 -0
  233. package/node_modules/is-extendable/index.js +13 -0
  234. package/node_modules/is-extendable/package.json +51 -0
  235. package/node_modules/js-yaml/LICENSE +21 -0
  236. package/node_modules/js-yaml/README.md +302 -0
  237. package/node_modules/js-yaml/bin/js-yaml.js +132 -0
  238. package/node_modules/js-yaml/dist/js-yaml.js +4024 -0
  239. package/node_modules/js-yaml/dist/js-yaml.min.js +1 -0
  240. package/node_modules/js-yaml/index.js +7 -0
  241. package/node_modules/js-yaml/lib/js-yaml/common.js +59 -0
  242. package/node_modules/js-yaml/lib/js-yaml/dumper.js +850 -0
  243. package/node_modules/js-yaml/lib/js-yaml/exception.js +43 -0
  244. package/node_modules/js-yaml/lib/js-yaml/loader.js +1679 -0
  245. package/node_modules/js-yaml/lib/js-yaml/mark.js +76 -0
  246. package/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
  247. package/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
  248. package/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
  249. package/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
  250. package/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
  251. package/node_modules/js-yaml/lib/js-yaml/schema.js +108 -0
  252. package/node_modules/js-yaml/lib/js-yaml/type/binary.js +138 -0
  253. package/node_modules/js-yaml/lib/js-yaml/type/bool.js +35 -0
  254. package/node_modules/js-yaml/lib/js-yaml/type/float.js +116 -0
  255. package/node_modules/js-yaml/lib/js-yaml/type/int.js +173 -0
  256. package/node_modules/js-yaml/lib/js-yaml/type/js/function.js +93 -0
  257. package/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +60 -0
  258. package/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +28 -0
  259. package/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
  260. package/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
  261. package/node_modules/js-yaml/lib/js-yaml/type/null.js +34 -0
  262. package/node_modules/js-yaml/lib/js-yaml/type/omap.js +44 -0
  263. package/node_modules/js-yaml/lib/js-yaml/type/pairs.js +53 -0
  264. package/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
  265. package/node_modules/js-yaml/lib/js-yaml/type/set.js +29 -0
  266. package/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
  267. package/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +88 -0
  268. package/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
  269. package/node_modules/js-yaml/lib/js-yaml.js +39 -0
  270. package/node_modules/js-yaml/package.json +52 -0
  271. package/node_modules/kind-of/LICENSE +21 -0
  272. package/node_modules/kind-of/README.md +367 -0
  273. package/node_modules/kind-of/index.js +129 -0
  274. package/node_modules/kind-of/package.json +88 -0
  275. package/node_modules/pi-toggle-skills/README.md +213 -0
  276. package/node_modules/pi-toggle-skills/package.json +60 -0
  277. package/node_modules/pi-toggle-skills/src/index.ts +112 -0
  278. package/node_modules/pi-toggle-skills/src/skill-discovery.ts +258 -0
  279. package/node_modules/pi-toggle-skills/src/skill-selector.ts +435 -0
  280. package/node_modules/pi-toggle-skills/toggle-skills.ts +316 -0
  281. package/node_modules/pi-toggle-skills/vitest.config.ts +15 -0
  282. package/node_modules/proper-lockfile/LICENSE +21 -0
  283. package/node_modules/proper-lockfile/README.md +183 -0
  284. package/node_modules/proper-lockfile/index.js +40 -0
  285. package/node_modules/proper-lockfile/lib/adapter.js +85 -0
  286. package/node_modules/proper-lockfile/lib/lockfile.js +342 -0
  287. package/node_modules/proper-lockfile/lib/mtime-precision.js +55 -0
  288. package/node_modules/proper-lockfile/node_modules/retry/.npmignore +3 -0
  289. package/node_modules/proper-lockfile/node_modules/retry/.travis.yml +15 -0
  290. package/node_modules/proper-lockfile/node_modules/retry/License +21 -0
  291. package/node_modules/proper-lockfile/node_modules/retry/Makefile +18 -0
  292. package/node_modules/proper-lockfile/node_modules/retry/README.md +227 -0
  293. package/node_modules/proper-lockfile/node_modules/retry/equation.gif +0 -0
  294. package/node_modules/proper-lockfile/node_modules/retry/example/dns.js +31 -0
  295. package/node_modules/proper-lockfile/node_modules/retry/example/stop.js +40 -0
  296. package/node_modules/proper-lockfile/node_modules/retry/index.js +1 -0
  297. package/node_modules/proper-lockfile/node_modules/retry/lib/retry.js +100 -0
  298. package/node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js +158 -0
  299. package/node_modules/proper-lockfile/node_modules/retry/package.json +32 -0
  300. package/node_modules/proper-lockfile/node_modules/retry/test/common.js +10 -0
  301. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-forever.js +24 -0
  302. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-retry-operation.js +258 -0
  303. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-retry-wrap.js +101 -0
  304. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-timeouts.js +69 -0
  305. package/node_modules/proper-lockfile/package.json +71 -0
  306. package/node_modules/section-matter/LICENSE +21 -0
  307. package/node_modules/section-matter/README.md +236 -0
  308. package/node_modules/section-matter/index.js +136 -0
  309. package/node_modules/section-matter/package.json +55 -0
  310. package/node_modules/signal-exit/LICENSE.txt +16 -0
  311. package/node_modules/signal-exit/README.md +39 -0
  312. package/node_modules/signal-exit/index.js +202 -0
  313. package/node_modules/signal-exit/package.json +38 -0
  314. package/node_modules/signal-exit/signals.js +53 -0
  315. package/node_modules/sprintf-js/.npmignore +1 -0
  316. package/node_modules/sprintf-js/LICENSE +24 -0
  317. package/node_modules/sprintf-js/README.md +88 -0
  318. package/node_modules/sprintf-js/bower.json +14 -0
  319. package/node_modules/sprintf-js/demo/angular.html +20 -0
  320. package/node_modules/sprintf-js/dist/angular-sprintf.min.js +4 -0
  321. package/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +1 -0
  322. package/node_modules/sprintf-js/dist/angular-sprintf.min.map +1 -0
  323. package/node_modules/sprintf-js/dist/sprintf.min.js +4 -0
  324. package/node_modules/sprintf-js/dist/sprintf.min.js.map +1 -0
  325. package/node_modules/sprintf-js/dist/sprintf.min.map +1 -0
  326. package/node_modules/sprintf-js/gruntfile.js +36 -0
  327. package/node_modules/sprintf-js/package.json +22 -0
  328. package/node_modules/sprintf-js/src/angular-sprintf.js +18 -0
  329. package/node_modules/sprintf-js/src/sprintf.js +208 -0
  330. package/node_modules/sprintf-js/test/test.js +82 -0
  331. package/node_modules/strip-bom-string/LICENSE +21 -0
  332. package/node_modules/strip-bom-string/README.md +66 -0
  333. package/node_modules/strip-bom-string/index.js +15 -0
  334. package/node_modules/strip-bom-string/package.json +60 -0
  335. package/package.json +13 -4
  336. package/dist/confirmation.d.ts +0 -33
  337. package/dist/confirmation.js +0 -64
  338. package/dist/yolo.d.ts +0 -6
  339. package/dist/yolo.js +0 -33
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.3 — 2026-10-03
4
+
5
+ - Добавлены `@tifan/pi-recap` 0.4.7, `@pi-plugins/elapsed` 0.1.1, `pi-toggle-skills` 0.1.20 и `@zigai/pi-mention-skill` 0.10.4; пакеты и зависимости включены в архив набора.
6
+ - Recap по умолчанию использует Qwen без reasoning через GigaChat, включая сброс через `Use default`. Явная модель recap сохраняется; штатный таймаут 4 секунды не изменён.
7
+ - При подключении GigaChat внутри набора регистрируется публичный провайдер без переключения основной модели со стороны его standalone-расширения.
8
+
9
+ ## 0.1.2 — 2026-10-01
10
+
11
+ - Возвращён штатный диалог `@gotgenes/pi-permission-system`, включая разрешение на сессию и отказ с причиной. Собственный диалог Datalab Kit удалён.
12
+ - Удалены собственные команды `/yolo on|off|status`; YOLO остаётся в штатных настройках permission-system.
13
+ - Автоматическое разрешение чтения и todo, пользовательские правила и интеграция Plan mode сохранены.
14
+ - Сборка очищает устаревшие модули диалога и YOLO при обновлении с 0.1.1.
15
+ - Добавлены проверки штатных вариантов диалога, однократного и сессионного разрешения, смены сессии и штатного YOLO.
16
+
3
17
  ## 0.1.1 — 2026-10-01
4
18
 
5
19
  - Служебный todo и безопасные читающие цепочки с шаблонами файлов больше не требуют подтверждения по правилам набора.
package/README.md CHANGED
@@ -17,7 +17,7 @@ pi
17
17
  npm ci --ignore-scripts --legacy-peer-deps
18
18
  npm run build
19
19
  npm pack
20
- pi install ./dev-sergeev-datalab-kit-0.1.0.tgz
20
+ pi install ./dev-sergeev-datalab-kit-0.1.3.tgz
21
21
  ```
22
22
 
23
23
  Целевые системы — Linux и macOS; локальные интеграционные проверки выполнены на Linux. Проверка macOS включена в CI. Windows пока не заявляется.
@@ -34,10 +34,14 @@ pi install ./dev-sergeev-datalab-kit-0.1.0.tgz
34
34
  | `@gotgenes/pi-subagents` | 21.7.5 |
35
35
  | `@capdiem/pi-todo` | 0.3.2 |
36
36
  | `pi-rewind` | 0.5.0 |
37
+ | `@tifan/pi-recap` | 0.4.7 |
38
+ | `@pi-plugins/elapsed` | 0.1.1 |
39
+ | `pi-toggle-skills` | 0.1.20 |
40
+ | `@zigai/pi-mention-skill` | 0.10.4 |
37
41
 
38
- Семь фиксированных компонентов включены в архив npm вместе с их зависимостями. GigaChat устанавливается отдельно без закрепления версии. Дополнительные расширения не добавляются.
42
+ Одиннадцать фиксированных компонентов включены в архив npm вместе с их зависимостями. GigaChat устанавливается отдельно без закрепления версии.
39
43
 
40
- Текущие модель и провайдер сохраняются. Для доступа к GigaChat используйте штатные `/login`, затем `/model`.
44
+ При подключении провайдера самим набором текущие модель и провайдер сохраняются. Для доступа к GigaChat используйте штатные `/login`, затем `/model`.
41
45
 
42
46
  ## Значения по умолчанию
43
47
 
@@ -48,18 +52,30 @@ pi install ./dev-sergeev-datalab-kit-0.1.0.tgz
48
52
  - `rm`, `hadoop`, `hdfs`, неизвестные команды и любой удалённый `curl` требуют подтверждения.
49
53
  - `curl` к `localhost`, `127.0.0.1` и `::1` разрешён только для GET/HEAD. Для автоматически разрешённых запросов отключаются `.curlrc` и прокси; перенаправления, вывод в файл и изменяющие запросы требуют подтверждения.
50
54
  - Составная команда проверяется целиком. `cat a > b` и `find . -delete` требуют подтверждения. Неизвестный синтаксис также требует подтверждения.
51
- - Диалог выделяет предупреждение, сначала выбирает **«Отмена»**. Enter отменяет; ↓ и Enter разрешают один запуск. Разрешений на всю сессию нет. В RPC доступны те же два варианта; обработку клавиш определяет клиент.
55
+ - Подтверждения показывает штатный диалог `@gotgenes/pi-permission-system`: разрешение одного запуска или на сессию, отказ и отказ с причиной. Настройки клавиш и повторного нажатия управляются самим расширением; собственного диалога Datalab Kit нет.
52
56
  - Одновременно работает один субагент. Инструмент `subagent` принимает одну задачу за вызов.
53
57
 
54
- Уже заданные пользователем настройки имеют приоритет, включая разрешения и число субагентов. Если пользователь явно настроил `doublePressToConfirm` или `permissionDialogKeys`, используется его исходный диалог permission-system. Значения набора действуют в памяти; существующие конфиги расширений не перезаписываются. Настройки разрешений остаются в штатных `extensions/pi-permission-system/config.json` внутри каталога агента и `.pi/extensions/pi-permission-system/config.json` внутри проекта. Субагенты используют `<agentDir>/subagents.json` и `<project>/.pi/subagents.json`.
58
+ Уже заданные пользователем настройки имеют приоритет, включая разрешения, настройки штатного диалога и число субагентов. Значения разрешений и числа субагентов действуют в памяти. Настройки разрешений остаются в штатных `extensions/pi-permission-system/config.json` внутри каталога агента и `.pi/extensions/pi-permission-system/config.json` внутри проекта. Субагенты используют `<agentDir>/subagents.json` и `<project>/.pi/subagents.json`.
55
59
 
56
60
  В **Plan mode** допустимые инструменты и команды проверяет pi-plan-mode без дополнительных подтверждений по правилам набора. Явные пользовательские `ask` и `deny` продолжают действовать; некорректная конфигурация разрешений также не обходится. После выхода из Plan mode или перехода к реализации правила набора снова действуют. Это поведение сохраняется при восстановлении сессии и смене ветки. Plan mode допускает некоторые тесты и проверки, которые могут создавать артефакты.
57
61
 
62
+ ## Recap, время работы и навыки
63
+
64
+ `/recap` показывает краткое резюме сессии над редактором. При первом подключении набора в `<agentDir>/extensions/pi-recap.json` задаётся `"model": "gigachat/Qwen3.5-397b"`, если явный выбор отсутствует. Существующее поле `model` и остальные поля конфига сохраняются; некорректный конфиг не исправляется автоматически. Выбор можно изменить через `/recap config`, проверить через `/recap status`. Пункт `Use default` сразу возвращает Qwen: сборка адаптирует встроенный default модели. Для Qwen нужна аутентификация GigaChat и endpoint с поддержкой этой модели.
65
+
66
+ Recap не передаёт уровень reasoning; адаптер GigaChat использует `off`. Явные параметры тела запроса в настройках провайдера могут его переопределить. Таймаут запроса — штатные 4 секунды: конфиг recap его не меняет, а `GIGACHAT_TIMEOUT` не переопределяет явно заданный расширением лимит. Автоматическое резюме создаётся после 5 минут бездействия. Модель основной сессии выбирается независимо.
67
+
68
+ `elapsed` показывает время полного запроса в индикаторе `Working...`, включая все шаги агента и вызовы инструментов. Счётчик обнуляется для следующего запроса и исчезает после завершения. Работает только в TUI, не заменяет powerline footer и не требует настройки.
69
+
70
+ `/toggle-skills` управляет видимостью навыков для модели. Изменения сохраняются в `disable-model-invocation` внутри `SKILL.md`; после сохранения выполните `/reload`. Общие навыки в `~/.agents/skills` изменяются и для других агентов, учитывающих этот флаг. Расширение сканирует стандартные каталоги навыков; навыки из npm-пакетов и произвольных путей настроек не перечисляются.
71
+
72
+ Введите `$` для выбора навыка через `pi-mention-skill`. Скрытый от модели навык остаётся доступен через явное `$имя-навыка`. По умолчанию `/skill:*` скрываются из slash autocomplete; настройки самого расширения сохраняют приоритет над штатными значениями.
73
+
58
74
  ## YOLO
59
75
 
60
- `/yolo on` отключает запросы подтверждения в текущей сессии; в статусе появляется `yolo`. `/yolo off` возвращает подтверждения, а `/yolo status` показывает эффективный режим. Команды не переписывают настройки; новая или повторно открытая сессия использует постоянную настройку.
76
+ YOLO управляется штатным `@gotgenes/pi-permission-system`: откройте `/permission-system` → **YOLO mode** или задайте `"yoloMode": true` в конфигурации расширения. Собственные сессионные команды `/yolo on|off|status`, добавленные в 0.1.1, удалены в 0.1.2.
61
77
 
62
- YOLO автоматически разрешает любые `ask`, включая явные пользовательские запросы и запросы из-за некорректной конфигурации. Явные `deny` и ограничения Plan mode сохраняются. Для постоянного включения откройте `/permission-system` → **YOLO mode** или задайте `"yoloMode": true` в конфигурации permission-system. Сессионный `/yolo off` временно выключает и постоянно включённый YOLO.
78
+ YOLO автоматически разрешает `ask`. Явные `deny` и ограничения Plan mode сохраняются.
63
79
 
64
80
  ## Обновление и ограничение Pi 0.85.1
65
81
 
@@ -75,6 +91,8 @@ GigaChat обновляется независимо от версии набо
75
91
 
76
92
  Явно закреплённый пользователем источник GigaChat сохраняется. При удалении набора отдельная запись GigaChat остаётся; её можно удалить стандартным `pi remove npm:@dev-sergeev/pi-gigachat`. Установка с `-l` пока не проверена.
77
93
 
94
+ Отдельная запись GigaChat загружается как самостоятельный пакет со своей политикой. В версии 0.4.0 он устанавливает основную модель Qwen при первой активации версии; это поведение самого провайдера, независимо от настройки recap. Datalab Kit не переписывает исходники самостоятельно установленного GigaChat.
95
+
78
96
  ## Разработка
79
97
 
80
98
  ```bash
@@ -84,6 +102,6 @@ npm run typecheck
84
102
  npm test
85
103
  ```
86
104
 
87
- `build` применяет проверяемые адаптации к локальным permission-system, plan-mode и subagents перед упаковкой. Номера версий и единственность каждого места изменения проверяются; несовпадение завершает сборку с ошибкой. Адаптации не меняют глобально установленные пакеты. Интеграционный тест использует изолированный каталог агента и локальный реестр npm, устанавливает настоящий архив штатной командой Pi и проверяет штатное обновление.
105
+ `build` применяет проверяемые адаптации к локальным permission-system, plan-mode, subagents и значению default-модели recap перед упаковкой. Номера версий и единственность каждого места изменения проверяются; несовпадение завершает сборку с ошибкой. Адаптации не меняют глобально установленные пакеты. Интеграционный тест использует изолированный каталог агента и локальный реестр npm, устанавливает настоящий архив штатной командой Pi и проверяет штатное обновление.
88
106
 
89
107
  Тесты запускаются последовательно с `--liftoff-only`, чтобы оптимизирующая компиляция WASM-парсера bash не исчерпывала память в ограниченной среде CI. Параметр относится к тестовому процессу; запуск пользователя не меняется.
@@ -1,8 +1,8 @@
1
1
  # Third-party notices
2
2
 
3
- Datalab Kit includes the following upstream components. Their licenses and copyright notices remain in their package directories and apply to those components and their transitive dependencies. Datalab Kit modifies permission-system, plan-mode and subagents during build; see scripts/prepare-upstream.mjs. GigaChat is downloaded separately.
3
+ Datalab Kit includes the following upstream components. Their licenses and copyright notices remain in their package directories and apply to those components and their transitive dependencies. Datalab Kit modifies permission-system, plan-mode, subagents and recap's default model during build; see scripts/prepare-upstream.mjs. GigaChat is downloaded separately.
4
4
 
5
- - @dev-sergeev/pi-gigachat@0.3.3: MIT, git+https://github.com/dev-sergeev/pi-gigachat.git.
5
+ - @dev-sergeev/pi-gigachat (latest, independently installed): MIT, git+https://github.com/dev-sergeev/pi-gigachat.git.
6
6
  - @juicesharp/rpiv-ask-user-question@2.11.0: MIT, git+https://github.com/juicesharp/rpiv-mono.git.
7
7
  - pi-powerline-footer@0.17.2: MIT, git+https://github.com/nicobailon/pi-powerline-footer.git.
8
8
  - @gotgenes/pi-permission-system@33.0.5: MIT, git+https://github.com/gotgenes/pi-packages.git.
@@ -10,6 +10,10 @@ Datalab Kit includes the following upstream components. Their licenses and copyr
10
10
  - @gotgenes/pi-subagents@21.7.5: MIT, git+https://github.com/gotgenes/pi-packages.git.
11
11
  - @capdiem/pi-todo@0.3.2: MIT, git+https://github.com/capdiem/pi-extensions.git.
12
12
  - pi-rewind@0.5.0: MIT, git+https://github.com/arpagon/pi-rewind.git.
13
+ - @tifan/pi-recap@0.4.7: MIT, git+https://github.com/tifandotme/pi-extensions.git.
14
+ - @pi-plugins/elapsed@0.1.1: MIT, git+https://github.com/k3dom/pi-plugins.git.
15
+ - pi-toggle-skills@0.1.20: MIT, git+https://github.com/monotykamary/pi-toggle-skills.git.
16
+ - @zigai/pi-mention-skill@0.10.4: MIT, git+https://github.com/zigai/pi-tweaks.git.
13
17
 
14
18
  For the adapted subagents component, the upstream MIT notice is reproduced below:
15
19
 
package/dist/extension.js CHANGED
@@ -2,15 +2,22 @@ import { getAgentDir } from '@earendil-works/pi-coding-agent';
2
2
  import { fileURLToPath, pathToFileURL } from 'node:url';
3
3
  import { resolve } from 'node:path';
4
4
  import { gigaChatExtensionPath, hasConfiguredGigaChat, managedAgentDir, registerGigaChat } from './install.js';
5
+ import { configureRecapDefault } from './recap.js';
5
6
  export default async function datalabKit(pi) {
6
7
  const packageRoot = fileURLToPath(new URL('../', import.meta.url));
7
8
  const agentDir = getAgentDir();
9
+ await configureRecapDefault(agentDir);
8
10
  const configured = await hasConfiguredGigaChat(agentDir);
9
11
  // On the first load, provide GigaChat immediately. Later Pi discovers the
10
12
  // standalone source itself, so the provider must not be registered twice.
11
13
  if (!configured) {
12
14
  const provider = await import(pathToFileURL(gigaChatExtensionPath(packageRoot)).href);
13
- await provider.default(pi);
15
+ // The standalone package also sets the main model on first activation.
16
+ // The kit supplies only its provider, preserving the user's session choice.
17
+ if (provider.gigachatProvider)
18
+ pi.registerProvider(provider.gigachatProvider);
19
+ else
20
+ await provider.default(pi);
14
21
  }
15
22
  if (!configured && managedAgentDir(packageRoot) === resolve(agentDir)) {
16
23
  pi.on('session_start', async () => {
@@ -0,0 +1,2 @@
1
+ /** Configure only the recap model; the user's main session model is independent. */
2
+ export declare function configureRecapDefault(agentDir: string): Promise<void>;
package/dist/recap.js ADDED
@@ -0,0 +1,31 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ /** Configure only the recap model; the user's main session model is independent. */
4
+ export async function configureRecapDefault(agentDir) {
5
+ const folder = join(agentDir, 'extensions');
6
+ const file = join(folder, 'pi-recap.json');
7
+ let config;
8
+ try {
9
+ config = JSON.parse(await readFile(file, 'utf8'));
10
+ }
11
+ catch (error) {
12
+ // Leave malformed user configuration for recap's own diagnostic.
13
+ if (error instanceof SyntaxError)
14
+ return;
15
+ if (error.code !== 'ENOENT')
16
+ throw error;
17
+ await mkdir(folder, { recursive: true });
18
+ try {
19
+ await writeFile(file, `${JSON.stringify({ model: 'gigachat/Qwen3.5-397b' }, null, 2)}\n`, { flag: 'wx', mode: 0o600 });
20
+ }
21
+ catch (error) {
22
+ // Another session or /recap config may have saved a choice meanwhile.
23
+ if (error.code !== 'EEXIST')
24
+ throw error;
25
+ }
26
+ return;
27
+ }
28
+ if (!config || typeof config !== 'object' || Array.isArray(config) || 'model' in config)
29
+ return;
30
+ await writeFile(file, `${JSON.stringify({ ...config, model: 'gigachat/Qwen3.5-397b' }, null, 2)}\n`);
31
+ }
@@ -12,6 +12,8 @@ Pi 0.85.1 загружает ресурсы из `pi.extensions`, но не пр
12
12
 
13
13
  Семь фиксированных компонентов поставляются через `bundleDependencies` и явно перечисленные ресурсы. Сборка адаптирует два компонента: permission-system получает нижний слой значений набора и диалог с отменой по умолчанию; subagents получает значение `maxConcurrent = 1`. Пользовательские слои остаются выше; файлы конфигурации не переписываются. Изменения исходников воспроизводимы и проверяют версию и уникальность места изменения.
14
14
 
15
+ Дополнение от 2026-10-02: схема доставки распространяется ещё на четыре фиксированных компонента — recap, elapsed, toggle-skills и mention-skill (всего одиннадцать). Recap получает Qwen через свой штатный конфиг при отсутствии явного выбора модели. Сборка также меняет только встроенное значение default-модели, чтобы штатный `Use default` возвращал Qwen без перезапуска; таймаут сохраняется. При подключении GigaChat самим набором используется экспорт `gigachatProvider`, чтобы standalone-обработчик провайдера не менял выбранную основную модель.
16
+
15
17
  GigaChat остаётся зависимостью `latest`. При явной установке postinstall проверяет актуальную версию, устанавливает её в управляемый каталог Pi и добавляет незакреплённый источник. При первой активации расширение восстанавливает запись, которую установщик Pi мог затереть; загрузка не выполняет сетевых запросов. До появления отдельной записи провайдер подключается через расширение набора. После её появления его загружает Pi самостоятельно.
16
18
 
17
19
  ## Последствия и пределы
@@ -1,5 +1,3 @@
1
- // Datalab Kit adaptation
2
- import { confirmPermission } from "../../../../../dist/confirmation.js";
3
1
  import type {
4
2
  ExtensionContext,
5
3
  ExtensionUIContext,
@@ -64,7 +62,6 @@ export interface PermissionPromptView extends PromptPreferences {
64
62
 
65
63
  /** Live prompt-behavior preferences read at prompt time (see `doublePressToConfirm`). */
66
64
  export interface PromptPreferences {
67
- kitUseUserDialog?: boolean;
68
65
  doublePressToConfirm: boolean;
69
66
  /** How much room a render has; the terminal width is added per frame. */
70
67
  budget: RenderBudget;
@@ -89,14 +86,6 @@ export async function requestPermissionDecision(
89
86
  title: string,
90
87
  payload: PromptPayload,
91
88
  options?: RequestPermissionOptions,
92
- ): Promise<PermissionPromptDecision> {
93
- if (view.kitUseUserDialog) return upstreamPermissionDecision(view, title, payload, options);
94
- const approved = await confirmPermission(view.ui, view.mode, title, payload);
95
- return attributeToHuman({ approved, state: approved ? 'approved' : 'denied' }, view.mode === 'tui' ? 'dialog' : 'select');
96
- }
97
-
98
- async function upstreamPermissionDecision(
99
- view: PermissionPromptView, title: string, payload: PromptPayload, options?: RequestPermissionOptions,
100
89
  ): Promise<PermissionPromptDecision> {
101
90
  if (view.mode === "tui") {
102
91
  return attributeToHuman(
@@ -1,5 +1,3 @@
1
- // Datalab Kit adaptation
2
-
3
1
  import {
4
2
  existsSync,
5
3
  mkdirSync,
@@ -84,8 +82,6 @@ export class ConfigStore
84
82
  {
85
83
  private config: PermissionSystemExtensionConfig;
86
84
  private configIssues: readonly string[] = [];
87
- private userDialog = false;
88
- usesUserDialog(): boolean { return this.userDialog; }
89
85
 
90
86
  constructor(private readonly deps: ConfigStoreDeps) {
91
87
  this.config = { ...DEFAULT_EXTENSION_CONFIG };
@@ -137,7 +133,6 @@ export class ConfigStore
137
133
  );
138
134
  const runtimeConfig = normalizePermissionSystemConfig(mergeResult.merged);
139
135
  this.config = runtimeConfig;
140
- this.userDialog = mergeResult.merged.doublePressToConfirm !== undefined || mergeResult.merged.permissionDialogKeys !== undefined;
141
136
 
142
137
  this.configIssues = mergeResult.issues;
143
138
 
@@ -1,7 +1,6 @@
1
1
  // Datalab Kit adaptation
2
2
  import { normalizeLocalReadCurl } from "../../../../dist/read-policy.js";
3
3
  import { isPlanModeActive } from "../../../../dist/plan-mode.js";
4
- import { registerYoloControl } from "../../../../dist/yolo.js";
5
4
  import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
6
5
  import { getAgentDir, getPackageDir } from "@earendil-works/pi-coding-agent";
7
6
  import { warmBashParser } from "#src/access-intent/bash/parser";
@@ -114,8 +113,7 @@ export default function piPermissionSystemExtension(pi: ExtensionAPI): void {
114
113
  // close over it; every call runs after configStore is assigned below. yolo is
115
114
  // a composition-stage ask→allow rewrite (#526) that the gate runner extends
116
115
  // to asks synthesized after resolution (#712), so both share this reader.
117
- const kitYolo = registerYoloControl(pi, () => isYoloModeEnabled(configStore.current()));
118
- const isYoloEnabled = (): boolean => kitYolo.isEnabled();
116
+ const isYoloEnabled = (): boolean => isYoloModeEnabled(configStore.current());
119
117
 
120
118
  let kitSession: ExtensionContext["sessionManager"] | undefined;
121
119
  const permissionManager = new PermissionManager({
@@ -157,7 +155,6 @@ export default function piPermissionSystemExtension(pi: ExtensionAPI): void {
157
155
  detection: subagentDetection,
158
156
  events: pi.events,
159
157
  getPromptPreferences: () => ({
160
- kitUseUserDialog: configStore.usesUserDialog(),
161
158
  doublePressToConfirm: configStore.current().doublePressToConfirm,
162
159
  budget: resolveRenderBudget(configStore.current()),
163
160
  dialogKeys: resolveDialogKeys(configStore.current()).keys,
@@ -386,22 +383,13 @@ export default function piPermissionSystemExtension(pi: ExtensionAPI): void {
386
383
  pi.on("session_start", async (event, ctx) => {
387
384
  kitSession = ctx.sessionManager;
388
385
  await lifecycle.handleSessionStart(event, ctx);
389
- kitYolo.refresh(ctx);
390
386
  });
391
387
  pi.on("resources_discover", (event, ctx) =>
392
388
  lifecycle.handleResourcesDiscover(event, ctx),
393
389
  );
394
390
  pi.on("session_shutdown", () => lifecycle.handleSessionShutdown());
395
- pi.on("before_agent_start", async (event, ctx) => {
396
- const result = await agentPrep.handle(event, ctx);
397
- kitYolo.refresh(ctx);
398
- return result;
399
- });
400
- pi.on("input", async (event, ctx) => {
401
- const result = await gates.handleInput(event, ctx);
402
- kitYolo.refresh(ctx);
403
- return result;
404
- });
391
+ pi.on("before_agent_start", (event, ctx) => agentPrep.handle(event, ctx));
392
+ pi.on("input", (event, ctx) => gates.handleInput(event, ctx));
405
393
  pi.on(
406
394
  "tool_call",
407
395
  createFailClosedToolCall(
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 kedom
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,45 @@
1
+ # `@pi-plugins/elapsed`
2
+
3
+ A [pi-agent](https://github.com/earendil-works/pi) extension that shows how long the
4
+ agent has been working on the current prompt, as a live clock in pi's working
5
+ indicator.
6
+
7
+ ```text
8
+ ⠹ Working... 1m 04s
9
+ ```
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ pi install npm:@pi-plugins/elapsed
15
+ ```
16
+
17
+ For a one-off run without adding it to settings:
18
+
19
+ ```bash
20
+ pi -e npm:@pi-plugins/elapsed
21
+ ```
22
+
23
+ For local development, load it straight from this directory:
24
+
25
+ ```bash
26
+ pi -e ./plugins/elapsed
27
+ ```
28
+
29
+ ## Usage
30
+
31
+ Nothing to configure. Send a prompt and the working indicator counts up next to the
32
+ spinner, restarting at `0s` for every prompt and disappearing when the agent is done.
33
+
34
+ ## Notes
35
+
36
+ - The clock covers one full prompt — the whole agent run, including every turn and
37
+ tool call — not a single LLM request. For per-request timings use
38
+ [`speed`](../speed).
39
+ - It ticks once per second and replaces pi's default `Working...` message; pi's own
40
+ message is restored when the run ends.
41
+ - Interactive (TUI) mode only. In RPC, print, and JSON modes there is no working
42
+ indicator, so the extension stays idle.
43
+ - While pi shows a different status row — retrying, compacting, summarizing a branch
44
+ — that row is displayed instead. Time keeps accruing and the clock reappears with
45
+ the working indicator.
@@ -0,0 +1,8 @@
1
+ import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
+ //#region src/index.d.ts
3
+ /** `4s`, `1m 04s`, `2h 07m 30s` — padded so the row keeps its width while counting. */
4
+ declare function formatElapsed(ms: number): string;
5
+ declare function elapsed(pi: ExtensionAPI): void;
6
+ //#endregion
7
+ export { elapsed as default, formatElapsed };
8
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"mappings":";;;iBAWgB,cAAc;iBAeN,QAAQ,IAAI"}
@@ -0,0 +1,47 @@
1
+ //#region src/index.ts
2
+ /** pi's own default working message, so the clock reads as an extension of it. */
3
+ const WORKING_LABEL = "Working...";
4
+ const TICK_MS = 1e3;
5
+ function pad(value) {
6
+ return value.toString().padStart(2, "0");
7
+ }
8
+ /** `4s`, `1m 04s`, `2h 07m 30s` — padded so the row keeps its width while counting. */
9
+ function formatElapsed(ms) {
10
+ const totalSeconds = Math.floor(ms / 1e3);
11
+ const seconds = totalSeconds % 60;
12
+ const minutes = Math.floor(totalSeconds / 60) % 60;
13
+ const hours = Math.floor(totalSeconds / 3600);
14
+ if (hours > 0) return `${hours}h ${pad(minutes)}m ${pad(seconds)}s`;
15
+ if (minutes > 0) return `${minutes}m ${pad(seconds)}s`;
16
+ return `${seconds}s`;
17
+ }
18
+ function elapsed(pi) {
19
+ let ticker;
20
+ function stop(ctx) {
21
+ if (ticker === void 0) return;
22
+ clearInterval(ticker);
23
+ ticker = void 0;
24
+ ctx.ui.setWorkingMessage();
25
+ }
26
+ pi.on("agent_start", (_event, ctx) => {
27
+ if (ctx.mode !== "tui") return;
28
+ stop(ctx);
29
+ const startedAt = performance.now();
30
+ const show = () => {
31
+ ctx.ui.setWorkingMessage(`${WORKING_LABEL} ${formatElapsed(performance.now() - startedAt)}`);
32
+ };
33
+ show();
34
+ ticker = setInterval(show, TICK_MS);
35
+ ticker.unref();
36
+ });
37
+ pi.on("agent_end", (_event, ctx) => {
38
+ stop(ctx);
39
+ });
40
+ pi.on("session_shutdown", (_event, ctx) => {
41
+ stop(ctx);
42
+ });
43
+ }
44
+ //#endregion
45
+ export { elapsed as default, formatElapsed };
46
+
47
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent'\n\n/** pi's own default working message, so the clock reads as an extension of it. */\nconst WORKING_LABEL = 'Working...'\nconst TICK_MS = 1000\n\nfunction pad(value: number): string {\n return value.toString().padStart(2, '0')\n}\n\n/** `4s`, `1m 04s`, `2h 07m 30s` — padded so the row keeps its width while counting. */\nexport function formatElapsed(ms: number): string {\n const totalSeconds = Math.floor(ms / 1000)\n const seconds = totalSeconds % 60\n const minutes = Math.floor(totalSeconds / 60) % 60\n const hours = Math.floor(totalSeconds / 3600)\n\n if (hours > 0) {\n return `${hours}h ${pad(minutes)}m ${pad(seconds)}s`\n }\n if (minutes > 0) {\n return `${minutes}m ${pad(seconds)}s`\n }\n return `${seconds}s`\n}\n\nexport default function elapsed(pi: ExtensionAPI) {\n let ticker: NodeJS.Timeout | undefined\n\n function stop(ctx: ExtensionContext): void {\n if (ticker === undefined) {\n return\n }\n clearInterval(ticker)\n ticker = undefined\n ctx.ui.setWorkingMessage()\n }\n\n pi.on('agent_start', (_event, ctx) => {\n // Only the interactive loader renders a working message; elsewhere it is a no-op.\n if (ctx.mode !== 'tui') {\n return\n }\n stop(ctx)\n\n const startedAt = performance.now()\n const show = () => {\n ctx.ui.setWorkingMessage(\n `${WORKING_LABEL} ${formatElapsed(performance.now() - startedAt)}`,\n )\n }\n\n // Each write repaints the loader, so the tick is what animates the clock.\n show()\n ticker = setInterval(show, TICK_MS)\n ticker.unref()\n })\n\n pi.on('agent_end', (_event, ctx) => {\n stop(ctx)\n })\n\n pi.on('session_shutdown', (_event, ctx) => {\n stop(ctx)\n })\n}\n"],"mappings":";;AAGA,MAAM,gBAAgB;AACtB,MAAM,UAAU;AAEhB,SAAS,IAAI,OAAuB;CAClC,OAAO,MAAM,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG;AACzC;;AAGA,SAAgB,cAAc,IAAoB;CAChD,MAAM,eAAe,KAAK,MAAM,KAAK,GAAI;CACzC,MAAM,UAAU,eAAe;CAC/B,MAAM,UAAU,KAAK,MAAM,eAAe,EAAE,IAAI;CAChD,MAAM,QAAQ,KAAK,MAAM,eAAe,IAAI;CAE5C,IAAI,QAAQ,GACV,OAAO,GAAG,MAAM,IAAI,IAAI,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE;CAEpD,IAAI,UAAU,GACZ,OAAO,GAAG,QAAQ,IAAI,IAAI,OAAO,EAAE;CAErC,OAAO,GAAG,QAAQ;AACpB;AAEA,SAAwB,QAAQ,IAAkB;CAChD,IAAI;CAEJ,SAAS,KAAK,KAA6B;EACzC,IAAI,WAAW,KAAA,GACb;EAEF,cAAc,MAAM;EACpB,SAAS,KAAA;EACT,IAAI,GAAG,kBAAkB;CAC3B;CAEA,GAAG,GAAG,gBAAgB,QAAQ,QAAQ;EAEpC,IAAI,IAAI,SAAS,OACf;EAEF,KAAK,GAAG;EAER,MAAM,YAAY,YAAY,IAAI;EAClC,MAAM,aAAa;GACjB,IAAI,GAAG,kBACL,GAAG,cAAc,GAAG,cAAc,YAAY,IAAI,IAAI,SAAS,GACjE;EACF;EAGA,KAAK;EACL,SAAS,YAAY,MAAM,OAAO;EAClC,OAAO,MAAM;CACf,CAAC;CAED,GAAG,GAAG,cAAc,QAAQ,QAAQ;EAClC,KAAK,GAAG;CACV,CAAC;CAED,GAAG,GAAG,qBAAqB,QAAQ,QAAQ;EACzC,KAAK,GAAG;CACV,CAAC;AACH"}
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@pi-plugins/elapsed",
3
+ "version": "0.1.1",
4
+ "description": "Working timer extension for pi-agent: shows how long the agent has been working.",
5
+ "keywords": [
6
+ "duration",
7
+ "elapsed",
8
+ "pi",
9
+ "pi-agent",
10
+ "pi-extension",
11
+ "pi-package",
12
+ "timer",
13
+ "working-indicator"
14
+ ],
15
+ "homepage": "https://github.com/k3dom/pi-plugins/tree/main/plugins/elapsed#readme",
16
+ "bugs": {
17
+ "url": "https://github.com/k3dom/pi-plugins/issues"
18
+ },
19
+ "license": "MIT",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/k3dom/pi-plugins.git",
23
+ "directory": "plugins/elapsed"
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "README.md"
28
+ ],
29
+ "type": "module",
30
+ "types": "./dist/index.d.mts",
31
+ "exports": {
32
+ ".": "./dist/index.mjs",
33
+ "./package.json": "./package.json"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "devDependencies": {
39
+ "@earendil-works/pi-coding-agent": "0.83.0",
40
+ "@types/node": "26.1.2",
41
+ "oxfmt": "0.62.0",
42
+ "oxlint": "1.77.0",
43
+ "tsdown": "0.22.14",
44
+ "typescript": "7.0.2",
45
+ "@pi-plugins/fmt": "0.0.0",
46
+ "@pi-plugins/lint": "0.0.0",
47
+ "@pi-plugins/tsconfig": "0.0.0"
48
+ },
49
+ "peerDependencies": {
50
+ "@earendil-works/pi-coding-agent": "*"
51
+ },
52
+ "pi": {
53
+ "extensions": [
54
+ "./dist/index.mjs"
55
+ ]
56
+ },
57
+ "scripts": {
58
+ "build": "tsdown",
59
+ "check": "pnpm run lint && pnpm run check-types && pnpm run format:check",
60
+ "check-types": "tsc -b",
61
+ "lint": "oxlint",
62
+ "format": "oxfmt",
63
+ "format:check": "oxfmt --check"
64
+ }
65
+ }
@@ -0,0 +1,61 @@
1
+ # @tifan/pi-recap
2
+
3
+ Re-enter a session without rereading the transcript.
4
+
5
+ `pi-recap` shows a one-line recap on demand or after you have been away. It starts with why you opened the session, then adds the current state, important decisions, relevant files or commands, and the likely next action.
6
+
7
+ ![Recap widget showing a generated session recap](https://raw.githubusercontent.com/tifandotme/pi-extensions/refs/heads/master/packages/pi-recap/assets/recap-widget.webp)
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ pi install npm:@tifan/pi-recap
13
+ ```
14
+
15
+ This package requires Pi 0.84.2 or newer.
16
+
17
+ ## How it works
18
+
19
+ - `/recap` generates a fresh, goal-first recap and shows it above the editor.
20
+ - After the agent settles, `pi-recap` waits 5 minutes. If you stay idle, it generates one automatic recap.
21
+ - On resume, `pi-recap` shows the saved recap if it is current. If it is stale or missing, it generates a fresh recap.
22
+ - The recap clears when you send a non-`/recap` message.
23
+
24
+ Recaps use pi's current session context, so they follow the active branch and respect compaction. They do not scrape the full session file or terminal history. The latest recap is stored outside LLM context.
25
+
26
+ A good recap should answer "what was I trying to do here?". For example:
27
+
28
+ > Deciding whether pi-inline-skills should switch from `$skill` to `/skill`. Recommendation is `/` only with commands winning; next decide whether leading `/skill` should expand.
29
+
30
+ ## Commands
31
+
32
+ - `/recap`: Generate and show a fresh recap.
33
+ - `/recap status`: Show the selected model, active model, recap freshness, and whether the recap is visible. A recap is current when it still matches the latest session state; otherwise it is stale.
34
+ - `/recap config`: Choose a recap model.
35
+ - `/recap help`: List recap commands.
36
+
37
+ ## Configuration
38
+
39
+ Out of the box, `pi-recap` uses this default model: `openai-codex/gpt-5.6-luna`.
40
+
41
+ Run `/recap config` to choose a different model.
42
+
43
+ ![Recap model selector showing available model choices](https://raw.githubusercontent.com/tifandotme/pi-extensions/refs/heads/master/packages/pi-recap/assets/recap-model-selector.webp)
44
+
45
+ After you choose a model, `pi-recap` uses only that model. Choose `Use default` in `/recap config` to return to the default.
46
+
47
+ You can also edit `$PI_CODING_AGENT_DIR/extensions/pi-recap.json` manually:
48
+
49
+ ```json
50
+ {
51
+ "model": "openai-codex/gpt-5.6-luna"
52
+ }
53
+ ```
54
+
55
+ ## Release notes
56
+
57
+ See [CHANGELOG.md](https://github.com/tifandotme/pi-extensions/blob/master/packages/pi-recap/CHANGELOG.md)
58
+
59
+ ## License
60
+
61
+ [MIT](https://github.com/tifandotme/pi-extensions/blob/master/LICENSE)
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@tifan/pi-recap",
3
+ "version": "0.4.7",
4
+ "description": "One-line session recap on demand or after you have been away.",
5
+ "keywords": [
6
+ "pi",
7
+ "pi-extension",
8
+ "pi-package",
9
+ "recap",
10
+ "summary"
11
+ ],
12
+ "homepage": "https://github.com/tifandotme/pi-extensions/tree/master/packages/pi-recap#readme",
13
+ "bugs": "https://github.com/tifandotme/pi-extensions/issues",
14
+ "license": "MIT",
15
+ "author": "Tifan Dwi Avianto <hi@tifan.me>",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/tifandotme/pi-extensions.git",
19
+ "directory": "packages/pi-recap"
20
+ },
21
+ "files": [
22
+ "src/**/*.ts",
23
+ "README.md",
24
+ "LICENSE"
25
+ ],
26
+ "type": "module",
27
+ "publishConfig": {
28
+ "access": "public",
29
+ "provenance": true
30
+ },
31
+ "peerDependencies": {
32
+ "@earendil-works/pi-coding-agent": ">=0.84.3"
33
+ },
34
+ "engines": {
35
+ "node": ">=20"
36
+ },
37
+ "pi": {
38
+ "extensions": [
39
+ "./src/index.ts"
40
+ ],
41
+ "image": "https://raw.githubusercontent.com/tifandotme/pi-extensions/refs/heads/master/packages/pi-recap/assets/recap-widget.webp"
42
+ }
43
+ }