@code-yeongyu/senpi 2026.6.15 → 2026.6.16
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 +54 -0
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +5 -0
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/index.js +3 -1
- package/dist/core/extensions/builtin/bash-timeout/index.js.map +1 -1
- package/dist/core/extensions/builtin/bash-timeout/timeout.js +2 -2
- package/dist/core/extensions/builtin/bash-timeout/timeout.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +24 -12
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/goal/command.d.ts +14 -0
- package/dist/core/extensions/builtin/goal/command.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/command.js +16 -0
- package/dist/core/extensions/builtin/goal/command.js.map +1 -0
- package/dist/core/extensions/builtin/goal/continuation.d.ts +4 -0
- package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/continuation.js +7 -0
- package/dist/core/extensions/builtin/goal/continuation.js.map +1 -0
- package/dist/core/extensions/builtin/goal/errors.d.ts +13 -0
- package/dist/core/extensions/builtin/goal/errors.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/errors.js +25 -0
- package/dist/core/extensions/builtin/goal/errors.js.map +1 -0
- package/dist/core/extensions/builtin/goal/format.d.ts +8 -0
- package/dist/core/extensions/builtin/goal/format.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/format.js +71 -0
- package/dist/core/extensions/builtin/goal/format.js.map +1 -0
- package/dist/core/extensions/builtin/goal/index.d.ts +3 -0
- package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/index.js +322 -0
- package/dist/core/extensions/builtin/goal/index.js.map +1 -0
- package/dist/core/extensions/builtin/goal/prompt.d.ts +3 -0
- package/dist/core/extensions/builtin/goal/prompt.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/prompt.js +34 -0
- package/dist/core/extensions/builtin/goal/prompt.js.map +1 -0
- package/dist/core/extensions/builtin/goal/store.d.ts +9 -0
- package/dist/core/extensions/builtin/goal/store.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/store.js +173 -0
- package/dist/core/extensions/builtin/goal/store.js.map +1 -0
- package/dist/core/extensions/builtin/goal/types.d.ts +50 -0
- package/dist/core/extensions/builtin/goal/types.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/types.js +6 -0
- package/dist/core/extensions/builtin/goal/types.js.map +1 -0
- package/dist/core/extensions/builtin/goal/ui.d.ts +6 -0
- package/dist/core/extensions/builtin/goal/ui.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/ui.js +20 -0
- package/dist/core/extensions/builtin/goal/ui.js.map +1 -0
- package/dist/core/extensions/builtin/goal/validation.d.ts +3 -0
- package/dist/core/extensions/builtin/goal/validation.d.ts.map +1 -0
- package/dist/core/extensions/builtin/goal/validation.js +13 -0
- package/dist/core/extensions/builtin/goal/validation.js.map +1 -0
- package/dist/core/extensions/builtin/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/index.js +10 -2
- package/dist/core/extensions/builtin/index.js.map +1 -1
- package/dist/core/extensions/builtin/nested-agents-md/core/containment.d.ts +10 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/containment.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/containment.js +23 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/containment.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/errors.d.ts +5 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/errors.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/errors.js +9 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/errors.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/find-agents-md-up.d.ts +7 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/find-agents-md-up.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/find-agents-md-up.js +44 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/find-agents-md-up.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/format.d.ts +7 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/format.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/format.js +7 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/format.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/inject-directory-context.d.ts +11 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/inject-directory-context.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/inject-directory-context.js +77 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/inject-directory-context.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.d.ts +11 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.js +33 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/injection-cache.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/session-key.d.ts +8 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/session-key.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/session-key.js +8 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/session-key.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/truncate.d.ts +8 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/truncate.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/truncate.js +26 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/truncate.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/types.d.ts +25 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/types.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/types.js +4 -0
- package/dist/core/extensions/builtin/nested-agents-md/core/types.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/index.d.ts +3 -0
- package/dist/core/extensions/builtin/nested-agents-md/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/index.js +102 -0
- package/dist/core/extensions/builtin/nested-agents-md/index.js.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/ui/reporter.d.ts +32 -0
- package/dist/core/extensions/builtin/nested-agents-md/ui/reporter.d.ts.map +1 -0
- package/dist/core/extensions/builtin/nested-agents-md/ui/reporter.js +66 -0
- package/dist/core/extensions/builtin/nested-agents-md/ui/reporter.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.js +2 -2
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/rules/commands.d.ts +4 -0
- package/dist/core/extensions/builtin/rules/commands.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/commands.js +87 -0
- package/dist/core/extensions/builtin/rules/commands.js.map +1 -0
- package/dist/core/extensions/builtin/rules/index.d.ts +3 -0
- package/dist/core/extensions/builtin/rules/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/index.js +127 -0
- package/dist/core/extensions/builtin/rules/index.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/cache.d.ts +10 -0
- package/dist/core/extensions/builtin/rules/rules/cache.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/cache.js +51 -0
- package/dist/core/extensions/builtin/rules/rules/cache.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/constants.d.ts +57 -0
- package/dist/core/extensions/builtin/rules/rules/constants.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/constants.js +96 -0
- package/dist/core/extensions/builtin/rules/rules/constants.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/engine.d.ts +67 -0
- package/dist/core/extensions/builtin/rules/rules/engine.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/engine.js +443 -0
- package/dist/core/extensions/builtin/rules/rules/engine.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/errors.d.ts +7 -0
- package/dist/core/extensions/builtin/rules/rules/errors.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/errors.js +13 -0
- package/dist/core/extensions/builtin/rules/rules/errors.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/finder.d.ts +27 -0
- package/dist/core/extensions/builtin/rules/rules/finder.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/finder.js +241 -0
- package/dist/core/extensions/builtin/rules/rules/finder.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/formatter.d.ts +8 -0
- package/dist/core/extensions/builtin/rules/rules/formatter.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/formatter.js +44 -0
- package/dist/core/extensions/builtin/rules/rules/formatter.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/matcher.d.ts +25 -0
- package/dist/core/extensions/builtin/rules/rules/matcher.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/matcher.js +107 -0
- package/dist/core/extensions/builtin/rules/rules/matcher.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/ordering.d.ts +4 -0
- package/dist/core/extensions/builtin/rules/rules/ordering.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/ordering.js +28 -0
- package/dist/core/extensions/builtin/rules/rules/ordering.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/parser.d.ts +4 -0
- package/dist/core/extensions/builtin/rules/rules/parser.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/parser.js +290 -0
- package/dist/core/extensions/builtin/rules/rules/parser.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/project-root.d.ts +2 -0
- package/dist/core/extensions/builtin/rules/rules/project-root.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/project-root.js +24 -0
- package/dist/core/extensions/builtin/rules/rules/project-root.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/scanner.d.ts +14 -0
- package/dist/core/extensions/builtin/rules/rules/scanner.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/scanner.js +96 -0
- package/dist/core/extensions/builtin/rules/rules/scanner.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/tool-paths.d.ts +4 -0
- package/dist/core/extensions/builtin/rules/rules/tool-paths.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/tool-paths.js +37 -0
- package/dist/core/extensions/builtin/rules/rules/tool-paths.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/truncator.d.ts +18 -0
- package/dist/core/extensions/builtin/rules/rules/truncator.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/truncator.js +46 -0
- package/dist/core/extensions/builtin/rules/rules/truncator.js.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/types.d.ts +124 -0
- package/dist/core/extensions/builtin/rules/rules/types.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/rules/types.js +9 -0
- package/dist/core/extensions/builtin/rules/rules/types.js.map +1 -0
- package/dist/core/extensions/builtin/rules/ui/dynamic-border.d.ts +8 -0
- package/dist/core/extensions/builtin/rules/ui/dynamic-border.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/ui/dynamic-border.js +10 -0
- package/dist/core/extensions/builtin/rules/ui/dynamic-border.js.map +1 -0
- package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts +22 -0
- package/dist/core/extensions/builtin/rules/ui/rules-banner.d.ts.map +1 -0
- package/dist/core/extensions/builtin/rules/ui/rules-banner.js +51 -0
- package/dist/core/extensions/builtin/rules/ui/rules-banner.js.map +1 -0
- package/dist/core/extensions/builtin/webfetch/index.d.ts +10 -0
- package/dist/core/extensions/builtin/webfetch/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/webfetch/index.js +53 -0
- package/dist/core/extensions/builtin/webfetch/index.js.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/content.d.ts +4 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/content.d.ts.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/content.js +60 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/content.js.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/errors.d.ts +13 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/errors.d.ts.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/errors.js +25 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/errors.js.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.d.ts +24 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.d.ts.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.js +148 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/fetcher.js.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/renderers.d.ts +15 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/renderers.d.ts.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/renderers.js +110 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/renderers.js.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts +28 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.d.ts.map +1 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.js +79 -0
- package/dist/core/extensions/builtin/webfetch/webfetch/tool.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/index.d.ts +3 -0
- package/dist/core/extensions/builtin/websearch/index.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/index.js +76 -0
- package/dist/core/extensions/builtin/websearch/index.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/config.d.ts +12 -0
- package/dist/core/extensions/builtin/websearch/websearch/config.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/config.js +245 -0
- package/dist/core/extensions/builtin/websearch/websearch/config.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/native.d.ts +19 -0
- package/dist/core/extensions/builtin/websearch/websearch/native.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/native.js +65 -0
- package/dist/core/extensions/builtin/websearch/websearch/native.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.d.ts +5 -0
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js +58 -0
- package/dist/core/extensions/builtin/websearch/websearch/provider-endpoints.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.d.ts +4 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.js +464 -0
- package/dist/core/extensions/builtin/websearch/websearch/providers.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts +26 -0
- package/dist/core/extensions/builtin/websearch/websearch/renderers.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js +66 -0
- package/dist/core/extensions/builtin/websearch/websearch/renderers.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/search.d.ts +9 -0
- package/dist/core/extensions/builtin/websearch/websearch/search.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/search.js +261 -0
- package/dist/core/extensions/builtin/websearch/websearch/search.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/tool.d.ts +18 -0
- package/dist/core/extensions/builtin/websearch/websearch/tool.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/tool.js +88 -0
- package/dist/core/extensions/builtin/websearch/websearch/tool.js.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts +115 -0
- package/dist/core/extensions/builtin/websearch/websearch/types.d.ts.map +1 -0
- package/dist/core/extensions/builtin/websearch/websearch/types.js +2 -0
- package/dist/core/extensions/builtin/websearch/websearch/types.js.map +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +8 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +4 -0
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts +14 -0
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js +65 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +0 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +0 -4
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/utils/child-process.d.ts +7 -4
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +23 -5
- package/dist/utils/child-process.js.map +1 -1
- package/docs/containerization.md +36 -36
- package/docs/index.md +1 -1
- package/docs/security.md +13 -13
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +5 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/models.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +88 -74
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +124 -132
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js +4 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +18 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.js +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +20 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-choice-fallback.d.ts +5 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-choice-fallback.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-choice-fallback.js +41 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/tool-choice-fallback.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/npm-shrinkwrap.json +45 -12
- package/package.json +8 -4
- package/dist/core/extensions/builtin/kimi-web-search/index.d.ts +0 -3
- package/dist/core/extensions/builtin/kimi-web-search/index.d.ts.map +0 -1
- package/dist/core/extensions/builtin/kimi-web-search/index.js +0 -208
- package/dist/core/extensions/builtin/kimi-web-search/index.js.map +0 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public types for pi-rules.
|
|
3
|
+
*
|
|
4
|
+
* These types are stable contracts between modules. The frontmatter type
|
|
5
|
+
* mirrors omo's `RuleMetadata` plus Claude (`paths`) and Copilot (`applyTo`)
|
|
6
|
+
* aliases that are normalized into `globs` internally.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* YAML frontmatter parsed from a rule markdown file.
|
|
10
|
+
* `paths` (Claude alias) and `applyTo` (Copilot alias) are normalized into
|
|
11
|
+
* `globs` by the parser before any matcher sees this struct.
|
|
12
|
+
*/
|
|
13
|
+
export interface RuleFrontmatter {
|
|
14
|
+
description?: string;
|
|
15
|
+
globs?: string | string[];
|
|
16
|
+
paths?: string | string[];
|
|
17
|
+
applyTo?: string | string[];
|
|
18
|
+
alwaysApply?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Result of parsing a rule markdown file.
|
|
22
|
+
* `body` excludes the frontmatter delimiters and the YAML payload.
|
|
23
|
+
*/
|
|
24
|
+
export interface ParsedRule {
|
|
25
|
+
frontmatter: RuleFrontmatter;
|
|
26
|
+
body: string;
|
|
27
|
+
/**
|
|
28
|
+
* Diagnostic message if frontmatter parsing failed but the body was salvaged.
|
|
29
|
+
* Empty when parsing succeeded.
|
|
30
|
+
*/
|
|
31
|
+
diagnostic?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A discovered rule file candidate before parsing/matching.
|
|
35
|
+
*
|
|
36
|
+
* `path` is the absolute path as discovered (possibly via symlink).
|
|
37
|
+
* `realPath` is the canonical resolved path used for dedup.
|
|
38
|
+
* `source` identifies which discovery source produced this candidate.
|
|
39
|
+
*/
|
|
40
|
+
export interface RuleCandidate {
|
|
41
|
+
path: string;
|
|
42
|
+
realPath: string;
|
|
43
|
+
source: RuleSource;
|
|
44
|
+
/**
|
|
45
|
+
* Distance from the target file directory to the directory containing this rule.
|
|
46
|
+
* 0 = same directory, 9999 = global/user-home rule.
|
|
47
|
+
*/
|
|
48
|
+
distance: number;
|
|
49
|
+
isGlobal: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* True when this candidate is a SINGLE-FILE rule like AGENTS.md or
|
|
52
|
+
* `.github/copilot-instructions.md` (frontmatter optional, applies always).
|
|
53
|
+
*/
|
|
54
|
+
isSingleFile: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Path relative to project root, POSIX-normalized. Used for matcher and display.
|
|
57
|
+
* Empty string for user-home global rules.
|
|
58
|
+
*/
|
|
59
|
+
relativePath: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A fully-loaded rule ready for injection.
|
|
63
|
+
*/
|
|
64
|
+
export interface LoadedRule extends RuleCandidate {
|
|
65
|
+
frontmatter: RuleFrontmatter;
|
|
66
|
+
body: string;
|
|
67
|
+
contentHash: string;
|
|
68
|
+
matchReason: MatchReason;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Source identifier for rule files. Used for deterministic ordering and display.
|
|
72
|
+
*/
|
|
73
|
+
export type RuleSource = ".omo/rules" | ".claude/rules" | ".cursor/rules" | ".github/instructions" | ".github/copilot-instructions.md" | "AGENTS.md" | "CLAUDE.md" | "CONTEXT.md" | "~/.omo/rules" | "~/.opencode/rules" | "~/.claude/rules" | "~/.config/opencode/AGENTS.md" | "~/.claude/CLAUDE.md";
|
|
74
|
+
/**
|
|
75
|
+
* Why a candidate matched the target file. Surfaced in the injection block so
|
|
76
|
+
* the model can attribute its behavior to a specific rule.
|
|
77
|
+
*/
|
|
78
|
+
export type MatchReason = "alwaysApply" | "single-file" | {
|
|
79
|
+
kind: "glob";
|
|
80
|
+
pattern: string;
|
|
81
|
+
} | {
|
|
82
|
+
kind: "no-match";
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Truncation result.
|
|
86
|
+
*/
|
|
87
|
+
export interface TruncationResult {
|
|
88
|
+
body: string;
|
|
89
|
+
truncated: boolean;
|
|
90
|
+
originalLength: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Configuration knobs resolved from env vars and package.json.
|
|
94
|
+
*/
|
|
95
|
+
export interface PiRulesConfig {
|
|
96
|
+
disabled: boolean;
|
|
97
|
+
mode: "static" | "dynamic" | "both" | "off";
|
|
98
|
+
maxRuleChars: number;
|
|
99
|
+
maxResultChars: number;
|
|
100
|
+
enabledSources: RuleSource[] | "auto";
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Per-session in-memory dedup state.
|
|
104
|
+
*
|
|
105
|
+
* `staticDedup` keys are `{cwd}::{rulePath}::{contentHash}` strings.
|
|
106
|
+
* `dynamicDedup` stores `{targetPath}::{rulePath}::{contentHash}` strings grouped by target file.
|
|
107
|
+
* `dynamicTargetFingerprints` maps a target file cache key to a digest of its
|
|
108
|
+
* discovered rule candidates + file stats; loadDynamicRules short-circuits
|
|
109
|
+
* targets whose fingerprint has not changed since the previous load.
|
|
110
|
+
*/
|
|
111
|
+
export interface SessionState {
|
|
112
|
+
cwd: string | undefined;
|
|
113
|
+
staticDedup: Set<string>;
|
|
114
|
+
dynamicDedup: Map<string, Set<string>>;
|
|
115
|
+
dynamicTargetFingerprints: Map<string, string>;
|
|
116
|
+
loadedRules: LoadedRule[];
|
|
117
|
+
diagnostics: RuleDiagnostic[];
|
|
118
|
+
}
|
|
119
|
+
export interface RuleDiagnostic {
|
|
120
|
+
severity: "warning" | "error";
|
|
121
|
+
source: string;
|
|
122
|
+
message: string;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/rules/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,eAAe,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,aAAa;IAChD,WAAW,EAAE,eAAe,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB,YAAY,GACZ,eAAe,GACf,eAAe,GACf,sBAAsB,GACtB,iCAAiC,GACjC,WAAW,GACX,WAAW,GACX,YAAY,GACZ,cAAc,GACd,mBAAmB,GACnB,iBAAiB,GACjB,8BAA8B,GAC9B,qBAAqB,CAAC;AAEzB;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEnH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,yBAAyB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public types for pi-rules.
|
|
3
|
+
*
|
|
4
|
+
* These types are stable contracts between modules. The frontmatter type
|
|
5
|
+
* mirrors omo's `RuleMetadata` plus Claude (`paths`) and Copilot (`applyTo`)
|
|
6
|
+
* aliases that are normalized into `globs` internally.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/rules/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG","sourcesContent":["/**\n * Public types for pi-rules.\n *\n * These types are stable contracts between modules. The frontmatter type\n * mirrors omo's `RuleMetadata` plus Claude (`paths`) and Copilot (`applyTo`)\n * aliases that are normalized into `globs` internally.\n */\n\n/**\n * YAML frontmatter parsed from a rule markdown file.\n * `paths` (Claude alias) and `applyTo` (Copilot alias) are normalized into\n * `globs` by the parser before any matcher sees this struct.\n */\nexport interface RuleFrontmatter {\n\tdescription?: string;\n\tglobs?: string | string[];\n\tpaths?: string | string[];\n\tapplyTo?: string | string[];\n\talwaysApply?: boolean;\n}\n\n/**\n * Result of parsing a rule markdown file.\n * `body` excludes the frontmatter delimiters and the YAML payload.\n */\nexport interface ParsedRule {\n\tfrontmatter: RuleFrontmatter;\n\tbody: string;\n\t/**\n\t * Diagnostic message if frontmatter parsing failed but the body was salvaged.\n\t * Empty when parsing succeeded.\n\t */\n\tdiagnostic?: string;\n}\n\n/**\n * A discovered rule file candidate before parsing/matching.\n *\n * `path` is the absolute path as discovered (possibly via symlink).\n * `realPath` is the canonical resolved path used for dedup.\n * `source` identifies which discovery source produced this candidate.\n */\nexport interface RuleCandidate {\n\tpath: string;\n\trealPath: string;\n\tsource: RuleSource;\n\t/**\n\t * Distance from the target file directory to the directory containing this rule.\n\t * 0 = same directory, 9999 = global/user-home rule.\n\t */\n\tdistance: number;\n\tisGlobal: boolean;\n\t/**\n\t * True when this candidate is a SINGLE-FILE rule like AGENTS.md or\n\t * `.github/copilot-instructions.md` (frontmatter optional, applies always).\n\t */\n\tisSingleFile: boolean;\n\t/**\n\t * Path relative to project root, POSIX-normalized. Used for matcher and display.\n\t * Empty string for user-home global rules.\n\t */\n\trelativePath: string;\n}\n\n/**\n * A fully-loaded rule ready for injection.\n */\nexport interface LoadedRule extends RuleCandidate {\n\tfrontmatter: RuleFrontmatter;\n\tbody: string;\n\tcontentHash: string;\n\tmatchReason: MatchReason;\n}\n\n/**\n * Source identifier for rule files. Used for deterministic ordering and display.\n */\nexport type RuleSource =\n\t| \".omo/rules\"\n\t| \".claude/rules\"\n\t| \".cursor/rules\"\n\t| \".github/instructions\"\n\t| \".github/copilot-instructions.md\"\n\t| \"AGENTS.md\"\n\t| \"CLAUDE.md\"\n\t| \"CONTEXT.md\"\n\t| \"~/.omo/rules\"\n\t| \"~/.opencode/rules\"\n\t| \"~/.claude/rules\"\n\t| \"~/.config/opencode/AGENTS.md\"\n\t| \"~/.claude/CLAUDE.md\";\n\n/**\n * Why a candidate matched the target file. Surfaced in the injection block so\n * the model can attribute its behavior to a specific rule.\n */\nexport type MatchReason = \"alwaysApply\" | \"single-file\" | { kind: \"glob\"; pattern: string } | { kind: \"no-match\" };\n\n/**\n * Truncation result.\n */\nexport interface TruncationResult {\n\tbody: string;\n\ttruncated: boolean;\n\toriginalLength: number;\n}\n\n/**\n * Configuration knobs resolved from env vars and package.json.\n */\nexport interface PiRulesConfig {\n\tdisabled: boolean;\n\tmode: \"static\" | \"dynamic\" | \"both\" | \"off\";\n\tmaxRuleChars: number;\n\tmaxResultChars: number;\n\tenabledSources: RuleSource[] | \"auto\";\n}\n\n/**\n * Per-session in-memory dedup state.\n *\n * `staticDedup` keys are `{cwd}::{rulePath}::{contentHash}` strings.\n * `dynamicDedup` stores `{targetPath}::{rulePath}::{contentHash}` strings grouped by target file.\n * `dynamicTargetFingerprints` maps a target file cache key to a digest of its\n * discovered rule candidates + file stats; loadDynamicRules short-circuits\n * targets whose fingerprint has not changed since the previous load.\n */\nexport interface SessionState {\n\tcwd: string | undefined;\n\tstaticDedup: Set<string>;\n\tdynamicDedup: Map<string, Set<string>>;\n\tdynamicTargetFingerprints: Map<string, string>;\n\tloadedRules: LoadedRule[];\n\tdiagnostics: RuleDiagnostic[];\n}\n\nexport interface RuleDiagnostic {\n\tseverity: \"warning\" | \"error\";\n\tsource: string;\n\tmessage: string;\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Component } from "@earendil-works/pi-tui";
|
|
2
|
+
export declare class DynamicBorder implements Component {
|
|
3
|
+
private readonly color;
|
|
4
|
+
constructor(color: (str: string) => string);
|
|
5
|
+
render(width: number): string[];
|
|
6
|
+
invalidate(): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=dynamic-border.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-border.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/ui/dynamic-border.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,qBAAa,aAAc,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,YAAY,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAEzC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9B;IAED,UAAU,IAAI,IAAI,CAAG;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-border.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/ui/dynamic-border.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IAGzB,YAAY,KAA8B;QACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,UAAU,KAAU,CAAC;CACrB","sourcesContent":["import type { Component } from \"@earendil-works/pi-tui\";\n\nexport class DynamicBorder implements Component {\n\tprivate readonly color: (str: string) => string;\n\n\tconstructor(color: (str: string) => string) {\n\t\tthis.color = color;\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [this.color(\"─\".repeat(Math.max(1, width)))];\n\t}\n\n\tinvalidate(): void {}\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Container } from "@earendil-works/pi-tui";
|
|
2
|
+
import type { Theme } from "../../../../../modes/interactive/theme/theme.ts";
|
|
3
|
+
import type { LoadedRule, RuleDiagnostic } from "../rules/types.ts";
|
|
4
|
+
export interface RulesBannerProps {
|
|
5
|
+
ruleCount: number;
|
|
6
|
+
diagnostics: ReadonlyArray<RuleDiagnostic>;
|
|
7
|
+
topRules?: ReadonlyArray<Pick<LoadedRule, "relativePath" | "matchReason">>;
|
|
8
|
+
}
|
|
9
|
+
export declare class RulesBanner extends Container {
|
|
10
|
+
private readonly props;
|
|
11
|
+
private readonly theme;
|
|
12
|
+
constructor(props: RulesBannerProps, theme: Theme);
|
|
13
|
+
render(width: number): string[];
|
|
14
|
+
invalidate(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function renderBannerLines(props: RulesBannerProps, theme: Theme, width: number): string[];
|
|
17
|
+
export interface StatusLineInput {
|
|
18
|
+
ruleCount: number;
|
|
19
|
+
hasErrors: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function statusLineText(input: StatusLineInput, theme: Theme): string;
|
|
22
|
+
//# sourceMappingURL=rules-banner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-banner.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/ui/rules-banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iDAAiD,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC;CAC3E;AAED,qBAAa,WAAY,SAAQ,SAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,YAAY,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAIhD;IAEQ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvC;IAEQ,UAAU,IAAI,IAAI,CAAG;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAuChG;AAED,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAM3E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Container } from "@earendil-works/pi-tui";
|
|
2
|
+
import { DynamicBorder } from "./dynamic-border.js";
|
|
3
|
+
export class RulesBanner extends Container {
|
|
4
|
+
constructor(props, theme) {
|
|
5
|
+
super();
|
|
6
|
+
this.props = props;
|
|
7
|
+
this.theme = theme;
|
|
8
|
+
}
|
|
9
|
+
render(width) {
|
|
10
|
+
return renderBannerLines(this.props, this.theme, width);
|
|
11
|
+
}
|
|
12
|
+
invalidate() { }
|
|
13
|
+
}
|
|
14
|
+
export function renderBannerLines(props, theme, width) {
|
|
15
|
+
const lines = [];
|
|
16
|
+
const border = new DynamicBorder((str) => theme.fg("border", str));
|
|
17
|
+
if (props.ruleCount === 0) {
|
|
18
|
+
lines.push(...border.render(width));
|
|
19
|
+
lines.push(`${theme.bold(theme.fg("accent", "[pi-rules]"))} No rules discovered`);
|
|
20
|
+
lines.push(...border.render(width));
|
|
21
|
+
return lines;
|
|
22
|
+
}
|
|
23
|
+
lines.push(...border.render(width));
|
|
24
|
+
lines.push(`${theme.bold(theme.fg("accent", "[pi-rules]"))} ${theme.fg("muted", `${props.ruleCount} active rules`)}`);
|
|
25
|
+
lines.push("");
|
|
26
|
+
if (props.topRules) {
|
|
27
|
+
for (const rule of props.topRules) {
|
|
28
|
+
const hasDiagnostic = props.diagnostics.some((diagnostic) => diagnostic.source === rule.relativePath);
|
|
29
|
+
const indicator = hasDiagnostic ? theme.fg("error", "⚠") : theme.fg("success", "●");
|
|
30
|
+
let annotation = "";
|
|
31
|
+
if (typeof rule.matchReason === "object" && rule.matchReason.kind === "glob") {
|
|
32
|
+
annotation = ` ${theme.fg("muted", rule.matchReason.pattern)}`;
|
|
33
|
+
}
|
|
34
|
+
lines.push(` ${indicator} ${rule.relativePath}${annotation}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (props.diagnostics.length > 0) {
|
|
38
|
+
lines.push(` ${theme.fg("warning", `⚠ ${props.diagnostics.length} warning(s)`)}`);
|
|
39
|
+
}
|
|
40
|
+
lines.push("");
|
|
41
|
+
lines.push(...border.render(width));
|
|
42
|
+
return lines;
|
|
43
|
+
}
|
|
44
|
+
export function statusLineText(input, theme) {
|
|
45
|
+
const base = `[pi-rules] ${input.ruleCount} active`;
|
|
46
|
+
if (input.hasErrors) {
|
|
47
|
+
return theme.fg("muted", `${base} · `) + theme.fg("error", "⚠ errors");
|
|
48
|
+
}
|
|
49
|
+
return theme.fg("muted", base);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=rules-banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules-banner.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/rules/ui/rules-banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQpD,MAAM,OAAO,WAAY,SAAQ,SAAS;IAIzC,YAAY,KAAuB,EAAE,KAAY;QAChD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAEQ,UAAU,KAAU,CAAC;CAC9B;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuB,EAAE,KAAY,EAAE,KAAa;IACrF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAEnE,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAClF,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CACT,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,eAAe,CAAC,EAAE,CACzG,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;YACtG,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAEpF,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9E,UAAU,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,GAAG,UAAU,EAAE,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,WAAW,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpC,OAAO,KAAK,CAAC;AACd,CAAC;AAOD,MAAM,UAAU,cAAc,CAAC,KAAsB,EAAE,KAAY;IAClE,MAAM,IAAI,GAAG,cAAc,KAAK,CAAC,SAAS,SAAS,CAAC;IACpD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { Container } from \"@earendil-works/pi-tui\";\nimport type { Theme } from \"../../../../../modes/interactive/theme/theme.ts\";\nimport type { LoadedRule, RuleDiagnostic } from \"../rules/types.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\n\nexport interface RulesBannerProps {\n\truleCount: number;\n\tdiagnostics: ReadonlyArray<RuleDiagnostic>;\n\ttopRules?: ReadonlyArray<Pick<LoadedRule, \"relativePath\" | \"matchReason\">>;\n}\n\nexport class RulesBanner extends Container {\n\tprivate readonly props: RulesBannerProps;\n\tprivate readonly theme: Theme;\n\n\tconstructor(props: RulesBannerProps, theme: Theme) {\n\t\tsuper();\n\t\tthis.props = props;\n\t\tthis.theme = theme;\n\t}\n\n\toverride render(width: number): string[] {\n\t\treturn renderBannerLines(this.props, this.theme, width);\n\t}\n\n\toverride invalidate(): void {}\n}\n\nexport function renderBannerLines(props: RulesBannerProps, theme: Theme, width: number): string[] {\n\tconst lines: string[] = [];\n\tconst border = new DynamicBorder((str) => theme.fg(\"border\", str));\n\n\tif (props.ruleCount === 0) {\n\t\tlines.push(...border.render(width));\n\t\tlines.push(`${theme.bold(theme.fg(\"accent\", \"[pi-rules]\"))} No rules discovered`);\n\t\tlines.push(...border.render(width));\n\t\treturn lines;\n\t}\n\n\tlines.push(...border.render(width));\n\tlines.push(\n\t\t`${theme.bold(theme.fg(\"accent\", \"[pi-rules]\"))} ${theme.fg(\"muted\", `${props.ruleCount} active rules`)}`,\n\t);\n\tlines.push(\"\");\n\n\tif (props.topRules) {\n\t\tfor (const rule of props.topRules) {\n\t\t\tconst hasDiagnostic = props.diagnostics.some((diagnostic) => diagnostic.source === rule.relativePath);\n\t\t\tconst indicator = hasDiagnostic ? theme.fg(\"error\", \"⚠\") : theme.fg(\"success\", \"●\");\n\n\t\t\tlet annotation = \"\";\n\t\t\tif (typeof rule.matchReason === \"object\" && rule.matchReason.kind === \"glob\") {\n\t\t\t\tannotation = ` ${theme.fg(\"muted\", rule.matchReason.pattern)}`;\n\t\t\t}\n\n\t\t\tlines.push(` ${indicator} ${rule.relativePath}${annotation}`);\n\t\t}\n\t}\n\n\tif (props.diagnostics.length > 0) {\n\t\tlines.push(` ${theme.fg(\"warning\", `⚠ ${props.diagnostics.length} warning(s)`)}`);\n\t}\n\n\tlines.push(\"\");\n\tlines.push(...border.render(width));\n\n\treturn lines;\n}\n\nexport interface StatusLineInput {\n\truleCount: number;\n\thasErrors: boolean;\n}\n\nexport function statusLineText(input: StatusLineInput, theme: Theme): string {\n\tconst base = `[pi-rules] ${input.ruleCount} active`;\n\tif (input.hasErrors) {\n\t\treturn theme.fg(\"muted\", `${base} · `) + theme.fg(\"error\", \"⚠ errors\");\n\t}\n\treturn theme.fg(\"muted\", base);\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "../../types.ts";
|
|
2
|
+
export declare function isWebfetchEnabled(): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* pi-webfetch — URL retrieval for the pi coding agent.
|
|
5
|
+
*
|
|
6
|
+
* Registers one LLM-callable tool:
|
|
7
|
+
* - webfetch — fetch URL content as markdown, text, or html.
|
|
8
|
+
*/
|
|
9
|
+
export default function (pi: ExtensionAPI): void;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/webfetch/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AA4BrE,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAQD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,GAAG,IAAI,CAmB/C"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { renderWebfetchCall, renderWebfetchResult } from "./webfetch/renderers.js";
|
|
2
|
+
import { webfetch } from "./webfetch/tool.js";
|
|
3
|
+
const ENABLE_ENV = "PI_WEBFETCH";
|
|
4
|
+
const STATUS_KEY = "pi-webfetch";
|
|
5
|
+
const WIDGET_KEY = "pi-webfetch";
|
|
6
|
+
function parseEnableEnv(envVar) {
|
|
7
|
+
const envValue = process.env[envVar];
|
|
8
|
+
if (!envValue) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
const normalized = envValue.trim().toLowerCase();
|
|
12
|
+
if (normalized === "0" || normalized === "false" || normalized === "no" || normalized === "off") {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (normalized === "1" || normalized === "true" || normalized === "yes" || normalized === "on") {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
// Unknown values fall back to default-on behavior.
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
export function isWebfetchEnabled() {
|
|
22
|
+
return parseEnableEnv(ENABLE_ENV);
|
|
23
|
+
}
|
|
24
|
+
function clearUi(ctx) {
|
|
25
|
+
if (!ctx.hasUI)
|
|
26
|
+
return;
|
|
27
|
+
ctx.ui.setStatus(STATUS_KEY, undefined);
|
|
28
|
+
ctx.ui.setWidget(WIDGET_KEY, undefined);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* pi-webfetch — URL retrieval for the pi coding agent.
|
|
32
|
+
*
|
|
33
|
+
* Registers one LLM-callable tool:
|
|
34
|
+
* - webfetch — fetch URL content as markdown, text, or html.
|
|
35
|
+
*/
|
|
36
|
+
export default function (pi) {
|
|
37
|
+
// When PI_WEBFETCH disables the extension, keep factory callable but skip all registration side effects.
|
|
38
|
+
if (!isWebfetchEnabled()) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
pi.registerTool({
|
|
42
|
+
...webfetch,
|
|
43
|
+
renderCall: renderWebfetchCall,
|
|
44
|
+
renderResult: renderWebfetchResult,
|
|
45
|
+
});
|
|
46
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
47
|
+
clearUi(ctx);
|
|
48
|
+
});
|
|
49
|
+
pi.on("session_shutdown", async (_event, ctx) => {
|
|
50
|
+
clearUi(ctx);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/webfetch/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAA8B,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,UAAU,GAAG,aAAa,CAAC;AAEjC,SAAS,cAAc,CAAC,MAAc;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACjG,OAAO,KAAK,CAAC;IACd,CAAC;IAED,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QAChG,OAAO,IAAI,CAAC;IACb,CAAC;IAED,mDAAmD;IACnD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,OAAO,CAAC,GAAqB;IACrC,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO;IACvB,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,WAAW,EAAgB;IACxC,yGAAyG;IACzG,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC1B,OAAO;IACR,CAAC;IAED,EAAE,CAAC,YAAY,CAAoD;QAClE,GAAG,QAAQ;QACX,UAAU,EAAE,kBAAkB;QAC9B,YAAY,EAAE,oBAAoB;KAClC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,OAAO,CAAC,GAAG,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC/C,OAAO,CAAC,GAAG,CAAC,CAAC;IACd,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { ExtensionAPI, ExtensionContext } from \"../../types.ts\";\n\nimport { renderWebfetchCall, renderWebfetchResult } from \"./webfetch/renderers.ts\";\nimport { type WebfetchRenderDetails, webfetch } from \"./webfetch/tool.ts\";\n\nconst ENABLE_ENV = \"PI_WEBFETCH\";\nconst STATUS_KEY = \"pi-webfetch\";\nconst WIDGET_KEY = \"pi-webfetch\";\n\nfunction parseEnableEnv(envVar: string): boolean {\n\tconst envValue = process.env[envVar];\n\tif (!envValue) {\n\t\treturn true;\n\t}\n\n\tconst normalized = envValue.trim().toLowerCase();\n\tif (normalized === \"0\" || normalized === \"false\" || normalized === \"no\" || normalized === \"off\") {\n\t\treturn false;\n\t}\n\n\tif (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\") {\n\t\treturn true;\n\t}\n\n\t// Unknown values fall back to default-on behavior.\n\treturn true;\n}\n\nexport function isWebfetchEnabled(): boolean {\n\treturn parseEnableEnv(ENABLE_ENV);\n}\n\nfunction clearUi(ctx: ExtensionContext): void {\n\tif (!ctx.hasUI) return;\n\tctx.ui.setStatus(STATUS_KEY, undefined);\n\tctx.ui.setWidget(WIDGET_KEY, undefined);\n}\n\n/**\n * pi-webfetch — URL retrieval for the pi coding agent.\n *\n * Registers one LLM-callable tool:\n * - webfetch — fetch URL content as markdown, text, or html.\n */\nexport default function (pi: ExtensionAPI): void {\n\t// When PI_WEBFETCH disables the extension, keep factory callable but skip all registration side effects.\n\tif (!isWebfetchEnabled()) {\n\t\treturn;\n\t}\n\n\tpi.registerTool<typeof webfetch.parameters, WebfetchRenderDetails>({\n\t\t...webfetch,\n\t\trenderCall: renderWebfetchCall,\n\t\trenderResult: renderWebfetchResult,\n\t});\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tclearUi(ctx);\n\t});\n\n\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\tclearUi(ctx);\n\t});\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/content.ts"],"names":[],"mappings":"AA4BA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa/C;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUvD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import TurndownService from "turndown";
|
|
2
|
+
const TAGS_TO_REMOVE = /<(script|style|noscript|iframe|object|embed|meta|link)\b[^>]*>[\s\S]*?<\/\1>/gi;
|
|
3
|
+
const VOID_TAGS_TO_REMOVE = /<(script|style|noscript|iframe|object|embed|meta|link)\b[^>]*\/?>/gi;
|
|
4
|
+
const BLOCK_BREAK_TAGS = /<\/?(address|article|aside|blockquote|br|dd|div|dl|dt|figcaption|figure|footer|h[1-6]|header|hr|li|main|nav|ol|p|pre|section|table|tbody|td|tfoot|th|thead|tr|ul)\b[^>]*>/gi;
|
|
5
|
+
const TAGS = /<[^>]+>/g;
|
|
6
|
+
const WHITESPACE = /[\t\f\v ]+/g;
|
|
7
|
+
const NEWLINE_RUN = /\n{3,}/g;
|
|
8
|
+
const ENTITIES = {
|
|
9
|
+
amp: "&",
|
|
10
|
+
apos: "'",
|
|
11
|
+
gt: ">",
|
|
12
|
+
lt: "<",
|
|
13
|
+
nbsp: " ",
|
|
14
|
+
quot: '"',
|
|
15
|
+
};
|
|
16
|
+
const turndownService = new TurndownService({
|
|
17
|
+
headingStyle: "atx",
|
|
18
|
+
hr: "---",
|
|
19
|
+
bulletListMarker: "-",
|
|
20
|
+
codeBlockStyle: "fenced",
|
|
21
|
+
emDelimiter: "*",
|
|
22
|
+
});
|
|
23
|
+
turndownService.remove(["script", "style", "noscript", "iframe", "object", "embed", "meta", "link"]);
|
|
24
|
+
export function htmlToMarkdown(html) {
|
|
25
|
+
return turndownService.turndown(html).trim();
|
|
26
|
+
}
|
|
27
|
+
export function htmlToText(html) {
|
|
28
|
+
return decodeHtmlEntities(html
|
|
29
|
+
.replace(TAGS_TO_REMOVE, "")
|
|
30
|
+
.replace(VOID_TAGS_TO_REMOVE, "")
|
|
31
|
+
.replace(BLOCK_BREAK_TAGS, "\n")
|
|
32
|
+
.replace(TAGS, "")
|
|
33
|
+
.replace(WHITESPACE, " ")
|
|
34
|
+
.replace(/[ \t]+\n/g, "\n")
|
|
35
|
+
.replace(/\n[ \t]+/g, "\n")
|
|
36
|
+
.replace(NEWLINE_RUN, "\n\n")
|
|
37
|
+
.trim());
|
|
38
|
+
}
|
|
39
|
+
export function decodeHtmlEntities(text) {
|
|
40
|
+
return text.replace(/&(#x[\da-f]+|#\d+|[a-z]+);/gi, (_match, entity) => {
|
|
41
|
+
if (entity.startsWith("#x")) {
|
|
42
|
+
return decodeCodePoint(Number.parseInt(entity.slice(2), 16));
|
|
43
|
+
}
|
|
44
|
+
if (entity.startsWith("#")) {
|
|
45
|
+
return decodeCodePoint(Number.parseInt(entity.slice(1), 10));
|
|
46
|
+
}
|
|
47
|
+
return ENTITIES[entity.toLowerCase()] ?? `&${entity};`;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function decodeCodePoint(value) {
|
|
51
|
+
if (!Number.isFinite(value))
|
|
52
|
+
return "";
|
|
53
|
+
try {
|
|
54
|
+
return String.fromCodePoint(value);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/content.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,UAAU,CAAC;AAEvC,MAAM,cAAc,GAAG,gFAAgF,CAAC;AACxG,MAAM,mBAAmB,GAAG,qEAAqE,CAAC;AAClG,MAAM,gBAAgB,GACrB,6KAA6K,CAAC;AAC/K,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,UAAU,GAAG,aAAa,CAAC;AACjC,MAAM,WAAW,GAAG,SAAS,CAAC;AAE9B,MAAM,QAAQ,GAAqC;IAClD,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACT,CAAC;AAEF,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;IAC3C,YAAY,EAAE,KAAK;IACnB,EAAE,EAAE,KAAK;IACT,gBAAgB,EAAE,GAAG;IACrB,cAAc,EAAE,QAAQ;IACxB,WAAW,EAAE,GAAG;CAChB,CAAC,CAAC;AACH,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAErG,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,OAAO,kBAAkB,CACxB,IAAI;SACF,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;SAC/B,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,IAAI,EAAE,CACR,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,EAAE;QAC9E,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC;IACxD,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,CAAC;QACJ,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC","sourcesContent":["import TurndownService from \"turndown\";\n\nconst TAGS_TO_REMOVE = /<(script|style|noscript|iframe|object|embed|meta|link)\\b[^>]*>[\\s\\S]*?<\\/\\1>/gi;\nconst VOID_TAGS_TO_REMOVE = /<(script|style|noscript|iframe|object|embed|meta|link)\\b[^>]*\\/?>/gi;\nconst BLOCK_BREAK_TAGS =\n\t/<\\/?(address|article|aside|blockquote|br|dd|div|dl|dt|figcaption|figure|footer|h[1-6]|header|hr|li|main|nav|ol|p|pre|section|table|tbody|td|tfoot|th|thead|tr|ul)\\b[^>]*>/gi;\nconst TAGS = /<[^>]+>/g;\nconst WHITESPACE = /[\\t\\f\\v ]+/g;\nconst NEWLINE_RUN = /\\n{3,}/g;\n\nconst ENTITIES: Readonly<Record<string, string>> = {\n\tamp: \"&\",\n\tapos: \"'\",\n\tgt: \">\",\n\tlt: \"<\",\n\tnbsp: \" \",\n\tquot: '\"',\n};\n\nconst turndownService = new TurndownService({\n\theadingStyle: \"atx\",\n\thr: \"---\",\n\tbulletListMarker: \"-\",\n\tcodeBlockStyle: \"fenced\",\n\temDelimiter: \"*\",\n});\nturndownService.remove([\"script\", \"style\", \"noscript\", \"iframe\", \"object\", \"embed\", \"meta\", \"link\"]);\n\nexport function htmlToMarkdown(html: string): string {\n\treturn turndownService.turndown(html).trim();\n}\n\nexport function htmlToText(html: string): string {\n\treturn decodeHtmlEntities(\n\t\thtml\n\t\t\t.replace(TAGS_TO_REMOVE, \"\")\n\t\t\t.replace(VOID_TAGS_TO_REMOVE, \"\")\n\t\t\t.replace(BLOCK_BREAK_TAGS, \"\\n\")\n\t\t\t.replace(TAGS, \"\")\n\t\t\t.replace(WHITESPACE, \" \")\n\t\t\t.replace(/[ \\t]+\\n/g, \"\\n\")\n\t\t\t.replace(/\\n[ \\t]+/g, \"\\n\")\n\t\t\t.replace(NEWLINE_RUN, \"\\n\\n\")\n\t\t\t.trim(),\n\t);\n}\n\nexport function decodeHtmlEntities(text: string): string {\n\treturn text.replace(/&(#x[\\da-f]+|#\\d+|[a-z]+);/gi, (_match, entity: string) => {\n\t\tif (entity.startsWith(\"#x\")) {\n\t\t\treturn decodeCodePoint(Number.parseInt(entity.slice(2), 16));\n\t\t}\n\t\tif (entity.startsWith(\"#\")) {\n\t\t\treturn decodeCodePoint(Number.parseInt(entity.slice(1), 10));\n\t\t}\n\t\treturn ENTITIES[entity.toLowerCase()] ?? `&${entity};`;\n\t});\n}\n\nfunction decodeCodePoint(value: number): string {\n\tif (!Number.isFinite(value)) return \"\";\n\ttry {\n\t\treturn String.fromCodePoint(value);\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class InvalidWebfetchUrlError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class WebfetchTimeoutError extends Error {
|
|
5
|
+
constructor(message: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class WebfetchResponseTooLargeError extends Error {
|
|
8
|
+
constructor(message: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class WebfetchAbortError extends Error {
|
|
11
|
+
constructor(message: string);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,uBAAwB,SAAQ,KAAK;IACjD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IACvD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class InvalidWebfetchUrlError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "InvalidWebfetchUrlError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class WebfetchTimeoutError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = "WebfetchTimeoutError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class WebfetchResponseTooLargeError extends Error {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = "WebfetchResponseTooLargeError";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class WebfetchAbortError extends Error {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = "WebfetchAbortError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACjD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACvC,CAAC;CACD;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACpC,CAAC;CACD;AAED,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACvD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC7C,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAClC,CAAC;CACD","sourcesContent":["export class InvalidWebfetchUrlError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"InvalidWebfetchUrlError\";\n\t}\n}\n\nexport class WebfetchTimeoutError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"WebfetchTimeoutError\";\n\t}\n}\n\nexport class WebfetchResponseTooLargeError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"WebfetchResponseTooLargeError\";\n\t}\n}\n\nexport class WebfetchAbortError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"WebfetchAbortError\";\n\t}\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const MAX_RESPONSE_SIZE_BYTES: number;
|
|
2
|
+
export declare const DEFAULT_TIMEOUT_SECONDS = 30;
|
|
3
|
+
export declare const MAX_TIMEOUT_SECONDS = 120;
|
|
4
|
+
export type WebfetchFormat = "markdown" | "text" | "html";
|
|
5
|
+
export interface FetchOptions {
|
|
6
|
+
url: string;
|
|
7
|
+
format: WebfetchFormat;
|
|
8
|
+
timeoutSeconds?: number;
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
}
|
|
11
|
+
export interface FetchResult {
|
|
12
|
+
url: string;
|
|
13
|
+
status: number;
|
|
14
|
+
statusText: string;
|
|
15
|
+
contentType: string;
|
|
16
|
+
bytes: number;
|
|
17
|
+
body: Uint8Array;
|
|
18
|
+
truncated: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function fetchUrl(options: FetchOptions): Promise<FetchResult>;
|
|
21
|
+
export declare function validateUrl(url: string): void;
|
|
22
|
+
export declare function clampTimeout(timeoutSeconds: number | undefined): number;
|
|
23
|
+
export declare function buildAcceptHeader(format: WebfetchFormat): string;
|
|
24
|
+
//# sourceMappingURL=fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../../../../src/core/extensions/builtin/webfetch/webfetch/fetcher.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,uBAAuB,QAAkB,CAAC;AACvD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAKvC,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA+B1E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAU7C;AAED,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIvE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAShE"}
|