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,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - System Prompt Builder (segment-based)
|
|
4
|
+
*
|
|
5
|
+
* Segment-based system prompt composition with static/dynamic separation.
|
|
6
|
+
* Static sections are cacheable for API prompt caching.
|
|
7
|
+
* Dynamic sections are rebuilt each request.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.buildSystemPrompt = buildSystemPrompt;
|
|
11
|
+
exports.getSystemPrompt = getSystemPrompt;
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// 内置段落
|
|
14
|
+
// ============================================================================
|
|
15
|
+
const SECTIONS = [
|
|
16
|
+
{
|
|
17
|
+
name: 'intro',
|
|
18
|
+
dynamic: false,
|
|
19
|
+
render: () => `You are OpenHorse, a universal AI agent powered by the OpenHorse Framework.
|
|
20
|
+
You are helpful, concise, and accurate.`,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'capabilities',
|
|
24
|
+
dynamic: false,
|
|
25
|
+
render: () => `You can perform a wide range of tasks:
|
|
26
|
+
- Read and write files on the local filesystem
|
|
27
|
+
- List directories and explore project structure
|
|
28
|
+
- Execute shell commands when needed
|
|
29
|
+
- Analyze code, data, and text
|
|
30
|
+
- Provide structured summaries and explanations
|
|
31
|
+
|
|
32
|
+
When a user asks you to do something:
|
|
33
|
+
1. If you need file or system information, use the appropriate tool first
|
|
34
|
+
2. If the user wants you to create or modify files, use the write tool
|
|
35
|
+
3. Provide a clear summary of what you found or did
|
|
36
|
+
4. Respond in the same language as the user
|
|
37
|
+
5. Keep responses concise and structured`,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'tools',
|
|
41
|
+
dynamic: false,
|
|
42
|
+
render: (ctx) => {
|
|
43
|
+
const toolNames = ctx.tools.map(t => t.name).join(', ');
|
|
44
|
+
return `Available tools: ${toolNames}.
|
|
45
|
+
Use tools when they help complete the task. Prefer the right tool for the job.`;
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'env_info',
|
|
50
|
+
dynamic: true,
|
|
51
|
+
render: (ctx) => `Current environment:
|
|
52
|
+
- Working directory: ${ctx.cwd}
|
|
53
|
+
- Platform: ${ctx.platform}
|
|
54
|
+
- Node.js: ${ctx.nodeVersion}`,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'memory',
|
|
58
|
+
dynamic: true,
|
|
59
|
+
render: (ctx) => {
|
|
60
|
+
if (!ctx.memoryContent)
|
|
61
|
+
return '';
|
|
62
|
+
return `Project memory:\n${ctx.memoryContent}`;
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'skills',
|
|
67
|
+
dynamic: true,
|
|
68
|
+
render: (ctx) => {
|
|
69
|
+
if (!ctx.skillsContent)
|
|
70
|
+
return '';
|
|
71
|
+
return ctx.skillsContent;
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// buildSystemPrompt
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* Build a system prompt from segments, separating static and dynamic parts.
|
|
80
|
+
*
|
|
81
|
+
* Returns `{ static, dynamic }` for potential API prompt caching.
|
|
82
|
+
* The two parts are joined with a separator when used as a single string.
|
|
83
|
+
*/
|
|
84
|
+
function buildSystemPrompt(ctx) {
|
|
85
|
+
const staticParts = [];
|
|
86
|
+
const dynamicParts = [];
|
|
87
|
+
for (const section of SECTIONS) {
|
|
88
|
+
const content = section.render(ctx);
|
|
89
|
+
if (!content.trim())
|
|
90
|
+
continue;
|
|
91
|
+
if (section.dynamic) {
|
|
92
|
+
dynamicParts.push(content);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
staticParts.push(content);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
static: staticParts.join('\n\n'),
|
|
100
|
+
dynamic: dynamicParts.join('\n\n'),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Build a single system prompt string (static + dynamic joined).
|
|
105
|
+
* Convenience wrapper around buildSystemPrompt.
|
|
106
|
+
*/
|
|
107
|
+
function getSystemPrompt(ctx) {
|
|
108
|
+
const { static: staticPart, dynamic } = buildSystemPrompt(ctx);
|
|
109
|
+
const parts = [staticPart, dynamic].filter(Boolean);
|
|
110
|
+
return parts.join('\n\n---\n');
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/framework/prompt.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAmGH,8CAmBC;AAMD,0CAIC;AAtGD,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,QAAQ,GAAoB;IAChC;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,GAAG,EAAE,CAAC;wCACsB;KACrC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,GAAG,EAAE,CAAC;;;;;;;;;;;;yCAYuB;KACtC;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,oBAAoB,SAAS;+EACqC,CAAC;QAC5E,CAAC;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;uBACE,GAAG,CAAC,GAAG;cAChB,GAAG,CAAC,QAAQ;aACb,GAAG,CAAC,WAAW,EAAE;KAC3B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,aAAa;gBAAE,OAAO,EAAE,CAAC;YAClC,OAAO,oBAAoB,GAAG,CAAC,aAAa,EAAE,CAAC;QACjD,CAAC;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,aAAa;gBAAE,OAAO,EAAE,CAAC;YAClC,OAAO,GAAG,CAAC,aAAa,CAAC;QAC3B,CAAC;KACF;CACF,CAAC;AAEF,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,GAAkB;IAClD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,SAAS;QAE9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,GAAkB;IAChD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - Query Loop (async generator)
|
|
3
|
+
*
|
|
4
|
+
* Generator-based query loop replacing the callback-based chatWithTools.
|
|
5
|
+
* Yields typed events: request_start, tool_call, tool_result, message, complete.
|
|
6
|
+
*
|
|
7
|
+
* Note: Streaming text chunks are handled via onChunk callback in llm.chatStream(),
|
|
8
|
+
* not yielded as events (callbacks cannot yield). The handleChat consumer writes
|
|
9
|
+
* chunks directly to stdout via the callback.
|
|
10
|
+
*/
|
|
11
|
+
import type { LLMService, Message, StreamCallbacks } from '../services/llm';
|
|
12
|
+
import type { OpenHorseTool, ToolContext } from './tool';
|
|
13
|
+
import type { PermissionMode } from '../commands/types';
|
|
14
|
+
import type { CostTracker } from '../core/cost-tracker';
|
|
15
|
+
import { type StrategyTracker } from '../core/strategy-tracker';
|
|
16
|
+
export type QueryEvent = {
|
|
17
|
+
type: 'request_start';
|
|
18
|
+
model: string;
|
|
19
|
+
turn: number;
|
|
20
|
+
} | {
|
|
21
|
+
type: 'tool_call';
|
|
22
|
+
name: string;
|
|
23
|
+
args: Record<string, unknown>;
|
|
24
|
+
callId: string;
|
|
25
|
+
} | {
|
|
26
|
+
type: 'tool_result';
|
|
27
|
+
name: string;
|
|
28
|
+
result: string;
|
|
29
|
+
duration: number;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'strategy_exhausted';
|
|
32
|
+
suggestion: string;
|
|
33
|
+
} | {
|
|
34
|
+
type: 'message';
|
|
35
|
+
role: 'assistant';
|
|
36
|
+
content: string;
|
|
37
|
+
} | {
|
|
38
|
+
type: 'complete';
|
|
39
|
+
content: string;
|
|
40
|
+
usage?: {
|
|
41
|
+
promptTokens: number;
|
|
42
|
+
completionTokens: number;
|
|
43
|
+
};
|
|
44
|
+
model: string;
|
|
45
|
+
};
|
|
46
|
+
export interface QueryParams {
|
|
47
|
+
/** Conversation history (must include system prompt as first message) */
|
|
48
|
+
messages: Message[];
|
|
49
|
+
/** Available tools */
|
|
50
|
+
tools: OpenHorseTool[];
|
|
51
|
+
/** Tool executor: (name, args) => result string */
|
|
52
|
+
toolExecutor: (name: string, args: Record<string, unknown>) => Promise<string>;
|
|
53
|
+
/** LLM service instance */
|
|
54
|
+
llm: LLMService;
|
|
55
|
+
/** Maximum turns (default: 20) */
|
|
56
|
+
maxTurns?: number;
|
|
57
|
+
/** Abort signal for cancellation */
|
|
58
|
+
abortSignal?: AbortSignal;
|
|
59
|
+
/** Streaming callbacks (onChunk writes to stdout, etc.) */
|
|
60
|
+
streamCallbacks?: StreamCallbacks;
|
|
61
|
+
/** Permission mode for tool execution */
|
|
62
|
+
permissionMode?: PermissionMode;
|
|
63
|
+
/** Tool execution context */
|
|
64
|
+
toolContext?: ToolContext;
|
|
65
|
+
/** Cost tracker for recording usage */
|
|
66
|
+
costTracker?: CostTracker;
|
|
67
|
+
/** Strategy tracker for alternative approaches */
|
|
68
|
+
strategyTracker?: StrategyTracker;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Generator-based agentic loop.
|
|
72
|
+
*
|
|
73
|
+
* LLM → stream (via callback) → tool_call → execute → tool_result → repeat
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* for await (const event of query({
|
|
77
|
+
* messages, tools, toolExecutor, llm,
|
|
78
|
+
* streamCallbacks: { onChunk: (t) => process.stdout.write(t) },
|
|
79
|
+
* })) {
|
|
80
|
+
* switch (event.type) {
|
|
81
|
+
* case 'complete': console.log(event.usage); break;
|
|
82
|
+
* }
|
|
83
|
+
* }
|
|
84
|
+
*/
|
|
85
|
+
export declare function query(params: QueryParams): AsyncGenerator<QueryEvent>;
|
|
86
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAQ,MAAM,iBAAiB,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAoB,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAyB,KAAK,eAAe,EAAuB,MAAM,0BAA0B,CAAC;AAM5G,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMrH,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,sBAAsB;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mDAAmD;IACnD,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,2BAA2B;IAC3B,GAAG,EAAE,UAAU,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,yCAAyC;IACzC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uCAAuC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kDAAkD;IAClD,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAuB,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CA2K5E"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - Query Loop (async generator)
|
|
4
|
+
*
|
|
5
|
+
* Generator-based query loop replacing the callback-based chatWithTools.
|
|
6
|
+
* Yields typed events: request_start, tool_call, tool_result, message, complete.
|
|
7
|
+
*
|
|
8
|
+
* Note: Streaming text chunks are handled via onChunk callback in llm.chatStream(),
|
|
9
|
+
* not yielded as events (callbacks cannot yield). The handleChat consumer writes
|
|
10
|
+
* chunks directly to stdout via the callback.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.query = query;
|
|
14
|
+
const tool_1 = require("./tool");
|
|
15
|
+
const strategy_tracker_1 = require("../core/strategy-tracker");
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// query() — async generator
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/**
|
|
20
|
+
* Generator-based agentic loop.
|
|
21
|
+
*
|
|
22
|
+
* LLM → stream (via callback) → tool_call → execute → tool_result → repeat
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* for await (const event of query({
|
|
26
|
+
* messages, tools, toolExecutor, llm,
|
|
27
|
+
* streamCallbacks: { onChunk: (t) => process.stdout.write(t) },
|
|
28
|
+
* })) {
|
|
29
|
+
* switch (event.type) {
|
|
30
|
+
* case 'complete': console.log(event.usage); break;
|
|
31
|
+
* }
|
|
32
|
+
* }
|
|
33
|
+
*/
|
|
34
|
+
async function* query(params) {
|
|
35
|
+
const { messages, tools, toolExecutor, llm, maxTurns = 20, abortSignal, streamCallbacks, costTracker, strategyTracker = (0, strategy_tracker_1.createStrategyTracker)({ maxAttempts: 3 }), } = params;
|
|
36
|
+
const openaiTools = (0, tool_1.toOpenAITools)(tools);
|
|
37
|
+
let turn = 0;
|
|
38
|
+
while (turn < maxTurns) {
|
|
39
|
+
turn++;
|
|
40
|
+
// Check abort
|
|
41
|
+
if (abortSignal?.aborted) {
|
|
42
|
+
yield {
|
|
43
|
+
type: 'complete',
|
|
44
|
+
content: 'Operation cancelled.',
|
|
45
|
+
model: llm.getModel(),
|
|
46
|
+
};
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Request start
|
|
50
|
+
yield { type: 'request_start', model: llm.getModel(), turn };
|
|
51
|
+
// Stream the LLM response
|
|
52
|
+
const response = await llm.chatStream(messages, streamCallbacks, openaiTools);
|
|
53
|
+
// Save assistant message to history
|
|
54
|
+
const assistantMsg = {
|
|
55
|
+
role: 'assistant',
|
|
56
|
+
content: response.content,
|
|
57
|
+
};
|
|
58
|
+
if (response.toolCalls) {
|
|
59
|
+
assistantMsg.tool_calls = response.toolCalls;
|
|
60
|
+
}
|
|
61
|
+
messages.push(assistantMsg);
|
|
62
|
+
// Handle tool calls
|
|
63
|
+
if (response.toolCalls && response.toolCalls.length > 0) {
|
|
64
|
+
for (const tc of response.toolCalls) {
|
|
65
|
+
// Ensure arguments is valid JSON (some APIs like DashScope require this)
|
|
66
|
+
let args = {};
|
|
67
|
+
const rawArgs = tc.function.arguments || '';
|
|
68
|
+
if (rawArgs) {
|
|
69
|
+
try {
|
|
70
|
+
args = JSON.parse(rawArgs);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
args = {};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Re-serialize arguments to ensure valid JSON for next API call
|
|
77
|
+
tc.function.arguments = JSON.stringify(args);
|
|
78
|
+
// Start tracking this approach
|
|
79
|
+
const attemptId = strategyTracker.startApproach(tc.function.name);
|
|
80
|
+
strategyTracker.addTool(attemptId, tc.function.name);
|
|
81
|
+
yield {
|
|
82
|
+
type: 'tool_call',
|
|
83
|
+
name: tc.function.name,
|
|
84
|
+
args,
|
|
85
|
+
callId: tc.id,
|
|
86
|
+
};
|
|
87
|
+
const start = Date.now();
|
|
88
|
+
// Permission check before execution
|
|
89
|
+
let result;
|
|
90
|
+
const tool = tools.find(t => t.name === tc.function.name);
|
|
91
|
+
if (tool?.checkPermissions && params.toolContext) {
|
|
92
|
+
const perm = tool.checkPermissions(args, params.toolContext);
|
|
93
|
+
if (perm.behavior === 'deny') {
|
|
94
|
+
result = JSON.stringify({
|
|
95
|
+
success: false,
|
|
96
|
+
error: perm.reason || 'Permission denied',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else if (perm.behavior === 'ask' && params.permissionMode === 'default') {
|
|
100
|
+
result = JSON.stringify({
|
|
101
|
+
success: false,
|
|
102
|
+
error: `Tool ${tc.function.name} requires user confirmation.`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
result = await toolExecutor(tc.function.name, args);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
result = await toolExecutor(tc.function.name, args);
|
|
111
|
+
}
|
|
112
|
+
const duration = Date.now() - start;
|
|
113
|
+
// Parse result and record to strategy tracker
|
|
114
|
+
let strategyResult = 'success';
|
|
115
|
+
let errorMsg;
|
|
116
|
+
try {
|
|
117
|
+
const parsed = JSON.parse(result);
|
|
118
|
+
if (parsed.success === false) {
|
|
119
|
+
strategyResult = 'failed';
|
|
120
|
+
errorMsg = parsed.error || 'Unknown error';
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
strategyResult = 'failed';
|
|
125
|
+
errorMsg = 'Invalid result';
|
|
126
|
+
}
|
|
127
|
+
strategyTracker.recordResult(attemptId, strategyResult, errorMsg, duration);
|
|
128
|
+
yield {
|
|
129
|
+
type: 'tool_result',
|
|
130
|
+
name: tc.function.name,
|
|
131
|
+
result,
|
|
132
|
+
duration,
|
|
133
|
+
};
|
|
134
|
+
messages.push({
|
|
135
|
+
role: 'tool',
|
|
136
|
+
content: result,
|
|
137
|
+
tool_call_id: tc.id,
|
|
138
|
+
});
|
|
139
|
+
// Check if strategy exhausted - suggest alternatives
|
|
140
|
+
if (strategyTracker.isExhausted()) {
|
|
141
|
+
const suggestion = strategyTracker.suggestAlternative();
|
|
142
|
+
if (suggestion) {
|
|
143
|
+
yield { type: 'strategy_exhausted', suggestion };
|
|
144
|
+
// Add suggestion to messages for LLM to consider
|
|
145
|
+
messages.push({
|
|
146
|
+
role: 'user',
|
|
147
|
+
content: suggestion,
|
|
148
|
+
});
|
|
149
|
+
strategyTracker.reset();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Continue to next turn
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
// No tool calls — done
|
|
157
|
+
yield { type: 'message', role: 'assistant', content: response.content };
|
|
158
|
+
// Record usage to cost tracker
|
|
159
|
+
if (costTracker && response.usage) {
|
|
160
|
+
costTracker.record(response.usage, { model: response.model });
|
|
161
|
+
}
|
|
162
|
+
yield {
|
|
163
|
+
type: 'complete',
|
|
164
|
+
content: response.content,
|
|
165
|
+
usage: response.usage,
|
|
166
|
+
model: response.model,
|
|
167
|
+
};
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
// Max turns reached
|
|
171
|
+
yield {
|
|
172
|
+
type: 'complete',
|
|
173
|
+
content: 'Reached maximum execution steps. Please simplify your request.',
|
|
174
|
+
model: llm.getModel(),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/framework/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - Centralized State Store
|
|
3
|
+
*
|
|
4
|
+
* Simple publish-subscribe state management.
|
|
5
|
+
* No React dependency — just state + listeners.
|
|
6
|
+
*/
|
|
7
|
+
import type { Message } from '../services/llm';
|
|
8
|
+
import type { OpenHorseTool } from './tool';
|
|
9
|
+
import type { OpenHorseCLIConfig } from '../services/config';
|
|
10
|
+
import type { PermissionMode } from '../commands/types';
|
|
11
|
+
import { CostTracker } from '../core/cost-tracker';
|
|
12
|
+
import type { TodoItem } from './tool-state';
|
|
13
|
+
export interface AppState {
|
|
14
|
+
config: OpenHorseCLIConfig;
|
|
15
|
+
tools: OpenHorseTool[];
|
|
16
|
+
conversationHistory: Message[];
|
|
17
|
+
isProcessing: boolean;
|
|
18
|
+
currentModel: string;
|
|
19
|
+
tokenUsage: {
|
|
20
|
+
promptTokens: number;
|
|
21
|
+
completionTokens: number;
|
|
22
|
+
} | null;
|
|
23
|
+
permissionMode: PermissionMode;
|
|
24
|
+
costTracker: CostTracker;
|
|
25
|
+
/** Project memory content loaded at startup */
|
|
26
|
+
memoryContent: string;
|
|
27
|
+
/** Pre-rendered skills section for the system prompt */
|
|
28
|
+
skillsContent: string;
|
|
29
|
+
/** Active todo list (mirrored from tool-state) */
|
|
30
|
+
todos: TodoItem[];
|
|
31
|
+
/** Whether the agent is in plan mode (mirrored from tool-state) */
|
|
32
|
+
planMode: boolean;
|
|
33
|
+
/** Latest plan from exit_plan_mode (mirrored from tool-state) */
|
|
34
|
+
currentPlan: string | null;
|
|
35
|
+
}
|
|
36
|
+
type Listener = (state: AppState) => void;
|
|
37
|
+
export declare class Store {
|
|
38
|
+
private state;
|
|
39
|
+
private listeners;
|
|
40
|
+
constructor(initial: Omit<AppState, 'conversationHistory' | 'isProcessing' | 'tokenUsage' | 'permissionMode' | 'costTracker' | 'memoryContent' | 'skillsContent' | 'todos' | 'planMode' | 'currentPlan'> & Partial<AppState>);
|
|
41
|
+
/** Get the current state snapshot */
|
|
42
|
+
getSnapshot(): AppState;
|
|
43
|
+
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
44
|
+
subscribe(listener: Listener): () => void;
|
|
45
|
+
/** Update state with a partial object and notify listeners */
|
|
46
|
+
setState(partial: Partial<AppState>): void;
|
|
47
|
+
/** Convenience: reset conversation history */
|
|
48
|
+
resetConversation(): void;
|
|
49
|
+
/** Convenience: set processing state */
|
|
50
|
+
setProcessing(val: boolean): void;
|
|
51
|
+
/** Convenience: append a message to conversation history */
|
|
52
|
+
addMessage(msg: Message): void;
|
|
53
|
+
/** Convenience: update token usage */
|
|
54
|
+
setTokenUsage(usage: {
|
|
55
|
+
promptTokens: number;
|
|
56
|
+
completionTokens: number;
|
|
57
|
+
}): void;
|
|
58
|
+
/** Convenience: set permission mode */
|
|
59
|
+
setPermissionMode(mode: PermissionMode): void;
|
|
60
|
+
/** Convenience: cycle to next permission mode */
|
|
61
|
+
cyclePermissionMode(): PermissionMode;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/framework/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mBAAmB,EAAE,OAAO,EAAE,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACtE,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,mEAAmE;IACnE,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAMD,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAE1C,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAA4B;gBAEjC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,qBAAqB,GAAG,cAAc,GAAG,YAAY,GAAG,gBAAgB,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgB5N,qCAAqC;IACrC,WAAW,IAAI,QAAQ;IAIvB,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI;IAKzC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAO1C,8CAA8C;IAC9C,iBAAiB,IAAI,IAAI;IAOzB,wCAAwC;IACxC,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAIjC,4DAA4D;IAC5D,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAM9B,sCAAsC;IACtC,aAAa,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI9E,uCAAuC;IACvC,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAI7C,iDAAiD;IACjD,mBAAmB,IAAI,cAAc;CAMtC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - Centralized State Store
|
|
4
|
+
*
|
|
5
|
+
* Simple publish-subscribe state management.
|
|
6
|
+
* No React dependency — just state + listeners.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.Store = void 0;
|
|
10
|
+
const cost_tracker_1 = require("../core/cost-tracker");
|
|
11
|
+
class Store {
|
|
12
|
+
constructor(initial) {
|
|
13
|
+
this.listeners = new Set();
|
|
14
|
+
this.state = {
|
|
15
|
+
conversationHistory: [],
|
|
16
|
+
isProcessing: false,
|
|
17
|
+
tokenUsage: null,
|
|
18
|
+
permissionMode: 'default',
|
|
19
|
+
costTracker: new cost_tracker_1.CostTracker(),
|
|
20
|
+
memoryContent: '',
|
|
21
|
+
skillsContent: '',
|
|
22
|
+
todos: [],
|
|
23
|
+
planMode: false,
|
|
24
|
+
currentPlan: null,
|
|
25
|
+
...initial,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Get the current state snapshot */
|
|
29
|
+
getSnapshot() {
|
|
30
|
+
return this.state;
|
|
31
|
+
}
|
|
32
|
+
/** Subscribe to state changes. Returns an unsubscribe function. */
|
|
33
|
+
subscribe(listener) {
|
|
34
|
+
this.listeners.add(listener);
|
|
35
|
+
return () => this.listeners.delete(listener);
|
|
36
|
+
}
|
|
37
|
+
/** Update state with a partial object and notify listeners */
|
|
38
|
+
setState(partial) {
|
|
39
|
+
this.state = { ...this.state, ...partial };
|
|
40
|
+
for (const listener of this.listeners) {
|
|
41
|
+
listener(this.state);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Convenience: reset conversation history */
|
|
45
|
+
resetConversation() {
|
|
46
|
+
this.setState({
|
|
47
|
+
conversationHistory: [],
|
|
48
|
+
tokenUsage: null,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/** Convenience: set processing state */
|
|
52
|
+
setProcessing(val) {
|
|
53
|
+
this.setState({ isProcessing: val });
|
|
54
|
+
}
|
|
55
|
+
/** Convenience: append a message to conversation history */
|
|
56
|
+
addMessage(msg) {
|
|
57
|
+
this.setState({
|
|
58
|
+
conversationHistory: [...this.state.conversationHistory, msg],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/** Convenience: update token usage */
|
|
62
|
+
setTokenUsage(usage) {
|
|
63
|
+
this.setState({ tokenUsage: usage });
|
|
64
|
+
}
|
|
65
|
+
/** Convenience: set permission mode */
|
|
66
|
+
setPermissionMode(mode) {
|
|
67
|
+
this.setState({ permissionMode: mode });
|
|
68
|
+
}
|
|
69
|
+
/** Convenience: cycle to next permission mode */
|
|
70
|
+
cyclePermissionMode() {
|
|
71
|
+
const { getNextPermissionMode } = require('../commands/types');
|
|
72
|
+
const nextMode = getNextPermissionMode(this.state.permissionMode);
|
|
73
|
+
this.setState({ permissionMode: nextMode });
|
|
74
|
+
return nextMode;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.Store = Store;
|
|
78
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/framework/store.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAMH,uDAAmD;AAkCnD,MAAa,KAAK;IAIhB,YAAY,OAAgN;QAFpN,cAAS,GAAkB,IAAI,GAAG,EAAE,CAAC;QAG3C,IAAI,CAAC,KAAK,GAAG;YACX,mBAAmB,EAAE,EAAE;YACvB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,SAAS;YACzB,WAAW,EAAE,IAAI,0BAAW,EAAE;YAC9B,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,IAAI;YACjB,GAAG,OAAO;SACC,CAAC;IAChB,CAAC;IAED,qCAAqC;IACrC,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,mEAAmE;IACnE,SAAS,CAAC,QAAkB;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,8DAA8D;IAC9D,QAAQ,CAAC,OAA0B;QACjC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,iBAAiB;QACf,IAAI,CAAC,QAAQ,CAAC;YACZ,mBAAmB,EAAE,EAAE;YACvB,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,aAAa,CAAC,GAAY;QACxB,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,4DAA4D;IAC5D,UAAU,CAAC,GAAY;QACrB,IAAI,CAAC,QAAQ,CAAC;YACZ,mBAAmB,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,aAAa,CAAC,KAAyD;QACrE,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,uCAAuC;IACvC,iBAAiB,CAAC,IAAoB;QACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,iDAAiD;IACjD,mBAAmB;QACjB,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA5ED,sBA4EC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - Tool State
|
|
3
|
+
*
|
|
4
|
+
* Shared state for tools that need persistence across calls within a session
|
|
5
|
+
* (todos, plan mode, current plan). Tools update this state; the CLI mirrors
|
|
6
|
+
* it into the main Store so the UI and `/resume` can observe it.
|
|
7
|
+
*/
|
|
8
|
+
export interface TodoItem {
|
|
9
|
+
content: string;
|
|
10
|
+
status: 'pending' | 'in_progress' | 'completed';
|
|
11
|
+
activeForm: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ToolState {
|
|
14
|
+
todos: TodoItem[];
|
|
15
|
+
planMode: boolean;
|
|
16
|
+
currentPlan: string | null;
|
|
17
|
+
}
|
|
18
|
+
export declare function getToolState(): ToolState;
|
|
19
|
+
export declare function setToolState(partial: Partial<ToolState>): void;
|
|
20
|
+
export declare function subscribeToolState(fn: (s: ToolState) => void): () => void;
|
|
21
|
+
export declare function resetToolState(): void;
|
|
22
|
+
//# sourceMappingURL=tool-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-state.d.ts","sourceRoot":"","sources":["../../src/framework/tool-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAWD,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAG9D;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzE;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - Tool State
|
|
4
|
+
*
|
|
5
|
+
* Shared state for tools that need persistence across calls within a session
|
|
6
|
+
* (todos, plan mode, current plan). Tools update this state; the CLI mirrors
|
|
7
|
+
* it into the main Store so the UI and `/resume` can observe it.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.getToolState = getToolState;
|
|
11
|
+
exports.setToolState = setToolState;
|
|
12
|
+
exports.subscribeToolState = subscribeToolState;
|
|
13
|
+
exports.resetToolState = resetToolState;
|
|
14
|
+
const initialState = {
|
|
15
|
+
todos: [],
|
|
16
|
+
planMode: false,
|
|
17
|
+
currentPlan: null,
|
|
18
|
+
};
|
|
19
|
+
let state = { ...initialState };
|
|
20
|
+
let listeners = [];
|
|
21
|
+
function getToolState() {
|
|
22
|
+
return state;
|
|
23
|
+
}
|
|
24
|
+
function setToolState(partial) {
|
|
25
|
+
state = { ...state, ...partial };
|
|
26
|
+
for (const l of listeners)
|
|
27
|
+
l(state);
|
|
28
|
+
}
|
|
29
|
+
function subscribeToolState(fn) {
|
|
30
|
+
listeners.push(fn);
|
|
31
|
+
return () => {
|
|
32
|
+
listeners = listeners.filter(f => f !== fn);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function resetToolState() {
|
|
36
|
+
state = { ...initialState };
|
|
37
|
+
for (const l of listeners)
|
|
38
|
+
l(state);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=tool-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-state.js","sourceRoot":"","sources":["../../src/framework/tool-state.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAuBH,oCAEC;AAED,oCAGC;AAED,gDAKC;AAED,wCAGC;AA5BD,MAAM,YAAY,GAAc;IAC9B,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,IAAI,KAAK,GAAc,EAAE,GAAG,YAAY,EAAE,CAAC;AAC3C,IAAI,SAAS,GAAkC,EAAE,CAAC;AAElD,SAAgB,YAAY;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,YAAY,CAAC,OAA2B;IACtD,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,kBAAkB,CAAC,EAA0B;IAC3D,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,GAAG,EAAE;QACV,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc;IAC5B,KAAK,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC"}
|