@objectstack/cli 4.0.4 → 4.1.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.
Files changed (269) hide show
  1. package/README.md +44 -25
  2. package/dist/commands/build.d.ts +5 -0
  3. package/dist/commands/build.d.ts.map +1 -0
  4. package/dist/commands/build.js +6 -0
  5. package/dist/commands/build.js.map +1 -0
  6. package/dist/commands/cloud/login.d.ts +16 -0
  7. package/dist/commands/cloud/login.d.ts.map +1 -0
  8. package/dist/commands/cloud/login.js +166 -0
  9. package/dist/commands/cloud/login.js.map +1 -0
  10. package/dist/commands/cloud/logout.d.ts +15 -0
  11. package/dist/commands/cloud/logout.d.ts.map +1 -0
  12. package/dist/commands/cloud/logout.js +51 -0
  13. package/dist/commands/cloud/logout.js.map +1 -0
  14. package/dist/commands/cloud/whoami.d.ts +15 -0
  15. package/dist/commands/cloud/whoami.d.ts.map +1 -0
  16. package/dist/commands/cloud/whoami.js +81 -0
  17. package/dist/commands/cloud/whoami.js.map +1 -0
  18. package/dist/commands/compile.d.ts +3 -0
  19. package/dist/commands/compile.d.ts.map +1 -1
  20. package/dist/commands/compile.js +128 -6
  21. package/dist/commands/compile.js.map +1 -1
  22. package/dist/commands/create.js +1 -1
  23. package/dist/commands/data/create.js +2 -2
  24. package/dist/commands/data/create.js.map +1 -1
  25. package/dist/commands/data/delete.js +2 -2
  26. package/dist/commands/data/delete.js.map +1 -1
  27. package/dist/commands/data/get.js +2 -2
  28. package/dist/commands/data/get.js.map +1 -1
  29. package/dist/commands/data/query.js +2 -2
  30. package/dist/commands/data/query.js.map +1 -1
  31. package/dist/commands/data/update.js +2 -2
  32. package/dist/commands/data/update.js.map +1 -1
  33. package/dist/commands/dev.d.ts +9 -0
  34. package/dist/commands/dev.d.ts.map +1 -1
  35. package/dist/commands/dev.js +116 -22
  36. package/dist/commands/dev.js.map +1 -1
  37. package/dist/commands/generate.js +9 -9
  38. package/dist/commands/generate.js.map +1 -1
  39. package/dist/commands/i18n/check.d.ts +18 -0
  40. package/dist/commands/i18n/check.d.ts.map +1 -0
  41. package/dist/commands/i18n/check.js +153 -0
  42. package/dist/commands/i18n/check.js.map +1 -0
  43. package/dist/commands/init.js +2 -2
  44. package/dist/commands/lint.d.ts +3 -0
  45. package/dist/commands/lint.d.ts.map +1 -1
  46. package/dist/commands/lint.js +24 -0
  47. package/dist/commands/lint.js.map +1 -1
  48. package/dist/commands/login.d.ts +17 -0
  49. package/dist/commands/login.d.ts.map +1 -0
  50. package/dist/commands/login.js +313 -0
  51. package/dist/commands/login.js.map +1 -0
  52. package/dist/commands/logout.d.ts.map +1 -0
  53. package/dist/commands/{auth/logout.js → logout.js} +14 -2
  54. package/dist/commands/logout.js.map +1 -0
  55. package/dist/commands/meta/delete.js +2 -2
  56. package/dist/commands/meta/delete.js.map +1 -1
  57. package/dist/commands/meta/get.js +2 -2
  58. package/dist/commands/meta/get.js.map +1 -1
  59. package/dist/commands/meta/list.js +2 -2
  60. package/dist/commands/meta/list.js.map +1 -1
  61. package/dist/commands/meta/register.js +2 -2
  62. package/dist/commands/meta/register.js.map +1 -1
  63. package/dist/commands/package/publish.d.ts +32 -0
  64. package/dist/commands/package/publish.d.ts.map +1 -0
  65. package/dist/commands/package/publish.js +324 -0
  66. package/dist/commands/package/publish.js.map +1 -0
  67. package/dist/commands/projects/bind.d.ts +30 -0
  68. package/dist/commands/projects/bind.d.ts.map +1 -0
  69. package/dist/commands/projects/bind.js +132 -0
  70. package/dist/commands/projects/bind.js.map +1 -0
  71. package/dist/commands/projects/create.d.ts +28 -0
  72. package/dist/commands/projects/create.d.ts.map +1 -0
  73. package/dist/commands/projects/create.js +120 -0
  74. package/dist/commands/projects/create.js.map +1 -0
  75. package/dist/commands/projects/list.d.ts +21 -0
  76. package/dist/commands/projects/list.d.ts.map +1 -0
  77. package/dist/commands/projects/list.js +79 -0
  78. package/dist/commands/projects/list.js.map +1 -0
  79. package/dist/commands/projects/projects.test.d.ts +2 -0
  80. package/dist/commands/projects/projects.test.d.ts.map +1 -0
  81. package/dist/commands/projects/projects.test.js +56 -0
  82. package/dist/commands/projects/projects.test.js.map +1 -0
  83. package/dist/commands/projects/show.d.ts +21 -0
  84. package/dist/commands/projects/show.d.ts.map +1 -0
  85. package/dist/commands/projects/show.js +72 -0
  86. package/dist/commands/projects/show.js.map +1 -0
  87. package/dist/commands/projects/switch.d.ts +24 -0
  88. package/dist/commands/projects/switch.d.ts.map +1 -0
  89. package/dist/commands/projects/switch.js +64 -0
  90. package/dist/commands/projects/switch.js.map +1 -0
  91. package/dist/commands/publish.d.ts +17 -0
  92. package/dist/commands/publish.d.ts.map +1 -0
  93. package/dist/commands/publish.js +135 -0
  94. package/dist/commands/publish.js.map +1 -0
  95. package/dist/commands/{auth/login.d.ts → register.d.ts} +3 -2
  96. package/dist/commands/register.d.ts.map +1 -0
  97. package/dist/commands/{auth/login.js → register.js} +44 -61
  98. package/dist/commands/register.js.map +1 -0
  99. package/dist/commands/rollback.d.ts +13 -0
  100. package/dist/commands/rollback.d.ts.map +1 -0
  101. package/dist/commands/rollback.js +77 -0
  102. package/dist/commands/rollback.js.map +1 -0
  103. package/dist/commands/serve.d.ts +22 -0
  104. package/dist/commands/serve.d.ts.map +1 -1
  105. package/dist/commands/serve.js +1173 -58
  106. package/dist/commands/serve.js.map +1 -1
  107. package/dist/commands/start.d.ts +18 -0
  108. package/dist/commands/start.d.ts.map +1 -0
  109. package/dist/commands/start.js +112 -0
  110. package/dist/commands/start.js.map +1 -0
  111. package/dist/commands/whoami.d.ts.map +1 -0
  112. package/dist/commands/{auth/whoami.js → whoami.js} +5 -5
  113. package/dist/commands/whoami.js.map +1 -0
  114. package/dist/index.d.ts +11 -4
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +14 -5
  117. package/dist/index.js.map +1 -1
  118. package/dist/utils/account.d.ts +31 -0
  119. package/dist/utils/account.d.ts.map +1 -0
  120. package/dist/utils/account.js +154 -0
  121. package/dist/utils/account.js.map +1 -0
  122. package/dist/utils/api-client.d.ts +10 -4
  123. package/dist/utils/api-client.d.ts.map +1 -1
  124. package/dist/utils/api-client.js +13 -7
  125. package/dist/utils/api-client.js.map +1 -1
  126. package/dist/utils/auth-config.d.ts +6 -0
  127. package/dist/utils/auth-config.d.ts.map +1 -1
  128. package/dist/utils/auth-config.js.map +1 -1
  129. package/dist/utils/auth-flows.d.ts +31 -0
  130. package/dist/utils/auth-flows.d.ts.map +1 -0
  131. package/dist/utils/auth-flows.js +151 -0
  132. package/dist/utils/auth-flows.js.map +1 -0
  133. package/dist/utils/build-runtime.d.ts +45 -0
  134. package/dist/utils/build-runtime.d.ts.map +1 -0
  135. package/dist/utils/build-runtime.js +154 -0
  136. package/dist/utils/build-runtime.js.map +1 -0
  137. package/dist/utils/cloud-config.d.ts +24 -0
  138. package/dist/utils/cloud-config.d.ts.map +1 -0
  139. package/dist/utils/cloud-config.js +75 -0
  140. package/dist/utils/cloud-config.js.map +1 -0
  141. package/dist/utils/config.d.ts.map +1 -1
  142. package/dist/utils/config.js +17 -2
  143. package/dist/utils/config.js.map +1 -1
  144. package/dist/utils/console.d.ts +33 -0
  145. package/dist/utils/console.d.ts.map +1 -0
  146. package/dist/utils/console.js +172 -0
  147. package/dist/utils/console.js.map +1 -0
  148. package/dist/utils/extract-hook-body.d.ts +13 -0
  149. package/dist/utils/extract-hook-body.d.ts.map +1 -0
  150. package/dist/utils/extract-hook-body.js +175 -0
  151. package/dist/utils/extract-hook-body.js.map +1 -0
  152. package/dist/utils/format.d.ts +8 -0
  153. package/dist/utils/format.d.ts.map +1 -1
  154. package/dist/utils/format.js +15 -2
  155. package/dist/utils/format.js.map +1 -1
  156. package/dist/utils/i18n-coverage.d.ts +61 -0
  157. package/dist/utils/i18n-coverage.d.ts.map +1 -0
  158. package/dist/utils/i18n-coverage.js +176 -0
  159. package/dist/utils/i18n-coverage.js.map +1 -0
  160. package/dist/utils/lower-callables.d.ts +17 -0
  161. package/dist/utils/lower-callables.d.ts.map +1 -0
  162. package/dist/utils/lower-callables.js +181 -0
  163. package/dist/utils/lower-callables.js.map +1 -0
  164. package/dist/utils/plugin-detection.d.ts +1 -0
  165. package/dist/utils/plugin-detection.d.ts.map +1 -1
  166. package/dist/utils/plugin-detection.js +41 -0
  167. package/dist/utils/plugin-detection.js.map +1 -1
  168. package/dist/utils/studio.d.ts +1 -0
  169. package/dist/utils/studio.d.ts.map +1 -1
  170. package/dist/utils/studio.js +24 -9
  171. package/dist/utils/studio.js.map +1 -1
  172. package/package.json +60 -22
  173. package/.turbo/turbo-build.log +0 -4
  174. package/CHANGELOG.md +0 -821
  175. package/bin/run-dev.js +0 -5
  176. package/dist/commands/auth/login.d.ts.map +0 -1
  177. package/dist/commands/auth/login.js.map +0 -1
  178. package/dist/commands/auth/logout.d.ts.map +0 -1
  179. package/dist/commands/auth/logout.js.map +0 -1
  180. package/dist/commands/auth/whoami.d.ts.map +0 -1
  181. package/dist/commands/auth/whoami.js.map +0 -1
  182. package/dist/commands/codemod/v2-to-v3.d.ts +0 -10
  183. package/dist/commands/codemod/v2-to-v3.d.ts.map +0 -1
  184. package/dist/commands/codemod/v2-to-v3.js +0 -145
  185. package/dist/commands/codemod/v2-to-v3.js.map +0 -1
  186. package/dist/commands/plugin/add.d.ts +0 -22
  187. package/dist/commands/plugin/add.d.ts.map +0 -1
  188. package/dist/commands/plugin/add.js +0 -93
  189. package/dist/commands/plugin/add.js.map +0 -1
  190. package/dist/commands/plugin/build.d.ts +0 -29
  191. package/dist/commands/plugin/build.d.ts.map +0 -1
  192. package/dist/commands/plugin/build.js +0 -170
  193. package/dist/commands/plugin/build.js.map +0 -1
  194. package/dist/commands/plugin/info.d.ts +0 -10
  195. package/dist/commands/plugin/info.d.ts.map +0 -1
  196. package/dist/commands/plugin/info.js +0 -65
  197. package/dist/commands/plugin/info.js.map +0 -1
  198. package/dist/commands/plugin/list.d.ts +0 -13
  199. package/dist/commands/plugin/list.d.ts.map +0 -1
  200. package/dist/commands/plugin/list.js +0 -78
  201. package/dist/commands/plugin/list.js.map +0 -1
  202. package/dist/commands/plugin/publish.d.ts +0 -27
  203. package/dist/commands/plugin/publish.d.ts.map +0 -1
  204. package/dist/commands/plugin/publish.js +0 -152
  205. package/dist/commands/plugin/publish.js.map +0 -1
  206. package/dist/commands/plugin/remove.d.ts +0 -20
  207. package/dist/commands/plugin/remove.d.ts.map +0 -1
  208. package/dist/commands/plugin/remove.js +0 -79
  209. package/dist/commands/plugin/remove.js.map +0 -1
  210. package/dist/commands/plugin/validate.d.ts +0 -23
  211. package/dist/commands/plugin/validate.d.ts.map +0 -1
  212. package/dist/commands/plugin/validate.js +0 -251
  213. package/dist/commands/plugin/validate.js.map +0 -1
  214. package/src/bin.ts +0 -13
  215. package/src/commands/auth/login.ts +0 -188
  216. package/src/commands/auth/logout.ts +0 -51
  217. package/src/commands/auth/whoami.ts +0 -85
  218. package/src/commands/codemod/v2-to-v3.ts +0 -171
  219. package/src/commands/compile.ts +0 -114
  220. package/src/commands/create.ts +0 -281
  221. package/src/commands/data/create.ts +0 -110
  222. package/src/commands/data/delete.ts +0 -84
  223. package/src/commands/data/get.ts +0 -84
  224. package/src/commands/data/query.ts +0 -127
  225. package/src/commands/data/update.ts +0 -114
  226. package/src/commands/dev.ts +0 -83
  227. package/src/commands/diff.ts +0 -294
  228. package/src/commands/doctor.ts +0 -572
  229. package/src/commands/explain.ts +0 -412
  230. package/src/commands/generate.ts +0 -924
  231. package/src/commands/info.ts +0 -124
  232. package/src/commands/init.ts +0 -327
  233. package/src/commands/lint.ts +0 -315
  234. package/src/commands/meta/delete.ts +0 -79
  235. package/src/commands/meta/get.ts +0 -73
  236. package/src/commands/meta/list.ts +0 -105
  237. package/src/commands/meta/register.ts +0 -97
  238. package/src/commands/plugin/add.ts +0 -112
  239. package/src/commands/plugin/build.ts +0 -193
  240. package/src/commands/plugin/info.ts +0 -79
  241. package/src/commands/plugin/list.ts +0 -93
  242. package/src/commands/plugin/publish.ts +0 -176
  243. package/src/commands/plugin/remove.ts +0 -97
  244. package/src/commands/plugin/validate.ts +0 -268
  245. package/src/commands/serve.ts +0 -411
  246. package/src/commands/studio.ts +0 -52
  247. package/src/commands/test.ts +0 -135
  248. package/src/commands/validate.ts +0 -143
  249. package/src/index.ts +0 -22
  250. package/src/utils/api-client.ts +0 -88
  251. package/src/utils/auth-config.ts +0 -107
  252. package/src/utils/config.ts +0 -80
  253. package/src/utils/format.ts +0 -267
  254. package/src/utils/output-formatter.ts +0 -91
  255. package/src/utils/plugin-detection.ts +0 -16
  256. package/src/utils/plugin-helpers.ts +0 -37
  257. package/src/utils/studio.ts +0 -350
  258. package/test/commands.test.ts +0 -128
  259. package/test/create.test.ts +0 -25
  260. package/test/plugin-commands.test.ts +0 -44
  261. package/test/plugin.test.ts +0 -169
  262. package/test/remote-api-commands.test.ts +0 -188
  263. package/test/remote-api-utils.test.ts +0 -196
  264. package/test/serve-host-config.test.ts +0 -77
  265. package/tsconfig.build.json +0 -20
  266. package/tsconfig.json +0 -25
  267. package/tsup.config.ts +0 -23
  268. /package/dist/commands/{auth/logout.d.ts → logout.d.ts} +0 -0
  269. /package/dist/commands/{auth/whoami.d.ts → whoami.d.ts} +0 -0
@@ -0,0 +1,324 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ /**
3
+ * `objectstack package publish` — upload a compiled artifact as a versioned
4
+ * package into the caller's organization on ObjectStack Cloud.
5
+ *
6
+ * Flow (ADR-0006 v4 Phase B):
7
+ * 1. POST /cloud/packages — ensure a sys_package row exists
8
+ * keyed by manifest_id. owner_org_id is derived from the caller's
9
+ * active organization (user mode) or supplied via --org (service mode).
10
+ * 2. POST /cloud/packages/:id/versions — snapshot dist/objectstack.json
11
+ * into sys_package_version.manifest_json (status=published).
12
+ * 3. (optional) auto-install into a target environment via --env.
13
+ *
14
+ * This is the "upload my local code to my org" path. It does NOT write
15
+ * sys_environment_revision (that's the legacy `objectstack publish` path,
16
+ * which still exists for backward compatibility while ADR-0006 v4 Phase B
17
+ * transitions complete).
18
+ */
19
+ import { readFile } from 'node:fs/promises';
20
+ import { resolve as resolvePath, basename } from 'node:path';
21
+ import { Args, Command, Flags } from '@oclif/core';
22
+ import { printHeader, printKV, printSuccess, printError, printStep } from '../../utils/format.js';
23
+ import { DEFAULT_CLOUD_URL, tryReadCloudConfig } from '../../utils/cloud-config.js';
24
+ const MANIFEST_ID_RE = /^[a-z0-9][a-z0-9._-]{0,254}$/i;
25
+ function slugify(input) {
26
+ return input
27
+ .toLowerCase()
28
+ .replace(/[^a-z0-9]+/g, '-')
29
+ .replace(/^-+|-+$/g, '')
30
+ .slice(0, 64) || 'app';
31
+ }
32
+ /**
33
+ * Derive a reverse-domain manifest_id when the user hasn't passed --manifest-id.
34
+ * Order of precedence:
35
+ * 1. artifact.manifest.id (if it looks like a reverse-domain id)
36
+ * 2. local.<artifact.manifest.name slug>
37
+ * 3. local.<artifact filename without extension>
38
+ */
39
+ function deriveManifestId(artifact, artifactPath) {
40
+ const explicit = artifact?.manifest?.id;
41
+ if (typeof explicit === 'string' && MANIFEST_ID_RE.test(explicit) && explicit.includes('.')) {
42
+ return explicit;
43
+ }
44
+ const name = artifact?.manifest?.name;
45
+ if (typeof name === 'string' && name.trim()) {
46
+ return `local.${slugify(name)}`;
47
+ }
48
+ return `local.${slugify(basename(artifactPath).replace(/\.json$/i, ''))}`;
49
+ }
50
+ function deriveDisplayName(artifact, manifestId) {
51
+ const n = artifact?.manifest?.name;
52
+ if (typeof n === 'string' && n.trim())
53
+ return n.trim();
54
+ return manifestId;
55
+ }
56
+ function deriveVersion(artifact, fallback) {
57
+ if (fallback)
58
+ return fallback;
59
+ const v = artifact?.manifest?.version;
60
+ if (typeof v === 'string' && v.trim())
61
+ return v.trim();
62
+ // Generate a timestamped pre-release as a last resort so users can publish
63
+ // without bumping manifest.version every time during early iteration.
64
+ const t = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
65
+ return `0.0.0-dev.${t}`;
66
+ }
67
+ export default class PackagePublish extends Command {
68
+ static description = 'Publish a compiled artifact as a versioned package in your organization (ADR-0006 v4 Phase B)';
69
+ static examples = [
70
+ '$ os package publish',
71
+ '$ os package publish --manifest-id com.acme.crm --version 1.2.0',
72
+ '$ os package publish --env env_abc123 --install',
73
+ '$ os package publish dist/objectstack.json --visibility org --note "first cut"',
74
+ '$ OS_CLOUD_URL=http://localhost:4000 os package publish # local dev (apps/cloud)',
75
+ ];
76
+ static args = {
77
+ artifact: Args.string({
78
+ description: 'Path to the compiled artifact (default: dist/objectstack.json)',
79
+ required: false,
80
+ }),
81
+ };
82
+ static flags = {
83
+ server: Flags.string({
84
+ char: 's',
85
+ description: 'ObjectStack Cloud control-plane URL (override for self-hosted registries)',
86
+ env: 'OS_CLOUD_URL',
87
+ default: DEFAULT_CLOUD_URL,
88
+ }),
89
+ token: Flags.string({
90
+ char: 't',
91
+ description: 'API key for ObjectStack Cloud (bearer token; defaults to OS_CLOUD_API_KEY / OS_TOKEN)',
92
+ env: 'OS_CLOUD_API_KEY',
93
+ }),
94
+ 'manifest-id': Flags.string({
95
+ description: 'Reverse-domain package id (e.g. com.acme.crm). Default: derived from artifact.manifest.id or name.',
96
+ env: 'OS_PACKAGE_MANIFEST_ID',
97
+ }),
98
+ version: Flags.string({
99
+ char: 'v',
100
+ description: 'Semver version (default: artifact.manifest.version or 0.0.0-dev.<timestamp>)',
101
+ }),
102
+ 'display-name': Flags.string({
103
+ description: 'Human-readable name shown in the Marketplace (default: artifact.manifest.name)',
104
+ }),
105
+ description: Flags.string({
106
+ description: 'Short package description',
107
+ }),
108
+ category: Flags.string({
109
+ description: 'Marketplace category slug (e.g. crm, hr, devtools)',
110
+ }),
111
+ visibility: Flags.string({
112
+ description: 'Who can see / install this package',
113
+ options: ['private', 'org', 'marketplace'],
114
+ default: 'private',
115
+ }),
116
+ org: Flags.string({
117
+ description: 'owner_org_id (required when using a bearer key in service mode; ignored in user mode)',
118
+ env: 'OS_ORG_ID',
119
+ }),
120
+ env: Flags.string({
121
+ description: 'Environment id to install the new version into after publish',
122
+ env: 'OS_ENVIRONMENT_ID',
123
+ }),
124
+ install: Flags.boolean({
125
+ description: 'Auto-install the new version into --env after publishing',
126
+ default: false,
127
+ }),
128
+ 'seed-sample-data': Flags.boolean({
129
+ description: 'Include sample data when auto-installing',
130
+ default: false,
131
+ }),
132
+ 'pre-release': Flags.boolean({
133
+ description: 'Mark this version as a pre-release',
134
+ default: false,
135
+ }),
136
+ note: Flags.string({
137
+ char: 'n',
138
+ description: 'Release notes (markdown ok)',
139
+ }),
140
+ timeout: Flags.integer({
141
+ description: 'HTTP timeout in milliseconds (0 disables)',
142
+ env: 'OS_CLOUD_TIMEOUT_MS',
143
+ default: 120_000,
144
+ }),
145
+ };
146
+ async run() {
147
+ const { args, flags } = await this.parse(PackagePublish);
148
+ printHeader('Publish Package');
149
+ try {
150
+ const artifactPath = args.artifact
151
+ ? resolvePath(process.cwd(), args.artifact)
152
+ : resolvePath(process.cwd(), 'dist/objectstack.json');
153
+ printStep(`Loading artifact from ${artifactPath}...`);
154
+ let artifactRaw;
155
+ try {
156
+ artifactRaw = await readFile(artifactPath, 'utf-8');
157
+ }
158
+ catch (err) {
159
+ printError(`Cannot read artifact: ${err.message}. Run \`objectstack build\` first.`);
160
+ this.exit(1);
161
+ return;
162
+ }
163
+ let artifact;
164
+ try {
165
+ artifact = JSON.parse(artifactRaw);
166
+ }
167
+ catch (err) {
168
+ printError(`Artifact is not valid JSON: ${err.message}`);
169
+ this.exit(1);
170
+ return;
171
+ }
172
+ printSuccess(`Loaded artifact (${(artifactRaw.length / 1024).toFixed(1)} KB)`);
173
+ const manifestId = (flags['manifest-id'] ?? deriveManifestId(artifact, artifactPath)).trim();
174
+ if (!MANIFEST_ID_RE.test(manifestId)) {
175
+ printError(`Invalid manifest-id '${manifestId}'. Expected reverse-domain form like 'com.acme.crm' (a-z0-9._-).`);
176
+ this.exit(1);
177
+ return;
178
+ }
179
+ const displayName = (flags['display-name'] ?? deriveDisplayName(artifact, manifestId)).trim();
180
+ const version = deriveVersion(artifact, flags.version);
181
+ // Resolve auth + server URL. Credential precedence:
182
+ // 1. explicit --token flag (or $OS_TOKEN env)
183
+ // 2. ~/.objectstack/cloud.json (written by `os cloud login`)
184
+ // 3. fail with a clear "run `os cloud login`" message
185
+ //
186
+ // Server URL precedence:
187
+ // 1. explicit --server flag (or $OS_CLOUD_URL env)
188
+ // 2. cloud.json's recorded url
189
+ // 3. https://cloud.objectos.app (DEFAULT_CLOUD_URL)
190
+ //
191
+ // Note: we deliberately do NOT fall back to ~/.objectstack/credentials.json
192
+ // (the *runtime* identity, written by `os login`). Publishing a package
193
+ // and managing a local ObjectOS instance are two distinct identities —
194
+ // see `os cloud login` for the cloud identity.
195
+ let token = flags.token ?? process.env.OS_TOKEN ?? undefined;
196
+ let baseUrl = flags.server.replace(/\/+$/, '');
197
+ const serverFlagWasDefault = !process.env.OS_CLOUD_URL && baseUrl === DEFAULT_CLOUD_URL;
198
+ if (!token || serverFlagWasDefault) {
199
+ const stored = await tryReadCloudConfig();
200
+ if (!token && stored?.token)
201
+ token = stored.token;
202
+ if (serverFlagWasDefault && stored?.url)
203
+ baseUrl = stored.url.replace(/\/+$/, '');
204
+ }
205
+ if (!token) {
206
+ printError('Not logged in to ObjectStack Cloud. Run `os cloud login` first, or pass --token / set $OS_TOKEN.');
207
+ this.exit(1);
208
+ return;
209
+ }
210
+ // ---- Step 1: ensure sys_package row ---------------------------------
211
+ printStep(`Registering package '${manifestId}'...`);
212
+ const pkgBody = {
213
+ manifest_id: manifestId,
214
+ display_name: displayName,
215
+ visibility: flags.visibility,
216
+ };
217
+ if (flags.description)
218
+ pkgBody.description = flags.description;
219
+ if (flags.category)
220
+ pkgBody.category = flags.category;
221
+ if (flags.org)
222
+ pkgBody.owner_org_id = flags.org;
223
+ const pkgRes = await this.postJson(`${baseUrl}/api/v1/cloud/packages`, pkgBody, token, flags.timeout);
224
+ if (!pkgRes.ok) {
225
+ printError(`Register package failed (${pkgRes.status}): ${pkgRes.error}`);
226
+ this.exit(1);
227
+ return;
228
+ }
229
+ const pkg = pkgRes.body?.data ?? pkgRes.body;
230
+ printSuccess(`${pkg?.created ? 'Created' : 'Updated'} sys_package ${pkg?.id} (${manifestId})`);
231
+ // ---- Step 2: create sys_package_version -----------------------------
232
+ printStep(`Publishing version ${version}...`);
233
+ const verBody = {
234
+ version,
235
+ bundle: artifact,
236
+ is_pre_release: flags['pre-release'] || /-(alpha|beta|rc|dev|preview|staging|pr)/i.test(version),
237
+ };
238
+ if (flags.note)
239
+ verBody.release_notes = flags.note;
240
+ const shouldInstall = flags.install && flags.env;
241
+ if (shouldInstall) {
242
+ verBody.install_env_id = flags.env;
243
+ verBody.seed_sample_data = flags['seed-sample-data'];
244
+ }
245
+ else if (flags.install && !flags.env) {
246
+ printError('`--install` requires `--env <id>`. Skipping auto-install.');
247
+ }
248
+ const verRes = await this.postJson(`${baseUrl}/api/v1/cloud/packages/${encodeURIComponent(pkg.id)}/versions`, verBody, token, flags.timeout);
249
+ if (!verRes.ok) {
250
+ printError(`Publish version failed (${verRes.status}): ${verRes.error}`);
251
+ this.exit(1);
252
+ return;
253
+ }
254
+ const ver = verRes.body?.data ?? verRes.body;
255
+ console.log('');
256
+ printSuccess('Package published');
257
+ printKV(' Package', manifestId);
258
+ printKV(' Package ID', String(pkg?.id ?? '—'));
259
+ printKV(' Version', String(ver?.version ?? version));
260
+ printKV(' Version ID', String(ver?.id ?? '—'));
261
+ if (ver?.checksum)
262
+ printKV(' Checksum', String(ver.checksum).slice(0, 16));
263
+ printKV(' Visibility', String(pkg?.visibility ?? flags.visibility));
264
+ if (pkg?.owner_org_id)
265
+ printKV(' Owner Org', String(pkg.owner_org_id));
266
+ if (ver?.installation) {
267
+ console.log('');
268
+ printSuccess('Installed into environment');
269
+ printKV(' Environment', String(ver.installation.environment_id ?? flags.env ?? '—'));
270
+ printKV(' Installation', String(ver.installation.installation_id ?? '—'));
271
+ }
272
+ printKV(' Server', baseUrl);
273
+ }
274
+ catch (error) {
275
+ printError(error.message);
276
+ this.exit(1);
277
+ }
278
+ }
279
+ /**
280
+ * Tiny fetch wrapper that returns a normalised envelope so the command
281
+ * body can stay flat. Honours an AbortController timeout.
282
+ */
283
+ async postJson(url, body, token, timeoutMs) {
284
+ const controller = new AbortController();
285
+ const timer = timeoutMs > 0 ? setTimeout(() => controller.abort(), timeoutMs) : undefined;
286
+ try {
287
+ const response = await fetch(url, {
288
+ method: 'POST',
289
+ headers: {
290
+ 'Content-Type': 'application/json',
291
+ ...(token ? { Authorization: `Bearer ${token}` } : {}),
292
+ },
293
+ body: JSON.stringify(body),
294
+ signal: controller.signal,
295
+ });
296
+ let parsed = null;
297
+ try {
298
+ parsed = await response.json();
299
+ }
300
+ catch { /* empty/non-json */ }
301
+ if (!response.ok) {
302
+ const errMsg = parsed?.error ?? response.statusText ?? `HTTP ${response.status}`;
303
+ return { ok: false, status: response.status, body: parsed, error: String(errMsg) };
304
+ }
305
+ return { ok: true, status: response.status, body: parsed };
306
+ }
307
+ catch (err) {
308
+ if (err?.name === 'AbortError') {
309
+ return {
310
+ ok: false,
311
+ status: 0,
312
+ body: null,
313
+ error: `Request timed out after ${timeoutMs}ms. Use --timeout <ms> to extend it (0 disables).`,
314
+ };
315
+ }
316
+ return { ok: false, status: 0, body: null, error: err?.message ?? String(err) };
317
+ }
318
+ finally {
319
+ if (timer)
320
+ clearTimeout(timer);
321
+ }
322
+ }
323
+ }
324
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/package/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * `os projects bind` — bind a locally-compiled artifact to an existing
4
+ * multi-project server project.
5
+ *
6
+ * Equivalent to `PATCH /api/v1/cloud/projects/<id>` with
7
+ * `metadata.artifact_path = <absolute-path>`. The server's
8
+ * AppBundleResolver picks up the path on the next per-project kernel
9
+ * boot, registering the bundle's objects, views, and seed data.
10
+ *
11
+ * Use `--build` to compile `objectstack.config.ts` first so the artifact
12
+ * reflects the latest source.
13
+ */
14
+ export default class ProjectsBind extends Command {
15
+ static description: string;
16
+ static examples: string[];
17
+ static args: {
18
+ projectId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
19
+ };
20
+ static flags: {
21
+ url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ artifact: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ build: import("@oclif/core/interfaces").BooleanFlag<boolean>;
25
+ reseed: import("@oclif/core/interfaces").BooleanFlag<boolean>;
26
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
27
+ };
28
+ run(): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=bind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/bind.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAQnD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,OAAgB,WAAW,SAA8D;IAEzF,OAAgB,QAAQ,WAItB;IAEF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;;;;;MAoBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuF3B"}
@@ -0,0 +1,132 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Command, Flags, Args } from '@oclif/core';
3
+ import path from 'node:path';
4
+ import fs from 'node:fs/promises';
5
+ import { spawnSync } from 'node:child_process';
6
+ import { printError, printStep, printKV } from '../../utils/format.js';
7
+ import { createApiClient, requireAuth } from '../../utils/api-client.js';
8
+ import { formatOutput } from '../../utils/output-formatter.js';
9
+ /**
10
+ * `os projects bind` — bind a locally-compiled artifact to an existing
11
+ * multi-project server project.
12
+ *
13
+ * Equivalent to `PATCH /api/v1/cloud/projects/<id>` with
14
+ * `metadata.artifact_path = <absolute-path>`. The server's
15
+ * AppBundleResolver picks up the path on the next per-project kernel
16
+ * boot, registering the bundle's objects, views, and seed data.
17
+ *
18
+ * Use `--build` to compile `objectstack.config.ts` first so the artifact
19
+ * reflects the latest source.
20
+ */
21
+ export default class ProjectsBind extends Command {
22
+ static description = 'Bind a local objectstack artifact to an existing project';
23
+ static examples = [
24
+ '$ os projects bind <project-id> --artifact ./dist/objectstack.json',
25
+ '$ os projects bind <project-id> --artifact ./dist/objectstack.json --build',
26
+ '$ os projects bind <project-id> --reseed',
27
+ ];
28
+ static args = {
29
+ projectId: Args.string({
30
+ description: 'Target project id (UUID)',
31
+ required: true,
32
+ }),
33
+ };
34
+ static flags = {
35
+ url: Flags.string({ char: 'u', description: 'Server URL', env: 'OS_CLOUD_URL' }),
36
+ token: Flags.string({ char: 't', description: 'Authentication token', env: 'OS_TOKEN' }),
37
+ artifact: Flags.string({
38
+ description: 'Path to a compiled objectstack.json artifact (default: ./dist/objectstack.json)',
39
+ }),
40
+ build: Flags.boolean({
41
+ description: 'Run `objectstack compile` before binding',
42
+ default: false,
43
+ }),
44
+ reseed: Flags.boolean({
45
+ description: 'After binding, also re-run schema sync + bundle seeding via /cloud/projects/:id/reseed',
46
+ default: false,
47
+ }),
48
+ format: Flags.string({
49
+ char: 'f',
50
+ description: 'Output format',
51
+ options: ['json', 'table', 'yaml'],
52
+ default: 'table',
53
+ }),
54
+ };
55
+ async run() {
56
+ const { args, flags } = await this.parse(ProjectsBind);
57
+ try {
58
+ const artifactRel = flags.artifact ?? './dist/objectstack.json';
59
+ const artifactAbs = path.isAbsolute(artifactRel)
60
+ ? artifactRel
61
+ : path.resolve(process.cwd(), artifactRel);
62
+ if (flags.build) {
63
+ printStep('Compiling objectstack.config.ts → ' + artifactAbs);
64
+ const binPath = process.argv[1];
65
+ const r = spawnSync(process.execPath, [binPath, 'compile', '--output', artifactAbs], { stdio: 'inherit', env: { ...process.env, NODE_ENV: 'development' } });
66
+ if (r.status !== 0) {
67
+ printError('Compile failed — fix errors above before binding');
68
+ this.exit(1);
69
+ }
70
+ }
71
+ try {
72
+ await fs.access(artifactAbs);
73
+ }
74
+ catch {
75
+ printError(`Artifact not found: ${artifactAbs}`);
76
+ if (!flags.build) {
77
+ console.error(' Hint: pass --build to compile first, or check the path with --artifact.');
78
+ }
79
+ this.exit(1);
80
+ }
81
+ const { client, token } = await createApiClient({ url: flags.url, token: flags.token });
82
+ requireAuth(token);
83
+ // Fetch existing metadata so we don't blow it away.
84
+ const current = await client.projects.get(args.projectId);
85
+ const existingMeta = (current?.project?.metadata && typeof current.project.metadata === 'object')
86
+ ? { ...current.project.metadata }
87
+ : {};
88
+ // Drop the prior bind error so the UI doesn't show a stale failure.
89
+ delete existingMeta.artifactBindError;
90
+ existingMeta.artifact_path = artifactAbs;
91
+ printKV('Project', args.projectId, '🎯');
92
+ printKV('Artifact', artifactAbs, '📦');
93
+ const res = await client.projects.update(args.projectId, {
94
+ metadata: existingMeta,
95
+ });
96
+ if (flags.reseed) {
97
+ printStep('Reseeding bundle (POST /cloud/projects/:id/reseed)…');
98
+ try {
99
+ // Best-effort: server may not expose a reseed endpoint yet.
100
+ const reseed = await client.fetch?.(`${client.baseUrl}/api/v1/cloud/projects/${encodeURIComponent(args.projectId)}/reseed`, { method: 'POST' });
101
+ if (reseed && typeof reseed.ok === 'boolean' && !reseed.ok) {
102
+ console.error(' ⚠ reseed endpoint returned ' + reseed.status + ' — bundle will be applied on next kernel boot.');
103
+ }
104
+ }
105
+ catch (e) {
106
+ console.error(' ⚠ reseed failed: ' + (e?.message ?? e) + ' — bundle will be applied on next kernel boot.');
107
+ }
108
+ }
109
+ if (flags.format === 'json') {
110
+ formatOutput(res, 'json');
111
+ }
112
+ else if (flags.format === 'yaml') {
113
+ formatOutput(res, 'yaml');
114
+ }
115
+ else {
116
+ console.log(`\n✓ Project bound to artifact`);
117
+ console.log(` ${args.projectId} → ${artifactAbs}`);
118
+ console.log(` The next request to this project will load the new bundle.`);
119
+ console.log('');
120
+ }
121
+ }
122
+ catch (error) {
123
+ if (flags.format === 'json') {
124
+ console.log(JSON.stringify({ success: false, error: error.message }, null, 2));
125
+ this.exit(1);
126
+ }
127
+ printError(error.message || String(error));
128
+ this.exit(1);
129
+ }
130
+ }
131
+ }
132
+ //# sourceMappingURL=bind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.js","sourceRoot":"","sources":["../../../src/commands/projects/bind.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * `os projects create` — provision a new project.
4
+ *
5
+ * Delegates to `ProjectProvisioningService.provisionProject` on the server.
6
+ * On success, optionally activates the new project for the current session
7
+ * and persists `activeProjectId` into `~/.objectstack/credentials.json`
8
+ * (unless `--no-activate` is passed).
9
+ */
10
+ export default class ProjectsCreate extends Command {
11
+ static description: string;
12
+ static examples: string[];
13
+ static flags: {
14
+ url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ org: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
+ name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
+ plan: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
19
+ driver: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ template: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ artifact: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ 'clone-from': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ activate: import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
25
+ };
26
+ run(): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/projects/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAM7C;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,OAAO;IACjD,OAAgB,WAAW,SAA6B;IAExD,OAAgB,QAAQ,WAKtB;IAEF,OAAgB,KAAK;;;;;;;;;;;;MAuBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwE3B"}