@ddse/acm-aicoder 0.5.0
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/.aicoder/index.json +304 -0
- package/AICODER_IMPLEMENTATION_PLAN_PHASE2.md +284 -0
- package/LICENSE +21 -0
- package/README.md +490 -0
- package/bin/interactive.tsx +232 -0
- package/dist/bin/interactive.d.ts +3 -0
- package/dist/bin/interactive.d.ts.map +1 -0
- package/dist/bin/interactive.js +155 -0
- package/dist/bin/interactive.js.map +1 -0
- package/dist/src/config/providers.d.ts +15 -0
- package/dist/src/config/providers.d.ts.map +1 -0
- package/dist/src/config/providers.js +142 -0
- package/dist/src/config/providers.js.map +1 -0
- package/dist/src/config/session.d.ts +25 -0
- package/dist/src/config/session.d.ts.map +1 -0
- package/dist/src/config/session.js +97 -0
- package/dist/src/config/session.js.map +1 -0
- package/dist/src/context/bm25.d.ts +68 -0
- package/dist/src/context/bm25.d.ts.map +1 -0
- package/dist/src/context/bm25.js +131 -0
- package/dist/src/context/bm25.js.map +1 -0
- package/dist/src/context/code-search.d.ts +30 -0
- package/dist/src/context/code-search.d.ts.map +1 -0
- package/dist/src/context/code-search.js +150 -0
- package/dist/src/context/code-search.js.map +1 -0
- package/dist/src/context/context-pack.d.ts +25 -0
- package/dist/src/context/context-pack.d.ts.map +1 -0
- package/dist/src/context/context-pack.js +92 -0
- package/dist/src/context/context-pack.js.map +1 -0
- package/dist/src/context/dependency-mapper.d.ts +10 -0
- package/dist/src/context/dependency-mapper.d.ts.map +1 -0
- package/dist/src/context/dependency-mapper.js +62 -0
- package/dist/src/context/dependency-mapper.js.map +1 -0
- package/dist/src/context/index.d.ts +8 -0
- package/dist/src/context/index.d.ts.map +1 -0
- package/dist/src/context/index.js +9 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/symbol-extractor.d.ts +26 -0
- package/dist/src/context/symbol-extractor.d.ts.map +1 -0
- package/dist/src/context/symbol-extractor.js +129 -0
- package/dist/src/context/symbol-extractor.js.map +1 -0
- package/dist/src/context/test-mapper.d.ts +16 -0
- package/dist/src/context/test-mapper.d.ts.map +1 -0
- package/dist/src/context/test-mapper.js +66 -0
- package/dist/src/context/test-mapper.js.map +1 -0
- package/dist/src/context/types.d.ts +61 -0
- package/dist/src/context/types.d.ts.map +1 -0
- package/dist/src/context/types.js +3 -0
- package/dist/src/context/types.js.map +1 -0
- package/dist/src/context/workspace-indexer.d.ts +39 -0
- package/dist/src/context/workspace-indexer.d.ts.map +1 -0
- package/dist/src/context/workspace-indexer.js +222 -0
- package/dist/src/context/workspace-indexer.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/registries.d.ts +34 -0
- package/dist/src/registries.d.ts.map +1 -0
- package/dist/src/registries.js +87 -0
- package/dist/src/registries.js.map +1 -0
- package/dist/src/runtime/budget-manager.d.ts +42 -0
- package/dist/src/runtime/budget-manager.d.ts.map +1 -0
- package/dist/src/runtime/budget-manager.js +82 -0
- package/dist/src/runtime/budget-manager.js.map +1 -0
- package/dist/src/runtime/interactive-runtime.d.ts +39 -0
- package/dist/src/runtime/interactive-runtime.d.ts.map +1 -0
- package/dist/src/runtime/interactive-runtime.js +321 -0
- package/dist/src/runtime/interactive-runtime.js.map +1 -0
- package/dist/src/tasks-v2/analysis-tasks.d.ts +117 -0
- package/dist/src/tasks-v2/analysis-tasks.d.ts.map +1 -0
- package/dist/src/tasks-v2/analysis-tasks.js +209 -0
- package/dist/src/tasks-v2/analysis-tasks.js.map +1 -0
- package/dist/src/tasks-v2/developer-tasks.d.ts +226 -0
- package/dist/src/tasks-v2/developer-tasks.d.ts.map +1 -0
- package/dist/src/tasks-v2/developer-tasks.js +322 -0
- package/dist/src/tasks-v2/developer-tasks.js.map +1 -0
- package/dist/src/tasks-v2/index.d.ts +3 -0
- package/dist/src/tasks-v2/index.d.ts.map +1 -0
- package/dist/src/tasks-v2/index.js +4 -0
- package/dist/src/tasks-v2/index.js.map +1 -0
- package/dist/src/tools-v2/edit-tools.d.ts +67 -0
- package/dist/src/tools-v2/edit-tools.d.ts.map +1 -0
- package/dist/src/tools-v2/edit-tools.js +117 -0
- package/dist/src/tools-v2/edit-tools.js.map +1 -0
- package/dist/src/tools-v2/index.d.ts +6 -0
- package/dist/src/tools-v2/index.d.ts.map +1 -0
- package/dist/src/tools-v2/index.js +7 -0
- package/dist/src/tools-v2/index.js.map +1 -0
- package/dist/src/tools-v2/read-tools.d.ts +129 -0
- package/dist/src/tools-v2/read-tools.d.ts.map +1 -0
- package/dist/src/tools-v2/read-tools.js +216 -0
- package/dist/src/tools-v2/read-tools.js.map +1 -0
- package/dist/src/tools-v2/search-tools.d.ts +73 -0
- package/dist/src/tools-v2/search-tools.d.ts.map +1 -0
- package/dist/src/tools-v2/search-tools.js +132 -0
- package/dist/src/tools-v2/search-tools.js.map +1 -0
- package/dist/src/tools-v2/test-tools.d.ts +59 -0
- package/dist/src/tools-v2/test-tools.d.ts.map +1 -0
- package/dist/src/tools-v2/test-tools.js +111 -0
- package/dist/src/tools-v2/test-tools.js.map +1 -0
- package/dist/src/tools-v2/workspace-context.d.ts +65 -0
- package/dist/src/tools-v2/workspace-context.d.ts.map +1 -0
- package/dist/src/tools-v2/workspace-context.js +336 -0
- package/dist/src/tools-v2/workspace-context.js.map +1 -0
- package/dist/src/ui/App.d.ts +9 -0
- package/dist/src/ui/App.d.ts.map +1 -0
- package/dist/src/ui/App.js +257 -0
- package/dist/src/ui/App.js.map +1 -0
- package/dist/src/ui/components/ChatPane.d.ts +12 -0
- package/dist/src/ui/components/ChatPane.d.ts.map +1 -0
- package/dist/src/ui/components/ChatPane.js +41 -0
- package/dist/src/ui/components/ChatPane.js.map +1 -0
- package/dist/src/ui/components/EventsPane.d.ts +12 -0
- package/dist/src/ui/components/EventsPane.d.ts.map +1 -0
- package/dist/src/ui/components/EventsPane.js +48 -0
- package/dist/src/ui/components/EventsPane.js.map +1 -0
- package/dist/src/ui/components/GoalsTasksPane.d.ts +18 -0
- package/dist/src/ui/components/GoalsTasksPane.d.ts.map +1 -0
- package/dist/src/ui/components/GoalsTasksPane.js +83 -0
- package/dist/src/ui/components/GoalsTasksPane.js.map +1 -0
- package/dist/src/ui/store.d.ts +74 -0
- package/dist/src/ui/store.d.ts.map +1 -0
- package/dist/src/ui/store.js +260 -0
- package/dist/src/ui/store.js.map +1 -0
- package/dist/tests/integration.test.d.ts +2 -0
- package/dist/tests/integration.test.d.ts.map +1 -0
- package/dist/tests/integration.test.js +415 -0
- package/dist/tests/integration.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/docs/AICODER.png +0 -0
- package/docs/INTERACTIVE_CLI_GUIDE.md +201 -0
- package/docs/TUI_MOCKUP.md +180 -0
- package/package.json +52 -0
- package/src/config/providers.ts +174 -0
- package/src/config/session.ts +143 -0
- package/src/context/bm25.ts +173 -0
- package/src/context/code-search.ts +188 -0
- package/src/context/context-pack.ts +133 -0
- package/src/context/dependency-mapper.ts +72 -0
- package/src/context/index.ts +8 -0
- package/src/context/symbol-extractor.ts +149 -0
- package/src/context/test-mapper.ts +77 -0
- package/src/context/types.ts +69 -0
- package/src/context/workspace-indexer.ts +249 -0
- package/src/index.ts +5 -0
- package/src/registries.ts +118 -0
- package/src/runtime/budget-manager.ts +118 -0
- package/src/runtime/interactive-runtime.ts +423 -0
- package/src/tasks-v2/analysis-tasks.ts +311 -0
- package/src/tasks-v2/developer-tasks.ts +437 -0
- package/src/tasks-v2/index.ts +3 -0
- package/src/tools-v2/edit-tools.ts +153 -0
- package/src/tools-v2/index.ts +6 -0
- package/src/tools-v2/read-tools.ts +286 -0
- package/src/tools-v2/search-tools.ts +175 -0
- package/src/tools-v2/test-tools.ts +147 -0
- package/src/tools-v2/workspace-context.ts +428 -0
- package/src/ui/App.tsx +392 -0
- package/src/ui/components/ChatPane.tsx +84 -0
- package/src/ui/components/EventsPane.tsx +81 -0
- package/src/ui/components/GoalsTasksPane.tsx +149 -0
- package/src/ui/store.ts +362 -0
- package/tests/integration.test.ts +537 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files": [
|
|
3
|
+
{
|
|
4
|
+
"path": "AICODER_IMPLEMENTATION_PLAN_PHASE2.md",
|
|
5
|
+
"size": 18716,
|
|
6
|
+
"mtime": 1759603792261.4373,
|
|
7
|
+
"hash": "6ef9cdcc31d53163",
|
|
8
|
+
"language": "markdown",
|
|
9
|
+
"isBinary": false
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"path": "README.md",
|
|
13
|
+
"size": 14060,
|
|
14
|
+
"mtime": 1759637776329.5461,
|
|
15
|
+
"hash": "47752f66baa4f0d0",
|
|
16
|
+
"language": "markdown",
|
|
17
|
+
"isBinary": false
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "bin/interactive.tsx",
|
|
21
|
+
"size": 7431,
|
|
22
|
+
"mtime": 1759675022235.8152,
|
|
23
|
+
"hash": "0eb076b0674a19f9",
|
|
24
|
+
"language": "typescript",
|
|
25
|
+
"isBinary": false
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"path": "docs/INTERACTIVE_CLI_GUIDE.md",
|
|
29
|
+
"size": 6131,
|
|
30
|
+
"mtime": 1759637776390.5461,
|
|
31
|
+
"hash": "ec42e6903ab8eeca",
|
|
32
|
+
"language": "markdown",
|
|
33
|
+
"isBinary": false
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "docs/TUI_MOCKUP.md",
|
|
37
|
+
"size": 7507,
|
|
38
|
+
"mtime": 1759603792261.4373,
|
|
39
|
+
"hash": "38ad6692e6084146",
|
|
40
|
+
"language": "markdown",
|
|
41
|
+
"isBinary": false
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"path": "package.json",
|
|
45
|
+
"size": 1233,
|
|
46
|
+
"mtime": 1759666680237.8342,
|
|
47
|
+
"hash": "abd47fad1f287a41",
|
|
48
|
+
"language": "json",
|
|
49
|
+
"isBinary": false
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"path": "src/config/providers.ts",
|
|
53
|
+
"size": 4476,
|
|
54
|
+
"mtime": 1759603792262.4373,
|
|
55
|
+
"hash": "a130fd54254f6d77",
|
|
56
|
+
"language": "typescript",
|
|
57
|
+
"isBinary": false
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"path": "src/config/session.ts",
|
|
61
|
+
"size": 3573,
|
|
62
|
+
"mtime": 1759637776233.5461,
|
|
63
|
+
"hash": "28bec64e3a2ddac8",
|
|
64
|
+
"language": "typescript",
|
|
65
|
+
"isBinary": false
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"path": "src/context/bm25.ts",
|
|
69
|
+
"size": 4143,
|
|
70
|
+
"mtime": 1759541675454.076,
|
|
71
|
+
"hash": "27bef2bf51671fae",
|
|
72
|
+
"language": "typescript",
|
|
73
|
+
"isBinary": false
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"path": "src/context/code-search.ts",
|
|
77
|
+
"size": 5198,
|
|
78
|
+
"mtime": 1759541675454.076,
|
|
79
|
+
"hash": "2768c2b277cb0138",
|
|
80
|
+
"language": "typescript",
|
|
81
|
+
"isBinary": false
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"path": "src/context/context-pack.ts",
|
|
85
|
+
"size": 3576,
|
|
86
|
+
"mtime": 1759603792262.4373,
|
|
87
|
+
"hash": "7d8ebbaa1f43b8c4",
|
|
88
|
+
"language": "typescript",
|
|
89
|
+
"isBinary": false
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"path": "src/context/dependency-mapper.ts",
|
|
93
|
+
"size": 2042,
|
|
94
|
+
"mtime": 1759541675454.076,
|
|
95
|
+
"hash": "5604493951e7b27d",
|
|
96
|
+
"language": "typescript",
|
|
97
|
+
"isBinary": false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"path": "src/context/index.ts",
|
|
101
|
+
"size": 307,
|
|
102
|
+
"mtime": 1759541675454.076,
|
|
103
|
+
"hash": "9fa26a214a14125b",
|
|
104
|
+
"language": "typescript",
|
|
105
|
+
"isBinary": false
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"path": "src/context/symbol-extractor.ts",
|
|
109
|
+
"size": 4017,
|
|
110
|
+
"mtime": 1759541675454.076,
|
|
111
|
+
"hash": "b1638520706dfa58",
|
|
112
|
+
"language": "typescript",
|
|
113
|
+
"isBinary": false
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"path": "src/context/test-mapper.ts",
|
|
117
|
+
"size": 2073,
|
|
118
|
+
"mtime": 1759541675454.076,
|
|
119
|
+
"hash": "b6387aebb5252a9a",
|
|
120
|
+
"language": "typescript",
|
|
121
|
+
"isBinary": false
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"path": "src/context/types.ts",
|
|
125
|
+
"size": 1282,
|
|
126
|
+
"mtime": 1759541675454.076,
|
|
127
|
+
"hash": "5b9e8899a2cd1090",
|
|
128
|
+
"language": "typescript",
|
|
129
|
+
"isBinary": false
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"path": "src/context/workspace-indexer.ts",
|
|
133
|
+
"size": 6486,
|
|
134
|
+
"mtime": 1759541675455.076,
|
|
135
|
+
"hash": "f740c067414f490e",
|
|
136
|
+
"language": "typescript",
|
|
137
|
+
"isBinary": false
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"path": "src/index.ts",
|
|
141
|
+
"size": 177,
|
|
142
|
+
"mtime": 1759675029856.7407,
|
|
143
|
+
"hash": "c9383fbb5cdbee7c",
|
|
144
|
+
"language": "typescript",
|
|
145
|
+
"isBinary": false
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"path": "src/registries.ts",
|
|
149
|
+
"size": 2867,
|
|
150
|
+
"mtime": 1759675032536.7148,
|
|
151
|
+
"hash": "2e3e98191189bdd3",
|
|
152
|
+
"language": "typescript",
|
|
153
|
+
"isBinary": false
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"path": "src/runtime/budget-manager.ts",
|
|
157
|
+
"size": 3093,
|
|
158
|
+
"mtime": 1759603792262.4373,
|
|
159
|
+
"hash": "145e458a3a61759b",
|
|
160
|
+
"language": "typescript",
|
|
161
|
+
"isBinary": false
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"path": "src/runtime/interactive-runtime.ts",
|
|
165
|
+
"size": 13855,
|
|
166
|
+
"mtime": 1759675035975.682,
|
|
167
|
+
"hash": "2d4e2837c25a8e27",
|
|
168
|
+
"language": "typescript",
|
|
169
|
+
"isBinary": false
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"path": "src/tasks-v2/analysis-tasks.ts",
|
|
173
|
+
"size": 9409,
|
|
174
|
+
"mtime": 1759637776235.5461,
|
|
175
|
+
"hash": "2b2bbc52c0c3a236",
|
|
176
|
+
"language": "typescript",
|
|
177
|
+
"isBinary": false
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"path": "src/tasks-v2/developer-tasks.ts",
|
|
181
|
+
"size": 12912,
|
|
182
|
+
"mtime": 1759637776329.5461,
|
|
183
|
+
"hash": "a31a8fc11c148cea",
|
|
184
|
+
"language": "typescript",
|
|
185
|
+
"isBinary": false
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"path": "src/tasks-v2/index.ts",
|
|
189
|
+
"size": 103,
|
|
190
|
+
"mtime": 1759541675455.076,
|
|
191
|
+
"hash": "ef4ad8481b092620",
|
|
192
|
+
"language": "typescript",
|
|
193
|
+
"isBinary": false
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"path": "src/tools-v2/edit-tools.ts",
|
|
197
|
+
"size": 4106,
|
|
198
|
+
"mtime": 1759637776234.5461,
|
|
199
|
+
"hash": "f769ed7c81c27493",
|
|
200
|
+
"language": "typescript",
|
|
201
|
+
"isBinary": false
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"path": "src/tools-v2/index.ts",
|
|
205
|
+
"size": 211,
|
|
206
|
+
"mtime": 1759658928836.6003,
|
|
207
|
+
"hash": "041d702b6b445d57",
|
|
208
|
+
"language": "typescript",
|
|
209
|
+
"isBinary": false
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"path": "src/tools-v2/read-tools.ts",
|
|
213
|
+
"size": 8238,
|
|
214
|
+
"mtime": 1759637776234.5461,
|
|
215
|
+
"hash": "013da8080e1b5b43",
|
|
216
|
+
"language": "typescript",
|
|
217
|
+
"isBinary": false
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"path": "src/tools-v2/search-tools.ts",
|
|
221
|
+
"size": 5122,
|
|
222
|
+
"mtime": 1759637776235.5461,
|
|
223
|
+
"hash": "0528afc832276591",
|
|
224
|
+
"language": "typescript",
|
|
225
|
+
"isBinary": false
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"path": "src/tools-v2/test-tools.ts",
|
|
229
|
+
"size": 3731,
|
|
230
|
+
"mtime": 1759637776235.5461,
|
|
231
|
+
"hash": "46602512afea3a7b",
|
|
232
|
+
"language": "typescript",
|
|
233
|
+
"isBinary": false
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"path": "src/tools-v2/workspace-context.ts",
|
|
237
|
+
"size": 12146,
|
|
238
|
+
"mtime": 1759658928835.6003,
|
|
239
|
+
"hash": "b63587966ddfc291",
|
|
240
|
+
"language": "typescript",
|
|
241
|
+
"isBinary": false
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"path": "src/ui/App.tsx",
|
|
245
|
+
"size": 12114,
|
|
246
|
+
"mtime": 1759662956211.5518,
|
|
247
|
+
"hash": "db5e5bf8e6ddd74b",
|
|
248
|
+
"language": "typescript",
|
|
249
|
+
"isBinary": false
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"path": "src/ui/components/ChatPane.tsx",
|
|
253
|
+
"size": 2130,
|
|
254
|
+
"mtime": 1759603792263.4373,
|
|
255
|
+
"hash": "5ceec4f0165b5239",
|
|
256
|
+
"language": "typescript",
|
|
257
|
+
"isBinary": false
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"path": "src/ui/components/EventsPane.tsx",
|
|
261
|
+
"size": 2276,
|
|
262
|
+
"mtime": 1759603792263.4373,
|
|
263
|
+
"hash": "27f7d43e13668363",
|
|
264
|
+
"language": "typescript",
|
|
265
|
+
"isBinary": false
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"path": "src/ui/components/GoalsTasksPane.tsx",
|
|
269
|
+
"size": 3927,
|
|
270
|
+
"mtime": 1759662956211.5518,
|
|
271
|
+
"hash": "18ed54b30b1ccc23",
|
|
272
|
+
"language": "typescript",
|
|
273
|
+
"isBinary": false
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"path": "src/ui/store.ts",
|
|
277
|
+
"size": 9950,
|
|
278
|
+
"mtime": 1759649146789.703,
|
|
279
|
+
"hash": "c022f1896e026016",
|
|
280
|
+
"language": "typescript",
|
|
281
|
+
"isBinary": false
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"path": "tests/integration.test.ts",
|
|
285
|
+
"size": 14592,
|
|
286
|
+
"mtime": 1759675039885.6448,
|
|
287
|
+
"hash": "98673aca7b0a9760",
|
|
288
|
+
"language": "typescript",
|
|
289
|
+
"isBinary": false
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"path": "tsconfig.json",
|
|
293
|
+
"size": 572,
|
|
294
|
+
"mtime": 1759666680237.8342,
|
|
295
|
+
"hash": "feaba7f01be6495d",
|
|
296
|
+
"language": "json",
|
|
297
|
+
"isBinary": false
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
"totalFiles": 37,
|
|
301
|
+
"totalSize": 213782,
|
|
302
|
+
"indexedAt": "2025-10-06T06:29:58.338Z",
|
|
303
|
+
"rootPath": "/mnt/backup1/home/manna/workspace/ml/ddse/ddse-composer/framework/node/packages/acm-aicoder"
|
|
304
|
+
}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# ACM AI Coder — Phase 2 Implementation Plan
|
|
2
|
+
|
|
3
|
+
**Status:** Draft for engineering review
|
|
4
|
+
**Date:** 2025-10-04
|
|
5
|
+
**Owners:** AI Coder Squad (CLI + Runtime), ACM Runtime Team, Tooling Infrastructure
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Objectives
|
|
10
|
+
|
|
11
|
+
Phase 2 evolves `@ddse/acm-aicoder` from the current Phase 1 showcase into an always-interactive, production-grade developer companion that runs entirely inside a full-screen terminal UI powered by the ACM v0.5 runtime. The primary objectives are:
|
|
12
|
+
|
|
13
|
+
1. **Interactive-only experience:** Launch exclusively in a full-screen TUI with a three-column layout (Chat ▸ Goal/Tasks ▸ Event Stream). No alternate modes.
|
|
14
|
+
2. **Environment provisioning at launch:** Require `--provider`, `--model`, and `--workspace` CLI parameters (with optional `--base-url`) and persist them in session metadata.
|
|
15
|
+
3. **Copilot-style streaming reasoning:** Surface planner and nucleus LLM thoughts as streaming messages in the Chat column with role-aware formatting.
|
|
16
|
+
4. **Adaptive ACM orchestration:** Enrich tools and tasks with nucleus-driven context building, retries, and structured tool-call telemetry.
|
|
17
|
+
5. **Budget governance:** Enforce live budget checks based on LLM metadata (token limits, price tables) before each inference and surface spend telemetry in the UI.
|
|
18
|
+
6. **Context lifecycle hygiene:** Reset internal state, caches, and context packets after each goal completes while preserving replay bundles for audit.
|
|
19
|
+
7. **Developer onboarding:** Document how Phase 2 uses ACM framework primitives, including instructions for extending tools, tasks, and planner behavior.
|
|
20
|
+
8. **Strict ACM alignment:** Implement every capability by composing existing ACM planner, runtime, nucleus, policy, and replay components—no bespoke substitutes.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. Scope & Non-Goals
|
|
25
|
+
|
|
26
|
+
### In Scope
|
|
27
|
+
|
|
28
|
+
- Replacement of current CLI entry point with interactive-only TUI.
|
|
29
|
+
- Integration of structured planner/nucleus event streams into the UI.
|
|
30
|
+
- Budget enforcement layer referencing provider metadata (OpenAI, Anthropic, Azure, Ollama, etc.).
|
|
31
|
+
- Memory/context lifecycle management across goals and sessions.
|
|
32
|
+
- Documentation and examples describing how ACM runtime components power the experience.
|
|
33
|
+
|
|
34
|
+
### Out of Scope
|
|
35
|
+
|
|
36
|
+
- Building new external MCP adapters beyond what Phase 1 ships (reuse but harden existing toolset).
|
|
37
|
+
- Desktop GUI clients (focus on terminal).
|
|
38
|
+
- Multi-user collaboration inside the same session (single-user terminal only).
|
|
39
|
+
- Expanding replay bundle format beyond Phase 4 requirements (reuse ledger exports).
|
|
40
|
+
- Re-implementing planner, runtime, budget, or replay primitives outside the ACM framework surfaces.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 3. Target Architecture Overview
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
48
|
+
│ Full-Screen Terminal │
|
|
49
|
+
│ ┌───────────────┐ ┌───────────────────────────────┐ ┌─────────────────────┐ │
|
|
50
|
+
│ │ Chat Pane │ │ Goal / Tasks / Progress │ │ Event Stream │ │
|
|
51
|
+
│ │ (planner & │ │ (Plan state, TODOs, budget) │ │ (ledger, tool calls │ │
|
|
52
|
+
│ │ nucleus roll) │ │ │ │ retries, context) │ │
|
|
53
|
+
│ └─────▲─────────┘ └────────────┬──────────────────┘ └──────────▲──────────┘ │
|
|
54
|
+
│ │ │ │ │
|
|
55
|
+
└───────┼────────────────────────┼───────────────────────────────┼────────────┘
|
|
56
|
+
│ Store events │ │
|
|
57
|
+
▼ ▼ ▼
|
|
58
|
+
┌──────────────┐ ┌────────────────────┐ ┌─────────────────────┐
|
|
59
|
+
│ Chat Stream │◄──────┤ Goal/Task Tracker │◄───────┤ Event Bus / Ledger │
|
|
60
|
+
└─────▲────────┘ └────────────────────┘ └───────▲────────────┘
|
|
61
|
+
│ ACM Runtime Signals
|
|
62
|
+
│ ┌─────────────────────────────────────────────────────┐
|
|
63
|
+
└────┤ ACM Planner + Nucleus + Runtime (Phase 4 surfaces) │
|
|
64
|
+
└─────────────────────────────────────────────────────┘
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Key integrations:
|
|
68
|
+
|
|
69
|
+
- **ACM Planner:** Emits structured tool-call events streamed into Chat + Tasks panes.
|
|
70
|
+
- **Nucleus:** Provides adaptive context scope, retries, and reasoning transcripts.
|
|
71
|
+
- **Runtime Ledger:** Drives the Event Stream column via live subscriptions.
|
|
72
|
+
- **Budget Controller:** Wraps planner/nucleus LLM calls to check spend limits and annotate events.
|
|
73
|
+
- **ACM runtime primitives only:** All orchestration layers call into existing ACM planner, runtime, nucleus, policy, and replay modules—never custom substitutes.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 4. Workstreams
|
|
78
|
+
|
|
79
|
+
| Workstream | Lead Packages | Deliverables | Dependencies |
|
|
80
|
+
|------------|---------------|--------------|--------------|
|
|
81
|
+
| Interactive TUI Shell | `packages/acm-aicoder` (bin + new `src/ui`), `@ddse/acm-sdk` (stream sinks) | Full-screen layout, command handling, streaming renderer | Ink/Blessed evaluation, planner event API |
|
|
82
|
+
| Model & Engine Provisioning | `packages/acm-aicoder/bin`, `src/config` | CLI parameter validation, session metadata persistence | TUI shell |
|
|
83
|
+
| Budget Governance | `packages/acm-aicoder/src/runtime`, `@ddse/acm-runtime` hooks | Provider metadata registry, spend estimator, enforcement hooks | Model provisioning, ledger access |
|
|
84
|
+
| Adaptive Tasks & Nucleus Integration | `packages/acm-aicoder/src/tasks-v2`, `src/tools-v2`, `@ddse/acm-sdk` | Context builder hooks, retry orchestration, envelope logging | Planner/Nucleus Phase 4 surfaces |
|
|
85
|
+
| Memory Lifecycle & Cleanup | `packages/acm-aicoder/src/runtime`, `packages/acm-replay` | Context teardown routines, replay snapshot generation | Adaptive tasks, budget controller |
|
|
86
|
+
| Documentation & ACM Usage Guide | `packages/acm-aicoder/README.md`, new `AICODER_IMPLEMENTATION_PLAN_PHASE2.md` | How-to guide for developers, ACM integration walkthrough | Completion of above workstreams |
|
|
87
|
+
| Capability Map & Task Expansion | `packages/acm-aicoder/src/tasks-v2`, `src/context`, `packages/acm-planner` | Industry-leading capability catalog, task library aligned to developer workflows, planner policy updates | Adaptive tasks, context engine |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 5. Detailed Implementation Steps
|
|
92
|
+
|
|
93
|
+
### 5.1 Interactive-Only CLI & Layout
|
|
94
|
+
|
|
95
|
+
1. **Entry point integration**
|
|
96
|
+
- Replace `bin/aicoder.ts` command execution with a single `runInteractiveApp(args)` function.
|
|
97
|
+
- Validate presence of `--provider`, `--model`, and `--workspace` before bootstrapping; exit with helpful message otherwise.
|
|
98
|
+
- Initialize planner, nucleus, and runtime via ACM framework factories—no custom forks of these services.
|
|
99
|
+
2. **TUI foundation**
|
|
100
|
+
- Adopt `ink@5` with `ink-box`, `ink-divider`, and `ink-scrollbar` (or evaluate `blessed`).
|
|
101
|
+
- Create root component orchestrating three flex columns with responsive widths (40% chat, 30% goal/tasks, 30% events by default).
|
|
102
|
+
- Implement command palette at bottom (single-line input) supporting `/exit`, `/help`, `/retry`, `/set-budget`, `/context`, `/replay`.
|
|
103
|
+
3. **Streaming rendering**
|
|
104
|
+
- Leverage `useInput` to capture keystrokes.
|
|
105
|
+
- Implement incremental rendering components for streaming text (planner/nucleus tokens) and event logs.
|
|
106
|
+
|
|
107
|
+
### 5.2 Planner & Nucleus Streaming
|
|
108
|
+
|
|
109
|
+
1. **Chat channel wiring**
|
|
110
|
+
- Subscribe to planner structured tool-call events from Phase 4 (`PlannerToolCall`, `ToolCallEnvelope`).
|
|
111
|
+
- For each inference, push `PlannerThought` entries with role (`planner`, `nucleus`, `user`).
|
|
112
|
+
- Stream tokens by hooking `stream?.emit('planner', chunk)` to Chat component.
|
|
113
|
+
- Support `#path/to/file` mentions in chat; resolve against the active `--workspace` so planner/nucleus reasoning can reference multiple files inline.
|
|
114
|
+
2. **Goal/Task synchronization**
|
|
115
|
+
- Extend the plan execution flow to broadcast `TaskStart`, `TaskProgress`, `TaskEnd` updates; update central store.
|
|
116
|
+
- Display TODO checklist with statuses (Pending, Running, Succeeded, Retrying, Failed).
|
|
117
|
+
3. **Event stream**
|
|
118
|
+
- Subscribe to runtime ledger (Phase 4). Render event type badges (`NUCLEUS_INFERENCE`, `TOOL_CALL`, `CONTEXT_INTERNALIZED`, `POLICY_DECISION`, etc.) with color coding.
|
|
119
|
+
|
|
120
|
+
### 5.3 Model Provisioning & Session Metadata
|
|
121
|
+
|
|
122
|
+
1. **Config module**
|
|
123
|
+
- Add `src/config/session.ts` to normalize CLI args into a `SessionConfig` (model, engine, base URL, workspace root, budget limits, temperature, seed).
|
|
124
|
+
2. **Provider registry**
|
|
125
|
+
- Maintain `src/config/providers.ts` with metadata (token costs, max context window, concurrency limits, recommended nucleus settings).
|
|
126
|
+
3. **Persistence**
|
|
127
|
+
- Save resolved config to `.aicoder/session.json` for re-use in the same workspace (with explicit confirmation prompt on reuse).
|
|
128
|
+
|
|
129
|
+
### 5.4 Budget Governance
|
|
130
|
+
|
|
131
|
+
1. **Budget controller**
|
|
132
|
+
- Implement `BudgetManager` that calculates projected cost per request using provider metadata and message token counts.
|
|
133
|
+
- Expose `checkBudget(estimation)` hook; block call if exceeding user-defined hard limit and prompt for override.
|
|
134
|
+
- Leverage ACM policy hooks and ledger for enforcement; avoid parallel budgeting logic.
|
|
135
|
+
2. **UI integration**
|
|
136
|
+
- Show running spend, remaining budget, and per-call estimates in Goal/Tasks column.
|
|
137
|
+
- Emit budget-related events (warnings, blocks) to Event stream.
|
|
138
|
+
3. **Ledger logging**
|
|
139
|
+
- Attach spend metadata to `NUCLEUS_INFERENCE` entries for deterministic replay.
|
|
140
|
+
|
|
141
|
+
### 5.5 Adaptive Context & Retry Enhancements
|
|
142
|
+
|
|
143
|
+
1. **Context builder upgrades**
|
|
144
|
+
- Integrate `ContextBuilder` from Phase 4 to gather additional artifacts before each task execution based on nucleus preflight results.
|
|
145
|
+
- Provide interactive prompts in Chat when nucleus requests manual confirmation for expensive retrievals.
|
|
146
|
+
2. **Retry orchestration**
|
|
147
|
+
- Honor `retryPolicy` fields in `TaskSpec`; display attempt counts and next backoff time in Goal/Tasks column.
|
|
148
|
+
- Offer `/retry` command to force another attempt and `/skip` to abort.
|
|
149
|
+
3. **Tool instrumentation**
|
|
150
|
+
- Ensure every tool uses `ToolCallEnvelope` helper, recording `metadata.digest`, `duration_ms`, and error info for the Event stream column.
|
|
151
|
+
|
|
152
|
+
### 5.6 Memory Cleanup & Context Lifecycle
|
|
153
|
+
|
|
154
|
+
1. **Goal completion handler**
|
|
155
|
+
- On final `Plan` completion, flush internal context scope, clear caches (`workspace-indexer`, search results), and reset Chat/Tasks panes while retaining session summary in Event column.
|
|
156
|
+
2. **Replay bundle**
|
|
157
|
+
- Automatically persist replay bundle under `.aicoder/replays/${timestamp}` including `planner/llm-calls.jsonl` and session config.
|
|
158
|
+
3. **Resource finalization**
|
|
159
|
+
- Close file handles, stop watchers, dispose of streaming subscriptions to prevent memory leaks.
|
|
160
|
+
|
|
161
|
+
### 5.7 Documentation & ACM Usage Guide
|
|
162
|
+
|
|
163
|
+
1. **Developer-facing instructions**
|
|
164
|
+
- Produce `docs/interactive-cli.md` detailing architecture, command list, and ACM relationships.
|
|
165
|
+
- Update `README.md` with Phase 2 quick start, including provider configuration and budget flags.
|
|
166
|
+
2. **Extensibility chapter**
|
|
167
|
+
- Document how to add new tools/tasks using ACM SDK (with sample code snippets referencing `Tool` and `Task` subclasses).
|
|
168
|
+
3. **Plan usage**
|
|
169
|
+
- Include in this plan an appendix with step-by-step instructions for running the interactive CLI and highlighting ACM framework touchpoints.
|
|
170
|
+
|
|
171
|
+
### 5.8 Capability Map & Task Expansion
|
|
172
|
+
|
|
173
|
+
1. **Capability catalog refresh**
|
|
174
|
+
- Audit leading AI coding assistants (GitHub Copilot, Cursor, Replit, etc.) and compile a coverage matrix spanning code understanding, refactoring, testing, debugging, security, dependency management, release engineering, and compliance.
|
|
175
|
+
- Map each capability to existing ACM tasks/tools and identify gaps; create new Task/Tool combinations within `src/tasks-v2` and `src/tools-v2` to close each gap.
|
|
176
|
+
- Define capability metadata (domain, preconditions, verification strategy, policy considerations) for planner consumption.
|
|
177
|
+
2. **Planner policy updates**
|
|
178
|
+
- Extend capability map registration so planner can prioritize best-fit tasks per goal; incorporate policy hooks for high-risk operations (e.g., mass refactor, dependency upgrades).
|
|
179
|
+
3. **Benchmarking & validation**
|
|
180
|
+
- Create a benchmark suite of real-world developer scenarios (bug fixes, feature additions, build/test triage, security patching) and ensure AI Coder completes them with minimal user intervention.
|
|
181
|
+
- Instrument success metrics (time-to-completion, tool usage, retries) and display comparative performance to industry tools in documentation.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 6. Timeline (Indicative)
|
|
186
|
+
|
|
187
|
+
| Week | Milestone | Description |
|
|
188
|
+
|------|-----------|-------------|
|
|
189
|
+
| Week 0 | Kickoff & Design | Finalize TUI library choice, budget model requirements, and integration plan |
|
|
190
|
+
| Week 1 | TUI Shell Foundations | Implement full-screen layout, chat streaming skeleton, CLI parameter validation |
|
|
191
|
+
| Week 2 | Planner/Nucleus Streaming | Wire structured events into Chat/Tasks/Event panes; add command palette |
|
|
192
|
+
| Week 3 | Budget & Adaptive Context | Deliver BudgetManager, context builder integration, retry surfaces |
|
|
193
|
+
| Week 4 | Memory Lifecycle & Replay | Implement teardown routines, replay persistence, stability fixes |
|
|
194
|
+
| Week 5 | Documentation & Hardening | Update README/docs, add integration tests, user acceptance session |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 7. Testing & Validation Strategy
|
|
199
|
+
|
|
200
|
+
- **Unit tests**: Cover store reducers, BudgetManager calculations, context lifecycle hooks, and CLI parameter parsing.
|
|
201
|
+
- **Integration tests**: Use pseudo-terminal harness (e.g., `node-pty`) to simulate user interactions, ensuring layout renders and commands function.
|
|
202
|
+
- **Budget simulations**: Provide fixtures for different provider metadata and assert enforcement is triggered.
|
|
203
|
+
- **Memory leak checks**: Run repetitive goal execution in CI with heap snapshots to verify cleanup.
|
|
204
|
+
- **Manual QA**: Cross-provider smoke tests (OpenAI, Anthropic, local Ollama) verifying streaming output and UI responsiveness.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 8. Deployment & Rollout
|
|
209
|
+
|
|
210
|
+
1. Feature branch per workstream; merge behind `interactive_cli_phase2` feature flag toggled via CLI env var until stable.
|
|
211
|
+
2. Pre-release `0.2.0-beta` for internal testers with documentation preview.
|
|
212
|
+
3. Collect feedback, adjust ergonomics (keybindings, layout).
|
|
213
|
+
4. Final release `0.2.0` with changelog and migration notes.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 9. Using the ACM Framework in Phase 2
|
|
218
|
+
|
|
219
|
+
Phase 2 exists to showcase the ACM framework at production scale; every subsystem below is consumed directly from ACM packages with no bespoke reimplementations.
|
|
220
|
+
|
|
221
|
+
### Planner & Nucleus
|
|
222
|
+
|
|
223
|
+
- The interactive Chat pane visualizes ACM planner tool-call loops and nucleus inferences in real time.
|
|
224
|
+
- Developers can hook into `StructuredLLMPlanner` and custom `Nucleus` implementations by editing `src/runtime/planner-registry.ts` (to be added).
|
|
225
|
+
|
|
226
|
+
### Tools & Tasks
|
|
227
|
+
|
|
228
|
+
- All tools remain subclasses of `Tool<I, O>`; Phase 2 ensures they emit `ToolCallEnvelope` entries for deterministic ledger logging.
|
|
229
|
+
- Tasks extend `Task<I, O>` and leverage the new context builder to fetch relevant artifacts dynamically.
|
|
230
|
+
- Capability maps are expanded to include code understanding, automated refactoring, dependency reasoning, end-to-end test scaffolding, security audits, and CI integration tasks—providing coverage beyond current industry AI coders.
|
|
231
|
+
|
|
232
|
+
### Context Packets
|
|
233
|
+
|
|
234
|
+
- Context orchestration uses Phase 4 `ContextBuilder` to produce immutable packets with provenance.
|
|
235
|
+
- Users can view current context via `/context` command, which dumps the latest packet digest and sources.
|
|
236
|
+
|
|
237
|
+
### Ledger & Replay
|
|
238
|
+
|
|
239
|
+
- Event Stream pane visualizes ledger entries; replay bundles stored automatically allow running `acm replay --bundle <path>` for postmortems.
|
|
240
|
+
|
|
241
|
+
### Policy & Budget Enforcement
|
|
242
|
+
|
|
243
|
+
- Policy hooks from ACM runtime continue to vet tool executions; BudgetManager sits alongside policy decisions to prevent overspend before inference.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## 10. Appendix — Quick Start (Planned)
|
|
248
|
+
|
|
249
|
+
1. `pnpm install`
|
|
250
|
+
2. `pnpm --filter @ddse/acm-aicoder run build`
|
|
251
|
+
3. `pnpm --filter @ddse/acm-aicoder acm-aicoder --provider vllm --model gpt-4o --base-url https://api.openai.com --workspace /path/to/project`
|
|
252
|
+
4. Interact via TUI:
|
|
253
|
+
- Left column: chat with reasoning stream
|
|
254
|
+
- Middle column: goal, tasks, budget metrics
|
|
255
|
+
- Right column: event feed (tool calls, context, ledger)
|
|
256
|
+
5. End goal ➜ session summary persisted under `.aicoder/replays/`.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## 11. Risks & Mitigations
|
|
261
|
+
|
|
262
|
+
| Risk | Impact | Mitigation |
|
|
263
|
+
|------|--------|------------|
|
|
264
|
+
| TUI performance issues on slow terminals | Medium | Offer minimal rendering mode, benchmark before release |
|
|
265
|
+
| Provider metadata drift | High | Maintain static metadata file with versioning and update CI check |
|
|
266
|
+
| Budget blocking legitimate operations | Medium | Provide override prompt with logging + policy approval |
|
|
267
|
+
| Memory leaks causing process bloat | High | Write teardown tests, monitor with heap snapshots |
|
|
268
|
+
| User confusion migrating from Phase 1 | Medium | Update README, add migration guide, provide screencast |
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 12. Acceptance Criteria
|
|
273
|
+
|
|
274
|
+
- CLI refuses to start without model/base-url/engine parameters.
|
|
275
|
+
- Full-screen TUI launches with three columns and supports streaming chat/events.
|
|
276
|
+
- Planner and nucleus reasoning appear live in Chat pane with role-specific styling.
|
|
277
|
+
- BudgetManager blocks or warns when estimated spend exceeds configured limits; UI displays running totals.
|
|
278
|
+
- Tasks leverage context builder + retry policies, visible in middle column with real-time status.
|
|
279
|
+
- Goal completion clears internal caches, resets UI panes, and writes replay bundle.
|
|
280
|
+
- Documentation explains architecture, ACM integration points, and extension pathways.
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
Prepared for internal review. Feedback welcome before implementation kickoff.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 DDSE Foundation
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|