@vibescope/mcp-server 0.2.9 → 0.3.1

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 (95) hide show
  1. package/CHANGELOG.md +84 -84
  2. package/README.md +194 -194
  3. package/dist/api-client.d.ts +36 -0
  4. package/dist/api-client.js +34 -0
  5. package/dist/cli.d.ts +1 -1
  6. package/dist/cli.js +30 -38
  7. package/dist/handlers/discovery.js +2 -0
  8. package/dist/handlers/session.d.ts +11 -0
  9. package/dist/handlers/session.js +101 -0
  10. package/dist/handlers/tasks.d.ts +8 -0
  11. package/dist/handlers/tasks.js +163 -3
  12. package/dist/handlers/tool-docs.js +840 -828
  13. package/dist/handlers/validation.js +49 -2
  14. package/dist/index.js +73 -73
  15. package/dist/setup.js +6 -6
  16. package/dist/templates/agent-guidelines.js +185 -185
  17. package/dist/templates/help-content.js +1622 -1544
  18. package/dist/tools.js +130 -74
  19. package/dist/utils.d.ts +15 -11
  20. package/dist/utils.js +53 -28
  21. package/docs/TOOLS.md +2407 -2053
  22. package/package.json +51 -51
  23. package/scripts/generate-docs.ts +212 -212
  24. package/scripts/version-bump.ts +203 -203
  25. package/src/api-client.test.ts +723 -723
  26. package/src/api-client.ts +2561 -2499
  27. package/src/cli.test.ts +24 -8
  28. package/src/cli.ts +204 -212
  29. package/src/handlers/__test-setup__.ts +236 -236
  30. package/src/handlers/__test-utils__.ts +87 -87
  31. package/src/handlers/blockers.test.ts +468 -468
  32. package/src/handlers/blockers.ts +163 -163
  33. package/src/handlers/bodies-of-work.test.ts +704 -704
  34. package/src/handlers/bodies-of-work.ts +526 -526
  35. package/src/handlers/connectors.test.ts +834 -834
  36. package/src/handlers/connectors.ts +229 -229
  37. package/src/handlers/cost.test.ts +462 -462
  38. package/src/handlers/cost.ts +285 -285
  39. package/src/handlers/decisions.test.ts +382 -382
  40. package/src/handlers/decisions.ts +153 -153
  41. package/src/handlers/deployment.test.ts +551 -551
  42. package/src/handlers/deployment.ts +541 -541
  43. package/src/handlers/discovery.test.ts +206 -206
  44. package/src/handlers/discovery.ts +392 -390
  45. package/src/handlers/fallback.test.ts +537 -537
  46. package/src/handlers/fallback.ts +194 -194
  47. package/src/handlers/file-checkouts.test.ts +750 -750
  48. package/src/handlers/file-checkouts.ts +185 -185
  49. package/src/handlers/findings.test.ts +633 -633
  50. package/src/handlers/findings.ts +239 -239
  51. package/src/handlers/git-issues.test.ts +631 -631
  52. package/src/handlers/git-issues.ts +136 -136
  53. package/src/handlers/ideas.test.ts +644 -644
  54. package/src/handlers/ideas.ts +207 -207
  55. package/src/handlers/index.ts +84 -84
  56. package/src/handlers/milestones.test.ts +475 -475
  57. package/src/handlers/milestones.ts +180 -180
  58. package/src/handlers/organizations.test.ts +826 -826
  59. package/src/handlers/organizations.ts +315 -315
  60. package/src/handlers/progress.test.ts +269 -269
  61. package/src/handlers/progress.ts +77 -77
  62. package/src/handlers/project.test.ts +546 -546
  63. package/src/handlers/project.ts +239 -239
  64. package/src/handlers/requests.test.ts +303 -303
  65. package/src/handlers/requests.ts +99 -99
  66. package/src/handlers/roles.test.ts +305 -305
  67. package/src/handlers/roles.ts +219 -219
  68. package/src/handlers/session.test.ts +998 -875
  69. package/src/handlers/session.ts +839 -730
  70. package/src/handlers/sprints.test.ts +732 -732
  71. package/src/handlers/sprints.ts +537 -537
  72. package/src/handlers/tasks.test.ts +931 -907
  73. package/src/handlers/tasks.ts +1121 -945
  74. package/src/handlers/tool-categories.test.ts +66 -66
  75. package/src/handlers/tool-docs.ts +1109 -1096
  76. package/src/handlers/types.test.ts +259 -259
  77. package/src/handlers/types.ts +175 -175
  78. package/src/handlers/validation.test.ts +582 -582
  79. package/src/handlers/validation.ts +164 -113
  80. package/src/index.test.ts +674 -0
  81. package/src/index.ts +792 -792
  82. package/src/setup.test.ts +233 -233
  83. package/src/setup.ts +404 -403
  84. package/src/templates/agent-guidelines.ts +210 -210
  85. package/src/templates/help-content.ts +1751 -1673
  86. package/src/token-tracking.test.ts +463 -463
  87. package/src/token-tracking.ts +166 -166
  88. package/src/tools.test.ts +416 -0
  89. package/src/tools.ts +3611 -3555
  90. package/src/utils.test.ts +785 -683
  91. package/src/utils.ts +469 -436
  92. package/src/validators.test.ts +223 -223
  93. package/src/validators.ts +249 -249
  94. package/tsconfig.json +16 -16
  95. package/vitest.config.ts +14 -14
@@ -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();