@superglue/cli 1.1.219 → 1.1.221
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/.claude-plugin/plugin.json +1 -1
- package/dist/cli.js +156 -134
- package/dist/skills/superglue/SKILL.md +16 -16
- package/dist/skills/superglue/references/access-rules.md +5 -5
- package/dist/skills/superglue/references/graphql.md +1 -1
- package/dist/skills/superglue/references/http.md +1 -1
- package/dist/skills/superglue/references/mongodb.md +5 -5
- package/dist/skills/superglue/references/mssql.md +5 -5
- package/dist/skills/superglue/references/odbc.md +5 -5
- package/dist/skills/superglue/references/postgres.md +5 -5
- package/dist/skills/superglue/references/redis.md +5 -5
- package/dist/skills/superglue/references/sftp-smb.md +5 -5
- package/dist/skills/superglue/references/superglue-info.md +7 -11
- package/package.json +1 -1
- package/skills/superglue/SKILL.md +16 -16
- package/skills/superglue/references/access-rules.md +5 -5
- package/skills/superglue/references/graphql.md +1 -1
- package/skills/superglue/references/http.md +1 -1
- package/skills/superglue/references/mongodb.md +5 -5
- package/skills/superglue/references/mssql.md +5 -5
- package/skills/superglue/references/odbc.md +5 -5
- package/skills/superglue/references/postgres.md +5 -5
- package/skills/superglue/references/redis.md +5 -5
- package/skills/superglue/references/sftp-smb.md +5 -5
- package/skills/superglue/references/superglue-info.md +7 -11
|
@@ -229,12 +229,12 @@ sg project label create --project <projectId> --name "Blocked" --color "#ef4444"
|
|
|
229
229
|
sg project task edit --project <projectId> --id <taskId> --labels blocked
|
|
230
230
|
```
|
|
231
231
|
|
|
232
|
-
- `sg project task list` returns tasks in board order with each task's `position`. Add `--full` for descriptions
|
|
232
|
+
- `sg project task list` returns tasks in board order with each task's `position`. Add `--full` for descriptions.
|
|
233
233
|
- A new task, or a status change without `--position`, goes to the end of its column. Other edits keep the order.
|
|
234
234
|
- `sg project task edit` changes only the given fields. `--clear-due-date`, `--unassign`, and `--clear-labels` clear those fields.
|
|
235
235
|
- Labels belong to one project. `--labels` takes comma-separated label IDs from `sg project label list` and replaces the task's labels. `sg project task list --label <ids>` returns tasks with any of those labels.
|
|
236
236
|
- `sg project label create` derives the label ID from the name; without `--color` it picks the first unused palette color. `sg project label edit` renames or recolors a label and keeps its ID. `sg project label delete` removes the label from every task; the agent module cannot delete labels.
|
|
237
|
-
-
|
|
237
|
+
- Tasks have no attachments. Name the files a task needs in its description; files link to projects only.
|
|
238
238
|
- Tasks cannot be deleted from the CLI. Archived projects reject task writes.
|
|
239
239
|
|
|
240
240
|
---
|
|
@@ -385,16 +385,16 @@ Attach files with repeatable `--file key=path`. Reference in payloads with `file
|
|
|
385
385
|
|
|
386
386
|
**Request step fields** (HTTP, Postgres, MSSQL, Redis, MongoDB, FTP/SFTP, SMB) — see protocol-specific references for full details:
|
|
387
387
|
|
|
388
|
-
| Field | Type | Description
|
|
389
|
-
| ------------- | ------ |
|
|
390
|
-
| `type` | string | `"request"` (default, can be omitted)
|
|
391
|
-
| `systemId` | string | Optional.
|
|
392
|
-
| `url` | string | Full URL with `<<variable>>` placeholders. Required.
|
|
393
|
-
| `method` | string | HTTP method (HTTP only)
|
|
394
|
-
| `headers` | object | HTTP headers with credential placeholders (HTTP only)
|
|
395
|
-
| `queryParams` | object | URL query parameters (HTTP only)
|
|
396
|
-
| `body` | string | Request body / DB query / Redis command / file operation
|
|
397
|
-
| `pagination` | object | Auto-pagination config (HTTP only, see `sg skill http`)
|
|
388
|
+
| Field | Type | Description |
|
|
389
|
+
| ------------- | ------ | ------------------------------------------------------------------ |
|
|
390
|
+
| `type` | string | `"request"` (default, can be omitted) |
|
|
391
|
+
| `systemId` | string | Optional. Resolves connection secrets as `<<systemId_secretName>>` |
|
|
392
|
+
| `url` | string | Full URL with `<<variable>>` placeholders. Required. |
|
|
393
|
+
| `method` | string | HTTP method (HTTP only) |
|
|
394
|
+
| `headers` | object | HTTP headers with credential placeholders (HTTP only) |
|
|
395
|
+
| `queryParams` | object | URL query parameters (HTTP only) |
|
|
396
|
+
| `body` | string | Request body / DB query / Redis command / file operation |
|
|
397
|
+
| `pagination` | object | Auto-pagination config (HTTP only, see `sg skill http`) |
|
|
398
398
|
|
|
399
399
|
**Transform step fields:**
|
|
400
400
|
|
|
@@ -423,8 +423,8 @@ All step config fields (url, headers, body, queryParams) support `<<expression>>
|
|
|
423
423
|
<<userId>> payload inputs
|
|
424
424
|
<<currentItem>> whole current loop item
|
|
425
425
|
<<page>> <<offset>> <<cursor>> <<limit>> <<pageSize>> pagination variables
|
|
426
|
-
<<systemId_api_key>>
|
|
427
|
-
<<systemId_url>>
|
|
426
|
+
<<systemId_api_key>> connection secrets (namespaced: systemId_secretName)
|
|
427
|
+
<<systemId_url>> connection base URLs (namespaced: systemId_url)
|
|
428
428
|
<<sg_auth_email>> email of the user triggering this run (in scheduled runs: the schedule creator)
|
|
429
429
|
<<sg_auth_jwt>> short-lived signed JWT proving the identity of the user triggering this run; receivers verify it against superglue's outbound JWKS endpoint (/api/auth/outbound-jwks on the web app origin)
|
|
430
430
|
```
|
|
@@ -485,7 +485,7 @@ sourceData = {
|
|
|
485
485
|
- State gives at-least-once execution with progress tracking, never exactly-once: crashes, concurrent-run conflicts, and state resets all cause re-processing, which re-executes side effects. Steps that write to external systems MUST be replay-safe — upsert by a stable external id or pass an idempotency key — or duplicates will land in the target system.
|
|
486
486
|
- Keep set-valued keys bounded (e.g. keep only the most recent ~1,000 ids): an unbounded set eventually exceeds the 64KB value limit, which rejects the tool's entire state write on every run.
|
|
487
487
|
- Never copy credential values into state — state is stored unencrypted and readable by anyone with read access to the tool.
|
|
488
|
-
- Inspect current state via `sg tool state get <toolId>` (values matching known
|
|
488
|
+
- Inspect current state via `sg tool state get <toolId>` (values matching known connection secrets are masked); reset it via `sg tool state reset <toolId>`. A reset wins over in-flight runs: their updates to pre-reset keys are discarded as conflicts; only keys they newly add are kept.
|
|
489
489
|
- Set state deliberately via `sg tool state set <toolId> --state '<json>'` (or `--state-file`) — a full replace, subject to the same key and size limits. To test warm-state behavior without touching real state, pass `--state-fixture '<json>'` (or `--state-fixture-file`) to `sg tool run`: it seeds `sourceData.persistedState` for that run and the run never saves state changes. Side effects still execute, including `tool:` chain webhooks — a chained tool runs for real against its own real state.
|
|
490
490
|
|
|
491
491
|
### Naming Rules — Avoiding Key Collisions
|
|
@@ -495,7 +495,7 @@ Everything in `sourceData` shares ONE flat namespace. Saving a tool rejects payl
|
|
|
495
495
|
- `__files__`, `currentItem`, `persistedState`, `sg_auth_email`, `sg_auth_jwt` — injected by the runtime
|
|
496
496
|
- `page`, `offset`, `cursor`, `limit`, `pageSize` — rejected only when the tool has a paginated step, because they would shadow the live pagination counters; on non-paginated tools they are allowed but discouraged (a later edit that adds pagination will force a rename)
|
|
497
497
|
- the tool's own step ids — the step result overwrites a same-named payload key
|
|
498
|
-
- anything starting with `<systemId>_` for a system the tool uses — the entire prefix is reserved for namespaced
|
|
498
|
+
- anything starting with `<systemId>_` for a system the tool uses — the entire prefix is reserved for namespaced secrets (`<systemId>_<secretName>`, `<systemId>_url`), even names that don't match an existing secret, because secrets added to a connection later would silently shadow the input
|
|
499
499
|
|
|
500
500
|
Safe naming: payload inputs get specific, domain-flavored names (`customerId`, `reportMonth`, `maxResults` — prefer `maxResults` over `limit` even on non-paginated tools, and never prefix an input with a referenced system's id); step ids are verb-prefixed camelCase (`fetchUsers`) and distinct from every payload key. If the user asks for an input named like a reserved key, use a safe alternative and explain why.
|
|
501
501
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Access Rules (RBAC)
|
|
2
2
|
|
|
3
|
-
On superglue, roles define active resource grants for tools, credentials, playbooks,
|
|
3
|
+
On superglue, roles define active resource grants for tools, credentials, playbooks, files, and projects. Files include uploads and agent-written HTML documents and spreadsheets. Systems are not a resource: a system id is a plain string on connections and tool steps. Users can have multiple roles. Roles and access rules are only available on enterprise organizations.
|
|
4
4
|
|
|
5
5
|
## Data Model
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
8
|
interface ResourceGrant {
|
|
9
9
|
roleId: string;
|
|
10
|
-
resourceRef: "<kind>:<encodedId>" | "<kind>:*"; // kind: tool | credential | playbook |
|
|
10
|
+
resourceRef: "<kind>:<encodedId>" | "<kind>:*"; // kind: tool | credential | playbook | file | project
|
|
11
11
|
permissions: Array<"viewer" | "editor">;
|
|
12
12
|
source: "access_rule" | "ownership" | "share" | "project"; // project: computed from project access, never stored
|
|
13
13
|
grantedByUserId?: string;
|
|
@@ -83,13 +83,13 @@ Users can also have additional custom roles on top of their base role. Custom ro
|
|
|
83
83
|
Personal roles are per-user containers for ownership and user-targeted share grants.
|
|
84
84
|
|
|
85
85
|
- Each user can have at most one personal role.
|
|
86
|
-
- Ownership grants are added automatically when a user creates a tool, connection, playbook,
|
|
86
|
+
- Ownership grants are added automatically when a user creates a tool, connection, playbook, file, or project.
|
|
87
87
|
- Personal role grants are unioned with the user's other roles.
|
|
88
88
|
- Ordinary role edits preserve personal roles and their ownership/share grants.
|
|
89
89
|
|
|
90
90
|
## Sharing Semantics
|
|
91
91
|
|
|
92
|
-
Sharing supports saved tools, connections, projects, playbooks,
|
|
92
|
+
Sharing supports saved tools, connections, projects, playbooks, and files.
|
|
93
93
|
|
|
94
94
|
- Targets are organization users or roles. The admin role and personal roles cannot be role targets.
|
|
95
95
|
- User-targeted shares live on personal roles; role-targeted shares live on the selected role.
|
|
@@ -99,7 +99,7 @@ Sharing supports saved tools, connections, projects, playbooks, artifacts, and f
|
|
|
99
99
|
- Recipients can remove their own direct share, including connection shares, without editor access.
|
|
100
100
|
- Sharing a tool shares only the tool. The recipient still needs a connection for every system id it references.
|
|
101
101
|
- Sharing playbooks does not cascade to their tools or connections.
|
|
102
|
-
- Access to a project gives the same access (viewer or editor) to every
|
|
102
|
+
- Access to a project gives the same access (viewer or editor) to every file and tool linked to it. Removing the file or tool from the project, removing the project access, or archiving the project removes that access. Anyone with access to a project, including viewers, can link a file or tool they can share. Project editors and people who can share a file or tool can remove it from the project. Playbooks and connections are never shared through projects.
|
|
103
103
|
|
|
104
104
|
## Auto-Grant On Resource Creation
|
|
105
105
|
|
|
@@ -26,7 +26,7 @@ GraphQL APIs use HTTP POST under the hood. This skill covers the GraphQL-specifi
|
|
|
26
26
|
| `method` | yes | Always `POST` |
|
|
27
27
|
| `headers` | yes | Must include `Content-Type: application/json` and auth |
|
|
28
28
|
| `body` | yes | JSON string with `query` and optional `variables` |
|
|
29
|
-
| `systemId` | no |
|
|
29
|
+
| `systemId` | no | Resolves connection secrets and URL |
|
|
30
30
|
|
|
31
31
|
### Body Format
|
|
32
32
|
|
|
@@ -27,7 +27,7 @@ All fields support `<<variable>>` and `<<(sourceData) => ...>>` expressions.
|
|
|
27
27
|
| `queryParams` | no | Key-value pairs appended to URL |
|
|
28
28
|
| `body` | no | Stripped for GET/HEAD/DELETE/OPTIONS |
|
|
29
29
|
| `pagination` | no | See Pagination section |
|
|
30
|
-
| `systemId` | no |
|
|
30
|
+
| `systemId` | no | Resolves connection secrets and URL. Omit for public APIs |
|
|
31
31
|
|
|
32
32
|
For APIs that require the same query key multiple times, use an array value:
|
|
33
33
|
`{ metadataHeaders: ["From", "Subject"] }` -> `?metadataHeaders=From&metadataHeaders=Subject`.
|
|
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
|
|
|
19
19
|
|
|
20
20
|
### Fields
|
|
21
21
|
|
|
22
|
-
| Field | Required | Notes
|
|
23
|
-
| ---------- | -------- |
|
|
24
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
25
|
-
| `body` | yes | JSON: single operation object or array of operations
|
|
26
|
-
| `systemId` | no |
|
|
22
|
+
| Field | Required | Notes |
|
|
23
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
24
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
25
|
+
| `body` | yes | JSON: single operation object or array of operations |
|
|
26
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
27
27
|
|
|
28
28
|
### URL Format
|
|
29
29
|
|
|
@@ -21,11 +21,11 @@ Configure the connection URL based on the selected connection's secrets — use
|
|
|
21
21
|
|
|
22
22
|
### Fields
|
|
23
23
|
|
|
24
|
-
| Field | Required | Notes
|
|
25
|
-
| ---------- | -------- |
|
|
26
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
27
|
-
| `body` | yes | JSON string with `query` and optional `params`
|
|
28
|
-
| `systemId` | no |
|
|
24
|
+
| Field | Required | Notes |
|
|
25
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
26
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
27
|
+
| `body` | yes | JSON string with `query` and optional `params` |
|
|
28
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
29
29
|
|
|
30
30
|
### URL Format
|
|
31
31
|
|
|
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
|
|
|
19
19
|
|
|
20
20
|
### Fields
|
|
21
21
|
|
|
22
|
-
| Field | Required | Notes
|
|
23
|
-
| ---------- | -------- |
|
|
24
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
25
|
-
| `body` | yes | JSON string with `query` and optional `params`
|
|
26
|
-
| `systemId` | no |
|
|
22
|
+
| Field | Required | Notes |
|
|
23
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
24
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
25
|
+
| `body` | yes | JSON string with `query` and optional `params` |
|
|
26
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
27
27
|
|
|
28
28
|
### URL Format
|
|
29
29
|
|
|
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
|
|
|
19
19
|
|
|
20
20
|
### Fields
|
|
21
21
|
|
|
22
|
-
| Field | Required | Notes
|
|
23
|
-
| ---------- | -------- |
|
|
24
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
25
|
-
| `body` | yes | JSON string with `query` and optional `params`
|
|
26
|
-
| `systemId` | no |
|
|
22
|
+
| Field | Required | Notes |
|
|
23
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
24
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
25
|
+
| `body` | yes | JSON string with `query` and optional `params` |
|
|
26
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
27
27
|
|
|
28
28
|
### URL Format
|
|
29
29
|
|
|
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
|
|
|
19
19
|
|
|
20
20
|
### Fields
|
|
21
21
|
|
|
22
|
-
| Field | Required | Notes
|
|
23
|
-
| ---------- | -------- |
|
|
24
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
25
|
-
| `body` | yes | JSON: single command object or array for pipeline
|
|
26
|
-
| `systemId` | no |
|
|
22
|
+
| Field | Required | Notes |
|
|
23
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
24
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
25
|
+
| `body` | yes | JSON: single command object or array for pipeline |
|
|
26
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
27
27
|
|
|
28
28
|
### URL Format
|
|
29
29
|
|
|
@@ -21,11 +21,11 @@ Configure the connection URL based on the selected connection's secrets — use
|
|
|
21
21
|
|
|
22
22
|
### Fields
|
|
23
23
|
|
|
24
|
-
| Field | Required | Notes
|
|
25
|
-
| ---------- | -------- |
|
|
26
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
27
|
-
| `body` | yes | JSON: single operation object or array for batch
|
|
28
|
-
| `systemId` | no |
|
|
24
|
+
| Field | Required | Notes |
|
|
25
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
26
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
27
|
+
| `body` | yes | JSON: single operation object or array for batch |
|
|
28
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
29
29
|
|
|
30
30
|
### URL Formats
|
|
31
31
|
|
|
@@ -76,16 +76,12 @@ If a customer's system requires IP allowlisting for firewall rules, security gro
|
|
|
76
76
|
|
|
77
77
|
Use this section as the source of truth for high-level web app navigation. Do not invent UI locations that are not listed here.
|
|
78
78
|
|
|
79
|
-
Brain contains context-source setup,
|
|
79
|
+
Brain contains context-source setup, project folders, playbooks, and files. Files include uploads and the artifacts and spreadsheets that agents write; a file can belong to several projects. Capabilities contains tools, connections, MCP servers, and schedules; tools can be linked to projects, the others configure execution. A system is only the system ID that groups connections and tool steps. Projects are managed separately; a project links brain files and tools, and people with project access get the same access to them; playbooks are org-wide.
|
|
80
80
|
|
|
81
81
|
The persistent left sidebar contains these top-level items:
|
|
82
82
|
|
|
83
|
-
- The project switcher and session list — always visible at the top. The
|
|
84
|
-
- **Brain** —
|
|
85
|
-
- **Setup** (`/brain`) — context-source connections that use only the current user's personal credentials.
|
|
86
|
-
- **Playbooks** (`/playbooks`, detail at `/playbooks/{playbookId}`) — reusable guidance for recurring work. Built-in and custom playbooks share one grid; built-ins are labeled and can be duplicated.
|
|
87
|
-
- **Artifacts** (`/artifacts`, detail at `/artifacts/{artifactId}`) — interactive outputs.
|
|
88
|
-
- **Files** (`/files`) — uploaded source material.
|
|
83
|
+
- The project switcher and session list — always visible at the top. The switcher selects one project or **All projects**, which scopes the session list and new sessions; `/` starts a session and `/agents/{sessionId}` opens a saved one. New projects are planned with the agent.
|
|
84
|
+
- **Brain** (`/brain`) — a file drive: the managed **Documentation** (system documentation and scraped pages) and **Playbooks** folders, one folder per project (`/brain/projects/{projectId}`), and files in no project. Files open at `/brain/files/{fileId}` and playbooks at `/brain/playbooks/{playbookId}`. Users upload files and drag them onto project folders to link them. **Setup** (`/brain/setup`) connects context sources with the user's own credentials.
|
|
89
85
|
- **Capabilities** — expandable group for connected and executable resources:
|
|
90
86
|
- **Tools** (`/tools`, detail at `/tools/{toolId}`) — saved tools; opens the tool playground for editing, testing, and running.
|
|
91
87
|
- **Connections** (`/connections`, detail at `/connections/{connectionId}`) — connections to external services, grouped by system id, with secret status per connection; yours and the ones shared with you. A system ID is a namespace derived from existing connections; no system record is created. API keys are not managed here.
|
|
@@ -99,11 +95,11 @@ The persistent left sidebar contains these top-level items:
|
|
|
99
95
|
- **API Keys** (`/api-keys`) — API key management.
|
|
100
96
|
- **Settings** (`/settings`) — appearance and agent memory notes for every user; organization settings for admins.
|
|
101
97
|
|
|
102
|
-
The right panel's **Project plan** tab shows the selected project's tasks; with a project selected, `/projects` opens it. **New project** in the project switcher starts agent-assisted project planning; projects are created only through the agent.
|
|
98
|
+
The right panel's **Project plan** tab shows the selected project's tasks; with a project selected, `/projects` opens it. **New project** in the project switcher starts agent-assisted project planning; projects are created only through the agent. A project's page is its Brain folder (`/brain/projects/{projectId}`), with **Files** (the default) and **Tasks** tabs. **Tasks** filters by label and assignee; each project has its own task labels. Projects support sharing, archive, and deletion; people with project access get the same access to its linked files.
|
|
103
99
|
|
|
104
100
|
Below the navigation, the sidebar shows the current organization menu. Opening it shows the signed-in user's name and email, lists the user's organizations and pending invitations, and contains **Sign Out**. Selecting an organization switches to it.
|
|
105
101
|
|
|
106
|
-
|
|
102
|
+
While a brain setup step is open, a banner at the top of **Brain** links to **Brain > Setup** (`/brain/setup`), and the close button hides it for 7 days in that browser.
|
|
107
103
|
|
|
108
104
|
When cloud billing is enabled, Trial organizations see **Upgrade Plan** in the sidebar, which opens a 15-minute call booking page. The app shows no pricing. For Pro and Team organizations, admins see **Manage Plan** in the organization menu, which opens the Stripe portal. Enterprise organizations see neither. Do not quote prices. For pricing questions, point users to **Upgrade Plan** to book a call. There is no separate Billing page.
|
|
109
105
|
|
|
@@ -113,7 +109,7 @@ When cloud billing is enabled, Trial organizations see **Upgrade Plan** in the s
|
|
|
113
109
|
|
|
114
110
|
- **Appearance** — light, dark, or system theme.
|
|
115
111
|
- **Organization** — organization name.
|
|
116
|
-
- **Design system** (`/settings/design-system`) — the brand every
|
|
112
|
+
- **Design system** (`/settings/design-system`) — the brand every document follows: colors, fonts, logos, guidelines, HTML, Word, and PowerPoint templates, reference documents, and an import from the company website.
|
|
117
113
|
- **Run settings** — run preferences: draft/single-step run visibility, run result storage, member run visibility, and delete-all-runs.
|
|
118
114
|
- **Notifications** — run-alert channels for Slack and email (on failure, success, completion, or daily/weekly summaries). Slack setup opens `/settings/notifications/slack`; email setup opens `/settings/notifications/email`.
|
|
119
115
|
- **Agent memory** (`/settings#settings-memory`) — every user adds, edits, and deletes their personal and organization memory notes; admins also turn agent memory on or off.
|
|
@@ -128,7 +124,7 @@ When cloud billing is enabled, Trial organizations see **Upgrade Plan** in the s
|
|
|
128
124
|
1. **Validate** tool structure (id, steps array, URLs on request steps)
|
|
129
125
|
2. **For each step in order:**
|
|
130
126
|
a. Build aggregated data: `{ ...originalPayload, ...previousStepResults }`
|
|
131
|
-
b. Resolve
|
|
127
|
+
b. Resolve connection secrets (refresh OAuth if needed), namespace as `systemId_secretName`
|
|
132
128
|
c. Run `dataSelector` → object means single execution, array means loop
|
|
133
129
|
d. For each item: merge `currentItem` into input and execute
|
|
134
130
|
e. Wrap result: `{ currentItem, data, success }`
|
package/package.json
CHANGED
|
@@ -229,12 +229,12 @@ sg project label create --project <projectId> --name "Blocked" --color "#ef4444"
|
|
|
229
229
|
sg project task edit --project <projectId> --id <taskId> --labels blocked
|
|
230
230
|
```
|
|
231
231
|
|
|
232
|
-
- `sg project task list` returns tasks in board order with each task's `position`. Add `--full` for descriptions
|
|
232
|
+
- `sg project task list` returns tasks in board order with each task's `position`. Add `--full` for descriptions.
|
|
233
233
|
- A new task, or a status change without `--position`, goes to the end of its column. Other edits keep the order.
|
|
234
234
|
- `sg project task edit` changes only the given fields. `--clear-due-date`, `--unassign`, and `--clear-labels` clear those fields.
|
|
235
235
|
- Labels belong to one project. `--labels` takes comma-separated label IDs from `sg project label list` and replaces the task's labels. `sg project task list --label <ids>` returns tasks with any of those labels.
|
|
236
236
|
- `sg project label create` derives the label ID from the name; without `--color` it picks the first unused palette color. `sg project label edit` renames or recolors a label and keeps its ID. `sg project label delete` removes the label from every task; the agent module cannot delete labels.
|
|
237
|
-
-
|
|
237
|
+
- Tasks have no attachments. Name the files a task needs in its description; files link to projects only.
|
|
238
238
|
- Tasks cannot be deleted from the CLI. Archived projects reject task writes.
|
|
239
239
|
|
|
240
240
|
---
|
|
@@ -385,16 +385,16 @@ Attach files with repeatable `--file key=path`. Reference in payloads with `file
|
|
|
385
385
|
|
|
386
386
|
**Request step fields** (HTTP, Postgres, MSSQL, Redis, MongoDB, FTP/SFTP, SMB) — see protocol-specific references for full details:
|
|
387
387
|
|
|
388
|
-
| Field | Type | Description
|
|
389
|
-
| ------------- | ------ |
|
|
390
|
-
| `type` | string | `"request"` (default, can be omitted)
|
|
391
|
-
| `systemId` | string | Optional.
|
|
392
|
-
| `url` | string | Full URL with `<<variable>>` placeholders. Required.
|
|
393
|
-
| `method` | string | HTTP method (HTTP only)
|
|
394
|
-
| `headers` | object | HTTP headers with credential placeholders (HTTP only)
|
|
395
|
-
| `queryParams` | object | URL query parameters (HTTP only)
|
|
396
|
-
| `body` | string | Request body / DB query / Redis command / file operation
|
|
397
|
-
| `pagination` | object | Auto-pagination config (HTTP only, see `sg skill http`)
|
|
388
|
+
| Field | Type | Description |
|
|
389
|
+
| ------------- | ------ | ------------------------------------------------------------------ |
|
|
390
|
+
| `type` | string | `"request"` (default, can be omitted) |
|
|
391
|
+
| `systemId` | string | Optional. Resolves connection secrets as `<<systemId_secretName>>` |
|
|
392
|
+
| `url` | string | Full URL with `<<variable>>` placeholders. Required. |
|
|
393
|
+
| `method` | string | HTTP method (HTTP only) |
|
|
394
|
+
| `headers` | object | HTTP headers with credential placeholders (HTTP only) |
|
|
395
|
+
| `queryParams` | object | URL query parameters (HTTP only) |
|
|
396
|
+
| `body` | string | Request body / DB query / Redis command / file operation |
|
|
397
|
+
| `pagination` | object | Auto-pagination config (HTTP only, see `sg skill http`) |
|
|
398
398
|
|
|
399
399
|
**Transform step fields:**
|
|
400
400
|
|
|
@@ -423,8 +423,8 @@ All step config fields (url, headers, body, queryParams) support `<<expression>>
|
|
|
423
423
|
<<userId>> payload inputs
|
|
424
424
|
<<currentItem>> whole current loop item
|
|
425
425
|
<<page>> <<offset>> <<cursor>> <<limit>> <<pageSize>> pagination variables
|
|
426
|
-
<<systemId_api_key>>
|
|
427
|
-
<<systemId_url>>
|
|
426
|
+
<<systemId_api_key>> connection secrets (namespaced: systemId_secretName)
|
|
427
|
+
<<systemId_url>> connection base URLs (namespaced: systemId_url)
|
|
428
428
|
<<sg_auth_email>> email of the user triggering this run (in scheduled runs: the schedule creator)
|
|
429
429
|
<<sg_auth_jwt>> short-lived signed JWT proving the identity of the user triggering this run; receivers verify it against superglue's outbound JWKS endpoint (/api/auth/outbound-jwks on the web app origin)
|
|
430
430
|
```
|
|
@@ -485,7 +485,7 @@ sourceData = {
|
|
|
485
485
|
- State gives at-least-once execution with progress tracking, never exactly-once: crashes, concurrent-run conflicts, and state resets all cause re-processing, which re-executes side effects. Steps that write to external systems MUST be replay-safe — upsert by a stable external id or pass an idempotency key — or duplicates will land in the target system.
|
|
486
486
|
- Keep set-valued keys bounded (e.g. keep only the most recent ~1,000 ids): an unbounded set eventually exceeds the 64KB value limit, which rejects the tool's entire state write on every run.
|
|
487
487
|
- Never copy credential values into state — state is stored unencrypted and readable by anyone with read access to the tool.
|
|
488
|
-
- Inspect current state via `sg tool state get <toolId>` (values matching known
|
|
488
|
+
- Inspect current state via `sg tool state get <toolId>` (values matching known connection secrets are masked); reset it via `sg tool state reset <toolId>`. A reset wins over in-flight runs: their updates to pre-reset keys are discarded as conflicts; only keys they newly add are kept.
|
|
489
489
|
- Set state deliberately via `sg tool state set <toolId> --state '<json>'` (or `--state-file`) — a full replace, subject to the same key and size limits. To test warm-state behavior without touching real state, pass `--state-fixture '<json>'` (or `--state-fixture-file`) to `sg tool run`: it seeds `sourceData.persistedState` for that run and the run never saves state changes. Side effects still execute, including `tool:` chain webhooks — a chained tool runs for real against its own real state.
|
|
490
490
|
|
|
491
491
|
### Naming Rules — Avoiding Key Collisions
|
|
@@ -495,7 +495,7 @@ Everything in `sourceData` shares ONE flat namespace. Saving a tool rejects payl
|
|
|
495
495
|
- `__files__`, `currentItem`, `persistedState`, `sg_auth_email`, `sg_auth_jwt` — injected by the runtime
|
|
496
496
|
- `page`, `offset`, `cursor`, `limit`, `pageSize` — rejected only when the tool has a paginated step, because they would shadow the live pagination counters; on non-paginated tools they are allowed but discouraged (a later edit that adds pagination will force a rename)
|
|
497
497
|
- the tool's own step ids — the step result overwrites a same-named payload key
|
|
498
|
-
- anything starting with `<systemId>_` for a system the tool uses — the entire prefix is reserved for namespaced
|
|
498
|
+
- anything starting with `<systemId>_` for a system the tool uses — the entire prefix is reserved for namespaced secrets (`<systemId>_<secretName>`, `<systemId>_url`), even names that don't match an existing secret, because secrets added to a connection later would silently shadow the input
|
|
499
499
|
|
|
500
500
|
Safe naming: payload inputs get specific, domain-flavored names (`customerId`, `reportMonth`, `maxResults` — prefer `maxResults` over `limit` even on non-paginated tools, and never prefix an input with a referenced system's id); step ids are verb-prefixed camelCase (`fetchUsers`) and distinct from every payload key. If the user asks for an input named like a reserved key, use a safe alternative and explain why.
|
|
501
501
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Access Rules (RBAC)
|
|
2
2
|
|
|
3
|
-
On superglue, roles define active resource grants for tools, credentials, playbooks,
|
|
3
|
+
On superglue, roles define active resource grants for tools, credentials, playbooks, files, and projects. Files include uploads and agent-written HTML documents and spreadsheets. Systems are not a resource: a system id is a plain string on connections and tool steps. Users can have multiple roles. Roles and access rules are only available on enterprise organizations.
|
|
4
4
|
|
|
5
5
|
## Data Model
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
8
|
interface ResourceGrant {
|
|
9
9
|
roleId: string;
|
|
10
|
-
resourceRef: "<kind>:<encodedId>" | "<kind>:*"; // kind: tool | credential | playbook |
|
|
10
|
+
resourceRef: "<kind>:<encodedId>" | "<kind>:*"; // kind: tool | credential | playbook | file | project
|
|
11
11
|
permissions: Array<"viewer" | "editor">;
|
|
12
12
|
source: "access_rule" | "ownership" | "share" | "project"; // project: computed from project access, never stored
|
|
13
13
|
grantedByUserId?: string;
|
|
@@ -83,13 +83,13 @@ Users can also have additional custom roles on top of their base role. Custom ro
|
|
|
83
83
|
Personal roles are per-user containers for ownership and user-targeted share grants.
|
|
84
84
|
|
|
85
85
|
- Each user can have at most one personal role.
|
|
86
|
-
- Ownership grants are added automatically when a user creates a tool, connection, playbook,
|
|
86
|
+
- Ownership grants are added automatically when a user creates a tool, connection, playbook, file, or project.
|
|
87
87
|
- Personal role grants are unioned with the user's other roles.
|
|
88
88
|
- Ordinary role edits preserve personal roles and their ownership/share grants.
|
|
89
89
|
|
|
90
90
|
## Sharing Semantics
|
|
91
91
|
|
|
92
|
-
Sharing supports saved tools, connections, projects, playbooks,
|
|
92
|
+
Sharing supports saved tools, connections, projects, playbooks, and files.
|
|
93
93
|
|
|
94
94
|
- Targets are organization users or roles. The admin role and personal roles cannot be role targets.
|
|
95
95
|
- User-targeted shares live on personal roles; role-targeted shares live on the selected role.
|
|
@@ -99,7 +99,7 @@ Sharing supports saved tools, connections, projects, playbooks, artifacts, and f
|
|
|
99
99
|
- Recipients can remove their own direct share, including connection shares, without editor access.
|
|
100
100
|
- Sharing a tool shares only the tool. The recipient still needs a connection for every system id it references.
|
|
101
101
|
- Sharing playbooks does not cascade to their tools or connections.
|
|
102
|
-
- Access to a project gives the same access (viewer or editor) to every
|
|
102
|
+
- Access to a project gives the same access (viewer or editor) to every file and tool linked to it. Removing the file or tool from the project, removing the project access, or archiving the project removes that access. Anyone with access to a project, including viewers, can link a file or tool they can share. Project editors and people who can share a file or tool can remove it from the project. Playbooks and connections are never shared through projects.
|
|
103
103
|
|
|
104
104
|
## Auto-Grant On Resource Creation
|
|
105
105
|
|
|
@@ -26,7 +26,7 @@ GraphQL APIs use HTTP POST under the hood. This skill covers the GraphQL-specifi
|
|
|
26
26
|
| `method` | yes | Always `POST` |
|
|
27
27
|
| `headers` | yes | Must include `Content-Type: application/json` and auth |
|
|
28
28
|
| `body` | yes | JSON string with `query` and optional `variables` |
|
|
29
|
-
| `systemId` | no |
|
|
29
|
+
| `systemId` | no | Resolves connection secrets and URL |
|
|
30
30
|
|
|
31
31
|
### Body Format
|
|
32
32
|
|
|
@@ -27,7 +27,7 @@ All fields support `<<variable>>` and `<<(sourceData) => ...>>` expressions.
|
|
|
27
27
|
| `queryParams` | no | Key-value pairs appended to URL |
|
|
28
28
|
| `body` | no | Stripped for GET/HEAD/DELETE/OPTIONS |
|
|
29
29
|
| `pagination` | no | See Pagination section |
|
|
30
|
-
| `systemId` | no |
|
|
30
|
+
| `systemId` | no | Resolves connection secrets and URL. Omit for public APIs |
|
|
31
31
|
|
|
32
32
|
For APIs that require the same query key multiple times, use an array value:
|
|
33
33
|
`{ metadataHeaders: ["From", "Subject"] }` -> `?metadataHeaders=From&metadataHeaders=Subject`.
|
|
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
|
|
|
19
19
|
|
|
20
20
|
### Fields
|
|
21
21
|
|
|
22
|
-
| Field | Required | Notes
|
|
23
|
-
| ---------- | -------- |
|
|
24
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
25
|
-
| `body` | yes | JSON: single operation object or array of operations
|
|
26
|
-
| `systemId` | no |
|
|
22
|
+
| Field | Required | Notes |
|
|
23
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
24
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
25
|
+
| `body` | yes | JSON: single operation object or array of operations |
|
|
26
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
27
27
|
|
|
28
28
|
### URL Format
|
|
29
29
|
|
|
@@ -21,11 +21,11 @@ Configure the connection URL based on the selected connection's secrets — use
|
|
|
21
21
|
|
|
22
22
|
### Fields
|
|
23
23
|
|
|
24
|
-
| Field | Required | Notes
|
|
25
|
-
| ---------- | -------- |
|
|
26
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
27
|
-
| `body` | yes | JSON string with `query` and optional `params`
|
|
28
|
-
| `systemId` | no |
|
|
24
|
+
| Field | Required | Notes |
|
|
25
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
26
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
27
|
+
| `body` | yes | JSON string with `query` and optional `params` |
|
|
28
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
29
29
|
|
|
30
30
|
### URL Format
|
|
31
31
|
|
|
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
|
|
|
19
19
|
|
|
20
20
|
### Fields
|
|
21
21
|
|
|
22
|
-
| Field | Required | Notes
|
|
23
|
-
| ---------- | -------- |
|
|
24
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
25
|
-
| `body` | yes | JSON string with `query` and optional `params`
|
|
26
|
-
| `systemId` | no |
|
|
22
|
+
| Field | Required | Notes |
|
|
23
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
24
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
25
|
+
| `body` | yes | JSON string with `query` and optional `params` |
|
|
26
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
27
27
|
|
|
28
28
|
### URL Format
|
|
29
29
|
|
|
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
|
|
|
19
19
|
|
|
20
20
|
### Fields
|
|
21
21
|
|
|
22
|
-
| Field | Required | Notes
|
|
23
|
-
| ---------- | -------- |
|
|
24
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
25
|
-
| `body` | yes | JSON string with `query` and optional `params`
|
|
26
|
-
| `systemId` | no |
|
|
22
|
+
| Field | Required | Notes |
|
|
23
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
24
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
25
|
+
| `body` | yes | JSON string with `query` and optional `params` |
|
|
26
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
27
27
|
|
|
28
28
|
### URL Format
|
|
29
29
|
|
|
@@ -19,11 +19,11 @@ Configure the connection URL based on the selected credential's secrets — use
|
|
|
19
19
|
|
|
20
20
|
### Fields
|
|
21
21
|
|
|
22
|
-
| Field | Required | Notes
|
|
23
|
-
| ---------- | -------- |
|
|
24
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
25
|
-
| `body` | yes | JSON: single command object or array for pipeline
|
|
26
|
-
| `systemId` | no |
|
|
22
|
+
| Field | Required | Notes |
|
|
23
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
24
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
25
|
+
| `body` | yes | JSON: single command object or array for pipeline |
|
|
26
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
27
27
|
|
|
28
28
|
### URL Format
|
|
29
29
|
|
|
@@ -21,11 +21,11 @@ Configure the connection URL based on the selected connection's secrets — use
|
|
|
21
21
|
|
|
22
22
|
### Fields
|
|
23
23
|
|
|
24
|
-
| Field | Required | Notes
|
|
25
|
-
| ---------- | -------- |
|
|
26
|
-
| `url` | yes | Connection string with `<<credential>>` placeholders
|
|
27
|
-
| `body` | yes | JSON: single operation object or array for batch
|
|
28
|
-
| `systemId` | no |
|
|
24
|
+
| Field | Required | Notes |
|
|
25
|
+
| ---------- | -------- | -------------------------------------------------------- |
|
|
26
|
+
| `url` | yes | Connection string with `<<credential>>` placeholders |
|
|
27
|
+
| `body` | yes | JSON: single operation object or array for batch |
|
|
28
|
+
| `systemId` | no | Resolves connection secrets as `<<systemId_secretName>>` |
|
|
29
29
|
|
|
30
30
|
### URL Formats
|
|
31
31
|
|