hypervibes 0.0.0-stage → 0.4.0-beta
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/.build/client/assets/_authenticated-Cv9zLaQf.js +1 -0
- package/.build/client/assets/_authenticated.account-BUQIEX6U.js +1 -0
- package/.build/client/assets/_authenticated.agents-dJY4sHg9.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId-M6WEcZ08.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.chart-C7d7IrdC.js +4 -0
- package/.build/client/assets/_authenticated.agents._agentId.chat-ByZuIqSb.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.index-BWIZd3vd.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.indicators-CjCgrxqH.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.indicators_._indicatorId-B45wotiz.js +2 -0
- package/.build/client/assets/_authenticated.agents._agentId.indicators_._indicatorId-Beoq1vKK.js +6 -0
- package/.build/client/assets/_authenticated.agents._agentId.memories-BmofNWcJ.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.memories_._memoryRef-CGnpq7sv.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.notifications-Z1TVoGbh.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.notifications_._notificationId-BU2I1Fui.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.settings-CUai-n8m.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents-dJY4sHg9.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents._subagentId-CEYRqW8Q.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents._subagentId_.runs._runId-Cr7yrAJz.js +3 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents.index-xTEjRPdW.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents.new-B9ZR8zIn.js +37 -0
- package/.build/client/assets/_authenticated.agents._agentId.transactions-a1xzSbFO.js +1 -0
- package/.build/client/assets/_authenticated.agents.index-CEqeDEgP.js +1 -0
- package/.build/client/assets/_authenticated.agents.new-COOjMCtg.js +1 -0
- package/.build/client/assets/_authenticated.providers-8wsMG9f-.js +1 -0
- package/.build/client/assets/agent-chat-page-vKrkXdzr.js +1 -0
- package/.build/client/assets/agent-enablement-control-BMJ6jULr.js +1 -0
- package/.build/client/assets/agent-events-DC8eDZf3.js +1 -0
- package/.build/client/assets/agent-input-aolvZ47U.js +1 -0
- package/.build/client/assets/agent-notifications-page-B0mr-Zz8.js +1 -0
- package/.build/client/assets/agent-queries-CNMBImun.js +1 -0
- package/.build/client/assets/app-DcRTuyby.css +2 -0
- package/.build/client/assets/artifact-content-COO4VTSZ.js +1 -0
- package/.build/client/assets/auth-client-K13li9H1.js +3 -0
- package/.build/client/assets/call-DxlGie4_.js +31 -0
- package/.build/client/assets/ccip-BgPlVPYP.js +1 -0
- package/.build/client/assets/chart-contracts-Cr5SFCbE.js +1 -0
- package/.build/client/assets/chart-queries-Bpvrgd0-.js +1 -0
- package/.build/client/assets/chat-bubble-CAJkT-vL.js +1 -0
- package/.build/client/assets/config-dialog-C9x9gKW9.js +1 -0
- package/.build/client/assets/contracts-HhAL7Tt7.js +1 -0
- package/.build/client/assets/createServerFn-DfZIp2Fu.js +3 -0
- package/.build/client/assets/custom-BeqXuIIS.js +5 -0
- package/.build/client/assets/decimal-B0DEG-1V.js +1 -0
- package/.build/client/assets/esm-BTb2nBdW.js +1 -0
- package/.build/client/assets/identicon-Lb9pS4O1.js +1 -0
- package/.build/client/assets/index-fu66g8fn.js +10 -0
- package/.build/client/assets/indicator-input-fields-CtmrfVfS.js +1 -0
- package/.build/client/assets/indicator-queries-CzZ6u1Mh.js +1 -0
- package/.build/client/assets/indicator-renderer-CfccsIt2.js +1 -0
- package/.build/client/assets/instrument-label-BZYlWXR5.js +1 -0
- package/.build/client/assets/instrument-picker-DLPpryOm.js +1 -0
- package/.build/client/assets/journal-decimal-DBvd_Ibi.js +1 -0
- package/.build/client/assets/jsx-runtime-CIazjfqY.js +1 -0
- package/.build/client/assets/lazyRouteComponent-CJgUa7_r.js +1 -0
- package/.build/client/assets/lightweight-charts.production-BiBiFZSH.js +1 -0
- package/.build/client/assets/login-MNgYxCOY.js +3 -0
- package/.build/client/assets/memory-badge-BbN-DJQi.js +1 -0
- package/.build/client/assets/memory-contracts-Doi_Q1XJ.js +1 -0
- package/.build/client/assets/memory-queries-BttL580R.js +1 -0
- package/.build/client/assets/model-picker-YCQNNmyw.js +1 -0
- package/.build/client/assets/notification-queries-B12DG3aS.js +1 -0
- package/.build/client/assets/preload-helper-Czpn1I53.js +1 -0
- package/.build/client/assets/provider-logo-Ddb77aBD.js +1 -0
- package/.build/client/assets/provider-queries-DxPwhDOU.js +1 -0
- package/.build/client/assets/query-nvK_95Jo.js +1 -0
- package/.build/client/assets/random-uuid-DJR3ygJS.js +1 -0
- package/.build/client/assets/react-dom-C6bOPxes.js +1 -0
- package/.build/client/assets/risk-queries-D_6PHwus.js +1 -0
- package/.build/client/assets/run-subagent-dialog-B4yQe9T9.js +1 -0
- package/.build/client/assets/secp256k1-BbZnIgDP.js +1 -0
- package/.build/client/assets/setup-checklist-CUW-K484.js +1 -0
- package/.build/client/assets/sha2-hT-Q4pur.js +1 -0
- package/.build/client/assets/subagent-enabled-toggle-Bk5wfScg.js +1 -0
- package/.build/client/assets/subagent-input-TQke90I1.js +1 -0
- package/.build/client/assets/subagent-mutations-DfsDbmFu.js +1 -0
- package/.build/client/assets/subagent-queries-DVv5JCfs.js +1 -0
- package/.build/client/assets/subagent-run-history-D55Uh5VK.js +1 -0
- package/.build/client/assets/toggle-timestamp-B50FTPmA.js +1 -0
- package/.build/client/assets/useBaseQuery-Bxruo_mV.js +1 -0
- package/.build/client/assets/useMutation-Dni_73Pp.js +1 -0
- package/.build/client/assets/useQuery-BMSU16jY.js +1 -0
- package/.build/client/assets/useRouter-c0I1aURm.js +1 -0
- package/.build/client/assets/useSelector-ERD9RroG.js +2 -0
- package/.build/client/assets/useSuspenseQuery-vODFwDb8.js +1 -0
- package/.build/client/assets/utils-Bpv4vmSW.js +1 -0
- package/.build/client/assets/worker-triggers-DtXyn40O.js +1 -0
- package/.build/server/assets/_authenticated-Bch0_2QH.js +264 -0
- package/.build/server/assets/_authenticated-DGV5cZYE.js +22 -0
- package/.build/server/assets/_authenticated.account-6qu6oQ1y.js +685 -0
- package/.build/server/assets/_authenticated.agents-DYDnQxli.js +5 -0
- package/.build/server/assets/_authenticated.agents._agentId-4HvB3mhd.js +17 -0
- package/.build/server/assets/_authenticated.agents._agentId-Cl608F1T.js +260 -0
- package/.build/server/assets/_authenticated.agents._agentId-G2jAHjma.js +15 -0
- package/.build/server/assets/_authenticated.agents._agentId.chart-BIA8wy73.js +2644 -0
- package/.build/server/assets/_authenticated.agents._agentId.chart-D4aj8Qy9.js +22 -0
- package/.build/server/assets/_authenticated.agents._agentId.chat-ClsVle4g.js +13 -0
- package/.build/server/assets/_authenticated.agents._agentId.chat-JV3FDsTp.js +18 -0
- package/.build/server/assets/_authenticated.agents._agentId.index-Ct4kbu2f.js +1044 -0
- package/.build/server/assets/_authenticated.agents._agentId.index-DJgrupvW.js +18 -0
- package/.build/server/assets/_authenticated.agents._agentId.indicators-DrKd0aP5.js +184 -0
- package/.build/server/assets/_authenticated.agents._agentId.indicators-wiVaY8fW.js +18 -0
- package/.build/server/assets/_authenticated.agents._agentId.indicators_._indicatorId-C4Ox2R-a.js +25 -0
- package/.build/server/assets/_authenticated.agents._agentId.indicators_._indicatorId-D8Q0hCW0.js +489 -0
- package/.build/server/assets/_authenticated.agents._agentId.memories-BUTyVLYy.js +42 -0
- package/.build/server/assets/_authenticated.agents._agentId.memories-E8-nSEMT.js +362 -0
- package/.build/server/assets/_authenticated.agents._agentId.memories_._memoryRef-C-SC6wzq.js +14 -0
- package/.build/server/assets/_authenticated.agents._agentId.memories_._memoryRef-ZCrdrc8C.js +490 -0
- package/.build/server/assets/_authenticated.agents._agentId.notifications-DQeQqTzh.js +14 -0
- package/.build/server/assets/_authenticated.agents._agentId.notifications-DlFyYyHh.js +16 -0
- package/.build/server/assets/_authenticated.agents._agentId.notifications_._notificationId-B0RosY_R.js +15 -0
- package/.build/server/assets/_authenticated.agents._agentId.notifications_._notificationId-C1NikQ9e.js +13 -0
- package/.build/server/assets/_authenticated.agents._agentId.settings-DDwjT3Ui.js +42 -0
- package/.build/server/assets/_authenticated.agents._agentId.settings-PEzEvOfo.js +751 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents-z34-J3Tu.js +5 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents._subagentId-D-6TOi1U.js +1371 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents._subagentId-DipzVdnr.js +13 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents._subagentId_.runs._runId-BZR3VLV7.js +610 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents._subagentId_.runs._runId-DsYJKfGm.js +12 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents.index-BF8Cuzcr.js +231 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents.index-D2x0qCnt.js +12 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents.new-CYm_vuDD.js +13 -0
- package/.build/server/assets/_authenticated.agents._agentId.sub-agents.new-CiVShIka.js +497 -0
- package/.build/server/assets/_authenticated.agents._agentId.transactions-BC_XfGqw.js +95 -0
- package/.build/server/assets/_authenticated.agents._agentId.transactions-WtBW3xmh.js +495 -0
- package/.build/server/assets/_authenticated.agents.index-C8zmu8T8.js +78 -0
- package/.build/server/assets/_authenticated.agents.new-Bt-tBR47.js +302 -0
- package/.build/server/assets/_authenticated.providers-C0pb-ujV.js +672 -0
- package/.build/server/assets/_tanstack-start-manifest_v-BAHfxLOo.js +354 -0
- package/.build/server/assets/account-XvMwzRXh.js +66 -0
- package/.build/server/assets/account-queries-AJJVkLAV.js +32 -0
- package/.build/server/assets/agent-chat-page-DChiz8KQ.js +686 -0
- package/.build/server/assets/agent-enablement-control-C90f0uIb.js +143 -0
- package/.build/server/assets/agent-events-DK9Yz5__.js +217 -0
- package/.build/server/assets/agent-notifications-page-BdyKAyds.js +276 -0
- package/.build/server/assets/agent-queries-Cmx8RiUx.js +51 -0
- package/.build/server/assets/agents-CZq-0mna.js +106 -0
- package/.build/server/assets/agents-CfjmtW7A.js +278 -0
- package/.build/server/assets/artifact-content-B6uHmPz7.js +35 -0
- package/.build/server/assets/artifacts-HtLwHs8q.js +42 -0
- package/.build/server/assets/auth-DTikZAVz.js +12 -0
- package/.build/server/assets/auth-client-Vb3O0v7P.js +1897 -0
- package/.build/server/assets/auth-user-DkLo8ojH.js +108 -0
- package/.build/server/assets/chart-queries-Bc3AfsEb.js +109 -0
- package/.build/server/assets/charts-C4dKuwTJ.js +130 -0
- package/.build/server/assets/chat-bubble-ik3itVbx.js +109 -0
- package/.build/server/assets/config-dialog-9gSAjwwT.js +55 -0
- package/.build/server/assets/contracts-CG-nZuYJ.js +155 -0
- package/.build/server/assets/createServerRpc-DNqhdU4z.js +12 -0
- package/.build/server/assets/decimal-BthtZ77w.js +97 -0
- package/.build/server/assets/empty-plugin-adapters-MOWBbCMw.js +5 -0
- package/.build/server/assets/errors-DaZqUftX.js +151 -0
- package/.build/server/assets/gateway-CHkruO_a.js +193 -0
- package/.build/server/assets/identicon-CyawcVnx.js +41 -0
- package/.build/server/assets/indicator-input-fields-bzuhIh6t.js +75 -0
- package/.build/server/assets/indicator-queries-4dY1-LXx.js +171 -0
- package/.build/server/assets/indicator-renderer-B2muPS-8.js +395 -0
- package/.build/server/assets/indicators-ENxAHN42.js +192 -0
- package/.build/server/assets/insight-contracts-B5rmUDfO.js +14 -0
- package/.build/server/assets/instrument-label-C-tTGGsD.js +40 -0
- package/.build/server/assets/instrument-picker-CRroLwVq.js +381 -0
- package/.build/server/assets/journal-9aE-um9f.js +107 -0
- package/.build/server/assets/journal-decimal-Bh9EL029.js +66 -0
- package/.build/server/assets/login-BsEFUvTX.js +125 -0
- package/.build/server/assets/memories-2WF2fW1G.js +100 -0
- package/.build/server/assets/memory-badge-DVYLTtRR.js +53 -0
- package/.build/server/assets/memory-contracts-DQGN2IKV.js +22 -0
- package/.build/server/assets/memory-queries--4RbPRrk.js +92 -0
- package/.build/server/assets/model-picker-CA1uYb--.js +225 -0
- package/.build/server/assets/notification-queries-0CJUkBt9.js +52 -0
- package/.build/server/assets/notifications-Cn7BiCyw.js +72 -0
- package/.build/server/assets/provider-logo-BRdbOr9I.js +32 -0
- package/.build/server/assets/provider-queries-BaZWLw8J.js +78 -0
- package/.build/server/assets/providers-CyoN_jgW.js +89 -0
- package/.build/server/assets/risk-Bqrb6hKQ.js +34 -0
- package/.build/server/assets/risk-queries-JQpByHT2.js +18 -0
- package/.build/server/assets/router-CpYyLRfb.js +419 -0
- package/.build/server/assets/run-subagent-dialog-C7iUOZa-.js +59 -0
- package/.build/server/assets/setup-DqMlwgNr.js +30 -0
- package/.build/server/assets/setup-checklist-BICTmBo2.js +60 -0
- package/.build/server/assets/start-C-GPoWRt.js +4 -0
- package/.build/server/assets/subagent-enabled-toggle-Djte00oo.js +22 -0
- package/.build/server/assets/subagent-input-BHQKs2cW.js +57 -0
- package/.build/server/assets/subagent-mutations-dUo3B_SG.js +32 -0
- package/.build/server/assets/subagent-queries-sAwBjFxC.js +146 -0
- package/.build/server/assets/subagent-run-history-C_xmucO-.js +186 -0
- package/.build/server/assets/subagents-CIoilC66.js +180 -0
- package/.build/server/assets/toggle-timestamp-CToUVn67.js +28 -0
- package/.build/server/assets/trading-contracts-zWq1Hxnb.js +26 -0
- package/.build/server/assets/validation-BX-krL0i.js +33 -0
- package/.build/server/assets/worker-triggers-CJF5HWzR.js +51 -0
- package/.build/server/server.js +7501 -0
- package/LICENSE +661 -0
- package/README.md +147 -2
- package/bin/hypervibes.js +24 -0
- package/dist/agents/agent-enablement.js +10 -0
- package/dist/agents/agent-input.js +38 -0
- package/dist/agents/agent-service.js +1002 -0
- package/dist/agents/cancel-task-scope.js +52 -0
- package/dist/agents/candle-intervals.js +1 -0
- package/dist/agents/default-subagents.js +36 -0
- package/dist/agents/execution-context-contracts.js +1 -0
- package/dist/agents/execution-context.js +206 -0
- package/dist/agents/execution-warnings.js +33 -0
- package/dist/agents/orchestrator-insights.js +14 -0
- package/dist/agents/run-inspection.js +97 -0
- package/dist/agents/subagent-dashboard.js +1 -0
- package/dist/agents/subagent-extension.js +155 -0
- package/dist/agents/subagent-history.js +5 -0
- package/dist/agents/subagent-input.js +73 -0
- package/dist/agents/subagent-service.js +1176 -0
- package/dist/agents/subagent-templates.js +20 -0
- package/dist/agents/template-manifest.js +34 -0
- package/dist/agents/templates/basic-analysis.json +40 -0
- package/dist/agents/templates/basic-review.json +48 -0
- package/dist/agents/templates/basic-trading.json +45 -0
- package/dist/agents/templates/indicator-developer.json +16 -0
- package/dist/agents/worker-events.js +18 -0
- package/dist/agents/worker-inbox.js +28 -0
- package/dist/agents/worker-triggers.js +23 -0
- package/dist/auth-options.js +98 -0
- package/dist/auth-user.js +15 -0
- package/dist/auth.js +28 -0
- package/dist/cache/svg-logo-cache.js +155 -0
- package/dist/canonical.js +13 -0
- package/dist/charts/chart-service.js +236 -0
- package/dist/charts/contracts.js +118 -0
- package/dist/charts/durable-extension.js +27 -0
- package/dist/charts/trading-contracts.js +14 -0
- package/dist/config.js +85 -0
- package/dist/db/agent-schema.js +26 -0
- package/dist/db/auth-schema.js +122 -0
- package/dist/db/database.js +31 -0
- package/dist/db/exchange-schema.js +23 -0
- package/dist/db/gateway-schema.js +24 -0
- package/dist/db/indicator-schema.js +19 -0
- package/dist/db/migrations/20261015221717_auth/migration.sql +62 -0
- package/dist/db/migrations/20261015231224_agents/migration.sql +35 -0
- package/dist/db/migrations/20261016040641_provider_connections/migration.sql +19 -0
- package/dist/db/migrations/20261016061831_trade_journal/migration.sql +48 -0
- package/dist/db/migrations/20261016080320_order_execution/migration.sql +62 -0
- package/dist/db/migrations/20261016181110_subagents/migration.sql +51 -0
- package/dist/db/migrations/20261017222959_research_artifacts/migration.sql +37 -0
- package/dist/db/migrations/20261018061531_memories_and_insights/migration.sql +162 -0
- package/dist/db/migrations/20261020091156_worker_event_inbox/migration.sql +54 -0
- package/dist/db/migrations/20261021051229_chart_workspace/migration.sql +33 -0
- package/dist/db/migrations/20261021222116_gateways/migration.sql +15 -0
- package/dist/db/migrations/20261022015813_pine_indicators/migration.sql +43 -0
- package/dist/db/migrations/20261022101559_notifications/migration.sql +51 -0
- package/dist/db/migrations.js +12 -0
- package/dist/db/order-provenance-schema.js +17 -0
- package/dist/db/order-schema.js +32 -0
- package/dist/db/profile-lock.js +12 -0
- package/dist/db/provider-schema.js +16 -0
- package/dist/db/shared-database.js +128 -0
- package/dist/db/subagent-schema.js +79 -0
- package/dist/gateway/bridge-service.js +223 -0
- package/dist/gateway/gateway-store.js +77 -0
- package/dist/gateway/handlers.js +122 -0
- package/dist/gateway/telegram/connector.js +115 -0
- package/dist/gateway/telegram/transport.js +96 -0
- package/dist/hyperliquid/account-info.js +117 -0
- package/dist/hyperliquid/account-status.js +64 -0
- package/dist/hyperliquid/agent-dashboard.js +56 -0
- package/dist/hyperliquid/chart-contracts.js +9 -0
- package/dist/hyperliquid/constants.js +25 -0
- package/dist/hyperliquid/crypto.js +29 -0
- package/dist/hyperliquid/currency-logo.js +7 -0
- package/dist/hyperliquid/decimal.js +98 -0
- package/dist/hyperliquid/durable-extension.js +39 -0
- package/dist/hyperliquid/errors.js +8 -0
- package/dist/hyperliquid/exchange.js +118 -0
- package/dist/hyperliquid/journal-decimal.js +48 -0
- package/dist/hyperliquid/journal-model.js +167 -0
- package/dist/hyperliquid/journal-service.js +648 -0
- package/dist/hyperliquid/live-dashboard.js +245 -0
- package/dist/hyperliquid/logo-cache.js +27 -0
- package/dist/hyperliquid/market-charts.js +242 -0
- package/dist/hyperliquid/market-snapshot.js +45 -0
- package/dist/hyperliquid/orders/order-contracts.js +42 -0
- package/dist/hyperliquid/orders/order-math.js +89 -0
- package/dist/hyperliquid/orders/order-outcomes.js +74 -0
- package/dist/hyperliquid/orders/order-prepare.js +109 -0
- package/dist/hyperliquid/orders/order-service.js +432 -0
- package/dist/hyperliquid/orders/order-store.js +134 -0
- package/dist/hyperliquid/orders/order-tools.js +40 -0
- package/dist/hyperliquid/orders/protection.js +35 -0
- package/dist/hyperliquid/orders/risk-settings.js +44 -0
- package/dist/hyperliquid/orders/trade-admission.js +117 -0
- package/dist/hyperliquid/orders/trade-planning.js +60 -0
- package/dist/hyperliquid/service.js +529 -0
- package/dist/hyperliquid/shared-feeds.js +40 -0
- package/dist/hyperliquid/signing.js +89 -0
- package/dist/indicators/builtin-catalog.js +59 -0
- package/dist/indicators/builtins/adx.pine +22 -0
- package/dist/indicators/builtins/atr.pine +11 -0
- package/dist/indicators/builtins/bollinger.pine +10 -0
- package/dist/indicators/builtins/ema.pine +5 -0
- package/dist/indicators/builtins/macd.pine +18 -0
- package/dist/indicators/builtins/rsi.pine +18 -0
- package/dist/indicators/builtins/sma.pine +5 -0
- package/dist/indicators/candle-window.js +36 -0
- package/dist/indicators/chart-contracts.js +64 -0
- package/dist/indicators/contracts.js +14 -0
- package/dist/indicators/durable-extension.js +32 -0
- package/dist/indicators/indicator-service.js +300 -0
- package/dist/indicators/indicator-store.js +137 -0
- package/dist/indicators/normalize.js +149 -0
- package/dist/indicators/result-schema.js +76 -0
- package/dist/indicators/runtime-wrapper.js +52 -0
- package/dist/indicators/runtime.js +201 -0
- package/dist/indicators/validation.js +124 -0
- package/dist/indicators/worker-queue.js +48 -0
- package/dist/initialize-config.js +160 -0
- package/dist/main.js +59 -0
- package/dist/memory/decision-audit.js +47 -0
- package/dist/memory/durable-extension.js +40 -0
- package/dist/memory/execution-audit.js +83 -0
- package/dist/memory/insight-contracts.js +33 -0
- package/dist/memory/insight-service.js +117 -0
- package/dist/memory/memory-contracts.js +113 -0
- package/dist/memory/memory-service.js +179 -0
- package/dist/memory/operations.js +46 -0
- package/dist/memory/tool-schemas.js +44 -0
- package/dist/memory/validation.js +42 -0
- package/dist/notifications/contracts.js +1 -0
- package/dist/notifications/delivery.js +11 -0
- package/dist/notifications/durable-extension.js +20 -0
- package/dist/notifications/notification-service.js +324 -0
- package/dist/providers/credential-store.js +86 -0
- package/dist/providers/ollama-cloud.js +148 -0
- package/dist/providers/provider-logo-url.js +18 -0
- package/dist/providers/provider-logo.js +31 -0
- package/dist/providers/provider-service.js +295 -0
- package/dist/research/artifacts.js +151 -0
- package/dist/research/call-queue.js +43 -0
- package/dist/research/contracts.js +33 -0
- package/dist/research/evidence.js +43 -0
- package/dist/research/journal.js +30 -0
- package/dist/research/research-service.js +191 -0
- package/dist/research/tool-activity.js +49 -0
- package/dist/research/tool-response.js +25 -0
- package/dist/runtime.js +145 -0
- package/dist/web/agent-events.js +418 -0
- package/dist/web/app.js +206 -0
- package/dist/web/artifact-downloads.js +23 -0
- package/dist/web/middleware.js +25 -0
- package/dist/web/random-uuid.js +14 -0
- package/dist/web/start.js +56 -0
- package/package.json +91 -4
- package/scripts/check-node.mjs +24 -0
- package/static/android-chrome-192x192.png +0 -0
- package/static/android-chrome-512x512.png +0 -0
- package/static/apple-touch-icon.png +0 -0
- package/static/favicon-16x16.png +0 -0
- package/static/favicon-32x32.png +0 -0
- package/static/favicon.ico +0 -0
- package/static/github.svg +3 -0
- package/static/hypervibes.png +0 -0
- package/static/logo.png +0 -0
- package/static/site.webmanifest +1 -0
- package/static/telegram.svg +1 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
CREATE TABLE `hv_chart_layouts` (
|
|
2
|
+
`id` text PRIMARY KEY,
|
|
3
|
+
`agent_id` text NOT NULL,
|
|
4
|
+
`document` text NOT NULL,
|
|
5
|
+
`revision` integer DEFAULT 0 NOT NULL,
|
|
6
|
+
`history` text NOT NULL,
|
|
7
|
+
`updated_at` integer NOT NULL,
|
|
8
|
+
CONSTRAINT `fk_hv_chart_layouts_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
9
|
+
);
|
|
10
|
+
--> statement-breakpoint
|
|
11
|
+
CREATE TABLE `hv_chart_operations` (
|
|
12
|
+
`agent_id` text NOT NULL,
|
|
13
|
+
`key` text NOT NULL,
|
|
14
|
+
`hash` text NOT NULL,
|
|
15
|
+
`result` text NOT NULL,
|
|
16
|
+
CONSTRAINT `hv_chart_operations_pk` PRIMARY KEY (`agent_id`, `key`),
|
|
17
|
+
CONSTRAINT `fk_hv_chart_operations_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
18
|
+
);
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
CREATE TABLE `hv_chart_snapshots` (
|
|
21
|
+
`id` text NOT NULL,
|
|
22
|
+
`agent_id` text NOT NULL,
|
|
23
|
+
`request_hash` text NOT NULL,
|
|
24
|
+
`context` text NOT NULL,
|
|
25
|
+
`image` text,
|
|
26
|
+
`created_at` integer NOT NULL,
|
|
27
|
+
CONSTRAINT `hv_chart_snapshots_pk` PRIMARY KEY (`agent_id`, `id`),
|
|
28
|
+
CONSTRAINT `fk_hv_chart_snapshots_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
29
|
+
);
|
|
30
|
+
--> statement-breakpoint
|
|
31
|
+
CREATE INDEX `hv_chart_layouts_agent_idx` ON `hv_chart_layouts` (`agent_id`, `updated_at`);
|
|
32
|
+
--> statement-breakpoint
|
|
33
|
+
CREATE INDEX `hv_chart_snapshots_agent_idx` ON `hv_chart_snapshots` (`agent_id`, `created_at`);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
CREATE TABLE `hv_gateways` (
|
|
2
|
+
`agent_id` text NOT NULL,
|
|
3
|
+
`type` text NOT NULL,
|
|
4
|
+
`bot_token_ciphertext` blob NOT NULL,
|
|
5
|
+
`bot_token_hash` text NOT NULL,
|
|
6
|
+
`key_id` text NOT NULL,
|
|
7
|
+
`bot_username` text NOT NULL,
|
|
8
|
+
`chat_id` integer,
|
|
9
|
+
`chat_username` text,
|
|
10
|
+
`updated_at` integer NOT NULL,
|
|
11
|
+
CONSTRAINT `hv_gateways_agent_id_type_pk` PRIMARY KEY (`agent_id`,`type`),
|
|
12
|
+
CONSTRAINT `fk_hv_gateways_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
13
|
+
);
|
|
14
|
+
--> statement-breakpoint
|
|
15
|
+
CREATE UNIQUE INDEX `hv_gateways_token_hash_idx` ON `hv_gateways` (`bot_token_hash`);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
CREATE TABLE `hv_indicator_operations` (
|
|
2
|
+
`agent_id` text NOT NULL,
|
|
3
|
+
`key` text NOT NULL,
|
|
4
|
+
`hash` text NOT NULL,
|
|
5
|
+
`result` text NOT NULL,
|
|
6
|
+
CONSTRAINT `hv_indicator_operations_pk` PRIMARY KEY(`agent_id`, `key`),
|
|
7
|
+
CONSTRAINT `fk_hv_indicator_operations_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
8
|
+
);
|
|
9
|
+
--> statement-breakpoint
|
|
10
|
+
CREATE TABLE `hv_indicator_versions` (
|
|
11
|
+
`indicator_id` text NOT NULL,
|
|
12
|
+
`version` integer NOT NULL,
|
|
13
|
+
`source` text NOT NULL,
|
|
14
|
+
`source_hash` text NOT NULL,
|
|
15
|
+
`metadata` text NOT NULL,
|
|
16
|
+
`engine_version` text NOT NULL,
|
|
17
|
+
`wrapper_version` integer NOT NULL,
|
|
18
|
+
`created_at` integer NOT NULL,
|
|
19
|
+
`actor_kind` text NOT NULL,
|
|
20
|
+
`user_id` text,
|
|
21
|
+
`subagent_id` text,
|
|
22
|
+
`run_id` text,
|
|
23
|
+
`conversation_id` text,
|
|
24
|
+
`task_id` text,
|
|
25
|
+
CONSTRAINT `hv_indicator_versions_pk` PRIMARY KEY(`indicator_id`, `version`),
|
|
26
|
+
CONSTRAINT `fk_hv_indicator_versions_indicator_id_hv_indicators_id_fk` FOREIGN KEY (`indicator_id`) REFERENCES `hv_indicators`(`id`) ON DELETE CASCADE,
|
|
27
|
+
CONSTRAINT "hv_indicator_versions_positive" CHECK("version" > 0)
|
|
28
|
+
);
|
|
29
|
+
--> statement-breakpoint
|
|
30
|
+
CREATE TABLE `hv_indicators` (
|
|
31
|
+
`id` text PRIMARY KEY,
|
|
32
|
+
`agent_id` text NOT NULL,
|
|
33
|
+
`name` text NOT NULL,
|
|
34
|
+
`description` text NOT NULL,
|
|
35
|
+
`interpretation` text NOT NULL,
|
|
36
|
+
`current_version` integer NOT NULL,
|
|
37
|
+
`created_at` integer NOT NULL,
|
|
38
|
+
`updated_at` integer NOT NULL,
|
|
39
|
+
CONSTRAINT `fk_hv_indicators_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE,
|
|
40
|
+
CONSTRAINT "hv_indicators_version_positive" CHECK("current_version" > 0)
|
|
41
|
+
);
|
|
42
|
+
--> statement-breakpoint
|
|
43
|
+
CREATE INDEX `hv_indicators_agent_idx` ON `hv_indicators` (`agent_id`,`updated_at`);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
CREATE TABLE `hv_notification_operations` (
|
|
2
|
+
`agent_id` text NOT NULL,
|
|
3
|
+
`operation_key` text NOT NULL,
|
|
4
|
+
`request_hash` text NOT NULL,
|
|
5
|
+
`result` text NOT NULL,
|
|
6
|
+
CONSTRAINT `fk_hv_notification_operations_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
7
|
+
);
|
|
8
|
+
--> statement-breakpoint
|
|
9
|
+
CREATE TABLE `hv_notification_settings` (
|
|
10
|
+
`agent_id` text PRIMARY KEY,
|
|
11
|
+
`enabled` integer DEFAULT true NOT NULL,
|
|
12
|
+
`submissions` integer DEFAULT true NOT NULL,
|
|
13
|
+
`fills` integer DEFAULT true NOT NULL,
|
|
14
|
+
`enabled_since` integer NOT NULL,
|
|
15
|
+
`fills_since` integer NOT NULL,
|
|
16
|
+
CONSTRAINT `fk_hv_notification_settings_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
17
|
+
);
|
|
18
|
+
--> statement-breakpoint
|
|
19
|
+
CREATE TABLE `hv_notifications` (
|
|
20
|
+
`id` text PRIMARY KEY,
|
|
21
|
+
`agent_id` text NOT NULL,
|
|
22
|
+
`event_key` text NOT NULL,
|
|
23
|
+
`category` text NOT NULL,
|
|
24
|
+
`title` text NOT NULL,
|
|
25
|
+
`body` text NOT NULL,
|
|
26
|
+
`severity` text NOT NULL,
|
|
27
|
+
`source` text NOT NULL,
|
|
28
|
+
`subagent_id` text,
|
|
29
|
+
`run_id` text,
|
|
30
|
+
`conversation_id` integer,
|
|
31
|
+
`order_request_id` text,
|
|
32
|
+
`created_at` integer NOT NULL,
|
|
33
|
+
`delivery` text NOT NULL,
|
|
34
|
+
`chat_id` integer,
|
|
35
|
+
`bot_token_hash` text,
|
|
36
|
+
`message_ids` text DEFAULT '[]' NOT NULL,
|
|
37
|
+
`attempts` integer DEFAULT 0 NOT NULL,
|
|
38
|
+
`next_attempt_at` integer NOT NULL,
|
|
39
|
+
`sent_at` integer,
|
|
40
|
+
`error` text,
|
|
41
|
+
CONSTRAINT `fk_hv_notifications_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
42
|
+
);
|
|
43
|
+
--> statement-breakpoint
|
|
44
|
+
CREATE UNIQUE INDEX `hv_notification_operations_key_idx` ON `hv_notification_operations` (`agent_id`,`operation_key`);--> statement-breakpoint
|
|
45
|
+
CREATE UNIQUE INDEX `hv_notifications_event_idx` ON `hv_notifications` (`agent_id`,`event_key`);--> statement-breakpoint
|
|
46
|
+
CREATE INDEX `hv_notifications_history_idx` ON `hv_notifications` (`agent_id`,`created_at`,`id`);--> statement-breakpoint
|
|
47
|
+
CREATE INDEX `hv_notifications_delivery_idx` ON `hv_notifications` (`delivery`,`next_attempt_at`);
|
|
48
|
+
--> statement-breakpoint
|
|
49
|
+
-- Existing accounts start observing now, never announcing historical imports.
|
|
50
|
+
INSERT INTO hv_notification_settings(agent_id,enabled_since,fills_since)
|
|
51
|
+
SELECT id, CAST(unixepoch('subsec') * 1000 AS INTEGER), CAST(unixepoch('subsec') * 1000 AS INTEGER) FROM hv_agents;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { drizzle } from "drizzle-orm/node-sqlite";
|
|
2
|
+
import { migrate } from "drizzle-orm/node-sqlite/migrator";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
/** Startup-only native access, before the application's shared SQL queue is used. */
|
|
5
|
+
export function migrateApplication(connection, migrationsFolder = fileURLToPath(new URL("./migrations/", import.meta.url))) {
|
|
6
|
+
const hasHistory = connection.prepare("SELECT 1 FROM sqlite_schema WHERE type = 'table' AND name = 'hv_schema_migrations'").get();
|
|
7
|
+
const migrationCount = () => Number(connection.prepare("SELECT count(*) AS count FROM hv_schema_migrations").get()?.count);
|
|
8
|
+
const before = hasHistory ? migrationCount() : 0;
|
|
9
|
+
migrate(drizzle({ client: connection }), { migrationsFolder, migrationsTable: "hv_schema_migrations" });
|
|
10
|
+
const total = migrationCount();
|
|
11
|
+
return { applied: total - before, total };
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { foreignKey, index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import { hvOrderRequests } from "./order-schema.js";
|
|
3
|
+
import { hvSubagents, hvSubagentRuns } from "./subagent-schema.js";
|
|
4
|
+
/** Host-captured origin, independent of the optional model-authored decision ref. */
|
|
5
|
+
export const hvOrderRequestProvenance = sqliteTable("hv_order_request_provenance", {
|
|
6
|
+
requestId: text("request_id").primaryKey(),
|
|
7
|
+
agentId: text("agent_id").notNull(),
|
|
8
|
+
producerSubagentId: text("producer_subagent_id").notNull(),
|
|
9
|
+
sourceRunId: text("source_run_id"),
|
|
10
|
+
conversationId: integer("conversation_id").notNull(),
|
|
11
|
+
toolTaskId: integer("tool_task_id").notNull(),
|
|
12
|
+
}, (t) => [
|
|
13
|
+
foreignKey({ columns: [t.agentId, t.requestId], foreignColumns: [hvOrderRequests.agentId, hvOrderRequests.id] }).onDelete("cascade"),
|
|
14
|
+
foreignKey({ columns: [t.agentId, t.producerSubagentId], foreignColumns: [hvSubagents.agentId, hvSubagents.id] }),
|
|
15
|
+
foreignKey({ columns: [t.agentId, t.sourceRunId, t.producerSubagentId], foreignColumns: [hvSubagentRuns.agentId, hvSubagentRuns.id, hvSubagentRuns.subagentId] }),
|
|
16
|
+
index("hv_order_provenance_run_idx").on(t.agentId, t.sourceRunId),
|
|
17
|
+
]);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { sql } from "drizzle-orm";
|
|
2
|
+
import { check, index, integer, sqliteTable, text, uniqueIndex } from "drizzle-orm/sqlite-core";
|
|
3
|
+
import { hvAgents } from "./agent-schema.js";
|
|
4
|
+
// Public application storage, never Pi's private tables. Request identity and
|
|
5
|
+
// prepared wire payloads are immutable. Amounts remain strings inside JSON TEXT.
|
|
6
|
+
export const hvOrderRequests = sqliteTable("hv_order_requests", {
|
|
7
|
+
id: text("id").primaryKey(), agentId: text("agent_id").notNull().references(() => hvAgents.id, { onDelete: "cascade" }),
|
|
8
|
+
account: text("account").notNull(), requestKey: text("request_key").notNull(), kind: text("kind").notNull(),
|
|
9
|
+
input: text("input").notNull(), createdAt: integer("created_at").notNull(),
|
|
10
|
+
}, (t) => [uniqueIndex("hv_order_request_identity").on(t.agentId, t.id), uniqueIndex("hv_order_request_key").on(t.agentId, t.requestKey), index("hv_order_requests_agent").on(t.agentId, t.createdAt),
|
|
11
|
+
check("hv_order_request_kind", sql `${t.kind} IN ('submit', 'cancel', 'cancel_all', 'close_position')`)]);
|
|
12
|
+
export const hvOrderActions = sqliteTable("hv_order_actions", {
|
|
13
|
+
id: text("id").primaryKey(), requestId: text("request_id").notNull().references(() => hvOrderRequests.id, { onDelete: "cascade" }),
|
|
14
|
+
ordinal: integer("ordinal").notNull(), payload: text("payload").notNull(),
|
|
15
|
+
state: text("state").notNull(), nonce: integer("nonce"), expiresAt: integer("expires_at").notNull(),
|
|
16
|
+
updatedAt: integer("updated_at").notNull(),
|
|
17
|
+
}, (t) => [uniqueIndex("hv_order_action_ordinal").on(t.requestId, t.ordinal), index("hv_order_actions_state").on(t.state, t.updatedAt),
|
|
18
|
+
check("hv_order_action_state", sql `${t.state} IN ('prepared', 'submitting', 'unknown', 'done', 'not_sent')`)]);
|
|
19
|
+
export const hvOrderItems = sqliteTable("hv_order_items", {
|
|
20
|
+
id: text("id").primaryKey(), actionId: text("action_id").notNull().references(() => hvOrderActions.id, { onDelete: "cascade" }),
|
|
21
|
+
ordinal: integer("ordinal").notNull(), symbol: text("symbol").notNull(), cloid: text("cloid"), oid: text("oid"),
|
|
22
|
+
active: integer("active").notNull(), view: text("view").notNull(), updatedAt: integer("updated_at").notNull(),
|
|
23
|
+
}, (t) => [uniqueIndex("hv_order_item_ordinal").on(t.actionId, t.ordinal), uniqueIndex("hv_order_item_cloid").on(t.cloid),
|
|
24
|
+
index("hv_order_items_active").on(t.active, t.updatedAt), index("hv_order_items_oid").on(t.oid),
|
|
25
|
+
check("hv_order_item_active", sql `${t.active} IN (0, 1)`)]);
|
|
26
|
+
export const hvOrderEvents = sqliteTable("hv_order_events", {
|
|
27
|
+
id: integer("id").primaryKey({ autoIncrement: true }), itemId: text("item_id").notNull().references(() => hvOrderItems.id, { onDelete: "cascade" }),
|
|
28
|
+
source: text("source").notNull(), time: integer("time").notNull(), data: text("data").notNull(),
|
|
29
|
+
}, (t) => [index("hv_order_events_item").on(t.itemId, t.id)]);
|
|
30
|
+
export const hvExchangeNonces = sqliteTable("hv_exchange_nonces", {
|
|
31
|
+
signer: text("signer").primaryKey(), nonce: integer("nonce").notNull(),
|
|
32
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { realpath } from "node:fs/promises";
|
|
2
|
+
import lockfile from "proper-lockfile";
|
|
3
|
+
/** Heartbeat-backed exclusive ownership; stale locks from crashed hosts expire. */
|
|
4
|
+
export async function lockProfile(path, onCompromised) {
|
|
5
|
+
return lockfile.lock(await realpath(path), {
|
|
6
|
+
realpath: false,
|
|
7
|
+
stale: 30_000,
|
|
8
|
+
update: 5_000,
|
|
9
|
+
retries: 0,
|
|
10
|
+
onCompromised,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { blob, integer, primaryKey, sqliteTable, text } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import { hvUsers } from "./auth-schema.js";
|
|
3
|
+
export const hvProviderConnections = sqliteTable("hv_provider_connections", {
|
|
4
|
+
userId: text("user_id").notNull().references(() => hvUsers.id, { onDelete: "cascade" }),
|
|
5
|
+
providerId: text("provider_id").notNull(),
|
|
6
|
+
authType: text("auth_type", { enum: ["api_key", "oauth"] }).notNull(),
|
|
7
|
+
ciphertext: blob("ciphertext", { mode: "buffer" }).notNull(),
|
|
8
|
+
keyId: text("key_id").notNull(),
|
|
9
|
+
catalog: text("catalog"),
|
|
10
|
+
updatedAt: integer("updated_at").notNull(),
|
|
11
|
+
}, (table) => [primaryKey({ columns: [table.userId, table.providerId] })]);
|
|
12
|
+
/** Stable installation identity required by the OpenAI OAuth registration flow. */
|
|
13
|
+
export const hvInstallation = sqliteTable("hv_installation", {
|
|
14
|
+
id: integer("id").primaryKey(),
|
|
15
|
+
deviceId: text("device_id").notNull(),
|
|
16
|
+
});
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { drizzle } from "drizzle-orm/sqlite-proxy";
|
|
2
|
+
class Executor {
|
|
3
|
+
connection;
|
|
4
|
+
active = true;
|
|
5
|
+
constructor(connection) {
|
|
6
|
+
this.connection = connection;
|
|
7
|
+
}
|
|
8
|
+
statement(sql) {
|
|
9
|
+
if (!this.active)
|
|
10
|
+
throw new Error("SQLite executor is closed");
|
|
11
|
+
return this.connection.prepare(sql);
|
|
12
|
+
}
|
|
13
|
+
async exec(sql) {
|
|
14
|
+
if (!this.active)
|
|
15
|
+
throw new Error("SQLite executor is closed");
|
|
16
|
+
this.connection.exec(sql);
|
|
17
|
+
}
|
|
18
|
+
async run(sql, ...params) { this.statement(sql).run(...params); }
|
|
19
|
+
async get(sql, ...params) {
|
|
20
|
+
return this.statement(sql).get(...params);
|
|
21
|
+
}
|
|
22
|
+
async all(sql, ...params) {
|
|
23
|
+
return this.statement(sql).all(...params);
|
|
24
|
+
}
|
|
25
|
+
async query(sql, params, method) {
|
|
26
|
+
// Transactions must reserve the queue through SharedDatabase.transaction(),
|
|
27
|
+
// never through the proxy driver's separate BEGIN/query/COMMIT operations.
|
|
28
|
+
if (/^\s*(BEGIN|COMMIT|ROLLBACK|SAVEPOINT|RELEASE)\b/i.test(sql)) {
|
|
29
|
+
throw new Error("Use the shared database transaction boundary");
|
|
30
|
+
}
|
|
31
|
+
const statement = this.statement(sql);
|
|
32
|
+
if (method === "run") {
|
|
33
|
+
statement.run(...params);
|
|
34
|
+
return { rows: [] };
|
|
35
|
+
}
|
|
36
|
+
statement.setReturnArrays(true);
|
|
37
|
+
// node:sqlite's declarations retain object return types after this setting.
|
|
38
|
+
// Drizzle's callback declares rows as an array even for `get`, but its
|
|
39
|
+
// runtime requires undefined for a missing row (an empty array maps to a
|
|
40
|
+
// phantom record). Preserve undefined through this driver type boundary.
|
|
41
|
+
if (method === "get")
|
|
42
|
+
return { rows: statement.get(...params) };
|
|
43
|
+
return { rows: statement.all(...params) };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** One queue for app SQL and every harness, held across the entire transaction. */
|
|
47
|
+
export class SharedDatabase {
|
|
48
|
+
connection;
|
|
49
|
+
tail = Promise.resolve();
|
|
50
|
+
closed = false;
|
|
51
|
+
failure;
|
|
52
|
+
executor;
|
|
53
|
+
constructor(connection) {
|
|
54
|
+
this.connection = connection;
|
|
55
|
+
this.executor = new Executor(connection);
|
|
56
|
+
}
|
|
57
|
+
get available() { return !this.closed && !this.failure; }
|
|
58
|
+
enqueue(operation) {
|
|
59
|
+
if (this.closed)
|
|
60
|
+
return Promise.reject(new Error("Database is closed"));
|
|
61
|
+
if (this.failure)
|
|
62
|
+
return Promise.reject(this.failure);
|
|
63
|
+
const result = this.tail.then(() => {
|
|
64
|
+
if (this.failure)
|
|
65
|
+
throw this.failure;
|
|
66
|
+
return operation();
|
|
67
|
+
});
|
|
68
|
+
this.tail = result.catch(() => { });
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
exec(sql) { return this.enqueue(() => this.executor.exec(sql)); }
|
|
72
|
+
run(sql, ...params) { return this.enqueue(() => this.executor.run(sql, ...params)); }
|
|
73
|
+
get(sql, ...params) { return this.enqueue(() => this.executor.get(sql, ...params)); }
|
|
74
|
+
all(sql, ...params) { return this.enqueue(() => this.executor.all(sql, ...params)); }
|
|
75
|
+
query(sql, params, method) {
|
|
76
|
+
return this.enqueue(() => this.executor.query(sql, params, method));
|
|
77
|
+
}
|
|
78
|
+
transaction(callback) {
|
|
79
|
+
return this.enqueue(async () => {
|
|
80
|
+
const transaction = new Executor(this.connection);
|
|
81
|
+
this.connection.exec("BEGIN IMMEDIATE");
|
|
82
|
+
try {
|
|
83
|
+
const result = await callback(transaction);
|
|
84
|
+
this.connection.exec("COMMIT");
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
try {
|
|
89
|
+
this.connection.exec("ROLLBACK");
|
|
90
|
+
}
|
|
91
|
+
catch (rollback) {
|
|
92
|
+
// Transaction ownership is now uncertain. Never let another owner
|
|
93
|
+
// accidentally join it; shutdown may still close the raw connection.
|
|
94
|
+
this.failure = new AggregateError([error, rollback], "SQLite rollback failed", { cause: rollback });
|
|
95
|
+
throw this.failure;
|
|
96
|
+
}
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
transaction.active = false;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
appTransaction(callback) {
|
|
105
|
+
return this.transaction((transaction) => callback(drizzle((sql, params, method) => transaction.query(sql, params, method)), transaction));
|
|
106
|
+
}
|
|
107
|
+
/** Each harness borrows the facade; only the application owns the connection. */
|
|
108
|
+
borrow() {
|
|
109
|
+
return {
|
|
110
|
+
exec: this.exec.bind(this), run: this.run.bind(this), get: this.get.bind(this), all: this.all.bind(this),
|
|
111
|
+
transaction: this.transaction.bind(this),
|
|
112
|
+
// Storage close drains already-admitted SQL without closing other owners.
|
|
113
|
+
close: () => this.enqueue(async () => { }),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async close() {
|
|
117
|
+
if (this.closed)
|
|
118
|
+
return this.tail.then(() => { });
|
|
119
|
+
this.closed = true;
|
|
120
|
+
await this.tail;
|
|
121
|
+
this.executor.active = false;
|
|
122
|
+
if (this.connection.isOpen)
|
|
123
|
+
this.connection.close();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export function applicationDatabase(database) {
|
|
127
|
+
return drizzle((sql, params, method) => database.query(sql, params, method));
|
|
128
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { sql } from "drizzle-orm";
|
|
2
|
+
import { check, foreignKey, index, integer, primaryKey, sqliteTable, text, uniqueIndex } from "drizzle-orm/sqlite-core";
|
|
3
|
+
import { hvAgents } from "./agent-schema.js";
|
|
4
|
+
export const hvSubagents = sqliteTable("hv_subagents", {
|
|
5
|
+
id: text("id").primaryKey(),
|
|
6
|
+
agentId: text("agent_id").notNull().references(() => hvAgents.id, { onDelete: "cascade" }),
|
|
7
|
+
kind: text("kind", { enum: ["orchestrator", "worker"] }).notNull(),
|
|
8
|
+
name: text("name").notNull(),
|
|
9
|
+
description: text("description").notNull().default(""),
|
|
10
|
+
instructions: text("instructions").notNull(),
|
|
11
|
+
provider: text("provider").notNull(),
|
|
12
|
+
modelId: text("model_id").notNull(),
|
|
13
|
+
thinkingLevel: text("thinking_level").notNull().default(""),
|
|
14
|
+
tools: text("tools", { mode: "json" }).$type().notNull(),
|
|
15
|
+
triggers: text("triggers", { mode: "json" }).$type().notNull().default({ inboxEnabled: false, workerDelegates: [], researchSources: [], fills: false, orderChanges: false }),
|
|
16
|
+
templateOrigin: text("template_origin", { mode: "json" }).$type(),
|
|
17
|
+
enabled: integer("enabled", { mode: "boolean" }).notNull().default(true),
|
|
18
|
+
archived: integer("archived", { mode: "boolean" }).notNull().default(false),
|
|
19
|
+
delegatable: integer("delegatable", { mode: "boolean" }).notNull().default(true),
|
|
20
|
+
persistent: integer("persistent", { mode: "boolean" }).notNull().default(false),
|
|
21
|
+
conversationId: integer("conversation_id"),
|
|
22
|
+
schedule: text("schedule").notNull().default(""),
|
|
23
|
+
delaySeconds: integer("delay_seconds").notNull().default(1),
|
|
24
|
+
nextRunAt: integer("next_run_at"),
|
|
25
|
+
completion: text("completion", { enum: ["save", "notify", "wake"] }).notNull().default("wake"),
|
|
26
|
+
timeoutSeconds: integer("timeout_seconds").notNull().default(900),
|
|
27
|
+
createdAt: integer("created_at").notNull(),
|
|
28
|
+
updatedAt: integer("updated_at").notNull(),
|
|
29
|
+
}, (t) => [
|
|
30
|
+
index("hv_subagents_agent_idx").on(t.agentId),
|
|
31
|
+
uniqueIndex("hv_subagents_identity_idx").on(t.agentId, t.id),
|
|
32
|
+
uniqueIndex("hv_subagents_main_idx").on(t.agentId).where(sql `${t.kind} = 'orchestrator'`),
|
|
33
|
+
check("hv_subagents_main_protected", sql `${t.kind} != 'orchestrator' OR (${t.enabled} = 1 AND ${t.archived} = 0 AND ${t.schedule} = '')`),
|
|
34
|
+
]);
|
|
35
|
+
export const hvSubagentRuns = sqliteTable("hv_subagent_runs", {
|
|
36
|
+
id: text("id").primaryKey(),
|
|
37
|
+
agentId: text("agent_id").notNull().references(() => hvAgents.id, { onDelete: "cascade" }),
|
|
38
|
+
subagentId: text("subagent_id").notNull().references(() => hvSubagents.id, { onDelete: "cascade" }),
|
|
39
|
+
requestId: text("request_id").notNull(),
|
|
40
|
+
source: text("source", { enum: ["manual", "schedule", "delegation", "event"] }).notNull(),
|
|
41
|
+
task: text("task").notNull(),
|
|
42
|
+
config: text("config", { mode: "json" }).$type().notNull(),
|
|
43
|
+
status: text("status", { enum: ["queued", "running", "completed", "failed", "cancelled", "skipped"] }).notNull().default("queued"),
|
|
44
|
+
taskId: integer("task_id"),
|
|
45
|
+
conversationId: integer("conversation_id"),
|
|
46
|
+
result: text("result").notNull().default(""),
|
|
47
|
+
createdAt: integer("created_at").notNull(),
|
|
48
|
+
finishedAt: integer("finished_at"),
|
|
49
|
+
reportedAt: integer("reported_at"),
|
|
50
|
+
}, (t) => [
|
|
51
|
+
uniqueIndex("hv_subagent_runs_request_idx").on(t.agentId, t.requestId),
|
|
52
|
+
uniqueIndex("hv_subagent_runs_producer_idx").on(t.agentId, t.id, t.subagentId),
|
|
53
|
+
uniqueIndex("hv_subagent_runs_identity_idx").on(t.agentId, t.id),
|
|
54
|
+
uniqueIndex("hv_subagent_runs_active_idx").on(t.subagentId).where(sql `${t.status} IN ('queued', 'running')`),
|
|
55
|
+
index("hv_subagent_runs_history_idx").on(t.subagentId, t.createdAt),
|
|
56
|
+
]);
|
|
57
|
+
/** Activation windows are maintained atomically by the inbox migration's SQLite triggers. */
|
|
58
|
+
export const hvWorkerSubscriptions = sqliteTable("hv_worker_subscriptions", {
|
|
59
|
+
subagentId: text("subagent_id").notNull().references(() => hvSubagents.id, { onDelete: "cascade" }),
|
|
60
|
+
eventType: text("event_type").notNull(),
|
|
61
|
+
sourceId: text("source_id").notNull(),
|
|
62
|
+
activatedAt: integer("activated_at").notNull(),
|
|
63
|
+
}, (t) => [primaryKey({ columns: [t.subagentId, t.eventType, t.sourceId] })]);
|
|
64
|
+
/** Application-owned inbox and request provenance; admission atomically links requests to runs. */
|
|
65
|
+
export const hvWorkerRequests = sqliteTable("hv_worker_requests", {
|
|
66
|
+
id: text("id").primaryKey(),
|
|
67
|
+
agentId: text("agent_id").notNull().references(() => hvAgents.id, { onDelete: "cascade" }),
|
|
68
|
+
subagentId: text("subagent_id").notNull(),
|
|
69
|
+
eventKey: text("event_key").notNull(),
|
|
70
|
+
payload: text("payload", { mode: "json" }).$type().notNull(),
|
|
71
|
+
createdAt: integer("created_at").notNull(),
|
|
72
|
+
runId: text("run_id"),
|
|
73
|
+
discardedReason: text("discarded_reason"),
|
|
74
|
+
}, (t) => [
|
|
75
|
+
foreignKey({ columns: [t.agentId, t.subagentId], foreignColumns: [hvSubagents.agentId, hvSubagents.id] }),
|
|
76
|
+
foreignKey({ columns: [t.agentId, t.runId, t.subagentId], foreignColumns: [hvSubagentRuns.agentId, hvSubagentRuns.id, hvSubagentRuns.subagentId] }),
|
|
77
|
+
uniqueIndex("hv_worker_requests_event_idx").on(t.agentId, t.subagentId, t.eventKey),
|
|
78
|
+
index("hv_worker_requests_pending_idx").on(t.subagentId, t.createdAt).where(sql `${t.runId} IS NULL AND ${t.discardedReason} IS NULL`),
|
|
79
|
+
]);
|