@octonodes/sdk 0.1.0 → 0.1.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/PLUGINS.md +228 -91
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/gen/types.gen.d.ts +149 -1
- package/dist/gen/types.gen.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/schema/plugin.d.ts +164 -18
- package/dist/plugins/schema/plugin.d.ts.map +1 -1
- package/dist/plugins/schema/plugin.js +53 -1
- package/dist/plugins/schema/plugin.js.map +1 -1
- package/dist/plugins/sdk/definitions/compiler/catalog.d.ts +3 -0
- package/dist/plugins/sdk/definitions/compiler/catalog.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/catalog.js +133 -0
- package/dist/plugins/sdk/definitions/compiler/catalog.js.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/constants.d.ts +6 -0
- package/dist/plugins/sdk/definitions/compiler/constants.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/constants.js +10 -0
- package/dist/plugins/sdk/definitions/compiler/constants.js.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/index.d.ts +7 -0
- package/dist/plugins/sdk/definitions/compiler/index.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/index.js +411 -0
- package/dist/plugins/sdk/definitions/compiler/index.js.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/literals.d.ts +5 -0
- package/dist/plugins/sdk/definitions/compiler/literals.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/literals.js +78 -0
- package/dist/plugins/sdk/definitions/compiler/literals.js.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/schemas.d.ts +4 -0
- package/dist/plugins/sdk/definitions/compiler/schemas.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/schemas.js +95 -0
- package/dist/plugins/sdk/definitions/compiler/schemas.js.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/types.d.ts +20 -0
- package/dist/plugins/sdk/definitions/compiler/types.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/compiler/types.js +3 -0
- package/dist/plugins/sdk/definitions/compiler/types.js.map +1 -0
- package/dist/plugins/sdk/definitions/index.d.ts +7 -0
- package/dist/plugins/sdk/definitions/index.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/index.js +16 -0
- package/dist/plugins/sdk/definitions/index.js.map +1 -0
- package/dist/plugins/sdk/definitions/npm/emit/js.d.ts +4 -0
- package/dist/plugins/sdk/definitions/npm/emit/js.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/npm/emit/js.js +190 -0
- package/dist/plugins/sdk/definitions/npm/emit/js.js.map +1 -0
- package/dist/plugins/sdk/definitions/npm/types.d.ts +63 -0
- package/dist/plugins/sdk/definitions/npm/types.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/npm/types.js +3 -0
- package/dist/plugins/sdk/definitions/npm/types.js.map +1 -0
- package/dist/plugins/sdk/definitions/types.d.ts +43 -0
- package/dist/plugins/sdk/definitions/types.d.ts.map +1 -0
- package/dist/plugins/sdk/definitions/types.js +3 -0
- package/dist/plugins/sdk/definitions/types.js.map +1 -0
- package/dist/plugins/sdk/nodes/index.d.ts +5 -0
- package/dist/plugins/sdk/nodes/index.d.ts.map +1 -0
- package/dist/plugins/sdk/nodes/index.js +12 -0
- package/dist/plugins/sdk/nodes/index.js.map +1 -0
- package/dist/plugins/sdk/plugin/index.d.ts +3 -0
- package/dist/plugins/sdk/plugin/index.d.ts.map +1 -0
- package/dist/plugins/sdk/plugin/index.js +8 -0
- package/dist/plugins/sdk/plugin/index.js.map +1 -0
- package/dist/plugins/sdk/plugin.js +1 -1
- package/dist/plugins/sdk/plugin.js.map +1 -1
- package/dist/plugins/sdk/plugins/define-node.js +1 -1
- package/dist/plugins/sdk/plugins/define-node.js.map +1 -1
- package/dist/plugins/sdk/plugins/index.js +1 -1
- package/dist/plugins/sdk/plugins/index.js.map +1 -1
- package/dist/plugins/sdk/project/index.d.ts +5 -0
- package/dist/plugins/sdk/project/index.d.ts.map +1 -0
- package/dist/plugins/sdk/project/index.js +10 -0
- package/dist/plugins/sdk/project/index.js.map +1 -0
- package/dist/plugins/sdk/runner.js +1 -1
- package/dist/plugins/sdk/runner.js.map +1 -1
- package/package.json +45 -1
package/PLUGINS.md
CHANGED
|
@@ -1,128 +1,265 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Typed Octonode authoring files
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
> **Status:** implemented in the source SDK and devtools. Publishing updated npm packages is a separate release step.
|
|
4
|
+
|
|
5
|
+
Octonode keeps three concerns separate: discovered code, project presentation,
|
|
6
|
+
and a distributable plugin. The generated YAML/JSON remains the runtime and
|
|
7
|
+
installation format; users author TypeScript instead of editing that large file.
|
|
8
|
+
|
|
9
|
+
| File | Owner | Purpose | Required |
|
|
10
|
+
| -------------------- | ----------------------------- | ------------------------------------------------------------------- | ------------------------------ |
|
|
11
|
+
| `octonode.nodes.ts` | Octonode generator | Typed inventory of discovered functions or npm exports | Generated when code is scanned |
|
|
12
|
+
| `octonode.config.ts` | Project author | Optional presentation defaults for nodes inside the current project | No |
|
|
13
|
+
| `octonode.plugin.ts` | Plugin author or npm importer | Select and present public nodes in one distributable plugin | Only when building a plugin |
|
|
14
|
+
|
|
15
|
+
These filenames are reserved. Octonode excludes all three from workflow source
|
|
16
|
+
discovery, so definition code can never become an executable workflow node.
|
|
17
|
+
|
|
18
|
+
Typical file combinations are:
|
|
19
|
+
|
|
20
|
+
- An existing Octonode project has generated `octonode.nodes.ts` and may add
|
|
21
|
+
`octonode.config.ts` for local appearance.
|
|
22
|
+
- Exporting selected project functions or saved workflows adds
|
|
23
|
+
`octonode.plugin.ts`; the plugin reads the generated inventory directly. Saved
|
|
24
|
+
DAG workflows use the existing `octonode plugin from-workflow` export first;
|
|
25
|
+
its package includes a typed inventory and plugin definition.
|
|
26
|
+
- Adapting an npm package generates `octonode.nodes.ts` and
|
|
27
|
+
`octonode.plugin.ts`. It does not need `octonode.config.ts` unless the same
|
|
28
|
+
workspace is also used as an interactive Octonode project.
|
|
29
|
+
|
|
30
|
+
## `octonode.nodes.ts`: generated inventory
|
|
31
|
+
|
|
32
|
+
This file is the typed bridge between application code and the two authored
|
|
33
|
+
files. Octonode generates one stable handle for each discovered local function,
|
|
34
|
+
selected npm export, or workflow in a `from-workflow` export package. Handles carry the source identity and
|
|
35
|
+
inferred input/output types used by autocomplete and compile-time validation.
|
|
36
|
+
|
|
37
|
+
A local source inventory contains actual function references:
|
|
5
38
|
|
|
6
39
|
```ts
|
|
7
|
-
|
|
40
|
+
// Generated by Octonode. Do not edit.
|
|
41
|
+
import { uppercase as node0 } from "./src/text.js";
|
|
42
|
+
export const nodes = { uppercase: node0 } as const;
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Npm and workflow inventories carry the inferred contracts and adapter identities
|
|
46
|
+
instead. Their generated content is checked before building.
|
|
47
|
+
|
|
48
|
+
The exact generated representation is an SDK implementation detail. Authors
|
|
49
|
+
only import `nodes`. The file is normally committed so editors and CI have the
|
|
50
|
+
same types. `octonodes plugin nodes --check` fails when it is stale or edited.
|
|
51
|
+
`octonodes plugin nodes` and local plugin builds regenerate source inventories.
|
|
52
|
+
Npm and workflow inventories are regenerated only by their original import/export commands; builds verify their generated content.
|
|
53
|
+
|
|
54
|
+
For npm packages, the stable identity is the exact module specifier plus export name. This
|
|
55
|
+
lets Octonode regenerate inferred types without losing authored presentation.
|
|
56
|
+
|
|
57
|
+
## `octonode.config.ts`: current-project presentation
|
|
58
|
+
|
|
59
|
+
This optional file customizes how discovered nodes appear inside the current
|
|
60
|
+
project. An empty project definition is valid. A node needs only its generated
|
|
61
|
+
handle and the fields the author wants to change:
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
import { defineNode, defineProject } from "@octonodes/sdk/project";
|
|
65
|
+
import { nodes } from "./octonode.nodes.js";
|
|
66
|
+
|
|
67
|
+
export default defineProject({
|
|
68
|
+
nodes: [
|
|
69
|
+
defineNode(nodes.uppercase, {
|
|
70
|
+
label: "Make uppercase",
|
|
71
|
+
symbol: "Aa",
|
|
72
|
+
icon: "text-cursor-input",
|
|
73
|
+
}),
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The discovered definition supplies the ID, contract, and execution target.
|
|
79
|
+
Unlisted nodes keep Octonode's built-in presentation. This file cannot select a
|
|
80
|
+
publishable plugin, change execution code, or redefine inferred input/output
|
|
81
|
+
contracts.
|
|
82
|
+
|
|
83
|
+
Presentation precedence is:
|
|
84
|
+
|
|
85
|
+
1. Octonode's inferred or built-in defaults.
|
|
86
|
+
2. Defaults in `octonode.config.ts`.
|
|
87
|
+
3. Shared project settings.
|
|
88
|
+
4. Explicit personal or UI overrides.
|
|
89
|
+
|
|
90
|
+
Removing a code default therefore does not erase a user's explicit override.
|
|
91
|
+
|
|
92
|
+
## `octonode.plugin.ts`: distribution boundary
|
|
93
|
+
|
|
94
|
+
This file defines one independently versioned plugin. It selects nodes from the
|
|
95
|
+
generated inventory and gives the external API stable names and presentation:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
import { defineNode, definePlugin } from "@octonodes/sdk/plugin";
|
|
99
|
+
import { nodes } from "./octonode.nodes.js";
|
|
8
100
|
|
|
9
101
|
export default definePlugin({
|
|
10
102
|
id: "text-tools",
|
|
11
103
|
name: "Text tools",
|
|
12
104
|
version: "1.0.0",
|
|
13
|
-
license: "MIT",
|
|
14
|
-
scope: ["public"],
|
|
15
105
|
nodes: [
|
|
16
|
-
defineNode({
|
|
106
|
+
defineNode(nodes.uppercase, {
|
|
17
107
|
id: "uppercase",
|
|
18
|
-
label: "
|
|
19
|
-
|
|
20
|
-
type: "object",
|
|
21
|
-
properties: { text: { type: "string" } },
|
|
22
|
-
required: ["text"],
|
|
23
|
-
},
|
|
24
|
-
outputs: {
|
|
25
|
-
type: "object",
|
|
26
|
-
properties: { text: { type: "string" } },
|
|
27
|
-
required: ["text"],
|
|
28
|
-
},
|
|
29
|
-
run: ({ text }) => ({ text: text.toUpperCase() }),
|
|
108
|
+
label: "Make uppercase",
|
|
109
|
+
icon: "text-cursor-input",
|
|
30
110
|
}),
|
|
31
111
|
],
|
|
32
112
|
});
|
|
33
113
|
```
|
|
34
114
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
`octonode.yml`, CommonJS runner, package metadata, port documentation, and file hashes.
|
|
40
|
-
No extra runtime installation is needed for these bundled artifacts.
|
|
115
|
+
The plugin file owns public node selection, stable public IDs, plugin metadata,
|
|
116
|
+
permissions, connections, assets, and optional inspector UI. Project-only
|
|
117
|
+
presentation does not leak into a published plugin. A package root defines one
|
|
118
|
+
plugin; independently versioned plugins use separate package roots.
|
|
41
119
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
120
|
+
For workflow nodes, the plugin's `icon` is the default. An `icon` supplied to
|
|
121
|
+
`defineNode` overrides it for that node; explicit user presentation overrides
|
|
122
|
+
remain highest priority. Without either icon, the renderer uses its normal fallback.
|
|
123
|
+
|
|
124
|
+
Declare `source: { kind: "plugin" }` when the plugin owns its implementation.
|
|
125
|
+
For upstream adapters, declare `source: { kind: "npm", package: "lodash",
|
|
126
|
+
version: "<exact inspected version>" }`. The compiler checks this against the
|
|
127
|
+
generated inventory and derives `integration.npm`; a mismatched package, version,
|
|
128
|
+
or execution source fails the build. Omitting `source` remains compatible with
|
|
129
|
+
older definitions: compilation infers it from the selected handles.
|
|
130
|
+
|
|
131
|
+
Npm authority does not fork or republish the dependency. Consumer code imports
|
|
132
|
+
the original package using the module forms it supports. Automatic decoration
|
|
133
|
+
of those imported calls is still planned; see
|
|
134
|
+
[the community plugin plan](plans/community-plugin-source-authority.md).
|
|
135
|
+
|
|
136
|
+
Local function contracts support JSON primitives, literal enums, arrays, finite
|
|
137
|
+
object shapes, optional parameters, and async returns. Unsupported contracts such
|
|
138
|
+
as `any`, recursive types, classes, and generic or overloaded functions require a
|
|
139
|
+
concrete typed wrapper. Project presentation does not impose these plugin contract
|
|
140
|
+
limits. Npm adapters retain the existing npm compiler's schemas and warnings.
|
|
141
|
+
|
|
142
|
+
The build emits the existing artifact:
|
|
143
|
+
|
|
144
|
+
```text
|
|
145
|
+
dist/plugins/text-tools/
|
|
146
|
+
octonode.yml
|
|
147
|
+
runner files
|
|
148
|
+
assets
|
|
149
|
+
integrity metadata
|
|
48
150
|
```
|
|
49
151
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
`
|
|
53
|
-
|
|
54
|
-
|
|
152
|
+
The generated manifest remains compatible with the existing loader,
|
|
153
|
+
marketplace, and installations. `octonode.yml`, `octonode.yaml`,
|
|
154
|
+
`octonode.json`, and legacy `octonode.plugin.json` remain readable inputs for
|
|
155
|
+
existing plugins. There is no new hand-authored `octonode.plugin.yml` format.
|
|
156
|
+
|
|
157
|
+
## Npm package flow
|
|
55
158
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
rejects a definition that differs from the built manifest. Build imports and
|
|
60
|
-
executes your definition locally. Only build trusted source.
|
|
159
|
+
Use `--module jira.js/cloud` with `from-npm jira.js@6.2.0` to inspect an
|
|
160
|
+
exported subpath. The generated handle retains that module specifier; installation
|
|
161
|
+
still targets the original `jira.js` package and exact version.
|
|
61
162
|
|
|
62
|
-
|
|
163
|
+
An upstream function that takes a non-JSON SDK client can bind that parameter
|
|
164
|
+
to the package's own factory in `octonode.plugin.ts`:
|
|
63
165
|
|
|
64
166
|
```ts
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
167
|
+
defineNode(nodes.getIssue, {
|
|
168
|
+
connections: ["jira"],
|
|
169
|
+
bindings: {
|
|
170
|
+
client: {
|
|
171
|
+
module: "jira.js/core",
|
|
172
|
+
export: "createClient",
|
|
173
|
+
options: { auth: { type: "bearer" }, retry: { maxAttempts: 1 }, onSchemaMismatch: "throw" },
|
|
174
|
+
env: { host: "JIRA_HOST", "auth.token": "JIRA_ACCESS_TOKEN" },
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
});
|
|
72
178
|
```
|
|
73
179
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
180
|
+
Declare both environment names as fields of the `jira` connection, including
|
|
181
|
+
`secrets:read` permission for secret fields. Factories must belong to the original
|
|
182
|
+
npm package. At runtime the adapter passes one options object to the factory,
|
|
183
|
+
awaits its result, and injects it into the original function's argument position.
|
|
184
|
+
Bound parameters are excluded from public inputs and defaults; input attempts to
|
|
185
|
+
override them fail. Credentials are read only at runtime, never during compilation.
|
|
186
|
+
Upstream errors from bound calls are sanitized before crossing IPC.
|
|
78
187
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
rejected. Native addons and unbundleable dynamic dependencies are not supported.
|
|
83
|
-
Code that reads additional files dynamically must declare those assets explicitly.
|
|
84
|
-
Do not hardcode credentials: file exclusions cannot detect secrets in source.
|
|
188
|
+
This supports exported factory functions, not class constructors or arbitrary
|
|
189
|
+
initialization scripts. Consumer source still uses `getIssue(client, parameters)`
|
|
190
|
+
from `jira.js/cloud`; no Octonode replacement import is introduced.
|
|
85
191
|
|
|
86
|
-
|
|
192
|
+
`octonode plugin from-npm <package>` currently inspects exported functions and
|
|
193
|
+
writes the final manifest and adapter. The importer now also creates an editable typed layer:
|
|
87
194
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
195
|
+
1. Inspect package declarations and infer callable exports and schemas.
|
|
196
|
+
2. Generate `octonode.nodes.ts` from package/export identities.
|
|
197
|
+
3. Create `octonode.plugin.ts` with all selected exports and inferred defaults.
|
|
198
|
+
4. Let the author rename, hide, reorder, or decorate nodes in that file.
|
|
199
|
+
5. Run `npm install`, then `npm run build` in the generated package to produce
|
|
200
|
+
`dist/plugins/<id>/octonode.yml` from the typed definition.
|
|
93
201
|
|
|
94
|
-
|
|
202
|
+
The root `octonode.json` remains the immediate default artifact for existing
|
|
203
|
+
`from-npm` consumers. Customized distributions use the `dist/plugins/<id>`
|
|
204
|
+
artifact. After regenerating the inventory with `--force`, rebuild to apply
|
|
205
|
+
customizations to the new package version.
|
|
95
206
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
octonodes plugin publish dist/plugins/text-tools
|
|
100
|
-
```
|
|
207
|
+
On regeneration, Octonode updates the generated inventory and preserves plugin
|
|
208
|
+
overrides by package/export identity. Removed exports produce a clear compile
|
|
209
|
+
error until the author removes or replaces the corresponding plugin entry.
|
|
101
210
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
211
|
+
```mermaid
|
|
212
|
+
flowchart LR
|
|
213
|
+
S[Local source, workflows, or npm package] --> G[Octonode discovery]
|
|
214
|
+
G --> N[octonode.nodes.ts]
|
|
215
|
+
N --> C[octonode.config.ts]
|
|
216
|
+
N --> P[octonode.plugin.ts]
|
|
217
|
+
C --> A[Current project appearance]
|
|
218
|
+
P --> B[Plugin build]
|
|
219
|
+
B --> Y[Generated octonode.yml artifact]
|
|
220
|
+
```
|
|
108
221
|
|
|
109
|
-
|
|
110
|
-
each plugin independently and increment its version before another release.
|
|
111
|
-
Publishing checks file hashes and refuses changed or extra files. A normal rebuild
|
|
112
|
-
replaces a previous intact generated artifact; modified output is preserved and
|
|
113
|
-
must be moved aside before rebuilding. Edit the TypeScript source, not generated YAML.
|
|
222
|
+
## Compiler rules
|
|
114
223
|
|
|
115
|
-
|
|
224
|
+
- TypeScript performs autocomplete and type checking; Octonode statically reads
|
|
225
|
+
definitions without executing them.
|
|
226
|
+
- Only generated handles from `octonode.nodes.ts` may be passed to `defineNode`.
|
|
227
|
+
- Definition SDK imports outside the three reserved files fail compilation.
|
|
228
|
+
- Unknown keys, duplicate public IDs, missing handles, and invalid metadata fail
|
|
229
|
+
with source locations.
|
|
230
|
+
- Implementation code may be split across normal `.ts` files. Definition values
|
|
231
|
+
remain static literals so builds are deterministic.
|
|
116
232
|
|
|
117
|
-
|
|
118
|
-
Do not edit it manually. From the main Octonode checkout, run:
|
|
233
|
+
## Build and migration
|
|
119
234
|
|
|
120
235
|
```sh
|
|
121
|
-
|
|
122
|
-
|
|
236
|
+
octonodes plugin nodes # Generate local function handles
|
|
237
|
+
octonodes plugin nodes --check # Check committed inventory drift
|
|
238
|
+
octonodes plugin build # Type-check and build octonode.plugin.ts
|
|
239
|
+
octonodes plugin validate dist/plugins/text-tools
|
|
240
|
+
octonodes plugin test dist/plugins/text-tools uppercase --input '{"text":"hello"}'
|
|
123
241
|
```
|
|
124
242
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
243
|
+
Move the prototype's `definePlugin` definition from `octonode.config.ts` to
|
|
244
|
+
`octonode.plugin.ts`. Use `@octonodes/sdk/plugin` for plugins and
|
|
245
|
+
`@octonodes/sdk/project` for project defaults. Replace direct function references
|
|
246
|
+
with generated `nodes` handles. `defineProject({})` remains valid.
|
|
247
|
+
|
|
248
|
+
Older `plugins/**/*.plugin.ts` authoring entries need migration to the root
|
|
249
|
+
plugin definition. Existing YAML/JSON artifacts and the `/plugins` runtime API
|
|
250
|
+
remain compatible; the new builder does not discover arbitrary TypeScript entries.
|
|
251
|
+
|
|
252
|
+
One plugin package contains local functions, one npm package adapter, or one
|
|
253
|
+
saved-workflow export. Mixing these execution sources in one package is rejected.
|
|
254
|
+
Use separate plugin packages when they have different runtime dependencies.
|
|
255
|
+
Workflow exports verify the hashes of their generated runtime files before
|
|
256
|
+
building. Keep dependencies declared by the workflow exporter installed.
|
|
257
|
+
|
|
258
|
+
TypeScript checks values and types; filename restrictions are enforced by the
|
|
259
|
+
Octonode compiler. Plain `tsc` alone cannot enforce filename ownership.
|
|
260
|
+
|
|
261
|
+
Validation covers static compilation without execution, wrong filenames, stale
|
|
262
|
+
inventories, project override precedence, npm argument/default behavior,
|
|
263
|
+
workflow runtime integrity, artifact relocation, and existing installation flows.
|
|
264
|
+
Decorators, executable configuration, multiple plugins in one package, custom
|
|
265
|
+
canvas renderers, and another manifest format remain outside this contract.
|
package/dist/constants.d.ts
CHANGED
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,6BAA6B,CAAC;AACxD,eAAO,MAAM,OAAO,iCAAiC,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CLOUD_API_URL = void 0;
|
|
3
|
+
exports.MCP_URL = exports.CLOUD_API_URL = void 0;
|
|
4
4
|
exports.CLOUD_API_URL = "https://api.octonode.dev";
|
|
5
|
+
exports.MCP_URL = "https://mcp.octonode.dev/mcp";
|
|
5
6
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,0BAA0B,CAAC;AAC3C,QAAA,OAAO,GAAG,8BAA8B,CAAC"}
|
package/dist/gen/types.gen.d.ts
CHANGED
|
@@ -3407,6 +3407,20 @@ export type GetApiWorkflowsByWorkflowIdGraphResponses = {
|
|
|
3407
3407
|
};
|
|
3408
3408
|
};
|
|
3409
3409
|
nodes: Array<{
|
|
3410
|
+
plugin?: string;
|
|
3411
|
+
pluginVersion?: string;
|
|
3412
|
+
pluginUi?: {
|
|
3413
|
+
apiVersion: '1';
|
|
3414
|
+
renderers: {
|
|
3415
|
+
[key: string]: {
|
|
3416
|
+
label: string;
|
|
3417
|
+
targets: {
|
|
3418
|
+
[key: string]: string;
|
|
3419
|
+
};
|
|
3420
|
+
};
|
|
3421
|
+
};
|
|
3422
|
+
};
|
|
3423
|
+
renderer?: string;
|
|
3410
3424
|
hiddenReason?: string;
|
|
3411
3425
|
color?: string;
|
|
3412
3426
|
style?: {
|
|
@@ -3682,6 +3696,20 @@ export type PostApiWorkflowsByWorkflowIdTopologyErrors = {
|
|
|
3682
3696
|
};
|
|
3683
3697
|
};
|
|
3684
3698
|
nodes: Array<{
|
|
3699
|
+
plugin?: string;
|
|
3700
|
+
pluginVersion?: string;
|
|
3701
|
+
pluginUi?: {
|
|
3702
|
+
apiVersion: '1';
|
|
3703
|
+
renderers: {
|
|
3704
|
+
[key: string]: {
|
|
3705
|
+
label: string;
|
|
3706
|
+
targets: {
|
|
3707
|
+
[key: string]: string;
|
|
3708
|
+
};
|
|
3709
|
+
};
|
|
3710
|
+
};
|
|
3711
|
+
};
|
|
3712
|
+
renderer?: string;
|
|
3685
3713
|
hiddenReason?: string;
|
|
3686
3714
|
color?: string;
|
|
3687
3715
|
style?: {
|
|
@@ -3850,6 +3878,20 @@ export type PostApiWorkflowsByWorkflowIdTopologyResponses = {
|
|
|
3850
3878
|
};
|
|
3851
3879
|
};
|
|
3852
3880
|
nodes: Array<{
|
|
3881
|
+
plugin?: string;
|
|
3882
|
+
pluginVersion?: string;
|
|
3883
|
+
pluginUi?: {
|
|
3884
|
+
apiVersion: '1';
|
|
3885
|
+
renderers: {
|
|
3886
|
+
[key: string]: {
|
|
3887
|
+
label: string;
|
|
3888
|
+
targets: {
|
|
3889
|
+
[key: string]: string;
|
|
3890
|
+
};
|
|
3891
|
+
};
|
|
3892
|
+
};
|
|
3893
|
+
};
|
|
3894
|
+
renderer?: string;
|
|
3853
3895
|
hiddenReason?: string;
|
|
3854
3896
|
color?: string;
|
|
3855
3897
|
style?: {
|
|
@@ -4041,6 +4083,16 @@ export type GetApiMarketplaceResponses = {
|
|
|
4041
4083
|
*/
|
|
4042
4084
|
200: {
|
|
4043
4085
|
items: Array<{
|
|
4086
|
+
official?: boolean;
|
|
4087
|
+
installCount?: number;
|
|
4088
|
+
ratingCount?: number;
|
|
4089
|
+
score?: number | null;
|
|
4090
|
+
sourceKind?: 'sdk' | 'npm';
|
|
4091
|
+
npm?: {
|
|
4092
|
+
package: string;
|
|
4093
|
+
version: string;
|
|
4094
|
+
spec: string;
|
|
4095
|
+
} | null;
|
|
4044
4096
|
id: string;
|
|
4045
4097
|
name: string;
|
|
4046
4098
|
version: string;
|
|
@@ -4052,6 +4104,7 @@ export type GetApiMarketplaceResponses = {
|
|
|
4052
4104
|
tags: Array<string>;
|
|
4053
4105
|
nodes?: Array<{
|
|
4054
4106
|
id: string;
|
|
4107
|
+
icon?: string;
|
|
4055
4108
|
label?: string;
|
|
4056
4109
|
symbol?: string;
|
|
4057
4110
|
description?: string;
|
|
@@ -4065,6 +4118,17 @@ export type GetApiMarketplaceResponses = {
|
|
|
4065
4118
|
[key: string]: unknown;
|
|
4066
4119
|
};
|
|
4067
4120
|
connections?: Array<string>;
|
|
4121
|
+
ui?: {
|
|
4122
|
+
apiVersion: '1';
|
|
4123
|
+
renderers: {
|
|
4124
|
+
[key: string]: {
|
|
4125
|
+
label: string;
|
|
4126
|
+
targets: {
|
|
4127
|
+
[key: string]: string;
|
|
4128
|
+
};
|
|
4129
|
+
};
|
|
4130
|
+
};
|
|
4131
|
+
};
|
|
4068
4132
|
}>;
|
|
4069
4133
|
installed: boolean;
|
|
4070
4134
|
scope?: 'user' | 'group' | 'org' | 'public';
|
|
@@ -4124,6 +4188,7 @@ export type GetApiMarketplacePluginsByIdResponses = {
|
|
|
4124
4188
|
tags: Array<string>;
|
|
4125
4189
|
nodes: Array<{
|
|
4126
4190
|
id: string;
|
|
4191
|
+
icon?: string;
|
|
4127
4192
|
label?: string;
|
|
4128
4193
|
symbol?: string;
|
|
4129
4194
|
description?: string;
|
|
@@ -4137,7 +4202,28 @@ export type GetApiMarketplacePluginsByIdResponses = {
|
|
|
4137
4202
|
[key: string]: unknown;
|
|
4138
4203
|
};
|
|
4139
4204
|
connections?: Array<string>;
|
|
4205
|
+
ui?: {
|
|
4206
|
+
apiVersion: '1';
|
|
4207
|
+
renderers: {
|
|
4208
|
+
[key: string]: {
|
|
4209
|
+
label: string;
|
|
4210
|
+
targets: {
|
|
4211
|
+
[key: string]: string;
|
|
4212
|
+
};
|
|
4213
|
+
};
|
|
4214
|
+
};
|
|
4215
|
+
};
|
|
4140
4216
|
}>;
|
|
4217
|
+
official?: boolean;
|
|
4218
|
+
installCount?: number;
|
|
4219
|
+
ratingCount?: number;
|
|
4220
|
+
score?: number | null;
|
|
4221
|
+
sourceKind?: 'sdk' | 'npm';
|
|
4222
|
+
npm?: {
|
|
4223
|
+
package: string;
|
|
4224
|
+
version: string;
|
|
4225
|
+
spec: string;
|
|
4226
|
+
} | null;
|
|
4141
4227
|
installedVersion?: string;
|
|
4142
4228
|
versions: Array<{
|
|
4143
4229
|
version: string;
|
|
@@ -4204,6 +4290,7 @@ export type GetApiPluginsResponses = {
|
|
|
4204
4290
|
tags: Array<string>;
|
|
4205
4291
|
nodes?: Array<{
|
|
4206
4292
|
id: string;
|
|
4293
|
+
icon?: string;
|
|
4207
4294
|
label?: string;
|
|
4208
4295
|
symbol?: string;
|
|
4209
4296
|
description?: string;
|
|
@@ -4217,6 +4304,17 @@ export type GetApiPluginsResponses = {
|
|
|
4217
4304
|
[key: string]: unknown;
|
|
4218
4305
|
};
|
|
4219
4306
|
connections?: Array<string>;
|
|
4307
|
+
ui?: {
|
|
4308
|
+
apiVersion: '1';
|
|
4309
|
+
renderers: {
|
|
4310
|
+
[key: string]: {
|
|
4311
|
+
label: string;
|
|
4312
|
+
targets: {
|
|
4313
|
+
[key: string]: string;
|
|
4314
|
+
};
|
|
4315
|
+
};
|
|
4316
|
+
};
|
|
4317
|
+
};
|
|
4220
4318
|
}>;
|
|
4221
4319
|
}>;
|
|
4222
4320
|
};
|
|
@@ -4253,6 +4351,7 @@ export type GetApiPluginsSearchResponses = {
|
|
|
4253
4351
|
tags: Array<string>;
|
|
4254
4352
|
nodes?: Array<{
|
|
4255
4353
|
id: string;
|
|
4354
|
+
icon?: string;
|
|
4256
4355
|
label?: string;
|
|
4257
4356
|
symbol?: string;
|
|
4258
4357
|
description?: string;
|
|
@@ -4266,6 +4365,17 @@ export type GetApiPluginsSearchResponses = {
|
|
|
4266
4365
|
[key: string]: unknown;
|
|
4267
4366
|
};
|
|
4268
4367
|
connections?: Array<string>;
|
|
4368
|
+
ui?: {
|
|
4369
|
+
apiVersion: '1';
|
|
4370
|
+
renderers: {
|
|
4371
|
+
[key: string]: {
|
|
4372
|
+
label: string;
|
|
4373
|
+
targets: {
|
|
4374
|
+
[key: string]: string;
|
|
4375
|
+
};
|
|
4376
|
+
};
|
|
4377
|
+
};
|
|
4378
|
+
};
|
|
4269
4379
|
}>;
|
|
4270
4380
|
}>;
|
|
4271
4381
|
total: number;
|
|
@@ -4301,6 +4411,7 @@ export type GetApiPluginsNodesResponses = {
|
|
|
4301
4411
|
200: {
|
|
4302
4412
|
items: Array<{
|
|
4303
4413
|
id: string;
|
|
4414
|
+
icon?: string;
|
|
4304
4415
|
label?: string;
|
|
4305
4416
|
symbol?: string;
|
|
4306
4417
|
description?: string;
|
|
@@ -4314,6 +4425,17 @@ export type GetApiPluginsNodesResponses = {
|
|
|
4314
4425
|
[key: string]: unknown;
|
|
4315
4426
|
};
|
|
4316
4427
|
connections?: Array<string>;
|
|
4428
|
+
ui?: {
|
|
4429
|
+
apiVersion: '1';
|
|
4430
|
+
renderers: {
|
|
4431
|
+
[key: string]: {
|
|
4432
|
+
label: string;
|
|
4433
|
+
targets: {
|
|
4434
|
+
[key: string]: string;
|
|
4435
|
+
};
|
|
4436
|
+
};
|
|
4437
|
+
};
|
|
4438
|
+
};
|
|
4317
4439
|
pluginId: string;
|
|
4318
4440
|
pluginName: string;
|
|
4319
4441
|
pluginVersion: string;
|
|
@@ -4365,6 +4487,7 @@ export type GetApiPluginsByPluginIdResponses = {
|
|
|
4365
4487
|
tags: Array<string>;
|
|
4366
4488
|
nodes: Array<{
|
|
4367
4489
|
id: string;
|
|
4490
|
+
icon?: string;
|
|
4368
4491
|
label?: string;
|
|
4369
4492
|
symbol?: string;
|
|
4370
4493
|
description?: string;
|
|
@@ -4378,9 +4501,19 @@ export type GetApiPluginsByPluginIdResponses = {
|
|
|
4378
4501
|
[key: string]: unknown;
|
|
4379
4502
|
};
|
|
4380
4503
|
connections?: Array<string>;
|
|
4504
|
+
ui?: {
|
|
4505
|
+
apiVersion: '1';
|
|
4506
|
+
renderers: {
|
|
4507
|
+
[key: string]: {
|
|
4508
|
+
label: string;
|
|
4509
|
+
targets: {
|
|
4510
|
+
[key: string]: string;
|
|
4511
|
+
};
|
|
4512
|
+
};
|
|
4513
|
+
};
|
|
4514
|
+
};
|
|
4381
4515
|
language?: string;
|
|
4382
4516
|
command: string;
|
|
4383
|
-
icon?: string;
|
|
4384
4517
|
trigger?: boolean;
|
|
4385
4518
|
env?: Array<string>;
|
|
4386
4519
|
}>;
|
|
@@ -4460,6 +4593,20 @@ export type PostApiPluginsByPluginIdNodesByNodeIdAddResponses = {
|
|
|
4460
4593
|
200: {
|
|
4461
4594
|
instanceId: string;
|
|
4462
4595
|
node: {
|
|
4596
|
+
plugin?: string;
|
|
4597
|
+
pluginVersion?: string;
|
|
4598
|
+
pluginUi?: {
|
|
4599
|
+
apiVersion: '1';
|
|
4600
|
+
renderers: {
|
|
4601
|
+
[key: string]: {
|
|
4602
|
+
label: string;
|
|
4603
|
+
targets: {
|
|
4604
|
+
[key: string]: string;
|
|
4605
|
+
};
|
|
4606
|
+
};
|
|
4607
|
+
};
|
|
4608
|
+
};
|
|
4609
|
+
renderer?: string;
|
|
4463
4610
|
hiddenReason?: string;
|
|
4464
4611
|
color?: string;
|
|
4465
4612
|
style?: {
|
|
@@ -4737,6 +4884,7 @@ export type PostApiNativeNodesByCatalogIdMaterializeResponses = {
|
|
|
4737
4884
|
symbol?: string;
|
|
4738
4885
|
description?: string;
|
|
4739
4886
|
color?: string;
|
|
4887
|
+
renderer?: string;
|
|
4740
4888
|
position?: {
|
|
4741
4889
|
x: number;
|
|
4742
4890
|
y: number;
|