@vibescope/mcp-server 0.2.5 → 0.2.7

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 (82) hide show
  1. package/CHANGELOG.md +84 -84
  2. package/README.md +194 -194
  3. package/dist/cli.js +26 -26
  4. package/dist/handlers/tool-docs.js +828 -828
  5. package/dist/index.js +73 -73
  6. package/dist/templates/agent-guidelines.js +185 -185
  7. package/dist/token-tracking.js +4 -2
  8. package/dist/tools.js +65 -65
  9. package/dist/utils.js +11 -11
  10. package/docs/TOOLS.md +2053 -2053
  11. package/package.json +3 -2
  12. package/scripts/generate-docs.ts +212 -212
  13. package/scripts/version-bump.ts +203 -203
  14. package/src/api-client.test.ts +723 -723
  15. package/src/api-client.ts +2499 -2499
  16. package/src/cli.ts +212 -212
  17. package/src/handlers/__test-setup__.ts +236 -236
  18. package/src/handlers/__test-utils__.ts +87 -87
  19. package/src/handlers/blockers.test.ts +468 -468
  20. package/src/handlers/blockers.ts +163 -163
  21. package/src/handlers/bodies-of-work.test.ts +704 -704
  22. package/src/handlers/bodies-of-work.ts +526 -526
  23. package/src/handlers/connectors.test.ts +834 -834
  24. package/src/handlers/connectors.ts +229 -229
  25. package/src/handlers/cost.test.ts +462 -462
  26. package/src/handlers/cost.ts +285 -285
  27. package/src/handlers/decisions.test.ts +382 -382
  28. package/src/handlers/decisions.ts +153 -153
  29. package/src/handlers/deployment.test.ts +551 -551
  30. package/src/handlers/deployment.ts +541 -541
  31. package/src/handlers/discovery.test.ts +206 -206
  32. package/src/handlers/discovery.ts +390 -390
  33. package/src/handlers/fallback.test.ts +537 -537
  34. package/src/handlers/fallback.ts +194 -194
  35. package/src/handlers/file-checkouts.test.ts +750 -750
  36. package/src/handlers/file-checkouts.ts +185 -185
  37. package/src/handlers/findings.test.ts +633 -633
  38. package/src/handlers/findings.ts +239 -239
  39. package/src/handlers/git-issues.test.ts +631 -631
  40. package/src/handlers/git-issues.ts +136 -136
  41. package/src/handlers/ideas.test.ts +644 -644
  42. package/src/handlers/ideas.ts +207 -207
  43. package/src/handlers/index.ts +84 -84
  44. package/src/handlers/milestones.test.ts +475 -475
  45. package/src/handlers/milestones.ts +180 -180
  46. package/src/handlers/organizations.test.ts +826 -826
  47. package/src/handlers/organizations.ts +315 -315
  48. package/src/handlers/progress.test.ts +269 -269
  49. package/src/handlers/progress.ts +77 -77
  50. package/src/handlers/project.test.ts +546 -546
  51. package/src/handlers/project.ts +239 -239
  52. package/src/handlers/requests.test.ts +303 -303
  53. package/src/handlers/requests.ts +99 -99
  54. package/src/handlers/roles.test.ts +303 -303
  55. package/src/handlers/roles.ts +226 -226
  56. package/src/handlers/session.test.ts +875 -875
  57. package/src/handlers/session.ts +738 -738
  58. package/src/handlers/sprints.test.ts +732 -732
  59. package/src/handlers/sprints.ts +537 -537
  60. package/src/handlers/tasks.test.ts +907 -907
  61. package/src/handlers/tasks.ts +945 -945
  62. package/src/handlers/tool-categories.test.ts +66 -66
  63. package/src/handlers/tool-docs.ts +1096 -1096
  64. package/src/handlers/types.test.ts +259 -259
  65. package/src/handlers/types.ts +175 -175
  66. package/src/handlers/validation.test.ts +582 -582
  67. package/src/handlers/validation.ts +97 -97
  68. package/src/index.ts +792 -792
  69. package/src/setup.test.ts +233 -231
  70. package/src/setup.ts +370 -370
  71. package/src/templates/agent-guidelines.ts +210 -210
  72. package/src/token-tracking.test.ts +463 -453
  73. package/src/token-tracking.ts +166 -164
  74. package/src/tools.ts +3562 -3562
  75. package/src/utils.test.ts +683 -683
  76. package/src/utils.ts +436 -436
  77. package/src/validators.test.ts +223 -223
  78. package/src/validators.ts +249 -249
  79. package/tsconfig.json +16 -16
  80. package/vitest.config.ts +14 -14
  81. package/dist/knowledge.d.ts +0 -6
  82. package/dist/knowledge.js +0 -218
@@ -1,203 +1,203 @@
1
- #!/usr/bin/env npx tsx
2
- /**
3
- * Automatic Semantic Version Bumping Script
4
- *
5
- * Analyzes git commit messages since the last version tag to determine
6
- * the appropriate version bump based on conventional commits.
7
- *
8
- * Patterns:
9
- * - `feat!:` or `BREAKING CHANGE:` → major bump
10
- * - `feat:` or `feat(scope):` → minor bump
11
- * - `fix:` or `fix(scope):` → patch bump
12
- * - `docs:`, `chore:`, `style:`, `refactor:`, `test:` → patch bump (if any fix/feat)
13
- *
14
- * Usage:
15
- * npx tsx scripts/version-bump.ts [--dry-run] [--major|--minor|--patch]
16
- *
17
- * Options:
18
- * --dry-run Show what would be done without making changes
19
- * --major Force a major version bump
20
- * --minor Force a minor version bump
21
- * --patch Force a patch version bump
22
- */
23
-
24
- import { execSync } from 'child_process';
25
- import { readFileSync, writeFileSync } from 'fs';
26
- import { resolve, dirname } from 'path';
27
- import { fileURLToPath } from 'url';
28
-
29
- const __dirname = dirname(fileURLToPath(import.meta.url));
30
- const packageJsonPath = resolve(__dirname, '../package.json');
31
-
32
- interface PackageJson {
33
- version: string;
34
- [key: string]: unknown;
35
- }
36
-
37
- type BumpType = 'major' | 'minor' | 'patch' | 'none';
38
-
39
- function parseArgs(): { dryRun: boolean; forceBump: BumpType | null } {
40
- const args = process.argv.slice(2);
41
- const dryRun = args.includes('--dry-run');
42
-
43
- let forceBump: BumpType | null = null;
44
- if (args.includes('--major')) forceBump = 'major';
45
- else if (args.includes('--minor')) forceBump = 'minor';
46
- else if (args.includes('--patch')) forceBump = 'patch';
47
-
48
- return { dryRun, forceBump };
49
- }
50
-
51
- function getCurrentVersion(): string {
52
- const packageJson: PackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
53
- return packageJson.version;
54
- }
55
-
56
- function getLastVersionTag(): string | null {
57
- try {
58
- // Get the latest tag that matches a version pattern (v*.*.* or *.*.*)
59
- const tag = execSync('git describe --tags --abbrev=0 --match "v*" 2>/dev/null || git describe --tags --abbrev=0 --match "[0-9]*" 2>/dev/null', {
60
- encoding: 'utf-8',
61
- cwd: resolve(__dirname, '../../..')
62
- }).trim();
63
- return tag || null;
64
- } catch {
65
- return null;
66
- }
67
- }
68
-
69
- function getCommitsSinceTag(tag: string | null): string[] {
70
- try {
71
- const range = tag ? `${tag}..HEAD` : 'HEAD';
72
- const commits = execSync(`git log ${range} --pretty=format:"%s" -- packages/mcp-server`, {
73
- encoding: 'utf-8',
74
- cwd: resolve(__dirname, '../../..')
75
- }).trim();
76
- return commits ? commits.split('\n').filter(Boolean) : [];
77
- } catch {
78
- return [];
79
- }
80
- }
81
-
82
- function analyzeCommits(commits: string[]): { bumpType: BumpType; reasons: string[] } {
83
- const reasons: string[] = [];
84
- let bumpType: BumpType = 'none';
85
-
86
- for (const commit of commits) {
87
- const lowerCommit = commit.toLowerCase();
88
-
89
- // Check for breaking changes (major)
90
- if (lowerCommit.includes('breaking change') || /^[a-z]+(\([^)]+\))?!:/.test(commit)) {
91
- bumpType = 'major';
92
- reasons.push(`BREAKING: ${commit}`);
93
- }
94
- // Check for features (minor) - only upgrade if not already major
95
- else if (/^feat(\([^)]+\))?:/.test(commit)) {
96
- if (bumpType !== 'major') {
97
- bumpType = 'minor';
98
- }
99
- reasons.push(`Feature: ${commit}`);
100
- }
101
- // Check for fixes (patch) - only upgrade if still none
102
- else if (/^fix(\([^)]+\))?:/.test(commit)) {
103
- if (bumpType === 'none') {
104
- bumpType = 'patch';
105
- }
106
- reasons.push(`Fix: ${commit}`);
107
- }
108
- // Other conventional commits that warrant a patch
109
- else if (/^(docs|chore|style|refactor|test|perf|build|ci)(\([^)]+\))?:/.test(commit)) {
110
- reasons.push(`Other: ${commit}`);
111
- }
112
- }
113
-
114
- // If we have reasons but no bump type, default to patch
115
- if (bumpType === 'none' && reasons.length > 0) {
116
- bumpType = 'patch';
117
- }
118
-
119
- return { bumpType, reasons };
120
- }
121
-
122
- function bumpVersion(currentVersion: string, bumpType: BumpType): string {
123
- const [major, minor, patch] = currentVersion.split('.').map(Number);
124
-
125
- switch (bumpType) {
126
- case 'major':
127
- return `${major + 1}.0.0`;
128
- case 'minor':
129
- return `${major}.${minor + 1}.0`;
130
- case 'patch':
131
- return `${major}.${minor}.${patch + 1}`;
132
- default:
133
- return currentVersion;
134
- }
135
- }
136
-
137
- function updatePackageJson(newVersion: string): void {
138
- const packageJson: PackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
139
- packageJson.version = newVersion;
140
- writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
141
- }
142
-
143
- function main(): void {
144
- const { dryRun, forceBump } = parseArgs();
145
-
146
- console.log('šŸ” Analyzing version bump for @vibescope/mcp-server...\n');
147
-
148
- const currentVersion = getCurrentVersion();
149
- console.log(`Current version: ${currentVersion}`);
150
-
151
- const lastTag = getLastVersionTag();
152
- console.log(`Last version tag: ${lastTag || '(none found)'}`);
153
-
154
- const commits = getCommitsSinceTag(lastTag);
155
- console.log(`Commits to analyze: ${commits.length}\n`);
156
-
157
- let bumpType: BumpType;
158
- let reasons: string[];
159
-
160
- if (forceBump) {
161
- bumpType = forceBump;
162
- reasons = [`Forced ${forceBump} bump via command line`];
163
- console.log(`⚔ Forcing ${forceBump} version bump\n`);
164
- } else {
165
- const analysis = analyzeCommits(commits);
166
- bumpType = analysis.bumpType;
167
- reasons = analysis.reasons;
168
-
169
- if (reasons.length > 0) {
170
- console.log('šŸ“ Relevant commits:');
171
- for (const reason of reasons.slice(0, 10)) {
172
- console.log(` - ${reason}`);
173
- }
174
- if (reasons.length > 10) {
175
- console.log(` ... and ${reasons.length - 10} more`);
176
- }
177
- console.log();
178
- }
179
- }
180
-
181
- if (bumpType === 'none') {
182
- console.log('āœ… No version bump needed - no relevant changes detected.');
183
- return;
184
- }
185
-
186
- const newVersion = bumpVersion(currentVersion, bumpType);
187
- console.log(`šŸ“¦ Version bump: ${currentVersion} → ${newVersion} (${bumpType})`);
188
-
189
- if (dryRun) {
190
- console.log('\nšŸ”ø Dry run - no changes made.');
191
- return;
192
- }
193
-
194
- updatePackageJson(newVersion);
195
- console.log(`\nāœ… Updated package.json to version ${newVersion}`);
196
- console.log('\nNext steps:');
197
- console.log(' 1. Review the changes: git diff packages/mcp-server/package.json');
198
- console.log(' 2. Commit: git add -A && git commit -m "chore(release): bump @vibescope/mcp-server to ' + newVersion + '"');
199
- console.log(' 3. Create a tag: git tag -a v' + newVersion + ' -m "Release v' + newVersion + '"');
200
- console.log(' 4. Push: git push && git push --tags');
201
- }
202
-
203
- main();
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Automatic Semantic Version Bumping Script
4
+ *
5
+ * Analyzes git commit messages since the last version tag to determine
6
+ * the appropriate version bump based on conventional commits.
7
+ *
8
+ * Patterns:
9
+ * - `feat!:` or `BREAKING CHANGE:` → major bump
10
+ * - `feat:` or `feat(scope):` → minor bump
11
+ * - `fix:` or `fix(scope):` → patch bump
12
+ * - `docs:`, `chore:`, `style:`, `refactor:`, `test:` → patch bump (if any fix/feat)
13
+ *
14
+ * Usage:
15
+ * npx tsx scripts/version-bump.ts [--dry-run] [--major|--minor|--patch]
16
+ *
17
+ * Options:
18
+ * --dry-run Show what would be done without making changes
19
+ * --major Force a major version bump
20
+ * --minor Force a minor version bump
21
+ * --patch Force a patch version bump
22
+ */
23
+
24
+ import { execSync } from 'child_process';
25
+ import { readFileSync, writeFileSync } from 'fs';
26
+ import { resolve, dirname } from 'path';
27
+ import { fileURLToPath } from 'url';
28
+
29
+ const __dirname = dirname(fileURLToPath(import.meta.url));
30
+ const packageJsonPath = resolve(__dirname, '../package.json');
31
+
32
+ interface PackageJson {
33
+ version: string;
34
+ [key: string]: unknown;
35
+ }
36
+
37
+ type BumpType = 'major' | 'minor' | 'patch' | 'none';
38
+
39
+ function parseArgs(): { dryRun: boolean; forceBump: BumpType | null } {
40
+ const args = process.argv.slice(2);
41
+ const dryRun = args.includes('--dry-run');
42
+
43
+ let forceBump: BumpType | null = null;
44
+ if (args.includes('--major')) forceBump = 'major';
45
+ else if (args.includes('--minor')) forceBump = 'minor';
46
+ else if (args.includes('--patch')) forceBump = 'patch';
47
+
48
+ return { dryRun, forceBump };
49
+ }
50
+
51
+ function getCurrentVersion(): string {
52
+ const packageJson: PackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
53
+ return packageJson.version;
54
+ }
55
+
56
+ function getLastVersionTag(): string | null {
57
+ try {
58
+ // Get the latest tag that matches a version pattern (v*.*.* or *.*.*)
59
+ const tag = execSync('git describe --tags --abbrev=0 --match "v*" 2>/dev/null || git describe --tags --abbrev=0 --match "[0-9]*" 2>/dev/null', {
60
+ encoding: 'utf-8',
61
+ cwd: resolve(__dirname, '../../..')
62
+ }).trim();
63
+ return tag || null;
64
+ } catch {
65
+ return null;
66
+ }
67
+ }
68
+
69
+ function getCommitsSinceTag(tag: string | null): string[] {
70
+ try {
71
+ const range = tag ? `${tag}..HEAD` : 'HEAD';
72
+ const commits = execSync(`git log ${range} --pretty=format:"%s" -- packages/mcp-server`, {
73
+ encoding: 'utf-8',
74
+ cwd: resolve(__dirname, '../../..')
75
+ }).trim();
76
+ return commits ? commits.split('\n').filter(Boolean) : [];
77
+ } catch {
78
+ return [];
79
+ }
80
+ }
81
+
82
+ function analyzeCommits(commits: string[]): { bumpType: BumpType; reasons: string[] } {
83
+ const reasons: string[] = [];
84
+ let bumpType: BumpType = 'none';
85
+
86
+ for (const commit of commits) {
87
+ const lowerCommit = commit.toLowerCase();
88
+
89
+ // Check for breaking changes (major)
90
+ if (lowerCommit.includes('breaking change') || /^[a-z]+(\([^)]+\))?!:/.test(commit)) {
91
+ bumpType = 'major';
92
+ reasons.push(`BREAKING: ${commit}`);
93
+ }
94
+ // Check for features (minor) - only upgrade if not already major
95
+ else if (/^feat(\([^)]+\))?:/.test(commit)) {
96
+ if (bumpType !== 'major') {
97
+ bumpType = 'minor';
98
+ }
99
+ reasons.push(`Feature: ${commit}`);
100
+ }
101
+ // Check for fixes (patch) - only upgrade if still none
102
+ else if (/^fix(\([^)]+\))?:/.test(commit)) {
103
+ if (bumpType === 'none') {
104
+ bumpType = 'patch';
105
+ }
106
+ reasons.push(`Fix: ${commit}`);
107
+ }
108
+ // Other conventional commits that warrant a patch
109
+ else if (/^(docs|chore|style|refactor|test|perf|build|ci)(\([^)]+\))?:/.test(commit)) {
110
+ reasons.push(`Other: ${commit}`);
111
+ }
112
+ }
113
+
114
+ // If we have reasons but no bump type, default to patch
115
+ if (bumpType === 'none' && reasons.length > 0) {
116
+ bumpType = 'patch';
117
+ }
118
+
119
+ return { bumpType, reasons };
120
+ }
121
+
122
+ function bumpVersion(currentVersion: string, bumpType: BumpType): string {
123
+ const [major, minor, patch] = currentVersion.split('.').map(Number);
124
+
125
+ switch (bumpType) {
126
+ case 'major':
127
+ return `${major + 1}.0.0`;
128
+ case 'minor':
129
+ return `${major}.${minor + 1}.0`;
130
+ case 'patch':
131
+ return `${major}.${minor}.${patch + 1}`;
132
+ default:
133
+ return currentVersion;
134
+ }
135
+ }
136
+
137
+ function updatePackageJson(newVersion: string): void {
138
+ const packageJson: PackageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
139
+ packageJson.version = newVersion;
140
+ writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
141
+ }
142
+
143
+ function main(): void {
144
+ const { dryRun, forceBump } = parseArgs();
145
+
146
+ console.log('šŸ” Analyzing version bump for @vibescope/mcp-server...\n');
147
+
148
+ const currentVersion = getCurrentVersion();
149
+ console.log(`Current version: ${currentVersion}`);
150
+
151
+ const lastTag = getLastVersionTag();
152
+ console.log(`Last version tag: ${lastTag || '(none found)'}`);
153
+
154
+ const commits = getCommitsSinceTag(lastTag);
155
+ console.log(`Commits to analyze: ${commits.length}\n`);
156
+
157
+ let bumpType: BumpType;
158
+ let reasons: string[];
159
+
160
+ if (forceBump) {
161
+ bumpType = forceBump;
162
+ reasons = [`Forced ${forceBump} bump via command line`];
163
+ console.log(`⚔ Forcing ${forceBump} version bump\n`);
164
+ } else {
165
+ const analysis = analyzeCommits(commits);
166
+ bumpType = analysis.bumpType;
167
+ reasons = analysis.reasons;
168
+
169
+ if (reasons.length > 0) {
170
+ console.log('šŸ“ Relevant commits:');
171
+ for (const reason of reasons.slice(0, 10)) {
172
+ console.log(` - ${reason}`);
173
+ }
174
+ if (reasons.length > 10) {
175
+ console.log(` ... and ${reasons.length - 10} more`);
176
+ }
177
+ console.log();
178
+ }
179
+ }
180
+
181
+ if (bumpType === 'none') {
182
+ console.log('āœ… No version bump needed - no relevant changes detected.');
183
+ return;
184
+ }
185
+
186
+ const newVersion = bumpVersion(currentVersion, bumpType);
187
+ console.log(`šŸ“¦ Version bump: ${currentVersion} → ${newVersion} (${bumpType})`);
188
+
189
+ if (dryRun) {
190
+ console.log('\nšŸ”ø Dry run - no changes made.');
191
+ return;
192
+ }
193
+
194
+ updatePackageJson(newVersion);
195
+ console.log(`\nāœ… Updated package.json to version ${newVersion}`);
196
+ console.log('\nNext steps:');
197
+ console.log(' 1. Review the changes: git diff packages/mcp-server/package.json');
198
+ console.log(' 2. Commit: git add -A && git commit -m "chore(release): bump @vibescope/mcp-server to ' + newVersion + '"');
199
+ console.log(' 3. Create a tag: git tag -a v' + newVersion + ' -m "Release v' + newVersion + '"');
200
+ console.log(' 4. Push: git push && git push --tags');
201
+ }
202
+
203
+ main();