@greatlhd/ailo-endpoint-sdk 1.0.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 (89) hide show
  1. package/dist/blob/client.d.ts +15 -0
  2. package/dist/blob/client.d.ts.map +1 -0
  3. package/dist/blob/client.js +48 -0
  4. package/dist/blob/client.js.map +1 -0
  5. package/dist/blob/index.d.ts +3 -0
  6. package/dist/blob/index.d.ts.map +1 -0
  7. package/dist/blob/index.js +2 -0
  8. package/dist/blob/index.js.map +1 -0
  9. package/dist/bootstrap.d.ts +37 -0
  10. package/dist/bootstrap.d.ts.map +1 -0
  11. package/dist/bootstrap.js +145 -0
  12. package/dist/bootstrap.js.map +1 -0
  13. package/dist/config-io.d.ts +6 -0
  14. package/dist/config-io.d.ts.map +1 -0
  15. package/dist/config-io.js +43 -0
  16. package/dist/config-io.js.map +1 -0
  17. package/dist/connection-state.d.ts +24 -0
  18. package/dist/connection-state.d.ts.map +1 -0
  19. package/dist/connection-state.js +83 -0
  20. package/dist/connection-state.js.map +1 -0
  21. package/dist/connection-util.d.ts +12 -0
  22. package/dist/connection-util.d.ts.map +1 -0
  23. package/dist/connection-util.js +15 -0
  24. package/dist/connection-util.js.map +1 -0
  25. package/dist/endpoint-client.d.ts +92 -0
  26. package/dist/endpoint-client.d.ts.map +1 -0
  27. package/dist/endpoint-client.js +669 -0
  28. package/dist/endpoint-client.js.map +1 -0
  29. package/dist/endpoint-config.d.ts +28 -0
  30. package/dist/endpoint-config.d.ts.map +1 -0
  31. package/dist/endpoint-config.js +277 -0
  32. package/dist/endpoint-config.js.map +1 -0
  33. package/dist/errors.d.ts +17 -0
  34. package/dist/errors.d.ts.map +1 -0
  35. package/dist/errors.js +40 -0
  36. package/dist/errors.js.map +1 -0
  37. package/dist/fileref.d.ts +22 -0
  38. package/dist/fileref.d.ts.map +1 -0
  39. package/dist/fileref.js +41 -0
  40. package/dist/fileref.js.map +1 -0
  41. package/dist/index.d.ts +29 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +18 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/local-endpoint-storage.d.ts +11 -0
  46. package/dist/local-endpoint-storage.d.ts.map +1 -0
  47. package/dist/local-endpoint-storage.js +143 -0
  48. package/dist/local-endpoint-storage.js.map +1 -0
  49. package/dist/logger.d.ts +25 -0
  50. package/dist/logger.d.ts.map +1 -0
  51. package/dist/logger.js +27 -0
  52. package/dist/logger.js.map +1 -0
  53. package/dist/media-util.d.ts +8 -0
  54. package/dist/media-util.d.ts.map +1 -0
  55. package/dist/media-util.js +78 -0
  56. package/dist/media-util.js.map +1 -0
  57. package/dist/middleware/index.d.ts +2 -0
  58. package/dist/middleware/index.d.ts.map +1 -0
  59. package/dist/middleware/index.js +2 -0
  60. package/dist/middleware/index.js.map +1 -0
  61. package/dist/middleware/media.d.ts +7 -0
  62. package/dist/middleware/media.d.ts.map +1 -0
  63. package/dist/middleware/media.js +112 -0
  64. package/dist/middleware/media.js.map +1 -0
  65. package/dist/skill-loader.d.ts +19 -0
  66. package/dist/skill-loader.d.ts.map +1 -0
  67. package/dist/skill-loader.js +131 -0
  68. package/dist/skill-loader.js.map +1 -0
  69. package/dist/tool-dispatch/index.d.ts +3 -0
  70. package/dist/tool-dispatch/index.d.ts.map +1 -0
  71. package/dist/tool-dispatch/index.js +2 -0
  72. package/dist/tool-dispatch/index.js.map +1 -0
  73. package/dist/tool-dispatch/normalize.d.ts +5 -0
  74. package/dist/tool-dispatch/normalize.d.ts.map +1 -0
  75. package/dist/tool-dispatch/normalize.js +100 -0
  76. package/dist/tool-dispatch/normalize.js.map +1 -0
  77. package/dist/types.d.ts +150 -0
  78. package/dist/types.d.ts.map +1 -0
  79. package/dist/types.js +13 -0
  80. package/dist/types.js.map +1 -0
  81. package/dist/utils/content.d.ts +7 -0
  82. package/dist/utils/content.d.ts.map +1 -0
  83. package/dist/utils/content.js +30 -0
  84. package/dist/utils/content.js.map +1 -0
  85. package/dist/utils/index.d.ts +2 -0
  86. package/dist/utils/index.d.ts.map +1 -0
  87. package/dist/utils/index.js +2 -0
  88. package/dist/utils/index.js.map +1 -0
  89. package/package.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/tool-dispatch/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAwFpD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,CAclC;AAED,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { autoUploadMedia, materializeInlineMedia } from "../middleware/media.js";
2
+ import { inferMime } from "../media-util.js";
3
+ import * as path from "path";
4
+ import { isRecord, isContentParts, stringifyValue } from "../utils/index.js";
5
+ function isContentPartType(value) {
6
+ return value === "text" || value === "image" || value === "audio" ||
7
+ value === "video" || value === "pdf" || value === "file";
8
+ }
9
+ function isMcpCallResult(value) {
10
+ return isRecord(value) && (Array.isArray(value.content) ||
11
+ "structuredContent" in value ||
12
+ "isError" in value);
13
+ }
14
+ function mcpItemToContentPart(item) {
15
+ if (!isRecord(item)) {
16
+ return { type: "text", text: stringifyValue(item) };
17
+ }
18
+ const rawType = item.type;
19
+ if (!isContentPartType(rawType)) {
20
+ return { type: "text", text: stringifyValue(item) };
21
+ }
22
+ if (rawType === "text") {
23
+ return { type: "text", text: stringifyValue(item.text ?? "") };
24
+ }
25
+ const mediaSource = isRecord(item.media) ? item.media : item;
26
+ const media = { type: rawType };
27
+ if (typeof mediaSource.fileRef === "string")
28
+ media.fileRef = mediaSource.fileRef;
29
+ if (typeof mediaSource.path === "string")
30
+ media.path = mediaSource.path;
31
+ if (typeof mediaSource.url === "string")
32
+ media.url = mediaSource.url;
33
+ if (typeof mediaSource.sourcePath === "string")
34
+ media.sourcePath = mediaSource.sourcePath;
35
+ const mime = typeof mediaSource.mime === "string"
36
+ ? mediaSource.mime
37
+ : typeof mediaSource.mimeType === "string"
38
+ ? mediaSource.mimeType
39
+ : "";
40
+ if (mime)
41
+ media.mime = mime;
42
+ if (typeof mediaSource.name === "string")
43
+ media.name = mediaSource.name;
44
+ if (!media.path && !media.url && !media.fileRef && typeof mediaSource.data === "string") {
45
+ const localPath = materializeInlineMedia(mediaSource.data, mime || undefined, rawType);
46
+ media.path = localPath;
47
+ media.mime = mime || inferMime(localPath);
48
+ media.name = typeof media.name === "string" && media.name
49
+ ? media.name
50
+ : path.basename(localPath);
51
+ }
52
+ if (!media.path && !media.url && !media.fileRef) {
53
+ return { type: "text", text: stringifyValue(item) };
54
+ }
55
+ if (!media.mime && typeof media.path === "string")
56
+ media.mime = inferMime(media.path);
57
+ if (!media.name && typeof media.path === "string")
58
+ media.name = path.basename(media.path);
59
+ return { type: rawType, media: media };
60
+ }
61
+ function adaptMcpCallResult(result) {
62
+ const parts = [];
63
+ if (Array.isArray(result.content)) {
64
+ result.content.forEach((item) => parts.push(mcpItemToContentPart(item)));
65
+ }
66
+ if ("structuredContent" in result && result.structuredContent !== undefined) {
67
+ parts.push({ type: "text", text: stringifyValue(result.structuredContent) });
68
+ }
69
+ return parts;
70
+ }
71
+ function extractMcpError(result) {
72
+ if (Array.isArray(result.content)) {
73
+ const text = result.content
74
+ .map((item) => (isRecord(item) && typeof item.text === "string" ? item.text.trim() : ""))
75
+ .filter(Boolean)
76
+ .join("\n");
77
+ if (text)
78
+ return text;
79
+ }
80
+ if ("structuredContent" in result && result.structuredContent !== undefined) {
81
+ return stringifyValue(result.structuredContent);
82
+ }
83
+ return "MCP tool call failed";
84
+ }
85
+ export async function normalizeToolResult(result, blobClient) {
86
+ if (isContentParts(result)) {
87
+ await autoUploadMedia(result, blobClient);
88
+ return result;
89
+ }
90
+ if (isMcpCallResult(result)) {
91
+ if (result.isError === true) {
92
+ throw new Error(extractMcpError(result));
93
+ }
94
+ const adapted = adaptMcpCallResult(result);
95
+ await autoUploadMedia(adapted, blobClient);
96
+ return adapted;
97
+ }
98
+ return result;
99
+ }
100
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/tool-dispatch/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ export type MediaData = {
2
+ type: string;
3
+ /** FileRef URI (ailo://blob/... or ailo://ep:...) */
4
+ fileRef?: string;
5
+ /** Local file path. Auto-uploaded to Blob storage on outbound messages. */
6
+ path?: string;
7
+ /** External URL (e.g. CDN link). Passed through as-is. */
8
+ url?: string;
9
+ mime?: string;
10
+ name?: string;
11
+ /** Original path on the source endpoint before blob upload. Set by autoUploadMedia. */
12
+ sourcePath?: string;
13
+ };
14
+ export type ContentPart = {
15
+ type: "text" | "image" | "audio" | "video" | "pdf" | "file";
16
+ text?: string;
17
+ media?: MediaData;
18
+ };
19
+ export declare function textPart(text: string): ContentPart;
20
+ export declare function mediaPart(type: "image" | "audio" | "video" | "pdf" | "file", media: MediaData): ContentPart;
21
+ export type ContextTag = {
22
+ kind: string;
23
+ value: string;
24
+ /** When true, messages with matching tags are grouped into the same conversation stream */
25
+ groupWith: boolean;
26
+ /** When true, this tag's value is forwarded to tool calls as a parameter (e.g. chat_id for reply routing) */
27
+ passToTool?: boolean;
28
+ };
29
+ /** A skill loaded from a local SKILL.md file and reported to the server at connect time. */
30
+ export type SkillMeta = {
31
+ name: string;
32
+ description: string;
33
+ content: string;
34
+ };
35
+ /** Describes a tool this endpoint can execute */
36
+ export type ToolCapability = {
37
+ name: string;
38
+ description?: string;
39
+ parameters?: Record<string, unknown>;
40
+ };
41
+ export declare const CAP_MESSAGE = "message";
42
+ export declare const CAP_TOOL_EXECUTE = "tool_execute";
43
+ export declare const CAP_INTENT = "intent";
44
+ export declare const CAP_SIGNAL = "signal";
45
+ export type AcceptMessage = {
46
+ content: ContentPart[];
47
+ contextTags: ContextTag[];
48
+ };
49
+ /** Payload for tool_response */
50
+ export type ToolResponsePayload = {
51
+ id: string;
52
+ success: boolean;
53
+ error?: string;
54
+ result?: unknown;
55
+ content?: ContentPart[];
56
+ };
57
+ export type Point2D = {
58
+ x: number;
59
+ y: number;
60
+ };
61
+ export type EntityPayload = {
62
+ type: string;
63
+ position: Point2D;
64
+ size: number;
65
+ confidence?: number;
66
+ source?: string;
67
+ };
68
+ export type WorldEnrichmentPayload = {
69
+ entities: EntityPayload[];
70
+ scene_description?: string;
71
+ };
72
+ export type IntentPayload = {
73
+ action: string;
74
+ target?: EntityPayload;
75
+ params?: Record<string, unknown>;
76
+ };
77
+ export type ToolRequestPayload = {
78
+ id: string;
79
+ name: string;
80
+ args: Record<string, unknown>;
81
+ };
82
+ export type StreamPayload = {
83
+ streamId: string;
84
+ action: "start" | "chunk" | "end";
85
+ text?: string;
86
+ correlationId?: string;
87
+ };
88
+ export type FileFetchRequest = {
89
+ path: string;
90
+ upload_url: string;
91
+ };
92
+ export type FileFetchResponse = {
93
+ blob_id: string;
94
+ file_ref: string;
95
+ mime: string;
96
+ size: number;
97
+ };
98
+ export type DirListRequest = {
99
+ path: string;
100
+ };
101
+ export type DirListEntry = {
102
+ name: string;
103
+ type: "file" | "dir";
104
+ size: number;
105
+ mtime?: string;
106
+ };
107
+ export type DirListResponse = {
108
+ entries: DirListEntry[];
109
+ };
110
+ export type FilePushRequest = {
111
+ url?: string;
112
+ local_source?: string;
113
+ target_path: string;
114
+ };
115
+ export type FilePushResponse = {
116
+ size: number;
117
+ };
118
+ export type FsProbeMarker = {
119
+ path: string;
120
+ nonce: string;
121
+ };
122
+ export type FsProbeRequest = {
123
+ path: string;
124
+ };
125
+ export type FsProbeResponse = {
126
+ content: string;
127
+ found: boolean;
128
+ };
129
+ export type EndpointUpdateParams = {
130
+ register?: {
131
+ tools?: ToolCapability[];
132
+ blueprints?: string[];
133
+ skills?: SkillMeta[];
134
+ caps?: string[];
135
+ instructions?: string;
136
+ };
137
+ unregister?: {
138
+ tools?: string[];
139
+ blueprints?: string[];
140
+ skills?: string[];
141
+ caps?: string[];
142
+ };
143
+ };
144
+ export type ToolHandler = (args: Record<string, unknown>) => Promise<ContentPart[] | unknown>;
145
+ export interface EndpointStorage {
146
+ getData(key: string): Promise<string | null>;
147
+ setData(key: string, value: string): Promise<void>;
148
+ deleteData(key: string): Promise<void>;
149
+ }
150
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,13 @@
1
+ // ─── Content types ────────────────────────────────────────────────────────────
2
+ export function textPart(text) {
3
+ return { type: "text", text };
4
+ }
5
+ export function mediaPart(type, media) {
6
+ return { type, media };
7
+ }
8
+ // ─── Capability constants ─────────────────────────────────────────────────────
9
+ export const CAP_MESSAGE = "message";
10
+ export const CAP_TOOL_EXECUTE = "tool_execute";
11
+ export const CAP_INTENT = "intent";
12
+ export const CAP_SIGNAL = "signal";
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAsBjF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAAkD,EAClD,KAAgB;IAEhB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AA+BD,iFAAiF;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AACrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ContentPart } from "../types.js";
2
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
3
+ export declare function isContentParts(value: unknown): value is ContentPart[];
4
+ export declare function stringifyValue(value: unknown): string;
5
+ export declare function toContentPart(result: unknown): ContentPart;
6
+ export declare function toContentParts(result: unknown): ContentPart[] | undefined;
7
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/utils/content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,EAAE,CAIrE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOrD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,CAG1D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,EAAE,GAAG,SAAS,CAIzE"}
@@ -0,0 +1,30 @@
1
+ export function isRecord(value) {
2
+ return typeof value === "object" && value !== null;
3
+ }
4
+ export function isContentParts(value) {
5
+ return Array.isArray(value) && value.every((part) => typeof part === "object" && part !== null && "type" in part);
6
+ }
7
+ export function stringifyValue(value) {
8
+ if (typeof value === "string")
9
+ return value;
10
+ try {
11
+ const text = JSON.stringify(value);
12
+ if (text !== undefined)
13
+ return text;
14
+ }
15
+ catch { }
16
+ return String(value);
17
+ }
18
+ export function toContentPart(result) {
19
+ if (isContentParts(result) && result.length === 1)
20
+ return result[0];
21
+ return { type: "text", text: stringifyValue(result) };
22
+ }
23
+ export function toContentParts(result) {
24
+ if (result === undefined)
25
+ return undefined;
26
+ if (isContentParts(result))
27
+ return result;
28
+ return [{ type: "text", text: stringifyValue(result) }];
29
+ }
30
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/utils/content.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,CACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,cAAc,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1C,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isRecord, isContentParts, stringifyValue, toContentPart, toContentParts, } from './content.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { isRecord, isContentParts, stringifyValue, toContentPart, toContentParts, } from './content.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,cAAc,CAAC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@greatlhd/ailo-endpoint-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Ailo Endpoint SDK — unified SDK for connecting any endpoint (robot, feishu, camera, IoT, etc.) to Ailo",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "exports": {
8
+ ".": "./dist/index.js"
9
+ },
10
+ "types": "dist/index.d.ts",
11
+ "files": ["dist", "README.md"],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch",
15
+ "test": "vitest run",
16
+ "test:watch": "vitest",
17
+ "test:coverage": "vitest run --coverage",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "keywords": ["ailo", "endpoint", "sdk", "robot", "iot"],
21
+ "license": "MIT",
22
+ "dependencies": {
23
+ "js-yaml": "^4.1.0",
24
+ "ws": "^8.18.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/js-yaml": "^4.0.9",
28
+ "@types/node": "^22.10.0",
29
+ "@types/ws": "^8.5.0",
30
+ "typescript": "^5.7.0",
31
+ "vitest": "^2.0.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=18"
35
+ }
36
+ }