funolio-agent 1.0.53 → 1.1.65

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 (276) hide show
  1. package/dist/approval.d.ts +1 -6
  2. package/dist/approval.d.ts.map +1 -1
  3. package/dist/approval.js +2 -7
  4. package/dist/approval.js.map +1 -1
  5. package/dist/auth/credential-reader.d.ts.map +1 -1
  6. package/dist/auth/credential-reader.js +4 -3
  7. package/dist/auth/credential-reader.js.map +1 -1
  8. package/dist/auth/token-refresh.d.ts +8 -0
  9. package/dist/auth/token-refresh.d.ts.map +1 -1
  10. package/dist/auth/token-refresh.js +82 -52
  11. package/dist/auth/token-refresh.js.map +1 -1
  12. package/dist/auto-organizer.d.ts.map +1 -1
  13. package/dist/auto-organizer.js +6 -7
  14. package/dist/auto-organizer.js.map +1 -1
  15. package/dist/bench-prefix.d.ts +16 -0
  16. package/dist/bench-prefix.d.ts.map +1 -0
  17. package/dist/bench-prefix.js +25 -0
  18. package/dist/bench-prefix.js.map +1 -0
  19. package/dist/bot-manager.d.ts +5 -1
  20. package/dist/bot-manager.d.ts.map +1 -1
  21. package/dist/bot-manager.js +46 -27
  22. package/dist/bot-manager.js.map +1 -1
  23. package/dist/chat-sync.d.ts +42 -0
  24. package/dist/chat-sync.d.ts.map +1 -0
  25. package/dist/chat-sync.js +95 -0
  26. package/dist/chat-sync.js.map +1 -0
  27. package/dist/clerk-model.d.ts +7 -0
  28. package/dist/clerk-model.d.ts.map +1 -1
  29. package/dist/clerk-model.js +42 -8
  30. package/dist/clerk-model.js.map +1 -1
  31. package/dist/cli-bootstrap-history.d.ts +10 -0
  32. package/dist/cli-bootstrap-history.d.ts.map +1 -0
  33. package/dist/cli-bootstrap-history.js +112 -0
  34. package/dist/cli-bootstrap-history.js.map +1 -0
  35. package/dist/cli-models.d.ts +8 -0
  36. package/dist/cli-models.d.ts.map +1 -0
  37. package/dist/cli-models.js +91 -0
  38. package/dist/cli-models.js.map +1 -0
  39. package/dist/cli-session-epoch.d.ts +13 -3
  40. package/dist/cli-session-epoch.d.ts.map +1 -1
  41. package/dist/cli-session-epoch.js +53 -4
  42. package/dist/cli-session-epoch.js.map +1 -1
  43. package/dist/cli-session-registry.d.ts +35 -0
  44. package/dist/cli-session-registry.d.ts.map +1 -0
  45. package/dist/cli-session-registry.js +177 -0
  46. package/dist/cli-session-registry.js.map +1 -0
  47. package/dist/cli.js +62 -0
  48. package/dist/cli.js.map +1 -1
  49. package/dist/codex-app-server-manager.d.ts +189 -0
  50. package/dist/codex-app-server-manager.d.ts.map +1 -0
  51. package/dist/codex-app-server-manager.js +1468 -0
  52. package/dist/codex-app-server-manager.js.map +1 -0
  53. package/dist/commands/init.d.ts.map +1 -1
  54. package/dist/commands/init.js +8 -30
  55. package/dist/commands/init.js.map +1 -1
  56. package/dist/commands/pool.d.ts +32 -0
  57. package/dist/commands/pool.d.ts.map +1 -1
  58. package/dist/commands/pool.js +145 -66
  59. package/dist/commands/pool.js.map +1 -1
  60. package/dist/commands/setup.d.ts +4 -1
  61. package/dist/commands/setup.d.ts.map +1 -1
  62. package/dist/commands/setup.js +9 -25
  63. package/dist/commands/setup.js.map +1 -1
  64. package/dist/commands/start.d.ts +21 -0
  65. package/dist/commands/start.d.ts.map +1 -1
  66. package/dist/commands/start.js +559 -63
  67. package/dist/commands/start.js.map +1 -1
  68. package/dist/commands/status.d.ts.map +1 -1
  69. package/dist/commands/status.js +5 -2
  70. package/dist/commands/status.js.map +1 -1
  71. package/dist/completion-marker.d.ts +7 -0
  72. package/dist/completion-marker.d.ts.map +1 -0
  73. package/dist/completion-marker.js +28 -0
  74. package/dist/completion-marker.js.map +1 -0
  75. package/dist/config.d.ts +7 -2
  76. package/dist/config.d.ts.map +1 -1
  77. package/dist/config.js +184 -60
  78. package/dist/config.js.map +1 -1
  79. package/dist/context-window.d.ts +37 -1
  80. package/dist/context-window.d.ts.map +1 -1
  81. package/dist/context-window.js +210 -17
  82. package/dist/context-window.js.map +1 -1
  83. package/dist/live-activity.d.ts +31 -0
  84. package/dist/live-activity.d.ts.map +1 -0
  85. package/dist/live-activity.js +36 -0
  86. package/dist/live-activity.js.map +1 -0
  87. package/dist/local-chat-execution.d.ts +114 -0
  88. package/dist/local-chat-execution.d.ts.map +1 -0
  89. package/dist/local-chat-execution.js +349 -0
  90. package/dist/local-chat-execution.js.map +1 -0
  91. package/dist/local-cli-pty-manager.d.ts +186 -0
  92. package/dist/local-cli-pty-manager.d.ts.map +1 -1
  93. package/dist/local-cli-pty-manager.js +2581 -164
  94. package/dist/local-cli-pty-manager.js.map +1 -1
  95. package/dist/local-conversation-gateway.d.ts +110 -0
  96. package/dist/local-conversation-gateway.d.ts.map +1 -0
  97. package/dist/local-conversation-gateway.js +175 -0
  98. package/dist/local-conversation-gateway.js.map +1 -0
  99. package/dist/local-data.d.ts +276 -5
  100. package/dist/local-data.d.ts.map +1 -1
  101. package/dist/local-data.js +1201 -86
  102. package/dist/local-data.js.map +1 -1
  103. package/dist/local-db.d.ts +6 -0
  104. package/dist/local-db.d.ts.map +1 -1
  105. package/dist/local-db.js +428 -2
  106. package/dist/local-db.js.map +1 -1
  107. package/dist/local-funnel.d.ts.map +1 -1
  108. package/dist/local-funnel.js +6 -5
  109. package/dist/local-funnel.js.map +1 -1
  110. package/dist/local-server.d.ts +55 -0
  111. package/dist/local-server.d.ts.map +1 -1
  112. package/dist/local-server.js +3281 -441
  113. package/dist/local-server.js.map +1 -1
  114. package/dist/managed-process-registry.d.ts +59 -0
  115. package/dist/managed-process-registry.d.ts.map +1 -0
  116. package/dist/managed-process-registry.js +390 -0
  117. package/dist/managed-process-registry.js.map +1 -0
  118. package/dist/mcp/claude-config-writer.d.ts +5 -5
  119. package/dist/mcp/claude-config-writer.d.ts.map +1 -1
  120. package/dist/mcp/claude-config-writer.js +19 -11
  121. package/dist/mcp/claude-config-writer.js.map +1 -1
  122. package/dist/mcp/index.d.ts +4 -2
  123. package/dist/mcp/index.d.ts.map +1 -1
  124. package/dist/mcp/index.js.map +1 -1
  125. package/dist/mcp/sync-cli-config.d.ts +42 -4
  126. package/dist/mcp/sync-cli-config.d.ts.map +1 -1
  127. package/dist/mcp/sync-cli-config.js +497 -17
  128. package/dist/mcp/sync-cli-config.js.map +1 -1
  129. package/dist/message-loop.d.ts +6 -0
  130. package/dist/message-loop.d.ts.map +1 -1
  131. package/dist/message-loop.js +281 -89
  132. package/dist/message-loop.js.map +1 -1
  133. package/dist/mqtt-client.d.ts +44 -1
  134. package/dist/mqtt-client.d.ts.map +1 -1
  135. package/dist/mqtt-client.js +284 -46
  136. package/dist/mqtt-client.js.map +1 -1
  137. package/dist/mqtt-data-relay.d.ts +44 -0
  138. package/dist/mqtt-data-relay.d.ts.map +1 -0
  139. package/dist/mqtt-data-relay.js +106 -0
  140. package/dist/mqtt-data-relay.js.map +1 -0
  141. package/dist/oauth.d.ts.map +1 -1
  142. package/dist/oauth.js +69 -29
  143. package/dist/oauth.js.map +1 -1
  144. package/dist/orchestration/capabilities.d.ts +13 -0
  145. package/dist/orchestration/capabilities.d.ts.map +1 -0
  146. package/dist/orchestration/capabilities.js +152 -0
  147. package/dist/orchestration/capabilities.js.map +1 -0
  148. package/dist/orchestration/dispatch-executor.d.ts +83 -0
  149. package/dist/orchestration/dispatch-executor.d.ts.map +1 -0
  150. package/dist/orchestration/dispatch-executor.js +266 -0
  151. package/dist/orchestration/dispatch-executor.js.map +1 -0
  152. package/dist/orchestration/dispatch-hint.d.ts +134 -0
  153. package/dist/orchestration/dispatch-hint.d.ts.map +1 -0
  154. package/dist/orchestration/dispatch-hint.js +247 -0
  155. package/dist/orchestration/dispatch-hint.js.map +1 -0
  156. package/dist/orchestration/dispatch-runner.d.ts +106 -0
  157. package/dist/orchestration/dispatch-runner.d.ts.map +1 -0
  158. package/dist/orchestration/dispatch-runner.js +604 -0
  159. package/dist/orchestration/dispatch-runner.js.map +1 -0
  160. package/dist/orchestration/dispatch-tools.d.ts +167 -0
  161. package/dist/orchestration/dispatch-tools.d.ts.map +1 -0
  162. package/dist/orchestration/dispatch-tools.js +328 -0
  163. package/dist/orchestration/dispatch-tools.js.map +1 -0
  164. package/dist/orchestration/front-door-policy.d.ts +35 -10
  165. package/dist/orchestration/front-door-policy.d.ts.map +1 -1
  166. package/dist/orchestration/front-door-policy.js +30 -267
  167. package/dist/orchestration/front-door-policy.js.map +1 -1
  168. package/dist/orchestration/orchestrator-dispatch-prompt.d.ts +43 -0
  169. package/dist/orchestration/orchestrator-dispatch-prompt.d.ts.map +1 -0
  170. package/dist/orchestration/orchestrator-dispatch-prompt.js +267 -0
  171. package/dist/orchestration/orchestrator-dispatch-prompt.js.map +1 -0
  172. package/dist/orchestration/orchestrator-operating-prompt.d.ts +15 -0
  173. package/dist/orchestration/orchestrator-operating-prompt.d.ts.map +1 -1
  174. package/dist/orchestration/orchestrator-operating-prompt.js +206 -20
  175. package/dist/orchestration/orchestrator-operating-prompt.js.map +1 -1
  176. package/dist/orchestration/plan-import.d.ts +39 -0
  177. package/dist/orchestration/plan-import.d.ts.map +1 -0
  178. package/dist/orchestration/plan-import.js +547 -0
  179. package/dist/orchestration/plan-import.js.map +1 -0
  180. package/dist/orchestration/validation.d.ts +40 -0
  181. package/dist/orchestration/validation.d.ts.map +1 -0
  182. package/dist/orchestration/validation.js +203 -0
  183. package/dist/orchestration/validation.js.map +1 -0
  184. package/dist/orchestration/worker-operating-prompt.d.ts +2 -0
  185. package/dist/orchestration/worker-operating-prompt.d.ts.map +1 -1
  186. package/dist/orchestration/worker-operating-prompt.js +36 -46
  187. package/dist/orchestration/worker-operating-prompt.js.map +1 -1
  188. package/dist/orchestrator.d.ts +214 -33
  189. package/dist/orchestrator.d.ts.map +1 -1
  190. package/dist/orchestrator.js +2200 -1100
  191. package/dist/orchestrator.js.map +1 -1
  192. package/dist/providers/anthropic.d.ts.map +1 -1
  193. package/dist/providers/anthropic.js +8 -4
  194. package/dist/providers/anthropic.js.map +1 -1
  195. package/dist/providers/claude-cli-prompt.d.ts.map +1 -1
  196. package/dist/providers/claude-cli-prompt.js +49 -5
  197. package/dist/providers/claude-cli-prompt.js.map +1 -1
  198. package/dist/providers/claude-cli.d.ts.map +1 -1
  199. package/dist/providers/claude-cli.js +81 -5
  200. package/dist/providers/claude-cli.js.map +1 -1
  201. package/dist/providers/codex-cli.d.ts +10 -6
  202. package/dist/providers/codex-cli.d.ts.map +1 -1
  203. package/dist/providers/codex-cli.js +204 -26
  204. package/dist/providers/codex-cli.js.map +1 -1
  205. package/dist/providers/google.d.ts.map +1 -1
  206. package/dist/providers/google.js +15 -5
  207. package/dist/providers/google.js.map +1 -1
  208. package/dist/providers/index.d.ts +15 -1
  209. package/dist/providers/index.d.ts.map +1 -1
  210. package/dist/providers/index.js.map +1 -1
  211. package/dist/providers/openai.d.ts +1 -1
  212. package/dist/providers/openai.d.ts.map +1 -1
  213. package/dist/providers/openai.js +13 -5
  214. package/dist/providers/openai.js.map +1 -1
  215. package/dist/response-guard.js +1 -1
  216. package/dist/response-guard.js.map +1 -1
  217. package/dist/server-adapter.d.ts +8 -0
  218. package/dist/server-adapter.d.ts.map +1 -1
  219. package/dist/server-adapter.js +7 -0
  220. package/dist/server-adapter.js.map +1 -1
  221. package/dist/service-mode.d.ts +1 -1
  222. package/dist/service-mode.d.ts.map +1 -1
  223. package/dist/service-mode.js +64 -1
  224. package/dist/service-mode.js.map +1 -1
  225. package/dist/service-setup-only.d.ts +8 -0
  226. package/dist/service-setup-only.d.ts.map +1 -0
  227. package/dist/service-setup-only.js +37 -0
  228. package/dist/service-setup-only.js.map +1 -0
  229. package/dist/slash-commands.d.ts +21 -0
  230. package/dist/slash-commands.d.ts.map +1 -0
  231. package/dist/slash-commands.js +99 -0
  232. package/dist/slash-commands.js.map +1 -0
  233. package/dist/subagent/index.d.ts +4 -2
  234. package/dist/subagent/index.d.ts.map +1 -1
  235. package/dist/subagent/index.js.map +1 -1
  236. package/dist/summarization-pipeline.d.ts.map +1 -1
  237. package/dist/summarization-pipeline.js +1 -9
  238. package/dist/summarization-pipeline.js.map +1 -1
  239. package/dist/token-counter.d.ts.map +1 -1
  240. package/dist/token-counter.js +11 -4
  241. package/dist/token-counter.js.map +1 -1
  242. package/dist/tool-filter.d.ts.map +1 -1
  243. package/dist/tool-filter.js +10 -6
  244. package/dist/tool-filter.js.map +1 -1
  245. package/dist/tools/admin-tools.d.ts.map +1 -1
  246. package/dist/tools/admin-tools.js +20 -5
  247. package/dist/tools/admin-tools.js.map +1 -1
  248. package/dist/tools/index.d.ts.map +1 -1
  249. package/dist/tools/index.js +2 -1
  250. package/dist/tools/index.js.map +1 -1
  251. package/dist/tools/run-command.d.ts.map +1 -1
  252. package/dist/tools/run-command.js +5 -1
  253. package/dist/tools/run-command.js.map +1 -1
  254. package/dist/tools/search-conversation-history.d.ts +16 -0
  255. package/dist/tools/search-conversation-history.d.ts.map +1 -0
  256. package/dist/tools/search-conversation-history.js +334 -0
  257. package/dist/tools/search-conversation-history.js.map +1 -0
  258. package/dist/tools/todo-tasks.d.ts.map +1 -1
  259. package/dist/tools/todo-tasks.js +77 -5
  260. package/dist/tools/todo-tasks.js.map +1 -1
  261. package/dist/usage-log.d.ts +62 -0
  262. package/dist/usage-log.d.ts.map +1 -0
  263. package/dist/usage-log.js +98 -0
  264. package/dist/usage-log.js.map +1 -0
  265. package/dist/wizard-state.d.ts +20 -0
  266. package/dist/wizard-state.d.ts.map +1 -1
  267. package/dist/wizard-state.js +90 -3
  268. package/dist/wizard-state.js.map +1 -1
  269. package/dist/wizard-support.d.ts.map +1 -1
  270. package/dist/wizard-support.js +27 -1
  271. package/dist/wizard-support.js.map +1 -1
  272. package/dist/workflow-engine.d.ts +44 -2
  273. package/dist/workflow-engine.d.ts.map +1 -1
  274. package/dist/workflow-engine.js +932 -111
  275. package/dist/workflow-engine.js.map +1 -1
  276. package/package.json +2 -2
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
@@ -6,6 +39,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.AgentMqttClient = void 0;
7
40
  const mqtt_1 = __importDefault(require("mqtt"));
8
41
  const chalk_1 = __importDefault(require("chalk"));
42
+ const crypto = __importStar(require("crypto"));
43
+ const os = __importStar(require("os"));
44
+ /** Convert an MQTT topic pattern (with `+` / `#` wildcards) to a RegExp. */
45
+ function topicPatternToRegExp(pattern) {
46
+ const escaped = pattern
47
+ .split('/')
48
+ .map((seg) => {
49
+ if (seg === '+')
50
+ return '[^/]+';
51
+ if (seg === '#')
52
+ return '.*';
53
+ return seg.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
54
+ })
55
+ .join('/');
56
+ return new RegExp('^' + escaped + '$');
57
+ }
9
58
  class AgentMqttClient {
10
59
  client = null;
11
60
  options;
@@ -15,7 +64,14 @@ class AgentMqttClient {
15
64
  approvalHandler = null;
16
65
  integrationTokenHandler = null;
17
66
  reconnectCount = 0;
67
+ reconnectRebuildInFlight = false;
68
+ rebuildRetryCount = 0;
69
+ refreshInFlight = null;
70
+ chunkSeqByCommand = new Map();
71
+ extraSubscriptions = [];
18
72
  static MAX_RECONNECT_ATTEMPTS = 10;
73
+ static BASE_RECONNECT_MS = 5000;
74
+ static MAX_RECONNECT_MS = 60000;
19
75
  static REFRESH_BEFORE_EXPIRY_MS = 5 * 60 * 1000; // 5 minutes
20
76
  static JWT_TTL_MS = 60 * 60 * 1000; // 1 hour
21
77
  constructor(options) {
@@ -30,7 +86,8 @@ class AgentMqttClient {
30
86
  throw new Error('Cannot connect to MQTT: mqttJwt is missing or empty. Please run \'funolio-agent login\' to set up your credentials.');
31
87
  }
32
88
  return new Promise((resolve, reject) => {
33
- const clientId = `funolio-agent-${this.options.userId}-${Date.now()}`;
89
+ const clientId = this.buildStableClientId();
90
+ let initialConnectSettled = false;
34
91
  const isTls = this.options.brokerUrl.startsWith('mqtts://');
35
92
  console.log(chalk_1.default.blue(`🔌 Connecting to MQTT broker: ${this.options.brokerUrl} (TLS: ${isTls ? 'yes' : 'no'})`));
36
93
  const mqttOptions = {
@@ -39,7 +96,7 @@ class AgentMqttClient {
39
96
  password: this.options.mqttJwt,
40
97
  clean: true,
41
98
  keepalive: 60,
42
- reconnectPeriod: 5000,
99
+ reconnectPeriod: AgentMqttClient.BASE_RECONNECT_MS,
43
100
  connectTimeout: 10000,
44
101
  rejectUnauthorized: false, // EMQX uses self-signed TLS cert
45
102
  will: {
@@ -52,28 +109,72 @@ class AgentMqttClient {
52
109
  retain: true,
53
110
  },
54
111
  };
55
- this.client = mqtt_1.default.connect(this.options.brokerUrl, mqttOptions);
56
- this.client.on('connect', () => {
57
- this.reconnectCount = 0;
112
+ const client = mqtt_1.default.connect(this.options.brokerUrl, mqttOptions);
113
+ this.client = client;
114
+ client.on('connect', () => {
115
+ if (this.client !== client)
116
+ return;
117
+ const reconnectAttempts = this.reconnectCount;
58
118
  // Subscribe to commands, approval responses, and integration tokens
59
119
  const commandTopic = `funolio/${this.options.userId}/agent/commands`;
60
120
  const approvalTopic = `funolio/${this.options.userId}/agent/approval_response`;
61
121
  const integrationTokensTopic = `funolio/${this.options.userId}/agent/integration_tokens`;
62
- this.client.subscribe([commandTopic, approvalTopic, integrationTokensTopic], { qos: 1 }, (err) => {
122
+ const topics = [
123
+ commandTopic,
124
+ approvalTopic,
125
+ integrationTokensTopic,
126
+ ...this.extraSubscriptions.map((sub) => sub.topic),
127
+ ];
128
+ client.subscribe([...new Set(topics)], { qos: 1 }, (err) => {
129
+ if (this.client !== client)
130
+ return;
63
131
  if (err) {
64
- reject(new Error(`Failed to subscribe: ${err.message}`));
132
+ if (!initialConnectSettled) {
133
+ initialConnectSettled = true;
134
+ reject(new Error(`Failed to subscribe: ${err.message}`));
135
+ }
136
+ else {
137
+ console.error(chalk_1.default.red(` Failed to re-subscribe after reconnect: ${err.message}`));
138
+ }
65
139
  return;
66
140
  }
141
+ if (reconnectAttempts > 0) {
142
+ console.log(chalk_1.default.green(` Reconnected after ${reconnectAttempts} attempt(s)`));
143
+ }
67
144
  // Publish online status
68
145
  this.publishStatus('online');
69
146
  // Start heartbeat
70
147
  this.startHeartbeat();
71
148
  // Start JWT refresh timer
72
149
  this.startRefreshTimer();
73
- resolve();
150
+ this.reconnectCount = 0;
151
+ this.reconnectRebuildInFlight = false;
152
+ this.rebuildRetryCount = 0;
153
+ client.options.reconnectPeriod = AgentMqttClient.BASE_RECONNECT_MS;
154
+ if (!initialConnectSettled) {
155
+ initialConnectSettled = true;
156
+ resolve();
157
+ }
74
158
  });
75
159
  });
76
- this.client.on('message', (topic, payload) => {
160
+ client.on('message', (topic, payload) => {
161
+ if (this.client !== client)
162
+ return;
163
+ // Dispatch extra pattern-based subscriptions first (pool request topics etc.)
164
+ let handledByExtra = false;
165
+ for (const sub of this.extraSubscriptions) {
166
+ if (sub.regex.test(topic)) {
167
+ handledByExtra = true;
168
+ try {
169
+ sub.handler(topic, payload);
170
+ }
171
+ catch (err) {
172
+ console.error(chalk_1.default.red(`Topic handler error for ${topic}:`), err);
173
+ }
174
+ }
175
+ }
176
+ if (handledByExtra)
177
+ return;
77
178
  try {
78
179
  const message = JSON.parse(payload.toString());
79
180
  if (topic.endsWith('/approval_response') && this.approvalHandler) {
@@ -90,8 +191,12 @@ class AgentMqttClient {
90
191
  console.error(chalk_1.default.red('Failed to parse message:'), error);
91
192
  }
92
193
  });
93
- this.client.on('reconnect', async () => {
194
+ client.on('reconnect', async () => {
195
+ if (this.client !== client)
196
+ return;
94
197
  this.reconnectCount++;
198
+ const nextReconnectMs = this.computeReconnectPeriodMs(this.reconnectCount);
199
+ client.options.reconnectPeriod = nextReconnectMs;
95
200
  console.log(chalk_1.default.yellow(`⟳ Reconnecting to MQTT broker... (attempt ${this.reconnectCount}/${AgentMqttClient.MAX_RECONNECT_ATTEMPTS})`));
96
201
  // On reconnect attempt, try refreshing JWT in case it expired
97
202
  if (this.reconnectCount === 2 || this.reconnectCount === 5) {
@@ -99,8 +204,8 @@ class AgentMqttClient {
99
204
  try {
100
205
  await this.refreshMqttJwt();
101
206
  // Update the client's password with the new JWT for the next reconnect attempt
102
- if (this.client) {
103
- this.client.options.password = this.options.mqttJwt;
207
+ if (this.client === client) {
208
+ client.options.password = this.options.mqttJwt;
104
209
  }
105
210
  console.log(chalk_1.default.green(' ✓ JWT refreshed, retrying connection'));
106
211
  }
@@ -110,54 +215,43 @@ class AgentMqttClient {
110
215
  }
111
216
  if (this.reconnectCount >= AgentMqttClient.MAX_RECONNECT_ATTEMPTS) {
112
217
  console.error(chalk_1.default.red(`\n✗ Max reconnect attempts (${AgentMqttClient.MAX_RECONNECT_ATTEMPTS}) reached.`));
113
- // Last resort: try one more JWT refresh before giving up
218
+ // Last resort: refresh the token, then rebuild the MQTT client. Keeping
219
+ // the same mqtt.js client can leave local HTTP healthy while the cloud
220
+ // relay times out forever.
114
221
  try {
115
222
  await this.refreshMqttJwt();
116
- if (this.client) {
117
- this.client.options.password = this.options.mqttJwt;
223
+ if (this.client === client) {
224
+ client.options.password = this.options.mqttJwt;
118
225
  }
119
- this.reconnectCount = 0;
120
- console.log(chalk_1.default.green(' ✓ JWT refreshed, resetting reconnect counter'));
226
+ console.log(chalk_1.default.green(' ✓ JWT refreshed before MQTT client rebuild'));
121
227
  }
122
228
  catch {
123
- console.error(chalk_1.default.red(' Authentication failed. Please run \'funolio-agent login\' to set up your credentials.'));
124
- this.client?.end(true);
229
+ console.error(chalk_1.default.red(' MQTT JWT refresh failed before client rebuild; rebuilding with the current token.'));
125
230
  }
231
+ this.rebuildConnectionAfterReconnectFailure('max_reconnect_attempts');
126
232
  }
127
233
  });
128
- this.client.on('offline', () => {
129
- console.log(chalk_1.default.gray(' MQTT client went offline — will attempt JWT refresh'));
234
+ client.on('offline', () => {
235
+ if (this.client !== client)
236
+ return;
237
+ console.log(chalk_1.default.gray(' MQTT client went offline; reconnect will continue with the current JWT'));
130
238
  this.stopHeartbeat();
131
- // Proactively refresh JWT so the auto-reconnect has a valid token
132
- this.refreshMqttJwt().catch(() => { });
133
239
  });
134
- // Re-subscribe and restore state after successful reconnection
135
- this.client.on('connect', () => {
136
- if (this.reconnectCount > 0) {
137
- console.log(chalk_1.default.green(` ✓ Reconnected after ${this.reconnectCount} attempt(s)`));
138
- const commandTopic = `funolio/${this.options.userId}/agent/commands`;
139
- const approvalTopic = `funolio/${this.options.userId}/agent/approval_response`;
140
- const integrationTokensTopic = `funolio/${this.options.userId}/agent/integration_tokens`;
141
- this.client.subscribe([commandTopic, approvalTopic, integrationTokensTopic], { qos: 1 }, (err) => {
142
- if (err) {
143
- console.error(chalk_1.default.red(` ✗ Failed to re-subscribe after reconnect: ${err.message}`));
144
- }
145
- else {
146
- console.log(chalk_1.default.green(' ✓ Re-subscribed to command + approval topics'));
147
- }
148
- });
149
- this.publishStatus('online');
150
- this.startHeartbeat();
151
- this.reconnectCount = 0;
240
+ client.on('error', (error) => {
241
+ if (this.client !== client) {
242
+ console.warn(chalk_1.default.yellow(`[mqtt] Ignored stale MQTT client error: ${error.message}`));
243
+ return;
152
244
  }
153
- });
154
- this.client.on('error', (error) => {
155
245
  console.error(chalk_1.default.red(`MQTT error: ${error.message}`));
156
- if (this.reconnectCount === 0) {
246
+ if (!initialConnectSettled && this.reconnectCount === 0) {
247
+ initialConnectSettled = true;
157
248
  reject(error);
158
249
  }
159
250
  });
160
- this.client.on('close', () => {
251
+ client.on('close', () => {
252
+ if (this.client !== client)
253
+ return;
254
+ console.log(chalk_1.default.gray(` MQTT connection closed for ${clientId}`));
161
255
  this.stopHeartbeat();
162
256
  });
163
257
  });
@@ -171,12 +265,51 @@ class AgentMqttClient {
171
265
  onIntegrationTokens(handler) {
172
266
  this.integrationTokenHandler = handler;
173
267
  }
268
+ /**
269
+ * Subscribe to an arbitrary MQTT topic (may include `+` / `#` wildcards).
270
+ * The handler is invoked with the raw payload on every matching message.
271
+ *
272
+ * The subscription is remembered and re-established automatically after a
273
+ * reconnect. Safe to call before or after {@link connect}; if the client is
274
+ * not yet connected, the subscription is registered and will be sent once
275
+ * the client connects.
276
+ */
277
+ subscribeTopic(topic, handler, opts) {
278
+ const qos = (opts?.qos ?? 1);
279
+ const regex = topicPatternToRegExp(topic);
280
+ const existingIndex = this.extraSubscriptions.findIndex((sub) => sub.topic === topic);
281
+ if (existingIndex >= 0) {
282
+ this.extraSubscriptions[existingIndex] = { topic, qos, regex, handler };
283
+ }
284
+ else {
285
+ this.extraSubscriptions.push({ topic, qos, regex, handler });
286
+ }
287
+ if (this.client?.connected) {
288
+ this.client.subscribe(topic, { qos }, (err) => {
289
+ if (err) {
290
+ console.error(chalk_1.default.red(`Failed to subscribe to ${topic}: ${err.message}`));
291
+ }
292
+ });
293
+ }
294
+ }
174
295
  async publishResult(result) {
175
296
  if (!this.client?.connected) {
176
297
  throw new Error('Not connected to MQTT broker');
177
298
  }
178
299
  const topic = `funolio/${this.options.userId}/agent/results`;
179
- const payload = JSON.stringify(result);
300
+ const payloadObj = { ...result };
301
+ // Assign monotonic seq for streaming chunks to allow strict ordering + dedup downstream.
302
+ // We do this in the MQTT client so all chunk-producing paths get coverage.
303
+ if (payloadObj.type === 'chunk' && payloadObj.commandId) {
304
+ const next = (this.chunkSeqByCommand.get(payloadObj.commandId) ?? -1) + 1;
305
+ payloadObj.seq = next;
306
+ this.chunkSeqByCommand.set(payloadObj.commandId, next);
307
+ }
308
+ // Command finished or failed -> release seq state.
309
+ if ((payloadObj.type === 'complete' || payloadObj.type === 'error') && payloadObj.commandId) {
310
+ this.chunkSeqByCommand.delete(payloadObj.commandId);
311
+ }
312
+ const payload = JSON.stringify(payloadObj);
180
313
  return new Promise((resolve, reject) => {
181
314
  this.client.publish(topic, payload, { qos: 1 }, (err) => {
182
315
  if (err)
@@ -203,6 +336,7 @@ class AgentMqttClient {
203
336
  this.client.publish(topic, payload, { qos: 1, retain: true });
204
337
  }
205
338
  startHeartbeat() {
339
+ this.stopHeartbeat();
206
340
  this.heartbeatTimer = setInterval(() => {
207
341
  this.publishStatus('online');
208
342
  }, this.options.heartbeatIntervalMs);
@@ -237,6 +371,17 @@ class AgentMqttClient {
237
371
  }
238
372
  }
239
373
  async refreshMqttJwt(attempt = 0) {
374
+ if (this.refreshInFlight && attempt === 0)
375
+ return this.refreshInFlight;
376
+ if (attempt === 0) {
377
+ this.refreshInFlight = this.refreshMqttJwtInner(0).finally(() => {
378
+ this.refreshInFlight = null;
379
+ });
380
+ return this.refreshInFlight;
381
+ }
382
+ return this.refreshMqttJwtInner(attempt);
383
+ }
384
+ async refreshMqttJwtInner(attempt = 0) {
240
385
  const maxRetries = 3;
241
386
  const refreshUrl = this.options.refreshUrl || 'https://www.funolio.com/api/v1/agent/auth/refresh';
242
387
  try {
@@ -308,6 +453,99 @@ class AgentMqttClient {
308
453
  get connected() {
309
454
  return this.client?.connected ?? false;
310
455
  }
456
+ rebuildConnectionAfterReconnectFailure(reason) {
457
+ if (this.reconnectRebuildInFlight)
458
+ return;
459
+ this.reconnectRebuildInFlight = true;
460
+ const staleClient = this.client;
461
+ this.client = null;
462
+ this.reconnectCount = 0;
463
+ this.stopHeartbeat();
464
+ this.stopRefreshTimer();
465
+ console.warn(chalk_1.default.yellow(`[mqtt] Rebuilding MQTT client after reconnect failure: ${reason}`));
466
+ if (staleClient) {
467
+ const staleErrorSink = (err) => {
468
+ console.warn(chalk_1.default.yellow(`[mqtt] Ignored stale MQTT client error during rebuild: ${err.message}`));
469
+ };
470
+ staleClient.on('error', staleErrorSink);
471
+ try {
472
+ staleClient.options.reconnectPeriod = 0;
473
+ staleClient.end(true, {}, () => {
474
+ staleClient.removeListener('error', staleErrorSink);
475
+ staleClient.removeAllListeners();
476
+ });
477
+ }
478
+ catch (err) {
479
+ console.warn(chalk_1.default.yellow(`[mqtt] Failed to close stale MQTT client cleanly: ${err?.message || err}`));
480
+ try {
481
+ staleClient.removeListener('error', staleErrorSink);
482
+ staleClient.removeAllListeners();
483
+ }
484
+ catch { }
485
+ }
486
+ }
487
+ const retryDelayMs = this.computeRebuildRetryDelayMs();
488
+ setTimeout(() => {
489
+ this.connect()
490
+ .then(() => {
491
+ console.log(chalk_1.default.green('[mqtt] MQTT client rebuilt and reconnected'));
492
+ })
493
+ .catch((err) => {
494
+ console.error(chalk_1.default.red(`[mqtt] MQTT client rebuild failed: ${err?.message || err}`));
495
+ this.destroyCurrentClientAfterFailedRebuild();
496
+ this.reconnectRebuildInFlight = false;
497
+ this.rebuildConnectionAfterReconnectFailure('rebuild_connect_failed');
498
+ });
499
+ }, retryDelayMs);
500
+ }
501
+ destroyCurrentClientAfterFailedRebuild() {
502
+ const failedClient = this.client;
503
+ this.client = null;
504
+ this.stopHeartbeat();
505
+ this.stopRefreshTimer();
506
+ if (!failedClient)
507
+ return;
508
+ const failedErrorSink = (err) => {
509
+ console.warn(chalk_1.default.yellow(`[mqtt] Ignored failed rebuild client error: ${err.message}`));
510
+ };
511
+ try {
512
+ failedClient.on('error', failedErrorSink);
513
+ failedClient.options.reconnectPeriod = 0;
514
+ failedClient.end(true, {}, () => {
515
+ failedClient.removeListener('error', failedErrorSink);
516
+ failedClient.removeAllListeners();
517
+ });
518
+ }
519
+ catch (err) {
520
+ console.warn(chalk_1.default.yellow(`[mqtt] Failed to destroy MQTT rebuild client: ${err?.message || err}`));
521
+ try {
522
+ failedClient.removeListener('error', failedErrorSink);
523
+ failedClient.removeAllListeners();
524
+ }
525
+ catch { }
526
+ }
527
+ }
528
+ buildStableClientId() {
529
+ const safeUser = this.options.userId.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 48) || 'user';
530
+ const fingerprint = crypto
531
+ .createHash('sha256')
532
+ .update(`${os.hostname()}|${os.homedir()}|${process.execPath}`)
533
+ .digest('hex')
534
+ .slice(0, 12);
535
+ return `funolio-agent-${safeUser}-${fingerprint}`;
536
+ }
537
+ computeReconnectPeriodMs(attempt) {
538
+ const exponent = Math.max(0, Math.min(attempt - 1, 5));
539
+ const base = Math.min(AgentMqttClient.MAX_RECONNECT_MS, AgentMqttClient.BASE_RECONNECT_MS * Math.pow(2, exponent));
540
+ const jitter = Math.floor(Math.random() * 1000);
541
+ return Math.min(AgentMqttClient.MAX_RECONNECT_MS, base + jitter);
542
+ }
543
+ computeRebuildRetryDelayMs() {
544
+ const attempt = this.rebuildRetryCount++;
545
+ const base = Math.min(30000, 1000 * Math.pow(2, Math.min(attempt, 5)));
546
+ const jitter = Math.floor(Math.random() * 1000);
547
+ return base + jitter;
548
+ }
311
549
  }
312
550
  exports.AgentMqttClient = AgentMqttClient;
313
551
  //# sourceMappingURL=mqtt-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mqtt-client.js","sourceRoot":"","sources":["../src/mqtt-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mqtt-client.js","sourceRoot":"","sources":["../src/mqtt-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Agent-side MQTT data-request relay.
3
+ *
4
+ * Receives `data_request` messages from the cloud over MQTT and dispatches
5
+ * them to the agent's existing local HTTP server (127.0.0.1:18420) via
6
+ * self-loopback fetch. The HTTP response is captured and published back to
7
+ * the cloud as a `data_response` result, correlated by commandId.
8
+ *
9
+ * This is the agent half of the local-DB read relay described in
10
+ * mobile1.txt. Lets `personal-desktop` users see their local SQLite data
11
+ * from any client (mobile, web) without any data leaving their machine —
12
+ * the cloud is purely a transport.
13
+ *
14
+ * NEVER touched: the existing local HTTP server, its routes, or any of
15
+ * the data layer. We are a thin shim that forwards MQTT messages to
16
+ * already-existing endpoints. If a route works for the desktop UI today,
17
+ * it works through the relay tomorrow.
18
+ *
19
+ * Failure-mode contract (mirrored on the cloud side):
20
+ * - Local HTTP fetch fails → publish data_response with status 502
21
+ * - Local HTTP returns non-2xx → publish data_response with that status
22
+ * and the upstream body
23
+ * - Local HTTP times out (>= 10s) → abort and publish 504
24
+ * - JSON-parse failure on agent's response → wrap as text content
25
+ */
26
+ import { AgentMqttClient } from './mqtt-client';
27
+ export interface DataRequestMessage {
28
+ type: 'data_request';
29
+ id: string;
30
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
31
+ path: string;
32
+ query?: Record<string, string>;
33
+ body?: unknown;
34
+ headers?: Record<string, string>;
35
+ }
36
+ /**
37
+ * Handle one data_request message. Always publishes some data_response so
38
+ * the cloud's awaiting promise is never orphaned.
39
+ *
40
+ * Returns true when the message was a data_request (handled), false
41
+ * otherwise — caller can use this as a dispatch discriminator.
42
+ */
43
+ export declare function handleDataRequestMessage(message: any, mqttClient: AgentMqttClient): Promise<boolean>;
44
+ //# sourceMappingURL=mqtt-data-relay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mqtt-data-relay.d.ts","sourceRoot":"","sources":["../src/mqtt-data-relay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKhD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAqDD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,OAAO,CAAC,CAsDlB"}