@agenticros/core 0.8.3 → 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.d.ts +23 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +56 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/capability-schema.d.ts +6 -0
- package/dist/capability-schema.d.ts.map +1 -1
- package/dist/capability-schema.js +2 -0
- package/dist/capability-schema.js.map +1 -1
- package/dist/config.d.ts +224 -35
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +37 -8
- package/dist/config.js.map +1 -1
- package/dist/discoverable-capabilities.d.ts +2 -0
- package/dist/discoverable-capabilities.d.ts.map +1 -1
- package/dist/discoverable-capabilities.js +15 -2
- package/dist/discoverable-capabilities.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 +11 -11
- package/dist/find-robots-for.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/mission.d.ts +6 -0
- package/dist/mission.d.ts.map +1 -1
- package/dist/mission.js +2 -1
- package/dist/mission.js.map +1 -1
- package/dist/robot-profile.d.ts +89 -0
- package/dist/robot-profile.d.ts.map +1 -0
- package/dist/robot-profile.js +208 -0
- package/dist/robot-profile.js.map +1 -0
- package/dist/robots.d.ts +12 -1
- package/dist/robots.d.ts.map +1 -1
- package/dist/robots.js +2 -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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Robot hardware profile — features + ROS bindings.
|
|
3
|
+
*
|
|
4
|
+
* A profile declares what a *body* has (camera, base, arm, …) and where
|
|
5
|
+
* those features live on this robot's ROS graph. Agent verbs
|
|
6
|
+
* (`drive_base`, `follow_person`) are filtered against it; skills
|
|
7
|
+
* address feature names, never a camera brand or URDF.
|
|
8
|
+
*
|
|
9
|
+
* Back-compat: `profile` is optional. No profile → no verb filtering
|
|
10
|
+
* (today's gateway-wide registry). A declared profile is strict.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
/** Frozen hardware vocabulary. Names are only added, never removed or repurposed. */
|
|
14
|
+
export declare const FEATURE_VOCABULARY: readonly ["base", "arm", "gripper", "camera", "depth", "lidar", "imu", "dock", "display", "audio", "battery", "estop"];
|
|
15
|
+
export type FeatureName = (typeof FEATURE_VOCABULARY)[number];
|
|
16
|
+
export declare const FEATURE_VOCABULARY_SET: ReadonlySet<string>;
|
|
17
|
+
/** Frozen v1 binding keys. Values are ROS topic / action names. */
|
|
18
|
+
export declare const BINDING_KEYS: readonly ["cmd_vel", "odom", "camera.rgb", "camera.depth", "lidar", "joint_states", "navigate_to_pose", "dock", "battery"];
|
|
19
|
+
export type BindingKey = (typeof BINDING_KEYS)[number];
|
|
20
|
+
export declare const BINDING_KEYS_SET: ReadonlySet<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Minimum binding expected for a declared feature. Used by doctor; a
|
|
23
|
+
* feature without its v1 binding is a contract violation.
|
|
24
|
+
*/
|
|
25
|
+
export declare const FEATURE_REQUIRED_BINDING: Readonly<Partial<Record<FeatureName, BindingKey>>>;
|
|
26
|
+
export declare const PROFILE_SCHEMA_ID = "agenticros.profile.v1";
|
|
27
|
+
export declare const RobotProfileSchema: z.ZodObject<{
|
|
28
|
+
schema: z.ZodDefault<z.ZodLiteral<"agenticros.profile.v1">>;
|
|
29
|
+
features: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
30
|
+
bindings: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
schema: "agenticros.profile.v1";
|
|
33
|
+
features: string[];
|
|
34
|
+
bindings: Record<string, string>;
|
|
35
|
+
}, {
|
|
36
|
+
schema?: "agenticros.profile.v1" | undefined;
|
|
37
|
+
features?: string[] | undefined;
|
|
38
|
+
bindings?: Record<string, string> | undefined;
|
|
39
|
+
}>;
|
|
40
|
+
export type RobotProfile = z.infer<typeof RobotProfileSchema>;
|
|
41
|
+
/** Minimal robot shape the profile helpers need (avoids importing robots.ts). */
|
|
42
|
+
export interface ProfileRobot {
|
|
43
|
+
namespace: string;
|
|
44
|
+
cameraTopic: string;
|
|
45
|
+
kind?: string;
|
|
46
|
+
sensors?: {
|
|
47
|
+
has_realsense?: boolean;
|
|
48
|
+
has_lidar?: boolean;
|
|
49
|
+
has_arm?: boolean;
|
|
50
|
+
};
|
|
51
|
+
profile?: RobotProfile;
|
|
52
|
+
}
|
|
53
|
+
export declare function isKnownFeature(name: string): name is FeatureName;
|
|
54
|
+
export declare function isKnownBindingKey(key: string): key is BindingKey;
|
|
55
|
+
export declare function unknownFeatures(features: readonly string[]): string[];
|
|
56
|
+
export declare function unknownBindingKeys(bindings: Record<string, string>): string[];
|
|
57
|
+
/** Features declared on a profile that lack their v1 binding. */
|
|
58
|
+
export declare function featuresMissingBindings(profile: RobotProfile): string[];
|
|
59
|
+
export declare function resolveRobotProfile(robot: ProfileRobot): RobotProfile | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Map the deprecated Phase 1.e sensor booleans onto feature names.
|
|
62
|
+
* Used only when `profile` is absent — so `--sensors=has_realsense`
|
|
63
|
+
* still means something for fleet filtering / infer.
|
|
64
|
+
*/
|
|
65
|
+
export declare function featuresFromDeprecatedSensors(sensors: ProfileRobot["sensors"] | undefined): FeatureName[];
|
|
66
|
+
/** ALL-OF: every required feature is present on the profile. Empty requires always pass. */
|
|
67
|
+
export declare function featuresSatisfied(profile: RobotProfile | undefined, requires: readonly string[] | undefined): boolean;
|
|
68
|
+
/** Required features the profile does not declare. Empty when satisfied or no profile. */
|
|
69
|
+
export declare function missingFeatures(profile: RobotProfile | undefined, requires: readonly string[] | undefined): string[];
|
|
70
|
+
/**
|
|
71
|
+
* Resolve a binding key to a ROS name for this robot.
|
|
72
|
+
*
|
|
73
|
+
* Precedence: explicit `profile.bindings[key]`, then legacy fallbacks
|
|
74
|
+
* (`cameraTopic` for `camera.rgb`, teleop/`/cmd_vel` for `cmd_vel`).
|
|
75
|
+
* Relative names are namespace-prefixed.
|
|
76
|
+
*/
|
|
77
|
+
export declare function resolveBinding(robot: ProfileRobot, key: string, opts?: {
|
|
78
|
+
cmdVelTopic?: string;
|
|
79
|
+
}): string | undefined;
|
|
80
|
+
export interface InferProfileOptions {
|
|
81
|
+
cmdVelTopic?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Draft a profile from kind, cameraTopic, deprecated sensors, and
|
|
85
|
+
* namespaced cmd_vel. Used by `agenticros robots profile infer`.
|
|
86
|
+
* Does not write config.
|
|
87
|
+
*/
|
|
88
|
+
export declare function inferProfileDraft(robot: ProfileRobot, opts?: InferProfileOptions): RobotProfile;
|
|
89
|
+
//# sourceMappingURL=robot-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"robot-profile.d.ts","sourceRoot":"","sources":["../src/robot-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,qFAAqF;AACrF,eAAO,MAAM,kBAAkB,wHAarB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAA+B,CAAC;AAEvF,mEAAmE;AACnE,eAAO,MAAM,YAAY,4HAUf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAyB,CAAC;AAE3E;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAQvF,CAAC;AAEF,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,WAAW,CAEhE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,UAAU,CAEhE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAErE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAE7E;AAED,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAYvE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,SAAS,GAC3C,WAAW,EAAE,CASf;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACtC,OAAO,CAKT;AAED,0FAA0F;AAC1F,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACtC,MAAM,EAAE,CAKV;AAcD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,MAAM,GAAG,SAAS,CAepB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,IAAI,CAAC,EAAE,mBAAmB,GACzB,YAAY,CA0Cd"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Robot hardware profile — features + ROS bindings.
|
|
3
|
+
*
|
|
4
|
+
* A profile declares what a *body* has (camera, base, arm, …) and where
|
|
5
|
+
* those features live on this robot's ROS graph. Agent verbs
|
|
6
|
+
* (`drive_base`, `follow_person`) are filtered against it; skills
|
|
7
|
+
* address feature names, never a camera brand or URDF.
|
|
8
|
+
*
|
|
9
|
+
* Back-compat: `profile` is optional. No profile → no verb filtering
|
|
10
|
+
* (today's gateway-wide registry). A declared profile is strict.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { resolveCameraSubscribeTopic, toNamespacedTopic, toNamespacedTopicFull, } from "./topic-utils.js";
|
|
14
|
+
/** Frozen hardware vocabulary. Names are only added, never removed or repurposed. */
|
|
15
|
+
export const FEATURE_VOCABULARY = [
|
|
16
|
+
"base",
|
|
17
|
+
"arm",
|
|
18
|
+
"gripper",
|
|
19
|
+
"camera",
|
|
20
|
+
"depth",
|
|
21
|
+
"lidar",
|
|
22
|
+
"imu",
|
|
23
|
+
"dock",
|
|
24
|
+
"display",
|
|
25
|
+
"audio",
|
|
26
|
+
"battery",
|
|
27
|
+
"estop",
|
|
28
|
+
];
|
|
29
|
+
export const FEATURE_VOCABULARY_SET = new Set(FEATURE_VOCABULARY);
|
|
30
|
+
/** Frozen v1 binding keys. Values are ROS topic / action names. */
|
|
31
|
+
export const BINDING_KEYS = [
|
|
32
|
+
"cmd_vel",
|
|
33
|
+
"odom",
|
|
34
|
+
"camera.rgb",
|
|
35
|
+
"camera.depth",
|
|
36
|
+
"lidar",
|
|
37
|
+
"joint_states",
|
|
38
|
+
"navigate_to_pose",
|
|
39
|
+
"dock",
|
|
40
|
+
"battery",
|
|
41
|
+
];
|
|
42
|
+
export const BINDING_KEYS_SET = new Set(BINDING_KEYS);
|
|
43
|
+
/**
|
|
44
|
+
* Minimum binding expected for a declared feature. Used by doctor; a
|
|
45
|
+
* feature without its v1 binding is a contract violation.
|
|
46
|
+
*/
|
|
47
|
+
export const FEATURE_REQUIRED_BINDING = {
|
|
48
|
+
base: "cmd_vel",
|
|
49
|
+
camera: "camera.rgb",
|
|
50
|
+
depth: "camera.depth",
|
|
51
|
+
lidar: "lidar",
|
|
52
|
+
arm: "joint_states",
|
|
53
|
+
dock: "dock",
|
|
54
|
+
battery: "battery",
|
|
55
|
+
};
|
|
56
|
+
export const PROFILE_SCHEMA_ID = "agenticros.profile.v1";
|
|
57
|
+
export const RobotProfileSchema = z.object({
|
|
58
|
+
schema: z.literal(PROFILE_SCHEMA_ID).default(PROFILE_SCHEMA_ID),
|
|
59
|
+
features: z.array(z.string().min(1)).default([]),
|
|
60
|
+
bindings: z.record(z.string(), z.string()).default({}),
|
|
61
|
+
});
|
|
62
|
+
export function isKnownFeature(name) {
|
|
63
|
+
return FEATURE_VOCABULARY_SET.has(name);
|
|
64
|
+
}
|
|
65
|
+
export function isKnownBindingKey(key) {
|
|
66
|
+
return BINDING_KEYS_SET.has(key);
|
|
67
|
+
}
|
|
68
|
+
export function unknownFeatures(features) {
|
|
69
|
+
return features.filter((f) => !isKnownFeature(f));
|
|
70
|
+
}
|
|
71
|
+
export function unknownBindingKeys(bindings) {
|
|
72
|
+
return Object.keys(bindings).filter((k) => !isKnownBindingKey(k));
|
|
73
|
+
}
|
|
74
|
+
/** Features declared on a profile that lack their v1 binding. */
|
|
75
|
+
export function featuresMissingBindings(profile) {
|
|
76
|
+
const missing = [];
|
|
77
|
+
for (const feature of profile.features) {
|
|
78
|
+
if (!isKnownFeature(feature))
|
|
79
|
+
continue;
|
|
80
|
+
const key = FEATURE_REQUIRED_BINDING[feature];
|
|
81
|
+
if (!key)
|
|
82
|
+
continue;
|
|
83
|
+
const value = profile.bindings[key];
|
|
84
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
85
|
+
missing.push(feature);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return missing;
|
|
89
|
+
}
|
|
90
|
+
export function resolveRobotProfile(robot) {
|
|
91
|
+
return robot.profile;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Map the deprecated Phase 1.e sensor booleans onto feature names.
|
|
95
|
+
* Used only when `profile` is absent — so `--sensors=has_realsense`
|
|
96
|
+
* still means something for fleet filtering / infer.
|
|
97
|
+
*/
|
|
98
|
+
export function featuresFromDeprecatedSensors(sensors) {
|
|
99
|
+
if (!sensors)
|
|
100
|
+
return [];
|
|
101
|
+
const out = [];
|
|
102
|
+
if (sensors.has_realsense) {
|
|
103
|
+
out.push("camera", "depth");
|
|
104
|
+
}
|
|
105
|
+
if (sensors.has_lidar)
|
|
106
|
+
out.push("lidar");
|
|
107
|
+
if (sensors.has_arm)
|
|
108
|
+
out.push("arm");
|
|
109
|
+
return out;
|
|
110
|
+
}
|
|
111
|
+
/** ALL-OF: every required feature is present on the profile. Empty requires always pass. */
|
|
112
|
+
export function featuresSatisfied(profile, requires) {
|
|
113
|
+
if (!requires || requires.length === 0)
|
|
114
|
+
return true;
|
|
115
|
+
if (!profile)
|
|
116
|
+
return true;
|
|
117
|
+
const have = new Set(profile.features);
|
|
118
|
+
return requires.every((f) => have.has(f));
|
|
119
|
+
}
|
|
120
|
+
/** Required features the profile does not declare. Empty when satisfied or no profile. */
|
|
121
|
+
export function missingFeatures(profile, requires) {
|
|
122
|
+
if (!requires || requires.length === 0)
|
|
123
|
+
return [];
|
|
124
|
+
if (!profile)
|
|
125
|
+
return [];
|
|
126
|
+
const have = new Set(profile.features);
|
|
127
|
+
return requires.filter((f) => !have.has(f));
|
|
128
|
+
}
|
|
129
|
+
function prefixBinding(namespace, key, raw) {
|
|
130
|
+
const value = raw.trim();
|
|
131
|
+
if (!value)
|
|
132
|
+
return value;
|
|
133
|
+
if (key === "camera.rgb" || key === "camera.depth") {
|
|
134
|
+
return resolveCameraSubscribeTopic(namespace, value);
|
|
135
|
+
}
|
|
136
|
+
if (key === "cmd_vel") {
|
|
137
|
+
return toNamespacedTopic(namespace, value);
|
|
138
|
+
}
|
|
139
|
+
return toNamespacedTopicFull(namespace, value);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolve a binding key to a ROS name for this robot.
|
|
143
|
+
*
|
|
144
|
+
* Precedence: explicit `profile.bindings[key]`, then legacy fallbacks
|
|
145
|
+
* (`cameraTopic` for `camera.rgb`, teleop/`/cmd_vel` for `cmd_vel`).
|
|
146
|
+
* Relative names are namespace-prefixed.
|
|
147
|
+
*/
|
|
148
|
+
export function resolveBinding(robot, key, opts) {
|
|
149
|
+
const fromProfile = robot.profile?.bindings[key]?.trim();
|
|
150
|
+
if (fromProfile) {
|
|
151
|
+
return prefixBinding(robot.namespace, key, fromProfile);
|
|
152
|
+
}
|
|
153
|
+
if (key === "camera.rgb") {
|
|
154
|
+
const cam = robot.cameraTopic.trim();
|
|
155
|
+
if (cam)
|
|
156
|
+
return resolveCameraSubscribeTopic(robot.namespace, cam);
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
if (key === "cmd_vel") {
|
|
160
|
+
const raw = (opts?.cmdVelTopic ?? "").trim() || "/cmd_vel";
|
|
161
|
+
return toNamespacedTopic(robot.namespace, raw);
|
|
162
|
+
}
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Draft a profile from kind, cameraTopic, deprecated sensors, and
|
|
167
|
+
* namespaced cmd_vel. Used by `agenticros robots profile infer`.
|
|
168
|
+
* Does not write config.
|
|
169
|
+
*/
|
|
170
|
+
export function inferProfileDraft(robot, opts) {
|
|
171
|
+
const features = new Set();
|
|
172
|
+
const kind = (robot.kind ?? "amr").trim().toLowerCase();
|
|
173
|
+
if (kind === "amr" || kind === "rover" || kind === "drone" || kind === "") {
|
|
174
|
+
features.add("base");
|
|
175
|
+
}
|
|
176
|
+
if (kind === "arm" || kind === "mobile_manipulator") {
|
|
177
|
+
features.add("arm");
|
|
178
|
+
}
|
|
179
|
+
if (kind === "mobile_manipulator") {
|
|
180
|
+
features.add("base");
|
|
181
|
+
}
|
|
182
|
+
if (robot.cameraTopic.trim()) {
|
|
183
|
+
features.add("camera");
|
|
184
|
+
}
|
|
185
|
+
for (const f of featuresFromDeprecatedSensors(robot.sensors)) {
|
|
186
|
+
features.add(f);
|
|
187
|
+
}
|
|
188
|
+
const bindings = {};
|
|
189
|
+
if (features.has("base")) {
|
|
190
|
+
bindings["cmd_vel"] = resolveBinding(robot, "cmd_vel", opts) ?? "/cmd_vel";
|
|
191
|
+
}
|
|
192
|
+
if (features.has("camera")) {
|
|
193
|
+
const rgb = resolveBinding(robot, "camera.rgb");
|
|
194
|
+
if (rgb)
|
|
195
|
+
bindings["camera.rgb"] = rgb;
|
|
196
|
+
}
|
|
197
|
+
if (features.has("depth")) {
|
|
198
|
+
const depth = resolveBinding(robot, "camera.depth") ??
|
|
199
|
+
resolveCameraSubscribeTopic(robot.namespace, "/camera/camera/depth/image_rect_raw");
|
|
200
|
+
bindings["camera.depth"] = depth;
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
schema: PROFILE_SCHEMA_ID,
|
|
204
|
+
features: [...features],
|
|
205
|
+
bindings,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=robot-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"robot-profile.js","sourceRoot":"","sources":["../src/robot-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,qFAAqF;AACrF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM;IACN,KAAK;IACL,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,SAAS;IACT,OAAO;IACP,SAAS;IACT,OAAO;CACC,CAAC;AAIX,MAAM,CAAC,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAEvF,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS;IACT,MAAM;IACN,YAAY;IACZ,cAAc;IACd,OAAO;IACP,cAAc;IACd,kBAAkB;IAClB,MAAM;IACN,SAAS;CACD,CAAC;AAIX,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAuD;IAC1F,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,cAAc;IACnB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAEzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACvD,CAAC,CAAC;AAiBH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAA2B;IACzD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgC;IACjE,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,OAAqB;IAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE,SAAS;QACvC,MAAM,GAAG,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IACrD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAC3C,OAA4C;IAE5C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,CAAC,SAAS;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAC/B,OAAiC,EACjC,QAAuC;IAEvC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,eAAe,CAC7B,OAAiC,EACjC,QAAuC;IAEvC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB,EAAE,GAAW,EAAE,GAAW;IAChE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;QACnD,OAAO,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAmB,EACnB,GAAW,EACX,IAA+B;IAE/B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACzD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,GAAG;YAAE,OAAO,2BAA2B,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC;QAC3D,OAAO,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAMD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAmB,EACnB,IAA0B;IAE1B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxD,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAC1E,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACpD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAClC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,6BAA6B,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC;IAC7E,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,GAAG;YAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;IACxC,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GACT,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC;YACrC,2BAA2B,CACzB,KAAK,CAAC,SAAS,EACf,qCAAqC,CACtC,CAAC;QACJ,QAAQ,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;QACvB,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
package/dist/robots.d.ts
CHANGED
|
@@ -21,8 +21,9 @@
|
|
|
21
21
|
* mental model keep working unchanged. The synthesised entry is marked
|
|
22
22
|
* default so it's selected by `getActiveRobotId()`.
|
|
23
23
|
*/
|
|
24
|
-
import type { AgenticROSConfig } from "./config.js";
|
|
24
|
+
import type { AgenticROSConfig, RobotSafetyOverlay } from "./config.js";
|
|
25
25
|
import type { TransportConfig } from "./transport/types.js";
|
|
26
|
+
import type { RobotProfile } from "./robot-profile.js";
|
|
26
27
|
/** Sensor/hardware tags on a robot (Phase 1.e). */
|
|
27
28
|
export interface RobotSensors {
|
|
28
29
|
/** Intel RealSense depth+RGB camera. */
|
|
@@ -57,6 +58,16 @@ export interface ResolvedRobot {
|
|
|
57
58
|
* filter against for this robot.
|
|
58
59
|
*/
|
|
59
60
|
capabilities?: string[];
|
|
61
|
+
/**
|
|
62
|
+
* Hardware profile. Undefined when the config entry has no `profile`
|
|
63
|
+
* — callers must not invent one; verb filtering is skipped.
|
|
64
|
+
*/
|
|
65
|
+
profile?: RobotProfile;
|
|
66
|
+
/**
|
|
67
|
+
* Optional per-robot safety overlay. Undefined → inherit gateway
|
|
68
|
+
* `config.safety` via `resolveSafetyForRobot`.
|
|
69
|
+
*/
|
|
70
|
+
safety?: RobotSafetyOverlay;
|
|
60
71
|
/**
|
|
61
72
|
* Source tag — handy for diagnostics ("Why is this robot in the list?").
|
|
62
73
|
* - "config": from config.robots[]
|
package/dist/robots.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,6BAA6B;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,OAAO,EAAE,YAAY,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B;;;;OAIG;IACH,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAiBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,aAAa,EAAE,CAyCpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAUpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,aAAa,CAIf;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAiBtF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,eAAe,CAuCjB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAUT"}
|
package/dist/robots.js
CHANGED
package/dist/robots.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"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"}
|
package/dist/safety.d.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared safety gates: per-robot velocity limits, optional workspace
|
|
3
|
+
* geofence, and fail-safe zero-Twist on transport loss.
|
|
4
|
+
*
|
|
5
|
+
* Adapters (MCP, OpenClaw, Gemini, teleop, skills) must call these
|
|
6
|
+
* helpers rather than reading `config.safety` directly so a mixed
|
|
7
|
+
* fleet does not share one clamp.
|
|
8
|
+
*/
|
|
9
|
+
import type { AgenticROSConfig, RobotSafetyOverlay, WorkspaceLimits } from "./config.js";
|
|
10
|
+
import type { ProfileRobot } from "./robot-profile.js";
|
|
11
|
+
import type { RosTransport } from "./transport/transport.js";
|
|
12
|
+
export declare const TWIST_MSG_TYPE = "geometry_msgs/msg/Twist";
|
|
13
|
+
export declare const ZERO_TWIST: {
|
|
14
|
+
linear: {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
z: number;
|
|
18
|
+
};
|
|
19
|
+
angular: {
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
z: number;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export interface SafetyLimits {
|
|
26
|
+
maxLinearVelocity: number;
|
|
27
|
+
maxAngularVelocity: number;
|
|
28
|
+
workspaceLimits?: WorkspaceLimits;
|
|
29
|
+
}
|
|
30
|
+
export interface SafetyCheckResult {
|
|
31
|
+
block: boolean;
|
|
32
|
+
blockReason?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface TwistComponents {
|
|
35
|
+
linear: {
|
|
36
|
+
x: number;
|
|
37
|
+
y: number;
|
|
38
|
+
z: number;
|
|
39
|
+
};
|
|
40
|
+
angular: {
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
z: number;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve velocity + workspace limits for a robot. Robot overlay fields
|
|
48
|
+
* win; unset fields inherit the gateway `config.safety` defaults.
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveSafetyForRobot(config: AgenticROSConfig, robot?: {
|
|
51
|
+
safety?: RobotSafetyOverlay;
|
|
52
|
+
} | null): SafetyLimits;
|
|
53
|
+
/** True when the payload looks like geometry_msgs/Twist. */
|
|
54
|
+
export declare function isTwistMessage(msg: unknown): boolean;
|
|
55
|
+
export declare function checkTwistMessage(limits: SafetyLimits, msg: unknown): SafetyCheckResult;
|
|
56
|
+
/** Scale a Twist down to the velocity ceilings (teleop / skills). */
|
|
57
|
+
export declare function clampTwistToLimits(limits: SafetyLimits, linearX: number, linearY: number, linearZ: number, angularX: number, angularY: number, angularZ: number): TwistComponents;
|
|
58
|
+
export declare function checkWorkspacePosition(limits: SafetyLimits, x: number, y: number): SafetyCheckResult;
|
|
59
|
+
/**
|
|
60
|
+
* Pull map-frame (x, y) pairs from Twist-unrelated nav payloads:
|
|
61
|
+
* `{x,y}`, Pose, PoseStamped, NavigateToPose goal, NavigateThroughPoses.
|
|
62
|
+
*/
|
|
63
|
+
export declare function extractWorkspacePositions(payload: unknown): Array<{
|
|
64
|
+
x: number;
|
|
65
|
+
y: number;
|
|
66
|
+
}>;
|
|
67
|
+
export declare function checkWorkspacePayload(limits: SafetyLimits, payload: unknown): SafetyCheckResult;
|
|
68
|
+
export declare function checkPublishSafety(config: AgenticROSConfig, params: Record<string, unknown>, robot?: {
|
|
69
|
+
safety?: RobotSafetyOverlay;
|
|
70
|
+
} | null): SafetyCheckResult;
|
|
71
|
+
export declare function checkActionGoalSafety(config: AgenticROSConfig, params: Record<string, unknown>, robot?: {
|
|
72
|
+
safety?: RobotSafetyOverlay;
|
|
73
|
+
} | null): SafetyCheckResult;
|
|
74
|
+
export declare function checkInputsWorkspace(config: AgenticROSConfig, inputs: Record<string, unknown>, robot?: {
|
|
75
|
+
safety?: RobotSafetyOverlay;
|
|
76
|
+
} | null): SafetyCheckResult;
|
|
77
|
+
/**
|
|
78
|
+
* A body that accepts Twist. Profile `base` wins; with no profile,
|
|
79
|
+
* anything except an arm-only cell is treated as having a base
|
|
80
|
+
* (legacy configs default kind to "amr").
|
|
81
|
+
*/
|
|
82
|
+
export declare function robotHasMobileBase(robot: ProfileRobot): boolean;
|
|
83
|
+
/** Best-effort zero Twist on every mobile-base robot sharing this transport. */
|
|
84
|
+
export declare function publishStopForBases(transport: RosTransport, robots: readonly ProfileRobot[]): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Publish zero Twist when the transport drops (and again on reconnect
|
|
87
|
+
* so a stale last-command cannot resume). Returns an unsubscribe.
|
|
88
|
+
*/
|
|
89
|
+
export declare function attachDisconnectFailSafe(transport: RosTransport, robots: readonly ProfileRobot[]): () => void;
|
|
90
|
+
export type LiveCheckSeverity = "green" | "yellow" | "red";
|
|
91
|
+
export interface LiveBindingCheck {
|
|
92
|
+
id: string;
|
|
93
|
+
robotId: string;
|
|
94
|
+
key: string;
|
|
95
|
+
name: string;
|
|
96
|
+
severity: LiveCheckSeverity;
|
|
97
|
+
reason: string;
|
|
98
|
+
}
|
|
99
|
+
export interface LiveGraphSnapshot {
|
|
100
|
+
topics: ReadonlyArray<{
|
|
101
|
+
name: string;
|
|
102
|
+
type?: string;
|
|
103
|
+
}>;
|
|
104
|
+
actions?: ReadonlyArray<{
|
|
105
|
+
name: string;
|
|
106
|
+
type?: string;
|
|
107
|
+
}>;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Compare declared profile bindings against a live topic/action list.
|
|
111
|
+
* Missing declared hardware is red; type mismatch is yellow.
|
|
112
|
+
*/
|
|
113
|
+
export declare function checkLiveBindings(robots: ReadonlyArray<ProfileRobot & {
|
|
114
|
+
id: string;
|
|
115
|
+
}>, graph: LiveGraphSnapshot): LiveBindingCheck[];
|
|
116
|
+
//# sourceMappingURL=safety.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../src/safety.ts"],"names":[],"mappings":"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"}
|