@agenticros/core 0.8.4 → 0.8.5
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/dist/capabilities.js +1 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/config.d.ts +185 -35
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +29 -8
- package/dist/config.js.map +1 -1
- package/dist/external-capability.d.ts +3 -0
- package/dist/external-capability.d.ts.map +1 -1
- package/dist/external-capability.js +10 -0
- package/dist/external-capability.js.map +1 -1
- package/dist/find-robots-for.d.ts.map +1 -1
- package/dist/find-robots-for.js +15 -5
- package/dist/find-robots-for.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/robots.d.ts +6 -1
- package/dist/robots.d.ts.map +1 -1
- package/dist/robots.js +1 -0
- package/dist/robots.js.map +1 -1
- package/dist/safety.d.ts +116 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +365 -0
- package/dist/safety.js.map +1 -0
- package/dist/transport-pool.d.ts +4 -0
- package/dist/transport-pool.d.ts.map +1 -1
- package/dist/transport-pool.js +47 -5
- package/dist/transport-pool.js.map +1 -1
- package/package.json +9 -10
package/dist/transport-pool.d.ts
CHANGED
|
@@ -48,6 +48,9 @@ export declare class TransportPool {
|
|
|
48
48
|
private readonly entries;
|
|
49
49
|
/** Promises kept while a connection is in flight, so concurrent acquires share the same connect. */
|
|
50
50
|
private readonly inFlight;
|
|
51
|
+
private readonly failSafeUnsub;
|
|
52
|
+
/** Last config passed to acquire — used to resolve which robots share a transport on drain. */
|
|
53
|
+
private lastConfig;
|
|
51
54
|
constructor(factory?: TransportFactory);
|
|
52
55
|
/**
|
|
53
56
|
* Acquire (lazy-connect on first call) the transport for this robot.
|
|
@@ -65,6 +68,7 @@ export declare class TransportPool {
|
|
|
65
68
|
* times. Errors on individual disconnects are swallowed.
|
|
66
69
|
*/
|
|
67
70
|
disconnectAll(): Promise<void>;
|
|
71
|
+
private clearFailSafe;
|
|
68
72
|
/** Visible for tests: how many distinct transports are alive right now. */
|
|
69
73
|
get size(): number;
|
|
70
74
|
/** Visible for tests: list of pool keys currently cached. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-pool.d.ts","sourceRoot":"","sources":["../src/transport-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"transport-pool.d.ts","sourceRoot":"","sources":["../src/transport-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;AAYpB,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAE/E,qBAAa,aAAa;IAQZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,oGAAoG;IACpG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;IACrE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,+FAA+F;IAC/F,OAAO,CAAC,UAAU,CAA+B;gBAEpB,OAAO,GAAE,gBAAkC;IAExE;;;OAGG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAYpF;;;;OAIG;IACG,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBpC,OAAO,CAAC,aAAa;IAYrB,2EAA2E;IAC3E,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,6DAA6D;IAC7D,IAAI,IAAI,MAAM,EAAE;YAIF,YAAY;CA2C3B"}
|
package/dist/transport-pool.js
CHANGED
|
@@ -41,6 +41,8 @@
|
|
|
41
41
|
* for the unit-test seam.
|
|
42
42
|
*/
|
|
43
43
|
import { createTransport, getTransportConfig, getTransportConfigForRobot, hasRobotTransportOverride, resolveRobot, } from "./index.js";
|
|
44
|
+
import { listRobots } from "./robots.js";
|
|
45
|
+
import { attachDisconnectFailSafe, publishStopForBases } from "./safety.js";
|
|
44
46
|
const CONNECT_TIMEOUT_MS = 15_000;
|
|
45
47
|
export const TRANSPORT_POOL_GLOBAL_KEY = "__global__";
|
|
46
48
|
export class TransportPool {
|
|
@@ -48,6 +50,9 @@ export class TransportPool {
|
|
|
48
50
|
entries = new Map();
|
|
49
51
|
/** Promises kept while a connection is in flight, so concurrent acquires share the same connect. */
|
|
50
52
|
inFlight = new Map();
|
|
53
|
+
failSafeUnsub = new Map();
|
|
54
|
+
/** Last config passed to acquire — used to resolve which robots share a transport on drain. */
|
|
55
|
+
lastConfig;
|
|
51
56
|
constructor(factory = createTransport) {
|
|
52
57
|
this.factory = factory;
|
|
53
58
|
}
|
|
@@ -56,6 +61,7 @@ export class TransportPool {
|
|
|
56
61
|
* See the module docstring for the full key + caching contract.
|
|
57
62
|
*/
|
|
58
63
|
async acquire(config, robot) {
|
|
64
|
+
this.lastConfig = config;
|
|
59
65
|
const key = hasRobotTransportOverride(config, robot.id)
|
|
60
66
|
? robot.id
|
|
61
67
|
: TRANSPORT_POOL_GLOBAL_KEY;
|
|
@@ -78,15 +84,33 @@ export class TransportPool {
|
|
|
78
84
|
*/
|
|
79
85
|
async disconnectAll() {
|
|
80
86
|
const pending = [];
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
const cfg = this.lastConfig;
|
|
88
|
+
for (const [key, t] of this.entries) {
|
|
89
|
+
const robots = cfg ? robotsForPoolKey(cfg, key) : [];
|
|
90
|
+
pending.push((async () => {
|
|
91
|
+
await publishStopForBases(t, robots).catch(() => { });
|
|
92
|
+
this.clearFailSafe(key);
|
|
93
|
+
await t.disconnect().catch(() => {
|
|
94
|
+
/* best-effort drain */
|
|
95
|
+
});
|
|
96
|
+
})());
|
|
85
97
|
}
|
|
86
98
|
this.entries.clear();
|
|
87
99
|
this.inFlight.clear();
|
|
88
100
|
await Promise.all(pending);
|
|
89
101
|
}
|
|
102
|
+
clearFailSafe(key) {
|
|
103
|
+
const unsub = this.failSafeUnsub.get(key);
|
|
104
|
+
if (unsub) {
|
|
105
|
+
try {
|
|
106
|
+
unsub();
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
/* ignore */
|
|
110
|
+
}
|
|
111
|
+
this.failSafeUnsub.delete(key);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
90
114
|
/** Visible for tests: how many distinct transports are alive right now. */
|
|
91
115
|
get size() {
|
|
92
116
|
return this.entries.size;
|
|
@@ -107,13 +131,24 @@ export class TransportPool {
|
|
|
107
131
|
if (cached) {
|
|
108
132
|
// Stale entry (e.g. router restarted under us). Drop it cleanly.
|
|
109
133
|
this.entries.delete(key);
|
|
110
|
-
|
|
134
|
+
this.clearFailSafe(key);
|
|
135
|
+
const staleRobots = this.lastConfig ? robotsForPoolKey(this.lastConfig, key) : [];
|
|
136
|
+
void publishStopForBases(cached, staleRobots)
|
|
137
|
+
.catch(() => { })
|
|
138
|
+
.finally(() => {
|
|
139
|
+
cached.disconnect().catch(() => { });
|
|
140
|
+
});
|
|
111
141
|
}
|
|
112
142
|
const connectFlight = (async () => {
|
|
113
143
|
const cfg = resolveCfg();
|
|
114
144
|
const t = await this.factory(cfg);
|
|
115
145
|
await connectWithTimeout(t);
|
|
116
146
|
this.entries.set(key, t);
|
|
147
|
+
if (this.lastConfig) {
|
|
148
|
+
this.clearFailSafe(key);
|
|
149
|
+
const unsub = attachDisconnectFailSafe(t, robotsForPoolKey(this.lastConfig, key));
|
|
150
|
+
this.failSafeUnsub.set(key, unsub);
|
|
151
|
+
}
|
|
117
152
|
return t;
|
|
118
153
|
})();
|
|
119
154
|
this.inFlight.set(key, connectFlight);
|
|
@@ -132,4 +167,11 @@ async function connectWithTimeout(t) {
|
|
|
132
167
|
});
|
|
133
168
|
await Promise.race([t.connect(), timeout]);
|
|
134
169
|
}
|
|
170
|
+
function robotsForPoolKey(config, key) {
|
|
171
|
+
const robots = listRobots(config);
|
|
172
|
+
if (key === TRANSPORT_POOL_GLOBAL_KEY) {
|
|
173
|
+
return robots.filter((r) => !hasRobotTransportOverride(config, r.id));
|
|
174
|
+
}
|
|
175
|
+
return robots.filter((r) => r.id === key);
|
|
176
|
+
}
|
|
135
177
|
//# sourceMappingURL=transport-pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-pool.js","sourceRoot":"","sources":["../src/transport-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAQH,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,YAAY,GACb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"transport-pool.js","sourceRoot":"","sources":["../src/transport-pool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agenticros/core",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AgenticROS core — platform-agnostic ROS2 transport, types, and config (the dep every AgenticROS skill imports).",
|
|
6
6
|
"keywords": [
|
|
@@ -43,13 +43,6 @@
|
|
|
43
43
|
"engines": {
|
|
44
44
|
"node": ">=20"
|
|
45
45
|
},
|
|
46
|
-
"scripts": {
|
|
47
|
-
"build": "tsc",
|
|
48
|
-
"typecheck": "tsc --noEmit",
|
|
49
|
-
"test": "node --test \"dist/memory/__tests__/*.test.js\" \"dist/__tests__/*.test.js\"",
|
|
50
|
-
"prepublishOnly": "npm run build",
|
|
51
|
-
"pack:dry": "npm pack --dry-run"
|
|
52
|
-
},
|
|
53
46
|
"dependencies": {
|
|
54
47
|
"@eclipse-zenoh/zenoh-ts": "^1.9.0",
|
|
55
48
|
"@foxglove/cdr": "^3.5.0",
|
|
@@ -68,5 +61,11 @@
|
|
|
68
61
|
"typescript": "^5.7.0"
|
|
69
62
|
},
|
|
70
63
|
"author": "PlaiPin",
|
|
71
|
-
"license": "Apache-2.0"
|
|
72
|
-
|
|
64
|
+
"license": "Apache-2.0",
|
|
65
|
+
"scripts": {
|
|
66
|
+
"build": "tsc",
|
|
67
|
+
"typecheck": "tsc --noEmit",
|
|
68
|
+
"test": "node --test \"dist/memory/__tests__/*.test.js\" \"dist/__tests__/*.test.js\"",
|
|
69
|
+
"pack:dry": "npm pack --dry-run"
|
|
70
|
+
}
|
|
71
|
+
}
|