gswd 0.1.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.
Files changed (42) hide show
  1. package/agents/gswd/architecture-drafter.md +70 -0
  2. package/agents/gswd/brainstorm-alternatives.md +60 -0
  3. package/agents/gswd/devils-advocate.md +57 -0
  4. package/agents/gswd/icp-persona.md +58 -0
  5. package/agents/gswd/integrations-checker.md +68 -0
  6. package/agents/gswd/journey-mapper.md +69 -0
  7. package/agents/gswd/market-researcher.md +54 -0
  8. package/agents/gswd/positioning.md +54 -0
  9. package/bin/gswd-tools.cjs +716 -0
  10. package/lib/audit.ts +959 -0
  11. package/lib/bootstrap.ts +617 -0
  12. package/lib/compile.ts +940 -0
  13. package/lib/config.ts +164 -0
  14. package/lib/imagine-agents.ts +154 -0
  15. package/lib/imagine-gate.ts +156 -0
  16. package/lib/imagine-input.ts +242 -0
  17. package/lib/imagine-synthesis.ts +402 -0
  18. package/lib/imagine.ts +433 -0
  19. package/lib/parse.ts +196 -0
  20. package/lib/render.ts +200 -0
  21. package/lib/specify-agents.ts +332 -0
  22. package/lib/specify-journeys.ts +410 -0
  23. package/lib/specify-nfr.ts +208 -0
  24. package/lib/specify-roles.ts +122 -0
  25. package/lib/specify.ts +773 -0
  26. package/lib/state.ts +305 -0
  27. package/package.json +26 -0
  28. package/templates/gswd/ARCHITECTURE.template.md +17 -0
  29. package/templates/gswd/AUDIT.template.md +31 -0
  30. package/templates/gswd/COMPETITION.template.md +18 -0
  31. package/templates/gswd/DECISIONS.template.md +18 -0
  32. package/templates/gswd/GTM.template.md +18 -0
  33. package/templates/gswd/ICP.template.md +18 -0
  34. package/templates/gswd/IMAGINE.template.md +24 -0
  35. package/templates/gswd/INTEGRATIONS.template.md +7 -0
  36. package/templates/gswd/JOURNEYS.template.md +7 -0
  37. package/templates/gswd/NFR.template.md +7 -0
  38. package/templates/gswd/PROJECT.template.md +21 -0
  39. package/templates/gswd/REQUIREMENTS.template.md +31 -0
  40. package/templates/gswd/ROADMAP.template.md +21 -0
  41. package/templates/gswd/SPEC.template.md +19 -0
  42. package/templates/gswd/STATE.template.md +15 -0
@@ -0,0 +1,122 @@
1
+ /**
2
+ * GSWD Specify Roles Module — Roles & permissions checkpoint
3
+ *
4
+ * Collects roles and permissions from the founder before journey mapping.
5
+ * In --auto mode, returns sensible defaults (single admin for v1 MVP).
6
+ *
7
+ * Schema: GSWD_SPEC.md Section 8.3 step 1
8
+ */
9
+
10
+ // ─── Types ───────────────────────────────────────────────────────────────────
11
+
12
+ export interface Role {
13
+ /** Role name (e.g., 'admin', 'viewer') */
14
+ name: string;
15
+ /** What this role can do */
16
+ description: string;
17
+ /** High-level permission descriptions */
18
+ permissions: string[];
19
+ }
20
+
21
+ export interface RolesConfig {
22
+ /** Defined roles */
23
+ roles: Role[];
24
+ /** Permission model type */
25
+ permissionModel: 'simple' | 'rbac' | 'abac';
26
+ /** Additional notes about the roles setup */
27
+ notes: string;
28
+ }
29
+
30
+ // ─── Default Configuration ───────────────────────────────────────────────────
31
+
32
+ /**
33
+ * Sensible v1 MVP default: single admin role with full permissions.
34
+ */
35
+ export function defaultRolesConfig(): RolesConfig {
36
+ return {
37
+ roles: [
38
+ {
39
+ name: 'admin',
40
+ description: 'Full access to all features and settings',
41
+ permissions: ['create', 'read', 'update', 'delete', 'manage_settings'],
42
+ },
43
+ ],
44
+ permissionModel: 'simple',
45
+ notes: 'Single admin role for v1 MVP — expand when multi-user is needed',
46
+ };
47
+ }
48
+
49
+ // ─── Roles Collection ────────────────────────────────────────────────────────
50
+
51
+ export interface CollectRolesOptions {
52
+ /** If true, skip checkpoint and return defaults */
53
+ auto: boolean;
54
+ }
55
+
56
+ /**
57
+ * Collect roles & permissions configuration.
58
+ *
59
+ * In auto mode: returns default config immediately (no interaction).
60
+ * In interactive mode: would render checkpoint box for user input.
61
+ * (Interactive mode deferred to Phase 6 — auto is the primary path for now.)
62
+ */
63
+ export async function collectRoles(options: CollectRolesOptions): Promise<RolesConfig> {
64
+ if (options.auto) {
65
+ return defaultRolesConfig();
66
+ }
67
+
68
+ // Interactive mode: return default with note about deferral
69
+ // Full interactive collection deferred to Phase 6 (Bootstrap + Auto)
70
+ return {
71
+ ...defaultRolesConfig(),
72
+ notes: 'Deferred — using admin-only for now',
73
+ };
74
+ }
75
+
76
+ // ─── Formatting ──────────────────────────────────────────────────────────────
77
+
78
+ /**
79
+ * Format RolesConfig for insertion into SPEC.md "## Roles & Permissions" section.
80
+ *
81
+ * Produces a markdown table of roles with permissions.
82
+ */
83
+ export function formatRolesForSpec(config: RolesConfig): string {
84
+ const lines: string[] = [];
85
+
86
+ // Permission model description
87
+ lines.push(`**Permission Model:** ${formatPermissionModel(config.permissionModel)}`);
88
+ lines.push('');
89
+
90
+ // Roles table
91
+ lines.push('| Role | Description | Permissions |');
92
+ lines.push('|------|-------------|-------------|');
93
+
94
+ for (const role of config.roles) {
95
+ const perms = role.permissions.join(', ');
96
+ lines.push(`| ${role.name} | ${role.description} | ${perms} |`);
97
+ }
98
+
99
+ // Notes
100
+ if (config.notes) {
101
+ lines.push('');
102
+ lines.push(`> ${config.notes}`);
103
+ }
104
+
105
+ return lines.join('\n');
106
+ }
107
+
108
+ /**
109
+ * Format permission model name for display.
110
+ */
111
+ function formatPermissionModel(model: 'simple' | 'rbac' | 'abac'): string {
112
+ switch (model) {
113
+ case 'simple':
114
+ return 'Simple (single role or flat permissions)';
115
+ case 'rbac':
116
+ return 'RBAC (Role-Based Access Control)';
117
+ case 'abac':
118
+ return 'ABAC (Attribute-Based Access Control)';
119
+ default:
120
+ return model;
121
+ }
122
+ }