@specforge/mcp 1.5.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/lib/format.d.ts +145 -0
  2. package/dist/lib/format.d.ts.map +1 -0
  3. package/dist/lib/format.js +227 -0
  4. package/dist/lib/format.js.map +1 -0
  5. package/dist/lib/index.d.ts +7 -0
  6. package/dist/lib/index.d.ts.map +1 -0
  7. package/dist/lib/index.js +7 -0
  8. package/dist/lib/index.js.map +1 -0
  9. package/dist/lib/response.d.ts +119 -0
  10. package/dist/lib/response.d.ts.map +1 -0
  11. package/dist/lib/response.js +123 -0
  12. package/dist/lib/response.js.map +1 -0
  13. package/dist/patterns/index.d.ts +9 -0
  14. package/dist/patterns/index.d.ts.map +1 -0
  15. package/dist/patterns/index.js +15 -0
  16. package/dist/patterns/index.js.map +1 -0
  17. package/dist/patterns/inheritance.d.ts +193 -0
  18. package/dist/patterns/inheritance.d.ts.map +1 -0
  19. package/dist/patterns/inheritance.js +265 -0
  20. package/dist/patterns/inheritance.js.map +1 -0
  21. package/dist/server.d.ts.map +1 -1
  22. package/dist/server.js +21 -4
  23. package/dist/server.js.map +1 -1
  24. package/dist/tools/index.d.ts +0 -8
  25. package/dist/tools/index.d.ts.map +1 -1
  26. package/dist/tools/index.js +1384 -695
  27. package/dist/tools/index.js.map +1 -1
  28. package/dist/types/index.d.ts +567 -19
  29. package/dist/types/index.d.ts.map +1 -1
  30. package/dist/types/index.js +244 -1
  31. package/dist/types/index.js.map +1 -1
  32. package/dist/validation/index.d.ts +1 -1
  33. package/dist/validation/index.d.ts.map +1 -1
  34. package/dist/validation/index.js +163 -0
  35. package/dist/validation/index.js.map +1 -1
  36. package/dist/validation/ticket-validation.d.ts +162 -0
  37. package/dist/validation/ticket-validation.d.ts.map +1 -0
  38. package/dist/validation/ticket-validation.js +311 -0
  39. package/dist/validation/ticket-validation.js.map +1 -0
  40. package/package.json +6 -5
@@ -24,6 +24,86 @@ export interface Project {
24
24
  * Specification status values
25
25
  */
26
26
  export type SpecificationStatus = 'draft' | 'planning' | 'ready' | 'in_progress' | 'completed';
27
+ /**
28
+ * Naming conventions for the specification
29
+ *
30
+ * Defines consistent naming patterns used across the codebase.
31
+ */
32
+ export interface NamingConventions {
33
+ /** File naming pattern (e.g., "camelCase.ts") */
34
+ files?: string;
35
+ /** Function naming pattern (e.g., "_hookFunction") */
36
+ functions?: string;
37
+ /** Interface naming pattern (e.g., "FunctionNameProps") */
38
+ interfaces?: string;
39
+ /** Action naming pattern (e.g., "SCREAMING_SNAKE_CASE") */
40
+ actions?: string;
41
+ /** Component naming pattern (e.g., "PascalCase") */
42
+ components?: string;
43
+ /** Variable naming pattern (e.g., "camelCase") */
44
+ variables?: string;
45
+ /** Class naming pattern (e.g., "PascalCase") */
46
+ classes?: string;
47
+ /** Constant naming pattern (e.g., "UPPER_SNAKE_CASE") */
48
+ constants?: string;
49
+ }
50
+ /**
51
+ * Code standards defined at specification level
52
+ *
53
+ * Forms the top level of the pattern inheritance chain.
54
+ * These standards are inherited by all epics and tickets within the specification.
55
+ */
56
+ export interface SpecificationCodeStandards {
57
+ /** Primary language (e.g., "TypeScript") */
58
+ language?: string;
59
+ /** Async pattern (e.g., "async/await") */
60
+ asyncPattern?: string;
61
+ /** Error handling approach (e.g., "Result<T> pattern") */
62
+ errorHandling?: string;
63
+ /** Documentation style (e.g., "JSDoc with @example") */
64
+ documentation?: string;
65
+ /** Testing approach (e.g., "AAA pattern") */
66
+ testing?: string;
67
+ /** Naming conventions */
68
+ naming?: NamingConventions;
69
+ /** State management pattern */
70
+ stateManagement?: string;
71
+ /** API pattern (e.g., "REST", "GraphQL") */
72
+ apiPattern?: string;
73
+ /** Logging approach */
74
+ logging?: string;
75
+ /** Validation approach */
76
+ validation?: string;
77
+ /** Additional custom standards */
78
+ custom?: Record<string, string>;
79
+ }
80
+ /**
81
+ * Return type patterns for CRUD operations
82
+ *
83
+ * Defines consistent return types for database/API operations.
84
+ */
85
+ export interface ReturnTypes {
86
+ /** Create operation return type (e.g., "BusinessCreateResult<T>") */
87
+ create?: string;
88
+ /** Update operation return type (e.g., "BusinessUpdateResult<T>") */
89
+ update?: string;
90
+ /** Delete operation return type (e.g., "BusinessDeleteResult") */
91
+ delete?: string;
92
+ /** List operation return type (e.g., "BusinessListResult<T>") */
93
+ list?: string;
94
+ /** Get single item return type */
95
+ get?: string;
96
+ /** Additional custom return types */
97
+ custom?: Record<string, string>;
98
+ }
99
+ /**
100
+ * Type guard for SpecificationCodeStandards
101
+ */
102
+ export declare function isValidCodeStandards(value: unknown): value is SpecificationCodeStandards;
103
+ /**
104
+ * Type guard for ReturnTypes
105
+ */
106
+ export declare function isValidReturnTypes(value: unknown): value is ReturnTypes;
27
107
  /**
28
108
  * Specification entity
29
109
  */
@@ -49,9 +129,73 @@ export interface Specification {
49
129
  priority?: 'high' | 'medium' | 'low';
50
130
  tags?: string[];
51
131
  estimatedHours?: number;
132
+ /** Code standards for the specification (inherited by epics/tickets) */
133
+ codeStandards?: SpecificationCodeStandards;
134
+ /** Common imports used across the specification */
135
+ commonImports?: string[];
136
+ /** Return type patterns for CRUD operations */
137
+ returnTypes?: ReturnTypes;
52
138
  createdAt: string;
53
139
  updatedAt: string;
54
140
  }
141
+ /**
142
+ * Shared patterns defined at epic level
143
+ *
144
+ * These patterns can override specification-level patterns for all tickets
145
+ * within the epic. Useful for epics that need different conventions.
146
+ */
147
+ export interface EpicSharedPatterns {
148
+ /** Override error handling for this epic */
149
+ errorHandling?: string;
150
+ /** Epic-specific return type override */
151
+ returnType?: string;
152
+ /** Action prefix for Redux actions (e.g., "CHANNEL_") */
153
+ actionPrefix?: string;
154
+ /** Redux state slice path (e.g., "state.channel") */
155
+ stateSlice?: string;
156
+ /** API base path for this epic */
157
+ apiBasePath?: string;
158
+ /** Component folder for this epic */
159
+ componentFolder?: string;
160
+ /** Hook naming pattern for this epic */
161
+ hookPattern?: string;
162
+ /** Additional custom patterns */
163
+ custom?: Record<string, string>;
164
+ }
165
+ /**
166
+ * Common files used across all tickets in an epic
167
+ *
168
+ * Defines file paths that are shared/referenced by multiple tickets
169
+ * in the epic. Helps AI understand the epic's file structure.
170
+ */
171
+ export interface EpicCommonFiles {
172
+ /** Reducer file path */
173
+ reducer?: string;
174
+ /** Actions file path */
175
+ actions?: string;
176
+ /** Types file path */
177
+ types?: string;
178
+ /** Index/barrel file path */
179
+ index?: string;
180
+ /** Selectors file path */
181
+ selectors?: string;
182
+ /** Hooks file path */
183
+ hooks?: string;
184
+ /** API client file path */
185
+ api?: string;
186
+ /** Test utilities file path */
187
+ testUtils?: string;
188
+ /** Additional custom files */
189
+ custom?: Record<string, string>;
190
+ }
191
+ /**
192
+ * Type guard for EpicSharedPatterns
193
+ */
194
+ export declare function isValidEpicSharedPatterns(value: unknown): value is EpicSharedPatterns;
195
+ /**
196
+ * Type guard for EpicCommonFiles
197
+ */
198
+ export declare function isValidEpicCommonFiles(value: unknown): value is EpicCommonFiles;
55
199
  /**
56
200
  * Epic status values
57
201
  */
@@ -77,7 +221,7 @@ export interface Epic {
77
221
  fileStructure?: string;
78
222
  techStack?: string[];
79
223
  dependencies?: string[];
80
- apiContracts?: any;
224
+ apiContracts?: unknown;
81
225
  status: EpicStatus;
82
226
  progress: number;
83
227
  order: number;
@@ -90,6 +234,12 @@ export interface Epic {
90
234
  tags?: string[];
91
235
  estimatedHours?: number;
92
236
  acceptanceCriteria?: string[];
237
+ /** Shared patterns for this epic (overrides specification patterns) */
238
+ sharedPatterns?: EpicSharedPatterns;
239
+ /** Additional imports specific to this epic */
240
+ additionalImports?: string[];
241
+ /** Common files shared across tickets in this epic */
242
+ commonFiles?: EpicCommonFiles;
93
243
  createdAt: string;
94
244
  updatedAt: string;
95
245
  }
@@ -98,37 +248,248 @@ export interface Epic {
98
248
  */
99
249
  export type TicketStatus = 'todo' | 'queue' | 'in_progress' | 'blocked' | 'done';
100
250
  /**
101
- * Implementation details stored with a ticket
251
+ * Supported implementation step action types
252
+ */
253
+ export type ImplementationAction = 'create' | 'code' | 'validate' | 'api' | 'dispatch' | 'test' | 'config' | 'refactor' | 'delete' | 'document';
254
+ /**
255
+ * A single implementation step with structured details
256
+ */
257
+ export interface ImplementationStep {
258
+ /** Execution order (1-based) */
259
+ order: number;
260
+ /** Brief title describing the step */
261
+ title: string;
262
+ /** Type of action to perform */
263
+ action: ImplementationAction;
264
+ /** Detailed description of what to do */
265
+ detail: string;
266
+ /** Optional code snippet for reference */
267
+ codeSnippet?: string;
268
+ /** Optional file path this step applies to */
269
+ targetFile?: string;
270
+ /** Estimated minutes for this step */
271
+ estimatedMinutes?: number;
272
+ }
273
+ /**
274
+ * Code example for reference
275
+ */
276
+ export interface CodeExample {
277
+ /** Name/title of the example */
278
+ name: string;
279
+ /** Programming language */
280
+ language: string;
281
+ /** The actual code */
282
+ code: string;
283
+ /** Optional description */
284
+ description?: string;
285
+ }
286
+ /**
287
+ * Implementation details stored with a ticket (enhanced schema)
102
288
  */
103
289
  export interface TicketImplementation {
104
- /** Files to create */
290
+ /** Ordered list of implementation steps */
291
+ steps?: ImplementationStep[];
292
+ /** Optional code examples for reference */
293
+ codeExamples?: CodeExample[];
294
+ /** Optional summary or overview */
295
+ summary?: string;
296
+ /** Optional prerequisites */
297
+ prerequisites?: string[];
298
+ /** @deprecated Use steps[].targetFile with action='create' */
105
299
  filesToCreate?: string[];
106
- /** Files to modify */
300
+ /** @deprecated Use steps[].targetFile with action='code' */
107
301
  filesToModify?: string[];
108
- /** Implementation steps */
109
- steps?: string[];
110
- /** Code snippets */
302
+ /** @deprecated Use codeExamples or steps[].codeSnippet */
111
303
  codeSnippets?: Record<string, string>;
112
- /** Testing approach */
304
+ /** @deprecated Use steps with action='test' */
113
305
  testing?: string;
114
- /** Notes */
306
+ /** @deprecated Use summary field */
115
307
  notes?: string;
116
308
  }
117
309
  /**
118
- * Technical details for a ticket
310
+ * Type guard to check if value is valid TicketImplementation
311
+ */
312
+ export declare function isValidImplementation(value: unknown): value is TicketImplementation;
313
+ /**
314
+ * HTTP methods for API endpoints
315
+ */
316
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
317
+ /**
318
+ * File to be created
319
+ */
320
+ export interface FileCreate {
321
+ /** File path relative to project root */
322
+ path: string;
323
+ /** Purpose/description of the file */
324
+ purpose: string;
325
+ /** Optional template or boilerplate to use */
326
+ template?: string;
327
+ }
328
+ /**
329
+ * File to be modified
330
+ */
331
+ export interface FileModify {
332
+ /** File path relative to project root */
333
+ path: string;
334
+ /** Description of the change */
335
+ change: string;
336
+ /** Optional specific line range */
337
+ lineRange?: {
338
+ start: number;
339
+ end: number;
340
+ };
341
+ }
342
+ /**
343
+ * File to be deleted
344
+ */
345
+ export interface FileDelete {
346
+ /** File path relative to project root */
347
+ path: string;
348
+ /** Reason for deletion */
349
+ reason: string;
350
+ }
351
+ /**
352
+ * API endpoint definition
353
+ */
354
+ export interface ApiEndpoint {
355
+ /** HTTP method */
356
+ method: HttpMethod;
357
+ /** URL path */
358
+ path: string;
359
+ /** Description of the endpoint */
360
+ description: string;
361
+ /** Optional request body schema */
362
+ requestBody?: string;
363
+ /** Optional response schema */
364
+ responseBody?: string;
365
+ }
366
+ /**
367
+ * Database operation
368
+ */
369
+ export interface DatabaseOperation {
370
+ /** Operation type */
371
+ type: 'create' | 'read' | 'update' | 'delete' | 'migration';
372
+ /** Table/collection name */
373
+ table: string;
374
+ /** Description of the operation */
375
+ description: string;
376
+ }
377
+ /**
378
+ * Environment variable definition
379
+ */
380
+ export interface EnvVarDefinition {
381
+ /** Variable name */
382
+ name: string;
383
+ /** Description of the variable */
384
+ description: string;
385
+ /** Whether the variable is required */
386
+ required: boolean;
387
+ }
388
+ /**
389
+ * External service dependency
390
+ */
391
+ export interface ExternalServiceDependency {
392
+ /** Service name */
393
+ name: string;
394
+ /** Purpose of using the service */
395
+ purpose: string;
396
+ }
397
+ /**
398
+ * Technical details for a ticket (enhanced schema)
399
+ *
400
+ * Captures file operations, patterns, imports, API endpoints,
401
+ * and other technical requirements in a structured format.
119
402
  */
120
403
  export interface TicketTechnicalDetails {
121
- /** Files referenced */
122
- files?: string[];
123
- /** Technology stack */
404
+ /** File operations */
405
+ files?: {
406
+ create?: FileCreate[];
407
+ modify?: FileModify[];
408
+ delete?: FileDelete[];
409
+ };
410
+ /** Pattern references (key: pattern name, value: description/usage) */
411
+ patterns?: Record<string, string>;
412
+ /** Required imports/dependencies */
413
+ imports?: string[];
414
+ /** API endpoints involved */
415
+ endpoints?: ApiEndpoint[];
416
+ /** Database operations */
417
+ database?: DatabaseOperation[];
418
+ /** Environment variables needed */
419
+ envVars?: EnvVarDefinition[];
420
+ /** External service dependencies */
421
+ externalServices?: ExternalServiceDependency[];
422
+ /** @deprecated Use files.create/modify for file operations */
124
423
  stack?: string[];
125
- /** API endpoints */
126
- endpoints?: string[];
127
- /** Database changes */
424
+ /** @deprecated Use database field */
128
425
  databaseChanges?: string[];
129
- /** Environment variables */
130
- envVars?: string[];
131
426
  }
427
+ /**
428
+ * Type guard for TicketTechnicalDetails
429
+ *
430
+ * Validates that a value conforms to the TicketTechnicalDetails structure.
431
+ */
432
+ export declare function isValidTechnicalDetails(value: unknown): value is TicketTechnicalDetails;
433
+ /**
434
+ * Reference type for categorizing links
435
+ */
436
+ export type ReferenceType = 'documentation' | 'example' | 'related' | 'external';
437
+ /**
438
+ * Reference link with optional description
439
+ */
440
+ export interface Reference {
441
+ /** URL or document path */
442
+ url: string;
443
+ /** Title or description */
444
+ title: string;
445
+ /** Type of reference */
446
+ type?: ReferenceType;
447
+ }
448
+ /**
449
+ * Alternative approach consideration
450
+ */
451
+ export interface Alternative {
452
+ /** Title of the alternative */
453
+ title: string;
454
+ /** Description of the approach */
455
+ description: string;
456
+ /** Why it wasn't chosen */
457
+ reason?: string;
458
+ /** Pros of this alternative */
459
+ pros?: string[];
460
+ /** Cons of this alternative */
461
+ cons?: string[];
462
+ }
463
+ /**
464
+ * Notes and context for a ticket (enhanced schema)
465
+ *
466
+ * Captures warnings, best practices, alternatives, references,
467
+ * and other contextual information in a structured format.
468
+ */
469
+ export interface TicketNotes {
470
+ /** Important warnings and gotchas */
471
+ warnings?: string[];
472
+ /** Recommended best practices */
473
+ bestPractices?: string[];
474
+ /** Alternative approaches considered */
475
+ alternatives?: Alternative[] | string[];
476
+ /** Reference links and documentation */
477
+ references?: Reference[] | string[];
478
+ /** General context and background */
479
+ context?: string;
480
+ /** Known limitations */
481
+ limitations?: string[];
482
+ /** Future considerations */
483
+ futureWork?: string[];
484
+ /** Related tickets or issues */
485
+ relatedTickets?: string[];
486
+ }
487
+ /**
488
+ * Type guard for TicketNotes
489
+ *
490
+ * Validates that a value conforms to the TicketNotes structure.
491
+ */
492
+ export declare function isValidNotes(value: unknown): value is TicketNotes;
132
493
  /**
133
494
  * Ticket entity
134
495
  */
@@ -144,7 +505,8 @@ export interface Ticket {
144
505
  priority?: 'high' | 'medium' | 'low';
145
506
  complexity?: 'small' | 'medium' | 'large' | 'xlarge';
146
507
  tags?: string[];
147
- notes?: string;
508
+ /** Notes and context - supports both simple string (legacy) and structured TicketNotes */
509
+ notes?: string | TicketNotes;
148
510
  implementation?: TicketImplementation;
149
511
  acceptanceCriteria?: string[];
150
512
  technicalDetails?: TicketTechnicalDetails;
@@ -558,4 +920,190 @@ export interface ResetTicketsResult {
558
920
  reason: string;
559
921
  }>;
560
922
  }
923
+ /**
924
+ * Ticket definition for bulk creation
925
+ */
926
+ export interface BulkCreateTicketDefinition {
927
+ /** Ticket title (required) */
928
+ title: string;
929
+ /** Ticket description */
930
+ description?: string;
931
+ /** Estimated hours */
932
+ estimatedHours?: number;
933
+ /** Complexity level */
934
+ complexity?: 'small' | 'medium' | 'large' | 'xlarge';
935
+ /** Priority level */
936
+ priority?: 'high' | 'medium' | 'low';
937
+ /** Acceptance criteria */
938
+ acceptanceCriteria?: string[];
939
+ /** Implementation details */
940
+ implementation?: TicketImplementation;
941
+ /** Technical details */
942
+ technicalDetails?: TicketTechnicalDetails;
943
+ /** Tags */
944
+ tags?: string[];
945
+ }
946
+ /**
947
+ * Inline dependency definition for bulk creation
948
+ */
949
+ export interface BulkCreateDependencyDefinition {
950
+ /** Index of the ticket in the tickets array */
951
+ ticket: number;
952
+ /** Index(es) of the ticket(s) it depends on */
953
+ dependsOn: number | number[];
954
+ }
955
+ /**
956
+ * Request for bulk create tickets operation
957
+ */
958
+ export interface BulkCreateTicketsRequest {
959
+ /** Epic ID to create tickets in */
960
+ epicId: string;
961
+ /** Array of ticket definitions */
962
+ tickets: BulkCreateTicketDefinition[];
963
+ /** Optional inline dependencies using array indexes */
964
+ dependencies?: BulkCreateDependencyDefinition[];
965
+ }
966
+ /**
967
+ * Created ticket info in bulk create response
968
+ */
969
+ export interface BulkCreatedTicketInfo {
970
+ /** Generated ticket ID */
971
+ id: string;
972
+ /** Assigned ticket number */
973
+ ticketNumber: number;
974
+ /** Ticket title */
975
+ title: string;
976
+ }
977
+ /**
978
+ * Result of bulk create tickets operation
979
+ */
980
+ export interface BulkCreateTicketsResult {
981
+ /** Number of tickets created */
982
+ created: number;
983
+ /** Created ticket information */
984
+ tickets: BulkCreatedTicketInfo[];
985
+ /** Number of dependencies created */
986
+ dependenciesCreated: number;
987
+ }
988
+ /**
989
+ * Single dependency definition for bulk add
990
+ */
991
+ export interface BulkDependencyDefinition {
992
+ /** ID of the ticket that will depend on another */
993
+ ticketId: string;
994
+ /** ID of the ticket it will depend on */
995
+ dependsOnId: string;
996
+ /** Type of dependency (default: 'requires') */
997
+ type?: 'blocks' | 'requires';
998
+ }
999
+ /**
1000
+ * Request for bulk add dependencies operation
1001
+ */
1002
+ export interface BulkAddDependenciesRequest {
1003
+ /** Array of dependency definitions */
1004
+ dependencies: BulkDependencyDefinition[];
1005
+ /** Skip validation of circular dependencies (default: false) */
1006
+ skipCircularCheck?: boolean;
1007
+ }
1008
+ /**
1009
+ * Result of bulk add dependencies operation
1010
+ */
1011
+ export interface BulkAddDependenciesResult {
1012
+ /** Number of dependencies created */
1013
+ created: number;
1014
+ /** IDs of created dependency records */
1015
+ dependencyIds: string[];
1016
+ /** Dependencies that were skipped (duplicates) */
1017
+ skipped: number;
1018
+ }
1019
+ /**
1020
+ * Request for lookup_project operation
1021
+ */
1022
+ export interface LookupProjectRequest {
1023
+ /** Project name to search for (partial match, case-insensitive) */
1024
+ name: string;
1025
+ }
1026
+ /**
1027
+ * Minimal project info returned by lookup_project
1028
+ */
1029
+ export interface LookupProjectResult {
1030
+ /** Project ID */
1031
+ id: string;
1032
+ /** Project name */
1033
+ name: string;
1034
+ /** Number of specifications in the project */
1035
+ specCount: number;
1036
+ }
1037
+ /**
1038
+ * Request for lookup_specification operation
1039
+ */
1040
+ export interface LookupSpecificationRequest {
1041
+ /** Specification title to search for (partial match, case-insensitive) */
1042
+ title: string;
1043
+ /** Optional project ID to narrow search */
1044
+ projectId?: string;
1045
+ }
1046
+ /**
1047
+ * Minimal specification info returned by lookup_specification
1048
+ */
1049
+ export interface LookupSpecificationResult {
1050
+ /** Specification ID */
1051
+ id: string;
1052
+ /** Specification title */
1053
+ title: string;
1054
+ /** Status */
1055
+ status: SpecificationStatus;
1056
+ /** Number of epics */
1057
+ epicCount: number;
1058
+ }
1059
+ /**
1060
+ * Request for lookup_epic operation
1061
+ */
1062
+ export interface LookupEpicRequest {
1063
+ /** Epic title to search for (partial match, case-insensitive) */
1064
+ title: string;
1065
+ /** Specification ID to search within */
1066
+ specificationId: string;
1067
+ }
1068
+ /**
1069
+ * Minimal epic info returned by lookup_epic
1070
+ */
1071
+ export interface LookupEpicResult {
1072
+ /** Epic ID */
1073
+ id: string;
1074
+ /** Epic title */
1075
+ title: string;
1076
+ /** Epic number */
1077
+ epicNumber: number;
1078
+ /** Status */
1079
+ status: EpicStatus;
1080
+ /** Number of tickets */
1081
+ ticketCount: number;
1082
+ }
1083
+ /**
1084
+ * Request for lookup_ticket operation
1085
+ */
1086
+ export interface LookupTicketRequest {
1087
+ /** Ticket title to search for (partial match, case-insensitive) */
1088
+ title: string;
1089
+ /** Optional epic ID to narrow search */
1090
+ epicId?: string;
1091
+ /** Optional specification ID to narrow search */
1092
+ specificationId?: string;
1093
+ }
1094
+ /**
1095
+ * Minimal ticket info returned by lookup_ticket
1096
+ */
1097
+ export interface LookupTicketResult {
1098
+ /** Ticket ID */
1099
+ id: string;
1100
+ /** Ticket title */
1101
+ title: string;
1102
+ /** Ticket number */
1103
+ ticketNumber: number;
1104
+ /** Status */
1105
+ status: TicketStatus;
1106
+ /** Epic ID */
1107
+ epicId: string;
1108
+ }
561
1109
  //# sourceMappingURL=index.d.ts.map