pi-ui-extend 0.1.1
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/README.md +307 -0
- package/bin/pix.mjs +219 -0
- package/dist/app/app.d.ts +96 -0
- package/dist/app/app.js +871 -0
- package/dist/app/blink-controller.d.ts +23 -0
- package/dist/app/blink-controller.js +82 -0
- package/dist/app/cli.d.ts +8 -0
- package/dist/app/cli.js +83 -0
- package/dist/app/clipboard.d.ts +1 -0
- package/dist/app/clipboard.js +24 -0
- package/dist/app/command-controller.d.ts +18 -0
- package/dist/app/command-controller.js +58 -0
- package/dist/app/command-host.d.ts +44 -0
- package/dist/app/command-host.js +1 -0
- package/dist/app/command-model-actions.d.ts +12 -0
- package/dist/app/command-model-actions.js +176 -0
- package/dist/app/command-navigation-actions.d.ts +19 -0
- package/dist/app/command-navigation-actions.js +267 -0
- package/dist/app/command-registry.d.ts +32 -0
- package/dist/app/command-registry.js +225 -0
- package/dist/app/command-runtime.d.ts +5 -0
- package/dist/app/command-runtime.js +32 -0
- package/dist/app/command-session-actions.d.ts +20 -0
- package/dist/app/command-session-actions.js +295 -0
- package/dist/app/constants.d.ts +52 -0
- package/dist/app/constants.js +103 -0
- package/dist/app/conversation-entry-renderer.d.ts +21 -0
- package/dist/app/conversation-entry-renderer.js +81 -0
- package/dist/app/conversation-shell-renderer.d.ts +5 -0
- package/dist/app/conversation-shell-renderer.js +43 -0
- package/dist/app/conversation-tool-renderer.d.ts +16 -0
- package/dist/app/conversation-tool-renderer.js +216 -0
- package/dist/app/conversation-viewport.d.ts +55 -0
- package/dist/app/conversation-viewport.js +252 -0
- package/dist/app/dcp-stats.d.ts +2 -0
- package/dist/app/dcp-stats.js +116 -0
- package/dist/app/editor-layout-renderer.d.ts +31 -0
- package/dist/app/editor-layout-renderer.js +211 -0
- package/dist/app/editor-panels.d.ts +4 -0
- package/dist/app/editor-panels.js +130 -0
- package/dist/app/extension-actions-controller.d.ts +22 -0
- package/dist/app/extension-actions-controller.js +60 -0
- package/dist/app/extension-event-bus.d.ts +3 -0
- package/dist/app/extension-event-bus.js +23 -0
- package/dist/app/extension-ui-controller.d.ts +57 -0
- package/dist/app/extension-ui-controller.js +532 -0
- package/dist/app/file-link-opener.d.ts +2 -0
- package/dist/app/file-link-opener.js +66 -0
- package/dist/app/file-links.d.ts +10 -0
- package/dist/app/file-links.js +117 -0
- package/dist/app/guards.d.ts +3 -0
- package/dist/app/guards.js +9 -0
- package/dist/app/icons.d.ts +37 -0
- package/dist/app/icons.js +97 -0
- package/dist/app/id.d.ts +1 -0
- package/dist/app/id.js +4 -0
- package/dist/app/image-click-targets.d.ts +5 -0
- package/dist/app/image-click-targets.js +32 -0
- package/dist/app/image-opener.d.ts +2 -0
- package/dist/app/image-opener.js +64 -0
- package/dist/app/input-action-controller.d.ts +47 -0
- package/dist/app/input-action-controller.js +209 -0
- package/dist/app/input-controller.d.ts +60 -0
- package/dist/app/input-controller.js +425 -0
- package/dist/app/input-paste-handler.d.ts +27 -0
- package/dist/app/input-paste-handler.js +146 -0
- package/dist/app/menu-items-controller.d.ts +32 -0
- package/dist/app/menu-items-controller.js +182 -0
- package/dist/app/message-content.d.ts +8 -0
- package/dist/app/message-content.js +115 -0
- package/dist/app/model-ref.d.ts +13 -0
- package/dist/app/model-ref.js +50 -0
- package/dist/app/model-usage-controller.d.ts +35 -0
- package/dist/app/model-usage-controller.js +99 -0
- package/dist/app/model-usage-status.d.ts +125 -0
- package/dist/app/model-usage-status.js +749 -0
- package/dist/app/mouse-controller.d.ts +182 -0
- package/dist/app/mouse-controller.js +968 -0
- package/dist/app/native-modifiers.d.ts +3 -0
- package/dist/app/native-modifiers.js +60 -0
- package/dist/app/nerd-font-controller.d.ts +11 -0
- package/dist/app/nerd-font-controller.js +90 -0
- package/dist/app/popup-action-controller.d.ts +44 -0
- package/dist/app/popup-action-controller.js +278 -0
- package/dist/app/popup-menu-controller.d.ts +183 -0
- package/dist/app/popup-menu-controller.js +1070 -0
- package/dist/app/prompt-enhancer-controller.d.ts +40 -0
- package/dist/app/prompt-enhancer-controller.js +215 -0
- package/dist/app/queued-message-controller.d.ts +62 -0
- package/dist/app/queued-message-controller.js +377 -0
- package/dist/app/render-controller.d.ts +41 -0
- package/dist/app/render-controller.js +378 -0
- package/dist/app/render-text.d.ts +19 -0
- package/dist/app/render-text.js +67 -0
- package/dist/app/request-history.d.ts +23 -0
- package/dist/app/request-history.js +131 -0
- package/dist/app/runtime.d.ts +39 -0
- package/dist/app/runtime.js +195 -0
- package/dist/app/screen-selection.d.ts +6 -0
- package/dist/app/screen-selection.js +9 -0
- package/dist/app/screen-styler.d.ts +34 -0
- package/dist/app/screen-styler.js +168 -0
- package/dist/app/scroll-controller.d.ts +51 -0
- package/dist/app/scroll-controller.js +207 -0
- package/dist/app/session-event-controller.d.ts +69 -0
- package/dist/app/session-event-controller.js +338 -0
- package/dist/app/session-history.d.ts +23 -0
- package/dist/app/session-history.js +164 -0
- package/dist/app/session-lifecycle-controller.d.ts +55 -0
- package/dist/app/session-lifecycle-controller.js +116 -0
- package/dist/app/session-search.d.ts +24 -0
- package/dist/app/session-search.js +215 -0
- package/dist/app/shell-command.d.ts +27 -0
- package/dist/app/shell-command.js +176 -0
- package/dist/app/shell-controller.d.ts +28 -0
- package/dist/app/shell-controller.js +124 -0
- package/dist/app/slash-commands.d.ts +6 -0
- package/dist/app/slash-commands.js +75 -0
- package/dist/app/startup-checks.d.ts +8 -0
- package/dist/app/startup-checks.js +59 -0
- package/dist/app/startup-info.d.ts +3 -0
- package/dist/app/startup-info.js +176 -0
- package/dist/app/status-controller.d.ts +35 -0
- package/dist/app/status-controller.js +105 -0
- package/dist/app/status-line-renderer.d.ts +68 -0
- package/dist/app/status-line-renderer.js +453 -0
- package/dist/app/subagents-files.d.ts +10 -0
- package/dist/app/subagents-files.js +193 -0
- package/dist/app/subagents-model.d.ts +23 -0
- package/dist/app/subagents-model.js +224 -0
- package/dist/app/subagents-widget-controller.d.ts +43 -0
- package/dist/app/subagents-widget-controller.js +311 -0
- package/dist/app/tab-line-renderer.d.ts +26 -0
- package/dist/app/tab-line-renderer.js +222 -0
- package/dist/app/tabs-controller.d.ts +100 -0
- package/dist/app/tabs-controller.js +885 -0
- package/dist/app/terminal-controller.d.ts +40 -0
- package/dist/app/terminal-controller.js +135 -0
- package/dist/app/terminal-edit-shortcuts.d.ts +23 -0
- package/dist/app/terminal-edit-shortcuts.js +138 -0
- package/dist/app/terminal-output-buffer.d.ts +20 -0
- package/dist/app/terminal-output-buffer.js +52 -0
- package/dist/app/toast-controller.d.ts +13 -0
- package/dist/app/toast-controller.js +40 -0
- package/dist/app/toast-renderer.d.ts +9 -0
- package/dist/app/toast-renderer.js +79 -0
- package/dist/app/todo-model.d.ts +22 -0
- package/dist/app/todo-model.js +179 -0
- package/dist/app/todo-widget-controller.d.ts +21 -0
- package/dist/app/todo-widget-controller.js +59 -0
- package/dist/app/tool-block-renderer.d.ts +26 -0
- package/dist/app/tool-block-renderer.js +439 -0
- package/dist/app/types.d.ts +550 -0
- package/dist/app/types.js +1 -0
- package/dist/app/update.d.ts +36 -0
- package/dist/app/update.js +315 -0
- package/dist/app/voice-controller.d.ts +52 -0
- package/dist/app/voice-controller.js +600 -0
- package/dist/app/workspace-actions-controller.d.ts +40 -0
- package/dist/app/workspace-actions-controller.js +215 -0
- package/dist/app/workspace-undo.d.ts +44 -0
- package/dist/app/workspace-undo.js +215 -0
- package/dist/config.d.ts +62 -0
- package/dist/config.js +527 -0
- package/dist/context-progress-bar.d.ts +17 -0
- package/dist/context-progress-bar.js +48 -0
- package/dist/default-pix-config.d.ts +1 -0
- package/dist/default-pix-config.js +375 -0
- package/dist/fuzzy.d.ts +23 -0
- package/dist/fuzzy.js +165 -0
- package/dist/input-editor-files.d.ts +15 -0
- package/dist/input-editor-files.js +62 -0
- package/dist/input-editor.d.ts +186 -0
- package/dist/input-editor.js +835 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +12 -0
- package/dist/markdown-format.d.ts +22 -0
- package/dist/markdown-format.js +542 -0
- package/dist/sdk.d.ts +3 -0
- package/dist/sdk.js +1 -0
- package/dist/syntax-highlight.d.ts +22 -0
- package/dist/syntax-highlight.js +528 -0
- package/dist/terminal-width.d.ts +6 -0
- package/dist/terminal-width.js +245 -0
- package/dist/theme.d.ts +56 -0
- package/dist/theme.js +118 -0
- package/dist/tool-renderers/apply-patch.d.ts +2 -0
- package/dist/tool-renderers/apply-patch.js +36 -0
- package/dist/tool-renderers/ast.d.ts +2 -0
- package/dist/tool-renderers/ast.js +5 -0
- package/dist/tool-renderers/compress.d.ts +2 -0
- package/dist/tool-renderers/compress.js +126 -0
- package/dist/tool-renderers/index.d.ts +3 -0
- package/dist/tool-renderers/index.js +44 -0
- package/dist/tool-renderers/question.d.ts +2 -0
- package/dist/tool-renderers/question.js +88 -0
- package/dist/tool-renderers/read.d.ts +2 -0
- package/dist/tool-renderers/read.js +36 -0
- package/dist/tool-renderers/repo.d.ts +2 -0
- package/dist/tool-renderers/repo.js +13 -0
- package/dist/tool-renderers/shell.d.ts +3 -0
- package/dist/tool-renderers/shell.js +27 -0
- package/dist/tool-renderers/skill.d.ts +2 -0
- package/dist/tool-renderers/skill.js +132 -0
- package/dist/tool-renderers/subagents.d.ts +2 -0
- package/dist/tool-renderers/subagents.js +51 -0
- package/dist/tool-renderers/todo.d.ts +2 -0
- package/dist/tool-renderers/todo.js +9 -0
- package/dist/tool-renderers/types.d.ts +42 -0
- package/dist/tool-renderers/types.js +1 -0
- package/dist/tool-renderers/utils.d.ts +31 -0
- package/dist/tool-renderers/utils.js +230 -0
- package/dist/tool-renderers/web.d.ts +3 -0
- package/dist/tool-renderers/web.js +9 -0
- package/dist/tool-renderers/write.d.ts +2 -0
- package/dist/tool-renderers/write.js +42 -0
- package/dist/ui.d.ts +56 -0
- package/dist/ui.js +94 -0
- package/docs/release.md +81 -0
- package/extensions/question/contract.ts +100 -0
- package/extensions/question/index.ts +34 -0
- package/extensions/question/render.ts +28 -0
- package/extensions/question/result.ts +86 -0
- package/extensions/question/tool-description.ts +11 -0
- package/extensions/question/tui.ts +629 -0
- package/extensions/question/types.ts +123 -0
- package/extensions/session-title/config.ts +169 -0
- package/extensions/session-title/index.ts +459 -0
- package/extensions/terminal-bell/index.ts +315 -0
- package/external/pi-tools-suite/README.md +242 -0
- package/external/pi-tools-suite/index.ts +1 -0
- package/external/pi-tools-suite/licenses/ollama-pi-web-search.MIT +21 -0
- package/external/pi-tools-suite/licenses/opencode-mystatus-MIT.txt +21 -0
- package/external/pi-tools-suite/package.json +53 -0
- package/external/pi-tools-suite/src/antigravity-auth/auth-store.ts +194 -0
- package/external/pi-tools-suite/src/antigravity-auth/commands.ts +80 -0
- package/external/pi-tools-suite/src/antigravity-auth/constants.ts +26 -0
- package/external/pi-tools-suite/src/antigravity-auth/headers.ts +20 -0
- package/external/pi-tools-suite/src/antigravity-auth/index.ts +104 -0
- package/external/pi-tools-suite/src/antigravity-auth/models.ts +86 -0
- package/external/pi-tools-suite/src/antigravity-auth/oauth.ts +305 -0
- package/external/pi-tools-suite/src/antigravity-auth/payload.ts +423 -0
- package/external/pi-tools-suite/src/antigravity-auth/status.ts +78 -0
- package/external/pi-tools-suite/src/antigravity-auth/stream.ts +302 -0
- package/external/pi-tools-suite/src/antigravity-auth/types.ts +113 -0
- package/external/pi-tools-suite/src/ast-grep/index.ts +6 -0
- package/external/pi-tools-suite/src/ast-grep/render.ts +70 -0
- package/external/pi-tools-suite/src/ast-grep/schema.ts +109 -0
- package/external/pi-tools-suite/src/ast-grep/tool.ts +345 -0
- package/external/pi-tools-suite/src/ast-grep/types.ts +55 -0
- package/external/pi-tools-suite/src/ast-grep/utils.ts +65 -0
- package/external/pi-tools-suite/src/async-subagents/async-subagents.sample.jsonc +222 -0
- package/external/pi-tools-suite/src/async-subagents/commands.ts +518 -0
- package/external/pi-tools-suite/src/async-subagents/constants.ts +11 -0
- package/external/pi-tools-suite/src/async-subagents/core/agent-strategy.ts +74 -0
- package/external/pi-tools-suite/src/async-subagents/core/attachment-bridge.ts +133 -0
- package/external/pi-tools-suite/src/async-subagents/core/cleanup.ts +66 -0
- package/external/pi-tools-suite/src/async-subagents/core/concurrency.ts +90 -0
- package/external/pi-tools-suite/src/async-subagents/core/config.ts +819 -0
- package/external/pi-tools-suite/src/async-subagents/core/log-limits.ts +166 -0
- package/external/pi-tools-suite/src/async-subagents/core/model-fallback.ts +133 -0
- package/external/pi-tools-suite/src/async-subagents/core/paths.ts +47 -0
- package/external/pi-tools-suite/src/async-subagents/core/pi-invocation.ts +35 -0
- package/external/pi-tools-suite/src/async-subagents/core/presets.ts +67 -0
- package/external/pi-tools-suite/src/async-subagents/core/process.ts +15 -0
- package/external/pi-tools-suite/src/async-subagents/core/prompt.ts +66 -0
- package/external/pi-tools-suite/src/async-subagents/core/registry.ts +224 -0
- package/external/pi-tools-suite/src/async-subagents/core/retry.ts +191 -0
- package/external/pi-tools-suite/src/async-subagents/core/routing.ts +259 -0
- package/external/pi-tools-suite/src/async-subagents/core/sessions.ts +138 -0
- package/external/pi-tools-suite/src/async-subagents/core/spawn.ts +688 -0
- package/external/pi-tools-suite/src/async-subagents/core/state.ts +281 -0
- package/external/pi-tools-suite/src/async-subagents/core/stop.ts +131 -0
- package/external/pi-tools-suite/src/async-subagents/core/structured-result.ts +237 -0
- package/external/pi-tools-suite/src/async-subagents/core/tool-guard.ts +34 -0
- package/external/pi-tools-suite/src/async-subagents/core/types.ts +150 -0
- package/external/pi-tools-suite/src/async-subagents/core/ultrawork-auto.ts +184 -0
- package/external/pi-tools-suite/src/async-subagents/core/utils.ts +11 -0
- package/external/pi-tools-suite/src/async-subagents/format.ts +41 -0
- package/external/pi-tools-suite/src/async-subagents/index.ts +422 -0
- package/external/pi-tools-suite/src/async-subagents/lib.ts +88 -0
- package/external/pi-tools-suite/src/async-subagents/live.ts +10 -0
- package/external/pi-tools-suite/src/async-subagents/polling.ts +83 -0
- package/external/pi-tools-suite/src/async-subagents/render.ts +230 -0
- package/external/pi-tools-suite/src/async-subagents/subagent-overlay.ts +77 -0
- package/external/pi-tools-suite/src/async-subagents/tasks.ts +120 -0
- package/external/pi-tools-suite/src/async-subagents/tools/cleanup.ts +99 -0
- package/external/pi-tools-suite/src/async-subagents/tools/result.ts +179 -0
- package/external/pi-tools-suite/src/async-subagents/tools/spawn.ts +372 -0
- package/external/pi-tools-suite/src/async-subagents/tools/status.ts +60 -0
- package/external/pi-tools-suite/src/async-subagents/tools/stop.ts +79 -0
- package/external/pi-tools-suite/src/async-subagents/tools/subagents.ts +152 -0
- package/external/pi-tools-suite/src/async-subagents/tools/wait.ts +67 -0
- package/external/pi-tools-suite/src/async-subagents/types.ts +45 -0
- package/external/pi-tools-suite/src/async-subagents/ui.ts +5 -0
- package/external/pi-tools-suite/src/compress/commands.ts +440 -0
- package/external/pi-tools-suite/src/compress/compress-tool.ts +368 -0
- package/external/pi-tools-suite/src/compress/compression-blocks.ts +524 -0
- package/external/pi-tools-suite/src/compress/config.ts +310 -0
- package/external/pi-tools-suite/src/compress/dcp-tui-filter.ts +498 -0
- package/external/pi-tools-suite/src/compress/index.ts +397 -0
- package/external/pi-tools-suite/src/compress/prompts.ts +269 -0
- package/external/pi-tools-suite/src/compress/pruner-candidates.ts +176 -0
- package/external/pi-tools-suite/src/compress/pruner-compression-blocks.ts +260 -0
- package/external/pi-tools-suite/src/compress/pruner-message-ids.ts +147 -0
- package/external/pi-tools-suite/src/compress/pruner-metadata.ts +268 -0
- package/external/pi-tools-suite/src/compress/pruner-nudge.ts +315 -0
- package/external/pi-tools-suite/src/compress/pruner-tools.ts +263 -0
- package/external/pi-tools-suite/src/compress/pruner-types.ts +25 -0
- package/external/pi-tools-suite/src/compress/pruner.ts +92 -0
- package/external/pi-tools-suite/src/compress/state.ts +486 -0
- package/external/pi-tools-suite/src/compress/ui.ts +308 -0
- package/external/pi-tools-suite/src/config.ts +176 -0
- package/external/pi-tools-suite/src/context-usage.ts +31 -0
- package/external/pi-tools-suite/src/default-pi-tools-suite-config.ts +355 -0
- package/external/pi-tools-suite/src/index.ts +46 -0
- package/external/pi-tools-suite/src/lib/lsp.ts +62 -0
- package/external/pi-tools-suite/src/lib/project.ts +42 -0
- package/external/pi-tools-suite/src/lib/tool-args.ts +137 -0
- package/external/pi-tools-suite/src/lsp/_shared/config.ts +156 -0
- package/external/pi-tools-suite/src/lsp/_shared/glob.ts +60 -0
- package/external/pi-tools-suite/src/lsp/_shared/output.ts +102 -0
- package/external/pi-tools-suite/src/lsp/_shared/paths.ts +138 -0
- package/external/pi-tools-suite/src/lsp/_shared/runner.ts +64 -0
- package/external/pi-tools-suite/src/lsp/_shared/template.ts +23 -0
- package/external/pi-tools-suite/src/lsp/_shared/trust.ts +116 -0
- package/external/pi-tools-suite/src/lsp/_shared/types.ts +98 -0
- package/external/pi-tools-suite/src/lsp/async.ts +29 -0
- package/external/pi-tools-suite/src/lsp/child-process.ts +81 -0
- package/external/pi-tools-suite/src/lsp/client.ts +340 -0
- package/external/pi-tools-suite/src/lsp/constants.ts +9 -0
- package/external/pi-tools-suite/src/lsp/diagnostics-store.ts +64 -0
- package/external/pi-tools-suite/src/lsp/documents.ts +24 -0
- package/external/pi-tools-suite/src/lsp/index.ts +31 -0
- package/external/pi-tools-suite/src/lsp/lsp-utils.ts +37 -0
- package/external/pi-tools-suite/src/lsp/manager.ts +190 -0
- package/external/pi-tools-suite/src/lsp/mutation-events.ts +78 -0
- package/external/pi-tools-suite/src/lsp/renderer.ts +1 -0
- package/external/pi-tools-suite/src/lsp/tool-result.ts +6 -0
- package/external/pi-tools-suite/src/lsp/tsserver.ts +107 -0
- package/external/pi-tools-suite/src/lsp/types.ts +15 -0
- package/external/pi-tools-suite/src/model-tools/apply-patch.ts +590 -0
- package/external/pi-tools-suite/src/model-tools/index.ts +430 -0
- package/external/pi-tools-suite/src/model-tools/path-utils.ts +6 -0
- package/external/pi-tools-suite/src/model-tools/tool-args.ts +11 -0
- package/external/pi-tools-suite/src/prompt-commands/index.ts +349 -0
- package/external/pi-tools-suite/src/repo-discovery/index.ts +384 -0
- package/external/pi-tools-suite/src/repo-discovery/project.ts +7 -0
- package/external/pi-tools-suite/src/startup-section.ts +13 -0
- package/external/pi-tools-suite/src/terminal-bell/index.ts +309 -0
- package/external/pi-tools-suite/src/todo/index.ts +201 -0
- package/external/pi-tools-suite/src/todo/state/auto-clear.ts +13 -0
- package/external/pi-tools-suite/src/todo/state/invariants.ts +21 -0
- package/external/pi-tools-suite/src/todo/state/persistence.ts +94 -0
- package/external/pi-tools-suite/src/todo/state/replay.ts +38 -0
- package/external/pi-tools-suite/src/todo/state/selectors.ts +49 -0
- package/external/pi-tools-suite/src/todo/state/state-reducer.ts +362 -0
- package/external/pi-tools-suite/src/todo/state/state.ts +18 -0
- package/external/pi-tools-suite/src/todo/state/store.ts +52 -0
- package/external/pi-tools-suite/src/todo/state/task-graph.ts +57 -0
- package/external/pi-tools-suite/src/todo/todo.ts +487 -0
- package/external/pi-tools-suite/src/todo/tool/response-envelope.ts +143 -0
- package/external/pi-tools-suite/src/todo/tool/types.ts +188 -0
- package/external/pi-tools-suite/src/todo/view/format.ts +18 -0
- package/external/pi-tools-suite/src/todo/view/labels.ts +13 -0
- package/external/pi-tools-suite/src/tool-descriptions.ts +369 -0
- package/external/pi-tools-suite/src/usage/index.ts +152 -0
- package/external/pi-tools-suite/src/usage/lib/copilot.ts +535 -0
- package/external/pi-tools-suite/src/usage/lib/google.ts +478 -0
- package/external/pi-tools-suite/src/usage/lib/openai.ts +268 -0
- package/external/pi-tools-suite/src/usage/lib/types.ts +114 -0
- package/external/pi-tools-suite/src/usage/lib/utils.ts +134 -0
- package/external/pi-tools-suite/src/usage/lib/zhipu.ts +228 -0
- package/external/pi-tools-suite/src/web-search/index.ts +397 -0
- package/package.json +89 -0
- package/skills/context7/SKILL.md +69 -0
- package/skills/context7/scripts/context7.sh +73 -0
- package/skills/handoff/SKILL.md +15 -0
- package/skills/pdf/LICENSE.txt +30 -0
- package/skills/pdf/SKILL.md +314 -0
- package/skills/pdf/forms.md +294 -0
- package/skills/pdf/reference.md +612 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/skills/pdf/scripts/create_validation_image.py +37 -0
- package/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/skills/playwright-cli/SKILL.md +388 -0
- package/skills/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright-cli/references/running-code.md +241 -0
- package/skills/playwright-cli/references/session-management.md +225 -0
- package/skills/playwright-cli/references/spec-driven-testing.md +305 -0
- package/skills/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright-cli/references/test-generation.md +134 -0
- package/skills/playwright-cli/references/tracing.md +139 -0
- package/skills/playwright-cli/references/video-recording.md +143 -0
- package/skills/simplify/SKILL.md +51 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +247 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import type { DcpConfig } from "./config.js";
|
|
2
|
+
import type { DcpState, ToolRecord } from "./state.js";
|
|
3
|
+
import { estimateMessageTokens } from "./pruner-metadata.js";
|
|
4
|
+
|
|
5
|
+
// Tool outputs that must never be auto-pruned unless a future explicit user
|
|
6
|
+
// action intentionally changes that policy. They mutate state or control DCP.
|
|
7
|
+
const ALWAYS_PROTECTED_TOOLS = new Set(["compress", "write", "edit"]);
|
|
8
|
+
|
|
9
|
+
function buildProtectedTools(config: DcpConfig, extra: string[] = []): Set<string> {
|
|
10
|
+
return new Set([
|
|
11
|
+
...ALWAYS_PROTECTED_TOOLS,
|
|
12
|
+
...(config.compress.protectedTools ?? []),
|
|
13
|
+
...extra,
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function collectStringValues(value: unknown, out: string[] = [], depth = 0): string[] {
|
|
18
|
+
if (depth > 6) return out;
|
|
19
|
+
if (typeof value === "string") {
|
|
20
|
+
out.push(value);
|
|
21
|
+
return out;
|
|
22
|
+
}
|
|
23
|
+
if (Array.isArray(value)) {
|
|
24
|
+
for (const item of value) collectStringValues(item, out, depth + 1);
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
if (value !== null && typeof value === "object") {
|
|
28
|
+
for (const item of Object.values(value as Record<string, unknown>)) {
|
|
29
|
+
collectStringValues(item, out, depth + 1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function escapeRegExp(text: string): string {
|
|
36
|
+
return text.replace(/[|\\{}()[\]^$+?.]/g, "\\$&");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function globToRegExp(pattern: string): RegExp {
|
|
40
|
+
const normalized = pattern.replace(/\\/g, "/");
|
|
41
|
+
let source = "^";
|
|
42
|
+
for (let i = 0; i < normalized.length; i++) {
|
|
43
|
+
const char = normalized[i]!;
|
|
44
|
+
if (char === "*") {
|
|
45
|
+
if (normalized[i + 1] === "*") {
|
|
46
|
+
source += ".*";
|
|
47
|
+
i++;
|
|
48
|
+
} else {
|
|
49
|
+
source += "[^/]*";
|
|
50
|
+
}
|
|
51
|
+
} else if (char === "?") {
|
|
52
|
+
source += "[^/]";
|
|
53
|
+
} else {
|
|
54
|
+
source += escapeRegExp(char);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
source += "$";
|
|
58
|
+
return new RegExp(source);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function patternMatchesValue(pattern: string, value: string): boolean {
|
|
62
|
+
const normalizedPattern = pattern.replace(/\\/g, "/");
|
|
63
|
+
const normalizedValue = value.replace(/\\/g, "/");
|
|
64
|
+
|
|
65
|
+
// For plain path fragments, substring matching is more useful and less
|
|
66
|
+
// surprising than exact matching.
|
|
67
|
+
if (!/[?*]/.test(normalizedPattern)) {
|
|
68
|
+
return normalizedValue.includes(normalizedPattern);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return globToRegExp(normalizedPattern).test(normalizedValue);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function isProtectedByFilePattern(record: ToolRecord | undefined, config: DcpConfig): boolean {
|
|
75
|
+
if (!record || config.protectedFilePatterns.length === 0) return false;
|
|
76
|
+
const values = collectStringValues(record.inputArgs);
|
|
77
|
+
return values.some((value) =>
|
|
78
|
+
config.protectedFilePatterns.some((pattern) => patternMatchesValue(pattern, value)),
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function recordForToolResult(msg: any, state: DcpState): ToolRecord | undefined {
|
|
83
|
+
if (typeof msg.toolCallId !== "string") return undefined;
|
|
84
|
+
return state.toolCalls.get(msg.toolCallId);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function toolNameForResult(msg: any, record: ToolRecord | undefined): string {
|
|
88
|
+
return record?.toolName ?? msg.toolName ?? "";
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function estimateToolResultTokens(msg: any, record: ToolRecord | undefined): number {
|
|
92
|
+
return Math.max(record?.tokenEstimate ?? 0, estimateMessageTokens(msg));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function toolResultIsProtected(
|
|
96
|
+
msg: any,
|
|
97
|
+
record: ToolRecord | undefined,
|
|
98
|
+
config: DcpConfig,
|
|
99
|
+
extraProtectedTools: string[] = [],
|
|
100
|
+
): boolean {
|
|
101
|
+
const protectedTools = buildProtectedTools(config, extraProtectedTools);
|
|
102
|
+
const toolName = toolNameForResult(msg, record);
|
|
103
|
+
if (protectedTools.has(toolName)) return true;
|
|
104
|
+
return isProtectedByFilePattern(record, config);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function isToolRecordProtected(
|
|
108
|
+
record: ToolRecord,
|
|
109
|
+
config: DcpConfig,
|
|
110
|
+
extraProtectedTools: string[] = [],
|
|
111
|
+
): boolean {
|
|
112
|
+
const protectedTools = buildProtectedTools(config, extraProtectedTools);
|
|
113
|
+
if (protectedTools.has(record.toolName)) return true;
|
|
114
|
+
return isProtectedByFilePattern(record, config);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function markToolPruned(
|
|
118
|
+
state: DcpState,
|
|
119
|
+
toolCallId: string,
|
|
120
|
+
reason: string,
|
|
121
|
+
tokenEstimate = 0,
|
|
122
|
+
): boolean {
|
|
123
|
+
const wasAlreadyPruned = state.prunedToolIds.has(toolCallId);
|
|
124
|
+
if (!wasAlreadyPruned) state.prunedToolIds.add(toolCallId);
|
|
125
|
+
if (!state.prunedToolReasons.has(toolCallId) || !wasAlreadyPruned) {
|
|
126
|
+
state.prunedToolReasons.set(toolCallId, reason);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (!state.accountedPrunedToolIds.has(toolCallId)) {
|
|
130
|
+
state.accountedPrunedToolIds.add(toolCallId);
|
|
131
|
+
state.totalPruneCount++;
|
|
132
|
+
if (tokenEstimate > 0) state.tokensSaved += Math.max(0, Math.round(tokenEstimate));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return !wasAlreadyPruned;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function applyDeduplication(messages: any[], state: DcpState, config: DcpConfig): void {
|
|
139
|
+
if (!config.strategies.deduplication.enabled) return;
|
|
140
|
+
if (state.manualMode && !config.manualMode.automaticStrategies) return;
|
|
141
|
+
|
|
142
|
+
// fingerprint → array of toolCallIds in timestamp order
|
|
143
|
+
const fingerprintMap = new Map<string, Array<{ id: string; tokens: number }>>();
|
|
144
|
+
|
|
145
|
+
for (const msg of messages) {
|
|
146
|
+
if (msg.role !== "toolResult") continue;
|
|
147
|
+
const record = recordForToolResult(msg, state);
|
|
148
|
+
if (!record) continue;
|
|
149
|
+
if (toolResultIsProtected(msg, record, config, config.strategies.deduplication.protectedTools ?? [])) continue;
|
|
150
|
+
|
|
151
|
+
const fp = record.inputFingerprint;
|
|
152
|
+
if (!fingerprintMap.has(fp)) {
|
|
153
|
+
fingerprintMap.set(fp, []);
|
|
154
|
+
}
|
|
155
|
+
fingerprintMap.get(fp)!.push({ id: msg.toolCallId, tokens: estimateToolResultTokens(msg, record) });
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// For each fingerprint with duplicates, prune all but the last
|
|
159
|
+
for (const [, ids] of fingerprintMap) {
|
|
160
|
+
if (ids.length <= 1) continue;
|
|
161
|
+
// Keep the last one; prune the rest
|
|
162
|
+
for (let i = 0; i < ids.length - 1; i++) {
|
|
163
|
+
markToolPruned(state, ids[i]!.id, "duplicate", ids[i]!.tokens);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Apply error purging: mark old error tool outputs for pruning.
|
|
170
|
+
* Mutates state.prunedToolIds.
|
|
171
|
+
*/
|
|
172
|
+
export function applyErrorPurging(messages: any[], state: DcpState, config: DcpConfig): void {
|
|
173
|
+
if (!config.strategies.purgeErrors.enabled) return;
|
|
174
|
+
if (state.manualMode && !config.manualMode.automaticStrategies) return;
|
|
175
|
+
|
|
176
|
+
const turnsThreshold = config.strategies.purgeErrors.turns ?? 3;
|
|
177
|
+
|
|
178
|
+
for (const msg of messages) {
|
|
179
|
+
if (msg.role !== "toolResult") continue;
|
|
180
|
+
if (!msg.isError) continue;
|
|
181
|
+
|
|
182
|
+
const record = recordForToolResult(msg, state);
|
|
183
|
+
if (!record) continue;
|
|
184
|
+
if (toolResultIsProtected(msg, record, config, config.strategies.purgeErrors.protectedTools ?? [])) continue;
|
|
185
|
+
|
|
186
|
+
if (state.currentTurn - record.turnIndex >= turnsThreshold) {
|
|
187
|
+
markToolPruned(state, msg.toolCallId, "old-error", estimateToolResultTokens(msg, record));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Policy-based autonomous tool-output pruning. This is the non-LLM half of
|
|
194
|
+
* DCP: large, old, repeated, or stale discovery outputs can be replaced with
|
|
195
|
+
* placeholders without waiting for the model to call `compress`.
|
|
196
|
+
*/
|
|
197
|
+
export function applyAutoToolOutputPruning(messages: any[], state: DcpState, config: DcpConfig): void {
|
|
198
|
+
const strategy = config.strategies.autoToolPruning;
|
|
199
|
+
if (!strategy.enabled) return;
|
|
200
|
+
if (state.manualMode && !config.manualMode.automaticStrategies) return;
|
|
201
|
+
|
|
202
|
+
const maxOutputTokens = Math.max(1, strategy.maxOutputTokens ?? 2000);
|
|
203
|
+
const keepRecentTurns = Math.max(0, strategy.keepRecentTurns ?? 2);
|
|
204
|
+
const readLikeTurns = Math.max(0, strategy.readLikeTurns ?? 3);
|
|
205
|
+
const readLikeTools = new Set(strategy.readLikeTools ?? []);
|
|
206
|
+
|
|
207
|
+
for (const msg of messages) {
|
|
208
|
+
if (msg.role !== "toolResult") continue;
|
|
209
|
+
if (typeof msg.toolCallId !== "string") continue;
|
|
210
|
+
|
|
211
|
+
const record = recordForToolResult(msg, state);
|
|
212
|
+
if (!record) continue;
|
|
213
|
+
if (toolResultIsProtected(msg, record, config, strategy.protectedTools ?? [])) continue;
|
|
214
|
+
|
|
215
|
+
const ageTurns = Math.max(0, state.currentTurn - record.turnIndex);
|
|
216
|
+
const tokenEstimate = estimateToolResultTokens(msg, record);
|
|
217
|
+
const toolName = toolNameForResult(msg, record);
|
|
218
|
+
|
|
219
|
+
if (tokenEstimate > maxOutputTokens && ageTurns >= keepRecentTurns) {
|
|
220
|
+
markToolPruned(state, msg.toolCallId, "large-output", tokenEstimate);
|
|
221
|
+
} else if (readLikeTools.has(toolName) && ageTurns >= readLikeTurns) {
|
|
222
|
+
markToolPruned(state, msg.toolCallId, "stale-read", tokenEstimate);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function placeholderForPrunedTool(msg: any, state: DcpState): string {
|
|
228
|
+
const reason = state.prunedToolReasons.get(msg.toolCallId);
|
|
229
|
+
if (reason === "duplicate") {
|
|
230
|
+
return "[Output removed to save context - duplicate tool call; latest matching result kept]";
|
|
231
|
+
}
|
|
232
|
+
if (reason === "large-output") {
|
|
233
|
+
return "[Large tool output removed to save context after it aged out of the active working set]";
|
|
234
|
+
}
|
|
235
|
+
if (reason === "stale-read") {
|
|
236
|
+
return "[Stale read/search output removed to save context; re-read if exact content is needed again]";
|
|
237
|
+
}
|
|
238
|
+
if (reason === "manual-sweep") {
|
|
239
|
+
return "[Output removed by /dcp sweep to save context]";
|
|
240
|
+
}
|
|
241
|
+
if (reason === "old-error" || msg.isError) {
|
|
242
|
+
return "[Error output removed - tool failed more than the configured number of turns ago]";
|
|
243
|
+
}
|
|
244
|
+
return "[Output removed to save context - information superseded or no longer needed]";
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Apply explicit tool output pruning from state.prunedToolIds.
|
|
249
|
+
* Replaces content of matching toolResult messages in place.
|
|
250
|
+
*/
|
|
251
|
+
export function applyToolOutputPruning(messages: any[], state: DcpState): void {
|
|
252
|
+
for (const msg of messages) {
|
|
253
|
+
if (msg.role !== "toolResult") continue;
|
|
254
|
+
if (!state.prunedToolIds.has(msg.toolCallId)) continue;
|
|
255
|
+
|
|
256
|
+
msg.content = [
|
|
257
|
+
{
|
|
258
|
+
type: "text",
|
|
259
|
+
text: placeholderForPrunedTool(msg, state),
|
|
260
|
+
},
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface CompressionCandidate {
|
|
2
|
+
startId: string;
|
|
3
|
+
endId: string;
|
|
4
|
+
messageCount: number;
|
|
5
|
+
estimatedTokens: number;
|
|
6
|
+
includedBlockIds: number[];
|
|
7
|
+
reason: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type MessagePriority = "medium" | "high";
|
|
11
|
+
|
|
12
|
+
export interface MessageCompressionCandidate {
|
|
13
|
+
messageId: string;
|
|
14
|
+
role: string;
|
|
15
|
+
estimatedTokens: number;
|
|
16
|
+
priority: MessagePriority;
|
|
17
|
+
reason: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type DcpNudgeType = "context-strong" | "context-soft" | "turn" | "iteration";
|
|
21
|
+
|
|
22
|
+
export interface NudgeThresholds {
|
|
23
|
+
minContextPercent?: number;
|
|
24
|
+
maxContextPercent?: number;
|
|
25
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { DcpConfig } from "./config.js";
|
|
2
|
+
import type { DcpState } from "./state.js";
|
|
3
|
+
import { applyCompressionBlocks, repairOrphanedToolPairs, syncCompressionBlocks } from "./pruner-compression-blocks.js";
|
|
4
|
+
import { stripStaleDcpMetadataFromAssistantMessage } from "./pruner-metadata.js";
|
|
5
|
+
import { injectMessageIds } from "./pruner-message-ids.js";
|
|
6
|
+
import {
|
|
7
|
+
applyAutoToolOutputPruning,
|
|
8
|
+
applyDeduplication,
|
|
9
|
+
applyErrorPurging,
|
|
10
|
+
applyToolOutputPruning,
|
|
11
|
+
} from "./pruner-tools.js";
|
|
12
|
+
|
|
13
|
+
export type {
|
|
14
|
+
CompressionCandidate,
|
|
15
|
+
MessageCompressionCandidate,
|
|
16
|
+
MessagePriority,
|
|
17
|
+
NudgeThresholds,
|
|
18
|
+
} from "./pruner-types.js";
|
|
19
|
+
export {
|
|
20
|
+
estimateTokens,
|
|
21
|
+
getActiveSummaryTokenEstimate,
|
|
22
|
+
resolveContextThresholds,
|
|
23
|
+
} from "./pruner-metadata.js";
|
|
24
|
+
export {
|
|
25
|
+
isToolRecordProtected,
|
|
26
|
+
markToolPruned,
|
|
27
|
+
} from "./pruner-tools.js";
|
|
28
|
+
export {
|
|
29
|
+
detectCompressionCandidate,
|
|
30
|
+
detectMessageCompressionCandidates,
|
|
31
|
+
formatCompressionCandidateHint,
|
|
32
|
+
formatMessageCompressionCandidateHint,
|
|
33
|
+
} from "./pruner-candidates.js";
|
|
34
|
+
export {
|
|
35
|
+
appendConcreteNudgeGuidance,
|
|
36
|
+
applyAnchoredNudges,
|
|
37
|
+
clearDcpNudgeAnchors,
|
|
38
|
+
getNudgeType,
|
|
39
|
+
injectNudge,
|
|
40
|
+
nudgeTypeLabel,
|
|
41
|
+
upsertNudgeAnchor,
|
|
42
|
+
} from "./pruner-nudge.js";
|
|
43
|
+
|
|
44
|
+
export function applyPruning(
|
|
45
|
+
messages: any[],
|
|
46
|
+
state: DcpState,
|
|
47
|
+
config: DcpConfig,
|
|
48
|
+
): any[] {
|
|
49
|
+
// Deep-clone each message and its content to prevent mutations from
|
|
50
|
+
// affecting the original objects across context events.
|
|
51
|
+
const msgs: any[] = messages.map((m: any) => {
|
|
52
|
+
const clone = { ...m };
|
|
53
|
+
if (Array.isArray(clone.content)) {
|
|
54
|
+
clone.content = clone.content.map((contentBlock: any) =>
|
|
55
|
+
typeof contentBlock === "object" && contentBlock !== null ? { ...contentBlock } : contentBlock,
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
return stripStaleDcpMetadataFromAssistantMessage(clone);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// 1. Count user turns → update state.currentTurn. Do this before inserting
|
|
62
|
+
// synthetic compression summaries; the raw session is the source of truth.
|
|
63
|
+
state.currentTurn = msgs.filter((m) => m.role === "user").length;
|
|
64
|
+
|
|
65
|
+
// 2. Reconcile persisted compression blocks with the current raw context,
|
|
66
|
+
// then apply active compression blocks.
|
|
67
|
+
syncCompressionBlocks(msgs, state);
|
|
68
|
+
applyCompressionBlocks(msgs, state);
|
|
69
|
+
|
|
70
|
+
// 2b. Post-compression safety net: remove any orphaned tool pairs that the
|
|
71
|
+
// expansion logic could not catch (e.g. multi-block interactions, pre-broken state).
|
|
72
|
+
repairOrphanedToolPairs(msgs);
|
|
73
|
+
|
|
74
|
+
// 3. Apply deduplication
|
|
75
|
+
applyDeduplication(msgs, state, config);
|
|
76
|
+
|
|
77
|
+
// 4. Apply error purging
|
|
78
|
+
applyErrorPurging(msgs, state, config);
|
|
79
|
+
|
|
80
|
+
// 5. Apply autonomous policy pruning for old/large/stale tool outputs
|
|
81
|
+
applyAutoToolOutputPruning(msgs, state, config);
|
|
82
|
+
|
|
83
|
+
// 6. Apply explicit tool output pruning (prunedToolIds)
|
|
84
|
+
applyToolOutputPruning(msgs, state);
|
|
85
|
+
|
|
86
|
+
// 7. Refresh visible message ID snapshots used by the compress tool.
|
|
87
|
+
injectMessageIds(msgs, state, { config });
|
|
88
|
+
|
|
89
|
+
// 8. state.messageIdSnapshot/messageMetaSnapshot are already updated by injectMessageIds
|
|
90
|
+
|
|
91
|
+
return msgs;
|
|
92
|
+
}
|