timsquad 2.0.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 (181) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +347 -0
  3. package/bin/tsq.js +6 -0
  4. package/dist/commands/feedback.d.ts +3 -0
  5. package/dist/commands/feedback.d.ts.map +1 -0
  6. package/dist/commands/feedback.js +142 -0
  7. package/dist/commands/feedback.js.map +1 -0
  8. package/dist/commands/full.d.ts +3 -0
  9. package/dist/commands/full.d.ts.map +1 -0
  10. package/dist/commands/full.js +87 -0
  11. package/dist/commands/full.js.map +1 -0
  12. package/dist/commands/git/commit.d.ts +3 -0
  13. package/dist/commands/git/commit.d.ts.map +1 -0
  14. package/dist/commands/git/commit.js +88 -0
  15. package/dist/commands/git/commit.js.map +1 -0
  16. package/dist/commands/git/index.d.ts +5 -0
  17. package/dist/commands/git/index.d.ts.map +1 -0
  18. package/dist/commands/git/index.js +5 -0
  19. package/dist/commands/git/index.js.map +1 -0
  20. package/dist/commands/git/pr.d.ts +3 -0
  21. package/dist/commands/git/pr.d.ts.map +1 -0
  22. package/dist/commands/git/pr.js +138 -0
  23. package/dist/commands/git/pr.js.map +1 -0
  24. package/dist/commands/git/release.d.ts +3 -0
  25. package/dist/commands/git/release.d.ts.map +1 -0
  26. package/dist/commands/git/release.js +158 -0
  27. package/dist/commands/git/release.js.map +1 -0
  28. package/dist/commands/git/sync.d.ts +3 -0
  29. package/dist/commands/git/sync.d.ts.map +1 -0
  30. package/dist/commands/git/sync.js +132 -0
  31. package/dist/commands/git/sync.js.map +1 -0
  32. package/dist/commands/init.d.ts +3 -0
  33. package/dist/commands/init.d.ts.map +1 -0
  34. package/dist/commands/init.js +150 -0
  35. package/dist/commands/init.js.map +1 -0
  36. package/dist/commands/log.d.ts +3 -0
  37. package/dist/commands/log.d.ts.map +1 -0
  38. package/dist/commands/log.js +271 -0
  39. package/dist/commands/log.js.map +1 -0
  40. package/dist/commands/metrics.d.ts +3 -0
  41. package/dist/commands/metrics.d.ts.map +1 -0
  42. package/dist/commands/metrics.js +299 -0
  43. package/dist/commands/metrics.js.map +1 -0
  44. package/dist/commands/quick.d.ts +3 -0
  45. package/dist/commands/quick.d.ts.map +1 -0
  46. package/dist/commands/quick.js +136 -0
  47. package/dist/commands/quick.js.map +1 -0
  48. package/dist/commands/retro.d.ts +3 -0
  49. package/dist/commands/retro.d.ts.map +1 -0
  50. package/dist/commands/retro.js +280 -0
  51. package/dist/commands/retro.js.map +1 -0
  52. package/dist/commands/status.d.ts +3 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +127 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/commands/watch.d.ts +3 -0
  57. package/dist/commands/watch.d.ts.map +1 -0
  58. package/dist/commands/watch.js +213 -0
  59. package/dist/commands/watch.js.map +1 -0
  60. package/dist/index.d.ts +3 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +50 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/lib/config.d.ts +34 -0
  65. package/dist/lib/config.d.ts.map +1 -0
  66. package/dist/lib/config.js +108 -0
  67. package/dist/lib/config.js.map +1 -0
  68. package/dist/lib/project.d.ts +47 -0
  69. package/dist/lib/project.d.ts.map +1 -0
  70. package/dist/lib/project.js +191 -0
  71. package/dist/lib/project.js.map +1 -0
  72. package/dist/lib/template.d.ts +33 -0
  73. package/dist/lib/template.d.ts.map +1 -0
  74. package/dist/lib/template.js +151 -0
  75. package/dist/lib/template.js.map +1 -0
  76. package/dist/types/config.d.ts +75 -0
  77. package/dist/types/config.d.ts.map +1 -0
  78. package/dist/types/config.js +66 -0
  79. package/dist/types/config.js.map +1 -0
  80. package/dist/types/feedback.d.ts +59 -0
  81. package/dist/types/feedback.d.ts.map +1 -0
  82. package/dist/types/feedback.js +26 -0
  83. package/dist/types/feedback.js.map +1 -0
  84. package/dist/types/index.d.ts +4 -0
  85. package/dist/types/index.d.ts.map +1 -0
  86. package/dist/types/index.js +5 -0
  87. package/dist/types/index.js.map +1 -0
  88. package/dist/types/project.d.ts +89 -0
  89. package/dist/types/project.d.ts.map +1 -0
  90. package/dist/types/project.js +44 -0
  91. package/dist/types/project.js.map +1 -0
  92. package/dist/utils/colors.d.ts +30 -0
  93. package/dist/utils/colors.d.ts.map +1 -0
  94. package/dist/utils/colors.js +54 -0
  95. package/dist/utils/colors.js.map +1 -0
  96. package/dist/utils/date.d.ts +25 -0
  97. package/dist/utils/date.d.ts.map +1 -0
  98. package/dist/utils/date.js +65 -0
  99. package/dist/utils/date.js.map +1 -0
  100. package/dist/utils/fs.d.ts +49 -0
  101. package/dist/utils/fs.d.ts.map +1 -0
  102. package/dist/utils/fs.js +84 -0
  103. package/dist/utils/fs.js.map +1 -0
  104. package/dist/utils/prompts.d.ts +31 -0
  105. package/dist/utils/prompts.d.ts.map +1 -0
  106. package/dist/utils/prompts.js +95 -0
  107. package/dist/utils/prompts.js.map +1 -0
  108. package/dist/utils/yaml.d.ts +21 -0
  109. package/dist/utils/yaml.d.ts.map +1 -0
  110. package/dist/utils/yaml.js +40 -0
  111. package/dist/utils/yaml.js.map +1 -0
  112. package/package.json +71 -0
  113. package/templates/common/CLAUDE.md.template +254 -0
  114. package/templates/common/claude/agents/tsq-dba.md +290 -0
  115. package/templates/common/claude/agents/tsq-designer.md +304 -0
  116. package/templates/common/claude/agents/tsq-developer.md +118 -0
  117. package/templates/common/claude/agents/tsq-planner.md +90 -0
  118. package/templates/common/claude/agents/tsq-prompter.md +336 -0
  119. package/templates/common/claude/agents/tsq-qa.md +134 -0
  120. package/templates/common/claude/agents/tsq-retro.md +168 -0
  121. package/templates/common/claude/agents/tsq-security.md +190 -0
  122. package/templates/common/claude/skills/architecture/SKILL.md +123 -0
  123. package/templates/common/claude/skills/backend/node/SKILL.md +1015 -0
  124. package/templates/common/claude/skills/coding/SKILL.md +171 -0
  125. package/templates/common/claude/skills/database/prisma/SKILL.md +357 -0
  126. package/templates/common/claude/skills/frontend/nextjs/SKILL.md +279 -0
  127. package/templates/common/claude/skills/frontend/react/SKILL.md +1729 -0
  128. package/templates/common/claude/skills/methodology/bdd/SKILL.md +234 -0
  129. package/templates/common/claude/skills/methodology/ddd/SKILL.md +311 -0
  130. package/templates/common/claude/skills/methodology/tdd/SKILL.md +512 -0
  131. package/templates/common/claude/skills/planning/SKILL.md +90 -0
  132. package/templates/common/claude/skills/security/SKILL.md +234 -0
  133. package/templates/common/claude/skills/testing/SKILL.md +146 -0
  134. package/templates/common/claude/skills/typescript/SKILL.md +435 -0
  135. package/templates/common/config.template.yaml +131 -0
  136. package/templates/common/timsquad/architectures/clean/ARCHITECTURE.md +49 -0
  137. package/templates/common/timsquad/architectures/clean/backend.xml +210 -0
  138. package/templates/common/timsquad/architectures/clean/frontend.xml +148 -0
  139. package/templates/common/timsquad/architectures/fsd/ARCHITECTURE.md +67 -0
  140. package/templates/common/timsquad/architectures/fsd/frontend.xml +288 -0
  141. package/templates/common/timsquad/architectures/hexagonal/ARCHITECTURE.md +60 -0
  142. package/templates/common/timsquad/architectures/hexagonal/backend.xml +300 -0
  143. package/templates/common/timsquad/constraints/competency-framework.xml +501 -0
  144. package/templates/common/timsquad/constraints/ssot-schema.xml +433 -0
  145. package/templates/common/timsquad/feedback/feedback-router.sh +341 -0
  146. package/templates/common/timsquad/feedback/routing-rules.yaml +352 -0
  147. package/templates/common/timsquad/generators/data-design.xml +290 -0
  148. package/templates/common/timsquad/generators/prd.xml +280 -0
  149. package/templates/common/timsquad/generators/requirements.xml +220 -0
  150. package/templates/common/timsquad/generators/service-spec.xml +266 -0
  151. package/templates/common/timsquad/logs/_example.md +81 -0
  152. package/templates/common/timsquad/logs/_template.md +46 -0
  153. package/templates/common/timsquad/patterns/cqrs.xml +127 -0
  154. package/templates/common/timsquad/patterns/event-sourcing.xml +85 -0
  155. package/templates/common/timsquad/patterns/repository.xml +64 -0
  156. package/templates/common/timsquad/process/state-machine.xml +343 -0
  157. package/templates/common/timsquad/process/validation-rules.xml +308 -0
  158. package/templates/common/timsquad/process/workflow-base.xml +202 -0
  159. package/templates/common/timsquad/retrospective/cycle-report.template.md +205 -0
  160. package/templates/common/timsquad/retrospective/metrics/metrics-schema.json +203 -0
  161. package/templates/common/timsquad/retrospective/patterns/failure-patterns.md +199 -0
  162. package/templates/common/timsquad/retrospective/patterns/success-patterns.md +262 -0
  163. package/templates/common/timsquad/retrospective/retrospective-config.xml +294 -0
  164. package/templates/common/timsquad/retrospective/retrospective-state.xml +210 -0
  165. package/templates/common/timsquad/ssot/adr/ADR-000-template.md +121 -0
  166. package/templates/common/timsquad/ssot/adr/ADR-001-example.md +115 -0
  167. package/templates/common/timsquad/ssot/data-design.template.md +132 -0
  168. package/templates/common/timsquad/ssot/deployment-spec.template.md +384 -0
  169. package/templates/common/timsquad/ssot/env-config.template.md +346 -0
  170. package/templates/common/timsquad/ssot/error-codes.template.md +114 -0
  171. package/templates/common/timsquad/ssot/functional-spec.template.md +185 -0
  172. package/templates/common/timsquad/ssot/glossary.template.md +148 -0
  173. package/templates/common/timsquad/ssot/integration-spec.template.md +391 -0
  174. package/templates/common/timsquad/ssot/planning.template.md +94 -0
  175. package/templates/common/timsquad/ssot/prd.template.md +102 -0
  176. package/templates/common/timsquad/ssot/requirements.template.md +117 -0
  177. package/templates/common/timsquad/ssot/security-spec.template.md +309 -0
  178. package/templates/common/timsquad/ssot/service-spec.template.md +194 -0
  179. package/templates/common/timsquad/ssot/test-spec.template.md +264 -0
  180. package/templates/common/timsquad/ssot/ui-ux-spec.template.md +262 -0
  181. package/templates/common/timsquad/state/workspace.xml +217 -0
@@ -0,0 +1,88 @@
1
+ import { simpleGit } from 'simple-git';
2
+ import { colors, printHeader, printError, printSuccess, printKeyValue } from '../../utils/colors.js';
3
+ import { findProjectRoot } from '../../lib/project.js';
4
+ import { promptInput, promptConfirm } from '../../utils/prompts.js';
5
+ const CO_AUTHOR = 'Co-Authored-By: Claude <noreply@anthropic.com>';
6
+ export function registerCommitCommand(program) {
7
+ program
8
+ .command('commit [message]')
9
+ .description('Stage and commit with Co-Author')
10
+ .option('-a, --all', 'Stage all changes')
11
+ .option('-m, --message <msg>', 'Commit message')
12
+ .action(async (message, options) => {
13
+ try {
14
+ await runCommit(message || options.message, options.all);
15
+ }
16
+ catch (error) {
17
+ printError(error.message);
18
+ process.exit(1);
19
+ }
20
+ });
21
+ }
22
+ async function runCommit(message, stageAll) {
23
+ const projectRoot = await findProjectRoot();
24
+ const workDir = projectRoot || process.cwd();
25
+ const git = simpleGit(workDir);
26
+ // Check if git repo
27
+ const isRepo = await git.checkIsRepo();
28
+ if (!isRepo) {
29
+ throw new Error('Not a git repository');
30
+ }
31
+ printHeader('Git Commit');
32
+ // Get status
33
+ const status = await git.status();
34
+ if (status.files.length === 0) {
35
+ console.log(colors.warning('No changes to commit'));
36
+ return;
37
+ }
38
+ // Show status
39
+ console.log(colors.subheader('Changes:'));
40
+ const staged = status.staged;
41
+ const unstaged = [...status.modified, ...status.deleted].filter(f => !staged.includes(f));
42
+ const untracked = status.not_added;
43
+ if (staged.length > 0) {
44
+ console.log(colors.success('\nStaged:'));
45
+ staged.forEach(f => console.log(colors.dim(` ${f}`)));
46
+ }
47
+ if (unstaged.length > 0) {
48
+ console.log(colors.warning('\nNot staged:'));
49
+ unstaged.forEach(f => console.log(colors.dim(` ${f}`)));
50
+ }
51
+ if (untracked.length > 0) {
52
+ console.log(colors.dim('\nUntracked:'));
53
+ untracked.forEach(f => console.log(colors.dim(` ${f}`)));
54
+ }
55
+ console.log('');
56
+ // Stage files if needed
57
+ if (stageAll) {
58
+ await git.add('-A');
59
+ console.log(colors.success('Staged all changes'));
60
+ }
61
+ else if (staged.length === 0) {
62
+ const shouldStage = await promptConfirm('No staged changes. Stage all?', true);
63
+ if (shouldStage) {
64
+ await git.add('-A');
65
+ console.log(colors.success('Staged all changes'));
66
+ }
67
+ else {
68
+ console.log(colors.dim('Use git add to stage files manually'));
69
+ return;
70
+ }
71
+ }
72
+ // Get commit message
73
+ let commitMessage = message;
74
+ if (!commitMessage) {
75
+ commitMessage = await promptInput('Commit message:');
76
+ if (!commitMessage) {
77
+ throw new Error('Commit message required');
78
+ }
79
+ }
80
+ // Add Co-Author
81
+ const fullMessage = `${commitMessage}\n\n${CO_AUTHOR}`;
82
+ // Commit
83
+ const result = await git.commit(fullMessage);
84
+ printSuccess('Committed successfully');
85
+ printKeyValue('Commit', result.commit);
86
+ printKeyValue('Summary', `${result.summary.changes} changes, ${result.summary.insertions} insertions, ${result.summary.deletions} deletions`);
87
+ }
88
+ //# sourceMappingURL=commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../../src/commands/git/commit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { registerCommitCommand } from './commit.js';
2
+ export { registerPRCommand } from './pr.js';
3
+ export { registerReleaseCommand } from './release.js';
4
+ export { registerSyncCommand } from './sync.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { registerCommitCommand } from './commit.js';
2
+ export { registerPRCommand } from './pr.js';
3
+ export { registerReleaseCommand } from './release.js';
4
+ export { registerSyncCommand } from './sync.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/git/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerPRCommand(program: Command): void;
3
+ //# sourceMappingURL=pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.d.ts","sourceRoot":"","sources":["../../../src/commands/git/pr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAcxD"}
@@ -0,0 +1,138 @@
1
+ import { simpleGit } from 'simple-git';
2
+ import { execSync } from 'child_process';
3
+ import { colors, printHeader, printError, printSuccess, printKeyValue, printWarning } from '../../utils/colors.js';
4
+ import { findProjectRoot } from '../../lib/project.js';
5
+ import { promptInput, promptConfirm } from '../../utils/prompts.js';
6
+ export function registerPRCommand(program) {
7
+ program
8
+ .command('pr [title]')
9
+ .description('Push and create Pull Request (requires gh CLI)')
10
+ .option('-b, --base <branch>', 'Base branch', 'main')
11
+ .option('-d, --draft', 'Create as draft PR')
12
+ .action(async (title, options) => {
13
+ try {
14
+ await createPR(title, options.base, options.draft);
15
+ }
16
+ catch (error) {
17
+ printError(error.message);
18
+ process.exit(1);
19
+ }
20
+ });
21
+ }
22
+ function checkGhCli() {
23
+ try {
24
+ execSync('gh --version', { stdio: 'ignore' });
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ async function createPR(title, baseBranch = 'main', draft = false) {
32
+ const projectRoot = await findProjectRoot();
33
+ const workDir = projectRoot || process.cwd();
34
+ // Check gh CLI
35
+ if (!checkGhCli()) {
36
+ printError('GitHub CLI (gh) not found');
37
+ console.log(colors.dim('\nInstall gh CLI:'));
38
+ console.log(colors.path(' brew install gh'));
39
+ console.log(colors.dim(' or visit: https://cli.github.com/'));
40
+ return;
41
+ }
42
+ const git = simpleGit(workDir);
43
+ // Check if git repo
44
+ const isRepo = await git.checkIsRepo();
45
+ if (!isRepo) {
46
+ throw new Error('Not a git repository');
47
+ }
48
+ printHeader('Create Pull Request');
49
+ // Get current branch
50
+ const currentBranch = await git.revparse(['--abbrev-ref', 'HEAD']);
51
+ printKeyValue('Current branch', currentBranch.trim());
52
+ printKeyValue('Base branch', baseBranch);
53
+ if (currentBranch.trim() === baseBranch) {
54
+ throw new Error(`Cannot create PR from ${baseBranch} to ${baseBranch}`);
55
+ }
56
+ // Check for uncommitted changes
57
+ const status = await git.status();
58
+ if (status.files.length > 0) {
59
+ printWarning('You have uncommitted changes');
60
+ const proceed = await promptConfirm('Proceed anyway?', false);
61
+ if (!proceed) {
62
+ console.log(colors.dim('\nRun "tsq commit" to commit changes first'));
63
+ return;
64
+ }
65
+ }
66
+ // Push to remote
67
+ console.log(colors.dim('\nPushing to remote...'));
68
+ try {
69
+ await git.push(['-u', 'origin', currentBranch.trim()]);
70
+ printSuccess('Pushed to origin');
71
+ }
72
+ catch (error) {
73
+ const errorMsg = error.message;
74
+ if (errorMsg.includes('already exists')) {
75
+ console.log(colors.dim('Branch already pushed'));
76
+ }
77
+ else {
78
+ throw error;
79
+ }
80
+ }
81
+ // Get PR title
82
+ let prTitle = title;
83
+ if (!prTitle) {
84
+ // Get last commit message as default
85
+ const log = await git.log({ maxCount: 1 });
86
+ const defaultTitle = log.latest?.message.split('\n')[0] || '';
87
+ prTitle = await promptInput('PR title:', defaultTitle);
88
+ }
89
+ if (!prTitle) {
90
+ throw new Error('PR title required');
91
+ }
92
+ // Get PR body
93
+ console.log(colors.dim('\nEnter PR description (empty for default):'));
94
+ const prBody = await promptInput('Description:');
95
+ const defaultBody = `## Summary
96
+ - ${prTitle}
97
+
98
+ ## Changes
99
+ - See commits for details
100
+
101
+ ---
102
+ 🤖 Generated with TimSquad`;
103
+ const body = prBody || defaultBody;
104
+ // Create PR using gh CLI
105
+ console.log(colors.dim('\nCreating PR...'));
106
+ try {
107
+ const draftFlag = draft ? '--draft' : '';
108
+ const cmd = `gh pr create --title "${prTitle.replace(/"/g, '\\"')}" --body "${body.replace(/"/g, '\\"')}" --base ${baseBranch} ${draftFlag}`;
109
+ const result = execSync(cmd, {
110
+ cwd: workDir,
111
+ encoding: 'utf-8',
112
+ stdio: ['pipe', 'pipe', 'pipe'],
113
+ });
114
+ printSuccess('Pull Request created!');
115
+ console.log(colors.path(`\n${result.trim()}`));
116
+ }
117
+ catch (error) {
118
+ const errorOutput = error.stderr || error.message;
119
+ if (errorOutput.includes('already exists')) {
120
+ console.log(colors.warning('\nPR already exists for this branch'));
121
+ // Get existing PR URL
122
+ try {
123
+ const prUrl = execSync('gh pr view --json url -q .url', {
124
+ cwd: workDir,
125
+ encoding: 'utf-8',
126
+ });
127
+ console.log(colors.path(prUrl.trim()));
128
+ }
129
+ catch {
130
+ // Ignore
131
+ }
132
+ }
133
+ else {
134
+ throw new Error(`Failed to create PR: ${errorOutput}`);
135
+ }
136
+ }
137
+ }
138
+ //# sourceMappingURL=pr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../src/commands/git/pr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerReleaseCommand(program: Command): void;
3
+ //# sourceMappingURL=release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../../src/commands/git/release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc7D"}
@@ -0,0 +1,158 @@
1
+ import { simpleGit } from 'simple-git';
2
+ import { execSync } from 'child_process';
3
+ import { colors, printHeader, printError, printSuccess, printKeyValue, printWarning } from '../../utils/colors.js';
4
+ import { findProjectRoot } from '../../lib/project.js';
5
+ import { promptInput, promptConfirm, promptSelect } from '../../utils/prompts.js';
6
+ export function registerReleaseCommand(program) {
7
+ program
8
+ .command('release [version]')
9
+ .description('Create a release with tag and GitHub Release')
10
+ .option('-t, --type <type>', 'Release type: patch, minor, major')
11
+ .option('--no-github', 'Skip GitHub Release creation')
12
+ .action(async (version, options) => {
13
+ try {
14
+ await createRelease(version, options.type, options.github);
15
+ }
16
+ catch (error) {
17
+ printError(error.message);
18
+ process.exit(1);
19
+ }
20
+ });
21
+ }
22
+ function checkGhCli() {
23
+ try {
24
+ execSync('gh --version', { stdio: 'ignore' });
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ function bumpVersion(current, type) {
32
+ const parts = current.replace(/^v/, '').split('.').map(Number);
33
+ const [major, minor, patch] = parts;
34
+ switch (type) {
35
+ case 'major':
36
+ return `${major + 1}.0.0`;
37
+ case 'minor':
38
+ return `${major}.${minor + 1}.0`;
39
+ case 'patch':
40
+ default:
41
+ return `${major}.${minor}.${patch + 1}`;
42
+ }
43
+ }
44
+ async function createRelease(version, releaseType, createGithubRelease = true) {
45
+ const projectRoot = await findProjectRoot();
46
+ const workDir = projectRoot || process.cwd();
47
+ const git = simpleGit(workDir);
48
+ // Check if git repo
49
+ const isRepo = await git.checkIsRepo();
50
+ if (!isRepo) {
51
+ throw new Error('Not a git repository');
52
+ }
53
+ printHeader('Create Release');
54
+ // Check for uncommitted changes
55
+ const status = await git.status();
56
+ if (status.files.length > 0) {
57
+ printWarning('You have uncommitted changes');
58
+ const proceed = await promptConfirm('Proceed anyway?', false);
59
+ if (!proceed) {
60
+ console.log(colors.dim('\nRun "tsq commit" to commit changes first'));
61
+ return;
62
+ }
63
+ }
64
+ // Get current version from tags
65
+ let currentVersion = '0.0.0';
66
+ try {
67
+ const tags = await git.tags();
68
+ const versionTags = tags.all.filter(t => /^v?\d+\.\d+\.\d+/.test(t));
69
+ if (versionTags.length > 0) {
70
+ currentVersion = versionTags[versionTags.length - 1].replace(/^v/, '');
71
+ }
72
+ }
73
+ catch {
74
+ // No tags yet
75
+ }
76
+ printKeyValue('Current version', currentVersion);
77
+ // Determine new version
78
+ let newVersion = version;
79
+ if (!newVersion) {
80
+ if (releaseType) {
81
+ newVersion = bumpVersion(currentVersion, releaseType);
82
+ }
83
+ else {
84
+ // Ask for release type
85
+ const type = await promptSelect('Release type:', [
86
+ { value: 'patch', name: `patch (${bumpVersion(currentVersion, 'patch')})` },
87
+ { value: 'minor', name: `minor (${bumpVersion(currentVersion, 'minor')})` },
88
+ { value: 'major', name: `major (${bumpVersion(currentVersion, 'major')})` },
89
+ ]);
90
+ newVersion = bumpVersion(currentVersion, type);
91
+ }
92
+ }
93
+ // Ensure version has v prefix for tag
94
+ const tagName = newVersion.startsWith('v') ? newVersion : `v${newVersion}`;
95
+ printKeyValue('New version', tagName);
96
+ // Get release notes
97
+ console.log(colors.dim('\nEnter release notes (empty for auto-generate):'));
98
+ let releaseNotes = await promptInput('Release notes:');
99
+ if (!releaseNotes) {
100
+ // Auto-generate from commits since last tag
101
+ try {
102
+ const log = await git.log({ from: `v${currentVersion}`, to: 'HEAD' });
103
+ releaseNotes = log.all
104
+ .map(c => `- ${c.message.split('\n')[0]}`)
105
+ .join('\n');
106
+ if (!releaseNotes) {
107
+ releaseNotes = '- Initial release';
108
+ }
109
+ }
110
+ catch {
111
+ releaseNotes = '- Release ' + tagName;
112
+ }
113
+ }
114
+ console.log(colors.subheader('\nRelease notes:'));
115
+ console.log(colors.dim(releaseNotes));
116
+ console.log('');
117
+ // Confirm
118
+ const confirm = await promptConfirm(`Create release ${tagName}?`, true);
119
+ if (!confirm) {
120
+ console.log(colors.dim('Cancelled'));
121
+ return;
122
+ }
123
+ // Create tag
124
+ console.log(colors.dim('\nCreating tag...'));
125
+ await git.addTag(tagName);
126
+ printSuccess(`Tag ${tagName} created`);
127
+ // Push tag
128
+ console.log(colors.dim('Pushing tag...'));
129
+ await git.pushTags('origin');
130
+ printSuccess('Tag pushed to origin');
131
+ // Create GitHub Release
132
+ if (createGithubRelease) {
133
+ if (!checkGhCli()) {
134
+ printWarning('GitHub CLI (gh) not found. Skipping GitHub Release.');
135
+ console.log(colors.dim('Install: brew install gh'));
136
+ }
137
+ else {
138
+ console.log(colors.dim('Creating GitHub Release...'));
139
+ try {
140
+ const cmd = `gh release create ${tagName} --title "${tagName}" --notes "${releaseNotes.replace(/"/g, '\\"')}"`;
141
+ const result = execSync(cmd, {
142
+ cwd: workDir,
143
+ encoding: 'utf-8',
144
+ stdio: ['pipe', 'pipe', 'pipe'],
145
+ });
146
+ printSuccess('GitHub Release created!');
147
+ console.log(colors.path(`\n${result.trim()}`));
148
+ }
149
+ catch (error) {
150
+ const errorOutput = error.stderr || error.message;
151
+ printWarning(`Failed to create GitHub Release: ${errorOutput}`);
152
+ }
153
+ }
154
+ }
155
+ console.log('');
156
+ printSuccess(`Release ${tagName} completed!`);
157
+ }
158
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../../src/commands/git/release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSyncCommand(program: Command): void;
3
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/git/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc1D"}
@@ -0,0 +1,132 @@
1
+ import { simpleGit } from 'simple-git';
2
+ import { colors, printHeader, printError, printSuccess, printKeyValue, printWarning } from '../../utils/colors.js';
3
+ import { findProjectRoot } from '../../lib/project.js';
4
+ import { promptConfirm } from '../../utils/prompts.js';
5
+ export function registerSyncCommand(program) {
6
+ program
7
+ .command('sync')
8
+ .description('Fetch and rebase from upstream')
9
+ .option('-b, --branch <branch>', 'Branch to sync from', 'main')
10
+ .option('--no-stash', 'Do not stash changes before sync')
11
+ .action(async (options) => {
12
+ try {
13
+ await syncBranch(options.branch, options.stash);
14
+ }
15
+ catch (error) {
16
+ printError(error.message);
17
+ process.exit(1);
18
+ }
19
+ });
20
+ }
21
+ async function syncBranch(baseBranch = 'main', shouldStash = true) {
22
+ const projectRoot = await findProjectRoot();
23
+ const workDir = projectRoot || process.cwd();
24
+ const git = simpleGit(workDir);
25
+ // Check if git repo
26
+ const isRepo = await git.checkIsRepo();
27
+ if (!isRepo) {
28
+ throw new Error('Not a git repository');
29
+ }
30
+ printHeader('Sync Branch');
31
+ // Get current branch
32
+ const currentBranch = await git.revparse(['--abbrev-ref', 'HEAD']);
33
+ printKeyValue('Current branch', currentBranch.trim());
34
+ printKeyValue('Sync from', `origin/${baseBranch}`);
35
+ // Check for uncommitted changes
36
+ const status = await git.status();
37
+ const hasChanges = status.files.length > 0;
38
+ let stashed = false;
39
+ if (hasChanges) {
40
+ printWarning(`You have ${status.files.length} uncommitted changes`);
41
+ if (shouldStash) {
42
+ const doStash = await promptConfirm('Stash changes before sync?', true);
43
+ if (doStash) {
44
+ console.log(colors.dim('\nStashing changes...'));
45
+ await git.stash(['push', '-m', 'tsq-sync-stash']);
46
+ stashed = true;
47
+ printSuccess('Changes stashed');
48
+ }
49
+ else {
50
+ const proceed = await promptConfirm('Proceed without stashing?', false);
51
+ if (!proceed) {
52
+ console.log(colors.dim('Cancelled'));
53
+ return;
54
+ }
55
+ }
56
+ }
57
+ }
58
+ try {
59
+ // Fetch from origin
60
+ console.log(colors.dim('\nFetching from origin...'));
61
+ await git.fetch('origin');
62
+ printSuccess('Fetched latest');
63
+ // Get ahead/behind info
64
+ const currentRef = currentBranch.trim();
65
+ const baseRef = `origin/${baseBranch}`;
66
+ let behind = 0;
67
+ let ahead = 0;
68
+ try {
69
+ const revList = await git.raw(['rev-list', '--left-right', '--count', `${currentRef}...${baseRef}`]);
70
+ const [aheadStr, behindStr] = revList.trim().split('\t');
71
+ ahead = parseInt(aheadStr, 10) || 0;
72
+ behind = parseInt(behindStr, 10) || 0;
73
+ }
74
+ catch {
75
+ // May fail if branches don't share history
76
+ }
77
+ printKeyValue('Ahead', String(ahead));
78
+ printKeyValue('Behind', String(behind));
79
+ if (behind === 0) {
80
+ console.log(colors.success('\nAlready up to date'));
81
+ }
82
+ else {
83
+ // Rebase
84
+ console.log(colors.dim(`\nRebasing on ${baseRef}...`));
85
+ try {
86
+ await git.rebase([baseRef]);
87
+ printSuccess(`Rebased ${behind} commits`);
88
+ }
89
+ catch (rebaseError) {
90
+ printError('Rebase failed - conflicts detected');
91
+ console.log(colors.warning('\nResolve conflicts and run:'));
92
+ console.log(colors.path(' git rebase --continue'));
93
+ console.log(colors.dim('Or abort with:'));
94
+ console.log(colors.path(' git rebase --abort'));
95
+ // Unstash if we stashed
96
+ if (stashed) {
97
+ console.log(colors.dim('\nYour stashed changes will be available after resolving conflicts:'));
98
+ console.log(colors.path(' git stash pop'));
99
+ }
100
+ return;
101
+ }
102
+ }
103
+ // Unstash if we stashed
104
+ if (stashed) {
105
+ console.log(colors.dim('\nRestoring stashed changes...'));
106
+ try {
107
+ await git.stash(['pop']);
108
+ printSuccess('Stash restored');
109
+ }
110
+ catch {
111
+ printWarning('Failed to restore stash - conflicts may exist');
112
+ console.log(colors.dim('Resolve manually with: git stash pop'));
113
+ }
114
+ }
115
+ console.log('');
116
+ printSuccess('Sync completed!');
117
+ // Show final status
118
+ const finalStatus = await git.status();
119
+ if (finalStatus.files.length > 0) {
120
+ console.log(colors.dim(`\n${finalStatus.files.length} uncommitted files`));
121
+ }
122
+ }
123
+ catch (error) {
124
+ // If something went wrong and we stashed, inform user
125
+ if (stashed) {
126
+ printWarning('Your changes are still stashed');
127
+ console.log(colors.dim('Restore with: git stash pop'));
128
+ }
129
+ throw error;
130
+ }
131
+ }
132
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/git/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerInitCommand(program: Command): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB1D"}