@agentmeshhq/agent 0.4.18 → 0.4.20

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 (122) hide show
  1. package/dist/__tests__/attach.test.d.ts +1 -0
  2. package/dist/__tests__/attach.test.js +200 -0
  3. package/dist/__tests__/attach.test.js.map +1 -0
  4. package/dist/__tests__/auth-guard.integration.test.js +1 -1
  5. package/dist/__tests__/auth-guard.integration.test.js.map +1 -1
  6. package/dist/__tests__/auth-guard.test.js +3 -3
  7. package/dist/__tests__/auth-guard.test.js.map +1 -1
  8. package/dist/__tests__/bootstrap.test.js +23 -0
  9. package/dist/__tests__/bootstrap.test.js.map +1 -1
  10. package/dist/__tests__/daemon-hub-resilience.test.js +2 -2
  11. package/dist/__tests__/daemon-hub-resilience.test.js.map +1 -1
  12. package/dist/__tests__/evicted-cleanup.test.js.map +1 -1
  13. package/dist/__tests__/injector.test.js +47 -4
  14. package/dist/__tests__/injector.test.js.map +1 -1
  15. package/dist/__tests__/list.test.d.ts +1 -0
  16. package/dist/__tests__/list.test.js +62 -0
  17. package/dist/__tests__/list.test.js.map +1 -0
  18. package/dist/__tests__/opencode-serve.test.d.ts +1 -0
  19. package/dist/__tests__/opencode-serve.test.js +54 -0
  20. package/dist/__tests__/opencode-serve.test.js.map +1 -0
  21. package/dist/__tests__/opencode-session-policy.test.d.ts +1 -0
  22. package/dist/__tests__/opencode-session-policy.test.js +61 -0
  23. package/dist/__tests__/opencode-session-policy.test.js.map +1 -0
  24. package/dist/__tests__/opencode-session.test.d.ts +1 -0
  25. package/dist/__tests__/opencode-session.test.js +178 -0
  26. package/dist/__tests__/opencode-session.test.js.map +1 -0
  27. package/dist/__tests__/registry.register.test.js +16 -0
  28. package/dist/__tests__/registry.register.test.js.map +1 -1
  29. package/dist/__tests__/relay.test.js +121 -2
  30. package/dist/__tests__/relay.test.js.map +1 -1
  31. package/dist/__tests__/shared-resource-guards.test.js +1 -4
  32. package/dist/__tests__/shared-resource-guards.test.js.map +1 -1
  33. package/dist/__tests__/start-team-id.test.js +22 -0
  34. package/dist/__tests__/start-team-id.test.js.map +1 -1
  35. package/dist/__tests__/token-rejection-recovery.test.js +52 -0
  36. package/dist/__tests__/token-rejection-recovery.test.js.map +1 -1
  37. package/dist/__tests__/watcher-queue.test.js +7 -2
  38. package/dist/__tests__/watcher-queue.test.js.map +1 -1
  39. package/dist/cli/attach.d.ts +1 -1
  40. package/dist/cli/attach.js +125 -2
  41. package/dist/cli/attach.js.map +1 -1
  42. package/dist/cli/auth.js.map +1 -1
  43. package/dist/cli/index.js +9 -4
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/cli/list.js +26 -2
  46. package/dist/cli/list.js.map +1 -1
  47. package/dist/cli/relay.d.ts +3 -0
  48. package/dist/cli/relay.js +149 -1
  49. package/dist/cli/relay.js.map +1 -1
  50. package/dist/cli/start.d.ts +9 -1
  51. package/dist/cli/start.js +8 -0
  52. package/dist/cli/start.js.map +1 -1
  53. package/dist/cli/status.js +21 -8
  54. package/dist/cli/status.js.map +1 -1
  55. package/dist/cli/test.js +12 -1
  56. package/dist/cli/test.js.map +1 -1
  57. package/dist/config/schema.d.ts +16 -0
  58. package/dist/core/auth-guard.js +2 -2
  59. package/dist/core/auth-guard.js.map +1 -1
  60. package/dist/core/chat-output-parser.d.ts +3 -3
  61. package/dist/core/chat-output-parser.js +35 -19
  62. package/dist/core/chat-output-parser.js.map +1 -1
  63. package/dist/core/chat-output-parser.test.js +21 -0
  64. package/dist/core/chat-output-parser.test.js.map +1 -1
  65. package/dist/core/daemon/bootstrap.d.ts +8 -0
  66. package/dist/core/daemon/bootstrap.js +6 -1
  67. package/dist/core/daemon/bootstrap.js.map +1 -1
  68. package/dist/core/daemon/state.d.ts +8 -0
  69. package/dist/core/daemon/state.js +8 -0
  70. package/dist/core/daemon/state.js.map +1 -1
  71. package/dist/core/daemon/tmux-session.d.ts +4 -0
  72. package/dist/core/daemon/tmux-session.js +9 -1
  73. package/dist/core/daemon/tmux-session.js.map +1 -1
  74. package/dist/core/daemon/workspace.js +10 -2
  75. package/dist/core/daemon/workspace.js.map +1 -1
  76. package/dist/core/daemon.d.ts +10 -1
  77. package/dist/core/daemon.js +155 -18
  78. package/dist/core/daemon.js.map +1 -1
  79. package/dist/core/handoff-sla.js +1 -1
  80. package/dist/core/handoff-sla.js.map +1 -1
  81. package/dist/core/injector.d.ts +2 -0
  82. package/dist/core/injector.js +107 -49
  83. package/dist/core/injector.js.map +1 -1
  84. package/dist/core/opencode-serve.d.ts +26 -0
  85. package/dist/core/opencode-serve.js +97 -0
  86. package/dist/core/opencode-serve.js.map +1 -0
  87. package/dist/core/opencode-session-policy.d.ts +10 -0
  88. package/dist/core/opencode-session-policy.js +10 -0
  89. package/dist/core/opencode-session-policy.js.map +1 -0
  90. package/dist/core/opencode-session.d.ts +12 -0
  91. package/dist/core/opencode-session.js +165 -0
  92. package/dist/core/opencode-session.js.map +1 -0
  93. package/dist/core/registry.d.ts +2 -1
  94. package/dist/core/registry.js +3 -2
  95. package/dist/core/registry.js.map +1 -1
  96. package/dist/core/tmux-runtime.d.ts +1 -0
  97. package/dist/core/tmux-runtime.js +4 -1
  98. package/dist/core/tmux-runtime.js.map +1 -1
  99. package/dist/core/tmux.js +5 -0
  100. package/dist/core/tmux.js.map +1 -1
  101. package/dist/runtime/adapters/opencode.d.ts +63 -0
  102. package/dist/runtime/adapters/opencode.js +358 -0
  103. package/dist/runtime/adapters/opencode.js.map +1 -0
  104. package/dist/runtime/adapters/tmux-fallback.d.ts +23 -0
  105. package/dist/runtime/adapters/tmux-fallback.js +148 -0
  106. package/dist/runtime/adapters/tmux-fallback.js.map +1 -0
  107. package/dist/runtime/adapters/tmux-fallback.test.d.ts +4 -0
  108. package/dist/runtime/adapters/tmux-fallback.test.js +91 -0
  109. package/dist/runtime/adapters/tmux-fallback.test.js.map +1 -0
  110. package/dist/runtime/index.d.ts +146 -0
  111. package/dist/runtime/index.js +191 -0
  112. package/dist/runtime/index.js.map +1 -0
  113. package/dist/runtime/registry.d.ts +53 -0
  114. package/dist/runtime/registry.js +112 -0
  115. package/dist/runtime/registry.js.map +1 -0
  116. package/dist/runtime/registry.test.d.ts +4 -0
  117. package/dist/runtime/registry.test.js +69 -0
  118. package/dist/runtime/registry.test.js.map +1 -0
  119. package/dist/runtime/types.d.ts +158 -0
  120. package/dist/runtime/types.js +8 -0
  121. package/dist/runtime/types.js.map +1 -0
  122. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tmux-fallback.test.js","sourceRoot":"","sources":["../../../src/runtime/adapters/tmux-fallback.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Runtime I/O Module
3
+ *
4
+ * Cross-runner runtime I/O contract for AgentMesh.
5
+ * Provides normalized event-based output instead of tmux pane scraping.
6
+ *
7
+ * Usage:
8
+ * import { runtimeChat } from './runtime/index.js';
9
+ *
10
+ * const response = await runtimeChat.injectAndWait(agentName, {
11
+ * content: "What is the status?",
12
+ * outputMode: "structured",
13
+ * messageId: "msg_123",
14
+ * workspace: "my-workspace",
15
+ * agentId: "agent_456"
16
+ * });
17
+ */
18
+ import { detectRunner, getAdapterRegistry, selectAdapter } from "./registry.js";
19
+ import type { ChatInputRequest, ChatOutputResponse, OutputMode, WaitForOutputOptions } from "./types.js";
20
+ export { OpenCodeAdapter, opencodeAdapter } from "./adapters/opencode.js";
21
+ export { TmuxFallbackAdapter, tmuxFallbackAdapter } from "./adapters/tmux-fallback.js";
22
+ export { detectRunner, getAdapterRegistry, selectAdapter } from "./registry.js";
23
+ export type { ChatInputRequest, ChatOutputResponse, OutputMode, RunnerDetectionResult, RuntimeAdapter, RuntimeEvent, RuntimeEventType, StructuredOutput, WaitForOutputOptions, } from "./types.js";
24
+ /**
25
+ * Runtime chat API
26
+ */
27
+ export declare const runtimeChat: {
28
+ /**
29
+ * Inject chat input into agent session
30
+ */
31
+ inject(agentName: string, request: ChatInputRequest): Promise<boolean>;
32
+ /**
33
+ * Capture current output from agent session
34
+ */
35
+ capture(agentName: string, request: ChatInputRequest): Promise<ChatOutputResponse>;
36
+ /**
37
+ * Wait for stable output from the current session state (does not inject input).
38
+ */
39
+ wait(agentName: string, request: ChatInputRequest, options?: WaitForOutputOptions): Promise<ChatOutputResponse>;
40
+ /**
41
+ * Inject input and wait for stable output
42
+ */
43
+ injectAndWait(agentName: string, request: ChatInputRequest, options?: WaitForOutputOptions): Promise<ChatOutputResponse>;
44
+ /**
45
+ * Quick chat with default options
46
+ */
47
+ quickChat(agentName: string, content: string, outputMode?: OutputMode, context?: {
48
+ messageId?: string;
49
+ workspace?: string;
50
+ agentId?: string;
51
+ }): Promise<string>;
52
+ };
53
+ /**
54
+ * Runtime control API (for terminal commands)
55
+ */
56
+ export declare const runtimeControl: {
57
+ /**
58
+ * Execute terminal command in agent session
59
+ */
60
+ execute(agentName: string, command: string, outputMode?: OutputMode): Promise<ChatOutputResponse>;
61
+ };
62
+ /**
63
+ * Utility functions
64
+ */
65
+ export declare const runtimeUtils: {
66
+ /**
67
+ * Detect runner type for agent
68
+ */
69
+ detectRunner(agentName: string): Promise<{
70
+ runnerType: string;
71
+ structuredEventsAvailable: boolean;
72
+ recommendedAdapter: string;
73
+ }>;
74
+ /**
75
+ * Check if agent session is available
76
+ */
77
+ isAvailable(agentName: string): Promise<boolean>;
78
+ /**
79
+ * Get adapter info for agent
80
+ */
81
+ getAdapterInfo(agentName: string): Promise<{
82
+ adapterId: string;
83
+ adapterName: string;
84
+ supportsStructuredEvents: boolean;
85
+ } | null>;
86
+ };
87
+ declare const _default: {
88
+ chat: {
89
+ /**
90
+ * Inject chat input into agent session
91
+ */
92
+ inject(agentName: string, request: ChatInputRequest): Promise<boolean>;
93
+ /**
94
+ * Capture current output from agent session
95
+ */
96
+ capture(agentName: string, request: ChatInputRequest): Promise<ChatOutputResponse>;
97
+ /**
98
+ * Wait for stable output from the current session state (does not inject input).
99
+ */
100
+ wait(agentName: string, request: ChatInputRequest, options?: WaitForOutputOptions): Promise<ChatOutputResponse>;
101
+ /**
102
+ * Inject input and wait for stable output
103
+ */
104
+ injectAndWait(agentName: string, request: ChatInputRequest, options?: WaitForOutputOptions): Promise<ChatOutputResponse>;
105
+ /**
106
+ * Quick chat with default options
107
+ */
108
+ quickChat(agentName: string, content: string, outputMode?: OutputMode, context?: {
109
+ messageId?: string;
110
+ workspace?: string;
111
+ agentId?: string;
112
+ }): Promise<string>;
113
+ };
114
+ control: {
115
+ /**
116
+ * Execute terminal command in agent session
117
+ */
118
+ execute(agentName: string, command: string, outputMode?: OutputMode): Promise<ChatOutputResponse>;
119
+ };
120
+ utils: {
121
+ /**
122
+ * Detect runner type for agent
123
+ */
124
+ detectRunner(agentName: string): Promise<{
125
+ runnerType: string;
126
+ structuredEventsAvailable: boolean;
127
+ recommendedAdapter: string;
128
+ }>;
129
+ /**
130
+ * Check if agent session is available
131
+ */
132
+ isAvailable(agentName: string): Promise<boolean>;
133
+ /**
134
+ * Get adapter info for agent
135
+ */
136
+ getAdapterInfo(agentName: string): Promise<{
137
+ adapterId: string;
138
+ adapterName: string;
139
+ supportsStructuredEvents: boolean;
140
+ } | null>;
141
+ };
142
+ getAdapterRegistry: typeof getAdapterRegistry;
143
+ selectAdapter: typeof selectAdapter;
144
+ detectRunner: typeof detectRunner;
145
+ };
146
+ export default _default;
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Runtime I/O Module
3
+ *
4
+ * Cross-runner runtime I/O contract for AgentMesh.
5
+ * Provides normalized event-based output instead of tmux pane scraping.
6
+ *
7
+ * Usage:
8
+ * import { runtimeChat } from './runtime/index.js';
9
+ *
10
+ * const response = await runtimeChat.injectAndWait(agentName, {
11
+ * content: "What is the status?",
12
+ * outputMode: "structured",
13
+ * messageId: "msg_123",
14
+ * workspace: "my-workspace",
15
+ * agentId: "agent_456"
16
+ * });
17
+ */
18
+ import { getSessionName as getTmuxSessionName } from "../core/tmux.js";
19
+ import { detectRunner, getAdapterRegistry, selectAdapter } from "./registry.js";
20
+ export { OpenCodeAdapter, opencodeAdapter } from "./adapters/opencode.js";
21
+ // Re-export adapters
22
+ export { TmuxFallbackAdapter, tmuxFallbackAdapter } from "./adapters/tmux-fallback.js";
23
+ // Re-export registry functions
24
+ export { detectRunner, getAdapterRegistry, selectAdapter } from "./registry.js";
25
+ /**
26
+ * Runtime chat API
27
+ */
28
+ export const runtimeChat = {
29
+ /**
30
+ * Inject chat input into agent session
31
+ */
32
+ async inject(agentName, request) {
33
+ const sessionName = getSessionName(agentName);
34
+ const adapter = await selectAdapter(sessionName);
35
+ return adapter.injectInput(sessionName, request);
36
+ },
37
+ /**
38
+ * Capture current output from agent session
39
+ */
40
+ async capture(agentName, request) {
41
+ const sessionName = getSessionName(agentName);
42
+ const adapter = await selectAdapter(sessionName);
43
+ return adapter.captureOutput(sessionName, request);
44
+ },
45
+ /**
46
+ * Wait for stable output from the current session state (does not inject input).
47
+ */
48
+ async wait(agentName, request, options) {
49
+ const sessionName = getSessionName(agentName);
50
+ const adapter = await selectAdapter(sessionName);
51
+ return adapter.waitForOutput(sessionName, request, options);
52
+ },
53
+ /**
54
+ * Inject input and wait for stable output
55
+ */
56
+ async injectAndWait(agentName, request, options) {
57
+ const sessionName = getSessionName(agentName);
58
+ const adapter = await selectAdapter(sessionName);
59
+ const injected = await adapter.injectInput(sessionName, request);
60
+ if (!injected) {
61
+ return {
62
+ mode: "clean",
63
+ content: "[AgentMesh runtime] Failed to inject message - session unavailable",
64
+ };
65
+ }
66
+ return adapter.waitForOutput(sessionName, request, options);
67
+ },
68
+ /**
69
+ * Quick chat with default options
70
+ */
71
+ async quickChat(agentName, content, outputMode = "clean", context) {
72
+ const request = {
73
+ content,
74
+ outputMode,
75
+ messageId: context?.messageId || `quick_${Date.now()}`,
76
+ workspace: context?.workspace || "default",
77
+ agentId: context?.agentId || agentName,
78
+ };
79
+ const response = await this.injectAndWait(agentName, request);
80
+ switch (response.mode) {
81
+ case "raw":
82
+ return response.content;
83
+ case "structured":
84
+ return response.data.content;
85
+ default:
86
+ return response.content;
87
+ }
88
+ },
89
+ };
90
+ /**
91
+ * Runtime control API (for terminal commands)
92
+ */
93
+ export const runtimeControl = {
94
+ /**
95
+ * Execute terminal command in agent session
96
+ */
97
+ async execute(agentName, command, outputMode = "raw") {
98
+ const sessionName = getSessionName(agentName);
99
+ const adapter = await selectAdapter(sessionName);
100
+ const request = {
101
+ content: command,
102
+ outputMode,
103
+ messageId: `cmd_${Date.now()}`,
104
+ workspace: "default",
105
+ agentId: agentName,
106
+ };
107
+ const injected = await adapter.injectInput(sessionName, request);
108
+ if (!injected) {
109
+ return {
110
+ mode: outputMode,
111
+ content: outputMode === "structured" ? "" : "[AgentMesh runtime] Terminal unavailable",
112
+ ...(outputMode === "structured" && {
113
+ data: {
114
+ content: "",
115
+ rawOutput: "",
116
+ metadata: {
117
+ capturedAt: new Date().toISOString(),
118
+ linesCaptured: 0,
119
+ stabilizationMs: 0,
120
+ truncated: false,
121
+ },
122
+ parsing: {
123
+ success: false,
124
+ parser: "none",
125
+ error: "Terminal unavailable",
126
+ },
127
+ },
128
+ }),
129
+ };
130
+ }
131
+ return adapter.waitForOutput(sessionName, request);
132
+ },
133
+ };
134
+ /**
135
+ * Utility functions
136
+ */
137
+ export const runtimeUtils = {
138
+ /**
139
+ * Detect runner type for agent
140
+ */
141
+ async detectRunner(agentName) {
142
+ const sessionName = getSessionName(agentName);
143
+ return detectRunner(sessionName);
144
+ },
145
+ /**
146
+ * Check if agent session is available
147
+ */
148
+ async isAvailable(agentName) {
149
+ const sessionName = getSessionName(agentName);
150
+ try {
151
+ const adapter = await selectAdapter(sessionName);
152
+ return adapter.canHandle(sessionName);
153
+ }
154
+ catch {
155
+ return false;
156
+ }
157
+ },
158
+ /**
159
+ * Get adapter info for agent
160
+ */
161
+ async getAdapterInfo(agentName) {
162
+ const sessionName = getSessionName(agentName);
163
+ try {
164
+ const adapter = await selectAdapter(sessionName);
165
+ return {
166
+ adapterId: adapter.id,
167
+ adapterName: adapter.displayName,
168
+ supportsStructuredEvents: adapter.supportsStructuredEvents,
169
+ };
170
+ }
171
+ catch {
172
+ return null;
173
+ }
174
+ },
175
+ };
176
+ /**
177
+ * Get tmux session name for agent
178
+ */
179
+ function getSessionName(agentName) {
180
+ return getTmuxSessionName(agentName);
181
+ }
182
+ // Default export
183
+ export default {
184
+ chat: runtimeChat,
185
+ control: runtimeControl,
186
+ utils: runtimeUtils,
187
+ getAdapterRegistry,
188
+ selectAdapter,
189
+ detectRunner,
190
+ };
191
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Runtime Adapter Registry
3
+ *
4
+ * Manages available runtime adapters and provides selection
5
+ * based on runner type and capabilities.
6
+ */
7
+ import type { RunnerDetectionResult, RuntimeAdapter } from "./types.js";
8
+ /**
9
+ * Registry of available runtime adapters
10
+ */
11
+ export declare class AdapterRegistry {
12
+ private adapters;
13
+ private fallbackAdapter;
14
+ constructor();
15
+ /**
16
+ * Register a new adapter
17
+ */
18
+ register(adapter: RuntimeAdapter): void;
19
+ /**
20
+ * Get adapter by ID
21
+ */
22
+ get(id: string): RuntimeAdapter | undefined;
23
+ /**
24
+ * Get all registered adapters
25
+ */
26
+ getAll(): RuntimeAdapter[];
27
+ /**
28
+ * Get the fallback adapter
29
+ */
30
+ getFallback(): RuntimeAdapter;
31
+ /**
32
+ * Select the best adapter for a given session
33
+ */
34
+ selectAdapter(sessionName: string): Promise<RuntimeAdapter>;
35
+ /**
36
+ * Detect runner type and recommend adapter
37
+ */
38
+ detectRunner(sessionName: string): Promise<RunnerDetectionResult>;
39
+ }
40
+ /** Global registry instance */
41
+ export declare const adapterRegistry: AdapterRegistry;
42
+ /**
43
+ * Get the global adapter registry
44
+ */
45
+ export declare function getAdapterRegistry(): AdapterRegistry;
46
+ /**
47
+ * Select adapter for session (convenience function)
48
+ */
49
+ export declare function selectAdapter(sessionName: string): Promise<RuntimeAdapter>;
50
+ /**
51
+ * Detect runner for session (convenience function)
52
+ */
53
+ export declare function detectRunner(sessionName: string): Promise<RunnerDetectionResult>;
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Runtime Adapter Registry
3
+ *
4
+ * Manages available runtime adapters and provides selection
5
+ * based on runner type and capabilities.
6
+ */
7
+ import { opencodeAdapter } from "./adapters/opencode.js";
8
+ import { tmuxFallbackAdapter } from "./adapters/tmux-fallback.js";
9
+ /**
10
+ * Registry of available runtime adapters
11
+ */
12
+ export class AdapterRegistry {
13
+ adapters = new Map();
14
+ fallbackAdapter;
15
+ constructor() {
16
+ // Register built-in adapters
17
+ this.register(opencodeAdapter);
18
+ // Set fallback
19
+ this.fallbackAdapter = tmuxFallbackAdapter;
20
+ }
21
+ /**
22
+ * Register a new adapter
23
+ */
24
+ register(adapter) {
25
+ this.adapters.set(adapter.id, adapter);
26
+ }
27
+ /**
28
+ * Get adapter by ID
29
+ */
30
+ get(id) {
31
+ return this.adapters.get(id);
32
+ }
33
+ /**
34
+ * Get all registered adapters
35
+ */
36
+ getAll() {
37
+ return Array.from(this.adapters.values());
38
+ }
39
+ /**
40
+ * Get the fallback adapter
41
+ */
42
+ getFallback() {
43
+ return this.fallbackAdapter;
44
+ }
45
+ /**
46
+ * Select the best adapter for a given session
47
+ */
48
+ async selectAdapter(sessionName) {
49
+ // Try specialized adapters first (in priority order)
50
+ for (const adapter of this.adapters.values()) {
51
+ if (await adapter.canHandle(sessionName)) {
52
+ return adapter;
53
+ }
54
+ }
55
+ // Fall back to generic tmux adapter
56
+ if (await this.fallbackAdapter.canHandle(sessionName)) {
57
+ return this.fallbackAdapter;
58
+ }
59
+ throw new Error(`No adapter available for session: ${sessionName}`);
60
+ }
61
+ /**
62
+ * Detect runner type and recommend adapter
63
+ */
64
+ async detectRunner(sessionName) {
65
+ // Check if session exists
66
+ const fallbackCanHandle = await this.fallbackAdapter.canHandle(sessionName);
67
+ if (!fallbackCanHandle) {
68
+ return {
69
+ runnerType: "unknown",
70
+ structuredEventsAvailable: false,
71
+ recommendedAdapter: "none",
72
+ };
73
+ }
74
+ // Try to detect specific runner
75
+ for (const adapter of this.adapters.values()) {
76
+ if (await adapter.canHandle(sessionName)) {
77
+ return {
78
+ runnerType: adapter.supportedRunners[0] || "unknown",
79
+ structuredEventsAvailable: adapter.supportsStructuredEvents,
80
+ recommendedAdapter: adapter.id,
81
+ };
82
+ }
83
+ }
84
+ // Generic tmux session
85
+ return {
86
+ runnerType: "tmux",
87
+ structuredEventsAvailable: false,
88
+ recommendedAdapter: this.fallbackAdapter.id,
89
+ };
90
+ }
91
+ }
92
+ /** Global registry instance */
93
+ export const adapterRegistry = new AdapterRegistry();
94
+ /**
95
+ * Get the global adapter registry
96
+ */
97
+ export function getAdapterRegistry() {
98
+ return adapterRegistry;
99
+ }
100
+ /**
101
+ * Select adapter for session (convenience function)
102
+ */
103
+ export async function selectAdapter(sessionName) {
104
+ return adapterRegistry.selectAdapter(sessionName);
105
+ }
106
+ /**
107
+ * Detect runner for session (convenience function)
108
+ */
109
+ export async function detectRunner(sessionName) {
110
+ return adapterRegistry.detectRunner(sessionName);
111
+ }
112
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Adapter Registry Tests
3
+ */
4
+ export {};
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Adapter Registry Tests
3
+ */
4
+ import { beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { TmuxFallbackAdapter } from "./adapters/tmux-fallback.js";
6
+ import { AdapterRegistry, detectRunner, selectAdapter } from "./registry.js";
7
+ // Mock the tmux module
8
+ vi.mock("../../core/tmux.js", () => ({
9
+ sessionExists: vi.fn((name) => name.includes("test")),
10
+ sendKeys: vi.fn(() => true),
11
+ captureSessionOutput: vi.fn(() => "test output"),
12
+ getSessionName: vi.fn((name) => `agentmesh-${name}`),
13
+ }));
14
+ describe("AdapterRegistry", () => {
15
+ let registry;
16
+ beforeEach(() => {
17
+ registry = new AdapterRegistry();
18
+ });
19
+ describe("registration", () => {
20
+ it("should register adapters", () => {
21
+ const customAdapter = new TmuxFallbackAdapter();
22
+ registry.register(customAdapter);
23
+ expect(registry.get("tmux-fallback")).toBeDefined();
24
+ });
25
+ it("should return all registered adapters", () => {
26
+ const adapters = registry.getAll();
27
+ expect(adapters.length).toBeGreaterThanOrEqual(1); // At least opencode
28
+ });
29
+ });
30
+ describe("fallback adapter", () => {
31
+ it("should have a fallback adapter", () => {
32
+ const fallback = registry.getFallback();
33
+ expect(fallback).toBeDefined();
34
+ expect(fallback.id).toBe("tmux-fallback");
35
+ });
36
+ });
37
+ describe("selectAdapter", () => {
38
+ it("should return fallback for generic session", async () => {
39
+ const adapter = await registry.selectAdapter("agentmesh-test");
40
+ expect(adapter).toBeDefined();
41
+ });
42
+ it("should throw error for non-existent session", async () => {
43
+ await expect(registry.selectAdapter("agentmesh-nonexistent")).rejects.toThrow();
44
+ });
45
+ });
46
+ describe("detectRunner", () => {
47
+ it("should detect tmux session", async () => {
48
+ const result = await registry.detectRunner("agentmesh-test");
49
+ expect(result.runnerType).toBeDefined();
50
+ expect(result.recommendedAdapter).toBeDefined();
51
+ });
52
+ it("should return unknown for non-existent session", async () => {
53
+ const result = await registry.detectRunner("agentmesh-nonexistent");
54
+ expect(result.runnerType).toBe("unknown");
55
+ expect(result.recommendedAdapter).toBe("none");
56
+ });
57
+ });
58
+ });
59
+ describe("convenience functions", () => {
60
+ it("selectAdapter should work with global registry", async () => {
61
+ const adapter = await selectAdapter("agentmesh-test");
62
+ expect(adapter).toBeDefined();
63
+ });
64
+ it("detectRunner should work with global registry", async () => {
65
+ const result = await detectRunner("agentmesh-test");
66
+ expect(result.runnerType).toBeDefined();
67
+ });
68
+ });
69
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/runtime/registry.test.ts"],"names":[],"mappings":"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"}