@agenticros/core 0.5.0 → 0.6.0

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 (65) hide show
  1. package/README.md +13 -3
  2. package/dist/capabilities.d.ts.map +1 -1
  3. package/dist/capabilities.js +37 -4
  4. package/dist/capabilities.js.map +1 -1
  5. package/dist/capability-schema.d.ts +201 -0
  6. package/dist/capability-schema.d.ts.map +1 -0
  7. package/dist/capability-schema.js +50 -0
  8. package/dist/capability-schema.js.map +1 -0
  9. package/dist/config.d.ts +7 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +16 -0
  12. package/dist/config.js.map +1 -1
  13. package/dist/discovery.d.ts +7 -3
  14. package/dist/discovery.d.ts.map +1 -1
  15. package/dist/discovery.js +19 -3
  16. package/dist/discovery.js.map +1 -1
  17. package/dist/external-capability.d.ts +33 -0
  18. package/dist/external-capability.d.ts.map +1 -0
  19. package/dist/external-capability.js +185 -0
  20. package/dist/external-capability.js.map +1 -0
  21. package/dist/fleet-config.d.ts +32 -0
  22. package/dist/fleet-config.d.ts.map +1 -0
  23. package/dist/fleet-config.js +80 -0
  24. package/dist/fleet-config.js.map +1 -0
  25. package/dist/heartbeat.d.ts +70 -0
  26. package/dist/heartbeat.d.ts.map +1 -0
  27. package/dist/heartbeat.js +124 -0
  28. package/dist/heartbeat.js.map +1 -0
  29. package/dist/index.d.ts +12 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +6 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/memory/mem0/provider.d.ts.map +1 -1
  34. package/dist/memory/mem0/provider.js +6 -3
  35. package/dist/memory/mem0/provider.js.map +1 -1
  36. package/dist/mission-bindings.d.ts +50 -0
  37. package/dist/mission-bindings.d.ts.map +1 -0
  38. package/dist/mission-bindings.js +157 -0
  39. package/dist/mission-bindings.js.map +1 -0
  40. package/dist/mission-registry.d.ts +17 -2
  41. package/dist/mission-registry.d.ts.map +1 -1
  42. package/dist/mission-registry.js +31 -2
  43. package/dist/mission-registry.js.map +1 -1
  44. package/dist/mission.d.ts +20 -7
  45. package/dist/mission.d.ts.map +1 -1
  46. package/dist/mission.js +42 -2
  47. package/dist/mission.js.map +1 -1
  48. package/dist/robots.d.ts.map +1 -1
  49. package/dist/robots.js +6 -2
  50. package/dist/robots.js.map +1 -1
  51. package/dist/transport/factory.d.ts.map +1 -1
  52. package/dist/transport/factory.js +11 -2
  53. package/dist/transport/factory.js.map +1 -1
  54. package/dist/transport/rosbridge/client.d.ts.map +1 -1
  55. package/dist/transport/rosbridge/client.js +7 -0
  56. package/dist/transport/rosbridge/client.js.map +1 -1
  57. package/dist/transport/webrtc/node-datachannel-loader.d.ts +12 -0
  58. package/dist/transport/webrtc/node-datachannel-loader.d.ts.map +1 -0
  59. package/dist/transport/webrtc/node-datachannel-loader.js +27 -0
  60. package/dist/transport/webrtc/node-datachannel-loader.js.map +1 -0
  61. package/dist/transport/webrtc/transport.d.ts +1 -0
  62. package/dist/transport/webrtc/transport.d.ts.map +1 -1
  63. package/dist/transport/webrtc/transport.js +5 -1
  64. package/dist/transport/webrtc/transport.js.map +1 -1
  65. package/package.json +2 -10
@@ -0,0 +1,185 @@
1
+ /**
2
+ * External ROS-node capability executor — Phase 1 completion.
3
+ *
4
+ * Dispatches `implementation.kind: "external_ros_node"` capabilities via
5
+ * the existing RosTransport action / service / topic APIs. The manifest
6
+ * `launch` field is metadata only (operator-owned bringup) — the gateway
7
+ * never shells out to `ros2 launch` in v1.
8
+ */
9
+ import { toNamespacedTopic } from "./topic-utils.js";
10
+ function isExternalImpl(impl) {
11
+ return impl?.kind === "external_ros_node";
12
+ }
13
+ function resolveName(name, namespace) {
14
+ const trimmed = name.trim();
15
+ if (!trimmed)
16
+ return trimmed;
17
+ if (!namespace?.trim())
18
+ return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
19
+ return toNamespacedTopic(namespace, trimmed);
20
+ }
21
+ /**
22
+ * Map navigate_to-style inputs into a Nav2 NavigateToPose goal when the
23
+ * action type looks like NavigateToPose and inputs have x/y.
24
+ */
25
+ export function buildExternalGoal(impl, inputs) {
26
+ // Explicit goal / request / message wins.
27
+ if (inputs.goal && typeof inputs.goal === "object") {
28
+ return inputs.goal;
29
+ }
30
+ if (inputs.request && typeof inputs.request === "object") {
31
+ return inputs.request;
32
+ }
33
+ if (inputs.message && typeof inputs.message === "object") {
34
+ return inputs.message;
35
+ }
36
+ const msgType = (impl.msg_type ?? "").toLowerCase();
37
+ if (msgType.includes("navigatetopose") || impl.action?.includes("navigate_to_pose")) {
38
+ const x = Number(inputs.x ?? 0) || 0;
39
+ const y = Number(inputs.y ?? 0) || 0;
40
+ const yaw = Number(inputs.yaw ?? 0) || 0;
41
+ const qz = Math.sin(yaw / 2);
42
+ const qw = Math.cos(yaw / 2);
43
+ const frame = typeof inputs.frame_id === "string" ? inputs.frame_id : "map";
44
+ return {
45
+ pose: {
46
+ header: { frame_id: frame },
47
+ pose: {
48
+ position: { x, y, z: 0 },
49
+ orientation: { x: 0, y: 0, z: qz, w: qw },
50
+ },
51
+ },
52
+ };
53
+ }
54
+ // Passthrough remaining inputs (minus robot_id).
55
+ const { robot_id: _rid, ...rest } = inputs;
56
+ return rest;
57
+ }
58
+ /**
59
+ * Execute an external_ros_node capability against a connected transport.
60
+ */
61
+ export async function executeExternalCapability(capability, inputs, transport, options = {}) {
62
+ const impl = capability.implementation;
63
+ if (!isExternalImpl(impl)) {
64
+ return {
65
+ text: `Capability "${capability.id}" is not an external_ros_node implementation.`,
66
+ isError: true,
67
+ };
68
+ }
69
+ const ns = options.namespace;
70
+ try {
71
+ if (impl.action) {
72
+ const action = resolveName(impl.action, ns);
73
+ const actionType = impl.msg_type ?? "";
74
+ if (!actionType) {
75
+ return {
76
+ text: `Capability "${capability.id}" external action requires implementation.msg_type.`,
77
+ isError: true,
78
+ };
79
+ }
80
+ const args = buildExternalGoal(impl, inputs);
81
+ const result = await transport.sendActionGoal({
82
+ action,
83
+ actionType,
84
+ args,
85
+ });
86
+ const outputs = {
87
+ success: result.result,
88
+ ...(result.values ?? {}),
89
+ launch_hint: impl.launch ?? null,
90
+ package_hint: impl.package ?? null,
91
+ };
92
+ return {
93
+ text: JSON.stringify(outputs),
94
+ outputs,
95
+ isError: !result.result,
96
+ };
97
+ }
98
+ if (impl.service) {
99
+ const service = resolveName(impl.service, ns);
100
+ const serviceType = impl.msg_type ?? "";
101
+ if (!serviceType) {
102
+ return {
103
+ text: `Capability "${capability.id}" external service requires implementation.msg_type.`,
104
+ isError: true,
105
+ };
106
+ }
107
+ const args = buildExternalGoal(impl, inputs);
108
+ const result = await transport.callService({
109
+ service,
110
+ type: serviceType,
111
+ args,
112
+ });
113
+ const outputs = {
114
+ success: result.result,
115
+ ...(result.values ?? {}),
116
+ launch_hint: impl.launch ?? null,
117
+ };
118
+ return {
119
+ text: JSON.stringify(outputs),
120
+ outputs,
121
+ isError: !result.result,
122
+ };
123
+ }
124
+ if (impl.topic) {
125
+ const topic = resolveName(impl.topic, ns);
126
+ const msgType = impl.msg_type ?? "";
127
+ const mode = typeof inputs.mode === "string" ? inputs.mode : "publish";
128
+ if (mode === "subscribe" || mode === "subscribe_once") {
129
+ const timeout = options.timeoutMs ?? (typeof inputs.timeout === "number" ? inputs.timeout : 5000);
130
+ const msg = await new Promise((resolve, reject) => {
131
+ let settled = false;
132
+ const timer = setTimeout(() => {
133
+ if (settled)
134
+ return;
135
+ settled = true;
136
+ try {
137
+ sub.unsubscribe();
138
+ }
139
+ catch {
140
+ /* ignore */
141
+ }
142
+ reject(new Error(`Timed out waiting for message on ${topic} after ${timeout}ms`));
143
+ }, timeout);
144
+ const sub = transport.subscribe({ topic, type: msgType || "std_msgs/msg/String" }, (message) => {
145
+ if (settled)
146
+ return;
147
+ settled = true;
148
+ clearTimeout(timer);
149
+ try {
150
+ sub.unsubscribe();
151
+ }
152
+ catch {
153
+ /* ignore */
154
+ }
155
+ resolve(message);
156
+ });
157
+ });
158
+ const outputs = { message: msg, topic };
159
+ return { text: JSON.stringify(outputs), outputs };
160
+ }
161
+ if (!msgType) {
162
+ return {
163
+ text: `Capability "${capability.id}" external topic publish requires implementation.msg_type.`,
164
+ isError: true,
165
+ };
166
+ }
167
+ const message = buildExternalGoal(impl, inputs);
168
+ await transport.publish({ topic, type: msgType, msg: message });
169
+ const outputs = { published: true, topic, launch_hint: impl.launch ?? null };
170
+ return { text: JSON.stringify(outputs), outputs };
171
+ }
172
+ return {
173
+ text: `Capability "${capability.id}" external_ros_node has no action, service, or topic. ` +
174
+ `Bringup hint: ${impl.launch ?? impl.package ?? "(none)"}.`,
175
+ isError: true,
176
+ };
177
+ }
178
+ catch (err) {
179
+ return {
180
+ text: err instanceof Error ? err.message : String(err),
181
+ isError: true,
182
+ };
183
+ }
184
+ }
185
+ //# sourceMappingURL=external-capability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-capability.js","sourceRoot":"","sources":["../src/external-capability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Static fleet file — Phase 1.d hybrid discovery.
3
+ *
4
+ * Precedence: `AGENTICROS_FLEET_PATH` → `~/.agenticros/fleet.json` →
5
+ * `config.robots[]` (via listRobots). When a fleet file exists and
6
+ * parses as a non-empty robot array (or `{ robots: [...] }`), it wins.
7
+ */
8
+ import type { AgenticROSConfig } from "./config.js";
9
+ export declare const DEFAULT_FLEET_FILENAME = "fleet.json";
10
+ /** Resolve the fleet file path (env override or default under ~/.agenticros). */
11
+ export declare function resolveFleetPath(env?: NodeJS.ProcessEnv): string;
12
+ export interface FleetFileResult {
13
+ /** Absolute path that was checked. */
14
+ path: string;
15
+ /** True when the file exists and was used. */
16
+ used: boolean;
17
+ /** Parsed robot entries (empty when unused / invalid). */
18
+ robots: NonNullable<AgenticROSConfig["robots"]>;
19
+ /** Human-readable error when the file exists but failed to parse. */
20
+ error?: string;
21
+ }
22
+ /**
23
+ * Load `fleet.json` if present. Does not throw on missing file.
24
+ * Invalid JSON / schema → `used: false` with `error` set so callers can warn.
25
+ */
26
+ export declare function loadFleetFile(path?: string): FleetFileResult;
27
+ /**
28
+ * Return a config view where `robots` comes from fleet.json when present.
29
+ * Does not mutate the input config object.
30
+ */
31
+ export declare function applyFleetOverride(config: AgenticROSConfig, fleetPath?: string): AgenticROSConfig;
32
+ //# sourceMappingURL=fleet-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-config.d.ts","sourceRoot":"","sources":["../src/fleet-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAEnD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAI7E;AAED,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,IAAI,EAAE,OAAO,CAAC;IACd,0DAA0D;IAC1D,MAAM,EAAE,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CA0C5D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAIjG"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Static fleet file — Phase 1.d hybrid discovery.
3
+ *
4
+ * Precedence: `AGENTICROS_FLEET_PATH` → `~/.agenticros/fleet.json` →
5
+ * `config.robots[]` (via listRobots). When a fleet file exists and
6
+ * parses as a non-empty robot array (or `{ robots: [...] }`), it wins.
7
+ */
8
+ import { existsSync, readFileSync } from "node:fs";
9
+ import { homedir } from "node:os";
10
+ import { join } from "node:path";
11
+ import { AgenticROSConfigSchema } from "./config.js";
12
+ export const DEFAULT_FLEET_FILENAME = "fleet.json";
13
+ /** Resolve the fleet file path (env override or default under ~/.agenticros). */
14
+ export function resolveFleetPath(env = process.env) {
15
+ const override = env.AGENTICROS_FLEET_PATH?.trim();
16
+ if (override)
17
+ return override;
18
+ return join(homedir(), ".agenticros", DEFAULT_FLEET_FILENAME);
19
+ }
20
+ /**
21
+ * Load `fleet.json` if present. Does not throw on missing file.
22
+ * Invalid JSON / schema → `used: false` with `error` set so callers can warn.
23
+ */
24
+ export function loadFleetFile(path) {
25
+ const fleetPath = path ?? resolveFleetPath();
26
+ if (!existsSync(fleetPath)) {
27
+ return { path: fleetPath, used: false, robots: [] };
28
+ }
29
+ try {
30
+ const raw = JSON.parse(readFileSync(fleetPath, "utf8"));
31
+ let robotsRaw;
32
+ if (Array.isArray(raw)) {
33
+ robotsRaw = raw;
34
+ }
35
+ else if (raw && typeof raw === "object" && Array.isArray(raw.robots)) {
36
+ robotsRaw = raw.robots;
37
+ }
38
+ else {
39
+ return {
40
+ path: fleetPath,
41
+ used: false,
42
+ robots: [],
43
+ error: "fleet.json must be an array of robots or { robots: [...] }",
44
+ };
45
+ }
46
+ const parsed = AgenticROSConfigSchema.pick({ robots: true }).safeParse({ robots: robotsRaw });
47
+ if (!parsed.success) {
48
+ return {
49
+ path: fleetPath,
50
+ used: false,
51
+ robots: [],
52
+ error: parsed.error.message,
53
+ };
54
+ }
55
+ const robots = parsed.data.robots ?? [];
56
+ if (robots.length === 0) {
57
+ return { path: fleetPath, used: false, robots: [] };
58
+ }
59
+ return { path: fleetPath, used: true, robots };
60
+ }
61
+ catch (err) {
62
+ return {
63
+ path: fleetPath,
64
+ used: false,
65
+ robots: [],
66
+ error: err instanceof Error ? err.message : String(err),
67
+ };
68
+ }
69
+ }
70
+ /**
71
+ * Return a config view where `robots` comes from fleet.json when present.
72
+ * Does not mutate the input config object.
73
+ */
74
+ export function applyFleetOverride(config, fleetPath) {
75
+ const fleet = loadFleetFile(fleetPath);
76
+ if (!fleet.used)
77
+ return config;
78
+ return { ...config, robots: fleet.robots };
79
+ }
80
+ //# sourceMappingURL=fleet-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-config.js","sourceRoot":"","sources":["../src/fleet-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * RobotInfo heartbeat helpers — Phase 1.d completion.
3
+ *
4
+ * `agenticros_discovery` publishes `<ns>/agenticros/robot_info` at 1 Hz.
5
+ * Consumers treat a robot as online when the last stamp is within
6
+ * {@link DEFAULT_HEARTBEAT_STALENESS_MS} (5 s per strategy memo).
7
+ *
8
+ * Topic-scan path: when adapters only have `listTopics()`, presence of
9
+ * `/<ns>/agenticros/robot_info` on the graph is a weak online signal
10
+ * (same as cmd_vel). Prefer {@link mergeRobotHeartbeats} when message
11
+ * payloads with stamps are available.
12
+ */
13
+ import type { TopicInfo } from "./transport/types.js";
14
+ import type { RobotSensors } from "./robots.js";
15
+ /** Default staleness window — strategy §4(d): 1 Hz + 5 s. */
16
+ export declare const DEFAULT_HEARTBEAT_STALENESS_MS = 5000;
17
+ /** Parsed robot_info payload (subset of agenticros_msgs/RobotInfo). */
18
+ export interface RobotHeartbeat {
19
+ /** Stable id (falls back to namespace). */
20
+ id: string;
21
+ name: string;
22
+ kind: string;
23
+ /** ROS namespace without leading slash. */
24
+ robot_namespace: string;
25
+ capability_ids: string[];
26
+ sensors: RobotSensors;
27
+ /** Epoch ms of the heartbeat stamp (0 when unknown). */
28
+ stamp_ms: number;
29
+ /** Topic the heartbeat was observed on. */
30
+ topic: string;
31
+ }
32
+ export interface HeartbeatOnlineOptions {
33
+ /** Wall clock now (ms). Defaults to Date.now(). */
34
+ nowMs?: number;
35
+ /** Staleness window in ms. Defaults to 5000. */
36
+ stalenessMs?: number;
37
+ }
38
+ /**
39
+ * Extract namespace from `/<ns>/agenticros/robot_info` (or without leading slash).
40
+ * Returns "" for unnamespaced `/agenticros/robot_info`.
41
+ */
42
+ export declare function namespaceFromRobotInfoTopic(topic: string): string;
43
+ /** True when the topic name is a robot_info heartbeat topic. */
44
+ export declare function isRobotInfoTopic(topic: string): boolean;
45
+ /**
46
+ * Detect namespaces that advertise `agenticros/robot_info` on the topic graph
47
+ * (no stamp available — treat as online for discovery fallback).
48
+ */
49
+ export declare function detectHeartbeatNamespacesFromTopics(topics: TopicInfo[]): string[];
50
+ /**
51
+ * Parse a plain RobotInfo-like message into {@link RobotHeartbeat}.
52
+ * Tolerates missing optional fields.
53
+ */
54
+ export declare function parseRobotInfoMessage(topic: string, msg: Record<string, unknown>): RobotHeartbeat;
55
+ /** True when the heartbeat stamp is within the staleness window. */
56
+ export declare function isHeartbeatFresh(heartbeat: RobotHeartbeat, options?: HeartbeatOnlineOptions): boolean;
57
+ /**
58
+ * Merge heartbeats into an online-id set keyed by configured robot id
59
+ * when `configuredIdByNamespace` is provided, else by heartbeat id /
60
+ * effective namespace.
61
+ */
62
+ export declare function onlineIdsFromHeartbeats(heartbeats: readonly RobotHeartbeat[], options?: HeartbeatOnlineOptions & {
63
+ /** Map effective cmd_vel namespace → configured robot id. */
64
+ configuredIdByNamespace?: ReadonlyMap<string, string>;
65
+ }): Set<string>;
66
+ /**
67
+ * Build a map of effective-namespace → latest fresh heartbeat.
68
+ */
69
+ export declare function mergeRobotHeartbeats(heartbeats: readonly RobotHeartbeat[], options?: HeartbeatOnlineOptions): Map<string, RobotHeartbeat>;
70
+ //# sourceMappingURL=heartbeat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,6DAA6D;AAC7D,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AAEpD,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAOjF;AAUD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,cAAc,CAuBhB;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,cAAc,EACzB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAST;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,OAAO,GAAE,sBAAsB,GAAG;IAChC,6DAA6D;IAC7D,uBAAuB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD,GACL,GAAG,CAAC,MAAM,CAAC,CASb;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,OAAO,GAAE,sBAA2B,GACnC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAW7B"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * RobotInfo heartbeat helpers — Phase 1.d completion.
3
+ *
4
+ * `agenticros_discovery` publishes `<ns>/agenticros/robot_info` at 1 Hz.
5
+ * Consumers treat a robot as online when the last stamp is within
6
+ * {@link DEFAULT_HEARTBEAT_STALENESS_MS} (5 s per strategy memo).
7
+ *
8
+ * Topic-scan path: when adapters only have `listTopics()`, presence of
9
+ * `/<ns>/agenticros/robot_info` on the graph is a weak online signal
10
+ * (same as cmd_vel). Prefer {@link mergeRobotHeartbeats} when message
11
+ * payloads with stamps are available.
12
+ */
13
+ import { effectiveCmdVelNamespace } from "./discovery.js";
14
+ /** Default staleness window — strategy §4(d): 1 Hz + 5 s. */
15
+ export const DEFAULT_HEARTBEAT_STALENESS_MS = 5_000;
16
+ /**
17
+ * Extract namespace from `/<ns>/agenticros/robot_info` (or without leading slash).
18
+ * Returns "" for unnamespaced `/agenticros/robot_info`.
19
+ */
20
+ export function namespaceFromRobotInfoTopic(topic) {
21
+ const m = topic.match(/^\/?([^/]+)\/agenticros\/robot_info$/);
22
+ if (m)
23
+ return m[1];
24
+ if (topic === "/agenticros/robot_info" || topic === "agenticros/robot_info")
25
+ return "";
26
+ return "";
27
+ }
28
+ /** True when the topic name is a robot_info heartbeat topic. */
29
+ export function isRobotInfoTopic(topic) {
30
+ return /(?:^|\/)agenticros\/robot_info$/.test(topic);
31
+ }
32
+ /**
33
+ * Detect namespaces that advertise `agenticros/robot_info` on the topic graph
34
+ * (no stamp available — treat as online for discovery fallback).
35
+ */
36
+ export function detectHeartbeatNamespacesFromTopics(topics) {
37
+ const out = new Set();
38
+ for (const t of topics) {
39
+ if (!isRobotInfoTopic(t.name))
40
+ continue;
41
+ out.add(namespaceFromRobotInfoTopic(t.name));
42
+ }
43
+ return [...out];
44
+ }
45
+ function rosTimeToMs(stamp) {
46
+ if (!stamp || typeof stamp !== "object")
47
+ return 0;
48
+ const s = stamp;
49
+ const sec = Number(s.sec ?? s.secs ?? 0) || 0;
50
+ const nanosec = Number(s.nanosec ?? s.nsecs ?? 0) || 0;
51
+ return sec * 1000 + Math.floor(nanosec / 1e6);
52
+ }
53
+ /**
54
+ * Parse a plain RobotInfo-like message into {@link RobotHeartbeat}.
55
+ * Tolerates missing optional fields.
56
+ */
57
+ export function parseRobotInfoMessage(topic, msg) {
58
+ const nsFromTopic = namespaceFromRobotInfoTopic(topic);
59
+ const robot_namespace = String(msg.robot_namespace ?? msg.namespace ?? nsFromTopic ?? "");
60
+ const id = String(msg.id ?? (robot_namespace || "default"));
61
+ const capability_ids = Array.isArray(msg.capability_ids)
62
+ ? msg.capability_ids.map((c) => String(c))
63
+ : Array.isArray(msg.capabilities)
64
+ ? msg.capabilities.map((c) => String(c))
65
+ : [];
66
+ return {
67
+ id,
68
+ name: String(msg.name ?? "Robot"),
69
+ kind: String(msg.kind ?? "amr"),
70
+ robot_namespace,
71
+ capability_ids,
72
+ sensors: {
73
+ has_realsense: Boolean(msg.has_realsense),
74
+ has_lidar: Boolean(msg.has_lidar),
75
+ has_arm: Boolean(msg.has_arm),
76
+ },
77
+ stamp_ms: rosTimeToMs(msg.stamp),
78
+ topic,
79
+ };
80
+ }
81
+ /** True when the heartbeat stamp is within the staleness window. */
82
+ export function isHeartbeatFresh(heartbeat, options = {}) {
83
+ const now = options.nowMs ?? Date.now();
84
+ const window = options.stalenessMs ?? DEFAULT_HEARTBEAT_STALENESS_MS;
85
+ if (!heartbeat.stamp_ms) {
86
+ // No stamp — treat as fresh if we just received the message (caller
87
+ // should only pass live subscribe results here).
88
+ return true;
89
+ }
90
+ return now - heartbeat.stamp_ms <= window;
91
+ }
92
+ /**
93
+ * Merge heartbeats into an online-id set keyed by configured robot id
94
+ * when `configuredIdByNamespace` is provided, else by heartbeat id /
95
+ * effective namespace.
96
+ */
97
+ export function onlineIdsFromHeartbeats(heartbeats, options = {}) {
98
+ const online = new Set();
99
+ for (const hb of heartbeats) {
100
+ if (!isHeartbeatFresh(hb, options))
101
+ continue;
102
+ const eff = effectiveCmdVelNamespace(hb.robot_namespace);
103
+ const cfgId = options.configuredIdByNamespace?.get(eff);
104
+ online.add(cfgId ?? hb.id);
105
+ }
106
+ return online;
107
+ }
108
+ /**
109
+ * Build a map of effective-namespace → latest fresh heartbeat.
110
+ */
111
+ export function mergeRobotHeartbeats(heartbeats, options = {}) {
112
+ const byNs = new Map();
113
+ for (const hb of heartbeats) {
114
+ if (!isHeartbeatFresh(hb, options))
115
+ continue;
116
+ const key = effectiveCmdVelNamespace(hb.robot_namespace);
117
+ const prev = byNs.get(key);
118
+ if (!prev || hb.stamp_ms >= prev.stamp_ms) {
119
+ byNs.set(key, hb);
120
+ }
121
+ }
122
+ return byNs;
123
+ }
124
+ //# sourceMappingURL=heartbeat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * @agenticros/core — Platform-agnostic ROS2 transport, config, and utilities.
3
3
  */
4
4
  export type { AgenticROSConfig, RobotTransportOverride } from "./config.js";
5
- export { AgenticROSConfigSchema, parseConfig, getTransportConfig, } from "./config.js";
5
+ export { AgenticROSConfigSchema, parseConfig, prepareConfigForPersistence, getTransportConfig, } from "./config.js";
6
6
  export { createTransport } from "./transport/factory.js";
7
7
  export type { RosTransport } from "./transport/transport.js";
8
8
  export type { ConnectionStatus, ConnectionHandler, Subscription, PublishOptions, AdvertiseOptions, SubscribeOptions, ServiceCallOptions, ServiceCallResult, ActionGoalOptions, ActionResult, TopicInfo, ServiceInfo, ActionInfo, MessageHandler, TransportConfig, } from "./transport/types.js";
@@ -14,8 +14,14 @@ export { createMemory, resolveMemoryNamespace } from "./memory/index.js";
14
14
  export type { MemoryProvider, MemoryRecord, MemoryStatus, RememberInput, RecallInput, ForgetInput, } from "./memory/index.js";
15
15
  export { BUILTIN_CAPABILITIES, readSkillCapabilities, listAllCapabilities, } from "./capabilities.js";
16
16
  export type { Capability, CapabilityField, CapabilityImplementation, CapabilitySource, } from "./capabilities.js";
17
+ export { CapabilitySchema, CapabilityFieldSchema, CapabilityImplementationSchema, parseCapability, safeParseCapability, } from "./capability-schema.js";
18
+ export type { ParsedCapability } from "./capability-schema.js";
19
+ export { buildExternalGoal, executeExternalCapability, } from "./external-capability.js";
20
+ export type { ExecuteExternalOptions, ExecuteExternalResult, } from "./external-capability.js";
17
21
  export { runMission } from "./mission.js";
18
- export type { Mission, MissionStep, MissionResult, MissionStepResult, MissionToolDispatcher, CapabilityToolBinding, CapabilityToolBindings, MissionCancellationToken, MissionTranscriptEntry, MissionTranscriptSink, RunMissionOptions, } from "./mission.js";
22
+ export type { Mission, MissionStep, MissionResult, MissionStepResult, MissionToolDispatcher, CapabilityToolBinding, CapabilityToolBindings, MissionCancellationToken, MissionControlToken, MissionTranscriptEntry, MissionTranscriptSink, RunMissionOptions, } from "./mission.js";
23
+ export { BUILTIN_MISSION_BINDINGS, EXTERNAL_TOOL_PREFIX, buildMissionBindings, capabilityIdFromExternalTool, defaultToolForCapability, externalToolName, isExternalToolName, passthroughBuildArgs, } from "./mission-bindings.js";
24
+ export type { BuildMissionBindingsOptions, CapabilityWithTool, } from "./mission-bindings.js";
19
25
  export { MissionRegistry, generateMissionId, missionTranscriptNamespace, } from "./mission-registry.js";
20
26
  export type { MissionRegistryEntry } from "./mission-registry.js";
21
27
  export { createMemoryTranscriptSink } from "./mission-transcript-sink.js";
@@ -25,6 +31,10 @@ export { listRobots, resolveRobot, resolveRobotFromArgs, getActiveRobotId, getTr
25
31
  export type { ResolvedRobot, RobotSensors } from "./robots.js";
26
32
  export { detectRobotsFromTopics, discoverRobots, effectiveCmdVelNamespace, } from "./discovery.js";
27
33
  export type { DetectedRobot, RobotDiscoveryResult } from "./discovery.js";
34
+ export { DEFAULT_HEARTBEAT_STALENESS_MS, detectHeartbeatNamespacesFromTopics, isHeartbeatFresh, isRobotInfoTopic, mergeRobotHeartbeats, namespaceFromRobotInfoTopic, onlineIdsFromHeartbeats, parseRobotInfoMessage, } from "./heartbeat.js";
35
+ export type { HeartbeatOnlineOptions, RobotHeartbeat } from "./heartbeat.js";
36
+ export { DEFAULT_FLEET_FILENAME, applyFleetOverride, loadFleetFile, resolveFleetPath, } from "./fleet-config.js";
37
+ export type { FleetFileResult } from "./fleet-config.js";
28
38
  export { findRobotsFor } from "./find-robots-for.js";
29
39
  export type { FindRobotsForQuery, FindRobotsForMatch, FindRobotsForResult, } from "./find-robots-for.js";
30
40
  export { TransportPool, TRANSPORT_POOL_GLOBAL_KEY } from "./transport-pool.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,UAAU,EACV,eAAe,EACf,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EACV,OAAO,EACP,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @agenticros/core — Platform-agnostic ROS2 transport, config, and utilities.
3
3
  */
4
- export { AgenticROSConfigSchema, parseConfig, getTransportConfig, } from "./config.js";
4
+ export { AgenticROSConfigSchema, parseConfig, prepareConfigForPersistence, getTransportConfig, } from "./config.js";
5
5
  export { createTransport } from "./transport/factory.js";
6
6
  export { toNamespacedTopic, toNamespacedTopicFull, toTeleopCameraTopicShort, resolveCameraSubscribeTopic, } from "./topic-utils.js";
7
7
  export { applyCmdVelTwistSignConvention } from "./cmd-vel-twist.js";
@@ -9,12 +9,17 @@ export { isCdrTypeSupported } from "./transport/zenoh/cdr.js";
9
9
  export { renderAgenticROSBanner, agenticROSBannerLines, } from "./banner.js";
10
10
  export { createMemory, resolveMemoryNamespace } from "./memory/index.js";
11
11
  export { BUILTIN_CAPABILITIES, readSkillCapabilities, listAllCapabilities, } from "./capabilities.js";
12
+ export { CapabilitySchema, CapabilityFieldSchema, CapabilityImplementationSchema, parseCapability, safeParseCapability, } from "./capability-schema.js";
13
+ export { buildExternalGoal, executeExternalCapability, } from "./external-capability.js";
12
14
  export { runMission } from "./mission.js";
15
+ export { BUILTIN_MISSION_BINDINGS, EXTERNAL_TOOL_PREFIX, buildMissionBindings, capabilityIdFromExternalTool, defaultToolForCapability, externalToolName, isExternalToolName, passthroughBuildArgs, } from "./mission-bindings.js";
13
16
  export { MissionRegistry, generateMissionId, missionTranscriptNamespace, } from "./mission-registry.js";
14
17
  export { createMemoryTranscriptSink } from "./mission-transcript-sink.js";
15
18
  export { compileGoalToMission } from "./planner/index.js";
16
19
  export { listRobots, resolveRobot, resolveRobotFromArgs, getActiveRobotId, getTransportConfigForRobot, hasRobotTransportOverride, } from "./robots.js";
17
20
  export { detectRobotsFromTopics, discoverRobots, effectiveCmdVelNamespace, } from "./discovery.js";
21
+ export { DEFAULT_HEARTBEAT_STALENESS_MS, detectHeartbeatNamespacesFromTopics, isHeartbeatFresh, isRobotInfoTopic, mergeRobotHeartbeats, namespaceFromRobotInfoTopic, onlineIdsFromHeartbeats, parseRobotInfoMessage, } from "./heartbeat.js";
22
+ export { DEFAULT_FLEET_FILENAME, applyFleetOverride, loadFleetFile, resolveFleetPath, } from "./fleet-config.js";
18
23
  export { findRobotsFor } from "./find-robots-for.js";
19
24
  export { TransportPool, TRANSPORT_POOL_GLOBAL_KEY } from "./transport-pool.js";
20
25
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAoBzD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAUzE,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAe1C,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EACL,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAOrD,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAoBzD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAUzE,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,8BAA8B,EAC9B,eAAe,EACf,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAgB1C,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EACL,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,8BAA8B,EAC9B,mCAAmC,EACnC,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAOrD,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/memory/mem0/provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,YAAY,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,GAAG,CAAC,EAAE,mBAAmB,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmD;gBAGpE,IAAI,EAAE;QAChB,MAAM,EAAE,GAAG,CAAC;QACZ,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;KAChC;IAcK,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBrD,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAanD,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0CxD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BhD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAepE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,iBAAiB,CAAC;CAC3B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkC9B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,IAAI,CAAC,EAAE;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmC/B"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/memory/mem0/provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACd,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,YAAY,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,GAAG,CAAC,EAAE,mBAAmB,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmD;gBAGpE,IAAI,EAAE;QAChB,MAAM,EAAE,GAAG,CAAC;QACZ,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;KAChC;IAcK,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBrD,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAanD,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0CxD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA4BhD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAepE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,iBAAiB,CAAC;CAC3B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqC9B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,IAAI,CAAC,EAAE;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmC/B"}