@octonodes/cli 0.2.26 → 0.2.40
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/README.md +40 -8
- package/dist/apps/build.d.ts +30 -30
- package/dist/apps/build.d.ts.map +1 -1
- package/dist/apps/build.js +7 -6
- package/dist/apps/build.js.map +1 -1
- package/dist/apps/cloudflared.js.map +1 -1
- package/dist/apps/constants.d.ts +5 -1
- package/dist/apps/constants.d.ts.map +1 -1
- package/dist/apps/constants.js +7 -2
- package/dist/apps/constants.js.map +1 -1
- package/dist/apps/create.d.ts +1 -1
- package/dist/apps/create.d.ts.map +1 -1
- package/dist/apps/create.js +22 -33
- package/dist/apps/create.js.map +1 -1
- package/dist/apps/dev.d.ts +8 -8
- package/dist/apps/dev.js.map +1 -1
- package/dist/apps/development.js.map +1 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +2 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/publish.js.map +1 -1
- package/dist/apps/server.d.ts +1 -1
- package/dist/apps/server.js.map +1 -1
- package/dist/apps/source.d.ts +116 -116
- package/dist/apps/source.d.ts.map +1 -1
- package/dist/apps/source.js +1 -1
- package/dist/apps/source.js.map +1 -1
- package/dist/apps/tunnel-lease.js.map +1 -1
- package/dist/apps/tunnel.d.ts +1 -1
- package/dist/apps/tunnel.js.map +1 -1
- package/dist/apps/welcome.d.ts +2 -2
- package/dist/apps/welcome.d.ts.map +1 -1
- package/dist/apps/welcome.js +529 -13
- package/dist/apps/welcome.js.map +1 -1
- package/dist/auth.d.ts +6 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +42 -12
- package/dist/auth.js.map +1 -1
- package/dist/connect.js.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/plugins/app.js.map +1 -1
- package/dist/plugins/artifact.d.ts.map +1 -1
- package/dist/plugins/artifact.js.map +1 -1
- package/dist/plugins/build.d.ts.map +1 -1
- package/dist/plugins/build.js +9 -8
- package/dist/plugins/build.js.map +1 -1
- package/dist/plugins/constants.js.map +1 -1
- package/dist/plugins/create.d.ts.map +1 -1
- package/dist/plugins/create.js +4 -3
- package/dist/plugins/create.js.map +1 -1
- package/dist/plugins/deploy.js.map +1 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/library.d.ts.map +1 -1
- package/dist/plugins/library.js +2 -1
- package/dist/plugins/library.js.map +1 -1
- package/dist/plugins/publish.d.ts +116 -116
- package/dist/plugins/publish.d.ts.map +1 -1
- package/dist/plugins/publish.js.map +1 -1
- package/dist/plugins/release.d.ts +11 -11
- package/dist/plugins/release.js.map +1 -1
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js.map +1 -1
- package/package.json +10 -5
- package/runtime/plugin-lifecycle.cjs +17097 -14595
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ An npm release does not automatically make those channels available.
|
|
|
17
17
|
|
|
18
18
|
### Prerequisites
|
|
19
19
|
|
|
20
|
-
For npm-based installation, install [Node.js
|
|
20
|
+
For npm-based installation, install [Node.js 20.19+, 22.12+, or newer](https://nodejs.org/en/download)
|
|
21
21
|
and your chosen package manager. Check the runtime before installing:
|
|
22
22
|
|
|
23
23
|
```sh
|
|
@@ -25,10 +25,10 @@ node --version
|
|
|
25
25
|
npm --version
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
Node should report `
|
|
28
|
+
Node should report `v20.19.0` or newer in Node 20, or `v22.12.0` or newer. Homebrew will install `node@24` as a dependency;
|
|
29
29
|
the planned portable, MSI, DEB, RPM, Scoop, Chocolatey, Arch and Snap packages
|
|
30
30
|
include their own Node 24 runtime. App and plugin projects still need a separate
|
|
31
|
-
Node
|
|
31
|
+
supported Node development toolchain and a package manager to install project dependencies.
|
|
32
32
|
|
|
33
33
|
### npm, pnpm, Yarn and Bun
|
|
34
34
|
|
|
@@ -51,7 +51,7 @@ If pnpm reports no global bin directory, run [pnpm setup](https://pnpm.io/cli/se
|
|
|
51
51
|
and open a new terminal. For [Yarn Classic](https://classic.yarnpkg.com/en/docs/cli/global),
|
|
52
52
|
ensure the directory from `yarn global bin` is on PATH. Bun's global binaries
|
|
53
53
|
normally live in `~/.bun/bin`; see [Bun installation](https://bun.com/docs/installation).
|
|
54
|
-
Keep Node
|
|
54
|
+
Keep a supported Node version on PATH even when using Bun as the package manager.
|
|
55
55
|
|
|
56
56
|
### Homebrew — macOS and Linux
|
|
57
57
|
|
|
@@ -248,7 +248,7 @@ for signed APT/DNF repository setup.
|
|
|
248
248
|
|
|
249
249
|
## Create an app
|
|
250
250
|
|
|
251
|
-
Use Node
|
|
251
|
+
Use Node 20.19+, 22.12+, or newer and a CLI release containing `octonodes app`. The default scaffold
|
|
252
252
|
is a full Vite app with one hosted page and a backend. Contributions are optional.
|
|
253
253
|
Use `--template extension` for a navbar launcher and panel inside Octonode.
|
|
254
254
|
Run `octonodes app targets` to list supported view/action/launcher targets; add a
|
|
@@ -294,7 +294,7 @@ until their administrator approves an update.
|
|
|
294
294
|
|
|
295
295
|
Full apps include a connected backend. Set `web.applicationUrl` in `octonode.app.json` to a permanent HTTPS
|
|
296
296
|
origin, add only necessary `web.requestedActions`, and run `npm test`. The CLI
|
|
297
|
-
publishes release metadata; deploy `dist/web/<app-id>` to a Node
|
|
297
|
+
publishes release metadata; deploy `dist/web/<app-id>` to a supported Node
|
|
298
298
|
host yourself, set `OCTONODE_APP_ID` and `OCTONODE_API_URL`, and run
|
|
299
299
|
`node start.cjs`. Keep prior content-hashed assets for pinned installations.
|
|
300
300
|
The [Playbook app guide](https://playbook.octonodes.com/docs/apps) covers the
|
|
@@ -307,6 +307,7 @@ octonodes app create my-app # Vite
|
|
|
307
307
|
octonodes app create my-vite-app --platform vite
|
|
308
308
|
octonodes app create my-next-app --platform next
|
|
309
309
|
octonodes app create my-plain-app --platform plain
|
|
310
|
+
octonodes app create coding-app --project-access write
|
|
310
311
|
```
|
|
311
312
|
|
|
312
313
|
Vite and Next.js create a full app with a real framework page in `src/web/App.tsx`,
|
|
@@ -314,7 +315,13 @@ verified workspace content, a Projects route registered in Studio, and the verif
|
|
|
314
315
|
builds Vite or a Next.js static export into the same verified web artifact and
|
|
315
316
|
serves it through the development tunnel. Next.js server features are outside
|
|
316
317
|
this static export; add backend routes in `src/server.ts`.
|
|
317
|
-
|
|
318
|
+
All full-app platforms start with the animated **Workspace overview** page, an
|
|
319
|
+
**Explore projects** link, responsive light/dark styling, and reduced-motion support.
|
|
320
|
+
Vite and Next.js emit native React JSX; plain emits `src/welcome.html` and
|
|
321
|
+
`src/hosted.ts` with the same design and verified backend. The overview is part of
|
|
322
|
+
the generated app, so customize these source files after creation. Studio’s
|
|
323
|
+
Storybook fixture is a separate preview and is not shipped with the CLI.
|
|
324
|
+
Extension-only starters have no hosted page.
|
|
318
325
|
|
|
319
326
|
Generated workspaces include `installConfig.hoistingLimits: workspaces` for Yarn 4.
|
|
320
327
|
The hosted SDK keeps normal browser history and mirrors embedded routes into Studio’s
|
|
@@ -367,6 +374,8 @@ rebuild first. Artifact publication accepts `--org` and `--team`; the optional
|
|
|
367
374
|
|
|
368
375
|
## Sign in
|
|
369
376
|
|
|
377
|
+
Login uses `https://octonodes.com` by default; `--base-url` or `OCTONODE_URL` can select another Studio deployment.
|
|
378
|
+
|
|
370
379
|
The default login opens GitHub authentication in your browser and signs in as the same user as
|
|
371
380
|
Octonode Studio:
|
|
372
381
|
|
|
@@ -378,6 +387,17 @@ If the browser cannot open, visit the URL printed by the command. The CLI receiv
|
|
|
378
387
|
temporary loopback callback, stores the refreshable session in `~/.octonode/session.json`, and
|
|
379
388
|
refreshes expired access tokens automatically.
|
|
380
389
|
|
|
390
|
+
Login prints your personal workspace. Run `octonodes whoami` to retrieve the
|
|
391
|
+
verified auth `userId`, email, linked providers and `workspace` again. Use its
|
|
392
|
+
`workspace` value for `app dev --workspace` and its `userId` for backend owner
|
|
393
|
+
checks. The general `identity api get` endpoint can return a `workspace:user:`
|
|
394
|
+
prefixed resource identity; that is not the auth UUID. `whoami` refuses API token
|
|
395
|
+
overrides so a saved user's ID cannot be mistaken for the active token's account.
|
|
396
|
+
|
|
397
|
+
The app descriptor ID identifies the app source. Studio development previews
|
|
398
|
+
receive a temporary app ID; backends must verify against `OCTONODE_APP_ID`, which
|
|
399
|
+
the CLI supplies for each preview. Configure the registered app ID for production.
|
|
400
|
+
|
|
381
401
|
For terminal-only login, request an email code:
|
|
382
402
|
|
|
383
403
|
```sh
|
|
@@ -467,7 +487,7 @@ the [Octonode community](https://community.octonodes.com/community).
|
|
|
467
487
|
| Variable | Purpose |
|
|
468
488
|
| --- | --- |
|
|
469
489
|
| `OCTONODE_TOKEN` | Overrides every saved login. |
|
|
470
|
-
| `OCTONODE_URL` | Overrides `https://
|
|
490
|
+
| `OCTONODE_URL` | Overrides `https://octonodes.com`. |
|
|
471
491
|
| `OCTONODE_CONFIG_DIR` | Overrides the default `~/.octonode` directory. |
|
|
472
492
|
|
|
473
493
|
Use `--base-url <url>` to override the API URL for one login or API command:
|
|
@@ -498,3 +518,15 @@ out of shell history, logs, and source control.
|
|
|
498
518
|
|
|
499
519
|
Use [`@octonodes/sdk`](https://www.npmjs.com/package/@octonodes/sdk) for typed application code and
|
|
500
520
|
direct access to the same API operations.
|
|
521
|
+
|
|
522
|
+
Published 0.2.38 requires `OCTONODE_URL=https://octonodes.com` (or
|
|
523
|
+
`--base-url https://octonodes.com`) for generated API commands; its control-plane
|
|
524
|
+
default returns 404 for `/api/*`. This candidate corrects that default.
|
|
525
|
+
|
|
526
|
+
Project-file scopes are opt-in. `--project-access read` requests `projects:read`
|
|
527
|
+
for discovery and `read:project` for source files. `--project-access write` also
|
|
528
|
+
requests `write:project`. For full apps these are stored in
|
|
529
|
+
`web.requestedActions`; extension apps use `requestedActions`. Studio requires
|
|
530
|
+
explicit consent for selected projects. The scopes do not grant table data,
|
|
531
|
+
workflow execution, or arbitrary commands, and the creation flag does not start
|
|
532
|
+
an execution sandbox. A supporting engine release must be deployed first.
|
package/dist/apps/build.d.ts
CHANGED
|
@@ -1,80 +1,80 @@
|
|
|
1
1
|
import { PluginManifest } from "@octonodes/sdk/plugins";
|
|
2
2
|
export declare function buildAppProject(directory: string, applicationUrl?: string): Promise<import("../plugins/types").PluginBuild | {
|
|
3
|
+
webDirectory: string;
|
|
3
4
|
manifest: PluginManifest;
|
|
4
5
|
directory: string;
|
|
5
|
-
webDirectory: string;
|
|
6
6
|
}>;
|
|
7
7
|
export declare function verifyWebBuild(directory: string): {
|
|
8
8
|
apiVersion: "1";
|
|
9
9
|
hosting: "self-hosted";
|
|
10
10
|
applicationUrl: string;
|
|
11
|
-
icon?: "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "function" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
12
|
-
iconUrl?: string | undefined;
|
|
13
|
-
privacyUrl?: string | undefined;
|
|
14
|
-
supportUrl?: string | undefined;
|
|
15
11
|
redirectUrls: string[];
|
|
16
|
-
|
|
17
|
-
requestedActions: ("data:read" | "data:write" | "projects:read" | "workflows:run")[];
|
|
12
|
+
requestedActions: ("projects:read" | "data:read" | "data:write" | "workflows:run" | "read:project" | "write:project")[];
|
|
18
13
|
extensions: {
|
|
19
14
|
id: string;
|
|
20
|
-
target: "app.page" | "workspace.block";
|
|
21
15
|
url: string;
|
|
16
|
+
target: "app.page" | "workspace.block";
|
|
22
17
|
sha256: string;
|
|
23
18
|
}[];
|
|
24
|
-
|
|
25
|
-
apiVersion: "2";
|
|
26
|
-
hosting: "extension-only";
|
|
27
|
-
icon?: "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "function" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
19
|
+
icon?: "function" | "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
28
20
|
iconUrl?: string | undefined;
|
|
21
|
+
privacyUrl?: string | undefined;
|
|
22
|
+
supportUrl?: string | undefined;
|
|
23
|
+
webhookUrl?: string | undefined;
|
|
24
|
+
} | {
|
|
29
25
|
settings: {
|
|
30
|
-
id: string;
|
|
31
26
|
label: string;
|
|
27
|
+
id: string;
|
|
32
28
|
defaultValue: string;
|
|
33
29
|
}[];
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
requestedActions: ("data:read" | "data:write" | "
|
|
30
|
+
apiVersion: "2";
|
|
31
|
+
hosting: "extension-only";
|
|
32
|
+
requestedActions: ("projects:read" | "data:read" | "data:write" | "workflows:run" | "read:project" | "write:project")[];
|
|
37
33
|
extensions: {
|
|
38
34
|
id: string;
|
|
39
|
-
target: "app.page" | "workspace.block";
|
|
40
35
|
path: string;
|
|
36
|
+
target: "app.page" | "workspace.block";
|
|
41
37
|
sha256: string;
|
|
42
38
|
}[];
|
|
43
|
-
|
|
44
|
-
hosting: "extension-only";
|
|
45
|
-
icon?: "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "function" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
39
|
+
icon?: "function" | "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
46
40
|
iconUrl?: string | undefined;
|
|
41
|
+
privacyUrl?: string | undefined;
|
|
42
|
+
supportUrl?: string | undefined;
|
|
43
|
+
} | {
|
|
47
44
|
settings: {
|
|
48
|
-
id: string;
|
|
49
45
|
label: string;
|
|
46
|
+
id: string;
|
|
50
47
|
defaultValue: string;
|
|
51
48
|
}[];
|
|
52
|
-
privacyUrl?: string | undefined;
|
|
53
|
-
supportUrl?: string | undefined;
|
|
54
49
|
apiVersion: "3";
|
|
55
|
-
|
|
50
|
+
hosting: "extension-only";
|
|
51
|
+
requestedActions: ("projects:read" | "data:read" | "data:write" | "workflows:run" | "read:project" | "write:project")[];
|
|
56
52
|
extensions: {
|
|
57
53
|
id: string;
|
|
58
|
-
target: "app.page" | "app.settings.section" | "document.action" | "document.block.action" | "document.panel" | "document.review.action" | "document.selection-action" | "document.slash-command" | "document.tab" | "editor.action" | "editor.panel" | "editor.selection-action" | "execution.action" | "execution.details.block" | "file.action" | "git.diff.action" | "git.diff.panel" | "node.action" | "node.inspector.block" | "node.inspector.tab" | "node.view" | "project.action" | "project.overview.block" | "project.settings.section" | "project.tab" | "shell.dock" | "shell.panel" | "table.action" | "table.view" | "task.action" | "task.card.badge" | "task.details.block" | "task.details.tab" | "task.space.action" | "task.space.view" | "workflow.action" | "workflow.canvas.action" | "workflow.edge.action" | "workflow.inspector.block" | "workflow.selection-action" | "workflow.tab" | "workspace.block";
|
|
59
|
-
title: string;
|
|
60
|
-
icon?: "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "function" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
61
54
|
path: string;
|
|
55
|
+
target: "app.page" | "workspace.block" | "shell.panel" | "shell.dock" | "project.tab" | "project.overview.block" | "workflow.tab" | "workflow.inspector.block" | "node.view" | "node.inspector.tab" | "node.inspector.block" | "task.space.view" | "task.details.tab" | "task.details.block" | "task.card.badge" | "document.tab" | "document.panel" | "editor.panel" | "git.diff.panel" | "table.view" | "execution.details.block" | "app.settings.section" | "project.settings.section" | "project.action" | "file.action" | "editor.action" | "editor.selection-action" | "workflow.action" | "workflow.canvas.action" | "workflow.selection-action" | "workflow.edge.action" | "node.action" | "task.space.action" | "task.action" | "document.action" | "document.selection-action" | "document.block.action" | "document.slash-command" | "document.review.action" | "git.diff.action" | "table.action" | "execution.action";
|
|
56
|
+
title: string;
|
|
62
57
|
sha256: string;
|
|
58
|
+
icon?: "function" | "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
63
59
|
when?: {
|
|
64
60
|
hasProject?: boolean | undefined;
|
|
65
61
|
hasSelection?: boolean | undefined;
|
|
66
62
|
readOnly?: boolean | undefined;
|
|
67
63
|
nodeKind?: string | undefined;
|
|
68
|
-
documentFormat?: "
|
|
64
|
+
documentFormat?: "markdown" | "html" | "latex" | undefined;
|
|
69
65
|
} | undefined;
|
|
70
66
|
}[];
|
|
71
67
|
launchers: {
|
|
72
68
|
id: string;
|
|
73
|
-
target: "shell.
|
|
69
|
+
target: "shell.navbar.action" | "shell.navigation.item" | "shell.command";
|
|
74
70
|
title: string;
|
|
75
|
-
icon?: "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "function" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
76
71
|
opens: string;
|
|
72
|
+
icon?: "function" | "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
77
73
|
}[];
|
|
78
74
|
locales: Record<string, Record<string, string>>;
|
|
75
|
+
icon?: "function" | "arrow-up-down" | "binary" | "bomb" | "boxes" | "braces" | "calculator" | "calendar" | "camera" | "clock" | "code" | "copy-x" | "database" | "dices" | "filter" | "flag" | "flask" | "git-branch" | "git-merge" | "group" | "hook" | "list-filter" | "merge" | "octagon-x" | "package" | "package-x" | "pencil" | "play" | "regex" | "repeat" | "replace" | "ruler" | "scan-eye" | "scissors" | "search" | "server-cog" | "settings" | "sigma" | "split" | "terminal" | "test-tube" | "text-cursor-input" | "ticket" | "truck" | "type" | "typescript" | "ungroup" | "variable" | "wand" | "wave" | "webhook" | "workflow" | "x" | undefined;
|
|
76
|
+
iconUrl?: string | undefined;
|
|
77
|
+
privacyUrl?: string | undefined;
|
|
78
|
+
supportUrl?: string | undefined;
|
|
79
79
|
};
|
|
80
80
|
//# sourceMappingURL=build.d.ts.map
|
package/dist/apps/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/apps/build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/apps/build.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAKxD,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;;;;GA4K/E;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAwBgq8F,CAAC;YAA6oB,CAAC;sBAA8B,CAAC;wBAAmD,CAAC;oBAA+C,CAAC;oBAA+C,CAAC;0BAAoD,CAAC;;;;;;;;YAA+R,CAAC;;;;;;;EAXt2+F"}
|
package/dist/apps/build.js
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildAppProject = buildAppProject;
|
|
4
4
|
exports.verifyWebBuild = verifyWebBuild;
|
|
5
|
+
const plugins_1 = require("@octonodes/sdk/plugins");
|
|
5
6
|
const node_fs_1 = require("node:fs");
|
|
6
7
|
const node_path_1 = require("node:path");
|
|
7
8
|
const node_child_process_1 = require("node:child_process");
|
|
8
9
|
const node_util_1 = require("node:util");
|
|
9
10
|
const esbuild_1 = require("esbuild");
|
|
10
|
-
const plugins_1 = require("@octonodes/sdk/plugins");
|
|
11
11
|
const plugins_2 = require("@octonodes/sdk/plugins");
|
|
12
|
+
const plugins_3 = require("@octonodes/sdk/plugins");
|
|
12
13
|
const app_1 = require("../plugins/app");
|
|
13
14
|
const artifact_1 = require("../plugins/artifact");
|
|
14
15
|
const source_1 = require("./source");
|
|
@@ -32,7 +33,7 @@ async function buildAppProject(directory, applicationUrl) {
|
|
|
32
33
|
const result = await (0, esbuild_1.build)({
|
|
33
34
|
absWorkingDir: root,
|
|
34
35
|
stdin: {
|
|
35
|
-
contents: `import extension from ${JSON.stringify(entry)}; import { startExtension } from "@octonodes/ui-extensions/react"; import { startAction } from "@octonodes/ui-extensions"; if (extension.target !== ${JSON.stringify(extension.target)}) throw new Error("Extension target mismatch"); if ((extension.kind === "action") !== ${JSON.stringify(
|
|
36
|
+
contents: `import extension from ${JSON.stringify(entry)}; import { startExtension } from "@octonodes/ui-extensions/react"; import { startAction } from "@octonodes/ui-extensions"; if (extension.target !== ${JSON.stringify(extension.target)}) throw new Error("Extension target mismatch"); if ((extension.kind === "action") !== ${JSON.stringify(plugins_2.APP_ACTION_TARGETS.includes(extension.target))}) throw new Error("Extension kind mismatch"); ${source.apiVersion === "octonode.app/v2" ? 'extension.kind === "action" ? startAction(extension) : startExtension(extension);' : 'startExtension(extension);'}`,
|
|
36
37
|
resolveDir: root,
|
|
37
38
|
loader: "ts",
|
|
38
39
|
},
|
|
@@ -69,7 +70,7 @@ async function buildAppProject(directory, applicationUrl) {
|
|
|
69
70
|
const normalized = new URL(origin);
|
|
70
71
|
if (normalized.origin !== origin.replace(/\/$/, ""))
|
|
71
72
|
throw new Error("App URL must be an HTTPS origin");
|
|
72
|
-
const manifest =
|
|
73
|
+
const manifest = plugins_3.PluginManifest.parse({
|
|
73
74
|
id: source.id,
|
|
74
75
|
name: source.name,
|
|
75
76
|
version: source.version,
|
|
@@ -96,7 +97,7 @@ async function buildAppProject(directory, applicationUrl) {
|
|
|
96
97
|
platform: "node",
|
|
97
98
|
preserveSymlinks: true,
|
|
98
99
|
format: "cjs",
|
|
99
|
-
target:
|
|
100
|
+
target: plugins_1.NODE_BUILD_TARGET,
|
|
100
101
|
outfile: (0, node_path_1.join)(stage, "server.cjs"),
|
|
101
102
|
logLevel: "silent",
|
|
102
103
|
metafile: true,
|
|
@@ -154,7 +155,7 @@ process.once("SIGINT",()=>host.close());process.once("SIGTERM",()=>host.close())
|
|
|
154
155
|
bundle: true,
|
|
155
156
|
platform: "node",
|
|
156
157
|
format: "cjs",
|
|
157
|
-
target:
|
|
158
|
+
target: plugins_1.NODE_BUILD_TARGET,
|
|
158
159
|
outfile: (0, node_path_1.join)(stage, "start.cjs"),
|
|
159
160
|
logLevel: "silent",
|
|
160
161
|
});
|
|
@@ -204,7 +205,7 @@ function verifyWebBuild(directory) {
|
|
|
204
205
|
for (const file of actual)
|
|
205
206
|
if (record.files[file] !== (0, artifact_1.fileHash)((0, node_path_1.join)(directory, file)))
|
|
206
207
|
throw new Error("Web build changed; rebuild first");
|
|
207
|
-
const manifest =
|
|
208
|
+
const manifest = plugins_3.PluginManifest.parse({ id: record.id, name: "web", version: "1.0.0", app: record.app });
|
|
208
209
|
return manifest.app;
|
|
209
210
|
}
|
|
210
211
|
function assertSourceInputs(root, inputs) {
|
package/dist/apps/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/apps/build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/apps/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflared.js","sourceRoot":"","sources":["../../src/apps/cloudflared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloudflared.js","sourceRoot":"","sources":["../../src/apps/cloudflared.ts"],"names":[],"mappings":"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"}
|
package/dist/apps/constants.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
export declare const PROJECT_ACCESS_ACTIONS: {
|
|
2
|
+
readonly read: readonly ["projects:read", "read:project"];
|
|
3
|
+
readonly write: readonly ["projects:read", "read:project", "write:project"];
|
|
4
|
+
};
|
|
1
5
|
export declare const APP_STUDIO_URL = "https://octonodes.com";
|
|
2
6
|
export declare const APP_SOURCE = "octonode.app.json";
|
|
3
|
-
export declare const APP_HELP = "Usage:\n octonodes app create <name> [--template extension|full] [--platform plain|vite|next]\n octonodes app targets\n octonodes app extension add <id> --target <target> [--cwd <directory>]\n octonodes app dev [directory] [--use-localhost | --tunnel-url <https-origin>] [--port <port>] [--no-open] [--workspace kind:id]\n octonodes app build [directory] [--app-url <https-origin>]\n octonodes app serve [directory] [--port <port>]\n octonodes app publish [directory] --workspace kind:id [--app-id <id> --revision <n>]\n octonodes app validate <artifact-directory>\n\nCreate defaults to a full Vite app (--platform vite). Use --platform plain for HTML or\n--platform next for Next.js. Use --template extension for an in-app panel and navbar launcher.\nExtension templates use octonode.app/v2; app targets lists the supported view/action/launcher targets.\nBuild compiles declared browser entries and generates\nrelease hashes in dist/apps/<id>. Existing projects are never overwritten. No login is needed.\napp dev opens a public Quick Tunnel automatically.\napp dev automatically downloads and caches its tunnel helper. No Cloudflare account or install is needed. --workspace opens an expiring Studio preview after login.\napp publish creates an immutable release; full apps must deploy their backend separately.\nInstallation requires Studio consent.\n";
|
|
7
|
+
export declare const APP_HELP = "Usage:\n octonodes app create <name> [--template extension|full] [--platform plain|vite|next] [--project-access read|write]\n octonodes app targets\n octonodes app extension add <id> --target <target> [--cwd <directory>]\n octonodes app dev [directory] [--use-localhost | --tunnel-url <https-origin>] [--port <port>] [--no-open] [--workspace kind:id]\n octonodes app build [directory] [--app-url <https-origin>]\n octonodes app serve [directory] [--port <port>]\n octonodes app publish [directory] --workspace kind:id [--app-id <id> --revision <n>]\n octonodes app validate <artifact-directory>\n\nCreate defaults to a full Vite app (--platform vite). Use --platform plain for HTML or\n--platform next for Next.js. Use --template extension for an in-app panel and navbar launcher.\n--project-access declares explicit project-file permissions; it does not start a sandbox.\nExtension templates use octonode.app/v2; app targets lists the supported view/action/launcher targets.\nBuild compiles declared browser entries and generates\nrelease hashes in dist/apps/<id>. Existing projects are never overwritten. No login is needed.\napp dev opens a public Quick Tunnel automatically.\napp dev automatically downloads and caches its tunnel helper. No Cloudflare account or install is needed. --workspace opens an expiring Studio preview after login.\napp publish creates an immutable release; full apps must deploy their backend separately.\nInstallation requires Studio consent.\n";
|
|
4
8
|
export declare const CLOUDFLARED_VERSION = "2026.9.3";
|
|
5
9
|
export declare const CLOUDFLARED_ASSETS: Record<string, import("./types").CloudflaredAsset>;
|
|
6
10
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/apps/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/apps/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB;;;CAGsB,CAAC;AAG1D,eAAO,MAAM,cAAc,0BAA0B,CAAC;AACtD,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAC9C,eAAO,MAAM,QAAQ,g9CAoBpB,CAAC;AAGF,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,SAAS,EAAE,gBAAgB,CAuBjF,CAAC"}
|
package/dist/apps/constants.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CLOUDFLARED_ASSETS = exports.CLOUDFLARED_VERSION = exports.APP_HELP = exports.APP_SOURCE = exports.APP_STUDIO_URL = void 0;
|
|
3
|
+
exports.CLOUDFLARED_ASSETS = exports.CLOUDFLARED_VERSION = exports.APP_HELP = exports.APP_SOURCE = exports.APP_STUDIO_URL = exports.PROJECT_ACCESS_ACTIONS = void 0;
|
|
4
|
+
exports.PROJECT_ACCESS_ACTIONS = {
|
|
5
|
+
read: ["projects:read", "read:project"],
|
|
6
|
+
write: ["projects:read", "read:project", "write:project"],
|
|
7
|
+
};
|
|
4
8
|
// App installation and preview routes are served by the Studio gateway.
|
|
5
9
|
exports.APP_STUDIO_URL = "https://octonodes.com";
|
|
6
10
|
exports.APP_SOURCE = "octonode.app.json";
|
|
7
11
|
exports.APP_HELP = `Usage:
|
|
8
|
-
octonodes app create <name> [--template extension|full] [--platform plain|vite|next]
|
|
12
|
+
octonodes app create <name> [--template extension|full] [--platform plain|vite|next] [--project-access read|write]
|
|
9
13
|
octonodes app targets
|
|
10
14
|
octonodes app extension add <id> --target <target> [--cwd <directory>]
|
|
11
15
|
octonodes app dev [directory] [--use-localhost | --tunnel-url <https-origin>] [--port <port>] [--no-open] [--workspace kind:id]
|
|
@@ -16,6 +20,7 @@ exports.APP_HELP = `Usage:
|
|
|
16
20
|
|
|
17
21
|
Create defaults to a full Vite app (--platform vite). Use --platform plain for HTML or
|
|
18
22
|
--platform next for Next.js. Use --template extension for an in-app panel and navbar launcher.
|
|
23
|
+
--project-access declares explicit project-file permissions; it does not start a sandbox.
|
|
19
24
|
Extension templates use octonode.app/v2; app targets lists the supported view/action/launcher targets.
|
|
20
25
|
Build compiles declared browser entries and generates
|
|
21
26
|
release hashes in dist/apps/<id>. Existing projects are never overwritten. No login is needed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/apps/constants.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/apps/constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,sBAAsB,GAAG;IACpC,IAAI,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC;IACvC,KAAK,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,eAAe,CAAC;CACF,CAAC;AAE1D,wEAAwE;AAC3D,QAAA,cAAc,GAAG,uBAAuB,CAAC;AACzC,QAAA,UAAU,GAAG,mBAAmB,CAAC;AACjC,QAAA,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;CAoBvB,CAAC;AAEF,2FAA2F;AAC9E,QAAA,mBAAmB,GAAG,UAAU,CAAC;AACjC,QAAA,kBAAkB,GAAuD;IACpF,YAAY,EAAE;QACZ,IAAI,EAAE,8BAA8B;QACpC,MAAM,EAAE,kEAAkE;QAC1E,YAAY,EAAE,kEAAkE;KACjF;IACD,cAAc,EAAE;QACd,IAAI,EAAE,8BAA8B;QACpC,MAAM,EAAE,kEAAkE;QAC1E,YAAY,EAAE,kEAAkE;KACjF;IACD,WAAW,EAAE;QACX,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,kEAAkE;KAC3E;IACD,aAAa,EAAE;QACb,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,kEAAkE;KAC3E;IACD,WAAW,EAAE;QACX,IAAI,EAAE,+BAA+B;QACrC,MAAM,EAAE,kEAAkE;KAC3E;CACF,CAAC"}
|
package/dist/apps/create.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function createApp(name: string, version: string, template?: string, platform?: string | undefined): string;
|
|
1
|
+
export declare function createApp(name: string, version: string, template?: string, platform?: string | undefined, projectAccess?: string): string;
|
|
2
2
|
export declare function addAppExtension(directory: string, id: string, target: string): {
|
|
3
3
|
id: string;
|
|
4
4
|
target: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/apps/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/apps/create.ts"],"names":[],"mappings":"AAuBA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAS,EAAE,QAAQ,GAAE,MAAM,GAAG,SAAoD,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAuOnL;AACD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;EA+B5E"}
|
package/dist/apps/create.js
CHANGED
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createApp = createApp;
|
|
4
4
|
exports.addAppExtension = addAppExtension;
|
|
5
|
+
const plugins_1 = require("@octonodes/sdk/plugins");
|
|
5
6
|
const node_fs_1 = require("node:fs");
|
|
6
7
|
const node_crypto_1 = require("node:crypto");
|
|
7
8
|
const node_path_1 = require("node:path");
|
|
8
9
|
const constants_1 = require("./constants");
|
|
9
10
|
const source_1 = require("./source");
|
|
10
11
|
const welcome_1 = require("./welcome");
|
|
11
|
-
const
|
|
12
|
+
const plugins_2 = require("@octonodes/sdk/plugins");
|
|
12
13
|
const json = (value) => JSON.stringify(value, null, 2) + "\n";
|
|
13
14
|
function extensionCode(target) {
|
|
14
|
-
if (
|
|
15
|
+
if (plugins_2.APP_ACTION_TARGETS.includes(target))
|
|
15
16
|
return `import {defineAction} from "@octonodes/ui-extensions";\nexport default defineAction(${JSON.stringify(target)}, async api => { await api.ui.openAssistant("Explain this selection and suggest improvements."); });\n`;
|
|
16
17
|
if (target === "node.view")
|
|
17
18
|
return `import {defineExtension,Section,useExtension} from "@octonodes/ui-extensions/react";\nexport default defineExtension("node.view",function Nodes(){const api=useExtension("node.view");return <>{api.context.nodes?.map(node=><Section key={node.id} title={node.id}>{node.label || node.id}</Section>)}</>;});\n`;
|
|
@@ -26,7 +27,7 @@ export default defineExtension(${JSON.stringify(target)}, function Notice() {
|
|
|
26
27
|
});
|
|
27
28
|
`;
|
|
28
29
|
}
|
|
29
|
-
function createApp(name, version, template = "full", platform = template === "full" ? "vite" : undefined) {
|
|
30
|
+
function createApp(name, version, template = "full", platform = template === "full" ? "vite" : undefined, projectAccess) {
|
|
30
31
|
if (!/^[a-z0-9][a-z0-9-]*$/.test(name))
|
|
31
32
|
throw new Error("App name must be lowercase alphanumeric/dash");
|
|
32
33
|
if (!["extension", "full"].includes(template))
|
|
@@ -35,6 +36,9 @@ function createApp(name, version, template = "full", platform = template === "fu
|
|
|
35
36
|
throw new Error("Choose --platform plain, vite or next");
|
|
36
37
|
if (platform && template !== "full")
|
|
37
38
|
throw new Error("--platform requires --template full");
|
|
39
|
+
if (projectAccess !== undefined && projectAccess !== "read" && projectAccess !== "write")
|
|
40
|
+
throw new Error("Choose --project-access read or write");
|
|
41
|
+
const requestedActions = projectAccess ? [...constants_1.PROJECT_ACCESS_ACTIONS[projectAccess]] : undefined;
|
|
38
42
|
const framework = platform === "vite" || platform === "next";
|
|
39
43
|
const appId = (0, node_crypto_1.randomUUID)();
|
|
40
44
|
const root = (0, node_path_1.resolve)(name);
|
|
@@ -47,9 +51,9 @@ function createApp(name, version, template = "full", platform = template === "fu
|
|
|
47
51
|
id: appId,
|
|
48
52
|
name,
|
|
49
53
|
version: "0.1.0",
|
|
50
|
-
...(template === "full" ? { web: { entry: "src/server.ts", ...(platform ? { platform } : {}) } } : {}),
|
|
54
|
+
...(template === "full" ? { web: { entry: "src/server.ts", ...(platform ? { platform } : {}), ...(requestedActions ? { requestedActions } : {}) } } : {}),
|
|
51
55
|
...(template === "extension"
|
|
52
|
-
? { settings: [{ id: "message", label: "Message", defaultValue: "Welcome to the workspace" }] }
|
|
56
|
+
? { settings: [{ id: "message", label: "Message", defaultValue: "Welcome to the workspace" }], ...(requestedActions ? { requestedActions } : {}) }
|
|
53
57
|
: {}),
|
|
54
58
|
extensions: template === "extension" ? [{ id: "assistant", target: "shell.panel", title: "Workspace assistant", entry: "src/extensions/assistant.tsx" }] : [],
|
|
55
59
|
...(template === "extension" ? { launchers: [{ id: "open-assistant", target: "shell.navbar.action", title: "Workspace assistant", icon: "terminal", opens: "assistant" }] } : {}),
|
|
@@ -60,23 +64,7 @@ function createApp(name, version, template = "full", platform = template === "fu
|
|
|
60
64
|
if (!framework)
|
|
61
65
|
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(root, "src/welcome.html"), (0, welcome_1.welcomeHtml)(name));
|
|
62
66
|
if (!framework)
|
|
63
|
-
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(root, "src/hosted.ts"),
|
|
64
|
-
const app = connectHostedApp();
|
|
65
|
-
const output = document.getElementById("message")!;
|
|
66
|
-
let token: string | undefined;
|
|
67
|
-
const update = () => {
|
|
68
|
-
const current = app.getSnapshot();
|
|
69
|
-
if (current.status === "expired") output.textContent = "Session expired. Reopen the app from Studio.";
|
|
70
|
-
if (current.status !== "ready" || current.token === token) return;
|
|
71
|
-
token = current.token;
|
|
72
|
-
app.fetch("/api/context").then(async response => {
|
|
73
|
-
if (!response.ok) throw Error("Could not load context (" + response.status + ").");
|
|
74
|
-
const data = await response.json(); output.textContent = "Connected to " + data.workspace.kind + ":" + data.workspace.id;
|
|
75
|
-
}).catch(error => { output.textContent = error.message; });
|
|
76
|
-
};
|
|
77
|
-
output.textContent = "Open this app from Studio to connect your workspace.";
|
|
78
|
-
app.subscribe(update); update();
|
|
79
|
-
`);
|
|
67
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(root, "src/hosted.ts"), (0, welcome_1.welcomeHosted)());
|
|
80
68
|
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(root, "src/server.ts"), `// Export a Fetch API handler. app dev and app serve adapt it to Node HTTP.
|
|
81
69
|
import { connectAppServer, AppRequestError } from "@octonodes/ui-extensions/app/server";
|
|
82
70
|
${framework ? "" : 'import { readFileSync } from "node:fs";\nimport { join } from "node:path";'}
|
|
@@ -122,7 +110,7 @@ export default async function handle(request: Request): Promise<Response> {
|
|
|
122
110
|
}
|
|
123
111
|
else {
|
|
124
112
|
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(root, "app"));
|
|
125
|
-
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(root, "app/page.tsx"), 'import App from "../src/web/App";\nexport default App
|
|
113
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(root, "app/page.tsx"), 'import App from "../src/web/App";\nexport default function Page() { return <App />; }\n');
|
|
126
114
|
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(root, "app/layout.tsx"), `import "../src/web/welcome.css";\nexport const metadata = { title: "${name} · Octonode" };\nexport default function Layout({ children }: { children: React.ReactNode }) { return <html lang="en"><body>{children}</body></html>; }\n`);
|
|
127
115
|
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(root, "next.config.mjs"), 'export default { output: "export" };\n');
|
|
128
116
|
}
|
|
@@ -132,7 +120,7 @@ export default async function handle(request: Request): Promise<Response> {
|
|
|
132
120
|
name,
|
|
133
121
|
private: true,
|
|
134
122
|
type: "module",
|
|
135
|
-
engines: { node:
|
|
123
|
+
engines: { node: plugins_1.NODE_ENGINE_RANGE },
|
|
136
124
|
installConfig: { hoistingLimits: "workspaces" },
|
|
137
125
|
scripts: {
|
|
138
126
|
dev: "octonodes app dev",
|
|
@@ -146,7 +134,7 @@ export default async function handle(request: Request): Promise<Response> {
|
|
|
146
134
|
typescript: "5.9.3",
|
|
147
135
|
"@types/react": "^19.0.0",
|
|
148
136
|
...(platform === "vite" ? { "@types/react-dom": "^19.0.0" } : {}),
|
|
149
|
-
"@types/node": "^
|
|
137
|
+
"@types/node": "^20.19.0",
|
|
150
138
|
...(platform === "vite" ? { vite: "8.3.1" } : {}),
|
|
151
139
|
...(platform === "next" ? { next: "16.3.6" } : {}),
|
|
152
140
|
},
|
|
@@ -186,11 +174,11 @@ An Octonode app created by \`octonodes app create\`. ${template === "full" ? "It
|
|
|
186
174
|
## Work locally
|
|
187
175
|
|
|
188
176
|
${template === "full" ? `Yarn workspaces use the generated \`installConfig.hoistingLimits: workspaces\`. Keep it
|
|
189
|
-
and run \`yarn install\` at the workspace root. Full
|
|
190
|
-
workspace session before showing content
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
177
|
+
and run \`yarn install\` at the workspace root. Full apps verify the
|
|
178
|
+
workspace session before showing content. The animated workspace overview is the default
|
|
179
|
+
landing page, with responsive light/dark styling and reduced-motion support. Full apps register Overview (\`/\`) and
|
|
180
|
+
Projects (\`/projects\`) routes in Studio’s sidebar. Sidebar registration is always enabled.
|
|
181
|
+
${framework ? "The top navbar is optional: render `<App showNavbar />` in `src/web/main.tsx` for Vite or from `app/page.tsx` for Next.js." : "The plain page lives in `src/welcome.html`, with session verification and route handling in `src/hosted.ts`."}` : `The extension starter has no hosted page or backend. Its declared navbar launcher
|
|
194
182
|
opens a sandboxed panel inside Octonode. Use \`octonodes app targets\` to discover
|
|
195
183
|
supported contextual contributions.`}
|
|
196
184
|
|
|
@@ -204,13 +192,14 @@ The CLI opens a live HTTPS preview and downloads a verified tunnel helper on fir
|
|
|
204
192
|
use. Development opens a public Quick Tunnel automatically. No Cloudflare account or separate installation is needed. Use
|
|
205
193
|
\`octonodes app dev --use-localhost\` for offline UI work.
|
|
206
194
|
Edit \`octonode.app.json\` and the generated source files. ${framework ? `The ${platform === "next" ? "Next.js" : "Vite"} welcome page lives in \`src/web/App.tsx\`. ` : ""}The descriptor owns
|
|
207
|
-
app identity, version, extension targets and entry files. Do not edit \`dist/\`.
|
|
195
|
+
app identity, version, extension targets and entry files. Optional \`--project-access read|write\` declares project-file scopes for selected projects; write requests both read and write access. These scopes require fresh Studio consent and a supporting platform release. The flag does not provision a sandbox or expose project files. Do not edit \`dist/\`.
|
|
208
196
|
${template === "extension" ? "Add a page with `octonodes app extension add overview --target app.page`." : "Add a contribution with `octonodes app extension add notice --target workspace.block`."}
|
|
209
197
|
|
|
210
198
|
## Preview and publish in Octonode
|
|
211
199
|
|
|
212
200
|
\`\`\`sh
|
|
213
201
|
octonodes login
|
|
202
|
+
octonodes whoami
|
|
214
203
|
octonodes app dev --workspace user:<your-user-id>
|
|
215
204
|
npm test
|
|
216
205
|
octonodes app validate dist/apps/${appId}
|
|
@@ -239,7 +228,7 @@ ${framework ? `The ${platform === "next" ? "Next.js" : "Vite"} page is a native
|
|
|
239
228
|
|
|
240
229
|
Publishing registers metadata but does not deploy the backend. After the first
|
|
241
230
|
publish returns the app ID, copy the entire \`dist/web/${appId}\` directory
|
|
242
|
-
to a Node
|
|
231
|
+
to a Node 20.19+, 22.12+, or newer supported host. Configure HTTPS, \`PORT\`, \`OCTONODE_APP_ID\` and
|
|
243
232
|
\`OCTONODE_API_URL\`, then run \`node start.cjs\` from that directory.
|
|
244
233
|
Check the public page and every hashed \`/extensions/<hash>.js\` asset
|
|
245
234
|
before inviting installation. Restore the previous web artifact before clean
|
|
@@ -266,7 +255,7 @@ function addAppExtension(directory, id, target) {
|
|
|
266
255
|
throw new Error("Extension ID must be lowercase alphanumeric/dash");
|
|
267
256
|
const root = (0, node_path_1.resolve)(directory);
|
|
268
257
|
const source = (0, source_1.readAppSource)(root);
|
|
269
|
-
if (!
|
|
258
|
+
if (!plugins_2.APP_VIEW_TARGETS.includes(target) && !plugins_2.APP_ACTION_TARGETS.includes(target))
|
|
270
259
|
throw new Error("Unsupported extension target");
|
|
271
260
|
if (source.apiVersion === "octonode.app/v1" && target !== "workspace.block" && target !== "app.page")
|
|
272
261
|
throw new Error("Upgrade the descriptor to octonode.app/v2 to add contextual targets");
|