tianxincode 1.0.20 → 1.0.22

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 (104) hide show
  1. package/dist/api/gateway.routes.d.ts.map +1 -1
  2. package/dist/api/gateway.routes.js +47 -0
  3. package/dist/api/gateway.routes.js.map +1 -1
  4. package/dist/api/index.d.ts.map +1 -1
  5. package/dist/api/index.js +2 -0
  6. package/dist/api/index.js.map +1 -1
  7. package/dist/api/specs.routes.d.ts +2 -0
  8. package/dist/api/specs.routes.d.ts.map +1 -0
  9. package/dist/api/specs.routes.js +191 -0
  10. package/dist/api/specs.routes.js.map +1 -0
  11. package/dist/components/Header.js +1 -1
  12. package/dist/modules/ai/agents/code/agent_tool.d.ts.map +1 -1
  13. package/dist/modules/ai/agents/code/agent_tool.js +1 -2
  14. package/dist/modules/ai/agents/code/agent_tool.js.map +1 -1
  15. package/dist/modules/ai/agents/code/code.agent.d.ts +8 -2
  16. package/dist/modules/ai/agents/code/code.agent.d.ts.map +1 -1
  17. package/dist/modules/ai/agents/code/code.agent.js +94 -71
  18. package/dist/modules/ai/agents/code/code.agent.js.map +1 -1
  19. package/dist/modules/ai/ai.service.d.ts.map +1 -1
  20. package/dist/modules/ai/ai.service.js +1 -0
  21. package/dist/modules/ai/ai.service.js.map +1 -1
  22. package/dist/modules/ai/provider/openai/openai-agent.d.ts.map +1 -1
  23. package/dist/modules/ai/provider/openai/openai-agent.js +15 -1
  24. package/dist/modules/ai/provider/openai/openai-agent.js.map +1 -1
  25. package/dist/modules/db/db.service.d.ts +2 -0
  26. package/dist/modules/db/db.service.d.ts.map +1 -1
  27. package/dist/modules/db/db.service.js +42 -0
  28. package/dist/modules/db/db.service.js.map +1 -1
  29. package/dist/modules/session/session.service.d.ts +1 -0
  30. package/dist/modules/session/session.service.d.ts.map +1 -1
  31. package/dist/modules/session/session.service.js +7 -0
  32. package/dist/modules/session/session.service.js.map +1 -1
  33. package/dist/modules/skill/skill.tool.js +1 -1
  34. package/dist/modules/skill/skill.tool.js.map +1 -1
  35. package/dist/modules/skill/skill.types.d.ts +1 -0
  36. package/dist/modules/skill/skill.types.d.ts.map +1 -1
  37. package/dist/modules/skill/skills.manager.d.ts.map +1 -1
  38. package/dist/modules/skill/skills.manager.js +1 -0
  39. package/dist/modules/skill/skills.manager.js.map +1 -1
  40. package/dist/modules/spec/index.d.ts +5 -0
  41. package/dist/modules/spec/index.d.ts.map +1 -0
  42. package/dist/modules/spec/index.js +5 -0
  43. package/dist/modules/spec/index.js.map +1 -0
  44. package/dist/modules/spec/spec.injector.d.ts +12 -0
  45. package/dist/modules/spec/spec.injector.d.ts.map +1 -0
  46. package/dist/modules/spec/spec.injector.js +90 -0
  47. package/dist/modules/spec/spec.injector.js.map +1 -0
  48. package/dist/modules/spec/spec.manager.d.ts +17 -0
  49. package/dist/modules/spec/spec.manager.d.ts.map +1 -0
  50. package/dist/modules/spec/spec.manager.js +184 -0
  51. package/dist/modules/spec/spec.manager.js.map +1 -0
  52. package/dist/modules/spec/spec.repository.d.ts +33 -0
  53. package/dist/modules/spec/spec.repository.d.ts.map +1 -0
  54. package/dist/modules/spec/spec.repository.js +301 -0
  55. package/dist/modules/spec/spec.repository.js.map +1 -0
  56. package/dist/modules/spec/spec.types.d.ts +31 -0
  57. package/dist/modules/spec/spec.types.d.ts.map +1 -0
  58. package/dist/modules/spec/spec.types.js +2 -0
  59. package/dist/modules/spec/spec.types.js.map +1 -0
  60. package/dist/modules/tools/provider/index.js +1 -1
  61. package/dist/modules/tools/provider/index.js.map +1 -1
  62. package/dist/modules/waf-gateway/index.d.ts +3 -0
  63. package/dist/modules/waf-gateway/index.d.ts.map +1 -0
  64. package/dist/modules/waf-gateway/index.js +2 -0
  65. package/dist/modules/waf-gateway/index.js.map +1 -0
  66. package/dist/modules/waf-gateway/waf-gateway.service.d.ts +32 -0
  67. package/dist/modules/waf-gateway/waf-gateway.service.d.ts.map +1 -0
  68. package/dist/modules/waf-gateway/waf-gateway.service.js +230 -0
  69. package/dist/modules/waf-gateway/waf-gateway.service.js.map +1 -0
  70. package/dist/services/codeChat/codeChat.service.d.ts +9 -0
  71. package/dist/services/codeChat/codeChat.service.d.ts.map +1 -1
  72. package/dist/services/codeChat/codeChat.service.js +104 -27
  73. package/dist/services/codeChat/codeChat.service.js.map +1 -1
  74. package/dist/web/web.service.d.ts.map +1 -1
  75. package/dist/web/web.service.js +2 -0
  76. package/dist/web/web.service.js.map +1 -1
  77. package/package.json +1 -1
  78. package/test-ws.ts +80 -0
  79. package/web/dist/assets/{AiLogsView-WAigW3xr.js → AiLogsView-CDeCGrqs.js} +1 -1
  80. package/web/dist/assets/{CustomActionsView-CNI4Mt-1.js → CustomActionsView-TxWgdTZe.js} +1 -1
  81. package/web/dist/assets/{DevWorkflowView-BdgJWBut.js → DevWorkflowView-B19Ff6-A.js} +3 -3
  82. package/web/dist/assets/{DevWorkflowView-m3rlqwHy.css → DevWorkflowView-i4wnKtfl.css} +1 -1
  83. package/web/dist/assets/{GitChanges-DELhVhf1.js → GitChanges-CwUxkrle.js} +1 -1
  84. package/web/dist/assets/{Layout-nMj-Q_nP.js → Layout-D4siMfOW.js} +1 -1
  85. package/web/dist/assets/{TasksView-BX2Y5ePb.js → TasksView-BG-m6UVH.js} +1 -1
  86. package/web/dist/assets/{TerminalView-BwS0wtKD.js → TerminalView-yM-Hm1xQ.js} +1 -1
  87. package/web/dist/assets/{cssMode-DEOlh9nJ.js → cssMode-giQ3z6m9.js} +1 -1
  88. package/web/dist/assets/{freemarker2-BIOBUwm4.js → freemarker2-C8kkIdnv.js} +1 -1
  89. package/web/dist/assets/{handlebars-CI4NCgxY.js → handlebars-DAU6ZNKU.js} +1 -1
  90. package/web/dist/assets/{html-D7QxDszE.js → html-BHE7E6tD.js} +1 -1
  91. package/web/dist/assets/{htmlMode-BoePnkeH.js → htmlMode-e7XqoB-n.js} +1 -1
  92. package/web/dist/assets/{index-BUeX43RX.css → index-BOtLJzYI.css} +1 -1
  93. package/web/dist/assets/{index-CztsEf_z.js → index-BSK0RGaG.js} +150 -150
  94. package/web/dist/assets/{javascript-CnJkz3tG.js → javascript-DAZEhMmy.js} +1 -1
  95. package/web/dist/assets/{jsonMode-gKJIoqZk.js → jsonMode-pBEFSzI9.js} +1 -1
  96. package/web/dist/assets/{liquid-F3gGRKrR.js → liquid-YWPjO-2R.js} +1 -1
  97. package/web/dist/assets/{mdx-RsKU9MkN.js → mdx-BEfN1Fs-.js} +1 -1
  98. package/web/dist/assets/{python-BWboDc6f.js → python-CoMy2hjm.js} +1 -1
  99. package/web/dist/assets/{razor-P3h5GTU6.js → razor-nvW2eZpz.js} +1 -1
  100. package/web/dist/assets/{tsMode-DrLSSEod.js → tsMode-BrabyPVd.js} +1 -1
  101. package/web/dist/assets/{typescript-QehpEqV-.js → typescript-CoIvDyFK.js} +1 -1
  102. package/web/dist/assets/{xml-BAmlhwNW.js → xml-DpgIxdIA.js} +1 -1
  103. package/web/dist/assets/{yaml-DSogwCN3.js → yaml-Bqg--wZt.js} +1 -1
  104. package/web/dist/index.html +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.routes.d.ts","sourceRoot":"","sources":["../../src/api/gateway.routes.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,4CAAW,CAAC"}
1
+ {"version":3,"file":"gateway.routes.d.ts","sourceRoot":"","sources":["../../src/api/gateway.routes.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,4CAAW,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { Router } from 'express';
2
2
  import { gatewayService } from '../modules/gateway/index.js';
3
+ import { wafGatewayService } from '../modules/waf-gateway/index.js';
3
4
  export const gatewayRouter = Router();
4
5
  gatewayRouter.get('/dingtalk/config', (req, res) => {
5
6
  const config = gatewayService.getConfig();
@@ -61,4 +62,50 @@ gatewayRouter.get('/queue/status', (req, res) => {
61
62
  data: queueStatus,
62
63
  });
63
64
  });
65
+ gatewayRouter.get('/waf/config', (req, res) => {
66
+ const config = wafGatewayService.getConfig();
67
+ res.json({
68
+ success: true,
69
+ data: config,
70
+ });
71
+ });
72
+ gatewayRouter.put('/waf/config', (req, res) => {
73
+ const { secret_key, server_ip } = req.body;
74
+ wafGatewayService.updateConfig({
75
+ secret_key: secret_key || '',
76
+ server_ip: server_ip || '',
77
+ });
78
+ res.json({ success: true, message: 'Configuration updated' });
79
+ });
80
+ gatewayRouter.post('/waf/start', async (req, res) => {
81
+ try {
82
+ await wafGatewayService.start();
83
+ res.json({ success: true, message: 'WAF gateway started' });
84
+ }
85
+ catch (error) {
86
+ res.status(500).json({
87
+ success: false,
88
+ error: error instanceof Error ? error.message : String(error)
89
+ });
90
+ }
91
+ });
92
+ gatewayRouter.post('/waf/stop', async (req, res) => {
93
+ try {
94
+ await wafGatewayService.stop();
95
+ res.json({ success: true, message: 'WAF gateway stopped' });
96
+ }
97
+ catch (error) {
98
+ res.status(500).json({
99
+ success: false,
100
+ error: error instanceof Error ? error.message : String(error)
101
+ });
102
+ }
103
+ });
104
+ gatewayRouter.get('/waf/status', (req, res) => {
105
+ const status = wafGatewayService.getStatus();
106
+ res.json({
107
+ success: true,
108
+ data: status,
109
+ });
110
+ });
64
111
  //# sourceMappingURL=gateway.routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.routes.js","sourceRoot":"","sources":["../../src/api/gateway.routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway.routes.js","sourceRoot":"","sources":["../../src/api/gateway.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC;AAEtC,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACpE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;IAC1C,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACpE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAE9D,cAAc,CAAC,YAAY,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;QACzB,QAAQ,EAAE,QAAQ,IAAI,EAAE;QACxB,YAAY,EAAE,YAAY,IAAI,EAAE;QAChC,OAAO,EAAE,OAAO,IAAI,EAAE;KACvB,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC1E,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACpE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;IAC1C,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;YAC9B,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;SAC1E;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACjE,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IACpD,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,CAAC;IAC7C,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC/D,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAE3C,iBAAiB,CAAC,YAAY,CAAC;QAC7B,UAAU,EAAE,UAAU,IAAI,EAAE;QAC5B,SAAS,EAAE,SAAS,IAAI,EAAE;KAC3B,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACpE,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,CAAC;IAC7C,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,eAAO,MAAM,SAAS,4CAAW,CAAC;AAoBlC,mBAAmB,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,eAAO,MAAM,SAAS,4CAAW,CAAC;AAqBlC,mBAAmB,gBAAgB,CAAC"}
package/dist/api/index.js CHANGED
@@ -19,6 +19,7 @@ import { emailRouter } from './email.routes.js';
19
19
  import { workflowRouter } from './workflow.routes.js';
20
20
  import { gitRouter } from './git.routes.js';
21
21
  import { customActionsRouter } from './custom-actions.routes.js';
22
+ import { specsRouter } from './specs.routes.js';
22
23
  export const apiRouter = Router();
23
24
  apiRouter.use('/chat', chatRouter);
24
25
  apiRouter.use('/sessions', sessionRouter);
@@ -37,4 +38,5 @@ apiRouter.use('/email', emailRouter);
37
38
  apiRouter.use('/workflow', workflowRouter);
38
39
  apiRouter.use('/git', gitRouter);
39
40
  apiRouter.use('/custom-actions', customActionsRouter);
41
+ apiRouter.use('/specs', specsRouter);
40
42
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;AAElC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACnC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAC1C,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACvC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACvC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACjC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3C,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/B,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACrC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAC/C,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACvC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3C,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACzC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACrC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3C,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACjC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;AAElC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACnC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAC1C,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACvC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACvC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACjC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3C,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/B,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACrC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAC/C,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACvC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3C,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACzC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACrC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAC3C,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACjC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AACtD,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const specsRouter: import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=specs.routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs.routes.d.ts","sourceRoot":"","sources":["../../src/api/specs.routes.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,4CAAW,CAAC"}
@@ -0,0 +1,191 @@
1
+ import { Router } from 'express';
2
+ import { specManager, specRepositoryService, specInjector } from '../modules/spec/index.js';
3
+ import { memoryService } from '../modules/memory/index.js';
4
+ import { sessionService } from '../modules/session/index.js';
5
+ export const specsRouter = Router();
6
+ function getProjectPathFromRequest(req) {
7
+ const sessionId = req.query.sessionId || req.body?.sessionId;
8
+ if (sessionId) {
9
+ const session = sessionService.get(sessionId);
10
+ return session?.projectPath || null;
11
+ }
12
+ return null;
13
+ }
14
+ function getDefaultProjectPath() {
15
+ return process.cwd();
16
+ }
17
+ function initProjectSpecPath(req) {
18
+ const sessionPath = getProjectPathFromRequest(req);
19
+ const projectPath = sessionPath || getDefaultProjectPath();
20
+ specManager.setProjectPath(projectPath);
21
+ }
22
+ specsRouter.get('/project-path', (req, res) => {
23
+ const sessionPath = getProjectPathFromRequest(req);
24
+ const projectPath = sessionPath || getDefaultProjectPath();
25
+ res.json({
26
+ success: true,
27
+ data: {
28
+ projectPath,
29
+ hasSession: !!sessionPath,
30
+ },
31
+ });
32
+ });
33
+ specsRouter.get('/local', (req, res) => {
34
+ const sessionPath = getProjectPathFromRequest(req);
35
+ const queryPath = req.query.projectPath;
36
+ const projectPath = queryPath || sessionPath || getDefaultProjectPath();
37
+ specManager.setProjectPath(projectPath);
38
+ const specs = specManager.getLocalSpecs();
39
+ res.json({
40
+ success: true,
41
+ data: {
42
+ specs: specs.map(s => ({
43
+ name: s.name,
44
+ description: s.description,
45
+ read_mode: s.read_mode,
46
+ filePath: s.filePath,
47
+ })),
48
+ projectPath,
49
+ },
50
+ });
51
+ });
52
+ specsRouter.get('/local/:name/SPEC.md', (req, res) => {
53
+ const sessionPath = getProjectPathFromRequest(req);
54
+ const queryPath = req.query.projectPath;
55
+ const projectPath = queryPath || sessionPath || getDefaultProjectPath();
56
+ specManager.setProjectPath(projectPath);
57
+ const name = String(req.params.name);
58
+ const content = specManager.getSpecContent(name);
59
+ if (content === null) {
60
+ return res.status(404).json({ success: false, error: 'Spec not found' });
61
+ }
62
+ res.json({
63
+ success: true,
64
+ data: content,
65
+ });
66
+ });
67
+ specsRouter.delete('/local/:name', (req, res) => {
68
+ initProjectSpecPath(req);
69
+ const name = String(req.params.name);
70
+ const success = specManager.deleteSpec(name);
71
+ if (!success) {
72
+ return res.status(404).json({ success: false, error: 'Spec not found or delete failed' });
73
+ }
74
+ res.json({ success: true });
75
+ });
76
+ specsRouter.post('/local/upload', (req, res) => {
77
+ initProjectSpecPath(req);
78
+ const { name, content } = req.body;
79
+ if (!name || !content) {
80
+ return res.status(400).json({ success: false, error: 'name and content are required' });
81
+ }
82
+ const success = specManager.saveSpec(name, content);
83
+ if (!success) {
84
+ return res.status(500).json({ success: false, error: 'Failed to save spec' });
85
+ }
86
+ res.json({ success: true });
87
+ });
88
+ specsRouter.get('/repositories', (req, res) => {
89
+ const repos = specRepositoryService.getAllRepositories();
90
+ res.json({
91
+ success: true,
92
+ data: repos.map(repo => ({
93
+ ...repo,
94
+ isSynced: specRepositoryService.isSynced(repo.id),
95
+ })),
96
+ });
97
+ });
98
+ specsRouter.post('/repositories', (req, res) => {
99
+ const { name, url, type, repo_path } = req.body;
100
+ if (!name || !url) {
101
+ return res.status(400).json({ success: false, error: 'name and url are required' });
102
+ }
103
+ const repo = specRepositoryService.createRepository({ name, url, type, repo_path });
104
+ res.json({ success: true, data: repo });
105
+ });
106
+ specsRouter.put('/repositories/:id', (req, res) => {
107
+ const id = req.params.id;
108
+ const { name, url, type, repo_path } = req.body;
109
+ const success = specRepositoryService.updateRepository(id, { name, url, type, repo_path });
110
+ if (!success) {
111
+ return res.status(404).json({ success: false, error: 'Repository not found' });
112
+ }
113
+ res.json({ success: true });
114
+ });
115
+ specsRouter.delete('/repositories/:id', (req, res) => {
116
+ const id = req.params.id;
117
+ const success = specRepositoryService.deleteRepository(id);
118
+ if (!success) {
119
+ return res.status(404).json({ success: false, error: 'Repository not found' });
120
+ }
121
+ res.json({ success: true });
122
+ });
123
+ specsRouter.get('/repositories/:id/specs', async (req, res) => {
124
+ const id = req.params.id;
125
+ if (!specRepositoryService.isSynced(id)) {
126
+ return res.status(400).json({ success: false, error: 'Repository not synced. Please sync first.' });
127
+ }
128
+ const specs = await specRepositoryService.parseRepoSpecs(id);
129
+ res.json({ success: true, data: specs });
130
+ });
131
+ specsRouter.post('/repositories/:id/sync', async (req, res) => {
132
+ const id = req.params.id;
133
+ const result = await specRepositoryService.syncRepository(id);
134
+ res.json(result);
135
+ });
136
+ specsRouter.post('/repositories/:id/download', async (req, res) => {
137
+ const id = req.params.id;
138
+ const { specName, projectPath: bodyProjectPath } = req.body;
139
+ const sessionProjectPath = getProjectPathFromRequest(req);
140
+ const projectPath = bodyProjectPath || sessionProjectPath || getDefaultProjectPath();
141
+ if (!specName) {
142
+ return res.status(400).json({ success: false, error: 'specName is required' });
143
+ }
144
+ const success = await specRepositoryService.downloadSpec(id, specName, projectPath);
145
+ if (!success) {
146
+ return res.status(500).json({ success: false, error: 'Download failed' });
147
+ }
148
+ res.json({ success: true, data: { projectPath } });
149
+ });
150
+ specsRouter.post('/repositories/:id/download-all', async (req, res) => {
151
+ const id = req.params.id;
152
+ const { projectPath: bodyProjectPath } = req.body;
153
+ const sessionProjectPath = getProjectPathFromRequest(req);
154
+ const projectPath = bodyProjectPath || sessionProjectPath || getDefaultProjectPath();
155
+ const result = await specRepositoryService.downloadAll(id, projectPath);
156
+ res.json({ success: result.success, data: { ...result, projectPath } });
157
+ });
158
+ specsRouter.get('/injection/:sessionId', (req, res) => {
159
+ const sessionId = req.params.sessionId;
160
+ const messages = memoryService.getAllMessages(sessionId);
161
+ const messageCount = messages.length;
162
+ const shouldInject = specInjector.shouldInject(messageCount);
163
+ if (!shouldInject) {
164
+ return res.json({ success: true, data: { inject: false } });
165
+ }
166
+ const injection = specInjector.buildSpecInjection();
167
+ res.json({
168
+ success: true,
169
+ data: {
170
+ inject: true,
171
+ injection,
172
+ },
173
+ });
174
+ });
175
+ specsRouter.post('/inject', (req, res) => {
176
+ const { message, sessionId } = req.body;
177
+ if (!message) {
178
+ return res.status(400).json({ success: false, error: 'message is required' });
179
+ }
180
+ const messages = sessionId ? memoryService.getAllMessages(sessionId) : [];
181
+ const messageCount = messages.length;
182
+ if (!specInjector.shouldInject(messageCount)) {
183
+ return res.json({ success: true, data: { message } });
184
+ }
185
+ const injectedMessage = specInjector.injectIntoMessage(message);
186
+ res.json({
187
+ success: true,
188
+ data: { message: injectedMessage },
189
+ });
190
+ });
191
+ //# sourceMappingURL=specs.routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs.routes.js","sourceRoot":"","sources":["../../src/api/specs.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;AAEpC,SAAS,yBAAyB,CAAC,GAAY;IAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;IACvE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,MAAM,WAAW,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,WAAW,IAAI,qBAAqB,EAAE,CAAC;IAC3D,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC/D,MAAM,WAAW,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,WAAW,IAAI,qBAAqB,EAAE,CAAC;IAC3D,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,WAAW;YACX,UAAU,EAAE,CAAC,CAAC,WAAW;SAC1B;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACxD,MAAM,WAAW,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,WAAqB,CAAC;IAClD,MAAM,WAAW,GAAG,SAAS,IAAI,WAAW,IAAI,qBAAqB,EAAE,CAAC;IAExE,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC;IAE1C,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC;YACH,WAAW;SACZ;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACtE,MAAM,WAAW,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,WAAqB,CAAC;IAClD,MAAM,WAAW,GAAG,SAAS,IAAI,WAAW,IAAI,qBAAqB,EAAE,CAAC;IACxE,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACjE,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAChE,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAEnC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC/D,MAAM,KAAK,GAAG,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;IACzD,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,GAAG,IAAI;YACP,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;SAClD,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAEhD,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACpF,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACnE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;IACnC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAEhD,MAAM,OAAO,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACtE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;IAEnC,MAAM,OAAO,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC/E,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;IAEnC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACxC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC7D,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IAC/E,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;IAEnC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACnF,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAC5D,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,eAAe,IAAI,kBAAkB,IAAI,qBAAqB,EAAE,CAAC;IAErF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACpF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;IACvF,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;IACnC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAClD,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,eAAe,IAAI,kBAAkB,IAAI,qBAAqB,EAAE,CAAC;IAErF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACxE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACvE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,SAAmB,CAAC;IAEjD,MAAM,QAAQ,GAAG,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;IAErC,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,kBAAkB,EAAE,CAAC;IACpD,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,SAAS;SACV;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC1D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;IAErC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChE,GAAG,CAAC,IAAI,CAAC;QACP,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;KACnC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Box, Text } from 'ink';
3
- const VERSION = '1.0.20';
3
+ const VERSION = '1.0.21';
4
4
  export const Header = React.memo(function Header() {
5
5
  return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1 },
6
6
  React.createElement(Text, { bold: true, cyan: true }, " "),
@@ -1 +1 @@
1
- {"version":3,"file":"agent_tool.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/agent_tool.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,UAetB,CAAC"}
1
+ {"version":3,"file":"agent_tool.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/agent_tool.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,UActB,CAAC"}
@@ -11,7 +11,6 @@ export const CODE_TOOLS = [
11
11
  'web_fetch',
12
12
  'todo_read',
13
13
  'todo_write',
14
- 'memory',
15
- 'skill',
14
+ 'memory'
16
15
  ];
17
16
  //# sourceMappingURL=agent_tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent_tool.js","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/agent_tool.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW;IACX,YAAY;IACZ,WAAW;IACX,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,aAAa;IACb,YAAY;IACZ,WAAW;IACX,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,OAAO;CACR,CAAC"}
1
+ {"version":3,"file":"agent_tool.js","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/agent_tool.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,WAAW;IACX,YAAY;IACZ,WAAW;IACX,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,aAAa;IACb,YAAY;IACZ,WAAW;IACX,WAAW;IACX,YAAY;IACZ,QAAQ;CACT,CAAC"}
@@ -1,12 +1,16 @@
1
1
  import { OpenAIProvider } from '../../openai.provider.js';
2
2
  import { AIProvider, ProviderRunOptions, ProviderRunResult } from '../../provider/base.js';
3
3
  import type { MemoryService } from '../../../memory/memory.service.js';
4
+ import type { SummarizerService } from '../../../ai/summarizer/index.js';
5
+ import type { SessionService } from '../../../session/session.service.js';
4
6
  export interface CodeAgentConfig {
5
7
  provider: OpenAIProvider;
6
8
  maxIterations?: number;
7
9
  projectPath?: string;
8
10
  sessionId?: string;
9
11
  memoryService?: MemoryService;
12
+ summarizer?: SummarizerService;
13
+ sessionService?: SessionService;
10
14
  }
11
15
  export declare class CodeAgent implements AIProvider {
12
16
  name: string;
@@ -17,16 +21,18 @@ export declare class CodeAgent implements AIProvider {
17
21
  private projectPath?;
18
22
  private sessionId?;
19
23
  private memoryService?;
24
+ private summarizer?;
25
+ private sessionService?;
26
+ private userMessage;
20
27
  private providerTools;
21
28
  private providerToolsMap;
22
29
  constructor(config: CodeAgentConfig);
23
30
  run(userMessage: string, options?: ProviderRunOptions): Promise<ProviderRunResult>;
24
31
  getType(): string;
32
+ private checkAndCompact;
25
33
  private executeTool;
26
34
  private getBuiltinTools;
27
35
  private getFilteredTools;
28
- private buildPrompt;
29
- private loadRoleTemplate;
30
36
  private addMessage;
31
37
  }
32
38
  //# sourceMappingURL=code.agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code.agent.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/code.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGvE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,qBAAa,SAAU,YAAW,UAAU;IAC1C,IAAI,SAAU;IACd,KAAK,WAAc;IACnB,WAAW,UAAQ;IAEnB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAA+B;gBAE3C,MAAM,EAAE,eAAe;IAQ7B,GAAG,CACP,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IAuJ7B,OAAO,IAAI,MAAM;YAIH,WAAW;YAuBX,eAAe;YAWf,gBAAgB;YAKhB,WAAW;YAuDX,gBAAgB;IAa9B,OAAO,CAAC,UAAU;CAoBnB"}
1
+ {"version":3,"file":"code.agent.d.ts","sourceRoot":"","sources":["../../../../../src/modules/ai/agents/code/code.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AA2C1E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,qBAAa,SAAU,YAAW,UAAU;IAC1C,IAAI,SAAU;IACd,KAAK,WAAc;IACnB,WAAW,UAAQ;IAEnB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,UAAU,CAAC,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAA+B;gBAE3C,MAAM,EAAE,eAAe;IAU7B,GAAG,CACP,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IA2K7B,OAAO,IAAI,MAAM;YAIH,eAAe;YAkDf,WAAW;YAuBX,eAAe;YAWf,gBAAgB;IAK9B,OAAO,CAAC,UAAU;CAoBnB"}
@@ -2,11 +2,45 @@ import { CODE_TOOLS } from './agent_tool.js';
2
2
  import { getOpenAITools } from '../../../tools/provider/tools.js';
3
3
  import { getProviderTools } from '../../../tools/provider/index.js';
4
4
  import { buildAvailableSkillsPrompt } from '../../../skill/skill.tool.js';
5
+ import { specInjector } from '../../../spec/index.js';
6
+ async function loadRoleTemplate() {
7
+ try {
8
+ const fs = await import('fs/promises');
9
+ const path = await import('path');
10
+ const { fileURLToPath } = await import('url');
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+ return await fs.readFile(path.join(__dirname, 'prompts', 'role.txt'), 'utf-8');
14
+ }
15
+ catch {
16
+ return '你是 txcode,一个帮助用户完成软件工程任务的交互式命令行工具。';
17
+ }
18
+ }
19
+ async function buildCodePrompt(maxIterations, options) {
20
+ const platform = options?.platform || process.platform;
21
+ const workdir = options?.workdir || process.cwd();
22
+ const platformName = platform === 'win32' ? 'Windows'
23
+ : platform === 'darwin' ? 'macOS'
24
+ : platform === 'linux' ? 'Linux'
25
+ : platform;
26
+ const skillsPrompt = await buildAvailableSkillsPrompt();
27
+ const roleTemplate = await loadRoleTemplate();
28
+ return `${roleTemplate}
29
+
30
+ ## 可用 Skills
31
+ {skills}
32
+ **注意**
33
+ 读取skill 可以通过read_file工具读取内容
34
+ `.replace('{platform}', platformName)
35
+ .replace('{workdir}', workdir)
36
+ .replace('{skills}', skillsPrompt);
37
+ }
5
38
  export class CodeAgent {
6
39
  constructor(config) {
7
40
  this.name = 'code';
8
41
  this.tools = CODE_TOOLS;
9
42
  this.keepContext = true;
43
+ this.userMessage = '';
10
44
  this.providerTools = [];
11
45
  this.providerToolsMap = new Map();
12
46
  this.provider = config.provider;
@@ -14,8 +48,11 @@ export class CodeAgent {
14
48
  this.projectPath = config.projectPath;
15
49
  this.sessionId = config.sessionId;
16
50
  this.memoryService = config.memoryService;
51
+ this.summarizer = config.summarizer;
52
+ this.sessionService = config.sessionService;
17
53
  }
18
54
  async run(userMessage, options) {
55
+ this.userMessage = userMessage;
19
56
  this.providerTools = await this.getFilteredTools();
20
57
  this.providerToolsMap.clear();
21
58
  for (const t of this.providerTools) {
@@ -24,8 +61,10 @@ export class CodeAgent {
24
61
  const steps = [];
25
62
  const baseMessages = [];
26
63
  const abortSignal = options?.abortSignal;
27
- const builtinTools = await this.getBuiltinTools();
28
- const systemPrompt = await this.buildPrompt(await this.getBuiltinTools());
64
+ const builtinTools = this.providerTools;
65
+ const systemPrompt = await buildCodePrompt(this.maxIterations, {
66
+ workdir: this.projectPath || process.cwd(),
67
+ });
29
68
  if (options?.historyMessages && options.historyMessages.length > 0) {
30
69
  for (const msg of options.historyMessages) {
31
70
  if (msg.role !== 'system') {
@@ -33,7 +72,20 @@ export class CodeAgent {
33
72
  }
34
73
  }
35
74
  }
36
- baseMessages.push({ role: 'user', content: userMessage });
75
+ const messageCount = options?.historyMessages?.length || 0;
76
+ if (specInjector.shouldInject(messageCount)) {
77
+ const injectedMessage = specInjector.injectIntoMessage(userMessage, process.cwd());
78
+ baseMessages.push({ role: 'user', content: injectedMessage });
79
+ }
80
+ else {
81
+ const firstUserIndex = baseMessages.findIndex(m => m.role === 'user');
82
+ if (firstUserIndex >= 0) {
83
+ const originalFirstUser = baseMessages[firstUserIndex].content;
84
+ const reinjected = specInjector.injectIntoMessage(originalFirstUser, process.cwd());
85
+ baseMessages[firstUserIndex].content = reinjected;
86
+ }
87
+ baseMessages.push({ role: 'user', content: userMessage });
88
+ }
37
89
  this.addMessage('user', userMessage, true, true, undefined, undefined, this.sessionId);
38
90
  let iteration = 0;
39
91
  let finalAnswer = '';
@@ -57,13 +109,13 @@ export class CodeAgent {
57
109
  throw new Error('ABORTED');
58
110
  }
59
111
  if (response.usage) {
60
- totalUsage.promptTokens += response.usage.promptTokens;
61
- totalUsage.completionTokens += response.usage.completionTokens;
62
- totalUsage.totalTokens += response.usage.totalTokens;
112
+ totalUsage.promptTokens = response.usage.promptTokens;
113
+ totalUsage.completionTokens = response.usage.completionTokens;
114
+ totalUsage.totalTokens = response.usage.totalTokens;
63
115
  }
64
116
  if (response.finishReason === 'stop' && response.content) {
65
117
  finalAnswer = response.content;
66
- this.addMessage('assistant', finalAnswer, true, false, undefined, undefined, options?.sessionId);
118
+ this.addMessage('assistant', finalAnswer, true, false, undefined, undefined, this.sessionId);
67
119
  break;
68
120
  }
69
121
  if (response.finishReason === 'tool_calls' && response.toolCalls && response.toolCalls.length > 0) {
@@ -91,6 +143,7 @@ export class CodeAgent {
91
143
  };
92
144
  steps.push(step);
93
145
  options?.onStep?.(step, iteration, response.usage);
146
+ const newMessagesStartIndex = baseMessages.length;
94
147
  for (let i = 0; i < toolCalls.length; i++) {
95
148
  const toolCall = toolCalls[i];
96
149
  const result = results[i];
@@ -113,15 +166,16 @@ export class CodeAgent {
113
166
  thought: response.reasoning || '',
114
167
  success: result.success,
115
168
  };
116
- this.addMessage('assistant', JSON.stringify(reactData), true, false, undefined, undefined, options?.sessionId);
169
+ this.addMessage('assistant', JSON.stringify(reactData), true, false, undefined, undefined, this.sessionId);
117
170
  const toolMsg = {
118
171
  role: 'tool',
119
172
  content: result.success ? result.output || '' : `Error: ${result.error}`,
120
173
  toolCallId: toolCall.id,
121
174
  };
122
175
  baseMessages.push(toolMsg);
123
- this.addMessage('tool', toolMsg.content, true, false, undefined, toolCall.id, options?.sessionId);
176
+ this.addMessage('tool', toolMsg.content, true, false, undefined, toolCall.id, this.sessionId);
124
177
  }
178
+ await this.checkAndCompact(options, baseMessages, totalUsage, newMessagesStartIndex);
125
179
  continue;
126
180
  }
127
181
  if (response.content) {
@@ -143,6 +197,37 @@ export class CodeAgent {
143
197
  getType() {
144
198
  return 'code';
145
199
  }
200
+ async checkAndCompact(options, baseMessages, totalUsage, newMessagesStartIndex) {
201
+ if (!this.sessionId || !this.summarizer)
202
+ return;
203
+ const check = this.summarizer.checkNeedsCompact(this.sessionId, totalUsage.promptTokens);
204
+ if (!check.needed)
205
+ return;
206
+ const currentToolResults = baseMessages.slice(newMessagesStartIndex).filter(msg => msg.role === 'tool' || (msg.role === 'assistant' && msg.toolCalls));
207
+ try {
208
+ const result = await this.summarizer.compact({
209
+ sessionId: this.sessionId,
210
+ });
211
+ if (result.success) {
212
+ options?.onCompact?.({
213
+ beforeTokens: check.promptTokens,
214
+ afterTokens: result.tokensAfter,
215
+ summary: result.summary,
216
+ });
217
+ const session = this.sessionService?.get(this.sessionId);
218
+ const summaryMessages = this.memoryService?.getMessagesForAI(this.sessionId, session?.summaryMessageId || null) || [];
219
+ baseMessages.length = 0;
220
+ baseMessages.push({ role: 'user', content: this.userMessage });
221
+ if (summaryMessages.length > 0) {
222
+ baseMessages.push(...summaryMessages.filter(m => m.role !== 'system'));
223
+ }
224
+ baseMessages.push(...currentToolResults);
225
+ }
226
+ }
227
+ catch (error) {
228
+ console.error('[AutoCompact] Error:', error);
229
+ }
230
+ }
146
231
  async executeTool(name, args) {
147
232
  try {
148
233
  const tool = this.providerToolsMap.get(name);
@@ -177,68 +262,6 @@ export class CodeAgent {
177
262
  const allTools = await getProviderTools();
178
263
  return allTools.filter((tool) => this.tools.includes(tool.name));
179
264
  }
180
- async buildPrompt(_builtinTools = []) {
181
- const platform = process.platform;
182
- const workdir = this.projectPath || process.cwd();
183
- const platformName = platform === 'win32' ? 'Windows'
184
- : platform === 'darwin' ? 'macOS'
185
- : platform === 'linux' ? 'Linux'
186
- : platform;
187
- const roleTemplate = await this.loadRoleTemplate();
188
- const skillsPrompt = await buildAvailableSkillsPrompt();
189
- const promptTemplate = `${roleTemplate}
190
-
191
- 你通过 OpenAI Function Calling 模式工作:
192
-
193
- 1. AI 生成结构化的工具调用请求
194
- 2. 系统自动执行工具并返回结果
195
- 3. 重复直到任务完成
196
-
197
- ## 上下文管理
198
-
199
- Provider 模式下,所有工具执行结果默认都会保留在对话历史中供后续参考。
200
-
201
- ## 内置工具
202
-
203
- {builtinTools}
204
-
205
- ## 可用 Skills
206
-
207
- {skills}
208
-
209
- ## 重要规则
210
-
211
- - 优先使用内置工具
212
- - 在执行任务前,先使用 skill 加载相关 Skill 指南了解约束和最佳实践
213
- - 如果工具执行失败,思考原因并尝试其他方法
214
- - 最大迭代次数: {maxIterations}
215
-
216
- ## 运行环境
217
- - 操作系统: {platform}
218
- - 工作目录: {workdir}
219
- `;
220
- const openaiTools = await getOpenAITools();
221
- const builtinToolsDesc = openaiTools.map(t => `- **${t.function.name}**: ${t.function.description}`).join('\n');
222
- return promptTemplate
223
- .replace('{platform}', platformName)
224
- .replace('{workdir}', workdir)
225
- .replace('{builtinTools}', builtinToolsDesc || '(无)')
226
- .replace('{skills}', skillsPrompt)
227
- .replace('{maxIterations}', String(this.maxIterations));
228
- }
229
- async loadRoleTemplate() {
230
- try {
231
- const fs = await import('fs/promises');
232
- const path = await import('path');
233
- const { fileURLToPath } = await import('url');
234
- const __filename = fileURLToPath(import.meta.url);
235
- const __dirname = path.dirname(__filename);
236
- return await fs.readFile(path.join(__dirname, 'prompts', 'role.txt'), 'utf-8');
237
- }
238
- catch {
239
- return '你是 txcode,一个帮助用户完成软件工程任务的交互式命令行工具。';
240
- }
241
- }
242
265
  addMessage(role, content, keepContext, isOriginal = false, toolCalls, toolCallId, sessionId) {
243
266
  if (!sessionId || !this.memoryService)
244
267
  return;