@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 +76 -12
- package/dist/config.js +10 -3
- package/dist/config.js.map +1 -1
- package/dist/git.js +19 -0
- package/dist/git.js.map +1 -1
- package/dist/index.js +268 -37
- package/dist/index.js.map +1 -1
- package/dist/prompt.js +60 -0
- package/dist/prompt.js.map +1 -0
- package/dist/recommend.js +145 -0
- package/dist/recommend.js.map +1 -0
- package/dist/setup.js +192 -0
- package/dist/setup.js.map +1 -0
- package/package.json +1 -1
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
|
-
|
|
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
|
|
31
|
-
scribe
|
|
32
|
-
scribe
|
|
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.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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");
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;
|
|
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":";;AAiDA,kCAEC;AAED,oCA4BC;AAOD,kCA2BC;AAGD,8BAMC;AAED,oCAMC;AAED,wCAMC;
|
|
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
|
|
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]... [--
|
|
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
|
|
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', '
|
|
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', '
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
173
|
-
|
|
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
|
-
|
|
176
|
-
//
|
|
177
|
-
|
|
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
|
|
186
|
-
...(
|
|
187
|
-
...(
|
|
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 (
|
|
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
|
|
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
|
|
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
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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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"}
|