pruff-skills 2.1.0 → 2.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/dist/cli.mjs +33 -16
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -7962,6 +7962,12 @@ If the session is already rooted inside the repo (or one of its worktrees), they
|
|
|
7962
7962
|
| \`Pruff-Backoffice/\` | React 19 + Vite + MUI v7 internal staff frontend. Cross-tenant views, tenant config, roles/permissions. React Query + Zustand. Consumes \`/api/backoffice\`. Branches from \`main\` (no \`dev\`); no test suite. |
|
|
7963
7963
|
| \`Pruff-server/\` | Node.js 22 / Express / Prisma backend. Multi-tenant (DB-per-tenant), many domains and routes. |
|
|
7964
7964
|
|
|
7965
|
+
### Team context
|
|
7966
|
+
|
|
7967
|
+
| Folder | What it is |
|
|
7968
|
+
|---|---|
|
|
7969
|
+
| \`slides/\` | The team's decks (React + Vite): sprint updates, plans, per-team status. Read them for the current priorities and who owns what. \`npm run dev\` serves them; see its README to add a deck. |
|
|
7970
|
+
|
|
7965
7971
|
### Serverless microservices (\`sls-*/\`, \`slsl-*/\` — clone as needed, don't modify unless asked)
|
|
7966
7972
|
|
|
7967
7973
|
All live in the same AWS account, share the \`lambda-sqs\` IAM role, and most use a shared
|
|
@@ -8605,17 +8611,26 @@ const PRISMA_BIN = join("node_modules", ".bin", "prisma");
|
|
|
8605
8611
|
const KNOWLEDGE_REPO = "https://github.com/Pruff-Tech/pruff-knowledge";
|
|
8606
8612
|
const KNOWLEDGE_DIR = "Pruff Knowledge";
|
|
8607
8613
|
const DEFAULT_WORKSPACE = join(homedir(), "pruff");
|
|
8608
|
-
const MAIN_REPOS = [
|
|
8609
|
-
|
|
8610
|
-
|
|
8611
|
-
|
|
8612
|
-
|
|
8613
|
-
|
|
8614
|
-
|
|
8615
|
-
|
|
8616
|
-
|
|
8617
|
-
|
|
8618
|
-
|
|
8614
|
+
const MAIN_REPOS = [
|
|
8615
|
+
{
|
|
8616
|
+
name: "Pruff-server",
|
|
8617
|
+
url: "https://github.com/Pruff-Tech/Pruff-server",
|
|
8618
|
+
installCmd: "bun",
|
|
8619
|
+
installArgs: ["install"]
|
|
8620
|
+
},
|
|
8621
|
+
{
|
|
8622
|
+
name: "Pruff-Client",
|
|
8623
|
+
url: "https://github.com/Pruff-Tech/Pruff-Client",
|
|
8624
|
+
installCmd: "yarn",
|
|
8625
|
+
installArgs: ["install"]
|
|
8626
|
+
},
|
|
8627
|
+
{
|
|
8628
|
+
name: "slides",
|
|
8629
|
+
url: "https://github.com/Pruff-Tech/slides",
|
|
8630
|
+
installCmd: "npm",
|
|
8631
|
+
installArgs: ["install"]
|
|
8632
|
+
}
|
|
8633
|
+
];
|
|
8619
8634
|
const CORE_SKILLS = [
|
|
8620
8635
|
"commit",
|
|
8621
8636
|
"create-pr",
|
|
@@ -8716,7 +8731,8 @@ async function runOnboarding(args) {
|
|
|
8716
8731
|
await installCatalog(workspace);
|
|
8717
8732
|
setStep("install-harness");
|
|
8718
8733
|
await installHarness(workspace);
|
|
8719
|
-
|
|
8734
|
+
const databaseStepRan = await shouldSetupDatabase(args);
|
|
8735
|
+
if (databaseStepRan) {
|
|
8720
8736
|
setStep("local-database");
|
|
8721
8737
|
await setupLocalEnvironment(join(workspace, "Pruff-server"));
|
|
8722
8738
|
}
|
|
@@ -8729,7 +8745,7 @@ async function runOnboarding(args) {
|
|
|
8729
8745
|
}
|
|
8730
8746
|
setStep("guidance");
|
|
8731
8747
|
await showGuidance(workspace);
|
|
8732
|
-
showTeamCredentialsAsk(workspace);
|
|
8748
|
+
showTeamCredentialsAsk(workspace, databaseStepRan);
|
|
8733
8749
|
showIssues();
|
|
8734
8750
|
showLocalLogin();
|
|
8735
8751
|
if (issues.length === 0) Se(`${import_picocolors.default.green("Done.")} Welcome to Pruff — happy building.`);
|
|
@@ -9598,6 +9614,7 @@ async function showGuidance(workspace) {
|
|
|
9598
9614
|
[`${KNOWLEDGE_DIR}/`, "Obsidian vault — open it in Obsidian"],
|
|
9599
9615
|
["Pruff-server/", "backend (bun)"],
|
|
9600
9616
|
["Pruff-Client/", "frontend (yarn)"],
|
|
9617
|
+
["slides/", "team decks: sprint updates, plans, team status (npm run dev)"],
|
|
9601
9618
|
["sls-*/", "serverless services — clone as you need them"]
|
|
9602
9619
|
];
|
|
9603
9620
|
const labelWidth = Math.max(...tree.map(([label]) => label.length)) + 2;
|
|
@@ -9609,14 +9626,14 @@ async function showGuidance(workspace) {
|
|
|
9609
9626
|
line(import_picocolors.default.bold("Next steps"));
|
|
9610
9627
|
line(`${import_picocolors.default.dim("1.")} Open ${import_picocolors.default.bold("Obsidian")} → the ${import_picocolors.default.cyan(KNOWLEDGE_DIR)} vault is registered and ready.`);
|
|
9611
9628
|
line(`${import_picocolors.default.dim("2.")} Start Claude Code from ${import_picocolors.default.cyan(workspace)} so the shared ${import_picocolors.default.dim(".claude/")} applies everywhere.`);
|
|
9612
|
-
line(`${import_picocolors.default.dim("3.")} Dependencies are installed — ${import_picocolors.default.dim("cd Pruff-server && npm run local")} / ${import_picocolors.default.dim("cd Pruff-Client && yarn start-local")}.`);
|
|
9629
|
+
line(`${import_picocolors.default.dim("3.")} Dependencies are installed — ${import_picocolors.default.dim("cd Pruff-server && npm run local")} / ${import_picocolors.default.dim("cd Pruff-Client && yarn start-local")} / ${import_picocolors.default.dim("cd slides && npm run dev")} for the team decks.`);
|
|
9613
9630
|
line(`${import_picocolors.default.dim("4.")} Run ${import_picocolors.default.dim("/mcp")} inside Claude Code to authenticate Linear + PostHog (already configured in ${import_picocolors.default.dim(".mcp.json")}).`);
|
|
9614
9631
|
line(`${import_picocolors.default.dim("5.")} Clone any serverless service into this folder with ${import_picocolors.default.dim("git clone <repo>")}.`);
|
|
9615
9632
|
line(`${import_picocolors.default.dim("6.")} Install the ${import_picocolors.default.bold("Claude in Chrome")} extension and run ${import_picocolors.default.dim("claude --chrome")} — UI checks and PR screenshots drive the browser through it.`);
|
|
9616
9633
|
line(`${import_picocolors.default.dim("7.")} Prod data is read-only: ${import_picocolors.default.dim("pruff-db-query <database> -e \"SELECT …\"")} — your own reader user, password in the Keychain, verified TLS. Finish a pending request with ${import_picocolors.default.dim("npx pruff-skills onboarding --db-access")}.`);
|
|
9617
9634
|
console.log();
|
|
9618
9635
|
}
|
|
9619
|
-
function showTeamCredentialsAsk(workspace) {
|
|
9636
|
+
function showTeamCredentialsAsk(workspace, databaseStepRan) {
|
|
9620
9637
|
const envPath = join(workspace, "Pruff-server", "local.env");
|
|
9621
9638
|
const line = (s) => console.log(` ${s}`);
|
|
9622
9639
|
line(import_picocolors.default.bold("Ask your team for these credentials") + import_picocolors.default.dim(" (1Password / #dev)"));
|
|
@@ -9627,7 +9644,7 @@ function showTeamCredentialsAsk(workspace) {
|
|
|
9627
9644
|
line(` ${import_picocolors.default.dim(group.unlocks)}`);
|
|
9628
9645
|
}
|
|
9629
9646
|
line("");
|
|
9630
|
-
line(import_picocolors.default.dim("Everything else — the databases, the local tenant, Intelligence — is already set up and needs nothing from anyone."));
|
|
9647
|
+
line(import_picocolors.default.dim(databaseStepRan ? "Everything else — the databases, the local tenant, Intelligence — is already set up and needs nothing from anyone." : `The local databases were skipped. Set them up with ${import_picocolors.default.cyan("npx pruff-skills onboarding --db")}.`));
|
|
9631
9648
|
console.log();
|
|
9632
9649
|
}
|
|
9633
9650
|
function showIssues() {
|