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.
- package/LICENSE +21 -0
- package/README.md +347 -0
- package/bin/tsq.js +6 -0
- package/dist/commands/feedback.d.ts +3 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +142 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/full.d.ts +3 -0
- package/dist/commands/full.d.ts.map +1 -0
- package/dist/commands/full.js +87 -0
- package/dist/commands/full.js.map +1 -0
- package/dist/commands/git/commit.d.ts +3 -0
- package/dist/commands/git/commit.d.ts.map +1 -0
- package/dist/commands/git/commit.js +88 -0
- package/dist/commands/git/commit.js.map +1 -0
- package/dist/commands/git/index.d.ts +5 -0
- package/dist/commands/git/index.d.ts.map +1 -0
- package/dist/commands/git/index.js +5 -0
- package/dist/commands/git/index.js.map +1 -0
- package/dist/commands/git/pr.d.ts +3 -0
- package/dist/commands/git/pr.d.ts.map +1 -0
- package/dist/commands/git/pr.js +138 -0
- package/dist/commands/git/pr.js.map +1 -0
- package/dist/commands/git/release.d.ts +3 -0
- package/dist/commands/git/release.d.ts.map +1 -0
- package/dist/commands/git/release.js +158 -0
- package/dist/commands/git/release.js.map +1 -0
- package/dist/commands/git/sync.d.ts +3 -0
- package/dist/commands/git/sync.d.ts.map +1 -0
- package/dist/commands/git/sync.js +132 -0
- package/dist/commands/git/sync.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +150 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +271 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/metrics.d.ts +3 -0
- package/dist/commands/metrics.d.ts.map +1 -0
- package/dist/commands/metrics.js +299 -0
- package/dist/commands/metrics.js.map +1 -0
- package/dist/commands/quick.d.ts +3 -0
- package/dist/commands/quick.d.ts.map +1 -0
- package/dist/commands/quick.js +136 -0
- package/dist/commands/quick.js.map +1 -0
- package/dist/commands/retro.d.ts +3 -0
- package/dist/commands/retro.d.ts.map +1 -0
- package/dist/commands/retro.js +280 -0
- package/dist/commands/retro.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +127 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +213 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +34 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +108 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/project.d.ts +47 -0
- package/dist/lib/project.d.ts.map +1 -0
- package/dist/lib/project.js +191 -0
- package/dist/lib/project.js.map +1 -0
- package/dist/lib/template.d.ts +33 -0
- package/dist/lib/template.d.ts.map +1 -0
- package/dist/lib/template.js +151 -0
- package/dist/lib/template.js.map +1 -0
- package/dist/types/config.d.ts +75 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +66 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/feedback.d.ts +59 -0
- package/dist/types/feedback.d.ts.map +1 -0
- package/dist/types/feedback.js +26 -0
- package/dist/types/feedback.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/project.d.ts +89 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +44 -0
- package/dist/types/project.js.map +1 -0
- package/dist/utils/colors.d.ts +30 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +54 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/date.d.ts +25 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +65 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/fs.d.ts +49 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +84 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/prompts.d.ts +31 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +95 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/yaml.d.ts +21 -0
- package/dist/utils/yaml.d.ts.map +1 -0
- package/dist/utils/yaml.js +40 -0
- package/dist/utils/yaml.js.map +1 -0
- package/package.json +71 -0
- package/templates/common/CLAUDE.md.template +254 -0
- package/templates/common/claude/agents/tsq-dba.md +290 -0
- package/templates/common/claude/agents/tsq-designer.md +304 -0
- package/templates/common/claude/agents/tsq-developer.md +118 -0
- package/templates/common/claude/agents/tsq-planner.md +90 -0
- package/templates/common/claude/agents/tsq-prompter.md +336 -0
- package/templates/common/claude/agents/tsq-qa.md +134 -0
- package/templates/common/claude/agents/tsq-retro.md +168 -0
- package/templates/common/claude/agents/tsq-security.md +190 -0
- package/templates/common/claude/skills/architecture/SKILL.md +123 -0
- package/templates/common/claude/skills/backend/node/SKILL.md +1015 -0
- package/templates/common/claude/skills/coding/SKILL.md +171 -0
- package/templates/common/claude/skills/database/prisma/SKILL.md +357 -0
- package/templates/common/claude/skills/frontend/nextjs/SKILL.md +279 -0
- package/templates/common/claude/skills/frontend/react/SKILL.md +1729 -0
- package/templates/common/claude/skills/methodology/bdd/SKILL.md +234 -0
- package/templates/common/claude/skills/methodology/ddd/SKILL.md +311 -0
- package/templates/common/claude/skills/methodology/tdd/SKILL.md +512 -0
- package/templates/common/claude/skills/planning/SKILL.md +90 -0
- package/templates/common/claude/skills/security/SKILL.md +234 -0
- package/templates/common/claude/skills/testing/SKILL.md +146 -0
- package/templates/common/claude/skills/typescript/SKILL.md +435 -0
- package/templates/common/config.template.yaml +131 -0
- package/templates/common/timsquad/architectures/clean/ARCHITECTURE.md +49 -0
- package/templates/common/timsquad/architectures/clean/backend.xml +210 -0
- package/templates/common/timsquad/architectures/clean/frontend.xml +148 -0
- package/templates/common/timsquad/architectures/fsd/ARCHITECTURE.md +67 -0
- package/templates/common/timsquad/architectures/fsd/frontend.xml +288 -0
- package/templates/common/timsquad/architectures/hexagonal/ARCHITECTURE.md +60 -0
- package/templates/common/timsquad/architectures/hexagonal/backend.xml +300 -0
- package/templates/common/timsquad/constraints/competency-framework.xml +501 -0
- package/templates/common/timsquad/constraints/ssot-schema.xml +433 -0
- package/templates/common/timsquad/feedback/feedback-router.sh +341 -0
- package/templates/common/timsquad/feedback/routing-rules.yaml +352 -0
- package/templates/common/timsquad/generators/data-design.xml +290 -0
- package/templates/common/timsquad/generators/prd.xml +280 -0
- package/templates/common/timsquad/generators/requirements.xml +220 -0
- package/templates/common/timsquad/generators/service-spec.xml +266 -0
- package/templates/common/timsquad/logs/_example.md +81 -0
- package/templates/common/timsquad/logs/_template.md +46 -0
- package/templates/common/timsquad/patterns/cqrs.xml +127 -0
- package/templates/common/timsquad/patterns/event-sourcing.xml +85 -0
- package/templates/common/timsquad/patterns/repository.xml +64 -0
- package/templates/common/timsquad/process/state-machine.xml +343 -0
- package/templates/common/timsquad/process/validation-rules.xml +308 -0
- package/templates/common/timsquad/process/workflow-base.xml +202 -0
- package/templates/common/timsquad/retrospective/cycle-report.template.md +205 -0
- package/templates/common/timsquad/retrospective/metrics/metrics-schema.json +203 -0
- package/templates/common/timsquad/retrospective/patterns/failure-patterns.md +199 -0
- package/templates/common/timsquad/retrospective/patterns/success-patterns.md +262 -0
- package/templates/common/timsquad/retrospective/retrospective-config.xml +294 -0
- package/templates/common/timsquad/retrospective/retrospective-state.xml +210 -0
- package/templates/common/timsquad/ssot/adr/ADR-000-template.md +121 -0
- package/templates/common/timsquad/ssot/adr/ADR-001-example.md +115 -0
- package/templates/common/timsquad/ssot/data-design.template.md +132 -0
- package/templates/common/timsquad/ssot/deployment-spec.template.md +384 -0
- package/templates/common/timsquad/ssot/env-config.template.md +346 -0
- package/templates/common/timsquad/ssot/error-codes.template.md +114 -0
- package/templates/common/timsquad/ssot/functional-spec.template.md +185 -0
- package/templates/common/timsquad/ssot/glossary.template.md +148 -0
- package/templates/common/timsquad/ssot/integration-spec.template.md +391 -0
- package/templates/common/timsquad/ssot/planning.template.md +94 -0
- package/templates/common/timsquad/ssot/prd.template.md +102 -0
- package/templates/common/timsquad/ssot/requirements.template.md +117 -0
- package/templates/common/timsquad/ssot/security-spec.template.md +309 -0
- package/templates/common/timsquad/ssot/service-spec.template.md +194 -0
- package/templates/common/timsquad/ssot/test-spec.template.md +264 -0
- package/templates/common/timsquad/ssot/ui-ux-spec.template.md +262 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|