unoverse 0.1.200 → 0.1.201
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/operator/.env.example +1 -1
- package/operator/docker-compose.yml +1 -1
- package/operator/infra/aws/main.tf +1 -1
- package/operator/infra/digitalocean/main.tf +1 -1
- package/operator/lib/db-verify.sh +13 -10
- package/operator/lib/setup.sh +1 -1
- package/operator/operator.sh +1 -1
- package/package.json +1 -1
- package/vendor/base/items/collect.js +6 -2
- package/vendor/base/items/publish.js +1 -1
- package/vendor/base/lint/design/vocabulary.mjs +1 -1
- package/vendor/base/lint/nodes/_schema/_defs.schema.json +1 -1
- package/vendor/base/lint/nodes/_schema/api.schema.json +1 -1
- package/vendor/base/lint/nodes/_schema/interface.schema.json +1 -1
- package/vendor/base/lint/nodes/_schema/node.schema.json +2 -2
- package/vendor/base/lint/nodes/_schema/package.schema.json +1 -1
- package/vendor/base/lint/nodes/_schema/test.schema.json +1 -1
- package/vendor/base/lint/nodes/index.mjs +1 -1
- package/vendor/base/manifests/source.js +1 -1
package/operator/.env.example
CHANGED
|
@@ -42,7 +42,7 @@ DOCR_TOKEN=
|
|
|
42
42
|
# Page intelligence (promote-page extraction)
|
|
43
43
|
HYPERBROWSER_API_KEY=
|
|
44
44
|
|
|
45
|
-
# Marketplace catalogue to install from (docs/architecture/MARKETPLACE.md).
|
|
45
|
+
# Marketplace catalogue to install from (docs/architecture/authoring/MARKETPLACE.md).
|
|
46
46
|
# Empty = local items only. No default: a URL is never hardcoded.
|
|
47
47
|
UNOVERSE_MARKETPLACE_URL=
|
|
48
48
|
|
|
@@ -372,7 +372,7 @@ services:
|
|
|
372
372
|
restart: unless-stopped
|
|
373
373
|
|
|
374
374
|
# unoverse-runtime REMOVED 2026-07-28: WIP, excluded from the platform
|
|
375
|
-
# (docs/architecture/INFRASTRUCTURE.md). Returns when the user declares it ready.
|
|
375
|
+
# (docs/architecture/deployment/INFRASTRUCTURE.md). Returns when the user declares it ready.
|
|
376
376
|
|
|
377
377
|
# ===========================================================================
|
|
378
378
|
# OBSERVABILITY — log viewer (runs by default)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# The Universe — AWS POC (docs/architecture/AWS_DEPLOYMENT.md)
|
|
1
|
+
# The Universe — AWS POC (docs/architecture/deployment/AWS_DEPLOYMENT.md)
|
|
2
2
|
#
|
|
3
3
|
# One VM + managed Postgres/Redis + Cognito + a scoped Bedrock IAM user.
|
|
4
4
|
# Deliberately flat and minimal: this is the POC tier. Terraform provisions,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# The Universe — DigitalOcean ground (docs/architecture/INFRASTRUCTURE.md)
|
|
1
|
+
# The Universe — DigitalOcean ground (docs/architecture/deployment/INFRASTRUCTURE.md)
|
|
2
2
|
#
|
|
3
3
|
# Same five-input contract as infra/aws, DO implementation: Droplet + Managed
|
|
4
4
|
# Postgres (fronted by its built-in PgBouncer, per the Postgres law) + Managed
|
|
@@ -36,7 +36,7 @@ cmd_db_verify() {
|
|
|
36
36
|
"id", "name", "description", "nodes", "edges", "active",
|
|
37
37
|
"execution_mode", "test_inputs", "umap_settings", "viewport",
|
|
38
38
|
"mcp_schema", "memory_config", "content_taxonomy", "created_at", "updated_at",
|
|
39
|
-
"workflow_document", "layout_document"
|
|
39
|
+
"workflow_document", "layout_document", "org"
|
|
40
40
|
],
|
|
41
41
|
workflow_executions: [
|
|
42
42
|
"execution_id", "workflow_id", "status", "start_time", "end_time",
|
|
@@ -93,42 +93,42 @@ cmd_db_verify() {
|
|
|
93
93
|
"needs", "source_url", "source_id", "umap_x", "umap_y", "umap_z",
|
|
94
94
|
"umap_cluster_id", "color_hex", "needs_umap_update", "created_at",
|
|
95
95
|
"updated_at", "workflow_id", "key_need", "metadata", "embedding_original",
|
|
96
|
-
"cluster_distance"
|
|
96
|
+
"cluster_distance", "org"
|
|
97
97
|
],
|
|
98
98
|
dictionary_clusters: [
|
|
99
99
|
"cluster_id", "workflow_id", "parent_id", "depth", "name", "description",
|
|
100
100
|
"name_embedding", "medoid_id", "terms", "member_count", "umap_x", "umap_y",
|
|
101
101
|
"umap_z", "radius", "created_at", "updated_at",
|
|
102
102
|
"region_id", "carried_overlap", "derived_from", "name_locked", "locked_at",
|
|
103
|
-
"locked_by", "member_ids"
|
|
103
|
+
"locked_by", "member_ids", "org"
|
|
104
104
|
],
|
|
105
105
|
user_region_events: [
|
|
106
106
|
"id", "workflow_id", "user_id", "region_id", "region_name", "stage",
|
|
107
|
-
"source", "evidence", "occurred_at"
|
|
107
|
+
"source", "evidence", "occurred_at", "org"
|
|
108
108
|
],
|
|
109
109
|
dictionary_regions: [
|
|
110
110
|
"region_id", "workflow_id", "depth", "name", "description", "name_locked",
|
|
111
111
|
"locked_at", "locked_by", "stage", "stage_set_by", "needs_review",
|
|
112
112
|
"skills", "skills_set_by", "skills_set_at",
|
|
113
|
-
"derived_from", "first_seen", "last_seen", "closed_at"
|
|
113
|
+
"derived_from", "first_seen", "last_seen", "closed_at", "org"
|
|
114
114
|
],
|
|
115
115
|
dictionary_content_chunks: [
|
|
116
116
|
"chunk_id", "text", "source_url", "source_type", "metadata",
|
|
117
|
-
"workflow_id", "created_at", "updated_at", "embedding_original"
|
|
117
|
+
"workflow_id", "created_at", "updated_at", "embedding_original", "org"
|
|
118
118
|
],
|
|
119
119
|
dictionary_chunk_need_matches: [
|
|
120
120
|
"chunk_id", "need_id", "similarity_score", "rank", "match_type",
|
|
121
|
-
"created_at", "workflow_id"
|
|
121
|
+
"created_at", "workflow_id", "org"
|
|
122
122
|
],
|
|
123
123
|
dictionary_ingestion_configs: [
|
|
124
124
|
"id", "name", "description", "connector_type", "connector_config",
|
|
125
125
|
"main_category", "workflow_id", "created_at", "updated_at",
|
|
126
|
-
"last_run_at", "run_count"
|
|
126
|
+
"last_run_at", "run_count", "org"
|
|
127
127
|
],
|
|
128
128
|
dictionary_ingestion_jobs: [
|
|
129
129
|
"job_id", "workflow_id", "status", "connector_type", "category",
|
|
130
130
|
"config", "extraction_config", "started_at", "completed_at",
|
|
131
|
-
"progress", "error", "created_at"
|
|
131
|
+
"progress", "error", "created_at", "org"
|
|
132
132
|
],
|
|
133
133
|
goals: [
|
|
134
134
|
"goal_id", "user_id", "workflow_id", "status", "description",
|
|
@@ -141,13 +141,16 @@ cmd_db_verify() {
|
|
|
141
141
|
goal_scratch: [
|
|
142
142
|
"goal_id", "agent_id", "agent_name", "state", "updated_at"
|
|
143
143
|
],
|
|
144
|
+
orgs: [
|
|
145
|
+
"slug", "name", "settings", "website", "logo", "created_at", "updated_at"
|
|
146
|
+
],
|
|
144
147
|
knowledge_docs: [
|
|
145
148
|
"id", "workflow_id", "title", "doc_type", "sections", "version",
|
|
146
149
|
"links", "metadata", "created_at", "updated_at"
|
|
147
150
|
],
|
|
148
151
|
content_sources: [
|
|
149
152
|
"workflow_id", "connector", "source_key", "group_path", "label",
|
|
150
|
-
"status", "last_ingested", "metadata", "created_at", "updated_at"
|
|
153
|
+
"status", "last_ingested", "metadata", "created_at", "updated_at", "org"
|
|
151
154
|
],
|
|
152
155
|
security_attack_corpus: [
|
|
153
156
|
"id", "category", "label", "attack_prompt", "expected_result",
|
package/operator/lib/setup.sh
CHANGED
|
@@ -343,7 +343,7 @@ OPENAI_API_KEY=${OPENAI_API_KEY}
|
|
|
343
343
|
# back it up with the database. Kept on re-runs.
|
|
344
344
|
CREDENTIAL_ENCRYPTION_KEY=${CREDENTIAL_ENCRYPTION_KEY}
|
|
345
345
|
HYPERBROWSER_API_KEY=${HYPERBROWSER_API_KEY}
|
|
346
|
-
# Marketplace catalogue to install from (docs/architecture/MARKETPLACE.md).
|
|
346
|
+
# Marketplace catalogue to install from (docs/architecture/authoring/MARKETPLACE.md).
|
|
347
347
|
# Empty = local items only. No default: a URL is never hardcoded.
|
|
348
348
|
UNOVERSE_MARKETPLACE_URL=
|
|
349
349
|
DOMAIN=
|
package/operator/operator.sh
CHANGED
|
@@ -223,7 +223,7 @@ case "${1:-}" in
|
|
|
223
223
|
echo "" >&2
|
|
224
224
|
echo " scripts/operator.sh publish" >&2
|
|
225
225
|
echo "" >&2
|
|
226
|
-
echo " See docs/architecture/DEVELOPER_GUIDE.md § Releasing." >&2
|
|
226
|
+
echo " See docs/architecture/platform/DEVELOPER_GUIDE.md § Releasing." >&2
|
|
227
227
|
echo "" >&2
|
|
228
228
|
exit 1
|
|
229
229
|
else
|
package/package.json
CHANGED
|
@@ -97,7 +97,8 @@ export function collectProject(designRoot, project) {
|
|
|
97
97
|
// A prompt block is NEVER qualified this way — see the blocks/ walk below for why.
|
|
98
98
|
// Apps keep their bare ids: those are org-qualified by convention
|
|
99
99
|
// (`<org>-chat`). docs/unoverse/UNOVERSE_COMPONENT_ORGS.md.
|
|
100
|
-
|
|
100
|
+
// `identity` (2026-09-05): the org's four documents, `<org>/brand` like a component.
|
|
101
|
+
const QUALIFIED_KINDS = new Set(["component", "skill", "template", "identity"]);
|
|
101
102
|
const add = (kind, name, definition) => items.push({
|
|
102
103
|
kind,
|
|
103
104
|
name: QUALIFIED_KINDS.has(kind) ? `${project}/${name}` : name,
|
|
@@ -121,7 +122,10 @@ export function collectProject(designRoot, project) {
|
|
|
121
122
|
// 029): apps publish as kind `app` and the Template Model kind owns the bare
|
|
122
123
|
// word. Forgetting a design dir here ships deploys that silently drop every
|
|
123
124
|
// artifact of that kind.
|
|
124
|
-
|
|
125
|
+
// IDENTITY (owner ruling 2026-09-05): design/<org>/identity/<doc>/ publishes as kind
|
|
126
|
+
// `identity`, the same walk as a component folder, so it reaches the registry, the
|
|
127
|
+
// spatial catalogue and the map through the one publish path everything else takes.
|
|
128
|
+
for (const [dir, kind] of [["components", "component"], ["apps", "app"], ["templates", "template"], ["atoms", "atom"], ["identity", "identity"]]) {
|
|
125
129
|
const home = join(root, dir);
|
|
126
130
|
if (!existsSync(home))
|
|
127
131
|
continue;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* new, changed, unchanged, or refused because the name belongs to someone else. Publishing
|
|
11
11
|
* blind is how a project half-lands and nobody can tell by looking.
|
|
12
12
|
*
|
|
13
|
-
* See docs/architecture/DECLARATIVE_NODES.md §9.
|
|
13
|
+
* See docs/architecture/authoring/DECLARATIVE_NODES.md §9.
|
|
14
14
|
*/
|
|
15
15
|
import { existsSync } from "node:fs";
|
|
16
16
|
import { join } from "node:path";
|
|
@@ -57,7 +57,7 @@ export const PROP_KEYS = [
|
|
|
57
57
|
*/
|
|
58
58
|
export const INTERFACE_FIELDS = new Set([
|
|
59
59
|
"universal_id", "title", "description", "object_type", "key_need", "source_url", "source_id",
|
|
60
|
-
"tagline", "shortDescription", "introParagraph", "callToAction", "
|
|
60
|
+
"tagline", "shortDescription", "introParagraph", "callToAction", "primaryImage", "images", "action",
|
|
61
61
|
"bodyCopy", "features", "mainCategory", "section", "needs",
|
|
62
62
|
]);
|
|
63
63
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://docs.unoverse.ai/schemas/nodes/_defs.schema.json",
|
|
4
4
|
"title": "Shared node definitions",
|
|
5
|
-
"description": "Fragments $ref'd by the sibling node schemas. Not authored directly. See docs/architecture/DECLARATIVE_NODES.md.",
|
|
5
|
+
"description": "Fragments $ref'd by the sibling node schemas. Not authored directly. See docs/architecture/authoring/DECLARATIVE_NODES.md.",
|
|
6
6
|
"definitions": {
|
|
7
7
|
"nodeType": {
|
|
8
8
|
"type": "string",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://docs.unoverse.ai/schemas/nodes/api.schema.json",
|
|
4
4
|
"title": "Unoverse node API call",
|
|
5
|
-
"description": "api.yaml — the upstream call this node makes, and how its response maps onto the node's outputs. This is the file that replaces an executor. NAMED api, not service: `service` already means serviceConnectors / isService / MCP providers / /service-call in this platform. See docs/architecture/DECLARATIVE_NODES.md §8.\n\nEVERY enum below is the EXECUTOR'S CAPABILITY LIST. A manifest may only name a capability that is already implemented in code. Adding a value here without implementing it produces a node that lints clean and fails at run time, and allowing a manifest to name arbitrary code would end the safety property this whole format exists for (§2).\n\nA node is reached two ways, and they never cross. The GRAPH RUNS it: `run` is the ordered list of calls it makes, and `events` says what lands on its output connectors. Or a SERVICE CALLS it ad-hoc, exposed as MCP: `service` holds those methods, each with its own list of calls, each handing one value straight back to the caller rather than touching a connector. A pure service node has only `service`.\n\nCalls are ALWAYS a `run` list, even when there is one of them. There is no `request` key.",
|
|
5
|
+
"description": "api.yaml — the upstream call this node makes, and how its response maps onto the node's outputs. This is the file that replaces an executor. NAMED api, not service: `service` already means serviceConnectors / isService / MCP providers / /service-call in this platform. See docs/architecture/authoring/DECLARATIVE_NODES.md §8.\n\nEVERY enum below is the EXECUTOR'S CAPABILITY LIST. A manifest may only name a capability that is already implemented in code. Adding a value here without implementing it produces a node that lints clean and fails at run time, and allowing a manifest to name arbitrary code would end the safety property this whole format exists for (§2).\n\nA node is reached two ways, and they never cross. The GRAPH RUNS it: `run` is the ordered list of calls it makes, and `events` says what lands on its output connectors. Or a SERVICE CALLS it ad-hoc, exposed as MCP: `service` holds those methods, each with its own list of calls, each handing one value straight back to the caller rather than touching a connector. A pure service node has only `service`.\n\nCalls are ALWAYS a `run` list, even when there is one of them. There is no `request` key.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": [],
|
|
8
8
|
"definitions": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://docs.unoverse.ai/schemas/nodes/interface.schema.json",
|
|
4
4
|
"title": "Unoverse node interface",
|
|
5
|
-
"description": "interface.yaml — the node's WIRING SURFACE, and nothing else. Everything another node, an agent, or a developer needs in order to connect to this one: what goes in, what comes out, what services it offers or consumes, and what credentials it needs.\n\nIt has its own file because this is the question asked most often about a node, and it should never require reading past a node's branding to answer. See docs/architecture/DECLARATIVE_NODES.md §5.",
|
|
5
|
+
"description": "interface.yaml — the node's WIRING SURFACE, and nothing else. Everything another node, an agent, or a developer needs in order to connect to this one: what goes in, what comes out, what services it offers or consumes, and what credentials it needs.\n\nIt has its own file because this is the question asked most often about a node, and it should never require reading past a node's branding to answer. See docs/architecture/authoring/DECLARATIVE_NODES.md §5.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|
|
8
8
|
"$schema": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://docs.unoverse.ai/schemas/nodes/node.schema.json",
|
|
4
4
|
"title": "Unoverse node",
|
|
5
|
-
"description": "node.yaml — what this node IS: its identity, its kind, and how it is discovered. The only required file in a node folder.\n\nThe wiring surface lives next door in interface.yaml, so \"what can I connect to this?\" is answered without reading past the node's branding. config/api/test/interface may each be inlined here instead of living in their own file, but never both (that is a lint error, not a merge). See docs/architecture/DECLARATIVE_NODES.md §5.",
|
|
5
|
+
"description": "node.yaml — what this node IS: its identity, its kind, and how it is discovered. The only required file in a node folder.\n\nThe wiring surface lives next door in interface.yaml, so \"what can I connect to this?\" is answered without reading past the node's branding. config/api/test/interface may each be inlined here instead of living in their own file, but never both (that is a lint error, not a merge). See docs/architecture/authoring/DECLARATIVE_NODES.md §5.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": [
|
|
8
8
|
"type",
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
},
|
|
144
144
|
"auth": {
|
|
145
145
|
"type": "object",
|
|
146
|
-
"description": "WHO MAY RUN THIS NODE — inbound, about the caller (docs/architecture/DECLARATIVE_NODES.md §9.13). Not to be confused with a call's `credential` in api/run.yaml, which is outbound: how the node proves itself to a vendor. Both were spelled `auth` until 2026-07-28.\n\nCOMPULSORY, which is the point. It was optional (`requires: { role }`) until 2026-07-28, and every node in the tree said nothing — so a node that had been considered and left open looked exactly like a node nobody had thought about. Silence is not an answer to this question.",
|
|
146
|
+
"description": "WHO MAY RUN THIS NODE — inbound, about the caller (docs/architecture/authoring/DECLARATIVE_NODES.md §9.13). Not to be confused with a call's `credential` in api/run.yaml, which is outbound: how the node proves itself to a vendor. Both were spelled `auth` until 2026-07-28.\n\nCOMPULSORY, which is the point. It was optional (`requires: { role }`) until 2026-07-28, and every node in the tree said nothing — so a node that had been considered and left open looked exactly like a node nobody had thought about. Silence is not an answer to this question.",
|
|
147
147
|
"additionalProperties": false,
|
|
148
148
|
"properties": {
|
|
149
149
|
"required": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://docs.unoverse.ai/schemas/nodes/package.schema.json",
|
|
4
4
|
"title": "Unoverse node package",
|
|
5
|
-
"description": "package.yaml — the envelope for a folder of nodes. Replaces the `gravity` block in package.json for packages that no longer ship code. See docs/architecture/DECLARATIVE_NODES.md §5.",
|
|
5
|
+
"description": "package.yaml — the envelope for a folder of nodes. Replaces the `gravity` block in package.json for packages that no longer ship code. See docs/architecture/authoring/DECLARATIVE_NODES.md §5.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": [
|
|
8
8
|
"name",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://docs.unoverse.ai/schemas/nodes/test.schema.json",
|
|
4
4
|
"title": "Unoverse node test data",
|
|
5
|
-
"description": "test.yaml — the fixture behind Studio's \"Load sample, Run\" button and behind `unoverse node test`. Every node must have one: a node nobody can run is a node nobody can trust, and lint enforces it.\n\nTemplate fields are supplied ALREADY RESOLVED, because the bench has no upstream node to resolve them from. See docs/architecture/DECLARATIVE_NODES.md §6.",
|
|
5
|
+
"description": "test.yaml — the fixture behind Studio's \"Load sample, Run\" button and behind `unoverse node test`. Every node must have one: a node nobody can run is a node nobody can trust, and lint enforces it.\n\nTemplate fields are supplied ALREADY RESOLVED, because the bench has no upstream node to resolve them from. See docs/architecture/authoring/DECLARATIVE_NODES.md §6.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": [
|
|
8
8
|
"testData"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* without it is the gap LOCAL_STUDIO.md:246 names: "a malformed definition is one restart
|
|
14
14
|
* from a broken server", and a published row does not even need the restart.
|
|
15
15
|
*
|
|
16
|
-
* FOUR TIERS (docs/architecture/DECLARATIVE_NODES.md §6). This is tiers 2 and 3.
|
|
16
|
+
* FOUR TIERS (docs/architecture/authoring/DECLARATIVE_NODES.md §6). This is tiers 2 and 3.
|
|
17
17
|
* 1 editor $schema pointers + .vscode yaml.schemas, no tool
|
|
18
18
|
* 2 structural every part validated against the node schemas (packages/docs/schemas/nodes)
|
|
19
19
|
* 3 semantic the cross-file rules a schema cannot express
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Everything past this file works on the composed definition and never learns where
|
|
10
10
|
* it came from.
|
|
11
11
|
*
|
|
12
|
-
* See docs/architecture/DECLARATIVE_NODES.md.
|
|
12
|
+
* See docs/architecture/authoring/DECLARATIVE_NODES.md.
|
|
13
13
|
*/
|
|
14
14
|
import * as fs from "fs";
|
|
15
15
|
import * as path from "path";
|