@dev-sergeev/datalab-kit 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +23 -5
- package/THIRD_PARTY_NOTICES.md +6 -2
- package/docs/adr/0001-user-settings-priority.md +2 -0
- package/docs/adr/0002-package-delivery.md +8 -0
- 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 +586 -0
- package/node_modules/@tifan/pi-recap/src/model-picker.ts +234 -0
- package/node_modules/@tifan/pi-recap/src/models.ts +180 -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/node-addon-api/common 2.gypi +21 -0
- package/node_modules/node-addon-api/except 2.gypi +25 -0
- package/node_modules/node-addon-api/napi 2.h +3463 -0
- package/node_modules/node-addon-api/napi-inl 2.h +7250 -0
- package/node_modules/node-addon-api/napi-inl.deprecated 2.h +186 -0
- package/node_modules/node-addon-api/node_addon_api 2.gyp +42 -0
- package/node_modules/node-addon-api/node_api 2.gyp +9 -0
- package/node_modules/node-addon-api/noexcept 2.gypi +26 -0
- package/node_modules/node-addon-api/nothing 2.c +0 -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 2.ts +316 -0
- package/node_modules/pi-toggle-skills/toggle-skills.ts +316 -0
- package/node_modules/pi-toggle-skills/vitest.config 2.ts +15 -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/.npmignore 2 +1 -0
- package/node_modules/sprintf-js/LICENSE +24 -0
- package/node_modules/sprintf-js/LICENSE 2 +24 -0
- package/node_modules/sprintf-js/README 2.md +88 -0
- package/node_modules/sprintf-js/README.md +88 -0
- package/node_modules/sprintf-js/bower 2.json +14 -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 2.js +36 -0
- package/node_modules/sprintf-js/gruntfile.js +36 -0
- package/node_modules/sprintf-js/package 2.json +22 -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/node_modules/tree-sitter-bash/tree-sitter-bash 2.wasm +0 -0
- package/node_modules/typebox/license 2 +23 -0
- package/node_modules/typebox/package 2.json +87 -0
- package/node_modules/typebox/readme 2.md +370 -0
- package/node_modules/zod/compile 2.cjs +96 -0
- package/node_modules/zod/compile 2.js +52 -0
- package/node_modules/zod/index 2.cjs +52 -0
- package/node_modules/zod/index 2.js +7 -0
- package/package.json +13 -4
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#ifndef SRC_NAPI_INL_DEPRECATED_H_
|
|
2
|
+
#define SRC_NAPI_INL_DEPRECATED_H_
|
|
3
|
+
|
|
4
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
5
|
+
// PropertyDescriptor class
|
|
6
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
7
|
+
|
|
8
|
+
template <typename Getter>
|
|
9
|
+
inline PropertyDescriptor PropertyDescriptor::Accessor(
|
|
10
|
+
const char* utf8name,
|
|
11
|
+
Getter getter,
|
|
12
|
+
napi_property_attributes attributes,
|
|
13
|
+
void* /*data*/) {
|
|
14
|
+
using CbData = details::CallbackData<Getter, Napi::Value>;
|
|
15
|
+
// TODO: Delete when the function is destroyed
|
|
16
|
+
auto callbackData = new CbData({getter, nullptr});
|
|
17
|
+
|
|
18
|
+
return PropertyDescriptor({utf8name,
|
|
19
|
+
nullptr,
|
|
20
|
+
nullptr,
|
|
21
|
+
CbData::Wrapper,
|
|
22
|
+
nullptr,
|
|
23
|
+
nullptr,
|
|
24
|
+
attributes,
|
|
25
|
+
callbackData});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
template <typename Getter>
|
|
29
|
+
inline PropertyDescriptor PropertyDescriptor::Accessor(
|
|
30
|
+
const std::string& utf8name,
|
|
31
|
+
Getter getter,
|
|
32
|
+
napi_property_attributes attributes,
|
|
33
|
+
void* data) {
|
|
34
|
+
return Accessor(utf8name.c_str(), getter, attributes, data);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
template <typename Getter>
|
|
38
|
+
inline PropertyDescriptor PropertyDescriptor::Accessor(
|
|
39
|
+
napi_value name,
|
|
40
|
+
Getter getter,
|
|
41
|
+
napi_property_attributes attributes,
|
|
42
|
+
void* /*data*/) {
|
|
43
|
+
using CbData = details::CallbackData<Getter, Napi::Value>;
|
|
44
|
+
// TODO: Delete when the function is destroyed
|
|
45
|
+
auto callbackData = new CbData({getter, nullptr});
|
|
46
|
+
|
|
47
|
+
return PropertyDescriptor({nullptr,
|
|
48
|
+
name,
|
|
49
|
+
nullptr,
|
|
50
|
+
CbData::Wrapper,
|
|
51
|
+
nullptr,
|
|
52
|
+
nullptr,
|
|
53
|
+
attributes,
|
|
54
|
+
callbackData});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
template <typename Getter>
|
|
58
|
+
inline PropertyDescriptor PropertyDescriptor::Accessor(
|
|
59
|
+
Name name, Getter getter, napi_property_attributes attributes, void* data) {
|
|
60
|
+
napi_value nameValue = name;
|
|
61
|
+
return PropertyDescriptor::Accessor(nameValue, getter, attributes, data);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
template <typename Getter, typename Setter>
|
|
65
|
+
inline PropertyDescriptor PropertyDescriptor::Accessor(
|
|
66
|
+
const char* utf8name,
|
|
67
|
+
Getter getter,
|
|
68
|
+
Setter setter,
|
|
69
|
+
napi_property_attributes attributes,
|
|
70
|
+
void* /*data*/) {
|
|
71
|
+
using CbData = details::AccessorCallbackData<Getter, Setter>;
|
|
72
|
+
// TODO: Delete when the function is destroyed
|
|
73
|
+
auto callbackData = new CbData({getter, setter, nullptr});
|
|
74
|
+
|
|
75
|
+
return PropertyDescriptor({utf8name,
|
|
76
|
+
nullptr,
|
|
77
|
+
nullptr,
|
|
78
|
+
CbData::GetterWrapper,
|
|
79
|
+
CbData::SetterWrapper,
|
|
80
|
+
nullptr,
|
|
81
|
+
attributes,
|
|
82
|
+
callbackData});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
template <typename Getter, typename Setter>
|
|
86
|
+
inline PropertyDescriptor PropertyDescriptor::Accessor(
|
|
87
|
+
const std::string& utf8name,
|
|
88
|
+
Getter getter,
|
|
89
|
+
Setter setter,
|
|
90
|
+
napi_property_attributes attributes,
|
|
91
|
+
void* data) {
|
|
92
|
+
return Accessor(utf8name.c_str(), getter, setter, attributes, data);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
template <typename Getter, typename Setter>
|
|
96
|
+
inline PropertyDescriptor PropertyDescriptor::Accessor(
|
|
97
|
+
napi_value name,
|
|
98
|
+
Getter getter,
|
|
99
|
+
Setter setter,
|
|
100
|
+
napi_property_attributes attributes,
|
|
101
|
+
void* /*data*/) {
|
|
102
|
+
using CbData = details::AccessorCallbackData<Getter, Setter>;
|
|
103
|
+
// TODO: Delete when the function is destroyed
|
|
104
|
+
auto callbackData = new CbData({getter, setter, nullptr});
|
|
105
|
+
|
|
106
|
+
return PropertyDescriptor({nullptr,
|
|
107
|
+
name,
|
|
108
|
+
nullptr,
|
|
109
|
+
CbData::GetterWrapper,
|
|
110
|
+
CbData::SetterWrapper,
|
|
111
|
+
nullptr,
|
|
112
|
+
attributes,
|
|
113
|
+
callbackData});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
template <typename Getter, typename Setter>
|
|
117
|
+
inline PropertyDescriptor PropertyDescriptor::Accessor(
|
|
118
|
+
Name name,
|
|
119
|
+
Getter getter,
|
|
120
|
+
Setter setter,
|
|
121
|
+
napi_property_attributes attributes,
|
|
122
|
+
void* data) {
|
|
123
|
+
napi_value nameValue = name;
|
|
124
|
+
return PropertyDescriptor::Accessor(
|
|
125
|
+
nameValue, getter, setter, attributes, data);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
template <typename Callable>
|
|
129
|
+
inline PropertyDescriptor PropertyDescriptor::Function(
|
|
130
|
+
const char* utf8name,
|
|
131
|
+
Callable cb,
|
|
132
|
+
napi_property_attributes attributes,
|
|
133
|
+
void* /*data*/) {
|
|
134
|
+
using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr)));
|
|
135
|
+
using CbData = details::CallbackData<Callable, ReturnType>;
|
|
136
|
+
// TODO: Delete when the function is destroyed
|
|
137
|
+
auto callbackData = new CbData({cb, nullptr});
|
|
138
|
+
|
|
139
|
+
return PropertyDescriptor({utf8name,
|
|
140
|
+
nullptr,
|
|
141
|
+
CbData::Wrapper,
|
|
142
|
+
nullptr,
|
|
143
|
+
nullptr,
|
|
144
|
+
nullptr,
|
|
145
|
+
attributes,
|
|
146
|
+
callbackData});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
template <typename Callable>
|
|
150
|
+
inline PropertyDescriptor PropertyDescriptor::Function(
|
|
151
|
+
const std::string& utf8name,
|
|
152
|
+
Callable cb,
|
|
153
|
+
napi_property_attributes attributes,
|
|
154
|
+
void* data) {
|
|
155
|
+
return Function(utf8name.c_str(), cb, attributes, data);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
template <typename Callable>
|
|
159
|
+
inline PropertyDescriptor PropertyDescriptor::Function(
|
|
160
|
+
napi_value name,
|
|
161
|
+
Callable cb,
|
|
162
|
+
napi_property_attributes attributes,
|
|
163
|
+
void* /*data*/) {
|
|
164
|
+
using ReturnType = decltype(cb(CallbackInfo(nullptr, nullptr)));
|
|
165
|
+
using CbData = details::CallbackData<Callable, ReturnType>;
|
|
166
|
+
// TODO: Delete when the function is destroyed
|
|
167
|
+
auto callbackData = new CbData({cb, nullptr});
|
|
168
|
+
|
|
169
|
+
return PropertyDescriptor({nullptr,
|
|
170
|
+
name,
|
|
171
|
+
CbData::Wrapper,
|
|
172
|
+
nullptr,
|
|
173
|
+
nullptr,
|
|
174
|
+
nullptr,
|
|
175
|
+
attributes,
|
|
176
|
+
callbackData});
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
template <typename Callable>
|
|
180
|
+
inline PropertyDescriptor PropertyDescriptor::Function(
|
|
181
|
+
Name name, Callable cb, napi_property_attributes attributes, void* data) {
|
|
182
|
+
napi_value nameValue = name;
|
|
183
|
+
return PropertyDescriptor::Function(nameValue, cb, attributes, data);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
#endif // !SRC_NAPI_INL_DEPRECATED_H_
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
'targets': [
|
|
3
|
+
{
|
|
4
|
+
'target_name': 'node_addon_api',
|
|
5
|
+
'type': 'none',
|
|
6
|
+
'sources': [ 'napi.h', 'napi-inl.h' ],
|
|
7
|
+
'direct_dependent_settings': {
|
|
8
|
+
'include_dirs': [ '.' ],
|
|
9
|
+
'includes': ['noexcept.gypi'],
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
'target_name': 'node_addon_api_except',
|
|
14
|
+
'type': 'none',
|
|
15
|
+
'sources': [ 'napi.h', 'napi-inl.h' ],
|
|
16
|
+
'direct_dependent_settings': {
|
|
17
|
+
'include_dirs': [ '.' ],
|
|
18
|
+
'includes': ['except.gypi'],
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
'target_name': 'node_addon_api_except_all',
|
|
23
|
+
'type': 'none',
|
|
24
|
+
'sources': [ 'napi.h', 'napi-inl.h' ],
|
|
25
|
+
'direct_dependent_settings': {
|
|
26
|
+
'include_dirs': [ '.' ],
|
|
27
|
+
'includes': ['except.gypi'],
|
|
28
|
+
'defines': [ 'NODE_ADDON_API_CPP_EXCEPTIONS_ALL' ]
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
'target_name': 'node_addon_api_maybe',
|
|
33
|
+
'type': 'none',
|
|
34
|
+
'sources': [ 'napi.h', 'napi-inl.h' ],
|
|
35
|
+
'direct_dependent_settings': {
|
|
36
|
+
'include_dirs': [ '.' ],
|
|
37
|
+
'includes': ['noexcept.gypi'],
|
|
38
|
+
'defines': ['NODE_ADDON_API_ENABLE_MAYBE']
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
]
|
|
42
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
'defines': [ 'NODE_ADDON_API_DISABLE_CPP_EXCEPTIONS' ],
|
|
3
|
+
'cflags': [ '-fno-exceptions' ],
|
|
4
|
+
'cflags_cc': [ '-fno-exceptions' ],
|
|
5
|
+
'conditions': [
|
|
6
|
+
["OS=='win'", {
|
|
7
|
+
# _HAS_EXCEPTIONS is already defined and set to 0 in common.gypi
|
|
8
|
+
#"defines": [
|
|
9
|
+
# "_HAS_EXCEPTIONS=0"
|
|
10
|
+
#],
|
|
11
|
+
"msvs_settings": {
|
|
12
|
+
"VCCLCompilerTool": {
|
|
13
|
+
'ExceptionHandling': 0,
|
|
14
|
+
'EnablePREfast': 'true',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
}],
|
|
18
|
+
["OS=='mac'", {
|
|
19
|
+
'xcode_settings': {
|
|
20
|
+
'CLANG_CXX_LIBRARY': 'libc++',
|
|
21
|
+
'MACOSX_DEPLOYMENT_TARGET': '10.7',
|
|
22
|
+
'GCC_ENABLE_CPP_EXCEPTIONS': 'NO',
|
|
23
|
+
},
|
|
24
|
+
}],
|
|
25
|
+
],
|
|
26
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🔘 pi-toggle-skills
|
|
4
|
+
|
|
5
|
+
**Toggle skill visibility in [pi](https://github.com/earendil-works/pi-coding-agent)'s system prompt**
|
|
6
|
+
|
|
7
|
+
_Flip `disable-model-invocation` on skills so the model only sees the ones you want._
|
|
8
|
+
|
|
9
|
+
[](https://github.com/earendil-works/pi-coding-agent)
|
|
10
|
+
[](./LICENSE)
|
|
11
|
+
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## The Problem
|
|
17
|
+
|
|
18
|
+
Pi loads skills from multiple directories and includes their names and descriptions in the system prompt. If you have many skills installed, the prompt gets noisy — the model sees every skill and may inappropriately trigger ones you rarely use.
|
|
19
|
+
|
|
20
|
+
Pi supports `disable-model-invocation: true` in SKILL.md frontmatter to hide a skill from the system prompt, but toggling it requires manually editing each YAML file. There's no interactive way to manage skill visibility.
|
|
21
|
+
|
|
22
|
+
## The Solution
|
|
23
|
+
|
|
24
|
+
`pi-toggle-skills` gives you an interactive TUI to toggle which skills are visible to the model:
|
|
25
|
+
|
|
26
|
+
- Discover all skills from the standard directories (`~/.pi/agent/skills/`, `.pi/skills/`, etc.)
|
|
27
|
+
- Interactive `/toggle-skills` command — search, toggle, done
|
|
28
|
+
- Flips `disable-model-invocation` directly in each SKILL.md's YAML frontmatter
|
|
29
|
+
- Auto-reloads pi after saving so changes take effect immediately
|
|
30
|
+
- Subcommands for quick CLI-style enable/disable
|
|
31
|
+
|
|
32
|
+
When a skill has `disable-model-invocation: true`, pi excludes it from the system prompt entirely. The skill is still available via explicit `/skill:name` commands — it just won't be suggested to the model automatically.
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
### Interactive Commands
|
|
37
|
+
|
|
38
|
+
| Command | What it does |
|
|
39
|
+
| ------------------------------- | ----------------------------------------------- |
|
|
40
|
+
| `/toggle-skills` | Open interactive TUI to toggle skill visibility |
|
|
41
|
+
| `/toggle-skills status` | Show current skills and their visibility status |
|
|
42
|
+
| `/toggle-skills disable <name>` | Hide a skill from the system prompt |
|
|
43
|
+
| `/toggle-skills enable <name>` | Show a skill in the system prompt |
|
|
44
|
+
| `/toggle-skills list` | Same as `/toggle-skills status` |
|
|
45
|
+
| `/toggle-skills help` | Show usage reference |
|
|
46
|
+
|
|
47
|
+
### Interactive TUI Keybindings
|
|
48
|
+
|
|
49
|
+
| Key | Action |
|
|
50
|
+
| -------- | --------------------------------------- |
|
|
51
|
+
| `Enter` | Toggle selected skill |
|
|
52
|
+
| `Ctrl+A` | Disable all (filtered if search active) |
|
|
53
|
+
| `Ctrl+D` | Enable all (filtered if search active) |
|
|
54
|
+
| `Ctrl+S` | Save changes (run /reload to apply) |
|
|
55
|
+
| `Esc` | Cancel (discard changes) |
|
|
56
|
+
| `Ctrl+C` | Clear search, or cancel if empty |
|
|
57
|
+
| ↑/↓ | Navigate the list |
|
|
58
|
+
|
|
59
|
+
### CLI Examples
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
/toggle-skills disable brave-search
|
|
63
|
+
→ Disabled: "brave-search" — hidden from system prompt. Run /reload to apply.
|
|
64
|
+
|
|
65
|
+
/toggle-skills enable brave-search
|
|
66
|
+
→ Enabled: "brave-search" — visible in system prompt. Run /reload to apply.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Installation
|
|
70
|
+
|
|
71
|
+
**With `pi install`** (recommended):
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pi install npm:pi-toggle-skills
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Or install from GitHub:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pi install https://github.com/monotykamary/pi-toggle-skills
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**With npm**:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
npm install pi-toggle-skills
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Or in `~/.pi/agent/settings.json`:
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"packages": ["https://github.com/monotykamary/pi-toggle-skills"]
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Then `/reload` or restart pi.
|
|
98
|
+
|
|
99
|
+
For quick one-off tests:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
pi -e ./toggle-skills.ts
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## How It Works
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
Session starts
|
|
109
|
+
→ Extension discovers skills from standard directories
|
|
110
|
+
→ Parses SKILL.md YAML frontmatter to check disable-model-invocation
|
|
111
|
+
→ Notifies how many visible/hidden skills
|
|
112
|
+
|
|
113
|
+
/toggle-skills (interactive):
|
|
114
|
+
→ Opens TUI selector listing all skills
|
|
115
|
+
→ Changes collected in-memory (no disk writes until Ctrl+S)
|
|
116
|
+
→ Ctrl+S: writes changed SKILL.md files, notifies user to /reload
|
|
117
|
+
→ Esc: discards changes, no files modified
|
|
118
|
+
|
|
119
|
+
/toggle-skills disable/enable:
|
|
120
|
+
→ Toggles disable-model-invocation in SKILL.md frontmatter
|
|
121
|
+
→ Adds the key when disabling, removes it when enabling (false is the default)
|
|
122
|
+
→ Uses gray-matter for safe YAML round-tripping
|
|
123
|
+
→ User must /reload for changes to take effect
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The extension does NOT monkey-patch any pi internals. It modifies SKILL.md files on disk and relies on pi's skill re-scanning on `/reload` to apply changes.
|
|
127
|
+
|
|
128
|
+
### Frontmatter Changes
|
|
129
|
+
|
|
130
|
+
When disabling a skill, the extension adds `disable-model-invocation: true` to the SKILL.md frontmatter:
|
|
131
|
+
|
|
132
|
+
```yaml
|
|
133
|
+
---
|
|
134
|
+
name: my-skill
|
|
135
|
+
description: Does things
|
|
136
|
+
disable-model-invocation: true # ← added
|
|
137
|
+
---
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
When enabling, the key is removed entirely (since `false`/absent are equivalent):
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
---
|
|
144
|
+
name: my-skill
|
|
145
|
+
description: Things done
|
|
146
|
+
---
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Skill Directories Scanned
|
|
150
|
+
|
|
151
|
+
The extension scans the same directories pi uses:
|
|
152
|
+
|
|
153
|
+
| Directory | Scope |
|
|
154
|
+
| --------------------- | ------------------------ |
|
|
155
|
+
| `~/.pi/agent/skills/` | Global (pi-specific) |
|
|
156
|
+
| `~/.agents/skills/` | Global (agent-standard) |
|
|
157
|
+
| `.pi/skills/` | Project (pi-specific) |
|
|
158
|
+
| `.agents/skills/` | Project (agent-standard) |
|
|
159
|
+
|
|
160
|
+
Package skills, settings skills, and `--skill` paths are not currently scanned (they require reading `settings.json` and CLI args).
|
|
161
|
+
|
|
162
|
+
## Comparison with Alternatives
|
|
163
|
+
|
|
164
|
+
| Approach | Pros | Cons |
|
|
165
|
+
| --------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
166
|
+
| **pi-toggle-skills** (this) | Interactive TUI; directly modifies SKILL.md; no intermediate config; auto-reload; batch changes with undo | Changes require `/reload`; doesn't scan package/settings/CLI skills|
|
|
167
|
+
| Manual SKILL.md editing | No extension needed | Tedious; error-prone YAML editing; must remember frontmatter syntax |
|
|
168
|
+
| Deleting SKILL.md files | Effective | Destructive; must restore to re-enable; can't toggle back easily |
|
|
169
|
+
|
|
170
|
+
## Development
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
npm install
|
|
174
|
+
npm test # Vitest unit tests
|
|
175
|
+
npm run typecheck # TypeScript validation (pi-tui import error is expected — types resolve at runtime)
|
|
176
|
+
npm run lint:dead # Dead code detection (knip)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Structure
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
.
|
|
183
|
+
├── toggle-skills.ts # Main extension
|
|
184
|
+
├── src/
|
|
185
|
+
│ ├── index.ts # Constants, types, and utilities
|
|
186
|
+
│ ├── skill-discovery.ts # Skill directory scanning, frontmatter parsing/writing
|
|
187
|
+
│ └── skill-selector.ts # Interactive TUI component
|
|
188
|
+
├── __tests__/
|
|
189
|
+
│ └── unit/
|
|
190
|
+
│ ├── toggle-skills.test.ts
|
|
191
|
+
│ └── skill-discovery.test.ts
|
|
192
|
+
├── package.json
|
|
193
|
+
├── tsconfig.json
|
|
194
|
+
├── vitest.config.ts
|
|
195
|
+
└── knip.json
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## License
|
|
199
|
+
|
|
200
|
+
MIT
|
|
201
|
+
|
|
202
|
+
## Pi 1.0 compatibility (0.1.20)
|
|
203
|
+
|
|
204
|
+
Tested against Pi **1.0.0** with exact SDK development pins and wildcard host peers.
|
|
205
|
+
Real-host command registration and skill frontmatter toggling are verified, alongside selector IME/width tests.
|
|
206
|
+
|
|
207
|
+
Run `bun run test:host` for the offline real-host regression. Set `PI1_HOST_PACKAGE` to an installed Pi package directory and `PI1_HOST_ENTRY=bundle` to test its bundled CLI runtime.
|
|
208
|
+
|
|
209
|
+
## Pi 0.99 compatibility (0.1.19)
|
|
210
|
+
|
|
211
|
+
Verified native 0.99 extension loading and skill-selector rendering. Custom-screen wrappers now forward focus to their Input, preserving IME cursor positioning across resize and invalidation.
|
|
212
|
+
|
|
213
|
+
Tested with Pi 0.99.0. Host-provided Pi packages are wildcard peers, not bundled dependencies; development uses exact 0.99.0 versions.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pi-toggle-skills",
|
|
3
|
+
"version": "0.1.20",
|
|
4
|
+
"description": "Toggle skill visibility in pi's system prompt — flip disable-model-invocation on skills via an interactive TUI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"author": "Tom X Nguyen",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/monotykamary/pi-toggle-skills.git"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/monotykamary/pi-toggle-skills#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/monotykamary/pi-toggle-skills/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"pi-package",
|
|
18
|
+
"pi",
|
|
19
|
+
"pi-coding-agent",
|
|
20
|
+
"extension",
|
|
21
|
+
"skills",
|
|
22
|
+
"toggle",
|
|
23
|
+
"disable-model-invocation",
|
|
24
|
+
"visibility"
|
|
25
|
+
],
|
|
26
|
+
"files": [
|
|
27
|
+
"*.ts",
|
|
28
|
+
"src/",
|
|
29
|
+
"README.md"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"test:host": "node scripts/pi1-host.mjs",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:watch": "vitest",
|
|
35
|
+
"test:coverage": "vitest run --coverage",
|
|
36
|
+
"typecheck": "tsc --noEmit",
|
|
37
|
+
"lint:dead": "knip --no-gitignore"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@earendil-works/pi-coding-agent": "1.0.0",
|
|
41
|
+
"@earendil-works/pi-tui": "1.0.0",
|
|
42
|
+
"@types/node": "25.9.1",
|
|
43
|
+
"@vitest/coverage-v8": "4.1.7",
|
|
44
|
+
"knip": "6.14.1",
|
|
45
|
+
"typescript": "6.0.3",
|
|
46
|
+
"vitest": "4.1.7"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"gray-matter": "^4.0.3"
|
|
50
|
+
},
|
|
51
|
+
"pi": {
|
|
52
|
+
"extensions": [
|
|
53
|
+
"./toggle-skills.ts"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"peerDependencies": {
|
|
57
|
+
"@earendil-works/pi-coding-agent": "*",
|
|
58
|
+
"@earendil-works/pi-tui": "*"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants, types, and utilities for pi-toggle-skills.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/** Description shown in the / commands list. */
|
|
6
|
+
export const TOGGLE_COMMAND_DESCRIPTION = "Toggle which skills are visible to the model (disable-model-invocation)";
|
|
7
|
+
|
|
8
|
+
/** Frontmatter key that controls skill visibility. */
|
|
9
|
+
export const DISABLE_MODEL_INVOCATION_KEY = "disable-model-invocation";
|
|
10
|
+
|
|
11
|
+
/** A discovered skill with its toggle state. */
|
|
12
|
+
export interface ToggleSkill {
|
|
13
|
+
/** Skill name from frontmatter (or parent directory as fallback). */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Description from frontmatter. */
|
|
16
|
+
description: string;
|
|
17
|
+
/** Absolute path to the SKILL.md file. */
|
|
18
|
+
filePath: string;
|
|
19
|
+
/** Directory containing the SKILL.md. */
|
|
20
|
+
baseDir: string;
|
|
21
|
+
/** Whether disable-model-invocation is currently true. */
|
|
22
|
+
disabled: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Snapshot of a skill's original state before any in-memory toggles. */
|
|
26
|
+
export interface SkillToggleChange {
|
|
27
|
+
filePath: string;
|
|
28
|
+
originalDisabled: boolean;
|
|
29
|
+
newDisabled: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Check whether a frontmatter object has disable-model-invocation set to true.
|
|
34
|
+
*/
|
|
35
|
+
export function isDisabled(frontmatter: Record<string, unknown>): boolean {
|
|
36
|
+
return frontmatter[DISABLE_MODEL_INVOCATION_KEY] === true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Format a skill's status for display.
|
|
41
|
+
*/
|
|
42
|
+
export function formatSkillStatus(skill: ToggleSkill): string {
|
|
43
|
+
return skill.disabled ? "✗ hidden" : "✓ visible";
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Format a skill for one-line display (e.g. in status list).
|
|
48
|
+
*/
|
|
49
|
+
export function formatSkillLine(skill: ToggleSkill): string {
|
|
50
|
+
const status = skill.disabled ? "hidden" : "visible";
|
|
51
|
+
return `${skill.name} [${status}] — ${skill.description}`;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Deduplicate skills by filePath — keep the first occurrence.
|
|
56
|
+
*/
|
|
57
|
+
export function deduplicateSkills(skills: ReadonlyArray<ToggleSkill>): ToggleSkill[] {
|
|
58
|
+
const seen = new Set<string>();
|
|
59
|
+
return skills.filter((skill) => {
|
|
60
|
+
if (seen.has(skill.filePath)) return false;
|
|
61
|
+
seen.add(skill.filePath);
|
|
62
|
+
return true;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Compute the set of changes between original skills and current (toggled) state.
|
|
68
|
+
*/
|
|
69
|
+
export function computeChanges(
|
|
70
|
+
originals: ReadonlyArray<ToggleSkill>,
|
|
71
|
+
current: ReadonlyArray<ToggleSkill>,
|
|
72
|
+
): SkillToggleChange[] {
|
|
73
|
+
const currentByPath = new Map<string, ToggleSkill>();
|
|
74
|
+
for (const skill of current) {
|
|
75
|
+
currentByPath.set(skill.filePath, skill);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const changes: SkillToggleChange[] = [];
|
|
79
|
+
for (const original of originals) {
|
|
80
|
+
const currentSkill = currentByPath.get(original.filePath);
|
|
81
|
+
if (currentSkill && currentSkill.disabled !== original.disabled) {
|
|
82
|
+
changes.push({
|
|
83
|
+
filePath: original.filePath,
|
|
84
|
+
originalDisabled: original.disabled,
|
|
85
|
+
newDisabled: currentSkill.disabled,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return changes;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Validate a skill name per the Agent Skills spec.
|
|
95
|
+
* Returns array of error messages (empty if valid).
|
|
96
|
+
*/
|
|
97
|
+
export function validateSkillName(name: string): string[] {
|
|
98
|
+
const errors: string[] = [];
|
|
99
|
+
if (name.length > 64) {
|
|
100
|
+
errors.push(`name exceeds 64 characters (${name.length})`);
|
|
101
|
+
}
|
|
102
|
+
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
103
|
+
errors.push("name contains invalid characters (must be lowercase a-z, 0-9, hyphens only)");
|
|
104
|
+
}
|
|
105
|
+
if (name.startsWith("-") || name.endsWith("-")) {
|
|
106
|
+
errors.push("name must not start or end with a hyphen");
|
|
107
|
+
}
|
|
108
|
+
if (name.includes("--")) {
|
|
109
|
+
errors.push("name must not contain consecutive hyphens");
|
|
110
|
+
}
|
|
111
|
+
return errors;
|
|
112
|
+
}
|