@nodetool-ai/node-sdk 0.7.0-rc.11

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 (61) hide show
  1. package/dist/base-node.d.ts +141 -0
  2. package/dist/base-node.d.ts.map +1 -0
  3. package/dist/base-node.js +225 -0
  4. package/dist/base-node.js.map +1 -0
  5. package/dist/decorators.d.ts +19 -0
  6. package/dist/decorators.d.ts.map +1 -0
  7. package/dist/decorators.js +42 -0
  8. package/dist/decorators.js.map +1 -0
  9. package/dist/docs/index.d.ts +4 -0
  10. package/dist/docs/index.d.ts.map +1 -0
  11. package/dist/docs/index.js +4 -0
  12. package/dist/docs/index.js.map +1 -0
  13. package/dist/docs/nodes.d.ts +10 -0
  14. package/dist/docs/nodes.d.ts.map +1 -0
  15. package/dist/docs/nodes.js +99 -0
  16. package/dist/docs/nodes.js.map +1 -0
  17. package/dist/docs/overview.d.ts +6 -0
  18. package/dist/docs/overview.d.ts.map +1 -0
  19. package/dist/docs/overview.js +71 -0
  20. package/dist/docs/overview.js.map +1 -0
  21. package/dist/docs/workflows.d.ts +10 -0
  22. package/dist/docs/workflows.d.ts.map +1 -0
  23. package/dist/docs/workflows.js +112 -0
  24. package/dist/docs/workflows.js.map +1 -0
  25. package/dist/index.d.ts +14 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +12 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/metadata.d.ts +76 -0
  30. package/dist/metadata.d.ts.map +1 -0
  31. package/dist/metadata.js +247 -0
  32. package/dist/metadata.js.map +1 -0
  33. package/dist/node-metadata.d.ts +16 -0
  34. package/dist/node-metadata.d.ts.map +1 -0
  35. package/dist/node-metadata.js +266 -0
  36. package/dist/node-metadata.js.map +1 -0
  37. package/dist/nodes/test-nodes.d.ts +215 -0
  38. package/dist/nodes/test-nodes.d.ts.map +1 -0
  39. package/dist/nodes/test-nodes.js +436 -0
  40. package/dist/nodes/test-nodes.js.map +1 -0
  41. package/dist/package-registry-client.d.ts +12 -0
  42. package/dist/package-registry-client.d.ts.map +1 -0
  43. package/dist/package-registry-client.js +40 -0
  44. package/dist/package-registry-client.js.map +1 -0
  45. package/dist/python-package-scan.d.ts +45 -0
  46. package/dist/python-package-scan.d.ts.map +1 -0
  47. package/dist/python-package-scan.js +158 -0
  48. package/dist/python-package-scan.js.map +1 -0
  49. package/dist/registry.d.ts +55 -0
  50. package/dist/registry.d.ts.map +1 -0
  51. package/dist/registry.js +188 -0
  52. package/dist/registry.js.map +1 -0
  53. package/dist/search.d.ts +58 -0
  54. package/dist/search.d.ts.map +1 -0
  55. package/dist/search.js +127 -0
  56. package/dist/search.js.map +1 -0
  57. package/dist/validation.d.ts +63 -0
  58. package/dist/validation.d.ts.map +1 -0
  59. package/dist/validation.js +138 -0
  60. package/dist/validation.js.map +1 -0
  61. package/package.json +49 -0
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Node-level validation.
3
+ *
4
+ * Validates that a node descriptor has all of its required properties set
5
+ * before a workflow is executed. Properties supplied via incoming edges are
6
+ * skipped (the value will be produced at runtime by an upstream node).
7
+ *
8
+ * Three checks are run for each declared property:
9
+ *
10
+ * 1. `required: true` — the value must be present and non-empty.
11
+ * 2. Model fields (`type` ending in `_model`) — if the value carries a
12
+ * `provider`, it must not be the sentinel `"empty"` and `id` must be
13
+ * a non-empty string. This catches the very common "user forgot to
14
+ * pick a model" case for LLM/agent nodes.
15
+ * 3. Required asset fields (`audio`, `image`, `video`, `document`,
16
+ * `dataframe`, `model_3d`, `folder`, `font`, `text`, `asset`) — when
17
+ * `required: true`, the value must carry a `uri`, `asset_id`,
18
+ * `temp_id`, or inline `data`. The default placeholder
19
+ * (`{ type: "audio", uri: "", asset_id: null, data: null }`) otherwise
20
+ * looks "non-empty" to the generic emptiness check, so without this
21
+ * branch a `required: true` audio/image input would slip through.
22
+ *
23
+ * The validator works against the @prop metadata on a node class, so any
24
+ * node that uses `@prop({ required: true, ... })`, a model-typed field, or
25
+ * an asset-typed field gets validation for free with no per-node code.
26
+ */
27
+ import type { DeclaredPropertyMetadata } from "./decorators.js";
28
+ /** A single validation issue tied to a node property. */
29
+ export interface NodePropertyValidationIssue {
30
+ /** Node id, when known. */
31
+ nodeId?: string;
32
+ /** Node type, when known. */
33
+ nodeType?: string;
34
+ /** Property name that failed validation. */
35
+ property: string;
36
+ /** Human-readable message describing the failure. */
37
+ message: string;
38
+ }
39
+ export interface ValidateNodePropertiesOptions {
40
+ /**
41
+ * Set of property names that are connected to incoming data edges. These
42
+ * properties are produced at runtime, so their default value (often empty)
43
+ * should not be flagged as missing.
44
+ */
45
+ connectedHandles?: ReadonlySet<string> | ReadonlyArray<string>;
46
+ /** Node id to attach to issues. */
47
+ nodeId?: string;
48
+ /** Node type to attach to issues. */
49
+ nodeType?: string;
50
+ }
51
+ /**
52
+ * Validate property values against declared @prop metadata.
53
+ *
54
+ * Properties whose name appears in `connectedHandles` are skipped because
55
+ * they will receive a value from an upstream node at runtime.
56
+ */
57
+ export declare function validateNodeProperties(declared: ReadonlyArray<DeclaredPropertyMetadata>, properties: Record<string, unknown>, options?: ValidateNodePropertiesOptions): NodePropertyValidationIssue[];
58
+ /**
59
+ * Format a list of validation issues into a single human-readable message.
60
+ * Used by GraphValidationError when validation fails.
61
+ */
62
+ export declare function formatValidationIssues(issues: ReadonlyArray<NodePropertyValidationIssue>): string;
63
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,yDAAyD;AACzD,MAAM,WAAW,2BAA2B;IAC1C,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/D,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4ED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,CAAC,wBAAwB,CAAC,EACjD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,GAAE,6BAAkC,GAC1C,2BAA2B,EAAE,CAsC/B;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,CAAC,2BAA2B,CAAC,GACjD,MAAM,CAWR"}
@@ -0,0 +1,138 @@
1
+ const MODEL_TYPE_SUFFIX = "_model";
2
+ const EMPTY_PROVIDER = "empty";
3
+ const ASSET_TYPES = new Set([
4
+ "asset",
5
+ "audio",
6
+ "image",
7
+ "video",
8
+ "text",
9
+ "document",
10
+ "dataframe",
11
+ "model_3d",
12
+ "folder",
13
+ "font"
14
+ ]);
15
+ function isModelType(typeStr) {
16
+ if (!typeStr)
17
+ return false;
18
+ return typeStr.endsWith(MODEL_TYPE_SUFFIX);
19
+ }
20
+ function isAssetType(typeStr) {
21
+ if (!typeStr)
22
+ return false;
23
+ return ASSET_TYPES.has(typeStr);
24
+ }
25
+ function isUnsetAsset(value) {
26
+ if (value === null || value === undefined)
27
+ return true;
28
+ if (typeof value !== "object")
29
+ return false;
30
+ const v = value;
31
+ const uri = v.uri;
32
+ const assetId = v.asset_id;
33
+ const tempId = v.temp_id;
34
+ const data = v.data;
35
+ const hasUri = typeof uri === "string" && uri.length > 0;
36
+ const hasAssetId = typeof assetId === "string" && assetId.length > 0;
37
+ const hasTempId = typeof tempId === "string" && tempId.length > 0;
38
+ const hasData = data != null &&
39
+ !(typeof data === "string" && data.length === 0) &&
40
+ !(Array.isArray(data) && data.length === 0);
41
+ return !hasUri && !hasAssetId && !hasTempId && !hasData;
42
+ }
43
+ function isEmptyValue(value) {
44
+ if (value === null || value === undefined)
45
+ return true;
46
+ if (typeof value === "string")
47
+ return value.length === 0;
48
+ if (Array.isArray(value))
49
+ return value.length === 0;
50
+ return false;
51
+ }
52
+ function isUnsetModel(value) {
53
+ if (value === null || value === undefined)
54
+ return true;
55
+ if (typeof value !== "object")
56
+ return false;
57
+ const v = value;
58
+ const provider = v.provider;
59
+ const id = v.id;
60
+ // A bare placeholder like `{ type: "language_model" }` (no provider, no id)
61
+ // is exactly the unselected default we want to flag.
62
+ if (provider == null)
63
+ return true;
64
+ if (typeof provider === "string" && provider === EMPTY_PROVIDER)
65
+ return true;
66
+ if (id == null)
67
+ return true;
68
+ if (typeof id === "string" && id.length === 0)
69
+ return true;
70
+ return false;
71
+ }
72
+ function toSet(handles) {
73
+ if (!handles)
74
+ return new Set();
75
+ if (handles instanceof Set)
76
+ return handles;
77
+ return new Set(handles);
78
+ }
79
+ /**
80
+ * Validate property values against declared @prop metadata.
81
+ *
82
+ * Properties whose name appears in `connectedHandles` are skipped because
83
+ * they will receive a value from an upstream node at runtime.
84
+ */
85
+ export function validateNodeProperties(declared, properties, options = {}) {
86
+ const connected = toSet(options.connectedHandles);
87
+ const issues = [];
88
+ for (const { name, options: meta } of declared) {
89
+ if (connected.has(name))
90
+ continue;
91
+ const value = properties[name];
92
+ const typeStr = meta.type;
93
+ if (meta.required) {
94
+ // Asset-typed fields hold object placeholders that pass the generic
95
+ // emptiness check, so route them through the asset-specific check.
96
+ const isAsset = isAssetType(typeStr);
97
+ const empty = isAsset ? isUnsetAsset(value) : isEmptyValue(value);
98
+ if (empty) {
99
+ issues.push({
100
+ nodeId: options.nodeId,
101
+ nodeType: options.nodeType,
102
+ property: name,
103
+ message: isAsset
104
+ ? `Property "${name}" requires a ${typeStr} (asset, uri, or inline data)`
105
+ : `Required property "${name}" is not set`
106
+ });
107
+ continue;
108
+ }
109
+ }
110
+ if (isModelType(typeStr) && isUnsetModel(value)) {
111
+ issues.push({
112
+ nodeId: options.nodeId,
113
+ nodeType: options.nodeType,
114
+ property: name,
115
+ message: `Property "${name}" requires a ${typeStr} to be selected (provider and model id)`
116
+ });
117
+ }
118
+ }
119
+ return issues;
120
+ }
121
+ /**
122
+ * Format a list of validation issues into a single human-readable message.
123
+ * Used by GraphValidationError when validation fails.
124
+ */
125
+ export function formatValidationIssues(issues) {
126
+ if (issues.length === 0)
127
+ return "";
128
+ const lines = issues.map((issue) => {
129
+ const where = issue.nodeId
130
+ ? ` on node "${issue.nodeId}"${issue.nodeType ? ` (${issue.nodeType})` : ""}`
131
+ : issue.nodeType
132
+ ? ` on ${issue.nodeType}`
133
+ : "";
134
+ return ` - ${issue.message}${where}`;
135
+ });
136
+ return `Graph validation failed with ${issues.length} issue(s):\n${lines.join("\n")}`;
137
+ }
138
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@nodetool-ai/node-sdk",
3
+ "type": "module",
4
+ "version": "0.7.0-rc.11",
5
+ "description": "Node SDK: BaseNode, NodeRegistry, and example nodes",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "node ../../scripts/build-typescript-workspace.mjs",
10
+ "test": "vitest run",
11
+ "test:metadata": "vitest run tests/metadata.test.ts",
12
+ "test:watch": "vitest",
13
+ "lint": "tsc --noEmit"
14
+ },
15
+ "dependencies": {
16
+ "@nodetool-ai/kernel": "^0.7.0-rc.11",
17
+ "@nodetool-ai/protocol": "^0.7.0-rc.11",
18
+ "@nodetool-ai/runtime": "^0.7.0-rc.11"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "^22.0.0",
22
+ "typescript": "^5.7.2",
23
+ "vitest": "^4.1.2"
24
+ },
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.js",
29
+ "default": "./dist/index.js"
30
+ }
31
+ },
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/nodetool-ai/nodetool.git",
36
+ "directory": "packages/node-sdk"
37
+ },
38
+ "homepage": "https://nodetool.ai",
39
+ "bugs": {
40
+ "url": "https://github.com/nodetool-ai/nodetool/issues"
41
+ },
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "files": [
46
+ "dist",
47
+ "README.md"
48
+ ]
49
+ }