@objectstack/studio 9.4.0 → 9.5.0
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/dist/index.d.mts +20 -1
- package/dist/index.d.ts +20 -1
- package/dist/index.js +86 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
export { STUDIO_APP } from '@objectstack/platform-objects/apps';
|
|
2
|
+
import { Doc } from '@objectstack/spec/system';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Studio app overview doc (ADR-0046), registered in this package's manifest so
|
|
6
|
+
* it groups under "Studio" in the `/_console/docs` index.
|
|
7
|
+
*
|
|
8
|
+
* Authored inline rather than as a flat `src/docs/*.md` file because this is a
|
|
9
|
+
* TS-first code package built by tsup, not a user app built by `os build` —
|
|
10
|
+
* `defineStack({ docs })` / manifest `docs[]` is the supported path for those
|
|
11
|
+
* (see `DocSchema` in `@objectstack/spec/system`). The `content` below is plain
|
|
12
|
+
* CommonMark + GFM with no images/MDX, per ADR-0046 §3.4.
|
|
13
|
+
*
|
|
14
|
+
* Principle (from the HotCRM reference docs): document the *invisible*
|
|
15
|
+
* business logic, not what the Studio UI already shows on screen.
|
|
16
|
+
*
|
|
17
|
+
* `translations` carries per-locale variants (ADR-0046 i18n); the REST layer
|
|
18
|
+
* collapses the doc to the request's `Accept-Language` and serves one body.
|
|
19
|
+
*/
|
|
20
|
+
declare const STUDIO_OVERVIEW_DOC: Doc;
|
|
2
21
|
|
|
3
22
|
/**
|
|
4
23
|
* `@objectstack/studio` — the Studio metadata-builder app as its own ObjectStack
|
|
@@ -49,4 +68,4 @@ declare class StudioAppPlugin {
|
|
|
49
68
|
/** Convenience factory mirroring the rest of the plugin ecosystem. */
|
|
50
69
|
declare function createStudioAppPlugin(): StudioAppPlugin;
|
|
51
70
|
|
|
52
|
-
export { STUDIO_APP_NAMESPACE, STUDIO_APP_PACKAGE_ID, STUDIO_APP_VERSION, StudioAppPlugin, createStudioAppPlugin, studioAppManifestHeader };
|
|
71
|
+
export { STUDIO_APP_NAMESPACE, STUDIO_APP_PACKAGE_ID, STUDIO_APP_VERSION, STUDIO_OVERVIEW_DOC, StudioAppPlugin, createStudioAppPlugin, studioAppManifestHeader };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
export { STUDIO_APP } from '@objectstack/platform-objects/apps';
|
|
2
|
+
import { Doc } from '@objectstack/spec/system';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Studio app overview doc (ADR-0046), registered in this package's manifest so
|
|
6
|
+
* it groups under "Studio" in the `/_console/docs` index.
|
|
7
|
+
*
|
|
8
|
+
* Authored inline rather than as a flat `src/docs/*.md` file because this is a
|
|
9
|
+
* TS-first code package built by tsup, not a user app built by `os build` —
|
|
10
|
+
* `defineStack({ docs })` / manifest `docs[]` is the supported path for those
|
|
11
|
+
* (see `DocSchema` in `@objectstack/spec/system`). The `content` below is plain
|
|
12
|
+
* CommonMark + GFM with no images/MDX, per ADR-0046 §3.4.
|
|
13
|
+
*
|
|
14
|
+
* Principle (from the HotCRM reference docs): document the *invisible*
|
|
15
|
+
* business logic, not what the Studio UI already shows on screen.
|
|
16
|
+
*
|
|
17
|
+
* `translations` carries per-locale variants (ADR-0046 i18n); the REST layer
|
|
18
|
+
* collapses the doc to the request's `Accept-Language` and serves one body.
|
|
19
|
+
*/
|
|
20
|
+
declare const STUDIO_OVERVIEW_DOC: Doc;
|
|
2
21
|
|
|
3
22
|
/**
|
|
4
23
|
* `@objectstack/studio` — the Studio metadata-builder app as its own ObjectStack
|
|
@@ -49,4 +68,4 @@ declare class StudioAppPlugin {
|
|
|
49
68
|
/** Convenience factory mirroring the rest of the plugin ecosystem. */
|
|
50
69
|
declare function createStudioAppPlugin(): StudioAppPlugin;
|
|
51
70
|
|
|
52
|
-
export { STUDIO_APP_NAMESPACE, STUDIO_APP_PACKAGE_ID, STUDIO_APP_VERSION, StudioAppPlugin, createStudioAppPlugin, studioAppManifestHeader };
|
|
71
|
+
export { STUDIO_APP_NAMESPACE, STUDIO_APP_PACKAGE_ID, STUDIO_APP_VERSION, STUDIO_OVERVIEW_DOC, StudioAppPlugin, createStudioAppPlugin, studioAppManifestHeader };
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,85 @@
|
|
|
2
2
|
|
|
3
3
|
var apps = require('@objectstack/platform-objects/apps');
|
|
4
4
|
|
|
5
|
+
// src/index.ts
|
|
6
|
+
|
|
7
|
+
// src/studio-overview.doc.ts
|
|
8
|
+
var STUDIO_OVERVIEW_DOC = {
|
|
9
|
+
name: "studio_overview",
|
|
10
|
+
label: "Studio overview",
|
|
11
|
+
description: "Orientation for builders: the metadata-first model, overlay precedence, and publishing.",
|
|
12
|
+
content: `# Studio overview
|
|
13
|
+
|
|
14
|
+
Studio is the builder app \u2014 the workbench for shaping the platform's
|
|
15
|
+
*metadata*: objects, fields, views, flows, agents, and the rest. Most of its
|
|
16
|
+
screens are self-explanatory; this page covers the one rule that is not visible
|
|
17
|
+
on screen but governs everything you do here. For the full reference, see
|
|
18
|
+
<https://docs.objectstack.ai>.
|
|
19
|
+
|
|
20
|
+
## Metadata-first
|
|
21
|
+
|
|
22
|
+
In Studio you do not edit a running database \u2014 you edit *definitions*. Every
|
|
23
|
+
object, field, and view is a metadata record, and the live application is
|
|
24
|
+
generated from that metadata. This is why a change in Studio can reshape the UI
|
|
25
|
+
and the API at once: you are changing the model, not patching a screen.
|
|
26
|
+
|
|
27
|
+
## Edits are overlays (the invisible rule)
|
|
28
|
+
|
|
29
|
+
Your changes do not mutate the metadata shipped by a package in place. Studio
|
|
30
|
+
writes an **overlay** on top of the base definition, and the runtime resolves
|
|
31
|
+
the two by precedence: an unpublished **draft** wins for you while you work, a
|
|
32
|
+
published **tenant overlay** wins over the package's baseline, and the package
|
|
33
|
+
baseline is the fallback (ADR-0005, ADR-0033). The practical consequence: the
|
|
34
|
+
base definition is never destroyed, so an overlay can always be reverted to
|
|
35
|
+
recover the original \u2014 and a field that "won't change" is usually being shadowed
|
|
36
|
+
by a higher-precedence layer.
|
|
37
|
+
|
|
38
|
+
## Publishing & deploying
|
|
39
|
+
|
|
40
|
+
A draft is visible only to you until you **publish** it, which promotes the
|
|
41
|
+
overlay so the rest of the tenant sees it. Moving changes between environments
|
|
42
|
+
(for example dev \u2192 production) is a separate **deploy** step, not an automatic
|
|
43
|
+
side effect of publishing \u2014 keeping the two distinct is what lets you build
|
|
44
|
+
safely in one environment before shipping.
|
|
45
|
+
|
|
46
|
+
See <https://docs.objectstack.ai> for drafts, overlays, and deployment in depth.
|
|
47
|
+
`,
|
|
48
|
+
translations: {
|
|
49
|
+
zh: {
|
|
50
|
+
label: "Studio \u6982\u89C8",
|
|
51
|
+
description: "\u642D\u5EFA\u8005\u5165\u95E8:\u5143\u6570\u636E\u4F18\u5148\u6A21\u578B\u3001\u8986\u76D6\u5C42\u4F18\u5148\u7EA7\u3001\u53D1\u5E03\u4E0E\u90E8\u7F72\u3002",
|
|
52
|
+
content: `# Studio \u6982\u89C8
|
|
53
|
+
|
|
54
|
+
Studio \u662F\u642D\u5EFA\u8005\u5E94\u7528\u2014\u2014\u5851\u9020\u5E73\u53F0*\u5143\u6570\u636E*\u7684\u5DE5\u4F5C\u53F0:\u5BF9\u8C61\u3001\u5B57\u6BB5\u3001\u89C6\u56FE\u3001\u6D41\u7A0B\u3001\u667A\u80FD\u4F53\u7B49\u3002
|
|
55
|
+
\u5B83\u7684\u5927\u591A\u6570\u754C\u9762\u4E00\u76EE\u4E86\u7136;\u672C\u9875\u8BB2\u7684\u662F\u90A3\u6761\u754C\u9762\u4E0A\u770B\u4E0D\u89C1\u3001\u5374\u652F\u914D\u4F60\u5728\u8FD9\u91CC\u4E00\u5207\u64CD\u4F5C\u7684\u89C4\u5219\u3002
|
|
56
|
+
\u5B8C\u6574\u53C2\u8003\u89C1 <https://docs.objectstack.ai>\u3002
|
|
57
|
+
|
|
58
|
+
## \u5143\u6570\u636E\u4F18\u5148
|
|
59
|
+
|
|
60
|
+
\u5728 Studio \u91CC\u4F60\u7F16\u8F91\u7684\u4E0D\u662F\u8FD0\u884C\u4E2D\u7684\u6570\u636E\u5E93,\u800C\u662F*\u5B9A\u4E49*\u3002\u6BCF\u4E2A\u5BF9\u8C61\u3001\u5B57\u6BB5\u3001\u89C6\u56FE\u90FD\u662F\u4E00\u6761
|
|
61
|
+
\u5143\u6570\u636E\u8BB0\u5F55,\u8FD0\u884C\u7684\u5E94\u7528\u7531\u8FD9\u4E9B\u5143\u6570\u636E\u751F\u6210\u3002\u8FD9\u5C31\u662F\u4E3A\u4EC0\u4E48 Studio \u91CC\u7684\u4E00\u5904\u6539\u52A8\u80FD\u540C\u65F6\u91CD\u5851
|
|
62
|
+
UI \u548C API:\u4F60\u6539\u7684\u662F\u6A21\u578B,\u800C\u4E0D\u662F\u4FEE\u8865\u67D0\u4E2A\u754C\u9762\u3002
|
|
63
|
+
|
|
64
|
+
## \u7F16\u8F91\u5373\u8986\u76D6\u5C42(\u770B\u4E0D\u89C1\u7684\u89C4\u5219)
|
|
65
|
+
|
|
66
|
+
\u4F60\u7684\u6539\u52A8\u4E0D\u4F1A\u539F\u5730\u4FEE\u6539\u67D0\u4E2A\u5305\u53D1\u5E03\u7684\u5143\u6570\u636E\u3002Studio \u5728\u57FA\u7840\u5B9A\u4E49\u4E4B\u4E0A\u5199\u4E00\u5C42**\u8986\u76D6\u5C42**,
|
|
67
|
+
\u8FD0\u884C\u65F6\u6309\u4F18\u5148\u7EA7\u89E3\u6790\u4E24\u8005:\u672A\u53D1\u5E03\u7684**\u8349\u7A3F**\u5728\u4F60\u7F16\u8F91\u65F6\u5BF9\u4F60\u751F\u6548,\u5DF2\u53D1\u5E03\u7684**\u79DF\u6237\u8986\u76D6\u5C42**
|
|
68
|
+
\u4F18\u5148\u4E8E\u5305\u7684\u57FA\u7EBF,\u5305\u57FA\u7EBF\u5219\u662F\u515C\u5E95(ADR-0005\u3001ADR-0033)\u3002\u5B9E\u9645\u540E\u679C:\u57FA\u7840\u5B9A\u4E49\u6C38\u4E0D\u88AB
|
|
69
|
+
\u9500\u6BC1,\u6240\u4EE5\u8986\u76D6\u5C42\u603B\u80FD\u56DE\u9000\u4EE5\u6062\u590D\u539F\u6837\u2014\u2014\u800C\u4E00\u4E2A"\u6539\u4E0D\u52A8"\u7684\u5B57\u6BB5,\u901A\u5E38\u662F\u88AB\u66F4\u9AD8\u4F18\u5148\u7EA7\u7684
|
|
70
|
+
\u5C42\u906E\u4F4F\u4E86\u3002
|
|
71
|
+
|
|
72
|
+
## \u53D1\u5E03\u4E0E\u90E8\u7F72
|
|
73
|
+
|
|
74
|
+
\u8349\u7A3F\u53EA\u5BF9\u4F60\u81EA\u5DF1\u53EF\u89C1,\u76F4\u5230\u4F60**\u53D1\u5E03**\u5B83,\u628A\u8986\u76D6\u5C42\u63D0\u5347\u7ED9\u6574\u4E2A\u79DF\u6237\u770B\u5230\u3002\u5728\u73AF\u5883\u4E4B\u95F4\u642C\u8FD0
|
|
75
|
+
\u6539\u52A8(\u4F8B\u5982\u5F00\u53D1 \u2192 \u751F\u4EA7)\u662F\u5355\u72EC\u7684**\u90E8\u7F72**\u6B65\u9AA4,\u4E0D\u662F\u53D1\u5E03\u7684\u81EA\u52A8\u526F\u4F5C\u7528\u2014\u2014\u628A\u4E24\u8005\u5206\u5F00,
|
|
76
|
+
\u624D\u80FD\u8BA9\u4F60\u5728\u4E00\u4E2A\u73AF\u5883\u91CC\u5B89\u5168\u642D\u5EFA\u3001\u518D\u4E0A\u7EBF\u3002
|
|
77
|
+
|
|
78
|
+
\u8349\u7A3F\u3001\u8986\u76D6\u5C42\u4E0E\u90E8\u7F72\u7684\u7EC6\u8282\u89C1 <https://docs.objectstack.ai>\u3002
|
|
79
|
+
`
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
5
84
|
// src/index.ts
|
|
6
85
|
var STUDIO_APP_PACKAGE_ID = "com.objectstack.studio";
|
|
7
86
|
var STUDIO_APP_NAMESPACE = "studio";
|
|
@@ -32,7 +111,12 @@ var StudioAppPlugin = class {
|
|
|
32
111
|
async start(ctx) {
|
|
33
112
|
const manifest = ctx?.getService?.("manifest");
|
|
34
113
|
if (!manifest || typeof manifest.register !== "function") return;
|
|
35
|
-
manifest.register({
|
|
114
|
+
manifest.register({
|
|
115
|
+
...studioAppManifestHeader,
|
|
116
|
+
apps: [apps.STUDIO_APP],
|
|
117
|
+
// ADR-0046 package docs — grouped under "Studio" at /_console/docs.
|
|
118
|
+
docs: [STUDIO_OVERVIEW_DOC]
|
|
119
|
+
});
|
|
36
120
|
}
|
|
37
121
|
};
|
|
38
122
|
function createStudioAppPlugin() {
|
|
@@ -46,6 +130,7 @@ Object.defineProperty(exports, "STUDIO_APP", {
|
|
|
46
130
|
exports.STUDIO_APP_NAMESPACE = STUDIO_APP_NAMESPACE;
|
|
47
131
|
exports.STUDIO_APP_PACKAGE_ID = STUDIO_APP_PACKAGE_ID;
|
|
48
132
|
exports.STUDIO_APP_VERSION = STUDIO_APP_VERSION;
|
|
133
|
+
exports.STUDIO_OVERVIEW_DOC = STUDIO_OVERVIEW_DOC;
|
|
49
134
|
exports.StudioAppPlugin = StudioAppPlugin;
|
|
50
135
|
exports.createStudioAppPlugin = createStudioAppPlugin;
|
|
51
136
|
exports.studioAppManifestHeader = studioAppManifestHeader;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["STUDIO_APP"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/studio-overview.doc.ts","../src/index.ts"],"names":["STUDIO_APP"],"mappings":";;;;;;;AAoBO,IAAM,mBAAA,GAA2B;AAAA,EACtC,IAAA,EAAM,iBAAA;AAAA,EACN,KAAA,EAAO,iBAAA;AAAA,EACP,WAAA,EAAa,yFAAA;AAAA,EACb,OAAA,EAAS,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,EAoCT,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI;AAAA,MACF,KAAA,EAAO,qBAAA;AAAA,MACP,WAAA,EAAa,+JAAA;AAAA,MACb,OAAA,EAAS,CAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AA4BX;AAEJ;;;ACrEO,IAAM,qBAAA,GAAwB;AAC9B,IAAM,oBAAA,GAAuB;AAC7B,IAAM,kBAAA,GAAqB;AAG3B,IAAM,uBAAA,GAA0B;AAAA,EACrC,EAAA,EAAI,qBAAA;AAAA,EACJ,SAAA,EAAW,oBAAA;AAAA,EACX,OAAA,EAAS,kBAAA;AAAA,EACT,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,iDAAA;AAAA;AAAA;AAAA,EAGb,YAAA,EAAc,CAAC,6BAA6B;AAC9C;AAOO,IAAM,kBAAN,MAAsB;AAAA,EAAtB,WAAA,GAAA;AACL,IAAA,IAAA,CAAS,IAAA,GAAO,qBAAA;AAChB,IAAA,IAAA,CAAS,IAAA,GAAO,UAAA;AAChB,IAAA,IAAA,CAAS,OAAA,GAAU,kBAAA;AAGnB;AAAA;AAAA,IAAA,IAAA,CAAS,YAAA,GAAyB,CAAC,sBAAsB,CAAA;AAAA,EAAA;AAAA,EAEzD,MAAM,KAAK,IAAA,EAA0B;AAAA,EAErC;AAAA,EAEA,MAAM,MAAM,GAAA,EAAyB;AACnC,IAAA,MAAM,QAAA,GAAW,GAAA,EAAK,UAAA,GAAa,UAAU,CAAA;AAC7C,IAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,CAAS,aAAa,UAAA,EAAY;AAC1D,IAAA,QAAA,CAAS,QAAA,CAAS;AAAA,MAChB,GAAG,uBAAA;AAAA,MACH,IAAA,EAAM,CAACA,eAAU,CAAA;AAAA;AAAA,MAEjB,IAAA,EAAM,CAAC,mBAAmB;AAAA,KAC3B,CAAA;AAAA,EACH;AACF;AAGO,SAAS,qBAAA,GAAyC;AACvD,EAAA,OAAO,IAAI,eAAA,EAAgB;AAC7B","file":"index.js","sourcesContent":["// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Doc } from '@objectstack/spec/system';\n\n/**\n * Studio app overview doc (ADR-0046), registered in this package's manifest so\n * it groups under \"Studio\" in the `/_console/docs` index.\n *\n * Authored inline rather than as a flat `src/docs/*.md` file because this is a\n * TS-first code package built by tsup, not a user app built by `os build` —\n * `defineStack({ docs })` / manifest `docs[]` is the supported path for those\n * (see `DocSchema` in `@objectstack/spec/system`). The `content` below is plain\n * CommonMark + GFM with no images/MDX, per ADR-0046 §3.4.\n *\n * Principle (from the HotCRM reference docs): document the *invisible*\n * business logic, not what the Studio UI already shows on screen.\n *\n * `translations` carries per-locale variants (ADR-0046 i18n); the REST layer\n * collapses the doc to the request's `Accept-Language` and serves one body.\n */\nexport const STUDIO_OVERVIEW_DOC: Doc = {\n name: 'studio_overview',\n label: 'Studio overview',\n description: 'Orientation for builders: the metadata-first model, overlay precedence, and publishing.',\n content: `# Studio overview\n\nStudio is the builder app — the workbench for shaping the platform's\n*metadata*: objects, fields, views, flows, agents, and the rest. Most of its\nscreens are self-explanatory; this page covers the one rule that is not visible\non screen but governs everything you do here. For the full reference, see\n<https://docs.objectstack.ai>.\n\n## Metadata-first\n\nIn Studio you do not edit a running database — you edit *definitions*. Every\nobject, field, and view is a metadata record, and the live application is\ngenerated from that metadata. This is why a change in Studio can reshape the UI\nand the API at once: you are changing the model, not patching a screen.\n\n## Edits are overlays (the invisible rule)\n\nYour changes do not mutate the metadata shipped by a package in place. Studio\nwrites an **overlay** on top of the base definition, and the runtime resolves\nthe two by precedence: an unpublished **draft** wins for you while you work, a\npublished **tenant overlay** wins over the package's baseline, and the package\nbaseline is the fallback (ADR-0005, ADR-0033). The practical consequence: the\nbase definition is never destroyed, so an overlay can always be reverted to\nrecover the original — and a field that \"won't change\" is usually being shadowed\nby a higher-precedence layer.\n\n## Publishing & deploying\n\nA draft is visible only to you until you **publish** it, which promotes the\noverlay so the rest of the tenant sees it. Moving changes between environments\n(for example dev → production) is a separate **deploy** step, not an automatic\nside effect of publishing — keeping the two distinct is what lets you build\nsafely in one environment before shipping.\n\nSee <https://docs.objectstack.ai> for drafts, overlays, and deployment in depth.\n`,\n translations: {\n zh: {\n label: 'Studio 概览',\n description: '搭建者入门:元数据优先模型、覆盖层优先级、发布与部署。',\n content: `# Studio 概览\n\nStudio 是搭建者应用——塑造平台*元数据*的工作台:对象、字段、视图、流程、智能体等。\n它的大多数界面一目了然;本页讲的是那条界面上看不见、却支配你在这里一切操作的规则。\n完整参考见 <https://docs.objectstack.ai>。\n\n## 元数据优先\n\n在 Studio 里你编辑的不是运行中的数据库,而是*定义*。每个对象、字段、视图都是一条\n元数据记录,运行的应用由这些元数据生成。这就是为什么 Studio 里的一处改动能同时重塑\nUI 和 API:你改的是模型,而不是修补某个界面。\n\n## 编辑即覆盖层(看不见的规则)\n\n你的改动不会原地修改某个包发布的元数据。Studio 在基础定义之上写一层**覆盖层**,\n运行时按优先级解析两者:未发布的**草稿**在你编辑时对你生效,已发布的**租户覆盖层**\n优先于包的基线,包基线则是兜底(ADR-0005、ADR-0033)。实际后果:基础定义永不被\n销毁,所以覆盖层总能回退以恢复原样——而一个\"改不动\"的字段,通常是被更高优先级的\n层遮住了。\n\n## 发布与部署\n\n草稿只对你自己可见,直到你**发布**它,把覆盖层提升给整个租户看到。在环境之间搬运\n改动(例如开发 → 生产)是单独的**部署**步骤,不是发布的自动副作用——把两者分开,\n才能让你在一个环境里安全搭建、再上线。\n\n草稿、覆盖层与部署的细节见 <https://docs.objectstack.ai>。\n`,\n },\n },\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * `@objectstack/studio` — the Studio metadata-builder app as its own ObjectStack\n * package (ADR-0048: one app per package).\n *\n * Studio is a console navigation-shell app (an `AppSchema`), not a kernel\n * extension — but it still needs a thin registration entry to publish its\n * manifest into the running kernel, mirroring how `@objectstack/plugin-auth`\n * registers its own manifest. Giving it a distinct package id\n * (`com.objectstack.studio`) is what lets `/apps/<packageId>` resolve to exactly\n * this app instead of being ambiguous inside a multi-app package.\n *\n * NOTE (transitional): the `STUDIO_APP` schema is still imported from\n * `@objectstack/platform-objects/apps`; a follow-up moves the definition into\n * this package and drops the dependency. This package is intentionally NOT yet\n * wired into the dev/serve plugin set — that boot-path switch (and removing the\n * app from plugin-auth's manifest) lands separately so it can be verified\n * against a live `os dev` boot.\n */\n\nimport { STUDIO_APP } from '@objectstack/platform-objects/apps';\n\nimport { STUDIO_OVERVIEW_DOC } from './studio-overview.doc.js';\n\nexport const STUDIO_APP_PACKAGE_ID = 'com.objectstack.studio';\nexport const STUDIO_APP_NAMESPACE = 'studio';\nexport const STUDIO_APP_VERSION = '9.3.0';\n\n/** Manifest header for the Studio app package. */\nexport const studioAppManifestHeader = {\n id: STUDIO_APP_PACKAGE_ID,\n namespace: STUDIO_APP_NAMESPACE,\n version: STUDIO_APP_VERSION,\n type: 'plugin' as const,\n scope: 'system' as const,\n name: 'Studio',\n description: 'ObjectStack Studio — metadata builder app.',\n // Studio navigates platform metadata owned by plugin-auth; declare the\n // dependency so it loads after the auth objects are registered.\n dependencies: ['com.objectstack.plugin-auth'],\n};\n\n/**\n * Thin plugin that registers the Studio app manifest. Structurally typed\n * against the kernel `Plugin` contract (no compile-time kernel dependency),\n * exactly like `AuthPlugin`.\n */\nexport class StudioAppPlugin {\n readonly name = STUDIO_APP_PACKAGE_ID;\n readonly type = 'standard';\n readonly version = STUDIO_APP_VERSION;\n // Kernel plugin dependency is matched by plugin NAME (AuthPlugin.name =\n // 'com.objectstack.auth'), not by package id.\n readonly dependencies: string[] = ['com.objectstack.auth'];\n\n async init(_ctx: any): Promise<void> {\n // No-op: registration happens in start() once the manifest service exists.\n }\n\n async start(ctx: any): Promise<void> {\n const manifest = ctx?.getService?.('manifest');\n if (!manifest || typeof manifest.register !== 'function') return;\n manifest.register({\n ...studioAppManifestHeader,\n apps: [STUDIO_APP],\n // ADR-0046 package docs — grouped under \"Studio\" at /_console/docs.\n docs: [STUDIO_OVERVIEW_DOC],\n });\n }\n}\n\n/** Convenience factory mirroring the rest of the plugin ecosystem. */\nexport function createStudioAppPlugin(): StudioAppPlugin {\n return new StudioAppPlugin();\n}\n\nexport { STUDIO_APP };\nexport { STUDIO_OVERVIEW_DOC };\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,85 @@
|
|
|
1
1
|
import { STUDIO_APP } from '@objectstack/platform-objects/apps';
|
|
2
2
|
export { STUDIO_APP } from '@objectstack/platform-objects/apps';
|
|
3
3
|
|
|
4
|
+
// src/index.ts
|
|
5
|
+
|
|
6
|
+
// src/studio-overview.doc.ts
|
|
7
|
+
var STUDIO_OVERVIEW_DOC = {
|
|
8
|
+
name: "studio_overview",
|
|
9
|
+
label: "Studio overview",
|
|
10
|
+
description: "Orientation for builders: the metadata-first model, overlay precedence, and publishing.",
|
|
11
|
+
content: `# Studio overview
|
|
12
|
+
|
|
13
|
+
Studio is the builder app \u2014 the workbench for shaping the platform's
|
|
14
|
+
*metadata*: objects, fields, views, flows, agents, and the rest. Most of its
|
|
15
|
+
screens are self-explanatory; this page covers the one rule that is not visible
|
|
16
|
+
on screen but governs everything you do here. For the full reference, see
|
|
17
|
+
<https://docs.objectstack.ai>.
|
|
18
|
+
|
|
19
|
+
## Metadata-first
|
|
20
|
+
|
|
21
|
+
In Studio you do not edit a running database \u2014 you edit *definitions*. Every
|
|
22
|
+
object, field, and view is a metadata record, and the live application is
|
|
23
|
+
generated from that metadata. This is why a change in Studio can reshape the UI
|
|
24
|
+
and the API at once: you are changing the model, not patching a screen.
|
|
25
|
+
|
|
26
|
+
## Edits are overlays (the invisible rule)
|
|
27
|
+
|
|
28
|
+
Your changes do not mutate the metadata shipped by a package in place. Studio
|
|
29
|
+
writes an **overlay** on top of the base definition, and the runtime resolves
|
|
30
|
+
the two by precedence: an unpublished **draft** wins for you while you work, a
|
|
31
|
+
published **tenant overlay** wins over the package's baseline, and the package
|
|
32
|
+
baseline is the fallback (ADR-0005, ADR-0033). The practical consequence: the
|
|
33
|
+
base definition is never destroyed, so an overlay can always be reverted to
|
|
34
|
+
recover the original \u2014 and a field that "won't change" is usually being shadowed
|
|
35
|
+
by a higher-precedence layer.
|
|
36
|
+
|
|
37
|
+
## Publishing & deploying
|
|
38
|
+
|
|
39
|
+
A draft is visible only to you until you **publish** it, which promotes the
|
|
40
|
+
overlay so the rest of the tenant sees it. Moving changes between environments
|
|
41
|
+
(for example dev \u2192 production) is a separate **deploy** step, not an automatic
|
|
42
|
+
side effect of publishing \u2014 keeping the two distinct is what lets you build
|
|
43
|
+
safely in one environment before shipping.
|
|
44
|
+
|
|
45
|
+
See <https://docs.objectstack.ai> for drafts, overlays, and deployment in depth.
|
|
46
|
+
`,
|
|
47
|
+
translations: {
|
|
48
|
+
zh: {
|
|
49
|
+
label: "Studio \u6982\u89C8",
|
|
50
|
+
description: "\u642D\u5EFA\u8005\u5165\u95E8:\u5143\u6570\u636E\u4F18\u5148\u6A21\u578B\u3001\u8986\u76D6\u5C42\u4F18\u5148\u7EA7\u3001\u53D1\u5E03\u4E0E\u90E8\u7F72\u3002",
|
|
51
|
+
content: `# Studio \u6982\u89C8
|
|
52
|
+
|
|
53
|
+
Studio \u662F\u642D\u5EFA\u8005\u5E94\u7528\u2014\u2014\u5851\u9020\u5E73\u53F0*\u5143\u6570\u636E*\u7684\u5DE5\u4F5C\u53F0:\u5BF9\u8C61\u3001\u5B57\u6BB5\u3001\u89C6\u56FE\u3001\u6D41\u7A0B\u3001\u667A\u80FD\u4F53\u7B49\u3002
|
|
54
|
+
\u5B83\u7684\u5927\u591A\u6570\u754C\u9762\u4E00\u76EE\u4E86\u7136;\u672C\u9875\u8BB2\u7684\u662F\u90A3\u6761\u754C\u9762\u4E0A\u770B\u4E0D\u89C1\u3001\u5374\u652F\u914D\u4F60\u5728\u8FD9\u91CC\u4E00\u5207\u64CD\u4F5C\u7684\u89C4\u5219\u3002
|
|
55
|
+
\u5B8C\u6574\u53C2\u8003\u89C1 <https://docs.objectstack.ai>\u3002
|
|
56
|
+
|
|
57
|
+
## \u5143\u6570\u636E\u4F18\u5148
|
|
58
|
+
|
|
59
|
+
\u5728 Studio \u91CC\u4F60\u7F16\u8F91\u7684\u4E0D\u662F\u8FD0\u884C\u4E2D\u7684\u6570\u636E\u5E93,\u800C\u662F*\u5B9A\u4E49*\u3002\u6BCF\u4E2A\u5BF9\u8C61\u3001\u5B57\u6BB5\u3001\u89C6\u56FE\u90FD\u662F\u4E00\u6761
|
|
60
|
+
\u5143\u6570\u636E\u8BB0\u5F55,\u8FD0\u884C\u7684\u5E94\u7528\u7531\u8FD9\u4E9B\u5143\u6570\u636E\u751F\u6210\u3002\u8FD9\u5C31\u662F\u4E3A\u4EC0\u4E48 Studio \u91CC\u7684\u4E00\u5904\u6539\u52A8\u80FD\u540C\u65F6\u91CD\u5851
|
|
61
|
+
UI \u548C API:\u4F60\u6539\u7684\u662F\u6A21\u578B,\u800C\u4E0D\u662F\u4FEE\u8865\u67D0\u4E2A\u754C\u9762\u3002
|
|
62
|
+
|
|
63
|
+
## \u7F16\u8F91\u5373\u8986\u76D6\u5C42(\u770B\u4E0D\u89C1\u7684\u89C4\u5219)
|
|
64
|
+
|
|
65
|
+
\u4F60\u7684\u6539\u52A8\u4E0D\u4F1A\u539F\u5730\u4FEE\u6539\u67D0\u4E2A\u5305\u53D1\u5E03\u7684\u5143\u6570\u636E\u3002Studio \u5728\u57FA\u7840\u5B9A\u4E49\u4E4B\u4E0A\u5199\u4E00\u5C42**\u8986\u76D6\u5C42**,
|
|
66
|
+
\u8FD0\u884C\u65F6\u6309\u4F18\u5148\u7EA7\u89E3\u6790\u4E24\u8005:\u672A\u53D1\u5E03\u7684**\u8349\u7A3F**\u5728\u4F60\u7F16\u8F91\u65F6\u5BF9\u4F60\u751F\u6548,\u5DF2\u53D1\u5E03\u7684**\u79DF\u6237\u8986\u76D6\u5C42**
|
|
67
|
+
\u4F18\u5148\u4E8E\u5305\u7684\u57FA\u7EBF,\u5305\u57FA\u7EBF\u5219\u662F\u515C\u5E95(ADR-0005\u3001ADR-0033)\u3002\u5B9E\u9645\u540E\u679C:\u57FA\u7840\u5B9A\u4E49\u6C38\u4E0D\u88AB
|
|
68
|
+
\u9500\u6BC1,\u6240\u4EE5\u8986\u76D6\u5C42\u603B\u80FD\u56DE\u9000\u4EE5\u6062\u590D\u539F\u6837\u2014\u2014\u800C\u4E00\u4E2A"\u6539\u4E0D\u52A8"\u7684\u5B57\u6BB5,\u901A\u5E38\u662F\u88AB\u66F4\u9AD8\u4F18\u5148\u7EA7\u7684
|
|
69
|
+
\u5C42\u906E\u4F4F\u4E86\u3002
|
|
70
|
+
|
|
71
|
+
## \u53D1\u5E03\u4E0E\u90E8\u7F72
|
|
72
|
+
|
|
73
|
+
\u8349\u7A3F\u53EA\u5BF9\u4F60\u81EA\u5DF1\u53EF\u89C1,\u76F4\u5230\u4F60**\u53D1\u5E03**\u5B83,\u628A\u8986\u76D6\u5C42\u63D0\u5347\u7ED9\u6574\u4E2A\u79DF\u6237\u770B\u5230\u3002\u5728\u73AF\u5883\u4E4B\u95F4\u642C\u8FD0
|
|
74
|
+
\u6539\u52A8(\u4F8B\u5982\u5F00\u53D1 \u2192 \u751F\u4EA7)\u662F\u5355\u72EC\u7684**\u90E8\u7F72**\u6B65\u9AA4,\u4E0D\u662F\u53D1\u5E03\u7684\u81EA\u52A8\u526F\u4F5C\u7528\u2014\u2014\u628A\u4E24\u8005\u5206\u5F00,
|
|
75
|
+
\u624D\u80FD\u8BA9\u4F60\u5728\u4E00\u4E2A\u73AF\u5883\u91CC\u5B89\u5168\u642D\u5EFA\u3001\u518D\u4E0A\u7EBF\u3002
|
|
76
|
+
|
|
77
|
+
\u8349\u7A3F\u3001\u8986\u76D6\u5C42\u4E0E\u90E8\u7F72\u7684\u7EC6\u8282\u89C1 <https://docs.objectstack.ai>\u3002
|
|
78
|
+
`
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
4
83
|
// src/index.ts
|
|
5
84
|
var STUDIO_APP_PACKAGE_ID = "com.objectstack.studio";
|
|
6
85
|
var STUDIO_APP_NAMESPACE = "studio";
|
|
@@ -31,13 +110,18 @@ var StudioAppPlugin = class {
|
|
|
31
110
|
async start(ctx) {
|
|
32
111
|
const manifest = ctx?.getService?.("manifest");
|
|
33
112
|
if (!manifest || typeof manifest.register !== "function") return;
|
|
34
|
-
manifest.register({
|
|
113
|
+
manifest.register({
|
|
114
|
+
...studioAppManifestHeader,
|
|
115
|
+
apps: [STUDIO_APP],
|
|
116
|
+
// ADR-0046 package docs — grouped under "Studio" at /_console/docs.
|
|
117
|
+
docs: [STUDIO_OVERVIEW_DOC]
|
|
118
|
+
});
|
|
35
119
|
}
|
|
36
120
|
};
|
|
37
121
|
function createStudioAppPlugin() {
|
|
38
122
|
return new StudioAppPlugin();
|
|
39
123
|
}
|
|
40
124
|
|
|
41
|
-
export { STUDIO_APP_NAMESPACE, STUDIO_APP_PACKAGE_ID, STUDIO_APP_VERSION, StudioAppPlugin, createStudioAppPlugin, studioAppManifestHeader };
|
|
125
|
+
export { STUDIO_APP_NAMESPACE, STUDIO_APP_PACKAGE_ID, STUDIO_APP_VERSION, STUDIO_OVERVIEW_DOC, StudioAppPlugin, createStudioAppPlugin, studioAppManifestHeader };
|
|
42
126
|
//# sourceMappingURL=index.mjs.map
|
|
43
127
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/studio-overview.doc.ts","../src/index.ts"],"names":[],"mappings":";;;;;;AAoBO,IAAM,mBAAA,GAA2B;AAAA,EACtC,IAAA,EAAM,iBAAA;AAAA,EACN,KAAA,EAAO,iBAAA;AAAA,EACP,WAAA,EAAa,yFAAA;AAAA,EACb,OAAA,EAAS,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,EAoCT,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI;AAAA,MACF,KAAA,EAAO,qBAAA;AAAA,MACP,WAAA,EAAa,+JAAA;AAAA,MACb,OAAA,EAAS,CAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AA4BX;AAEJ;;;ACrEO,IAAM,qBAAA,GAAwB;AAC9B,IAAM,oBAAA,GAAuB;AAC7B,IAAM,kBAAA,GAAqB;AAG3B,IAAM,uBAAA,GAA0B;AAAA,EACrC,EAAA,EAAI,qBAAA;AAAA,EACJ,SAAA,EAAW,oBAAA;AAAA,EACX,OAAA,EAAS,kBAAA;AAAA,EACT,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,iDAAA;AAAA;AAAA;AAAA,EAGb,YAAA,EAAc,CAAC,6BAA6B;AAC9C;AAOO,IAAM,kBAAN,MAAsB;AAAA,EAAtB,WAAA,GAAA;AACL,IAAA,IAAA,CAAS,IAAA,GAAO,qBAAA;AAChB,IAAA,IAAA,CAAS,IAAA,GAAO,UAAA;AAChB,IAAA,IAAA,CAAS,OAAA,GAAU,kBAAA;AAGnB;AAAA;AAAA,IAAA,IAAA,CAAS,YAAA,GAAyB,CAAC,sBAAsB,CAAA;AAAA,EAAA;AAAA,EAEzD,MAAM,KAAK,IAAA,EAA0B;AAAA,EAErC;AAAA,EAEA,MAAM,MAAM,GAAA,EAAyB;AACnC,IAAA,MAAM,QAAA,GAAW,GAAA,EAAK,UAAA,GAAa,UAAU,CAAA;AAC7C,IAAA,IAAI,CAAC,QAAA,IAAY,OAAO,QAAA,CAAS,aAAa,UAAA,EAAY;AAC1D,IAAA,QAAA,CAAS,QAAA,CAAS;AAAA,MAChB,GAAG,uBAAA;AAAA,MACH,IAAA,EAAM,CAAC,UAAU,CAAA;AAAA;AAAA,MAEjB,IAAA,EAAM,CAAC,mBAAmB;AAAA,KAC3B,CAAA;AAAA,EACH;AACF;AAGO,SAAS,qBAAA,GAAyC;AACvD,EAAA,OAAO,IAAI,eAAA,EAAgB;AAC7B","file":"index.mjs","sourcesContent":["// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport type { Doc } from '@objectstack/spec/system';\n\n/**\n * Studio app overview doc (ADR-0046), registered in this package's manifest so\n * it groups under \"Studio\" in the `/_console/docs` index.\n *\n * Authored inline rather than as a flat `src/docs/*.md` file because this is a\n * TS-first code package built by tsup, not a user app built by `os build` —\n * `defineStack({ docs })` / manifest `docs[]` is the supported path for those\n * (see `DocSchema` in `@objectstack/spec/system`). The `content` below is plain\n * CommonMark + GFM with no images/MDX, per ADR-0046 §3.4.\n *\n * Principle (from the HotCRM reference docs): document the *invisible*\n * business logic, not what the Studio UI already shows on screen.\n *\n * `translations` carries per-locale variants (ADR-0046 i18n); the REST layer\n * collapses the doc to the request's `Accept-Language` and serves one body.\n */\nexport const STUDIO_OVERVIEW_DOC: Doc = {\n name: 'studio_overview',\n label: 'Studio overview',\n description: 'Orientation for builders: the metadata-first model, overlay precedence, and publishing.',\n content: `# Studio overview\n\nStudio is the builder app — the workbench for shaping the platform's\n*metadata*: objects, fields, views, flows, agents, and the rest. Most of its\nscreens are self-explanatory; this page covers the one rule that is not visible\non screen but governs everything you do here. For the full reference, see\n<https://docs.objectstack.ai>.\n\n## Metadata-first\n\nIn Studio you do not edit a running database — you edit *definitions*. Every\nobject, field, and view is a metadata record, and the live application is\ngenerated from that metadata. This is why a change in Studio can reshape the UI\nand the API at once: you are changing the model, not patching a screen.\n\n## Edits are overlays (the invisible rule)\n\nYour changes do not mutate the metadata shipped by a package in place. Studio\nwrites an **overlay** on top of the base definition, and the runtime resolves\nthe two by precedence: an unpublished **draft** wins for you while you work, a\npublished **tenant overlay** wins over the package's baseline, and the package\nbaseline is the fallback (ADR-0005, ADR-0033). The practical consequence: the\nbase definition is never destroyed, so an overlay can always be reverted to\nrecover the original — and a field that \"won't change\" is usually being shadowed\nby a higher-precedence layer.\n\n## Publishing & deploying\n\nA draft is visible only to you until you **publish** it, which promotes the\noverlay so the rest of the tenant sees it. Moving changes between environments\n(for example dev → production) is a separate **deploy** step, not an automatic\nside effect of publishing — keeping the two distinct is what lets you build\nsafely in one environment before shipping.\n\nSee <https://docs.objectstack.ai> for drafts, overlays, and deployment in depth.\n`,\n translations: {\n zh: {\n label: 'Studio 概览',\n description: '搭建者入门:元数据优先模型、覆盖层优先级、发布与部署。',\n content: `# Studio 概览\n\nStudio 是搭建者应用——塑造平台*元数据*的工作台:对象、字段、视图、流程、智能体等。\n它的大多数界面一目了然;本页讲的是那条界面上看不见、却支配你在这里一切操作的规则。\n完整参考见 <https://docs.objectstack.ai>。\n\n## 元数据优先\n\n在 Studio 里你编辑的不是运行中的数据库,而是*定义*。每个对象、字段、视图都是一条\n元数据记录,运行的应用由这些元数据生成。这就是为什么 Studio 里的一处改动能同时重塑\nUI 和 API:你改的是模型,而不是修补某个界面。\n\n## 编辑即覆盖层(看不见的规则)\n\n你的改动不会原地修改某个包发布的元数据。Studio 在基础定义之上写一层**覆盖层**,\n运行时按优先级解析两者:未发布的**草稿**在你编辑时对你生效,已发布的**租户覆盖层**\n优先于包的基线,包基线则是兜底(ADR-0005、ADR-0033)。实际后果:基础定义永不被\n销毁,所以覆盖层总能回退以恢复原样——而一个\"改不动\"的字段,通常是被更高优先级的\n层遮住了。\n\n## 发布与部署\n\n草稿只对你自己可见,直到你**发布**它,把覆盖层提升给整个租户看到。在环境之间搬运\n改动(例如开发 → 生产)是单独的**部署**步骤,不是发布的自动副作用——把两者分开,\n才能让你在一个环境里安全搭建、再上线。\n\n草稿、覆盖层与部署的细节见 <https://docs.objectstack.ai>。\n`,\n },\n },\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * `@objectstack/studio` — the Studio metadata-builder app as its own ObjectStack\n * package (ADR-0048: one app per package).\n *\n * Studio is a console navigation-shell app (an `AppSchema`), not a kernel\n * extension — but it still needs a thin registration entry to publish its\n * manifest into the running kernel, mirroring how `@objectstack/plugin-auth`\n * registers its own manifest. Giving it a distinct package id\n * (`com.objectstack.studio`) is what lets `/apps/<packageId>` resolve to exactly\n * this app instead of being ambiguous inside a multi-app package.\n *\n * NOTE (transitional): the `STUDIO_APP` schema is still imported from\n * `@objectstack/platform-objects/apps`; a follow-up moves the definition into\n * this package and drops the dependency. This package is intentionally NOT yet\n * wired into the dev/serve plugin set — that boot-path switch (and removing the\n * app from plugin-auth's manifest) lands separately so it can be verified\n * against a live `os dev` boot.\n */\n\nimport { STUDIO_APP } from '@objectstack/platform-objects/apps';\n\nimport { STUDIO_OVERVIEW_DOC } from './studio-overview.doc.js';\n\nexport const STUDIO_APP_PACKAGE_ID = 'com.objectstack.studio';\nexport const STUDIO_APP_NAMESPACE = 'studio';\nexport const STUDIO_APP_VERSION = '9.3.0';\n\n/** Manifest header for the Studio app package. */\nexport const studioAppManifestHeader = {\n id: STUDIO_APP_PACKAGE_ID,\n namespace: STUDIO_APP_NAMESPACE,\n version: STUDIO_APP_VERSION,\n type: 'plugin' as const,\n scope: 'system' as const,\n name: 'Studio',\n description: 'ObjectStack Studio — metadata builder app.',\n // Studio navigates platform metadata owned by plugin-auth; declare the\n // dependency so it loads after the auth objects are registered.\n dependencies: ['com.objectstack.plugin-auth'],\n};\n\n/**\n * Thin plugin that registers the Studio app manifest. Structurally typed\n * against the kernel `Plugin` contract (no compile-time kernel dependency),\n * exactly like `AuthPlugin`.\n */\nexport class StudioAppPlugin {\n readonly name = STUDIO_APP_PACKAGE_ID;\n readonly type = 'standard';\n readonly version = STUDIO_APP_VERSION;\n // Kernel plugin dependency is matched by plugin NAME (AuthPlugin.name =\n // 'com.objectstack.auth'), not by package id.\n readonly dependencies: string[] = ['com.objectstack.auth'];\n\n async init(_ctx: any): Promise<void> {\n // No-op: registration happens in start() once the manifest service exists.\n }\n\n async start(ctx: any): Promise<void> {\n const manifest = ctx?.getService?.('manifest');\n if (!manifest || typeof manifest.register !== 'function') return;\n manifest.register({\n ...studioAppManifestHeader,\n apps: [STUDIO_APP],\n // ADR-0046 package docs — grouped under \"Studio\" at /_console/docs.\n docs: [STUDIO_OVERVIEW_DOC],\n });\n }\n}\n\n/** Convenience factory mirroring the rest of the plugin ecosystem. */\nexport function createStudioAppPlugin(): StudioAppPlugin {\n return new StudioAppPlugin();\n}\n\nexport { STUDIO_APP };\nexport { STUDIO_OVERVIEW_DOC };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@objectstack/studio",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.5.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "ObjectStack Studio — the metadata builder app, packaged as its own ObjectStack app package (ADR-0048: one app per package).",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@objectstack/platform-objects": "9.
|
|
17
|
-
"@objectstack/spec": "9.
|
|
16
|
+
"@objectstack/platform-objects": "9.5.0",
|
|
17
|
+
"@objectstack/spec": "9.5.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/node": "^25.9.2",
|