indusagi-coding-agent 0.1.58 → 0.1.60
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 +55 -48
- package/CREDITS.md +19 -0
- package/NOTICE +7 -0
- package/README.md +65 -63
- package/dist/entry.js +19250 -0
- package/dist/types/addons/addons.test.d.ts +21 -0
- package/dist/types/addons/contract.d.ts +640 -0
- package/dist/types/addons/dispatch/event-dispatcher.d.ts +140 -0
- package/dist/types/addons/dispatch/index.d.ts +23 -0
- package/dist/types/addons/dispatch/tool-interceptor.d.ts +128 -0
- package/dist/types/addons/host.d.ts +246 -0
- package/dist/types/addons/index.d.ts +51 -0
- package/dist/types/addons/manifest.d.ts +56 -0
- package/dist/types/addons/sandbox.d.ts +103 -0
- package/dist/types/addons/surface.d.ts +42 -0
- package/dist/types/boot/auth-vault.d.ts +29 -0
- package/dist/types/boot/boot.d.ts +26 -0
- package/dist/types/boot/boot.test.d.ts +15 -0
- package/dist/types/boot/contract.d.ts +234 -0
- package/dist/types/boot/index.d.ts +20 -0
- package/dist/types/boot/invocation.d.ts +40 -0
- package/dist/types/boot/invocation.test.d.ts +8 -0
- package/dist/types/boot/runners/index.d.ts +11 -0
- package/dist/types/boot/runners/link-runner.d.ts +20 -0
- package/dist/types/boot/runners/oneshot-runner.d.ts +19 -0
- package/dist/types/boot/runners/registry.d.ts +30 -0
- package/dist/types/boot/runners/repl-runner.d.ts +19 -0
- package/dist/types/boot/runners/session-persist.test.d.ts +10 -0
- package/dist/types/boot/runners/session.d.ts +45 -0
- package/dist/types/boot/stages.d.ts +92 -0
- package/dist/types/boot/upgrade/apply.d.ts +45 -0
- package/dist/types/boot/upgrade/index.d.ts +13 -0
- package/dist/types/boot/upgrade/upgrades.d.ts +126 -0
- package/dist/types/briefing/briefing.test.d.ts +15 -0
- package/dist/types/briefing/compose.d.ts +37 -0
- package/dist/types/briefing/contract.d.ts +686 -0
- package/dist/types/briefing/index.d.ts +27 -0
- package/dist/types/briefing/macros.d.ts +206 -0
- package/dist/types/briefing/skills.d.ts +67 -0
- package/dist/types/capability-deck/bridge-ledger/index.d.ts +25 -0
- package/dist/types/capability-deck/bridge-ledger/key.d.ts +65 -0
- package/dist/types/capability-deck/bridge-ledger/ledger.d.ts +129 -0
- package/dist/types/capability-deck/bridge-ledger/network.d.ts +115 -0
- package/dist/types/capability-deck/builtin-bridge.d.ts +114 -0
- package/dist/types/capability-deck/capability-deck.test.d.ts +18 -0
- package/dist/types/capability-deck/cards/bg-process-card.d.ts +99 -0
- package/dist/types/capability-deck/cards/index.d.ts +30 -0
- package/dist/types/capability-deck/cards/memory-card.d.ts +69 -0
- package/dist/types/capability-deck/cards/saas-card.d.ts +78 -0
- package/dist/types/capability-deck/cards/task-card.d.ts +82 -0
- package/dist/types/capability-deck/cards/todo-card.d.ts +78 -0
- package/dist/types/capability-deck/contract.d.ts +317 -0
- package/dist/types/capability-deck/index.d.ts +46 -0
- package/dist/types/capability-deck/manifest.d.ts +60 -0
- package/dist/types/capability-deck/provision.d.ts +76 -0
- package/dist/types/channels/channels.test.d.ts +15 -0
- package/dist/types/channels/contract.d.ts +489 -0
- package/dist/types/channels/framer.d.ts +49 -0
- package/dist/types/channels/index.d.ts +24 -0
- package/dist/types/channels/link/dialog.d.ts +138 -0
- package/dist/types/channels/link/driver.d.ts +81 -0
- package/dist/types/channels/link/index.d.ts +13 -0
- package/dist/types/channels/link/server.d.ts +70 -0
- package/dist/types/channels/oneshot.d.ts +37 -0
- package/dist/types/channels/ops.d.ts +89 -0
- package/dist/types/channels/session-ops.d.ts +80 -0
- package/dist/types/conductor/catalog/catalog.d.ts +87 -0
- package/dist/types/conductor/catalog/index.d.ts +14 -0
- package/dist/types/conductor/catalog/matcher.d.ts +47 -0
- package/dist/types/conductor/conductor.d.ts +157 -0
- package/dist/types/conductor/conductor.test.d.ts +10 -0
- package/dist/types/conductor/contract.d.ts +547 -0
- package/dist/types/conductor/index.d.ts +23 -0
- package/dist/types/conductor/signal-hub/hub.d.ts +83 -0
- package/dist/types/conductor/signal-hub/index.d.ts +19 -0
- package/dist/types/conductor/signal-hub/translate.d.ts +74 -0
- package/dist/types/conductor/skill-parse/index.d.ts +10 -0
- package/dist/types/conductor/skill-parse/parse.d.ts +67 -0
- package/dist/types/conductor/submit.test.d.ts +28 -0
- package/dist/types/conductor/transcript-store/index.d.ts +16 -0
- package/dist/types/conductor/transcript-store/serialize.d.ts +106 -0
- package/dist/types/conductor/transcript-store/store.d.ts +170 -0
- package/dist/types/console/components/Banner.d.ts +54 -0
- package/dist/types/console/components/Composer.d.ts +37 -0
- package/dist/types/console/components/StatusBar.d.ts +31 -0
- package/dist/types/console/components/TerminalConsole.d.ts +32 -0
- package/dist/types/console/console.test.d.ts +19 -0
- package/dist/types/console/contract.d.ts +562 -0
- package/dist/types/console/index.d.ts +31 -0
- package/dist/types/console/input/complete.d.ts +120 -0
- package/dist/types/console/input/dir-reader.d.ts +28 -0
- package/dist/types/console/input/index.d.ts +24 -0
- package/dist/types/console/input/input.test.d.ts +14 -0
- package/dist/types/console/input/keymap.d.ts +184 -0
- package/dist/types/console/input/paste.d.ts +131 -0
- package/dist/types/console/mount.d.ts +53 -0
- package/dist/types/console/overlays/auth.d.ts +31 -0
- package/dist/types/console/overlays/host.d.ts +44 -0
- package/dist/types/console/overlays/index.d.ts +13 -0
- package/dist/types/console/overlays/pickers.d.ts +37 -0
- package/dist/types/console/overlays/sessions.d.ts +29 -0
- package/dist/types/console/reducer.d.ts +51 -0
- package/dist/types/console/slash/builtins.d.ts +33 -0
- package/dist/types/console/slash/commands/dynamic.d.ts +57 -0
- package/dist/types/console/slash/commands/dynamic.test.d.ts +9 -0
- package/dist/types/console/slash/commands/integrations.d.ts +28 -0
- package/dist/types/console/slash/commands/integrations.test.d.ts +18 -0
- package/dist/types/console/slash/commands/shared.d.ts +72 -0
- package/dist/types/console/slash/commands/transcript.d.ts +24 -0
- package/dist/types/console/slash/commands/transcript.test.d.ts +10 -0
- package/dist/types/console/slash/commands/workbench.d.ts +21 -0
- package/dist/types/console/slash/commands/workbench.test.d.ts +10 -0
- package/dist/types/console/slash/index.d.ts +34 -0
- package/dist/types/console/slash/registry.d.ts +90 -0
- package/dist/types/console/slash/resolve.d.ts +109 -0
- package/dist/types/console/slash/slash.test.d.ts +18 -0
- package/dist/types/console/startup.d.ts +119 -0
- package/dist/types/console/theme/adapter.d.ts +60 -0
- package/dist/types/console/theme/index.d.ts +18 -0
- package/dist/types/console/theme/palette.d.ts +42 -0
- package/dist/types/console/theme/resolve.d.ts +45 -0
- package/dist/types/console/theme/theme.test.d.ts +16 -0
- package/dist/types/console/theme/tokens.d.ts +40 -0
- package/dist/types/entry.d.ts +17 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/insight/channel.d.ts +45 -0
- package/dist/types/insight/contract.d.ts +411 -0
- package/dist/types/insight/index.d.ts +26 -0
- package/dist/types/insight/insight.test.d.ts +17 -0
- package/dist/types/insight/recorder.d.ts +63 -0
- package/dist/types/insight/redaction.d.ts +44 -0
- package/dist/types/insight/replay.d.ts +77 -0
- package/dist/types/insight/sampling.d.ts +84 -0
- package/dist/types/insight/serialize.d.ts +54 -0
- package/dist/types/insight/sinks/console.d.ts +36 -0
- package/dist/types/insight/sinks/file.d.ts +37 -0
- package/dist/types/insight/sinks/index.d.ts +16 -0
- package/dist/types/insight/sinks/stream.d.ts +53 -0
- package/dist/types/kit/clipboard-image.d.ts +40 -0
- package/dist/types/kit/external-editor.d.ts +35 -0
- package/dist/types/kit/image.d.ts +102 -0
- package/dist/types/kit/index.d.ts +29 -0
- package/dist/types/kit/kit.test.d.ts +13 -0
- package/dist/types/kit/shell.d.ts +50 -0
- package/dist/types/kit/tool-fetch.d.ts +165 -0
- package/dist/types/launch/catalog.d.ts +51 -0
- package/dist/types/launch/contract.d.ts +385 -0
- package/dist/types/launch/credentials.d.ts +112 -0
- package/dist/types/launch/index.d.ts +28 -0
- package/dist/types/launch/invocation/attachments.d.ts +72 -0
- package/dist/types/launch/invocation/flags.d.ts +59 -0
- package/dist/types/launch/invocation/index.d.ts +23 -0
- package/dist/types/launch/invocation/read.d.ts +52 -0
- package/dist/types/launch/invocation/usage.d.ts +25 -0
- package/dist/types/launch/launch.test.d.ts +20 -0
- package/dist/types/launch/oauth.d.ts +88 -0
- package/dist/types/launch/packages.d.ts +75 -0
- package/dist/types/launch/packages.test.d.ts +15 -0
- package/dist/types/launch/pickers.d.ts +97 -0
- package/dist/types/runtime-bridge/bridges/_drive.d.ts +74 -0
- package/dist/types/runtime-bridge/bridges/builtins.d.ts +77 -0
- package/dist/types/runtime-bridge/bridges/claude-cli.d.ts +37 -0
- package/dist/types/runtime-bridge/bridges/codex-cli.d.ts +27 -0
- package/dist/types/runtime-bridge/bridges/index.d.ts +15 -0
- package/dist/types/runtime-bridge/bridges/indusagi-cli.d.ts +36 -0
- package/dist/types/runtime-bridge/broker.d.ts +182 -0
- package/dist/types/runtime-bridge/contract.d.ts +436 -0
- package/dist/types/runtime-bridge/index.d.ts +21 -0
- package/dist/types/runtime-bridge/runtime-bridge.test.d.ts +17 -0
- package/dist/types/runtime-bridge/sink.d.ts +59 -0
- package/dist/types/sessions/contract.d.ts +79 -0
- package/dist/types/sessions/index.d.ts +11 -0
- package/dist/types/sessions/library.d.ts +95 -0
- package/dist/types/sessions/sessions.test.d.ts +11 -0
- package/dist/types/settings/contract.d.ts +116 -0
- package/dist/types/settings/index.d.ts +13 -0
- package/dist/types/settings/manager.d.ts +109 -0
- package/dist/types/settings/settings.test.d.ts +16 -0
- package/dist/types/transcript-export/index.d.ts +20 -0
- package/dist/types/transcript-export/publish.d.ts +81 -0
- package/dist/types/transcript-export/sgr.d.ts +90 -0
- package/dist/types/transcript-export/template.d.ts +64 -0
- package/dist/types/transcript-export/theme-bridge.d.ts +99 -0
- package/dist/types/transcript-export/transcript-export.test.d.ts +16 -0
- package/dist/types/window-budget/budget/estimate.d.ts +47 -0
- package/dist/types/window-budget/budget/gate.d.ts +37 -0
- package/dist/types/window-budget/budget/index.d.ts +14 -0
- package/dist/types/window-budget/budget/slice.d.ts +38 -0
- package/dist/types/window-budget/condenser.d.ts +59 -0
- package/dist/types/window-budget/contract.d.ts +182 -0
- package/dist/types/window-budget/index.d.ts +15 -0
- package/dist/types/window-budget/summarize/condense.d.ts +70 -0
- package/dist/types/window-budget/summarize/index.d.ts +12 -0
- package/dist/types/window-budget/summarize/prompt.d.ts +56 -0
- package/dist/types/window-budget/window-budget.test.d.ts +18 -0
- package/dist/types/workspace/brand.d.ts +20 -0
- package/dist/types/workspace/index.d.ts +11 -0
- package/dist/types/workspace/locator.d.ts +50 -0
- package/dist/types/workspace/runtime-detect.d.ts +56 -0
- package/package.json +43 -62
- package/LICENSE +0 -8
- package/LICENSE-THIRD-PARTY.txt +0 -30
- package/demos/README.md +0 -12
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -30
- package/dist/cli.js.map +0 -1
- package/dist/command-line/args.d.ts +0 -59
- package/dist/command-line/args.d.ts.map +0 -1
- package/dist/command-line/args.js +0 -332
- package/dist/command-line/args.js.map +0 -1
- package/dist/command-line/config-selector.d.ts +0 -17
- package/dist/command-line/config-selector.d.ts.map +0 -1
- package/dist/command-line/config-selector.js +0 -34
- package/dist/command-line/config-selector.js.map +0 -1
- package/dist/command-line/file-processor.d.ts +0 -15
- package/dist/command-line/file-processor.d.ts.map +0 -1
- package/dist/command-line/file-processor.js +0 -73
- package/dist/command-line/file-processor.js.map +0 -1
- package/dist/command-line/list-models.d.ts +0 -9
- package/dist/command-line/list-models.d.ts.map +0 -1
- package/dist/command-line/list-models.js +0 -74
- package/dist/command-line/list-models.js.map +0 -1
- package/dist/command-line/login-handler.d.ts +0 -94
- package/dist/command-line/login-handler.d.ts.map +0 -1
- package/dist/command-line/login-handler.js +0 -794
- package/dist/command-line/login-handler.js.map +0 -1
- package/dist/command-line/session-picker.d.ts +0 -10
- package/dist/command-line/session-picker.d.ts.map +0 -1
- package/dist/command-line/session-picker.js +0 -60
- package/dist/command-line/session-picker.js.map +0 -1
- package/dist/config.d.ts +0 -31
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -143
- package/dist/config.js.map +0 -1
- package/dist/dev/observe-deep.d.ts +0 -2
- package/dist/dev/observe-deep.d.ts.map +0 -1
- package/dist/dev/observe-deep.js +0 -333
- package/dist/dev/observe-deep.js.map +0 -1
- package/dist/dev/observe-smoke.d.ts +0 -2
- package/dist/dev/observe-smoke.d.ts.map +0 -1
- package/dist/dev/observe-smoke.js +0 -264
- package/dist/dev/observe-smoke.js.map +0 -1
- package/dist/helpers/array.d.ts +0 -438
- package/dist/helpers/array.d.ts.map +0 -1
- package/dist/helpers/array.js +0 -692
- package/dist/helpers/array.js.map +0 -1
- package/dist/helpers/changelog.d.ts +0 -20
- package/dist/helpers/changelog.d.ts.map +0 -1
- package/dist/helpers/changelog.js +0 -79
- package/dist/helpers/changelog.js.map +0 -1
- package/dist/helpers/clipboard-image.d.ts +0 -11
- package/dist/helpers/clipboard-image.d.ts.map +0 -1
- package/dist/helpers/clipboard-image.js +0 -111
- package/dist/helpers/clipboard-image.js.map +0 -1
- package/dist/helpers/clipboard.d.ts +0 -2
- package/dist/helpers/clipboard.d.ts.map +0 -1
- package/dist/helpers/clipboard.js +0 -72
- package/dist/helpers/clipboard.js.map +0 -1
- package/dist/helpers/color-formatter.d.ts +0 -318
- package/dist/helpers/color-formatter.d.ts.map +0 -1
- package/dist/helpers/color-formatter.js +0 -469
- package/dist/helpers/color-formatter.js.map +0 -1
- package/dist/helpers/data-transformer.d.ts +0 -391
- package/dist/helpers/data-transformer.d.ts.map +0 -1
- package/dist/helpers/data-transformer.js +0 -604
- package/dist/helpers/data-transformer.js.map +0 -1
- package/dist/helpers/date-formatter.d.ts +0 -316
- package/dist/helpers/date-formatter.d.ts.map +0 -1
- package/dist/helpers/date-formatter.js +0 -553
- package/dist/helpers/date-formatter.js.map +0 -1
- package/dist/helpers/error-handler.d.ts +0 -541
- package/dist/helpers/error-handler.d.ts.map +0 -1
- package/dist/helpers/error-handler.js +0 -726
- package/dist/helpers/error-handler.js.map +0 -1
- package/dist/helpers/file-operations.d.ts +0 -324
- package/dist/helpers/file-operations.d.ts.map +0 -1
- package/dist/helpers/file-operations.js +0 -543
- package/dist/helpers/file-operations.js.map +0 -1
- package/dist/helpers/frontmatter.d.ts +0 -273
- package/dist/helpers/frontmatter.d.ts.map +0 -1
- package/dist/helpers/frontmatter.js +0 -580
- package/dist/helpers/frontmatter.js.map +0 -1
- package/dist/helpers/git.d.ts +0 -2
- package/dist/helpers/git.d.ts.map +0 -1
- package/dist/helpers/git.js +0 -6
- package/dist/helpers/git.js.map +0 -1
- package/dist/helpers/image-convert.d.ts +0 -9
- package/dist/helpers/image-convert.d.ts.map +0 -1
- package/dist/helpers/image-convert.js +0 -41
- package/dist/helpers/image-convert.js.map +0 -1
- package/dist/helpers/image-resize.d.ts +0 -19
- package/dist/helpers/image-resize.d.ts.map +0 -1
- package/dist/helpers/image-resize.js +0 -143
- package/dist/helpers/image-resize.js.map +0 -1
- package/dist/helpers/json-formatter.d.ts +0 -267
- package/dist/helpers/json-formatter.d.ts.map +0 -1
- package/dist/helpers/json-formatter.js +0 -533
- package/dist/helpers/json-formatter.js.map +0 -1
- package/dist/helpers/logger.d.ts +0 -176
- package/dist/helpers/logger.d.ts.map +0 -1
- package/dist/helpers/logger.js +0 -346
- package/dist/helpers/logger.js.map +0 -1
- package/dist/helpers/markdown-formatter.d.ts +0 -235
- package/dist/helpers/markdown-formatter.d.ts.map +0 -1
- package/dist/helpers/markdown-formatter.js +0 -633
- package/dist/helpers/markdown-formatter.js.map +0 -1
- package/dist/helpers/mime.d.ts +0 -3
- package/dist/helpers/mime.d.ts.map +0 -1
- package/dist/helpers/mime.js +0 -46
- package/dist/helpers/mime.js.map +0 -1
- package/dist/helpers/open-auth-url.d.ts +0 -2
- package/dist/helpers/open-auth-url.d.ts.map +0 -1
- package/dist/helpers/open-auth-url.js +0 -59
- package/dist/helpers/open-auth-url.js.map +0 -1
- package/dist/helpers/path-validator.d.ts +0 -603
- package/dist/helpers/path-validator.d.ts.map +0 -1
- package/dist/helpers/path-validator.js +0 -895
- package/dist/helpers/path-validator.js.map +0 -1
- package/dist/helpers/photon.d.ts +0 -10
- package/dist/helpers/photon.d.ts.map +0 -1
- package/dist/helpers/photon.js +0 -132
- package/dist/helpers/photon.js.map +0 -1
- package/dist/helpers/shell.d.ts +0 -10
- package/dist/helpers/shell.d.ts.map +0 -1
- package/dist/helpers/shell.js +0 -142
- package/dist/helpers/shell.js.map +0 -1
- package/dist/helpers/sleep.d.ts +0 -5
- package/dist/helpers/sleep.d.ts.map +0 -1
- package/dist/helpers/sleep.js +0 -41
- package/dist/helpers/sleep.js.map +0 -1
- package/dist/helpers/string-formatter.d.ts +0 -609
- package/dist/helpers/string-formatter.d.ts.map +0 -1
- package/dist/helpers/string-formatter.js +0 -807
- package/dist/helpers/string-formatter.js.map +0 -1
- package/dist/helpers/tools-manager.d.ts +0 -5
- package/dist/helpers/tools-manager.d.ts.map +0 -1
- package/dist/helpers/tools-manager.js +0 -161
- package/dist/helpers/tools-manager.js.map +0 -1
- package/dist/helpers/type-guards.d.ts +0 -634
- package/dist/helpers/type-guards.d.ts.map +0 -1
- package/dist/helpers/type-guards.js +0 -671
- package/dist/helpers/type-guards.js.map +0 -1
- package/dist/index.d.ts +0 -41
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -40
- package/dist/index.js.map +0 -1
- package/dist/interfaces/index.d.ts +0 -16
- package/dist/interfaces/index.d.ts.map +0 -1
- package/dist/interfaces/index.js +0 -14
- package/dist/interfaces/index.js.map +0 -1
- package/dist/interfaces/print-mode.d.ts +0 -561
- package/dist/interfaces/print-mode.d.ts.map +0 -1
- package/dist/interfaces/print-mode.js +0 -633
- package/dist/interfaces/print-mode.js.map +0 -1
- package/dist/interfaces/react-ink/adapters/command-router.d.ts +0 -19
- package/dist/interfaces/react-ink/adapters/command-router.d.ts.map +0 -1
- package/dist/interfaces/react-ink/adapters/command-router.js +0 -674
- package/dist/interfaces/react-ink/adapters/command-router.js.map +0 -1
- package/dist/interfaces/react-ink/adapters/session-events.d.ts +0 -5
- package/dist/interfaces/react-ink/adapters/session-events.d.ts.map +0 -1
- package/dist/interfaces/react-ink/adapters/session-events.js +0 -255
- package/dist/interfaces/react-ink/adapters/session-events.js.map +0 -1
- package/dist/interfaces/react-ink/adapters/session-history.d.ts +0 -14
- package/dist/interfaces/react-ink/adapters/session-history.d.ts.map +0 -1
- package/dist/interfaces/react-ink/adapters/session-history.js +0 -83
- package/dist/interfaces/react-ink/adapters/session-history.js.map +0 -1
- package/dist/interfaces/react-ink/adapters/tool-state.d.ts +0 -4
- package/dist/interfaces/react-ink/adapters/tool-state.d.ts.map +0 -1
- package/dist/interfaces/react-ink/adapters/tool-state.js +0 -67
- package/dist/interfaces/react-ink/adapters/tool-state.js.map +0 -1
- package/dist/interfaces/react-ink/components/AppShell.d.ts +0 -17
- package/dist/interfaces/react-ink/components/AppShell.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/AppShell.js +0 -1535
- package/dist/interfaces/react-ink/components/AppShell.js.map +0 -1
- package/dist/interfaces/react-ink/components/ChangelogBlock.d.ts +0 -9
- package/dist/interfaces/react-ink/components/ChangelogBlock.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/ChangelogBlock.js +0 -58
- package/dist/interfaces/react-ink/components/ChangelogBlock.js.map +0 -1
- package/dist/interfaces/react-ink/components/DisplayBlockView.d.ts +0 -9
- package/dist/interfaces/react-ink/components/DisplayBlockView.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/DisplayBlockView.js +0 -11
- package/dist/interfaces/react-ink/components/DisplayBlockView.js.map +0 -1
- package/dist/interfaces/react-ink/components/Footer.d.ts +0 -12
- package/dist/interfaces/react-ink/components/Footer.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/Footer.js +0 -88
- package/dist/interfaces/react-ink/components/Footer.js.map +0 -1
- package/dist/interfaces/react-ink/components/Header.d.ts +0 -14
- package/dist/interfaces/react-ink/components/Header.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/Header.js +0 -24
- package/dist/interfaces/react-ink/components/Header.js.map +0 -1
- package/dist/interfaces/react-ink/components/MessageList.d.ts +0 -14
- package/dist/interfaces/react-ink/components/MessageList.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/MessageList.js +0 -43
- package/dist/interfaces/react-ink/components/MessageList.js.map +0 -1
- package/dist/interfaces/react-ink/components/MessageRow.d.ts +0 -13
- package/dist/interfaces/react-ink/components/MessageRow.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/MessageRow.js +0 -35
- package/dist/interfaces/react-ink/components/MessageRow.js.map +0 -1
- package/dist/interfaces/react-ink/components/PromptInput.d.ts +0 -35
- package/dist/interfaces/react-ink/components/PromptInput.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/PromptInput.js +0 -458
- package/dist/interfaces/react-ink/components/PromptInput.js.map +0 -1
- package/dist/interfaces/react-ink/components/StartupDiagnosticsBlock.d.ts +0 -9
- package/dist/interfaces/react-ink/components/StartupDiagnosticsBlock.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/StartupDiagnosticsBlock.js +0 -14
- package/dist/interfaces/react-ink/components/StartupDiagnosticsBlock.js.map +0 -1
- package/dist/interfaces/react-ink/components/StatusLine.d.ts +0 -10
- package/dist/interfaces/react-ink/components/StatusLine.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/StatusLine.js +0 -39
- package/dist/interfaces/react-ink/components/StatusLine.js.map +0 -1
- package/dist/interfaces/react-ink/components/TaskPanel.d.ts +0 -10
- package/dist/interfaces/react-ink/components/TaskPanel.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/TaskPanel.js +0 -23
- package/dist/interfaces/react-ink/components/TaskPanel.js.map +0 -1
- package/dist/interfaces/react-ink/components/ToolEventBlock.d.ts +0 -18
- package/dist/interfaces/react-ink/components/ToolEventBlock.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/ToolEventBlock.js +0 -61
- package/dist/interfaces/react-ink/components/ToolEventBlock.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/DialogFrame.d.ts +0 -9
- package/dist/interfaces/react-ink/components/dialogs/DialogFrame.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/DialogFrame.js +0 -6
- package/dist/interfaces/react-ink/components/dialogs/DialogFrame.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/LoginDialog.d.ts +0 -15
- package/dist/interfaces/react-ink/components/dialogs/LoginDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/LoginDialog.js +0 -10
- package/dist/interfaces/react-ink/components/dialogs/LoginDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/ModelDialog.d.ts +0 -10
- package/dist/interfaces/react-ink/components/dialogs/ModelDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/ModelDialog.js +0 -64
- package/dist/interfaces/react-ink/components/dialogs/ModelDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/OAuthDialog.d.ts +0 -10
- package/dist/interfaces/react-ink/components/dialogs/OAuthDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/OAuthDialog.js +0 -24
- package/dist/interfaces/react-ink/components/dialogs/OAuthDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/ScopedModelsDialog.d.ts +0 -10
- package/dist/interfaces/react-ink/components/dialogs/ScopedModelsDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/ScopedModelsDialog.js +0 -95
- package/dist/interfaces/react-ink/components/dialogs/ScopedModelsDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/SelectableDialog.d.ts +0 -17
- package/dist/interfaces/react-ink/components/dialogs/SelectableDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/SelectableDialog.js +0 -66
- package/dist/interfaces/react-ink/components/dialogs/SelectableDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/SessionDialog.d.ts +0 -11
- package/dist/interfaces/react-ink/components/dialogs/SessionDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/SessionDialog.js +0 -10
- package/dist/interfaces/react-ink/components/dialogs/SessionDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/SettingsDialog.d.ts +0 -15
- package/dist/interfaces/react-ink/components/dialogs/SettingsDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/SettingsDialog.js +0 -79
- package/dist/interfaces/react-ink/components/dialogs/SettingsDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/StartupSessionPicker.d.ts +0 -10
- package/dist/interfaces/react-ink/components/dialogs/StartupSessionPicker.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/StartupSessionPicker.js +0 -99
- package/dist/interfaces/react-ink/components/dialogs/StartupSessionPicker.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/ThemeDialog.d.ts +0 -8
- package/dist/interfaces/react-ink/components/dialogs/ThemeDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/ThemeDialog.js +0 -7
- package/dist/interfaces/react-ink/components/dialogs/ThemeDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/TreeDialog.d.ts +0 -9
- package/dist/interfaces/react-ink/components/dialogs/TreeDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/TreeDialog.js +0 -7
- package/dist/interfaces/react-ink/components/dialogs/TreeDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/UserMessageDialog.d.ts +0 -9
- package/dist/interfaces/react-ink/components/dialogs/UserMessageDialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/dialogs/UserMessageDialog.js +0 -7
- package/dist/interfaces/react-ink/components/dialogs/UserMessageDialog.js.map +0 -1
- package/dist/interfaces/react-ink/components/extensions/ExtensionComponentHost.d.ts +0 -30
- package/dist/interfaces/react-ink/components/extensions/ExtensionComponentHost.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/extensions/ExtensionComponentHost.js +0 -106
- package/dist/interfaces/react-ink/components/extensions/ExtensionComponentHost.js.map +0 -1
- package/dist/interfaces/react-ink/components/extensions/ExtensionDialogs.d.ts +0 -20
- package/dist/interfaces/react-ink/components/extensions/ExtensionDialogs.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/extensions/ExtensionDialogs.js +0 -145
- package/dist/interfaces/react-ink/components/extensions/ExtensionDialogs.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/AssistantMessage.d.ts +0 -12
- package/dist/interfaces/react-ink/components/messages/AssistantMessage.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/AssistantMessage.js +0 -20
- package/dist/interfaces/react-ink/components/messages/AssistantMessage.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/BashMessage.d.ts +0 -9
- package/dist/interfaces/react-ink/components/messages/BashMessage.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/BashMessage.js +0 -11
- package/dist/interfaces/react-ink/components/messages/BashMessage.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/BranchSummaryMessage.d.ts +0 -9
- package/dist/interfaces/react-ink/components/messages/BranchSummaryMessage.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/BranchSummaryMessage.js +0 -6
- package/dist/interfaces/react-ink/components/messages/BranchSummaryMessage.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/CompactionMessage.d.ts +0 -9
- package/dist/interfaces/react-ink/components/messages/CompactionMessage.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/CompactionMessage.js +0 -6
- package/dist/interfaces/react-ink/components/messages/CompactionMessage.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/CustomMessage.d.ts +0 -10
- package/dist/interfaces/react-ink/components/messages/CustomMessage.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/CustomMessage.js +0 -9
- package/dist/interfaces/react-ink/components/messages/CustomMessage.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/SkillInvocationMessage.d.ts +0 -8
- package/dist/interfaces/react-ink/components/messages/SkillInvocationMessage.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/SkillInvocationMessage.js +0 -10
- package/dist/interfaces/react-ink/components/messages/SkillInvocationMessage.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/ToolCallMessage.d.ts +0 -9
- package/dist/interfaces/react-ink/components/messages/ToolCallMessage.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/ToolCallMessage.js +0 -8
- package/dist/interfaces/react-ink/components/messages/ToolCallMessage.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/ToolResultBlock.d.ts +0 -12
- package/dist/interfaces/react-ink/components/messages/ToolResultBlock.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/ToolResultBlock.js +0 -8
- package/dist/interfaces/react-ink/components/messages/ToolResultBlock.js.map +0 -1
- package/dist/interfaces/react-ink/components/messages/UserMessage.d.ts +0 -10
- package/dist/interfaces/react-ink/components/messages/UserMessage.d.ts.map +0 -1
- package/dist/interfaces/react-ink/components/messages/UserMessage.js +0 -7
- package/dist/interfaces/react-ink/components/messages/UserMessage.js.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-agent-session.d.ts +0 -8
- package/dist/interfaces/react-ink/hooks/use-agent-session.d.ts.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-agent-session.js +0 -34
- package/dist/interfaces/react-ink/hooks/use-agent-session.js.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-app-keybindings.d.ts +0 -12
- package/dist/interfaces/react-ink/hooks/use-app-keybindings.d.ts.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-app-keybindings.js +0 -17
- package/dist/interfaces/react-ink/hooks/use-app-keybindings.js.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-footer-data.d.ts +0 -7
- package/dist/interfaces/react-ink/hooks/use-footer-data.d.ts.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-footer-data.js +0 -17
- package/dist/interfaces/react-ink/hooks/use-footer-data.js.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-prompt-submit.d.ts +0 -17
- package/dist/interfaces/react-ink/hooks/use-prompt-submit.d.ts.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-prompt-submit.js +0 -66
- package/dist/interfaces/react-ink/hooks/use-prompt-submit.js.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-session-history.d.ts +0 -8
- package/dist/interfaces/react-ink/hooks/use-session-history.d.ts.map +0 -1
- package/dist/interfaces/react-ink/hooks/use-session-history.js +0 -8
- package/dist/interfaces/react-ink/hooks/use-session-history.js.map +0 -1
- package/dist/interfaces/react-ink/index.d.ts +0 -8
- package/dist/interfaces/react-ink/index.d.ts.map +0 -1
- package/dist/interfaces/react-ink/index.js +0 -8
- package/dist/interfaces/react-ink/index.js.map +0 -1
- package/dist/interfaces/react-ink/interactive-mode.d.ts +0 -24
- package/dist/interfaces/react-ink/interactive-mode.d.ts.map +0 -1
- package/dist/interfaces/react-ink/interactive-mode.js +0 -57
- package/dist/interfaces/react-ink/interactive-mode.js.map +0 -1
- package/dist/interfaces/react-ink/render-root.d.ts +0 -19
- package/dist/interfaces/react-ink/render-root.d.ts.map +0 -1
- package/dist/interfaces/react-ink/render-root.js +0 -6
- package/dist/interfaces/react-ink/render-root.js.map +0 -1
- package/dist/interfaces/react-ink/state/reducer.d.ts +0 -51
- package/dist/interfaces/react-ink/state/reducer.d.ts.map +0 -1
- package/dist/interfaces/react-ink/state/reducer.js +0 -122
- package/dist/interfaces/react-ink/state/reducer.js.map +0 -1
- package/dist/interfaces/react-ink/state/store.d.ts +0 -4
- package/dist/interfaces/react-ink/state/store.d.ts.map +0 -1
- package/dist/interfaces/react-ink/state/store.js +0 -5
- package/dist/interfaces/react-ink/state/store.js.map +0 -1
- package/dist/interfaces/react-ink/state/ui-state.d.ts +0 -5
- package/dist/interfaces/react-ink/state/ui-state.d.ts.map +0 -1
- package/dist/interfaces/react-ink/state/ui-state.js +0 -20
- package/dist/interfaces/react-ink/state/ui-state.js.map +0 -1
- package/dist/interfaces/react-ink/theme-adapter.d.ts +0 -4
- package/dist/interfaces/react-ink/theme-adapter.d.ts.map +0 -1
- package/dist/interfaces/react-ink/theme-adapter.js +0 -15
- package/dist/interfaces/react-ink/theme-adapter.js.map +0 -1
- package/dist/interfaces/react-ink/types.d.ts +0 -51
- package/dist/interfaces/react-ink/types.d.ts.map +0 -1
- package/dist/interfaces/react-ink/types.js +0 -2
- package/dist/interfaces/react-ink/types.js.map +0 -1
- package/dist/interfaces/react-ink/utils/changelog.d.ts +0 -7
- package/dist/interfaces/react-ink/utils/changelog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/changelog.js +0 -40
- package/dist/interfaces/react-ink/utils/changelog.js.map +0 -1
- package/dist/interfaces/react-ink/utils/key-data.d.ts +0 -22
- package/dist/interfaces/react-ink/utils/key-data.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/key-data.js +0 -123
- package/dist/interfaces/react-ink/utils/key-data.js.map +0 -1
- package/dist/interfaces/react-ink/utils/message-groups.d.ts +0 -26
- package/dist/interfaces/react-ink/utils/message-groups.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/message-groups.js +0 -230
- package/dist/interfaces/react-ink/utils/message-groups.js.map +0 -1
- package/dist/interfaces/react-ink/utils/prompt-autocomplete.d.ts +0 -20
- package/dist/interfaces/react-ink/utils/prompt-autocomplete.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/prompt-autocomplete.js +0 -46
- package/dist/interfaces/react-ink/utils/prompt-autocomplete.js.map +0 -1
- package/dist/interfaces/react-ink/utils/selection-dialog.d.ts +0 -3
- package/dist/interfaces/react-ink/utils/selection-dialog.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/selection-dialog.js +0 -18
- package/dist/interfaces/react-ink/utils/selection-dialog.js.map +0 -1
- package/dist/interfaces/react-ink/utils/session-actions.d.ts +0 -10
- package/dist/interfaces/react-ink/utils/session-actions.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/session-actions.js +0 -66
- package/dist/interfaces/react-ink/utils/session-actions.js.map +0 -1
- package/dist/interfaces/react-ink/utils/slash-commands.d.ts +0 -10
- package/dist/interfaces/react-ink/utils/slash-commands.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/slash-commands.js +0 -111
- package/dist/interfaces/react-ink/utils/slash-commands.js.map +0 -1
- package/dist/interfaces/react-ink/utils/startup-diagnostics.d.ts +0 -7
- package/dist/interfaces/react-ink/utils/startup-diagnostics.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/startup-diagnostics.js +0 -111
- package/dist/interfaces/react-ink/utils/startup-diagnostics.js.map +0 -1
- package/dist/interfaces/react-ink/utils/tool-display.d.ts +0 -22
- package/dist/interfaces/react-ink/utils/tool-display.d.ts.map +0 -1
- package/dist/interfaces/react-ink/utils/tool-display.js +0 -349
- package/dist/interfaces/react-ink/utils/tool-display.js.map +0 -1
- package/dist/interfaces/service-api/rpc-client.d.ts +0 -1129
- package/dist/interfaces/service-api/rpc-client.d.ts.map +0 -1
- package/dist/interfaces/service-api/rpc-client.js +0 -1333
- package/dist/interfaces/service-api/rpc-client.js.map +0 -1
- package/dist/interfaces/service-api/rpc-mode.d.ts +0 -813
- package/dist/interfaces/service-api/rpc-mode.d.ts.map +0 -1
- package/dist/interfaces/service-api/rpc-mode.js +0 -1229
- package/dist/interfaces/service-api/rpc-mode.js.map +0 -1
- package/dist/interfaces/service-api/rpc-types.d.ts +0 -392
- package/dist/interfaces/service-api/rpc-types.d.ts.map +0 -1
- package/dist/interfaces/service-api/rpc-types.js +0 -22
- package/dist/interfaces/service-api/rpc-types.js.map +0 -1
- package/dist/interfaces/shared.d.ts +0 -386
- package/dist/interfaces/shared.d.ts.map +0 -1
- package/dist/interfaces/shared.js +0 -543
- package/dist/interfaces/shared.js.map +0 -1
- package/dist/interfaces/theme/dark.json +0 -91
- package/dist/interfaces/theme/light.json +0 -90
- package/dist/interfaces/theme/theme-schema.json +0 -339
- package/dist/interfaces/theme/theme.d.ts +0 -500
- package/dist/interfaces/theme/theme.d.ts.map +0 -1
- package/dist/interfaces/theme/theme.js +0 -1511
- package/dist/interfaces/theme/theme.js.map +0 -1
- package/dist/main.d.ts +0 -8
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -750
- package/dist/main.js.map +0 -1
- package/dist/migrations.d.ts +0 -8
- package/dist/migrations.d.ts.map +0 -1
- package/dist/migrations.js +0 -206
- package/dist/migrations.js.map +0 -1
- package/dist/observe.d.ts +0 -2
- package/dist/observe.d.ts.map +0 -1
- package/dist/observe.js +0 -2
- package/dist/observe.js.map +0 -1
- package/dist/runtime/agent-session.d.ts +0 -988
- package/dist/runtime/agent-session.d.ts.map +0 -1
- package/dist/runtime/agent-session.js +0 -3114
- package/dist/runtime/agent-session.js.map +0 -1
- package/dist/runtime/auth-storage.d.ts +0 -53
- package/dist/runtime/auth-storage.d.ts.map +0 -1
- package/dist/runtime/auth-storage.js +0 -378
- package/dist/runtime/auth-storage.js.map +0 -1
- package/dist/runtime/bash-executor.d.ts +0 -16
- package/dist/runtime/bash-executor.d.ts.map +0 -1
- package/dist/runtime/bash-executor.js +0 -270
- package/dist/runtime/bash-executor.js.map +0 -1
- package/dist/runtime/context-compression/branch-summarization.d.ts +0 -86
- package/dist/runtime/context-compression/branch-summarization.d.ts.map +0 -1
- package/dist/runtime/context-compression/branch-summarization.js +0 -242
- package/dist/runtime/context-compression/branch-summarization.js.map +0 -1
- package/dist/runtime/context-compression/compaction.d.ts +0 -121
- package/dist/runtime/context-compression/compaction.d.ts.map +0 -1
- package/dist/runtime/context-compression/compaction.js +0 -607
- package/dist/runtime/context-compression/compaction.js.map +0 -1
- package/dist/runtime/context-compression/index.d.ts +0 -35
- package/dist/runtime/context-compression/index.d.ts.map +0 -1
- package/dist/runtime/context-compression/index.js +0 -33
- package/dist/runtime/context-compression/index.js.map +0 -1
- package/dist/runtime/context-compression/utils.d.ts +0 -17
- package/dist/runtime/context-compression/utils.d.ts.map +0 -1
- package/dist/runtime/context-compression/utils.js +0 -117
- package/dist/runtime/context-compression/utils.js.map +0 -1
- package/dist/runtime/diagnostics.d.ts +0 -206
- package/dist/runtime/diagnostics.d.ts.map +0 -1
- package/dist/runtime/diagnostics.js +0 -144
- package/dist/runtime/diagnostics.js.map +0 -1
- package/dist/runtime/discover-packages.d.ts +0 -2
- package/dist/runtime/discover-packages.d.ts.map +0 -1
- package/dist/runtime/discover-packages.js +0 -59
- package/dist/runtime/discover-packages.js.map +0 -1
- package/dist/runtime/event-bus.d.ts +0 -9
- package/dist/runtime/event-bus.d.ts.map +0 -1
- package/dist/runtime/event-bus.js +0 -29
- package/dist/runtime/event-bus.js.map +0 -1
- package/dist/runtime/exec.d.ts +0 -13
- package/dist/runtime/exec.d.ts.map +0 -1
- package/dist/runtime/exec.js +0 -62
- package/dist/runtime/exec.js.map +0 -1
- package/dist/runtime/footer-data-provider.d.ts +0 -19
- package/dist/runtime/footer-data-provider.d.ts.map +0 -1
- package/dist/runtime/footer-data-provider.js +0 -122
- package/dist/runtime/footer-data-provider.js.map +0 -1
- package/dist/runtime/html-export/ansi-to-html.d.ts +0 -26
- package/dist/runtime/html-export/ansi-to-html.d.ts.map +0 -1
- package/dist/runtime/html-export/ansi-to-html.js +0 -253
- package/dist/runtime/html-export/ansi-to-html.js.map +0 -1
- package/dist/runtime/html-export/ansi-to-html.ts +0 -262
- package/dist/runtime/html-export/index.d.ts +0 -162
- package/dist/runtime/html-export/index.d.ts.map +0 -1
- package/dist/runtime/html-export/index.js +0 -350
- package/dist/runtime/html-export/index.js.map +0 -1
- package/dist/runtime/html-export/index.ts +0 -432
- package/dist/runtime/html-export/template.css +0 -905
- package/dist/runtime/html-export/template.html +0 -76
- package/dist/runtime/html-export/template.js +0 -1549
- package/dist/runtime/html-export/tool-renderer.d.ts +0 -18
- package/dist/runtime/html-export/tool-renderer.d.ts.map +0 -1
- package/dist/runtime/html-export/tool-renderer.js +0 -45
- package/dist/runtime/html-export/tool-renderer.js.map +0 -1
- package/dist/runtime/html-export/tool-renderer.ts +0 -80
- package/dist/runtime/html-export/vendor/highlight.min.js +0 -1244
- package/dist/runtime/html-export/vendor/marked.min.js +0 -74
- package/dist/runtime/index.d.ts +0 -35
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -35
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/keybindings.d.ts +0 -20
- package/dist/runtime/keybindings.d.ts.map +0 -1
- package/dist/runtime/keybindings.js +0 -109
- package/dist/runtime/keybindings.js.map +0 -1
- package/dist/runtime/lifecycle/index.d.ts +0 -4
- package/dist/runtime/lifecycle/index.d.ts.map +0 -1
- package/dist/runtime/lifecycle/index.js +0 -3
- package/dist/runtime/lifecycle/index.js.map +0 -1
- package/dist/runtime/lifecycle/loader.d.ts +0 -6
- package/dist/runtime/lifecycle/loader.d.ts.map +0 -1
- package/dist/runtime/lifecycle/loader.js +0 -179
- package/dist/runtime/lifecycle/loader.js.map +0 -1
- package/dist/runtime/lifecycle/runner.d.ts +0 -14
- package/dist/runtime/lifecycle/runner.d.ts.map +0 -1
- package/dist/runtime/lifecycle/runner.js +0 -58
- package/dist/runtime/lifecycle/runner.js.map +0 -1
- package/dist/runtime/lifecycle/types.d.ts +0 -139
- package/dist/runtime/lifecycle/types.d.ts.map +0 -1
- package/dist/runtime/lifecycle/types.js +0 -2
- package/dist/runtime/lifecycle/types.js.map +0 -1
- package/dist/runtime/messages.d.ts +0 -2
- package/dist/runtime/messages.d.ts.map +0 -1
- package/dist/runtime/messages.js +0 -2
- package/dist/runtime/messages.js.map +0 -1
- package/dist/runtime/model-registry.d.ts +0 -62
- package/dist/runtime/model-registry.d.ts.map +0 -1
- package/dist/runtime/model-registry.js +0 -446
- package/dist/runtime/model-registry.js.map +0 -1
- package/dist/runtime/model-resolver.d.ts +0 -35
- package/dist/runtime/model-resolver.d.ts.map +0 -1
- package/dist/runtime/model-resolver.js +0 -231
- package/dist/runtime/model-resolver.js.map +0 -1
- package/dist/runtime/observe.d.ts +0 -50
- package/dist/runtime/observe.d.ts.map +0 -1
- package/dist/runtime/observe.js +0 -233
- package/dist/runtime/observe.js.map +0 -1
- package/dist/runtime/package-manager.d.ts +0 -103
- package/dist/runtime/package-manager.d.ts.map +0 -1
- package/dist/runtime/package-manager.js +0 -583
- package/dist/runtime/package-manager.js.map +0 -1
- package/dist/runtime/plugins/index.d.ts +0 -13
- package/dist/runtime/plugins/index.d.ts.map +0 -1
- package/dist/runtime/plugins/index.js +0 -23
- package/dist/runtime/plugins/index.js.map +0 -1
- package/dist/runtime/plugins/loader.d.ts +0 -19
- package/dist/runtime/plugins/loader.d.ts.map +0 -1
- package/dist/runtime/plugins/loader.js +0 -415
- package/dist/runtime/plugins/loader.js.map +0 -1
- package/dist/runtime/plugins/runner.d.ts +0 -107
- package/dist/runtime/plugins/runner.d.ts.map +0 -1
- package/dist/runtime/plugins/runner.js +0 -468
- package/dist/runtime/plugins/runner.js.map +0 -1
- package/dist/runtime/plugins/types.d.ts +0 -862
- package/dist/runtime/plugins/types.d.ts.map +0 -1
- package/dist/runtime/plugins/types.js +0 -32
- package/dist/runtime/plugins/types.js.map +0 -1
- package/dist/runtime/plugins/wrapper.d.ts +0 -29
- package/dist/runtime/plugins/wrapper.d.ts.map +0 -1
- package/dist/runtime/plugins/wrapper.js +0 -129
- package/dist/runtime/plugins/wrapper.js.map +0 -1
- package/dist/runtime/prompt-templates.d.ts +0 -18
- package/dist/runtime/prompt-templates.d.ts.map +0 -1
- package/dist/runtime/prompt-templates.js +0 -203
- package/dist/runtime/prompt-templates.js.map +0 -1
- package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts +0 -19
- package/dist/runtime/providers/adapters/claude-cli-adapter.d.ts.map +0 -1
- package/dist/runtime/providers/adapters/claude-cli-adapter.js +0 -242
- package/dist/runtime/providers/adapters/claude-cli-adapter.js.map +0 -1
- package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts +0 -18
- package/dist/runtime/providers/adapters/codex-cli-adapter.d.ts.map +0 -1
- package/dist/runtime/providers/adapters/codex-cli-adapter.js +0 -177
- package/dist/runtime/providers/adapters/codex-cli-adapter.js.map +0 -1
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts +0 -21
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.d.ts.map +0 -1
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.js +0 -162
- package/dist/runtime/providers/adapters/indusagi-cli-adapter.js.map +0 -1
- package/dist/runtime/providers/adapters/utils.d.ts +0 -12
- package/dist/runtime/providers/adapters/utils.d.ts.map +0 -1
- package/dist/runtime/providers/adapters/utils.js +0 -122
- package/dist/runtime/providers/adapters/utils.js.map +0 -1
- package/dist/runtime/providers/builtins.d.ts +0 -3
- package/dist/runtime/providers/builtins.d.ts.map +0 -1
- package/dist/runtime/providers/builtins.js +0 -113
- package/dist/runtime/providers/builtins.js.map +0 -1
- package/dist/runtime/providers/provider-adapter-registry.d.ts +0 -11
- package/dist/runtime/providers/provider-adapter-registry.d.ts.map +0 -1
- package/dist/runtime/providers/provider-adapter-registry.js +0 -36
- package/dist/runtime/providers/provider-adapter-registry.js.map +0 -1
- package/dist/runtime/providers/provider-adapter.d.ts +0 -33
- package/dist/runtime/providers/provider-adapter.d.ts.map +0 -1
- package/dist/runtime/providers/provider-adapter.js +0 -2
- package/dist/runtime/providers/provider-adapter.js.map +0 -1
- package/dist/runtime/providers/provider-service.d.ts +0 -33
- package/dist/runtime/providers/provider-service.d.ts.map +0 -1
- package/dist/runtime/providers/provider-service.js +0 -157
- package/dist/runtime/providers/provider-service.js.map +0 -1
- package/dist/runtime/providers/types.d.ts +0 -29
- package/dist/runtime/providers/types.d.ts.map +0 -1
- package/dist/runtime/providers/types.js +0 -9
- package/dist/runtime/providers/types.js.map +0 -1
- package/dist/runtime/resource-loader.d.ts +0 -180
- package/dist/runtime/resource-loader.d.ts.map +0 -1
- package/dist/runtime/resource-loader.js +0 -530
- package/dist/runtime/resource-loader.js.map +0 -1
- package/dist/runtime/sdk.d.ts +0 -65
- package/dist/runtime/sdk.d.ts.map +0 -1
- package/dist/runtime/sdk.js +0 -402
- package/dist/runtime/sdk.js.map +0 -1
- package/dist/runtime/session-manager.d.ts +0 -448
- package/dist/runtime/session-manager.d.ts.map +0 -1
- package/dist/runtime/session-manager.js +0 -1177
- package/dist/runtime/session-manager.js.map +0 -1
- package/dist/runtime/settings-manager.d.ts +0 -234
- package/dist/runtime/settings-manager.d.ts.map +0 -1
- package/dist/runtime/settings-manager.js +0 -298
- package/dist/runtime/settings-manager.js.map +0 -1
- package/dist/runtime/skills.d.ts +0 -33
- package/dist/runtime/skills.d.ts.map +0 -1
- package/dist/runtime/skills.js +0 -277
- package/dist/runtime/skills.js.map +0 -1
- package/dist/runtime/subagents.d.ts +0 -29
- package/dist/runtime/subagents.d.ts.map +0 -1
- package/dist/runtime/subagents.js +0 -163
- package/dist/runtime/subagents.js.map +0 -1
- package/dist/runtime/system-prompt.d.ts +0 -16
- package/dist/runtime/system-prompt.d.ts.map +0 -1
- package/dist/runtime/system-prompt.js +0 -275
- package/dist/runtime/system-prompt.js.map +0 -1
- package/dist/runtime/task-session-manager.d.ts +0 -55
- package/dist/runtime/task-session-manager.d.ts.map +0 -1
- package/dist/runtime/task-session-manager.js +0 -410
- package/dist/runtime/task-session-manager.js.map +0 -1
- package/dist/runtime/timings.d.ts +0 -4
- package/dist/runtime/timings.d.ts.map +0 -1
- package/dist/runtime/timings.js +0 -41
- package/dist/runtime/timings.js.map +0 -1
- package/dist/runtime/todo-store.d.ts +0 -20
- package/dist/runtime/todo-store.d.ts.map +0 -1
- package/dist/runtime/todo-store.js +0 -60
- package/dist/runtime/todo-store.js.map +0 -1
- package/dist/runtime/tooling/bash.d.ts +0 -2
- package/dist/runtime/tooling/bash.d.ts.map +0 -1
- package/dist/runtime/tooling/bash.js +0 -2
- package/dist/runtime/tooling/bash.js.map +0 -1
- package/dist/runtime/tooling/bg-process.d.ts +0 -44
- package/dist/runtime/tooling/bg-process.d.ts.map +0 -1
- package/dist/runtime/tooling/bg-process.js +0 -55
- package/dist/runtime/tooling/bg-process.js.map +0 -1
- package/dist/runtime/tooling/composio-compat.d.ts +0 -169
- package/dist/runtime/tooling/composio-compat.d.ts.map +0 -1
- package/dist/runtime/tooling/composio-compat.js +0 -163
- package/dist/runtime/tooling/composio-compat.js.map +0 -1
- package/dist/runtime/tooling/edit-diff.d.ts +0 -9
- package/dist/runtime/tooling/edit-diff.d.ts.map +0 -1
- package/dist/runtime/tooling/edit-diff.js +0 -2
- package/dist/runtime/tooling/edit-diff.js.map +0 -1
- package/dist/runtime/tooling/edit.d.ts +0 -2
- package/dist/runtime/tooling/edit.d.ts.map +0 -1
- package/dist/runtime/tooling/edit.js +0 -2
- package/dist/runtime/tooling/edit.js.map +0 -1
- package/dist/runtime/tooling/find.d.ts +0 -2
- package/dist/runtime/tooling/find.d.ts.map +0 -1
- package/dist/runtime/tooling/find.js +0 -2
- package/dist/runtime/tooling/find.js.map +0 -1
- package/dist/runtime/tooling/grep.d.ts +0 -2
- package/dist/runtime/tooling/grep.d.ts.map +0 -1
- package/dist/runtime/tooling/grep.js +0 -2
- package/dist/runtime/tooling/grep.js.map +0 -1
- package/dist/runtime/tooling/index.d.ts +0 -248
- package/dist/runtime/tooling/index.d.ts.map +0 -1
- package/dist/runtime/tooling/index.js +0 -325
- package/dist/runtime/tooling/index.js.map +0 -1
- package/dist/runtime/tooling/ls.d.ts +0 -2
- package/dist/runtime/tooling/ls.d.ts.map +0 -1
- package/dist/runtime/tooling/ls.js +0 -2
- package/dist/runtime/tooling/ls.js.map +0 -1
- package/dist/runtime/tooling/memory.d.ts +0 -132
- package/dist/runtime/tooling/memory.d.ts.map +0 -1
- package/dist/runtime/tooling/memory.js +0 -171
- package/dist/runtime/tooling/memory.js.map +0 -1
- package/dist/runtime/tooling/path-utils.d.ts +0 -2
- package/dist/runtime/tooling/path-utils.d.ts.map +0 -1
- package/dist/runtime/tooling/path-utils.js +0 -2
- package/dist/runtime/tooling/path-utils.js.map +0 -1
- package/dist/runtime/tooling/read.d.ts +0 -2
- package/dist/runtime/tooling/read.d.ts.map +0 -1
- package/dist/runtime/tooling/read.js +0 -2
- package/dist/runtime/tooling/read.js.map +0 -1
- package/dist/runtime/tooling/registry.d.ts +0 -18
- package/dist/runtime/tooling/registry.d.ts.map +0 -1
- package/dist/runtime/tooling/registry.js +0 -166
- package/dist/runtime/tooling/registry.js.map +0 -1
- package/dist/runtime/tooling/task.d.ts +0 -37
- package/dist/runtime/tooling/task.d.ts.map +0 -1
- package/dist/runtime/tooling/task.js +0 -65
- package/dist/runtime/tooling/task.js.map +0 -1
- package/dist/runtime/tooling/todo.d.ts +0 -34
- package/dist/runtime/tooling/todo.d.ts.map +0 -1
- package/dist/runtime/tooling/todo.js +0 -96
- package/dist/runtime/tooling/todo.js.map +0 -1
- package/dist/runtime/tooling/truncate.d.ts +0 -2
- package/dist/runtime/tooling/truncate.d.ts.map +0 -1
- package/dist/runtime/tooling/truncate.js +0 -2
- package/dist/runtime/tooling/truncate.js.map +0 -1
- package/dist/runtime/tooling/webfetch.d.ts +0 -2
- package/dist/runtime/tooling/webfetch.d.ts.map +0 -1
- package/dist/runtime/tooling/webfetch.js +0 -2
- package/dist/runtime/tooling/webfetch.js.map +0 -1
- package/dist/runtime/tooling/websearch.d.ts +0 -2
- package/dist/runtime/tooling/websearch.d.ts.map +0 -1
- package/dist/runtime/tooling/websearch.js +0 -2
- package/dist/runtime/tooling/websearch.js.map +0 -1
- package/dist/runtime/tooling/write.d.ts +0 -2
- package/dist/runtime/tooling/write.d.ts.map +0 -1
- package/dist/runtime/tooling/write.js +0 -2
- package/dist/runtime/tooling/write.js.map +0 -1
- package/dist/telemetry/core/config.d.ts +0 -28
- package/dist/telemetry/core/config.d.ts.map +0 -1
- package/dist/telemetry/core/config.js +0 -150
- package/dist/telemetry/core/config.js.map +0 -1
- package/dist/telemetry/core/event-bus.d.ts +0 -15
- package/dist/telemetry/core/event-bus.d.ts.map +0 -1
- package/dist/telemetry/core/event-bus.js +0 -37
- package/dist/telemetry/core/event-bus.js.map +0 -1
- package/dist/telemetry/core/index.d.ts +0 -12
- package/dist/telemetry/core/index.d.ts.map +0 -1
- package/dist/telemetry/core/index.js +0 -14
- package/dist/telemetry/core/index.js.map +0 -1
- package/dist/telemetry/core/observability.d.ts +0 -63
- package/dist/telemetry/core/observability.d.ts.map +0 -1
- package/dist/telemetry/core/observability.js +0 -127
- package/dist/telemetry/core/observability.js.map +0 -1
- package/dist/telemetry/core/span.d.ts +0 -37
- package/dist/telemetry/core/span.d.ts.map +0 -1
- package/dist/telemetry/core/span.js +0 -90
- package/dist/telemetry/core/span.js.map +0 -1
- package/dist/telemetry/core/tracer.d.ts +0 -22
- package/dist/telemetry/core/tracer.d.ts.map +0 -1
- package/dist/telemetry/core/tracer.js +0 -79
- package/dist/telemetry/core/tracer.js.map +0 -1
- package/dist/telemetry/core/types.d.ts +0 -155
- package/dist/telemetry/core/types.d.ts.map +0 -1
- package/dist/telemetry/core/types.js +0 -38
- package/dist/telemetry/core/types.js.map +0 -1
- package/dist/telemetry/exporters/base-exporter.d.ts +0 -16
- package/dist/telemetry/exporters/base-exporter.d.ts.map +0 -1
- package/dist/telemetry/exporters/base-exporter.js +0 -26
- package/dist/telemetry/exporters/base-exporter.js.map +0 -1
- package/dist/telemetry/exporters/console-exporter.d.ts +0 -22
- package/dist/telemetry/exporters/console-exporter.d.ts.map +0 -1
- package/dist/telemetry/exporters/console-exporter.js +0 -80
- package/dist/telemetry/exporters/console-exporter.js.map +0 -1
- package/dist/telemetry/exporters/file-exporter.d.ts +0 -31
- package/dist/telemetry/exporters/file-exporter.d.ts.map +0 -1
- package/dist/telemetry/exporters/file-exporter.js +0 -120
- package/dist/telemetry/exporters/file-exporter.js.map +0 -1
- package/dist/telemetry/exporters/index.d.ts +0 -12
- package/dist/telemetry/exporters/index.d.ts.map +0 -1
- package/dist/telemetry/exporters/index.js +0 -11
- package/dist/telemetry/exporters/index.js.map +0 -1
- package/dist/telemetry/exporters/langfuse-exporter.d.ts +0 -27
- package/dist/telemetry/exporters/langfuse-exporter.d.ts.map +0 -1
- package/dist/telemetry/exporters/langfuse-exporter.js +0 -146
- package/dist/telemetry/exporters/langfuse-exporter.js.map +0 -1
- package/dist/telemetry/exporters/sentry-exporter.d.ts +0 -22
- package/dist/telemetry/exporters/sentry-exporter.d.ts.map +0 -1
- package/dist/telemetry/exporters/sentry-exporter.js +0 -121
- package/dist/telemetry/exporters/sentry-exporter.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -3
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/telemetry/index.js +0 -3
- package/dist/telemetry/index.js.map +0 -1
- package/dist/vendor/observe/adapters/agent-event-adapter.d.ts +0 -28
- package/dist/vendor/observe/adapters/agent-event-adapter.d.ts.map +0 -1
- package/dist/vendor/observe/adapters/agent-event-adapter.js +0 -136
- package/dist/vendor/observe/adapters/agent-event-adapter.js.map +0 -1
- package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts +0 -24
- package/dist/vendor/observe/adapters/ai-stream-adapter.d.ts.map +0 -1
- package/dist/vendor/observe/adapters/ai-stream-adapter.js +0 -118
- package/dist/vendor/observe/adapters/ai-stream-adapter.js.map +0 -1
- package/dist/vendor/observe/artifacts/content-store.d.ts +0 -12
- package/dist/vendor/observe/artifacts/content-store.d.ts.map +0 -1
- package/dist/vendor/observe/artifacts/content-store.js +0 -2
- package/dist/vendor/observe/artifacts/content-store.js.map +0 -1
- package/dist/vendor/observe/artifacts/file-content-store.d.ts +0 -16
- package/dist/vendor/observe/artifacts/file-content-store.d.ts.map +0 -1
- package/dist/vendor/observe/artifacts/file-content-store.js +0 -43
- package/dist/vendor/observe/artifacts/file-content-store.js.map +0 -1
- package/dist/vendor/observe/batcher.d.ts +0 -27
- package/dist/vendor/observe/batcher.d.ts.map +0 -1
- package/dist/vendor/observe/batcher.js +0 -66
- package/dist/vendor/observe/batcher.js.map +0 -1
- package/dist/vendor/observe/client/artifacts-manager.d.ts +0 -29
- package/dist/vendor/observe/client/artifacts-manager.d.ts.map +0 -1
- package/dist/vendor/observe/client/artifacts-manager.js +0 -120
- package/dist/vendor/observe/client/artifacts-manager.js.map +0 -1
- package/dist/vendor/observe/client/datasets-manager.d.ts +0 -16
- package/dist/vendor/observe/client/datasets-manager.d.ts.map +0 -1
- package/dist/vendor/observe/client/datasets-manager.js +0 -27
- package/dist/vendor/observe/client/datasets-manager.js.map +0 -1
- package/dist/vendor/observe/client/experiments-manager.d.ts +0 -61
- package/dist/vendor/observe/client/experiments-manager.d.ts.map +0 -1
- package/dist/vendor/observe/client/experiments-manager.js +0 -132
- package/dist/vendor/observe/client/experiments-manager.js.map +0 -1
- package/dist/vendor/observe/client/index.d.ts +0 -9
- package/dist/vendor/observe/client/index.d.ts.map +0 -1
- package/dist/vendor/observe/client/index.js +0 -9
- package/dist/vendor/observe/client/index.js.map +0 -1
- package/dist/vendor/observe/client/observe-client.d.ts +0 -30
- package/dist/vendor/observe/client/observe-client.d.ts.map +0 -1
- package/dist/vendor/observe/client/observe-client.js +0 -22
- package/dist/vendor/observe/client/observe-client.js.map +0 -1
- package/dist/vendor/observe/client/prompts-manager.d.ts +0 -17
- package/dist/vendor/observe/client/prompts-manager.d.ts.map +0 -1
- package/dist/vendor/observe/client/prompts-manager.js +0 -38
- package/dist/vendor/observe/client/prompts-manager.js.map +0 -1
- package/dist/vendor/observe/client/scores-manager.d.ts +0 -10
- package/dist/vendor/observe/client/scores-manager.d.ts.map +0 -1
- package/dist/vendor/observe/client/scores-manager.js +0 -15
- package/dist/vendor/observe/client/scores-manager.js.map +0 -1
- package/dist/vendor/observe/client/sessions-manager.d.ts +0 -15
- package/dist/vendor/observe/client/sessions-manager.d.ts.map +0 -1
- package/dist/vendor/observe/client/sessions-manager.js +0 -24
- package/dist/vendor/observe/client/sessions-manager.js.map +0 -1
- package/dist/vendor/observe/client/traces-manager.d.ts +0 -23
- package/dist/vendor/observe/client/traces-manager.d.ts.map +0 -1
- package/dist/vendor/observe/client/traces-manager.js +0 -39
- package/dist/vendor/observe/client/traces-manager.js.map +0 -1
- package/dist/vendor/observe/console-exporter.d.ts +0 -11
- package/dist/vendor/observe/console-exporter.d.ts.map +0 -1
- package/dist/vendor/observe/console-exporter.js +0 -18
- package/dist/vendor/observe/console-exporter.js.map +0 -1
- package/dist/vendor/observe/context.d.ts +0 -4
- package/dist/vendor/observe/context.d.ts.map +0 -1
- package/dist/vendor/observe/context.js +0 -9
- package/dist/vendor/observe/context.js.map +0 -1
- package/dist/vendor/observe/entities/artifacts.d.ts +0 -46
- package/dist/vendor/observe/entities/artifacts.d.ts.map +0 -1
- package/dist/vendor/observe/entities/artifacts.js +0 -2
- package/dist/vendor/observe/entities/artifacts.js.map +0 -1
- package/dist/vendor/observe/entities/datasets.d.ts +0 -37
- package/dist/vendor/observe/entities/datasets.d.ts.map +0 -1
- package/dist/vendor/observe/entities/datasets.js +0 -2
- package/dist/vendor/observe/entities/datasets.js.map +0 -1
- package/dist/vendor/observe/entities/experiments.d.ts +0 -66
- package/dist/vendor/observe/entities/experiments.d.ts.map +0 -1
- package/dist/vendor/observe/entities/experiments.js +0 -2
- package/dist/vendor/observe/entities/experiments.js.map +0 -1
- package/dist/vendor/observe/entities/index.d.ts +0 -9
- package/dist/vendor/observe/entities/index.d.ts.map +0 -1
- package/dist/vendor/observe/entities/index.js +0 -9
- package/dist/vendor/observe/entities/index.js.map +0 -1
- package/dist/vendor/observe/entities/prompts.d.ts +0 -25
- package/dist/vendor/observe/entities/prompts.d.ts.map +0 -1
- package/dist/vendor/observe/entities/prompts.js +0 -2
- package/dist/vendor/observe/entities/prompts.js.map +0 -1
- package/dist/vendor/observe/entities/scores.d.ts +0 -28
- package/dist/vendor/observe/entities/scores.d.ts.map +0 -1
- package/dist/vendor/observe/entities/scores.js +0 -2
- package/dist/vendor/observe/entities/scores.js.map +0 -1
- package/dist/vendor/observe/entities/sessions.d.ts +0 -36
- package/dist/vendor/observe/entities/sessions.d.ts.map +0 -1
- package/dist/vendor/observe/entities/sessions.js +0 -2
- package/dist/vendor/observe/entities/sessions.js.map +0 -1
- package/dist/vendor/observe/entities/shared.d.ts +0 -26
- package/dist/vendor/observe/entities/shared.d.ts.map +0 -1
- package/dist/vendor/observe/entities/shared.js +0 -2
- package/dist/vendor/observe/entities/shared.js.map +0 -1
- package/dist/vendor/observe/entities/traces.d.ts +0 -59
- package/dist/vendor/observe/entities/traces.d.ts.map +0 -1
- package/dist/vendor/observe/entities/traces.js +0 -2
- package/dist/vendor/observe/entities/traces.js.map +0 -1
- package/dist/vendor/observe/exporter.d.ts +0 -2
- package/dist/vendor/observe/exporter.d.ts.map +0 -1
- package/dist/vendor/observe/exporter.js +0 -2
- package/dist/vendor/observe/exporter.js.map +0 -1
- package/dist/vendor/observe/file-exporter.d.ts +0 -16
- package/dist/vendor/observe/file-exporter.d.ts.map +0 -1
- package/dist/vendor/observe/file-exporter.js +0 -39
- package/dist/vendor/observe/file-exporter.js.map +0 -1
- package/dist/vendor/observe/global.d.ts +0 -6
- package/dist/vendor/observe/global.d.ts.map +0 -1
- package/dist/vendor/observe/global.js +0 -17
- package/dist/vendor/observe/global.js.map +0 -1
- package/dist/vendor/observe/index.d.ts +0 -24
- package/dist/vendor/observe/index.d.ts.map +0 -1
- package/dist/vendor/observe/index.js +0 -24
- package/dist/vendor/observe/index.js.map +0 -1
- package/dist/vendor/observe/noop.d.ts +0 -17
- package/dist/vendor/observe/noop.d.ts.map +0 -1
- package/dist/vendor/observe/noop.js +0 -80
- package/dist/vendor/observe/noop.js.map +0 -1
- package/dist/vendor/observe/privacy.d.ts +0 -18
- package/dist/vendor/observe/privacy.d.ts.map +0 -1
- package/dist/vendor/observe/privacy.js +0 -160
- package/dist/vendor/observe/privacy.js.map +0 -1
- package/dist/vendor/observe/query/simple-query-client.d.ts +0 -11
- package/dist/vendor/observe/query/simple-query-client.d.ts.map +0 -1
- package/dist/vendor/observe/query/simple-query-client.js +0 -31
- package/dist/vendor/observe/query/simple-query-client.js.map +0 -1
- package/dist/vendor/observe/replay/session-replay.d.ts +0 -20
- package/dist/vendor/observe/replay/session-replay.d.ts.map +0 -1
- package/dist/vendor/observe/replay/session-replay.js +0 -180
- package/dist/vendor/observe/replay/session-replay.js.map +0 -1
- package/dist/vendor/observe/runtime.d.ts +0 -27
- package/dist/vendor/observe/runtime.d.ts.map +0 -1
- package/dist/vendor/observe/runtime.js +0 -177
- package/dist/vendor/observe/runtime.js.map +0 -1
- package/dist/vendor/observe/server/dashboard-html.d.ts +0 -6
- package/dist/vendor/observe/server/dashboard-html.d.ts.map +0 -1
- package/dist/vendor/observe/server/dashboard-html.js +0 -305
- package/dist/vendor/observe/server/dashboard-html.js.map +0 -1
- package/dist/vendor/observe/server/http-observe-server.d.ts +0 -62
- package/dist/vendor/observe/server/http-observe-server.d.ts.map +0 -1
- package/dist/vendor/observe/server/http-observe-server.js +0 -418
- package/dist/vendor/observe/server/http-observe-server.js.map +0 -1
- package/dist/vendor/observe/server/in-memory-observe-server.d.ts +0 -20
- package/dist/vendor/observe/server/in-memory-observe-server.d.ts.map +0 -1
- package/dist/vendor/observe/server/in-memory-observe-server.js +0 -76
- package/dist/vendor/observe/server/in-memory-observe-server.js.map +0 -1
- package/dist/vendor/observe/span.d.ts +0 -45
- package/dist/vendor/observe/span.d.ts.map +0 -1
- package/dist/vendor/observe/span.js +0 -110
- package/dist/vendor/observe/span.js.map +0 -1
- package/dist/vendor/observe/store/contracts.d.ts +0 -59
- package/dist/vendor/observe/store/contracts.d.ts.map +0 -1
- package/dist/vendor/observe/store/contracts.js +0 -2
- package/dist/vendor/observe/store/contracts.js.map +0 -1
- package/dist/vendor/observe/store/file-control-plane-store.d.ts +0 -33
- package/dist/vendor/observe/store/file-control-plane-store.d.ts.map +0 -1
- package/dist/vendor/observe/store/file-control-plane-store.js +0 -146
- package/dist/vendor/observe/store/file-control-plane-store.js.map +0 -1
- package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts +0 -84
- package/dist/vendor/observe/store/in-memory-control-plane-store.d.ts.map +0 -1
- package/dist/vendor/observe/store/in-memory-control-plane-store.js +0 -447
- package/dist/vendor/observe/store/in-memory-control-plane-store.js.map +0 -1
- package/dist/vendor/observe/store/index.d.ts +0 -4
- package/dist/vendor/observe/store/index.d.ts.map +0 -1
- package/dist/vendor/observe/store/index.js +0 -4
- package/dist/vendor/observe/store/index.js.map +0 -1
- package/dist/vendor/observe/types.d.ts +0 -246
- package/dist/vendor/observe/types.d.ts.map +0 -1
- package/dist/vendor/observe/types.js +0 -152
- package/dist/vendor/observe/types.js.map +0 -1
- package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts +0 -25
- package/dist/vendor/observe/worker/in-memory-observe-worker.d.ts.map +0 -1
- package/dist/vendor/observe/worker/in-memory-observe-worker.js +0 -82
- package/dist/vendor/observe/worker/in-memory-observe-worker.js.map +0 -1
- package/guides/CLAUDE_CODEX_CLI_INTEGRATION_PLAN.md +0 -321
- package/guides/INDUSAGI_MONO_MIT_REMOVAL_GUIDE.md +0 -2132
- package/guides/INDUSVX_OBSERVE_FULL_INTEGRATION_REPORT.md +0 -543
- package/guides/OBSERVE_DEEP_VALIDATION.md +0 -252
- package/guides/OBSERVE_LOCAL_TESTING.md +0 -183
- package/guides/OPTION3_PROVIDER_ADAPTER_RUNTIME_PLAN.md +0 -370
- package/guides/SAME_TO_SAME_PARITY_REPORT.md +0 -312
- package/tasks/patch-indusagi-react-host.mjs +0 -247
|
@@ -1,895 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Path Validation and Normalization Utilities
|
|
3
|
-
*
|
|
4
|
-
* **SECURITY FOCUSED**: This module provides secure path handling to prevent
|
|
5
|
-
* common path traversal and directory escape vulnerabilities.
|
|
6
|
-
*
|
|
7
|
-
* Common Path Vulnerabilities Addressed:
|
|
8
|
-
* - Directory traversal (../../) attacks
|
|
9
|
-
* - Symlink following (TOCTOU - Time-of-Check-Time-of-Use)
|
|
10
|
-
* - Path normalization bypasses
|
|
11
|
-
* - Null byte injection (\0)
|
|
12
|
-
* - Mixed slash handling (Windows vs Unix)
|
|
13
|
-
* - Relative path escape patterns
|
|
14
|
-
*
|
|
15
|
-
* SECURITY PRINCIPLES:
|
|
16
|
-
* 1. Always validate and normalize paths before file operations
|
|
17
|
-
* 2. Prevent directory traversal with ".." and "." resolution
|
|
18
|
-
* 3. Resolve symlinks to detect jail breaks
|
|
19
|
-
* 4. Whitelist allowed directories when possible
|
|
20
|
-
* 5. Never trust user-supplied paths directly
|
|
21
|
-
*
|
|
22
|
-
* This module provides type-safe, well-tested functions for:
|
|
23
|
-
* - Path safety validation and sanitization
|
|
24
|
-
* - Secure path resolution and normalization
|
|
25
|
-
* - Path component extraction
|
|
26
|
-
* - Cross-platform path handling
|
|
27
|
-
* - Symlink and traversal detection
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* // SAFE: Validate before use
|
|
31
|
-
* if (isPathSafe(userPath, baseDir)) {
|
|
32
|
-
* const fullPath = joinSafe(baseDir, userPath);
|
|
33
|
-
* // Safe to use fullPath
|
|
34
|
-
* }
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* // UNSAFE: Direct concatenation - vulnerable to path traversal
|
|
38
|
-
* const fullPath = baseDir + '/' + userPath; // DON'T DO THIS
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* // SAFE: Use validation helpers
|
|
42
|
-
* validatePath(userPath, { allowRelative: true, base: '/app/uploads' });
|
|
43
|
-
* const dir = getDirName(path);
|
|
44
|
-
* const name = getFileName(path);
|
|
45
|
-
*/
|
|
46
|
-
import * as fs from 'fs';
|
|
47
|
-
import * as path from 'path';
|
|
48
|
-
/**
|
|
49
|
-
* SECURITY: Checks if a path is safe for operations
|
|
50
|
-
*
|
|
51
|
-
* This is the primary security function - use before ANY file operation.
|
|
52
|
-
* Prevents:
|
|
53
|
-
* - Directory traversal (../../etc/passwd)
|
|
54
|
-
* - Absolute path bypass
|
|
55
|
-
* - Symlink attacks
|
|
56
|
-
* - Path normalization bypass
|
|
57
|
-
*
|
|
58
|
-
* @param pathStr - Path to validate
|
|
59
|
-
* @param baseDir - Optional base directory for restriction
|
|
60
|
-
* @returns true if path is safe, false otherwise
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* // SAFE: Check user-supplied path
|
|
64
|
-
* const userInput = req.query.file;
|
|
65
|
-
* if (isPathSafe(userInput, '/app/uploads')) {
|
|
66
|
-
* const fullPath = path.join('/app/uploads', userInput);
|
|
67
|
-
* const data = fs.readFileSync(fullPath); // Safe
|
|
68
|
-
* }
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* // UNSAFE: Allows directory traversal
|
|
72
|
-
* const fullPath = path.join('/app/uploads', userInput); // DON'T - no validation
|
|
73
|
-
* const data = fs.readFileSync(fullPath);
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* // UNSAFE PATHS (returns false)
|
|
77
|
-
* isPathSafe('../../../etc/passwd') // true -> prevents escape
|
|
78
|
-
* isPathSafe('/etc/passwd', '/app') // false -> absolute outside base
|
|
79
|
-
* isPathSafe('../../file.txt') // false -> traversal attempt
|
|
80
|
-
* isPathSafe('./file.txt', '/app') // true -> safe relative
|
|
81
|
-
*
|
|
82
|
-
* @edge-cases
|
|
83
|
-
* - Empty path returns true (cwd)
|
|
84
|
-
* - Resolves .. but only within base directory
|
|
85
|
-
* - Strips null bytes (\0) - potential injection
|
|
86
|
-
* - Windows paths with backslashes normalized to forward slashes
|
|
87
|
-
*
|
|
88
|
-
* @security-notes
|
|
89
|
-
* - Use this function BEFORE every file operation with user input
|
|
90
|
-
* - Does NOT check file existence
|
|
91
|
-
* - For maximum security, use with baseDir parameter
|
|
92
|
-
* - Be aware of TOCTOU: file can change between check and use
|
|
93
|
-
*/
|
|
94
|
-
export function isPathSafe(pathStr, baseDir) {
|
|
95
|
-
try {
|
|
96
|
-
// Reject null bytes (common injection vector)
|
|
97
|
-
if (pathStr.includes('\0')) {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
// Reject empty absolute paths when base is specified
|
|
101
|
-
if (baseDir && path.isAbsolute(pathStr)) {
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
// Normalize the path
|
|
105
|
-
let normalized = normalizePath(pathStr);
|
|
106
|
-
// If no base, only allow relative paths that don't escape
|
|
107
|
-
if (!baseDir) {
|
|
108
|
-
if (path.isAbsolute(normalized)) {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
// Check that the normalized path doesn't start with ..
|
|
112
|
-
if (normalized.startsWith('..') || normalized.startsWith('../')) {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
// Resolve within the base directory
|
|
118
|
-
const baseDirResolved = path.resolve(baseDir);
|
|
119
|
-
const fullPath = path.resolve(baseDirResolved, normalized);
|
|
120
|
-
// Check that resolved path is within base directory
|
|
121
|
-
const relativePath = path.relative(baseDirResolved, fullPath);
|
|
122
|
-
// Relative path should not start with ".." to be safe
|
|
123
|
-
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* SECURITY: Comprehensive path validation with detailed results
|
|
134
|
-
*
|
|
135
|
-
* Use this for detailed validation and error reporting.
|
|
136
|
-
* Returns structured result with specific error information.
|
|
137
|
-
*
|
|
138
|
-
* @param pathStr - Path to validate
|
|
139
|
-
* @param options - Validation options
|
|
140
|
-
* @returns Detailed validation result
|
|
141
|
-
*
|
|
142
|
-
* @example
|
|
143
|
-
* // Validate with full options
|
|
144
|
-
* const result = validatePath(userPath, {
|
|
145
|
-
* base: '/app/uploads',
|
|
146
|
-
* allowRelative: true,
|
|
147
|
-
* allowSymlinks: false,
|
|
148
|
-
* maxLength: 255,
|
|
149
|
-
* });
|
|
150
|
-
*
|
|
151
|
-
* if (!result.valid) {
|
|
152
|
-
* console.error(result.error);
|
|
153
|
-
* // Reject the request
|
|
154
|
-
* }
|
|
155
|
-
*
|
|
156
|
-
* @example
|
|
157
|
-
* // Check for symlinks and traversal
|
|
158
|
-
* const result = validatePath('../../secret.txt', {
|
|
159
|
-
* base: '/app/data',
|
|
160
|
-
* allowSymlinks: false,
|
|
161
|
-
* });
|
|
162
|
-
* // result.valid === false
|
|
163
|
-
* // result.error mentions directory traversal
|
|
164
|
-
*
|
|
165
|
-
* @edge-cases
|
|
166
|
-
* - Symlink detection requires filesystem access
|
|
167
|
-
* - May be expensive for deeply nested paths
|
|
168
|
-
* - Resolved path is provided even if invalid (for debugging)
|
|
169
|
-
*/
|
|
170
|
-
export function validatePath(pathStr, options = {}) {
|
|
171
|
-
const { base, allowRelative = false, allowSymlinks = false, allowHidden = false, maxLength = 4096, } = options;
|
|
172
|
-
try {
|
|
173
|
-
// Check length
|
|
174
|
-
if (pathStr.length === 0) {
|
|
175
|
-
return {
|
|
176
|
-
valid: false,
|
|
177
|
-
error: 'Path cannot be empty',
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
if (pathStr.length > maxLength) {
|
|
181
|
-
return {
|
|
182
|
-
valid: false,
|
|
183
|
-
error: `Path exceeds maximum length of ${maxLength} characters`,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
// Check for null bytes
|
|
187
|
-
if (pathStr.includes('\0')) {
|
|
188
|
-
return {
|
|
189
|
-
valid: false,
|
|
190
|
-
error: 'Path contains null bytes (potential injection)',
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
// Normalize path
|
|
194
|
-
let normalized = normalizePath(pathStr);
|
|
195
|
-
// Check for hidden files (but not . or .. which are navigation)
|
|
196
|
-
if (!allowHidden) {
|
|
197
|
-
const components = normalized.split('/').filter(c => c);
|
|
198
|
-
const hasHidden = components.some(c => c.startsWith('.') && c !== '.' && c !== '..');
|
|
199
|
-
if (hasHidden) {
|
|
200
|
-
return {
|
|
201
|
-
valid: false,
|
|
202
|
-
error: 'Path contains hidden files (starting with .)',
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
// Check if absolute
|
|
207
|
-
const isAbsolute = path.isAbsolute(normalized);
|
|
208
|
-
if (isAbsolute && !base) {
|
|
209
|
-
return {
|
|
210
|
-
valid: false,
|
|
211
|
-
error: 'Absolute paths not allowed without a base directory',
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
if (isAbsolute && base) {
|
|
215
|
-
return {
|
|
216
|
-
valid: false,
|
|
217
|
-
error: 'Absolute paths not allowed when base directory is specified',
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
if (!isAbsolute && !allowRelative && !base) {
|
|
221
|
-
return {
|
|
222
|
-
valid: false,
|
|
223
|
-
error: 'Relative paths not allowed',
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
// If base is provided, resolve and check containment
|
|
227
|
-
let resolved = normalized;
|
|
228
|
-
let isWithinBase = true;
|
|
229
|
-
if (base) {
|
|
230
|
-
const baseDirResolved = path.resolve(base);
|
|
231
|
-
resolved = path.resolve(baseDirResolved, normalized);
|
|
232
|
-
const relativePath = path.relative(baseDirResolved, resolved);
|
|
233
|
-
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
234
|
-
return {
|
|
235
|
-
valid: false,
|
|
236
|
-
error: 'Path attempts to escape base directory (directory traversal)',
|
|
237
|
-
resolved,
|
|
238
|
-
isWithinBase: false,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
// Check for symlinks
|
|
243
|
-
let hasSymlinks = false;
|
|
244
|
-
if (!allowSymlinks && base) {
|
|
245
|
-
const baseDirResolved = path.resolve(base);
|
|
246
|
-
const components = normalized.split('/').filter(c => c);
|
|
247
|
-
let currentPath = baseDirResolved;
|
|
248
|
-
for (const component of components) {
|
|
249
|
-
currentPath = path.join(currentPath, component);
|
|
250
|
-
try {
|
|
251
|
-
const stat = fs.lstatSync(currentPath);
|
|
252
|
-
if (stat.isSymbolicLink()) {
|
|
253
|
-
hasSymlinks = true;
|
|
254
|
-
break;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
catch (err) {
|
|
258
|
-
// File doesn't exist yet, continue
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
if (hasSymlinks) {
|
|
262
|
-
return {
|
|
263
|
-
valid: false,
|
|
264
|
-
error: 'Path contains symbolic links (not allowed)',
|
|
265
|
-
resolved,
|
|
266
|
-
hasSymlinks: true,
|
|
267
|
-
isWithinBase,
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
return {
|
|
272
|
-
valid: true,
|
|
273
|
-
resolved,
|
|
274
|
-
hasSymlinks,
|
|
275
|
-
isWithinBase,
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
catch (error) {
|
|
279
|
-
return {
|
|
280
|
-
valid: false,
|
|
281
|
-
error: `Validation error: ${error instanceof Error ? error.message : 'unknown'}`,
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* SECURITY: Normalizes a path to prevent traversal bypass
|
|
287
|
-
*
|
|
288
|
-
* Removes redundant separators and resolves . and .. patterns.
|
|
289
|
-
* Critical for preventing normalized path bypass attacks.
|
|
290
|
-
*
|
|
291
|
-
* @param pathStr - Path to normalize
|
|
292
|
-
* @returns Normalized path
|
|
293
|
-
*
|
|
294
|
-
* @example
|
|
295
|
-
* normalizePath('./foo/../bar') // "bar"
|
|
296
|
-
* normalizePath('foo//bar') // "foo/bar"
|
|
297
|
-
* normalizePath('foo/./bar') // "foo/bar"
|
|
298
|
-
* normalizePath('\\foo\\bar') // "foo/bar" (Windows)
|
|
299
|
-
* normalizePath('') // "."
|
|
300
|
-
* normalizePath('/absolute/./path') // "/absolute/path"
|
|
301
|
-
* normalizePath('foo/../../bar') // "../bar"
|
|
302
|
-
*
|
|
303
|
-
* @edge-cases
|
|
304
|
-
* - Normalizes both forward and backslashes (Windows/Unix)
|
|
305
|
-
* - Preserves absolute path status
|
|
306
|
-
* - Collapses .. patterns (may escape if outside boundary)
|
|
307
|
-
* - Use isPathSafe() to prevent escape with .. patterns
|
|
308
|
-
*
|
|
309
|
-
* @security-notes
|
|
310
|
-
* - This ALONE doesn't prevent attacks
|
|
311
|
-
* - Use with isPathSafe() for full protection
|
|
312
|
-
* - Directory traversal requires checking against base dir
|
|
313
|
-
*/
|
|
314
|
-
export function normalizePath(pathStr) {
|
|
315
|
-
if (!pathStr)
|
|
316
|
-
return '.';
|
|
317
|
-
// Remove null bytes
|
|
318
|
-
let normalized = pathStr.replace(/\0/g, '');
|
|
319
|
-
// Normalize slashes (handle Windows backslashes)
|
|
320
|
-
normalized = normalized.replace(/\\/g, '/');
|
|
321
|
-
// Remove duplicate slashes
|
|
322
|
-
normalized = normalized.replace(/\/+/g, '/');
|
|
323
|
-
// Resolve . and ..
|
|
324
|
-
normalized = path.normalize(normalized);
|
|
325
|
-
// Convert back to forward slashes for consistency
|
|
326
|
-
normalized = normalized.replace(/\\/g, '/');
|
|
327
|
-
return normalized;
|
|
328
|
-
}
|
|
329
|
-
/**
|
|
330
|
-
* SECURITY: Safely joins path segments with base directory
|
|
331
|
-
*
|
|
332
|
-
* Validates each segment against directory traversal before joining.
|
|
333
|
-
* Preferred over path.join() for security-sensitive code.
|
|
334
|
-
*
|
|
335
|
-
* @param base - Base directory (absolute path)
|
|
336
|
-
* @param ...segments - Path segments to join
|
|
337
|
-
* @returns Safely joined path, or throws if unsafe
|
|
338
|
-
*
|
|
339
|
-
* @example
|
|
340
|
-
* // SAFE: Returns '/app/uploads/user-file.txt'
|
|
341
|
-
* joinSafe('/app/uploads', 'user-file.txt')
|
|
342
|
-
*
|
|
343
|
-
* @example
|
|
344
|
-
* // UNSAFE: Throws error
|
|
345
|
-
* try {
|
|
346
|
-
* joinSafe('/app/uploads', '../../etc/passwd')
|
|
347
|
-
* } catch (e) {
|
|
348
|
-
* console.log('Traversal attempt blocked')
|
|
349
|
-
* }
|
|
350
|
-
*
|
|
351
|
-
* @example
|
|
352
|
-
* // SAFE: Multiple segments
|
|
353
|
-
* joinSafe('/app', 'uploads', 'users', 'file.txt')
|
|
354
|
-
* // -> '/app/uploads/users/file.txt'
|
|
355
|
-
*
|
|
356
|
-
* @example
|
|
357
|
-
* // UNSAFE: Symlink in path (if allowSymlinks: false)
|
|
358
|
-
* joinSafe('/app', './link-to-escape')
|
|
359
|
-
* // throws if link escapes /app
|
|
360
|
-
*
|
|
361
|
-
* @throws Error if any segment is unsafe for the given base
|
|
362
|
-
*
|
|
363
|
-
* @security-notes
|
|
364
|
-
* - Base directory must be absolute
|
|
365
|
-
* - Each segment is validated independently
|
|
366
|
-
* - Throws on traversal attempts (fail-safe)
|
|
367
|
-
* - Suitable for file server implementations
|
|
368
|
-
*/
|
|
369
|
-
export function joinSafe(base, ...segments) {
|
|
370
|
-
if (!path.isAbsolute(base)) {
|
|
371
|
-
throw new Error('Base directory must be absolute');
|
|
372
|
-
}
|
|
373
|
-
let current = path.resolve(base);
|
|
374
|
-
for (const segment of segments) {
|
|
375
|
-
// Validate segment
|
|
376
|
-
if (!isPathSafe(segment, current)) {
|
|
377
|
-
throw new Error(`Unsafe path segment: ${segment}`);
|
|
378
|
-
}
|
|
379
|
-
// Safely resolve
|
|
380
|
-
current = path.resolve(current, normalizePath(segment));
|
|
381
|
-
// Verify we haven't escaped the base
|
|
382
|
-
const baseResolved = path.resolve(base);
|
|
383
|
-
const relative = path.relative(baseResolved, current);
|
|
384
|
-
if (relative.startsWith('..')) {
|
|
385
|
-
throw new Error(`Path segment escapes base directory: ${segment}`);
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
return current;
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* SECURITY: Resolves a path safely relative to a base directory
|
|
392
|
-
*
|
|
393
|
-
* Like joinSafe but returns resolved path. Better for cases
|
|
394
|
-
* where the target path must be within base (sandboxing).
|
|
395
|
-
*
|
|
396
|
-
* @param pathStr - Path to resolve
|
|
397
|
-
* @param baseDir - Base directory for restriction
|
|
398
|
-
* @returns Resolved absolute path
|
|
399
|
-
*
|
|
400
|
-
* @example
|
|
401
|
-
* resolvePath('uploads/file.txt', '/app')
|
|
402
|
-
* // -> '/app/uploads/file.txt'
|
|
403
|
-
*
|
|
404
|
-
* @example
|
|
405
|
-
* // Throws: attempts escape
|
|
406
|
-
* resolvePath('../../etc/passwd', '/app')
|
|
407
|
-
*
|
|
408
|
-
* @throws Error if path attempts to escape base directory
|
|
409
|
-
*
|
|
410
|
-
* @security-notes
|
|
411
|
-
* - For sandboxing / jail implementations
|
|
412
|
-
* - Always validate user input
|
|
413
|
-
* - Return error, don't expose real paths
|
|
414
|
-
*/
|
|
415
|
-
export function resolvePath(pathStr, baseDir) {
|
|
416
|
-
const baseResolved = path.resolve(baseDir);
|
|
417
|
-
if (!isPathSafe(pathStr, baseResolved)) {
|
|
418
|
-
throw new Error(`Path is not safe: ${pathStr}`);
|
|
419
|
-
}
|
|
420
|
-
const resolved = path.resolve(baseResolved, normalizePath(pathStr));
|
|
421
|
-
// Final verification
|
|
422
|
-
const relative = path.relative(baseResolved, resolved);
|
|
423
|
-
if (relative.startsWith('..')) {
|
|
424
|
-
throw new Error('Resolved path escapes base directory');
|
|
425
|
-
}
|
|
426
|
-
return resolved;
|
|
427
|
-
}
|
|
428
|
-
/**
|
|
429
|
-
* Returns whether a path is absolute (not relative)
|
|
430
|
-
*
|
|
431
|
-
* Works consistently across Windows and Unix.
|
|
432
|
-
*
|
|
433
|
-
* @param pathStr - Path to check
|
|
434
|
-
* @returns true if absolute, false if relative
|
|
435
|
-
*
|
|
436
|
-
* @example
|
|
437
|
-
* isAbsolutePath('/home/user') // true
|
|
438
|
-
* isAbsolutePath('C:\\Users\\User') // true (Windows)
|
|
439
|
-
* isAbsolutePath('./relative') // false
|
|
440
|
-
* isAbsolutePath('relative/path') // false
|
|
441
|
-
* isAbsolutePath('') // false
|
|
442
|
-
*
|
|
443
|
-
* @edge-cases
|
|
444
|
-
* - Windows drive letters (C:\) are absolute
|
|
445
|
-
* - UNC paths (\\server\share) are absolute
|
|
446
|
-
* - Relative paths with ./ prefix are still relative
|
|
447
|
-
*/
|
|
448
|
-
export function isAbsolutePath(pathStr) {
|
|
449
|
-
if (!pathStr)
|
|
450
|
-
return false;
|
|
451
|
-
// Check for Unix absolute paths
|
|
452
|
-
if (path.isAbsolute(pathStr)) {
|
|
453
|
-
return true;
|
|
454
|
-
}
|
|
455
|
-
// Check for Windows absolute paths (e.g., C:\, D:\)
|
|
456
|
-
// This handles Windows paths when running on Unix systems
|
|
457
|
-
if (/^[a-zA-Z]:[/\\]/.test(pathStr)) {
|
|
458
|
-
return true;
|
|
459
|
-
}
|
|
460
|
-
// Check for UNC paths (\\server\share)
|
|
461
|
-
if (/^\\\\[^\\]+\\/.test(pathStr)) {
|
|
462
|
-
return true;
|
|
463
|
-
}
|
|
464
|
-
return false;
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* Returns whether a path is relative (not absolute)
|
|
468
|
-
*
|
|
469
|
-
* Inverse of isAbsolutePath.
|
|
470
|
-
*
|
|
471
|
-
* @param pathStr - Path to check
|
|
472
|
-
* @returns true if relative, false if absolute
|
|
473
|
-
*
|
|
474
|
-
* @example
|
|
475
|
-
* isRelativePath('./file') // true
|
|
476
|
-
* isRelativePath('file.txt') // true
|
|
477
|
-
* isRelativePath('dir/file') // true
|
|
478
|
-
* isRelativePath('/absolute') // false
|
|
479
|
-
* isRelativePath('') // true
|
|
480
|
-
*
|
|
481
|
-
* @edge-cases
|
|
482
|
-
* - Relative paths may escape with .. patterns
|
|
483
|
-
* - Empty string is technically relative
|
|
484
|
-
*/
|
|
485
|
-
export function isRelativePath(pathStr) {
|
|
486
|
-
return !isAbsolutePath(pathStr);
|
|
487
|
-
}
|
|
488
|
-
/**
|
|
489
|
-
* Extracts the file name from a path (including extension)
|
|
490
|
-
*
|
|
491
|
-
* Safe extraction of filename from path.
|
|
492
|
-
*
|
|
493
|
-
* @param pathStr - Full path
|
|
494
|
-
* @returns File name without directory
|
|
495
|
-
*
|
|
496
|
-
* @example
|
|
497
|
-
* getFileName('/home/user/file.txt') // "file.txt"
|
|
498
|
-
* getFileName('file.txt') // "file.txt"
|
|
499
|
-
* getFileName('/home/user/') // "" (directory path)
|
|
500
|
-
* getFileName('/home/user/doc.tar.gz') // "doc.tar.gz"
|
|
501
|
-
* getFileName('') // ""
|
|
502
|
-
* getFileName('.gitignore') // ".gitignore"
|
|
503
|
-
*
|
|
504
|
-
* @edge-cases
|
|
505
|
-
* - Returns empty string for directory paths
|
|
506
|
-
* - Preserves multiple extensions
|
|
507
|
-
*/
|
|
508
|
-
export function getFileName(pathStr) {
|
|
509
|
-
if (!pathStr)
|
|
510
|
-
return '';
|
|
511
|
-
return path.basename(pathStr);
|
|
512
|
-
}
|
|
513
|
-
/**
|
|
514
|
-
* Extracts the directory path without the file name
|
|
515
|
-
*
|
|
516
|
-
* Returns the directory containing the file.
|
|
517
|
-
*
|
|
518
|
-
* @param pathStr - Full path
|
|
519
|
-
* @returns Directory path
|
|
520
|
-
*
|
|
521
|
-
* @example
|
|
522
|
-
* getDirName('/home/user/file.txt') // "/home/user"
|
|
523
|
-
* getDirName('file.txt') // "." (current directory)
|
|
524
|
-
* getDirName('/home/user/') // "/home/user"
|
|
525
|
-
* getDirName('') // "."
|
|
526
|
-
* getDirName('/') // "/" (root)
|
|
527
|
-
*
|
|
528
|
-
* @edge-cases
|
|
529
|
-
* - Returns "." for relative paths without directory
|
|
530
|
-
* - Trailing slashes are normalized
|
|
531
|
-
*/
|
|
532
|
-
export function getDirName(pathStr) {
|
|
533
|
-
if (!pathStr)
|
|
534
|
-
return '.';
|
|
535
|
-
return path.dirname(pathStr);
|
|
536
|
-
}
|
|
537
|
-
/**
|
|
538
|
-
* Extracts the file extension (without the dot)
|
|
539
|
-
*
|
|
540
|
-
* Gets the extension of a file.
|
|
541
|
-
*
|
|
542
|
-
* @param pathStr - File path
|
|
543
|
-
* @returns Extension without dot, or empty string
|
|
544
|
-
*
|
|
545
|
-
* @example
|
|
546
|
-
* getFileExtension('/home/user/file.txt') // "txt"
|
|
547
|
-
* getFileExtension('archive.tar.gz') // "gz"
|
|
548
|
-
* getFileExtension('file') // ""
|
|
549
|
-
* getFileExtension('.gitignore') // ""
|
|
550
|
-
* getFileExtension('/path/.hidden') // ""
|
|
551
|
-
* getFileExtension('') // ""
|
|
552
|
-
*
|
|
553
|
-
* @edge-cases
|
|
554
|
-
* - Hidden files starting with . don't have extension
|
|
555
|
-
* - Returns only the last extension (use custom parser for .tar.gz)
|
|
556
|
-
* - Case preserved (not lowercased)
|
|
557
|
-
*/
|
|
558
|
-
export function getFileExtension(pathStr) {
|
|
559
|
-
if (!pathStr)
|
|
560
|
-
return '';
|
|
561
|
-
const ext = path.extname(pathStr);
|
|
562
|
-
return ext.startsWith('.') ? ext.slice(1) : ext;
|
|
563
|
-
}
|
|
564
|
-
/**
|
|
565
|
-
* Gets file name without extension
|
|
566
|
-
*
|
|
567
|
-
* Returns just the base file name.
|
|
568
|
-
*
|
|
569
|
-
* @param pathStr - File path
|
|
570
|
-
* @returns File name without extension
|
|
571
|
-
*
|
|
572
|
-
* @example
|
|
573
|
-
* getBaseName('/home/user/file.txt') // "file"
|
|
574
|
-
* getBaseName('document.pdf') // "document"
|
|
575
|
-
* getBaseName('archive.tar.gz') // "archive.tar" (only removes last ext)
|
|
576
|
-
* getBaseName('noextension') // "noextension"
|
|
577
|
-
* getBaseName('') // ""
|
|
578
|
-
*
|
|
579
|
-
* @edge-cases
|
|
580
|
-
* - Only removes the last extension
|
|
581
|
-
* - For .tar.gz, returns "archive.tar"
|
|
582
|
-
*/
|
|
583
|
-
export function getBaseName(pathStr) {
|
|
584
|
-
if (!pathStr)
|
|
585
|
-
return '';
|
|
586
|
-
const basename = path.basename(pathStr);
|
|
587
|
-
const ext = path.extname(basename);
|
|
588
|
-
return ext ? basename.slice(0, -ext.length) : basename;
|
|
589
|
-
}
|
|
590
|
-
/**
|
|
591
|
-
* SECURITY: Compares two paths for equality
|
|
592
|
-
*
|
|
593
|
-
* Safe comparison that handles path variations (normalization, case sensitivity).
|
|
594
|
-
* Important for security checks.
|
|
595
|
-
*
|
|
596
|
-
* @param pathA - First path
|
|
597
|
-
* @param pathB - Second path
|
|
598
|
-
* @param caseSensitive - Case-sensitive comparison (default: true on Unix, false on Windows)
|
|
599
|
-
* @returns true if paths refer to the same location
|
|
600
|
-
*
|
|
601
|
-
* @example
|
|
602
|
-
* comparePaths('/home/user', '/home/user') // true
|
|
603
|
-
* comparePaths('/home/user/', '/home/user') // true (trailing slash removed)
|
|
604
|
-
* comparePaths('./file', 'file') // true (when run from same directory)
|
|
605
|
-
* comparePaths('/HOME/user', '/home/user', false) // true (case-insensitive)
|
|
606
|
-
* comparePaths('/home/user', '/other/path') // false
|
|
607
|
-
*
|
|
608
|
-
* @edge-cases
|
|
609
|
-
* - Normalizes paths before comparison
|
|
610
|
-
* - Case sensitivity depends on filesystem
|
|
611
|
-
* - Relative paths resolved to current directory
|
|
612
|
-
*
|
|
613
|
-
* @security-notes
|
|
614
|
-
* - Use for validating against whitelists
|
|
615
|
-
* - Prevents bypass via path normalization tricks
|
|
616
|
-
*/
|
|
617
|
-
export function comparePaths(pathA, pathB, caseSensitive = process.platform !== 'win32') {
|
|
618
|
-
try {
|
|
619
|
-
const normA = normalizePath(path.resolve(pathA));
|
|
620
|
-
const normB = normalizePath(path.resolve(pathB));
|
|
621
|
-
if (caseSensitive) {
|
|
622
|
-
return normA === normB;
|
|
623
|
-
}
|
|
624
|
-
return normA.toLowerCase() === normB.toLowerCase();
|
|
625
|
-
}
|
|
626
|
-
catch {
|
|
627
|
-
return false;
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
/**
|
|
631
|
-
* Checks if a path is contained within a base directory
|
|
632
|
-
*
|
|
633
|
-
* Useful for sandboxing and access control.
|
|
634
|
-
*
|
|
635
|
-
* @param pathStr - Path to check
|
|
636
|
-
* @param baseDir - Base directory
|
|
637
|
-
* @returns true if pathStr is within baseDir
|
|
638
|
-
*
|
|
639
|
-
* @example
|
|
640
|
-
* isPathWithinBase('/home/user/file.txt', '/home/user') // true
|
|
641
|
-
* isPathWithinBase('/home/user/docs/file.txt', '/home/user') // true
|
|
642
|
-
* isPathWithinBase('/home/user', '/home/user/subdir') // false
|
|
643
|
-
* isPathWithinBase('/etc/passwd', '/home/user') // false
|
|
644
|
-
* isPathWithinBase('/home/user/../etc/passwd', '/home/user') // false
|
|
645
|
-
*
|
|
646
|
-
* @edge-cases
|
|
647
|
-
* - Resolves paths before comparison
|
|
648
|
-
* - Trailing slashes ignored
|
|
649
|
-
* - Case-insensitive on Windows
|
|
650
|
-
*
|
|
651
|
-
* @security-notes
|
|
652
|
-
* - Critical for file upload handlers
|
|
653
|
-
* - Prevents directory traversal in validation
|
|
654
|
-
* - Use with normalizePath() for defense in depth
|
|
655
|
-
*/
|
|
656
|
-
export function isPathWithinBase(pathStr, baseDir) {
|
|
657
|
-
try {
|
|
658
|
-
const baseDirResolved = path.resolve(baseDir);
|
|
659
|
-
const pathResolved = path.resolve(baseDir, normalizePath(pathStr));
|
|
660
|
-
const relative = path.relative(baseDirResolved, pathResolved);
|
|
661
|
-
return !relative.startsWith('..') && !path.isAbsolute(relative);
|
|
662
|
-
}
|
|
663
|
-
catch {
|
|
664
|
-
return false;
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
/**
|
|
668
|
-
* Detects if a path contains directory traversal patterns
|
|
669
|
-
*
|
|
670
|
-
* Simple pattern-based detection for common attack vectors.
|
|
671
|
-
*
|
|
672
|
-
* @param pathStr - Path to check
|
|
673
|
-
* @returns true if path contains traversal patterns
|
|
674
|
-
*
|
|
675
|
-
* @example
|
|
676
|
-
* hasTraversalPattern('../../etc/passwd') // true
|
|
677
|
-
* hasTraversalPattern('file.txt') // false
|
|
678
|
-
* hasTraversalPattern('./file.txt') // false
|
|
679
|
-
* hasTraversalPattern('..\\..\\windows\\system32') // true (Windows)
|
|
680
|
-
* hasTraversalPattern('foo/..') // true
|
|
681
|
-
* hasTraversalPattern('') // false
|
|
682
|
-
*
|
|
683
|
-
* @edge-cases
|
|
684
|
-
* - Detects both / and \ separators
|
|
685
|
-
* - Catches .. patterns anywhere in path
|
|
686
|
-
* - May have false positives (validate with isPathSafe)
|
|
687
|
-
*
|
|
688
|
-
* @security-notes
|
|
689
|
-
* - Use as quick check before detailed validation
|
|
690
|
-
* - Not sufficient alone - use isPathSafe() for security
|
|
691
|
-
*/
|
|
692
|
-
export function hasTraversalPattern(pathStr) {
|
|
693
|
-
if (!pathStr)
|
|
694
|
-
return false;
|
|
695
|
-
// Check for .. patterns
|
|
696
|
-
return /(\.\.)|(\.\.\\)/.test(pathStr);
|
|
697
|
-
}
|
|
698
|
-
/**
|
|
699
|
-
* Detects if a path contains null bytes (injection attempt)
|
|
700
|
-
*
|
|
701
|
-
* Null bytes can truncate paths in C string libraries.
|
|
702
|
-
* Critical security check for some codebases.
|
|
703
|
-
*
|
|
704
|
-
* @param pathStr - Path to check
|
|
705
|
-
* @returns true if path contains null bytes
|
|
706
|
-
*
|
|
707
|
-
* @example
|
|
708
|
-
* hasNullBytes('file.txt') // false
|
|
709
|
-
* hasNullBytes('file.txt\0.jsp') // true
|
|
710
|
-
* hasNullBytes('') // false
|
|
711
|
-
*
|
|
712
|
-
* @edge-cases
|
|
713
|
-
* - Only relevant for C-based systems
|
|
714
|
-
* - Node.js handles this automatically in most cases
|
|
715
|
-
*/
|
|
716
|
-
export function hasNullBytes(pathStr) {
|
|
717
|
-
return pathStr.includes('\0');
|
|
718
|
-
}
|
|
719
|
-
/**
|
|
720
|
-
* Sanitizes a path by removing dangerous characters
|
|
721
|
-
*
|
|
722
|
-
* Removes null bytes, excess whitespace, and potentially problematic characters.
|
|
723
|
-
* Use for defensive programming.
|
|
724
|
-
*
|
|
725
|
-
* @param pathStr - Path to sanitize
|
|
726
|
-
* @returns Sanitized path
|
|
727
|
-
*
|
|
728
|
-
* @example
|
|
729
|
-
* sanitizePath('file.txt') // "file.txt"
|
|
730
|
-
* sanitizePath('file.txt\0.jsp') // "file.txt.jsp"
|
|
731
|
-
* sanitizePath('file name.txt') // "file name.txt"
|
|
732
|
-
* sanitizePath('') // ""
|
|
733
|
-
*
|
|
734
|
-
* @edge-cases
|
|
735
|
-
* - Doesn't validate path, only removes dangerous chars
|
|
736
|
-
* - Use with isPathSafe() for full validation
|
|
737
|
-
*/
|
|
738
|
-
export function sanitizePath(pathStr) {
|
|
739
|
-
if (!pathStr)
|
|
740
|
-
return '';
|
|
741
|
-
// Remove null bytes and excessive whitespace
|
|
742
|
-
return pathStr.replace(/\0/g, '').trim();
|
|
743
|
-
}
|
|
744
|
-
/**
|
|
745
|
-
* Gets the relative path between two paths
|
|
746
|
-
*
|
|
747
|
-
* Safe version of path.relative with error handling.
|
|
748
|
-
*
|
|
749
|
-
* @param from - Starting path
|
|
750
|
-
* @param to - Target path
|
|
751
|
-
* @returns Relative path from 'from' to 'to'
|
|
752
|
-
*
|
|
753
|
-
* @example
|
|
754
|
-
* getRelativePath('/home/user', '/home/user/file.txt')
|
|
755
|
-
* // "file.txt"
|
|
756
|
-
*
|
|
757
|
-
* getRelativePath('/home/user/docs', '/home/user/file.txt')
|
|
758
|
-
* // "../file.txt"
|
|
759
|
-
*
|
|
760
|
-
* getRelativePath('/home', '/var')
|
|
761
|
-
* // "../../var"
|
|
762
|
-
*
|
|
763
|
-
* @edge-cases
|
|
764
|
-
* - Empty paths treated as current directory
|
|
765
|
-
* - May produce .. patterns
|
|
766
|
-
*/
|
|
767
|
-
export function getRelativePath(from, to) {
|
|
768
|
-
try {
|
|
769
|
-
return path.relative(from || '.', to || '.');
|
|
770
|
-
}
|
|
771
|
-
catch {
|
|
772
|
-
return to;
|
|
773
|
-
}
|
|
774
|
-
}
|
|
775
|
-
/**
|
|
776
|
-
* SECURITY: Validates a list of paths
|
|
777
|
-
*
|
|
778
|
-
* Batch validation useful for multi-file operations.
|
|
779
|
-
*
|
|
780
|
-
* @param paths - Array of paths to validate
|
|
781
|
-
* @param options - Validation options
|
|
782
|
-
* @returns Array of valid paths
|
|
783
|
-
*
|
|
784
|
-
* @example
|
|
785
|
-
* validatePaths(userPaths, {
|
|
786
|
-
* base: '/app/uploads',
|
|
787
|
-
* filterUnsafe: true,
|
|
788
|
-
* })
|
|
789
|
-
*
|
|
790
|
-
* @edge-cases
|
|
791
|
-
* - Filters out duplicates if normalize: true
|
|
792
|
-
* - Returns empty array if no valid paths
|
|
793
|
-
*/
|
|
794
|
-
export function validatePaths(paths, options = {}) {
|
|
795
|
-
const { base, filterUnsafe = true, normalize = true } = options;
|
|
796
|
-
return paths.filter(p => {
|
|
797
|
-
if (filterUnsafe && !isPathSafe(p, base)) {
|
|
798
|
-
return false;
|
|
799
|
-
}
|
|
800
|
-
return true;
|
|
801
|
-
});
|
|
802
|
-
}
|
|
803
|
-
/**
|
|
804
|
-
* Creates a pattern to detect path variations
|
|
805
|
-
*
|
|
806
|
-
* Useful for accepting different path formats.
|
|
807
|
-
*
|
|
808
|
-
* @param pathStr - Base path
|
|
809
|
-
* @returns Test function for path equivalence
|
|
810
|
-
*
|
|
811
|
-
* @example
|
|
812
|
-
* const isSameFile = createPathMatcher('/home/user/file.txt');
|
|
813
|
-
* isSameFile('/home/user/file.txt') // true
|
|
814
|
-
* isSameFile('/home/user//file.txt') // true
|
|
815
|
-
* isSameFile('/home/user/./file.txt') // true
|
|
816
|
-
* isSameFile('~/file.txt') // false (if ~ not expanded)
|
|
817
|
-
*
|
|
818
|
-
* @edge-cases
|
|
819
|
-
* - Doesn't expand ~ (home directory)
|
|
820
|
-
* - Case-sensitive on Unix, insensitive on Windows
|
|
821
|
-
*/
|
|
822
|
-
export function createPathMatcher(pathStr) {
|
|
823
|
-
const normalized = normalizePath(path.resolve(pathStr));
|
|
824
|
-
return (other) => {
|
|
825
|
-
try {
|
|
826
|
-
const otherNormalized = normalizePath(path.resolve(other));
|
|
827
|
-
const isCaseSensitive = process.platform !== 'win32';
|
|
828
|
-
if (isCaseSensitive) {
|
|
829
|
-
return normalized === otherNormalized;
|
|
830
|
-
}
|
|
831
|
-
return normalized.toLowerCase() === otherNormalized.toLowerCase();
|
|
832
|
-
}
|
|
833
|
-
catch {
|
|
834
|
-
return false;
|
|
835
|
-
}
|
|
836
|
-
};
|
|
837
|
-
}
|
|
838
|
-
/**
|
|
839
|
-
* Checks if a file path looks like a suspicious upload
|
|
840
|
-
*
|
|
841
|
-
* Detects common file upload attack patterns.
|
|
842
|
-
*
|
|
843
|
-
* @param pathStr - File path to check
|
|
844
|
-
* @returns Array of detected issues (empty if safe)
|
|
845
|
-
*
|
|
846
|
-
* @example
|
|
847
|
-
* detectUploadThreats('shell.php.txt') // ['suspicious_extension_combo']
|
|
848
|
-
* detectUploadThreats('../../../etc/passwd') // ['traversal_pattern']
|
|
849
|
-
* detectUploadThreats('file.txt') // []
|
|
850
|
-
* detectUploadThreats('.htaccess') // ['hidden_file']
|
|
851
|
-
*
|
|
852
|
-
* @edge-cases
|
|
853
|
-
* - Uses heuristics, not definitive
|
|
854
|
-
* - May have false positives
|
|
855
|
-
* - Combine with extension whitelisting
|
|
856
|
-
*
|
|
857
|
-
* @security-notes
|
|
858
|
-
* - Use as additional layer, not primary validation
|
|
859
|
-
* - Always validate against whitelist of extensions
|
|
860
|
-
* - Store uploads outside web root
|
|
861
|
-
*/
|
|
862
|
-
export function detectUploadThreats(pathStr) {
|
|
863
|
-
const issues = [];
|
|
864
|
-
// Check for traversal
|
|
865
|
-
if (hasTraversalPattern(pathStr)) {
|
|
866
|
-
issues.push('traversal_pattern');
|
|
867
|
-
}
|
|
868
|
-
// Check for null bytes
|
|
869
|
-
if (hasNullBytes(pathStr)) {
|
|
870
|
-
issues.push('null_byte_injection');
|
|
871
|
-
}
|
|
872
|
-
// Check for hidden files
|
|
873
|
-
if (getFileName(pathStr).startsWith('.')) {
|
|
874
|
-
issues.push('hidden_file');
|
|
875
|
-
}
|
|
876
|
-
// Check for suspicious extension combinations
|
|
877
|
-
const filename = getFileName(pathStr);
|
|
878
|
-
const dangerousExts = ['php', 'php3', 'php4', 'phtml', 'jsp', 'asp', 'exe', 'sh', 'bat'];
|
|
879
|
-
const ext = getFileExtension(pathStr).toLowerCase();
|
|
880
|
-
const parts = filename.split('.');
|
|
881
|
-
// Check for suspicious double extension like shell.php.txt or image.php.jpg
|
|
882
|
-
if (parts.length > 2) {
|
|
883
|
-
// Check if any middle part is a dangerous extension
|
|
884
|
-
const middleParts = parts.slice(1, -1); // Exclude first part and last extension
|
|
885
|
-
if (middleParts.some(p => dangerousExts.includes(p.toLowerCase()))) {
|
|
886
|
-
issues.push('suspicious_extension_combo');
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
// Check if the final extension is dangerous
|
|
890
|
-
if (dangerousExts.includes(ext)) {
|
|
891
|
-
issues.push('dangerous_extension');
|
|
892
|
-
}
|
|
893
|
-
return issues;
|
|
894
|
-
}
|
|
895
|
-
//# sourceMappingURL=path-validator.js.map
|