repoburg 1.0.54 → 1.0.57
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.
- package/backend/.env +3 -1
- package/backend/coverage/clover.xml +2409 -2355
- package/backend/coverage/coverage-final.json +99 -96
- package/backend/coverage/lcov-report/index.html +356 -341
- package/backend/coverage/lcov-report/src/action-execution/action-execution.module.ts.html +12 -12
- package/backend/coverage/lcov-report/src/action-execution/action-execution.service.ts.html +140 -62
- package/backend/coverage/lcov-report/src/action-execution/index.html +28 -28
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +188 -188
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-creation.service.ts.html +284 -236
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +109 -109
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +28 -28
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +193 -193
- package/backend/coverage/lcov-report/src/ai-actions/index.html +61 -61
- package/backend/coverage/lcov-report/src/app.controller.ts.html +24 -24
- package/backend/coverage/lcov-report/src/app.module.ts.html +68 -65
- package/backend/coverage/lcov-report/src/app.service.ts.html +46 -13
- package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +87 -33
- package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +18 -18
- package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +113 -68
- package/backend/coverage/lcov-report/src/application-state/dto/index.html +42 -27
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +12 -12
- package/backend/coverage/lcov-report/src/application-state/dto/set-orchestration-timeout.dto.ts.html +103 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +12 -12
- package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +12 -12
- package/backend/coverage/lcov-report/src/application-state/index.html +37 -37
- package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +16 -16
- package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +222 -222
- package/backend/coverage/lcov-report/src/context-generation/index.html +28 -28
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +31 -31
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +20 -20
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +26 -26
- package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +28 -28
- package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +13 -13
- package/backend/coverage/lcov-report/src/context-snippets/index.html +31 -31
- package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +45 -45
- package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +20 -20
- package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +87 -84
- package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +48 -48
- package/backend/coverage/lcov-report/src/context-templates/dto/index.html +13 -13
- package/backend/coverage/lcov-report/src/context-templates/index.html +36 -36
- package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +48 -48
- package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +14 -14
- package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +22 -22
- package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +18 -18
- package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +52 -52
- package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +20 -20
- package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +26 -26
- package/backend/coverage/lcov-report/src/core-entities/index.html +112 -112
- package/backend/coverage/lcov-report/src/core-entities/index.ts.html +28 -28
- package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +24 -24
- package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +59 -50
- package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +56 -56
- package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +28 -28
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +30 -30
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +18 -18
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +20 -20
- package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +28 -28
- package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +13 -13
- package/backend/coverage/lcov-report/src/custom-snippets/index.html +32 -32
- package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +46 -46
- package/backend/coverage/lcov-report/src/events/events.module.ts.html +12 -12
- package/backend/coverage/lcov-report/src/events/index.html +28 -28
- package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +1 -1
- package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +1 -1
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +18 -18
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +18 -18
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +32 -32
- package/backend/coverage/lcov-report/src/execution-logs/index.html +33 -33
- package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +55 -55
- package/backend/coverage/lcov-report/src/index.html +44 -44
- package/backend/coverage/lcov-report/src/llm-response-parser/dto/ai-action.dto.ts.html +67 -67
- package/backend/coverage/lcov-report/src/llm-response-parser/dto/index.html +21 -21
- package/backend/coverage/lcov-report/src/llm-response-parser/errors/index.html +17 -17
- package/backend/coverage/lcov-report/src/llm-response-parser/errors/parsing.error.ts.html +19 -19
- package/backend/coverage/lcov-report/src/llm-response-parser/index.html +35 -35
- package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.module.ts.html +12 -12
- package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.service.ts.html +208 -208
- package/backend/coverage/lcov-report/src/llm-response-parser/parsing.constants.ts.html +38 -38
- package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +21 -21
- package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +28 -28
- package/backend/coverage/lcov-report/src/llm-responses/index.html +38 -38
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +24 -24
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +38 -35
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +107 -86
- package/backend/coverage/lcov-report/src/main.ts.html +1 -1
- package/backend/coverage/lcov-report/src/orchestration/dto/index.html +13 -13
- package/backend/coverage/lcov-report/src/orchestration/dto/orchestration.dto.ts.html +30 -45
- package/backend/coverage/lcov-report/src/orchestration/index.html +74 -74
- package/backend/coverage/lcov-report/src/orchestration/orchestration-fs.service.ts.html +245 -128
- package/backend/coverage/lcov-report/src/orchestration/orchestration-parser.service.ts.html +32 -200
- package/backend/coverage/lcov-report/src/orchestration/orchestration.controller.ts.html +72 -102
- package/backend/coverage/lcov-report/src/orchestration/orchestration.module.ts.html +35 -38
- package/backend/coverage/lcov-report/src/orchestration/orchestration.service.ts.html +317 -425
- package/backend/coverage/lcov-report/src/orchestration/orchestration.types.ts.html +41 -35
- package/backend/coverage/lcov-report/src/projects/dto/index.html +13 -13
- package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +20 -20
- package/backend/coverage/lcov-report/src/projects/index.html +32 -32
- package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +28 -28
- package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +18 -18
- package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +20 -20
- package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +22 -22
- package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +21 -21
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/pm-context.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/pr-description.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/sample_focused-tree.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/codebase-explorer.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_multi-file-action-generator-with-requester.ts.html +8 -2
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +3 -3
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/packup.ts.html +1 -1
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/refactor-split.ts.html +244 -0
- package/backend/coverage/lcov-report/src/seeding/index.html +47 -47
- package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +24 -24
- package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +27 -27
- package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +21 -21
- package/backend/coverage/lcov-report/src/session-followup/index.html +28 -28
- package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +22 -22
- package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +44 -41
- package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +13 -13
- package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +40 -28
- package/backend/coverage/lcov-report/src/session-inputs/index.html +50 -50
- package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +168 -156
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +36 -36
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +40 -37
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +242 -236
- package/backend/coverage/lcov-report/src/session-transfer/index.html +22 -22
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +16 -16
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +30 -30
- package/backend/coverage/lcov-report/src/sessions/dto/index.html +21 -21
- package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +54 -54
- package/backend/coverage/lcov-report/src/sessions/index.html +39 -39
- package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +55 -55
- package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +30 -30
- package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +120 -120
- package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +19 -19
- package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +38 -29
- package/backend/coverage/lcov-report/src/system-prompts/index.html +37 -37
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +34 -34
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +20 -20
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +62 -62
- package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +1 -1
- package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
- package/backend/coverage/lcov-report/src/utils/index.html +131 -0
- package/backend/coverage/lcov-report/src/utils/index.ts.html +88 -0
- package/backend/coverage/lcov-report/src/workspace/dto/index.html +13 -13
- package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +24 -24
- package/backend/coverage/lcov-report/src/workspace/index.html +37 -37
- package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +26 -26
- package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +16 -16
- package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +259 -214
- package/backend/coverage/lcov.info +3284 -3186
- package/backend/dist/action-execution/action-execution.service.d.ts +2 -0
- package/backend/dist/action-execution/action-execution.service.js +31 -13
- package/backend/dist/action-execution/action-execution.service.js.map +1 -1
- package/backend/dist/context-generation/context-generation.service.d.ts +3 -3
- package/backend/dist/context-generation/context-generation.service.js.map +1 -1
- package/backend/dist/orchestration/orchestration.service.js +1 -0
- package/backend/dist/orchestration/orchestration.service.js.map +1 -1
- package/backend/dist/session-inputs/dto/session-input.dto.d.ts +1 -0
- package/backend/dist/session-inputs/dto/session-input.dto.js +5 -0
- package/backend/dist/session-inputs/dto/session-input.dto.js.map +1 -1
- package/backend/dist/session-inputs/session-input-context.service.js +12 -8
- package/backend/dist/session-inputs/session-input-context.service.js.map +1 -1
- package/backend/dist/session-inputs/session-inputs.service.js +2 -1
- package/backend/dist/session-inputs/session-inputs.service.js.map +1 -1
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/backend/dist/utils/fuzzy-search.d.ts +1 -0
- package/backend/dist/utils/fuzzy-search.js +54 -0
- package/backend/dist/utils/fuzzy-search.js.map +1 -0
- package/backend/dist/utils/index.d.ts +1 -0
- package/backend/dist/utils/index.js +18 -0
- package/backend/dist/utils/index.js.map +1 -0
- package/backend/dist/workspace/workspace.service.d.ts +2 -1
- package/backend/dist/workspace/workspace.service.js +53 -85
- package/backend/dist/workspace/workspace.service.js.map +1 -1
- package/backend/package.json +1 -1
- package/package.json +1 -1
- package/orchestration-test.txt +0 -3
package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.service.ts.html
CHANGED
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">91.81% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>101/110</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">79.16% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>38/48</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">83.33% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>5/6</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">93.26% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>97/104</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -304,11 +304,11 @@
|
|
|
304
304
|
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
305
|
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
306
|
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
-
<a name='L242'></a><a href='#L242'>242</a></td><td class="line-coverage quiet"><span class="cline-any cline-
|
|
308
|
-
<span class="cline-any cline-
|
|
309
|
-
<span class="cline-any cline-
|
|
310
|
-
<span class="cline-any cline-
|
|
311
|
-
<span class="cline-any cline-
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">10x</span>
|
|
308
|
+
<span class="cline-any cline-yes">10x</span>
|
|
309
|
+
<span class="cline-any cline-yes">10x</span>
|
|
310
|
+
<span class="cline-any cline-yes">10x</span>
|
|
311
|
+
<span class="cline-any cline-yes">10x</span>
|
|
312
312
|
<span class="cline-any cline-neutral"> </span>
|
|
313
313
|
<span class="cline-any cline-neutral"> </span>
|
|
314
314
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -325,31 +325,31 @@
|
|
|
325
325
|
<span class="cline-any cline-neutral"> </span>
|
|
326
326
|
<span class="cline-any cline-neutral"> </span>
|
|
327
327
|
<span class="cline-any cline-neutral"> </span>
|
|
328
|
-
<span class="cline-any cline-
|
|
329
|
-
<span class="cline-any cline-
|
|
328
|
+
<span class="cline-any cline-yes">10x</span>
|
|
329
|
+
<span class="cline-any cline-yes">33x</span>
|
|
330
330
|
<span class="cline-any cline-neutral"> </span>
|
|
331
331
|
<span class="cline-any cline-neutral"> </span>
|
|
332
|
-
<span class="cline-any cline-
|
|
333
|
-
<span class="cline-any cline-
|
|
334
|
-
<span class="cline-any cline-
|
|
332
|
+
<span class="cline-any cline-yes">36x</span>
|
|
333
|
+
<span class="cline-any cline-yes">34x</span>
|
|
334
|
+
<span class="cline-any cline-yes">34x</span>
|
|
335
335
|
<span class="cline-any cline-neutral"> </span>
|
|
336
336
|
<span class="cline-any cline-neutral"> </span>
|
|
337
|
-
<span class="cline-any cline-
|
|
337
|
+
<span class="cline-any cline-yes">19x</span>
|
|
338
338
|
<span class="cline-any cline-neutral"> </span>
|
|
339
339
|
<span class="cline-any cline-neutral"> </span>
|
|
340
|
-
<span class="cline-any cline-
|
|
340
|
+
<span class="cline-any cline-yes">5x</span>
|
|
341
341
|
<span class="cline-any cline-neutral"> </span>
|
|
342
342
|
<span class="cline-any cline-neutral"> </span>
|
|
343
|
-
<span class="cline-any cline-
|
|
343
|
+
<span class="cline-any cline-yes">4x</span>
|
|
344
344
|
<span class="cline-any cline-neutral"> </span>
|
|
345
|
-
<span class="cline-any cline-
|
|
345
|
+
<span class="cline-any cline-yes">4x</span>
|
|
346
346
|
<span class="cline-any cline-neutral"> </span>
|
|
347
|
-
<span class="cline-any cline-
|
|
347
|
+
<span class="cline-any cline-yes">1x</span>
|
|
348
348
|
<span class="cline-any cline-neutral"> </span>
|
|
349
349
|
<span class="cline-any cline-no"> </span>
|
|
350
350
|
<span class="cline-any cline-neutral"> </span>
|
|
351
|
-
<span class="cline-any cline-
|
|
352
|
-
<span class="cline-any cline-
|
|
351
|
+
<span class="cline-any cline-yes">1x</span>
|
|
352
|
+
<span class="cline-any cline-yes">1x</span>
|
|
353
353
|
<span class="cline-any cline-neutral"> </span>
|
|
354
354
|
<span class="cline-any cline-neutral"> </span>
|
|
355
355
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -363,146 +363,146 @@
|
|
|
363
363
|
<span class="cline-any cline-neutral"> </span>
|
|
364
364
|
<span class="cline-any cline-neutral"> </span>
|
|
365
365
|
<span class="cline-any cline-neutral"> </span>
|
|
366
|
-
<span class="cline-any cline-
|
|
367
|
-
<span class="cline-any cline-
|
|
366
|
+
<span class="cline-any cline-yes">36x</span>
|
|
367
|
+
<span class="cline-any cline-yes">2x</span>
|
|
368
368
|
<span class="cline-any cline-neutral"> </span>
|
|
369
369
|
<span class="cline-any cline-neutral"> </span>
|
|
370
|
-
<span class="cline-any cline-
|
|
371
|
-
<span class="cline-any cline-
|
|
372
|
-
<span class="cline-any cline-
|
|
370
|
+
<span class="cline-any cline-yes">34x</span>
|
|
371
|
+
<span class="cline-any cline-yes">34x</span>
|
|
372
|
+
<span class="cline-any cline-yes">34x</span>
|
|
373
373
|
<span class="cline-any cline-neutral"> </span>
|
|
374
|
-
<span class="cline-any cline-
|
|
375
|
-
<span class="cline-any cline-
|
|
376
|
-
<span class="cline-any cline-
|
|
377
|
-
<span class="cline-any cline-
|
|
374
|
+
<span class="cline-any cline-yes">34x</span>
|
|
375
|
+
<span class="cline-any cline-yes">21x</span>
|
|
376
|
+
<span class="cline-any cline-yes">21x</span>
|
|
377
|
+
<span class="cline-any cline-yes">13x</span>
|
|
378
378
|
<span class="cline-any cline-neutral"> </span>
|
|
379
|
-
<span class="cline-any cline-
|
|
379
|
+
<span class="cline-any cline-yes">2x</span>
|
|
380
380
|
<span class="cline-any cline-neutral"> </span>
|
|
381
381
|
<span class="cline-any cline-neutral"> </span>
|
|
382
382
|
<span class="cline-any cline-neutral"> </span>
|
|
383
|
-
<span class="cline-any cline-
|
|
383
|
+
<span class="cline-any cline-yes">2x</span>
|
|
384
384
|
<span class="cline-any cline-neutral"> </span>
|
|
385
385
|
<span class="cline-any cline-neutral"> </span>
|
|
386
386
|
<span class="cline-any cline-neutral"> </span>
|
|
387
387
|
<span class="cline-any cline-neutral"> </span>
|
|
388
|
-
<span class="cline-any cline-
|
|
388
|
+
<span class="cline-any cline-yes">32x</span>
|
|
389
389
|
<span class="cline-any cline-neutral"> </span>
|
|
390
|
-
<span class="cline-any cline-
|
|
390
|
+
<span class="cline-any cline-yes">70x</span>
|
|
391
391
|
<span class="cline-any cline-neutral"> </span>
|
|
392
|
-
<span class="cline-any cline-
|
|
392
|
+
<span class="cline-any cline-yes">32x</span>
|
|
393
393
|
<span class="cline-any cline-no"> </span>
|
|
394
394
|
<span class="cline-any cline-no"> </span>
|
|
395
395
|
<span class="cline-any cline-neutral"> </span>
|
|
396
396
|
<span class="cline-any cline-neutral"> </span>
|
|
397
|
-
<span class="cline-any cline-
|
|
398
|
-
<span class="cline-any cline-
|
|
399
|
-
<span class="cline-any cline-
|
|
397
|
+
<span class="cline-any cline-yes">32x</span>
|
|
398
|
+
<span class="cline-any cline-yes">32x</span>
|
|
399
|
+
<span class="cline-any cline-yes">38x</span>
|
|
400
400
|
<span class="cline-any cline-neutral"> </span>
|
|
401
401
|
<span class="cline-any cline-neutral"> </span>
|
|
402
402
|
<span class="cline-any cline-neutral"> </span>
|
|
403
403
|
<span class="cline-any cline-neutral"> </span>
|
|
404
|
-
<span class="cline-any cline-
|
|
405
|
-
<span class="cline-any cline-
|
|
404
|
+
<span class="cline-any cline-yes">38x</span>
|
|
405
|
+
<span class="cline-any cline-yes">38x</span>
|
|
406
406
|
<span class="cline-any cline-neutral"> </span>
|
|
407
|
-
<span class="cline-any cline-
|
|
407
|
+
<span class="cline-any cline-yes">38x</span>
|
|
408
408
|
<span class="cline-any cline-neutral"> </span>
|
|
409
|
-
<span class="cline-any cline-
|
|
410
|
-
<span class="cline-any cline-
|
|
409
|
+
<span class="cline-any cline-yes">36x</span>
|
|
410
|
+
<span class="cline-any cline-yes">2x</span>
|
|
411
411
|
<span class="cline-any cline-neutral"> </span>
|
|
412
412
|
<span class="cline-any cline-neutral"> </span>
|
|
413
|
-
<span class="cline-any cline-
|
|
413
|
+
<span class="cline-any cline-yes">1x</span>
|
|
414
414
|
<span class="cline-any cline-neutral"> </span>
|
|
415
415
|
<span class="cline-any cline-neutral"> </span>
|
|
416
|
-
<span class="cline-any cline-
|
|
416
|
+
<span class="cline-any cline-yes">1x</span>
|
|
417
417
|
<span class="cline-any cline-neutral"> </span>
|
|
418
418
|
<span class="cline-any cline-neutral"> </span>
|
|
419
|
-
<span class="cline-any cline-
|
|
419
|
+
<span class="cline-any cline-yes">1x</span>
|
|
420
420
|
<span class="cline-any cline-neutral"> </span>
|
|
421
421
|
<span class="cline-any cline-neutral"> </span>
|
|
422
422
|
<span class="cline-any cline-neutral"> </span>
|
|
423
423
|
<span class="cline-any cline-neutral"> </span>
|
|
424
424
|
<span class="cline-any cline-neutral"> </span>
|
|
425
|
-
<span class="cline-any cline-
|
|
426
|
-
<span class="cline-any cline-
|
|
427
|
-
<span class="cline-any cline-
|
|
428
|
-
<span class="cline-any cline-
|
|
429
|
-
<span class="cline-any cline-
|
|
425
|
+
<span class="cline-any cline-yes">37x</span>
|
|
426
|
+
<span class="cline-any cline-yes">1x</span>
|
|
427
|
+
<span class="cline-any cline-yes">1x</span>
|
|
428
|
+
<span class="cline-any cline-yes">1x</span>
|
|
429
|
+
<span class="cline-any cline-yes">1x</span>
|
|
430
430
|
<span class="cline-any cline-neutral"> </span>
|
|
431
431
|
<span class="cline-any cline-neutral"> </span>
|
|
432
|
-
<span class="cline-any cline-
|
|
432
|
+
<span class="cline-any cline-yes">1x</span>
|
|
433
433
|
<span class="cline-any cline-neutral"> </span>
|
|
434
434
|
<span class="cline-any cline-neutral"> </span>
|
|
435
|
-
<span class="cline-any cline-
|
|
435
|
+
<span class="cline-any cline-yes">1x</span>
|
|
436
436
|
<span class="cline-any cline-neutral"> </span>
|
|
437
437
|
<span class="cline-any cline-neutral"> </span>
|
|
438
438
|
<span class="cline-any cline-neutral"> </span>
|
|
439
|
-
<span class="cline-any cline-
|
|
440
|
-
<span class="cline-any cline-
|
|
441
|
-
<span class="cline-any cline-
|
|
439
|
+
<span class="cline-any cline-yes">36x</span>
|
|
440
|
+
<span class="cline-any cline-yes">36x</span>
|
|
441
|
+
<span class="cline-any cline-yes">36x</span>
|
|
442
442
|
<span class="cline-any cline-neutral"> </span>
|
|
443
443
|
<span class="cline-any cline-neutral"> </span>
|
|
444
|
-
<span class="cline-any cline-
|
|
445
|
-
<span class="cline-any cline-
|
|
446
|
-
<span class="cline-any cline-
|
|
444
|
+
<span class="cline-any cline-yes">36x</span>
|
|
445
|
+
<span class="cline-any cline-yes">25x</span>
|
|
446
|
+
<span class="cline-any cline-yes">25x</span>
|
|
447
447
|
<span class="cline-any cline-neutral"> </span>
|
|
448
448
|
<span class="cline-any cline-neutral"> </span>
|
|
449
|
-
<span class="cline-any cline-
|
|
449
|
+
<span class="cline-any cline-yes">25x</span>
|
|
450
450
|
<span class="cline-any cline-neutral"> </span>
|
|
451
451
|
<span class="cline-any cline-neutral"> </span>
|
|
452
|
-
<span class="cline-any cline-
|
|
453
|
-
<span class="cline-any cline-
|
|
452
|
+
<span class="cline-any cline-yes">25x</span>
|
|
453
|
+
<span class="cline-any cline-yes">25x</span>
|
|
454
454
|
<span class="cline-any cline-neutral"> </span>
|
|
455
|
-
<span class="cline-any cline-
|
|
455
|
+
<span class="cline-any cline-yes">11x</span>
|
|
456
456
|
<span class="cline-any cline-neutral"> </span>
|
|
457
457
|
<span class="cline-any cline-neutral"> </span>
|
|
458
458
|
<span class="cline-any cline-neutral"> </span>
|
|
459
|
-
<span class="cline-any cline-
|
|
460
|
-
<span class="cline-any cline-
|
|
461
|
-
<span class="cline-any cline-
|
|
462
|
-
<span class="cline-any cline-
|
|
463
|
-
<span class="cline-any cline-
|
|
464
|
-
<span class="cline-any cline-
|
|
465
|
-
<span class="cline-any cline-
|
|
459
|
+
<span class="cline-any cline-yes">36x</span>
|
|
460
|
+
<span class="cline-any cline-yes">36x</span>
|
|
461
|
+
<span class="cline-any cline-yes">176x</span>
|
|
462
|
+
<span class="cline-any cline-yes">105x</span>
|
|
463
|
+
<span class="cline-any cline-yes">105x</span>
|
|
464
|
+
<span class="cline-any cline-yes">105x</span>
|
|
465
|
+
<span class="cline-any cline-yes">105x</span>
|
|
466
466
|
<span class="cline-any cline-neutral"> </span>
|
|
467
467
|
<span class="cline-any cline-neutral"> </span>
|
|
468
468
|
<span class="cline-any cline-neutral"> </span>
|
|
469
|
-
<span class="cline-any cline-
|
|
469
|
+
<span class="cline-any cline-yes">36x</span>
|
|
470
470
|
<span class="cline-any cline-neutral"> </span>
|
|
471
|
-
<span class="cline-any cline-
|
|
472
|
-
<span class="cline-any cline-
|
|
473
|
-
<span class="cline-any cline-
|
|
474
|
-
<span class="cline-any cline-
|
|
471
|
+
<span class="cline-any cline-yes">36x</span>
|
|
472
|
+
<span class="cline-any cline-yes">36x</span>
|
|
473
|
+
<span class="cline-any cline-yes">36x</span>
|
|
474
|
+
<span class="cline-any cline-yes">3x</span>
|
|
475
475
|
<span class="cline-any cline-neutral"> </span>
|
|
476
476
|
<span class="cline-any cline-neutral"> </span>
|
|
477
477
|
<span class="cline-any cline-neutral"> </span>
|
|
478
478
|
<span class="cline-any cline-neutral"> </span>
|
|
479
|
-
<span class="cline-any cline-
|
|
480
|
-
<span class="cline-any cline-
|
|
479
|
+
<span class="cline-any cline-yes">33x</span>
|
|
480
|
+
<span class="cline-any cline-yes">32x</span>
|
|
481
481
|
<span class="cline-any cline-neutral"> </span>
|
|
482
482
|
<span class="cline-any cline-neutral"> </span>
|
|
483
483
|
<span class="cline-any cline-neutral"> </span>
|
|
484
|
-
<span class="cline-any cline-
|
|
485
|
-
<span class="cline-any cline-
|
|
484
|
+
<span class="cline-any cline-yes">32x</span>
|
|
485
|
+
<span class="cline-any cline-yes">1x</span>
|
|
486
486
|
<span class="cline-any cline-neutral"> </span>
|
|
487
487
|
<span class="cline-any cline-neutral"> </span>
|
|
488
488
|
<span class="cline-any cline-neutral"> </span>
|
|
489
489
|
<span class="cline-any cline-neutral"> </span>
|
|
490
490
|
<span class="cline-any cline-neutral"> </span>
|
|
491
|
-
<span class="cline-any cline-
|
|
492
|
-
<span class="cline-any cline-
|
|
493
|
-
<span class="cline-any cline-
|
|
494
|
-
<span class="cline-any cline-
|
|
495
|
-
<span class="cline-any cline-
|
|
496
|
-
<span class="cline-any cline-
|
|
491
|
+
<span class="cline-any cline-yes">32x</span>
|
|
492
|
+
<span class="cline-any cline-yes">32x</span>
|
|
493
|
+
<span class="cline-any cline-yes">32x</span>
|
|
494
|
+
<span class="cline-any cline-yes">32x</span>
|
|
495
|
+
<span class="cline-any cline-yes">32x</span>
|
|
496
|
+
<span class="cline-any cline-yes">32x</span>
|
|
497
497
|
<span class="cline-any cline-neutral"> </span>
|
|
498
498
|
<span class="cline-any cline-neutral"> </span>
|
|
499
|
-
<span class="cline-any cline-
|
|
500
|
-
<span class="cline-any cline-
|
|
501
|
-
<span class="cline-any cline-
|
|
502
|
-
<span class="cline-any cline-
|
|
503
|
-
<span class="cline-any cline-
|
|
499
|
+
<span class="cline-any cline-yes">32x</span>
|
|
500
|
+
<span class="cline-any cline-yes">32x</span>
|
|
501
|
+
<span class="cline-any cline-yes">29x</span>
|
|
502
|
+
<span class="cline-any cline-yes">27x</span>
|
|
503
|
+
<span class="cline-any cline-yes">26x</span>
|
|
504
504
|
<span class="cline-any cline-neutral"> </span>
|
|
505
|
-
<span class="cline-any cline-
|
|
505
|
+
<span class="cline-any cline-yes">6x</span>
|
|
506
506
|
<span class="cline-any cline-neutral"> </span>
|
|
507
507
|
<span class="cline-any cline-neutral"> </span>
|
|
508
508
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -510,8 +510,8 @@
|
|
|
510
510
|
<span class="cline-any cline-neutral"> </span>
|
|
511
511
|
<span class="cline-any cline-neutral"> </span>
|
|
512
512
|
<span class="cline-any cline-neutral"> </span>
|
|
513
|
-
<span class="cline-any cline-
|
|
514
|
-
<span class="cline-any cline-
|
|
513
|
+
<span class="cline-any cline-yes">26x</span>
|
|
514
|
+
<span class="cline-any cline-yes">26x</span>
|
|
515
515
|
<span class="cline-any cline-no"> </span>
|
|
516
516
|
<span class="cline-any cline-no"> </span>
|
|
517
517
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -520,9 +520,9 @@
|
|
|
520
520
|
<span class="cline-any cline-neutral"> </span>
|
|
521
521
|
<span class="cline-any cline-neutral"> </span>
|
|
522
522
|
<span class="cline-any cline-neutral"> </span>
|
|
523
|
-
<span class="cline-any cline-
|
|
523
|
+
<span class="cline-any cline-yes">26x</span>
|
|
524
524
|
<span class="cline-any cline-neutral"> </span>
|
|
525
|
-
<span class="cline-any cline-
|
|
525
|
+
<span class="cline-any cline-yes">11x</span>
|
|
526
526
|
<span class="cline-any cline-neutral"> </span>
|
|
527
527
|
<span class="cline-any cline-neutral"> </span>
|
|
528
528
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -531,25 +531,25 @@
|
|
|
531
531
|
<span class="cline-any cline-neutral"> </span>
|
|
532
532
|
<span class="cline-any cline-neutral"> </span>
|
|
533
533
|
<span class="cline-any cline-neutral"> </span>
|
|
534
|
-
<span class="cline-any cline-
|
|
535
|
-
<span class="cline-any cline-
|
|
534
|
+
<span class="cline-any cline-yes">31x</span>
|
|
535
|
+
<span class="cline-any cline-yes">5x</span>
|
|
536
536
|
<span class="cline-any cline-neutral"> </span>
|
|
537
537
|
<span class="cline-any cline-neutral"> </span>
|
|
538
538
|
<span class="cline-any cline-neutral"> </span>
|
|
539
539
|
<span class="cline-any cline-no"> </span>
|
|
540
|
-
<span class="cline-any cline-
|
|
541
|
-
<span class="cline-any cline-
|
|
542
|
-
<span class="cline-any cline-
|
|
540
|
+
<span class="cline-any cline-yes">5x</span>
|
|
541
|
+
<span class="cline-any cline-yes">5x</span>
|
|
542
|
+
<span class="cline-any cline-yes">5x</span>
|
|
543
543
|
<span class="cline-any cline-neutral"> </span>
|
|
544
544
|
<span class="cline-any cline-neutral"> </span>
|
|
545
|
-
<span class="cline-any cline-
|
|
545
|
+
<span class="cline-any cline-yes">31x</span>
|
|
546
546
|
<span class="cline-any cline-neutral"> </span>
|
|
547
547
|
<span class="cline-any cline-neutral"> </span>
|
|
548
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
548
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, Logger } from '@nestjs/common';
|
|
549
|
+
import { validate } from 'class-validator';
|
|
550
|
+
import { AIActionDto, AIActionType } from './dto/ai-action.dto';
|
|
551
|
+
import { ParsingError } from './errors/parsing.error';
|
|
552
|
+
import {
|
|
553
553
|
ACTION_ITEM_START_TAG,
|
|
554
554
|
ACTION_ITEM_END_TAG,
|
|
555
555
|
FIELD_CODE,
|
|
@@ -566,31 +566,31 @@
|
|
|
566
566
|
} from './parsing.constants';
|
|
567
567
|
|
|
568
568
|
@Injectable()
|
|
569
|
-
export
|
|
570
|
-
private readonly
|
|
569
|
+
export class LlmResponseParserService {
|
|
570
|
+
private readonly logger = new Logger(LlmResponseParserService.name);
|
|
571
571
|
|
|
572
|
-
private
|
|
573
|
-
|
|
574
|
-
const lowerType =
|
|
575
|
-
|
|
572
|
+
private mapActionType(type: string): AIActionType | undefined {
|
|
573
|
+
if (!type) return undefined;
|
|
574
|
+
const lowerType = type.toLowerCase().trim();
|
|
575
|
+
switch (lowerType) {
|
|
576
576
|
case 'create':
|
|
577
577
|
case 'create_file':
|
|
578
|
-
|
|
578
|
+
return AIActionType.CREATE_FILE;
|
|
579
579
|
case 'edit':
|
|
580
580
|
case 'edit_file':
|
|
581
|
-
|
|
581
|
+
return AIActionType.EDIT_FILE;
|
|
582
582
|
case 'delete':
|
|
583
583
|
case 'delete_file':
|
|
584
|
-
|
|
584
|
+
return AIActionType.DELETE_FILE;
|
|
585
585
|
case 'run_command':
|
|
586
|
-
|
|
586
|
+
return AIActionType.RUN_COMMAND;
|
|
587
587
|
case 'request_context':
|
|
588
|
-
|
|
589
|
-
case 'final'
|
|
588
|
+
return AIActionType.REQUEST_CONTEXT;
|
|
589
|
+
<span class="branch-8 cbranch-no" title="branch not covered" > case 'final':</span>
|
|
590
590
|
<span class="cstat-no" title="statement not covered" > return AIActionType.FINAL;</span>
|
|
591
591
|
default:
|
|
592
|
-
|
|
593
|
-
|
|
592
|
+
this.logger.warn(`Unsupported action type found: "${type}"`);
|
|
593
|
+
return undefined;
|
|
594
594
|
}
|
|
595
595
|
}
|
|
596
596
|
|
|
@@ -601,149 +601,149 @@ export <span class="fstat-no" title="function not covered" >class <span class="c
|
|
|
601
601
|
* @param rawResponse The raw string response from the LLM.
|
|
602
602
|
* @returns A Promise resolving to an object with an array of AIActionDto objects and an explanation string.
|
|
603
603
|
*/
|
|
604
|
-
|
|
604
|
+
async parse(
|
|
605
605
|
rawResponse: string,
|
|
606
606
|
): Promise<{ dtos: AIActionDto[]; explanation: string | null }> {
|
|
607
|
-
|
|
608
|
-
|
|
607
|
+
if (!rawResponse || rawResponse.trim() === '') {
|
|
608
|
+
return { dtos: [], explanation: null };
|
|
609
609
|
}
|
|
610
610
|
|
|
611
|
-
const firstActionStart =
|
|
612
|
-
let explanation: string | null =
|
|
613
|
-
let actionsPart =
|
|
611
|
+
const firstActionStart = rawResponse.indexOf(ACTION_ITEM_START_TAG);
|
|
612
|
+
let explanation: string | null = null;
|
|
613
|
+
let actionsPart = rawResponse;
|
|
614
614
|
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
} else
|
|
615
|
+
if (firstActionStart > 0) {
|
|
616
|
+
explanation = rawResponse.substring(0, firstActionStart).trim();
|
|
617
|
+
actionsPart = rawResponse.substring(firstActionStart);
|
|
618
|
+
} else if (firstActionStart === -1) {
|
|
619
619
|
// No action item start tags. If no end tags either, consider it all explanation.
|
|
620
|
-
|
|
620
|
+
if (
|
|
621
621
|
!rawResponse.includes(ACTION_ITEM_END_TAG) &&
|
|
622
622
|
!rawResponse.includes(PARTIAL_ACTION_ITEM_END_TAG)
|
|
623
623
|
) {
|
|
624
|
-
|
|
624
|
+
return { dtos: [], explanation: rawResponse.trim() };
|
|
625
625
|
}
|
|
626
626
|
// Otherwise, it might be a malformed response, so let the block parser handle it.
|
|
627
627
|
}
|
|
628
628
|
|
|
629
|
-
const actionBlocks =
|
|
629
|
+
const actionBlocks = actionsPart
|
|
630
630
|
.split(ACTION_ITEM_START_TAG)
|
|
631
|
-
.filter(
|
|
631
|
+
.filter((block) => block.trim() !== '');
|
|
632
632
|
|
|
633
|
-
|
|
633
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (actionBlocks.length === 0) {
|
|
634
634
|
<span class="cstat-no" title="statement not covered" > this.logger.log('No action item blocks found in the response.');</span>
|
|
635
635
|
<span class="cstat-no" title="statement not covered" > return { dtos: [], explanation };</span>
|
|
636
636
|
}
|
|
637
637
|
|
|
638
|
-
const dtos: AIActionDto[] =
|
|
639
|
-
|
|
640
|
-
|
|
638
|
+
const dtos: AIActionDto[] = [];
|
|
639
|
+
for (const block of actionBlocks) {
|
|
640
|
+
try {
|
|
641
641
|
let cleanBlock: string;
|
|
642
642
|
|
|
643
643
|
// Use a regex to split by either the full end tag or the partial one.
|
|
644
644
|
// This makes the parser more robust to truncated LLM outputs.
|
|
645
|
-
const endTagRegex =
|
|
646
|
-
const parts =
|
|
645
|
+
const endTagRegex = new RegExp(`${PARTIAL_ACTION_ITEM_END_TAG}§?`);
|
|
646
|
+
const parts = block.split(endTagRegex);
|
|
647
647
|
|
|
648
|
-
|
|
648
|
+
if (parts.length >= 2) {
|
|
649
649
|
// Normal case: End tag was found.
|
|
650
|
-
|
|
651
|
-
} else
|
|
650
|
+
cleanBlock = parts[0];
|
|
651
|
+
} else if (actionBlocks.length === 1 && parts.length === 1) {
|
|
652
652
|
// Special case: Only one action block and it's missing an end tag.
|
|
653
653
|
// We assume the rest of the response is the content of this single block.
|
|
654
|
-
|
|
654
|
+
this.logger.log(
|
|
655
655
|
'Only one action block found and it is missing an end tag. Assuming end of response is end of block.',
|
|
656
656
|
);
|
|
657
|
-
|
|
657
|
+
cleanBlock = parts[0];
|
|
658
658
|
} else {
|
|
659
659
|
// Malformed block that is not the special case above.
|
|
660
|
-
|
|
660
|
+
throw new ParsingError(
|
|
661
661
|
`Malformed action block, missing an end marker like '${ACTION_ITEM_END_TAG}'.`,
|
|
662
662
|
);
|
|
663
663
|
}
|
|
664
664
|
|
|
665
665
|
// Special handling for 'final' action with a 'plain' multiline field
|
|
666
|
-
|
|
667
|
-
const plainSeparator =
|
|
668
|
-
const plainIndex =
|
|
669
|
-
|
|
670
|
-
const plainContent =
|
|
666
|
+
if (/¦FileAction¦\s*final/.test(cleanBlock)) {
|
|
667
|
+
const plainSeparator = `¦${FIELD_PLAIN}¦`;
|
|
668
|
+
const plainIndex = cleanBlock.indexOf(plainSeparator);
|
|
669
|
+
if (plainIndex !== -1) {
|
|
670
|
+
const plainContent = cleanBlock
|
|
671
671
|
.substring(plainIndex + plainSeparator.length)
|
|
672
672
|
.trim();
|
|
673
|
-
|
|
673
|
+
this.logger.log(
|
|
674
674
|
`Parsed 'final' action with plain content. Returning as explanation.`,
|
|
675
675
|
);
|
|
676
|
-
|
|
676
|
+
return { dtos: [], explanation: plainContent };
|
|
677
677
|
}
|
|
678
678
|
}
|
|
679
679
|
|
|
680
|
-
const actionData: { [key: string]: string } =
|
|
681
|
-
const codeSeparator =
|
|
682
|
-
const codeIndex =
|
|
680
|
+
const actionData: { [key: string]: string } = {};
|
|
681
|
+
const codeSeparator = `¦${FIELD_CODE}¦`;
|
|
682
|
+
const codeIndex = cleanBlock.indexOf(codeSeparator);
|
|
683
683
|
|
|
684
684
|
let metadataPart: string;
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
let codePart =
|
|
685
|
+
if (codeIndex !== -1) {
|
|
686
|
+
metadataPart = cleanBlock.substring(0, codeIndex);
|
|
687
|
+
let codePart = cleanBlock.substring(codeIndex + codeSeparator.length);
|
|
688
688
|
|
|
689
689
|
// trim and extract from code block
|
|
690
|
-
|
|
690
|
+
codePart = codePart.trim();
|
|
691
691
|
// Use an anchored regex to only match if the fences are at the very start and end.
|
|
692
692
|
// This is more robust against code that contains ``` in string literals.
|
|
693
|
-
const codeMatch =
|
|
694
|
-
|
|
693
|
+
const codeMatch = codePart.match(/^```(?:\w*\n)?([\s\S]*)```$/);
|
|
694
|
+
actionData[FIELD_CODE] = codeMatch ? codeMatch[1].trim() : <span class="branch-1 cbranch-no" title="branch not covered" >codePart;</span>
|
|
695
695
|
} else {
|
|
696
|
-
|
|
696
|
+
metadataPart = cleanBlock;
|
|
697
697
|
// No code part
|
|
698
698
|
}
|
|
699
699
|
|
|
700
|
-
const lines =
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
const match =
|
|
704
|
-
|
|
705
|
-
const [, key, value] =
|
|
706
|
-
|
|
700
|
+
const lines = metadataPart.split('\n');
|
|
701
|
+
for (const line of lines) {
|
|
702
|
+
if (!line.trim()) continue;
|
|
703
|
+
const match = line.match(/¦(.*?)¦\s*(.*)/);
|
|
704
|
+
if (match) {
|
|
705
|
+
const [, key, value] = match;
|
|
706
|
+
actionData[key.trim()] = value.trim();
|
|
707
707
|
}
|
|
708
708
|
}
|
|
709
709
|
|
|
710
|
-
const dto =
|
|
710
|
+
const dto = new AIActionDto();
|
|
711
711
|
const actionTypeRaw =
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
712
|
+
actionData[FIELD_FILE_ACTION] || actionData[FIELD_ACTION_TYPE];
|
|
713
|
+
dto.action_type = this.mapActionType(actionTypeRaw);
|
|
714
|
+
if (!dto.action_type) {
|
|
715
|
+
throw new ParsingError(
|
|
716
716
|
`Unsupported or missing action type: "${actionTypeRaw}"`,
|
|
717
717
|
);
|
|
718
718
|
}
|
|
719
719
|
|
|
720
|
-
|
|
721
|
-
|
|
720
|
+
if (actionData[FIELD_ACTION_NUMBER]) {
|
|
721
|
+
dto.order_of_execution = parseInt(
|
|
722
722
|
actionData[FIELD_ACTION_NUMBER],
|
|
723
723
|
10,
|
|
724
724
|
);
|
|
725
|
-
|
|
726
|
-
|
|
725
|
+
if (isNaN(dto.order_of_execution)) {
|
|
726
|
+
throw new ParsingError(
|
|
727
727
|
`Invalid ActionNumber: ${actionData[FIELD_ACTION_NUMBER]}`,
|
|
728
728
|
);
|
|
729
729
|
}
|
|
730
730
|
}
|
|
731
731
|
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
732
|
+
dto.file_path = actionData[FIELD_FILE_PATH];
|
|
733
|
+
dto.command_string = actionData[FIELD_COMMAND_STRING];
|
|
734
|
+
dto.content = actionData[FIELD_CODE];
|
|
735
|
+
dto.files = actionData[FIELD_FILES_STRING];
|
|
736
|
+
dto.folders = actionData[FIELD_FOLDERS_STRING];
|
|
737
|
+
dto.reason = actionData[FIELD_REASON_STRING];
|
|
738
738
|
|
|
739
739
|
// Manual validation for context-dependent fields
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
740
|
+
try {
|
|
741
|
+
AIActionDto.validateFilePath(dto);
|
|
742
|
+
AIActionDto.validateContentForFileOps(dto);
|
|
743
|
+
AIActionDto.validateCommandString(dto);
|
|
744
|
+
AIActionDto.validateRequestContext(dto);
|
|
745
745
|
} catch (manualValidationError) {
|
|
746
|
-
|
|
746
|
+
throw new ParsingError(
|
|
747
747
|
`Validation failed for action: ${
|
|
748
748
|
(manualValidationError as Error).message
|
|
749
749
|
}`,
|
|
@@ -751,8 +751,8 @@ export <span class="fstat-no" title="function not covered" >class <span class="c
|
|
|
751
751
|
);
|
|
752
752
|
}
|
|
753
753
|
|
|
754
|
-
const errors =
|
|
755
|
-
|
|
754
|
+
const errors = await validate(dto);
|
|
755
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length > 0) {
|
|
756
756
|
const errorMessages = <span class="cstat-no" title="statement not covered" >errors</span>
|
|
757
757
|
.map(<span class="fstat-no" title="function not covered" >(e</span>rr) => <span class="cstat-no" title="statement not covered" >Object.values(err.constraints || {}).join(', '))</span>
|
|
758
758
|
.join('; ');
|
|
@@ -761,9 +761,9 @@ export <span class="fstat-no" title="function not covered" >class <span class="c
|
|
|
761
761
|
errors,
|
|
762
762
|
);
|
|
763
763
|
}
|
|
764
|
-
|
|
764
|
+
dtos.push(dto);
|
|
765
765
|
} catch (error) {
|
|
766
|
-
|
|
766
|
+
this.logger.warn(
|
|
767
767
|
`Skipping malformed action block due to error: ${error.message}`,
|
|
768
768
|
`Block content: ${block.substring(0, 200)}...`,
|
|
769
769
|
);
|
|
@@ -772,18 +772,18 @@ export <span class="fstat-no" title="function not covered" >class <span class="c
|
|
|
772
772
|
}
|
|
773
773
|
|
|
774
774
|
// Sort by order_of_execution if present
|
|
775
|
-
|
|
776
|
-
|
|
775
|
+
dtos.sort((a, b) => {
|
|
776
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
777
777
|
a.order_of_execution === undefined &&
|
|
778
|
-
b.order_of_execution === undefined
|
|
778
|
+
<span class="branch-1 cbranch-no" title="branch not covered" > b.order_of_execution === undefined</span>
|
|
779
779
|
)
|
|
780
780
|
<span class="cstat-no" title="statement not covered" > return 0;</span>
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
781
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (a.order_of_execution === undefined) <span class="cstat-no" title="statement not covered" >return 1;</span>
|
|
782
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (b.order_of_execution === undefined) <span class="cstat-no" title="statement not covered" >return -1;</span>
|
|
783
|
+
return a.order_of_execution - b.order_of_execution;
|
|
784
784
|
});
|
|
785
785
|
|
|
786
|
-
|
|
786
|
+
return { dtos, explanation };
|
|
787
787
|
}
|
|
788
788
|
}
|
|
789
789
|
</pre></td></tr></table></pre>
|
|
@@ -793,7 +793,7 @@ export <span class="fstat-no" title="function not covered" >class <span class="c
|
|
|
793
793
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
794
794
|
Code coverage generated by
|
|
795
795
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
796
|
-
at 2025-
|
|
796
|
+
at 2025-09-12T19:21:55.945Z
|
|
797
797
|
</div>
|
|
798
798
|
<script src="../../prettify.js"></script>
|
|
799
799
|
<script>
|