@somewhere-tech/cli 0.37.2 → 0.37.3

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,3 +1,4 @@
1
+ import { callAdvisorRun, consumeAdvisorRun } from '../lib/advisor-runs.js';
1
2
  import { error, printJson } from '../lib/output.js';
2
3
  import { callPlatformHelpTool } from '../lib/platform-tools.js';
3
4
  import { loadConfig } from '../lib/config.js';
@@ -43,19 +44,48 @@ export async function callAnonymousAdvisor(question, context) {
43
44
  throw new Error(`${message}${detail ? ` [${detail}]` : ''}`);
44
45
  }
45
46
  const answer = payload.data?.answer;
47
+ if (!answer && payload.data?.run_id) {
48
+ const run = await consumeAdvisorRun(JSON.stringify(payload.data), message => process.stderr.write(message + '\n'));
49
+ if (run?.incomplete)
50
+ process.exitCode = 1;
51
+ if (run?.answer)
52
+ return run.answer;
53
+ throw new Error('Advisor run remains incomplete. Resume the saved request.');
54
+ }
46
55
  if (!answer)
47
56
  throw new Error('Advisor returned an empty response.');
48
57
  return answer;
49
58
  }
50
59
  export function registerAdvisor(program) {
51
60
  program
52
- .command('advisor <question>')
61
+ .command('advisor [question]')
53
62
  .description('Ask the somewhere.tech platform advisor; login adds linked-project context')
63
+ .option('--async', 'Use the durable Advisor candidate when enabled by the server')
64
+ .option('--resume <request-id>', 'Reconnect to the same saved Advisor request')
65
+ .option('--status <request-id>', 'Read one saved Advisor request status')
66
+ .option('--cancel <request-id>', 'Request cancellation of a saved Advisor run')
54
67
  .option('--json', 'Print the advisor response in a JSON envelope')
55
68
  .option('--file <path>', 'Attach a trimmed, redacted local file as context')
56
69
  .option('--no-context', 'Do not attach the linked project, previous run, or file')
57
70
  .action(async (question, opts) => {
58
71
  try {
72
+ if (opts.async || opts.resume || opts.status || opts.cancel) {
73
+ if ([opts.resume, opts.status, opts.cancel].filter(Boolean).length > 1)
74
+ throw new Error('Use one resume, status or cancel operation.');
75
+ if (opts.file)
76
+ throw new Error('File excerpts are not retained by the durable Advisor candidate. Supply the question and command diagnostics.');
77
+ const config = loadConfig(), localContext = opts.context === false ? undefined : buildAdvisorContext(), context = config?.token && config.temporary !== true ? localContext : anonymousAdvisorContext(localContext);
78
+ const result = await callAdvisorRun({ question, context, requestId: opts.resume ?? opts.status ?? opts.cancel, operation: opts.cancel ? 'cancel' : opts.status ? 'status' : 'resume', wait: !opts.cancel && !opts.status, progress: message => process.stderr.write(message + '\n') });
79
+ if (opts.json)
80
+ printJson(result);
81
+ else
82
+ process.stdout.write((result.answer ?? JSON.stringify(result)) + '\n');
83
+ if (result.incomplete)
84
+ process.exitCode = 1;
85
+ return;
86
+ }
87
+ if (!question)
88
+ throw new Error('Supply a question or a saved request to resume.');
59
89
  const config = loadConfig();
60
90
  const permanentCredential = !!config?.token && config.temporary !== true;
61
91
  const localContext = opts.context === false ? undefined : buildAdvisorContext(opts.file);
@@ -64,12 +94,20 @@ export function registerAdvisor(program) {
64
94
  // Only permanent credentials authorize the authenticated MCP path.
65
95
  // Temporary deploy credentials use the public advisor's IP gate, while
66
96
  // an expired or rejected permanent credential still fails closed here.
67
- const answer = permanentCredential
97
+ let answer = permanentCredential
68
98
  ? await callPlatformHelpTool('advisor', {
69
99
  question,
70
100
  ...(context ? { context } : {}),
71
101
  })
72
102
  : await callAnonymousAdvisor(question, context);
103
+ if (permanentCredential) {
104
+ const run = await consumeAdvisorRun(answer, message => process.stderr.write(message + '\n'));
105
+ if (run) {
106
+ if (run.incomplete)
107
+ process.exitCode = 1;
108
+ answer = run.answer ?? JSON.stringify(run);
109
+ }
110
+ }
73
111
  if (opts.json) {
74
112
  printJson({ question, answer });
75
113
  }
@@ -1 +1 @@
1
- {"version":3,"file":"advisor.js","sourceRoot":"","sources":["../../src/commands/advisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"advisor.js","sourceRoot":"","sources":["../../src/commands/advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { randomBytes, randomUUID } from 'node:crypto';
2
+ import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { cliConfigDir, loadConfig } from './config.js';
5
+ import { fetchWithProxy } from './http.js';
6
+ import { redactAdvisorText } from './advisor-context.js';
7
+ const directory = () => join(cliConfigDir(), 'advisor-runs');
8
+ function path(id) { if (!/^[a-f0-9-]{36}$/i.test(id))
9
+ throw Error('Invalid Advisor request ID.'); return join(directory(), id + '.json'); }
10
+ function save(record) { mkdirSync(directory(), { recursive: true, mode: 0o700 }); chmodSync(directory(), 0o700); const target = path(record.request_id), temporary = target + '.' + randomUUID() + '.tmp'; writeFileSync(temporary, JSON.stringify(record), { mode: 0o600, flag: 'wx' }); renameSync(temporary, target); chmodSync(target, 0o600); }
11
+ function load(id) { if (!existsSync(path(id)))
12
+ throw Error('Advisor request was not found in this CLI configuration.'); return JSON.parse(readFileSync(path(id), 'utf8')); }
13
+ function url(suffix) { const result = new URL(process.env.SOMEWHERE_MCP_URL || 'https://mcp.somewhere.tech/mcp'); result.pathname = '/advisor/runs' + suffix; result.search = ''; result.hash = ''; return result.toString(); }
14
+ async function request(record, operation) {
15
+ const config = loadConfig(), token = record.owner_mode === 'account' && config?.temporary !== true ? config?.token : undefined;
16
+ if (record.owner_mode === 'account' && !token)
17
+ throw Error('Sign in to the account that owns this saved request.');
18
+ const res = await fetchWithProxy(url(operation === 'start' ? '' : '/' + record.run_id + (operation === 'status' ? '' : '/' + operation)), { method: operation === 'status' ? 'GET' : 'POST', headers: { 'Content-Type': 'application/json', 'User-Agent': 'somewhere-cli', ...(token ? { Authorization: 'Bearer ' + token } : { 'X-Advisor-Capability': record.capability }) }, ...(operation === 'start' ? { body: JSON.stringify(record.body) } : {}) }, 30000);
19
+ const payload = await res.json();
20
+ if (!res.ok || !payload.ok || !payload.data)
21
+ throw Error((payload.message || payload.error || 'Advisor transport failed.') + ' [HTTP ' + res.status + ']');
22
+ if (payload.data.run_id)
23
+ record.run_id = payload.data.run_id;
24
+ if (payload.data.status === 'settled' || payload.data.answer) {
25
+ delete record.body;
26
+ if (!record.run_id)
27
+ record.terminal = payload.data;
28
+ }
29
+ save(record);
30
+ return { ...payload.data, request_id: record.request_id };
31
+ }
32
+ /** Local identity is written before POST. Transport failure never creates another request. */
33
+ export async function callAdvisorRun(args) {
34
+ let record;
35
+ if (args.requestId)
36
+ record = load(args.requestId);
37
+ else {
38
+ if (!args.question)
39
+ throw Error('Supply a question or --resume <request-id>.');
40
+ const id = randomUUID(), created = Date.now(), context = args.context ? { ...args.context } : undefined;
41
+ if (context?.file)
42
+ delete context.file;
43
+ const config = loadConfig();
44
+ record = { owner_mode: config?.token && config.temporary !== true ? 'account' : 'anonymous', request_id: id, request_created_at: created, capability: randomBytes(32).toString('hex'), body: { question: redactAdvisorText(args.question), ...(context ? { context } : {}), request_id: id, request_created_at: created } };
45
+ save(record);
46
+ }
47
+ try {
48
+ if (record.terminal)
49
+ return { ...record.terminal, request_id: record.request_id };
50
+ if (args.operation === 'cancel' && !record.run_id)
51
+ throw Error('Start acknowledgment is unavailable; no cancellation or replacement dispatch was attempted. Recover only this original request.');
52
+ let result = await request(record, record.run_id ? (args.operation ?? 'resume') : 'start');
53
+ if (args.wait === false || args.operation === 'status' || args.operation === 'cancel')
54
+ return result;
55
+ if (result.status !== 'settled' && !result.answer)
56
+ args.progress?.('Advisor is working. To reconnect: somewhere advisor --resume ' + record.request_id);
57
+ while (result.status !== 'settled' && !result.answer) {
58
+ await new Promise(resolve => setTimeout(resolve, Math.min(10000, Math.max(1000, (result.retry_after_seconds ?? 2) * 1000))));
59
+ result = await request(record, result.next_step === 'resume' ? 'resume' : 'status');
60
+ }
61
+ return result;
62
+ }
63
+ catch (error) {
64
+ throw Error((error instanceof Error ? error.message : String(error)) + ' Resume only this request: somewhere advisor --resume ' + record.request_id);
65
+ }
66
+ }
67
+ /** Adopt an unpaid legacy/native prepared handle before its first billable resume. */
68
+ export async function consumeAdvisorRun(text, progress) {
69
+ let parsed;
70
+ try {
71
+ parsed = JSON.parse(text);
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ if (typeof parsed.run_id !== 'string' || typeof parsed.status !== 'string')
77
+ return null;
78
+ const config = loadConfig(), anonymous = typeof parsed.anonymous_capability === 'string', id = randomUUID();
79
+ if (!anonymous && (!config?.token || config.temporary === true))
80
+ throw Error('Sign in to the account that owns this Advisor run.');
81
+ const record = { owner_mode: anonymous ? 'anonymous' : 'account', request_id: id, request_created_at: Date.now(), capability: anonymous ? String(parsed.anonymous_capability) : randomBytes(32).toString('hex'), run_id: parsed.run_id };
82
+ save(record);
83
+ return callAdvisorRun({ requestId: id, operation: 'resume', progress });
84
+ }
85
+ //# sourceMappingURL=advisor-runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advisor-runs.js","sourceRoot":"","sources":["../../src/lib/advisor-runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACnD,OAAO,EAAC,SAAS,EAAC,UAAU,EAAC,SAAS,EAAC,YAAY,EAAC,UAAU,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,YAAY,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACpD,OAAO,EAAC,cAAc,EAAC,MAAM,WAAW,CAAC;AACzC,OAAO,EAAC,iBAAiB,EAAqB,MAAM,sBAAsB,CAAC;AAG3E,MAAM,SAAS,GAAC,GAAE,EAAE,CAAA,IAAI,CAAC,YAAY,EAAE,EAAC,cAAc,CAAC,CAAC;AACxD,SAAS,IAAI,CAAC,EAAS,IAAU,IAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAAC,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAA,OAAO,IAAI,CAAC,SAAS,EAAE,EAAC,EAAE,GAAC,OAAO,CAAC,CAAC,CAAA,CAAC;AACjJ,SAAS,IAAI,CAAC,MAAe,IAAQ,SAAS,CAAC,SAAS,EAAE,EAAC,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,CAAC,CAAC,CAAA,SAAS,CAAC,SAAS,EAAE,EAAC,KAAK,CAAC,CAAC,CAAA,MAAM,MAAM,GAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAC,SAAS,GAAC,MAAM,GAAC,GAAG,GAAC,UAAU,EAAE,GAAC,MAAM,CAAC,CAAA,aAAa,CAAC,SAAS,EAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,CAAC,CAAA,UAAU,CAAC,SAAS,EAAC,MAAM,CAAC,CAAC,CAAA,SAAS,CAAC,MAAM,EAAC,KAAK,CAAC,CAAC,CAAA,CAAC;AAChU,SAAS,IAAI,CAAC,EAAS,IAAY,IAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,MAAM,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAC,MAAM,CAAC,CAAa,CAAC,CAAA,CAAC;AAClM,SAAS,GAAG,CAAC,MAAa,IAAU,MAAM,MAAM,GAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAE,gCAAgC,CAAC,CAAC,CAAA,MAAM,CAAC,QAAQ,GAAC,eAAe,GAAC,MAAM,CAAC,CAAA,MAAM,CAAC,MAAM,GAAC,EAAE,CAAC,CAAA,MAAM,CAAC,IAAI,GAAC,EAAE,CAAC,CAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAC;AAC3N,KAAK,UAAU,OAAO,CAAC,MAAe,EAAC,SAA4C;IACjF,MAAM,MAAM,GAAC,UAAU,EAAE,EAAC,KAAK,GAAC,MAAM,CAAC,UAAU,KAAG,SAAS,IAAE,MAAM,EAAE,SAAS,KAAG,IAAI,CAAA,CAAC,CAAA,MAAM,EAAE,KAAK,CAAA,CAAC,CAAA,SAAS,CAAC;IAChH,IAAG,MAAM,CAAC,UAAU,KAAG,SAAS,IAAE,CAAC,KAAK;QAAC,MAAM,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC7G,MAAM,GAAG,GAAC,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,KAAG,OAAO,CAAA,CAAC,CAAA,EAAE,CAAA,CAAC,CAAA,GAAG,GAAC,MAAM,CAAC,MAAM,GAAC,CAAC,SAAS,KAAG,QAAQ,CAAA,CAAC,CAAA,EAAE,CAAA,CAAC,CAAA,GAAG,GAAC,SAAS,CAAC,CAAC,EAAC,EAAC,MAAM,EAAC,SAAS,KAAG,QAAQ,CAAA,CAAC,CAAA,KAAK,CAAA,CAAC,CAAA,MAAM,EAAC,OAAO,EAAC,EAAC,cAAc,EAAC,kBAAkB,EAAC,YAAY,EAAC,eAAe,EAAC,GAAG,CAAC,KAAK,CAAA,CAAC,CAAA,EAAC,aAAa,EAAC,SAAS,GAAC,KAAK,EAAC,CAAA,CAAC,CAAA,EAAC,sBAAsB,EAAC,MAAM,CAAC,UAAU,EAAC,CAAC,EAAC,EAAC,GAAG,CAAC,SAAS,KAAG,OAAO,CAAA,CAAC,CAAA,EAAC,IAAI,EAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAC,EAAC,KAAK,CAAC,CAAC;IACrY,MAAM,OAAO,GAAC,MAAM,GAAG,CAAC,IAAI,EAAwE,CAAC;IACrG,IAAG,CAAC,GAAG,CAAC,EAAE,IAAE,CAAC,OAAO,CAAC,EAAE,IAAE,CAAC,OAAO,CAAC,IAAI;QAAC,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,IAAE,OAAO,CAAC,KAAK,IAAE,2BAA2B,CAAC,GAAC,SAAS,GAAC,GAAG,CAAC,MAAM,GAAC,GAAG,CAAC,CAAC;IAC3I,IAAG,OAAO,CAAC,IAAI,CAAC,MAAM;QAAC,MAAM,CAAC,MAAM,GAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAAA,IAAG,OAAO,CAAC,IAAI,CAAC,MAAM,KAAG,SAAS,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAC,CAAC;QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;QAAA,IAAG,CAAC,MAAM,CAAC,MAAM;YAAC,MAAM,CAAC,QAAQ,GAAC,OAAO,CAAC,IAAI,CAAC;IAAA,CAAC;IAAA,IAAI,CAAC,MAAM,CAAC,CAAC;IAAA,OAAO,EAAC,GAAG,OAAO,CAAC,IAAI,EAAC,UAAU,EAAC,MAAM,CAAC,UAAU,EAAC,CAAC;AAC1P,CAAC;AACD,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAsJ;IACzL,IAAI,MAAe,CAAC;IACpB,IAAG,IAAI,CAAC,SAAS;QAAC,MAAM,GAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC1C,CAAC;QAAA,IAAG,CAAC,IAAI,CAAC,QAAQ;YAAC,MAAM,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAAA,MAAM,EAAE,GAAC,UAAU,EAAE,EAAC,OAAO,GAAC,IAAI,CAAC,GAAG,EAAE,EAAC,OAAO,GAAC,IAAI,CAAC,OAAO,CAAA,CAAC,CAAA,EAAC,GAAG,IAAI,CAAC,OAAO,EAAC,CAAA,CAAC,CAAA,SAAS,CAAC;QAAA,IAAG,OAAO,EAAE,IAAI;YAAC,OAAO,OAAO,CAAC,IAAI,CAAC;QAAA,MAAM,MAAM,GAAC,UAAU,EAAE,CAAC;QAAA,MAAM,GAAC,EAAC,UAAU,EAAC,MAAM,EAAE,KAAK,IAAE,MAAM,CAAC,SAAS,KAAG,IAAI,CAAA,CAAC,CAAA,SAAS,CAAA,CAAC,CAAA,WAAW,EAAC,UAAU,EAAC,EAAE,EAAC,kBAAkB,EAAC,OAAO,EAAC,UAAU,EAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAC,IAAI,EAAC,EAAC,QAAQ,EAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAC,GAAG,CAAC,OAAO,CAAA,CAAC,CAAA,EAAC,OAAO,EAAC,CAAA,CAAC,CAAA,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAC,kBAAkB,EAAC,OAAO,EAAC,EAAC,CAAC;QAAA,IAAI,CAAC,MAAM,CAAC,CAAC;IAAA,CAAC;IAClhB,IAAG,CAAC;QACF,IAAG,MAAM,CAAC,QAAQ;YAAC,OAAO,EAAC,GAAG,MAAM,CAAC,QAAQ,EAAC,UAAU,EAAC,MAAM,CAAC,UAAU,EAAC,CAAC;QAC5E,IAAG,IAAI,CAAC,SAAS,KAAG,QAAQ,IAAE,CAAC,MAAM,CAAC,MAAM;YAAC,MAAM,KAAK,CAAC,iIAAiI,CAAC,CAAC;QAC5L,IAAI,MAAM,GAAC,MAAM,OAAO,CAAC,MAAM,EAAC,MAAM,CAAC,MAAM,CAAA,CAAC,CAAA,CAAC,IAAI,CAAC,SAAS,IAAE,QAAQ,CAAC,CAAA,CAAC,CAAA,OAAO,CAAC,CAAC;QAClF,IAAG,IAAI,CAAC,IAAI,KAAG,KAAK,IAAE,IAAI,CAAC,SAAS,KAAG,QAAQ,IAAE,IAAI,CAAC,SAAS,KAAG,QAAQ;YAAC,OAAO,MAAM,CAAC;QACzF,IAAG,MAAM,CAAC,MAAM,KAAG,SAAS,IAAE,CAAC,MAAM,CAAC,MAAM;YAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,+DAA+D,GAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChJ,OAAM,MAAM,CAAC,MAAM,KAAG,SAAS,IAAE,CAAC,MAAM,CAAC,MAAM,EAAC,CAAC;YAAA,MAAM,IAAI,OAAO,CAAC,OAAO,CAAA,EAAE,CAAA,UAAU,CAAC,OAAO,EAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAC,CAAC,MAAM,CAAC,mBAAmB,IAAE,CAAC,CAAC,GAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAA,MAAM,GAAC,MAAM,OAAO,CAAC,MAAM,EAAC,MAAM,CAAC,SAAS,KAAG,QAAQ,CAAA,CAAC,CAAA,QAAQ,CAAA,CAAC,CAAA,QAAQ,CAAC,CAAC;QAAA,CAAC;QACjP,OAAO,MAAM,CAAC;IAChB,CAAC;IAAA,OAAM,KAAK,EAAC,CAAC;QAAA,MAAM,KAAK,CAAC,CAAC,KAAK,YAAY,KAAK,CAAA,CAAC,CAAA,KAAK,CAAC,OAAO,CAAA,CAAC,CAAA,MAAM,CAAC,KAAK,CAAC,CAAC,GAAC,wDAAwD,GAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAAA,CAAC;AAC9J,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAW,EAAC,QAAgC;IAClF,IAAI,MAA6B,CAAC;IAAA,IAAG,CAAC;QAAA,MAAM,GAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAA2B,CAAC;IAAA,CAAC;IAAA,MAAK,CAAC;QAAA,OAAO,IAAI,CAAC;IAAA,CAAC;IAC5G,IAAG,OAAO,MAAM,CAAC,MAAM,KAAG,QAAQ,IAAE,OAAO,MAAM,CAAC,MAAM,KAAG,QAAQ;QAAC,OAAO,IAAI,CAAC;IAChF,MAAM,MAAM,GAAC,UAAU,EAAE,EAAC,SAAS,GAAC,OAAO,MAAM,CAAC,oBAAoB,KAAG,QAAQ,EAAC,EAAE,GAAC,UAAU,EAAE,CAAC;IAClG,IAAG,CAAC,SAAS,IAAE,CAAC,CAAC,MAAM,EAAE,KAAK,IAAE,MAAM,CAAC,SAAS,KAAG,IAAI,CAAC;QAAC,MAAM,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC3H,MAAM,MAAM,GAAU,EAAC,UAAU,EAAC,SAAS,CAAA,CAAC,CAAA,WAAW,CAAA,CAAC,CAAA,SAAS,EAAC,UAAU,EAAC,EAAE,EAAC,kBAAkB,EAAC,IAAI,CAAC,GAAG,EAAE,EAAC,UAAU,EAAC,SAAS,CAAA,CAAC,CAAA,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA,CAAC,CAAA,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAC,MAAM,EAAC,MAAM,CAAC,MAAM,EAAC,CAAC;IAAA,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1O,OAAO,cAAc,CAAC,EAAC,SAAS,EAAC,EAAE,EAAC,SAAS,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC,CAAC;AACpE,CAAC"}
@@ -1,8 +1,8 @@
1
1
  export const BUNDLED_SKILLS_PACK = {
2
2
  "schema": 1,
3
3
  "name": "somewhere-skills",
4
- "version": "1+79e6d9ee3f3a",
5
- "sha256": "79e6d9ee3f3ab89ebcf380a32eaa585455fd9544f121036a78fe214260696edd",
4
+ "version": "1+efd062ab7fba",
5
+ "sha256": "efd062ab7fba9b20d6229afba854ef03383a83a3b8c4206a1ab6bea3067f6898",
6
6
  "files": [
7
7
  {
8
8
  "path": "deploy-verify-loop/SKILL.md",
@@ -21,8 +21,8 @@ export const BUNDLED_SKILLS_PACK = {
21
21
  },
22
22
  {
23
23
  "path": "troubleshooting/SKILL.md",
24
- "sha256": "b7e2f6792e27f895d86ce2713f7fd480427793c8e5fd971f2052c6d3b1d6367f",
25
- "content": "---\nname: troubleshooting\ndescription: When a request fails, a deploy or save is refused, or the live app misbehaves and the cause is not obvious.\n---\n\n# Troubleshoot a failure\n\n## Read before guessing\n\n3. `somewhere browser` inspects a page; `somewhere logs --tail 10`, then\n `somewhere errors`: read the failure first.\n\nEvery JSON error from the platform now ships with a `hint` field that names the most relevant `docs` topic.\n\n`somewhere docs <topic>` (`--section <id>`) prints one contract; `somewhere advisor \"<question>\"` answers design choices\n\n## Limits the logs name\n\n| Ceiling | Value | Instead |\n|---|---|---|\n| Memory per request | about 256 MB | Stream or process in chunks; move heavy work to `sw.jobs` |\n| CPU time per request | about 30 s | Move long computation to `sw.jobs` |\n| Wall-clock time per request | about 300 s | Start the work with `sw.jobs` and return; poll the job |\n| Environment values | about 5 KB (5,120 bytes) for all of a project's values together | Keep large configuration in files; a save above the limit is refused with 413 `ENV_VALUE_TOO_LARGE` (one value) or `ENV_VALUES_TOO_LARGE` (all values together), naming the key and the limit |\n\n## Failure 1: FUNCTION_CPU_EXCEEDED or FUNCTION_MEMORY_EXCEEDED\n\nThe caller gets HTTP 500 in the platform's JSON error envelope, `{ ok: false, error, message, request_id }`, with `error` set to `FUNCTION_MEMORY_EXCEEDED` or `FUNCTION_CPU_EXCEEDED`, and the same code and message are recorded in the project's logs and errors. The fix is the \"Instead\" column: move the work to `sw.jobs`, or process it in smaller pieces.\n\n## Failure 2: a refused deploy\n\n`SCHEMA_DEPLOY_REFUSED` (409, at deploy) — `db/schema.ts` asked for something the deploy will not do silently\n\nDoes the file path match the URL? `api/users/[id].ts` serves `/api/users/123`. `api/users.ts` serves `/api/users`.\n\nSources (`somewhere docs <topic>`): getting-started, limits, sw.db, troubleshooting.\n"
24
+ "sha256": "6275138804adf14a03288d47fae24d14d668dd5ee1d5967653bd25e49145ea38",
25
+ "content": "---\nname: troubleshooting\ndescription: When a request fails, a deploy or save is refused, or the live app misbehaves and the cause is not obvious.\n---\n\n# Troubleshoot a failure\n\n## Read before guessing\n\n3. `somewhere browser` inspects a page; `somewhere logs --tail 10`, then\n `somewhere errors`: read the failure first.\n\nEvery JSON error from the platform now ships with a `hint` field that names the most relevant `docs` topic.\n\nAsk `somewhere advisor \"<question>\"` how to build or fix it. For a reference, use `somewhere docs <topic> --section <id>`\n\n## Limits the logs name\n\n| Ceiling | Value | Instead |\n|---|---|---|\n| Memory per request | about 256 MB | Stream or process in chunks; move heavy work to `sw.jobs` |\n| CPU time per request | about 30 s | Move long computation to `sw.jobs` |\n| Wall-clock time per request | about 300 s | Start the work with `sw.jobs` and return; poll the job |\n| Environment values | about 5 KB (5,120 bytes) for all of a project's values together | Keep large configuration in files; a save above the limit is refused with 413 `ENV_VALUE_TOO_LARGE` (one value) or `ENV_VALUES_TOO_LARGE` (all values together), naming the key and the limit |\n\n## Failure 1: FUNCTION_CPU_EXCEEDED or FUNCTION_MEMORY_EXCEEDED\n\nThe caller gets HTTP 500 in the platform's JSON error envelope, `{ ok: false, error, message, request_id }`, with `error` set to `FUNCTION_MEMORY_EXCEEDED` or `FUNCTION_CPU_EXCEEDED`, and the same code and message are recorded in the project's logs and errors. The fix is the \"Instead\" column: move the work to `sw.jobs`, or process it in smaller pieces.\n\n## Failure 2: a refused deploy\n\n`SCHEMA_DEPLOY_REFUSED` (409, at deploy) — `db/schema.ts` asked for something the deploy will not do silently\n\nDoes the file path match the URL? `api/users/[id].ts` serves `/api/users/123`. `api/users.ts` serves `/api/users`.\n\nSources (`somewhere docs <topic>`): getting-started, limits, sw.db, troubleshooting.\n"
26
26
  },
27
27
  {
28
28
  "path": "realtime-and-background/SKILL.md",
@@ -1 +1 @@
1
- {"version":3,"file":"skills-pack.generated.js","sourceRoot":"","sources":["../../src/lib/skills-pack.generated.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,kBAAkB;IAC1B,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE,kEAAkE;IAC5E,OAAO,EAAE;QACP;YACE,MAAM,EAAE,6BAA6B;YACrC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,ypEAAypE;SACrqE;QACD;YACE,MAAM,EAAE,yBAAyB;YACjC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,48DAA48D;SACx9D;QACD;YACE,MAAM,EAAE,wBAAwB;YAChC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,kjEAAkjE;SAC9jE;QACD;YACE,MAAM,EAAE,0BAA0B;YAClC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,q8DAAq8D;SACj9D;QACD;YACE,MAAM,EAAE,kCAAkC;YAC1C,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,0yFAA0yF;SACtzF;QACD;YACE,MAAM,EAAE,+BAA+B;YACvC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,+5CAA+5C;SAC36C;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"skills-pack.generated.js","sourceRoot":"","sources":["../../src/lib/skills-pack.generated.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,kBAAkB;IAC1B,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE,kEAAkE;IAC5E,OAAO,EAAE;QACP;YACE,MAAM,EAAE,6BAA6B;YACrC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,ypEAAypE;SACrqE;QACD;YACE,MAAM,EAAE,yBAAyB;YACjC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,48DAA48D;SACx9D;QACD;YACE,MAAM,EAAE,wBAAwB;YAChC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,kjEAAkjE;SAC9jE;QACD;YACE,MAAM,EAAE,0BAA0B;YAClC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,s8DAAs8D;SACl9D;QACD;YACE,MAAM,EAAE,kCAAkC;YAC1C,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,0yFAA0yF;SACtzF;QACD;YACE,MAAM,EAAE,+BAA+B;YACvC,QAAQ,EAAE,kEAAkE;YAC5E,SAAS,EAAE,+5CAA+5C;SAC36C;KACF;CACF,CAAC"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@somewhere-tech/cli",
3
- "version": "0.37.2",
3
+ "version": "0.37.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@somewhere-tech/cli",
9
- "version": "0.37.2",
9
+ "version": "0.37.3",
10
10
  "bundleDependencies": [
11
11
  "@modelcontextprotocol/sdk",
12
12
  "chokidar",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@somewhere-tech/cli",
3
- "version": "0.37.2",
3
+ "version": "0.37.3",
4
4
  "description": "CLI for somewhere.tech — auth, projects, deploy, pull, promote, db, logs, env, MCP bridge.",
5
5
  "keywords": [
6
6
  "somewhere",