@chozzz/vargos 3.1.4 → 3.2.1
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/CONTRIBUTING.md +2 -3
- package/README.md +25 -34
- package/dist/.templates/agent/skills/skill-creator/SKILL.md +204 -32
- package/dist/.templates/workspace/AGENTS.md +32 -0
- package/dist/boot.d.ts +5 -0
- package/dist/boot.d.ts.map +1 -1
- package/dist/boot.js +62 -87
- package/dist/boot.js.map +1 -1
- package/dist/cli/channels.d.ts +11 -17
- package/dist/cli/channels.d.ts.map +1 -1
- package/dist/cli/channels.js +25 -76
- package/dist/cli/channels.js.map +1 -1
- package/dist/cli/chat.d.ts +6 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +49 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/onboard.d.ts.map +1 -1
- package/dist/cli/onboard.js +2 -8
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli.d.ts +9 -7
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +206 -264
- package/dist/cli.js.map +1 -1
- package/dist/core/bus.d.ts +32 -0
- package/dist/core/bus.d.ts.map +1 -0
- package/dist/core/bus.js +133 -0
- package/dist/core/bus.js.map +1 -0
- package/dist/core/cli.d.ts +38 -0
- package/dist/core/cli.d.ts.map +1 -0
- package/dist/core/cli.js +199 -0
- package/dist/core/cli.js.map +1 -0
- package/dist/core/errors.d.ts +21 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +30 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/loader.d.ts +31 -0
- package/dist/core/loader.d.ts.map +1 -0
- package/dist/core/loader.js +73 -0
- package/dist/core/loader.js.map +1 -0
- package/dist/core/local.d.ts +12 -0
- package/dist/core/local.d.ts.map +1 -0
- package/dist/core/local.js +23 -0
- package/dist/core/local.js.map +1 -0
- package/dist/core/rpc-server.d.ts +11 -0
- package/dist/core/rpc-server.d.ts.map +1 -0
- package/dist/core/rpc-server.js +69 -0
- package/dist/core/rpc-server.js.map +1 -0
- package/dist/core/services.d.ts +8 -0
- package/dist/core/services.d.ts.map +1 -0
- package/dist/core/services.js +33 -0
- package/dist/core/services.js.map +1 -0
- package/dist/core/types.d.ts +63 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/edge/mcp/index.d.ts +11 -11
- package/dist/edge/mcp/index.d.ts.map +1 -1
- package/dist/edge/mcp/index.js +24 -28
- package/dist/edge/mcp/index.js.map +1 -1
- package/dist/edge/webhooks/index.d.ts +8 -14
- package/dist/edge/webhooks/index.d.ts.map +1 -1
- package/dist/edge/webhooks/index.js +140 -194
- package/dist/edge/webhooks/index.js.map +1 -1
- package/dist/lib/logger.d.ts +2 -3
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +1 -1
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/paginate.d.ts +5 -1
- package/dist/lib/paginate.d.ts.map +1 -1
- package/dist/lib/retry.js +1 -1
- package/dist/lib/retry.js.map +1 -1
- package/dist/lib/util.d.ts +16 -0
- package/dist/lib/util.d.ts.map +1 -0
- package/dist/lib/util.js +63 -0
- package/dist/lib/util.js.map +1 -0
- package/dist/scripts/verify-core.d.ts +8 -0
- package/dist/scripts/verify-core.d.ts.map +1 -0
- package/dist/scripts/verify-core.js +191 -0
- package/dist/scripts/verify-core.js.map +1 -0
- package/dist/services/agent/directives.d.ts +2 -0
- package/dist/services/agent/directives.d.ts.map +1 -1
- package/dist/services/agent/directives.js +16 -1
- package/dist/services/agent/directives.js.map +1 -1
- package/dist/services/agent/index.d.ts +34 -21
- package/dist/services/agent/index.d.ts.map +1 -1
- package/dist/services/agent/index.js +470 -468
- package/dist/services/agent/index.js.map +1 -1
- package/dist/services/agent/tools.d.ts +3 -3
- package/dist/services/agent/tools.d.ts.map +1 -1
- package/dist/services/agent/tools.js +11 -19
- package/dist/services/agent/tools.js.map +1 -1
- package/dist/services/agent/types.d.ts +1 -1
- package/dist/services/agent/types.d.ts.map +1 -1
- package/dist/services/{channels → channel}/base-adapter.d.ts +5 -6
- package/dist/services/channel/base-adapter.d.ts.map +1 -0
- package/dist/services/channel/base-adapter.js.map +1 -0
- package/dist/services/channel/debounce.d.ts.map +1 -0
- package/dist/services/channel/debounce.js.map +1 -0
- package/dist/services/channel/dedupe.d.ts.map +1 -0
- package/dist/services/channel/dedupe.js.map +1 -0
- package/dist/services/channel/delivery.d.ts.map +1 -0
- package/dist/services/{channels → channel}/delivery.js +1 -1
- package/dist/services/channel/delivery.js.map +1 -0
- package/dist/services/{channels → channel}/index.d.ts +14 -17
- package/dist/services/channel/index.d.ts.map +1 -0
- package/dist/services/channel/index.js +354 -0
- package/dist/services/channel/index.js.map +1 -0
- package/dist/services/channel/link-expand.d.ts.map +1 -0
- package/dist/services/channel/link-expand.js.map +1 -0
- package/dist/services/channel/media-paths.d.ts.map +1 -0
- package/dist/services/channel/media-paths.js.map +1 -0
- package/dist/services/{channels → channel}/pipeline.d.ts +1 -1
- package/dist/services/channel/pipeline.d.ts.map +1 -0
- package/dist/services/channel/pipeline.js.map +1 -0
- package/dist/services/channel/provider-loader.d.ts.map +1 -0
- package/dist/services/channel/provider-loader.js.map +1 -0
- package/dist/services/channel/providers/telegram/adapter.d.ts.map +1 -0
- package/dist/services/{channels → channel}/providers/telegram/adapter.js +1 -1
- package/dist/services/channel/providers/telegram/adapter.js.map +1 -0
- package/dist/services/channel/providers/telegram/index.d.ts.map +1 -0
- package/dist/services/channel/providers/telegram/index.js.map +1 -0
- package/dist/services/channel/providers/telegram/normalizer.d.ts.map +1 -0
- package/dist/services/channel/providers/telegram/normalizer.js.map +1 -0
- package/dist/services/channel/providers/telegram/types.d.ts.map +1 -0
- package/dist/services/channel/providers/telegram/types.js.map +1 -0
- package/dist/services/channel/providers/whatsapp/adapter.d.ts.map +1 -0
- package/dist/services/channel/providers/whatsapp/adapter.js.map +1 -0
- package/dist/services/channel/providers/whatsapp/index.d.ts.map +1 -0
- package/dist/services/channel/providers/whatsapp/index.js.map +1 -0
- package/dist/services/channel/providers/whatsapp/normalizer.d.ts.map +1 -0
- package/dist/services/channel/providers/whatsapp/normalizer.js.map +1 -0
- package/dist/services/channel/providers/whatsapp/session.d.ts.map +1 -0
- package/dist/services/channel/providers/whatsapp/session.js.map +1 -0
- package/dist/services/channel/providers/whatsapp/types.d.ts.map +1 -0
- package/dist/services/channel/providers/whatsapp/types.js.map +1 -0
- package/dist/services/channel/reconnect.d.ts.map +1 -0
- package/dist/services/channel/reconnect.js.map +1 -0
- package/dist/services/channel/status-reactions.d.ts.map +1 -0
- package/dist/services/channel/status-reactions.js.map +1 -0
- package/dist/services/{channels → channel}/types.d.ts +1 -1
- package/dist/services/channel/types.d.ts.map +1 -0
- package/dist/services/channel/types.js.map +1 -0
- package/dist/services/channel/typing-state.d.ts.map +1 -0
- package/dist/services/channel/typing-state.js.map +1 -0
- package/dist/services/config/index.d.ts +45 -46
- package/dist/services/config/index.d.ts.map +1 -1
- package/dist/services/config/index.js +89 -182
- package/dist/services/config/index.js.map +1 -1
- package/dist/services/config/schemas/cron.d.ts +3 -3
- package/dist/services/config/schemas/providers.d.ts +12 -12
- package/dist/services/config/schemas/webhooks.d.ts +2 -2
- package/dist/services/cron/index.d.ts +16 -19
- package/dist/services/cron/index.d.ts.map +1 -1
- package/dist/services/cron/index.js +340 -396
- package/dist/services/cron/index.js.map +1 -1
- package/dist/services/log/index.d.ts +9 -8
- package/dist/services/log/index.d.ts.map +1 -1
- package/dist/services/log/index.js +71 -123
- package/dist/services/log/index.js.map +1 -1
- package/dist/services/{mcp-client → mcp}/index.d.ts +9 -11
- package/dist/services/mcp/index.d.ts.map +1 -0
- package/dist/services/{mcp-client → mcp}/index.js +19 -35
- package/dist/services/mcp/index.js.map +1 -0
- package/dist/services/media/index.d.ts +9 -13
- package/dist/services/media/index.d.ts.map +1 -1
- package/dist/services/media/index.js +53 -105
- package/dist/services/media/index.js.map +1 -1
- package/dist/services/memory/index.d.ts +12 -18
- package/dist/services/memory/index.d.ts.map +1 -1
- package/dist/services/memory/index.js +70 -132
- package/dist/services/memory/index.js.map +1 -1
- package/dist/services/web/index.d.ts +7 -7
- package/dist/services/web/index.d.ts.map +1 -1
- package/dist/services/web/index.js +41 -86
- package/dist/services/web/index.js.map +1 -1
- package/package.json +3 -2
- package/dist/gateway/bus.d.ts +0 -50
- package/dist/gateway/bus.d.ts.map +0 -1
- package/dist/gateway/bus.js +0 -2
- package/dist/gateway/bus.js.map +0 -1
- package/dist/gateway/decorators.d.ts +0 -40
- package/dist/gateway/decorators.d.ts.map +0 -1
- package/dist/gateway/decorators.js +0 -43
- package/dist/gateway/decorators.js.map +0 -1
- package/dist/gateway/emitter.d.ts +0 -52
- package/dist/gateway/emitter.d.ts.map +0 -1
- package/dist/gateway/emitter.js +0 -304
- package/dist/gateway/emitter.js.map +0 -1
- package/dist/gateway/events.d.ts +0 -314
- package/dist/gateway/events.d.ts.map +0 -1
- package/dist/gateway/events.js +0 -7
- package/dist/gateway/events.js.map +0 -1
- package/dist/gateway/tcp-server.d.ts +0 -7
- package/dist/gateway/tcp-server.d.ts.map +0 -1
- package/dist/gateway/tcp-server.js +0 -118
- package/dist/gateway/tcp-server.js.map +0 -1
- package/dist/lib/id.d.ts +0 -3
- package/dist/lib/id.d.ts.map +0 -1
- package/dist/lib/id.js +0 -5
- package/dist/lib/id.js.map +0 -1
- package/dist/lib/sleep.d.ts +0 -6
- package/dist/lib/sleep.d.ts.map +0 -1
- package/dist/lib/sleep.js +0 -22
- package/dist/lib/sleep.js.map +0 -1
- package/dist/lib/strip-markdown.d.ts +0 -7
- package/dist/lib/strip-markdown.d.ts.map +0 -1
- package/dist/lib/strip-markdown.js +0 -32
- package/dist/lib/strip-markdown.js.map +0 -1
- package/dist/lib/timeout.d.ts +0 -6
- package/dist/lib/timeout.d.ts.map +0 -1
- package/dist/lib/timeout.js +0 -11
- package/dist/lib/timeout.js.map +0 -1
- package/dist/lib/truncate.d.ts +0 -11
- package/dist/lib/truncate.d.ts.map +0 -1
- package/dist/lib/truncate.js +0 -17
- package/dist/lib/truncate.js.map +0 -1
- package/dist/services/channels/base-adapter.d.ts.map +0 -1
- package/dist/services/channels/base-adapter.js.map +0 -1
- package/dist/services/channels/debounce.d.ts.map +0 -1
- package/dist/services/channels/debounce.js.map +0 -1
- package/dist/services/channels/dedupe.d.ts.map +0 -1
- package/dist/services/channels/dedupe.js.map +0 -1
- package/dist/services/channels/delivery.d.ts.map +0 -1
- package/dist/services/channels/delivery.js.map +0 -1
- package/dist/services/channels/index.d.ts.map +0 -1
- package/dist/services/channels/index.js +0 -413
- package/dist/services/channels/index.js.map +0 -1
- package/dist/services/channels/link-expand.d.ts.map +0 -1
- package/dist/services/channels/link-expand.js.map +0 -1
- package/dist/services/channels/media-paths.d.ts.map +0 -1
- package/dist/services/channels/media-paths.js.map +0 -1
- package/dist/services/channels/pipeline.d.ts.map +0 -1
- package/dist/services/channels/pipeline.js.map +0 -1
- package/dist/services/channels/provider-loader.d.ts.map +0 -1
- package/dist/services/channels/provider-loader.js.map +0 -1
- package/dist/services/channels/providers/telegram/adapter.d.ts.map +0 -1
- package/dist/services/channels/providers/telegram/adapter.js.map +0 -1
- package/dist/services/channels/providers/telegram/index.d.ts.map +0 -1
- package/dist/services/channels/providers/telegram/index.js.map +0 -1
- package/dist/services/channels/providers/telegram/normalizer.d.ts.map +0 -1
- package/dist/services/channels/providers/telegram/normalizer.js.map +0 -1
- package/dist/services/channels/providers/telegram/types.d.ts.map +0 -1
- package/dist/services/channels/providers/telegram/types.js.map +0 -1
- package/dist/services/channels/providers/whatsapp/adapter.d.ts.map +0 -1
- package/dist/services/channels/providers/whatsapp/adapter.js.map +0 -1
- package/dist/services/channels/providers/whatsapp/index.d.ts.map +0 -1
- package/dist/services/channels/providers/whatsapp/index.js.map +0 -1
- package/dist/services/channels/providers/whatsapp/normalizer.d.ts.map +0 -1
- package/dist/services/channels/providers/whatsapp/normalizer.js.map +0 -1
- package/dist/services/channels/providers/whatsapp/session.d.ts.map +0 -1
- package/dist/services/channels/providers/whatsapp/session.js.map +0 -1
- package/dist/services/channels/providers/whatsapp/types.d.ts.map +0 -1
- package/dist/services/channels/providers/whatsapp/types.js.map +0 -1
- package/dist/services/channels/reconnect.d.ts.map +0 -1
- package/dist/services/channels/reconnect.js.map +0 -1
- package/dist/services/channels/status-reactions.d.ts.map +0 -1
- package/dist/services/channels/status-reactions.js.map +0 -1
- package/dist/services/channels/types.d.ts.map +0 -1
- package/dist/services/channels/types.js.map +0 -1
- package/dist/services/channels/typing-state.d.ts.map +0 -1
- package/dist/services/channels/typing-state.js.map +0 -1
- package/dist/services/mcp-client/index.d.ts.map +0 -1
- package/dist/services/mcp-client/index.js.map +0 -1
- /package/dist/services/{channels → channel}/base-adapter.js +0 -0
- /package/dist/services/{channels → channel}/debounce.d.ts +0 -0
- /package/dist/services/{channels → channel}/debounce.js +0 -0
- /package/dist/services/{channels → channel}/dedupe.d.ts +0 -0
- /package/dist/services/{channels → channel}/dedupe.js +0 -0
- /package/dist/services/{channels → channel}/delivery.d.ts +0 -0
- /package/dist/services/{channels → channel}/link-expand.d.ts +0 -0
- /package/dist/services/{channels → channel}/link-expand.js +0 -0
- /package/dist/services/{channels → channel}/media-paths.d.ts +0 -0
- /package/dist/services/{channels → channel}/media-paths.js +0 -0
- /package/dist/services/{channels → channel}/pipeline.js +0 -0
- /package/dist/services/{channels → channel}/provider-loader.d.ts +0 -0
- /package/dist/services/{channels → channel}/provider-loader.js +0 -0
- /package/dist/services/{channels → channel}/providers/telegram/adapter.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/telegram/index.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/telegram/index.js +0 -0
- /package/dist/services/{channels → channel}/providers/telegram/normalizer.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/telegram/normalizer.js +0 -0
- /package/dist/services/{channels → channel}/providers/telegram/types.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/telegram/types.js +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/adapter.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/adapter.js +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/index.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/index.js +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/normalizer.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/normalizer.js +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/session.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/session.js +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/types.d.ts +0 -0
- /package/dist/services/{channels → channel}/providers/whatsapp/types.js +0 -0
- /package/dist/services/{channels → channel}/reconnect.d.ts +0 -0
- /package/dist/services/{channels → channel}/reconnect.js +0 -0
- /package/dist/services/{channels → channel}/status-reactions.d.ts +0 -0
- /package/dist/services/{channels → channel}/status-reactions.js +0 -0
- /package/dist/services/{channels → channel}/types.js +0 -0
- /package/dist/services/{channels → channel}/typing-state.d.ts +0 -0
- /package/dist/services/{channels → channel}/typing-state.js +0 -0
package/dist/core/bus.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Bus — the single owner of the method registry and the only wrapper for all
|
|
3
|
+
* services. `register`/`unregister`/`call`/`emit`/`on` and the registry projection
|
|
4
|
+
* consumed by all three surfaces (CLI, agent tools, JSON-RPC) live here.
|
|
5
|
+
*
|
|
6
|
+
* Two distinct concepts, deliberately not conflated:
|
|
7
|
+
* - Methods (registry): register / call. Validated by zod. Surfaced everywhere.
|
|
8
|
+
* - Events (pub/sub): emit / on. Unvalidated broadcast. emit with no listeners
|
|
9
|
+
* is a silent no-op.
|
|
10
|
+
*/
|
|
11
|
+
import EventEmitter from 'node:events';
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
14
|
+
import { MethodNotFoundError, ValidationError } from './errors.js';
|
|
15
|
+
export class EmitterBus {
|
|
16
|
+
registry = new Map();
|
|
17
|
+
ee = new EventEmitter();
|
|
18
|
+
wiring = new Map();
|
|
19
|
+
/** Set by the loader around a service's init() so register/on attribute correctly. */
|
|
20
|
+
loadingService = null;
|
|
21
|
+
constructor() {
|
|
22
|
+
this.ee.setMaxListeners(0); // a long-lived server has many legitimate listeners
|
|
23
|
+
this.registerIntrospection();
|
|
24
|
+
}
|
|
25
|
+
// ── Loader hook ────────────────────────────────────────────────────────────────
|
|
26
|
+
// The loader brackets a service's (async) init() with beginLoading/endLoading so
|
|
27
|
+
// every register()/on() it does is attributed to that service. Services never load
|
|
28
|
+
// concurrently, so loadingService stays correct across awaits inside init().
|
|
29
|
+
beginLoading(service) {
|
|
30
|
+
this.loadingService = service;
|
|
31
|
+
if (!this.wiring.has(service))
|
|
32
|
+
this.wiring.set(service, { methods: new Set(), offs: [] });
|
|
33
|
+
}
|
|
34
|
+
endLoading() {
|
|
35
|
+
this.loadingService = null;
|
|
36
|
+
}
|
|
37
|
+
/** Release everything the bus wired for a service (methods + event listeners). */
|
|
38
|
+
releaseService(service) {
|
|
39
|
+
const w = this.wiring.get(service);
|
|
40
|
+
if (!w)
|
|
41
|
+
return;
|
|
42
|
+
for (const off of w.offs)
|
|
43
|
+
off();
|
|
44
|
+
for (const name of w.methods)
|
|
45
|
+
this.registry.delete(name);
|
|
46
|
+
this.wiring.delete(service);
|
|
47
|
+
}
|
|
48
|
+
// ── Registry ────────────────────────────────────────────────────────────────────
|
|
49
|
+
register(name, opts, handler) {
|
|
50
|
+
if (this.registry.has(name)) {
|
|
51
|
+
throw new Error(`Method already registered: ${name}`);
|
|
52
|
+
}
|
|
53
|
+
const service = this.loadingService ?? name.split('.')[0];
|
|
54
|
+
this.registry.set(name, { name, service, handler, ...opts, internal: opts.internal ?? false });
|
|
55
|
+
this.wiring.get(service)?.methods.add(name);
|
|
56
|
+
return () => this.unregister(name);
|
|
57
|
+
}
|
|
58
|
+
unregister(name) {
|
|
59
|
+
const entry = this.registry.get(name);
|
|
60
|
+
if (!entry)
|
|
61
|
+
return false;
|
|
62
|
+
this.registry.delete(name);
|
|
63
|
+
this.wiring.get(entry.service)?.methods.delete(name);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
has(name) {
|
|
67
|
+
return this.registry.has(name);
|
|
68
|
+
}
|
|
69
|
+
async call(name, params) {
|
|
70
|
+
const entry = this.registry.get(name);
|
|
71
|
+
if (!entry)
|
|
72
|
+
throw new MethodNotFoundError(name);
|
|
73
|
+
const parsed = entry.schema.safeParse(params ?? {});
|
|
74
|
+
if (!parsed.success)
|
|
75
|
+
throw new ValidationError(name, parsed.error);
|
|
76
|
+
return await entry.handler(parsed.data);
|
|
77
|
+
}
|
|
78
|
+
list(service) {
|
|
79
|
+
const out = [];
|
|
80
|
+
for (const e of this.registry.values()) {
|
|
81
|
+
if (service && e.service !== service)
|
|
82
|
+
continue;
|
|
83
|
+
out.push({
|
|
84
|
+
name: e.name,
|
|
85
|
+
service: e.service,
|
|
86
|
+
description: e.description,
|
|
87
|
+
cli: e.cli,
|
|
88
|
+
internal: e.internal ?? false,
|
|
89
|
+
schema: toJsonSchema(e.schema),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
// ── Events (pub/sub) ──────────────────────────────────────────────────────────
|
|
95
|
+
emit(event, payload) {
|
|
96
|
+
this.ee.emit(event, payload); // no listeners → no-op
|
|
97
|
+
}
|
|
98
|
+
on(event, handler) {
|
|
99
|
+
const fn = handler;
|
|
100
|
+
this.ee.on(event, fn);
|
|
101
|
+
const off = () => this.ee.off(event, fn);
|
|
102
|
+
if (this.loadingService)
|
|
103
|
+
this.wiring.get(this.loadingService)?.offs.push(off);
|
|
104
|
+
return off;
|
|
105
|
+
}
|
|
106
|
+
// ── Built-in introspection (the registry describing itself) ─────────────────────
|
|
107
|
+
registerIntrospection() {
|
|
108
|
+
this.beginLoading('bus');
|
|
109
|
+
this.register('bus.list', {
|
|
110
|
+
description: 'List registered methods, optionally scoped to one service. Source of truth for all three surfaces.',
|
|
111
|
+
schema: z.object({ service: z.string().optional() }),
|
|
112
|
+
cli: { positional: ['service'] },
|
|
113
|
+
internal: true,
|
|
114
|
+
}, (p) => this.list(p.service));
|
|
115
|
+
this.register('bus.has', {
|
|
116
|
+
description: 'Check whether a method is registered.',
|
|
117
|
+
schema: z.object({ method: z.string() }),
|
|
118
|
+
cli: { positional: ['method'] },
|
|
119
|
+
internal: true,
|
|
120
|
+
}, (p) => ({ registered: this.has(p.method) }));
|
|
121
|
+
this.endLoading();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/** Convert a zod schema to JSON Schema, swallowing conversion failures. */
|
|
125
|
+
function toJsonSchema(schema) {
|
|
126
|
+
try {
|
|
127
|
+
return zodToJsonSchema(schema);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return {};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../core/bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI projection (surface 1). Pure helpers that turn the registry (MethodInfo[])
|
|
3
|
+
* into listings, --help text, and a params object — plus a minimal JSON-RPC client
|
|
4
|
+
* for proxying to a running daemon. Nothing here is hand-written per command; it all
|
|
5
|
+
* derives from the registry.
|
|
6
|
+
*/
|
|
7
|
+
import type { MethodInfo } from './types.js';
|
|
8
|
+
export interface ParsedCli {
|
|
9
|
+
service?: string;
|
|
10
|
+
method?: string;
|
|
11
|
+
args: string[];
|
|
12
|
+
help: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** Parse `vargos <service> [method] [args...] [--help]`. Returns reserved=true for built-in commands. */
|
|
15
|
+
export declare function parseCli(argv: string[]): ParsedCli & {
|
|
16
|
+
reserved: boolean;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Build a params object from CLI args using the method's cli.positional order and
|
|
20
|
+
* schema. Positionals map 1:1 to keys; `--flag value` and bare `--flag` (boolean)
|
|
21
|
+
* are named overrides. Too many positionals → usage error (caller catches).
|
|
22
|
+
* Missing required fields are left out so zod reports them identically on all surfaces.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildParams(info: MethodInfo, args: string[]): Record<string, unknown>;
|
|
25
|
+
/** `vargos <service>` — list that service's method names. */
|
|
26
|
+
export declare function renderList(service: string, infos: MethodInfo[]): string;
|
|
27
|
+
/** `vargos <service> --help` — usage line, wrapped description, and options per method. */
|
|
28
|
+
export declare function renderHelp(service: string, infos: MethodInfo[]): string;
|
|
29
|
+
export declare class RpcClient {
|
|
30
|
+
private readonly host;
|
|
31
|
+
private readonly port;
|
|
32
|
+
constructor(host: string, port: number);
|
|
33
|
+
/** One request/response over a fresh connection. Rejects on connect failure. */
|
|
34
|
+
call<T = unknown>(method: string, params?: unknown, connectTimeoutMs?: number): Promise<T>;
|
|
35
|
+
/** Is a daemon answering on the port? */
|
|
36
|
+
isUp(): Promise<boolean>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../core/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAID,yGAAyG;AACzG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAW1E;AAiBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BrF;AA2CD,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAKvE;AAED,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAavE;AAID,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAU,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAnC,IAAI,EAAE,MAAM,EAAmB,IAAI,EAAE,MAAM;IAExE,gFAAgF;IAChF,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,gBAAgB,SAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IA8BxF,yCAAyC;IACnC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;CAQ/B"}
|
package/dist/core/cli.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI projection (surface 1). Pure helpers that turn the registry (MethodInfo[])
|
|
3
|
+
* into listings, --help text, and a params object — plus a minimal JSON-RPC client
|
|
4
|
+
* for proxying to a running daemon. Nothing here is hand-written per command; it all
|
|
5
|
+
* derives from the registry.
|
|
6
|
+
*/
|
|
7
|
+
import { createConnection } from 'node:net';
|
|
8
|
+
const RESERVED = new Set(['start', 'onboard', 'chat', 'sync', 'migrate', '--help', '-h', '--version', '-v']);
|
|
9
|
+
/** Parse `vargos <service> [method] [args...] [--help]`. Returns reserved=true for built-in commands. */
|
|
10
|
+
export function parseCli(argv) {
|
|
11
|
+
const help = argv.includes('--help') || argv.includes('-h');
|
|
12
|
+
const rest = argv.filter(a => a !== '--help' && a !== '-h');
|
|
13
|
+
const service = rest[0];
|
|
14
|
+
return {
|
|
15
|
+
reserved: !!service && RESERVED.has(service),
|
|
16
|
+
service,
|
|
17
|
+
method: rest[1],
|
|
18
|
+
args: rest.slice(2),
|
|
19
|
+
help,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function coerce(prop, value) {
|
|
23
|
+
if (typeof value === 'boolean')
|
|
24
|
+
return value;
|
|
25
|
+
const t = prop?.type;
|
|
26
|
+
if (t === 'number' || t === 'integer') {
|
|
27
|
+
const n = Number(value);
|
|
28
|
+
return Number.isNaN(n) ? value : n;
|
|
29
|
+
}
|
|
30
|
+
if (t === 'boolean')
|
|
31
|
+
return value === 'true';
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build a params object from CLI args using the method's cli.positional order and
|
|
36
|
+
* schema. Positionals map 1:1 to keys; `--flag value` and bare `--flag` (boolean)
|
|
37
|
+
* are named overrides. Too many positionals → usage error (caller catches).
|
|
38
|
+
* Missing required fields are left out so zod reports them identically on all surfaces.
|
|
39
|
+
*/
|
|
40
|
+
export function buildParams(info, args) {
|
|
41
|
+
const schema = (info.schema ?? {});
|
|
42
|
+
const props = schema.properties ?? {};
|
|
43
|
+
const positionalKeys = info.cli?.positional ?? [];
|
|
44
|
+
const positionals = [];
|
|
45
|
+
const named = {};
|
|
46
|
+
for (let i = 0; i < args.length; i++) {
|
|
47
|
+
const a = args[i];
|
|
48
|
+
if (a.startsWith('--')) {
|
|
49
|
+
const key = a.slice(2);
|
|
50
|
+
const next = args[i + 1];
|
|
51
|
+
if (next === undefined || next.startsWith('--')) {
|
|
52
|
+
named[key] = true;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
named[key] = next;
|
|
56
|
+
i++;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
positionals.push(a);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (positionals.length > positionalKeys.length) {
|
|
64
|
+
const shape = positionalKeys.length ? positionalKeys.map(k => `<${k}>`).join(' ') : '(named flags only)';
|
|
65
|
+
throw new Error(`too many arguments for ${info.name}. Usage: ${info.service} ${info.name.split('.').slice(1).join('.')} ${shape}`);
|
|
66
|
+
}
|
|
67
|
+
const out = {};
|
|
68
|
+
positionalKeys.forEach((key, idx) => {
|
|
69
|
+
if (positionals[idx] !== undefined)
|
|
70
|
+
out[key] = coerce(props[key], positionals[idx]);
|
|
71
|
+
});
|
|
72
|
+
for (const [k, v] of Object.entries(named))
|
|
73
|
+
out[k] = coerce(props[k], v);
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
// ─── rendering ───────────────────────────────────────────────────────────────────
|
|
77
|
+
function shortMethod(info) {
|
|
78
|
+
return info.name.includes('.') ? info.name.split('.').slice(1).join('.') : info.name;
|
|
79
|
+
}
|
|
80
|
+
/** Positional args in cli.positional order: `<key>` required, `[<key>]` optional. */
|
|
81
|
+
function positionalUsage(info) {
|
|
82
|
+
const required = new Set((info.schema ?? {}).required ?? []);
|
|
83
|
+
return (info.cli?.positional ?? [])
|
|
84
|
+
.map(k => (required.has(k) ? `<${k}>` : `[<${k}>]`))
|
|
85
|
+
.join(' ');
|
|
86
|
+
}
|
|
87
|
+
/** Named flags (schema keys not consumed positionally): `--k <type>` / `[--k]` etc. */
|
|
88
|
+
function namedFlags(info) {
|
|
89
|
+
const schema = (info.schema ?? {});
|
|
90
|
+
const props = schema.properties ?? {};
|
|
91
|
+
const required = new Set(schema.required ?? []);
|
|
92
|
+
const positional = new Set(info.cli?.positional ?? []);
|
|
93
|
+
const out = [];
|
|
94
|
+
for (const [key, p] of Object.entries(props)) {
|
|
95
|
+
if (positional.has(key))
|
|
96
|
+
continue;
|
|
97
|
+
const token = p.type === 'boolean' ? `--${key}` : `--${key} <${p.type ?? 'value'}>`;
|
|
98
|
+
out.push(required.has(key) ? token : `[${token}]`);
|
|
99
|
+
}
|
|
100
|
+
return out;
|
|
101
|
+
}
|
|
102
|
+
/** Word-wrap to `width`, continuation lines prefixed with `indent`. */
|
|
103
|
+
function wrap(text, width, indent) {
|
|
104
|
+
const lines = [];
|
|
105
|
+
let line = '';
|
|
106
|
+
for (const word of text.split(/\s+/)) {
|
|
107
|
+
if (line && (line + ' ' + word).length > width) {
|
|
108
|
+
lines.push(line);
|
|
109
|
+
line = word;
|
|
110
|
+
}
|
|
111
|
+
else
|
|
112
|
+
line = line ? `${line} ${word}` : word;
|
|
113
|
+
}
|
|
114
|
+
if (line)
|
|
115
|
+
lines.push(line);
|
|
116
|
+
return lines.join('\n' + indent);
|
|
117
|
+
}
|
|
118
|
+
/** `vargos <service>` — list that service's method names. */
|
|
119
|
+
export function renderList(service, infos) {
|
|
120
|
+
if (infos.length === 0)
|
|
121
|
+
return `No methods registered for "${service}".`;
|
|
122
|
+
const width = Math.max(...infos.map(i => shortMethod(i).length));
|
|
123
|
+
const lines = infos.map(i => ` ${service} ${shortMethod(i).padEnd(width)} ${i.description.split('. ')[0]}`);
|
|
124
|
+
return `${service} — ${infos.length} method${infos.length === 1 ? '' : 's'}\n\n${lines.join('\n')}`;
|
|
125
|
+
}
|
|
126
|
+
/** `vargos <service> --help` — usage line, wrapped description, and options per method. */
|
|
127
|
+
export function renderHelp(service, infos) {
|
|
128
|
+
if (infos.length === 0)
|
|
129
|
+
return `No methods registered for "${service}".`;
|
|
130
|
+
const DESC = ' ';
|
|
131
|
+
const OPTS = ' options: ';
|
|
132
|
+
const blocks = infos.map(i => {
|
|
133
|
+
const pos = positionalUsage(i);
|
|
134
|
+
const out = [` ${service} ${shortMethod(i)}${pos ? ' ' + pos : ''}`];
|
|
135
|
+
out.push(`${DESC}${wrap(i.description, 72, DESC)}`);
|
|
136
|
+
const flags = namedFlags(i);
|
|
137
|
+
if (flags.length)
|
|
138
|
+
out.push(`${OPTS}${wrap(flags.join(' '), 64, ' '.repeat(OPTS.length))}`);
|
|
139
|
+
return out.join('\n');
|
|
140
|
+
});
|
|
141
|
+
return `${service} — ${infos.length} method${infos.length === 1 ? '' : 's'}\n\n${blocks.join('\n\n')}`;
|
|
142
|
+
}
|
|
143
|
+
// ─── JSON-RPC client ─────────────────────────────────────────────────────────────
|
|
144
|
+
export class RpcClient {
|
|
145
|
+
host;
|
|
146
|
+
port;
|
|
147
|
+
constructor(host, port) {
|
|
148
|
+
this.host = host;
|
|
149
|
+
this.port = port;
|
|
150
|
+
}
|
|
151
|
+
/** One request/response over a fresh connection. Rejects on connect failure. */
|
|
152
|
+
call(method, params, connectTimeoutMs = 2000) {
|
|
153
|
+
return new Promise((resolve, reject) => {
|
|
154
|
+
const socket = createConnection({ host: this.host, port: this.port });
|
|
155
|
+
let buffer = '';
|
|
156
|
+
let settled = false;
|
|
157
|
+
const fail = (err) => { if (!settled) {
|
|
158
|
+
settled = true;
|
|
159
|
+
socket.destroy();
|
|
160
|
+
reject(err);
|
|
161
|
+
} };
|
|
162
|
+
socket.setTimeout(connectTimeoutMs, () => fail(new Error('daemon connect timeout')));
|
|
163
|
+
socket.on('connect', () => {
|
|
164
|
+
socket.setTimeout(0); // no idle limit once connected; long calls (agent) are allowed
|
|
165
|
+
socket.write(JSON.stringify({ jsonrpc: '2.0', method, params, id: 1 }) + '\n');
|
|
166
|
+
});
|
|
167
|
+
socket.on('error', (err) => fail(err));
|
|
168
|
+
socket.on('data', (chunk) => {
|
|
169
|
+
buffer += chunk.toString();
|
|
170
|
+
const nl = buffer.indexOf('\n');
|
|
171
|
+
if (nl === -1)
|
|
172
|
+
return;
|
|
173
|
+
settled = true;
|
|
174
|
+
socket.end();
|
|
175
|
+
try {
|
|
176
|
+
const res = JSON.parse(buffer.slice(0, nl));
|
|
177
|
+
if (res.error)
|
|
178
|
+
reject(new Error(res.error.message ?? 'rpc error'));
|
|
179
|
+
else
|
|
180
|
+
resolve(res.result);
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/** Is a daemon answering on the port? */
|
|
189
|
+
async isUp() {
|
|
190
|
+
try {
|
|
191
|
+
await this.call('bus.has', { method: 'bus.list' }, 1000);
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../core/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured bus errors. JSON-RPC error codes are attached so the RPC surface can
|
|
3
|
+
* map them without re-classifying — every surface (CLI, RPC, agent) surfaces the
|
|
4
|
+
* same error for the same cause.
|
|
5
|
+
*/
|
|
6
|
+
import type { z } from 'zod';
|
|
7
|
+
/** Format a zod error's issues as `path: message` entries joined by `; `. */
|
|
8
|
+
export declare function formatZodIssues(error: z.ZodError): string;
|
|
9
|
+
export declare class BusError extends Error {
|
|
10
|
+
readonly code: number;
|
|
11
|
+
constructor(message: string, code: number);
|
|
12
|
+
}
|
|
13
|
+
/** `bus.call('does.not.exist')` — method is not in the registry. */
|
|
14
|
+
export declare class MethodNotFoundError extends BusError {
|
|
15
|
+
constructor(method: string);
|
|
16
|
+
}
|
|
17
|
+
/** Params failed the method's zod schema. Carries the formatted issue list. */
|
|
18
|
+
export declare class ValidationError extends BusError {
|
|
19
|
+
constructor(method: string, error: z.ZodError);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../core/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAEzD;AAED,qBAAa,QAAS,SAAQ,KAAK;IACJ,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAW,IAAI,EAAE,MAAM;CAInD;AAED,oEAAoE;AACpE,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,MAAM,EAAE,MAAM;CAG3B;AAED,+EAA+E;AAC/E,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ;CAG9C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured bus errors. JSON-RPC error codes are attached so the RPC surface can
|
|
3
|
+
* map them without re-classifying — every surface (CLI, RPC, agent) surfaces the
|
|
4
|
+
* same error for the same cause.
|
|
5
|
+
*/
|
|
6
|
+
/** Format a zod error's issues as `path: message` entries joined by `; `. */
|
|
7
|
+
export function formatZodIssues(error) {
|
|
8
|
+
return error.issues.map(i => `${i.path.join('.') || '(root)'}: ${i.message}`).join('; ');
|
|
9
|
+
}
|
|
10
|
+
export class BusError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
constructor(message, code) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.name = new.target.name;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** `bus.call('does.not.exist')` — method is not in the registry. */
|
|
19
|
+
export class MethodNotFoundError extends BusError {
|
|
20
|
+
constructor(method) {
|
|
21
|
+
super(`Method not found: ${method}`, -32601);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Params failed the method's zod schema. Carries the formatted issue list. */
|
|
25
|
+
export class ValidationError extends BusError {
|
|
26
|
+
constructor(method, error) {
|
|
27
|
+
super(`Invalid params for ${method}: ${formatZodIssues(error)}`, -32602);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../core/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IACK;IAAtC,YAAY,OAAe,EAAW,IAAY;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QADqB,SAAI,GAAJ,IAAI,CAAQ;QAEhD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAED,oEAAoE;AACpE,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,MAAc;QACxB,KAAK,CAAC,qBAAqB,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,MAAc,EAAE,KAAiB;QAC3C,KAAK,CAAC,sBAAsB,MAAM,KAAK,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service loader — owns service instances and performs hot, in-process reload via
|
|
3
|
+
* cache-busting dynamic import. After `git pull`, `restart(name)` loads the new code
|
|
4
|
+
* from disk without killing the process (same PID).
|
|
5
|
+
*
|
|
6
|
+
* Known leak (see docs/architecture.md § Hot reload): each reload imports a fresh
|
|
7
|
+
* module URL (`?v=<ts>`), and ESM cannot evict the prior generation, so module memory
|
|
8
|
+
* accumulates. dispose() discipline bounds the *resource* leak, not the *module* leak.
|
|
9
|
+
*/
|
|
10
|
+
import type { EmitterBus } from './bus.js';
|
|
11
|
+
export interface ServiceSpec {
|
|
12
|
+
name: string;
|
|
13
|
+
/** Absolute path to the service module exporting createService(). */
|
|
14
|
+
modulePath: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class ServiceLoader {
|
|
17
|
+
private readonly bus;
|
|
18
|
+
private readonly instances;
|
|
19
|
+
private readonly specs;
|
|
20
|
+
constructor(bus: EmitterBus);
|
|
21
|
+
names(): string[];
|
|
22
|
+
/** Load a service fresh from disk and run its init(). */
|
|
23
|
+
load(spec: ServiceSpec): Promise<void>;
|
|
24
|
+
/** Tear down a service: release bus wiring, then dispose its resources. */
|
|
25
|
+
unload(name: string): Promise<void>;
|
|
26
|
+
/** Reload one service from disk; other services keep running and retain state. */
|
|
27
|
+
restart(name: string): Promise<void>;
|
|
28
|
+
/** Dispose every loaded service (process shutdown / drain). */
|
|
29
|
+
disposeAll(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../core/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAM3C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IAIZ,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkC;gBAE3B,GAAG,EAAE,UAAU;IAE5C,KAAK,IAAI,MAAM,EAAE;IAIjB,yDAAyD;IACnD,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB5C,2EAA2E;IACrE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAazC,kFAAkF;IAC5E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,+DAA+D;IACzD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service loader — owns service instances and performs hot, in-process reload via
|
|
3
|
+
* cache-busting dynamic import. After `git pull`, `restart(name)` loads the new code
|
|
4
|
+
* from disk without killing the process (same PID).
|
|
5
|
+
*
|
|
6
|
+
* Known leak (see docs/architecture.md § Hot reload): each reload imports a fresh
|
|
7
|
+
* module URL (`?v=<ts>`), and ESM cannot evict the prior generation, so module memory
|
|
8
|
+
* accumulates. dispose() discipline bounds the *resource* leak, not the *module* leak.
|
|
9
|
+
*/
|
|
10
|
+
import { pathToFileURL } from 'node:url';
|
|
11
|
+
import { createLogger } from '../lib/logger.js';
|
|
12
|
+
const log = createLogger('loader');
|
|
13
|
+
export class ServiceLoader {
|
|
14
|
+
bus;
|
|
15
|
+
instances = new Map();
|
|
16
|
+
specs = new Map();
|
|
17
|
+
constructor(bus) {
|
|
18
|
+
this.bus = bus;
|
|
19
|
+
}
|
|
20
|
+
names() {
|
|
21
|
+
return [...this.specs.keys()];
|
|
22
|
+
}
|
|
23
|
+
/** Load a service fresh from disk and run its init(). */
|
|
24
|
+
async load(spec) {
|
|
25
|
+
this.specs.set(spec.name, spec);
|
|
26
|
+
const url = pathToFileURL(spec.modulePath).href + '?v=' + Date.now();
|
|
27
|
+
const mod = await import(url);
|
|
28
|
+
if (typeof mod.createService !== 'function') {
|
|
29
|
+
throw new Error(`service "${spec.name}" must export createService()`);
|
|
30
|
+
}
|
|
31
|
+
const instance = mod.createService();
|
|
32
|
+
if (instance.name !== spec.name) {
|
|
33
|
+
log.warn(`service module name "${instance.name}" != spec "${spec.name}"`);
|
|
34
|
+
}
|
|
35
|
+
this.instances.set(spec.name, instance);
|
|
36
|
+
this.bus.beginLoading(spec.name);
|
|
37
|
+
try {
|
|
38
|
+
await instance.init(this.bus);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
this.bus.endLoading();
|
|
42
|
+
}
|
|
43
|
+
log.info(`✅ "${spec.name}" loaded`);
|
|
44
|
+
}
|
|
45
|
+
/** Tear down a service: release bus wiring, then dispose its resources. */
|
|
46
|
+
async unload(name) {
|
|
47
|
+
const instance = this.instances.get(name);
|
|
48
|
+
this.bus.releaseService(name);
|
|
49
|
+
if (instance) {
|
|
50
|
+
try {
|
|
51
|
+
await instance.dispose();
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
log.error(`dispose of "${name}" failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
this.instances.delete(name);
|
|
58
|
+
}
|
|
59
|
+
/** Reload one service from disk; other services keep running and retain state. */
|
|
60
|
+
async restart(name) {
|
|
61
|
+
const spec = this.specs.get(name);
|
|
62
|
+
if (!spec)
|
|
63
|
+
throw new Error(`unknown service: ${name}`);
|
|
64
|
+
log.info(`restarting "${name}" — reloading from disk`);
|
|
65
|
+
await this.unload(name);
|
|
66
|
+
await this.load(spec);
|
|
67
|
+
}
|
|
68
|
+
/** Dispose every loaded service (process shutdown / drain). */
|
|
69
|
+
async disposeAll() {
|
|
70
|
+
await Promise.allSettled([...this.instances.keys()].map(name => this.unload(name)));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../core/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local stack — what the CLI boots when no daemon answers on :9000. Loads only the
|
|
3
|
+
* requested service(s) plus config (the common dependency), runs the call, and the
|
|
4
|
+
* caller disposes. Keeps a one-off `vargos channel send ...` from needing a daemon.
|
|
5
|
+
*/
|
|
6
|
+
import type { Bus } from './types.js';
|
|
7
|
+
export interface LocalStack {
|
|
8
|
+
bus: Bus;
|
|
9
|
+
dispose: () => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare function bootLocal(serviceNames: string[], rootDir: string, ext: 'ts' | 'js'): Promise<LocalStack>;
|
|
12
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../core/local.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAsB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAc9G"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local stack — what the CLI boots when no daemon answers on :9000. Loads only the
|
|
3
|
+
* requested service(s) plus config (the common dependency), runs the call, and the
|
|
4
|
+
* caller disposes. Keeps a one-off `vargos channel send ...` from needing a daemon.
|
|
5
|
+
*/
|
|
6
|
+
import { EmitterBus } from './bus.js';
|
|
7
|
+
import { ServiceLoader } from './loader.js';
|
|
8
|
+
import { resolveService } from './services.js';
|
|
9
|
+
export async function bootLocal(serviceNames, rootDir, ext) {
|
|
10
|
+
const bus = new EmitterBus();
|
|
11
|
+
const loader = new ServiceLoader(bus);
|
|
12
|
+
// config first, then the requested services (deduped, config never twice). Each name
|
|
13
|
+
// resolves directly to services/<name>/ — only the requested modules are imported.
|
|
14
|
+
const wanted = ['config', ...serviceNames.filter(n => n !== 'config')];
|
|
15
|
+
for (const name of [...new Set(wanted)]) {
|
|
16
|
+
const spec = resolveService(name, rootDir, ext);
|
|
17
|
+
if (!spec)
|
|
18
|
+
throw new Error(`unknown service: ${name}`);
|
|
19
|
+
await loader.load(spec);
|
|
20
|
+
}
|
|
21
|
+
return { bus, dispose: () => loader.disposeAll() };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../core/local.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQ/C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,YAAsB,EAAE,OAAe,EAAE,GAAgB;IACvF,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAEtC,qFAAqF;IACrF,mFAAmF;IACnF,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON-RPC 2.0 over TCP (surface 3). Newline-delimited requests, localhost-bound.
|
|
3
|
+
* Dispatch is a thin projection of the registry: every request becomes bus.call().
|
|
4
|
+
*
|
|
5
|
+
* echo '{"jsonrpc":"2.0","method":"memory.search","params":{"query":"..."}}' | nc localhost 9000
|
|
6
|
+
*
|
|
7
|
+
* Auth hook: see `authorize()` — a no-op today, the single seam for a future API key.
|
|
8
|
+
*/
|
|
9
|
+
import type { Bus } from './types.js';
|
|
10
|
+
export declare function startRpcServer(bus: Bus, host: string, port: number, socketTimeoutMs?: number): Promise<() => Promise<void>>;
|
|
11
|
+
//# sourceMappingURL=rpc-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-server.d.ts","sourceRoot":"","sources":["../../core/rpc-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAkBtC,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,SAAiB,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAuBnI"}
|