repoburg 1.0.39 → 1.0.40
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 -7
- package/backend/coverage/clover.xml +3380 -0
- package/backend/coverage/coverage-final.json +117 -0
- package/backend/coverage/lcov-report/base.css +224 -0
- package/backend/coverage/lcov-report/block-navigation.js +87 -0
- package/backend/coverage/lcov-report/favicon.png +0 -0
- package/backend/coverage/lcov-report/index.html +686 -0
- package/backend/coverage/lcov-report/prettify.css +1 -0
- package/backend/coverage/lcov-report/prettify.js +2 -0
- package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/backend/coverage/lcov-report/sorter.js +196 -0
- package/backend/coverage/lcov-report/src/action-execution/action-execution.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/action-execution/action-execution.service.ts.html +370 -0
- package/backend/coverage/lcov-report/src/action-execution/index.html +131 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +940 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-creation.service.ts.html +1195 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +664 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +154 -0
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +859 -0
- package/backend/coverage/lcov-report/src/ai-actions/index.html +176 -0
- package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
- package/backend/coverage/lcov-report/src/app.module.ts.html +370 -0
- package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +265 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +394 -0
- package/backend/coverage/lcov-report/src/application-state/dto/index.html +146 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +103 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +106 -0
- package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +103 -0
- package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
- package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1348 -0
- package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +289 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +136 -0
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +400 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
- package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +397 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +136 -0
- package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +832 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +358 -0
- package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
- package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +241 -0
- package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +115 -0
- package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +145 -0
- package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +130 -0
- package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +223 -0
- package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +136 -0
- package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +157 -0
- package/backend/coverage/lcov-report/src/core-entities/index.html +281 -0
- package/backend/coverage/lcov-report/src/core-entities/index.ts.html +118 -0
- package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +130 -0
- package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +280 -0
- package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +280 -0
- package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +148 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +277 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
- package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
- package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +292 -0
- package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/events/index.html +131 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
- package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
- package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
- package/backend/coverage/lcov-report/src/index.html +191 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/dto/ai-action.dto.ts.html +400 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/errors/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/errors/parsing.error.ts.html +118 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.module.ts.html +109 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.service.ts.html +808 -0
- package/backend/coverage/lcov-report/src/llm-response-parser/parsing.constants.ts.html +139 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +172 -0
- package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +154 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +163 -0
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +766 -0
- package/backend/coverage/lcov-report/src/main.ts.html +382 -0
- package/backend/coverage/lcov-report/src/orchestration/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/orchestration/dto/orchestration.dto.ts.html +184 -0
- package/backend/coverage/lcov-report/src/orchestration/index.html +191 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration-fs.service.ts.html +478 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration-parser.service.ts.html +310 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration.controller.ts.html +436 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration.module.ts.html +172 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration.service.ts.html +1201 -0
- package/backend/coverage/lcov-report/src/orchestration/orchestration.types.ts.html +169 -0
- package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +154 -0
- package/backend/coverage/lcov-report/src/projects/index.html +146 -0
- package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +232 -0
- package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
- package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +223 -0
- package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +355 -0
- package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +136 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +247 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +191 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/pm-context.ts.html +250 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/pr-description.ts.html +187 -0
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/sample_focused-tree.ts.html +124 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +236 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/codebase-explorer.ts.html +331 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_multi-file-action-generator-with-requester.ts.html +670 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/multi-file-action-generator.ts.html +550 -0
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/packup.ts.html +184 -0
- package/backend/coverage/lcov-report/src/seeding/index.html +176 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +145 -0
- package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +151 -0
- package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +289 -0
- package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
- package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +667 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +235 -0
- package/backend/coverage/lcov-report/src/session-inputs/index.html +161 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +751 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +337 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +202 -0
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1615 -0
- package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +172 -0
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +574 -0
- package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +340 -0
- package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +457 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +214 -0
- package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +844 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +208 -0
- package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +298 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +127 -0
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +352 -0
- package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
- package/backend/coverage/lcov-report/src/workspace/dto/index.html +116 -0
- package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
- package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +247 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
- package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +700 -0
- package/backend/coverage/lcov.info +5492 -0
- package/backend/dist/ai-actions/ai-action-creation.service.d.ts +2 -0
- package/backend/dist/ai-actions/ai-action-creation.service.js +65 -0
- package/backend/dist/ai-actions/ai-action-creation.service.js.map +1 -1
- package/backend/dist/app.module.js +2 -0
- package/backend/dist/app.module.js.map +1 -1
- package/backend/dist/application-state/application-state.service.d.ts +4 -0
- package/backend/dist/application-state/application-state.service.js +25 -0
- package/backend/dist/application-state/application-state.service.js.map +1 -1
- package/backend/dist/context-templates/context-templates.service.d.ts +1 -0
- package/backend/dist/context-templates/context-templates.service.js +3 -0
- package/backend/dist/context-templates/context-templates.service.js.map +1 -1
- package/backend/dist/llm-responses/llm-responses.module.js +4 -1
- package/backend/dist/llm-responses/llm-responses.module.js.map +1 -1
- package/backend/dist/llm-responses/llm-responses.service.d.ts +3 -1
- package/backend/dist/llm-responses/llm-responses.service.js +29 -2
- package/backend/dist/llm-responses/llm-responses.service.js.map +1 -1
- package/backend/dist/orchestration/dto/orchestration.dto.d.ts +15 -0
- package/backend/dist/orchestration/dto/orchestration.dto.js +58 -0
- package/backend/dist/orchestration/dto/orchestration.dto.js.map +1 -0
- package/backend/dist/orchestration/orchestration-fs.service.d.ts +18 -0
- package/backend/dist/orchestration/orchestration-fs.service.js +124 -0
- package/backend/dist/orchestration/orchestration-fs.service.js.map +1 -0
- package/backend/dist/orchestration/orchestration-parser.service.d.ts +16 -0
- package/backend/dist/orchestration/orchestration-parser.service.js +78 -0
- package/backend/dist/orchestration/orchestration-parser.service.js.map +1 -0
- package/backend/dist/orchestration/orchestration.controller.d.ts +28 -0
- package/backend/dist/orchestration/orchestration.controller.js +158 -0
- package/backend/dist/orchestration/orchestration.controller.js.map +1 -0
- package/backend/dist/orchestration/orchestration.module.d.ts +2 -0
- package/backend/dist/orchestration/orchestration.module.js +43 -0
- package/backend/dist/orchestration/orchestration.module.js.map +1 -0
- package/backend/dist/orchestration/orchestration.service.d.ts +38 -0
- package/backend/dist/orchestration/orchestration.service.js +301 -0
- package/backend/dist/orchestration/orchestration.service.js.map +1 -0
- package/backend/dist/orchestration/orchestration.types.d.ts +27 -0
- package/backend/dist/orchestration/orchestration.types.js +20 -0
- package/backend/dist/orchestration/orchestration.types.js.map +1 -0
- package/backend/dist/session-inputs/session-inputs.module.js +2 -0
- package/backend/dist/session-inputs/session-inputs.module.js.map +1 -1
- package/backend/dist/session-inputs/session-inputs.service.d.ts +3 -1
- package/backend/dist/session-inputs/session-inputs.service.js +13 -2
- package/backend/dist/session-inputs/session-inputs.service.js.map +1 -1
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/backend/orchestration-test-2.txt +1 -0
- package/backend/orchestration-test.txt +1 -0
- package/backend/package.json +1 -1
- package/orchestration-test.txt +3 -0
- package/package.json +1 -1
|
@@ -0,0 +1,859 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/ai-actions/ai-actions.service.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/ai-actions</a> ai-actions.service.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>0/107</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/37</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/9</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>0/105</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
325
|
+
<span class="cline-any cline-neutral"> </span>
|
|
326
|
+
<span class="cline-any cline-neutral"> </span>
|
|
327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
328
|
+
<span class="cline-any cline-neutral"> </span>
|
|
329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-no"> </span>
|
|
331
|
+
<span class="cline-any cline-no"> </span>
|
|
332
|
+
<span class="cline-any cline-no"> </span>
|
|
333
|
+
<span class="cline-any cline-no"> </span>
|
|
334
|
+
<span class="cline-any cline-no"> </span>
|
|
335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
336
|
+
<span class="cline-any cline-neutral"> </span>
|
|
337
|
+
<span class="cline-any cline-no"> </span>
|
|
338
|
+
<span class="cline-any cline-no"> </span>
|
|
339
|
+
<span class="cline-any cline-no"> </span>
|
|
340
|
+
<span class="cline-any cline-no"> </span>
|
|
341
|
+
<span class="cline-any cline-no"> </span>
|
|
342
|
+
<span class="cline-any cline-no"> </span>
|
|
343
|
+
<span class="cline-any cline-no"> </span>
|
|
344
|
+
<span class="cline-any cline-no"> </span>
|
|
345
|
+
<span class="cline-any cline-no"> </span>
|
|
346
|
+
<span class="cline-any cline-no"> </span>
|
|
347
|
+
<span class="cline-any cline-neutral"> </span>
|
|
348
|
+
<span class="cline-any cline-neutral"> </span>
|
|
349
|
+
<span class="cline-any cline-neutral"> </span>
|
|
350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
351
|
+
<span class="cline-any cline-neutral"> </span>
|
|
352
|
+
<span class="cline-any cline-neutral"> </span>
|
|
353
|
+
<span class="cline-any cline-neutral"> </span>
|
|
354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
355
|
+
<span class="cline-any cline-neutral"> </span>
|
|
356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
357
|
+
<span class="cline-any cline-neutral"> </span>
|
|
358
|
+
<span class="cline-any cline-neutral"> </span>
|
|
359
|
+
<span class="cline-any cline-neutral"> </span>
|
|
360
|
+
<span class="cline-any cline-neutral"> </span>
|
|
361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-neutral"> </span>
|
|
364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
365
|
+
<span class="cline-any cline-neutral"> </span>
|
|
366
|
+
<span class="cline-any cline-no"> </span>
|
|
367
|
+
<span class="cline-any cline-no"> </span>
|
|
368
|
+
<span class="cline-any cline-neutral"> </span>
|
|
369
|
+
<span class="cline-any cline-neutral"> </span>
|
|
370
|
+
<span class="cline-any cline-neutral"> </span>
|
|
371
|
+
<span class="cline-any cline-no"> </span>
|
|
372
|
+
<span class="cline-any cline-neutral"> </span>
|
|
373
|
+
<span class="cline-any cline-no"> </span>
|
|
374
|
+
<span class="cline-any cline-no"> </span>
|
|
375
|
+
<span class="cline-any cline-no"> </span>
|
|
376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
377
|
+
<span class="cline-any cline-neutral"> </span>
|
|
378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
|
+
<span class="cline-any cline-no"> </span>
|
|
380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
381
|
+
<span class="cline-any cline-neutral"> </span>
|
|
382
|
+
<span class="cline-any cline-no"> </span>
|
|
383
|
+
<span class="cline-any cline-no"> </span>
|
|
384
|
+
<span class="cline-any cline-neutral"> </span>
|
|
385
|
+
<span class="cline-any cline-neutral"> </span>
|
|
386
|
+
<span class="cline-any cline-neutral"> </span>
|
|
387
|
+
<span class="cline-any cline-neutral"> </span>
|
|
388
|
+
<span class="cline-any cline-no"> </span>
|
|
389
|
+
<span class="cline-any cline-neutral"> </span>
|
|
390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
391
|
+
<span class="cline-any cline-neutral"> </span>
|
|
392
|
+
<span class="cline-any cline-neutral"> </span>
|
|
393
|
+
<span class="cline-any cline-neutral"> </span>
|
|
394
|
+
<span class="cline-any cline-neutral"> </span>
|
|
395
|
+
<span class="cline-any cline-neutral"> </span>
|
|
396
|
+
<span class="cline-any cline-no"> </span>
|
|
397
|
+
<span class="cline-any cline-neutral"> </span>
|
|
398
|
+
<span class="cline-any cline-neutral"> </span>
|
|
399
|
+
<span class="cline-any cline-neutral"> </span>
|
|
400
|
+
<span class="cline-any cline-no"> </span>
|
|
401
|
+
<span class="cline-any cline-no"> </span>
|
|
402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-no"> </span>
|
|
404
|
+
<span class="cline-any cline-neutral"> </span>
|
|
405
|
+
<span class="cline-any cline-neutral"> </span>
|
|
406
|
+
<span class="cline-any cline-neutral"> </span>
|
|
407
|
+
<span class="cline-any cline-no"> </span>
|
|
408
|
+
<span class="cline-any cline-neutral"> </span>
|
|
409
|
+
<span class="cline-any cline-no"> </span>
|
|
410
|
+
<span class="cline-any cline-no"> </span>
|
|
411
|
+
<span class="cline-any cline-neutral"> </span>
|
|
412
|
+
<span class="cline-any cline-neutral"> </span>
|
|
413
|
+
<span class="cline-any cline-neutral"> </span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-no"> </span>
|
|
416
|
+
<span class="cline-any cline-no"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-no"> </span>
|
|
421
|
+
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-no"> </span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-neutral"> </span>
|
|
426
|
+
<span class="cline-any cline-no"> </span>
|
|
427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
431
|
+
<span class="cline-any cline-no"> </span>
|
|
432
|
+
<span class="cline-any cline-no"> </span>
|
|
433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
434
|
+
<span class="cline-any cline-neutral"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-no"> </span>
|
|
437
|
+
<span class="cline-any cline-neutral"> </span>
|
|
438
|
+
<span class="cline-any cline-no"> </span>
|
|
439
|
+
<span class="cline-any cline-no"> </span>
|
|
440
|
+
<span class="cline-any cline-neutral"> </span>
|
|
441
|
+
<span class="cline-any cline-neutral"> </span>
|
|
442
|
+
<span class="cline-any cline-neutral"> </span>
|
|
443
|
+
<span class="cline-any cline-neutral"> </span>
|
|
444
|
+
<span class="cline-any cline-no"> </span>
|
|
445
|
+
<span class="cline-any cline-no"> </span>
|
|
446
|
+
<span class="cline-any cline-neutral"> </span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-no"> </span>
|
|
449
|
+
<span class="cline-any cline-neutral"> </span>
|
|
450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
451
|
+
<span class="cline-any cline-neutral"> </span>
|
|
452
|
+
<span class="cline-any cline-no"> </span>
|
|
453
|
+
<span class="cline-any cline-neutral"> </span>
|
|
454
|
+
<span class="cline-any cline-no"> </span>
|
|
455
|
+
<span class="cline-any cline-no"> </span>
|
|
456
|
+
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-neutral"> </span>
|
|
458
|
+
<span class="cline-any cline-neutral"> </span>
|
|
459
|
+
<span class="cline-any cline-neutral"> </span>
|
|
460
|
+
<span class="cline-any cline-no"> </span>
|
|
461
|
+
<span class="cline-any cline-no"> </span>
|
|
462
|
+
<span class="cline-any cline-no"> </span>
|
|
463
|
+
<span class="cline-any cline-neutral"> </span>
|
|
464
|
+
<span class="cline-any cline-no"> </span>
|
|
465
|
+
<span class="cline-any cline-no"> </span>
|
|
466
|
+
<span class="cline-any cline-neutral"> </span>
|
|
467
|
+
<span class="cline-any cline-neutral"> </span>
|
|
468
|
+
<span class="cline-any cline-no"> </span>
|
|
469
|
+
<span class="cline-any cline-neutral"> </span>
|
|
470
|
+
<span class="cline-any cline-no"> </span>
|
|
471
|
+
<span class="cline-any cline-no"> </span>
|
|
472
|
+
<span class="cline-any cline-no"> </span>
|
|
473
|
+
<span class="cline-any cline-no"> </span>
|
|
474
|
+
<span class="cline-any cline-neutral"> </span>
|
|
475
|
+
<span class="cline-any cline-neutral"> </span>
|
|
476
|
+
<span class="cline-any cline-neutral"> </span>
|
|
477
|
+
<span class="cline-any cline-neutral"> </span>
|
|
478
|
+
<span class="cline-any cline-no"> </span>
|
|
479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
480
|
+
<span class="cline-any cline-neutral"> </span>
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
482
|
+
<span class="cline-any cline-no"> </span>
|
|
483
|
+
<span class="cline-any cline-neutral"> </span>
|
|
484
|
+
<span class="cline-any cline-no"> </span>
|
|
485
|
+
<span class="cline-any cline-no"> </span>
|
|
486
|
+
<span class="cline-any cline-neutral"> </span>
|
|
487
|
+
<span class="cline-any cline-no"> </span>
|
|
488
|
+
<span class="cline-any cline-no"> </span>
|
|
489
|
+
<span class="cline-any cline-no"> </span>
|
|
490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
491
|
+
<span class="cline-any cline-no"> </span>
|
|
492
|
+
<span class="cline-any cline-neutral"> </span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
496
|
+
<span class="cline-any cline-no"> </span>
|
|
497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
498
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
500
|
+
<span class="cline-any cline-neutral"> </span>
|
|
501
|
+
<span class="cline-any cline-no"> </span>
|
|
502
|
+
<span class="cline-any cline-no"> </span>
|
|
503
|
+
<span class="cline-any cline-no"> </span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-no"> </span>
|
|
506
|
+
<span class="cline-any cline-no"> </span>
|
|
507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
508
|
+
<span class="cline-any cline-no"> </span>
|
|
509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
511
|
+
<span class="cline-any cline-neutral"> </span>
|
|
512
|
+
<span class="cline-any cline-no"> </span>
|
|
513
|
+
<span class="cline-any cline-no"> </span>
|
|
514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
515
|
+
<span class="cline-any cline-no"> </span>
|
|
516
|
+
<span class="cline-any cline-no"> </span>
|
|
517
|
+
<span class="cline-any cline-no"> </span>
|
|
518
|
+
<span class="cline-any cline-no"> </span>
|
|
519
|
+
<span class="cline-any cline-no"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-no"> </span>
|
|
523
|
+
<span class="cline-any cline-no"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-no"> </span>
|
|
526
|
+
<span class="cline-any cline-neutral"> </span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-no"> </span>
|
|
529
|
+
<span class="cline-any cline-no"> </span>
|
|
530
|
+
<span class="cline-any cline-neutral"> </span>
|
|
531
|
+
<span class="cline-any cline-no"> </span>
|
|
532
|
+
<span class="cline-any cline-no"> </span>
|
|
533
|
+
<span class="cline-any cline-no"> </span>
|
|
534
|
+
<span class="cline-any cline-neutral"> </span>
|
|
535
|
+
<span class="cline-any cline-no"> </span>
|
|
536
|
+
<span class="cline-any cline-neutral"> </span>
|
|
537
|
+
<span class="cline-any cline-neutral"> </span>
|
|
538
|
+
<span class="cline-any cline-neutral"> </span>
|
|
539
|
+
<span class="cline-any cline-no"> </span>
|
|
540
|
+
<span class="cline-any cline-neutral"> </span>
|
|
541
|
+
<span class="cline-any cline-neutral"> </span>
|
|
542
|
+
<span class="cline-any cline-neutral"> </span>
|
|
543
|
+
<span class="cline-any cline-no"> </span>
|
|
544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
545
|
+
<span class="cline-any cline-neutral"> </span>
|
|
546
|
+
<span class="cline-any cline-neutral"> </span>
|
|
547
|
+
<span class="cline-any cline-no"> </span>
|
|
548
|
+
<span class="cline-any cline-no"> </span>
|
|
549
|
+
<span class="cline-any cline-no"> </span>
|
|
550
|
+
<span class="cline-any cline-neutral"> </span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-no"> </span>
|
|
553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
554
|
+
<span class="cline-any cline-neutral"> </span>
|
|
555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
556
|
+
<span class="cline-any cline-no"> </span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
559
|
+
<span class="cline-any cline-neutral"> </span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-neutral"> </span>
|
|
562
|
+
<span class="cline-any cline-neutral"> </span>
|
|
563
|
+
<span class="cline-any cline-neutral"> </span>
|
|
564
|
+
<span class="cline-any cline-no"> </span>
|
|
565
|
+
<span class="cline-any cline-no"> </span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
567
|
+
<span class="cline-any cline-no"> </span>
|
|
568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
569
|
+
<span class="cline-any cline-neutral"> </span>
|
|
570
|
+
<span class="cline-any cline-neutral"> </span>
|
|
571
|
+
<span class="cline-any cline-no"> </span>
|
|
572
|
+
<span class="cline-any cline-neutral"> </span>
|
|
573
|
+
<span class="cline-any cline-neutral"> </span>
|
|
574
|
+
<span class="cline-any cline-no"> </span>
|
|
575
|
+
<span class="cline-any cline-no"> </span>
|
|
576
|
+
<span class="cline-any cline-neutral"> </span>
|
|
577
|
+
<span class="cline-any cline-neutral"> </span>
|
|
578
|
+
<span class="cline-any cline-no"> </span>
|
|
579
|
+
<span class="cline-any cline-neutral"> </span>
|
|
580
|
+
<span class="cline-any cline-neutral"> </span>
|
|
581
|
+
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import {</span>
|
|
583
|
+
Injectable,
|
|
584
|
+
NotFoundException,
|
|
585
|
+
BadRequestException,
|
|
586
|
+
Logger,
|
|
587
|
+
} from '@nestjs/common';
|
|
588
|
+
<span class="cstat-no" title="statement not covered" >import { InjectRepository } from '@nestjs/typeorm';</span>
|
|
589
|
+
<span class="cstat-no" title="statement not covered" >import { Repository } from 'typeorm';</span>
|
|
590
|
+
<span class="cstat-no" title="statement not covered" >import { AIAction, SessionInput, ExecutionLog } from '../core-entities';</span>
|
|
591
|
+
<span class="cstat-no" title="statement not covered" >import { ExecutionLogsService } from '../execution-logs/execution-logs.service';</span>
|
|
592
|
+
<span class="cstat-no" title="statement not covered" >import { ActionExecutionService } from '../action-execution/action-execution.service';</span>
|
|
593
|
+
|
|
594
|
+
// Enum for AIAction statuses to avoid magic strings
|
|
595
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >export enum A</span>IActionStatus {</span>
|
|
596
|
+
<span class="cstat-no" title="statement not covered" > PROPOSED = 'proposed',</span>
|
|
597
|
+
<span class="cstat-no" title="statement not covered" > AWAITING_CONTEXT = 'awaiting_context',</span>
|
|
598
|
+
<span class="cstat-no" title="statement not covered" > APPROVED_FOR_APPLY = 'approved_for_apply',</span>
|
|
599
|
+
<span class="cstat-no" title="statement not covered" > REJECTED_BEFORE_APPLY = 'rejected_before_apply',</span>
|
|
600
|
+
<span class="cstat-no" title="statement not covered" > APPLIED_PENDING_REVIEW = 'applied_pending_review',</span>
|
|
601
|
+
<span class="cstat-no" title="statement not covered" > CONFIRMED_KEPT = 'confirmed_kept',</span>
|
|
602
|
+
<span class="cstat-no" title="statement not covered" > CONFIRMED_REVERTED = 'confirmed_reverted',</span>
|
|
603
|
+
<span class="cstat-no" title="statement not covered" > EXECUTION_FAILED = 'execution_failed',</span>
|
|
604
|
+
<span class="cstat-no" title="statement not covered" > REVERT_FAILED = 'revert_failed',</span>
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
export interface ActionResult {
|
|
608
|
+
action_id: string;
|
|
609
|
+
status: string;
|
|
610
|
+
logs: ExecutionLog[];
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
export interface DiscardedActionInfo {
|
|
614
|
+
action_id: string;
|
|
615
|
+
status: string; // Should always be 'rejected_before_apply'
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
export interface ConfirmedActionInfo {
|
|
619
|
+
action_id: string;
|
|
620
|
+
status: string; // Should always be 'confirmed_kept'
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
@Injectable()
|
|
624
|
+
export class <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >AIActionsService<span class="cstat-no" title="statement not covered" > </span>{</span></span>
|
|
625
|
+
private readonly <span class="cstat-no" title="statement not covered" >logger = new Logger(AIActionsService.name);</span>
|
|
626
|
+
|
|
627
|
+
<span class="fstat-no" title="function not covered" > constructor(</span>
|
|
628
|
+
@InjectRepository(AIAction)
|
|
629
|
+
private <span class="cstat-no" title="statement not covered" >aiActionsRepository: R</span>epository<AIAction>,
|
|
630
|
+
@InjectRepository(SessionInput) // To verify inputId existence
|
|
631
|
+
private <span class="cstat-no" title="statement not covered" >sessionInputsRepository: R</span>epository<SessionInput>,
|
|
632
|
+
private <span class="cstat-no" title="statement not covered" >executionLogsService: E</span>xecutionLogsService,
|
|
633
|
+
private readonly <span class="cstat-no" title="statement not covered" >actionExecutionService: A</span>ctionExecutionService,
|
|
634
|
+
) {}
|
|
635
|
+
|
|
636
|
+
<span class="fstat-no" title="function not covered" > async </span>findAllByInputId(inputId: string): Promise<AIAction[]> {
|
|
637
|
+
const sessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOneBy({</span>
|
|
638
|
+
id: inputId,
|
|
639
|
+
});
|
|
640
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {</span>
|
|
641
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
|
|
642
|
+
`SessionInput with ID "${inputId}" not found. Cannot retrieve actions.`,
|
|
643
|
+
);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
<span class="cstat-no" title="statement not covered" > return this.aiActionsRepository.find({</span>
|
|
647
|
+
where: { input_id: inputId },
|
|
648
|
+
order: { order_of_execution: 'ASC', created_at: 'ASC' },
|
|
649
|
+
relations: ['executionLogs'],
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
<span class="fstat-no" title="function not covered" > async </span>findOne(actionId: string): Promise<AIAction> {
|
|
654
|
+
const action = <span class="cstat-no" title="statement not covered" >await this.aiActionsRepository.findOne({</span>
|
|
655
|
+
where: { id: actionId },
|
|
656
|
+
relations: ['executionLogs'],
|
|
657
|
+
});
|
|
658
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!action) {</span>
|
|
659
|
+
<span class="cstat-no" title="statement not covered" > throw new NotFoundException(`AIAction with ID "${actionId}" not found`);</span>
|
|
660
|
+
}
|
|
661
|
+
<span class="cstat-no" title="statement not covered" > return action;</span>
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
<span class="fstat-no" title="function not covered" > async </span>approveAction(actionId: string): Promise<AIAction> {
|
|
665
|
+
const action = <span class="cstat-no" title="statement not covered" >await this.findOne(actionId);</span>
|
|
666
|
+
|
|
667
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (action.status !== AIActionStatus.PROPOSED) {</span>
|
|
668
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
669
|
+
`Action with ID "${actionId}" cannot be approved. Status is "${action.status}", but must be "${AIActionStatus.PROPOSED}".`,
|
|
670
|
+
);
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
<span class="cstat-no" title="statement not covered" > action.status = AIActionStatus.APPROVED_FOR_APPLY;</span>
|
|
674
|
+
<span class="cstat-no" title="statement not covered" > return this.aiActionsRepository.save(action);</span>
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
<span class="fstat-no" title="function not covered" > async </span>discardAction(actionId: string): Promise<AIAction> {
|
|
678
|
+
const action = <span class="cstat-no" title="statement not covered" >await this.findOne(actionId);</span>
|
|
679
|
+
|
|
680
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
681
|
+
action.status !== AIActionStatus.PROPOSED &&
|
|
682
|
+
action.status !== AIActionStatus.APPROVED_FOR_APPLY
|
|
683
|
+
) {
|
|
684
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
685
|
+
`Action with ID "${actionId}" cannot be discarded. Status is "${action.status}", but must be "${AIActionStatus.PROPOSED}" or "${AIActionStatus.APPROVED_FOR_APPLY}".`,
|
|
686
|
+
);
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
<span class="cstat-no" title="statement not covered" > action.status = AIActionStatus.REJECTED_BEFORE_APPLY;</span>
|
|
690
|
+
<span class="cstat-no" title="statement not covered" > return this.aiActionsRepository.save(action);</span>
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
<span class="fstat-no" title="function not covered" > async </span>confirmKeepAction(actionId: string): Promise<AIAction> {
|
|
694
|
+
const action = <span class="cstat-no" title="statement not covered" >await this.findOne(actionId);</span>
|
|
695
|
+
|
|
696
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (action.status !== AIActionStatus.APPLIED_PENDING_REVIEW) {</span>
|
|
697
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
698
|
+
`Action with ID "${actionId}" cannot be confirmed. Status is "${action.status}", but must be "${AIActionStatus.APPLIED_PENDING_REVIEW}".`,
|
|
699
|
+
);
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
<span class="cstat-no" title="statement not covered" > action.status = AIActionStatus.CONFIRMED_KEPT;</span>
|
|
703
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
704
|
+
`Action ID ${actionId} confirmed kept. Status: ${action.status}`,
|
|
705
|
+
);
|
|
706
|
+
<span class="cstat-no" title="statement not covered" > return this.aiActionsRepository.save(action);</span>
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
<span class="fstat-no" title="function not covered" > async </span>revertAction(actionId: string): Promise<AIAction> {
|
|
710
|
+
const action = <span class="cstat-no" title="statement not covered" >await this.findOne(actionId);</span> // findOne already loads executionLogs
|
|
711
|
+
|
|
712
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (action.status !== AIActionStatus.APPLIED_PENDING_REVIEW) {</span>
|
|
713
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
|
|
714
|
+
`Action with ID "${actionId}" cannot be reverted. Status is "${action.status}", but must be "${AIActionStatus.APPLIED_PENDING_REVIEW}".`,
|
|
715
|
+
);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
let revertSucceeded = <span class="cstat-no" title="statement not covered" >false;</span>
|
|
719
|
+
let revertOutcomeMessage = <span class="cstat-no" title="statement not covered" >`Reverting action type: ${action.action_type}`;</span>
|
|
720
|
+
let errorDetails: string | undefined = <span class="cstat-no" title="statement not covered" >undefined;</span>
|
|
721
|
+
|
|
722
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
723
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
724
|
+
`Attempting to revert action ID ${action.id}, type ${action.action_type}`,
|
|
725
|
+
);
|
|
726
|
+
<span class="cstat-no" title="statement not covered" > switch (action.action_type) {</span>
|
|
727
|
+
case 'edit_file':
|
|
728
|
+
<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>
|
|
729
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Missing file_path for edit_file revert.');</span>
|
|
730
|
+
<span class="cstat-no" title="statement not covered" > if (action.original_content_for_revert !== null) {</span>
|
|
731
|
+
<span class="cstat-no" title="statement not covered" > await this.actionExecutionService.editFile(</span>
|
|
732
|
+
// Use editFile to restore; this will ensure directory exists
|
|
733
|
+
action.file_path,
|
|
734
|
+
action.original_content_for_revert,
|
|
735
|
+
);
|
|
736
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `File "${action.file_path}" content reverted to original.`;</span>
|
|
737
|
+
} else {
|
|
738
|
+
// Original content was null, implies file was created by 'edit'. Revert by deleting.
|
|
739
|
+
<span class="cstat-no" title="statement not covered" > await this.actionExecutionService.deleteFile(action.file_path);</span>
|
|
740
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `File "${action.file_path}" (created by edit) was deleted.`;</span>
|
|
741
|
+
}
|
|
742
|
+
<span class="cstat-no" title="statement not covered" > revertSucceeded = true;</span>
|
|
743
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
744
|
+
case 'delete_file':
|
|
745
|
+
<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>
|
|
746
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Missing file_path for delete_file revert.');</span>
|
|
747
|
+
<span class="cstat-no" title="statement not covered" > if (action.original_content_for_revert !== null) {</span>
|
|
748
|
+
// If there was original content, recreate the file with it.
|
|
749
|
+
<span class="cstat-no" title="statement not covered" > await this.actionExecutionService.createFile(</span>
|
|
750
|
+
// Use createFile to restore; this will ensure directory exists
|
|
751
|
+
action.file_path,
|
|
752
|
+
action.original_content_for_revert,
|
|
753
|
+
);
|
|
754
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `Deleted file "${action.file_path}" restored with original content.`;</span>
|
|
755
|
+
} else {
|
|
756
|
+
// If original_content_for_revert is null, it implies an empty or non-existent file was deleted.
|
|
757
|
+
// Reverting means ensuring it remains non-existent.
|
|
758
|
+
// Attempt to delete (might fail if already gone, which is fine).
|
|
759
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
760
|
+
<span class="cstat-no" title="statement not covered" > await this.actionExecutionService.deleteFile(action.file_path);</span>
|
|
761
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `Ensured file "${action.file_path}" (originally non-existent or empty) remains deleted.`;</span>
|
|
762
|
+
} catch (e) {
|
|
763
|
+
<span class="cstat-no" title="statement not covered" > if (e instanceof NotFoundException) {</span>
|
|
764
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `File "${action.file_path}" was already non-existent as expected for revert.`;</span>
|
|
765
|
+
} else {
|
|
766
|
+
<span class="cstat-no" title="statement not covered" > throw e; </span>// Re-throw other errors
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
<span class="cstat-no" title="statement not covered" > revertSucceeded = true;</span>
|
|
771
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
772
|
+
case 'create_file':
|
|
773
|
+
<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>
|
|
774
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('Missing file_path for create_file revert.');</span>
|
|
775
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
776
|
+
<span class="cstat-no" title="statement not covered" > await this.actionExecutionService.deleteFile(action.file_path);</span>
|
|
777
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `Created file "${action.file_path}" deleted.`;</span>
|
|
778
|
+
} catch (e) {
|
|
779
|
+
// If file not found, it's already "reverted" in a sense
|
|
780
|
+
<span class="cstat-no" title="statement not covered" > if (e instanceof NotFoundException) {</span>
|
|
781
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `Created file "${action.file_path}" was already deleted/not found.`;</span>
|
|
782
|
+
} else {
|
|
783
|
+
<span class="cstat-no" title="statement not covered" > throw e; </span>// Re-throw other errors
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
<span class="cstat-no" title="statement not covered" > revertSucceeded = true;</span>
|
|
787
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
788
|
+
case 'run_command':
|
|
789
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `Command "${action.command_string}" cannot be automatically reverted.`;</span>
|
|
790
|
+
<span class="cstat-no" title="statement not covered" > revertSucceeded = false; </span>// Explicitly false as it's not truly reverted
|
|
791
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
792
|
+
default:
|
|
793
|
+
<span class="cstat-no" title="statement not covered" > throw new Error(</span>
|
|
794
|
+
`Unsupported action_type for revert: "${action.action_type}"`,
|
|
795
|
+
);
|
|
796
|
+
}
|
|
797
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
798
|
+
`Revert attempt for action ID ${action.id} resulted in success: ${revertSucceeded}. Message: ${revertOutcomeMessage}`,
|
|
799
|
+
);
|
|
800
|
+
} catch (error) {
|
|
801
|
+
<span class="cstat-no" title="statement not covered" > this.logger.error(</span>
|
|
802
|
+
`Failed to revert action ID ${action.id}: ${error.message}`,
|
|
803
|
+
error.stack,
|
|
804
|
+
);
|
|
805
|
+
<span class="cstat-no" title="statement not covered" > revertOutcomeMessage = `Failed to revert action: ${error.message}`;</span>
|
|
806
|
+
<span class="cstat-no" title="statement not covered" > errorDetails = error.message;</span>
|
|
807
|
+
<span class="cstat-no" title="statement not covered" > revertSucceeded = false;</span>
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
<span class="cstat-no" title="statement not covered" > action.status = revertSucceeded</span>
|
|
811
|
+
? AIActionStatus.CONFIRMED_REVERTED
|
|
812
|
+
: AIActionStatus.REVERT_FAILED;
|
|
813
|
+
|
|
814
|
+
const log = <span class="cstat-no" title="statement not covered" >await this.executionLogsService.createLog({</span>
|
|
815
|
+
action_id: action.id,
|
|
816
|
+
output: revertSucceeded ? revertOutcomeMessage : undefined,
|
|
817
|
+
error_message: !revertSucceeded
|
|
818
|
+
? errorDetails || revertOutcomeMessage
|
|
819
|
+
: undefined,
|
|
820
|
+
});
|
|
821
|
+
|
|
822
|
+
<span class="cstat-no" title="statement not covered" > action.executionLogs = [...(action.executionLogs || []), log];</span>
|
|
823
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionsRepository.save(action);</span>
|
|
824
|
+
|
|
825
|
+
<span class="cstat-no" title="statement not covered" > return action;</span>
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
<span class="fstat-no" title="function not covered" > async </span>deleteAllByInputId(inputId: string): Promise<void> {
|
|
829
|
+
const actions = <span class="cstat-no" title="statement not covered" >await this.aiActionsRepository.find({</span>
|
|
830
|
+
where: { input_id: inputId },
|
|
831
|
+
});
|
|
832
|
+
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (actions.length > 0) {</span>
|
|
833
|
+
<span class="cstat-no" title="statement not covered" > this.logger.log(</span>
|
|
834
|
+
`Deleting ${actions.length} actions for input ID ${inputId}`,
|
|
835
|
+
);
|
|
836
|
+
<span class="cstat-no" title="statement not covered" > await this.aiActionsRepository.remove(actions);</span>
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
</pre></td></tr></table></pre>
|
|
841
|
+
|
|
842
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
843
|
+
</div><!-- /wrapper -->
|
|
844
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
845
|
+
Code coverage generated by
|
|
846
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
847
|
+
at 2025-07-30T23:37:05.373Z
|
|
848
|
+
</div>
|
|
849
|
+
<script src="../../prettify.js"></script>
|
|
850
|
+
<script>
|
|
851
|
+
window.onload = function () {
|
|
852
|
+
prettyPrint();
|
|
853
|
+
};
|
|
854
|
+
</script>
|
|
855
|
+
<script src="../../sorter.js"></script>
|
|
856
|
+
<script src="../../block-navigation.js"></script>
|
|
857
|
+
</body>
|
|
858
|
+
</html>
|
|
859
|
+
|