repoburg 1.3.8 → 1.3.10
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/dist/bin/grammar/tree-sitter-bash.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-css.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-html.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-javascript.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-json.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-python.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-rust.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-toml.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-tsx.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-typescript.wasm +0 -0
- package/backend/dist/bin/grammar/tree-sitter-yaml.wasm +0 -0
- package/backend/dist/packages/tokenpatch/index.d.ts +1 -0
- package/backend/dist/packages/tokenpatch/index.js +52 -0
- package/backend/dist/packages/tokenpatch/index.js.map +1 -0
- package/backend/dist/packages/tokenpatch/parser.d.ts +2 -0
- package/backend/dist/packages/tokenpatch/parser.js +17 -0
- package/backend/dist/packages/tokenpatch/parser.js.map +1 -0
- package/backend/dist/packages/tokenpatch/patcher.d.ts +11 -0
- package/backend/dist/packages/tokenpatch/patcher.js +189 -0
- package/backend/dist/packages/tokenpatch/patcher.js.map +1 -0
- package/backend/dist/packages/tokenpatch/tokens.d.ts +6 -0
- package/backend/dist/packages/tokenpatch/tokens.js +49 -0
- package/backend/dist/packages/tokenpatch/tokens.js.map +1 -0
- package/backend/dist/packages/tokenpatch/types.d.ts +8 -0
- package/backend/dist/packages/tokenpatch/types.js +3 -0
- package/backend/dist/packages/tokenpatch/types.js.map +1 -0
- package/backend/dist/src/ai-actions/ai-actions.service.d.ts +1 -0
- package/backend/dist/src/ai-actions/ai-actions.service.js +2 -0
- package/backend/dist/src/ai-actions/ai-actions.service.js.map +1 -1
- package/backend/dist/src/llm-orchestration/action-handlers/apply-diff.handler.js +6 -3
- package/backend/dist/src/llm-orchestration/action-handlers/apply-diff.handler.js.map +1 -1
- package/backend/dist/src/llm-orchestration/action-handlers/dto/patch.args.dto.d.ts +4 -0
- package/backend/dist/src/llm-orchestration/action-handlers/dto/patch.args.dto.js +29 -0
- package/backend/dist/src/llm-orchestration/action-handlers/dto/patch.args.dto.js.map +1 -0
- package/backend/dist/src/llm-orchestration/action-handlers/patch.handler.d.ts +12 -0
- package/backend/dist/src/llm-orchestration/action-handlers/patch.handler.js +142 -0
- package/backend/dist/src/llm-orchestration/action-handlers/patch.handler.js.map +1 -0
- package/backend/dist/src/llm-orchestration/llm-orchestration.module.js +2 -0
- package/backend/dist/src/llm-orchestration/llm-orchestration.module.js.map +1 -1
- package/backend/dist/src/llm-orchestration/llm-turn-processor.service.js +1 -0
- package/backend/dist/src/llm-orchestration/llm-turn-processor.service.js.map +1 -1
- package/backend/dist/src/seeding/data/system-prompts/experimental_master-agent.d.ts +1 -1
- package/backend/dist/src/seeding/data/system-prompts/experimental_master-agent.js +13 -13
- package/backend/dist/src/seeding/data/system-prompts/experimental_patch_master-agent.d.ts +2 -0
- package/backend/dist/src/seeding/data/system-prompts/experimental_patch_master-agent.js +463 -0
- package/backend/dist/src/seeding/data/system-prompts/experimental_patch_master-agent.js.map +1 -0
- package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
- package/backend/package.json +6 -3
- package/backend/packages/tokenpatch/grammar/tree-sitter-tsx.wasm +0 -0
- package/backend/packages/tokenpatch/grammar/tree-sitter-typescript.wasm +0 -0
- package/backend/packages/tokenpatch/index.spec.ts +579 -0
- package/backend/packages/tokenpatch/index.ts +80 -0
- package/backend/packages/tokenpatch/parser.ts +18 -0
- package/backend/packages/tokenpatch/patcher.spec.ts +194 -0
- package/backend/packages/tokenpatch/patcher.ts +300 -0
- package/backend/packages/tokenpatch/tokens.spec.ts +84 -0
- package/backend/packages/tokenpatch/tokens.ts +50 -0
- package/backend/packages/tokenpatch/types.ts +9 -0
- package/package.json +13 -12
- package/backend/coverage/clover.xml +0 -3434
- package/backend/coverage/coverage-final.json +0 -120
- package/backend/coverage/lcov-report/base.css +0 -224
- package/backend/coverage/lcov-report/block-navigation.js +0 -87
- package/backend/coverage/lcov-report/favicon.png +0 -0
- package/backend/coverage/lcov-report/index.html +0 -701
- package/backend/coverage/lcov-report/prettify.css +0 -1
- package/backend/coverage/lcov-report/prettify.js +0 -2
- package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/backend/coverage/lcov-report/sorter.js +0 -196
- package/backend/coverage/lcov-report/src/action-execution/action-execution.module.ts.html +0 -109
- package/backend/coverage/lcov-report/src/action-execution/action-execution.service.ts.html +0 -448
- package/backend/coverage/lcov-report/src/action-execution/index.html +0 -131
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +0 -940
- package/backend/coverage/lcov-report/src/ai-actions/ai-action-creation.service.ts.html +0 -1243
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +0 -664
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +0 -154
- package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +0 -859
- package/backend/coverage/lcov-report/src/ai-actions/index.html +0 -176
- package/backend/coverage/lcov-report/src/app.controller.ts.html +0 -151
- package/backend/coverage/lcov-report/src/app.module.ts.html +0 -373
- package/backend/coverage/lcov-report/src/app.service.ts.html +0 -196
- package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +0 -319
- package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +0 -124
- package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +0 -439
- package/backend/coverage/lcov-report/src/application-state/dto/index.html +0 -161
- package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +0 -103
- package/backend/coverage/lcov-report/src/application-state/dto/set-orchestration-timeout.dto.ts.html +0 -103
- package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +0 -106
- package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +0 -103
- package/backend/coverage/lcov-report/src/application-state/index.html +0 -146
- package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +0 -118
- package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +0 -1348
- package/backend/coverage/lcov-report/src/context-generation/index.html +0 -131
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +0 -289
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +0 -136
- package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +0 -400
- package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +0 -211
- package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/context-snippets/index.html +0 -146
- package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +0 -397
- package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +0 -136
- package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +0 -835
- package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +0 -358
- package/backend/coverage/lcov-report/src/context-templates/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/context-templates/index.html +0 -146
- package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +0 -241
- package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +0 -115
- package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +0 -145
- package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +0 -130
- package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +0 -223
- package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +0 -136
- package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +0 -157
- package/backend/coverage/lcov-report/src/core-entities/index.html +0 -281
- package/backend/coverage/lcov-report/src/core-entities/index.ts.html +0 -118
- package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +0 -130
- package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +0 -289
- package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +0 -280
- package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +0 -148
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +0 -277
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +0 -124
- package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +0 -304
- package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +0 -205
- package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/custom-snippets/index.html +0 -146
- package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +0 -292
- package/backend/coverage/lcov-report/src/events/events.module.ts.html +0 -109
- package/backend/coverage/lcov-report/src/events/index.html +0 -131
- package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +0 -130
- package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +0 -130
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +0 -124
- package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +0 -238
- package/backend/coverage/lcov-report/src/execution-logs/index.html +0 -146
- package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +0 -340
- package/backend/coverage/lcov-report/src/index.html +0 -191
- package/backend/coverage/lcov-report/src/llm-response-parser/dto/ai-action.dto.ts.html +0 -400
- package/backend/coverage/lcov-report/src/llm-response-parser/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/llm-response-parser/errors/index.html +0 -116
- package/backend/coverage/lcov-report/src/llm-response-parser/errors/parsing.error.ts.html +0 -118
- package/backend/coverage/lcov-report/src/llm-response-parser/index.html +0 -146
- package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.module.ts.html +0 -109
- package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.service.ts.html +0 -808
- package/backend/coverage/lcov-report/src/llm-response-parser/parsing.constants.ts.html +0 -139
- package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +0 -172
- package/backend/coverage/lcov-report/src/llm-responses/index.html +0 -146
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +0 -154
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +0 -166
- package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +0 -787
- package/backend/coverage/lcov-report/src/main.ts.html +0 -382
- package/backend/coverage/lcov-report/src/orchestration/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/orchestration/dto/orchestration.dto.ts.html +0 -169
- package/backend/coverage/lcov-report/src/orchestration/index.html +0 -191
- package/backend/coverage/lcov-report/src/orchestration/orchestration-fs.service.ts.html +0 -595
- package/backend/coverage/lcov-report/src/orchestration/orchestration-parser.service.ts.html +0 -142
- package/backend/coverage/lcov-report/src/orchestration/orchestration.controller.ts.html +0 -406
- package/backend/coverage/lcov-report/src/orchestration/orchestration.module.ts.html +0 -169
- package/backend/coverage/lcov-report/src/orchestration/orchestration.service.ts.html +0 -1093
- package/backend/coverage/lcov-report/src/orchestration/orchestration.types.ts.html +0 -175
- package/backend/coverage/lcov-report/src/projects/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +0 -154
- package/backend/coverage/lcov-report/src/projects/index.html +0 -146
- package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +0 -232
- package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +0 -124
- package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +0 -223
- package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +0 -355
- package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +0 -271
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +0 -136
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +0 -148
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +0 -247
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +0 -190
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/pm-context.ts.html +0 -250
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/pr-description.ts.html +0 -186
- package/backend/coverage/lcov-report/src/seeding/data/context-templates/sample_focused-tree.ts.html +0 -124
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +0 -94
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +0 -94
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +0 -236
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +0 -94
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +0 -94
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +0 -94
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +0 -94
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +0 -94
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +0 -100
- package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +0 -94
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/codebase-explorer.ts.html +0 -331
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_multi-file-action-generator-with-requester.ts.html +0 -675
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +0 -160
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/multi-file-action-generator.ts.html +0 -550
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/packup.ts.html +0 -184
- package/backend/coverage/lcov-report/src/seeding/data/system-prompts/refactor-split.ts.html +0 -244
- package/backend/coverage/lcov-report/src/seeding/index.html +0 -176
- package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +0 -145
- package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +0 -151
- package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +0 -289
- package/backend/coverage/lcov-report/src/session-followup/index.html +0 -131
- package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +0 -130
- package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +0 -670
- package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +0 -247
- package/backend/coverage/lcov-report/src/session-inputs/index.html +0 -161
- package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +0 -763
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +0 -337
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +0 -205
- package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +0 -1621
- package/backend/coverage/lcov-report/src/session-transfer/index.html +0 -131
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +0 -172
- package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +0 -574
- package/backend/coverage/lcov-report/src/sessions/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +0 -340
- package/backend/coverage/lcov-report/src/sessions/index.html +0 -146
- package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +0 -457
- package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +0 -214
- package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +0 -844
- package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +0 -217
- package/backend/coverage/lcov-report/src/system-prompts/index.html +0 -146
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +0 -298
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +0 -127
- package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +0 -352
- package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +0 -178
- package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +0 -310
- package/backend/coverage/lcov-report/src/utils/index.html +0 -131
- package/backend/coverage/lcov-report/src/utils/index.ts.html +0 -88
- package/backend/coverage/lcov-report/src/workspace/dto/index.html +0 -116
- package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +0 -193
- package/backend/coverage/lcov-report/src/workspace/index.html +0 -146
- package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +0 -247
- package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +0 -121
- package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +0 -745
- package/backend/coverage/lcov.info +0 -5590
|
@@ -1,745 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for src/workspace/workspace.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/workspace</a> workspace.service.ts</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">100% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>101/101</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">95.45% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>21/22</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">100% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>19/19</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">100% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>95/95</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 high'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">7x</span>
|
|
287
|
-
<span class="cline-any cline-yes">7x</span>
|
|
288
|
-
<span class="cline-any cline-neutral"> </span>
|
|
289
|
-
<span class="cline-any cline-neutral"> </span>
|
|
290
|
-
<span class="cline-any cline-neutral"> </span>
|
|
291
|
-
<span class="cline-any cline-neutral"> </span>
|
|
292
|
-
<span class="cline-any cline-yes">7x</span>
|
|
293
|
-
<span class="cline-any cline-yes">7x</span>
|
|
294
|
-
<span class="cline-any cline-yes">7x</span>
|
|
295
|
-
<span class="cline-any cline-yes">7x</span>
|
|
296
|
-
<span class="cline-any cline-neutral"> </span>
|
|
297
|
-
<span class="cline-any cline-neutral"> </span>
|
|
298
|
-
<span class="cline-any cline-neutral"> </span>
|
|
299
|
-
<span class="cline-any cline-neutral"> </span>
|
|
300
|
-
<span class="cline-any cline-neutral"> </span>
|
|
301
|
-
<span class="cline-any cline-neutral"> </span>
|
|
302
|
-
<span class="cline-any cline-neutral"> </span>
|
|
303
|
-
<span class="cline-any cline-yes">7x</span>
|
|
304
|
-
<span class="cline-any cline-yes">22x</span>
|
|
305
|
-
<span class="cline-any cline-yes">22x</span>
|
|
306
|
-
<span class="cline-any cline-neutral"> </span>
|
|
307
|
-
<span class="cline-any cline-neutral"> </span>
|
|
308
|
-
<span class="cline-any cline-neutral"> </span>
|
|
309
|
-
<span class="cline-any cline-yes">22x</span>
|
|
310
|
-
<span class="cline-any cline-yes">22x</span>
|
|
311
|
-
<span class="cline-any cline-yes">22x</span>
|
|
312
|
-
<span class="cline-any cline-neutral"> </span>
|
|
313
|
-
<span class="cline-any cline-neutral"> </span>
|
|
314
|
-
<span class="cline-any cline-yes">22x</span>
|
|
315
|
-
<span class="cline-any cline-neutral"> </span>
|
|
316
|
-
<span class="cline-any cline-neutral"> </span>
|
|
317
|
-
<span class="cline-any cline-neutral"> </span>
|
|
318
|
-
<span class="cline-any cline-neutral"> </span>
|
|
319
|
-
<span class="cline-any cline-neutral"> </span>
|
|
320
|
-
<span class="cline-any cline-neutral"> </span>
|
|
321
|
-
<span class="cline-any cline-yes">13x</span>
|
|
322
|
-
<span class="cline-any cline-yes">13x</span>
|
|
323
|
-
<span class="cline-any cline-yes">13x</span>
|
|
324
|
-
<span class="cline-any cline-yes">2x</span>
|
|
325
|
-
<span class="cline-any cline-yes">2x</span>
|
|
326
|
-
<span class="cline-any cline-yes">2x</span>
|
|
327
|
-
<span class="cline-any cline-yes">2x</span>
|
|
328
|
-
<span class="cline-any cline-neutral"> </span>
|
|
329
|
-
<span class="cline-any cline-yes">11x</span>
|
|
330
|
-
<span class="cline-any cline-neutral"> </span>
|
|
331
|
-
<span class="cline-any cline-neutral"> </span>
|
|
332
|
-
<span class="cline-any cline-neutral"> </span>
|
|
333
|
-
<span class="cline-any cline-neutral"> </span>
|
|
334
|
-
<span class="cline-any cline-neutral"> </span>
|
|
335
|
-
<span class="cline-any cline-yes">13x</span>
|
|
336
|
-
<span class="cline-any cline-neutral"> </span>
|
|
337
|
-
<span class="cline-any cline-neutral"> </span>
|
|
338
|
-
<span class="cline-any cline-yes">13x</span>
|
|
339
|
-
<span class="cline-any cline-neutral"> </span>
|
|
340
|
-
<span class="cline-any cline-yes">13x</span>
|
|
341
|
-
<span class="cline-any cline-yes">13x</span>
|
|
342
|
-
<span class="cline-any cline-yes">13x</span>
|
|
343
|
-
<span class="cline-any cline-neutral"> </span>
|
|
344
|
-
<span class="cline-any cline-neutral"> </span>
|
|
345
|
-
<span class="cline-any cline-neutral"> </span>
|
|
346
|
-
<span class="cline-any cline-neutral"> </span>
|
|
347
|
-
<span class="cline-any cline-yes">11x</span>
|
|
348
|
-
<span class="cline-any cline-neutral"> </span>
|
|
349
|
-
<span class="cline-any cline-neutral"> </span>
|
|
350
|
-
<span class="cline-any cline-yes">2x</span>
|
|
351
|
-
<span class="cline-any cline-yes">1x</span>
|
|
352
|
-
<span class="cline-any cline-yes">1x</span>
|
|
353
|
-
<span class="cline-any cline-neutral"> </span>
|
|
354
|
-
<span class="cline-any cline-yes">1x</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-yes">1x</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-yes">4x</span>
|
|
366
|
-
<span class="cline-any cline-yes">4x</span>
|
|
367
|
-
<span class="cline-any cline-yes">1x</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-yes">3x</span>
|
|
372
|
-
<span class="cline-any cline-neutral"> </span>
|
|
373
|
-
<span class="cline-any cline-yes">3x</span>
|
|
374
|
-
<span class="cline-any cline-yes">1x</span>
|
|
375
|
-
<span class="cline-any cline-yes">1x</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-yes">2x</span>
|
|
380
|
-
<span class="cline-any cline-neutral"> </span>
|
|
381
|
-
<span class="cline-any cline-neutral"> </span>
|
|
382
|
-
<span class="cline-any cline-neutral"> </span>
|
|
383
|
-
<span class="cline-any cline-neutral"> </span>
|
|
384
|
-
<span class="cline-any cline-neutral"> </span>
|
|
385
|
-
<span class="cline-any cline-neutral"> </span>
|
|
386
|
-
<span class="cline-any cline-yes">4x</span>
|
|
387
|
-
<span class="cline-any cline-yes">4x</span>
|
|
388
|
-
<span class="cline-any cline-neutral"> </span>
|
|
389
|
-
<span class="cline-any cline-yes">4x</span>
|
|
390
|
-
<span class="cline-any cline-yes">4x</span>
|
|
391
|
-
<span class="cline-any cline-yes">4x</span>
|
|
392
|
-
<span class="cline-any cline-yes">2x</span>
|
|
393
|
-
<span class="cline-any cline-neutral"> </span>
|
|
394
|
-
<span class="cline-any cline-yes">3x</span>
|
|
395
|
-
<span class="cline-any cline-neutral"> </span>
|
|
396
|
-
<span class="cline-any cline-neutral"> </span>
|
|
397
|
-
<span class="cline-any cline-neutral"> </span>
|
|
398
|
-
<span class="cline-any cline-yes">4x</span>
|
|
399
|
-
<span class="cline-any cline-neutral"> </span>
|
|
400
|
-
<span class="cline-any cline-neutral"> </span>
|
|
401
|
-
<span class="cline-any cline-neutral"> </span>
|
|
402
|
-
<span class="cline-any cline-neutral"> </span>
|
|
403
|
-
<span class="cline-any cline-neutral"> </span>
|
|
404
|
-
<span class="cline-any cline-neutral"> </span>
|
|
405
|
-
<span class="cline-any cline-yes">20x</span>
|
|
406
|
-
<span class="cline-any cline-yes">20x</span>
|
|
407
|
-
<span class="cline-any cline-neutral"> </span>
|
|
408
|
-
<span class="cline-any cline-neutral"> </span>
|
|
409
|
-
<span class="cline-any cline-neutral"> </span>
|
|
410
|
-
<span class="cline-any cline-neutral"> </span>
|
|
411
|
-
<span class="cline-any cline-yes">7x</span>
|
|
412
|
-
<span class="cline-any cline-yes">7x</span>
|
|
413
|
-
<span class="cline-any cline-neutral"> </span>
|
|
414
|
-
<span class="cline-any cline-neutral"> </span>
|
|
415
|
-
<span class="cline-any cline-yes">13x</span>
|
|
416
|
-
<span class="cline-any cline-neutral"> </span>
|
|
417
|
-
<span class="cline-any cline-neutral"> </span>
|
|
418
|
-
<span class="cline-any cline-yes">13x</span>
|
|
419
|
-
<span class="cline-any cline-yes">13x</span>
|
|
420
|
-
<span class="cline-any cline-neutral"> </span>
|
|
421
|
-
<span class="cline-any cline-yes">12x</span>
|
|
422
|
-
<span class="cline-any cline-yes">12x</span>
|
|
423
|
-
<span class="cline-any cline-yes">23x</span>
|
|
424
|
-
<span class="cline-any cline-yes">23x</span>
|
|
425
|
-
<span class="cline-any cline-yes">12x</span>
|
|
426
|
-
<span class="cline-any cline-neutral"> </span>
|
|
427
|
-
<span class="cline-any cline-neutral"> </span>
|
|
428
|
-
<span class="cline-any cline-yes">12x</span>
|
|
429
|
-
<span class="cline-any cline-neutral"> </span>
|
|
430
|
-
<span class="cline-any cline-yes">12x</span>
|
|
431
|
-
<span class="cline-any cline-neutral"> </span>
|
|
432
|
-
<span class="cline-any cline-neutral"> </span>
|
|
433
|
-
<span class="cline-any cline-neutral"> </span>
|
|
434
|
-
<span class="cline-any cline-yes">12x</span>
|
|
435
|
-
<span class="cline-any cline-yes">12x</span>
|
|
436
|
-
<span class="cline-any cline-neutral"> </span>
|
|
437
|
-
<span class="cline-any cline-yes">12x</span>
|
|
438
|
-
<span class="cline-any cline-neutral"> </span>
|
|
439
|
-
<span class="cline-any cline-yes">1x</span>
|
|
440
|
-
<span class="cline-any cline-yes">1x</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-neutral"> </span>
|
|
445
|
-
<span class="cline-any cline-yes">17x</span>
|
|
446
|
-
<span class="cline-any cline-yes">17x</span>
|
|
447
|
-
<span class="cline-any cline-yes">17x</span>
|
|
448
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
453
|
-
<span class="cline-any cline-neutral"> </span>
|
|
454
|
-
<span class="cline-any cline-neutral"> </span>
|
|
455
|
-
<span class="cline-any cline-neutral"> </span>
|
|
456
|
-
<span class="cline-any cline-yes">6x</span>
|
|
457
|
-
<span class="cline-any cline-neutral"> </span>
|
|
458
|
-
<span class="cline-any cline-yes">6x</span>
|
|
459
|
-
<span class="cline-any cline-neutral"> </span>
|
|
460
|
-
<span class="cline-any cline-yes">6x</span>
|
|
461
|
-
<span class="cline-any cline-yes">6x</span>
|
|
462
|
-
<span class="cline-any cline-yes">4x</span>
|
|
463
|
-
<span class="cline-any cline-yes">12x</span>
|
|
464
|
-
<span class="cline-any cline-yes">4x</span>
|
|
465
|
-
<span class="cline-any cline-neutral"> </span>
|
|
466
|
-
<span class="cline-any cline-yes">2x</span>
|
|
467
|
-
<span class="cline-any cline-yes">3x</span>
|
|
468
|
-
<span class="cline-any cline-yes">1x</span>
|
|
469
|
-
<span class="cline-any cline-yes">1x</span>
|
|
470
|
-
<span class="cline-any cline-neutral"> </span>
|
|
471
|
-
<span class="cline-any cline-neutral"> </span>
|
|
472
|
-
<span class="cline-any cline-yes">20x</span>
|
|
473
|
-
<span class="cline-any cline-yes">6x</span>
|
|
474
|
-
<span class="cline-any cline-yes">6x</span>
|
|
475
|
-
<span class="cline-any cline-neutral"> </span>
|
|
476
|
-
<span class="cline-any cline-neutral"> </span>
|
|
477
|
-
<span class="cline-any cline-yes">6x</span>
|
|
478
|
-
<span class="cline-any cline-yes">20x</span>
|
|
479
|
-
<span class="cline-any cline-neutral"> </span>
|
|
480
|
-
<span class="cline-any cline-yes">7x</span>
|
|
481
|
-
<span class="cline-any cline-neutral"> </span>
|
|
482
|
-
<span class="cline-any cline-neutral"> </span>
|
|
483
|
-
<span class="cline-any cline-yes">6x</span>
|
|
484
|
-
<span class="cline-any cline-yes">6x</span>
|
|
485
|
-
<span class="cline-any cline-yes">6x</span>
|
|
486
|
-
<span class="cline-any cline-yes">6x</span>
|
|
487
|
-
<span class="cline-any cline-neutral"> </span>
|
|
488
|
-
<span class="cline-any cline-yes">6x</span>
|
|
489
|
-
<span class="cline-any cline-neutral"> </span>
|
|
490
|
-
<span class="cline-any cline-neutral"> </span>
|
|
491
|
-
<span class="cline-any cline-neutral"> </span>
|
|
492
|
-
<span class="cline-any cline-yes">6x</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-neutral"> </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-yes">1x</span>
|
|
502
|
-
<span class="cline-any cline-neutral"> </span>
|
|
503
|
-
<span class="cline-any cline-yes">1x</span>
|
|
504
|
-
<span class="cline-any cline-neutral"> </span>
|
|
505
|
-
<span class="cline-any cline-neutral"> </span>
|
|
506
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, Logger, BadRequestException } from '@nestjs/common';
|
|
507
|
-
import { ContextGenerationService } from '../context-generation/context-generation.service';
|
|
508
|
-
import {
|
|
509
|
-
SearchWorkspaceResponseDto,
|
|
510
|
-
SearchResultItemDto,
|
|
511
|
-
} from './dto/search-workspace.dto';
|
|
512
|
-
import * as fs from 'fs/promises';
|
|
513
|
-
import * as path from 'path';
|
|
514
|
-
import { fuzzySearch } from '../utils';
|
|
515
|
-
import { exec, ExecOptions } from 'child_process';
|
|
516
|
-
|
|
517
|
-
interface FileTree {
|
|
518
|
-
files: string[];
|
|
519
|
-
folders: string[];
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
@Injectable()
|
|
523
|
-
export class WorkspaceService {
|
|
524
|
-
private readonly logger = new Logger(WorkspaceService.name);
|
|
525
|
-
private projectRoot: string =
|
|
526
|
-
process.env.REPOBURG_PROJECT_PATH || process.cwd();
|
|
527
|
-
|
|
528
|
-
// Cache for file tree
|
|
529
|
-
private fileTreeCache: FileTree | null = null;
|
|
530
|
-
private fileTreeCacheTimestamp: number | null = null;
|
|
531
|
-
private readonly CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
532
|
-
|
|
533
|
-
constructor(
|
|
534
|
-
private readonly contextGenerationService: ContextGenerationService,
|
|
535
|
-
) {}
|
|
536
|
-
|
|
537
|
-
private execAsync(
|
|
538
|
-
command: string,
|
|
539
|
-
options: ExecOptions,
|
|
540
|
-
): Promise<{ stdout: string; stderr: string }> {
|
|
541
|
-
return new Promise((resolve, reject) => {
|
|
542
|
-
exec(command, options, (error, stdout, stderr) => {
|
|
543
|
-
if (error) {
|
|
544
|
-
error['stdout'] = stdout;
|
|
545
|
-
error['stderr'] = stderr;
|
|
546
|
-
reject(error);
|
|
547
|
-
return;
|
|
548
|
-
}
|
|
549
|
-
resolve({ stdout, stderr });
|
|
550
|
-
});
|
|
551
|
-
});
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
private async getFilesFromRg(): Promise<string[]> {
|
|
555
|
-
const rgCommand = await this.contextGenerationService.getCommandPath('rg');
|
|
556
|
-
// --files: uses gitignore, .ignore, etc. by default.
|
|
557
|
-
// --hidden: ensures hidden files (dotfiles) are included, unless ignored.
|
|
558
|
-
const command = `${rgCommand} --files --hidden --glob '!.git'`;
|
|
559
|
-
|
|
560
|
-
try {
|
|
561
|
-
this.logger.log(`Executing for file list: ${command}`);
|
|
562
|
-
const { stdout } = await this.execAsync(command, {
|
|
563
|
-
cwd: this.projectRoot,
|
|
564
|
-
maxBuffer: 256 * 1024 * 1024, // 256MB
|
|
565
|
-
timeout: 10000, // 10s
|
|
566
|
-
});
|
|
567
|
-
return stdout.trim().split('\n').filter(Boolean);
|
|
568
|
-
} catch (error) {
|
|
569
|
-
// rg exits with code 1 if no files are found with --files, which is not an error for us.
|
|
570
|
-
if (error.code === 1 && error.stdout === '' && error.stderr === '') {
|
|
571
|
-
this.logger.log('rg --files returned no files.');
|
|
572
|
-
return [];
|
|
573
|
-
}
|
|
574
|
-
this.logger.error(
|
|
575
|
-
`Failed to get file list from rg: ${error.message}`,
|
|
576
|
-
error.stack,
|
|
577
|
-
);
|
|
578
|
-
throw new Error(
|
|
579
|
-
`Could not retrieve file list from RipGrep. Is 'rg' installed and in your PATH?`,
|
|
580
|
-
);
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
private resolveAndValidatePath(unsafePath: string): string {
|
|
585
|
-
const normalizedPath = path.normalize(unsafePath);
|
|
586
|
-
if (path.isAbsolute(normalizedPath)) {
|
|
587
|
-
throw new BadRequestException(
|
|
588
|
-
`Absolute paths are not allowed: ${unsafePath}`,
|
|
589
|
-
);
|
|
590
|
-
}
|
|
591
|
-
const resolvedPath = path.resolve(this.projectRoot, normalizedPath);
|
|
592
|
-
|
|
593
|
-
if (!resolvedPath.startsWith(this.projectRoot)) {
|
|
594
|
-
this.logger.warn(`Path traversal attempt detected: ${unsafePath}`);
|
|
595
|
-
throw new BadRequestException(
|
|
596
|
-
`Path traversal is not allowed. Access denied for path: ${unsafePath}`,
|
|
597
|
-
);
|
|
598
|
-
}
|
|
599
|
-
return resolvedPath;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
async validatePaths(paths: {
|
|
603
|
-
files?: string[];
|
|
604
|
-
folders?: string[];
|
|
605
|
-
}): Promise<{ valid: boolean; invalidPaths: string[] }> {
|
|
606
|
-
const invalidPaths: string[] = [];
|
|
607
|
-
const allPaths = [...(paths.files || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>, ...(paths.folders || [])];
|
|
608
|
-
|
|
609
|
-
for (const p of allPaths) {
|
|
610
|
-
try {
|
|
611
|
-
const safePath = this.resolveAndValidatePath(p);
|
|
612
|
-
await fs.access(safePath);
|
|
613
|
-
} catch (e) {
|
|
614
|
-
invalidPaths.push(p);
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
return {
|
|
619
|
-
valid: invalidPaths.length === 0,
|
|
620
|
-
invalidPaths,
|
|
621
|
-
};
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
async getFileTree(): Promise<FileTree> {
|
|
625
|
-
const now = Date.now();
|
|
626
|
-
if (
|
|
627
|
-
this.fileTreeCache &&
|
|
628
|
-
this.fileTreeCacheTimestamp &&
|
|
629
|
-
now - this.fileTreeCacheTimestamp < this.CACHE_TTL_MS
|
|
630
|
-
) {
|
|
631
|
-
this.logger.log('Returning file tree from cache.');
|
|
632
|
-
return this.fileTreeCache;
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
this.logger.log(
|
|
636
|
-
`Scanning project root for file tree with rg: ${this.projectRoot}`,
|
|
637
|
-
);
|
|
638
|
-
try {
|
|
639
|
-
const files = await this.getFilesFromRg();
|
|
640
|
-
|
|
641
|
-
const folderSet = new Set<string>();
|
|
642
|
-
files.forEach((file) => {
|
|
643
|
-
const parts = file.split(path.sep);
|
|
644
|
-
for (let i = 1; i < parts.length; i++) {
|
|
645
|
-
folderSet.add(parts.slice(0, i).join(path.sep));
|
|
646
|
-
}
|
|
647
|
-
});
|
|
648
|
-
const folders = Array.from(folderSet);
|
|
649
|
-
|
|
650
|
-
this.logger.log(
|
|
651
|
-
`Found ${files.length} files and ${folders.length} folders.`,
|
|
652
|
-
);
|
|
653
|
-
|
|
654
|
-
this.fileTreeCache = { files, folders };
|
|
655
|
-
this.fileTreeCacheTimestamp = now;
|
|
656
|
-
|
|
657
|
-
return this.fileTreeCache;
|
|
658
|
-
} catch (error) {
|
|
659
|
-
this.logger.error('Failed to get file tree:', error);
|
|
660
|
-
throw error;
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
async invalidateFileTreeCache(): Promise<void> {
|
|
665
|
-
this.logger.log('Invalidating file tree cache.');
|
|
666
|
-
this.fileTreeCache = null;
|
|
667
|
-
this.fileTreeCacheTimestamp = null;
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
async search(
|
|
671
|
-
query: string,
|
|
672
|
-
type: 'files' | 'folders' | 'all',
|
|
673
|
-
page: number,
|
|
674
|
-
limit: number,
|
|
675
|
-
): Promise<SearchWorkspaceResponseDto> {
|
|
676
|
-
this.logger.log(`Searching for "${query}" (type: ${type})`);
|
|
677
|
-
|
|
678
|
-
const { files, folders } = await this.getFileTree();
|
|
679
|
-
|
|
680
|
-
let searchPool: { path: string; type: 'file' | 'folder' }[] = [];
|
|
681
|
-
if (type === 'all') {
|
|
682
|
-
searchPool = [
|
|
683
|
-
...files.map((p) => ({ path: p, type: 'file' as const })),
|
|
684
|
-
...folders.map((p) => ({ path: p, type: 'folder' as const })),
|
|
685
|
-
];
|
|
686
|
-
} else if (type === 'files') {
|
|
687
|
-
searchPool = files.map((p) => ({ path: p, type: 'file' as const }));
|
|
688
|
-
} else if (type === 'folders') {
|
|
689
|
-
searchPool = folders.map((p) => ({ path: p, type: 'folder' as const }));
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
const searchPoolStrings = searchPool.map((item) => item.path);
|
|
693
|
-
const matchedPaths = fuzzySearch(query, searchPoolStrings);
|
|
694
|
-
const matchedPathSet = new Set(matchedPaths);
|
|
695
|
-
|
|
696
|
-
// Filter the original pool to keep type information, and sort by fuzzy search result order
|
|
697
|
-
const results: SearchResultItemDto[] = searchPool
|
|
698
|
-
.filter((item) => matchedPathSet.has(item.path))
|
|
699
|
-
.sort(
|
|
700
|
-
(a, b) => matchedPaths.indexOf(a.path) - matchedPaths.indexOf(b.path),
|
|
701
|
-
);
|
|
702
|
-
|
|
703
|
-
const total = results.length;
|
|
704
|
-
const startIndex = (page - 1) * limit;
|
|
705
|
-
const endIndex = page * limit;
|
|
706
|
-
const paginatedResults = results.slice(startIndex, endIndex);
|
|
707
|
-
|
|
708
|
-
this.logger.log(
|
|
709
|
-
`Search for "${query}" (type: ${type}) found ${total} total results. Returning page ${page} with ${paginatedResults.length} items.`,
|
|
710
|
-
);
|
|
711
|
-
|
|
712
|
-
return {
|
|
713
|
-
results: paginatedResults,
|
|
714
|
-
total,
|
|
715
|
-
page,
|
|
716
|
-
hasMore: endIndex < total,
|
|
717
|
-
};
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
async getFileContent(filePath: string): Promise<string> {
|
|
721
|
-
this.logger.log(`Reading content for file: ${filePath}`);
|
|
722
|
-
// Use the fetchFileContent method from ContextGenerationService to ensure path safety and get raw content.
|
|
723
|
-
return this.contextGenerationService.fetchFileContent(filePath);
|
|
724
|
-
}
|
|
725
|
-
}
|
|
726
|
-
</pre></td></tr></table></pre>
|
|
727
|
-
|
|
728
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
729
|
-
</div><!-- /wrapper -->
|
|
730
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
731
|
-
Code coverage generated by
|
|
732
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
733
|
-
at 2025-09-12T19:21:55.945Z
|
|
734
|
-
</div>
|
|
735
|
-
<script src="../../prettify.js"></script>
|
|
736
|
-
<script>
|
|
737
|
-
window.onload = function () {
|
|
738
|
-
prettyPrint();
|
|
739
|
-
};
|
|
740
|
-
</script>
|
|
741
|
-
<script src="../../sorter.js"></script>
|
|
742
|
-
<script src="../../block-navigation.js"></script>
|
|
743
|
-
</body>
|
|
744
|
-
</html>
|
|
745
|
-
|