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,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - 基础记忆系统(内存版)
|
|
4
|
+
*
|
|
5
|
+
* 提供三层记忆架构:
|
|
6
|
+
* - 工作记忆 (Working): 当前上下文,容量小,LRU 淘汰
|
|
7
|
+
* - 短期记忆 (Short-term): 最近历史,容量中等,自动晋升
|
|
8
|
+
* - 长期记忆 (Long-term): 持久化存储,容量大,支持检索
|
|
9
|
+
*
|
|
10
|
+
* 所有数据保存在内存中,进程重启后丢失。
|
|
11
|
+
* 未来可扩展为文件/数据库后端。
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.MemoryStore = void 0;
|
|
15
|
+
const eventemitter3_1 = require("eventemitter3");
|
|
16
|
+
const uuid_1 = require("uuid");
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// MemoryStore - 记忆存储
|
|
19
|
+
// ============================================================================
|
|
20
|
+
class MemoryStore extends eventemitter3_1.EventEmitter {
|
|
21
|
+
constructor(config = {}) {
|
|
22
|
+
super();
|
|
23
|
+
this.working = [];
|
|
24
|
+
this.shortTerm = [];
|
|
25
|
+
this.longTerm = new Map();
|
|
26
|
+
this.config = {
|
|
27
|
+
workingCapacity: config.workingCapacity ?? 10,
|
|
28
|
+
shortTermCapacity: config.shortTermCapacity ?? 100,
|
|
29
|
+
autoPromoteToLongTerm: config.autoPromoteToLongTerm ?? true,
|
|
30
|
+
workingTTL: config.workingTTL ?? 0,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// ==========================================================================
|
|
34
|
+
// 工作记忆操作
|
|
35
|
+
// ==========================================================================
|
|
36
|
+
/** 写入工作记忆 */
|
|
37
|
+
pushWorking(content, options) {
|
|
38
|
+
const entry = this.createEntry(content, options);
|
|
39
|
+
this.working.push(entry);
|
|
40
|
+
this.emit('write', { tier: 'working', id: entry.id });
|
|
41
|
+
// LRU 淘汰
|
|
42
|
+
this.evictWorking();
|
|
43
|
+
return entry;
|
|
44
|
+
}
|
|
45
|
+
/** 读取工作记忆 */
|
|
46
|
+
readWorking() {
|
|
47
|
+
this.expireWorking();
|
|
48
|
+
this.touchAll(this.working);
|
|
49
|
+
return [...this.working];
|
|
50
|
+
}
|
|
51
|
+
/** 清空工作记忆 */
|
|
52
|
+
clearWorking() {
|
|
53
|
+
const count = this.working.length;
|
|
54
|
+
// 高频访问的晋升到短期
|
|
55
|
+
const important = this.working.filter(e => e.accessCount >= 3);
|
|
56
|
+
important.forEach(e => this.promoteToShortTerm(e));
|
|
57
|
+
this.working = [];
|
|
58
|
+
this.emit('clear', { tier: 'working', count });
|
|
59
|
+
return count;
|
|
60
|
+
}
|
|
61
|
+
// ==========================================================================
|
|
62
|
+
// 短期记忆操作
|
|
63
|
+
// ==========================================================================
|
|
64
|
+
/** 写入短期记忆 */
|
|
65
|
+
pushShortTerm(content, options) {
|
|
66
|
+
const entry = this.createEntry(content, options);
|
|
67
|
+
this.promoteToShortTerm(entry);
|
|
68
|
+
this.emit('write', { tier: 'short-term', id: entry.id });
|
|
69
|
+
return entry;
|
|
70
|
+
}
|
|
71
|
+
/** 读取短期记忆 */
|
|
72
|
+
readShortTerm() {
|
|
73
|
+
this.touchAll(this.shortTerm);
|
|
74
|
+
return [...this.shortTerm];
|
|
75
|
+
}
|
|
76
|
+
// ==========================================================================
|
|
77
|
+
// 长期记忆操作
|
|
78
|
+
// ==========================================================================
|
|
79
|
+
/** 写入长期记忆 */
|
|
80
|
+
pushLongTerm(content, options) {
|
|
81
|
+
const entry = this.createEntry(content, options);
|
|
82
|
+
this.longTerm.set(entry.id, entry);
|
|
83
|
+
this.emit('write', { tier: 'long-term', id: entry.id });
|
|
84
|
+
return entry;
|
|
85
|
+
}
|
|
86
|
+
/** 按 ID 读取长期记忆 */
|
|
87
|
+
readLongTerm(id) {
|
|
88
|
+
const entry = this.longTerm.get(id);
|
|
89
|
+
if (entry) {
|
|
90
|
+
entry.lastAccessedAt = Date.now();
|
|
91
|
+
entry.accessCount++;
|
|
92
|
+
}
|
|
93
|
+
return entry;
|
|
94
|
+
}
|
|
95
|
+
/** 按 ID 删除长期记忆 */
|
|
96
|
+
deleteLongTerm(id) {
|
|
97
|
+
const existed = this.longTerm.delete(id);
|
|
98
|
+
if (existed) {
|
|
99
|
+
this.emit('delete', { id });
|
|
100
|
+
}
|
|
101
|
+
return existed;
|
|
102
|
+
}
|
|
103
|
+
// ==========================================================================
|
|
104
|
+
// 全局检索
|
|
105
|
+
// ==========================================================================
|
|
106
|
+
/** 搜索记忆(全层级) */
|
|
107
|
+
search(query, tier) {
|
|
108
|
+
const results = [];
|
|
109
|
+
const lowerQuery = (query.query ?? '').toLowerCase();
|
|
110
|
+
const matches = (entry) => {
|
|
111
|
+
if (query.source && entry.source !== query.source)
|
|
112
|
+
return false;
|
|
113
|
+
if (query.tags?.length && !query.tags.some(t => entry.tags.includes(t)))
|
|
114
|
+
return false;
|
|
115
|
+
if (query.after && entry.createdAt < query.after)
|
|
116
|
+
return false;
|
|
117
|
+
if (query.before && entry.createdAt > query.before)
|
|
118
|
+
return false;
|
|
119
|
+
if (lowerQuery) {
|
|
120
|
+
const contentStr = JSON.stringify(entry.content).toLowerCase();
|
|
121
|
+
const tagsStr = entry.tags.join(' ').toLowerCase();
|
|
122
|
+
if (!contentStr.includes(lowerQuery) && !tagsStr.includes(lowerQuery))
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
};
|
|
127
|
+
if (!tier || tier === 'working') {
|
|
128
|
+
this.readWorking().filter(matches).forEach(e => results.push(e));
|
|
129
|
+
}
|
|
130
|
+
if (!tier || tier === 'short-term') {
|
|
131
|
+
this.readShortTerm().filter(matches).forEach(e => results.push(e));
|
|
132
|
+
}
|
|
133
|
+
if (!tier || tier === 'long-term') {
|
|
134
|
+
Array.from(this.longTerm.values()).filter(matches).forEach(e => results.push(e));
|
|
135
|
+
}
|
|
136
|
+
const limit = query.limit ?? results.length;
|
|
137
|
+
return results.slice(0, limit);
|
|
138
|
+
}
|
|
139
|
+
// ==========================================================================
|
|
140
|
+
// 统计与管理
|
|
141
|
+
// ==========================================================================
|
|
142
|
+
/** 获取各层记忆数量 */
|
|
143
|
+
getStats() {
|
|
144
|
+
return {
|
|
145
|
+
working: this.working.length,
|
|
146
|
+
'short-term': this.shortTerm.length,
|
|
147
|
+
'long-term': this.longTerm.size,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/** 获取全部记忆条目 */
|
|
151
|
+
getAll(tier) {
|
|
152
|
+
const entries = [];
|
|
153
|
+
if (!tier || tier === 'working')
|
|
154
|
+
entries.push(...this.readWorking());
|
|
155
|
+
if (!tier || tier === 'short-term')
|
|
156
|
+
entries.push(...this.readShortTerm());
|
|
157
|
+
if (!tier || tier === 'long-term')
|
|
158
|
+
entries.push(...Array.from(this.longTerm.values()));
|
|
159
|
+
return entries;
|
|
160
|
+
}
|
|
161
|
+
/** 重置记忆系统 */
|
|
162
|
+
reset() {
|
|
163
|
+
this.working = [];
|
|
164
|
+
this.shortTerm = [];
|
|
165
|
+
this.longTerm.clear();
|
|
166
|
+
this.emit('reset');
|
|
167
|
+
}
|
|
168
|
+
// ==========================================================================
|
|
169
|
+
// Internal
|
|
170
|
+
// ==========================================================================
|
|
171
|
+
createEntry(content, options) {
|
|
172
|
+
const now = Date.now();
|
|
173
|
+
return {
|
|
174
|
+
id: (0, uuid_1.v4)(),
|
|
175
|
+
content,
|
|
176
|
+
createdAt: now,
|
|
177
|
+
lastAccessedAt: now,
|
|
178
|
+
accessCount: 0,
|
|
179
|
+
tags: options?.tags ?? [],
|
|
180
|
+
source: options?.source,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
evictWorking() {
|
|
184
|
+
if (this.working.length <= this.config.workingCapacity)
|
|
185
|
+
return;
|
|
186
|
+
// 按最后访问时间排序,淘汰最久的
|
|
187
|
+
const toRemove = this.working.length - this.config.workingCapacity;
|
|
188
|
+
const sorted = [...this.working].sort((a, b) => a.lastAccessedAt - b.lastAccessedAt);
|
|
189
|
+
for (let i = 0; i < toRemove; i++) {
|
|
190
|
+
const evicted = sorted[i];
|
|
191
|
+
this.working = this.working.filter(e => e.id !== evicted.id);
|
|
192
|
+
this.promoteToShortTerm(evicted);
|
|
193
|
+
this.emit('evict', { from: 'working', id: evicted.id });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
expireWorking() {
|
|
197
|
+
if (this.config.workingTTL <= 0)
|
|
198
|
+
return;
|
|
199
|
+
const cutoff = Date.now() - this.config.workingTTL;
|
|
200
|
+
const expired = this.working.filter(e => e.createdAt < cutoff);
|
|
201
|
+
this.working = this.working.filter(e => e.createdAt >= cutoff);
|
|
202
|
+
expired.forEach(e => {
|
|
203
|
+
this.emit('expire', { id: e.id });
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
promoteToShortTerm(entry) {
|
|
207
|
+
entry.lastAccessedAt = Date.now();
|
|
208
|
+
this.shortTerm.push(entry);
|
|
209
|
+
if (this.shortTerm.length > this.config.shortTermCapacity) {
|
|
210
|
+
const evicted = this.shortTerm.shift();
|
|
211
|
+
if (evicted && this.config.autoPromoteToLongTerm) {
|
|
212
|
+
this.longTerm.set(evicted.id, evicted);
|
|
213
|
+
this.emit('evict', { from: 'short-term', id: evicted.id });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
touchAll(entries) {
|
|
218
|
+
const now = Date.now();
|
|
219
|
+
entries.forEach(e => {
|
|
220
|
+
e.lastAccessedAt = now;
|
|
221
|
+
e.accessCount++;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
exports.MemoryStore = MemoryStore;
|
|
226
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - Memory System Types
|
|
3
|
+
*
|
|
4
|
+
* Typed memory system for user preferences, feedback, project context,
|
|
5
|
+
* and external references. Based on OpenClaude's memory architecture.
|
|
6
|
+
*/
|
|
7
|
+
/** Memory type taxonomy */
|
|
8
|
+
export type MemoryType = 'user' | 'feedback' | 'project' | 'reference';
|
|
9
|
+
/** Memory entry with frontmatter */
|
|
10
|
+
export interface MemoryEntry {
|
|
11
|
+
/** Short kebab-case name */
|
|
12
|
+
name: string;
|
|
13
|
+
/** One-line description for index */
|
|
14
|
+
description: string;
|
|
15
|
+
/** Memory type */
|
|
16
|
+
type: MemoryType;
|
|
17
|
+
/** Memory content */
|
|
18
|
+
content: string;
|
|
19
|
+
/** Creation timestamp */
|
|
20
|
+
createdAt: number;
|
|
21
|
+
/** Last update timestamp */
|
|
22
|
+
updatedAt: number;
|
|
23
|
+
}
|
|
24
|
+
/** Memory index entry (MEMORY.md line) */
|
|
25
|
+
export interface MemoryIndexEntry {
|
|
26
|
+
/** Memory name */
|
|
27
|
+
name: string;
|
|
28
|
+
/** Memory file path (relative) */
|
|
29
|
+
path: string;
|
|
30
|
+
/** One-line hook */
|
|
31
|
+
hook: string;
|
|
32
|
+
}
|
|
33
|
+
export declare const MEMORY_TYPE_DESCRIPTIONS: Record<MemoryType, string>;
|
|
34
|
+
/** Types section for system prompt */
|
|
35
|
+
export declare const MEMORY_TYPES_SECTION = "\n## Types of memory\n\nThere are several discrete types of memory that you can store:\n\n<types>\n<type>\n <name>user</name>\n <description>Contain information about the user's role, goals, responsibilities, and knowledge. Great user memories help you tailor your future behavior to the user's preferences and perspective.</description>\n <when_to_save>When you learn any details about the user's role, preferences, responsibilities, or knowledge</when_to_save>\n</type>\n<type>\n <name>feedback</name>\n <description>Guidance the user has given you about how to approach work \u2014 both what to avoid and what to keep doing. Record from failure AND success: if you only save corrections, you will avoid past mistakes but drift away from validated approaches.</description>\n <when_to_save>Any time the user corrects your approach OR confirms a non-obvious approach worked</when_to_save>\n <body_structure>Lead with the rule, then **Why:** and **How to apply:** lines</body_structure>\n</type>\n<type>\n <name>project</name>\n <description>Information about ongoing work, goals, initiatives that is not derivable from code or git history. Helps understand the broader context.</description>\n <when_to_save>When you learn who is doing what, why, or by when. Convert relative dates to absolute dates.</when_to_save>\n <body_structure>Lead with the fact, then **Why:** and **How to apply:** lines</body_structure>\n</type>\n<type>\n <name>reference</name>\n <description>Stores pointers to where information can be found in external systems.</description>\n <when_to_save>When you learn about resources in external systems and their purpose</when_to_save>\n</type>\n</types>\n";
|
|
36
|
+
/** What NOT to save section */
|
|
37
|
+
export declare const MEMORY_EXCLUSIONS_SECTION = "\n## What NOT to save in memory\n\n- Code patterns, conventions, architecture, file paths, or project structure \u2014 read the current project state\n- Git history, recent changes, or who-changed-what \u2014 `git log` / `git blame` are authoritative\n- Debugging solutions or fix recipes \u2014 the fix is in the code; the commit message has the context\n- Anything already documented in CLAUDE.md files\n- Ephemeral task details: in-progress work, temporary state, current conversation context\n";
|
|
38
|
+
/** Frontmatter example */
|
|
39
|
+
export declare const MEMORY_FRONTMATTER_EXAMPLE = "---\nname: {{short-kebab-case-slug}}\ndescription: {{one-line summary}}\ntype: {{user|feedback|project|reference}}\n---\n\n{{memory content}}";
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,2BAA2B;AAC3B,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;AAEvE,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAK/D,CAAC;AAMF,sCAAsC;AACtC,eAAO,MAAM,oBAAoB,2rDA6BhC,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,yBAAyB,sfAQrC,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,0BAA0B,kJAMpB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - Memory System Types
|
|
4
|
+
*
|
|
5
|
+
* Typed memory system for user preferences, feedback, project context,
|
|
6
|
+
* and external references. Based on OpenClaude's memory architecture.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MEMORY_FRONTMATTER_EXAMPLE = exports.MEMORY_EXCLUSIONS_SECTION = exports.MEMORY_TYPES_SECTION = exports.MEMORY_TYPE_DESCRIPTIONS = void 0;
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Type Descriptions
|
|
12
|
+
// ============================================================================
|
|
13
|
+
exports.MEMORY_TYPE_DESCRIPTIONS = {
|
|
14
|
+
user: 'User role, preferences, knowledge - helps tailor behavior to the user',
|
|
15
|
+
feedback: 'Behavior guidance (avoid/keep) - corrections and confirmed approaches',
|
|
16
|
+
project: 'Project state, goals, constraints - context behind current work',
|
|
17
|
+
reference: 'External resource pointers - where to find info outside the project',
|
|
18
|
+
};
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Memory Prompts
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/** Types section for system prompt */
|
|
23
|
+
exports.MEMORY_TYPES_SECTION = `
|
|
24
|
+
## Types of memory
|
|
25
|
+
|
|
26
|
+
There are several discrete types of memory that you can store:
|
|
27
|
+
|
|
28
|
+
<types>
|
|
29
|
+
<type>
|
|
30
|
+
<name>user</name>
|
|
31
|
+
<description>Contain information about the user's role, goals, responsibilities, and knowledge. Great user memories help you tailor your future behavior to the user's preferences and perspective.</description>
|
|
32
|
+
<when_to_save>When you learn any details about the user's role, preferences, responsibilities, or knowledge</when_to_save>
|
|
33
|
+
</type>
|
|
34
|
+
<type>
|
|
35
|
+
<name>feedback</name>
|
|
36
|
+
<description>Guidance the user has given you about how to approach work — both what to avoid and what to keep doing. Record from failure AND success: if you only save corrections, you will avoid past mistakes but drift away from validated approaches.</description>
|
|
37
|
+
<when_to_save>Any time the user corrects your approach OR confirms a non-obvious approach worked</when_to_save>
|
|
38
|
+
<body_structure>Lead with the rule, then **Why:** and **How to apply:** lines</body_structure>
|
|
39
|
+
</type>
|
|
40
|
+
<type>
|
|
41
|
+
<name>project</name>
|
|
42
|
+
<description>Information about ongoing work, goals, initiatives that is not derivable from code or git history. Helps understand the broader context.</description>
|
|
43
|
+
<when_to_save>When you learn who is doing what, why, or by when. Convert relative dates to absolute dates.</when_to_save>
|
|
44
|
+
<body_structure>Lead with the fact, then **Why:** and **How to apply:** lines</body_structure>
|
|
45
|
+
</type>
|
|
46
|
+
<type>
|
|
47
|
+
<name>reference</name>
|
|
48
|
+
<description>Stores pointers to where information can be found in external systems.</description>
|
|
49
|
+
<when_to_save>When you learn about resources in external systems and their purpose</when_to_save>
|
|
50
|
+
</type>
|
|
51
|
+
</types>
|
|
52
|
+
`;
|
|
53
|
+
/** What NOT to save section */
|
|
54
|
+
exports.MEMORY_EXCLUSIONS_SECTION = `
|
|
55
|
+
## What NOT to save in memory
|
|
56
|
+
|
|
57
|
+
- Code patterns, conventions, architecture, file paths, or project structure — read the current project state
|
|
58
|
+
- Git history, recent changes, or who-changed-what — \`git log\` / \`git blame\` are authoritative
|
|
59
|
+
- Debugging solutions or fix recipes — the fix is in the code; the commit message has the context
|
|
60
|
+
- Anything already documented in CLAUDE.md files
|
|
61
|
+
- Ephemeral task details: in-progress work, temporary state, current conversation context
|
|
62
|
+
`;
|
|
63
|
+
/** Frontmatter example */
|
|
64
|
+
exports.MEMORY_FRONTMATTER_EXAMPLE = `---
|
|
65
|
+
name: {{short-kebab-case-slug}}
|
|
66
|
+
description: {{one-line summary}}
|
|
67
|
+
type: {{user|feedback|project|reference}}
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
{{memory content}}`;
|
|
71
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAmCH,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAElE,QAAA,wBAAwB,GAA+B;IAClE,IAAI,EAAE,uEAAuE;IAC7E,QAAQ,EAAE,uEAAuE;IACjF,OAAO,EAAE,iEAAiE;IAC1E,SAAS,EAAE,qEAAqE;CACjF,CAAC;AAEF,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,sCAAsC;AACzB,QAAA,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BnC,CAAC;AAEF,+BAA+B;AAClB,QAAA,yBAAyB,GAAG;;;;;;;;CAQxC,CAAC;AAEF,0BAA0B;AACb,QAAA,0BAA0B,GAAG;;;;;;mBAMvB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - Memory Drift Validation
|
|
3
|
+
*
|
|
4
|
+
* Validates that memory content references (files, symbols) still exist.
|
|
5
|
+
* Prevents stale memories from causing confusion.
|
|
6
|
+
*/
|
|
7
|
+
import type { MemoryEntry } from './types';
|
|
8
|
+
export type DriftType = 'file_missing' | 'symbol_missing' | 'url_invalid';
|
|
9
|
+
export interface DriftItem {
|
|
10
|
+
type: DriftType;
|
|
11
|
+
ref: string;
|
|
12
|
+
message: string;
|
|
13
|
+
}
|
|
14
|
+
export interface DriftResult {
|
|
15
|
+
valid: boolean;
|
|
16
|
+
drifts: DriftItem[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validate a memory entry for drift (stale references)
|
|
20
|
+
* @param entry - Memory entry to validate
|
|
21
|
+
* @param projectPath - Project path for resolving file references
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateMemoryDrift(entry: MemoryEntry, projectPath: string): DriftResult;
|
|
24
|
+
/**
|
|
25
|
+
* Validate all memories in a project
|
|
26
|
+
*/
|
|
27
|
+
export declare function validateAllMemories(projectPath: string): Map<string, DriftResult>;
|
|
28
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/memory/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM3C,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAE1E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW,CA8CxF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAajF"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* openhorse - Memory Drift Validation
|
|
4
|
+
*
|
|
5
|
+
* Validates that memory content references (files, symbols) still exist.
|
|
6
|
+
* Prevents stale memories from causing confusion.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.validateMemoryDrift = validateMemoryDrift;
|
|
10
|
+
exports.validateAllMemories = validateAllMemories;
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path_1 = require("path");
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Validation Functions
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Validate a memory entry for drift (stale references)
|
|
18
|
+
* @param entry - Memory entry to validate
|
|
19
|
+
* @param projectPath - Project path for resolving file references
|
|
20
|
+
*/
|
|
21
|
+
function validateMemoryDrift(entry, projectPath) {
|
|
22
|
+
const drifts = [];
|
|
23
|
+
const content = entry.content;
|
|
24
|
+
// 1. Check file path references
|
|
25
|
+
const fileRefs = extractFilePaths(content);
|
|
26
|
+
for (const ref of fileRefs) {
|
|
27
|
+
const fullPath = (0, path_1.join)(projectPath, ref);
|
|
28
|
+
if (!(0, fs_1.existsSync)(fullPath)) {
|
|
29
|
+
drifts.push({
|
|
30
|
+
type: 'file_missing',
|
|
31
|
+
ref,
|
|
32
|
+
message: `File not found: ${ref}`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// 2. Check symbol references (function/class names)
|
|
37
|
+
const symbolRefs = extractSymbolRefs(content);
|
|
38
|
+
for (const ref of symbolRefs) {
|
|
39
|
+
// For now, we just check if the symbol looks valid (not a comprehensive grep)
|
|
40
|
+
// A full implementation would grep the project for the symbol
|
|
41
|
+
if (ref.length < 2 || ref.includes(' ')) {
|
|
42
|
+
// Likely not a valid symbol name
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// Note: Full symbol validation would require grep search
|
|
46
|
+
// For simplicity, we skip comprehensive validation here
|
|
47
|
+
}
|
|
48
|
+
// 3. Check URL references (basic format check)
|
|
49
|
+
const urlRefs = extractUrls(content);
|
|
50
|
+
for (const ref of urlRefs) {
|
|
51
|
+
if (!isValidUrlFormat(ref)) {
|
|
52
|
+
drifts.push({
|
|
53
|
+
type: 'url_invalid',
|
|
54
|
+
ref,
|
|
55
|
+
message: `Invalid URL format: ${ref}`,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
valid: drifts.length === 0,
|
|
61
|
+
drifts,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate all memories in a project
|
|
66
|
+
*/
|
|
67
|
+
function validateAllMemories(projectPath) {
|
|
68
|
+
const results = new Map();
|
|
69
|
+
// Import loadAllMemories dynamically to avoid circular dependency
|
|
70
|
+
const { loadAllMemories } = require('./storage');
|
|
71
|
+
const memories = loadAllMemories(projectPath);
|
|
72
|
+
for (const mem of memories) {
|
|
73
|
+
const result = validateMemoryDrift(mem, projectPath);
|
|
74
|
+
results.set(mem.name, result);
|
|
75
|
+
}
|
|
76
|
+
return results;
|
|
77
|
+
}
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// Extraction Helpers
|
|
80
|
+
// ============================================================================
|
|
81
|
+
/**
|
|
82
|
+
* Extract file path references from content
|
|
83
|
+
* Matches patterns like:
|
|
84
|
+
* - src/file.ts
|
|
85
|
+
* - ./path/to/file.js
|
|
86
|
+
* - /absolute/path.py
|
|
87
|
+
* - file.md
|
|
88
|
+
*/
|
|
89
|
+
function extractFilePaths(content) {
|
|
90
|
+
const paths = [];
|
|
91
|
+
// Match relative paths (common code references)
|
|
92
|
+
const relativePathRegex = /(?:\.\/|src\/|lib\/|tests\/|docs\/|[\w-]+\/)[\w-]+\.(?:ts|tsx|js|jsx|py|md|json|yaml|yml)/g;
|
|
93
|
+
const matches = content.match(relativePathRegex);
|
|
94
|
+
if (matches) {
|
|
95
|
+
paths.push(...matches);
|
|
96
|
+
}
|
|
97
|
+
// Match quoted file paths
|
|
98
|
+
const quotedPathRegex = /['"`]([\w/-]+\.[\w]+)['"`]/g;
|
|
99
|
+
let match;
|
|
100
|
+
while ((match = quotedPathRegex.exec(content)) !== null) {
|
|
101
|
+
const path = match[1];
|
|
102
|
+
// Skip if it looks like a URL
|
|
103
|
+
if (!path.startsWith('http') && !path.includes('://')) {
|
|
104
|
+
paths.push(path);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return [...new Set(paths)]; // unique
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Extract symbol references (function/class names) from content
|
|
111
|
+
*/
|
|
112
|
+
function extractSymbolRefs(content) {
|
|
113
|
+
const symbols = [];
|
|
114
|
+
// Match camelCase or PascalCase identifiers that look like code symbols
|
|
115
|
+
const symbolRegex = /\b(?:function|class|interface|type|const|let|var)\s+([A-Za-z_][A-Za-z0-9_]*)/g;
|
|
116
|
+
let match;
|
|
117
|
+
while ((match = symbolRegex.exec(content)) !== null) {
|
|
118
|
+
symbols.push(match[1]);
|
|
119
|
+
}
|
|
120
|
+
// Match `SymbolName` references in text
|
|
121
|
+
const refRegex = /`([A-Za-z_][A-Za-z0-9_]*)`/g;
|
|
122
|
+
while ((match = refRegex.exec(content)) !== null) {
|
|
123
|
+
symbols.push(match[1]);
|
|
124
|
+
}
|
|
125
|
+
return [...new Set(symbols)]; // unique
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Extract URL references from content
|
|
129
|
+
*/
|
|
130
|
+
function extractUrls(content) {
|
|
131
|
+
const urlRegex = /https?:\/\/[^\s<>"']+/g;
|
|
132
|
+
const matches = content.match(urlRegex);
|
|
133
|
+
return matches ? [...new Set(matches)] : [];
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Basic URL format validation
|
|
137
|
+
*/
|
|
138
|
+
function isValidUrlFormat(url) {
|
|
139
|
+
try {
|
|
140
|
+
new URL(url);
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/memory/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* openhorse - Vector Store
|
|
3
|
+
*
|
|
4
|
+
* 基于 sqlite-vec 的向量存储层
|
|
5
|
+
*/
|
|
6
|
+
import { type EmbeddingConfig } from './embeddings';
|
|
7
|
+
import type { MemoryEntry, MemoryType } from './types';
|
|
8
|
+
export interface SearchResult {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
type: MemoryType;
|
|
12
|
+
content: string;
|
|
13
|
+
description: string;
|
|
14
|
+
score: number;
|
|
15
|
+
createdAt: number;
|
|
16
|
+
}
|
|
17
|
+
export interface VectorStoreConfig {
|
|
18
|
+
dbPath?: string;
|
|
19
|
+
embeddingConfig?: EmbeddingConfig;
|
|
20
|
+
}
|
|
21
|
+
export declare class VectorStore {
|
|
22
|
+
private db;
|
|
23
|
+
private embeddingService;
|
|
24
|
+
private initialized;
|
|
25
|
+
constructor(config?: VectorStoreConfig);
|
|
26
|
+
/** Initialize database tables */
|
|
27
|
+
private initialize;
|
|
28
|
+
/** Check if vector search is available */
|
|
29
|
+
isVectorSearchAvailable(): boolean;
|
|
30
|
+
/** Insert or update memory with embedding */
|
|
31
|
+
upsert(entry: MemoryEntry, projectPath?: string): Promise<void>;
|
|
32
|
+
/** Delete memory */
|
|
33
|
+
delete(name: string): void;
|
|
34
|
+
/** Search by similarity */
|
|
35
|
+
search(query: string, limit?: number, projectPath?: string): Promise<SearchResult[]>;
|
|
36
|
+
/** Semantic search using vectors */
|
|
37
|
+
private semanticSearch;
|
|
38
|
+
/** Text search fallback */
|
|
39
|
+
private textSearch;
|
|
40
|
+
/** Get all memories for a project */
|
|
41
|
+
getAll(projectPath?: string): SearchResult[];
|
|
42
|
+
/** Hash project path */
|
|
43
|
+
private hashProject;
|
|
44
|
+
/** Close database */
|
|
45
|
+
close(): void;
|
|
46
|
+
}
|
|
47
|
+
export declare function getVectorStore(config?: VectorStoreConfig): VectorStore;
|
|
48
|
+
export declare function resetVectorStore(): void;
|
|
49
|
+
//# sourceMappingURL=vector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../src/memory/vector-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAMvD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,CAAC,EAAE,iBAAiB;IAqBtC,iCAAiC;IACjC,OAAO,CAAC,UAAU;IAiDlB,0CAA0C;IAC1C,uBAAuB,IAAI,OAAO;IAIlC,6CAA6C;IACvC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CrE,oBAAoB;IACpB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW1B,2BAA2B;IACrB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAY9F,oCAAoC;YACtB,cAAc;IAgD5B,2BAA2B;IAC3B,OAAO,CAAC,UAAU;IAkClB,qCAAqC;IACrC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAsB5C,wBAAwB;IACxB,OAAO,CAAC,WAAW;IAMnB,qBAAqB;IACrB,KAAK,IAAI,IAAI;CAGd;AAQD,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAKtE;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC"}
|