hypervibes 0.0.0-stage → 0.4.0
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-C87LKvH0.js +1 -0
- package/.build/client/assets/_authenticated.account-D-nTh_fC.js +1 -0
- package/.build/client/assets/_authenticated.agents-HwcveLyB.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId-DuE8Lv62.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.chart-Bb_XkvQx.js +4 -0
- package/.build/client/assets/_authenticated.agents._agentId.chat-ClMMKw_N.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.index-DNJwBwn9.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.indicators-BmVjLtRI.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.indicators_._indicatorId-CMqaaFQf.js +2 -0
- package/.build/client/assets/_authenticated.agents._agentId.indicators_._indicatorId-DtgkoNV5.js +6 -0
- package/.build/client/assets/_authenticated.agents._agentId.memories-O-4f6a4G.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.memories_._memoryRef-BUPtUcj3.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.notifications-2lyhXCSk.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.notifications_._notificationId-Da3ZVT4v.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.settings-C5cWHoYw.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents-HwcveLyB.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents._subagentId-CZ4MeRy4.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents._subagentId_.runs._runId-dVbo5kMU.js +3 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents.index-DeWTOYJD.js +1 -0
- package/.build/client/assets/_authenticated.agents._agentId.sub-agents.new-D02TflCE.js +37 -0
- package/.build/client/assets/_authenticated.agents._agentId.transactions-D3a8Glgj.js +1 -0
- package/.build/client/assets/_authenticated.agents.index-CEqeDEgP.js +1 -0
- package/.build/client/assets/_authenticated.agents.new-DLRWK5Uk.js +1 -0
- package/.build/client/assets/_authenticated.providers-D0iPLXra.js +1 -0
- package/.build/client/assets/agent-chat-page-C5eYFgxw.js +1 -0
- package/.build/client/assets/agent-enablement-control-CUzOp9ce.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-DjmsvbUC.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-B4hvjMmI.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-DrF53EQG.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-Baw5u9sk.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-Hkr5TH_I.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 +145 -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 +1004 -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 +99 -0
- package/dist/agents/subagent-dashboard.js +1 -0
- package/dist/agents/subagent-extension.js +156 -0
- package/dist/agents/subagent-history.js +5 -0
- package/dist/agents/subagent-input.js +73 -0
- package/dist/agents/subagent-service.js +1177 -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/time-guidance.js +29 -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 +79 -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 +37 -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 +93 -3
- 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,162 @@
|
|
|
1
|
+
CREATE TABLE `hv_memories` (
|
|
2
|
+
`agent_id` text NOT NULL,
|
|
3
|
+
`number` integer NOT NULL,
|
|
4
|
+
`kind` text NOT NULL,
|
|
5
|
+
`topic` text NOT NULL,
|
|
6
|
+
`instrument` text,
|
|
7
|
+
`interval` text,
|
|
8
|
+
`summary` text NOT NULL,
|
|
9
|
+
`content` text NOT NULL,
|
|
10
|
+
`payload` text NOT NULL,
|
|
11
|
+
`created_at` integer NOT NULL,
|
|
12
|
+
`evidence_as_of` integer,
|
|
13
|
+
`valid_until` integer,
|
|
14
|
+
`producer_subagent_id` text,
|
|
15
|
+
`source_run_id` text,
|
|
16
|
+
`conversation_id` integer,
|
|
17
|
+
`tool_task_id` integer,
|
|
18
|
+
`retracted_at` integer,
|
|
19
|
+
`retraction_reason` text,
|
|
20
|
+
CONSTRAINT `hv_memories_pk` PRIMARY KEY(`agent_id`, `number`),
|
|
21
|
+
CONSTRAINT `fk_hv_memories_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE,
|
|
22
|
+
CONSTRAINT `fk_hv_memories_agent_id_producer_subagent_id_hv_subagents_agent_id_id_fk` FOREIGN KEY (`agent_id`,`producer_subagent_id`) REFERENCES `hv_subagents`(`agent_id`,`id`),
|
|
23
|
+
CONSTRAINT `fk_hv_memories_agent_id_source_run_id_producer_subagent_id_hv_subagent_runs_agent_id_id_subagent_id_fk` FOREIGN KEY (`agent_id`,`source_run_id`,`producer_subagent_id`) REFERENCES `hv_subagent_runs`(`agent_id`,`id`,`subagent_id`),
|
|
24
|
+
CONSTRAINT "hv_memory_number_positive" CHECK("number" BETWEEN 1 AND 9007199254740990),
|
|
25
|
+
CONSTRAINT "hv_memory_kind" CHECK("kind" IN ('research','decision','review')),
|
|
26
|
+
CONSTRAINT "hv_memory_text_bounds" CHECK(length("summary") BETWEEN 1 AND 500 AND length("content") BETWEEN 1 AND 16000 AND length(CAST("payload" AS BLOB)) <= 16384 AND json_valid("payload")),
|
|
27
|
+
CONSTRAINT "hv_memory_research_deadline" CHECK("kind" != 'research' OR ("evidence_as_of" IS NOT NULL AND "valid_until" IS NOT NULL AND "valid_until" > "evidence_as_of" AND "instrument" IS NOT NULL AND "interval" IS NOT NULL)),
|
|
28
|
+
CONSTRAINT "hv_memory_run_producer" CHECK("source_run_id" IS NULL OR "producer_subagent_id" IS NOT NULL),
|
|
29
|
+
CONSTRAINT "hv_memory_retraction" CHECK(("retracted_at" IS NULL) = ("retraction_reason" IS NULL))
|
|
30
|
+
);
|
|
31
|
+
--> statement-breakpoint
|
|
32
|
+
CREATE TABLE `hv_memory_artifacts` (
|
|
33
|
+
`agent_id` text NOT NULL,
|
|
34
|
+
`memory_number` integer NOT NULL,
|
|
35
|
+
`artifact_id` text NOT NULL,
|
|
36
|
+
CONSTRAINT `hv_memory_artifacts_pk` PRIMARY KEY(`agent_id`, `memory_number`, `artifact_id`),
|
|
37
|
+
CONSTRAINT `fk_hv_memory_artifacts_agent_id_memory_number_hv_memories_agent_id_number_fk` FOREIGN KEY (`agent_id`,`memory_number`) REFERENCES `hv_memories`(`agent_id`,`number`) ON DELETE CASCADE,
|
|
38
|
+
CONSTRAINT `fk_hv_memory_artifacts_agent_id_artifact_id_hv_artifacts_agent_id_id_fk` FOREIGN KEY (`agent_id`,`artifact_id`) REFERENCES `hv_artifacts`(`agent_id`,`id`)
|
|
39
|
+
);
|
|
40
|
+
--> statement-breakpoint
|
|
41
|
+
CREATE TABLE `hv_memory_counters` (
|
|
42
|
+
`agent_id` text PRIMARY KEY,
|
|
43
|
+
`next_number` integer DEFAULT 1 NOT NULL,
|
|
44
|
+
CONSTRAINT `fk_hv_memory_counters_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE,
|
|
45
|
+
CONSTRAINT "hv_memory_counter_positive" CHECK("next_number" BETWEEN 1 AND 9007199254740991)
|
|
46
|
+
);
|
|
47
|
+
--> statement-breakpoint
|
|
48
|
+
CREATE TABLE `hv_memory_links` (
|
|
49
|
+
`agent_id` text NOT NULL,
|
|
50
|
+
`source_number` integer NOT NULL,
|
|
51
|
+
`target_number` integer NOT NULL,
|
|
52
|
+
`relation` text NOT NULL,
|
|
53
|
+
CONSTRAINT `hv_memory_links_pk` PRIMARY KEY(`agent_id`, `source_number`, `target_number`, `relation`),
|
|
54
|
+
CONSTRAINT `fk_hv_memory_links_agent_id_source_number_hv_memories_agent_id_number_fk` FOREIGN KEY (`agent_id`,`source_number`) REFERENCES `hv_memories`(`agent_id`,`number`) ON DELETE CASCADE,
|
|
55
|
+
CONSTRAINT `fk_hv_memory_links_agent_id_target_number_hv_memories_agent_id_number_fk` FOREIGN KEY (`agent_id`,`target_number`) REFERENCES `hv_memories`(`agent_id`,`number`),
|
|
56
|
+
CONSTRAINT "hv_memory_link_backward" CHECK("target_number" < "source_number"),
|
|
57
|
+
CONSTRAINT "hv_memory_link_relation" CHECK("relation" IN ('based_on','corrects','supersedes','reviews'))
|
|
58
|
+
);
|
|
59
|
+
--> statement-breakpoint
|
|
60
|
+
CREATE TABLE `hv_memory_operations` (
|
|
61
|
+
`agent_id` text NOT NULL,
|
|
62
|
+
`operation_key` text NOT NULL,
|
|
63
|
+
`operation_kind` text NOT NULL,
|
|
64
|
+
`request_hash` text NOT NULL,
|
|
65
|
+
`result` text NOT NULL,
|
|
66
|
+
`created_at` integer NOT NULL,
|
|
67
|
+
CONSTRAINT `hv_memory_operations_pk` PRIMARY KEY(`agent_id`, `operation_key`),
|
|
68
|
+
CONSTRAINT `fk_hv_memory_operations_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE
|
|
69
|
+
);
|
|
70
|
+
--> statement-breakpoint
|
|
71
|
+
CREATE TABLE `hv_insight_revision_memories` (
|
|
72
|
+
`agent_id` text NOT NULL,
|
|
73
|
+
`set_id` text NOT NULL,
|
|
74
|
+
`version` integer NOT NULL,
|
|
75
|
+
`memory_number` integer NOT NULL,
|
|
76
|
+
CONSTRAINT `hv_insight_revision_memories_pk` PRIMARY KEY(`agent_id`, `set_id`, `version`, `memory_number`),
|
|
77
|
+
CONSTRAINT `fk_hv_insight_revision_memories_agent_id_set_id_version_hv_insight_revisions_agent_id_set_id_version_fk` FOREIGN KEY (`agent_id`,`set_id`,`version`) REFERENCES `hv_insight_revisions`(`agent_id`,`set_id`,`version`) ON DELETE CASCADE,
|
|
78
|
+
CONSTRAINT `fk_hv_insight_revision_memories_agent_id_memory_number_hv_memories_agent_id_number_fk` FOREIGN KEY (`agent_id`,`memory_number`) REFERENCES `hv_memories`(`agent_id`,`number`)
|
|
79
|
+
);
|
|
80
|
+
--> statement-breakpoint
|
|
81
|
+
CREATE TABLE `hv_insight_revisions` (
|
|
82
|
+
`agent_id` text NOT NULL,
|
|
83
|
+
`set_id` text NOT NULL,
|
|
84
|
+
`version` integer NOT NULL,
|
|
85
|
+
`content` text NOT NULL,
|
|
86
|
+
`operation` text NOT NULL,
|
|
87
|
+
`reason` text NOT NULL,
|
|
88
|
+
`created_at` integer NOT NULL,
|
|
89
|
+
`actor_user_id` text,
|
|
90
|
+
`producer_subagent_id` text,
|
|
91
|
+
`source_run_id` text,
|
|
92
|
+
`conversation_id` integer,
|
|
93
|
+
`tool_task_id` integer,
|
|
94
|
+
CONSTRAINT `hv_insight_revisions_pk` PRIMARY KEY(`set_id`, `version`),
|
|
95
|
+
CONSTRAINT `fk_hv_insight_revisions_agent_id_set_id_hv_insight_sets_agent_id_id_fk` FOREIGN KEY (`agent_id`,`set_id`) REFERENCES `hv_insight_sets`(`agent_id`,`id`) ON DELETE CASCADE,
|
|
96
|
+
CONSTRAINT `fk_hv_insight_revisions_agent_id_producer_subagent_id_hv_subagents_agent_id_id_fk` FOREIGN KEY (`agent_id`,`producer_subagent_id`) REFERENCES `hv_subagents`(`agent_id`,`id`),
|
|
97
|
+
CONSTRAINT `fk_hv_insight_revisions_agent_id_source_run_id_producer_subagent_id_hv_subagent_runs_agent_id_id_subagent_id_fk` FOREIGN KEY (`agent_id`,`source_run_id`,`producer_subagent_id`) REFERENCES `hv_subagent_runs`(`agent_id`,`id`,`subagent_id`),
|
|
98
|
+
CONSTRAINT "hv_insight_revision_version" CHECK("version" BETWEEN 1 AND 9007199254740990),
|
|
99
|
+
CONSTRAINT "hv_insight_content_bound" CHECK(length("content") <= 8000),
|
|
100
|
+
CONSTRAINT "hv_insight_operation" CHECK("operation" IN ('append','replace')),
|
|
101
|
+
CONSTRAINT "hv_insight_revision_actor" CHECK(("actor_user_id" IS NOT NULL AND "source_run_id" IS NULL) OR ("actor_user_id" IS NULL AND "producer_subagent_id" IS NOT NULL))
|
|
102
|
+
);
|
|
103
|
+
--> statement-breakpoint
|
|
104
|
+
CREATE TABLE `hv_insight_sets` (
|
|
105
|
+
`id` text PRIMARY KEY,
|
|
106
|
+
`agent_id` text NOT NULL,
|
|
107
|
+
`scope_kind` text NOT NULL,
|
|
108
|
+
`subagent_id` text,
|
|
109
|
+
`current_version` integer DEFAULT 0 NOT NULL,
|
|
110
|
+
`updated_at` integer NOT NULL,
|
|
111
|
+
CONSTRAINT `fk_hv_insight_sets_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE,
|
|
112
|
+
CONSTRAINT `fk_hv_insight_sets_agent_id_subagent_id_hv_subagents_agent_id_id_fk` FOREIGN KEY (`agent_id`,`subagent_id`) REFERENCES `hv_subagents`(`agent_id`,`id`),
|
|
113
|
+
CONSTRAINT "hv_insight_scope" CHECK(("scope_kind" = 'agent' AND "subagent_id" IS NULL) OR ("scope_kind" = 'worker' AND "subagent_id" IS NOT NULL)),
|
|
114
|
+
CONSTRAINT "hv_insight_head" CHECK("current_version" BETWEEN 0 AND 9007199254740990)
|
|
115
|
+
);
|
|
116
|
+
--> statement-breakpoint
|
|
117
|
+
CREATE TABLE `hv_subagent_run_contexts` (
|
|
118
|
+
`agent_id` text NOT NULL,
|
|
119
|
+
`run_id` text PRIMARY KEY,
|
|
120
|
+
`context` text NOT NULL,
|
|
121
|
+
CONSTRAINT `fk_hv_subagent_run_contexts_agent_id_run_id_hv_subagent_runs_agent_id_id_fk` FOREIGN KEY (`agent_id`,`run_id`) REFERENCES `hv_subagent_runs`(`agent_id`,`id`) ON DELETE CASCADE,
|
|
122
|
+
CONSTRAINT "hv_run_context_bound" CHECK(length("context") <= 120000)
|
|
123
|
+
);
|
|
124
|
+
--> statement-breakpoint
|
|
125
|
+
CREATE TABLE `hv_risk_settings` (
|
|
126
|
+
`agent_id` text PRIMARY KEY,
|
|
127
|
+
`trading_enabled` integer DEFAULT false NOT NULL,
|
|
128
|
+
`allowed_instruments` text,
|
|
129
|
+
`max_order_notional` text,
|
|
130
|
+
`max_total_notional` text,
|
|
131
|
+
`updated_at` integer NOT NULL,
|
|
132
|
+
CONSTRAINT `fk_hv_risk_settings_agent_id_hv_agents_id_fk` FOREIGN KEY (`agent_id`) REFERENCES `hv_agents`(`id`) ON DELETE CASCADE,
|
|
133
|
+
CONSTRAINT "hv_risk_instruments_bound" CHECK(length(coalesce("allowed_instruments", '[]')) <= 4000 AND json_valid(coalesce("allowed_instruments", '[]')))
|
|
134
|
+
);
|
|
135
|
+
--> statement-breakpoint
|
|
136
|
+
ALTER TABLE `hv_subagents` ADD `template_origin` text;--> statement-breakpoint
|
|
137
|
+
CREATE UNIQUE INDEX `hv_order_request_identity` ON `hv_order_requests` (`agent_id`,`id`);--> statement-breakpoint
|
|
138
|
+
CREATE UNIQUE INDEX `hv_subagent_runs_producer_idx` ON `hv_subagent_runs` (`agent_id`,`id`,`subagent_id`);--> statement-breakpoint
|
|
139
|
+
CREATE UNIQUE INDEX `hv_subagent_runs_identity_idx` ON `hv_subagent_runs` (`agent_id`,`id`);--> statement-breakpoint
|
|
140
|
+
CREATE UNIQUE INDEX `hv_subagents_identity_idx` ON `hv_subagents` (`agent_id`,`id`);--> statement-breakpoint
|
|
141
|
+
CREATE UNIQUE INDEX `hv_artifacts_identity_idx` ON `hv_artifacts` (`agent_id`,`id`);--> statement-breakpoint
|
|
142
|
+
CREATE INDEX `hv_memories_history_idx` ON `hv_memories` (`agent_id`,`created_at`,`number`);--> statement-breakpoint
|
|
143
|
+
CREATE INDEX `hv_memories_stream_idx` ON `hv_memories` (`agent_id`,`kind`,`instrument`,`topic`,`interval`,`producer_subagent_id`,`number`);--> statement-breakpoint
|
|
144
|
+
CREATE INDEX `hv_memories_run_idx` ON `hv_memories` (`agent_id`,`source_run_id`);--> statement-breakpoint
|
|
145
|
+
CREATE INDEX `hv_memory_artifacts_evidence_idx` ON `hv_memory_artifacts` (`agent_id`,`artifact_id`);--> statement-breakpoint
|
|
146
|
+
CREATE UNIQUE INDEX `hv_insight_revision_identity_idx` ON `hv_insight_revisions` (`agent_id`,`set_id`,`version`);--> statement-breakpoint
|
|
147
|
+
CREATE UNIQUE INDEX `hv_insight_sets_identity_idx` ON `hv_insight_sets` (`agent_id`,`id`);--> statement-breakpoint
|
|
148
|
+
CREATE UNIQUE INDEX `hv_insight_sets_agent_idx` ON `hv_insight_sets` (`agent_id`) WHERE "hv_insight_sets"."scope_kind" = 'agent';--> statement-breakpoint
|
|
149
|
+
CREATE UNIQUE INDEX `hv_insight_sets_worker_idx` ON `hv_insight_sets` (`agent_id`,`subagent_id`) WHERE "hv_insight_sets"."scope_kind" = 'worker';--> statement-breakpoint
|
|
150
|
+
CREATE TABLE `hv_order_request_provenance` (
|
|
151
|
+
`request_id` text PRIMARY KEY,
|
|
152
|
+
`agent_id` text NOT NULL,
|
|
153
|
+
`producer_subagent_id` text NOT NULL,
|
|
154
|
+
`source_run_id` text,
|
|
155
|
+
`conversation_id` integer NOT NULL,
|
|
156
|
+
`tool_task_id` integer NOT NULL,
|
|
157
|
+
CONSTRAINT `fk_hv_order_request_provenance_agent_id_request_id_hv_order_requests_agent_id_id_fk` FOREIGN KEY (`agent_id`,`request_id`) REFERENCES `hv_order_requests`(`agent_id`,`id`) ON DELETE CASCADE,
|
|
158
|
+
CONSTRAINT `fk_hv_order_request_provenance_agent_id_producer_subagent_id_hv_subagents_agent_id_id_fk` FOREIGN KEY (`agent_id`,`producer_subagent_id`) REFERENCES `hv_subagents`(`agent_id`,`id`),
|
|
159
|
+
CONSTRAINT `fk_hv_order_request_provenance_agent_id_source_run_id_producer_subagent_id_hv_subagent_runs_agent_id_id_subagent_id_fk` FOREIGN KEY (`agent_id`,`source_run_id`,`producer_subagent_id`) REFERENCES `hv_subagent_runs`(`agent_id`,`id`,`subagent_id`)
|
|
160
|
+
);
|
|
161
|
+
--> statement-breakpoint
|
|
162
|
+
CREATE INDEX `hv_order_provenance_run_idx` ON `hv_order_request_provenance` (`agent_id`,`source_run_id`);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
ALTER TABLE `hv_subagents` ADD `triggers` text DEFAULT '{"inboxEnabled":false,"workerDelegates":[],"researchSources":[],"fills":false,"orderChanges":false}' NOT NULL;
|
|
2
|
+
--> statement-breakpoint
|
|
3
|
+
CREATE TABLE `hv_worker_requests` (
|
|
4
|
+
`id` text PRIMARY KEY,
|
|
5
|
+
`agent_id` text NOT NULL REFERENCES `hv_agents` (`id`) ON DELETE CASCADE,
|
|
6
|
+
`subagent_id` text NOT NULL,
|
|
7
|
+
`event_key` text NOT NULL,
|
|
8
|
+
`payload` text NOT NULL,
|
|
9
|
+
`created_at` integer NOT NULL,
|
|
10
|
+
`run_id` text,
|
|
11
|
+
`discarded_reason` text,
|
|
12
|
+
FOREIGN KEY (`agent_id`, `subagent_id`) REFERENCES `hv_subagents` (`agent_id`, `id`),
|
|
13
|
+
FOREIGN KEY (`agent_id`, `run_id`, `subagent_id`) REFERENCES `hv_subagent_runs` (`agent_id`, `id`, `subagent_id`)
|
|
14
|
+
);
|
|
15
|
+
--> statement-breakpoint
|
|
16
|
+
CREATE UNIQUE INDEX `hv_worker_requests_event_idx` ON `hv_worker_requests` (`agent_id`, `subagent_id`, `event_key`);
|
|
17
|
+
--> statement-breakpoint
|
|
18
|
+
CREATE INDEX `hv_worker_requests_pending_idx` ON `hv_worker_requests` (`subagent_id`, `created_at`) WHERE `run_id` IS NULL AND `discarded_reason` IS NULL;
|
|
19
|
+
|
|
20
|
+
--> statement-breakpoint
|
|
21
|
+
CREATE TABLE hv_worker_subscriptions (
|
|
22
|
+
subagent_id text NOT NULL REFERENCES hv_subagents(id) ON DELETE CASCADE,
|
|
23
|
+
event_type text NOT NULL,
|
|
24
|
+
source_id text NOT NULL,
|
|
25
|
+
activated_at integer NOT NULL,
|
|
26
|
+
PRIMARY KEY (subagent_id, event_type, source_id)
|
|
27
|
+
);
|
|
28
|
+
--> statement-breakpoint
|
|
29
|
+
CREATE VIEW hv_enabled_worker_subscriptions AS
|
|
30
|
+
SELECT s.id AS subagent_id, 'research' AS event_type, j.value AS source_id, s.updated_at AS activated_at
|
|
31
|
+
FROM hv_subagents s, json_each(s.triggers, '$.researchSources') j
|
|
32
|
+
WHERE s.enabled=1 AND s.archived=0 AND json_extract(s.triggers,'$.inboxEnabled')=1
|
|
33
|
+
UNION ALL
|
|
34
|
+
SELECT id, 'fill', '', updated_at FROM hv_subagents
|
|
35
|
+
WHERE enabled=1 AND archived=0 AND json_extract(triggers,'$.inboxEnabled')=1 AND json_extract(triggers,'$.fills')=1
|
|
36
|
+
UNION ALL
|
|
37
|
+
SELECT id, 'order_status', '', updated_at FROM hv_subagents
|
|
38
|
+
WHERE enabled=1 AND archived=0 AND json_extract(triggers,'$.inboxEnabled')=1 AND json_extract(triggers,'$.orderChanges')=1;
|
|
39
|
+
--> statement-breakpoint
|
|
40
|
+
INSERT INTO hv_worker_subscriptions SELECT * FROM hv_enabled_worker_subscriptions;
|
|
41
|
+
--> statement-breakpoint
|
|
42
|
+
CREATE TRIGGER hv_worker_subscriptions_insert AFTER INSERT ON hv_subagents BEGIN
|
|
43
|
+
INSERT INTO hv_worker_subscriptions SELECT * FROM hv_enabled_worker_subscriptions WHERE subagent_id=NEW.id;
|
|
44
|
+
END;
|
|
45
|
+
--> statement-breakpoint
|
|
46
|
+
CREATE TRIGGER hv_worker_subscriptions_update AFTER UPDATE OF triggers, enabled, archived ON hv_subagents BEGIN
|
|
47
|
+
DELETE FROM hv_worker_subscriptions WHERE subagent_id=NEW.id AND NOT EXISTS (
|
|
48
|
+
SELECT 1 FROM hv_enabled_worker_subscriptions v WHERE v.subagent_id=NEW.id
|
|
49
|
+
AND v.event_type=hv_worker_subscriptions.event_type AND v.source_id=hv_worker_subscriptions.source_id
|
|
50
|
+
);
|
|
51
|
+
INSERT INTO hv_worker_subscriptions SELECT * FROM hv_enabled_worker_subscriptions WHERE subagent_id=NEW.id
|
|
52
|
+
AND NOT EXISTS (SELECT 1 FROM hv_worker_subscriptions old WHERE old.subagent_id=NEW.id
|
|
53
|
+
AND old.event_type=hv_enabled_worker_subscriptions.event_type AND old.source_id=hv_enabled_worker_subscriptions.source_id);
|
|
54
|
+
END;
|
|
@@ -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
|
+
}
|