@jait/gateway 0.1.306 → 0.1.308

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 (94) hide show
  1. package/dist/db/migrations.d.ts.map +1 -1
  2. package/dist/db/migrations.js +11 -0
  3. package/dist/db/migrations.js.map +1 -1
  4. package/dist/db/schema.d.ts +19 -0
  5. package/dist/db/schema.d.ts.map +1 -1
  6. package/dist/db/schema.js +1 -0
  7. package/dist/db/schema.js.map +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +9 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/routes/architecture.d.ts.map +1 -1
  12. package/dist/routes/architecture.js +3 -1
  13. package/dist/routes/architecture.js.map +1 -1
  14. package/dist/routes/chat.d.ts.map +1 -1
  15. package/dist/routes/chat.js +83 -8
  16. package/dist/routes/chat.js.map +1 -1
  17. package/dist/routes/threads.d.ts.map +1 -1
  18. package/dist/routes/threads.js +202 -9
  19. package/dist/routes/threads.js.map +1 -1
  20. package/dist/services/architecture-diagrams.d.ts +9 -2
  21. package/dist/services/architecture-diagrams.d.ts.map +1 -1
  22. package/dist/services/architecture-diagrams.js +52 -3
  23. package/dist/services/architecture-diagrams.js.map +1 -1
  24. package/dist/services/session-state.d.ts +4 -0
  25. package/dist/services/session-state.d.ts.map +1 -1
  26. package/dist/services/session-state.js +17 -0
  27. package/dist/services/session-state.js.map +1 -1
  28. package/dist/services/thread-review-sync.d.ts +32 -0
  29. package/dist/services/thread-review-sync.d.ts.map +1 -0
  30. package/dist/services/thread-review-sync.js +193 -0
  31. package/dist/services/thread-review-sync.js.map +1 -0
  32. package/dist/tools/agent-loop.d.ts +11 -0
  33. package/dist/tools/agent-loop.d.ts.map +1 -1
  34. package/dist/tools/agent-loop.js +8 -1
  35. package/dist/tools/agent-loop.js.map +1 -1
  36. package/dist/tools/architecture-tools.d.ts.map +1 -1
  37. package/dist/tools/architecture-tools.js +13 -4
  38. package/dist/tools/architecture-tools.js.map +1 -1
  39. package/package.json +2 -2
  40. package/web-dist/assets/{_basePickBy-Bd0d7LbW.js → _basePickBy-C50TJu87.js} +1 -1
  41. package/web-dist/assets/{_baseUniq-D9ej0yrY.js → _baseUniq-Dkxp69pR.js} +1 -1
  42. package/web-dist/assets/{arc-CnnCJ37c.js → arc-BFdsqhz2.js} +1 -1
  43. package/web-dist/assets/{architectureDiagram-2XIMDMQ5-C_CmTfcL.js → architectureDiagram-2XIMDMQ5-Bv0HLwZv.js} +1 -1
  44. package/web-dist/assets/{blockDiagram-WCTKOSBZ-vQLEMQW0.js → blockDiagram-WCTKOSBZ-DRn0VIki.js} +1 -1
  45. package/web-dist/assets/{c4Diagram-IC4MRINW-xjtMC7cU.js → c4Diagram-IC4MRINW-Ct0hch7Y.js} +1 -1
  46. package/web-dist/assets/channel-BkG-_CP9.js +1 -0
  47. package/web-dist/assets/{chunk-4BX2VUAB-Dsp4EtQu.js → chunk-4BX2VUAB-B41YzmMk.js} +1 -1
  48. package/web-dist/assets/{chunk-55IACEB6-ZsFMKY7P.js → chunk-55IACEB6-Bz-NAWPT.js} +1 -1
  49. package/web-dist/assets/{chunk-FMBD7UC4-BrX27Oze.js → chunk-FMBD7UC4-CMAvoooR.js} +1 -1
  50. package/web-dist/assets/{chunk-JSJVCQXG-C1XEMGe8.js → chunk-JSJVCQXG-CH8pQUdO.js} +1 -1
  51. package/web-dist/assets/{chunk-KX2RTZJC-C-83Dryw.js → chunk-KX2RTZJC-CkXNseIJ.js} +1 -1
  52. package/web-dist/assets/{chunk-NQ4KR5QH-RyDfqeSZ.js → chunk-NQ4KR5QH-BNJUej9o.js} +1 -1
  53. package/web-dist/assets/{chunk-QZHKN3VN-BSvPh4Dg.js → chunk-QZHKN3VN-CTfYqYul.js} +1 -1
  54. package/web-dist/assets/{chunk-WL4C6EOR-C-2aE7oW.js → chunk-WL4C6EOR-CacxNYLi.js} +1 -1
  55. package/web-dist/assets/classDiagram-VBA2DB6C-UMRAF5aV.js +1 -0
  56. package/web-dist/assets/classDiagram-v2-RAHNMMFH-UMRAF5aV.js +1 -0
  57. package/web-dist/assets/clone-CSyuTo_y.js +1 -0
  58. package/web-dist/assets/{cose-bilkent-S5V4N54A-Rc5Ql4lR.js → cose-bilkent-S5V4N54A-Cj9pruE5.js} +1 -1
  59. package/web-dist/assets/{dagre-KLK3FWXG-C4JFjhkS.js → dagre-KLK3FWXG-BFfxcL0o.js} +1 -1
  60. package/web-dist/assets/{diagram-E7M64L7V-CoWogpc-.js → diagram-E7M64L7V-D4T0x3Jf.js} +1 -1
  61. package/web-dist/assets/{diagram-IFDJBPK2-DvgVVaXC.js → diagram-IFDJBPK2-BNVr2BYd.js} +1 -1
  62. package/web-dist/assets/{diagram-P4PSJMXO-DVnYd3Qx.js → diagram-P4PSJMXO-NJ81wXJH.js} +1 -1
  63. package/web-dist/assets/{erDiagram-INFDFZHY-n1RFQAoX.js → erDiagram-INFDFZHY-WP-j8slf.js} +1 -1
  64. package/web-dist/assets/{flowDiagram-PKNHOUZH-CKQtuu7g.js → flowDiagram-PKNHOUZH-x_7T0I_H.js} +1 -1
  65. package/web-dist/assets/{ganttDiagram-A5KZAMGK-B6fINj4L.js → ganttDiagram-A5KZAMGK-BzWssuuT.js} +1 -1
  66. package/web-dist/assets/{gitGraphDiagram-K3NZZRJ6-B5dBEdoG.js → gitGraphDiagram-K3NZZRJ6-D483hjl-.js} +1 -1
  67. package/web-dist/assets/{graph-zJMleAQ2.js → graph-C3CG1op9.js} +1 -1
  68. package/web-dist/assets/index-BKqoXY81.css +32 -0
  69. package/web-dist/assets/{index-CJ2vDRp9.js → index-JGTEb5jI.js} +393 -393
  70. package/web-dist/assets/{infoDiagram-LFFYTUFH-D3drBKcQ.js → infoDiagram-LFFYTUFH-bg8-brTn.js} +1 -1
  71. package/web-dist/assets/{ishikawaDiagram-PHBUUO56-DSTMbqxH.js → ishikawaDiagram-PHBUUO56-Bzwqkx9V.js} +1 -1
  72. package/web-dist/assets/{journeyDiagram-4ABVD52K-CviCv4pN.js → journeyDiagram-4ABVD52K-BJMImWb1.js} +1 -1
  73. package/web-dist/assets/{kanban-definition-K7BYSVSG-Bf5xi9mo.js → kanban-definition-K7BYSVSG-imJTtu9v.js} +1 -1
  74. package/web-dist/assets/{layout-XvbQFRcn.js → layout-Bft-FsbV.js} +1 -1
  75. package/web-dist/assets/{linear-BP61tt1x.js → linear-BpsJclE5.js} +1 -1
  76. package/web-dist/assets/{mindmap-definition-YRQLILUH-Bhtev91l.js → mindmap-definition-YRQLILUH-BSfKvzBT.js} +1 -1
  77. package/web-dist/assets/{pieDiagram-SKSYHLDU-DeWV692i.js → pieDiagram-SKSYHLDU-BNUiv1kJ.js} +1 -1
  78. package/web-dist/assets/{quadrantDiagram-337W2JSQ-CvI0T4M9.js → quadrantDiagram-337W2JSQ-byLmHnvc.js} +1 -1
  79. package/web-dist/assets/{requirementDiagram-Z7DCOOCP-D1f7XpRS.js → requirementDiagram-Z7DCOOCP-CyEZ4tb9.js} +1 -1
  80. package/web-dist/assets/{sankeyDiagram-WA2Y5GQK-BI9YrfDo.js → sankeyDiagram-WA2Y5GQK-CqHS3r9F.js} +1 -1
  81. package/web-dist/assets/{sequenceDiagram-2WXFIKYE-BJ8Fems8.js → sequenceDiagram-2WXFIKYE-C5ZEYXt3.js} +1 -1
  82. package/web-dist/assets/{stateDiagram-RAJIS63D-BFdakHTh.js → stateDiagram-RAJIS63D-DNBdSiEo.js} +1 -1
  83. package/web-dist/assets/stateDiagram-v2-FVOUBMTO-DBKzWlvT.js +1 -0
  84. package/web-dist/assets/{timeline-definition-YZTLITO2-RZcBC8yR.js → timeline-definition-YZTLITO2-BdXnse5u.js} +1 -1
  85. package/web-dist/assets/{treemap-KZPCXAKY-uXz72-9v.js → treemap-KZPCXAKY-BxJj7Y-N.js} +1 -1
  86. package/web-dist/assets/{vennDiagram-LZ73GAT5-DO81DI2A.js → vennDiagram-LZ73GAT5-BrLwcBfE.js} +1 -1
  87. package/web-dist/assets/{xychartDiagram-JWTSCODW-c9kMesJc.js → xychartDiagram-JWTSCODW-Ds79lLes.js} +1 -1
  88. package/web-dist/index.html +2 -2
  89. package/web-dist/assets/channel-DtyeZ0Zd.js +0 -1
  90. package/web-dist/assets/classDiagram-VBA2DB6C-Cu8dUioU.js +0 -1
  91. package/web-dist/assets/classDiagram-v2-RAHNMMFH-Cu8dUioU.js +0 -1
  92. package/web-dist/assets/clone-PvyFZlsW.js +0 -1
  93. package/web-dist/assets/index-Cm8Z3bSF.css +0 -32
  94. package/web-dist/assets/stateDiagram-v2-FVOUBMTO-DD8TbEnA.js +0 -1
@@ -1,12 +1,17 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { dirname } from "node:path";
1
4
  import { and, desc, eq, isNull } from "drizzle-orm";
2
5
  import { architectureDiagrams } from "../db/schema.js";
3
6
  import { uuidv7 } from "../db/uuidv7.js";
7
+ import { PathGuard } from "../security/path-guard.js";
8
+ export const DEFAULT_ARCHITECTURE_DIAGRAM_FILE = "architecture.mmd";
4
9
  export class ArchitectureDiagramService {
5
10
  db;
6
11
  constructor(db) {
7
12
  this.db = db;
8
13
  }
9
- getByWorkspace(workspaceRoot, userId) {
14
+ getStoredRow(workspaceRoot, userId) {
10
15
  const normalizedRoot = workspaceRoot.trim();
11
16
  if (!normalizedRoot)
12
17
  return null;
@@ -23,15 +28,59 @@ export class ArchitectureDiagramService {
23
28
  .where(and(isNull(architectureDiagrams.userId), eq(architectureDiagrams.workspaceRoot, normalizedRoot)))
24
29
  .get() ?? null;
25
30
  }
26
- save(params) {
31
+ getFilePath(workspaceRoot) {
32
+ const normalizedRoot = workspaceRoot.trim();
33
+ if (!normalizedRoot)
34
+ throw new Error("workspaceRoot is required");
35
+ const guard = new PathGuard({ workspaceRoot: normalizedRoot });
36
+ return guard.validate(DEFAULT_ARCHITECTURE_DIAGRAM_FILE);
37
+ }
38
+ getByWorkspace(workspaceRoot, userId) {
39
+ const normalizedRoot = workspaceRoot.trim();
40
+ if (!normalizedRoot)
41
+ return null;
42
+ const filePath = this.getFilePath(normalizedRoot);
43
+ try {
44
+ const diagram = readFileSync(filePath, "utf8").trim();
45
+ if (diagram) {
46
+ const existing = this.getStoredRow(normalizedRoot, userId);
47
+ const now = new Date().toISOString();
48
+ return {
49
+ id: existing?.id ?? `file:${normalizedRoot}`,
50
+ userId: userId ?? existing?.userId ?? null,
51
+ workspaceRoot: normalizedRoot,
52
+ diagram,
53
+ createdAt: existing?.createdAt ?? now,
54
+ updatedAt: existing?.updatedAt ?? now,
55
+ filePath,
56
+ source: "file",
57
+ };
58
+ }
59
+ }
60
+ catch {
61
+ // Fall through to the legacy DB-backed value.
62
+ }
63
+ const existing = this.getStoredRow(normalizedRoot, userId);
64
+ if (!existing)
65
+ return null;
66
+ return {
67
+ ...existing,
68
+ filePath,
69
+ source: "database",
70
+ };
71
+ }
72
+ async save(params) {
27
73
  const workspaceRoot = params.workspaceRoot.trim();
28
74
  const diagram = params.diagram.trim();
29
75
  if (!workspaceRoot)
30
76
  throw new Error("workspaceRoot is required");
31
77
  if (!diagram)
32
78
  throw new Error("diagram is required");
79
+ const filePath = this.getFilePath(workspaceRoot);
80
+ await mkdir(dirname(filePath), { recursive: true });
81
+ await writeFile(filePath, `${diagram}\n`, "utf8");
33
82
  const now = new Date().toISOString();
34
- const existing = this.getByWorkspace(workspaceRoot, params.userId);
83
+ const existing = this.getStoredRow(workspaceRoot, params.userId);
35
84
  if (existing) {
36
85
  this.db
37
86
  .update(architectureDiagrams)
@@ -1 +1 @@
1
- {"version":3,"file":"architecture-diagrams.js","sourceRoot":"","sources":["../../src/services/architecture-diagrams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIzC,MAAM,OAAO,0BAA0B;IACR;IAA7B,YAA6B,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IAAG,CAAC;IAE3C,cAAc,CAAC,aAAqB,EAAE,MAAe;QACnD,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,EAAE;iBACX,MAAM,EAAE;iBACR,IAAI,CAAC,oBAAoB,CAAC;iBAC1B,KAAK,CAAC,GAAG,CACR,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,EAAE,CAAC,oBAAoB,CAAC,aAAa,EAAE,cAAc,CAAC,CACvD,CAAC;iBACD,GAAG,EAAE,IAAI,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,oBAAoB,CAAC;aAC1B,KAAK,CAAC,GAAG,CACR,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,EACnC,EAAE,CAAC,oBAAoB,CAAC,aAAa,EAAE,cAAc,CAAC,CACvD,CAAC;aACD,GAAG,EAAE,IAAI,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,MAAmE;QACtE,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAErD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,EAAE;iBACJ,MAAM,CAAC,oBAAoB,CAAC;iBAC5B,GAAG,CAAC;gBACH,OAAO;gBACP,SAAS,EAAE,GAAG;aACf,CAAC;iBACD,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;iBAC/C,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAE,CAAC;QAC5D,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,EAAE;aACJ,MAAM,CAAC,oBAAoB,CAAC;aAC5B,MAAM,CAAC;YACN,EAAE;YACF,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;YAC7B,aAAa;YACb,OAAO;YACP,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;aACD,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAE,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,MAAe;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,KAAK;iBACT,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;iBAC9C,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;iBAC7C,GAAG,EAAE,CAAC;QACX,CAAC;QACD,OAAO,KAAK;aACT,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;aAC1C,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;aAC7C,GAAG,EAAE,CAAC;IACX,CAAC;CACF"}
1
+ {"version":3,"file":"architecture-diagrams.js","sourceRoot":"","sources":["../../src/services/architecture-diagrams.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,10 @@ export declare class SessionStateService {
9
9
  * @returns Record mapping key → parsed JSON value (or null).
10
10
  */
11
11
  get(sessionId: string, keys?: string[]): Record<string, unknown>;
12
+ getByKey(key: string): Array<{
13
+ sessionId: string;
14
+ value: unknown;
15
+ }>;
12
16
  /**
13
17
  * Upsert one or more state entries for a session.
14
18
  * Send `null` as a value to delete that key.
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM;IAE9B;;;;;OAKG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA6BhE;;;OAGG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkDvD,+DAA+D;IAC/D,SAAS,CAAC,SAAS,EAAE,MAAM;CAM5B"}
1
+ {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,qBAAa,mBAAmB;IAClB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM;IAE9B;;;;;OAKG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA6BhE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAkBnE;;;OAGG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkDvD,+DAA+D;IAC/D,SAAS,CAAC,SAAS,EAAE,MAAM;CAM5B"}
@@ -40,6 +40,23 @@ export class SessionStateService {
40
40
  }
41
41
  return result;
42
42
  }
43
+ getByKey(key) {
44
+ const rows = this.db
45
+ .select()
46
+ .from(sessionState)
47
+ .where(eq(sessionState.key, key))
48
+ .all();
49
+ return rows.map((row) => {
50
+ let value = null;
51
+ try {
52
+ value = row.value ? JSON.parse(row.value) : null;
53
+ }
54
+ catch {
55
+ value = row.value;
56
+ }
57
+ return { sessionId: row.sessionId, value };
58
+ });
59
+ }
43
60
  /**
44
61
  * Upsert one or more state entries for a session.
45
62
  * Send `null` as a value to delete that key.
@@ -1 +1 @@
1
- {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../src/services/session-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { ThreadService } from "./threads.js";
2
+ import { GitService } from "./git.js";
3
+ import type { GitForge } from "./git-forge.js";
4
+ import type { WsControlPlane } from "../ws.js";
5
+ interface ThreadReviewSyncDeps {
6
+ threadService: ThreadService;
7
+ ws?: WsControlPlane;
8
+ gitService?: Pick<GitService, "getPreferredRemote" | "getRemoteUrl">;
9
+ resolveForge?: (remoteUrl: string) => GitForge | null;
10
+ log?: Pick<Console, "error">;
11
+ }
12
+ export declare class ThreadReviewSyncService {
13
+ private readonly deps;
14
+ private timer;
15
+ private running;
16
+ private readonly gitService;
17
+ private readonly resolveForge;
18
+ private readonly log;
19
+ constructor(deps: ThreadReviewSyncDeps);
20
+ start(intervalMs?: number): void;
21
+ stop(): void;
22
+ tick(): Promise<void>;
23
+ private isReviewSyncCandidate;
24
+ private syncThread;
25
+ private resolveRemoteContext;
26
+ private resolveRemoteUrlViaNode;
27
+ private findRemoteNodeForPath;
28
+ private buildPrStateSummary;
29
+ private broadcastThreadEvent;
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=thread-review-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-review-sync.d.ts","sourceRoot":"","sources":["../../src/services/thread-review-sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAA8C,MAAM,UAAU,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,UAAU,oBAAoB;IAC5B,aAAa,EAAE,aAAa,CAAC;IAC7B,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,GAAG,cAAc,CAAC,CAAC;IACrE,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;IACtD,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CAC9B;AAKD,qBAAa,uBAAuB;IAOtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0D;IACrF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyC;IACtE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;gBAEhB,IAAI,EAAE,oBAAoB;IASvD,KAAK,CAAC,UAAU,SAA2B,GAAG,IAAI;IAQlD,IAAI,IAAI,IAAI;IAMN,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,OAAO,CAAC,qBAAqB;YAWf,UAAU;YA6DV,oBAAoB;YAsBpB,uBAAuB;IAuCrC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,oBAAoB;CAS7B"}
@@ -0,0 +1,193 @@
1
+ import { existsSync } from "node:fs";
2
+ import { GitService, cleanupWorktreeRemoteAware, parseGitRemote } from "./git.js";
3
+ import { getForge } from "./git-forge.js";
4
+ const DEFAULT_POLL_INTERVAL_MS = 30_000;
5
+ const THREAD_REVIEW_SYNC_LIMIT = 100;
6
+ export class ThreadReviewSyncService {
7
+ deps;
8
+ timer = null;
9
+ running = false;
10
+ gitService;
11
+ resolveForge;
12
+ log;
13
+ constructor(deps) {
14
+ this.deps = deps;
15
+ this.gitService = deps.gitService ?? new GitService();
16
+ this.resolveForge = deps.resolveForge ?? ((remoteUrl) => {
17
+ const parsed = parseGitRemote(remoteUrl);
18
+ return parsed ? getForge(parsed.provider) : null;
19
+ });
20
+ this.log = deps.log ?? console;
21
+ }
22
+ start(intervalMs = DEFAULT_POLL_INTERVAL_MS) {
23
+ if (this.timer)
24
+ return;
25
+ this.timer = setInterval(() => {
26
+ void this.tick();
27
+ }, intervalMs);
28
+ this.timer.unref?.();
29
+ }
30
+ stop() {
31
+ if (!this.timer)
32
+ return;
33
+ clearInterval(this.timer);
34
+ this.timer = null;
35
+ }
36
+ async tick() {
37
+ if (this.running)
38
+ return;
39
+ this.running = true;
40
+ try {
41
+ const candidates = this.deps.threadService
42
+ .list(undefined, THREAD_REVIEW_SYNC_LIMIT)
43
+ .filter((thread) => this.isReviewSyncCandidate(thread));
44
+ for (const thread of candidates) {
45
+ await this.syncThread(thread);
46
+ }
47
+ }
48
+ finally {
49
+ this.running = false;
50
+ }
51
+ }
52
+ isReviewSyncCandidate(thread) {
53
+ return thread.kind === "delivery"
54
+ && typeof thread.branch === "string"
55
+ && thread.branch.length > 0
56
+ && typeof thread.workingDirectory === "string"
57
+ && thread.workingDirectory.length > 0
58
+ && thread.prState !== "merged"
59
+ && thread.prState !== "closed"
60
+ && (thread.prState === "open" || thread.prState === "creating" || !!thread.prUrl);
61
+ }
62
+ async syncThread(thread) {
63
+ try {
64
+ const context = await this.resolveRemoteContext(thread.workingDirectory, thread.branch);
65
+ if (!context)
66
+ return;
67
+ const { remoteUrl, remote, execCwd } = context;
68
+ const forge = this.resolveForge(remoteUrl);
69
+ if (!forge)
70
+ return;
71
+ const pr = await forge.findExistingPr(execCwd, remote, thread.branch);
72
+ if (!pr)
73
+ return;
74
+ const nextState = pr.state ?? null;
75
+ const metadataChanged = (pr.url ?? null) !== (thread.prUrl ?? null)
76
+ || (pr.number ?? null) !== (thread.prNumber ?? null)
77
+ || (pr.title ?? null) !== (thread.prTitle ?? null);
78
+ const stateChanged = nextState !== (thread.prState ?? null);
79
+ if (!metadataChanged && !stateChanged)
80
+ return;
81
+ let updated = this.deps.threadService.update(thread.id, {
82
+ prUrl: pr.url ?? thread.prUrl ?? null,
83
+ prNumber: pr.number ?? thread.prNumber ?? null,
84
+ prTitle: pr.title ?? thread.prTitle ?? null,
85
+ prState: nextState,
86
+ });
87
+ if (!updated)
88
+ return;
89
+ if (stateChanged) {
90
+ const summary = this.buildPrStateSummary(nextState, updated.prUrl ?? thread.prUrl ?? null);
91
+ if (summary) {
92
+ const activity = this.deps.threadService.addActivity(thread.id, "activity", summary, {
93
+ action: "pr_state_changed",
94
+ previousPrState: thread.prState,
95
+ prState: nextState,
96
+ prUrl: updated.prUrl ?? thread.prUrl ?? null,
97
+ syncSource: "gateway_poll",
98
+ });
99
+ this.broadcastThreadEvent(thread.id, "activity", { activity });
100
+ }
101
+ if (nextState === "merged" || nextState === "closed") {
102
+ updated = this.deps.threadService.update(thread.id, {
103
+ providerSessionId: null,
104
+ workingDirectory: null,
105
+ branch: null,
106
+ }) ?? updated;
107
+ void cleanupWorktreeRemoteAware(thread.workingDirectory, this.deps.ws, thread.branch).catch(() => { });
108
+ }
109
+ }
110
+ this.broadcastThreadEvent(thread.id, "updated", { thread: updated });
111
+ }
112
+ catch (error) {
113
+ this.log.error(`[thread-review-sync] Failed to sync thread ${thread.id}: ${error instanceof Error ? error.message : String(error)}`);
114
+ }
115
+ }
116
+ async resolveRemoteContext(cwd, branch) {
117
+ const localPath = existsSync(cwd);
118
+ const execCwd = localPath ? cwd : process.cwd();
119
+ let remoteUrl = null;
120
+ if (localPath) {
121
+ const remoteName = await this.gitService.getPreferredRemote(cwd, branch);
122
+ if (!remoteName)
123
+ return null;
124
+ remoteUrl = await this.gitService.getRemoteUrl(cwd, remoteName);
125
+ }
126
+ else {
127
+ remoteUrl = await this.resolveRemoteUrlViaNode(cwd, branch);
128
+ }
129
+ if (!remoteUrl)
130
+ return null;
131
+ const remote = parseGitRemote(remoteUrl);
132
+ if (!remote)
133
+ return null;
134
+ return { remoteUrl, remote, execCwd };
135
+ }
136
+ async resolveRemoteUrlViaNode(cwd, branch) {
137
+ if (!this.deps.ws)
138
+ return null;
139
+ const node = this.findRemoteNodeForPath(cwd);
140
+ if (!node)
141
+ return null;
142
+ try {
143
+ const configuredRemote = await this.deps.ws.proxyFsOp(node.id, "git", { cwd, args: `config --get branch.${branch}.remote` }, 15_000).then((result) => result.stdout.trim()).catch(() => "");
144
+ const remotes = await this.deps.ws.proxyFsOp(node.id, "git", { cwd, args: "remote" }, 15_000).then((result) => result.stdout.split("\n").map((line) => line.trim()).filter(Boolean)).catch(() => []);
145
+ const remoteName = configuredRemote && remotes.includes(configuredRemote)
146
+ ? configuredRemote
147
+ : remotes.includes("origin")
148
+ ? "origin"
149
+ : remotes[0] ?? null;
150
+ if (!remoteName)
151
+ return null;
152
+ const result = await this.deps.ws.proxyFsOp(node.id, "git", { cwd, args: `remote get-url ${remoteName}` }, 15_000);
153
+ return result.stdout.trim() || null;
154
+ }
155
+ catch {
156
+ return null;
157
+ }
158
+ }
159
+ findRemoteNodeForPath(cwd) {
160
+ if (!this.deps.ws)
161
+ return null;
162
+ const isWindowsPath = /^[A-Za-z]:[\\/]/.test(cwd);
163
+ const expectedPlatform = isWindowsPath ? "windows" : null;
164
+ for (const node of this.deps.ws.getFsNodes()) {
165
+ if (node.isGateway)
166
+ continue;
167
+ if (expectedPlatform && node.platform !== expectedPlatform)
168
+ continue;
169
+ return { id: node.id };
170
+ }
171
+ return null;
172
+ }
173
+ buildPrStateSummary(prState, prUrl) {
174
+ if (prState === "open")
175
+ return prUrl ? `Pull request created: ${prUrl}` : "Pull request created";
176
+ if (prState === "merged")
177
+ return prUrl ? `Pull request merged: ${prUrl}` : "Pull request merged";
178
+ if (prState === "closed")
179
+ return prUrl ? `Pull request closed: ${prUrl}` : "Pull request closed";
180
+ return null;
181
+ }
182
+ broadcastThreadEvent(threadId, event, data) {
183
+ if (!this.deps.ws)
184
+ return;
185
+ this.deps.ws.broadcastAll({
186
+ type: `thread.${event}`,
187
+ sessionId: "",
188
+ timestamp: new Date().toISOString(),
189
+ payload: { threadId, ...data },
190
+ });
191
+ }
192
+ }
193
+ //# sourceMappingURL=thread-review-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread-review-sync.js","sourceRoot":"","sources":["../../src/services/thread-review-sync.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,15 @@ export interface OpenAIToolSchema {
47
47
  parameters: unknown;
48
48
  };
49
49
  }
50
+ /** Snapshot of an outbound model request, with credentials removed. */
51
+ export interface LlmContextFlowRound {
52
+ round: number;
53
+ createdAt: string;
54
+ model: string;
55
+ messages: ReturnType<typeof serializeMessages>;
56
+ tools?: OpenAIToolSchema[];
57
+ tool_choice?: "auto";
58
+ }
50
59
  /** LLM connection config */
51
60
  export interface LLMConfig {
52
61
  openaiApiKey: string;
@@ -196,6 +205,8 @@ export interface AgentLoopOptions {
196
205
  log?: Logger;
197
206
  /** Event callback — called for every stream event */
198
207
  onEvent?: (event: AgentLoopEvent) => void;
208
+ /** Called immediately before each outbound LLM request. */
209
+ onContext?: (round: LlmContextFlowRound) => void;
199
210
  /** Persistence callback — called when a final assistant message should be saved */
200
211
  onPersist?: (sessionId: string, role: string, content: string, toolCalls?: string, segments?: string) => void;
201
212
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../src/tools/agent-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../src/tools/agent-loop.ts"],"names":[],"mappings":"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"}
@@ -507,7 +507,7 @@ function pruneHistory(history, contextWindow, toolSchemas) {
507
507
  return pruned;
508
508
  }
509
509
  export async function runAgentLoop(options, executeTool, steering) {
510
- const { llm, history, toolSchemas: initialToolSchemas, hasTools, sessionId, auth, abort, maxRounds = DEFAULT_MAX_ROUNDS, maxRetries = DEFAULT_MAX_RETRIES, parallel = true, toolRegistry, disabledTools, mode = "agent", onEvent, onPersist, log = console, } = options;
510
+ const { llm, history, toolSchemas: initialToolSchemas, hasTools, sessionId, auth, abort, maxRounds = DEFAULT_MAX_ROUNDS, maxRetries = DEFAULT_MAX_RETRIES, parallel = true, toolRegistry, disabledTools, mode = "agent", onEvent, onContext, onPersist, log = console, } = options;
511
511
  let fullContent = "";
512
512
  const executedToolCalls = [];
513
513
  const segments = [];
@@ -577,6 +577,13 @@ export async function runAgentLoop(options, executeTool, steering) {
577
577
  reqBody.tools = activeSchemas;
578
578
  reqBody.tool_choice = "auto";
579
579
  }
580
+ onContext?.({
581
+ round: round + 1,
582
+ createdAt: new Date().toISOString(),
583
+ model: llm.openaiModel,
584
+ messages: reqBody.messages,
585
+ ...(hasTools ? { tools: activeSchemas, tool_choice: "auto" } : {}),
586
+ });
580
587
  let contentText = "";
581
588
  let toolCalls = [];
582
589
  let finishReason = null;