openhorse 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +460 -0
- package/bin/openhorse +56 -0
- package/dist/agents/coder.d.ts +12 -0
- package/dist/agents/coder.d.ts.map +1 -0
- package/dist/agents/coder.js +48 -0
- package/dist/agents/coder.js.map +1 -0
- package/dist/agents/leader.d.ts +12 -0
- package/dist/agents/leader.d.ts.map +1 -0
- package/dist/agents/leader.js +49 -0
- package/dist/agents/leader.js.map +1 -0
- package/dist/agents/router.d.ts +59 -0
- package/dist/agents/router.d.ts.map +1 -0
- package/dist/agents/router.js +193 -0
- package/dist/agents/router.js.map +1 -0
- package/dist/cli-ink.d.ts +7 -0
- package/dist/cli-ink.d.ts.map +1 -0
- package/dist/cli-ink.js +135 -0
- package/dist/cli-ink.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +638 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/index.d.ts +12 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +1095 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/parser.d.ts +26 -0
- package/dist/commands/parser.d.ts.map +1 -0
- package/dist/commands/parser.js +61 -0
- package/dist/commands/parser.js.map +1 -0
- package/dist/commands/types.d.ts +61 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +32 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/core/agent.d.ts +66 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +55 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/brain.d.ts +41 -0
- package/dist/core/brain.d.ts.map +1 -0
- package/dist/core/brain.js +92 -0
- package/dist/core/brain.js.map +1 -0
- package/dist/core/cost-tracker.d.ts +107 -0
- package/dist/core/cost-tracker.d.ts.map +1 -0
- package/dist/core/cost-tracker.js +199 -0
- package/dist/core/cost-tracker.js.map +1 -0
- package/dist/core/strategy-tracker.d.ts +61 -0
- package/dist/core/strategy-tracker.d.ts.map +1 -0
- package/dist/core/strategy-tracker.js +124 -0
- package/dist/core/strategy-tracker.js.map +1 -0
- package/dist/framework/index.d.ts +20 -0
- package/dist/framework/index.d.ts.map +1 -0
- package/dist/framework/index.js +29 -0
- package/dist/framework/index.js.map +1 -0
- package/dist/framework/prompt.d.ts +40 -0
- package/dist/framework/prompt.d.ts.map +1 -0
- package/dist/framework/prompt.js +112 -0
- package/dist/framework/prompt.js.map +1 -0
- package/dist/framework/query.d.ts +86 -0
- package/dist/framework/query.d.ts.map +1 -0
- package/dist/framework/query.js +177 -0
- package/dist/framework/query.js.map +1 -0
- package/dist/framework/store.d.ts +64 -0
- package/dist/framework/store.d.ts.map +1 -0
- package/dist/framework/store.js +78 -0
- package/dist/framework/store.js.map +1 -0
- package/dist/framework/tool-state.d.ts +22 -0
- package/dist/framework/tool-state.d.ts.map +1 -0
- package/dist/framework/tool-state.js +40 -0
- package/dist/framework/tool-state.js.map +1 -0
- package/dist/framework/tool.d.ts +88 -0
- package/dist/framework/tool.d.ts.map +1 -0
- package/dist/framework/tool.js +60 -0
- package/dist/framework/tool.js.map +1 -0
- package/dist/harness/harness.d.ts +96 -0
- package/dist/harness/harness.d.ts.map +1 -0
- package/dist/harness/harness.js +224 -0
- package/dist/harness/harness.js.map +1 -0
- package/dist/harness/safety.d.ts +89 -0
- package/dist/harness/safety.d.ts.map +1 -0
- package/dist/harness/safety.js +178 -0
- package/dist/harness/safety.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +178 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +473 -0
- package/dist/init.js.map +1 -0
- package/dist/ink/bidi.d.ts +16 -0
- package/dist/ink/bidi.d.ts.map +1 -0
- package/dist/ink/bidi.js +124 -0
- package/dist/ink/bidi.js.map +1 -0
- package/dist/ink/clearTerminal.d.ts +14 -0
- package/dist/ink/clearTerminal.d.ts.map +1 -0
- package/dist/ink/clearTerminal.js +63 -0
- package/dist/ink/clearTerminal.js.map +1 -0
- package/dist/ink/colorize.d.ts +17 -0
- package/dist/ink/colorize.d.ts.map +1 -0
- package/dist/ink/colorize.js +208 -0
- package/dist/ink/colorize.js.map +1 -0
- package/dist/ink/components/App.d.ts +73 -0
- package/dist/ink/components/App.d.ts.map +1 -0
- package/dist/ink/components/App.js +646 -0
- package/dist/ink/components/App.js.map +1 -0
- package/dist/ink/components/AppContext.d.ts +12 -0
- package/dist/ink/components/AppContext.d.ts.map +1 -0
- package/dist/ink/components/AppContext.js +14 -0
- package/dist/ink/components/AppContext.js.map +1 -0
- package/dist/ink/components/Box.d.ts +44 -0
- package/dist/ink/components/Box.d.ts.map +1 -0
- package/dist/ink/components/Box.js +191 -0
- package/dist/ink/components/Box.js.map +1 -0
- package/dist/ink/components/ClockContext.d.ts +9 -0
- package/dist/ink/components/ClockContext.d.ts.map +1 -0
- package/dist/ink/components/ClockContext.js +146 -0
- package/dist/ink/components/ClockContext.js.map +1 -0
- package/dist/ink/components/CursorDeclarationContext.d.ts +23 -0
- package/dist/ink/components/CursorDeclarationContext.d.ts.map +1 -0
- package/dist/ink/components/CursorDeclarationContext.js +6 -0
- package/dist/ink/components/CursorDeclarationContext.js.map +1 -0
- package/dist/ink/components/ErrorOverview.d.ts +6 -0
- package/dist/ink/components/ErrorOverview.d.ts.map +1 -0
- package/dist/ink/components/ErrorOverview.js +27 -0
- package/dist/ink/components/ErrorOverview.js.map +1 -0
- package/dist/ink/components/Newline.d.ts +13 -0
- package/dist/ink/components/Newline.d.ts.map +1 -0
- package/dist/ink/components/Newline.js +36 -0
- package/dist/ink/components/Newline.js.map +1 -0
- package/dist/ink/components/NoSelect.d.ts +20 -0
- package/dist/ink/components/NoSelect.d.ts.map +1 -0
- package/dist/ink/components/NoSelect.js +63 -0
- package/dist/ink/components/NoSelect.js.map +1 -0
- package/dist/ink/components/RawAnsi.d.ts +17 -0
- package/dist/ink/components/RawAnsi.d.ts.map +1 -0
- package/dist/ink/components/RawAnsi.js +52 -0
- package/dist/ink/components/RawAnsi.js.map +1 -0
- package/dist/ink/components/Spacer.d.ts +6 -0
- package/dist/ink/components/Spacer.d.ts.map +1 -0
- package/dist/ink/components/Spacer.js +26 -0
- package/dist/ink/components/Spacer.js.map +1 -0
- package/dist/ink/components/StdinContext.d.ts +28 -0
- package/dist/ink/components/StdinContext.d.ts.map +1 -0
- package/dist/ink/components/StdinContext.js +19 -0
- package/dist/ink/components/StdinContext.js.map +1 -0
- package/dist/ink/components/TerminalFocusContext.d.ts +10 -0
- package/dist/ink/components/TerminalFocusContext.d.ts.map +1 -0
- package/dist/ink/components/TerminalFocusContext.js +81 -0
- package/dist/ink/components/TerminalFocusContext.js.map +1 -0
- package/dist/ink/components/TerminalSizeContext.d.ts +6 -0
- package/dist/ink/components/TerminalSizeContext.d.ts.map +1 -0
- package/dist/ink/components/TerminalSizeContext.js +6 -0
- package/dist/ink/components/TerminalSizeContext.js.map +1 -0
- package/dist/ink/components/Text.d.ts +56 -0
- package/dist/ink/components/Text.d.ts.map +1 -0
- package/dist/ink/components/Text.js +201 -0
- package/dist/ink/components/Text.js.map +1 -0
- package/dist/ink/constants.d.ts +2 -0
- package/dist/ink/constants.d.ts.map +1 -0
- package/dist/ink/constants.js +6 -0
- package/dist/ink/constants.js.map +1 -0
- package/dist/ink/devtools.d.ts +3 -0
- package/dist/ink/devtools.d.ts.map +1 -0
- package/dist/ink/devtools.js +5 -0
- package/dist/ink/devtools.js.map +1 -0
- package/dist/ink/dom.d.ts +77 -0
- package/dist/ink/dom.d.ts.map +1 -0
- package/dist/ink/dom.js +322 -0
- package/dist/ink/dom.js.map +1 -0
- package/dist/ink/events/click-event.d.ts +32 -0
- package/dist/ink/events/click-event.d.ts.map +1 -0
- package/dist/ink/events/click-event.js +30 -0
- package/dist/ink/events/click-event.js.map +1 -0
- package/dist/ink/events/dispatcher.d.ts +41 -0
- package/dist/ink/events/dispatcher.d.ts.map +1 -0
- package/dist/ink/events/dispatcher.js +181 -0
- package/dist/ink/events/dispatcher.js.map +1 -0
- package/dist/ink/events/emitter.d.ts +6 -0
- package/dist/ink/events/emitter.d.ts.map +1 -0
- package/dist/ink/events/emitter.js +36 -0
- package/dist/ink/events/emitter.js.map +1 -0
- package/dist/ink/events/event-handlers.d.ts +47 -0
- package/dist/ink/events/event-handlers.d.ts.map +1 -0
- package/dist/ink/events/event-handlers.js +34 -0
- package/dist/ink/events/event-handlers.js.map +1 -0
- package/dist/ink/events/event.d.ts +6 -0
- package/dist/ink/events/event.d.ts.map +1 -0
- package/dist/ink/events/event.js +16 -0
- package/dist/ink/events/event.js.map +1 -0
- package/dist/ink/events/focus-event.d.ts +14 -0
- package/dist/ink/events/focus-event.d.ts.map +1 -0
- package/dist/ink/events/focus-event.js +20 -0
- package/dist/ink/events/focus-event.js.map +1 -0
- package/dist/ink/events/input-event.d.ts +31 -0
- package/dist/ink/events/input-event.d.ts.map +1 -0
- package/dist/ink/events/input-event.js +163 -0
- package/dist/ink/events/input-event.js.map +1 -0
- package/dist/ink/events/keyboard-event.d.ts +20 -0
- package/dist/ink/events/keyboard-event.d.ts.map +1 -0
- package/dist/ink/events/keyboard-event.js +44 -0
- package/dist/ink/events/keyboard-event.js.map +1 -0
- package/dist/ink/events/terminal-event.d.ts +55 -0
- package/dist/ink/events/terminal-event.d.ts.map +1 -0
- package/dist/ink/events/terminal-event.js +79 -0
- package/dist/ink/events/terminal-event.js.map +1 -0
- package/dist/ink/events/terminal-focus-event.d.ts +14 -0
- package/dist/ink/events/terminal-focus-event.d.ts.map +1 -0
- package/dist/ink/events/terminal-focus-event.js +19 -0
- package/dist/ink/events/terminal-focus-event.js.map +1 -0
- package/dist/ink/focus.d.ts +44 -0
- package/dist/ink/focus.d.ts.map +1 -0
- package/dist/ink/focus.js +164 -0
- package/dist/ink/focus.js.map +1 -0
- package/dist/ink/frame.d.ts +95 -0
- package/dist/ink/frame.d.ts.map +1 -0
- package/dist/ink/frame.js +35 -0
- package/dist/ink/frame.js.map +1 -0
- package/dist/ink/get-max-width.d.ts +18 -0
- package/dist/ink/get-max-width.d.ts.map +1 -0
- package/dist/ink/get-max-width.js +26 -0
- package/dist/ink/get-max-width.js.map +1 -0
- package/dist/ink/hit-test.d.ts +34 -0
- package/dist/ink/hit-test.d.ts.map +1 -0
- package/dist/ink/hit-test.js +119 -0
- package/dist/ink/hit-test.js.map +1 -0
- package/dist/ink/hooks/use-animation-frame.d.ts +27 -0
- package/dist/ink/hooks/use-animation-frame.d.ts.map +1 -0
- package/dist/ink/hooks/use-animation-frame.js +52 -0
- package/dist/ink/hooks/use-animation-frame.js.map +1 -0
- package/dist/ink/hooks/use-app.d.ts +6 -0
- package/dist/ink/hooks/use-app.d.ts.map +1 -0
- package/dist/ink/hooks/use-app.js +13 -0
- package/dist/ink/hooks/use-app.js.map +1 -0
- package/dist/ink/hooks/use-declared-cursor.d.ts +27 -0
- package/dist/ink/hooks/use-declared-cursor.d.ts.map +1 -0
- package/dist/ink/hooks/use-declared-cursor.js +67 -0
- package/dist/ink/hooks/use-declared-cursor.js.map +1 -0
- package/dist/ink/hooks/use-input.d.ts +38 -0
- package/dist/ink/hooks/use-input.d.ts.map +1 -0
- package/dist/ink/hooks/use-input.js +86 -0
- package/dist/ink/hooks/use-input.js.map +1 -0
- package/dist/ink/hooks/use-interval.d.ts +19 -0
- package/dist/ink/hooks/use-interval.d.ts.map +1 -0
- package/dist/ink/hooks/use-interval.js +59 -0
- package/dist/ink/hooks/use-interval.js.map +1 -0
- package/dist/ink/hooks/use-search-highlight.d.ts +31 -0
- package/dist/ink/hooks/use-search-highlight.d.ts.map +1 -0
- package/dist/ink/hooks/use-search-highlight.js +39 -0
- package/dist/ink/hooks/use-search-highlight.js.map +1 -0
- package/dist/ink/hooks/use-selection.d.ts +40 -0
- package/dist/ink/hooks/use-selection.d.ts.map +1 -0
- package/dist/ink/hooks/use-selection.js +68 -0
- package/dist/ink/hooks/use-selection.js.map +1 -0
- package/dist/ink/hooks/use-stdin.d.ts +6 -0
- package/dist/ink/hooks/use-stdin.d.ts.map +1 -0
- package/dist/ink/hooks/use-stdin.js +13 -0
- package/dist/ink/hooks/use-stdin.js.map +1 -0
- package/dist/ink/hooks/use-tab-status.d.ts +14 -0
- package/dist/ink/hooks/use-tab-status.d.ts.map +1 -0
- package/dist/ink/hooks/use-tab-status.js +61 -0
- package/dist/ink/hooks/use-tab-status.js.map +1 -0
- package/dist/ink/hooks/use-terminal-focus.d.ts +11 -0
- package/dist/ink/hooks/use-terminal-focus.d.ts.map +1 -0
- package/dist/ink/hooks/use-terminal-focus.js +22 -0
- package/dist/ink/hooks/use-terminal-focus.js.map +1 -0
- package/dist/ink/hooks/use-terminal-title.d.ts +13 -0
- package/dist/ink/hooks/use-terminal-title.d.ts.map +1 -0
- package/dist/ink/hooks/use-terminal-title.js +36 -0
- package/dist/ink/hooks/use-terminal-title.js.map +1 -0
- package/dist/ink/hooks/use-terminal-viewport.d.ts +30 -0
- package/dist/ink/hooks/use-terminal-viewport.d.ts.map +1 -0
- package/dist/ink/hooks/use-terminal-viewport.js +81 -0
- package/dist/ink/hooks/use-terminal-viewport.js.map +1 -0
- package/dist/ink/index.d.ts +54 -0
- package/dist/ink/index.d.ts.map +1 -0
- package/dist/ink/index.js +111 -0
- package/dist/ink/index.js.map +1 -0
- package/dist/ink/ink.d.ts +371 -0
- package/dist/ink/ink.d.ts.map +1 -0
- package/dist/ink/ink.js +1686 -0
- package/dist/ink/ink.js.map +1 -0
- package/dist/ink/instances.d.ts +4 -0
- package/dist/ink/instances.d.ts.map +1 -0
- package/dist/ink/instances.js +10 -0
- package/dist/ink/instances.js.map +1 -0
- package/dist/ink/line-width-cache.d.ts +2 -0
- package/dist/ink/line-width-cache.d.ts.map +1 -0
- package/dist/ink/line-width-cache.js +23 -0
- package/dist/ink/line-width-cache.js.map +1 -0
- package/dist/ink/log-update.d.ts +18 -0
- package/dist/ink/log-update.d.ts.map +1 -0
- package/dist/ink/log-update.js +637 -0
- package/dist/ink/log-update.js.map +1 -0
- package/dist/ink/measure-element.d.ts +17 -0
- package/dist/ink/measure-element.d.ts.map +1 -0
- package/dist/ink/measure-element.js +11 -0
- package/dist/ink/measure-element.js.map +1 -0
- package/dist/ink/measure-text.d.ts +7 -0
- package/dist/ink/measure-text.d.ts.map +1 -0
- package/dist/ink/measure-text.js +38 -0
- package/dist/ink/measure-text.js.map +1 -0
- package/dist/ink/node-cache.d.ts +21 -0
- package/dist/ink/node-cache.d.ts.map +1 -0
- package/dist/ink/node-cache.js +36 -0
- package/dist/ink/node-cache.js.map +1 -0
- package/dist/ink/optimizer.d.ts +16 -0
- package/dist/ink/optimizer.d.ts.map +1 -0
- package/dist/ink/optimizer.js +85 -0
- package/dist/ink/optimizer.js.map +1 -0
- package/dist/ink/output.d.ts +120 -0
- package/dist/ink/output.d.ts.map +1 -0
- package/dist/ink/output.js +559 -0
- package/dist/ink/output.js.map +1 -0
- package/dist/ink/parse-keypress.d.ts +112 -0
- package/dist/ink/parse-keypress.d.ts.map +1 -0
- package/dist/ink/parse-keypress.js +719 -0
- package/dist/ink/parse-keypress.js.map +1 -0
- package/dist/ink/parse-keypress.test.d.ts +2 -0
- package/dist/ink/parse-keypress.test.d.ts.map +1 -0
- package/dist/ink/parse-keypress.test.js +37 -0
- package/dist/ink/parse-keypress.test.js.map +1 -0
- package/dist/ink/reconciler.d.ts +12 -0
- package/dist/ink/reconciler.d.ts.map +1 -0
- package/dist/ink/reconciler.js +456 -0
- package/dist/ink/reconciler.js.map +1 -0
- package/dist/ink/render-border.d.ts +25 -0
- package/dist/ink/render-border.d.ts.map +1 -0
- package/dist/ink/render-border.js +141 -0
- package/dist/ink/render-border.js.map +1 -0
- package/dist/ink/render-node-to-output.d.ts +46 -0
- package/dist/ink/render-node-to-output.d.ts.map +1 -0
- package/dist/ink/render-node-to-output.js +1257 -0
- package/dist/ink/render-node-to-output.js.map +1 -0
- package/dist/ink/render-to-screen.d.ts +47 -0
- package/dist/ink/render-to-screen.d.ts.map +1 -0
- package/dist/ink/render-to-screen.js +213 -0
- package/dist/ink/render-to-screen.js.map +1 -0
- package/dist/ink/renderer.d.ts +15 -0
- package/dist/ink/renderer.d.ts.map +1 -0
- package/dist/ink/renderer.js +169 -0
- package/dist/ink/renderer.js.map +1 -0
- package/dist/ink/root.d.ts +75 -0
- package/dist/ink/root.d.ts.map +1 -0
- package/dist/ink/root.js +89 -0
- package/dist/ink/root.js.map +1 -0
- package/dist/ink/screen.d.ts +270 -0
- package/dist/ink/screen.d.ts.map +1 -0
- package/dist/ink/screen.js +1194 -0
- package/dist/ink/screen.js.map +1 -0
- package/dist/ink/searchHighlight.d.ts +21 -0
- package/dist/ink/searchHighlight.d.ts.map +1 -0
- package/dist/ink/searchHighlight.js +82 -0
- package/dist/ink/searchHighlight.js.map +1 -0
- package/dist/ink/selection.d.ts +230 -0
- package/dist/ink/selection.d.ts.map +1 -0
- package/dist/ink/selection.js +814 -0
- package/dist/ink/selection.js.map +1 -0
- package/dist/ink/squash-text-nodes.d.ts +23 -0
- package/dist/ink/squash-text-nodes.d.ts.map +1 -0
- package/dist/ink/squash-text-nodes.js +60 -0
- package/dist/ink/squash-text-nodes.js.map +1 -0
- package/dist/ink/stringWidth.d.ts +2 -0
- package/dist/ink/stringWidth.d.ts.map +1 -0
- package/dist/ink/stringWidth.js +207 -0
- package/dist/ink/stringWidth.js.map +1 -0
- package/dist/ink/styles.d.ts +307 -0
- package/dist/ink/styles.d.ts.map +1 -0
- package/dist/ink/styles.js +302 -0
- package/dist/ink/styles.js.map +1 -0
- package/dist/ink/supports-hyperlinks.d.ts +14 -0
- package/dist/ink/supports-hyperlinks.d.ts.map +1 -0
- package/dist/ink/supports-hyperlinks.js +48 -0
- package/dist/ink/supports-hyperlinks.js.map +1 -0
- package/dist/ink/tabstops.d.ts +2 -0
- package/dist/ink/tabstops.d.ts.map +1 -0
- package/dist/ink/tabstops.js +43 -0
- package/dist/ink/tabstops.js.map +1 -0
- package/dist/ink/terminal-focus-state.d.ts +7 -0
- package/dist/ink/terminal-focus-state.d.ts.map +1 -0
- package/dist/ink/terminal-focus-state.js +43 -0
- package/dist/ink/terminal-focus-state.js.map +1 -0
- package/dist/ink/terminal-querier.d.ts +130 -0
- package/dist/ink/terminal-querier.d.ts.map +1 -0
- package/dist/ink/terminal-querier.js +184 -0
- package/dist/ink/terminal-querier.js.map +1 -0
- package/dist/ink/terminal.d.ts +56 -0
- package/dist/ink/terminal.d.ts.map +1 -0
- package/dist/ink/terminal.js +249 -0
- package/dist/ink/terminal.js.map +1 -0
- package/dist/ink/termio/csi.d.ts +166 -0
- package/dist/ink/termio/csi.d.ts.map +1 -0
- package/dist/ink/termio/csi.js +285 -0
- package/dist/ink/termio/csi.js.map +1 -0
- package/dist/ink/termio/dec.d.ts +38 -0
- package/dist/ink/termio/dec.d.ts.map +1 -0
- package/dist/ink/termio/dec.js +59 -0
- package/dist/ink/termio/dec.js.map +1 -0
- package/dist/ink/termio.d.ts +25 -0
- package/dist/ink/termio.d.ts.map +1 -0
- package/dist/ink/termio.js +32 -0
- package/dist/ink/termio.js.map +1 -0
- package/dist/ink/useTerminalNotification.d.ts +27 -0
- package/dist/ink/useTerminalNotification.d.ts.map +1 -0
- package/dist/ink/useTerminalNotification.js +62 -0
- package/dist/ink/useTerminalNotification.js.map +1 -0
- package/dist/ink/warn.d.ts +2 -0
- package/dist/ink/warn.d.ts.map +1 -0
- package/dist/ink/warn.js +14 -0
- package/dist/ink/warn.js.map +1 -0
- package/dist/ink/widest-line.d.ts +2 -0
- package/dist/ink/widest-line.d.ts.map +1 -0
- package/dist/ink/widest-line.js +18 -0
- package/dist/ink/widest-line.js.map +1 -0
- package/dist/ink/wrap-text.d.ts +3 -0
- package/dist/ink/wrap-text.d.ts.map +1 -0
- package/dist/ink/wrap-text.js +61 -0
- package/dist/ink/wrap-text.js.map +1 -0
- package/dist/ink/wrapAnsi.d.ts +8 -0
- package/dist/ink/wrapAnsi.d.ts.map +1 -0
- package/dist/ink/wrapAnsi.js +13 -0
- package/dist/ink/wrapAnsi.js.map +1 -0
- package/dist/memory/embeddings.d.ts +33 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +123 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/index.d.ts +14 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +31 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/prompts.d.ts +12 -0
- package/dist/memory/prompts.d.ts.map +1 -0
- package/dist/memory/prompts.js +117 -0
- package/dist/memory/prompts.js.map +1 -0
- package/dist/memory/semantic-search.d.ts +45 -0
- package/dist/memory/semantic-search.d.ts.map +1 -0
- package/dist/memory/semantic-search.js +112 -0
- package/dist/memory/semantic-search.js.map +1 -0
- package/dist/memory/storage.d.ts +79 -0
- package/dist/memory/storage.d.ts.map +1 -0
- package/dist/memory/storage.js +285 -0
- package/dist/memory/storage.js.map +1 -0
- package/dist/memory/store.d.ts +103 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +226 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/types.d.ts +40 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +71 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/validation.d.ts +28 -0
- package/dist/memory/validation.d.ts.map +1 -0
- package/dist/memory/validation.js +147 -0
- package/dist/memory/validation.js.map +1 -0
- package/dist/memory/vector-store.d.ts +49 -0
- package/dist/memory/vector-store.d.ts.map +1 -0
- package/dist/memory/vector-store.js +259 -0
- package/dist/memory/vector-store.js.map +1 -0
- package/dist/screens/REPL.d.ts +21 -0
- package/dist/screens/REPL.d.ts.map +1 -0
- package/dist/screens/REPL.js +139 -0
- package/dist/screens/REPL.js.map +1 -0
- package/dist/services/agent-runner.d.ts +68 -0
- package/dist/services/agent-runner.d.ts.map +1 -0
- package/dist/services/agent-runner.js +186 -0
- package/dist/services/agent-runner.js.map +1 -0
- package/dist/services/atomic-write.d.ts +12 -0
- package/dist/services/atomic-write.d.ts.map +1 -0
- package/dist/services/atomic-write.js +27 -0
- package/dist/services/atomic-write.js.map +1 -0
- package/dist/services/config-dir.d.ts +55 -0
- package/dist/services/config-dir.d.ts.map +1 -0
- package/dist/services/config-dir.js +136 -0
- package/dist/services/config-dir.js.map +1 -0
- package/dist/services/config.d.ts +54 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +98 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/file-glob.d.ts +26 -0
- package/dist/services/file-glob.d.ts.map +1 -0
- package/dist/services/file-glob.js +134 -0
- package/dist/services/file-glob.js.map +1 -0
- package/dist/services/global-config.d.ts +109 -0
- package/dist/services/global-config.d.ts.map +1 -0
- package/dist/services/global-config.js +211 -0
- package/dist/services/global-config.js.map +1 -0
- package/dist/services/llm.d.ts +139 -0
- package/dist/services/llm.d.ts.map +1 -0
- package/dist/services/llm.js +376 -0
- package/dist/services/llm.js.map +1 -0
- package/dist/services/memory.d.ts +39 -0
- package/dist/services/memory.d.ts.map +1 -0
- package/dist/services/memory.js +88 -0
- package/dist/services/memory.js.map +1 -0
- package/dist/services/session-storage.d.ts +136 -0
- package/dist/services/session-storage.d.ts.map +1 -0
- package/dist/services/session-storage.js +304 -0
- package/dist/services/session-storage.js.map +1 -0
- package/dist/services/task-manager.d.ts +154 -0
- package/dist/services/task-manager.d.ts.map +1 -0
- package/dist/services/task-manager.js +288 -0
- package/dist/services/task-manager.js.map +1 -0
- package/dist/services/yaml-config.d.ts +57 -0
- package/dist/services/yaml-config.d.ts.map +1 -0
- package/dist/services/yaml-config.js +176 -0
- package/dist/services/yaml-config.js.map +1 -0
- package/dist/skills/discovery.d.ts +22 -0
- package/dist/skills/discovery.d.ts.map +1 -0
- package/dist/skills/discovery.js +75 -0
- package/dist/skills/discovery.js.map +1 -0
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +26 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +48 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +231 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/registry.d.ts +37 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +134 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/types.d.ts +89 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +24 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tools/bash_security.d.ts +64 -0
- package/dist/tools/bash_security.d.ts.map +1 -0
- package/dist/tools/bash_security.js +291 -0
- package/dist/tools/bash_security.js.map +1 -0
- package/dist/tools/index.d.ts +23 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +965 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mcp.d.ts +72 -0
- package/dist/tools/mcp.d.ts.map +1 -0
- package/dist/tools/mcp.js +422 -0
- package/dist/tools/mcp.js.map +1 -0
- package/dist/tools/plan.d.ts +18 -0
- package/dist/tools/plan.d.ts.map +1 -0
- package/dist/tools/plan.js +75 -0
- package/dist/tools/plan.js.map +1 -0
- package/dist/tools/todo.d.ts +18 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +153 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/web.d.ts +13 -0
- package/dist/tools/web.d.ts.map +1 -0
- package/dist/tools/web.js +377 -0
- package/dist/tools/web.js.map +1 -0
- package/dist/ui/box.d.ts +56 -0
- package/dist/ui/box.d.ts.map +1 -0
- package/dist/ui/box.js +241 -0
- package/dist/ui/box.js.map +1 -0
- package/dist/ui/command-panel.d.ts +55 -0
- package/dist/ui/command-panel.d.ts.map +1 -0
- package/dist/ui/command-panel.js +212 -0
- package/dist/ui/command-panel.js.map +1 -0
- package/dist/ui/file-completion.d.ts +62 -0
- package/dist/ui/file-completion.d.ts.map +1 -0
- package/dist/ui/file-completion.js +209 -0
- package/dist/ui/file-completion.js.map +1 -0
- package/dist/ui/markdown.d.ts +12 -0
- package/dist/ui/markdown.d.ts.map +1 -0
- package/dist/ui/markdown.js +215 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/multiline-input.d.ts +47 -0
- package/dist/ui/multiline-input.d.ts.map +1 -0
- package/dist/ui/multiline-input.js +94 -0
- package/dist/ui/multiline-input.js.map +1 -0
- package/dist/ui/status-bar.d.ts +33 -0
- package/dist/ui/status-bar.d.ts.map +1 -0
- package/dist/ui/status-bar.js +96 -0
- package/dist/ui/status-bar.js.map +1 -0
- package/dist/ui/stream-markdown.d.ts +35 -0
- package/dist/ui/stream-markdown.d.ts.map +1 -0
- package/dist/ui/stream-markdown.js +138 -0
- package/dist/ui/stream-markdown.js.map +1 -0
- package/dist/ui/suggestions.d.ts +35 -0
- package/dist/ui/suggestions.d.ts.map +1 -0
- package/dist/ui/suggestions.js +118 -0
- package/dist/ui/suggestions.js.map +1 -0
- package/dist/ui/tool-preview.d.ts +34 -0
- package/dist/ui/tool-preview.d.ts.map +1 -0
- package/dist/ui/tool-preview.js +128 -0
- package/dist/ui/tool-preview.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - 文件匹配服务
|
|
4
|
+
*
|
|
5
|
+
* 用于 @-提及文件路径补全。
|
|
6
|
+
* 使用 Node.js 内置 fs 模块,无需额外依赖。
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.matchFiles = matchFiles;
|
|
10
|
+
exports.matchTopLevel = matchTopLevel;
|
|
11
|
+
exports.pathExists = pathExists;
|
|
12
|
+
const fs_1 = require("fs");
|
|
13
|
+
const path_1 = require("path");
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Gitignore 解析
|
|
16
|
+
// ============================================================================
|
|
17
|
+
const DEFAULT_IGNORE = ['node_modules', '.git', 'dist', '.DS_Store', '*.log'];
|
|
18
|
+
/**
|
|
19
|
+
* 解析 .gitignore 文件
|
|
20
|
+
*/
|
|
21
|
+
function parseGitignore(cwd) {
|
|
22
|
+
const gitignorePath = (0, path_1.join)(cwd, '.gitignore');
|
|
23
|
+
const patterns = [...DEFAULT_IGNORE];
|
|
24
|
+
if ((0, fs_1.existsSync)(gitignorePath)) {
|
|
25
|
+
try {
|
|
26
|
+
const content = (0, fs_1.readFileSync)(gitignorePath, 'utf-8');
|
|
27
|
+
const lines = content.split('\n')
|
|
28
|
+
.map(line => line.trim())
|
|
29
|
+
.filter(line => line && !line.startsWith('#'));
|
|
30
|
+
patterns.push(...lines);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// ignore
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return patterns;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 检查路径是否被忽略
|
|
40
|
+
*/
|
|
41
|
+
function isIgnored(path, ignorePatterns) {
|
|
42
|
+
const name = path.split('/').pop() || path;
|
|
43
|
+
for (const pattern of ignorePatterns) {
|
|
44
|
+
if (pattern.startsWith('*.')) {
|
|
45
|
+
const ext = pattern.slice(2);
|
|
46
|
+
if (name.endsWith(ext))
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
else if (pattern.endsWith('/**')) {
|
|
50
|
+
const base = pattern.slice(0, -3);
|
|
51
|
+
if (path.startsWith(base))
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
else if (name === pattern) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// 文件匹配
|
|
62
|
+
// ============================================================================
|
|
63
|
+
/**
|
|
64
|
+
* 匹配文件路径
|
|
65
|
+
* @param query 用户输入的路径查询(@ 后的部分)
|
|
66
|
+
* @param cwd 当前工作目录
|
|
67
|
+
* @returns 匹配的文件列表(最多 20 个)
|
|
68
|
+
*/
|
|
69
|
+
function matchFiles(query, cwd) {
|
|
70
|
+
const ignorePatterns = parseGitignore(cwd);
|
|
71
|
+
const results = [];
|
|
72
|
+
try {
|
|
73
|
+
// 解析查询路径
|
|
74
|
+
const parts = query.split('/');
|
|
75
|
+
const dirPath = parts.length > 1 ? (0, path_1.join)(cwd, parts.slice(0, -1).join('/')) : cwd;
|
|
76
|
+
const filterPrefix = parts.length > 1 ? parts[parts.length - 1] : query;
|
|
77
|
+
if (!(0, fs_1.existsSync)(dirPath)) {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
const entries = (0, fs_1.readdirSync)(dirPath);
|
|
81
|
+
for (const entry of entries) {
|
|
82
|
+
const entryPath = parts.length > 1
|
|
83
|
+
? parts.slice(0, -1).join('/') + '/' + entry
|
|
84
|
+
: entry;
|
|
85
|
+
// 过滤
|
|
86
|
+
if (filterPrefix && !entry.startsWith(filterPrefix)) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// 检查忽略
|
|
90
|
+
if (isIgnored(entryPath, ignorePatterns)) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// 检查隐藏文件
|
|
94
|
+
if (entry.startsWith('.')) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const fullPath = (0, path_1.join)(dirPath, entry);
|
|
98
|
+
const isDirectory = (0, fs_1.statSync)(fullPath).isDirectory();
|
|
99
|
+
results.push({
|
|
100
|
+
path: entryPath,
|
|
101
|
+
isDirectory,
|
|
102
|
+
});
|
|
103
|
+
if (results.length >= 20) {
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// 目录读取失败
|
|
110
|
+
}
|
|
111
|
+
// 排序:目录优先
|
|
112
|
+
results.sort((a, b) => {
|
|
113
|
+
if (a.isDirectory && !b.isDirectory)
|
|
114
|
+
return -1;
|
|
115
|
+
if (!a.isDirectory && b.isDirectory)
|
|
116
|
+
return 1;
|
|
117
|
+
return a.path.localeCompare(b.path);
|
|
118
|
+
});
|
|
119
|
+
return results;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 快速匹配顶层路径
|
|
123
|
+
*/
|
|
124
|
+
function matchTopLevel(cwd) {
|
|
125
|
+
return matchFiles('', cwd);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 检查路径是否存在
|
|
129
|
+
*/
|
|
130
|
+
function pathExists(path, cwd) {
|
|
131
|
+
const fullPath = (0, path_1.resolve)(cwd, path);
|
|
132
|
+
return (0, fs_1.existsSync)(fullPath);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=file-glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-glob.js","sourceRoot":"","sources":["../../src/services/file-glob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - 全局配置管理
|
|
3
|
+
*
|
|
4
|
+
* 配置存储在 ~/.openhorse/openhorse.json
|
|
5
|
+
* 支持环境变量覆盖配置值。
|
|
6
|
+
*/
|
|
7
|
+
/** 项目级配置 */
|
|
8
|
+
export interface ProjectConfig {
|
|
9
|
+
/** 允许的工具列表 */
|
|
10
|
+
allowedTools?: string[];
|
|
11
|
+
/** 最后会话 ID */
|
|
12
|
+
lastSessionId?: string;
|
|
13
|
+
/** 最后使用的模型 */
|
|
14
|
+
lastModel?: string;
|
|
15
|
+
/** 是否已接受信任对话框 */
|
|
16
|
+
hasTrustDialogAccepted?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** 全局配置 */
|
|
19
|
+
export interface GlobalConfig {
|
|
20
|
+
/** API Key (可选,可由环境变量提供) */
|
|
21
|
+
apiKey?: string;
|
|
22
|
+
/** API Base URL */
|
|
23
|
+
apiBaseUrl?: string;
|
|
24
|
+
/** 默认模型 */
|
|
25
|
+
defaultModel: string;
|
|
26
|
+
/** 备用模型 */
|
|
27
|
+
fallbackModel?: string;
|
|
28
|
+
/** 最大输出 token */
|
|
29
|
+
maxTokens: number;
|
|
30
|
+
/** 温度 */
|
|
31
|
+
temperature: number;
|
|
32
|
+
/** 最大重试次数 */
|
|
33
|
+
maxRetries?: number;
|
|
34
|
+
/** 重试基础延迟 (ms) */
|
|
35
|
+
retryBaseDelay?: number;
|
|
36
|
+
/** 预算限制 (USD) */
|
|
37
|
+
budgetLimit?: number;
|
|
38
|
+
/** 总会话数 */
|
|
39
|
+
totalSessions: number;
|
|
40
|
+
/** 总 token 数 */
|
|
41
|
+
totalTokens: number;
|
|
42
|
+
/** 总成本 (USD) */
|
|
43
|
+
totalCost: number;
|
|
44
|
+
/** 用户 ID */
|
|
45
|
+
userId?: string;
|
|
46
|
+
/** 首次启动时间 (ISO string) */
|
|
47
|
+
firstStartTime?: string;
|
|
48
|
+
/** 项目配置映射 (路径 -> 配置) */
|
|
49
|
+
projects?: Record<string, ProjectConfig>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 加载全局配置
|
|
53
|
+
* 如果文件不存在,返回默认配置
|
|
54
|
+
*/
|
|
55
|
+
export declare function loadGlobalConfig(): GlobalConfig;
|
|
56
|
+
/**
|
|
57
|
+
* 保存全局配置
|
|
58
|
+
* 使用 0o600 权限(仅用户可读写)
|
|
59
|
+
*/
|
|
60
|
+
export declare function saveGlobalConfig(config: GlobalConfig): void;
|
|
61
|
+
/**
|
|
62
|
+
* 更新全局配置(部分更新)
|
|
63
|
+
*/
|
|
64
|
+
export declare function updateGlobalConfig(updates: Partial<GlobalConfig>): GlobalConfig;
|
|
65
|
+
/**
|
|
66
|
+
* 获取项目配置
|
|
67
|
+
* @param projectPath 项目路径
|
|
68
|
+
*/
|
|
69
|
+
export declare function getProjectConfig(projectPath: string): ProjectConfig;
|
|
70
|
+
/**
|
|
71
|
+
* 保存项目配置
|
|
72
|
+
* @param projectPath 项目路径
|
|
73
|
+
* @param projectConfig 项目配置
|
|
74
|
+
*/
|
|
75
|
+
export declare function saveProjectConfig(projectPath: string, projectConfig: ProjectConfig): void;
|
|
76
|
+
/**
|
|
77
|
+
* 获取或创建用户 ID
|
|
78
|
+
* 首次调用时生成并保存
|
|
79
|
+
*/
|
|
80
|
+
export declare function getOrCreateUserId(): string;
|
|
81
|
+
/**
|
|
82
|
+
* 记录首次启动时间
|
|
83
|
+
*/
|
|
84
|
+
export declare function recordFirstStartTime(): void;
|
|
85
|
+
/**
|
|
86
|
+
* 增加会话计数
|
|
87
|
+
*/
|
|
88
|
+
export declare function incrementSessionCount(): void;
|
|
89
|
+
/**
|
|
90
|
+
* 更新 token 和成本统计
|
|
91
|
+
*/
|
|
92
|
+
export declare function updateTokenStats(tokens: number, cost: number): void;
|
|
93
|
+
export interface InputHistoryEntry {
|
|
94
|
+
content: string;
|
|
95
|
+
timestamp: number;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 加载输入历史
|
|
99
|
+
*/
|
|
100
|
+
export declare function getInputHistory(): InputHistoryEntry[];
|
|
101
|
+
/**
|
|
102
|
+
* 添加输入到历史
|
|
103
|
+
*/
|
|
104
|
+
export declare function addToInputHistory(content: string): void;
|
|
105
|
+
/**
|
|
106
|
+
* 搜索输入历史
|
|
107
|
+
*/
|
|
108
|
+
export declare function searchInputHistory(query: string): InputHistoryEntry[];
|
|
109
|
+
//# sourceMappingURL=global-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../src/services/global-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,YAAY;AACZ,MAAM,WAAW,aAAa;IAC5B,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,WAAW;AACX,MAAM,WAAW,YAAY;IAE3B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,iBAAiB;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,WAAW;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAGlB,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC1C;AAmBD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAgB/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAI3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAK/E;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAGnE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CAOzF;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAU1C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMnE;AAQD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD;;GAEG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,EAAE,CAWrD;AAWD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAsBvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAIrE"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - 全局配置管理
|
|
4
|
+
*
|
|
5
|
+
* 配置存储在 ~/.openhorse/openhorse.json
|
|
6
|
+
* 支持环境变量覆盖配置值。
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.loadGlobalConfig = loadGlobalConfig;
|
|
10
|
+
exports.saveGlobalConfig = saveGlobalConfig;
|
|
11
|
+
exports.updateGlobalConfig = updateGlobalConfig;
|
|
12
|
+
exports.getProjectConfig = getProjectConfig;
|
|
13
|
+
exports.saveProjectConfig = saveProjectConfig;
|
|
14
|
+
exports.getOrCreateUserId = getOrCreateUserId;
|
|
15
|
+
exports.recordFirstStartTime = recordFirstStartTime;
|
|
16
|
+
exports.incrementSessionCount = incrementSessionCount;
|
|
17
|
+
exports.updateTokenStats = updateTokenStats;
|
|
18
|
+
exports.getInputHistory = getInputHistory;
|
|
19
|
+
exports.addToInputHistory = addToInputHistory;
|
|
20
|
+
exports.searchInputHistory = searchInputHistory;
|
|
21
|
+
const fs_1 = require("fs");
|
|
22
|
+
const crypto_1 = require("crypto");
|
|
23
|
+
const path_1 = require("path");
|
|
24
|
+
const config_dir_1 = require("./config-dir");
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// 默认配置
|
|
27
|
+
// ============================================================================
|
|
28
|
+
const DEFAULT_CONFIG = {
|
|
29
|
+
defaultModel: 'gpt-4o',
|
|
30
|
+
maxTokens: 4096,
|
|
31
|
+
temperature: 0.7,
|
|
32
|
+
totalSessions: 0,
|
|
33
|
+
totalTokens: 0,
|
|
34
|
+
totalCost: 0,
|
|
35
|
+
};
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// 加载/保存
|
|
38
|
+
// ============================================================================
|
|
39
|
+
/**
|
|
40
|
+
* 加载全局配置
|
|
41
|
+
* 如果文件不存在,返回默认配置
|
|
42
|
+
*/
|
|
43
|
+
function loadGlobalConfig() {
|
|
44
|
+
(0, config_dir_1.ensureConfigDir)();
|
|
45
|
+
const path = (0, config_dir_1.getGlobalConfigPath)();
|
|
46
|
+
if (!(0, fs_1.existsSync)(path)) {
|
|
47
|
+
return { ...DEFAULT_CONFIG };
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const content = (0, fs_1.readFileSync)(path, 'utf-8');
|
|
51
|
+
const parsed = JSON.parse(content);
|
|
52
|
+
return { ...DEFAULT_CONFIG, ...parsed };
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// 文件损坏时返回默认配置
|
|
56
|
+
return { ...DEFAULT_CONFIG };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 保存全局配置
|
|
61
|
+
* 使用 0o600 权限(仅用户可读写)
|
|
62
|
+
*/
|
|
63
|
+
function saveGlobalConfig(config) {
|
|
64
|
+
(0, config_dir_1.ensureConfigDir)();
|
|
65
|
+
const path = (0, config_dir_1.getGlobalConfigPath)();
|
|
66
|
+
(0, fs_1.writeFileSync)(path, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 更新全局配置(部分更新)
|
|
70
|
+
*/
|
|
71
|
+
function updateGlobalConfig(updates) {
|
|
72
|
+
const config = loadGlobalConfig();
|
|
73
|
+
const newConfig = { ...config, ...updates };
|
|
74
|
+
saveGlobalConfig(newConfig);
|
|
75
|
+
return newConfig;
|
|
76
|
+
}
|
|
77
|
+
// ============================================================================
|
|
78
|
+
// 项目配置
|
|
79
|
+
// ============================================================================
|
|
80
|
+
/**
|
|
81
|
+
* 获取项目配置
|
|
82
|
+
* @param projectPath 项目路径
|
|
83
|
+
*/
|
|
84
|
+
function getProjectConfig(projectPath) {
|
|
85
|
+
const config = loadGlobalConfig();
|
|
86
|
+
return config.projects?.[projectPath] ?? {};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 保存项目配置
|
|
90
|
+
* @param projectPath 项目路径
|
|
91
|
+
* @param projectConfig 项目配置
|
|
92
|
+
*/
|
|
93
|
+
function saveProjectConfig(projectPath, projectConfig) {
|
|
94
|
+
const config = loadGlobalConfig();
|
|
95
|
+
config.projects = {
|
|
96
|
+
...config.projects,
|
|
97
|
+
[projectPath]: projectConfig,
|
|
98
|
+
};
|
|
99
|
+
saveGlobalConfig(config);
|
|
100
|
+
}
|
|
101
|
+
// ============================================================================
|
|
102
|
+
// 用户 ID
|
|
103
|
+
// ============================================================================
|
|
104
|
+
/**
|
|
105
|
+
* 获取或创建用户 ID
|
|
106
|
+
* 首次调用时生成并保存
|
|
107
|
+
*/
|
|
108
|
+
function getOrCreateUserId() {
|
|
109
|
+
const config = loadGlobalConfig();
|
|
110
|
+
if (config.userId) {
|
|
111
|
+
return config.userId;
|
|
112
|
+
}
|
|
113
|
+
const userId = (0, crypto_1.randomBytes)(16).toString('hex');
|
|
114
|
+
updateGlobalConfig({ userId });
|
|
115
|
+
return userId;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 记录首次启动时间
|
|
119
|
+
*/
|
|
120
|
+
function recordFirstStartTime() {
|
|
121
|
+
const config = loadGlobalConfig();
|
|
122
|
+
if (!config.firstStartTime) {
|
|
123
|
+
updateGlobalConfig({ firstStartTime: new Date().toISOString() });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// ============================================================================
|
|
127
|
+
// 统计更新
|
|
128
|
+
// ============================================================================
|
|
129
|
+
/**
|
|
130
|
+
* 增加会话计数
|
|
131
|
+
*/
|
|
132
|
+
function incrementSessionCount() {
|
|
133
|
+
const config = loadGlobalConfig();
|
|
134
|
+
updateGlobalConfig({ totalSessions: config.totalSessions + 1 });
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 更新 token 和成本统计
|
|
138
|
+
*/
|
|
139
|
+
function updateTokenStats(tokens, cost) {
|
|
140
|
+
const config = loadGlobalConfig();
|
|
141
|
+
updateGlobalConfig({
|
|
142
|
+
totalTokens: config.totalTokens + tokens,
|
|
143
|
+
totalCost: config.totalCost + cost,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// 输入历史
|
|
148
|
+
// ============================================================================
|
|
149
|
+
const MAX_INPUT_HISTORY = 1000;
|
|
150
|
+
/**
|
|
151
|
+
* 获取输入历史文件路径
|
|
152
|
+
*/
|
|
153
|
+
function getInputHistoryPath() {
|
|
154
|
+
return (0, path_1.join)((0, config_dir_1.getConfigDir)(), 'input-history.json');
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* 加载输入历史
|
|
158
|
+
*/
|
|
159
|
+
function getInputHistory() {
|
|
160
|
+
const path = getInputHistoryPath();
|
|
161
|
+
if (!(0, fs_1.existsSync)(path)) {
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
const content = (0, fs_1.readFileSync)(path, 'utf-8');
|
|
166
|
+
return JSON.parse(content);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return [];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 保存输入历史
|
|
174
|
+
*/
|
|
175
|
+
function saveInputHistory(history) {
|
|
176
|
+
(0, config_dir_1.ensureConfigDir)();
|
|
177
|
+
const path = getInputHistoryPath();
|
|
178
|
+
(0, fs_1.writeFileSync)(path, JSON.stringify(history, null, 2), { mode: 0o600 });
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 添加输入到历史
|
|
182
|
+
*/
|
|
183
|
+
function addToInputHistory(content) {
|
|
184
|
+
if (!content.trim())
|
|
185
|
+
return;
|
|
186
|
+
const history = getInputHistory();
|
|
187
|
+
// 去重:相似输入只保留最新
|
|
188
|
+
const existingIndex = history.findIndex(h => h.content === content);
|
|
189
|
+
if (existingIndex >= 0) {
|
|
190
|
+
history.splice(existingIndex, 1);
|
|
191
|
+
}
|
|
192
|
+
history.unshift({
|
|
193
|
+
content,
|
|
194
|
+
timestamp: Date.now(),
|
|
195
|
+
});
|
|
196
|
+
// 限制数量
|
|
197
|
+
if (history.length > MAX_INPUT_HISTORY) {
|
|
198
|
+
history.splice(MAX_INPUT_HISTORY);
|
|
199
|
+
}
|
|
200
|
+
saveInputHistory(history);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* 搜索输入历史
|
|
204
|
+
*/
|
|
205
|
+
function searchInputHistory(query) {
|
|
206
|
+
const history = getInputHistory();
|
|
207
|
+
if (!query)
|
|
208
|
+
return history.slice(0, 20);
|
|
209
|
+
return history.filter(h => h.content.toLowerCase().includes(query.toLowerCase())).slice(0, 20);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=global-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/services/global-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - LLM 服务层
|
|
3
|
+
*
|
|
4
|
+
* 封装 OpenAI 兼容 API,支持流式和非流式调用。
|
|
5
|
+
* 兼容 OpenAI、Claude (via proxy)、本地 Ollama 等。
|
|
6
|
+
* 支持工具调用(function calling)和 agentic 循环。
|
|
7
|
+
* 支持重试机制和 fallback model。
|
|
8
|
+
*/
|
|
9
|
+
/** LLM 配置 */
|
|
10
|
+
export interface LLMConfig {
|
|
11
|
+
/** API Key */
|
|
12
|
+
apiKey: string;
|
|
13
|
+
/** API Base URL(兼容第三方) */
|
|
14
|
+
baseUrl?: string;
|
|
15
|
+
/** 模型名称 */
|
|
16
|
+
model: string;
|
|
17
|
+
/** 备用模型(主模型失败时切换) */
|
|
18
|
+
fallbackModel?: string;
|
|
19
|
+
/** 最大输出 token 数 */
|
|
20
|
+
maxTokens?: number;
|
|
21
|
+
/** 温度 */
|
|
22
|
+
temperature?: number;
|
|
23
|
+
/** 请求超时 (ms) */
|
|
24
|
+
timeout?: number;
|
|
25
|
+
/** 最大重试次数 */
|
|
26
|
+
maxRetries?: number;
|
|
27
|
+
/** 重试基础延迟 (ms) */
|
|
28
|
+
retryBaseDelay?: number;
|
|
29
|
+
}
|
|
30
|
+
/** 重试配置 */
|
|
31
|
+
export interface RetryConfig {
|
|
32
|
+
/** 最大重试次数 */
|
|
33
|
+
maxRetries: number;
|
|
34
|
+
/** 基础延迟 ms */
|
|
35
|
+
baseDelayMs: number;
|
|
36
|
+
/** 最大延迟 ms */
|
|
37
|
+
maxDelayMs?: number;
|
|
38
|
+
/** 重试回调 */
|
|
39
|
+
onRetry?: (attempt: number, error: Error, delayMs: number) => void;
|
|
40
|
+
}
|
|
41
|
+
/** Fallback 触发错误 */
|
|
42
|
+
export declare class FallbackTriggeredError extends Error {
|
|
43
|
+
readonly originalModel: string;
|
|
44
|
+
readonly fallbackModel: string;
|
|
45
|
+
constructor(originalModel: string, fallbackModel: string);
|
|
46
|
+
}
|
|
47
|
+
/** 对话消息 */
|
|
48
|
+
export interface Message {
|
|
49
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
50
|
+
content: string;
|
|
51
|
+
tool_calls?: Array<{
|
|
52
|
+
id: string;
|
|
53
|
+
type: 'function';
|
|
54
|
+
function: {
|
|
55
|
+
name: string;
|
|
56
|
+
arguments: string;
|
|
57
|
+
};
|
|
58
|
+
}>;
|
|
59
|
+
tool_call_id?: string;
|
|
60
|
+
}
|
|
61
|
+
/** 工具定义 */
|
|
62
|
+
export interface Tool {
|
|
63
|
+
type: 'function';
|
|
64
|
+
function: {
|
|
65
|
+
name: string;
|
|
66
|
+
description: string;
|
|
67
|
+
parameters: Record<string, unknown>;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/** LLM 响应 */
|
|
71
|
+
export interface LLMResponse {
|
|
72
|
+
/** 回复内容 */
|
|
73
|
+
content: string;
|
|
74
|
+
/** Token 用量 */
|
|
75
|
+
usage?: {
|
|
76
|
+
promptTokens: number;
|
|
77
|
+
completionTokens: number;
|
|
78
|
+
};
|
|
79
|
+
/** 使用的模型 */
|
|
80
|
+
model: string;
|
|
81
|
+
/** 工具调用 */
|
|
82
|
+
toolCalls?: Array<{
|
|
83
|
+
id: string;
|
|
84
|
+
type: 'function';
|
|
85
|
+
function: {
|
|
86
|
+
name: string;
|
|
87
|
+
arguments: string;
|
|
88
|
+
};
|
|
89
|
+
}>;
|
|
90
|
+
}
|
|
91
|
+
/** 流式回调 */
|
|
92
|
+
export type StreamCallback = (chunk: string) => void;
|
|
93
|
+
/** 工具回调 — LLM 流式输出时的钩子 */
|
|
94
|
+
export interface StreamCallbacks {
|
|
95
|
+
/** 文本块回调 */
|
|
96
|
+
onChunk?: StreamCallback;
|
|
97
|
+
/** 思考提示回调(流式开始前) */
|
|
98
|
+
onThinking?: () => void;
|
|
99
|
+
}
|
|
100
|
+
export declare class LLMService {
|
|
101
|
+
private client;
|
|
102
|
+
private config;
|
|
103
|
+
private consecutive529Errors;
|
|
104
|
+
private usingFallback;
|
|
105
|
+
constructor(config: LLMConfig);
|
|
106
|
+
/** 是否正在使用 fallback model */
|
|
107
|
+
isUsingFallback(): boolean;
|
|
108
|
+
/** 触发 fallback */
|
|
109
|
+
triggerFallback(): void;
|
|
110
|
+
/** 重置为原始 model */
|
|
111
|
+
resetToPrimary(): void;
|
|
112
|
+
/**
|
|
113
|
+
* 非流式对话
|
|
114
|
+
*/
|
|
115
|
+
chat(messages: Message[], tools?: Tool[]): Promise<LLMResponse>;
|
|
116
|
+
/**
|
|
117
|
+
* 流式对话(带重试)
|
|
118
|
+
*/
|
|
119
|
+
chatStream(messages: Message[], callbacks?: StreamCallbacks | StreamCallback, tools?: Tool[]): Promise<LLMResponse>;
|
|
120
|
+
/**
|
|
121
|
+
* 带工具调用的 agentic 循环
|
|
122
|
+
*/
|
|
123
|
+
chatWithTools(messages: Message[], tools: Tool[], toolExecutor: (name: string, args: Record<string, unknown>) => Promise<string>, callbacks?: StreamCallbacks, maxIterations?: number): Promise<LLMResponse>;
|
|
124
|
+
/**
|
|
125
|
+
* 切换模型
|
|
126
|
+
*/
|
|
127
|
+
setModel(model: string): void;
|
|
128
|
+
/**
|
|
129
|
+
* 获取当前模型
|
|
130
|
+
*/
|
|
131
|
+
getModel(): string;
|
|
132
|
+
/**
|
|
133
|
+
* 获取当前配置摘要
|
|
134
|
+
*/
|
|
135
|
+
getConfigSummary(): Record<string, string>;
|
|
136
|
+
/** 转换为 OpenAI SDK 消息格式 */
|
|
137
|
+
private toOpenAIMessages;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/services/llm.ts"],"names":[],"mappings":"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"}
|