@losthex/scribe 0.1.0 → 0.2.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/README.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  Lost Hex's command-line client for Scribe.
4
4
 
5
+ It exists for engagements Scribe has no repo access to: on those, the commits
6
+ on your own machine are the only record of the work, so this CLI queues their
7
+ metadata (repo, branch, sha, subject, timestamp, file *count*) and sends it to
8
+ your own daily report. It never reads a diff, a file name or a message body.
9
+
5
10
  ## Install
6
11
 
7
12
  ```bash
@@ -10,24 +15,83 @@ npm install --global @losthex/scribe
10
15
 
11
16
  ## Setup
12
17
 
13
- Use the onboarding command provided for your engagement, then sign in:
18
+ Two commands. The issuer URL is the only value anybody has to know:
19
+
20
+ ```bash
21
+ scribe login --issuer https://auth.scribe.losthex.com
22
+ cd ~/dev/the-repo-you-work-in && scribe install
23
+ ```
24
+
25
+ `scribe install` asks the server which engagements you are staffed to, and
26
+ which of those have no server-side collector. It then tells you what it found
27
+ and asks before it changes anything:
28
+
29
+ ```text
30
+ One of your engagements has no server-side collector, so this machine is
31
+ the only place its work is ever seen:
32
+
33
+ que Bonterra QUE (Bonterra)
34
+
35
+ Set this machine up for que? [Y/n]
36
+ ```
37
+
38
+ What it works out for you:
39
+
40
+ - **which engagement** — from your staffing. Several candidates means it shows
41
+ them and asks; none means it says the CLI is unnecessary for you and
42
+ installs nothing, rather than setting up something pointless
43
+ - **which repos to capture** — `org/repo` read off this repository's `origin`.
44
+ Narrow on purpose: nothing else on the laptop is ever looked at. Working on
45
+ a second repo for the same engagement? Run `scribe install` in it too, and
46
+ the patterns accumulate. `--match <org>` takes a whole org in one go
47
+ - **where to send** — the `/amend` and MCP endpoints, named by the server
48
+ itself
49
+
50
+ The issuer stays yours to supply, because it is the thing being trusted. Get
51
+ it wrong and the sign-in still succeeds while every call afterwards is
52
+ refused, so `scribe install` and `scribe status` say so when the issuer you
53
+ are signed in against is not the one the server verifies.
54
+
55
+ Check it landed:
14
56
 
15
57
  ```bash
16
- scribe install --project <project> --match <repo> \
17
- --issuer <issuer-url> --amend-url <amend-url>
18
- scribe login
19
58
  scribe status
20
59
  ```
21
60
 
61
+ ### Naming everything yourself
62
+
63
+ The flags still work, and still win over anything the server says — this is
64
+ what a script or a provisioning step should use:
65
+
66
+ ```bash
67
+ scribe install --project que --match bonterratech \
68
+ --issuer https://auth.scribe.losthex.com \
69
+ --amend-url https://scribe.losthex.com/amend \
70
+ --yes
71
+ ```
72
+
73
+ `--yes` accepts a single recommendation without a prompt; it will not choose
74
+ between several. `--offline` skips asking the server at all.
75
+
22
76
  ## Commands
23
77
 
24
78
  ```text
25
- scribe login
26
- scribe install
27
- scribe capture
28
- scribe flush
29
- scribe amend "<note>"
30
- scribe status
31
- scribe log
32
- scribe uninstall
79
+ scribe login [--issuer URL] browser sign-in, tokens in the OS keychain
80
+ scribe install recommend an engagement, plant the hook
81
+ scribe capture queue the commit that just landed (the hook)
82
+ scribe flush push the queue to /amend
83
+ scribe amend "<note>" one bullet on today's report
84
+ scribe mcp stdio proxy to the Scribe MCP server
85
+ scribe status auth, endpoints, engagements, hook, queue
86
+ scribe log everything ever sent
87
+ scribe uninstall remove the hook, keep the state
88
+ ```
89
+
90
+ ## Using Scribe from an agent
91
+
92
+ Harnesses that speak remote-MCP OAuth take the URL directly — `scribe status`
93
+ prints it. Everything else runs the stdio proxy:
94
+
95
+ ```json
96
+ { "mcpServers": { "scribe": { "command": "scribe", "args": ["mcp"] } } }
33
97
  ```
package/dist/config.js CHANGED
@@ -15,9 +15,16 @@ exports.requireSetting = requireSetting;
15
15
  * Engagement matching is a deliberate allowlist (DATA-ITD-005): a commit
16
16
  * is captured only when its repo matches an engagement the engineer
17
17
  * installed, so nothing leaves the machine for personal projects, other
18
- * clients, or the many repos that happen to sit on the same laptop. There
19
- * is no server-side list to fetch — the amend endpoint is write-only by
20
- * design so the patterns are local config, set once at onboarding.
18
+ * clients, or the many repos that happen to sit on the same laptop.
19
+ *
20
+ * The *patterns* stay local, and that is the point: this file is the
21
+ * engineer's own answer to "which repos on this laptop are work", and no
22
+ * server gets to widen it. What the server may be asked — since
23
+ * `scribe install` runs authenticated — is which engagements this person is
24
+ * staffed to and which of those have no server-side collector, so nobody
25
+ * has to be told a project slug out of band (`setup.ts`, `recommend.ts`).
26
+ * The recommendation is proposed and confirmed; what lands here is what the
27
+ * person agreed to.
21
28
  */
22
29
  const node_fs_1 = require("node:fs");
23
30
  const node_path_1 = require("node:path");
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/git.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.scrubRemote = scrubRemote;
4
4
  exports.repoIdentity = repoIdentity;
5
5
  exports.commitFacts = commitFacts;
6
+ exports.shortRemote = shortRemote;
6
7
  exports.gitConfig = gitConfig;
7
8
  exports.setGitConfig = setGitConfig;
8
9
  exports.unsetGitConfig = unsetGitConfig;
@@ -87,6 +88,24 @@ function commitFacts({ cwd = process.cwd(), run = runGit } = {}, ref = 'HEAD') {
87
88
  }
88
89
  return { hash, subject: subject || '(no subject)', at, filesChanged };
89
90
  }
91
+ /**
92
+ * `git@host:org/repo.git` / `https://host/org/repo.git` → `org/repo`.
93
+ *
94
+ * Two callers, and both want the same thing: the queue records which repo a
95
+ * commit came from without recording where it happens to be checked out,
96
+ * and `scribe install` proposes it as the match pattern for the engagement
97
+ * it just recommended. A remote that does not parse comes back whole rather
98
+ * than half-parsed: a long pattern somebody can read and correct beats a
99
+ * short one that quietly matches the wrong thing.
100
+ */
101
+ function shortRemote(remote) {
102
+ const withoutSuffix = remote.replace(/\.git$/, '');
103
+ const path = withoutSuffix.includes('://')
104
+ ? new URL(withoutSuffix).pathname
105
+ : withoutSuffix.split(':').slice(1).join(':');
106
+ const parts = path.split('/').filter(Boolean);
107
+ return parts.slice(-2).join('/') || withoutSuffix;
108
+ }
90
109
  /** The value of a git config key, looked up in the given scope. */
91
110
  function gitConfig(key, scope = 'global') {
92
111
  try {
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.all = exports.has = exports.str = void 0;
5
5
  exports.parseArgs = parseArgs;
6
- exports.shortRemote = shortRemote;
7
6
  exports.main = main;
8
7
  /**
9
8
  * `scribe` — the Scribe CLI: sign in once, plant the zero-touch local
10
9
  * collector, and amend your own daily report (SPEC-002, DATA-ITD-005).
11
10
  *
12
11
  * scribe login browser sign-in, tokens in the keychain
13
- * scribe install --project X plant the global post-commit hook
12
+ * scribe install ask the server which engagement, then plant
13
+ * the global post-commit hook
14
14
  * scribe amend "<note>" one bullet on today's report
15
15
  * scribe capture queue the commit that just landed (hook)
16
16
  * scribe flush push the queue to /amend
@@ -34,6 +34,9 @@ const lock_1 = require("./lock");
34
34
  const login_1 = require("./login");
35
35
  const mcp_1 = require("./mcp");
36
36
  const paths_1 = require("./paths");
37
+ const prompt_1 = require("./prompt");
38
+ const recommend_1 = require("./recommend");
39
+ const setup_1 = require("./setup");
37
40
  const queue_1 = require("./queue");
38
41
  const send_1 = require("./send");
39
42
  const tokens_1 = require("./tokens");
@@ -54,9 +57,16 @@ function readVersion() {
54
57
  }
55
58
  const USAGE = `scribe ${VERSION} — Scribe local collector and amendments
56
59
 
60
+ Setup is two lines. The issuer is the only URL anybody has to know; the
61
+ engagement, the repo pattern and the endpoints come from the server:
62
+
63
+ scribe login --issuer https://auth.scribe.losthex.com
64
+ cd <the repo you work in> && scribe install
65
+
57
66
  Usage:
58
67
  scribe login [--issuer URL] [--no-browser]
59
- scribe install --project SLUG [--match PATTERN]... [--amend-url URL] [--mcp-url URL]
68
+ scribe install [--project SLUG] [--match PATTERN]... [--yes] [--offline]
69
+ [--amend-url URL] [--mcp-url URL] [--api-url URL]
60
70
  [--issuer URL] [--force]
61
71
  scribe amend "<note>" [--date YYYY-MM-DD] [--project SLUG]
62
72
  scribe flush [--quiet]
@@ -69,6 +79,7 @@ Usage:
69
79
 
70
80
  Environment:
71
81
  SCRIBE_ISSUER / OPENAUTH_ISSUER issuer URL (INFRA-ITD-004)
82
+ SCRIBE_API_URL reporting app base URL (asked for setup)
72
83
  SCRIBE_AMEND_URL amend endpoint URL
73
84
  SCRIBE_MCP_URL MCP endpoint URL (SPEC-008)
74
85
  SCRIBE_HOME state directory (default ~/.config/scribe)
@@ -120,13 +131,13 @@ const all = (args, name) => (args.flags[name] ?? [])
120
131
  .filter(Boolean);
121
132
  exports.all = all;
122
133
  function issuerFor(ctx) {
123
- return (0, config_1.requireSetting)((0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'issuer'), process.env.SCRIBE_ISSUER ?? process.env.OPENAUTH_ISSUER, ctx.config.issuer), 'issuer', 'pass --issuer or run `scribe install --issuer <url>`');
134
+ return (0, config_1.requireSetting)((0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'issuer'), process.env.SCRIBE_ISSUER ?? process.env.OPENAUTH_ISSUER, ctx.config.issuer), 'issuer', 'pass --issuer or run `scribe login --issuer <url>` (prod is https://auth.scribe.losthex.com)');
124
135
  }
125
136
  function amendUrlFor(ctx) {
126
- return (0, config_1.requireSetting)((0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'amend-url'), process.env.SCRIBE_AMEND_URL, ctx.config.amendUrl), 'amend url', 'pass --amend-url or run `scribe install --amend-url <url>`');
137
+ return (0, config_1.requireSetting)((0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'amend-url'), process.env.SCRIBE_AMEND_URL, ctx.config.amendUrl), 'amend url', 'run `scribe install` — it asks the server for its own endpoints — or pass --amend-url');
127
138
  }
128
139
  function mcpUrlFor(ctx) {
129
- return (0, config_1.requireSetting)((0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'url'), process.env.SCRIBE_MCP_URL, ctx.config.mcpUrl), 'mcp url', 'pass --url or run `scribe install --mcp-url <url>`');
140
+ return (0, config_1.requireSetting)((0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'url'), process.env.SCRIBE_MCP_URL, ctx.config.mcpUrl), 'mcp url', 'run `scribe install` — it asks the server for its own endpoints — or pass --url');
130
141
  }
131
142
  function sessionFor(ctx, issuer) {
132
143
  return new tokens_1.Session({
@@ -162,29 +173,220 @@ async function cmdLogin(ctx) {
162
173
  const stored = session.save(tokens);
163
174
  console.log(`Signed in as ${stored.email ?? 'unknown'} — tokens stored in ` +
164
175
  `${(0, keychain_1.tokenStore)(issuer, { fallbackPath: (0, node_path_1.join)(ctx.paths.home, 'credentials.json') }).describe()}`);
165
- if (!ctx.config.issuer)
176
+ // An explicit `--issuer` is somebody saying which authority to trust, so
177
+ // it is written down even when the file already names another one. It used
178
+ // to be kept only when the config had none, which meant a stale issuer
179
+ // survived the very command run to correct it — and then every send failed
180
+ // against an issuer nobody had typed.
181
+ if ((0, exports.has)(ctx.args, 'issuer') || !ctx.config.issuer) {
166
182
  (0, config_1.saveConfig)({ ...ctx.config, issuer }, ctx.paths);
183
+ }
184
+ if (ctx.config.engagements.length === 0) {
185
+ console.log('Next: `cd` into a repo you work in and run `scribe install`.');
186
+ }
167
187
  return 0;
168
188
  }
189
+ /**
190
+ * The three sources of a URL, read off this invocation. `resolveEndpoints`
191
+ * in `setup.ts` decides the precedence between them and the server's own
192
+ * answer; this only says where each value is written.
193
+ */
194
+ function endpointSources(ctx) {
195
+ return {
196
+ flags: {
197
+ issuer: (0, exports.str)(ctx.args, 'issuer'),
198
+ apiUrl: (0, exports.str)(ctx.args, 'api-url'),
199
+ amendUrl: (0, exports.str)(ctx.args, 'amend-url'),
200
+ mcpUrl: (0, exports.str)(ctx.args, 'mcp-url'),
201
+ },
202
+ env: {
203
+ issuer: process.env.SCRIBE_ISSUER ?? process.env.OPENAUTH_ISSUER,
204
+ apiUrl: process.env.SCRIBE_API_URL,
205
+ amendUrl: process.env.SCRIBE_AMEND_URL,
206
+ mcpUrl: process.env.SCRIBE_MCP_URL,
207
+ },
208
+ config: ctx.config,
209
+ };
210
+ }
211
+ /**
212
+ * What the server says about this person, or the sentence explaining why it
213
+ * was not asked. Never throws: the caller decides whether an unanswered
214
+ * question is fatal, because that depends on whether `--project` was given.
215
+ */
216
+ async function askServer(ctx, settings, timeoutMs) {
217
+ if ((0, exports.has)(ctx.args, 'offline')) {
218
+ return { setup: null, problem: '--offline: the server was not asked' };
219
+ }
220
+ if (!settings.issuer) {
221
+ return {
222
+ setup: null,
223
+ problem: 'no issuer configured — run `scribe login --issuer <url>` first ' +
224
+ '(prod is https://auth.scribe.losthex.com)',
225
+ };
226
+ }
227
+ if (!settings.apiUrl) {
228
+ return {
229
+ setup: null,
230
+ problem: `cannot work out this stage's app URL from the issuer ${settings.issuer} — ` +
231
+ 'pass --api-url <url>',
232
+ };
233
+ }
234
+ const session = sessionFor(ctx, settings.issuer);
235
+ if (!session.isLoggedIn) {
236
+ return { setup: null, problem: 'not signed in — run `scribe login` first' };
237
+ }
238
+ try {
239
+ return {
240
+ setup: await (0, setup_1.fetchSetup)({
241
+ apiUrl: settings.apiUrl,
242
+ session,
243
+ ...(timeoutMs !== undefined && { timeoutMs }),
244
+ }),
245
+ problem: null,
246
+ };
247
+ }
248
+ catch (err) {
249
+ if (err instanceof setup_1.SetupError)
250
+ return { setup: null, problem: err.message };
251
+ throw err;
252
+ }
253
+ }
254
+ /**
255
+ * The engagement to install for: the one the server recommends, once the
256
+ * person has agreed to it. A null project means nothing should be installed,
257
+ * and the reason has already been printed.
258
+ *
259
+ * `preview` is what the confirmation is actually about. Agreeing to a slug is
260
+ * not agreeing to a repo pattern and a global git hook, and the pattern is the
261
+ * part this command guessed — so it goes on screen above the question rather
262
+ * than in the summary printed after the fact.
263
+ */
264
+ async function chooseProject(ctx, setup, preview) {
265
+ const plan = (0, recommend_1.recommend)(setup.engagements);
266
+ console.log(`Signed in as ${setup.person.email} — asked ${setup.endpoints.app} what you are staffed to.`);
267
+ console.log('');
268
+ for (const line of plan.lines)
269
+ console.log(line);
270
+ if (plan.verdict === 'unstaffed' || plan.verdict === 'unnecessary') {
271
+ // Not a failure: the answer to "what should this machine collect" is
272
+ // "nothing", and saying so beats installing a hook that can never match
273
+ // a repo.
274
+ return { project: null, code: 0 };
275
+ }
276
+ const auto = (0, exports.has)(ctx.args, 'yes');
277
+ if (!auto && (0, prompt_1.interactive)()) {
278
+ for (const line of preview)
279
+ console.log(line);
280
+ console.log('');
281
+ }
282
+ if (plan.verdict === 'one') {
283
+ const chosen = plan.chosen;
284
+ if (auto)
285
+ return { project: chosen.slug, code: 0 };
286
+ if (!(0, prompt_1.interactive)()) {
287
+ console.error('scribe install: nothing here to confirm with — re-run with --yes to accept ' +
288
+ `${chosen.slug}, or name it with --project.`);
289
+ return { project: null, code: 2 };
290
+ }
291
+ const answer = await (0, prompt_1.ask)(`Set this machine up for ${chosen.slug}? [Y/n] `);
292
+ // A closed stdin is not a yes: `isYes('')` is true because a bare Return
293
+ // at a `[Y/n]` is an answer, and a hung-up pipe is not.
294
+ if (answer === null || !(0, prompt_1.isYes)(answer)) {
295
+ console.log('Nothing installed.');
296
+ return { project: null, code: 0 };
297
+ }
298
+ return { project: chosen.slug, code: 0 };
299
+ }
300
+ // Several candidates. `--yes` cannot answer this one: agreeing in advance
301
+ // to whichever engagement happens to sort first is how hours reach the
302
+ // wrong client, and hours are billing evidence.
303
+ if (!(0, prompt_1.interactive)() || auto) {
304
+ console.error('scribe install: more than one engagement needs a local collector — ' +
305
+ `name one with --project <${plan.candidates.map((e) => e.slug).join('|')}>.`);
306
+ return { project: null, code: 2 };
307
+ }
308
+ const answer = await (0, prompt_1.ask)(`Which one? [1-${plan.candidates.length}, or anything else to stop] `);
309
+ const chosen = answer === null ? null : (0, recommend_1.chosenFrom)(answer, plan.candidates);
310
+ if (!chosen) {
311
+ console.log('Nothing installed.');
312
+ return { project: null, code: 0 };
313
+ }
314
+ return { project: chosen.slug, code: 0 };
315
+ }
316
+ /** The engagement the server knows by this slug, if it named one. */
317
+ function staffedOn(setup, project) {
318
+ return setup?.engagements.find((engagement) => engagement.slug === project);
319
+ }
320
+ function trimSetting(value) {
321
+ return value.replace(/\/+$/, '');
322
+ }
323
+ /**
324
+ * The mismatch that cost a day of diagnosis: an issuer that is reachable and
325
+ * signs somebody in, but is not the one the server verifies against. `jose`
326
+ * compares `iss` byte-for-byte, so the token is minted, the sign-in looks
327
+ * fine, and every call afterwards is refused with nothing tying the two
328
+ * facts together. The server names its own issuer precisely so this line can
329
+ * exist — it is a diagnostic, never a value the CLI adopts.
330
+ */
331
+ function issuerWarnings(issuer, setup) {
332
+ const theirs = setup?.endpoints.issuer;
333
+ if (!issuer || !theirs)
334
+ return [];
335
+ if (trimSetting(issuer) === trimSetting(theirs))
336
+ return [];
337
+ return [
338
+ `you are signed in against ${issuer} but this server verifies tokens from ${theirs} — ` +
339
+ `run \`scribe login --issuer ${theirs}\` or your sends will be refused`,
340
+ ];
341
+ }
169
342
  async function cmdInstall(ctx) {
170
- const project = (0, exports.str)(ctx.args, 'project');
343
+ const named = (0, exports.str)(ctx.args, 'project');
344
+ const sources = endpointSources(ctx);
345
+ // Two resolutions, and the split is the point: this one is how to *reach*
346
+ // the server, before it has said anything.
347
+ const reach = (0, setup_1.resolveEndpoints)(sources);
348
+ // Asked either way when it can be: with --project it still fills in the
349
+ // amend and MCP URLs and can say the slug is not one of yours, and neither
350
+ // of those is worth a flag. Only the recommendation needs the answer, so
351
+ // only the recommendation treats silence as fatal.
352
+ const { setup, problem } = await askServer(ctx, reach);
353
+ // And this one is what gets written down, now that the server has named
354
+ // its own endpoints — which beat a stale local file, and lose to a flag.
355
+ const settled = (0, setup_1.resolveEndpoints)({ ...sources, server: setup?.endpoints ?? null });
356
+ const flagged = (0, exports.all)(ctx.args, 'match');
357
+ const proposal = flagged.length > 0 ? null : (0, recommend_1.proposeMatch)((0, git_1.repoIdentity)());
358
+ let project = named;
171
359
  if (!project) {
172
- console.error('scribe install: --project <slug> is required (the engagement this machine works on)');
173
- return 2;
360
+ if (!setup) {
361
+ console.error(`scribe install: ${problem}`);
362
+ console.error('scribe install: or name the engagement yourself — ' +
363
+ '`scribe install --project <slug> --match <pattern>`');
364
+ return 1;
365
+ }
366
+ const chosen = await chooseProject(ctx, setup, [
367
+ 'It will then:',
368
+ ` capture commits in repos matching ${flagged.length > 0 ? flagged.join(', ') : (proposal?.pattern ?? 'the engagement slug')}${proposal ? ` (${proposal.source})` : ''}`,
369
+ ` send their metadata to ${settled.amendUrl ?? '(no amend url yet)'}`,
370
+ ' install a git post-commit hook globally, chaining any hook you already have',
371
+ ]);
372
+ if (!chosen.project)
373
+ return chosen.code;
374
+ project = chosen.project;
375
+ }
376
+ else if (setup && !staffedOn(setup, project)) {
377
+ console.log(`note: the server does not list ${project} among your engagements ` +
378
+ `(${setup.engagements.map((e) => e.slug).join(', ') || 'none'}) — installing anyway.`);
174
379
  }
175
- const patterns = (0, exports.all)(ctx.args, 'match');
176
- // With no --match, the slug itself is the pattern: `--project bonterra`
177
- // captures repos whose remote or path mentions bonterra.
178
- const match = patterns.length > 0 ? patterns : [project];
380
+ // With neither a --match nor a repository to read one off, the slug is the
381
+ // pattern which is what this command has always done.
382
+ const match = flagged.length > 0 ? flagged : [proposal?.pattern ?? project];
179
383
  let config = (0, config_1.upsertEngagement)(ctx.config, project, match);
180
- const issuer = (0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'issuer'), process.env.SCRIBE_ISSUER ?? process.env.OPENAUTH_ISSUER, config.issuer);
181
- const amendUrl = (0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'amend-url'), process.env.SCRIBE_AMEND_URL, config.amendUrl);
182
- const mcpUrl = (0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'mcp-url'), process.env.SCRIBE_MCP_URL, config.mcpUrl);
183
384
  config = {
184
385
  ...config,
185
- ...(issuer && { issuer: issuer.replace(/\/+$/, '') }),
186
- ...(amendUrl && { amendUrl: amendUrl.replace(/\/+$/, '') }),
187
- ...(mcpUrl && { mcpUrl: mcpUrl.replace(/\/+$/, '') }),
386
+ ...(settled.issuer && { issuer: settled.issuer }),
387
+ ...(settled.apiUrl && { apiUrl: settled.apiUrl }),
388
+ ...(settled.amendUrl && { amendUrl: settled.amendUrl }),
389
+ ...(settled.mcpUrl && { mcpUrl: settled.mcpUrl }),
188
390
  };
189
391
  const result = (0, install_1.installHook)({
190
392
  paths: ctx.paths,
@@ -193,13 +395,23 @@ async function cmdInstall(ctx) {
193
395
  force: (0, exports.has)(ctx.args, 'force'),
194
396
  });
195
397
  (0, config_1.saveConfig)({ ...config, hook: result.state }, ctx.paths);
398
+ console.log('');
196
399
  console.log(`Scribe is collecting for: ${config.engagements.map((e) => e.project).join(', ')}`);
197
- console.log(` repos matching: ${match.join(', ')}`);
400
+ console.log(` repos matching: ${match.join(', ')}${proposal ? ` (${proposal.source})` : ''}`);
401
+ if (proposal) {
402
+ console.log(' another repo on this engagement: run `scribe install` in it too');
403
+ }
198
404
  for (const note of result.notes)
199
405
  console.log(` ${note}`);
200
406
  console.log(` state: ${ctx.paths.home}`);
201
- if (!config.amendUrl)
407
+ if (config.amendUrl)
408
+ console.log(` sending to: ${config.amendUrl}`);
409
+ else
202
410
  console.log(' note: no amend url configured yet — captures will queue');
411
+ if (problem)
412
+ console.log(` note: ${problem}`);
413
+ for (const warning of issuerWarnings(settled.issuer, setup))
414
+ console.log(` ! ${warning}`);
203
415
  const session = config.issuer ? sessionFor(ctx, config.issuer) : null;
204
416
  if (!session?.isLoggedIn)
205
417
  console.log(' next: run `scribe login`');
@@ -230,7 +442,7 @@ async function cmdCapture(ctx) {
230
442
  const entry = (0, queue_1.newEntry)({
231
443
  project: engagement.project,
232
444
  commit: {
233
- repo: repo.remote ? shortRemote(repo.remote) : repo.name,
445
+ repo: repo.remote ? (0, git_1.shortRemote)(repo.remote) : repo.name,
234
446
  branch: repo.branch,
235
447
  hash: facts.hash,
236
448
  subject: facts.subject,
@@ -244,15 +456,6 @@ async function cmdCapture(ctx) {
244
456
  spawnDetachedFlush();
245
457
  return 0;
246
458
  }
247
- /** `git@host:org/repo.git` / `https://host/org/repo.git` → `org/repo`. */
248
- function shortRemote(remote) {
249
- const withoutSuffix = remote.replace(/\.git$/, '');
250
- const path = withoutSuffix.includes('://')
251
- ? new URL(withoutSuffix).pathname
252
- : withoutSuffix.split(':').slice(1).join(':');
253
- const parts = path.split('/').filter(Boolean);
254
- return parts.slice(-2).join('/') || withoutSuffix;
255
- }
256
459
  /**
257
460
  * Flushing must never make a commit wait, and it must survive the hook's
258
461
  * shell exiting — so it is a detached child with no stdio, running the same
@@ -341,14 +544,16 @@ async function cmdMcp(ctx) {
341
544
  }
342
545
  async function cmdStatus(ctx) {
343
546
  const row = (label, value) => console.log(` ${label.padEnd(13)}${value}`);
344
- const issuer = (0, config_1.resolveSetting)((0, exports.str)(ctx.args, 'issuer'), process.env.SCRIBE_ISSUER ?? process.env.OPENAUTH_ISSUER, ctx.config.issuer);
547
+ const settings = (0, setup_1.resolveEndpoints)(endpointSources(ctx));
548
+ const issuer = settings.issuer;
345
549
  console.log(`scribe ${VERSION}`);
346
550
  row('state', ctx.paths.home);
347
551
  row('issuer', issuer ?? 'not configured');
552
+ row('app url', settings.apiUrl ?? 'not configured');
348
553
  row('amend url', ctx.config.amendUrl ?? process.env.SCRIBE_AMEND_URL ?? 'not configured');
349
554
  row('mcp url', ctx.config.mcpUrl ?? process.env.SCRIBE_MCP_URL ?? 'not configured');
350
555
  if (!issuer) {
351
- row('auth', 'no issuer configured — run `scribe install --issuer <url>`');
556
+ row('auth', 'no issuer configured — run `scribe login --issuer <url>`');
352
557
  }
353
558
  else {
354
559
  const store = (0, keychain_1.tokenStore)(issuer, { fallbackPath: (0, node_path_1.join)(ctx.paths.home, 'credentials.json') });
@@ -361,9 +566,35 @@ async function cmdStatus(ctx) {
361
566
  `in ${store.describe()}`);
362
567
  }
363
568
  }
364
- row('engagements', ctx.config.engagements.length === 0
365
- ? 'none run `scribe install --project <slug> --match <pattern>`'
366
- : ctx.config.engagements.map((e) => `${e.project} (${e.match.join(', ')})`).join('; '));
569
+ if (ctx.config.engagements.length > 0) {
570
+ row('engagements', ctx.config.engagements.map((e) => `${e.project} (${e.match.join(', ')})`).join('; '));
571
+ }
572
+ else {
573
+ // Nothing configured is the one state where this command used to name
574
+ // flags — `run scribe install --project <slug> --match <pattern>` — for
575
+ // values it can work out itself. So it asks. Bounded, and never fatal:
576
+ // a status command that hangs or fails on a dead network is worse than
577
+ // one that says less.
578
+ const { setup, problem } = await askServer(ctx, settings, 4_000);
579
+ const plan = setup ? (0, recommend_1.recommend)(setup.engagements) : null;
580
+ row('engagements', 'none configured — run `scribe install`');
581
+ if (plan?.verdict === 'one' || plan?.verdict === 'choose') {
582
+ row('', `you are staffed on ${plan.candidates.map((e) => e.slug).join(' and ')}, which ` +
583
+ `need${plan.candidates.length === 1 ? 's' : ''} this machine to collect`);
584
+ }
585
+ else if (plan?.verdict === 'unnecessary') {
586
+ row('', `you are staffed on ${plan.watched.map((e) => e.slug).join(' and ')} — Scribe reads ` +
587
+ 'those repos itself, so this CLI has nothing to collect for you');
588
+ }
589
+ else if (plan?.verdict === 'unstaffed') {
590
+ row('', 'the server has you staffed to no engagement — ask for the staffing first');
591
+ }
592
+ else if (problem) {
593
+ row('', `could not ask the server what you are staffed to: ${problem}`);
594
+ }
595
+ for (const warning of issuerWarnings(issuer, setup))
596
+ row('', `! ${warning}`);
597
+ }
367
598
  const health = (0, install_1.hookHealth)(ctx.config, ctx.paths, scribeBinPath());
368
599
  row('hook', health.installed
369
600
  ? `${(0, node_path_1.join)(health.path ?? '', 'post-commit')}${health.chained ? ` → chains ${health.chained}` : ''}`
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/prompt.js ADDED
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.interactive = interactive;
4
+ exports.ask = ask;
5
+ exports.isYes = isYes;
6
+ /**
7
+ * The one question this CLI asks a person, and the rule about when it may
8
+ * not ask at all.
9
+ *
10
+ * `scribe install` recommends rather than applies: it prints what it found
11
+ * and waits, because installing a global git hook and booking a machine's
12
+ * commits to a client engagement should not happen on an inference. That
13
+ * only works where somebody is present to answer. A hook, a CI step or a
14
+ * provisioning script has no terminal, and a prompt there does not fail —
15
+ * it hangs, which is worse. So `interactive()` is checked before anything
16
+ * is asked, and a non-interactive caller is told to pass `--project` or
17
+ * `--yes` instead of being left waiting.
18
+ */
19
+ const node_readline_1 = require("node:readline");
20
+ /**
21
+ * Is there somebody there? Both ends matter: stdin carries the answer and
22
+ * stdout carries the question, and a pipe on either is not a conversation.
23
+ */
24
+ function interactive(streams = process) {
25
+ return Boolean(streams.stdin?.isTTY && streams.stdout?.isTTY);
26
+ }
27
+ /**
28
+ * One line of input, trimmed. An empty line means "the default"; **null means
29
+ * no answer at all** — stdin ended before one arrived.
30
+ *
31
+ * The two are deliberately not the same value. An empty line is a person
32
+ * pressing Return at a `[Y/n]`, which is a yes. A closed stdin is nobody
33
+ * there, and `isYes('')` returning true would make that a yes as well —
34
+ * installing a git hook because a pipe hung up.
35
+ */
36
+ function ask(question, { input, output } = {}) {
37
+ const rl = (0, node_readline_1.createInterface)({
38
+ input: input ?? process.stdin,
39
+ output: output ?? process.stdout,
40
+ });
41
+ return new Promise((resolve) => {
42
+ let answered = false;
43
+ rl.question(question, (answer) => {
44
+ answered = true;
45
+ rl.close();
46
+ resolve(answer.trim());
47
+ });
48
+ // Fires after the callback above too, hence the flag.
49
+ rl.on('close', () => {
50
+ if (!answered)
51
+ resolve(null);
52
+ });
53
+ });
54
+ }
55
+ /** `[Y/n]` — anything but an explicit no is a yes, empty line included. */
56
+ function isYes(answer) {
57
+ const value = answer.trim().toLowerCase();
58
+ return value === '' || value === 'y' || value === 'yes';
59
+ }
60
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":";;AAyBA,kCAIC;AAWD,kBAiBC;AAGD,sBAGC;AA/DD;;;;;;;;;;;;GAYG;AACH,iDAAgD;AAQhD;;;GAGG;AACH,SAAgB,WAAW,CACzB,UAAyE,OAAO;IAEhF,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,GAAG,CAAC,QAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,KAAiB,EAAE;IACtE,MAAM,EAAE,GAAG,IAAA,+BAAe,EAAC;QACzB,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK;QAC7B,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM;KACjC,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,QAAQ,GAAG,IAAI,CAAC;YAChB,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,sDAAsD;QACtD,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2EAA2E;AAC3E,SAAgB,KAAK,CAAC,MAAc;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recommend = recommend;
4
+ exports.chosenFrom = chosenFrom;
5
+ exports.proposeMatch = proposeMatch;
6
+ /**
7
+ * Which engagement this machine should collect for, and what to say about
8
+ * it — the decision `scribe install` makes when nobody passed `--project`.
9
+ *
10
+ * ## Why the CLI asks instead of being told
11
+ *
12
+ * The old onboarding line was four values a human had to relay: a project
13
+ * slug, a repo pattern, an issuer URL and the amend URL. Two of them fail
14
+ * quietly when they are wrong. A mistyped issuer mints a token that signs in
15
+ * and is then refused by every call after it (`iss` is compared
16
+ * byte-for-byte). A mistyped slug is worse than an error: the hours land on
17
+ * another client's engagement, and hours are billing evidence.
18
+ *
19
+ * The CLI is authenticated, so the server can answer both. `GET
20
+ * /api/me/setup` says which engagements this person is staffed to and which
21
+ * of them have no server-side collector; everything here is the reading of
22
+ * that answer.
23
+ *
24
+ * ## Recommend, never silently apply
25
+ *
26
+ * Installing a global git hook and booking a machine's commits to a client
27
+ * engagement are not things to do on an inference. So this module decides
28
+ * what to *propose* and `index.ts` asks. One candidate is one keystroke;
29
+ * several is a numbered question; none is a sentence explaining why, which
30
+ * is more useful than a prompt with nothing in it.
31
+ *
32
+ * ## `localCollector` is the whole test
33
+ *
34
+ * It means Lost Hex has no read access to those repos (DATA-ITD-005), so the
35
+ * person's own machine is the only place that work is ever observed. An
36
+ * engagement whose repos the server already walks does not want this CLI at
37
+ * all — installing for it would duplicate a collector that is running
38
+ * anyway — so those are never candidates, and somebody staffed only to
39
+ * those is told the CLI is unnecessary for them rather than being asked to
40
+ * pick one.
41
+ *
42
+ * Everything here is pure: it takes the server's answer and the repo the
43
+ * person is standing in, and returns the words. That is what makes the
44
+ * three interesting cases — one candidate, several, none — testable without
45
+ * a terminal, a network or a git repository.
46
+ */
47
+ const git_1 = require("./git");
48
+ function label(engagement) {
49
+ const name = engagement.name || engagement.slug;
50
+ return engagement.client ? `${name} (${engagement.client})` : name;
51
+ }
52
+ function list(engagements) {
53
+ const slugs = engagements.map((e) => e.slug);
54
+ if (slugs.length <= 1)
55
+ return slugs.join('');
56
+ return `${slugs.slice(0, -1).join(', ')} and ${slugs[slugs.length - 1]}`;
57
+ }
58
+ function watchedNote(engagement) {
59
+ if (engagement.watchedRepos > 0) {
60
+ return `${engagement.watchedRepos} repo${engagement.watchedRepos === 1 ? '' : 's'} already watched`;
61
+ }
62
+ // A watched engagement with an empty work list collects nothing at all.
63
+ // That is an admin problem rather than a reason to install here, and
64
+ // saying so is how it gets noticed instead of looking like this CLI's
65
+ // fault when the bullets stay empty.
66
+ return 'no repos registered yet — ask for its repos to be added';
67
+ }
68
+ /**
69
+ * The reading of the server's answer. `engagements` arrives in slug order
70
+ * and stays in it, so a numbered prompt means the same thing twice.
71
+ */
72
+ function recommend(engagements) {
73
+ const candidates = engagements.filter((e) => e.localCollector);
74
+ const watched = engagements.filter((e) => !e.localCollector);
75
+ const lines = [];
76
+ if (engagements.length === 0) {
77
+ lines.push('Scribe does not have you staffed to any engagement, so there is nothing', 'to collect for yet. Ask for the staffing and run `scribe install` again.');
78
+ return { verdict: 'unstaffed', candidates, watched, chosen: null, lines };
79
+ }
80
+ if (candidates.length === 0) {
81
+ lines.push(`You are staffed to ${list(watched)}, and Scribe collects ${watched.length === 1 ? 'that one' : 'all of them'} from the repos itself.`, 'This CLI is for engagements Lost Hex has no access to, so you do not need', 'it — nothing was installed.', '');
82
+ for (const engagement of watched) {
83
+ lines.push(` ${engagement.slug.padEnd(10)}${label(engagement)} — ${watchedNote(engagement)}`);
84
+ }
85
+ lines.push('', 'If you have just joined an engagement whose repos Scribe cannot read, ask', 'for the staffing to be added and run this again.');
86
+ return { verdict: 'unnecessary', candidates, watched, chosen: null, lines };
87
+ }
88
+ if (candidates.length === 1) {
89
+ const chosen = candidates[0];
90
+ lines.push('One of your engagements has no server-side collector, so this machine is', 'the only place its work is ever seen:', '', ` ${chosen.slug.padEnd(10)}${label(chosen)}`, '');
91
+ if (watched.length > 0) {
92
+ lines.push(`Also staffed to ${list(watched)}: Scribe reads those repos itself, so this CLI leaves them alone.`, '');
93
+ }
94
+ return { verdict: 'one', candidates, watched, chosen, lines };
95
+ }
96
+ lines.push(`${candidates.length} of your engagements have no server-side collector, and only you know`, 'which one this repository belongs to:', '');
97
+ candidates.forEach((engagement, index) => {
98
+ lines.push(` ${index + 1} ${engagement.slug.padEnd(10)}${label(engagement)}`);
99
+ });
100
+ lines.push('');
101
+ if (watched.length > 0) {
102
+ lines.push(`Also staffed to ${list(watched)}: Scribe reads those repos itself.`, '');
103
+ }
104
+ return { verdict: 'choose', candidates, watched, chosen: null, lines };
105
+ }
106
+ /** Reads an answer to the numbered question. Null means "none of them". */
107
+ function chosenFrom(answer, candidates) {
108
+ const trimmed = answer.trim().toLowerCase();
109
+ if (trimmed === '')
110
+ return null;
111
+ const bySlug = candidates.find((engagement) => engagement.slug.toLowerCase() === trimmed);
112
+ if (bySlug)
113
+ return bySlug;
114
+ const index = Number(trimmed);
115
+ if (!Number.isInteger(index) || index < 1 || index > candidates.length)
116
+ return null;
117
+ return candidates[index - 1];
118
+ }
119
+ /**
120
+ * The repo pattern to propose, read off the repository the person is
121
+ * standing in — because they almost always are standing in the one they
122
+ * mean, and `--match` is the value they are least able to guess the shape of.
123
+ *
124
+ * `org/repo` rather than `org`, deliberately. The patterns are an allowlist:
125
+ * a commit is captured only when its repo matches one (DATA-ITD-005), so the
126
+ * narrow proposal cannot pick up a personal project, another client's work,
127
+ * or the twenty other repos on the same laptop. Working on a second repo is
128
+ * a second `scribe install` in it, and the patterns accumulate; the prompt
129
+ * says so, and `--match <org>` is always there for somebody who wants the
130
+ * whole org in one go.
131
+ *
132
+ * Null when this is not a git repository at all — the caller falls back to
133
+ * the slug, which is what `scribe install --project X` has always done.
134
+ */
135
+ function proposeMatch(repo) {
136
+ if (!repo)
137
+ return null;
138
+ if (repo.remote) {
139
+ return { pattern: (0, git_1.shortRemote)(repo.remote), source: `from this repo's origin ${repo.remote}` };
140
+ }
141
+ // No remote: the directory name is all there is, and it is what
142
+ // `matchEngagement` compares the repo's path and name against anyway.
143
+ return { pattern: repo.name, source: 'from this repo’s directory name (it has no origin)' };
144
+ }
145
+ //# sourceMappingURL=recommend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../src/recommend.ts"],"names":[],"mappings":"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"}
package/dist/setup.js ADDED
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetupError = exports.SETUP_PATH = void 0;
4
+ exports.trimUrl = trimUrl;
5
+ exports.apiBaseFromIssuer = apiBaseFromIssuer;
6
+ exports.resolveEndpoints = resolveEndpoints;
7
+ exports.parseSetup = parseSetup;
8
+ exports.fetchSetup = fetchSetup;
9
+ /** The path the answer lives at, under the stage's single hostname. */
10
+ exports.SETUP_PATH = '/api/me/setup';
11
+ /**
12
+ * A question the server could not answer. Carries a hint because every one
13
+ * of these has the same escape hatch — the explicit flags still work — and
14
+ * an error that does not say so leaves somebody stuck.
15
+ */
16
+ class SetupError extends Error {
17
+ constructor(message) {
18
+ super(message);
19
+ this.name = 'SetupError';
20
+ }
21
+ }
22
+ exports.SetupError = SetupError;
23
+ function trimUrl(value) {
24
+ return value.replace(/\/+$/, '');
25
+ }
26
+ /**
27
+ * The reporting app's base URL for a given issuer, or null when the issuer
28
+ * is not one of the realm's own hostnames.
29
+ *
30
+ * Mirrors `webHostname`/`issuerHostname` in `packages/core/src/auth/realm.ts`,
31
+ * which is the only place the forward mapping is decided. The CLI cannot
32
+ * import that (it ships as a dependency-free npm package), so it restates
33
+ * the inverse and the two are pinned together by the examples above and by
34
+ * `setup.test.ts`.
35
+ */
36
+ function apiBaseFromIssuer(issuer) {
37
+ if (!issuer)
38
+ return null;
39
+ let url;
40
+ try {
41
+ url = new URL(issuer);
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ const [first, ...rest] = url.hostname.split('.');
47
+ // A bare hostname is not a stage in a zone, and neither is a loopback or
48
+ // a generated function URL: all of them fall through to `--api-url`.
49
+ if (rest.length < 2)
50
+ return null;
51
+ const zone = rest.join('.');
52
+ if (first === 'auth')
53
+ return `${url.protocol}//${zone}`;
54
+ if (first.startsWith('auth-')) {
55
+ const stage = first.slice('auth-'.length);
56
+ return stage ? `${url.protocol}//${stage}.${zone}` : null;
57
+ }
58
+ return null;
59
+ }
60
+ /**
61
+ * Where each URL comes from, in one place, because the ordering is the whole
62
+ * compatibility story of this change.
63
+ *
64
+ * A flag or an environment variable always wins: `scribe install --project X
65
+ * --match Y --amend-url Z` is a published interface and anybody scripting it
66
+ * keeps exactly the behaviour they had. The recommendation is what happens
67
+ * in the *absence* of those flags.
68
+ *
69
+ * Then the server, and only then the config file. That order is deliberate
70
+ * and it is the fix for a real failure: a stale `amendUrl` in
71
+ * `~/.config/scribe/config.json` — a dev Lambda URL from months ago, say —
72
+ * otherwise survives every re-install and fails on the next flush and
73
+ * nowhere else. The server naming its own endpoints is authoritative about
74
+ * where they are; a local file is a cache of a previous answer.
75
+ *
76
+ * The issuer is the exception: it never comes from the server. It is the
77
+ * authority being trusted, and a resource server telling a client which
78
+ * authority to believe is circular. `apiUrl` falls back to deriving from it,
79
+ * which keeps the API host and the issuer in one realm by construction.
80
+ */
81
+ function resolveEndpoints({ flags, env, config, server = null, }) {
82
+ const pick = (...values) => {
83
+ const hit = values.find((value) => typeof value === 'string' && value.trim().length > 0);
84
+ return hit ? trimUrl(hit.trim()) : undefined;
85
+ };
86
+ const issuer = pick(flags.issuer, env.issuer, config.issuer);
87
+ return {
88
+ ...(issuer && { issuer }),
89
+ apiUrl: pick(flags.apiUrl, env.apiUrl, server?.app, config.apiUrl, apiBaseFromIssuer(issuer) ?? undefined),
90
+ amendUrl: pick(flags.amendUrl, env.amendUrl, server?.amend, config.amendUrl),
91
+ mcpUrl: pick(flags.mcpUrl, env.mcpUrl, server?.mcp, config.mcpUrl),
92
+ };
93
+ }
94
+ function engagementFrom(raw) {
95
+ if (!raw || typeof raw !== 'object')
96
+ return null;
97
+ const row = raw;
98
+ if (typeof row.slug !== 'string' || row.slug.length === 0)
99
+ return null;
100
+ return {
101
+ slug: row.slug,
102
+ name: typeof row.name === 'string' ? row.name : row.slug,
103
+ client: typeof row.client === 'string' ? row.client : null,
104
+ localCollector: row.localCollector === true,
105
+ watchedRepos: typeof row.watchedRepos === 'number' ? row.watchedRepos : 0,
106
+ };
107
+ }
108
+ /**
109
+ * Reads the answer defensively rather than casting it. The CLI is published
110
+ * to npm and a given copy may be older or newer than the stage it is
111
+ * talking to, so a field this version does not recognise is ignored and a
112
+ * field it needs and cannot find is a stated refusal — never `undefined`
113
+ * arriving somewhere further down as a project slug.
114
+ */
115
+ function parseSetup(body) {
116
+ const root = (body ?? {});
117
+ const person = (root.person ?? {});
118
+ const endpoints = (root.endpoints ?? {});
119
+ const email = typeof person.email === 'string' ? person.email : '';
120
+ if (!email)
121
+ throw new SetupError('the server did not say who it thinks you are');
122
+ const engagements = Array.isArray(root.engagements)
123
+ ? root.engagements.map(engagementFrom).filter((e) => e !== null)
124
+ : [];
125
+ return {
126
+ person: { email, name: typeof person.name === 'string' ? person.name : email },
127
+ engagements,
128
+ endpoints: {
129
+ app: typeof endpoints.app === 'string' ? trimUrl(endpoints.app) : '',
130
+ amend: typeof endpoints.amend === 'string' ? trimUrl(endpoints.amend) : '',
131
+ mcp: typeof endpoints.mcp === 'string' ? trimUrl(endpoints.mcp) : '',
132
+ issuer: typeof endpoints.issuer === 'string' ? trimUrl(endpoints.issuer) : null,
133
+ },
134
+ };
135
+ }
136
+ async function get(url, token, fetchImpl, timeoutMs) {
137
+ const response = await fetchImpl(url, {
138
+ method: 'GET',
139
+ headers: { authorization: `Bearer ${token}`, accept: 'application/json' },
140
+ signal: AbortSignal.timeout(timeoutMs),
141
+ });
142
+ return { status: response.status, text: await response.text() };
143
+ }
144
+ /**
145
+ * One authenticated GET, one refresh, one retry. Throws `SetupError` with a
146
+ * sentence a person can act on for every outcome that is not an answer —
147
+ * including a 404, which means this stage is older than the endpoint and the
148
+ * explicit flags are the way through.
149
+ */
150
+ async function fetchSetup({ apiUrl, session, fetchImpl = fetch, timeoutMs = 15_000, }) {
151
+ const url = `${trimUrl(apiUrl)}${exports.SETUP_PATH}`;
152
+ let token;
153
+ try {
154
+ token = await session.accessToken();
155
+ }
156
+ catch {
157
+ throw new SetupError('not signed in — run `scribe login` first');
158
+ }
159
+ let result;
160
+ try {
161
+ result = await get(url, token, fetchImpl, timeoutMs);
162
+ if (result.status === 401) {
163
+ const refreshed = await session.refresh();
164
+ if (refreshed)
165
+ result = await get(url, refreshed, fetchImpl, timeoutMs);
166
+ }
167
+ }
168
+ catch (err) {
169
+ throw new SetupError(`could not reach ${url}: ${err instanceof Error ? err.message : String(err)}`);
170
+ }
171
+ if (result.status === 401 || result.status === 403) {
172
+ throw new SetupError(`${url} refused this token (${result.status}) — the issuer you are signed in ` +
173
+ 'against may not be the one this server verifies. Run `scribe login --issuer <url>` ' +
174
+ 'against the right one.');
175
+ }
176
+ if (result.status === 404) {
177
+ throw new SetupError(`${url} is not there (404) — this Scribe server predates the recommendation. ` +
178
+ 'Install with the explicit flags instead: `scribe install --project <slug> --match <pattern>`.');
179
+ }
180
+ if (result.status < 200 || result.status >= 300) {
181
+ throw new SetupError(`${url} answered ${result.status}: ${result.text.slice(0, 200)}`);
182
+ }
183
+ try {
184
+ return parseSetup(JSON.parse(result.text));
185
+ }
186
+ catch (err) {
187
+ if (err instanceof SetupError)
188
+ throw err;
189
+ throw new SetupError(`${url} did not answer with JSON`);
190
+ }
191
+ }
192
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@losthex/scribe",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Lost Hex Scribe CLI",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {