argustack 0.1.10 → 0.1.13

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 (142) hide show
  1. package/README.md +5 -2
  2. package/dist/adapters/board/index.d.ts +6 -0
  3. package/dist/adapters/board/index.d.ts.map +1 -0
  4. package/dist/adapters/board/index.js +6 -0
  5. package/dist/adapters/board/index.js.map +1 -0
  6. package/dist/adapters/board/mapper.d.ts +14 -0
  7. package/dist/adapters/board/mapper.d.ts.map +1 -0
  8. package/dist/adapters/board/mapper.js +25 -0
  9. package/dist/adapters/board/mapper.js.map +1 -0
  10. package/dist/adapters/board/md-parser.d.ts +16 -0
  11. package/dist/adapters/board/md-parser.d.ts.map +1 -0
  12. package/dist/adapters/board/md-parser.js +44 -0
  13. package/dist/adapters/board/md-parser.js.map +1 -0
  14. package/dist/adapters/board/skill-discovery.d.ts +8 -0
  15. package/dist/adapters/board/skill-discovery.d.ts.map +1 -0
  16. package/dist/adapters/board/skill-discovery.js +60 -0
  17. package/dist/adapters/board/skill-discovery.js.map +1 -0
  18. package/dist/adapters/board/skill-runner.d.ts +10 -0
  19. package/dist/adapters/board/skill-runner.d.ts.map +1 -0
  20. package/dist/adapters/board/skill-runner.js +65 -0
  21. package/dist/adapters/board/skill-runner.js.map +1 -0
  22. package/dist/adapters/board/store.d.ts +21 -0
  23. package/dist/adapters/board/store.d.ts.map +1 -0
  24. package/dist/adapters/board/store.js +176 -0
  25. package/dist/adapters/board/store.js.map +1 -0
  26. package/dist/adapters/postgres/storage.d.ts +2 -1
  27. package/dist/adapters/postgres/storage.d.ts.map +1 -1
  28. package/dist/adapters/postgres/storage.js +55 -0
  29. package/dist/adapters/postgres/storage.js.map +1 -1
  30. package/dist/board/assets/index-Bnh8GW_4.css +1 -0
  31. package/dist/board/assets/index-CEXc5QXH.js +68 -0
  32. package/dist/board/favicon.png +0 -0
  33. package/dist/board/index.html +14 -0
  34. package/dist/cli/board-server.d.ts +2 -0
  35. package/dist/cli/board-server.d.ts.map +1 -0
  36. package/dist/cli/board-server.js +124 -0
  37. package/dist/cli/board-server.js.map +1 -0
  38. package/dist/cli/board.d.ts +3 -0
  39. package/dist/cli/board.d.ts.map +1 -0
  40. package/dist/cli/board.js +26 -0
  41. package/dist/cli/board.js.map +1 -0
  42. package/dist/cli/index.js +9 -5
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/cli/init/generators.d.ts +2 -2
  45. package/dist/cli/init/generators.d.ts.map +1 -1
  46. package/dist/cli/init/generators.js +14 -12
  47. package/dist/cli/init/generators.js.map +1 -1
  48. package/dist/cli/init/index.d.ts +10 -0
  49. package/dist/cli/init/index.d.ts.map +1 -1
  50. package/dist/cli/init/index.js +205 -72
  51. package/dist/cli/init/index.js.map +1 -1
  52. package/dist/cli/init/setup-db.d.ts.map +1 -1
  53. package/dist/cli/init/setup-db.js +5 -3
  54. package/dist/cli/init/setup-db.js.map +1 -1
  55. package/dist/cli/init/setup-git.d.ts.map +1 -1
  56. package/dist/cli/init/setup-git.js +10 -4
  57. package/dist/cli/init/setup-git.js.map +1 -1
  58. package/dist/cli/init/setup-github.js +5 -5
  59. package/dist/cli/init/setup-github.js.map +1 -1
  60. package/dist/cli/init/setup-jira.d.ts.map +1 -1
  61. package/dist/cli/init/setup-jira.js +5 -3
  62. package/dist/cli/init/setup-jira.js.map +1 -1
  63. package/dist/cli/init/types.d.ts +9 -1
  64. package/dist/cli/init/types.d.ts.map +1 -1
  65. package/dist/cli/init/types.js +54 -0
  66. package/dist/cli/init/types.js.map +1 -1
  67. package/dist/cli/mcp-install.d.ts +9 -0
  68. package/dist/cli/mcp-install.d.ts.map +1 -1
  69. package/dist/cli/mcp-install.js +3 -3
  70. package/dist/cli/mcp-install.js.map +1 -1
  71. package/dist/cli/sync.d.ts.map +1 -1
  72. package/dist/cli/sync.js +2 -1
  73. package/dist/cli/sync.js.map +1 -1
  74. package/dist/core/board/board-column.value-object.d.ts +14 -0
  75. package/dist/core/board/board-column.value-object.d.ts.map +1 -0
  76. package/dist/core/board/board-column.value-object.js +36 -0
  77. package/dist/core/board/board-column.value-object.js.map +1 -0
  78. package/dist/core/board/board-task.entity.d.ts +20 -0
  79. package/dist/core/board/board-task.entity.d.ts.map +1 -0
  80. package/dist/core/board/board-task.entity.js +51 -0
  81. package/dist/core/board/board-task.entity.js.map +1 -0
  82. package/dist/core/board/index.d.ts +6 -0
  83. package/dist/core/board/index.d.ts.map +1 -0
  84. package/dist/core/board/index.js +6 -0
  85. package/dist/core/board/index.js.map +1 -0
  86. package/dist/core/board/pipeline.value-object.d.ts +22 -0
  87. package/dist/core/board/pipeline.value-object.d.ts.map +1 -0
  88. package/dist/core/board/pipeline.value-object.js +50 -0
  89. package/dist/core/board/pipeline.value-object.js.map +1 -0
  90. package/dist/core/board/skill-execution.entity.d.ts +18 -0
  91. package/dist/core/board/skill-execution.entity.d.ts.map +1 -0
  92. package/dist/core/board/skill-execution.entity.js +57 -0
  93. package/dist/core/board/skill-execution.entity.js.map +1 -0
  94. package/dist/core/board/task-title.value-object.d.ts +7 -0
  95. package/dist/core/board/task-title.value-object.d.ts.map +1 -0
  96. package/dist/core/board/task-title.value-object.js +20 -0
  97. package/dist/core/board/task-title.value-object.js.map +1 -0
  98. package/dist/core/ports/board-store.d.ts +15 -0
  99. package/dist/core/ports/board-store.d.ts.map +1 -0
  100. package/dist/core/ports/board-store.js +2 -0
  101. package/dist/core/ports/board-store.js.map +1 -0
  102. package/dist/core/ports/skill-runner.d.ts +6 -0
  103. package/dist/core/ports/skill-runner.d.ts.map +1 -0
  104. package/dist/core/ports/skill-runner.js +2 -0
  105. package/dist/core/ports/skill-runner.js.map +1 -0
  106. package/dist/core/ports/storage.d.ts +9 -1
  107. package/dist/core/ports/storage.d.ts.map +1 -1
  108. package/dist/core/types/board.d.ts +21 -0
  109. package/dist/core/types/board.d.ts.map +1 -0
  110. package/dist/core/types/board.js +2 -0
  111. package/dist/core/types/board.js.map +1 -0
  112. package/dist/core/types/config.d.ts +2 -0
  113. package/dist/core/types/config.d.ts.map +1 -1
  114. package/dist/core/types/config.js.map +1 -1
  115. package/dist/core/types/index.d.ts +1 -1
  116. package/dist/core/types/index.d.ts.map +1 -1
  117. package/dist/core/types/index.js.map +1 -1
  118. package/dist/core/types/issue.d.ts +5 -0
  119. package/dist/core/types/issue.d.ts.map +1 -1
  120. package/dist/mcp/helpers.d.ts +18 -1
  121. package/dist/mcp/helpers.d.ts.map +1 -1
  122. package/dist/mcp/helpers.js +92 -0
  123. package/dist/mcp/helpers.js.map +1 -1
  124. package/dist/mcp/tools/search.d.ts.map +1 -1
  125. package/dist/mcp/tools/search.js +17 -20
  126. package/dist/mcp/tools/search.js.map +1 -1
  127. package/dist/mcp/tools/workspace.d.ts.map +1 -1
  128. package/dist/mcp/tools/workspace.js +35 -2
  129. package/dist/mcp/tools/workspace.js.map +1 -1
  130. package/dist/use-cases/move-task.d.ts +18 -0
  131. package/dist/use-cases/move-task.d.ts.map +1 -0
  132. package/dist/use-cases/move-task.js +45 -0
  133. package/dist/use-cases/move-task.js.map +1 -0
  134. package/dist/use-cases/sync-board.d.ts +13 -0
  135. package/dist/use-cases/sync-board.d.ts.map +1 -0
  136. package/dist/use-cases/sync-board.js +20 -0
  137. package/dist/use-cases/sync-board.js.map +1 -0
  138. package/dist/workspace/config.d.ts +1 -1
  139. package/dist/workspace/config.d.ts.map +1 -1
  140. package/dist/workspace/config.js +2 -1
  141. package/dist/workspace/config.js.map +1 -1
  142. package/package.json +13 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-execution.entity.d.ts","sourceRoot":"","sources":["../../../src/core/board/skill-execution.entity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElF,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,OAAO;IAUP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB;IAI7D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB;IAOjD,QAAQ,IAAI,oBAAoB;IAQhC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB;IASzC,SAAS,IAAI,OAAO;IAIpB,MAAM,IAAI,kBAAkB;CAW7B"}
@@ -0,0 +1,57 @@
1
+ export class SkillExecutionEntity {
2
+ id;
3
+ taskId;
4
+ skillName;
5
+ status;
6
+ output;
7
+ startedAt;
8
+ finishedAt;
9
+ constructor(data) {
10
+ this.id = data.id;
11
+ this.taskId = data.taskId;
12
+ this.skillName = data.skillName;
13
+ this.status = data.status;
14
+ this.output = data.output;
15
+ this.startedAt = data.startedAt;
16
+ this.finishedAt = data.finishedAt ?? null;
17
+ }
18
+ static create(data) {
19
+ return new SkillExecutionEntity(data);
20
+ }
21
+ appendOutput(chunk) {
22
+ return new SkillExecutionEntity({
23
+ ...this.toData(),
24
+ output: this.output + chunk,
25
+ });
26
+ }
27
+ complete() {
28
+ return new SkillExecutionEntity({
29
+ ...this.toData(),
30
+ status: 'done',
31
+ finishedAt: new Date().toISOString(),
32
+ });
33
+ }
34
+ fail(error) {
35
+ return new SkillExecutionEntity({
36
+ ...this.toData(),
37
+ status: 'error',
38
+ output: this.output + '\n' + error,
39
+ finishedAt: new Date().toISOString(),
40
+ });
41
+ }
42
+ isRunning() {
43
+ return this.status === 'running';
44
+ }
45
+ toData() {
46
+ return {
47
+ id: this.id,
48
+ taskId: this.taskId,
49
+ skillName: this.skillName,
50
+ status: this.status,
51
+ output: this.output,
52
+ startedAt: this.startedAt,
53
+ finishedAt: this.finishedAt,
54
+ };
55
+ }
56
+ }
57
+ //# sourceMappingURL=skill-execution.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-execution.entity.js","sourceRoot":"","sources":["../../../src/core/board/skill-execution.entity.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAoB;IACtB,EAAE,CAAS;IACX,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,MAAM,CAAuB;IAC7B,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,UAAU,CAAgB;IAEnC,YAAoB,IAAwB;QAC1C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAwB;QACpC,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,IAAI,oBAAoB,CAAC;YAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,oBAAoB,CAAC;YAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,OAAO,IAAI,oBAAoB,CAAC;YAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK;YAClC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACnC,CAAC;IAED,MAAM;QACJ,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export declare class TaskTitle {
2
+ readonly value: string;
3
+ constructor(raw: string);
4
+ equals(other: TaskTitle): boolean;
5
+ toString(): string;
6
+ }
7
+ //# sourceMappingURL=task-title.value-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-title.value-object.d.ts","sourceRoot":"","sources":["../../../src/core/board/task-title.value-object.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,GAAG,EAAE,MAAM;IAUvB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAIjC,QAAQ,IAAI,MAAM;CAGnB"}
@@ -0,0 +1,20 @@
1
+ const MAX_LENGTH = 200;
2
+ export class TaskTitle {
3
+ value;
4
+ constructor(raw) {
5
+ const trimmed = raw.trim();
6
+ if (!trimmed) {
7
+ throw new Error('Task title cannot be empty');
8
+ }
9
+ this.value = trimmed.length > MAX_LENGTH
10
+ ? trimmed.slice(0, MAX_LENGTH)
11
+ : trimmed;
12
+ }
13
+ equals(other) {
14
+ return this.value === other.value;
15
+ }
16
+ toString() {
17
+ return this.value;
18
+ }
19
+ }
20
+ //# sourceMappingURL=task-title.value-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-title.value-object.js","sourceRoot":"","sources":["../../../src/core/board/task-title.value-object.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,MAAM,OAAO,SAAS;IACX,KAAK,CAAS;IAEvB,YAAY,GAAW;QACrB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU;YACtC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAgB;QACrB,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { BoardTaskData } from '../types/board.js';
2
+ import type { PipelineConfig } from '../board/pipeline.value-object.js';
3
+ export interface IBoardStore {
4
+ initialize(): Promise<void>;
5
+ getAllTasks(): Promise<BoardTaskData[]>;
6
+ getTasksByColumn(column: string): Promise<BoardTaskData[]>;
7
+ createTask(task: Omit<BoardTaskData, 'id'>): Promise<BoardTaskData>;
8
+ updateTask(id: string, fields: Partial<BoardTaskData>): Promise<void>;
9
+ deleteTask(id: string): Promise<void>;
10
+ syncFromFiles(tasksDir: string): Promise<void>;
11
+ loadPipeline(): Promise<PipelineConfig>;
12
+ savePipeline(config: PipelineConfig): Promise<void>;
13
+ close(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=board-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-store.d.ts","sourceRoot":"","sources":["../../../src/core/ports/board-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACxC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3D,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACpE,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=board-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-store.js","sourceRoot":"","sources":["../../../src/core/ports/board-store.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export interface ISkillRunner {
2
+ execute(skillName: string, args: string[]): AsyncGenerator<string>;
3
+ isAvailable(): Promise<boolean>;
4
+ cancel(executionId: string): void;
5
+ }
6
+ //# sourceMappingURL=skill-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-runner.d.ts","sourceRoot":"","sources":["../../../src/core/ports/skill-runner.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skill-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-runner.js","sourceRoot":"","sources":["../../../src/core/ports/skill-runner.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import type { IssueBatch } from '../types/index.js';
1
+ import type { IssueBatch, HybridSearchResult } from '../types/index.js';
2
2
  import type { CommitBatch } from '../types/git.js';
3
3
  import type { GitHubBatch, Release } from '../types/github.js';
4
4
  import type { DbSchemaBatch } from '../types/database.js';
@@ -40,6 +40,14 @@ export interface IStorage {
40
40
  issueKey: string;
41
41
  similarity: number;
42
42
  }[]>;
43
+ /**
44
+ * Hybrid search — combines full-text (tsvector) and vector similarity (pgvector) using Reciprocal Rank Fusion.
45
+ * @param query - text query for full-text search
46
+ * @param vector - embedding vector for similarity search (null = text-only mode)
47
+ * @param limit - max results
48
+ * @param threshold - minimum similarity score for vector results (default 0.5)
49
+ */
50
+ hybridSearch(query: string, vector: number[] | null, limit: number, threshold?: number): Promise<HybridSearchResult[]>;
43
51
  /** Execute a raw SQL query with parameterized values */
44
52
  query(sql: string, params: unknown[]): Promise<QueryResult>;
45
53
  /** Save external database schema metadata (upsert logic) */
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/core/ports/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,mEAAmE;IACnE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,2DAA2D;IAC3D,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C,kEAAkE;IAClE,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,8EAA8E;IAC9E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE3D,yEAAyE;IACzE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE1D,6EAA6E;IAC7E,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,mCAAmC;IACnC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,+EAA+E;IAC/E,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE7D,sEAAsE;IACtE,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzD,oDAAoD;IACpD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,mFAAmF;IACnF,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IAEzH,wDAAwD;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE5D,4DAA4D;IAC5D,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3E,sEAAsE;IACtE,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/core/ports/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,mEAAmE;IACnE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,2DAA2D;IAC3D,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C,kEAAkE;IAClE,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,8EAA8E;IAC9E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE3D,yEAAyE;IACzE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE1D,6EAA6E;IAC7E,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,mCAAmC;IACnC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,+EAA+E;IAC/E,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE7D,sEAAsE;IACtE,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzD,oDAAoD;IACpD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,mFAAmF;IACnF,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IAEzH;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEvH,wDAAwD;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE5D,4DAA4D;IAC5D,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3E,sEAAsE;IACtE,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,iCAAiC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,21 @@
1
+ export type SkillExecutionStatus = 'running' | 'done' | 'error';
2
+ export interface BoardTaskData {
3
+ id: string;
4
+ title: string;
5
+ mdPath: string;
6
+ column: string;
7
+ jiraKey: string | null;
8
+ assignee: string | null;
9
+ createdAt: string;
10
+ updatedAt: string;
11
+ }
12
+ export interface SkillExecutionData {
13
+ id: string;
14
+ taskId: string;
15
+ skillName: string;
16
+ status: SkillExecutionStatus;
17
+ output: string;
18
+ startedAt: string;
19
+ finishedAt: string | null;
20
+ }
21
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../../src/core/types/board.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../../src/core/types/board.ts"],"names":[],"mappings":""}
@@ -10,6 +10,8 @@ export interface SourceConfig {
10
10
  }
11
11
  export interface WorkspaceConfig {
12
12
  version: 1;
13
+ /** Workspace name (directory name, kebab-case) */
14
+ name?: string;
13
15
  /** Which sources are configured */
14
16
  sources: Partial<Record<SourceType, SourceConfig>>;
15
17
  /** Order of sources (for analysis priority) */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IACnD,+CAA+C;IAC/C,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gDAAgD;AAChD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAyClF,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,UAAU,EAA2C,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IACnD,+CAA+C;IAC/C,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gDAAgD;AAChD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAyClF,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,UAAU,EAA2C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,gDAAgD;AAChD,MAAM,CAAC,MAAM,WAAW,GAA+D;IACrF,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,WAAW,EACT,4GAA4G;YAC5G,0GAA0G;YAC1G,4HAA4H;KAC/H;IACD,GAAG,EAAE;QACH,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,6FAA6F;YAC7F,uGAAuG;YACvG,4DAA4D;YAC5D,iGAAiG;YACjG,wEAAwE;KAC3E;IACD,MAAM,EAAE;QACN,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACT,8GAA8G;YAC9G,0EAA0E;YAC1E,8FAA8F;YAC9F,wEAAwE;KAC3E;IACD,GAAG,EAAE;QACH,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,+DAA+D;YAC/D,wEAAwE;YACxE,qEAAqE;YACrE,uDAAuD;KAC1D;IACD,EAAE,EAAE;QACF,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,gFAAgF;YAChF,iGAAiG;YACjG,sGAAsG;YACtG,2FAA2F;KAC9F;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/types/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,gDAAgD;AAChD,MAAM,CAAC,MAAM,WAAW,GAA+D;IACrF,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,WAAW,EACT,4GAA4G;YAC5G,0GAA0G;YAC1G,4HAA4H;KAC/H;IACD,GAAG,EAAE;QACH,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,6FAA6F;YAC7F,uGAAuG;YACvG,4DAA4D;YAC5D,iGAAiG;YACjG,wEAAwE;KAC3E;IACD,MAAM,EAAE;QACN,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACT,8GAA8G;YAC9G,0EAA0E;YAC1E,8FAA8F;YAC9F,wEAAwE;KAC3E;IACD,GAAG,EAAE;QACH,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,+DAA+D;YAC/D,wEAAwE;YACxE,qEAAqE;YACrE,uDAAuD;KAC1D;IACD,EAAE,EAAE;QACF,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,gFAAgF;YAChF,iGAAiG;YACjG,sGAAsG;YACtG,2FAA2F;KAC9F;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- export type { Issue, IssueComment, IssueChangelog, IssueWorklog, IssueLink, IssueBatch, } from './issue.js';
1
+ export type { Issue, IssueComment, IssueChangelog, IssueWorklog, IssueLink, IssueBatch, HybridSearchResult, } from './issue.js';
2
2
  export type { Project } from './project.js';
3
3
  export type { Commit, CommitFile, CommitIssueRef, CommitBatch, GitRef, } from './git.js';
4
4
  export type { PullRequest, PullRequestReview, PullRequestComment, PullRequestFile, PullRequestIssueRef, Release, GitHubBatch, } from './github.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,YAAY,EACV,MAAM,EACN,UAAU,EACV,cAAc,EACd,WAAW,EACX,MAAM,GACP,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,YAAY,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,UAAU,EACV,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,YAAY,EACV,MAAM,EACN,UAAU,EACV,cAAc,EACd,WAAW,EACX,MAAM,GACP,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,YAAY,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,aAAa,GACd,MAAM,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -76,4 +76,9 @@ export interface IssueBatch {
76
76
  worklogs: IssueWorklog[];
77
77
  links: IssueLink[];
78
78
  }
79
+ export interface HybridSearchResult {
80
+ issueKey: string;
81
+ score: number;
82
+ source: 'text' | 'semantic' | 'both';
83
+ }
79
84
  //# sourceMappingURL=issue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../src/core/types/issue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../src/core/types/issue.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { getEnabledSources } from '../workspace/config.js';
2
- import type { WorkspaceConfig } from '../core/types/index.js';
2
+ import type { WorkspaceConfig, SourceType } from '../core/types/index.js';
3
3
  import type { ISourceProvider } from '../core/ports/source-provider.js';
4
4
  import type { IStorage } from '../core/ports/storage.js';
5
5
  import type { ToolResponse } from './types.js';
@@ -11,7 +11,24 @@ export type WorkspaceResult = {
11
11
  ok: false;
12
12
  reason: string;
13
13
  };
14
+ export interface WorkspaceListItem {
15
+ name: string;
16
+ path: string;
17
+ sources: SourceType[];
18
+ active: boolean;
19
+ }
14
20
  export declare function loadWorkspace(): WorkspaceResult;
21
+ /**
22
+ * Switch to a different workspace by name.
23
+ * Closes current storage connection, updates env, reloads .env.
24
+ */
25
+ export declare function switchWorkspace(name: string): Promise<WorkspaceResult>;
26
+ /**
27
+ * Scan parent directory for sibling workspaces.
28
+ */
29
+ export declare function listSiblingWorkspaces(): WorkspaceListItem[];
30
+ export declare function setActiveStorage(storage: IStorage): void;
31
+ export declare function getActiveStorage(): IStorage | null;
15
32
  export declare function createAdapters(workspaceRoot: string): Promise<{
16
33
  source: ISourceProvider | null;
17
34
  storage: IStorage;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/mcp/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACnD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,wBAAgB,aAAa,IAAI,eAAe,CAoB/C;AAED,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC,CA2BD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAExD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKpD;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAc1C;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/mcp/helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACnD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAID,wBAAgB,aAAa,IAAI,eAAe,CAoB/C;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAuC5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CAkD3D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAExD;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,GAAG,IAAI,CAElD;AAED,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC,CA2BD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAExD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKpD;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAc1C;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,6 +1,9 @@
1
1
  import dotenv from 'dotenv';
2
+ import { readdirSync, existsSync, statSync } from 'node:fs';
3
+ import { join, dirname, basename } from 'node:path';
2
4
  import { findWorkspaceRoot } from '../workspace/resolver.js';
3
5
  import { readConfig, getEnabledSources } from '../workspace/config.js';
6
+ let activeStorage = null;
4
7
  export function loadWorkspace() {
5
8
  const envVar = process.env['ARGUSTACK_WORKSPACE'];
6
9
  const root = findWorkspaceRoot();
@@ -19,6 +22,95 @@ export function loadWorkspace() {
19
22
  }
20
23
  return { ok: true, root, config };
21
24
  }
25
+ /**
26
+ * Switch to a different workspace by name.
27
+ * Closes current storage connection, updates env, reloads .env.
28
+ */
29
+ export async function switchWorkspace(name) {
30
+ const currentRoot = process.env['ARGUSTACK_WORKSPACE'];
31
+ if (!currentRoot) {
32
+ return { ok: false, reason: 'No ARGUSTACK_WORKSPACE set. Cannot determine sibling workspaces.' };
33
+ }
34
+ const parentDir = dirname(currentRoot);
35
+ const targetDir = join(parentDir, name);
36
+ if (!existsSync(join(targetDir, '.argustack'))) {
37
+ const available = listSiblingWorkspaces();
38
+ const names = available.map((w) => w.name).join(', ');
39
+ return {
40
+ ok: false,
41
+ reason: `Workspace '${name}' not found. Available: ${names || 'none'}`,
42
+ };
43
+ }
44
+ if (activeStorage) {
45
+ try {
46
+ await activeStorage.close();
47
+ }
48
+ catch { /* ignore close errors */ }
49
+ activeStorage = null;
50
+ }
51
+ process.env['ARGUSTACK_WORKSPACE'] = targetDir;
52
+ const keysToRemove = Object.keys(process.env).filter((key) => key.startsWith('JIRA_') || key.startsWith('GIT_') || key.startsWith('GITHUB_') ||
53
+ key.startsWith('DB_') || key.startsWith('TARGET_DB_') || key.startsWith('CSV_') ||
54
+ key === 'OPENAI_API_KEY');
55
+ for (const key of keysToRemove) {
56
+ process.env[key] = undefined;
57
+ }
58
+ dotenv.config({ path: join(targetDir, '.env'), override: true });
59
+ return loadWorkspace();
60
+ }
61
+ /**
62
+ * Scan parent directory for sibling workspaces.
63
+ */
64
+ export function listSiblingWorkspaces() {
65
+ const currentRoot = process.env['ARGUSTACK_WORKSPACE'];
66
+ if (!currentRoot) {
67
+ return [];
68
+ }
69
+ const parentDir = dirname(currentRoot);
70
+ const currentName = basename(currentRoot);
71
+ let entries;
72
+ try {
73
+ entries = readdirSync(parentDir);
74
+ }
75
+ catch {
76
+ return [];
77
+ }
78
+ const workspaces = [];
79
+ for (const name of entries) {
80
+ if (name.startsWith('.')) {
81
+ continue;
82
+ }
83
+ const subdir = join(parentDir, name);
84
+ try {
85
+ if (!statSync(subdir).isDirectory()) {
86
+ continue;
87
+ }
88
+ }
89
+ catch {
90
+ continue;
91
+ }
92
+ if (!existsSync(join(subdir, '.argustack'))) {
93
+ continue;
94
+ }
95
+ const config = readConfig(subdir);
96
+ if (!config) {
97
+ continue;
98
+ }
99
+ workspaces.push({
100
+ name: config.name ?? name,
101
+ path: subdir,
102
+ sources: getEnabledSources(config),
103
+ active: name === currentName,
104
+ });
105
+ }
106
+ return workspaces;
107
+ }
108
+ export function setActiveStorage(storage) {
109
+ activeStorage = storage;
110
+ }
111
+ export function getActiveStorage() {
112
+ return activeStorage;
113
+ }
22
114
  export async function createAdapters(workspaceRoot) {
23
115
  dotenv.config({ path: `${workspaceRoot}/.env`, quiet: true });
24
116
  const { JIRA_URL, JIRA_EMAIL, JIRA_API_TOKEN } = process.env;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/mcp/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/mcp/helpers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+E3D"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2E3D"}
@@ -1,12 +1,12 @@
1
1
  import { z } from 'zod/v4';
2
2
  import { loadWorkspace, createAdapters, textResponse, errorResponse, getErrorMessage, str, } from '../helpers.js';
3
3
  export function registerSearchTools(server) {
4
- server.registerTool('semantic_search', {
5
- description: 'Semantic vector similarity search across issues. Uses AI embeddings to find issues by meaning, not just keywords. Requires embeddings generated first ("argustack embed").',
4
+ server.registerTool('hybrid_search', {
5
+ description: 'Hybrid search across issues combining full-text keyword matching and semantic vector similarity using Reciprocal Rank Fusion. Works without embeddings (text-only fallback). For best results, run "argustack embed" first.',
6
6
  inputSchema: {
7
7
  query: z.string().describe('Natural language search query (e.g. "authentication timeout problems")'),
8
8
  limit: z.number().optional().describe('Max results (default: 10)'),
9
- threshold: z.number().optional().describe('Minimum similarity score 0-1 (default: 0.5)'),
9
+ threshold: z.number().optional().describe('Minimum similarity score 0-1 for vector results (default: 0.5)'),
10
10
  },
11
11
  }, async ({ query, limit, threshold }) => {
12
12
  const ws = loadWorkspace();
@@ -15,23 +15,19 @@ export function registerSearchTools(server) {
15
15
  }
16
16
  const { storage } = await createAdapters(ws.root);
17
17
  try {
18
+ let queryVector = null;
18
19
  const apiKey = process.env['OPENAI_API_KEY'];
19
- if (!apiKey) {
20
- await storage.close();
21
- return errorResponse('OPENAI_API_KEY not configured. Add it to .env and run "argustack embed" first.');
22
- }
23
- const { OpenAIEmbeddingProvider } = await import('../../adapters/openai/index.js');
24
- const embeddingProvider = new OpenAIEmbeddingProvider({ apiKey });
25
- const vectors = await embeddingProvider.embed([query]);
26
- const queryVector = vectors[0];
27
- if (!queryVector) {
28
- await storage.close();
29
- return errorResponse('Failed to generate embedding for query.');
20
+ if (apiKey) {
21
+ const { OpenAIEmbeddingProvider } = await import('../../adapters/openai/index.js');
22
+ const embeddingProvider = new OpenAIEmbeddingProvider({ apiKey });
23
+ const vectors = await embeddingProvider.embed([query]);
24
+ queryVector = vectors[0] ?? null;
30
25
  }
31
- const results = await storage.semanticSearch(queryVector, limit ?? 10, threshold ?? 0.5);
26
+ const results = await storage.hybridSearch(query, queryVector, limit ?? 10, threshold ?? 0.5);
32
27
  if (results.length === 0) {
33
28
  await storage.close();
34
- return textResponse('No similar issues found. Make sure embeddings are generated ("argustack embed").');
29
+ const mode = queryVector ? 'hybrid (text + semantic)' : 'text-only';
30
+ return textResponse(`No issues found for "${query}" (${mode} search).`);
35
31
  }
36
32
  const issueKeys = results.map((r) => r.issueKey);
37
33
  const placeholders = issueKeys.map((_, i) => `$${String(i + 1)}`).join(',');
@@ -42,15 +38,16 @@ export function registerSearchTools(server) {
42
38
  const r = row;
43
39
  issueMap.set(r.issue_key, row);
44
40
  }
41
+ const mode = queryVector ? 'hybrid' : 'text-only';
45
42
  const lines = results.map((r) => {
46
43
  const issue = issueMap.get(r.issueKey);
47
- const sim = (r.similarity * 100).toFixed(1);
44
+ const scoreStr = (r.score * 100).toFixed(1);
48
45
  if (issue) {
49
- return `${r.issueKey} [${str(issue.status)}] ${str(issue.summary)} (${sim}% match)`;
46
+ return `${r.issueKey} [${str(issue.status)}] ${str(issue.summary)} (${scoreStr}% | ${r.source})`;
50
47
  }
51
- return `${r.issueKey} (${sim}% match)`;
48
+ return `${r.issueKey} (${scoreStr}% | ${r.source})`;
52
49
  });
53
- return textResponse([`Semantic search: "${query}" (${String(results.length)} results):`, '', ...lines].join('\n'));
50
+ return textResponse([`Search: "${query}" (${mode}, ${String(results.length)} results):`, '', ...lines].join('\n'));
54
51
  }
55
52
  catch (err) {
56
53
  await storage.close();
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,GAAG,GACJ,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,WAAW,EAAE,4KAA4K;QACzL,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;YACpG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;SACzF;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QACpC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,aAAa,CAAC,wBAAwB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,aAAa,CAAC,gFAAgF,CAAC,CAAC;YACzG,CAAC;YAED,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACnF,MAAM,iBAAiB,GAAG,IAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YAElE,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAE/B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,aAAa,CAAC,yCAAyC,CAAC,CAAC;YAClE,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,CAC1C,WAAW,EACX,KAAK,IAAI,EAAE,EACX,SAAS,IAAI,GAAG,CACjB,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,YAAY,CAAC,kFAAkF,CAAC,CAAC;YAC1G,CAAC;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5E,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CACtC,2FAA2F,YAAY,GAAG,EAC1G,SAAS,CACV,CAAC;YAEF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YAEtB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAC;YAC5D,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,CAAC,GAAG,GAA4B,CAAC;gBACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAyB,CAAC;gBAC/D,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC;gBACtF,CAAC;gBACD,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,GAAG,UAAU,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,OAAO,YAAY,CAAC,CAAC,qBAAqB,KAAK,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,aAAa,CAAC,kBAAkB,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,GAAG,GACJ,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EAAE,6NAA6N;QAC1O,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;YACpG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;SAC5G;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QACpC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,aAAa,CAAC,wBAAwB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,IAAI,WAAW,GAAoB,IAAI,CAAC;YAExC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;gBACnF,MAAM,iBAAiB,GAAG,IAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAClE,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvD,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACnC,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CACxC,KAAK,EACL,WAAW,EACX,KAAK,IAAI,EAAE,EACX,SAAS,IAAI,GAAG,CACjB,CAAC;YAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,WAAW,CAAC;gBACpE,OAAO,YAAY,CAAC,wBAAwB,KAAK,MAAM,IAAI,WAAW,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5E,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CACtC,2FAA2F,YAAY,GAAG,EAC1G,SAAS,CACV,CAAC;YAEF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YAEtB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAC;YAC5D,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,CAAC,GAAG,GAA4B,CAAC;gBACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAyB,CAAC;gBAC/D,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;gBACnG,CAAC;gBACD,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;YACtD,CAAC,CAAC,CAAC;YAEH,OAAO,YAAY,CAAC,CAAC,YAAY,KAAK,MAAM,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,aAAa,CAAC,kBAAkB,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgH9D"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmK9D"}
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod/v4';
2
2
  import { SOURCE_META } from '../../core/types/index.js';
3
- import { loadWorkspace, createAdapters, getEnabledSources, textResponse, errorResponse, getErrorMessage, } from '../helpers.js';
3
+ import { loadWorkspace, createAdapters, getEnabledSources, switchWorkspace, listSiblingWorkspaces, textResponse, errorResponse, getErrorMessage, } from '../helpers.js';
4
4
  export function registerWorkspaceTools(server) {
5
5
  server.registerTool('workspace_info', {
6
6
  description: 'Get information about the current Argustack workspace — configured sources, paths, database connection',
@@ -11,8 +11,11 @@ export function registerWorkspaceTools(server) {
11
11
  }
12
12
  const enabled = getEnabledSources(ws.config);
13
13
  const sourceInfo = enabled.map((s) => ` • ${SOURCE_META[s].label}: ${SOURCE_META[s].description}`);
14
+ const nameLine = ws.config.name
15
+ ? `Argustack Workspace: ${ws.config.name} (active)`
16
+ : 'Argustack Workspace (active)';
14
17
  const text = [
15
- `Argustack Workspace`,
18
+ nameLine,
16
19
  `Root: ${ws.root}`,
17
20
  `Created: ${ws.config.createdAt}`,
18
21
  ``,
@@ -43,6 +46,36 @@ export function registerWorkspaceTools(server) {
43
46
  return errorResponse(`Failed to list projects: ${getErrorMessage(err)}`);
44
47
  }
45
48
  });
49
+ server.registerTool('switch_workspace', {
50
+ description: 'Switch to a different Argustack workspace. All subsequent queries will use the new workspace database. Use list_workspaces to see available workspaces.',
51
+ inputSchema: {
52
+ name: z.string().describe('Workspace name to switch to (e.g. "beautybooking", "paperlink")'),
53
+ },
54
+ }, async ({ name }) => {
55
+ const result = await switchWorkspace(name);
56
+ if (!result.ok) {
57
+ return errorResponse(result.reason);
58
+ }
59
+ const enabled = getEnabledSources(result.config);
60
+ const sources = enabled.map((s) => SOURCE_META[s].label).join(', ') || 'none';
61
+ return textResponse(`Switched to workspace: ${result.config.name ?? name}\n` +
62
+ `Root: ${result.root}\n` +
63
+ `Sources: ${sources}`);
64
+ });
65
+ server.registerTool('list_workspaces', {
66
+ description: 'List all available Argustack workspaces. Shows which workspace is currently active.',
67
+ }, () => {
68
+ const workspaces = listSiblingWorkspaces();
69
+ if (workspaces.length === 0) {
70
+ return textResponse('No workspaces found. Run `argustack init <name>` to create one.');
71
+ }
72
+ const lines = workspaces.map((ws) => {
73
+ const sources = ws.sources.map((s) => SOURCE_META[s].label).join(', ') || 'no sources';
74
+ const marker = ws.active ? ' (active)' : '';
75
+ return ` ${ws.active ? '●' : '○'} ${ws.name}${marker} — ${sources}`;
76
+ });
77
+ return textResponse(`Workspaces (${String(workspaces.length)}):\n${lines.join('\n')}`);
78
+ });
46
79
  server.registerTool('pull_jira', {
47
80
  description: 'Pull all issues from Jira into Argustack PostgreSQL database. Supports incremental pulls (only new/updated issues). Use project parameter to pull a specific project.',
48
81
  inputSchema: {