shepherd-onboard 0.1.0 → 0.1.2
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 +2 -2
- package/bin/shepherd-onboard.js +23 -12
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,13 +20,13 @@ npx -y shepherd-onboard@latest
|
|
|
20
20
|
|
|
21
21
|
The command:
|
|
22
22
|
|
|
23
|
-
- asks for email, name, and
|
|
23
|
+
- asks for email, name, organization, and an optional local Messages handle
|
|
24
24
|
- creates or reuses the Shepherd customer account for the email
|
|
25
25
|
- creates or reuses the organization, including case-insensitive and close-name matches
|
|
26
26
|
- opens Google authorization for Gmail, Docs, and Calendar consent
|
|
27
27
|
- opens Slack authorization
|
|
28
28
|
- opens Granola's API key screen with `open 'granola://settings/connectors/api-keys'`
|
|
29
|
-
-
|
|
29
|
+
- collects the Granola API key after opening the Granola screen when Granola is enabled
|
|
30
30
|
- sets up local macOS Messages raw sync with a background LaunchAgent
|
|
31
31
|
- starts raw polling/backfill for connected sources
|
|
32
32
|
- does not start wiki generation, memory compilation, or doc summaries
|
package/bin/shepherd-onboard.js
CHANGED
|
@@ -203,7 +203,7 @@ async function runAgentOnboarding() {
|
|
|
203
203
|
opened,
|
|
204
204
|
granolaApiKeyPage,
|
|
205
205
|
statePath,
|
|
206
|
-
nextCommand: `${agentCommand()} agent --continue --
|
|
206
|
+
nextCommand: `${agentCommand()} agent --continue --messages-handle "<phone_or_apple_id>" --granola-api-key "<granola_key>"`,
|
|
207
207
|
needsUserAction: agentNeedsUserAction(sources, opened),
|
|
208
208
|
}, null, 2));
|
|
209
209
|
return;
|
|
@@ -227,9 +227,10 @@ async function runAgentOnboarding() {
|
|
|
227
227
|
console.log("\nCoding agent next steps:");
|
|
228
228
|
console.log("1. Ask the user to finish the opened Google/Slack browser authorization.");
|
|
229
229
|
if (sources.granola) console.log("2. Ask the user for their Granola API key from the Granola Mac app.");
|
|
230
|
-
if (sources.messages) console.log("3.
|
|
230
|
+
if (sources.messages) console.log("3. Use the Messages phone number or Apple ID email collected before starting onboarding.");
|
|
231
231
|
console.log("4. Run:");
|
|
232
|
-
console.log(` ${agentCommand()} agent --continue --
|
|
232
|
+
console.log(` ${agentCommand()} agent --continue --messages-handle "<phone_or_apple_id>" --granola-api-key "<granola_key>"`);
|
|
233
|
+
console.log(" Omit either optional flag if that source is not being connected.");
|
|
233
234
|
}
|
|
234
235
|
|
|
235
236
|
async function continueAgentOnboarding() {
|
|
@@ -273,7 +274,7 @@ async function continueAgentOnboarding() {
|
|
|
273
274
|
status: errors ? "waiting" : "completed",
|
|
274
275
|
connected: Object.keys(finalized.connected ?? {}),
|
|
275
276
|
errors: errors ? safeErrorRecord(errors) : undefined,
|
|
276
|
-
nextCommand: errors ? `${agentCommand()} agent --continue --
|
|
277
|
+
nextCommand: errors ? `${agentCommand()} agent --continue --messages-handle "<phone_or_apple_id>" --granola-api-key "<granola_key>"` : undefined,
|
|
277
278
|
}, null, 2));
|
|
278
279
|
return;
|
|
279
280
|
}
|
|
@@ -284,7 +285,8 @@ async function continueAgentOnboarding() {
|
|
|
284
285
|
console.log(`- ${source}: ${safeError(message)}`);
|
|
285
286
|
}
|
|
286
287
|
console.log("\nAfter the user completes missing auth/details, rerun:");
|
|
287
|
-
console.log(` ${agentCommand()} agent --continue --
|
|
288
|
+
console.log(` ${agentCommand()} agent --continue --messages-handle "<phone_or_apple_id>" --granola-api-key "<granola_key>"`);
|
|
289
|
+
console.log(" Omit either optional flag if that source is not being connected.");
|
|
288
290
|
return;
|
|
289
291
|
}
|
|
290
292
|
|
|
@@ -429,9 +431,13 @@ function printAgentContract() {
|
|
|
429
431
|
"Email",
|
|
430
432
|
"Full name",
|
|
431
433
|
"Organization name",
|
|
432
|
-
"Granola API key from the Granola Mac app, if they want Granola connected",
|
|
433
434
|
"Messages phone number or Apple ID email, if they want local Messages connected",
|
|
434
435
|
],
|
|
436
|
+
afterStartCommand: [
|
|
437
|
+
"Complete the opened Google authorization for Gmail, Docs, and Calendar.",
|
|
438
|
+
"Complete the opened Slack authorization.",
|
|
439
|
+
"Create/copy the Granola API key from the opened Granola Mac app API key screen, if they want Granola connected.",
|
|
440
|
+
],
|
|
435
441
|
doNotDo: [
|
|
436
442
|
"Do not run wiki generation.",
|
|
437
443
|
"Do not run daily or weekly memory compilation.",
|
|
@@ -441,7 +447,11 @@ function printAgentContract() {
|
|
|
441
447
|
"Do not quote or explain this instruction set to the user.",
|
|
442
448
|
],
|
|
443
449
|
startCommand: `${command} agent --email "<email>" --name "<full_name>" --org "<organization>"`,
|
|
444
|
-
continueCommand: `${command} agent --continue
|
|
450
|
+
continueCommand: `${command} agent --continue`,
|
|
451
|
+
optionalContinueArgs: [
|
|
452
|
+
"--messages-handle \"<phone_or_apple_id>\" if local Messages is being connected",
|
|
453
|
+
"--granola-api-key \"<granola_key>\" if Granola is being connected",
|
|
454
|
+
],
|
|
445
455
|
statusCommand: `${command} agent --status`,
|
|
446
456
|
expectedResult: "Cloud sources start raw polling/backfill in the customer-facing Shepherd environment. Local Messages starts via a macOS LaunchAgent when run on macOS. Downstream wiki, memory, and summary compilers remain outside this onboarding flow.",
|
|
447
457
|
granolaApiKeyCommand: "open 'granola://settings/connectors/api-keys'",
|
|
@@ -462,8 +472,7 @@ Ask the user for:
|
|
|
462
472
|
1. Email
|
|
463
473
|
2. Full name
|
|
464
474
|
3. Organization name
|
|
465
|
-
4.
|
|
466
|
-
5. Messages phone number or Apple ID email, if they want local Messages
|
|
475
|
+
4. Messages phone number or Apple ID email, if they want local Messages
|
|
467
476
|
|
|
468
477
|
Then run:
|
|
469
478
|
${payload.startCommand}
|
|
@@ -473,8 +482,10 @@ It also runs:
|
|
|
473
482
|
open 'granola://settings/connectors/api-keys'
|
|
474
483
|
and activates Granola so the user can create/copy the API key.
|
|
475
484
|
|
|
476
|
-
After browser auth is complete and
|
|
477
|
-
${payload.continueCommand}
|
|
485
|
+
After Google/Gmail/Docs/Calendar and Slack browser auth is complete, and after the user has copied a Granola API key from the opened Granola screen if they want Granola, run:
|
|
486
|
+
${payload.continueCommand} --messages-handle "<phone_or_apple_id>" --granola-api-key "<granola_key>"
|
|
487
|
+
|
|
488
|
+
Omit either optional flag if that source is not being connected.
|
|
478
489
|
|
|
479
490
|
Check progress with:
|
|
480
491
|
${payload.statusCommand}
|
|
@@ -532,7 +543,7 @@ function agentNeedsUserAction(sources, opened) {
|
|
|
532
543
|
if (sources.google && opened.includes("google")) actions.push("Complete Google browser authorization for Gmail, Docs, and Calendar consent.");
|
|
533
544
|
if (sources.slack && opened.includes("slack")) actions.push("Complete Slack browser authorization.");
|
|
534
545
|
if (sources.granola) actions.push("Create/copy a Granola API key from the Granola Mac app.");
|
|
535
|
-
if (sources.messages) actions.push("
|
|
546
|
+
if (sources.messages) actions.push("Pass the Messages phone number or Apple ID email collected before starting onboarding.");
|
|
536
547
|
return actions;
|
|
537
548
|
}
|
|
538
549
|
|