@vibescope/mcp-server 0.2.2 → 0.2.4

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 (80) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/README.md +35 -20
  3. package/dist/api-client.d.ts +276 -8
  4. package/dist/api-client.js +128 -9
  5. package/dist/handlers/blockers.d.ts +11 -0
  6. package/dist/handlers/blockers.js +37 -2
  7. package/dist/handlers/bodies-of-work.d.ts +2 -0
  8. package/dist/handlers/bodies-of-work.js +30 -1
  9. package/dist/handlers/connectors.js +2 -2
  10. package/dist/handlers/decisions.d.ts +11 -0
  11. package/dist/handlers/decisions.js +37 -2
  12. package/dist/handlers/deployment.d.ts +6 -0
  13. package/dist/handlers/deployment.js +33 -5
  14. package/dist/handlers/discovery.js +27 -11
  15. package/dist/handlers/fallback.js +12 -6
  16. package/dist/handlers/file-checkouts.d.ts +1 -0
  17. package/dist/handlers/file-checkouts.js +17 -2
  18. package/dist/handlers/findings.d.ts +5 -0
  19. package/dist/handlers/findings.js +19 -2
  20. package/dist/handlers/git-issues.js +4 -2
  21. package/dist/handlers/ideas.d.ts +5 -0
  22. package/dist/handlers/ideas.js +19 -2
  23. package/dist/handlers/progress.js +2 -2
  24. package/dist/handlers/project.d.ts +1 -0
  25. package/dist/handlers/project.js +35 -2
  26. package/dist/handlers/requests.js +6 -3
  27. package/dist/handlers/roles.js +13 -2
  28. package/dist/handlers/session.d.ts +12 -0
  29. package/dist/handlers/session.js +288 -25
  30. package/dist/handlers/sprints.d.ts +2 -0
  31. package/dist/handlers/sprints.js +30 -1
  32. package/dist/handlers/tasks.d.ts +25 -2
  33. package/dist/handlers/tasks.js +228 -35
  34. package/dist/handlers/tool-docs.js +72 -5
  35. package/dist/templates/agent-guidelines.d.ts +18 -0
  36. package/dist/templates/agent-guidelines.js +207 -0
  37. package/dist/tools.js +478 -125
  38. package/dist/utils.d.ts +5 -2
  39. package/dist/utils.js +90 -51
  40. package/package.json +51 -46
  41. package/scripts/version-bump.ts +203 -0
  42. package/src/api-client.test.ts +8 -3
  43. package/src/api-client.ts +376 -13
  44. package/src/handlers/__test-setup__.ts +5 -0
  45. package/src/handlers/blockers.test.ts +76 -0
  46. package/src/handlers/blockers.ts +56 -2
  47. package/src/handlers/bodies-of-work.ts +59 -1
  48. package/src/handlers/connectors.ts +2 -2
  49. package/src/handlers/decisions.test.ts +71 -2
  50. package/src/handlers/decisions.ts +56 -2
  51. package/src/handlers/deployment.test.ts +81 -0
  52. package/src/handlers/deployment.ts +38 -5
  53. package/src/handlers/discovery.ts +27 -11
  54. package/src/handlers/fallback.test.ts +11 -10
  55. package/src/handlers/fallback.ts +14 -8
  56. package/src/handlers/file-checkouts.test.ts +83 -3
  57. package/src/handlers/file-checkouts.ts +22 -2
  58. package/src/handlers/findings.test.ts +2 -2
  59. package/src/handlers/findings.ts +38 -2
  60. package/src/handlers/git-issues.test.ts +2 -2
  61. package/src/handlers/git-issues.ts +4 -2
  62. package/src/handlers/ideas.test.ts +1 -1
  63. package/src/handlers/ideas.ts +34 -2
  64. package/src/handlers/progress.ts +2 -2
  65. package/src/handlers/project.ts +47 -2
  66. package/src/handlers/requests.test.ts +38 -7
  67. package/src/handlers/requests.ts +6 -3
  68. package/src/handlers/roles.test.ts +1 -1
  69. package/src/handlers/roles.ts +20 -2
  70. package/src/handlers/session.test.ts +303 -4
  71. package/src/handlers/session.ts +335 -28
  72. package/src/handlers/sprints.ts +61 -1
  73. package/src/handlers/tasks.test.ts +0 -73
  74. package/src/handlers/tasks.ts +269 -40
  75. package/src/handlers/tool-docs.ts +77 -5
  76. package/src/handlers/types.test.ts +259 -0
  77. package/src/templates/agent-guidelines.ts +210 -0
  78. package/src/tools.ts +479 -125
  79. package/src/utils.test.ts +7 -5
  80. package/src/utils.ts +95 -51
package/CHANGELOG.md ADDED
@@ -0,0 +1,84 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@vibescope/mcp-server` will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+ - Test writing reminders in developer workflow - `update_task(status: "in_progress")` now includes test guidance
12
+ - Test check in validation workflow - `claim_validation` now checks for test file modifications in PR
13
+ - PR link display on completed tasks in dashboard
14
+ - Smart task selection respecting sprints, bodies of work, phases and dependencies
15
+ - `get_project_summary` endpoint for unified project overview
16
+ - `get_file_checkouts_stats` endpoint for aggregate file lock statistics
17
+ - Pagination support for `get_pending_requests`, `get_deployment_requirements`, `get_decisions`, `get_blockers`
18
+ - Offset pagination for `get_git_issues`, `get_file_checkouts`, `get_activity_history`
19
+ - Pagination for scheduled deployments, activity schedules, and stale worktrees
20
+ - New project settings: `require_pr_for_validation`, `auto_merge_on_approval`, `validation_required`, `default_task_priority`, `require_time_estimates`, `fallback_activities_enabled`, `git_delete_branch_on_merge`
21
+ - Stats endpoints for blockers and decisions
22
+ - Automatic semantic version bumping script (`scripts/version-bump.ts`)
23
+ - Version npm scripts: `version:check`, `version:bump`, `version:patch`, `version:minor`, `version:major`
24
+
25
+ ### Changed
26
+ - Worktree naming now includes agent persona and short task description for easier identification
27
+ - Return `unanswered_questions_count` instead of full array in session responses for token efficiency
28
+
29
+ ## [0.2.3] - 2026-01-14
30
+
31
+ ### Fixed
32
+ - Route complete_task through proxy endpoint for proper authentication
33
+ - Surface unanswered questions prominently in start_work_session
34
+
35
+ ### Changed
36
+ - Improved session context type handling for completeTask
37
+
38
+ ## [0.2.2] - 2026-01-13
39
+
40
+ ### Added
41
+ - Token tracking module with unit tests
42
+ - Connector handlers with unit tests
43
+ - Custom connectors support for external integrations
44
+
45
+ ### Changed
46
+ - Refactored duplicate tool definitions from index.ts
47
+
48
+ ## [0.2.1] - 2026-01-12
49
+
50
+ ### Added
51
+ - Unit tests for blockers, decisions, and findings handlers
52
+ - Stats endpoints for blockers, decisions, and findings
53
+
54
+ ### Fixed
55
+ - Security vulnerability in @modelcontextprotocol/sdk (GHSA-8r9q-7v3j-jr4g)
56
+
57
+ ## [0.2.0] - 2026-01-11
58
+
59
+ ### Added
60
+ - Deployment priority feature - active deployments block regular task assignment
61
+ - Background activity history and scheduling
62
+ - Agent creator tracking for tasks, ideas, blockers, decisions
63
+ - Setup CLI package for guided onboarding
64
+
65
+ ### Changed
66
+ - Updated get_next_task tool description to mention deployment blocking
67
+ - Enhanced CLAUDE.md with deployment priority instructions
68
+
69
+ ## [0.1.0] - 2026-01-10
70
+
71
+ ### Added
72
+ - Initial release of MCP server for Vibescope
73
+ - Core tools: tasks, projects, sessions, progress tracking
74
+ - Background activity support (fallback activities)
75
+ - Git workflow integration with worktree support
76
+ - Validation workflow for cross-agent task validation
77
+ - Deployment coordination tools
78
+
79
+ [Unreleased]: https://github.com/Nonatomic/Vibescope/compare/v0.2.3...HEAD
80
+ [0.2.3]: https://github.com/Nonatomic/Vibescope/compare/v0.2.2...v0.2.3
81
+ [0.2.2]: https://github.com/Nonatomic/Vibescope/compare/v0.2.1...v0.2.2
82
+ [0.2.1]: https://github.com/Nonatomic/Vibescope/compare/v0.2.0...v0.2.1
83
+ [0.2.0]: https://github.com/Nonatomic/Vibescope/compare/v0.1.0...v0.2.0
84
+ [0.1.0]: https://github.com/Nonatomic/Vibescope/releases/tag/v0.1.0
package/README.md CHANGED
@@ -13,7 +13,7 @@ Use directly in your MCP config without installing:
13
13
  "mcpServers": {
14
14
  "vibescope": {
15
15
  "command": "npx",
16
- "args": ["-y", "-p", "@vibescope/mcp-server", "vibescope-mcp"],
16
+ "args": ["-y", "-p", "@vibescope/mcp-server@latest", "vibescope-mcp"],
17
17
  "env": {
18
18
  "VIBESCOPE_API_KEY": "your-api-key"
19
19
  }
@@ -25,7 +25,7 @@ Use directly in your MCP config without installing:
25
25
  ### Option 2: Global Install
26
26
 
27
27
  ```bash
28
- npm install -g @vibescope/mcp-server
28
+ npm install -g @vibescope/mcp-server@latest
29
29
  ```
30
30
 
31
31
  Then configure:
@@ -43,43 +43,58 @@ Then configure:
43
43
  }
44
44
  ```
45
45
 
46
- ### Option 3: From Source (Development)
46
+ ## Quick Start
47
+
48
+ ### Claude Code
47
49
 
48
50
  ```bash
49
- # Clone the repo
50
- git clone https://github.com/Nonatomic/Vibescope.git
51
- cd Vibescope
51
+ claude mcp add vibescope npx @vibescope/mcp-server@latest \
52
+ --env VIBESCOPE_API_KEY=your_key
53
+ ```
52
54
 
53
- # Install dependencies and build
54
- pnpm install
55
- pnpm build
55
+ ### Gemini CLI
56
56
 
57
- # Point your MCP config to the built file
58
- ```
57
+ Add to your `~/.gemini/settings.json` or project-level `.gemini/settings.json`:
59
58
 
60
59
  ```json
61
60
  {
62
61
  "mcpServers": {
63
62
  "vibescope": {
64
- "command": "node",
65
- "args": ["/path/to/Vibescope/packages/mcp-server/dist/index.js"],
63
+ "command": "npx",
64
+ "args": ["-y", "-p", "@vibescope/mcp-server@latest", "vibescope-mcp"],
66
65
  "env": {
67
- "VIBESCOPE_API_KEY": "your-api-key"
68
- }
66
+ "VIBESCOPE_API_KEY": "$VIBESCOPE_API_KEY"
67
+ },
68
+ "timeout": 30000,
69
+ "trust": true
69
70
  }
70
71
  }
71
72
  }
72
73
  ```
73
74
 
74
- ## Quick Start with Claude Code
75
+ Then set your API key as an environment variable:
76
+ ```bash
77
+ export VIBESCOPE_API_KEY=your_key_here
78
+ ```
79
+
80
+ ## How to Call MCP Tools (Important for AI Agents)
75
81
 
76
- The easiest way to get started:
82
+ MCP tools are invoked **from within your AI conversation**, not via command line.
77
83
 
84
+ **WRONG - CLI does not have a 'call' command:**
78
85
  ```bash
79
- claude mcp add vibescope npx @vibescope/mcp-server \
80
- --env VIBESCOPE_API_KEY=your_key
86
+ # This does NOT work
87
+ claude mcp call vibescope start_work_session '{"git_url": "..."}'
81
88
  ```
82
89
 
90
+ **RIGHT - Call tools within your conversation response:**
91
+ ```
92
+ # Invoke as a tool call, same as Read, Edit, or Bash
93
+ mcp__vibescope__start_work_session(git_url: "...", model: "opus")
94
+ ```
95
+
96
+ The CLI commands (`claude mcp`, `gemini mcp`) are only for **server configuration** (`add`, `remove`, `list`), not for calling tools. All tool invocations happen within the AI conversation context.
97
+
83
98
  ## Getting an API Key
84
99
 
85
100
  1. Sign up at [vibescope.dev](https://vibescope.dev)
@@ -88,7 +103,7 @@ claude mcp add vibescope npx @vibescope/mcp-server \
88
103
 
89
104
  ## Available Tools
90
105
 
91
- The MCP server provides **130 tools** for AI agents. Here are the key tools by category:
106
+ The MCP server provides **140+ tools** for AI agents. Here are the key tools by category:
92
107
 
93
108
  ### Session
94
109
  | Tool | Description |
@@ -31,6 +31,8 @@ export declare class VibescopeApiClient {
31
31
  mode?: 'lite' | 'full';
32
32
  model?: 'opus' | 'sonnet' | 'haiku';
33
33
  role?: 'developer' | 'validator' | 'deployer' | 'reviewer' | 'maintainer';
34
+ hostname?: string;
35
+ agent_type?: 'claude' | 'gemini' | 'cursor' | 'windsurf' | 'other';
34
36
  }): Promise<ApiResponse<{
35
37
  session_started: boolean;
36
38
  session_id?: string;
@@ -96,10 +98,34 @@ export declare class VibescopeApiClient {
96
98
  example: string;
97
99
  note: string;
98
100
  };
101
+ agent_setup?: {
102
+ agent_type: string;
103
+ is_new_agent_type: boolean;
104
+ setup_required: boolean;
105
+ instructions: string;
106
+ config_file: string;
107
+ template_url?: string;
108
+ steps: string[];
109
+ };
110
+ stale_worktrees?: Array<{
111
+ task_id: string;
112
+ task_title: string;
113
+ worktree_path: string;
114
+ worktree_hostname?: string | null;
115
+ }>;
116
+ stale_worktrees_count?: number;
117
+ cleanup_action?: string;
118
+ awaiting_validation?: Array<{
119
+ id: string;
120
+ title?: string;
121
+ }>;
122
+ validation_priority?: boolean;
123
+ next_action?: string;
99
124
  error?: string;
100
125
  }>>;
101
126
  heartbeat(sessionId: string, options?: {
102
127
  current_worktree_path?: string | null;
128
+ hostname?: string;
103
129
  }): Promise<ApiResponse<{
104
130
  success: boolean;
105
131
  session_id: string;
@@ -192,6 +218,14 @@ export declare class VibescopeApiClient {
192
218
  git_auto_tag?: boolean;
193
219
  deployment_instructions?: string;
194
220
  agent_instructions?: string;
221
+ git_delete_branch_on_merge?: boolean;
222
+ require_pr_for_validation?: boolean;
223
+ auto_merge_on_approval?: boolean;
224
+ validation_required?: boolean;
225
+ default_task_priority?: number;
226
+ require_time_estimates?: boolean;
227
+ fallback_activities_enabled?: boolean;
228
+ preferred_fallback_activities?: string[];
195
229
  }): Promise<ApiResponse<{
196
230
  success: boolean;
197
231
  project_id: string;
@@ -283,6 +317,121 @@ export declare class VibescopeApiClient {
283
317
  working_agent_session_id?: string;
284
318
  };
285
319
  }>>;
320
+ /**
321
+ * Get a single task by ID with optional subtasks and milestones
322
+ */
323
+ getTaskById(taskId: string, params?: {
324
+ include_subtasks?: boolean;
325
+ include_milestones?: boolean;
326
+ }): Promise<ApiResponse<{
327
+ task: {
328
+ id: string;
329
+ title: string;
330
+ description?: string;
331
+ priority: number;
332
+ status: string;
333
+ progress_percentage?: number;
334
+ estimated_minutes?: number;
335
+ started_at?: string;
336
+ completed_at?: string;
337
+ git_branch?: string;
338
+ references?: Array<{
339
+ url: string;
340
+ label?: string;
341
+ }>;
342
+ };
343
+ subtasks?: Array<{
344
+ id: string;
345
+ title: string;
346
+ status: string;
347
+ progress_percentage?: number;
348
+ }>;
349
+ milestones?: Array<{
350
+ id: string;
351
+ title: string;
352
+ status: string;
353
+ order_index: number;
354
+ }>;
355
+ }>>;
356
+ /**
357
+ * Search tasks by text query with pagination
358
+ */
359
+ searchTasks(projectId: string, params: {
360
+ query: string;
361
+ status?: string[];
362
+ limit?: number;
363
+ offset?: number;
364
+ }): Promise<ApiResponse<{
365
+ tasks: Array<{
366
+ id: string;
367
+ title: string;
368
+ status: string;
369
+ priority: number;
370
+ snippet?: string;
371
+ }>;
372
+ total_matches: number;
373
+ hint?: string;
374
+ }>>;
375
+ /**
376
+ * Get tasks filtered by priority with pagination
377
+ */
378
+ getTasksByPriority(projectId: string, params?: {
379
+ priority?: number;
380
+ priority_max?: number;
381
+ status?: string;
382
+ limit?: number;
383
+ offset?: number;
384
+ }): Promise<ApiResponse<{
385
+ tasks: Array<{
386
+ id: string;
387
+ title: string;
388
+ priority: number;
389
+ status: string;
390
+ estimated_minutes?: number;
391
+ }>;
392
+ total_count: number;
393
+ }>>;
394
+ /**
395
+ * Get recent tasks (newest or oldest) with pagination
396
+ */
397
+ getRecentTasks(projectId: string, params?: {
398
+ order?: 'newest' | 'oldest';
399
+ status?: string;
400
+ limit?: number;
401
+ offset?: number;
402
+ }): Promise<ApiResponse<{
403
+ tasks: Array<{
404
+ id: string;
405
+ title: string;
406
+ status: string;
407
+ priority: number;
408
+ created_at: string;
409
+ age?: string;
410
+ }>;
411
+ total_count: number;
412
+ }>>;
413
+ /**
414
+ * Get task statistics for a project
415
+ */
416
+ getTaskStats(projectId: string): Promise<ApiResponse<{
417
+ total: number;
418
+ by_status: {
419
+ backlog: number;
420
+ pending: number;
421
+ in_progress: number;
422
+ completed: number;
423
+ cancelled: number;
424
+ };
425
+ by_priority: {
426
+ 1: number;
427
+ 2: number;
428
+ 3: number;
429
+ 4: number;
430
+ 5: number;
431
+ };
432
+ awaiting_validation: number;
433
+ oldest_pending_days: number | null;
434
+ }>>;
286
435
  updateTask(taskId: string, updates: {
287
436
  title?: string;
288
437
  description?: string;
@@ -394,6 +543,10 @@ export declare class VibescopeApiClient {
394
543
  deleteBlocker(blockerId: string): Promise<ApiResponse<{
395
544
  success: boolean;
396
545
  }>>;
546
+ getBlockersStats(projectId: string): Promise<ApiResponse<{
547
+ total: number;
548
+ by_status: Record<string, number>;
549
+ }>>;
397
550
  getDecisions(projectId: string, options?: {
398
551
  limit?: number;
399
552
  offset?: number;
@@ -420,6 +573,9 @@ export declare class VibescopeApiClient {
420
573
  deleteDecision(decisionId: string): Promise<ApiResponse<{
421
574
  success: boolean;
422
575
  }>>;
576
+ getDecisionsStats(projectId: string): Promise<ApiResponse<{
577
+ total: number;
578
+ }>>;
423
579
  getIdeas(projectId: string, params?: {
424
580
  status?: string;
425
581
  limit?: number;
@@ -572,13 +728,15 @@ export declare class VibescopeApiClient {
572
728
  deleteMilestone(milestoneId: string): Promise<ApiResponse<{
573
729
  success: boolean;
574
730
  }>>;
575
- getPendingRequests(projectId: string, sessionId?: string): Promise<ApiResponse<{
731
+ getPendingRequests(projectId: string, sessionId?: string, limit?: number, offset?: number): Promise<ApiResponse<{
576
732
  requests: Array<{
577
733
  id: string;
578
734
  request_type: string;
579
735
  message: string;
580
736
  created_at: string;
581
737
  }>;
738
+ total_count: number;
739
+ has_more: boolean;
582
740
  }>>;
583
741
  acknowledgeRequest(requestId: string, sessionId?: string): Promise<ApiResponse<{
584
742
  success: boolean;
@@ -645,7 +803,10 @@ export declare class VibescopeApiClient {
645
803
  latest_by_type: Record<string, unknown>;
646
804
  count: number;
647
805
  }>>;
648
- getActivitySchedules(projectId: string): Promise<ApiResponse<{
806
+ getActivitySchedules(projectId: string, params?: {
807
+ limit?: number;
808
+ offset?: number;
809
+ }): Promise<ApiResponse<{
649
810
  schedules: Array<{
650
811
  id: string;
651
812
  activity_type: string;
@@ -653,8 +814,8 @@ export declare class VibescopeApiClient {
653
814
  next_run_at?: string;
654
815
  enabled: boolean;
655
816
  }>;
656
- due_activities: string[];
657
- count: number;
817
+ total_count: number;
818
+ has_more: boolean;
658
819
  }>>;
659
820
  addSubtask(parentTaskId: string, params: {
660
821
  title: string;
@@ -802,6 +963,27 @@ export declare class VibescopeApiClient {
802
963
  }): Promise<ApiResponse<{
803
964
  success: boolean;
804
965
  }>>;
966
+ /**
967
+ * Report actual API token usage for accurate cost tracking.
968
+ * This records token usage to the session and attributes cost to the current task.
969
+ */
970
+ reportTokenUsage(sessionId: string, params: {
971
+ input_tokens: number;
972
+ output_tokens: number;
973
+ model?: 'opus' | 'sonnet' | 'haiku';
974
+ }): Promise<ApiResponse<{
975
+ success: boolean;
976
+ reported: {
977
+ session_id: string;
978
+ model: string;
979
+ input_tokens: number;
980
+ output_tokens: number;
981
+ total_tokens: number;
982
+ estimated_cost_usd: number;
983
+ };
984
+ task_attributed: boolean;
985
+ task_id?: string;
986
+ }>>;
805
987
  listOrganizations(): Promise<ApiResponse<{
806
988
  organizations: Array<{
807
989
  id: string;
@@ -1009,6 +1191,7 @@ export declare class VibescopeApiClient {
1009
1191
  issue_type?: string;
1010
1192
  branch?: string;
1011
1193
  limit?: number;
1194
+ offset?: number;
1012
1195
  }): Promise<ApiResponse<{
1013
1196
  git_issues: Array<{
1014
1197
  id: string;
@@ -1172,6 +1355,8 @@ export declare class VibescopeApiClient {
1172
1355
  getDeploymentRequirements(projectId: string, params?: {
1173
1356
  status?: string;
1174
1357
  stage?: string;
1358
+ limit?: number;
1359
+ offset?: number;
1175
1360
  }): Promise<ApiResponse<{
1176
1361
  requirements: Array<{
1177
1362
  id: string;
@@ -1181,6 +1366,14 @@ export declare class VibescopeApiClient {
1181
1366
  status: string;
1182
1367
  stage: string;
1183
1368
  }>;
1369
+ total_count: number;
1370
+ has_more: boolean;
1371
+ }>>;
1372
+ getDeploymentRequirementsStats(projectId: string): Promise<ApiResponse<{
1373
+ total: number;
1374
+ by_status: Record<string, number>;
1375
+ by_stage: Record<string, number>;
1376
+ by_type: Record<string, number>;
1184
1377
  }>>;
1185
1378
  completeDeploymentRequirement(requirementId: string): Promise<ApiResponse<{
1186
1379
  success: boolean;
@@ -1198,7 +1391,11 @@ export declare class VibescopeApiClient {
1198
1391
  success: boolean;
1199
1392
  schedule_id: string;
1200
1393
  }>>;
1201
- getScheduledDeployments(projectId: string, includeDisabled?: boolean): Promise<ApiResponse<{
1394
+ getScheduledDeployments(projectId: string, params?: {
1395
+ includeDisabled?: boolean;
1396
+ limit?: number;
1397
+ offset?: number;
1398
+ }): Promise<ApiResponse<{
1202
1399
  schedules: Array<{
1203
1400
  id: string;
1204
1401
  scheduled_at: string;
@@ -1211,8 +1408,8 @@ export declare class VibescopeApiClient {
1211
1408
  git_ref?: string;
1212
1409
  notes?: string;
1213
1410
  }>;
1214
- count: number;
1215
- due_count: number;
1411
+ total_count: number;
1412
+ has_more: boolean;
1216
1413
  }>>;
1217
1414
  updateScheduledDeployment(scheduleId: string, updates: {
1218
1415
  scheduled_at?: string;
@@ -1253,6 +1450,51 @@ export declare class VibescopeApiClient {
1253
1450
  success: boolean;
1254
1451
  project_id: string;
1255
1452
  }>>;
1453
+ getProjectSummary(projectId: string): Promise<ApiResponse<{
1454
+ project: {
1455
+ id: string;
1456
+ name: string;
1457
+ description?: string;
1458
+ goal?: string;
1459
+ status: string;
1460
+ git_url?: string;
1461
+ tech_stack?: string[];
1462
+ git_workflow?: string;
1463
+ };
1464
+ tasks: {
1465
+ total: number;
1466
+ by_status: Record<string, number>;
1467
+ };
1468
+ blockers: {
1469
+ total: number;
1470
+ open: number;
1471
+ resolved: number;
1472
+ };
1473
+ findings: {
1474
+ total: number;
1475
+ by_severity: Record<string, number>;
1476
+ by_status: Record<string, number>;
1477
+ };
1478
+ agents: {
1479
+ active_count: number;
1480
+ total_tokens_this_session: number;
1481
+ total_tool_calls: number;
1482
+ };
1483
+ activity: {
1484
+ tasks_completed_today: number;
1485
+ progress_entries_today: number;
1486
+ };
1487
+ deployment: {
1488
+ active: boolean;
1489
+ status: string | null;
1490
+ last_deployment_at: string | null;
1491
+ };
1492
+ planning: {
1493
+ active_sprints: number;
1494
+ active_bodies_of_work: number;
1495
+ pending_deployment_requirements: number;
1496
+ };
1497
+ }>>;
1256
1498
  getHelpTopic(slug: string): Promise<ApiResponse<{
1257
1499
  slug: string;
1258
1500
  title: string;
@@ -1283,6 +1525,7 @@ export declare class VibescopeApiClient {
1283
1525
  status?: string;
1284
1526
  file_path?: string;
1285
1527
  limit?: number;
1528
+ offset?: number;
1286
1529
  }): Promise<ApiResponse<{
1287
1530
  checkouts: Array<{
1288
1531
  id: string;
@@ -1304,22 +1547,38 @@ export declare class VibescopeApiClient {
1304
1547
  checkout_id: string;
1305
1548
  message: string;
1306
1549
  }>>;
1307
- getStaleWorktrees(projectId: string): Promise<ApiResponse<{
1550
+ getFileCheckoutsStats(projectId: string): Promise<ApiResponse<{
1551
+ total: number;
1552
+ by_status: Record<string, number>;
1553
+ }>>;
1554
+ getStaleWorktrees(projectId: string, params?: {
1555
+ hostname?: string;
1556
+ limit?: number;
1557
+ offset?: number;
1558
+ }): Promise<ApiResponse<{
1308
1559
  project_id: string;
1309
1560
  project_name: string;
1561
+ hostname_filter: string | null;
1310
1562
  stale_worktrees: Array<{
1311
1563
  task_id: string;
1312
1564
  task_title: string;
1313
1565
  worktree_path: string;
1566
+ worktree_hostname: string | null;
1314
1567
  git_branch: string | null;
1315
1568
  status: string;
1316
1569
  completed_at: string | null;
1317
1570
  updated_at: string;
1318
1571
  pr_url: string | null;
1319
1572
  stale_reason: 'task_finished' | 'potentially_abandoned';
1573
+ can_cleanup_locally: boolean;
1320
1574
  }>;
1321
1575
  count: number;
1576
+ local_count: number;
1577
+ remote_count: number;
1578
+ total_count: number;
1579
+ has_more: boolean;
1322
1580
  cleanup_instructions: string[] | null;
1581
+ remote_worktree_note: string | null;
1323
1582
  }>>;
1324
1583
  clearWorktreePath(taskId: string): Promise<ApiResponse<{
1325
1584
  success: boolean;
@@ -1413,6 +1672,15 @@ export declare class VibescopeApiClient {
1413
1672
  total_count: number;
1414
1673
  has_more: boolean;
1415
1674
  }>>;
1675
+ /**
1676
+ * Confirm that agent setup is complete for a project.
1677
+ * This marks the agent type as onboarded so future sessions don't receive setup instructions.
1678
+ */
1679
+ confirmAgentSetup(projectId: string, agentType: 'claude' | 'gemini' | 'cursor' | 'windsurf' | 'other'): Promise<ApiResponse<{
1680
+ success: boolean;
1681
+ project_id: string;
1682
+ agent_type: string;
1683
+ }>>;
1416
1684
  }
1417
1685
  export declare function getApiClient(): VibescopeApiClient;
1418
1686
  export declare function initApiClient(config: ApiClientConfig): VibescopeApiClient;