@somewhere-cloud/cli 0.38.14 → 0.38.16

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.
@@ -1 +1 @@
1
- {"version":3,"file":"init-green-template.js","sourceRoot":"","sources":["../../src/lib/init-green-template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBpB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;CAchB,CAAC;AAEF,MAAM,SAAS,GAAG;;;CAGjB,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;CAUd,CAAC;AAEF,MAAM,GAAG,GAAG;;;;;;;;CAQX,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;;;CAOf,CAAC;AAEF,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBX,CAAC;AAEF,MAAM,IAAI,GAAG;;;;;;;;;;CAUZ,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;CAcd,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCd,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,yJAAyJ,EAAE;QAC1L,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE;QAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE;QAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE;QACtC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE;QAC/C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC5C;YACE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,oUAAoU;SAC9U;QACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE;QACrC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE;QACvC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE;QACtD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE;QAC3C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE;QACzC,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,2EAA2E,EAAE;QACvH,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE;QACzC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;KAC7C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"init-green-template.js","sourceRoot":"","sources":["../../src/lib/init-green-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;+BAeU,WAAW;;;;;;;CAOzC,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;CAchB,CAAC;AAEF,MAAM,SAAS,GAAG;;;CAGjB,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;CAUd,CAAC;AAEF,MAAM,GAAG,GAAG;;;;;;;;CAQX,CAAC;AAEF,MAAM,OAAO,GAAG;;;;;;;CAOf,CAAC;AAEF,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBX,CAAC;AAEF,MAAM,IAAI,GAAG;;;;;;;;;;CAUZ,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;CAcd,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCd,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,yJAAyJ,EAAE;QAC1L,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE;QAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE;QAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE;QACtC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE;QAC/C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC5C;YACE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,oUAAoU;SAC9U;QACD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE;QACrC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE;QACvC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE;QACtD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE;QAC3C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE;QACzC,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,2EAA2E,EAAE;QACvH,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE;QACzC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;KAC7C,CAAC;AACJ,CAAC"}
@@ -296,7 +296,7 @@ code, kbd { font-family: var(--font-mono); font-size: 0.9em; }
296
296
  .notice--danger { border-left-color: var(--color-danger); }
297
297
  .notice__actions { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; }
298
298
 
299
- /* Legacy alert from feedback.tsx; Notice is preferred for new code. */
299
+ /* Alert from feedback.tsx; Notice is preferred for new code. */
300
300
  .alert { display: flex; flex-wrap: wrap; gap: var(--space-3); align-items: center; justify-content: space-between; padding: var(--space-3) var(--space-4); border: 1px solid var(--color-danger); border-radius: var(--radius-control); color: var(--color-danger); background: var(--color-surface); }
301
301
  .alert p { margin: 0; }
302
302
 
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Close the loop on a release whose blank-page check runs after the deploy
3
+ * answered (tsk_b9507144).
4
+ *
5
+ * A release that can be undone by moving the live pointer answers before its
6
+ * browser check, with post_live_render: { status: 'pending' }. The check takes
7
+ * 0.7-2.8 s and rolls a blank page back. The CLI waits for it, up to
8
+ * POST_LIVE_RENDER_WAIT_MS, by reading GET /deploy/log?release_id=:
9
+ * - settled and passed: the deploy result gains that blank_page_check;
10
+ * - rendered blank: the platform returns the same DEPLOY_BLANK_PAGE body a
11
+ * gated first deploy answers with, raised here as that same error;
12
+ * - not settled in time: the deploy is live and the line below says the
13
+ * check is still running.
14
+ */
15
+ import { CliApiError } from './client.js';
16
+ export const POST_LIVE_RENDER_WAIT_MS = 5000;
17
+ export const POST_LIVE_RENDER_POLL_MS = 400;
18
+ export const POST_LIVE_RENDER_STILL_RUNNING = 'live; blank-page check still running, see the deploy log';
19
+ /** Wait for a pending render check. Throws the DEPLOY_BLANK_PAGE CliApiError
20
+ * when the release rendered blank. A read that fails is retried until the
21
+ * deadline; never success by default. */
22
+ export async function awaitPostLiveRender(client, projectId, result, opts = {}) {
23
+ if (result.post_live_render?.status !== 'pending' || !result.release_id || !projectId)
24
+ return { kind: 'not_pending' };
25
+ const now = opts.now ?? Date.now;
26
+ const sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
27
+ const pollMs = opts.pollMs ?? POST_LIVE_RENDER_POLL_MS;
28
+ const deadline = now() + (opts.waitMs ?? POST_LIVE_RENDER_WAIT_MS);
29
+ while (now() < deadline) {
30
+ await sleep(Math.min(pollMs, Math.max(0, deadline - now())));
31
+ let read;
32
+ try {
33
+ read = await client.call('GET', '/deploy/log', undefined, { project_id: projectId, release_id: result.release_id }, { timeoutMs: Math.max(1000, deadline - now()) });
34
+ }
35
+ catch {
36
+ continue;
37
+ }
38
+ if (read?.rejection?.error) {
39
+ const r = read.rejection;
40
+ throw new CliApiError(r.error, r.message ?? 'The page rendered blank.', 400, r.data, r.hint);
41
+ }
42
+ const record = read?.post_live_render;
43
+ if (record && record.status !== 'pending') {
44
+ return { kind: 'settled', post_live_render: record, blank_page_check: read.blank_page_check ?? record.blank_page_check ?? null };
45
+ }
46
+ }
47
+ return { kind: 'timeout' };
48
+ }
49
+ //# sourceMappingURL=post-live-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-live-render.js","sourceRoot":"","sources":["../../src/lib/post-live-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAE1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,8BAA8B,GAAG,0DAA0D,CAAC;AAqBzG;;0CAE0C;AAC1C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA+B,EAC/B,SAA6B,EAC7B,MAA8E,EAC9E,OAAwG,EAAE;IAE1G,IAAI,MAAM,CAAC,gBAAgB,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACtH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC;IACvD,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,CAAC;IACnE,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,IAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAoB,KAAK,EAAE,aAAa,EAAE,SAAS,EACzE,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACzB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,KAAM,EAAE,CAAC,CAAC,OAAO,IAAI,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,EAAE,gBAAgB,CAAC;QACtC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;QACnI,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,164 @@
1
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import semver from 'semver';
5
+ /**
6
+ * A project records the CLI version it was built with, the way an npm project
7
+ * records any dependency (tsk_a4641877). Getting a newer CLI is then a
8
+ * deliberate `somewhere upgrade`, not whatever `npx …@latest` fetched today.
9
+ *
10
+ * Where the pin lives, read in this order (the first one found is the pin):
11
+ * package.json devDependencies (or dependencies) "@somewhere-cloud/cli"
12
+ * — what `somewhere init` writes into a new starter
13
+ * .somewhere.json "cli_version" — for a linked folder whose package.json
14
+ * does not declare the CLI (or that has none): written by
15
+ * init --bare/link and by the first deploy, never into a
16
+ * package.json the CLI did not write (a devDependency added
17
+ * behind a lockfile would break the owner's `npm ci`).
18
+ */
19
+ export const CLI_PACKAGE_NAME = '@somewhere-cloud/cli';
20
+ export const PIN_FILE_KEY = 'cli_version';
21
+ function readJson(path) {
22
+ if (!existsSync(path))
23
+ return null;
24
+ try {
25
+ const value = JSON.parse(readFileSync(path, 'utf8'));
26
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : null;
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ function packageJsonSpec(pkg) {
33
+ for (const section of ['devDependencies', 'dependencies']) {
34
+ const deps = pkg?.[section];
35
+ if (deps && typeof deps === 'object' && !Array.isArray(deps)) {
36
+ const spec = deps[CLI_PACKAGE_NAME];
37
+ if (typeof spec === 'string' && spec.trim())
38
+ return spec.trim();
39
+ }
40
+ }
41
+ return null;
42
+ }
43
+ /** Every place this folder records a CLI version, in precedence order. */
44
+ export function readProjectPins(dir) {
45
+ const pins = [];
46
+ const fromPackage = packageJsonSpec(readJson(join(dir, 'package.json')));
47
+ if (fromPackage)
48
+ pins.push({ spec: fromPackage, source: 'package.json' });
49
+ const recorded = readJson(join(dir, '.somewhere.json'))?.[PIN_FILE_KEY];
50
+ if (typeof recorded === 'string' && recorded.trim())
51
+ pins.push({ spec: recorded.trim(), source: '.somewhere.json' });
52
+ return pins;
53
+ }
54
+ /** The pin that governs this folder, or null when it records none (or one that
55
+ * is not a version or range, such as a tag or a file: path). */
56
+ export function readProjectPin(dir) {
57
+ const pin = readProjectPins(dir)[0];
58
+ return pin && semver.validRange(pin.spec) ? pin : null;
59
+ }
60
+ export function pinSatisfied(pin, version) {
61
+ return semver.valid(version) !== null && semver.satisfies(version, pin.spec, { includePrerelease: true });
62
+ }
63
+ /** The CLI installed in this folder's node_modules, when it satisfies the pin
64
+ * and is not the one already running: the command is handed to it. */
65
+ export function installedPinnedCli(dir, pin, running) {
66
+ const root = join(dir, 'node_modules', ...CLI_PACKAGE_NAME.split('/'));
67
+ const pkg = readJson(join(root, 'package.json'));
68
+ const version = typeof pkg?.version === 'string' ? pkg.version : null;
69
+ if (!version || version === running || !pinSatisfied(pin, version))
70
+ return null;
71
+ const binField = pkg?.bin;
72
+ const rel = typeof binField === 'string'
73
+ ? binField
74
+ : binField && typeof binField === 'object' ? binField.somewhere : null;
75
+ if (typeof rel !== 'string')
76
+ return null;
77
+ const bin = join(root, rel);
78
+ return existsSync(bin) ? { version, bin } : null;
79
+ }
80
+ /** The one line a folder pinned to another CLI version prints, on stderr. */
81
+ export function pinNotice(pin, running, delegatedTo) {
82
+ const head = `This project is pinned to somewhere CLI ${pin.spec} (${pin.source})`;
83
+ const newer = semver.valid(running) !== null && semver.gtr(running, pin.spec, { includePrerelease: true });
84
+ const move = `Run \`somewhere upgrade\` to move the project to ${running}.`;
85
+ if (delegatedTo) {
86
+ return `${head}; running its installed ${delegatedTo} instead of ${running}.${newer ? ` ${move}` : ''}`;
87
+ }
88
+ if (newer)
89
+ return `${head}; you are running ${running}. ${move}`;
90
+ const exact = semver.valid(pin.spec) ? pin.spec : semver.minVersion(pin.spec)?.version ?? pin.spec;
91
+ return `${head}; you are running ${running}, which is older. `
92
+ + (pin.source === 'package.json' ? 'Run `npm install` here, or use ' : 'Use ')
93
+ + `\`npx -y ${CLI_PACKAGE_NAME}@${exact} <command>\`.`;
94
+ }
95
+ /** Commands that never follow a pin: they create, inspect or move it. */
96
+ const PIN_EXEMPT = new Set(['upgrade', 'update', 'init', '--version', '-V']);
97
+ /** Set on a command handed to the project's installed CLI, so it runs as is. */
98
+ export const PINNED_CHILD_ENV = 'SOMEWHERE_PINNED_CLI';
99
+ export function decidePin(dir, running, argv, env) {
100
+ const none = { notice: null, delegate: null };
101
+ if (env[PINNED_CHILD_ENV] === '1' || PIN_EXEMPT.has(argv[2] ?? ''))
102
+ return none;
103
+ const pin = readProjectPin(dir);
104
+ if (!pin || pinSatisfied(pin, running))
105
+ return none;
106
+ const installed = installedPinnedCli(dir, pin, running);
107
+ return { notice: pinNotice(pin, running, installed?.version ?? null), delegate: installed?.bin ?? null };
108
+ }
109
+ /** Write `version` into every place this folder records a pin. */
110
+ export function writeProjectPins(dir, pins, version) {
111
+ const written = [];
112
+ for (const pin of pins) {
113
+ const path = join(dir, pin.source);
114
+ const raw = readFileSync(path, 'utf8');
115
+ const json = JSON.parse(raw);
116
+ if (pin.source === 'package.json') {
117
+ for (const section of ['devDependencies', 'dependencies']) {
118
+ const deps = json[section];
119
+ if (deps && typeof deps === 'object' && typeof deps[CLI_PACKAGE_NAME] === 'string')
120
+ deps[CLI_PACKAGE_NAME] = version;
121
+ }
122
+ }
123
+ else {
124
+ json[PIN_FILE_KEY] = version;
125
+ }
126
+ const indent = /^\{\s*\n(\s+)/.exec(raw)?.[1] ?? ' ';
127
+ writeFileSync(path, JSON.stringify(json, null, indent) + '\n');
128
+ written.push(pin.source);
129
+ }
130
+ return written;
131
+ }
132
+ /** Record this CLI in a linked folder that records no version yet: the first
133
+ * deploy pins the project. Only .somewhere.json is written. */
134
+ export function recordPinIfMissing(dir, version) {
135
+ if (!semver.valid(version) || readProjectPins(dir).length)
136
+ return false;
137
+ const path = join(dir, '.somewhere.json');
138
+ const config = readJson(path);
139
+ if (!config)
140
+ return false;
141
+ config[PIN_FILE_KEY] = version;
142
+ writeFileSync(path, JSON.stringify(config, null, 2) + '\n');
143
+ return true;
144
+ }
145
+ /** This CLI's own CHANGELOG.md, shipped in the package. */
146
+ export function readBundledChangelog() {
147
+ return readFileSync(join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'CHANGELOG.md'), 'utf8');
148
+ }
149
+ /** The `## x.y.z` sections above `from` up to and including `to`, newest first. */
150
+ export function changelogBetween(markdown, from, to) {
151
+ const entries = [];
152
+ const parts = markdown.split(/^## /m).slice(1);
153
+ for (const part of parts) {
154
+ const newline = part.indexOf('\n');
155
+ const version = (newline === -1 ? part : part.slice(0, newline)).trim();
156
+ if (!semver.valid(version))
157
+ continue;
158
+ if (semver.gt(version, from) && semver.lte(version, to)) {
159
+ entries.push({ version, body: (newline === -1 ? '' : part.slice(newline + 1)).trim() });
160
+ }
161
+ }
162
+ return entries;
163
+ }
164
+ //# sourceMappingURL=project-pin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-pin.js","sourceRoot":"","sources":["../../src/lib/project-pin.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@somewhere-cloud/cli",
3
- "version": "0.38.14",
3
+ "version": "0.38.16",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@somewhere-cloud/cli",
9
- "version": "0.38.14",
9
+ "version": "0.38.16",
10
10
  "bundleDependencies": [
11
11
  "@modelcontextprotocol/sdk",
12
12
  "chokidar",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@somewhere-cloud/cli",
3
- "version": "0.38.14",
3
+ "version": "0.38.16",
4
4
  "description": "CLI for somewhere.cloud — auth, projects, deploy, pull, promote, db, logs, env, MCP bridge.",
5
5
  "keywords": [
6
6
  "somewhere",
@@ -26,6 +26,7 @@
26
26
  "sw": "bin/somewhere.js"
27
27
  },
28
28
  "files": [
29
+ "CHANGELOG.md",
29
30
  "LICENSE",
30
31
  "README.md",
31
32
  "bin",