@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.
- package/CHANGELOG.md +14 -0
- package/README.md +26 -8
- package/THIRD_PARTY_NOTICES.md +6 -2
- package/dist/extension.js +8 -1
- package/dist/recap.d.ts +2 -0
- package/dist/recap.js +31 -0
- package/docs/adr/0002-package-delivery.md +2 -0
- package/node_modules/@gotgenes/pi-permission-system/src/authority/permission-prompt-component.ts +0 -11
- package/node_modules/@gotgenes/pi-permission-system/src/config/config-store.ts +0 -5
- package/node_modules/@gotgenes/pi-permission-system/src/index.ts +3 -15
- package/node_modules/@pi-plugins/elapsed/LICENSE +21 -0
- package/node_modules/@pi-plugins/elapsed/README.md +45 -0
- package/node_modules/@pi-plugins/elapsed/dist/index.d.mts +8 -0
- package/node_modules/@pi-plugins/elapsed/dist/index.d.mts.map +1 -0
- package/node_modules/@pi-plugins/elapsed/dist/index.mjs +47 -0
- package/node_modules/@pi-plugins/elapsed/dist/index.mjs.map +1 -0
- package/node_modules/@pi-plugins/elapsed/package.json +65 -0
- package/node_modules/@tifan/pi-recap/README.md +61 -0
- package/node_modules/@tifan/pi-recap/package.json +43 -0
- package/node_modules/@tifan/pi-recap/src/index.ts +584 -0
- package/node_modules/@tifan/pi-recap/src/model-picker.ts +233 -0
- package/node_modules/@tifan/pi-recap/src/models.ts +183 -0
- package/node_modules/@tifan/pi-recap/src/sanitize.ts +119 -0
- package/node_modules/@tifan/pi-recap/src/tui.ts +155 -0
- package/node_modules/@zigai/pi-extension-internals/README.md +24 -0
- package/node_modules/@zigai/pi-extension-internals/dist/editor-enhancer-registry.d.ts +21 -0
- package/node_modules/@zigai/pi-extension-internals/dist/editor-enhancer-registry.js +233 -0
- package/node_modules/@zigai/pi-extension-internals/dist/index.d.ts +6 -0
- package/node_modules/@zigai/pi-extension-internals/dist/index.js +3 -0
- package/node_modules/@zigai/pi-extension-internals/dist/linked-method-patch.d.ts +34 -0
- package/node_modules/@zigai/pi-extension-internals/dist/linked-method-patch.js +272 -0
- package/node_modules/@zigai/pi-extension-internals/dist/pi-internal-import.d.ts +11 -0
- package/node_modules/@zigai/pi-extension-internals/dist/pi-internal-import.js +139 -0
- package/node_modules/@zigai/pi-extension-internals/package.json +41 -0
- package/node_modules/@zigai/pi-extension-settings/LICENSE +21 -0
- package/node_modules/@zigai/pi-extension-settings/README.md +36 -0
- package/node_modules/@zigai/pi-extension-settings/dist/artifacts.d.ts +23 -0
- package/node_modules/@zigai/pi-extension-settings/dist/artifacts.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/artifacts.js +75 -0
- package/node_modules/@zigai/pi-extension-settings/dist/artifacts.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.d.ts +3 -0
- package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.js +5 -0
- package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/cli.d.ts +6 -0
- package/node_modules/@zigai/pi-extension-settings/dist/cli.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/cli.js +87 -0
- package/node_modules/@zigai/pi-extension-settings/dist/cli.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.d.ts +2 -0
- package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.js +2 -0
- package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/definition.d.ts +159 -0
- package/node_modules/@zigai/pi-extension-settings/dist/definition.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/definition.js +248 -0
- package/node_modules/@zigai/pi-extension-settings/dist/definition.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/file-system.d.ts +10 -0
- package/node_modules/@zigai/pi-extension-settings/dist/file-system.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/file-system.js +115 -0
- package/node_modules/@zigai/pi-extension-settings/dist/file-system.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/index.d.ts +2 -0
- package/node_modules/@zigai/pi-extension-settings/dist/index.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/index.js +2 -0
- package/node_modules/@zigai/pi-extension-settings/dist/index.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/json-value.d.ts +18 -0
- package/node_modules/@zigai/pi-extension-settings/dist/json-value.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/json-value.js +56 -0
- package/node_modules/@zigai/pi-extension-settings/dist/json-value.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/paths.d.ts +11 -0
- package/node_modules/@zigai/pi-extension-settings/dist/paths.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/paths.js +23 -0
- package/node_modules/@zigai/pi-extension-settings/dist/paths.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.d.ts +5 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.js +21 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi.d.ts +106 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi.js +122 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi.ts +2537 -0
- package/node_modules/@zigai/pi-extension-settings/dist/pi.ts.map +7 -0
- package/node_modules/@zigai/pi-extension-settings/dist/projects.d.ts +10 -0
- package/node_modules/@zigai/pi-extension-settings/dist/projects.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/projects.js +177 -0
- package/node_modules/@zigai/pi-extension-settings/dist/projects.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/runtime.d.ts +40 -0
- package/node_modules/@zigai/pi-extension-settings/dist/runtime.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/runtime.js +158 -0
- package/node_modules/@zigai/pi-extension-settings/dist/runtime.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/runtime.ts +158 -0
- package/node_modules/@zigai/pi-extension-settings/dist/runtime.ts.map +7 -0
- package/node_modules/@zigai/pi-extension-settings/dist/schema-document.d.ts +19 -0
- package/node_modules/@zigai/pi-extension-settings/dist/schema-document.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/schema-document.js +168 -0
- package/node_modules/@zigai/pi-extension-settings/dist/schema-document.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.d.ts +9 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.js +242 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.d.ts +59 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.js +98 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.d.ts +80 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.js +144 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.d.ts +5 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.js +30 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.d.ts +10 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.js +16 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.d.ts +54 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.js +202 -0
- package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.d.ts +5 -0
- package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.d.ts.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.js +9 -0
- package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.js.map +1 -0
- package/node_modules/@zigai/pi-extension-settings/docs/generation.md +71 -0
- package/node_modules/@zigai/pi-extension-settings/docs/manual-setup.md +98 -0
- package/node_modules/@zigai/pi-extension-settings/docs/runtime.md +100 -0
- package/node_modules/@zigai/pi-extension-settings/docs/ui-controls.md +31 -0
- package/node_modules/@zigai/pi-extension-settings/package.json +97 -0
- package/node_modules/@zigai/pi-mention-anything/README.md +113 -0
- package/node_modules/@zigai/pi-mention-anything/config.schema.json +313 -0
- package/node_modules/@zigai/pi-mention-anything/docs/command-protocol.md +106 -0
- package/node_modules/@zigai/pi-mention-anything/docs/providers.md +128 -0
- package/node_modules/@zigai/pi-mention-anything/examples/query-command.mjs +96 -0
- package/node_modules/@zigai/pi-mention-anything/examples/recursive-tree.ts +28 -0
- package/node_modules/@zigai/pi-mention-anything/examples/static.ts +28 -0
- package/node_modules/@zigai/pi-mention-anything/examples/tmux.ts +90 -0
- package/node_modules/@zigai/pi-mention-anything/examples/tree-settings.json +25 -0
- package/node_modules/@zigai/pi-mention-anything/package.json +58 -0
- package/node_modules/@zigai/pi-mention-anything/src/api.ts +75 -0
- package/node_modules/@zigai/pi-mention-anything/src/autocomplete.ts +231 -0
- package/node_modules/@zigai/pi-mention-anything/src/chain-autocomplete.ts +596 -0
- package/node_modules/@zigai/pi-mention-anything/src/chain-syntax.ts +345 -0
- package/node_modules/@zigai/pi-mention-anything/src/command-provider.ts +291 -0
- package/node_modules/@zigai/pi-mention-anything/src/configured-source.ts +66 -0
- package/node_modules/@zigai/pi-mention-anything/src/editor.ts +180 -0
- package/node_modules/@zigai/pi-mention-anything/src/expand-mentions.ts +162 -0
- package/node_modules/@zigai/pi-mention-anything/src/index.ts +54 -0
- package/node_modules/@zigai/pi-mention-anything/src/initial-suggestions.ts +190 -0
- package/node_modules/@zigai/pi-mention-anything/src/list-provider.ts +71 -0
- package/node_modules/@zigai/pi-mention-anything/src/mention-hub.ts +307 -0
- package/node_modules/@zigai/pi-mention-anything/src/mention-resolution.ts +374 -0
- package/node_modules/@zigai/pi-mention-anything/src/mention-syntax.ts +105 -0
- package/node_modules/@zigai/pi-mention-anything/src/register-mention.ts +89 -0
- package/node_modules/@zigai/pi-mention-anything/src/rendering.ts +53 -0
- package/node_modules/@zigai/pi-mention-anything/src/selected-items.ts +21 -0
- package/node_modules/@zigai/pi-mention-anything/src/selection-history.ts +135 -0
- package/node_modules/@zigai/pi-mention-anything/src/settings-input.ts +317 -0
- package/node_modules/@zigai/pi-mention-anything/src/settings.prevalidated.ts +57 -0
- package/node_modules/@zigai/pi-mention-anything/src/settings.ts +52 -0
- package/node_modules/@zigai/pi-mention-anything/src/source-contract.ts +174 -0
- package/node_modules/@zigai/pi-mention-anything/src/source-controller.ts +1070 -0
- package/node_modules/@zigai/pi-mention-anything/src/source-runtime.ts +99 -0
- package/node_modules/@zigai/pi-mention-skill/README.md +60 -0
- package/node_modules/@zigai/pi-mention-skill/config.schema.json +81 -0
- package/node_modules/@zigai/pi-mention-skill/package.json +56 -0
- package/node_modules/@zigai/pi-mention-skill/src/index.ts +60 -0
- package/node_modules/@zigai/pi-mention-skill/src/settings-input.ts +74 -0
- package/node_modules/@zigai/pi-mention-skill/src/settings.prevalidated.ts +18 -0
- package/node_modules/@zigai/pi-mention-skill/src/settings.ts +54 -0
- package/node_modules/@zigai/pi-mention-skill/src/skill-commands.ts +18 -0
- package/node_modules/@zigai/pi-mention-skill/src/skill-content.ts +60 -0
- package/node_modules/@zigai/pi-mention-skill/src/skill-provider.ts +105 -0
- package/node_modules/@zigai/pi-mention-skill/src/slash-skill-filter.ts +29 -0
- package/node_modules/argparse/LICENSE +21 -0
- package/node_modules/argparse/README.md +257 -0
- package/node_modules/argparse/index.js +3 -0
- package/node_modules/argparse/lib/action/append/constant.js +47 -0
- package/node_modules/argparse/lib/action/append.js +53 -0
- package/node_modules/argparse/lib/action/count.js +40 -0
- package/node_modules/argparse/lib/action/help.js +47 -0
- package/node_modules/argparse/lib/action/store/constant.js +43 -0
- package/node_modules/argparse/lib/action/store/false.js +27 -0
- package/node_modules/argparse/lib/action/store/true.js +26 -0
- package/node_modules/argparse/lib/action/store.js +50 -0
- package/node_modules/argparse/lib/action/subparsers.js +149 -0
- package/node_modules/argparse/lib/action/version.js +47 -0
- package/node_modules/argparse/lib/action.js +146 -0
- package/node_modules/argparse/lib/action_container.js +482 -0
- package/node_modules/argparse/lib/argparse.js +14 -0
- package/node_modules/argparse/lib/argument/error.js +50 -0
- package/node_modules/argparse/lib/argument/exclusive.js +54 -0
- package/node_modules/argparse/lib/argument/group.js +75 -0
- package/node_modules/argparse/lib/argument_parser.js +1161 -0
- package/node_modules/argparse/lib/const.js +21 -0
- package/node_modules/argparse/lib/help/added_formatters.js +87 -0
- package/node_modules/argparse/lib/help/formatter.js +795 -0
- package/node_modules/argparse/lib/namespace.js +76 -0
- package/node_modules/argparse/lib/utils.js +57 -0
- package/node_modules/argparse/package.json +34 -0
- package/node_modules/esprima/LICENSE.BSD +21 -0
- package/node_modules/esprima/README.md +46 -0
- package/node_modules/esprima/bin/esparse.js +139 -0
- package/node_modules/esprima/bin/esvalidate.js +236 -0
- package/node_modules/esprima/dist/esprima.js +6709 -0
- package/node_modules/esprima/package.json +112 -0
- package/node_modules/extend-shallow/LICENSE +21 -0
- package/node_modules/extend-shallow/README.md +61 -0
- package/node_modules/extend-shallow/index.js +33 -0
- package/node_modules/extend-shallow/package.json +56 -0
- package/node_modules/graceful-fs/LICENSE +15 -0
- package/node_modules/graceful-fs/README.md +143 -0
- package/node_modules/graceful-fs/clone.js +23 -0
- package/node_modules/graceful-fs/graceful-fs.js +448 -0
- package/node_modules/graceful-fs/legacy-streams.js +118 -0
- package/node_modules/graceful-fs/package.json +53 -0
- package/node_modules/graceful-fs/polyfills.js +355 -0
- package/node_modules/gray-matter/LICENSE +21 -0
- package/node_modules/gray-matter/README.md +565 -0
- package/node_modules/gray-matter/gray-matter.d.ts +114 -0
- package/node_modules/gray-matter/index.js +228 -0
- package/node_modules/gray-matter/lib/defaults.js +18 -0
- package/node_modules/gray-matter/lib/engine.js +30 -0
- package/node_modules/gray-matter/lib/engines.js +54 -0
- package/node_modules/gray-matter/lib/excerpt.js +32 -0
- package/node_modules/gray-matter/lib/parse.js +13 -0
- package/node_modules/gray-matter/lib/stringify.js +56 -0
- package/node_modules/gray-matter/lib/to-file.js +43 -0
- package/node_modules/gray-matter/lib/utils.js +66 -0
- package/node_modules/gray-matter/package.json +127 -0
- package/node_modules/is-extendable/LICENSE +21 -0
- package/node_modules/is-extendable/README.md +72 -0
- package/node_modules/is-extendable/index.js +13 -0
- package/node_modules/is-extendable/package.json +51 -0
- package/node_modules/js-yaml/LICENSE +21 -0
- package/node_modules/js-yaml/README.md +302 -0
- package/node_modules/js-yaml/bin/js-yaml.js +132 -0
- package/node_modules/js-yaml/dist/js-yaml.js +4024 -0
- package/node_modules/js-yaml/dist/js-yaml.min.js +1 -0
- package/node_modules/js-yaml/index.js +7 -0
- package/node_modules/js-yaml/lib/js-yaml/common.js +59 -0
- package/node_modules/js-yaml/lib/js-yaml/dumper.js +850 -0
- package/node_modules/js-yaml/lib/js-yaml/exception.js +43 -0
- package/node_modules/js-yaml/lib/js-yaml/loader.js +1679 -0
- package/node_modules/js-yaml/lib/js-yaml/mark.js +76 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
- package/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
- package/node_modules/js-yaml/lib/js-yaml/schema.js +108 -0
- package/node_modules/js-yaml/lib/js-yaml/type/binary.js +138 -0
- package/node_modules/js-yaml/lib/js-yaml/type/bool.js +35 -0
- package/node_modules/js-yaml/lib/js-yaml/type/float.js +116 -0
- package/node_modules/js-yaml/lib/js-yaml/type/int.js +173 -0
- package/node_modules/js-yaml/lib/js-yaml/type/js/function.js +93 -0
- package/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +60 -0
- package/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +28 -0
- package/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
- package/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
- package/node_modules/js-yaml/lib/js-yaml/type/null.js +34 -0
- package/node_modules/js-yaml/lib/js-yaml/type/omap.js +44 -0
- package/node_modules/js-yaml/lib/js-yaml/type/pairs.js +53 -0
- package/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
- package/node_modules/js-yaml/lib/js-yaml/type/set.js +29 -0
- package/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
- package/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +88 -0
- package/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
- package/node_modules/js-yaml/lib/js-yaml.js +39 -0
- package/node_modules/js-yaml/package.json +52 -0
- package/node_modules/kind-of/LICENSE +21 -0
- package/node_modules/kind-of/README.md +367 -0
- package/node_modules/kind-of/index.js +129 -0
- package/node_modules/kind-of/package.json +88 -0
- package/node_modules/pi-toggle-skills/README.md +213 -0
- package/node_modules/pi-toggle-skills/package.json +60 -0
- package/node_modules/pi-toggle-skills/src/index.ts +112 -0
- package/node_modules/pi-toggle-skills/src/skill-discovery.ts +258 -0
- package/node_modules/pi-toggle-skills/src/skill-selector.ts +435 -0
- package/node_modules/pi-toggle-skills/toggle-skills.ts +316 -0
- package/node_modules/pi-toggle-skills/vitest.config.ts +15 -0
- package/node_modules/proper-lockfile/LICENSE +21 -0
- package/node_modules/proper-lockfile/README.md +183 -0
- package/node_modules/proper-lockfile/index.js +40 -0
- package/node_modules/proper-lockfile/lib/adapter.js +85 -0
- package/node_modules/proper-lockfile/lib/lockfile.js +342 -0
- package/node_modules/proper-lockfile/lib/mtime-precision.js +55 -0
- package/node_modules/proper-lockfile/node_modules/retry/.npmignore +3 -0
- package/node_modules/proper-lockfile/node_modules/retry/.travis.yml +15 -0
- package/node_modules/proper-lockfile/node_modules/retry/License +21 -0
- package/node_modules/proper-lockfile/node_modules/retry/Makefile +18 -0
- package/node_modules/proper-lockfile/node_modules/retry/README.md +227 -0
- package/node_modules/proper-lockfile/node_modules/retry/equation.gif +0 -0
- package/node_modules/proper-lockfile/node_modules/retry/example/dns.js +31 -0
- package/node_modules/proper-lockfile/node_modules/retry/example/stop.js +40 -0
- package/node_modules/proper-lockfile/node_modules/retry/index.js +1 -0
- package/node_modules/proper-lockfile/node_modules/retry/lib/retry.js +100 -0
- package/node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js +158 -0
- package/node_modules/proper-lockfile/node_modules/retry/package.json +32 -0
- package/node_modules/proper-lockfile/node_modules/retry/test/common.js +10 -0
- package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-forever.js +24 -0
- package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-retry-operation.js +258 -0
- package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-retry-wrap.js +101 -0
- package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-timeouts.js +69 -0
- package/node_modules/proper-lockfile/package.json +71 -0
- package/node_modules/section-matter/LICENSE +21 -0
- package/node_modules/section-matter/README.md +236 -0
- package/node_modules/section-matter/index.js +136 -0
- package/node_modules/section-matter/package.json +55 -0
- package/node_modules/signal-exit/LICENSE.txt +16 -0
- package/node_modules/signal-exit/README.md +39 -0
- package/node_modules/signal-exit/index.js +202 -0
- package/node_modules/signal-exit/package.json +38 -0
- package/node_modules/signal-exit/signals.js +53 -0
- package/node_modules/sprintf-js/.npmignore +1 -0
- package/node_modules/sprintf-js/LICENSE +24 -0
- package/node_modules/sprintf-js/README.md +88 -0
- package/node_modules/sprintf-js/bower.json +14 -0
- package/node_modules/sprintf-js/demo/angular.html +20 -0
- package/node_modules/sprintf-js/dist/angular-sprintf.min.js +4 -0
- package/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +1 -0
- package/node_modules/sprintf-js/dist/angular-sprintf.min.map +1 -0
- package/node_modules/sprintf-js/dist/sprintf.min.js +4 -0
- package/node_modules/sprintf-js/dist/sprintf.min.js.map +1 -0
- package/node_modules/sprintf-js/dist/sprintf.min.map +1 -0
- package/node_modules/sprintf-js/gruntfile.js +36 -0
- package/node_modules/sprintf-js/package.json +22 -0
- package/node_modules/sprintf-js/src/angular-sprintf.js +18 -0
- package/node_modules/sprintf-js/src/sprintf.js +208 -0
- package/node_modules/sprintf-js/test/test.js +82 -0
- package/node_modules/strip-bom-string/LICENSE +21 -0
- package/node_modules/strip-bom-string/README.md +66 -0
- package/node_modules/strip-bom-string/index.js +15 -0
- package/node_modules/strip-bom-string/package.json +60 -0
- package/package.json +13 -4
- package/dist/confirmation.d.ts +0 -33
- package/dist/confirmation.js +0 -64
- package/dist/yolo.d.ts +0 -6
- 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.
|
|
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
|
-
|
|
42
|
+
Одиннадцать фиксированных компонентов включены в архив npm вместе с их зависимостями. GigaChat устанавливается отдельно без закрепления версии.
|
|
39
43
|
|
|
40
|
-
|
|
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
|
-
-
|
|
55
|
+
- Подтверждения показывает штатный диалог `@gotgenes/pi-permission-system`: разрешение одного запуска или на сессию, отказ и отказ с причиной. Настройки клавиш и повторного нажатия управляются самим расширением; собственного диалога Datalab Kit нет.
|
|
52
56
|
- Одновременно работает один субагент. Инструмент `subagent` принимает одну задачу за вызов.
|
|
53
57
|
|
|
54
|
-
Уже заданные пользователем настройки имеют приоритет, включая
|
|
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
|
-
|
|
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 автоматически разрешает
|
|
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 и
|
|
105
|
+
`build` применяет проверяемые адаптации к локальным permission-system, plan-mode, subagents и значению default-модели recap перед упаковкой. Номера версий и единственность каждого места изменения проверяются; несовпадение завершает сборку с ошибкой. Адаптации не меняют глобально установленные пакеты. Интеграционный тест использует изолированный каталог агента и локальный реестр npm, устанавливает настоящий архив штатной командой Pi и проверяет штатное обновление.
|
|
88
106
|
|
|
89
107
|
Тесты запускаются последовательно с `--liftoff-only`, чтобы оптимизирующая компиляция WASM-парсера bash не исчерпывала память в ограниченной среде CI. Параметр относится к тестовому процессу; запуск пользователя не меняется.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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 () => {
|
package/dist/recap.d.ts
ADDED
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
|
## Последствия и пределы
|
package/node_modules/@gotgenes/pi-permission-system/src/authority/permission-prompt-component.ts
CHANGED
|
@@ -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
|
|
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",
|
|
396
|
-
|
|
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
|
+

|
|
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
|
+

|
|
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
|
+
}
|