repoburg 1.0.55 → 1.0.58
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 +1 -0
- 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/ai-actions/ai-action-batch.service.d.ts +5 -1
- package/backend/dist/ai-actions/ai-action-batch.service.js +15 -2
- package/backend/dist/ai-actions/ai-action-batch.service.js.map +1 -1
- package/backend/dist/ai-actions/ai-action-creation.service.d.ts +5 -1
- package/backend/dist/ai-actions/ai-action-creation.service.js +32 -7
- package/backend/dist/ai-actions/ai-action-creation.service.js.map +1 -1
- package/backend/dist/ai-actions/ai-actions.module.js +4 -0
- package/backend/dist/ai-actions/ai-actions.module.js.map +1 -1
- package/backend/dist/application-state/application-state.controller.d.ts +5 -0
- package/backend/dist/application-state/application-state.controller.js +22 -0
- package/backend/dist/application-state/application-state.controller.js.map +1 -1
- package/backend/dist/application-state/application-state.service.d.ts +2 -0
- package/backend/dist/application-state/application-state.service.js +11 -0
- package/backend/dist/application-state/application-state.service.js.map +1 -1
- package/backend/dist/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.d.ts +3 -0
- package/backend/dist/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.js +21 -0
- package/backend/dist/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.js.map +1 -0
- package/backend/dist/context-generation/context-generation.service.d.ts +2 -2
- 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/seeding/data/context-templates/default-followup_ad-hoc-focused-context.d.ts +1 -1
- package/backend/dist/seeding/data/context-templates/default-followup_ad-hoc-focused-context.js +2 -0
- package/backend/dist/seeding/data/context-templates/default-followup_ad-hoc-focused-context.js.map +1 -1
- package/backend/dist/seeding/data/custom-snippets/usr-cmd-output-incl.d.ts +3 -0
- package/backend/dist/seeding/data/custom-snippets/usr-cmd-output-incl.js +7 -0
- package/backend/dist/seeding/data/custom-snippets/usr-cmd-output-incl.js.map +1 -0
- package/backend/dist/seeding/data/system-prompts/codebase-explorer.d.ts +1 -1
- package/backend/dist/seeding/data/system-prompts/codebase-explorer.js +31 -4
- package/backend/dist/seeding/data/system-prompts/codebase-explorer.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 +13 -5
- 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.js +13 -4
- package/backend/dist/utils/fuzzy-search.js.map +1 -1
- package/backend/dist/workspace/workspace.service.d.ts +1 -0
- package/backend/dist/workspace/workspace.service.js +14 -3
- package/backend/dist/workspace/workspace.service.js.map +1 -1
- package/package.json +1 -1
- package/orchestration-test.txt +0 -3
|
@@ -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">69.67% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>108/155</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">45.16% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>28/62</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>8/8</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">69.28% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>106/153</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 medium'></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>
|
|
@@ -433,48 +433,64 @@
|
|
|
433
433
|
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
434
|
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
435
|
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
-
<a name='L371'></a><a href='#L371'>371</a
|
|
437
|
-
<
|
|
438
|
-
<
|
|
439
|
-
<
|
|
440
|
-
<
|
|
441
|
-
<
|
|
442
|
-
<
|
|
443
|
-
<
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
+
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
+
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
+
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
+
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
+
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
+
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
+
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
+
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
+
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">9x</span>
|
|
453
|
+
<span class="cline-any cline-yes">9x</span>
|
|
454
|
+
<span class="cline-any cline-yes">9x</span>
|
|
455
|
+
<span class="cline-any cline-yes">9x</span>
|
|
456
|
+
<span class="cline-any cline-yes">9x</span>
|
|
457
|
+
<span class="cline-any cline-yes">9x</span>
|
|
458
|
+
<span class="cline-any cline-yes">9x</span>
|
|
459
|
+
<span class="cline-any cline-yes">9x</span>
|
|
444
460
|
<span class="cline-any cline-neutral"> </span>
|
|
445
461
|
<span class="cline-any cline-neutral"> </span>
|
|
446
462
|
<span class="cline-any cline-neutral"> </span>
|
|
447
|
-
<span class="cline-any cline-
|
|
448
|
-
<span class="cline-any cline-
|
|
463
|
+
<span class="cline-any cline-yes">9x</span>
|
|
464
|
+
<span class="cline-any cline-yes">9x</span>
|
|
449
465
|
<span class="cline-any cline-neutral"> </span>
|
|
450
466
|
<span class="cline-any cline-neutral"> </span>
|
|
451
|
-
<span class="cline-any cline-
|
|
452
|
-
<span class="cline-any cline-
|
|
467
|
+
<span class="cline-any cline-yes">9x</span>
|
|
468
|
+
<span class="cline-any cline-yes">13x</span>
|
|
453
469
|
<span class="cline-any cline-neutral"> </span>
|
|
454
470
|
<span class="cline-any cline-neutral"> </span>
|
|
455
471
|
<span class="cline-any cline-neutral"> </span>
|
|
456
|
-
<span class="cline-any cline-
|
|
472
|
+
<span class="cline-any cline-yes">13x</span>
|
|
457
473
|
<span class="cline-any cline-neutral"> </span>
|
|
458
|
-
<span class="cline-any cline-
|
|
459
|
-
<span class="cline-any cline-
|
|
460
|
-
<span class="cline-any cline-
|
|
461
|
-
<span class="cline-any cline-
|
|
474
|
+
<span class="cline-any cline-yes">13x</span>
|
|
475
|
+
<span class="cline-any cline-yes">13x</span>
|
|
476
|
+
<span class="cline-any cline-yes">13x</span>
|
|
477
|
+
<span class="cline-any cline-yes">13x</span>
|
|
462
478
|
<span class="cline-any cline-neutral"> </span>
|
|
463
479
|
<span class="cline-any cline-neutral"> </span>
|
|
464
480
|
<span class="cline-any cline-neutral"> </span>
|
|
465
481
|
<span class="cline-any cline-neutral"> </span>
|
|
466
482
|
<span class="cline-any cline-neutral"> </span>
|
|
467
483
|
<span class="cline-any cline-neutral"> </span>
|
|
468
|
-
<span class="cline-any cline-
|
|
469
|
-
<span class="cline-any cline-
|
|
484
|
+
<span class="cline-any cline-yes">16x</span>
|
|
485
|
+
<span class="cline-any cline-yes">18x</span>
|
|
470
486
|
<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-
|
|
487
|
+
<span class="cline-any cline-yes">16x</span>
|
|
488
|
+
<span class="cline-any cline-yes">1x</span>
|
|
489
|
+
<span class="cline-any cline-yes">1x</span>
|
|
474
490
|
<span class="cline-any cline-neutral"> </span>
|
|
475
491
|
<span class="cline-any cline-neutral"> </span>
|
|
476
492
|
<span class="cline-any cline-neutral"> </span>
|
|
477
|
-
<span class="cline-any cline-
|
|
493
|
+
<span class="cline-any cline-yes">1x</span>
|
|
478
494
|
<span class="cline-any cline-neutral"> </span>
|
|
479
495
|
<span class="cline-any cline-neutral"> </span>
|
|
480
496
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -484,13 +500,13 @@
|
|
|
484
500
|
<span class="cline-any cline-neutral"> </span>
|
|
485
501
|
<span class="cline-any cline-neutral"> </span>
|
|
486
502
|
<span class="cline-any cline-neutral"> </span>
|
|
487
|
-
<span class="cline-any cline-
|
|
488
|
-
<span class="cline-any cline-
|
|
503
|
+
<span class="cline-any cline-yes">1x</span>
|
|
504
|
+
<span class="cline-any cline-yes">1x</span>
|
|
489
505
|
<span class="cline-any cline-neutral"> </span>
|
|
490
506
|
<span class="cline-any cline-neutral"> </span>
|
|
491
|
-
<span class="cline-any cline-
|
|
507
|
+
<span class="cline-any cline-yes">1x</span>
|
|
492
508
|
<span class="cline-any cline-neutral"> </span>
|
|
493
|
-
<span class="cline-any cline-
|
|
509
|
+
<span class="cline-any cline-yes">15x</span>
|
|
494
510
|
<span class="cline-any cline-neutral"> </span>
|
|
495
511
|
<span class="cline-any cline-neutral"> </span>
|
|
496
512
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -504,7 +520,7 @@
|
|
|
504
520
|
<span class="cline-any cline-neutral"> </span>
|
|
505
521
|
<span class="cline-any cline-neutral"> </span>
|
|
506
522
|
<span class="cline-any cline-neutral"> </span>
|
|
507
|
-
<span class="cline-any cline-
|
|
523
|
+
<span class="cline-any cline-yes">6x</span>
|
|
508
524
|
<span class="cline-any cline-no"> </span>
|
|
509
525
|
<span class="cline-any cline-neutral"> </span>
|
|
510
526
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -512,24 +528,24 @@
|
|
|
512
528
|
<span class="cline-any cline-neutral"> </span>
|
|
513
529
|
<span class="cline-any cline-neutral"> </span>
|
|
514
530
|
<span class="cline-any cline-neutral"> </span>
|
|
515
|
-
<span class="cline-any cline-
|
|
531
|
+
<span class="cline-any cline-yes">6x</span>
|
|
516
532
|
<span class="cline-any cline-neutral"> </span>
|
|
517
|
-
<span class="cline-any cline-
|
|
533
|
+
<span class="cline-any cline-yes">6x</span>
|
|
518
534
|
<span class="cline-any cline-no"> </span>
|
|
519
535
|
<span class="cline-any cline-no"> </span>
|
|
520
536
|
<span class="cline-any cline-neutral"> </span>
|
|
521
537
|
<span class="cline-any cline-neutral"> </span>
|
|
522
|
-
<span class="cline-any cline-
|
|
538
|
+
<span class="cline-any cline-yes">6x</span>
|
|
523
539
|
<span class="cline-any cline-neutral"> </span>
|
|
524
540
|
<span class="cline-any cline-neutral"> </span>
|
|
525
541
|
<span class="cline-any cline-neutral"> </span>
|
|
526
|
-
<span class="cline-any cline-
|
|
527
|
-
<span class="cline-any cline-
|
|
542
|
+
<span class="cline-any cline-yes">6x</span>
|
|
543
|
+
<span class="cline-any cline-yes">1x</span>
|
|
528
544
|
<span class="cline-any cline-neutral"> </span>
|
|
529
545
|
<span class="cline-any cline-neutral"> </span>
|
|
530
|
-
<span class="cline-any cline-
|
|
531
|
-
<span class="cline-any cline-
|
|
532
|
-
<span class="cline-any cline-
|
|
546
|
+
<span class="cline-any cline-yes">5x</span>
|
|
547
|
+
<span class="cline-any cline-yes">5x</span>
|
|
548
|
+
<span class="cline-any cline-yes">5x</span>
|
|
533
549
|
<span class="cline-any cline-neutral"> </span>
|
|
534
550
|
<span class="cline-any cline-neutral"> </span>
|
|
535
551
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -543,13 +559,13 @@
|
|
|
543
559
|
<span class="cline-any cline-neutral"> </span>
|
|
544
560
|
<span class="cline-any cline-neutral"> </span>
|
|
545
561
|
<span class="cline-any cline-neutral"> </span>
|
|
546
|
-
<span class="cline-any cline-
|
|
547
|
-
<span class="cline-any cline-
|
|
562
|
+
<span class="cline-any cline-yes">5x</span>
|
|
563
|
+
<span class="cline-any cline-yes">5x</span>
|
|
548
564
|
<span class="cline-any cline-neutral"> </span>
|
|
549
|
-
<span class="cline-any cline-
|
|
565
|
+
<span class="cline-any cline-yes">5x</span>
|
|
550
566
|
<span class="cline-any cline-neutral"> </span>
|
|
551
567
|
<span class="cline-any cline-neutral"> </span>
|
|
552
|
-
<span class="cline-any cline-
|
|
568
|
+
<span class="cline-any cline-yes">5x</span>
|
|
553
569
|
<span class="cline-any cline-neutral"> </span>
|
|
554
570
|
<span class="cline-any cline-neutral"> </span>
|
|
555
571
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -558,11 +574,11 @@
|
|
|
558
574
|
<span class="cline-any cline-neutral"> </span>
|
|
559
575
|
<span class="cline-any cline-neutral"> </span>
|
|
560
576
|
<span class="cline-any cline-neutral"> </span>
|
|
561
|
-
<span class="cline-any cline-
|
|
577
|
+
<span class="cline-any cline-yes">2x</span>
|
|
562
578
|
<span class="cline-any cline-no"> </span>
|
|
563
579
|
<span class="cline-any cline-neutral"> </span>
|
|
564
|
-
<span class="cline-any cline-
|
|
565
|
-
<span class="cline-any cline-
|
|
580
|
+
<span class="cline-any cline-yes">2x</span>
|
|
581
|
+
<span class="cline-any cline-yes">2x</span>
|
|
566
582
|
<span class="cline-any cline-neutral"> </span>
|
|
567
583
|
<span class="cline-any cline-no"> </span>
|
|
568
584
|
<span class="cline-any cline-no"> </span>
|
|
@@ -582,7 +598,7 @@
|
|
|
582
598
|
<span class="cline-any cline-neutral"> </span>
|
|
583
599
|
<span class="cline-any cline-neutral"> </span>
|
|
584
600
|
<span class="cline-any cline-neutral"> </span>
|
|
585
|
-
<span class="cline-any cline-
|
|
601
|
+
<span class="cline-any cline-yes">5x</span>
|
|
586
602
|
<span class="cline-any cline-no"> </span>
|
|
587
603
|
<span class="cline-any cline-neutral"> </span>
|
|
588
604
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -590,25 +606,25 @@
|
|
|
590
606
|
<span class="cline-any cline-neutral"> </span>
|
|
591
607
|
<span class="cline-any cline-neutral"> </span>
|
|
592
608
|
<span class="cline-any cline-neutral"> </span>
|
|
593
|
-
<span class="cline-any cline-
|
|
609
|
+
<span class="cline-any cline-yes">5x</span>
|
|
594
610
|
<span class="cline-any cline-neutral"> </span>
|
|
595
|
-
<span class="cline-any cline-
|
|
611
|
+
<span class="cline-any cline-yes">5x</span>
|
|
596
612
|
<span class="cline-any cline-no"> </span>
|
|
597
613
|
<span class="cline-any cline-no"> </span>
|
|
598
614
|
<span class="cline-any cline-neutral"> </span>
|
|
599
615
|
<span class="cline-any cline-neutral"> </span>
|
|
600
|
-
<span class="cline-any cline-
|
|
616
|
+
<span class="cline-any cline-yes">5x</span>
|
|
601
617
|
<span class="cline-any cline-neutral"> </span>
|
|
602
618
|
<span class="cline-any cline-neutral"> </span>
|
|
603
619
|
<span class="cline-any cline-neutral"> </span>
|
|
604
|
-
<span class="cline-any cline-
|
|
620
|
+
<span class="cline-any cline-yes">5x</span>
|
|
605
621
|
<span class="cline-any cline-no"> </span>
|
|
606
622
|
<span class="cline-any cline-neutral"> </span>
|
|
607
623
|
<span class="cline-any cline-neutral"> </span>
|
|
608
|
-
<span class="cline-any cline-
|
|
624
|
+
<span class="cline-any cline-yes">5x</span>
|
|
609
625
|
<span class="cline-any cline-neutral"> </span>
|
|
610
|
-
<span class="cline-any cline-
|
|
611
|
-
<span class="cline-any cline-
|
|
626
|
+
<span class="cline-any cline-yes">5x</span>
|
|
627
|
+
<span class="cline-any cline-yes">6x</span>
|
|
612
628
|
<span class="cline-any cline-neutral"> </span>
|
|
613
629
|
<span class="cline-any cline-neutral"> </span>
|
|
614
630
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -623,42 +639,42 @@
|
|
|
623
639
|
<span class="cline-any cline-neutral"> </span>
|
|
624
640
|
<span class="cline-any cline-neutral"> </span>
|
|
625
641
|
<span class="cline-any cline-neutral"> </span>
|
|
626
|
-
<span class="cline-any cline-
|
|
642
|
+
<span class="cline-any cline-yes">6x</span>
|
|
627
643
|
<span class="cline-any cline-neutral"> </span>
|
|
628
644
|
<span class="cline-any cline-neutral"> </span>
|
|
629
645
|
<span class="cline-any cline-neutral"> </span>
|
|
630
|
-
<span class="cline-any cline-
|
|
646
|
+
<span class="cline-any cline-yes">2x</span>
|
|
631
647
|
<span class="cline-any cline-neutral"> </span>
|
|
632
648
|
<span class="cline-any cline-neutral"> </span>
|
|
633
649
|
<span class="cline-any cline-neutral"> </span>
|
|
634
650
|
<span class="cline-any cline-neutral"> </span>
|
|
635
|
-
<span class="cline-any cline-
|
|
636
|
-
<span class="cline-any cline-
|
|
637
|
-
<span class="cline-any cline-
|
|
651
|
+
<span class="cline-any cline-yes">6x</span>
|
|
652
|
+
<span class="cline-any cline-yes">6x</span>
|
|
653
|
+
<span class="cline-any cline-yes">6x</span>
|
|
638
654
|
<span class="cline-any cline-neutral"> </span>
|
|
639
|
-
<span class="cline-any cline-
|
|
640
|
-
<span class="cline-any cline-
|
|
655
|
+
<span class="cline-any cline-yes">6x</span>
|
|
656
|
+
<span class="cline-any cline-yes">6x</span>
|
|
641
657
|
<span class="cline-any cline-neutral"> </span>
|
|
642
658
|
<span class="cline-any cline-neutral"> </span>
|
|
643
|
-
<span class="cline-any cline-
|
|
659
|
+
<span class="cline-any cline-yes">6x</span>
|
|
644
660
|
<span class="cline-any cline-neutral"> </span>
|
|
661
|
+
<span class="cline-any cline-yes">4x</span>
|
|
645
662
|
<span class="cline-any cline-no"> </span>
|
|
646
|
-
<span class="cline-any cline-
|
|
647
|
-
<span class="cline-any cline-no"> </span>
|
|
663
|
+
<span class="cline-any cline-yes">4x</span>
|
|
648
664
|
<span class="cline-any cline-neutral"> </span>
|
|
649
665
|
<span class="cline-any cline-neutral"> </span>
|
|
650
666
|
<span class="cline-any cline-neutral"> </span>
|
|
651
|
-
<span class="cline-any cline-
|
|
652
|
-
<span class="cline-any cline-
|
|
667
|
+
<span class="cline-any cline-yes">3x</span>
|
|
668
|
+
<span class="cline-any cline-yes">3x</span>
|
|
653
669
|
<span class="cline-any cline-neutral"> </span>
|
|
670
|
+
<span class="cline-any cline-yes">2x</span>
|
|
654
671
|
<span class="cline-any cline-no"> </span>
|
|
655
|
-
<span class="cline-any cline-
|
|
656
|
-
<span class="cline-any cline-no"> </span>
|
|
672
|
+
<span class="cline-any cline-yes">2x</span>
|
|
657
673
|
<span class="cline-any cline-neutral"> </span>
|
|
658
674
|
<span class="cline-any cline-neutral"> </span>
|
|
659
675
|
<span class="cline-any cline-neutral"> </span>
|
|
660
|
-
<span class="cline-any cline-
|
|
661
|
-
<span class="cline-any cline-
|
|
676
|
+
<span class="cline-any cline-yes">2x</span>
|
|
677
|
+
<span class="cline-any cline-yes">2x</span>
|
|
662
678
|
<span class="cline-any cline-neutral"> </span>
|
|
663
679
|
<span class="cline-any cline-no"> </span>
|
|
664
680
|
<span class="cline-any cline-no"> </span>
|
|
@@ -687,41 +703,41 @@
|
|
|
687
703
|
<span class="cline-any cline-neutral"> </span>
|
|
688
704
|
<span class="cline-any cline-no"> </span>
|
|
689
705
|
<span class="cline-any cline-neutral"> </span>
|
|
690
|
-
<span class="cline-any cline-
|
|
691
|
-
<span class="cline-any cline-
|
|
692
|
-
<span class="cline-any cline-
|
|
706
|
+
<span class="cline-any cline-yes">5x</span>
|
|
707
|
+
<span class="cline-any cline-yes">5x</span>
|
|
708
|
+
<span class="cline-any cline-yes">5x</span>
|
|
693
709
|
<span class="cline-any cline-neutral"> </span>
|
|
694
710
|
<span class="cline-any cline-neutral"> </span>
|
|
695
711
|
<span class="cline-any cline-neutral"> </span>
|
|
696
|
-
<span class="cline-any cline-
|
|
697
|
-
<span class="cline-any cline-
|
|
698
|
-
<span class="cline-any cline-
|
|
699
|
-
<span class="cline-any cline-
|
|
712
|
+
<span class="cline-any cline-yes">1x</span>
|
|
713
|
+
<span class="cline-any cline-yes">1x</span>
|
|
714
|
+
<span class="cline-any cline-yes">1x</span>
|
|
715
|
+
<span class="cline-any cline-yes">1x</span>
|
|
700
716
|
<span class="cline-any cline-neutral"> </span>
|
|
701
717
|
<span class="cline-any cline-neutral"> </span>
|
|
702
718
|
<span class="cline-any cline-neutral"> </span>
|
|
703
719
|
<span class="cline-any cline-neutral"> </span>
|
|
704
720
|
<span class="cline-any cline-neutral"> </span>
|
|
705
|
-
<span class="cline-any cline-
|
|
721
|
+
<span class="cline-any cline-yes">6x</span>
|
|
706
722
|
<span class="cline-any cline-neutral"> </span>
|
|
707
|
-
<span class="cline-any cline-
|
|
723
|
+
<span class="cline-any cline-yes">6x</span>
|
|
708
724
|
<span class="cline-any cline-neutral"> </span>
|
|
709
725
|
<span class="cline-any cline-neutral"> </span>
|
|
710
726
|
<span class="cline-any cline-neutral"> </span>
|
|
711
727
|
<span class="cline-any cline-neutral"> </span>
|
|
712
|
-
<span class="cline-any cline-
|
|
713
|
-
<span class="cline-any cline-
|
|
728
|
+
<span class="cline-any cline-yes">6x</span>
|
|
729
|
+
<span class="cline-any cline-yes">6x</span>
|
|
714
730
|
<span class="cline-any cline-neutral"> </span>
|
|
715
|
-
<span class="cline-any cline-
|
|
731
|
+
<span class="cline-any cline-yes">5x</span>
|
|
716
732
|
<span class="cline-any cline-neutral"> </span>
|
|
717
733
|
<span class="cline-any cline-neutral"> </span>
|
|
718
|
-
<span class="cline-any cline-
|
|
734
|
+
<span class="cline-any cline-yes">5x</span>
|
|
719
735
|
<span class="cline-any cline-neutral"> </span>
|
|
720
736
|
<span class="cline-any cline-neutral"> </span>
|
|
721
737
|
<span class="cline-any cline-neutral"> </span>
|
|
722
738
|
<span class="cline-any cline-neutral"> </span>
|
|
723
739
|
<span class="cline-any cline-neutral"> </span>
|
|
724
|
-
<span class="cline-any cline-
|
|
740
|
+
<span class="cline-any cline-yes">5x</span>
|
|
725
741
|
<span class="cline-any cline-no"> </span>
|
|
726
742
|
<span class="cline-any cline-neutral"> </span>
|
|
727
743
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -729,65 +745,78 @@
|
|
|
729
745
|
<span class="cline-any cline-neutral"> </span>
|
|
730
746
|
<span class="cline-any cline-neutral"> </span>
|
|
731
747
|
<span class="cline-any cline-neutral"> </span>
|
|
732
|
-
<span class="cline-any cline-
|
|
748
|
+
<span class="cline-any cline-yes">5x</span>
|
|
733
749
|
<span class="cline-any cline-neutral"> </span>
|
|
734
|
-
<span class="cline-any cline-
|
|
750
|
+
<span class="cline-any cline-yes">5x</span>
|
|
735
751
|
<span class="cline-any cline-no"> </span>
|
|
736
752
|
<span class="cline-any cline-no"> </span>
|
|
737
753
|
<span class="cline-any cline-neutral"> </span>
|
|
738
754
|
<span class="cline-any cline-neutral"> </span>
|
|
739
|
-
<span class="cline-any cline-
|
|
755
|
+
<span class="cline-any cline-yes">5x</span>
|
|
740
756
|
<span class="cline-any cline-neutral"> </span>
|
|
741
757
|
<span class="cline-any cline-neutral"> </span>
|
|
742
758
|
<span class="cline-any cline-neutral"> </span>
|
|
743
|
-
<span class="cline-any cline-
|
|
759
|
+
<span class="cline-any cline-yes">5x</span>
|
|
744
760
|
<span class="cline-any cline-no"> </span>
|
|
745
761
|
<span class="cline-any cline-neutral"> </span>
|
|
746
762
|
<span class="cline-any cline-neutral"> </span>
|
|
747
|
-
<span class="cline-any cline-
|
|
748
|
-
<span class="cline-any cline-
|
|
749
|
-
<span class="cline-any cline-
|
|
763
|
+
<span class="cline-any cline-yes">5x</span>
|
|
764
|
+
<span class="cline-any cline-yes">5x</span>
|
|
765
|
+
<span class="cline-any cline-yes">5x</span>
|
|
750
766
|
<span class="cline-any cline-neutral"> </span>
|
|
751
767
|
<span class="cline-any cline-neutral"> </span>
|
|
752
768
|
<span class="cline-any cline-neutral"> </span>
|
|
753
769
|
<span class="cline-any cline-neutral"> </span>
|
|
754
770
|
<span class="cline-any cline-neutral"> </span>
|
|
755
771
|
<span class="cline-any cline-neutral"> </span>
|
|
756
|
-
<span class="cline-any cline-no"> </span>
|
|
757
|
-
<span class="cline-any cline-no"> </span>
|
|
758
772
|
<span class="cline-any cline-neutral"> </span>
|
|
759
|
-
<span class="cline-any cline-
|
|
760
|
-
<span class="cline-any cline-no"> </span>
|
|
761
|
-
<span class="cline-any cline-no"> </span>
|
|
762
|
-
<span class="cline-any cline-no"> </span>
|
|
773
|
+
<span class="cline-any cline-yes">5x</span>
|
|
763
774
|
<span class="cline-any cline-neutral"> </span>
|
|
764
775
|
<span class="cline-any cline-neutral"> </span>
|
|
765
776
|
<span class="cline-any cline-neutral"> </span>
|
|
766
777
|
<span class="cline-any cline-no"> </span>
|
|
767
778
|
<span class="cline-any cline-neutral"> </span>
|
|
768
|
-
<span class="cline-any cline-no"> </span>
|
|
769
|
-
<span class="cline-any cline-no"> </span>
|
|
770
|
-
<span class="cline-any cline-no"> </span>
|
|
771
779
|
<span class="cline-any cline-neutral"> </span>
|
|
772
780
|
<span class="cline-any cline-neutral"> </span>
|
|
773
781
|
<span class="cline-any cline-neutral"> </span>
|
|
774
|
-
<span class="cline-any cline-
|
|
775
|
-
<span class="cline-any cline-
|
|
782
|
+
<span class="cline-any cline-yes">5x</span>
|
|
783
|
+
<span class="cline-any cline-yes">5x</span>
|
|
776
784
|
<span class="cline-any cline-neutral"> </span>
|
|
785
|
+
<span class="cline-any cline-yes">5x</span>
|
|
786
|
+
<span class="cline-any cline-yes">3x</span>
|
|
787
|
+
<span class="cline-any cline-yes">3x</span>
|
|
788
|
+
<span class="cline-any cline-yes">3x</span>
|
|
777
789
|
<span class="cline-any cline-neutral"> </span>
|
|
778
790
|
<span class="cline-any cline-neutral"> </span>
|
|
779
791
|
<span class="cline-any cline-neutral"> </span>
|
|
780
|
-
<span class="cline-any cline-
|
|
792
|
+
<span class="cline-any cline-yes">3x</span>
|
|
781
793
|
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-yes">2x</span>
|
|
795
|
+
<span class="cline-any cline-yes">2x</span>
|
|
796
|
+
<span class="cline-any cline-yes">2x</span>
|
|
782
797
|
<span class="cline-any cline-neutral"> </span>
|
|
783
|
-
<span class="cline-any cline-no"> </span>
|
|
784
798
|
<span class="cline-any cline-neutral"> </span>
|
|
785
799
|
<span class="cline-any cline-neutral"> </span>
|
|
800
|
+
<span class="cline-any cline-yes">2x</span>
|
|
801
|
+
<span class="cline-any cline-yes">2x</span>
|
|
786
802
|
<span class="cline-any cline-neutral"> </span>
|
|
787
|
-
<span class="cline-any cline-no"> </span>
|
|
788
803
|
<span class="cline-any cline-neutral"> </span>
|
|
789
|
-
<span class="cline-any cline-
|
|
790
|
-
<span class="cline-any cline-
|
|
804
|
+
<span class="cline-any cline-neutral"> </span>
|
|
805
|
+
<span class="cline-any cline-neutral"> </span>
|
|
806
|
+
<span class="cline-any cline-yes">2x</span>
|
|
807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
808
|
+
<span class="cline-any cline-neutral"> </span>
|
|
809
|
+
<span class="cline-any cline-yes">3x</span>
|
|
810
|
+
<span class="cline-any cline-neutral"> </span>
|
|
811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-neutral"> </span>
|
|
813
|
+
<span class="cline-any cline-yes">5x</span>
|
|
814
|
+
<span class="cline-any cline-neutral"> </span>
|
|
815
|
+
<span class="cline-any cline-yes">5x</span>
|
|
816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
817
|
+
<span class="cline-any cline-neutral"> </span>
|
|
818
|
+
<span class="cline-any cline-neutral"> </span>
|
|
819
|
+
<span class="cline-any cline-yes">3x</span>
|
|
791
820
|
<span class="cline-any cline-neutral"> </span>
|
|
792
821
|
<span class="cline-any cline-no"> </span>
|
|
793
822
|
<span class="cline-any cline-no"> </span>
|
|
@@ -803,48 +832,51 @@
|
|
|
803
832
|
<span class="cline-any cline-no"> </span>
|
|
804
833
|
<span class="cline-any cline-neutral"> </span>
|
|
805
834
|
<span class="cline-any cline-neutral"> </span>
|
|
806
|
-
<span class="cline-any cline-neutral"> </span
|
|
807
|
-
<span class="
|
|
808
|
-
<span class="
|
|
809
|
-
<span class="
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
836
|
+
<span class="cline-any cline-neutral"> </span>
|
|
837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, Logger, NotFoundException } from '@nestjs/common';
|
|
839
|
+
import { InjectRepository } from '@nestjs/typeorm';
|
|
840
|
+
import { Repository } from 'typeorm';
|
|
841
|
+
import * as fs from 'fs/promises';
|
|
842
|
+
import { AIAction, SessionInput } from '../core-entities';
|
|
843
|
+
import { LlmResponseParserService } from '../llm-response-parser/llm-response-parser.service';
|
|
844
|
+
import { ExecutionLogsService } from '../execution-logs/execution-logs.service';
|
|
845
|
+
import {
|
|
814
846
|
AIActionDto,
|
|
815
847
|
AIActionType,
|
|
816
848
|
} from '../llm-response-parser/dto/ai-action.dto';
|
|
817
|
-
|
|
818
|
-
|
|
849
|
+
import { AIActionStatus } from './ai-actions.service';
|
|
850
|
+
import { ActionExecutionService } from '../action-execution/action-execution.service';
|
|
819
851
|
|
|
820
852
|
@Injectable()
|
|
821
|
-
export class
|
|
822
|
-
private readonly
|
|
853
|
+
export class AIActionCreationService {
|
|
854
|
+
private readonly logger = new Logger(AIActionCreationService.name);
|
|
823
855
|
|
|
824
|
-
|
|
856
|
+
constructor(
|
|
825
857
|
@InjectRepository(AIAction)
|
|
826
|
-
private
|
|
858
|
+
private aiActionsRepository: Repository<AIAction>,
|
|
827
859
|
@InjectRepository(SessionInput)
|
|
828
|
-
private
|
|
829
|
-
private
|
|
830
|
-
private
|
|
831
|
-
private readonly
|
|
860
|
+
private sessionInputsRepository: Repository<SessionInput>,
|
|
861
|
+
private llmResponseParserService: LlmResponseParserService,
|
|
862
|
+
private executionLogsService: ExecutionLogsService,
|
|
863
|
+
private readonly actionExecutionService: ActionExecutionService,
|
|
832
864
|
) {}
|
|
833
865
|
|
|
834
|
-
private
|
|
866
|
+
private async handleRequestContext(
|
|
835
867
|
sessionInput: SessionInput,
|
|
836
868
|
actionDtos: AIActionDto[],
|
|
837
869
|
): Promise<AIAction[] | null> {
|
|
838
|
-
const requestContextDto =
|
|
839
|
-
|
|
870
|
+
const requestContextDto = actionDtos.find(
|
|
871
|
+
(d) => d.action_type === AIActionType.REQUEST_CONTEXT,
|
|
840
872
|
);
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
873
|
+
if (requestContextDto) {
|
|
874
|
+
if (actionDtos.length > 1) {
|
|
875
|
+
this.logger.warn(
|
|
844
876
|
`Request context action found with other actions for input ${sessionInput.id}. Only the context request will be processed.`,
|
|
845
877
|
);
|
|
846
878
|
}
|
|
847
|
-
const newAction =
|
|
879
|
+
const newAction = this.aiActionsRepository.create({
|
|
848
880
|
sessionInput: { id: sessionInput.id },
|
|
849
881
|
input_id: sessionInput.id,
|
|
850
882
|
action_type: requestContextDto.action_type,
|
|
@@ -854,13 +886,13 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
854
886
|
order_of_execution: requestContextDto.order_of_execution ?? 0,
|
|
855
887
|
status: AIActionStatus.AWAITING_CONTEXT,
|
|
856
888
|
});
|
|
857
|
-
const savedAction =
|
|
858
|
-
|
|
889
|
+
const savedAction = await this.aiActionsRepository.save(newAction);
|
|
890
|
+
this.logger.log(
|
|
859
891
|
`Created context request action for SessionInput ID ${sessionInput.id}.`,
|
|
860
892
|
);
|
|
861
|
-
|
|
893
|
+
return [savedAction];
|
|
862
894
|
}
|
|
863
|
-
|
|
895
|
+
return null;
|
|
864
896
|
}
|
|
865
897
|
|
|
866
898
|
/**
|
|
@@ -870,11 +902,11 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
870
902
|
* @param initialStatus The initial status to set for the created AIActions (e.g., 'proposed').
|
|
871
903
|
* @returns A Promise resolving to an array of created AIAction entities.
|
|
872
904
|
*/
|
|
873
|
-
|
|
905
|
+
async createActionsFromLlmResponse(
|
|
874
906
|
sessionInput: SessionInput,
|
|
875
907
|
initialStatus: AIActionStatus, // Use enum
|
|
876
908
|
): Promise<AIAction[]> {
|
|
877
|
-
|
|
909
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput.raw_llm_response) {
|
|
878
910
|
<span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
|
|
879
911
|
`No raw_llm_response in SessionInput ID ${sessionInput.id}. Cannot create actions.`,
|
|
880
912
|
);
|
|
@@ -882,24 +914,24 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
882
914
|
}
|
|
883
915
|
|
|
884
916
|
const { dtos: actionDtos, explanation } =
|
|
885
|
-
|
|
917
|
+
await this.llmResponseParserService.parse(sessionInput.raw_llm_response);
|
|
886
918
|
|
|
887
|
-
|
|
919
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (explanation && <span class="branch-1 cbranch-no" title="branch not covered" >explanation !== sessionInput.llm_response_explanation)</span> {
|
|
888
920
|
<span class="cstat-no" title="statement not covered" > sessionInput.llm_response_explanation = explanation;</span>
|
|
889
921
|
<span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.save(sessionInput);</span>
|
|
890
922
|
}
|
|
891
923
|
|
|
892
|
-
const contextRequestResult =
|
|
924
|
+
const contextRequestResult = await this.handleRequestContext(
|
|
893
925
|
sessionInput,
|
|
894
926
|
actionDtos,
|
|
895
927
|
);
|
|
896
|
-
|
|
897
|
-
|
|
928
|
+
if (contextRequestResult) {
|
|
929
|
+
return contextRequestResult;
|
|
898
930
|
}
|
|
899
931
|
|
|
900
|
-
const createdActions: AIAction[] =
|
|
901
|
-
|
|
902
|
-
const newAction =
|
|
932
|
+
const createdActions: AIAction[] = [];
|
|
933
|
+
for (const dto of actionDtos) {
|
|
934
|
+
const newAction = this.aiActionsRepository.create({
|
|
903
935
|
sessionInput: { id: sessionInput.id },
|
|
904
936
|
input_id: sessionInput.id,
|
|
905
937
|
action_type: dto.action_type,
|
|
@@ -913,26 +945,26 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
913
945
|
status: initialStatus,
|
|
914
946
|
original_content_for_revert: null,
|
|
915
947
|
});
|
|
916
|
-
const savedAction =
|
|
917
|
-
|
|
948
|
+
const savedAction = await this.aiActionsRepository.save(newAction);
|
|
949
|
+
createdActions.push(savedAction);
|
|
918
950
|
}
|
|
919
|
-
|
|
951
|
+
this.logger.log(
|
|
920
952
|
`Created ${createdActions.length} actions for SessionInput ID ${sessionInput.id} with status ${initialStatus}.`,
|
|
921
953
|
);
|
|
922
|
-
|
|
954
|
+
return createdActions;
|
|
923
955
|
}
|
|
924
956
|
|
|
925
957
|
/**
|
|
926
958
|
* Reads file content. Returns null if file not found or other read error.
|
|
927
959
|
*/
|
|
928
|
-
private
|
|
960
|
+
private async readFileContent(
|
|
929
961
|
filePath: string | undefined | null,
|
|
930
962
|
): Promise<string | null> {
|
|
931
|
-
|
|
963
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!filePath) {
|
|
932
964
|
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
933
965
|
}
|
|
934
|
-
|
|
935
|
-
|
|
966
|
+
try {
|
|
967
|
+
return await fs.readFile(filePath, 'utf8');
|
|
936
968
|
} catch (error) {
|
|
937
969
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code === 'ENOENT') {</span>
|
|
938
970
|
<span class="cstat-no" title="statement not covered" > this.logger.log(`File not found when reading for revert: ${filePath}`);</span>
|
|
@@ -949,10 +981,10 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
949
981
|
* Creates AIAction entities from LLM response and tentatively applies them.
|
|
950
982
|
* For "apply_revert" strategy.
|
|
951
983
|
*/
|
|
952
|
-
|
|
984
|
+
async createAndTentativelyApplyActions(
|
|
953
985
|
sessionInput: SessionInput,
|
|
954
986
|
): Promise<AIAction[]> {
|
|
955
|
-
|
|
987
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput.raw_llm_response) {
|
|
956
988
|
<span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
|
|
957
989
|
`No raw_llm_response in SessionInput ID ${sessionInput.id}. Cannot create/apply actions.`,
|
|
958
990
|
);
|
|
@@ -960,25 +992,25 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
960
992
|
}
|
|
961
993
|
|
|
962
994
|
const { dtos: actionDtos, explanation } =
|
|
963
|
-
|
|
995
|
+
await this.llmResponseParserService.parse(sessionInput.raw_llm_response);
|
|
964
996
|
|
|
965
|
-
|
|
997
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (explanation && <span class="branch-1 cbranch-no" title="branch not covered" >explanation !== sessionInput.llm_response_explanation)</span> {
|
|
966
998
|
<span class="cstat-no" title="statement not covered" > sessionInput.llm_response_explanation = explanation;</span>
|
|
967
999
|
<span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.save(sessionInput);</span>
|
|
968
1000
|
}
|
|
969
1001
|
|
|
970
|
-
const contextRequestResult =
|
|
1002
|
+
const contextRequestResult = await this.handleRequestContext(
|
|
971
1003
|
sessionInput,
|
|
972
1004
|
actionDtos,
|
|
973
1005
|
);
|
|
974
|
-
|
|
1006
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (contextRequestResult) {
|
|
975
1007
|
<span class="cstat-no" title="statement not covered" > return contextRequestResult;</span>
|
|
976
1008
|
}
|
|
977
1009
|
|
|
978
|
-
const processedAIActions: AIAction[] =
|
|
1010
|
+
const processedAIActions: AIAction[] = [];
|
|
979
1011
|
|
|
980
|
-
|
|
981
|
-
const action =
|
|
1012
|
+
for (const dto of actionDtos) {
|
|
1013
|
+
const action = this.aiActionsRepository.create({
|
|
982
1014
|
sessionInput: { id: sessionInput.id },
|
|
983
1015
|
input_id: sessionInput.id,
|
|
984
1016
|
action_type: dto.action_type,
|
|
@@ -993,43 +1025,43 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
993
1025
|
});
|
|
994
1026
|
|
|
995
1027
|
// Capture original_content_for_revert
|
|
996
|
-
|
|
1028
|
+
if (
|
|
997
1029
|
dto.action_type === 'edit_file' ||
|
|
998
1030
|
dto.action_type === 'delete_file'
|
|
999
1031
|
) {
|
|
1000
|
-
|
|
1032
|
+
action.original_content_for_revert = await this.readFileContent(
|
|
1001
1033
|
dto.file_path,
|
|
1002
1034
|
);
|
|
1003
1035
|
}
|
|
1004
1036
|
|
|
1005
|
-
let actionSucceeded =
|
|
1006
|
-
let outcomeMessage =
|
|
1007
|
-
let errorMessage: string | undefined =
|
|
1037
|
+
let actionSucceeded = false;
|
|
1038
|
+
let outcomeMessage = `Action type: ${action.action_type}`;
|
|
1039
|
+
let errorMessage: string | undefined = undefined;
|
|
1008
1040
|
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
`Tentatively applying action for SessionInput ${sessionInput.id}, type ${action.action_type}, target ${action.file_path || action.command_string}
|
|
1041
|
+
try {
|
|
1042
|
+
this.logger.log(
|
|
1043
|
+
`Tentatively applying action for SessionInput ${sessionInput.id}, type ${action.action_type}, target ${action.file_path || <span class="branch-1 cbranch-no" title="branch not covered" >action.command_string}</span>`,
|
|
1012
1044
|
);
|
|
1013
|
-
|
|
1045
|
+
switch (action.action_type) {
|
|
1014
1046
|
case 'create_file':
|
|
1015
|
-
|
|
1047
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!action.file_path || action.content === null)
|
|
1016
1048
|
<span class="cstat-no" title="statement not covered" > throw new Error('Missing file_path or content for create_file.');</span>
|
|
1017
|
-
|
|
1049
|
+
await this.actionExecutionService.createFile(
|
|
1018
1050
|
action.file_path,
|
|
1019
1051
|
action.content,
|
|
1020
1052
|
);
|
|
1021
|
-
|
|
1022
|
-
|
|
1053
|
+
outcomeMessage = `File "${action.file_path}" created.`;
|
|
1054
|
+
break;
|
|
1023
1055
|
case 'edit_file':
|
|
1024
|
-
|
|
1056
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!action.file_path || action.content === null)
|
|
1025
1057
|
<span class="cstat-no" title="statement not covered" > throw new Error('Missing file_path or content for edit_file.');</span>
|
|
1026
|
-
|
|
1058
|
+
await this.actionExecutionService.editFile(
|
|
1027
1059
|
action.file_path,
|
|
1028
1060
|
action.content,
|
|
1029
1061
|
);
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
case 'delete_file'
|
|
1062
|
+
outcomeMessage = `File "${action.file_path}" edited.`;
|
|
1063
|
+
break;
|
|
1064
|
+
<span class="branch-2 cbranch-no" title="branch not covered" > case 'delete_file':</span>
|
|
1033
1065
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!action.file_path)</span>
|
|
1034
1066
|
<span class="cstat-no" title="statement not covered" > throw new Error('Missing file_path for delete_file.');</span>
|
|
1035
1067
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
@@ -1044,7 +1076,7 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1044
1076
|
}
|
|
1045
1077
|
}
|
|
1046
1078
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1047
|
-
case 'run_command'
|
|
1079
|
+
<span class="branch-3 cbranch-no" title="branch not covered" > case 'run_command':</span>
|
|
1048
1080
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!action.command_string)</span>
|
|
1049
1081
|
<span class="cstat-no" title="statement not covered" > throw new Error('Missing command_string for run_command.');</span>
|
|
1050
1082
|
const cmdResult = <span class="cstat-no" title="statement not covered" >await this.actionExecutionService.runCommand(</span>
|
|
@@ -1054,44 +1086,44 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1054
1086
|
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (cmdResult.stderr)</span>
|
|
1055
1087
|
<span class="cstat-no" title="statement not covered" > outcomeMessage += `\nStderr: ${cmdResult.stderr}`;</span>
|
|
1056
1088
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1057
|
-
default
|
|
1089
|
+
<span class="branch-4 cbranch-no" title="branch not covered" > default:</span>
|
|
1058
1090
|
<span class="cstat-no" title="statement not covered" > throw new Error(`Unsupported action_type: "${action.action_type}"`);</span>
|
|
1059
1091
|
}
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1092
|
+
action.status = AIActionStatus.APPLIED_PENDING_REVIEW;
|
|
1093
|
+
actionSucceeded = true;
|
|
1094
|
+
this.logger.log(
|
|
1063
1095
|
`Action (input ${sessionInput.id}, type ${action.action_type}) tentatively applied successfully. Status: ${action.status}`,
|
|
1064
1096
|
);
|
|
1065
1097
|
} catch (error) {
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1098
|
+
action.status = AIActionStatus.EXECUTION_FAILED;
|
|
1099
|
+
errorMessage = error.message;
|
|
1100
|
+
outcomeMessage = `Failed tentative application: ${error.message}`;
|
|
1101
|
+
this.logger.error(
|
|
1070
1102
|
`Failed tentatively applying action (input ${sessionInput.id}, type ${action.action_type}): ${errorMessage}`,
|
|
1071
1103
|
error.stack,
|
|
1072
1104
|
);
|
|
1073
1105
|
}
|
|
1074
1106
|
|
|
1075
|
-
const savedAction =
|
|
1107
|
+
const savedAction = await this.aiActionsRepository.save(action);
|
|
1076
1108
|
|
|
1077
|
-
const log =
|
|
1109
|
+
const log = await this.executionLogsService.createLog({
|
|
1078
1110
|
action_id: savedAction.id,
|
|
1079
1111
|
output: actionSucceeded ? outcomeMessage : undefined,
|
|
1080
1112
|
error_message: errorMessage,
|
|
1081
1113
|
});
|
|
1082
|
-
|
|
1083
|
-
|
|
1114
|
+
savedAction.executionLogs = [log]; // Attach for immediate return if needed
|
|
1115
|
+
processedAIActions.push(savedAction);
|
|
1084
1116
|
}
|
|
1085
|
-
|
|
1117
|
+
this.logger.log(
|
|
1086
1118
|
`Created and tentatively processed ${processedAIActions.length} actions for SessionInput ID ${sessionInput.id}.`,
|
|
1087
1119
|
);
|
|
1088
|
-
|
|
1120
|
+
return processedAIActions;
|
|
1089
1121
|
}
|
|
1090
1122
|
|
|
1091
|
-
|
|
1123
|
+
async createAndAutoApplyActions(
|
|
1092
1124
|
sessionInput: SessionInput,
|
|
1093
1125
|
): Promise<AIAction[]> {
|
|
1094
|
-
|
|
1126
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput.raw_llm_response) {
|
|
1095
1127
|
<span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
|
|
1096
1128
|
`No raw_llm_response in SessionInput ID ${sessionInput.id}. Cannot auto-apply actions.`,
|
|
1097
1129
|
);
|
|
@@ -1099,88 +1131,104 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
|
|
|
1099
1131
|
}
|
|
1100
1132
|
|
|
1101
1133
|
const { dtos: actionDtos, explanation } =
|
|
1102
|
-
|
|
1134
|
+
await this.llmResponseParserService.parse(sessionInput.raw_llm_response);
|
|
1103
1135
|
|
|
1104
|
-
|
|
1136
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (explanation) {
|
|
1105
1137
|
<span class="cstat-no" title="statement not covered" > sessionInput.llm_response_explanation = explanation;</span>
|
|
1106
1138
|
<span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.save(sessionInput);</span>
|
|
1107
1139
|
}
|
|
1108
1140
|
|
|
1109
|
-
const contextRequestResult =
|
|
1141
|
+
const contextRequestResult = await this.handleRequestContext(
|
|
1110
1142
|
sessionInput,
|
|
1111
1143
|
actionDtos,
|
|
1112
1144
|
);
|
|
1113
|
-
|
|
1145
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (contextRequestResult) {
|
|
1114
1146
|
<span class="cstat-no" title="statement not covered" > return contextRequestResult;</span>
|
|
1115
1147
|
}
|
|
1116
1148
|
|
|
1117
|
-
const processedActions: AIAction[] =
|
|
1118
|
-
|
|
1119
|
-
const action =
|
|
1149
|
+
const processedActions: AIAction[] = [];
|
|
1150
|
+
for (const dto of actionDtos) {
|
|
1151
|
+
const action = this.aiActionsRepository.create({
|
|
1120
1152
|
...dto,
|
|
1121
1153
|
input_id: sessionInput.id,
|
|
1122
1154
|
sessionInput: { id: sessionInput.id },
|
|
1123
1155
|
order_of_execution: dto.order_of_execution ?? 0,
|
|
1124
1156
|
});
|
|
1125
1157
|
|
|
1126
|
-
|
|
1127
|
-
<span class="
|
|
1158
|
+
// Capture original_content_for_revert BEFORE applying changes
|
|
1159
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
1160
|
+
dto.action_type === 'edit_file' ||
|
|
1161
|
+
dto.action_type === 'delete_file'
|
|
1162
|
+
) {
|
|
1163
|
+
<span class="cstat-no" title="statement not covered" > action.original_content_for_revert = await this.readFileContent(</span>
|
|
1164
|
+
dto.file_path,
|
|
1165
|
+
);
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
try {
|
|
1169
|
+
this.logger.log(`Auto-applying action for input ${sessionInput.id}`);
|
|
1128
1170
|
// This will throw on failure
|
|
1129
|
-
const outcomeMessage =
|
|
1130
|
-
|
|
1131
|
-
const savedAction =
|
|
1132
|
-
|
|
1171
|
+
const outcomeMessage = await this.executeActionDto(dto);
|
|
1172
|
+
action.status = AIActionStatus.CONFIRMED_KEPT;
|
|
1173
|
+
const savedAction = await this.aiActionsRepository.save(action);
|
|
1174
|
+
await this.executionLogsService.createLog({
|
|
1133
1175
|
action_id: savedAction.id,
|
|
1134
1176
|
output: outcomeMessage,
|
|
1135
1177
|
});
|
|
1136
|
-
|
|
1178
|
+
processedActions.push(savedAction);
|
|
1137
1179
|
} catch (error) {
|
|
1138
|
-
|
|
1139
|
-
const savedAction =
|
|
1140
|
-
|
|
1180
|
+
action.status = AIActionStatus.EXECUTION_FAILED;
|
|
1181
|
+
const savedAction = await this.aiActionsRepository.save(action);
|
|
1182
|
+
await this.executionLogsService.createLog({
|
|
1141
1183
|
action_id: savedAction.id,
|
|
1142
1184
|
error_message: error.message,
|
|
1143
1185
|
});
|
|
1144
|
-
|
|
1145
|
-
|
|
1186
|
+
processedActions.push(savedAction);
|
|
1187
|
+
this.logger.error(
|
|
1146
1188
|
`Failed to auto-apply action for input ${sessionInput.id}: ${error.message}`,
|
|
1147
1189
|
error.stack,
|
|
1148
1190
|
);
|
|
1149
1191
|
// Re-throw to halt the orchestration
|
|
1150
|
-
|
|
1192
|
+
throw error;
|
|
1151
1193
|
}
|
|
1152
1194
|
}
|
|
1153
|
-
|
|
1195
|
+
return processedActions;
|
|
1154
1196
|
}
|
|
1155
1197
|
|
|
1156
|
-
private
|
|
1157
|
-
|
|
1198
|
+
private async executeActionDto(dto: AIActionDto): Promise<string> {
|
|
1199
|
+
switch (dto.action_type) {
|
|
1158
1200
|
case AIActionType.CREATE_FILE:
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1201
|
+
await this.actionExecutionService.createFile(
|
|
1202
|
+
dto.file_path,
|
|
1203
|
+
dto.content,
|
|
1204
|
+
);
|
|
1205
|
+
return `File "${dto.file_path}" created.`;
|
|
1206
|
+
<span class="branch-1 cbranch-no" title="branch not covered" > case AIActionType.EDIT_FILE:</span>
|
|
1162
1207
|
<span class="cstat-no" title="statement not covered" > await this.actionExecutionService.editFile(dto.file_path, dto.content);</span>
|
|
1163
1208
|
<span class="cstat-no" title="statement not covered" > return `File "${dto.file_path}" edited.`;</span>
|
|
1164
|
-
case AIActionType.DELETE_FILE
|
|
1209
|
+
<span class="branch-2 cbranch-no" title="branch not covered" > case AIActionType.DELETE_FILE:</span>
|
|
1165
1210
|
<span class="cstat-no" title="statement not covered" > await this.actionExecutionService.deleteFile(dto.file_path);</span>
|
|
1166
1211
|
<span class="cstat-no" title="statement not covered" > return `File "${dto.file_path}" deleted.`;</span>
|
|
1167
|
-
case AIActionType.RUN_COMMAND
|
|
1212
|
+
<span class="branch-3 cbranch-no" title="branch not covered" > case AIActionType.RUN_COMMAND:</span>
|
|
1168
1213
|
const result = <span class="cstat-no" title="statement not covered" >await this.actionExecutionService.runCommand(</span>
|
|
1169
1214
|
dto.command_string,
|
|
1170
1215
|
);
|
|
1171
1216
|
<span class="cstat-no" title="statement not covered" > return `Command executed. STDOUT: ${result.stdout || 'N/A'}, STDERR: ${result.stderr || 'N/A'}`;</span>
|
|
1172
|
-
default
|
|
1173
|
-
<span class="cstat-no" title="statement not covered" > throw new Error(
|
|
1217
|
+
<span class="branch-4 cbranch-no" title="branch not covered" > default:</span>
|
|
1218
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
1219
|
+
`Unsupported action type for auto-apply: ${dto.action_type}`,
|
|
1220
|
+
);
|
|
1174
1221
|
}
|
|
1175
1222
|
}
|
|
1176
|
-
}
|
|
1223
|
+
}
|
|
1224
|
+
</pre></td></tr></table></pre>
|
|
1177
1225
|
|
|
1178
1226
|
<div class='push'></div><!-- for sticky footer -->
|
|
1179
1227
|
</div><!-- /wrapper -->
|
|
1180
1228
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1181
1229
|
Code coverage generated by
|
|
1182
1230
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1183
|
-
at 2025-
|
|
1231
|
+
at 2025-09-12T19:21:55.945Z
|
|
1184
1232
|
</div>
|
|
1185
1233
|
<script src="../../prettify.js"></script>
|
|
1186
1234
|
<script>
|