@xyit/wellspring 0.0.0-stage → 1.1.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/LICENSE +21 -0
- package/README.md +853 -2
- package/dist/agent/pending-asks.d.ts +20 -0
- package/dist/agent/pending-asks.js +70 -0
- package/dist/agent/pending-asks.js.map +1 -0
- package/dist/agent/task-registry.d.ts +14 -0
- package/dist/agent/task-registry.js +80 -0
- package/dist/agent/task-registry.js.map +1 -0
- package/dist/agent/tool-context.d.ts +30 -0
- package/dist/agent/tool-context.js +10 -0
- package/dist/agent/tool-context.js.map +1 -0
- package/dist/agent/usage.d.ts +40 -0
- package/dist/agent/usage.js +122 -0
- package/dist/agent/usage.js.map +1 -0
- package/dist/api/host/agent.d.ts +165 -0
- package/dist/api/host/agent.js +5 -0
- package/dist/api/host/agent.js.map +1 -0
- package/dist/api/host/events.d.ts +2 -0
- package/dist/api/host/events.js +6 -0
- package/dist/api/host/events.js.map +1 -0
- package/dist/api/host/exec.d.ts +36 -0
- package/dist/api/host/exec.js +10 -0
- package/dist/api/host/exec.js.map +1 -0
- package/dist/api/host/fs.d.ts +24 -0
- package/dist/api/host/fs.js +7 -0
- package/dist/api/host/fs.js.map +1 -0
- package/dist/api/host/hooks.d.ts +210 -0
- package/dist/api/host/hooks.js +401 -0
- package/dist/api/host/hooks.js.map +1 -0
- package/dist/api/host/host.d.ts +36 -0
- package/dist/api/host/host.js +53 -0
- package/dist/api/host/host.js.map +1 -0
- package/dist/api/host/http.d.ts +58 -0
- package/dist/api/host/http.js +6 -0
- package/dist/api/host/http.js.map +1 -0
- package/dist/api/host/index.d.ts +15 -0
- package/dist/api/host/index.js +20 -0
- package/dist/api/host/index.js.map +1 -0
- package/dist/api/host/models.d.ts +65 -0
- package/dist/api/host/models.js +8 -0
- package/dist/api/host/models.js.map +1 -0
- package/dist/api/host/network.d.ts +22 -0
- package/dist/api/host/network.js +7 -0
- package/dist/api/host/network.js.map +1 -0
- package/dist/api/host/plugin.d.ts +138 -0
- package/dist/api/host/plugin.js +6 -0
- package/dist/api/host/plugin.js.map +1 -0
- package/dist/api/host/plugins.d.ts +49 -0
- package/dist/api/host/plugins.js +6 -0
- package/dist/api/host/plugins.js.map +1 -0
- package/dist/api/host/pty.d.ts +55 -0
- package/dist/api/host/pty.js +21 -0
- package/dist/api/host/pty.js.map +1 -0
- package/dist/api/host/session.d.ts +5 -0
- package/dist/api/host/session.js +52 -0
- package/dist/api/host/session.js.map +1 -0
- package/dist/api/host/version.d.ts +2 -0
- package/dist/api/host/version.js +3 -0
- package/dist/api/host/version.js.map +1 -0
- package/dist/api/host/workspace.d.ts +38 -0
- package/dist/api/host/workspace.js +9 -0
- package/dist/api/host/workspace.js.map +1 -0
- package/dist/api/plugin/http-client.d.ts +42 -0
- package/dist/api/plugin/http-client.js +364 -0
- package/dist/api/plugin/http-client.js.map +1 -0
- package/dist/api/plugin/http-protocol.d.ts +152 -0
- package/dist/api/plugin/http-protocol.js +49 -0
- package/dist/api/plugin/http-protocol.js.map +1 -0
- package/dist/api/result/result.d.ts +16 -0
- package/dist/api/result/result.js +43 -0
- package/dist/api/result/result.js.map +1 -0
- package/dist/commands/agent-turn.d.ts +63 -0
- package/dist/commands/agent-turn.js +687 -0
- package/dist/commands/agent-turn.js.map +1 -0
- package/dist/commands/ask-prompt.d.ts +6 -0
- package/dist/commands/ask-prompt.js +49 -0
- package/dist/commands/ask-prompt.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +283 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/conversation.d.ts +51 -0
- package/dist/commands/conversation.js +630 -0
- package/dist/commands/conversation.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +77 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/exec-approval.d.ts +3 -0
- package/dist/commands/exec-approval.js +80 -0
- package/dist/commands/exec-approval.js.map +1 -0
- package/dist/commands/help.d.ts +2 -0
- package/dist/commands/help.js +35 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/key.d.ts +2 -0
- package/dist/commands/key.js +226 -0
- package/dist/commands/key.js.map +1 -0
- package/dist/commands/plugin.d.ts +2 -0
- package/dist/commands/plugin.js +190 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/session.d.ts +2 -0
- package/dist/commands/session.js +167 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/shared.d.ts +35 -0
- package/dist/commands/shared.js +66 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.js +75 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.js +24 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/version.d.ts +2 -0
- package/dist/commands/version.js +33 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config/codes.d.ts +13 -0
- package/dist/config/codes.js +15 -0
- package/dist/config/codes.js.map +1 -0
- package/dist/config/credentials.d.ts +67 -0
- package/dist/config/credentials.js +214 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/defaults.d.ts +5 -0
- package/dist/config/defaults.js +31 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.js +10 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +10 -0
- package/dist/config/loader.js +68 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/providers.d.ts +30 -0
- package/dist/config/providers.js +97 -0
- package/dist/config/providers.js.map +1 -0
- package/dist/config/types.d.ts +75 -0
- package/dist/config/types.js +4 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validate.d.ts +4 -0
- package/dist/config/validate.js +391 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/display/markdown.d.ts +7 -0
- package/dist/display/markdown.js +116 -0
- package/dist/display/markdown.js.map +1 -0
- package/dist/display/tool-label.d.ts +6 -0
- package/dist/display/tool-label.js +81 -0
- package/dist/display/tool-label.js.map +1 -0
- package/dist/event/event.d.ts +27 -0
- package/dist/event/event.js +152 -0
- package/dist/event/event.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +308 -0
- package/dist/index.js.map +1 -0
- package/dist/input/codes.d.ts +15 -0
- package/dist/input/codes.js +20 -0
- package/dist/input/codes.js.map +1 -0
- package/dist/input/commands.d.ts +10 -0
- package/dist/input/commands.js +65 -0
- package/dist/input/commands.js.map +1 -0
- package/dist/input/help.d.ts +8 -0
- package/dist/input/help.js +51 -0
- package/dist/input/help.js.map +1 -0
- package/dist/input/index.d.ts +6 -0
- package/dist/input/index.js +10 -0
- package/dist/input/index.js.map +1 -0
- package/dist/input/parse-options.d.ts +11 -0
- package/dist/input/parse-options.js +51 -0
- package/dist/input/parse-options.js.map +1 -0
- package/dist/input/parse.d.ts +3 -0
- package/dist/input/parse.js +119 -0
- package/dist/input/parse.js.map +1 -0
- package/dist/input/types.d.ts +17 -0
- package/dist/input/types.js +2 -0
- package/dist/input/types.js.map +1 -0
- package/dist/logger/elog4js.d.ts +65 -0
- package/dist/logger/elog4js.js +305 -0
- package/dist/logger/elog4js.js.map +1 -0
- package/dist/logger/logger.d.ts +37 -0
- package/dist/logger/logger.js +196 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/network/index.d.ts +2 -0
- package/dist/network/index.js +6 -0
- package/dist/network/index.js.map +1 -0
- package/dist/network/openai.d.ts +117 -0
- package/dist/network/openai.js +443 -0
- package/dist/network/openai.js.map +1 -0
- package/dist/network/proxy.d.ts +9 -0
- package/dist/network/proxy.js +72 -0
- package/dist/network/proxy.js.map +1 -0
- package/dist/network/web.d.ts +34 -0
- package/dist/network/web.js +152 -0
- package/dist/network/web.js.map +1 -0
- package/dist/platform/clipboard.d.ts +15 -0
- package/dist/platform/clipboard.js +82 -0
- package/dist/platform/clipboard.js.map +1 -0
- package/dist/platform/exec.d.ts +28 -0
- package/dist/platform/exec.js +95 -0
- package/dist/platform/exec.js.map +1 -0
- package/dist/platform/file.d.ts +38 -0
- package/dist/platform/file.js +197 -0
- package/dist/platform/file.js.map +1 -0
- package/dist/platform/index.d.ts +7 -0
- package/dist/platform/index.js +12 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/notification.d.ts +14 -0
- package/dist/platform/notification.js +82 -0
- package/dist/platform/notification.js.map +1 -0
- package/dist/platform/open-external.d.ts +10 -0
- package/dist/platform/open-external.js +105 -0
- package/dist/platform/open-external.js.map +1 -0
- package/dist/platform/os.d.ts +20 -0
- package/dist/platform/os.js +86 -0
- package/dist/platform/os.js.map +1 -0
- package/dist/platform/path.d.ts +32 -0
- package/dist/platform/path.js +154 -0
- package/dist/platform/path.js.map +1 -0
- package/dist/plugin/access-guard.d.ts +1 -0
- package/dist/plugin/access-guard.js +40 -0
- package/dist/plugin/access-guard.js.map +1 -0
- package/dist/plugin/agent-service.d.ts +25 -0
- package/dist/plugin/agent-service.js +809 -0
- package/dist/plugin/agent-service.js.map +1 -0
- package/dist/plugin/agent-tools.d.ts +12 -0
- package/dist/plugin/agent-tools.js +31 -0
- package/dist/plugin/agent-tools.js.map +1 -0
- package/dist/plugin/capabilities.d.ts +26 -0
- package/dist/plugin/capabilities.js +192 -0
- package/dist/plugin/capabilities.js.map +1 -0
- package/dist/plugin/console-guard.d.ts +2 -0
- package/dist/plugin/console-guard.js +52 -0
- package/dist/plugin/console-guard.js.map +1 -0
- package/dist/plugin/data-access.d.ts +15 -0
- package/dist/plugin/data-access.js +57 -0
- package/dist/plugin/data-access.js.map +1 -0
- package/dist/plugin/fs.d.ts +3 -0
- package/dist/plugin/fs.js +93 -0
- package/dist/plugin/fs.js.map +1 -0
- package/dist/plugin/host-alias.d.ts +2 -0
- package/dist/plugin/host-alias.js +57 -0
- package/dist/plugin/host-alias.js.map +1 -0
- package/dist/plugin/index.d.ts +7 -0
- package/dist/plugin/index.js +11 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/install.d.ts +17 -0
- package/dist/plugin/install.js +163 -0
- package/dist/plugin/install.js.map +1 -0
- package/dist/plugin/loader.d.ts +45 -0
- package/dist/plugin/loader.js +739 -0
- package/dist/plugin/loader.js.map +1 -0
- package/dist/plugin/manage.d.ts +31 -0
- package/dist/plugin/manage.js +271 -0
- package/dist/plugin/manage.js.map +1 -0
- package/dist/plugin/models-service.d.ts +15 -0
- package/dist/plugin/models-service.js +317 -0
- package/dist/plugin/models-service.js.map +1 -0
- package/dist/plugin/network-service.d.ts +10 -0
- package/dist/plugin/network-service.js +87 -0
- package/dist/plugin/network-service.js.map +1 -0
- package/dist/plugin/package-manager.d.ts +46 -0
- package/dist/plugin/package-manager.js +148 -0
- package/dist/plugin/package-manager.js.map +1 -0
- package/dist/plugin/paths.d.ts +6 -0
- package/dist/plugin/paths.js +15 -0
- package/dist/plugin/paths.js.map +1 -0
- package/dist/plugin/registry.d.ts +17 -0
- package/dist/plugin/registry.js +82 -0
- package/dist/plugin/registry.js.map +1 -0
- package/dist/plugin/runtime.d.ts +9 -0
- package/dist/plugin/runtime.js +43 -0
- package/dist/plugin/runtime.js.map +1 -0
- package/dist/plugin/scaffold.d.ts +13 -0
- package/dist/plugin/scaffold.js +132 -0
- package/dist/plugin/scaffold.js.map +1 -0
- package/dist/plugin/state.d.ts +6 -0
- package/dist/plugin/state.js +38 -0
- package/dist/plugin/state.js.map +1 -0
- package/dist/plugin/zip.d.ts +7 -0
- package/dist/plugin/zip.js +138 -0
- package/dist/plugin/zip.js.map +1 -0
- package/dist/sandbox/audit.d.ts +12 -0
- package/dist/sandbox/audit.js +20 -0
- package/dist/sandbox/audit.js.map +1 -0
- package/dist/sandbox/backends/bwrap.d.ts +28 -0
- package/dist/sandbox/backends/bwrap.js +197 -0
- package/dist/sandbox/backends/bwrap.js.map +1 -0
- package/dist/sandbox/backends/direct.d.ts +7 -0
- package/dist/sandbox/backends/direct.js +32 -0
- package/dist/sandbox/backends/direct.js.map +1 -0
- package/dist/sandbox/bridge-state.d.ts +13 -0
- package/dist/sandbox/bridge-state.js +12 -0
- package/dist/sandbox/bridge-state.js.map +1 -0
- package/dist/sandbox/index.d.ts +5 -0
- package/dist/sandbox/index.js +6 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/manager.d.ts +8 -0
- package/dist/sandbox/manager.js +325 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/memory-limit.d.ts +44 -0
- package/dist/sandbox/memory-limit.js +193 -0
- package/dist/sandbox/memory-limit.js.map +1 -0
- package/dist/sandbox/plugin-client.d.ts +80 -0
- package/dist/sandbox/plugin-client.js +1601 -0
- package/dist/sandbox/plugin-client.js.map +1 -0
- package/dist/sandbox/plugin-host.d.ts +1 -0
- package/dist/sandbox/plugin-host.js +1001 -0
- package/dist/sandbox/plugin-host.js.map +1 -0
- package/dist/sandbox/protocol.d.ts +43 -0
- package/dist/sandbox/protocol.js +96 -0
- package/dist/sandbox/protocol.js.map +1 -0
- package/dist/sandbox/rpc-timeouts.d.ts +28 -0
- package/dist/sandbox/rpc-timeouts.js +15 -0
- package/dist/sandbox/rpc-timeouts.js.map +1 -0
- package/dist/sandbox/supervisor.d.ts +31 -0
- package/dist/sandbox/supervisor.js +114 -0
- package/dist/sandbox/supervisor.js.map +1 -0
- package/dist/sandbox/types.d.ts +124 -0
- package/dist/sandbox/types.js +17 -0
- package/dist/sandbox/types.js.map +1 -0
- package/dist/service/control.d.ts +32 -0
- package/dist/service/control.js +117 -0
- package/dist/service/control.js.map +1 -0
- package/dist/session/compress.d.ts +3 -0
- package/dist/session/compress.js +42 -0
- package/dist/session/compress.js.map +1 -0
- package/dist/session/index.d.ts +4 -0
- package/dist/session/index.js +8 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/registry.d.ts +4 -0
- package/dist/session/registry.js +12 -0
- package/dist/session/registry.js.map +1 -0
- package/dist/session/replay.d.ts +10 -0
- package/dist/session/replay.js +109 -0
- package/dist/session/replay.js.map +1 -0
- package/dist/session/session.d.ts +40 -0
- package/dist/session/session.js +108 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/store.d.ts +58 -0
- package/dist/session/store.js +382 -0
- package/dist/session/store.js.map +1 -0
- package/dist/session/types.d.ts +56 -0
- package/dist/session/types.js +3 -0
- package/dist/session/types.js.map +1 -0
- package/dist/workspace/index.d.ts +7 -0
- package/dist/workspace/index.js +17 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/registry.d.ts +25 -0
- package/dist/workspace/registry.js +293 -0
- package/dist/workspace/registry.js.map +1 -0
- package/package.json +73 -5
- package/scripts/build-node-pty.mjs +55 -0
- package/scripts/rewrite-dts.mjs +36 -0
- package/scripts/run-tests.mjs +41 -0
- package/scripts/verify-sandbox.ts +98 -0
- package/src/agent/pending-asks.ts +88 -0
- package/src/agent/task-registry.ts +108 -0
- package/src/agent/tool-context.ts +47 -0
- package/src/agent/usage.ts +170 -0
- package/src/api/host/agent.ts +162 -0
- package/src/api/host/events.ts +7 -0
- package/src/api/host/exec.ts +47 -0
- package/src/api/host/fs.ts +33 -0
- package/src/api/host/hooks.ts +635 -0
- package/src/api/host/host.ts +99 -0
- package/src/api/host/http.ts +79 -0
- package/src/api/host/index.ts +20 -0
- package/src/api/host/models.ts +81 -0
- package/src/api/host/network.ts +32 -0
- package/src/api/host/plugin.ts +158 -0
- package/src/api/host/plugins.ts +59 -0
- package/src/api/host/pty.ts +73 -0
- package/src/api/host/session.ts +61 -0
- package/src/api/host/version.ts +2 -0
- package/src/api/host/workspace.ts +51 -0
- package/src/api/plugin/http-client.ts +492 -0
- package/src/api/plugin/http-protocol.ts +231 -0
- package/src/api/result/result.ts +52 -0
- package/src/commands/agent-turn.ts +817 -0
- package/src/commands/ask-prompt.ts +52 -0
- package/src/commands/config.ts +306 -0
- package/src/commands/conversation.ts +777 -0
- package/src/commands/doctor.ts +92 -0
- package/src/commands/exec-approval.ts +91 -0
- package/src/commands/help.ts +41 -0
- package/src/commands/key.ts +281 -0
- package/src/commands/plugin.ts +222 -0
- package/src/commands/session.ts +179 -0
- package/src/commands/shared.ts +103 -0
- package/src/commands/start.ts +88 -0
- package/src/commands/stop.ts +24 -0
- package/src/commands/version.ts +40 -0
- package/src/config/codes.ts +17 -0
- package/src/config/credentials.ts +302 -0
- package/src/config/defaults.ts +32 -0
- package/src/config/index.ts +10 -0
- package/src/config/loader.ts +80 -0
- package/src/config/providers.ts +133 -0
- package/src/config/types.ts +88 -0
- package/src/config/validate.ts +458 -0
- package/src/display/markdown.ts +137 -0
- package/src/display/tool-label.ts +87 -0
- package/src/event/event.ts +171 -0
- package/src/index.ts +344 -0
- package/src/input/codes.ts +21 -0
- package/src/input/commands.ts +76 -0
- package/src/input/help.ts +60 -0
- package/src/input/index.ts +10 -0
- package/src/input/parse-options.ts +66 -0
- package/src/input/parse.ts +138 -0
- package/src/input/types.ts +19 -0
- package/src/logger/elog4js.ts +366 -0
- package/src/logger/logger.ts +251 -0
- package/src/network/index.ts +6 -0
- package/src/network/openai.ts +571 -0
- package/src/network/proxy.ts +80 -0
- package/src/network/web.ts +206 -0
- package/src/platform/clipboard.ts +107 -0
- package/src/platform/exec.ts +128 -0
- package/src/platform/file.ts +235 -0
- package/src/platform/index.ts +12 -0
- package/src/platform/notification.ts +108 -0
- package/src/platform/open-external.ts +132 -0
- package/src/platform/os.ts +101 -0
- package/src/platform/path.ts +214 -0
- package/src/plugin/access-guard.ts +46 -0
- package/src/plugin/agent-service.ts +969 -0
- package/src/plugin/agent-tools.ts +43 -0
- package/src/plugin/capabilities.ts +240 -0
- package/src/plugin/console-guard.ts +66 -0
- package/src/plugin/data-access.ts +70 -0
- package/src/plugin/fs.ts +109 -0
- package/src/plugin/host-alias.ts +61 -0
- package/src/plugin/index.ts +11 -0
- package/src/plugin/install.ts +213 -0
- package/src/plugin/loader.ts +952 -0
- package/src/plugin/manage.ts +338 -0
- package/src/plugin/models-service.ts +383 -0
- package/src/plugin/network-service.ts +102 -0
- package/src/plugin/package-manager.ts +214 -0
- package/src/plugin/paths.ts +19 -0
- package/src/plugin/registry.ts +103 -0
- package/src/plugin/runtime.ts +57 -0
- package/src/plugin/scaffold.ts +158 -0
- package/src/plugin/state.ts +52 -0
- package/src/plugin/zip.ts +156 -0
- package/src/sandbox/audit.ts +38 -0
- package/src/sandbox/backends/bwrap.ts +251 -0
- package/src/sandbox/backends/direct.ts +43 -0
- package/src/sandbox/bridge-state.ts +29 -0
- package/src/sandbox/index.ts +5 -0
- package/src/sandbox/manager.ts +406 -0
- package/src/sandbox/memory-limit.ts +245 -0
- package/src/sandbox/plugin-client.ts +1881 -0
- package/src/sandbox/plugin-host.ts +1282 -0
- package/src/sandbox/protocol.ts +142 -0
- package/src/sandbox/pty-bridge.py +154 -0
- package/src/sandbox/rpc-timeouts.ts +43 -0
- package/src/sandbox/supervisor.ts +172 -0
- package/src/sandbox/types.ts +149 -0
- package/src/service/control.ts +155 -0
- package/src/session/compress.ts +47 -0
- package/src/session/index.ts +8 -0
- package/src/session/registry.ts +17 -0
- package/src/session/replay.ts +132 -0
- package/src/session/session.ts +134 -0
- package/src/session/store.ts +468 -0
- package/src/session/types.ts +61 -0
- package/src/workspace/index.ts +21 -0
- package/src/workspace/registry.ts +356 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* wellspring-http 事件协议(插件 ↔ 插件)。
|
|
3
|
+
*
|
|
4
|
+
* 平台里只有 wellspring-http 插件持有 hostApi.http,它是唯一真正监听端口的插件;
|
|
5
|
+
* 其它插件通过事件总线把「注册服务器 / 处理请求」交给它:
|
|
6
|
+
*
|
|
7
|
+
* 1. 消费者先订阅 `wellspring-http:request:<name>`,然后发布 `wellspring-http:register`
|
|
8
|
+
* 2. wellspring-http 启动服务器后向请求频道回 `ready`(或 `error`)
|
|
9
|
+
* 3. 每个 HTTP 请求变成请求频道里的 `http-request`;
|
|
10
|
+
* 消费者把响应发布到 `wellspring-http:response:<name>`
|
|
11
|
+
* 4. 流式响应先回 `http-response`(stream: true),再发 `http-chunk` / `http-end`
|
|
12
|
+
*
|
|
13
|
+
* 负载必须能 JSON 序列化:请求体、响应体都用 base64;单帧上限见 MAX_FORWARD_BODY_BYTES。
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { HttpRequest, HttpResponse, HttpTlsOptions } from "../host/http.ts"
|
|
17
|
+
|
|
18
|
+
/** 注册 / 注销频道 */
|
|
19
|
+
export const HTTP_BUS_REGISTER = "wellspring-http:register"
|
|
20
|
+
export const HTTP_BUS_UNREGISTER = "wellspring-http:unregister"
|
|
21
|
+
/** wellspring-http 每次服务器列表变化时广播,便于诊断 */
|
|
22
|
+
export const HTTP_BUS_SERVERS = "wellspring-http:servers"
|
|
23
|
+
|
|
24
|
+
/** 单次请求等待消费者响应的默认上限 */
|
|
25
|
+
export const HTTP_BUS_DEFAULT_TIMEOUT_MS = 120_000
|
|
26
|
+
/** 注册后等待 wellspring-http 回 ready / error 的上限 */
|
|
27
|
+
export const HTTP_BUS_REGISTER_TIMEOUT_MS = 10_000
|
|
28
|
+
/** WebSocket 连接等待消费者 accept 的上限 */
|
|
29
|
+
export const HTTP_BUS_WEBSOCKET_ACCEPT_TIMEOUT_MS = 10_000
|
|
30
|
+
/**
|
|
31
|
+
* 事件负载里请求/响应体的上限(原始字节)。
|
|
32
|
+
* sandbox 帧上限 4 MiB,base64 后约 1.37 倍,这里留出 JSON 包装余量。
|
|
33
|
+
*/
|
|
34
|
+
export const HTTP_BUS_MAX_BODY_BYTES = 2_621_440
|
|
35
|
+
|
|
36
|
+
const SERVER_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/
|
|
37
|
+
|
|
38
|
+
export function isValidHttpServerName(name: string): boolean {
|
|
39
|
+
return SERVER_NAME_PATTERN.test(name)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function httpRequestChannel(name: string): string {
|
|
43
|
+
return `wellspring-http:request:${name}`
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function httpResponseChannel(name: string): string {
|
|
47
|
+
return `wellspring-http:response:${name}`
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** base64 字符串对应的原始字节数(向上取整) */
|
|
51
|
+
export function base64ByteLength(value: string): number {
|
|
52
|
+
if (value === "") {
|
|
53
|
+
return 0
|
|
54
|
+
}
|
|
55
|
+
const padding = value.endsWith("==") ? 2 : value.endsWith("=") ? 1 : 0
|
|
56
|
+
return Math.floor((value.length * 3) / 4) - padding
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// ── 消费者 → wellspring-http ─────────────────────────────────
|
|
60
|
+
|
|
61
|
+
export interface HttpBusRegisterRequest {
|
|
62
|
+
/** 服务器名;请求/响应频道都用它做后缀,注册后不能重复 */
|
|
63
|
+
readonly name: string
|
|
64
|
+
/** 默认 127.0.0.1 */
|
|
65
|
+
readonly host?: string
|
|
66
|
+
/** 默认 0(随机端口) */
|
|
67
|
+
readonly port?: number
|
|
68
|
+
/** 提供时启动 HTTPS */
|
|
69
|
+
readonly tls?: HttpTlsOptions
|
|
70
|
+
/** 启用 WebSocket 转发(消费者还需要提供 websocket 处理函数) */
|
|
71
|
+
readonly websocket?: boolean
|
|
72
|
+
/** 单次请求等待上限,默认 HTTP_BUS_DEFAULT_TIMEOUT_MS */
|
|
73
|
+
readonly requestTimeoutMs?: number
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface HttpBusUnregisterRequest {
|
|
77
|
+
readonly name: string
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ── wellspring-http → 消费者(请求频道) ─────────────────────
|
|
81
|
+
|
|
82
|
+
export interface HttpBusReadyEvent {
|
|
83
|
+
readonly type: "ready"
|
|
84
|
+
readonly name: string
|
|
85
|
+
readonly host: string
|
|
86
|
+
readonly port: number
|
|
87
|
+
readonly secure: boolean
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** 启动失败 / 运行期致命错误;code 是稳定的机器可读标识 */
|
|
91
|
+
export interface HttpBusErrorEvent {
|
|
92
|
+
readonly type: "error"
|
|
93
|
+
readonly name: string
|
|
94
|
+
readonly code: string
|
|
95
|
+
readonly message: string
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface HttpBusStoppedEvent {
|
|
99
|
+
readonly type: "stopped"
|
|
100
|
+
readonly name: string
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface HttpBusRequestEvent {
|
|
104
|
+
readonly type: "http-request"
|
|
105
|
+
readonly name: string
|
|
106
|
+
readonly requestId: string
|
|
107
|
+
readonly request: HttpRequest
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** 请求已超时/客户端已断开:消费者可以停下手上的工作 */
|
|
111
|
+
export interface HttpBusRequestAbortEvent {
|
|
112
|
+
readonly type: "http-abort"
|
|
113
|
+
readonly name: string
|
|
114
|
+
readonly requestId: string
|
|
115
|
+
readonly message?: string
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface HttpBusWebSocketOpenEvent {
|
|
119
|
+
readonly type: "websocket-open"
|
|
120
|
+
readonly name: string
|
|
121
|
+
readonly connectionId: string
|
|
122
|
+
readonly request: HttpRequest
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface HttpBusWebSocketMessageEvent {
|
|
126
|
+
readonly type: "websocket-message"
|
|
127
|
+
readonly name: string
|
|
128
|
+
readonly connectionId: string
|
|
129
|
+
/** 文本消息 */
|
|
130
|
+
readonly data: string
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export interface HttpBusWebSocketCloseEvent {
|
|
134
|
+
readonly type: "websocket-close"
|
|
135
|
+
readonly name: string
|
|
136
|
+
readonly connectionId: string
|
|
137
|
+
readonly code: number
|
|
138
|
+
readonly reason: string
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export type HttpBusServerEvent =
|
|
142
|
+
| HttpBusReadyEvent
|
|
143
|
+
| HttpBusErrorEvent
|
|
144
|
+
| HttpBusStoppedEvent
|
|
145
|
+
| HttpBusRequestEvent
|
|
146
|
+
| HttpBusRequestAbortEvent
|
|
147
|
+
| HttpBusWebSocketOpenEvent
|
|
148
|
+
| HttpBusWebSocketMessageEvent
|
|
149
|
+
| HttpBusWebSocketCloseEvent
|
|
150
|
+
|
|
151
|
+
// ── 消费者 → wellspring-http(响应频道) ─────────────────────
|
|
152
|
+
|
|
153
|
+
export interface HttpBusResponseEvent {
|
|
154
|
+
readonly type: "http-response"
|
|
155
|
+
readonly name: string
|
|
156
|
+
readonly requestId: string
|
|
157
|
+
readonly response: HttpResponse
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export interface HttpBusChunkEvent {
|
|
161
|
+
readonly type: "http-chunk"
|
|
162
|
+
readonly name: string
|
|
163
|
+
readonly requestId: string
|
|
164
|
+
readonly chunk: string
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export interface HttpBusEndEvent {
|
|
168
|
+
readonly type: "http-end"
|
|
169
|
+
readonly name: string
|
|
170
|
+
readonly requestId: string
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** 消费者主动放弃这次请求:wellspring-http 回 502 */
|
|
174
|
+
export interface HttpBusAbortEvent {
|
|
175
|
+
readonly type: "http-abort"
|
|
176
|
+
readonly name: string
|
|
177
|
+
readonly requestId: string
|
|
178
|
+
readonly message?: string
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export interface HttpBusWebSocketAcceptEvent {
|
|
182
|
+
readonly type: "websocket-accept"
|
|
183
|
+
readonly name: string
|
|
184
|
+
readonly connectionId: string
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export interface HttpBusWebSocketRejectEvent {
|
|
188
|
+
readonly type: "websocket-reject"
|
|
189
|
+
readonly name: string
|
|
190
|
+
readonly connectionId: string
|
|
191
|
+
readonly code?: number
|
|
192
|
+
readonly message?: string
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export interface HttpBusWebSocketSendEvent {
|
|
196
|
+
readonly type: "websocket-send"
|
|
197
|
+
readonly name: string
|
|
198
|
+
readonly connectionId: string
|
|
199
|
+
readonly data: string
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export interface HttpBusWebSocketCloseRequest {
|
|
203
|
+
readonly type: "websocket-close"
|
|
204
|
+
readonly name: string
|
|
205
|
+
readonly connectionId: string
|
|
206
|
+
readonly code?: number
|
|
207
|
+
readonly reason?: string
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export type HttpBusClientEvent =
|
|
211
|
+
| HttpBusResponseEvent
|
|
212
|
+
| HttpBusChunkEvent
|
|
213
|
+
| HttpBusEndEvent
|
|
214
|
+
| HttpBusAbortEvent
|
|
215
|
+
| HttpBusWebSocketAcceptEvent
|
|
216
|
+
| HttpBusWebSocketRejectEvent
|
|
217
|
+
| HttpBusWebSocketSendEvent
|
|
218
|
+
| HttpBusWebSocketCloseRequest
|
|
219
|
+
|
|
220
|
+
/** wellspring-http 广播的服务器列表 */
|
|
221
|
+
export interface HttpBusServerInfo {
|
|
222
|
+
readonly name: string
|
|
223
|
+
readonly host: string
|
|
224
|
+
readonly port: number
|
|
225
|
+
readonly secure: boolean
|
|
226
|
+
readonly websocket: boolean
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export interface HttpBusServersEvent {
|
|
230
|
+
readonly servers: readonly HttpBusServerInfo[]
|
|
231
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export class Result<T = unknown> {
|
|
2
|
+
private readonly data: T | null
|
|
3
|
+
private readonly success: boolean
|
|
4
|
+
private readonly code: string | null
|
|
5
|
+
|
|
6
|
+
private constructor(data: T | null, success: boolean, code: string | null) {
|
|
7
|
+
if (!success && code == null) throw new Error("当 success === false 时,code 不允许为 null")
|
|
8
|
+
this.data = data
|
|
9
|
+
this.success = success
|
|
10
|
+
this.code = code
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public getData(): T | null {
|
|
14
|
+
return this.data
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public isSuccess(): boolean {
|
|
18
|
+
return this.success
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public getCode(): string | null {
|
|
22
|
+
return this.code
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public static of<T>(data: T | null, success: boolean, code: string | null): Result<T> {
|
|
26
|
+
return new Result<T>(data, success, code)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public static success<T = void>(): Result<T> {
|
|
30
|
+
return Result.of<T>(null, true, null)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public static successWithCode<T = void>(code: string | null): Result<T> {
|
|
34
|
+
return Result.of<T>(null, true, code)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public static successWithData<T>(data: T | null): Result<T> {
|
|
38
|
+
return Result.of<T>(data, true, null)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public static successWithDataAndCode<T>(data: T | null, code: string | null): Result<T> {
|
|
42
|
+
return Result.of<T>(data, true, code)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public static error<T = void>(code: string): Result<T> {
|
|
46
|
+
return Result.of<T>(null, false, code)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
public static errorWithData<T>(data: T | null, code: string): Result<T> {
|
|
50
|
+
return Result.of<T>(data, false, code)
|
|
51
|
+
}
|
|
52
|
+
}
|