overmind-mcp 2.8.12 → 2.8.14

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.
Files changed (71) hide show
  1. package/dist/bin/launch.js +78 -0
  2. package/dist/bin/overmind-bridge.d.ts +42 -0
  3. package/dist/bin/overmind-bridge.d.ts.map +1 -0
  4. package/dist/bin/overmind-bridge.js +503 -0
  5. package/dist/bin/overmind-bridge.js.map +1 -0
  6. package/dist/bridge/AgentRegistry.d.ts +123 -0
  7. package/dist/bridge/AgentRegistry.d.ts.map +1 -0
  8. package/dist/bridge/AgentRegistry.js +207 -0
  9. package/dist/bridge/AgentRegistry.js.map +1 -0
  10. package/dist/bridge/ArgParser.d.ts +45 -0
  11. package/dist/bridge/ArgParser.d.ts.map +1 -0
  12. package/dist/bridge/ArgParser.js +134 -0
  13. package/dist/bridge/ArgParser.js.map +1 -0
  14. package/dist/bridge/BridgeHttpClient.d.ts +61 -0
  15. package/dist/bridge/BridgeHttpClient.d.ts.map +1 -0
  16. package/dist/bridge/BridgeHttpClient.js +164 -0
  17. package/dist/bridge/BridgeHttpClient.js.map +1 -0
  18. package/dist/bridge/DirectiveParser.d.ts +82 -0
  19. package/dist/bridge/DirectiveParser.d.ts.map +1 -0
  20. package/dist/bridge/DirectiveParser.js +154 -0
  21. package/dist/bridge/DirectiveParser.js.map +1 -0
  22. package/dist/bridge/JsonSanitizer.d.ts +34 -0
  23. package/dist/bridge/JsonSanitizer.d.ts.map +1 -0
  24. package/dist/bridge/JsonSanitizer.js +90 -0
  25. package/dist/bridge/JsonSanitizer.js.map +1 -0
  26. package/dist/bridge/MessageLog.d.ts +142 -0
  27. package/dist/bridge/MessageLog.d.ts.map +1 -0
  28. package/dist/bridge/MessageLog.js +311 -0
  29. package/dist/bridge/MessageLog.js.map +1 -0
  30. package/dist/bridge/OverBridgeServer.d.ts +179 -0
  31. package/dist/bridge/OverBridgeServer.d.ts.map +1 -0
  32. package/dist/bridge/OverBridgeServer.js +982 -0
  33. package/dist/bridge/OverBridgeServer.js.map +1 -0
  34. package/dist/bridge/PromptSource.d.ts +66 -0
  35. package/dist/bridge/PromptSource.d.ts.map +1 -0
  36. package/dist/bridge/PromptSource.js +152 -0
  37. package/dist/bridge/PromptSource.js.map +1 -0
  38. package/dist/bridge/RequestContext.d.ts +19 -0
  39. package/dist/bridge/RequestContext.d.ts.map +1 -0
  40. package/dist/bridge/RequestContext.js +34 -0
  41. package/dist/bridge/RequestContext.js.map +1 -0
  42. package/dist/bridge/ScenarioLoader.d.ts +124 -0
  43. package/dist/bridge/ScenarioLoader.d.ts.map +1 -0
  44. package/dist/bridge/ScenarioLoader.js +333 -0
  45. package/dist/bridge/ScenarioLoader.js.map +1 -0
  46. package/dist/bridge/SessionStore.d.ts +109 -0
  47. package/dist/bridge/SessionStore.d.ts.map +1 -0
  48. package/dist/bridge/SessionStore.js +220 -0
  49. package/dist/bridge/SessionStore.js.map +1 -0
  50. package/dist/bridge/WebhookAdapter.d.ts +76 -0
  51. package/dist/bridge/WebhookAdapter.d.ts.map +1 -0
  52. package/dist/bridge/WebhookAdapter.js +186 -0
  53. package/dist/bridge/WebhookAdapter.js.map +1 -0
  54. package/dist/bridge/index.d.ts +23 -1
  55. package/dist/bridge/index.d.ts.map +1 -1
  56. package/dist/bridge/index.js +19 -1
  57. package/dist/bridge/index.js.map +1 -1
  58. package/dist/bridge/utils.d.ts +9 -0
  59. package/dist/bridge/utils.d.ts.map +1 -1
  60. package/dist/bridge/utils.js +17 -0
  61. package/dist/bridge/utils.js.map +1 -1
  62. package/dist/services/AgentManager.d.ts.map +1 -1
  63. package/dist/services/AgentManager.js +16 -3
  64. package/dist/services/AgentManager.js.map +1 -1
  65. package/dist/services/NousHermesRunner.d.ts.map +1 -1
  66. package/dist/services/NousHermesRunner.js +47 -8
  67. package/dist/services/NousHermesRunner.js.map +1 -1
  68. package/dist/tools/create_agent.d.ts.map +1 -1
  69. package/dist/tools/create_agent.js +11 -0
  70. package/dist/tools/create_agent.js.map +1 -1
  71. package/package.json +2 -1
@@ -0,0 +1,123 @@
1
+ /**
2
+ * ╔══════════════════════════════════════════════════════════════════════╗
3
+ * ║ OVERMIND BRIDGE — AgentRegistry (In-Memory State Tracker) ║
4
+ * ║ ║
5
+ * ║ Tracke l'état live de chaque agent : busy / idle / offline. ║
6
+ * ║ Sérialise les appels concurrents vers un même agent via mutex. ║
7
+ * ║ ║
8
+ * ║ ARCHITECTURE ║
9
+ * ║ ───────────── ║
10
+ * ║ OverBridgeServer → AgentRegistry → (mutex per agent) ║
11
+ * ║ → OverBridgeService.runAgent() ║
12
+ * ╚══════════════════════════════════════════════════════════════════════╝
13
+ */
14
+ import type { RunnerType } from './types.js';
15
+ import { type BridgeLogger } from './utils.js';
16
+ export type AgentLiveStatus = 'online' | 'offline' | 'busy' | 'idle';
17
+ export interface AgentLiveState {
18
+ name: string;
19
+ runner: RunnerType;
20
+ status: AgentLiveStatus;
21
+ /** PID du process si connu (via agent_control status) */
22
+ pid?: number;
23
+ /** SessionId de l'appel en cours (si busy) */
24
+ currentSessionId?: string;
25
+ /** Timestamp dernière activité (runAgent / heartbeat) */
26
+ lastActivityAt: number;
27
+ /** Compteur de runs total depuis le boot du bridge */
28
+ totalRuns: number;
29
+ /** Compteur de runs échoués */
30
+ totalErrors: number;
31
+ /** Compteur A2A (combien de fois cet agent a été appelé par un autre agent) */
32
+ a2aReceived: number;
33
+ /** Compteur A2A (combien de fois cet agent a appelé un autre agent) */
34
+ a2aSent: number;
35
+ }
36
+ export interface ListAgentsFilter {
37
+ /** Filtre par status (ex: tous les 'busy') */
38
+ status?: AgentLiveStatus;
39
+ /** Filtre par runner (ex: 'claude', 'hermes') */
40
+ runner?: RunnerType;
41
+ }
42
+ export declare class AgentRegistry {
43
+ private readonly states;
44
+ private readonly mutexes;
45
+ private readonly log;
46
+ constructor(logger?: BridgeLogger);
47
+ /**
48
+ * Récupère (ou crée) le mutex associé à un agent.
49
+ * Garantit qu'un seul appel runAgent tourne à la fois par agent.
50
+ */
51
+ private getMutex;
52
+ /**
53
+ * Exécute une fonction sous le mutex de l'agent.
54
+ * Bloque si un autre run est en cours sur le même agent.
55
+ */
56
+ withLock<T>(agentName: string, fn: () => Promise<T>): Promise<T>;
57
+ /**
58
+ * Vérifie si un run est actuellement en cours sur cet agent.
59
+ */
60
+ isBusy(agentName: string): boolean;
61
+ /**
62
+ * Initialise ou met à jour l'état d'un agent.
63
+ * Appelé au premier runAgent ou explicitement via register().
64
+ */
65
+ register(agentName: string, runner: RunnerType): AgentLiveState;
66
+ /**
67
+ * Marque un agent comme busy (run en cours).
68
+ */
69
+ markBusy(agentName: string, sessionId?: string, pid?: number): void;
70
+ /**
71
+ * Marque un agent comme idle (run terminé, agent dispo).
72
+ */
73
+ markIdle(agentName: string, success: boolean): void;
74
+ /**
75
+ * Marque un agent comme offline (kill, crash, ou jamais vu).
76
+ */
77
+ markOffline(agentName: string): void;
78
+ /**
79
+ * Marque un agent comme online (vu récemment, pas en cours).
80
+ */
81
+ markOnline(agentName: string): void;
82
+ /**
83
+ * Incrémente le compteur A2A received (cet agent a été appelé par un autre).
84
+ */
85
+ incrementA2aReceived(agentName: string): void;
86
+ /**
87
+ * Incrémente le compteur A2A sent (cet agent a appelé un autre).
88
+ */
89
+ incrementA2aSent(agentName: string): void;
90
+ /**
91
+ * Récupère l'état d'un agent. Retourne undefined si jamais vu.
92
+ */
93
+ get(agentName: string): AgentLiveState | undefined;
94
+ /**
95
+ * Liste tous les agents connus, optionnellement filtrés.
96
+ */
97
+ list(filter?: ListAgentsFilter): AgentLiveState[];
98
+ /**
99
+ * Liste les agents actuellement busy (utile pour /status global).
100
+ */
101
+ listBusy(): AgentLiveState[];
102
+ /**
103
+ * Liste les agents online et idle (disponibles pour run).
104
+ */
105
+ listAvailable(): AgentLiveState[];
106
+ /**
107
+ * Statistiques globales du registry.
108
+ */
109
+ stats(): {
110
+ total: number;
111
+ online: number;
112
+ busy: number;
113
+ offline: number;
114
+ totalRuns: number;
115
+ totalErrors: number;
116
+ };
117
+ /**
118
+ * Purge les agents offline depuis plus de `maxAgeMs`.
119
+ * Évite que la map grossisse indéfiniment.
120
+ */
121
+ prune(maxAgeMs?: number): number;
122
+ }
123
+ //# sourceMappingURL=AgentRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentRegistry.d.ts","sourceRoot":"","sources":["../../src/bridge/AgentRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAInE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,iDAAiD;IACjD,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAID,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,MAAM,CAAC,EAAE,YAAY;IAMjC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAShB;;;OAGG;IACG,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAItE;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAMlC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,cAAc;IAqB/D;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IASnE;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAUnD;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOnC;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK7C;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOzC;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAKlD;;OAEG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,cAAc,EAAE;IAWjD;;OAEG;IACH,QAAQ,IAAI,cAAc,EAAE;IAI5B;;OAEG;IACH,aAAa,IAAI,cAAc,EAAE;IAIjC;;OAEG;IACH,KAAK,IAAI;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB;IAYD;;;OAGG;IACH,KAAK,CAAC,QAAQ,SAAsB,GAAG,MAAM;CAe9C"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * ╔══════════════════════════════════════════════════════════════════════╗
3
+ * ║ OVERMIND BRIDGE — AgentRegistry (In-Memory State Tracker) ║
4
+ * ║ ║
5
+ * ║ Tracke l'état live de chaque agent : busy / idle / offline. ║
6
+ * ║ Sérialise les appels concurrents vers un même agent via mutex. ║
7
+ * ║ ║
8
+ * ║ ARCHITECTURE ║
9
+ * ║ ───────────── ║
10
+ * ║ OverBridgeServer → AgentRegistry → (mutex per agent) ║
11
+ * ║ → OverBridgeService.runAgent() ║
12
+ * ╚══════════════════════════════════════════════════════════════════════╝
13
+ */
14
+ import { Mutex } from 'async-mutex';
15
+ import { createBridgeLogger } from './utils.js';
16
+ // ─── AgentRegistry ────────────────────────────────────────────────────────
17
+ export class AgentRegistry {
18
+ states = new Map();
19
+ mutexes = new Map();
20
+ log;
21
+ constructor(logger) {
22
+ this.log = logger ?? createBridgeLogger('agent-registry');
23
+ }
24
+ // ─── Mutex Helpers ──────────────────────────────────────────────────────
25
+ /**
26
+ * Récupère (ou crée) le mutex associé à un agent.
27
+ * Garantit qu'un seul appel runAgent tourne à la fois par agent.
28
+ */
29
+ getMutex(agentName) {
30
+ let mutex = this.mutexes.get(agentName);
31
+ if (!mutex) {
32
+ mutex = new Mutex();
33
+ this.mutexes.set(agentName, mutex);
34
+ }
35
+ return mutex;
36
+ }
37
+ /**
38
+ * Exécute une fonction sous le mutex de l'agent.
39
+ * Bloque si un autre run est en cours sur le même agent.
40
+ */
41
+ async withLock(agentName, fn) {
42
+ return this.getMutex(agentName).runExclusive(fn);
43
+ }
44
+ /**
45
+ * Vérifie si un run est actuellement en cours sur cet agent.
46
+ */
47
+ isBusy(agentName) {
48
+ return this.getMutex(agentName).isLocked();
49
+ }
50
+ // ─── State Management ───────────────────────────────────────────────────
51
+ /**
52
+ * Initialise ou met à jour l'état d'un agent.
53
+ * Appelé au premier runAgent ou explicitement via register().
54
+ */
55
+ register(agentName, runner) {
56
+ const existing = this.states.get(agentName);
57
+ if (existing) {
58
+ existing.runner = runner; // Update runner if changed
59
+ return existing;
60
+ }
61
+ const state = {
62
+ name: agentName,
63
+ runner,
64
+ status: 'online',
65
+ lastActivityAt: Date.now(),
66
+ totalRuns: 0,
67
+ totalErrors: 0,
68
+ a2aReceived: 0,
69
+ a2aSent: 0,
70
+ };
71
+ this.states.set(agentName, state);
72
+ this.log.info(`📝 Agent registered: ${agentName} (${runner})`);
73
+ return state;
74
+ }
75
+ /**
76
+ * Marque un agent comme busy (run en cours).
77
+ */
78
+ markBusy(agentName, sessionId, pid) {
79
+ const state = this.states.get(agentName);
80
+ if (!state)
81
+ return;
82
+ state.status = 'busy';
83
+ state.currentSessionId = sessionId;
84
+ state.pid = pid;
85
+ state.lastActivityAt = Date.now();
86
+ }
87
+ /**
88
+ * Marque un agent comme idle (run terminé, agent dispo).
89
+ */
90
+ markIdle(agentName, success) {
91
+ const state = this.states.get(agentName);
92
+ if (!state)
93
+ return;
94
+ state.status = 'online';
95
+ state.currentSessionId = undefined;
96
+ state.lastActivityAt = Date.now();
97
+ state.totalRuns++;
98
+ if (!success)
99
+ state.totalErrors++;
100
+ }
101
+ /**
102
+ * Marque un agent comme offline (kill, crash, ou jamais vu).
103
+ */
104
+ markOffline(agentName) {
105
+ const state = this.states.get(agentName);
106
+ if (!state)
107
+ return;
108
+ state.status = 'offline';
109
+ state.currentSessionId = undefined;
110
+ state.pid = undefined;
111
+ }
112
+ /**
113
+ * Marque un agent comme online (vu récemment, pas en cours).
114
+ */
115
+ markOnline(agentName) {
116
+ const state = this.states.get(agentName);
117
+ if (!state)
118
+ return;
119
+ state.status = 'online';
120
+ state.lastActivityAt = Date.now();
121
+ }
122
+ /**
123
+ * Incrémente le compteur A2A received (cet agent a été appelé par un autre).
124
+ */
125
+ incrementA2aReceived(agentName) {
126
+ const state = this.states.get(agentName);
127
+ if (state)
128
+ state.a2aReceived++;
129
+ }
130
+ /**
131
+ * Incrémente le compteur A2A sent (cet agent a appelé un autre).
132
+ */
133
+ incrementA2aSent(agentName) {
134
+ const state = this.states.get(agentName);
135
+ if (state)
136
+ state.a2aSent++;
137
+ }
138
+ // ─── Queries ────────────────────────────────────────────────────────────
139
+ /**
140
+ * Récupère l'état d'un agent. Retourne undefined si jamais vu.
141
+ */
142
+ get(agentName) {
143
+ const state = this.states.get(agentName);
144
+ return state ? { ...state } : undefined;
145
+ }
146
+ /**
147
+ * Liste tous les agents connus, optionnellement filtrés.
148
+ */
149
+ list(filter) {
150
+ const all = Array.from(this.states.values()).map((s) => ({ ...s }));
151
+ if (!filter)
152
+ return all;
153
+ return all.filter((s) => {
154
+ if (filter.status && s.status !== filter.status)
155
+ return false;
156
+ if (filter.runner && s.runner !== filter.runner)
157
+ return false;
158
+ return true;
159
+ });
160
+ }
161
+ /**
162
+ * Liste les agents actuellement busy (utile pour /status global).
163
+ */
164
+ listBusy() {
165
+ return this.list({ status: 'busy' });
166
+ }
167
+ /**
168
+ * Liste les agents online et idle (disponibles pour run).
169
+ */
170
+ listAvailable() {
171
+ return this.list().filter((s) => s.status === 'online' || s.status === 'idle');
172
+ }
173
+ /**
174
+ * Statistiques globales du registry.
175
+ */
176
+ stats() {
177
+ const all = Array.from(this.states.values());
178
+ return {
179
+ total: all.length,
180
+ online: all.filter((s) => s.status === 'online').length,
181
+ busy: all.filter((s) => s.status === 'busy').length,
182
+ offline: all.filter((s) => s.status === 'offline').length,
183
+ totalRuns: all.reduce((acc, s) => acc + s.totalRuns, 0),
184
+ totalErrors: all.reduce((acc, s) => acc + s.totalErrors, 0),
185
+ };
186
+ }
187
+ /**
188
+ * Purge les agents offline depuis plus de `maxAgeMs`.
189
+ * Évite que la map grossisse indéfiniment.
190
+ */
191
+ prune(maxAgeMs = 24 * 60 * 60 * 1000) {
192
+ const cutoff = Date.now() - maxAgeMs;
193
+ let pruned = 0;
194
+ for (const [name, state] of this.states) {
195
+ if (state.status === 'offline' && state.lastActivityAt < cutoff) {
196
+ this.states.delete(name);
197
+ this.mutexes.delete(name);
198
+ pruned++;
199
+ }
200
+ }
201
+ if (pruned > 0) {
202
+ this.log.info(`🧹 Pruned ${pruned} stale offline agents`);
203
+ }
204
+ return pruned;
205
+ }
206
+ }
207
+ //# sourceMappingURL=AgentRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentRegistry.js","sourceRoot":"","sources":["../../src/bridge/AgentRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * ╔══════════════════════════════════════════════════════════════════════╗
3
+ * ║ OVERMIND BRIDGE — ArgParser (Zero-Dep CLI Parser) ║
4
+ * ║ ║
5
+ * ║ Parser d'arguments minimaliste, cohérent avec le style du projet. ║
6
+ * ║ Supporte : ║
7
+ * ║ - Flags courts (-v) et longs (--verbose) ║
8
+ * ║ - Valeurs via = ou espace (--port 3100, --port=3100) ║
9
+ * ║ - Valeurs répétées (--include a --include b) ║
10
+ * ║ - Booléens negations (--no-auth) ║
11
+ * ║ - Stdin auto-détection ║
12
+ * ╚══════════════════════════════════════════════════════════════════════╝
13
+ */
14
+ export type ArgValue = string | boolean | number | string[];
15
+ export interface ParsedArgs {
16
+ /** Premier arg = subcommand (ex: 'server', 'call', 'scenario') */
17
+ command: string | undefined;
18
+ /** Tous les args après le subcommand, indexés par flag (sans le --) */
19
+ flags: Record<string, ArgValue>;
20
+ /** Positionals (args sans flag) */
21
+ positionals: string[];
22
+ /** Args bruts pour debug */
23
+ raw: string[];
24
+ }
25
+ /**
26
+ * Parse process.argv.slice(2). Le premier non-flag devient `command`.
27
+ */
28
+ export declare function parseArgs(argv?: string[]): ParsedArgs;
29
+ /**
30
+ * Récupère un flag avec valeur par défaut et coercion de type.
31
+ */
32
+ export declare function getFlag<T extends ArgValue>(args: ParsedArgs, name: string, defaultValue?: T): T | undefined;
33
+ /**
34
+ * Récupère un flag, throw si manquant.
35
+ */
36
+ export declare function requireFlag<T extends ArgValue>(args: ParsedArgs, name: string): T;
37
+ /**
38
+ * Vérifie si stdin a des données piped (TTY = false).
39
+ */
40
+ export declare function hasStdinData(): boolean;
41
+ /**
42
+ * Lit stdin en entier (utf-8).
43
+ */
44
+ export declare function readStdin(): Promise<string>;
45
+ //# sourceMappingURL=ArgParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArgParser.d.ts","sourceRoot":"","sources":["../../src/bridge/ArgParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAE5D,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,mCAAmC;IACnC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAID;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,UAAU,CAmE5E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,QAAQ,EACxC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,CAAC,GACf,CAAC,GAAG,SAAS,CAIf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAMjF;AAgBD;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAQjD"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * ╔══════════════════════════════════════════════════════════════════════╗
3
+ * ║ OVERMIND BRIDGE — ArgParser (Zero-Dep CLI Parser) ║
4
+ * ║ ║
5
+ * ║ Parser d'arguments minimaliste, cohérent avec le style du projet. ║
6
+ * ║ Supporte : ║
7
+ * ║ - Flags courts (-v) et longs (--verbose) ║
8
+ * ║ - Valeurs via = ou espace (--port 3100, --port=3100) ║
9
+ * ║ - Valeurs répétées (--include a --include b) ║
10
+ * ║ - Booléens negations (--no-auth) ║
11
+ * ║ - Stdin auto-détection ║
12
+ * ╚══════════════════════════════════════════════════════════════════════╝
13
+ */
14
+ // ─── Public API ────────────────────────────────────────────────────────────
15
+ /**
16
+ * Parse process.argv.slice(2). Le premier non-flag devient `command`.
17
+ */
18
+ export function parseArgs(argv = process.argv.slice(2)) {
19
+ const flags = {};
20
+ const positionals = [];
21
+ let command;
22
+ let commandConsumed = false;
23
+ for (let i = 0; i < argv.length; i++) {
24
+ const arg = argv[i];
25
+ // --flag=value
26
+ if (arg.startsWith('--') && arg.includes('=')) {
27
+ const eqIdx = arg.indexOf('=');
28
+ const key = arg.slice(2, eqIdx);
29
+ const value = arg.slice(eqIdx + 1);
30
+ flags[key] = coerceValue(value, true);
31
+ if (!commandConsumed) {
32
+ command = key; // au cas où le subcommand est en --foo=bar (rare)
33
+ commandConsumed = true;
34
+ }
35
+ continue;
36
+ }
37
+ // --flag value | --flag
38
+ if (arg.startsWith('--')) {
39
+ const key = arg.slice(2);
40
+ const next = argv[i + 1];
41
+ // Booléen si prochain arg est un autre flag ou rien
42
+ if (next === undefined || next.startsWith('--')) {
43
+ flags[key] = true;
44
+ }
45
+ else {
46
+ flags[key] = coerceValue(next, false);
47
+ i++; // consomme la valeur
48
+ }
49
+ continue;
50
+ }
51
+ // -f value | -f | -abc (flags courts combinés)
52
+ if (arg.startsWith('-') && arg.length > 1) {
53
+ // Combinés : -abc → a, b, c tous booléens
54
+ if (/^-[a-z]+$/i.test(arg)) {
55
+ for (const ch of arg.slice(1)) {
56
+ flags[ch] = true;
57
+ }
58
+ continue;
59
+ }
60
+ // -v value
61
+ const key = arg.slice(1);
62
+ const next = argv[i + 1];
63
+ if (next === undefined || next.startsWith('--')) {
64
+ flags[key] = true;
65
+ }
66
+ else {
67
+ flags[key] = coerceValue(next, false);
68
+ i++;
69
+ }
70
+ continue;
71
+ }
72
+ // Positionnel
73
+ if (!commandConsumed) {
74
+ command = arg;
75
+ commandConsumed = true;
76
+ }
77
+ else {
78
+ positionals.push(arg);
79
+ }
80
+ }
81
+ return { command, flags, positionals, raw: argv };
82
+ }
83
+ /**
84
+ * Récupère un flag avec valeur par défaut et coercion de type.
85
+ */
86
+ export function getFlag(args, name, defaultValue) {
87
+ const value = args.flags[name];
88
+ if (value === undefined)
89
+ return defaultValue;
90
+ return value;
91
+ }
92
+ /**
93
+ * Récupère un flag, throw si manquant.
94
+ */
95
+ export function requireFlag(args, name) {
96
+ const value = args.flags[name];
97
+ if (value === undefined) {
98
+ throw new Error(`Missing required flag: --${name}`);
99
+ }
100
+ return value;
101
+ }
102
+ // ─── Helpers ───────────────────────────────────────────────────────────────
103
+ function coerceValue(raw, fromEquals) {
104
+ // Si --flag=true / false
105
+ if (raw === 'true')
106
+ return true;
107
+ if (raw === 'false')
108
+ return false;
109
+ // Si nombre
110
+ if (/^-?\d+(\.\d+)?$/.test(raw))
111
+ return Number(raw);
112
+ // Sinon string brut
113
+ return raw;
114
+ }
115
+ // ─── Stdin detection ───────────────────────────────────────────────────────
116
+ /**
117
+ * Vérifie si stdin a des données piped (TTY = false).
118
+ */
119
+ export function hasStdinData() {
120
+ return !process.stdin.isTTY;
121
+ }
122
+ /**
123
+ * Lit stdin en entier (utf-8).
124
+ */
125
+ export async function readStdin() {
126
+ return new Promise((resolve, reject) => {
127
+ let data = '';
128
+ process.stdin.setEncoding('utf-8');
129
+ process.stdin.on('data', (chunk) => (data += chunk));
130
+ process.stdin.on('end', () => resolve(data));
131
+ process.stdin.on('error', reject);
132
+ });
133
+ }
134
+ //# sourceMappingURL=ArgParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArgParser.js","sourceRoot":"","sources":["../../src/bridge/ArgParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * ╔══════════════════════════════════════════════════════════════════════╗
3
+ * ║ OVERMIND BRIDGE — BridgeHttpClient (JSON-RPC 2.0 HTTP Caller) ║
4
+ * ║ ║
5
+ * ║ Client HTTP minimaliste pour parler à un OverBridgeServer. ║
6
+ * ║ Utilisé par le CLI pour les commandes 'call', 'scenario', etc. ║
7
+ * ║ Supporte : ║
8
+ * ║ - Single + batch JSON-RPC 2.0 ║
9
+ * ║ - Auth Bearer token ║
10
+ * ║ - Timeout configurable ║
11
+ * ║ - Mode "auto" : démarre un bridge local si pas de serveur ║
12
+ * ╚══════════════════════════════════════════════════════════════════════╝
13
+ */
14
+ export interface JsonRpcCallRequest {
15
+ jsonrpc: '2.0';
16
+ id: number | string;
17
+ method: string;
18
+ params?: Record<string, unknown>;
19
+ }
20
+ export interface JsonRpcCallResponse {
21
+ jsonrpc: '2.0';
22
+ id: number | string | null;
23
+ result?: unknown;
24
+ error?: {
25
+ code: number;
26
+ message: string;
27
+ data?: unknown;
28
+ };
29
+ }
30
+ export interface BridgeHttpClientConfig {
31
+ /** URL complète du serveur (ex: http://127.0.0.1:3100) */
32
+ baseUrl: string;
33
+ /** Bearer token (si configuré côté serveur) */
34
+ authToken?: string;
35
+ /** Timeout par défaut en ms (default: 60_000) */
36
+ timeoutMs?: number;
37
+ }
38
+ export declare class BridgeHttpClient {
39
+ private readonly config;
40
+ private rpcId;
41
+ constructor(config: BridgeHttpClientConfig);
42
+ get baseUrl(): string;
43
+ /**
44
+ * Appelle une méthode JSON-RPC et retourne le résultat (ou throw).
45
+ */
46
+ call<T = unknown>(method: string, params?: Record<string, unknown>, timeoutMs?: number): Promise<T>;
47
+ /**
48
+ * Batch JSON-RPC (plusieurs calls en un round-trip).
49
+ */
50
+ callBatch<T = unknown>(calls: Array<{
51
+ method: string;
52
+ params?: Record<string, unknown>;
53
+ }>): Promise<T[]>;
54
+ /**
55
+ * GET /health (pas JSON-RPC, endpoint séparé).
56
+ */
57
+ health(): Promise<unknown>;
58
+ private _post;
59
+ private _get;
60
+ }
61
+ //# sourceMappingURL=BridgeHttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BridgeHttpClient.d.ts","sourceRoot":"","sources":["../../src/bridge/BridgeHttpClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAED,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CACqB;IAC5C,OAAO,CAAC,KAAK,CAAK;gBAEN,MAAM,EAAE,sBAAsB;IAQ1C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAID;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAmBb;;OAEG;IACG,SAAS,CAAC,CAAC,GAAG,OAAO,EACzB,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GACjE,OAAO,CAAC,CAAC,EAAE,CAAC;IAqBf;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;YAOlB,KAAK;YAiDL,IAAI;CAoCnB"}