@cloudstreamsoftware/claude-tools 1.0.0 → 1.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.
Files changed (190) hide show
  1. package/README.md +152 -37
  2. package/agents/INDEX.md +183 -0
  3. package/agents/architect.md +247 -0
  4. package/agents/build-error-resolver.md +555 -0
  5. package/agents/catalyst-deployer.md +132 -0
  6. package/agents/code-reviewer.md +121 -0
  7. package/agents/compliance-auditor.md +148 -0
  8. package/agents/creator-architect.md +395 -0
  9. package/agents/deluge-reviewer.md +98 -0
  10. package/agents/doc-updater.md +471 -0
  11. package/agents/e2e-runner.md +711 -0
  12. package/agents/planner.md +122 -0
  13. package/agents/refactor-cleaner.md +309 -0
  14. package/agents/security-reviewer.md +582 -0
  15. package/agents/tdd-guide.md +302 -0
  16. package/bin/cloudstream-setup.js +16 -6
  17. package/config/versions.json +63 -0
  18. package/dist/hooks/hooks.json +209 -0
  19. package/dist/index.js +47 -0
  20. package/dist/lib/asset-value.js +609 -0
  21. package/dist/lib/client-manager.js +300 -0
  22. package/dist/lib/command-matcher.js +242 -0
  23. package/dist/lib/cross-session-patterns.js +754 -0
  24. package/dist/lib/intent-classifier.js +1075 -0
  25. package/dist/lib/package-manager.js +374 -0
  26. package/dist/lib/recommendation-engine.js +597 -0
  27. package/dist/lib/session-memory.js +489 -0
  28. package/dist/lib/skill-effectiveness.js +486 -0
  29. package/dist/lib/skill-matcher.js +595 -0
  30. package/dist/lib/tutorial-metrics.js +242 -0
  31. package/dist/lib/tutorial-progress.js +209 -0
  32. package/dist/lib/tutorial-renderer.js +431 -0
  33. package/dist/lib/utils.js +380 -0
  34. package/dist/lib/verify-formatter.js +143 -0
  35. package/dist/lib/workflow-state.js +249 -0
  36. package/hooks/hooks.json +209 -0
  37. package/package.json +5 -1
  38. package/scripts/aggregate-sessions.js +290 -0
  39. package/scripts/branch-name-validator.js +291 -0
  40. package/scripts/build.js +101 -0
  41. package/scripts/commands/client-switch.js +231 -0
  42. package/scripts/deprecate-skill.js +610 -0
  43. package/scripts/diagnose.js +324 -0
  44. package/scripts/doc-freshness.js +168 -0
  45. package/scripts/generate-weekly-digest.js +393 -0
  46. package/scripts/health-check.js +270 -0
  47. package/scripts/hooks/credential-check.js +101 -0
  48. package/scripts/hooks/evaluate-session.js +81 -0
  49. package/scripts/hooks/pre-compact.js +66 -0
  50. package/scripts/hooks/prompt-analyzer.js +276 -0
  51. package/scripts/hooks/prompt-router.js +422 -0
  52. package/scripts/hooks/quality-gate-enforcer.js +371 -0
  53. package/scripts/hooks/session-end.js +156 -0
  54. package/scripts/hooks/session-start.js +195 -0
  55. package/scripts/hooks/skill-injector.js +333 -0
  56. package/scripts/hooks/suggest-compact.js +58 -0
  57. package/scripts/lib/asset-value.js +609 -0
  58. package/scripts/lib/client-manager.js +300 -0
  59. package/scripts/lib/command-matcher.js +242 -0
  60. package/scripts/lib/cross-session-patterns.js +754 -0
  61. package/scripts/lib/intent-classifier.js +1075 -0
  62. package/scripts/lib/package-manager.js +374 -0
  63. package/scripts/lib/recommendation-engine.js +597 -0
  64. package/scripts/lib/session-memory.js +489 -0
  65. package/scripts/lib/skill-effectiveness.js +486 -0
  66. package/scripts/lib/skill-matcher.js +595 -0
  67. package/scripts/lib/tutorial-metrics.js +242 -0
  68. package/scripts/lib/tutorial-progress.js +209 -0
  69. package/scripts/lib/tutorial-renderer.js +431 -0
  70. package/scripts/lib/utils.js +380 -0
  71. package/scripts/lib/verify-formatter.js +143 -0
  72. package/scripts/lib/workflow-state.js +249 -0
  73. package/scripts/onboard.js +363 -0
  74. package/scripts/quarterly-report.js +692 -0
  75. package/scripts/setup-package-manager.js +204 -0
  76. package/scripts/sync-upstream.js +391 -0
  77. package/scripts/test.js +108 -0
  78. package/scripts/tutorial-runner.js +351 -0
  79. package/scripts/validate-all.js +201 -0
  80. package/scripts/verifiers/agents.js +245 -0
  81. package/scripts/verifiers/config.js +186 -0
  82. package/scripts/verifiers/environment.js +123 -0
  83. package/scripts/verifiers/hooks.js +188 -0
  84. package/scripts/verifiers/index.js +38 -0
  85. package/scripts/verifiers/persistence.js +140 -0
  86. package/scripts/verifiers/plugin.js +215 -0
  87. package/scripts/verifiers/skills.js +209 -0
  88. package/scripts/verify-setup.js +164 -0
  89. package/skills/INDEX.md +157 -0
  90. package/skills/backend-patterns/SKILL.md +586 -0
  91. package/skills/backend-patterns/catalyst-patterns.md +128 -0
  92. package/skills/bigquery-patterns/SKILL.md +27 -0
  93. package/skills/bigquery-patterns/performance-optimization.md +518 -0
  94. package/skills/bigquery-patterns/query-patterns.md +372 -0
  95. package/skills/bigquery-patterns/schema-design.md +78 -0
  96. package/skills/cloudstream-project-template/SKILL.md +20 -0
  97. package/skills/cloudstream-project-template/structure.md +65 -0
  98. package/skills/coding-standards/SKILL.md +524 -0
  99. package/skills/coding-standards/deluge-standards.md +83 -0
  100. package/skills/compliance-patterns/SKILL.md +28 -0
  101. package/skills/compliance-patterns/hipaa/audit-requirements.md +251 -0
  102. package/skills/compliance-patterns/hipaa/baa-process.md +298 -0
  103. package/skills/compliance-patterns/hipaa/data-archival-strategy.md +387 -0
  104. package/skills/compliance-patterns/hipaa/phi-handling.md +52 -0
  105. package/skills/compliance-patterns/pci-dss/saq-a-requirements.md +307 -0
  106. package/skills/compliance-patterns/pci-dss/tokenization-patterns.md +382 -0
  107. package/skills/compliance-patterns/pci-dss/zoho-checkout-patterns.md +56 -0
  108. package/skills/compliance-patterns/soc2/access-controls.md +344 -0
  109. package/skills/compliance-patterns/soc2/audit-logging.md +458 -0
  110. package/skills/compliance-patterns/soc2/change-management.md +403 -0
  111. package/skills/compliance-patterns/soc2/deluge-execution-logging.md +407 -0
  112. package/skills/consultancy-workflows/SKILL.md +19 -0
  113. package/skills/consultancy-workflows/client-isolation.md +21 -0
  114. package/skills/consultancy-workflows/documentation-automation.md +454 -0
  115. package/skills/consultancy-workflows/handoff-procedures.md +257 -0
  116. package/skills/consultancy-workflows/knowledge-capture.md +513 -0
  117. package/skills/consultancy-workflows/time-tracking.md +26 -0
  118. package/skills/continuous-learning/SKILL.md +84 -0
  119. package/skills/continuous-learning/config.json +18 -0
  120. package/skills/continuous-learning/evaluate-session.sh +60 -0
  121. package/skills/continuous-learning-v2/SKILL.md +126 -0
  122. package/skills/continuous-learning-v2/config.json +61 -0
  123. package/skills/frontend-patterns/SKILL.md +635 -0
  124. package/skills/frontend-patterns/zoho-widget-patterns.md +103 -0
  125. package/skills/gcp-data-engineering/SKILL.md +36 -0
  126. package/skills/gcp-data-engineering/bigquery/performance-optimization.md +337 -0
  127. package/skills/gcp-data-engineering/dataflow/error-handling.md +496 -0
  128. package/skills/gcp-data-engineering/dataflow/pipeline-patterns.md +444 -0
  129. package/skills/gcp-data-engineering/dbt/model-organization.md +63 -0
  130. package/skills/gcp-data-engineering/dbt/testing-patterns.md +503 -0
  131. package/skills/gcp-data-engineering/medallion-architecture/bronze-layer.md +60 -0
  132. package/skills/gcp-data-engineering/medallion-architecture/gold-layer.md +311 -0
  133. package/skills/gcp-data-engineering/medallion-architecture/layer-transitions.md +517 -0
  134. package/skills/gcp-data-engineering/medallion-architecture/silver-layer.md +305 -0
  135. package/skills/gcp-data-engineering/zoho-to-gcp/data-extraction.md +543 -0
  136. package/skills/gcp-data-engineering/zoho-to-gcp/real-time-vs-batch.md +337 -0
  137. package/skills/security-review/SKILL.md +498 -0
  138. package/skills/security-review/compliance-checklist.md +53 -0
  139. package/skills/strategic-compact/SKILL.md +67 -0
  140. package/skills/tdd-workflow/SKILL.md +413 -0
  141. package/skills/tdd-workflow/zoho-testing.md +124 -0
  142. package/skills/tutorial/SKILL.md +249 -0
  143. package/skills/tutorial/docs/ACCESSIBILITY.md +169 -0
  144. package/skills/tutorial/lessons/00-philosophy-and-workflow.md +198 -0
  145. package/skills/tutorial/lessons/01-basics.md +81 -0
  146. package/skills/tutorial/lessons/02-training.md +86 -0
  147. package/skills/tutorial/lessons/03-commands.md +109 -0
  148. package/skills/tutorial/lessons/04-workflows.md +115 -0
  149. package/skills/tutorial/lessons/05-compliance.md +116 -0
  150. package/skills/tutorial/lessons/06-zoho.md +121 -0
  151. package/skills/tutorial/lessons/07-hooks-system.md +277 -0
  152. package/skills/tutorial/lessons/08-mcp-servers.md +316 -0
  153. package/skills/tutorial/lessons/09-client-management.md +215 -0
  154. package/skills/tutorial/lessons/10-testing-e2e.md +260 -0
  155. package/skills/tutorial/lessons/11-skills-deep-dive.md +272 -0
  156. package/skills/tutorial/lessons/12-rules-system.md +326 -0
  157. package/skills/tutorial/lessons/13-golden-standard-graduation.md +213 -0
  158. package/skills/tutorial/lessons/14-fork-setup-and-sync.md +312 -0
  159. package/skills/tutorial/lessons/15-living-examples-system.md +221 -0
  160. package/skills/tutorial/tracks/accelerated/README.md +134 -0
  161. package/skills/tutorial/tracks/accelerated/assessment/checkpoint-1.md +161 -0
  162. package/skills/tutorial/tracks/accelerated/assessment/checkpoint-2.md +175 -0
  163. package/skills/tutorial/tracks/accelerated/day-1-core-concepts.md +234 -0
  164. package/skills/tutorial/tracks/accelerated/day-2-essential-commands.md +270 -0
  165. package/skills/tutorial/tracks/accelerated/day-3-workflow-mastery.md +305 -0
  166. package/skills/tutorial/tracks/accelerated/day-4-compliance-zoho.md +304 -0
  167. package/skills/tutorial/tracks/accelerated/day-5-hooks-skills.md +344 -0
  168. package/skills/tutorial/tracks/accelerated/day-6-client-testing.md +386 -0
  169. package/skills/tutorial/tracks/accelerated/day-7-graduation.md +369 -0
  170. package/skills/zoho-patterns/CHANGELOG.md +108 -0
  171. package/skills/zoho-patterns/SKILL.md +446 -0
  172. package/skills/zoho-patterns/analytics/dashboard-patterns.md +352 -0
  173. package/skills/zoho-patterns/analytics/zoho-to-bigquery-pipeline.md +427 -0
  174. package/skills/zoho-patterns/catalyst/appsail-deployment.md +349 -0
  175. package/skills/zoho-patterns/catalyst/context-close-patterns.md +354 -0
  176. package/skills/zoho-patterns/catalyst/cron-batch-processing.md +374 -0
  177. package/skills/zoho-patterns/catalyst/function-patterns.md +439 -0
  178. package/skills/zoho-patterns/creator/form-design.md +304 -0
  179. package/skills/zoho-patterns/creator/publish-api-patterns.md +313 -0
  180. package/skills/zoho-patterns/creator/widget-integration.md +306 -0
  181. package/skills/zoho-patterns/creator/workflow-automation.md +253 -0
  182. package/skills/zoho-patterns/deluge/api-patterns.md +468 -0
  183. package/skills/zoho-patterns/deluge/batch-processing.md +403 -0
  184. package/skills/zoho-patterns/deluge/cross-app-integration.md +356 -0
  185. package/skills/zoho-patterns/deluge/error-handling.md +423 -0
  186. package/skills/zoho-patterns/deluge/syntax-reference.md +65 -0
  187. package/skills/zoho-patterns/integration/cors-proxy-architecture.md +426 -0
  188. package/skills/zoho-patterns/integration/crm-books-native-sync.md +277 -0
  189. package/skills/zoho-patterns/integration/oauth-token-management.md +461 -0
  190. package/skills/zoho-patterns/integration/zoho-flow-patterns.md +334 -0
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Workflow State - Tracks Workflow Phases and Suggests Next Steps
3
+ *
4
+ * Manages the state of multi-phase workflows (feature, bugfix, refactor, zoho)
5
+ * and provides guidance on skipped phases and next steps.
6
+ *
7
+ * @module workflow-state
8
+ */
9
+
10
+ /**
11
+ * Workflow phase definitions
12
+ *
13
+ * Each workflow type has an ordered list of phases that should be followed.
14
+ * Critical phases are marked and require confirmation to skip.
15
+ */
16
+ const WORKFLOW_PHASES = {
17
+ feature: ['plan', 'tdd', 'implement', 'review', 'verify', 'pr'],
18
+ bugfix: ['investigate', 'tdd', 'fix', 'review', 'verify'],
19
+ refactor: ['plan', 'review-existing', 'refactor', 'verify'],
20
+ zoho: ['architect', 'deluge-review', 'deploy', 'verify'],
21
+ };
22
+
23
+ /**
24
+ * Critical phases that require confirmation to skip
25
+ */
26
+ const CRITICAL_PHASES = {
27
+ feature: ['plan', 'tdd', 'review'],
28
+ bugfix: ['investigate', 'review'],
29
+ refactor: ['plan', 'review-existing'],
30
+ zoho: ['architect', 'deluge-review'],
31
+ };
32
+
33
+ /**
34
+ * In-memory workflow state
35
+ * In production, this would be persisted to session-memory.js
36
+ */
37
+ let currentWorkflow = null;
38
+
39
+ /**
40
+ * Get the current workflow state
41
+ *
42
+ * @returns {object|null} Current workflow state or null if no workflow active
43
+ */
44
+ function getWorkflowState() {
45
+ return currentWorkflow;
46
+ }
47
+
48
+ /**
49
+ * Start a new workflow
50
+ *
51
+ * @param {string} type - Workflow type (feature, bugfix, refactor, zoho)
52
+ * @param {string} description - Description of what this workflow is for
53
+ * @returns {boolean} True if workflow started successfully
54
+ */
55
+ function startWorkflow(type, description = '') {
56
+ // Validate workflow type
57
+ if (!WORKFLOW_PHASES[type]) {
58
+ return false;
59
+ }
60
+
61
+ currentWorkflow = {
62
+ type,
63
+ description,
64
+ currentPhase: null,
65
+ completedPhases: [],
66
+ startedAt: new Date().toISOString(),
67
+ lastUpdated: new Date().toISOString(),
68
+ };
69
+
70
+ return true;
71
+ }
72
+
73
+ /**
74
+ * Advance to a specific phase
75
+ *
76
+ * @param {string} phase - The phase to advance to
77
+ * @returns {boolean} True if phase was advanced successfully
78
+ */
79
+ function advancePhase(phase) {
80
+ if (!currentWorkflow) {
81
+ return false;
82
+ }
83
+
84
+ // Add to completed phases if not already there
85
+ if (!currentWorkflow.completedPhases.includes(phase)) {
86
+ currentWorkflow.completedPhases.push(phase);
87
+ }
88
+
89
+ currentWorkflow.currentPhase = phase;
90
+ currentWorkflow.lastUpdated = new Date().toISOString();
91
+
92
+ return true;
93
+ }
94
+
95
+ /**
96
+ * Check which phases were skipped to reach a target phase
97
+ *
98
+ * @param {string} targetPhase - The phase we're trying to reach
99
+ * @returns {string[]} Array of skipped phase names
100
+ */
101
+ function checkSkippedPhases(targetPhase) {
102
+ if (!currentWorkflow) {
103
+ return [];
104
+ }
105
+
106
+ const phases = WORKFLOW_PHASES[currentWorkflow.type];
107
+ if (!phases) {
108
+ return [];
109
+ }
110
+
111
+ const targetIndex = phases.indexOf(targetPhase);
112
+ if (targetIndex === -1) {
113
+ return [];
114
+ }
115
+
116
+ const skipped = [];
117
+
118
+ // Check all phases before the target
119
+ for (let i = 0; i < targetIndex; i++) {
120
+ const phase = phases[i];
121
+ if (!currentWorkflow.completedPhases.includes(phase)) {
122
+ skipped.push(phase);
123
+ }
124
+ }
125
+
126
+ return skipped;
127
+ }
128
+
129
+ /**
130
+ * Get the next recommended phase
131
+ *
132
+ * @returns {string|null} Next phase name or null if workflow complete
133
+ */
134
+ function getNextPhase() {
135
+ if (!currentWorkflow) {
136
+ return null;
137
+ }
138
+
139
+ const phases = WORKFLOW_PHASES[currentWorkflow.type];
140
+ if (!phases) {
141
+ return null;
142
+ }
143
+
144
+ // Find the current phase index
145
+ const currentIndex = currentWorkflow.currentPhase
146
+ ? phases.indexOf(currentWorkflow.currentPhase)
147
+ : -1;
148
+
149
+ // Return the next phase
150
+ const nextIndex = currentIndex + 1;
151
+ if (nextIndex >= phases.length) {
152
+ return null; // Workflow complete
153
+ }
154
+
155
+ return phases[nextIndex];
156
+ }
157
+
158
+ /**
159
+ * Check if a phase is critical for a workflow type
160
+ *
161
+ * @param {string} phase - Phase name
162
+ * @param {string} workflowType - Workflow type
163
+ * @returns {boolean} True if phase is critical
164
+ */
165
+ function isCriticalPhase(phase, workflowType) {
166
+ const criticalPhases = CRITICAL_PHASES[workflowType];
167
+ if (!criticalPhases) {
168
+ return false;
169
+ }
170
+ return criticalPhases.includes(phase);
171
+ }
172
+
173
+ /**
174
+ * Reset the workflow state
175
+ */
176
+ function resetWorkflow() {
177
+ currentWorkflow = null;
178
+ }
179
+
180
+ /**
181
+ * Check if a workflow is currently active
182
+ *
183
+ * @returns {boolean} True if workflow is active
184
+ */
185
+ function hasActiveWorkflow() {
186
+ return currentWorkflow !== null;
187
+ }
188
+
189
+ /**
190
+ * Get workflow progress as a percentage
191
+ *
192
+ * @returns {number} Progress percentage (0-100)
193
+ */
194
+ function getProgress() {
195
+ if (!currentWorkflow) {
196
+ return 0;
197
+ }
198
+
199
+ const phases = WORKFLOW_PHASES[currentWorkflow.type];
200
+ if (!phases || phases.length === 0) {
201
+ return 0;
202
+ }
203
+
204
+ return Math.round((currentWorkflow.completedPhases.length / phases.length) * 100);
205
+ }
206
+
207
+ /**
208
+ * Detect workflow type from an intent
209
+ *
210
+ * @param {string} intent - The detected intent
211
+ * @returns {string|null} Suggested workflow type or null
212
+ */
213
+ function detectWorkflowType(intent) {
214
+ const intentToWorkflow = {
215
+ PLANNING: 'feature',
216
+ TESTING: 'feature', // Testing typically part of feature workflow
217
+ REVIEW: null, // Review could be any workflow
218
+ SECURITY: null,
219
+ COMPLIANCE: null,
220
+ ZOHO: 'zoho',
221
+ DEPLOY: null, // Deploy is usually end of workflow
222
+ REFACTOR: 'refactor',
223
+ DEBUG: 'bugfix',
224
+ };
225
+
226
+ return intentToWorkflow[intent] || null;
227
+ }
228
+
229
+ module.exports = {
230
+ // State management
231
+ getWorkflowState,
232
+ startWorkflow,
233
+ advancePhase,
234
+ resetWorkflow,
235
+ hasActiveWorkflow,
236
+
237
+ // Phase checking
238
+ checkSkippedPhases,
239
+ getNextPhase,
240
+ isCriticalPhase,
241
+ getProgress,
242
+
243
+ // Workflow detection
244
+ detectWorkflowType,
245
+
246
+ // Constants
247
+ WORKFLOW_PHASES,
248
+ CRITICAL_PHASES,
249
+ };
@@ -0,0 +1,363 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Onboard Script for Everything Claude Code
5
+ * Interactive setup wizard for new users
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+ const {
11
+ getClaudeDir,
12
+ commandExists,
13
+ runCommand,
14
+ readFile,
15
+ ensureDir,
16
+ log,
17
+ } = require('./lib/utils');
18
+
19
+ // Status indicators
20
+ const CHECK = '\u2713'; // ✓
21
+ const CROSS = '\u2717'; // ✗
22
+ const ARROW = '\u2192'; // →
23
+
24
+ let stepNumber = 0;
25
+ const totalSteps = 6;
26
+ const issues = [];
27
+
28
+ function step(title) {
29
+ stepNumber++;
30
+ log('');
31
+ log(`[${stepNumber}/${totalSteps}] ${title}`);
32
+ }
33
+
34
+ function success(msg) {
35
+ log(` ${CHECK} ${msg}`);
36
+ }
37
+
38
+ function fail(msg) {
39
+ log(` ${CROSS} ${msg}`);
40
+ issues.push(msg);
41
+ }
42
+
43
+ function info(msg) {
44
+ log(` ${ARROW} ${msg}`);
45
+ }
46
+
47
+ function divider() {
48
+ log('');
49
+ log('-'.repeat(50));
50
+ }
51
+
52
+ // Step 1: Prerequisites
53
+ function checkPrerequisites() {
54
+ step('Checking prerequisites...');
55
+
56
+ // Node.js
57
+ const nodeVersion = process.version;
58
+ const nodeMajor = parseInt(nodeVersion.slice(1).split('.')[0], 10);
59
+ if (nodeMajor >= 18) {
60
+ success(`Node.js ${nodeVersion}`);
61
+ } else {
62
+ fail(`Node.js ${nodeVersion} (requires 18+)`);
63
+ info('Install Node.js 18+ from https://nodejs.org/');
64
+ }
65
+
66
+ // Git
67
+ const gitResult = runCommand('git --version');
68
+ if (gitResult.success) {
69
+ success('Git installed');
70
+
71
+ // Check git config
72
+ const emailResult = runCommand('git config --get user.email');
73
+ if (emailResult.success && emailResult.output) {
74
+ success(`Git configured (${emailResult.output})`);
75
+ } else {
76
+ fail('Git email not configured');
77
+ info('Run: git config --global user.email "your@email.com"');
78
+ }
79
+ } else {
80
+ fail('Git not installed');
81
+ info('Install Git from https://git-scm.com/');
82
+ }
83
+
84
+ // Package manager
85
+ if (commandExists('npm')) {
86
+ success('npm available');
87
+ } else if (commandExists('yarn')) {
88
+ success('yarn available');
89
+ } else if (commandExists('pnpm')) {
90
+ success('pnpm available');
91
+ } else {
92
+ fail('No package manager found');
93
+ info('npm comes with Node.js - try reinstalling Node.js');
94
+ }
95
+ }
96
+
97
+ // Step 2: Repository
98
+ function checkRepository() {
99
+ step('Checking repository setup...');
100
+
101
+ const gitDirResult = runCommand('git rev-parse --git-dir');
102
+ if (!gitDirResult.success) {
103
+ fail('Not in a git repository');
104
+ info('Clone your fork first: git clone https://github.com/YOUR-USERNAME/css_claude_code.git');
105
+ return;
106
+ }
107
+ success('In a git repository');
108
+
109
+ // Check remotes
110
+ const remotesResult = runCommand('git remote -v');
111
+ if (remotesResult.success) {
112
+ const remotes = remotesResult.output;
113
+
114
+ if (remotes.includes('origin')) {
115
+ success('Origin remote configured');
116
+ } else {
117
+ fail('No origin remote');
118
+ }
119
+
120
+ if (remotes.includes('upstream')) {
121
+ success('Upstream remote configured');
122
+ } else {
123
+ fail('No upstream remote');
124
+ info(
125
+ 'Add upstream: git remote add upstream https://github.com/CloudStreamSoftware/css_claude_code.git'
126
+ );
127
+ }
128
+ }
129
+
130
+ // Check if we're in the right repo
131
+ const packagePath = path.join(process.cwd(), 'package.json');
132
+ if (fs.existsSync(packagePath)) {
133
+ const pkg = JSON.parse(readFile(packagePath));
134
+ if (pkg.name && pkg.name.includes('claude')) {
135
+ success('Appears to be correct repository');
136
+ }
137
+ }
138
+ }
139
+
140
+ // Step 3: Dependencies
141
+ function checkDependencies() {
142
+ step('Checking dependencies...');
143
+
144
+ const nodeModules = path.join(process.cwd(), 'node_modules');
145
+ if (fs.existsSync(nodeModules)) {
146
+ success('node_modules exists');
147
+
148
+ // Quick check for a key dependency
149
+ const utilsPath = path.join(nodeModules, '.package-lock.json');
150
+ if (fs.existsSync(utilsPath) || fs.readdirSync(nodeModules).length > 10) {
151
+ success('Dependencies appear installed');
152
+ }
153
+ } else {
154
+ fail('node_modules not found');
155
+ info('Run: npm install');
156
+ }
157
+
158
+ // Check for package-lock.json
159
+ const lockFile = path.join(process.cwd(), 'package-lock.json');
160
+ if (fs.existsSync(lockFile)) {
161
+ success('package-lock.json exists');
162
+ }
163
+ }
164
+
165
+ // Step 4: Credentials
166
+ function checkCredentials() {
167
+ step('Checking credentials...');
168
+
169
+ const claudeDir = getClaudeDir();
170
+ ensureDir(claudeDir);
171
+
172
+ const envFile = path.join(claudeDir, '.env');
173
+ if (fs.existsSync(envFile)) {
174
+ const content = readFile(envFile);
175
+ if (content && content.trim().length > 0) {
176
+ success('~/.claude/.env exists with content');
177
+
178
+ // Check for GITHUB_TOKEN
179
+ if (content.includes('GITHUB_TOKEN')) {
180
+ success('GITHUB_TOKEN configured');
181
+ } else {
182
+ fail('GITHUB_TOKEN not found in .env');
183
+ info('Add GITHUB_TOKEN=your_token to ~/.claude/.env');
184
+ }
185
+ } else {
186
+ fail('~/.claude/.env is empty');
187
+ info('Add your credentials to ~/.claude/.env');
188
+ }
189
+ } else {
190
+ fail('~/.claude/.env not found');
191
+ log('');
192
+ log(' Create ~/.claude/.env with:');
193
+ log(' GITHUB_TOKEN=your_github_token');
194
+ log('');
195
+ log(' Ask your team lead for additional credentials.');
196
+ }
197
+ }
198
+
199
+ // Step 5: Health Check
200
+ function runHealthCheck() {
201
+ step('Running health check...');
202
+
203
+ // Run a simplified health check
204
+ const claudeDir = getClaudeDir();
205
+
206
+ // Check claude dir
207
+ if (fs.existsSync(claudeDir)) {
208
+ try {
209
+ const testFile = path.join(claudeDir, '.onboard-test');
210
+ fs.writeFileSync(testFile, 'test');
211
+ fs.unlinkSync(testFile);
212
+ success('~/.claude/ is writable');
213
+ } catch {
214
+ fail('~/.claude/ is not writable');
215
+ }
216
+ } else {
217
+ ensureDir(claudeDir);
218
+ success('Created ~/.claude/ directory');
219
+ }
220
+
221
+ // Check hooks
222
+ const hooksFile = path.join(process.cwd(), 'hooks', 'hooks.json');
223
+ if (fs.existsSync(hooksFile)) {
224
+ try {
225
+ JSON.parse(readFile(hooksFile));
226
+ success('hooks.json is valid');
227
+ } catch {
228
+ fail('hooks.json has invalid JSON');
229
+ }
230
+ } else {
231
+ fail('hooks.json not found');
232
+ }
233
+
234
+ // Check commands directory
235
+ const commandsDir = path.join(process.cwd(), 'commands');
236
+ if (fs.existsSync(commandsDir)) {
237
+ const commands = fs.readdirSync(commandsDir).filter((f) => f.endsWith('.md'));
238
+ success(`${commands.length} commands available`);
239
+ }
240
+ }
241
+
242
+ // Step 6: Next Steps
243
+ function showNextSteps() {
244
+ step('Setup complete!');
245
+
246
+ divider();
247
+
248
+ if (issues.length === 0) {
249
+ log('');
250
+ log('Your system is ready!');
251
+ log('');
252
+ log('Next steps:');
253
+ log('');
254
+ log(' 1. Start the tutorial:');
255
+ log(' /tutorial');
256
+ log('');
257
+ log(' 2. Review documentation:');
258
+ log(' - README.md (overview)');
259
+ log(' - GETTING-STARTED.md (detailed setup)');
260
+ log(' - docs/DAY-ONE-CHECKLIST.md (first day guide)');
261
+ log('');
262
+ log(' 3. When ready for client work:');
263
+ log(' /client-switch [client-name]');
264
+ log('');
265
+ log('Questions? Ask your team buddy or check docs/FAQ.md');
266
+ } else {
267
+ log('');
268
+ log(`Setup incomplete - ${issues.length} issue(s) to resolve:`);
269
+ log('');
270
+ issues.forEach((issue, i) => {
271
+ log(` ${i + 1}. ${issue}`);
272
+ });
273
+ log('');
274
+ log('Fix these issues, then run /onboard again.');
275
+ }
276
+
277
+ log('');
278
+ }
279
+
280
+ // Status only mode
281
+ function showStatus() {
282
+ log('');
283
+ log('Everything Claude Code - Setup Status');
284
+ log('');
285
+
286
+ const checks = [];
287
+
288
+ // Node
289
+ const nodeMajor = parseInt(process.version.slice(1).split('.')[0], 10);
290
+ checks.push({ name: 'Node.js 18+', ok: nodeMajor >= 18 });
291
+
292
+ // Git
293
+ checks.push({ name: 'Git', ok: runCommand('git --version').success });
294
+
295
+ // In repo
296
+ checks.push({ name: 'Git repository', ok: runCommand('git rev-parse --git-dir').success });
297
+
298
+ // Dependencies
299
+ checks.push({
300
+ name: 'Dependencies',
301
+ ok: fs.existsSync(path.join(process.cwd(), 'node_modules')),
302
+ });
303
+
304
+ // Credentials
305
+ checks.push({ name: 'Credentials', ok: fs.existsSync(path.join(getClaudeDir(), '.env')) });
306
+
307
+ // Hooks
308
+ checks.push({
309
+ name: 'Hooks config',
310
+ ok: fs.existsSync(path.join(process.cwd(), 'hooks', 'hooks.json')),
311
+ });
312
+
313
+ checks.forEach((check) => {
314
+ const status = check.ok ? CHECK : CROSS;
315
+ log(` ${status} ${check.name}`);
316
+ });
317
+
318
+ const passed = checks.filter((c) => c.ok).length;
319
+ log('');
320
+ log(`${passed}/${checks.length} checks passed`);
321
+
322
+ if (passed < checks.length) {
323
+ log('');
324
+ log('Run /onboard for guided setup.');
325
+ }
326
+
327
+ log('');
328
+ }
329
+
330
+ function runOnboard(options = {}) {
331
+ const { skipChecks = false, status = false } = options;
332
+
333
+ if (status) {
334
+ showStatus();
335
+ return;
336
+ }
337
+
338
+ log('');
339
+ log('Welcome to CloudStream Claude Code!');
340
+ log('');
341
+ log("Let's get you set up. This takes about 15 minutes.");
342
+
343
+ if (!skipChecks) {
344
+ checkPrerequisites();
345
+ }
346
+ checkRepository();
347
+ checkDependencies();
348
+ checkCredentials();
349
+ runHealthCheck();
350
+ showNextSteps();
351
+
352
+ // Exit with appropriate code for CI/CD
353
+ process.exit(issues.length > 0 ? 1 : 0);
354
+ }
355
+
356
+ // Parse arguments
357
+ const args = process.argv.slice(2);
358
+ const options = {
359
+ skipChecks: args.includes('--skip-checks'),
360
+ status: args.includes('--status'),
361
+ };
362
+
363
+ runOnboard(options);