@planu/cli 0.96.4 → 0.97.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/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +70 -2
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/config/compliance-profiles.json +62 -0
- package/dist/config/license-plans.json +19 -2
- package/dist/config/spec-templates/crud-rest-api/spec.md +35 -0
- package/dist/config/spec-templates/crud-rest-api/template.json +10 -0
- package/dist/config/spec-templates/email-notifications/spec.md +31 -0
- package/dist/config/spec-templates/email-notifications/template.json +10 -0
- package/dist/config/spec-templates/file-upload-s3/spec.md +31 -0
- package/dist/config/spec-templates/file-upload-s3/template.json +11 -0
- package/dist/config/spec-templates/jwt-auth/spec.md +35 -0
- package/dist/config/spec-templates/jwt-auth/template.json +10 -0
- package/dist/config/spec-templates/oauth-social-login/spec.md +31 -0
- package/dist/config/spec-templates/oauth-social-login/template.json +10 -0
- package/dist/config/spec-templates/rate-limiting/spec.md +31 -0
- package/dist/config/spec-templates/rate-limiting/template.json +10 -0
- package/dist/config/spec-templates/stripe-payments/spec.md +32 -0
- package/dist/config/spec-templates/stripe-payments/template.json +10 -0
- package/dist/config/spec-templates/webhook-system/spec.md +36 -0
- package/dist/config/spec-templates/webhook-system/template.json +10 -0
- package/dist/engine/agent-ready-exporter/formatters/devin.d.ts +7 -0
- package/dist/engine/agent-ready-exporter/formatters/devin.d.ts.map +1 -0
- package/dist/engine/agent-ready-exporter/formatters/devin.js +23 -0
- package/dist/engine/agent-ready-exporter/formatters/devin.js.map +1 -0
- package/dist/engine/agent-ready-exporter/formatters/generic.d.ts +7 -0
- package/dist/engine/agent-ready-exporter/formatters/generic.d.ts.map +1 -0
- package/dist/engine/agent-ready-exporter/formatters/generic.js +9 -0
- package/dist/engine/agent-ready-exporter/formatters/generic.js.map +1 -0
- package/dist/engine/agent-ready-exporter/formatters/kiro.d.ts +6 -0
- package/dist/engine/agent-ready-exporter/formatters/kiro.d.ts.map +1 -0
- package/dist/engine/agent-ready-exporter/formatters/kiro.js +34 -0
- package/dist/engine/agent-ready-exporter/formatters/kiro.js.map +1 -0
- package/dist/engine/agent-ready-exporter/formatters/swe-agent.d.ts +6 -0
- package/dist/engine/agent-ready-exporter/formatters/swe-agent.d.ts.map +1 -0
- package/dist/engine/agent-ready-exporter/formatters/swe-agent.js +40 -0
- package/dist/engine/agent-ready-exporter/formatters/swe-agent.js.map +1 -0
- package/dist/engine/agent-ready-exporter.d.ts +11 -0
- package/dist/engine/agent-ready-exporter.d.ts.map +1 -0
- package/dist/engine/agent-ready-exporter.js +86 -0
- package/dist/engine/agent-ready-exporter.js.map +1 -0
- package/dist/engine/compliance-checker.d.ts +19 -0
- package/dist/engine/compliance-checker.d.ts.map +1 -0
- package/dist/engine/compliance-checker.js +145 -0
- package/dist/engine/compliance-checker.js.map +1 -0
- package/dist/engine/generate-tests/generators/property-based-generator.d.ts +12 -0
- package/dist/engine/generate-tests/generators/property-based-generator.d.ts.map +1 -0
- package/dist/engine/generate-tests/generators/property-based-generator.js +159 -0
- package/dist/engine/generate-tests/generators/property-based-generator.js.map +1 -0
- package/dist/engine/jira-exporter.d.ts +39 -0
- package/dist/engine/jira-exporter.d.ts.map +1 -0
- package/dist/engine/jira-exporter.js +190 -0
- package/dist/engine/jira-exporter.js.map +1 -0
- package/dist/engine/linear-exporter.d.ts +32 -0
- package/dist/engine/linear-exporter.d.ts.map +1 -0
- package/dist/engine/linear-exporter.js +184 -0
- package/dist/engine/linear-exporter.js.map +1 -0
- package/dist/engine/planu-config-writer.d.ts +13 -2
- package/dist/engine/planu-config-writer.d.ts.map +1 -1
- package/dist/engine/planu-config-writer.js +32 -1
- package/dist/engine/planu-config-writer.js.map +1 -1
- package/dist/engine/property-test-generator.d.ts +14 -0
- package/dist/engine/property-test-generator.d.ts.map +1 -0
- package/dist/engine/property-test-generator.js +223 -0
- package/dist/engine/property-test-generator.js.map +1 -0
- package/dist/engine/skill-evaluator.d.ts +21 -0
- package/dist/engine/skill-evaluator.d.ts.map +1 -0
- package/dist/engine/skill-evaluator.js +126 -0
- package/dist/engine/skill-evaluator.js.map +1 -0
- package/dist/engine/spec-quality-scorer.d.ts +4 -0
- package/dist/engine/spec-quality-scorer.d.ts.map +1 -0
- package/dist/engine/spec-quality-scorer.js +334 -0
- package/dist/engine/spec-quality-scorer.js.map +1 -0
- package/dist/engine/spec-template-engine.d.ts +26 -0
- package/dist/engine/spec-template-engine.d.ts.map +1 -0
- package/dist/engine/spec-template-engine.js +127 -0
- package/dist/engine/spec-template-engine.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/compliance-store.d.ts +11 -0
- package/dist/storage/compliance-store.d.ts.map +1 -0
- package/dist/storage/compliance-store.js +30 -0
- package/dist/storage/compliance-store.js.map +1 -0
- package/dist/storage/jira-store.d.ts +30 -0
- package/dist/storage/jira-store.d.ts.map +1 -0
- package/dist/storage/jira-store.js +84 -0
- package/dist/storage/jira-store.js.map +1 -0
- package/dist/storage/linear-store.d.ts +30 -0
- package/dist/storage/linear-store.d.ts.map +1 -0
- package/dist/storage/linear-store.js +84 -0
- package/dist/storage/linear-store.js.map +1 -0
- package/dist/tools/check-readiness.d.ts.map +1 -1
- package/dist/tools/check-readiness.js +8 -2
- package/dist/tools/check-readiness.js.map +1 -1
- package/dist/tools/compliance-handler.d.ts +6 -0
- package/dist/tools/compliance-handler.d.ts.map +1 -0
- package/dist/tools/compliance-handler.js +99 -0
- package/dist/tools/compliance-handler.js.map +1 -0
- package/dist/tools/eval-skill-handler.d.ts +4 -0
- package/dist/tools/eval-skill-handler.d.ts.map +1 -0
- package/dist/tools/eval-skill-handler.js +26 -0
- package/dist/tools/eval-skill-handler.js.map +1 -0
- package/dist/tools/export-spec.d.ts.map +1 -1
- package/dist/tools/export-spec.js +42 -1
- package/dist/tools/export-spec.js.map +1 -1
- package/dist/tools/generate-tests/generators/property-based-generator.d.ts +11 -0
- package/dist/tools/generate-tests/generators/property-based-generator.d.ts.map +1 -0
- package/dist/tools/generate-tests/generators/property-based-generator.js +27 -0
- package/dist/tools/generate-tests/generators/property-based-generator.js.map +1 -0
- package/dist/tools/generate-tests/spec-dispatcher.d.ts +5 -0
- package/dist/tools/generate-tests/spec-dispatcher.d.ts.map +1 -1
- package/dist/tools/generate-tests/spec-dispatcher.js +18 -1
- package/dist/tools/generate-tests/spec-dispatcher.js.map +1 -1
- package/dist/tools/init-project/config-builder.d.ts +3 -2
- package/dist/tools/init-project/config-builder.d.ts.map +1 -1
- package/dist/tools/init-project/config-builder.js +9 -4
- package/dist/tools/init-project/config-builder.js.map +1 -1
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +3 -2
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/jira-sync-handler.d.ts +6 -0
- package/dist/tools/jira-sync-handler.d.ts.map +1 -0
- package/dist/tools/jira-sync-handler.js +220 -0
- package/dist/tools/jira-sync-handler.js.map +1 -0
- package/dist/tools/linear-sync-handler.d.ts +6 -0
- package/dist/tools/linear-sync-handler.d.ts.map +1 -0
- package/dist/tools/linear-sync-handler.js +212 -0
- package/dist/tools/linear-sync-handler.js.map +1 -0
- package/dist/tools/register-export-tools.d.ts.map +1 -1
- package/dist/tools/register-export-tools.js +10 -3
- package/dist/tools/register-export-tools.js.map +1 -1
- package/dist/tools/register-spec-314.d.ts +3 -0
- package/dist/tools/register-spec-314.d.ts.map +1 -0
- package/dist/tools/register-spec-314.js +38 -0
- package/dist/tools/register-spec-314.js.map +1 -0
- package/dist/tools/register-spec-316.d.ts +3 -0
- package/dist/tools/register-spec-316.d.ts.map +1 -0
- package/dist/tools/register-spec-316.js +71 -0
- package/dist/tools/register-spec-316.js.map +1 -0
- package/dist/tools/register-spec-317.d.ts +3 -0
- package/dist/tools/register-spec-317.d.ts.map +1 -0
- package/dist/tools/register-spec-317.js +158 -0
- package/dist/tools/register-spec-317.js.map +1 -0
- package/dist/tools/register-spec-319.d.ts +3 -0
- package/dist/tools/register-spec-319.d.ts.map +1 -0
- package/dist/tools/register-spec-319.js +59 -0
- package/dist/tools/register-spec-319.js.map +1 -0
- package/dist/tools/register-spec-320.d.ts +3 -0
- package/dist/tools/register-spec-320.d.ts.map +1 -0
- package/dist/tools/register-spec-320.js +60 -0
- package/dist/tools/register-spec-320.js.map +1 -0
- package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
- package/dist/tools/register-spec-tools/core-spec-tools.js +15 -1
- package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
- package/dist/tools/schemas/index.d.ts +1 -1
- package/dist/tools/schemas/index.d.ts.map +1 -1
- package/dist/tools/schemas/index.js +1 -1
- package/dist/tools/schemas/index.js.map +1 -1
- package/dist/tools/schemas/spec.d.ts +6 -0
- package/dist/tools/schemas/spec.d.ts.map +1 -1
- package/dist/tools/schemas/spec.js +4 -0
- package/dist/tools/schemas/spec.js.map +1 -1
- package/dist/tools/set-work-mode-handler.d.ts +7 -0
- package/dist/tools/set-work-mode-handler.d.ts.map +1 -0
- package/dist/tools/set-work-mode-handler.js +30 -0
- package/dist/tools/set-work-mode-handler.js.map +1 -0
- package/dist/tools/spec-marketplace-handler.d.ts +6 -0
- package/dist/tools/spec-marketplace-handler.d.ts.map +1 -0
- package/dist/tools/spec-marketplace-handler.js +113 -0
- package/dist/tools/spec-marketplace-handler.js.map +1 -0
- package/dist/tools/spec-quality-score-handler.d.ts +7 -0
- package/dist/tools/spec-quality-score-handler.d.ts.map +1 -0
- package/dist/tools/spec-quality-score-handler.js +106 -0
- package/dist/tools/spec-quality-score-handler.js.map +1 -0
- package/dist/tools/status-handler.d.ts.map +1 -1
- package/dist/tools/status-handler.js +12 -3
- package/dist/tools/status-handler.js.map +1 -1
- package/dist/types/agent-ready.d.ts +58 -0
- package/dist/types/agent-ready.d.ts.map +1 -0
- package/dist/types/agent-ready.js +3 -0
- package/dist/types/agent-ready.js.map +1 -0
- package/dist/types/common/primitives.d.ts +2 -0
- package/dist/types/common/primitives.d.ts.map +1 -1
- package/dist/types/compliance.d.ts +44 -0
- package/dist/types/compliance.d.ts.map +1 -0
- package/dist/types/compliance.js +3 -0
- package/dist/types/compliance.js.map +1 -0
- package/dist/types/export.d.ts +5 -1
- package/dist/types/export.d.ts.map +1 -1
- package/dist/types/export.js +1 -1
- package/dist/types/export.js.map +1 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/jira-linear.d.ts +216 -0
- package/dist/types/jira-linear.d.ts.map +1 -0
- package/dist/types/jira-linear.js +3 -0
- package/dist/types/jira-linear.js.map +1 -0
- package/dist/types/project/inputs.d.ts +3 -1
- package/dist/types/project/inputs.d.ts.map +1 -1
- package/dist/types/project/planu-config.d.ts +2 -0
- package/dist/types/project/planu-config.d.ts.map +1 -1
- package/dist/types/property-testing.d.ts +50 -0
- package/dist/types/property-testing.d.ts.map +1 -0
- package/dist/types/property-testing.js +3 -0
- package/dist/types/property-testing.js.map +1 -0
- package/dist/types/skill-eval.d.ts +41 -0
- package/dist/types/skill-eval.d.ts.map +1 -0
- package/dist/types/skill-eval.js +3 -0
- package/dist/types/skill-eval.js.map +1 -0
- package/dist/types/spec-marketplace.d.ts +31 -0
- package/dist/types/spec-marketplace.d.ts.map +1 -0
- package/dist/types/spec-marketplace.js +3 -0
- package/dist/types/spec-marketplace.js.map +1 -0
- package/dist/types/spec-quality.d.ts +36 -0
- package/dist/types/spec-quality.d.ts.map +1 -0
- package/dist/types/spec-quality.js +3 -0
- package/dist/types/spec-quality.js.map +1 -0
- package/package.json +7 -2
- package/src/config/compliance-profiles.json +62 -0
- package/src/config/license-plans.json +19 -2
- package/src/config/spec-templates/crud-rest-api/spec.md +35 -0
- package/src/config/spec-templates/crud-rest-api/template.json +10 -0
- package/src/config/spec-templates/email-notifications/spec.md +31 -0
- package/src/config/spec-templates/email-notifications/template.json +10 -0
- package/src/config/spec-templates/file-upload-s3/spec.md +31 -0
- package/src/config/spec-templates/file-upload-s3/template.json +11 -0
- package/src/config/spec-templates/jwt-auth/spec.md +35 -0
- package/src/config/spec-templates/jwt-auth/template.json +10 -0
- package/src/config/spec-templates/oauth-social-login/spec.md +31 -0
- package/src/config/spec-templates/oauth-social-login/template.json +10 -0
- package/src/config/spec-templates/rate-limiting/spec.md +31 -0
- package/src/config/spec-templates/rate-limiting/template.json +10 -0
- package/src/config/spec-templates/stripe-payments/spec.md +32 -0
- package/src/config/spec-templates/stripe-payments/template.json +10 -0
- package/src/config/spec-templates/webhook-system/spec.md +36 -0
- package/src/config/spec-templates/webhook-system/template.json +10 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,oBAAoB,CAAC;AAUlE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACvC;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,UAAU,SAAS;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACpD;AAED,KAAK,UAAU,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAEhD,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC;CAC5B;AA0ED,iBAAS,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAYpD;AAED,iBAAS,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CASlD;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,OAAO,CAOpF;AASD,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAWnE;AAED,iBAAS,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAiB9D;AA4BD,iBAAS,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAc7E;AAMD;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAgD7E;AAGD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,CAAC;AAoJF,eAAO,MAAM,cAAc,EAAE,UA2F5B,CAAC"}
|
|
@@ -3,12 +3,25 @@ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { dirname, join } from 'node:path';
|
|
5
5
|
import { bold, cyan, green, yellow, dim } from '../colors.js';
|
|
6
|
+
import { PLANU_VERSION } from '../../config/version.js';
|
|
6
7
|
import { confirm, select, ask } from '../interactive.js';
|
|
7
8
|
import { activateLicense } from '../../engine/license-validator.js';
|
|
8
9
|
// ---------------------------------------------------------------------------
|
|
9
10
|
// Constants
|
|
10
11
|
// ---------------------------------------------------------------------------
|
|
11
12
|
const PLANU_KEY = 'planu';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Locale helpers
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
const CLAUDE_CODE_LOCALES = new Set(['en', 'es', 'pt', 'fr', 'de', 'ja', 'ko', 'zh']);
|
|
17
|
+
function detectLocale() {
|
|
18
|
+
const raw = process.env.LANG ?? process.env.LC_ALL ?? process.env.LC_MESSAGES ?? '';
|
|
19
|
+
const code = raw.split(/[_.-]/)[0]?.toLowerCase() ?? 'en';
|
|
20
|
+
return CLAUDE_CODE_LOCALES.has(code) ? code : 'en';
|
|
21
|
+
}
|
|
22
|
+
function claudeCodeDocsUrl() {
|
|
23
|
+
return `https://code.claude.com/docs/${detectLocale()}/overview`;
|
|
24
|
+
}
|
|
12
25
|
const TOOLS = [
|
|
13
26
|
{
|
|
14
27
|
name: 'Claude Code',
|
|
@@ -209,6 +222,49 @@ export async function promptLicense() {
|
|
|
209
222
|
// Exported so tests can use them without going through the interactive CLI
|
|
210
223
|
export { buildMcpEntry, readJsonFile, hasPlanuEntry, writeStandardEntry, writeZedEntry, removeEntry, };
|
|
211
224
|
// ---------------------------------------------------------------------------
|
|
225
|
+
// Banner
|
|
226
|
+
// ---------------------------------------------------------------------------
|
|
227
|
+
function printBanner() {
|
|
228
|
+
const teal = (s) => `\x1b[38;5;43m${s}\x1b[0m`;
|
|
229
|
+
const art = [
|
|
230
|
+
' ██████╗ ██╗ █████╗ ███╗ ██╗██╗ ██╗',
|
|
231
|
+
' ██╔══██╗██║ ██╔══██╗████╗ ██║██║ ██║',
|
|
232
|
+
' ██████╔╝██║ ███████║██╔██╗ ██║██║ ██║',
|
|
233
|
+
' ██╔═══╝ ██║ ██╔══██║██║╚██╗██║██║ ██║',
|
|
234
|
+
' ██║ ███████╗██║ ██║██║ ╚████║╚██████╔╝',
|
|
235
|
+
' ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝',
|
|
236
|
+
];
|
|
237
|
+
process.stdout.write('\n');
|
|
238
|
+
for (const line of art) {
|
|
239
|
+
process.stdout.write(`${teal(line)}\n`);
|
|
240
|
+
}
|
|
241
|
+
process.stdout.write(`\n ${dim(`Spec Driven Development MCP Server · v${PLANU_VERSION}`)}\n`);
|
|
242
|
+
process.stdout.write(`\n ${bold('🔒 Privacy guarantee')}\n`);
|
|
243
|
+
process.stdout.write(` ${dim('·')} Everything runs ${bold('locally')} — no cloud, no servers\n`);
|
|
244
|
+
process.stdout.write(` ${dim('·')} Zero telemetry. Nothing is ever transmitted.\n`);
|
|
245
|
+
process.stdout.write(` ${dim('·')} No API key required. Your specs stay on your machine.\n`);
|
|
246
|
+
process.stdout.write('\n');
|
|
247
|
+
}
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// Welcome message (shown after successful installation)
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
function printWelcome() {
|
|
252
|
+
const docsUrl = claudeCodeDocsUrl();
|
|
253
|
+
process.stdout.write(`${bold("🚀 You're all set — welcome to Planu!")}\n\n`);
|
|
254
|
+
process.stdout.write(` ${dim('How to get started:')}\n\n`);
|
|
255
|
+
process.stdout.write(` ${bold('1.')} Open your AI tool and describe what you want to build\n` +
|
|
256
|
+
` ${dim('→')} Planu will create a spec automatically\n\n` +
|
|
257
|
+
` ${bold('2.')} Review, refine, approve the spec\n` +
|
|
258
|
+
` ${dim('→')} Then let your AI implement it, validated against the spec\n\n` +
|
|
259
|
+
` ${bold('3.')} Iterate with confidence\n` +
|
|
260
|
+
` ${dim('→')} Full audit trail, no hallucinated features, zero tech debt\n\n`);
|
|
261
|
+
process.stdout.write(` ${dim('Docs:')} ${cyan(docsUrl)}\n`);
|
|
262
|
+
process.stdout.write(` ${dim('Website:')} ${cyan('https://planu.dev')}\n\n`);
|
|
263
|
+
process.stdout.write(` ${dim('🔒')} ${dim('Your code never leaves your machine.')} ` +
|
|
264
|
+
`${dim('Planu runs 100% locally — no cloud, no telemetry.')}\n\n`);
|
|
265
|
+
process.stdout.write(` ${dim('Happy building! ✨')}\n\n`);
|
|
266
|
+
}
|
|
267
|
+
// ---------------------------------------------------------------------------
|
|
212
268
|
// Command implementation helpers (split to reduce run() complexity)
|
|
213
269
|
// ---------------------------------------------------------------------------
|
|
214
270
|
function printDetectionResults(detected, notFound) {
|
|
@@ -296,7 +352,7 @@ export const installCommand = {
|
|
|
296
352
|
installAll = true;
|
|
297
353
|
}
|
|
298
354
|
}
|
|
299
|
-
|
|
355
|
+
printBanner();
|
|
300
356
|
// Detect installed tools (user-scope paths)
|
|
301
357
|
const detected = [];
|
|
302
358
|
const notFound = [];
|
|
@@ -311,7 +367,18 @@ export const installCommand = {
|
|
|
311
367
|
printDetectionResults(detected, notFound);
|
|
312
368
|
process.stdout.write('\n');
|
|
313
369
|
if (detected.length === 0) {
|
|
314
|
-
|
|
370
|
+
const docsUrl = claudeCodeDocsUrl();
|
|
371
|
+
process.stdout.write(`${yellow('⚠ No AI tools detected on this machine.')}\n\n` +
|
|
372
|
+
` Planu works with Claude Code, Cursor, Windsurf, OpenCode, Zed and more.\n` +
|
|
373
|
+
` Install at least one to get started:\n\n` +
|
|
374
|
+
` ${bold('★ Claude Code')} ${dim('(recommended)')}\n` +
|
|
375
|
+
` ${dim('→')} https://claude.ai/download\n` +
|
|
376
|
+
` ${dim('→ npx @anthropic-ai/claude-code@latest')}\n` +
|
|
377
|
+
` ${dim('→ Docs:')} ${cyan(docsUrl)}\n\n` +
|
|
378
|
+
` ${bold('Cursor')} https://cursor.com\n` +
|
|
379
|
+
` ${bold('Windsurf')} https://windsurf.com\n` +
|
|
380
|
+
` ${bold('OpenCode')} https://opencode.ai\n\n` +
|
|
381
|
+
` Once installed, run ${cyan('npx @planu/cli install')} again.\n\n`);
|
|
315
382
|
return;
|
|
316
383
|
}
|
|
317
384
|
const scope = await resolveScope(scopeArg);
|
|
@@ -342,6 +409,7 @@ export const installCommand = {
|
|
|
342
409
|
process.stdout.write(`\n${bold('Done.')} Installed in ${String(installed)} tool(s).\n`);
|
|
343
410
|
if (installed > 0) {
|
|
344
411
|
process.stdout.write(`${dim('Restart your AI tool to pick up the new MCP server.')}\n\n`);
|
|
412
|
+
printWelcome();
|
|
345
413
|
}
|
|
346
414
|
},
|
|
347
415
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"gdpr": {
|
|
3
|
+
"keywords": ["user", "personal", "data", "store", "email", "profile", "privacy", "consent", "gdpr"],
|
|
4
|
+
"criteria": [
|
|
5
|
+
"Users can request deletion of their personal data (right to erasure)",
|
|
6
|
+
"Data collection requires explicit user consent with opt-in mechanism",
|
|
7
|
+
"Personal data is encrypted at rest and in transit",
|
|
8
|
+
"Data retention policy is defined and enforced (max retention period)",
|
|
9
|
+
"Audit log records all access to personal data",
|
|
10
|
+
"Users can export their personal data in a portable format (right to data portability)",
|
|
11
|
+
"Privacy policy is clearly communicated to users before data collection"
|
|
12
|
+
]
|
|
13
|
+
},
|
|
14
|
+
"hipaa": {
|
|
15
|
+
"keywords": ["health", "medical", "patient", "phi", "ehr", "clinical", "diagnosis", "treatment", "hipaa", "healthcare"],
|
|
16
|
+
"criteria": [
|
|
17
|
+
"Protected Health Information (PHI) is encrypted at rest using AES-256 or equivalent",
|
|
18
|
+
"PHI transmission is secured with TLS 1.2+ encryption",
|
|
19
|
+
"Access to PHI is role-based and requires authentication",
|
|
20
|
+
"All PHI access events are logged in a tamper-evident audit trail",
|
|
21
|
+
"Business Associate Agreements (BAA) are in place for all third-party PHI processors",
|
|
22
|
+
"PHI breach notification procedure is defined and documented",
|
|
23
|
+
"Minimum necessary access principle is enforced for PHI queries"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"pci-dss": {
|
|
27
|
+
"keywords": ["payment", "card", "credit", "debit", "checkout", "billing", "stripe", "transaction", "pci", "cvv", "pan"],
|
|
28
|
+
"criteria": [
|
|
29
|
+
"Cardholder data (PAN, CVV) is never stored in plaintext",
|
|
30
|
+
"Payment card data is masked in logs and UI displays",
|
|
31
|
+
"Network segmentation isolates cardholder data environment",
|
|
32
|
+
"All cardholder data access is logged with user identity and timestamp",
|
|
33
|
+
"Strong cryptography (TLS 1.2+) protects cardholder data in transit",
|
|
34
|
+
"Anti-malware and intrusion detection are deployed in the cardholder data environment",
|
|
35
|
+
"Default vendor passwords and security parameters are changed before deployment"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"soc2": {
|
|
39
|
+
"keywords": ["security", "availability", "confidentiality", "integrity", "audit", "compliance", "soc2", "soc 2", "trust"],
|
|
40
|
+
"criteria": [
|
|
41
|
+
"Access control policy is documented and enforced with least-privilege principle",
|
|
42
|
+
"System availability is monitored with defined SLA targets and incident response",
|
|
43
|
+
"Data confidentiality classification is defined (public, internal, confidential, restricted)",
|
|
44
|
+
"Change management process ensures all changes are reviewed and tested before deployment",
|
|
45
|
+
"Incident response plan is documented, tested, and updated annually",
|
|
46
|
+
"Penetration testing is performed at least annually by a qualified third party",
|
|
47
|
+
"Security awareness training is provided to all personnel with system access"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
"ccpa": {
|
|
51
|
+
"keywords": ["california", "consumer", "ccpa", "opt-out", "sale", "personal information", "resident"],
|
|
52
|
+
"criteria": [
|
|
53
|
+
"Consumers can opt-out of the sale of their personal information",
|
|
54
|
+
"Privacy notice discloses categories of personal information collected and purposes",
|
|
55
|
+
"Consumers can request access to their personal information collected in the last 12 months",
|
|
56
|
+
"Consumers can request deletion of their personal information",
|
|
57
|
+
"Non-discrimination policy ensures consumers are not penalized for exercising CCPA rights",
|
|
58
|
+
"Requests from consumers are fulfilled within 45 days",
|
|
59
|
+
"Authorized agent mechanism allows consumers to submit requests on behalf of others"
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"freeTools": [
|
|
21
21
|
"set_locale",
|
|
22
22
|
"init_project",
|
|
23
|
+
"set_work_mode",
|
|
23
24
|
"init_constitution",
|
|
24
25
|
"clarify_requirements",
|
|
25
26
|
"create_spec",
|
|
@@ -256,7 +257,23 @@
|
|
|
256
257
|
"search_all_projects",
|
|
257
258
|
"validate_browser",
|
|
258
259
|
"sync_google_workspace",
|
|
259
|
-
"generate_diagram"
|
|
260
|
+
"generate_diagram",
|
|
261
|
+
"spec_quality_score",
|
|
262
|
+
"eval_skill",
|
|
263
|
+
"eval_rule",
|
|
264
|
+
"configure_jira",
|
|
265
|
+
"sync_to_jira",
|
|
266
|
+
"jira_status",
|
|
267
|
+
"remove_jira",
|
|
268
|
+
"configure_linear",
|
|
269
|
+
"sync_to_linear",
|
|
270
|
+
"linear_status",
|
|
271
|
+
"remove_linear",
|
|
272
|
+
"check_compliance",
|
|
273
|
+
"configure_compliance",
|
|
274
|
+
"apply_spec_template",
|
|
275
|
+
"publish_spec_template",
|
|
276
|
+
"search_spec_templates"
|
|
260
277
|
],
|
|
261
278
|
"alwaysAllowed": [
|
|
262
279
|
"activate_license",
|
|
@@ -275,4 +292,4 @@
|
|
|
275
292
|
"Planu Team": "team"
|
|
276
293
|
},
|
|
277
294
|
"upgradeUrl": "https://planu.dev/pricing"
|
|
278
|
-
}
|
|
295
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# CRUD REST API — {{entity}}
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Full CRUD REST API for the {{entity}} resource at {{base_path}}, with {{id_type}} identifiers, input validation, pagination, and consistent error responses.
|
|
5
|
+
|
|
6
|
+
## Acceptance Criteria
|
|
7
|
+
|
|
8
|
+
### AC-1: Create
|
|
9
|
+
- `POST {{base_path}}` accepts a JSON body and creates a new {{entity}}
|
|
10
|
+
- Validates all required fields and returns 422 with field-level errors on failure
|
|
11
|
+
- Returns 201 with the created resource including its generated {{id_type}} ID
|
|
12
|
+
|
|
13
|
+
### AC-2: Read
|
|
14
|
+
- `GET {{base_path}}/:id` returns a single {{entity}} by {{id_type}} ID
|
|
15
|
+
- `GET {{base_path}}` returns a paginated list with `page`, `limit`, and `total` fields
|
|
16
|
+
- Returns 404 when the resource does not exist
|
|
17
|
+
|
|
18
|
+
### AC-3: Update
|
|
19
|
+
- `PUT {{base_path}}/:id` fully replaces the {{entity}} resource
|
|
20
|
+
- `PATCH {{base_path}}/:id` partially updates only provided fields
|
|
21
|
+
- Returns 200 with the updated resource
|
|
22
|
+
|
|
23
|
+
### AC-4: Delete
|
|
24
|
+
- `DELETE {{base_path}}/:id` soft-deletes the {{entity}} (sets `deletedAt` timestamp)
|
|
25
|
+
- Returns 204 on success, 404 if not found
|
|
26
|
+
|
|
27
|
+
### AC-5: Filtering and Sorting
|
|
28
|
+
- Support query parameters `filter[field]=value` for equality filters
|
|
29
|
+
- Support `sort=field` and `order=asc|desc` query parameters
|
|
30
|
+
- Ignore unknown filter parameters without error
|
|
31
|
+
|
|
32
|
+
## Technical Notes
|
|
33
|
+
- All timestamps in ISO 8601 format
|
|
34
|
+
- IDs are {{id_type}} type — validate format before database lookup
|
|
35
|
+
- Paginate using cursor-based pagination for large datasets
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "crud-rest-api",
|
|
3
|
+
"description": "Full CRUD REST API for a domain entity with validation, pagination, and error handling",
|
|
4
|
+
"variables": [
|
|
5
|
+
{ "name": "entity", "description": "Name of the domain entity (e.g. Product, User, Order)", "default": "Entity" },
|
|
6
|
+
{ "name": "base_path", "description": "Base URL path for the resource (e.g. /api/products)", "default": "/api/entities" },
|
|
7
|
+
{ "name": "id_type", "description": "Type of the entity ID field (uuid, number)", "default": "uuid" }
|
|
8
|
+
],
|
|
9
|
+
"tags": ["crud", "rest-api", "backend", "database"]
|
|
10
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Email Notifications — {{provider}}
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Transactional email system using {{provider}} sent from `{{from_address}}`, with template rendering, {{queue_enabled}} async queuing, and delivery tracking.
|
|
5
|
+
|
|
6
|
+
## Acceptance Criteria
|
|
7
|
+
|
|
8
|
+
### AC-1: Template Rendering
|
|
9
|
+
- Define email templates with subject and HTML/text body variants
|
|
10
|
+
- Interpolate dynamic variables (e.g. `{{user_name}}`, `{{action_url}}`) at send time
|
|
11
|
+
- Validate all required variables are provided before queuing
|
|
12
|
+
|
|
13
|
+
### AC-2: Sending via {{provider}}
|
|
14
|
+
- Send emails via {{provider}} API using environment-configured credentials
|
|
15
|
+
- Set `From: {{from_address}}` on all outgoing emails
|
|
16
|
+
- Handle API errors with retry logic (3 attempts, exponential backoff)
|
|
17
|
+
|
|
18
|
+
### AC-3: Async Queue
|
|
19
|
+
- When `queue_enabled` is {{queue_enabled}}, enqueue emails instead of sending synchronously
|
|
20
|
+
- Worker processes the queue and marks emails as `sent` or `failed`
|
|
21
|
+
- Retry failed sends up to 3 times before marking as permanently failed
|
|
22
|
+
|
|
23
|
+
### AC-4: Delivery Tracking
|
|
24
|
+
- Store delivery records: recipient, template, status, sentAt, provider message ID
|
|
25
|
+
- Expose delivery status via an internal admin API
|
|
26
|
+
- Alert when failure rate exceeds 5% in a 1-hour window
|
|
27
|
+
|
|
28
|
+
## Technical Notes
|
|
29
|
+
- Never log email body content — only metadata (recipient, template name, status)
|
|
30
|
+
- Implement unsubscribe links and honor opt-out preferences
|
|
31
|
+
- Test with {{provider}} sandbox/test mode before production deployment
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "email-notifications",
|
|
3
|
+
"description": "Transactional email system with templates, queuing, and delivery tracking",
|
|
4
|
+
"variables": [
|
|
5
|
+
{ "name": "provider", "description": "Email provider (sendgrid, mailgun, ses, resend)", "default": "sendgrid" },
|
|
6
|
+
{ "name": "from_address", "description": "Default sender email address", "default": "noreply@example.com" },
|
|
7
|
+
{ "name": "queue_enabled", "description": "Whether to queue emails asynchronously (true/false)", "default": "true" }
|
|
8
|
+
],
|
|
9
|
+
"tags": ["email", "notifications", "backend", "queuing"]
|
|
10
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# File Upload — {{provider}}
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Secure file upload system using {{provider}} bucket `{{bucket_name}}` with presigned URLs, a maximum file size of {{max_size_mb}} MB, and allowed types: {{allowed_types}}.
|
|
5
|
+
|
|
6
|
+
## Acceptance Criteria
|
|
7
|
+
|
|
8
|
+
### AC-1: Presigned URL Generation
|
|
9
|
+
- Generate a presigned upload URL valid for 15 minutes
|
|
10
|
+
- URL is scoped to the authenticated user's namespace
|
|
11
|
+
- Enforce `Content-Type` matching one of: {{allowed_types}}
|
|
12
|
+
|
|
13
|
+
### AC-2: File Validation
|
|
14
|
+
- Reject uploads exceeding {{max_size_mb}} MB with a clear error
|
|
15
|
+
- Validate MIME type against the Content-Type header
|
|
16
|
+
- Scan file content for malicious patterns before confirming upload
|
|
17
|
+
|
|
18
|
+
### AC-3: Upload Confirmation
|
|
19
|
+
- Client calls confirm endpoint after direct upload to {{provider}}
|
|
20
|
+
- Server verifies the object exists in `{{bucket_name}}` before saving metadata
|
|
21
|
+
- Store file metadata (name, size, type, owner, uploadedAt) in the database
|
|
22
|
+
|
|
23
|
+
### AC-4: Download and Deletion
|
|
24
|
+
- Generate presigned download URLs valid for 1 hour
|
|
25
|
+
- Delete the object from `{{bucket_name}}` and metadata on user request
|
|
26
|
+
- Restrict access so users can only download/delete their own files
|
|
27
|
+
|
|
28
|
+
## Technical Notes
|
|
29
|
+
- Never expose {{provider}} credentials to the client
|
|
30
|
+
- Use server-side encryption at rest in `{{bucket_name}}`
|
|
31
|
+
- Log all upload attempts (success and failure) with user ID and file metadata
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "file-upload-s3",
|
|
3
|
+
"description": "File upload system with cloud storage, presigned URLs, and file validation",
|
|
4
|
+
"variables": [
|
|
5
|
+
{ "name": "provider", "description": "Cloud storage provider (s3, gcs, r2)", "default": "s3" },
|
|
6
|
+
{ "name": "bucket_name", "description": "Name of the storage bucket", "default": "uploads" },
|
|
7
|
+
{ "name": "max_size_mb", "description": "Maximum allowed file size in megabytes", "default": "10" },
|
|
8
|
+
{ "name": "allowed_types", "description": "Comma-separated list of allowed MIME types", "default": "image/jpeg,image/png,application/pdf" }
|
|
9
|
+
],
|
|
10
|
+
"tags": ["file-upload", "s3", "storage", "backend"]
|
|
11
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# JWT Authentication
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
JWT-based authentication with {{algorithm}} signing, access tokens valid for {{access_token_ttl}}, refresh tokens valid for {{refresh_token_ttl}}, and token rotation on refresh.
|
|
5
|
+
|
|
6
|
+
## Acceptance Criteria
|
|
7
|
+
|
|
8
|
+
### AC-1: Login
|
|
9
|
+
- Accept `email` and `password` credentials
|
|
10
|
+
- Issue a signed access token ({{algorithm}}, TTL {{access_token_ttl}}) and refresh token (TTL {{refresh_token_ttl}})
|
|
11
|
+
- Return tokens in the response body; set refresh token as `HttpOnly` cookie
|
|
12
|
+
|
|
13
|
+
### AC-2: Token Verification
|
|
14
|
+
- Validate signature, expiry, and issuer on every protected route
|
|
15
|
+
- Return 401 with a clear message when token is expired or invalid
|
|
16
|
+
- Extract user claims (id, role, email) from token without a database lookup
|
|
17
|
+
|
|
18
|
+
### AC-3: Token Refresh
|
|
19
|
+
- Accept refresh token from `HttpOnly` cookie
|
|
20
|
+
- Issue new access and refresh tokens (rotation)
|
|
21
|
+
- Blacklist the previous refresh token to prevent reuse
|
|
22
|
+
|
|
23
|
+
### AC-4: Logout
|
|
24
|
+
- Blacklist the current refresh token on logout
|
|
25
|
+
- Clear the `HttpOnly` cookie
|
|
26
|
+
- Return 204 on success
|
|
27
|
+
|
|
28
|
+
### AC-5: Token Blacklist
|
|
29
|
+
- Store blacklisted token JTIs in a fast store (Redis recommended)
|
|
30
|
+
- Entries expire automatically at token TTL to prevent unbounded growth
|
|
31
|
+
|
|
32
|
+
## Technical Notes
|
|
33
|
+
- Never store the raw JWT secret in application code — use environment variables
|
|
34
|
+
- Include `jti` (JWT ID) claim for blacklist lookups
|
|
35
|
+
- Rotate signing keys on a quarterly schedule
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jwt-auth",
|
|
3
|
+
"description": "JWT authentication with access/refresh token rotation, blacklisting, and role-based claims",
|
|
4
|
+
"variables": [
|
|
5
|
+
{ "name": "access_token_ttl", "description": "Access token time-to-live (e.g. 15m, 1h)", "default": "15m" },
|
|
6
|
+
{ "name": "refresh_token_ttl", "description": "Refresh token time-to-live (e.g. 7d, 30d)", "default": "7d" },
|
|
7
|
+
{ "name": "algorithm", "description": "JWT signing algorithm (HS256, RS256)", "default": "HS256" }
|
|
8
|
+
],
|
|
9
|
+
"tags": ["auth", "jwt", "security", "backend"]
|
|
10
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# OAuth2 Social Login — {{provider}}
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Implement OAuth2 social login via {{provider}} with secure token handling and session management lasting {{session_duration}} seconds.
|
|
5
|
+
|
|
6
|
+
## Acceptance Criteria
|
|
7
|
+
|
|
8
|
+
### AC-1: OAuth Authorization Flow
|
|
9
|
+
- Redirect users to {{provider}} authorization endpoint with correct scopes
|
|
10
|
+
- Handle the callback at {{callback_path}} and exchange code for tokens
|
|
11
|
+
- Validate the `state` parameter to prevent CSRF attacks
|
|
12
|
+
|
|
13
|
+
### AC-2: User Account Linking
|
|
14
|
+
- Create a new user account if the OAuth identity does not exist
|
|
15
|
+
- Link the OAuth identity to an existing account if the email matches
|
|
16
|
+
- Store the provider, provider user ID, and access token securely
|
|
17
|
+
|
|
18
|
+
### AC-3: Session Management
|
|
19
|
+
- Issue a signed session token valid for {{session_duration}} seconds after successful login
|
|
20
|
+
- Invalidate session on explicit logout
|
|
21
|
+
- Refresh session silently when less than 10% of lifetime remains
|
|
22
|
+
|
|
23
|
+
### AC-4: Error Handling
|
|
24
|
+
- Return clear errors when the user denies authorization
|
|
25
|
+
- Handle provider API outages with a user-friendly fallback message
|
|
26
|
+
- Log all authentication failures with anonymized user identifiers
|
|
27
|
+
|
|
28
|
+
## Technical Notes
|
|
29
|
+
- Never store OAuth access tokens in client-accessible cookies
|
|
30
|
+
- Use PKCE (Proof Key for Code Exchange) when supported by the provider
|
|
31
|
+
- Implement rate limiting on the callback endpoint to prevent abuse
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "oauth-social-login",
|
|
3
|
+
"description": "OAuth2 social login with Google and GitHub, including token handling and session management",
|
|
4
|
+
"variables": [
|
|
5
|
+
{ "name": "provider", "description": "OAuth provider to integrate (google, github, or both)", "default": "google" },
|
|
6
|
+
{ "name": "callback_path", "description": "OAuth callback URL path", "default": "/auth/callback" },
|
|
7
|
+
{ "name": "session_duration", "description": "Session duration in seconds", "default": "86400" }
|
|
8
|
+
],
|
|
9
|
+
"tags": ["auth", "oauth2", "social-login", "google", "github", "backend"]
|
|
10
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Rate Limiting Middleware
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Sliding window rate limiting middleware with a limit of {{requests_per_window}} requests per {{window_seconds}} seconds, applied per {{strategy}}.
|
|
5
|
+
|
|
6
|
+
## Acceptance Criteria
|
|
7
|
+
|
|
8
|
+
### AC-1: Sliding Window Enforcement
|
|
9
|
+
- Track request counts in a {{window_seconds}}-second sliding window per {{strategy}}
|
|
10
|
+
- Block requests exceeding {{requests_per_window}} with HTTP 429
|
|
11
|
+
- Include `Retry-After` header indicating seconds until the window resets
|
|
12
|
+
|
|
13
|
+
### AC-2: Response Headers
|
|
14
|
+
- Include `X-RateLimit-Limit: {{requests_per_window}}` on all responses
|
|
15
|
+
- Include `X-RateLimit-Remaining` with current remaining count
|
|
16
|
+
- Include `X-RateLimit-Reset` with the Unix timestamp of window expiry
|
|
17
|
+
|
|
18
|
+
### AC-3: Strategy Configuration
|
|
19
|
+
- Apply limits by {{strategy}} (ip address, authenticated user ID, or API key)
|
|
20
|
+
- Fall back to IP-based limiting for unauthenticated requests
|
|
21
|
+
- Support per-route override limits via middleware options
|
|
22
|
+
|
|
23
|
+
### AC-4: Bypass and Exemptions
|
|
24
|
+
- Allow exemption list for internal service IPs
|
|
25
|
+
- Support admin-level bypass via a trusted header `X-Internal-Request: true`
|
|
26
|
+
- Log all exemptions for audit purposes
|
|
27
|
+
|
|
28
|
+
## Technical Notes
|
|
29
|
+
- Use atomic Redis operations (INCR + EXPIRE) to avoid race conditions
|
|
30
|
+
- Store counters in Redis with TTL equal to the window duration
|
|
31
|
+
- Degrade gracefully to allow-all if Redis is unavailable (fail open with alert)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "rate-limiting",
|
|
3
|
+
"description": "Rate limiting middleware with sliding window algorithm, per-user and per-IP limits",
|
|
4
|
+
"variables": [
|
|
5
|
+
{ "name": "requests_per_window", "description": "Maximum requests allowed per window", "default": "100" },
|
|
6
|
+
{ "name": "window_seconds", "description": "Time window in seconds", "default": "60" },
|
|
7
|
+
{ "name": "strategy", "description": "Rate limiting strategy (ip, user, api-key)", "default": "ip" }
|
|
8
|
+
],
|
|
9
|
+
"tags": ["rate-limiting", "middleware", "security", "backend"]
|
|
10
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Stripe Payments Integration
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Integrate Stripe payment processing to support one-time payments and subscriptions for {{plan_name}} in {{currency}} currency.
|
|
5
|
+
|
|
6
|
+
## Acceptance Criteria
|
|
7
|
+
|
|
8
|
+
### AC-1: Checkout Session Creation
|
|
9
|
+
- Create a Stripe checkout session for {{plan_name}} with currency {{currency}}
|
|
10
|
+
- Return a redirect URL to the hosted Stripe payment page
|
|
11
|
+
- Store the session ID for reconciliation
|
|
12
|
+
|
|
13
|
+
### AC-2: Webhook Processing
|
|
14
|
+
- Handle incoming Stripe events at {{webhook_endpoint}}
|
|
15
|
+
- Verify HMAC signature using `Stripe-Signature` header
|
|
16
|
+
- Process `checkout.session.completed` and `invoice.payment_failed` events
|
|
17
|
+
- Idempotently handle duplicate webhook deliveries
|
|
18
|
+
|
|
19
|
+
### AC-3: Subscription Management
|
|
20
|
+
- Retrieve subscription status from Stripe API
|
|
21
|
+
- Cancel subscriptions on user request
|
|
22
|
+
- Expose subscription status in user profile response
|
|
23
|
+
|
|
24
|
+
### AC-4: Error Handling
|
|
25
|
+
- Return user-friendly errors when payment fails
|
|
26
|
+
- Log Stripe API errors with request IDs for debugging
|
|
27
|
+
- Handle network timeouts with retry logic (max 3 attempts)
|
|
28
|
+
|
|
29
|
+
## Technical Notes
|
|
30
|
+
- Store Stripe customer IDs and subscription IDs in the database, never card data
|
|
31
|
+
- All prices defined in cents to avoid floating-point errors
|
|
32
|
+
- Use Stripe's idempotency keys for all write operations
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "stripe-payments",
|
|
3
|
+
"description": "Stripe payment integration with checkout sessions, webhooks, and subscription management",
|
|
4
|
+
"variables": [
|
|
5
|
+
{ "name": "currency", "description": "Default currency code (e.g. usd, eur)", "default": "usd" },
|
|
6
|
+
{ "name": "plan_name", "description": "Name of the subscription plan or product", "default": "Pro Plan" },
|
|
7
|
+
{ "name": "webhook_endpoint", "description": "Path for the Stripe webhook endpoint", "default": "/api/webhooks/stripe" }
|
|
8
|
+
],
|
|
9
|
+
"tags": ["payments", "stripe", "subscriptions", "backend"]
|
|
10
|
+
}
|