empathy-framework 4.7.1__py3-none-any.whl → 4.9.0__py3-none-any.whl

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.
Files changed (96) hide show
  1. {empathy_framework-4.7.1.dist-info → empathy_framework-4.9.0.dist-info}/METADATA +65 -2
  2. {empathy_framework-4.7.1.dist-info → empathy_framework-4.9.0.dist-info}/RECORD +69 -59
  3. {empathy_framework-4.7.1.dist-info → empathy_framework-4.9.0.dist-info}/WHEEL +1 -1
  4. {empathy_framework-4.7.1.dist-info → empathy_framework-4.9.0.dist-info}/entry_points.txt +2 -1
  5. {empathy_framework-4.7.1.dist-info → empathy_framework-4.9.0.dist-info}/top_level.txt +0 -1
  6. empathy_os/__init__.py +2 -0
  7. empathy_os/cli/__init__.py +128 -238
  8. empathy_os/cli/__main__.py +5 -33
  9. empathy_os/cli/commands/__init__.py +1 -8
  10. empathy_os/cli/commands/help.py +331 -0
  11. empathy_os/cli/commands/info.py +140 -0
  12. empathy_os/cli/commands/inspect.py +437 -0
  13. empathy_os/cli/commands/metrics.py +92 -0
  14. empathy_os/cli/commands/orchestrate.py +184 -0
  15. empathy_os/cli/commands/patterns.py +207 -0
  16. empathy_os/cli/commands/provider.py +93 -81
  17. empathy_os/cli/commands/setup.py +96 -0
  18. empathy_os/cli/commands/status.py +235 -0
  19. empathy_os/cli/commands/sync.py +166 -0
  20. empathy_os/cli/commands/tier.py +121 -0
  21. empathy_os/cli/commands/workflow.py +574 -0
  22. empathy_os/cli/parsers/__init__.py +62 -0
  23. empathy_os/cli/parsers/help.py +41 -0
  24. empathy_os/cli/parsers/info.py +26 -0
  25. empathy_os/cli/parsers/inspect.py +66 -0
  26. empathy_os/cli/parsers/metrics.py +42 -0
  27. empathy_os/cli/parsers/orchestrate.py +61 -0
  28. empathy_os/cli/parsers/patterns.py +54 -0
  29. empathy_os/cli/parsers/provider.py +40 -0
  30. empathy_os/cli/parsers/setup.py +42 -0
  31. empathy_os/cli/parsers/status.py +47 -0
  32. empathy_os/cli/parsers/sync.py +31 -0
  33. empathy_os/cli/parsers/tier.py +33 -0
  34. empathy_os/cli/parsers/workflow.py +77 -0
  35. empathy_os/cli/utils/__init__.py +1 -0
  36. empathy_os/cli/utils/data.py +242 -0
  37. empathy_os/cli/utils/helpers.py +68 -0
  38. empathy_os/{cli.py → cli_legacy.py} +0 -26
  39. empathy_os/cli_minimal.py +662 -0
  40. empathy_os/cli_router.py +384 -0
  41. empathy_os/cli_unified.py +13 -2
  42. empathy_os/memory/short_term.py +146 -414
  43. empathy_os/memory/types.py +441 -0
  44. empathy_os/memory/unified.py +61 -48
  45. empathy_os/models/fallback.py +1 -1
  46. empathy_os/models/provider_config.py +59 -344
  47. empathy_os/models/registry.py +27 -176
  48. empathy_os/monitoring/alerts.py +14 -20
  49. empathy_os/monitoring/alerts_cli.py +24 -7
  50. empathy_os/project_index/__init__.py +2 -0
  51. empathy_os/project_index/index.py +210 -5
  52. empathy_os/project_index/scanner.py +48 -16
  53. empathy_os/project_index/scanner_parallel.py +291 -0
  54. empathy_os/workflow_commands.py +9 -9
  55. empathy_os/workflows/__init__.py +31 -2
  56. empathy_os/workflows/base.py +295 -317
  57. empathy_os/workflows/bug_predict.py +10 -2
  58. empathy_os/workflows/builder.py +273 -0
  59. empathy_os/workflows/caching.py +253 -0
  60. empathy_os/workflows/code_review_pipeline.py +1 -0
  61. empathy_os/workflows/history.py +512 -0
  62. empathy_os/workflows/perf_audit.py +129 -23
  63. empathy_os/workflows/routing.py +163 -0
  64. empathy_os/workflows/secure_release.py +1 -0
  65. empathy_os/workflows/security_audit.py +1 -0
  66. empathy_os/workflows/security_audit_phase3.py +352 -0
  67. empathy_os/workflows/telemetry_mixin.py +269 -0
  68. empathy_os/workflows/test_gen.py +7 -7
  69. empathy_os/dashboard/__init__.py +0 -15
  70. empathy_os/dashboard/server.py +0 -941
  71. empathy_os/vscode_bridge 2.py +0 -173
  72. empathy_os/workflows/progressive/README 2.md +0 -454
  73. empathy_os/workflows/progressive/__init__ 2.py +0 -92
  74. empathy_os/workflows/progressive/cli 2.py +0 -242
  75. empathy_os/workflows/progressive/core 2.py +0 -488
  76. empathy_os/workflows/progressive/orchestrator 2.py +0 -701
  77. empathy_os/workflows/progressive/reports 2.py +0 -528
  78. empathy_os/workflows/progressive/telemetry 2.py +0 -280
  79. empathy_os/workflows/progressive/test_gen 2.py +0 -514
  80. empathy_os/workflows/progressive/workflow 2.py +0 -628
  81. patterns/README.md +0 -119
  82. patterns/__init__.py +0 -95
  83. patterns/behavior.py +0 -298
  84. patterns/code_review_memory.json +0 -441
  85. patterns/core.py +0 -97
  86. patterns/debugging.json +0 -3763
  87. patterns/empathy.py +0 -268
  88. patterns/health_check_memory.json +0 -505
  89. patterns/input.py +0 -161
  90. patterns/memory_graph.json +0 -8
  91. patterns/refactoring_memory.json +0 -1113
  92. patterns/registry.py +0 -663
  93. patterns/security_memory.json +0 -8
  94. patterns/structural.py +0 -415
  95. patterns/validation.py +0 -194
  96. {empathy_framework-4.7.1.dist-info → empathy_framework-4.9.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,505 +0,0 @@
1
- {
2
- "version": "1.0",
3
- "updated_at": "2026-01-10T16:18:10.863233",
4
- "node_count": 31,
5
- "edge_count": 0,
6
- "nodes": [
7
- {
8
- "id": "health_check_20260109005805_c21baf66ce74",
9
- "type": "pattern",
10
- "name": "check:.",
11
- "description": "Health score: 100.0/100",
12
- "source_wizard": "health_check_crew",
13
- "source_file": "",
14
- "source_line": null,
15
- "severity": "",
16
- "confidence": 1.0,
17
- "metadata": {},
18
- "tags": [],
19
- "created_at": "2026-01-09T00:58:05.055914",
20
- "updated_at": "2026-01-09T00:58:05.055917",
21
- "status": "open"
22
- },
23
- {
24
- "id": "health_check_20260109010106_c21baf66ce74",
25
- "type": "pattern",
26
- "name": "check:.",
27
- "description": "Health score: 100.0/100",
28
- "source_wizard": "health_check_crew",
29
- "source_file": "",
30
- "source_line": null,
31
- "severity": "",
32
- "confidence": 1.0,
33
- "metadata": {},
34
- "tags": [],
35
- "created_at": "2026-01-09T01:01:06.999487",
36
- "updated_at": "2026-01-09T01:01:06.999489",
37
- "status": "open"
38
- },
39
- {
40
- "id": "health_check_20260109082548_a6b68eeb7ff7",
41
- "type": "pattern",
42
- "name": "check:.",
43
- "description": "Health score: 98.0/100",
44
- "source_wizard": "health_check_crew",
45
- "source_file": "",
46
- "source_line": null,
47
- "severity": "",
48
- "confidence": 1.0,
49
- "metadata": {},
50
- "tags": [],
51
- "created_at": "2026-01-09T08:25:48.637642",
52
- "updated_at": "2026-01-09T08:25:48.637646",
53
- "status": "open"
54
- },
55
- {
56
- "id": "health_check_20260109082711_a6b68eeb7ff7",
57
- "type": "pattern",
58
- "name": "check:.",
59
- "description": "Health score: 98.0/100",
60
- "source_wizard": "health_check_crew",
61
- "source_file": "",
62
- "source_line": null,
63
- "severity": "",
64
- "confidence": 1.0,
65
- "metadata": {},
66
- "tags": [],
67
- "created_at": "2026-01-09T08:27:11.454694",
68
- "updated_at": "2026-01-09T08:27:11.454696",
69
- "status": "open"
70
- },
71
- {
72
- "id": "health_check_20260109083528_a6b68eeb7ff7",
73
- "type": "pattern",
74
- "name": "check:.",
75
- "description": "Health score: 98.0/100",
76
- "source_wizard": "health_check_crew",
77
- "source_file": "",
78
- "source_line": null,
79
- "severity": "",
80
- "confidence": 1.0,
81
- "metadata": {},
82
- "tags": [],
83
- "created_at": "2026-01-09T08:35:28.775710",
84
- "updated_at": "2026-01-09T08:35:28.775711",
85
- "status": "open"
86
- },
87
- {
88
- "id": "health_check_20260109083558_a6b68eeb7ff7",
89
- "type": "pattern",
90
- "name": "check:.",
91
- "description": "Health score: 98.0/100",
92
- "source_wizard": "health_check_crew",
93
- "source_file": "",
94
- "source_line": null,
95
- "severity": "",
96
- "confidence": 1.0,
97
- "metadata": {},
98
- "tags": [],
99
- "created_at": "2026-01-09T08:35:58.617624",
100
- "updated_at": "2026-01-09T08:35:58.617626",
101
- "status": "open"
102
- },
103
- {
104
- "id": "health_check_20260109091059_a6b68eeb7ff7",
105
- "type": "pattern",
106
- "name": "check:.",
107
- "description": "Health score: 98.0/100",
108
- "source_wizard": "health_check_crew",
109
- "source_file": "",
110
- "source_line": null,
111
- "severity": "",
112
- "confidence": 1.0,
113
- "metadata": {},
114
- "tags": [],
115
- "created_at": "2026-01-09T09:10:59.958657",
116
- "updated_at": "2026-01-09T09:10:59.958659",
117
- "status": "open"
118
- },
119
- {
120
- "id": "health_check_20260109091516_a6b68eeb7ff7",
121
- "type": "pattern",
122
- "name": "check:.",
123
- "description": "Health score: 98.0/100",
124
- "source_wizard": "health_check_crew",
125
- "source_file": "",
126
- "source_line": null,
127
- "severity": "",
128
- "confidence": 1.0,
129
- "metadata": {},
130
- "tags": [],
131
- "created_at": "2026-01-09T09:15:16.957791",
132
- "updated_at": "2026-01-09T09:15:16.957792",
133
- "status": "open"
134
- },
135
- {
136
- "id": "health_check_20260109091600_a6b68eeb7ff7",
137
- "type": "pattern",
138
- "name": "check:.",
139
- "description": "Health score: 98.0/100",
140
- "source_wizard": "health_check_crew",
141
- "source_file": "",
142
- "source_line": null,
143
- "severity": "",
144
- "confidence": 1.0,
145
- "metadata": {},
146
- "tags": [],
147
- "created_at": "2026-01-09T09:16:00.963952",
148
- "updated_at": "2026-01-09T09:16:00.963953",
149
- "status": "open"
150
- },
151
- {
152
- "id": "health_check_20260109091816_a6b68eeb7ff7",
153
- "type": "pattern",
154
- "name": "check:.",
155
- "description": "Health score: 98.0/100",
156
- "source_wizard": "health_check_crew",
157
- "source_file": "",
158
- "source_line": null,
159
- "severity": "",
160
- "confidence": 1.0,
161
- "metadata": {},
162
- "tags": [],
163
- "created_at": "2026-01-09T09:18:16.294605",
164
- "updated_at": "2026-01-09T09:18:16.294607",
165
- "status": "open"
166
- },
167
- {
168
- "id": "health_check_20260109093156_a6b68eeb7ff7",
169
- "type": "pattern",
170
- "name": "check:.",
171
- "description": "Health score: 98.0/100",
172
- "source_wizard": "health_check_crew",
173
- "source_file": "",
174
- "source_line": null,
175
- "severity": "",
176
- "confidence": 1.0,
177
- "metadata": {},
178
- "tags": [],
179
- "created_at": "2026-01-09T09:31:56.135757",
180
- "updated_at": "2026-01-09T09:31:56.135759",
181
- "status": "open"
182
- },
183
- {
184
- "id": "health_check_20260109093209_a6b68eeb7ff7",
185
- "type": "pattern",
186
- "name": "check:.",
187
- "description": "Health score: 98.0/100",
188
- "source_wizard": "health_check_crew",
189
- "source_file": "",
190
- "source_line": null,
191
- "severity": "",
192
- "confidence": 1.0,
193
- "metadata": {},
194
- "tags": [],
195
- "created_at": "2026-01-09T09:32:09.534803",
196
- "updated_at": "2026-01-09T09:32:09.534805",
197
- "status": "open"
198
- },
199
- {
200
- "id": "health_check_20260109093222_a6b68eeb7ff7",
201
- "type": "pattern",
202
- "name": "check:.",
203
- "description": "Health score: 98.0/100",
204
- "source_wizard": "health_check_crew",
205
- "source_file": "",
206
- "source_line": null,
207
- "severity": "",
208
- "confidence": 1.0,
209
- "metadata": {},
210
- "tags": [],
211
- "created_at": "2026-01-09T09:32:22.966130",
212
- "updated_at": "2026-01-09T09:32:22.966136",
213
- "status": "open"
214
- },
215
- {
216
- "id": "health_check_20260109093356_a6b68eeb7ff7",
217
- "type": "pattern",
218
- "name": "check:.",
219
- "description": "Health score: 98.0/100",
220
- "source_wizard": "health_check_crew",
221
- "source_file": "",
222
- "source_line": null,
223
- "severity": "",
224
- "confidence": 1.0,
225
- "metadata": {},
226
- "tags": [],
227
- "created_at": "2026-01-09T09:33:56.096542",
228
- "updated_at": "2026-01-09T09:33:56.096543",
229
- "status": "open"
230
- },
231
- {
232
- "id": "health_check_20260109093851_a6b68eeb7ff7",
233
- "type": "pattern",
234
- "name": "check:.",
235
- "description": "Health score: 98.0/100",
236
- "source_wizard": "health_check_crew",
237
- "source_file": "",
238
- "source_line": null,
239
- "severity": "",
240
- "confidence": 1.0,
241
- "metadata": {},
242
- "tags": [],
243
- "created_at": "2026-01-09T09:38:51.866226",
244
- "updated_at": "2026-01-09T09:38:51.866227",
245
- "status": "open"
246
- },
247
- {
248
- "id": "health_check_20260109094159_a6b68eeb7ff7",
249
- "type": "pattern",
250
- "name": "check:.",
251
- "description": "Health score: 98.0/100",
252
- "source_wizard": "health_check_crew",
253
- "source_file": "",
254
- "source_line": null,
255
- "severity": "",
256
- "confidence": 1.0,
257
- "metadata": {},
258
- "tags": [],
259
- "created_at": "2026-01-09T09:41:59.470457",
260
- "updated_at": "2026-01-09T09:41:59.470459",
261
- "status": "open"
262
- },
263
- {
264
- "id": "health_check_20260109095427_a6b68eeb7ff7",
265
- "type": "pattern",
266
- "name": "check:.",
267
- "description": "Health score: 98.0/100",
268
- "source_wizard": "health_check_crew",
269
- "source_file": "",
270
- "source_line": null,
271
- "severity": "",
272
- "confidence": 1.0,
273
- "metadata": {},
274
- "tags": [],
275
- "created_at": "2026-01-09T09:54:27.924237",
276
- "updated_at": "2026-01-09T09:54:27.924241",
277
- "status": "open"
278
- },
279
- {
280
- "id": "health_check_20260109110455_c21baf66ce74",
281
- "type": "pattern",
282
- "name": "check:.",
283
- "description": "Health score: 100.0/100",
284
- "source_wizard": "health_check_crew",
285
- "source_file": "",
286
- "source_line": null,
287
- "severity": "",
288
- "confidence": 1.0,
289
- "metadata": {},
290
- "tags": [],
291
- "created_at": "2026-01-09T11:04:55.413996",
292
- "updated_at": "2026-01-09T11:04:55.414001",
293
- "status": "open"
294
- },
295
- {
296
- "id": "health_check_20260109231252_f56c24f708d0",
297
- "type": "pattern",
298
- "name": "check:./Empathy-framework",
299
- "description": "Health score: 83.0/100",
300
- "source_wizard": "health_check_crew",
301
- "source_file": "",
302
- "source_line": null,
303
- "severity": "",
304
- "confidence": 1.0,
305
- "metadata": {},
306
- "tags": [],
307
- "created_at": "2026-01-09T23:12:52.912623",
308
- "updated_at": "2026-01-09T23:12:52.912624",
309
- "status": "open"
310
- },
311
- {
312
- "id": "health_check_20260110053012_c21baf66ce74",
313
- "type": "pattern",
314
- "name": "check:.",
315
- "description": "Health score: 100.0/100",
316
- "source_wizard": "health_check_crew",
317
- "source_file": "",
318
- "source_line": null,
319
- "severity": "",
320
- "confidence": 1.0,
321
- "metadata": {},
322
- "tags": [],
323
- "created_at": "2026-01-10T05:30:12.808444",
324
- "updated_at": "2026-01-10T05:30:12.808447",
325
- "status": "open"
326
- },
327
- {
328
- "id": "health_check_20260110061503_c21baf66ce74",
329
- "type": "pattern",
330
- "name": "check:.",
331
- "description": "Health score: 100.0/100",
332
- "source_wizard": "health_check_crew",
333
- "source_file": "",
334
- "source_line": null,
335
- "severity": "",
336
- "confidence": 1.0,
337
- "metadata": {},
338
- "tags": [],
339
- "created_at": "2026-01-10T06:15:03.907918",
340
- "updated_at": "2026-01-10T06:15:03.907921",
341
- "status": "open"
342
- },
343
- {
344
- "id": "health_check_20260110065627_c21baf66ce74",
345
- "type": "pattern",
346
- "name": "check:.",
347
- "description": "Health score: 100.0/100",
348
- "source_wizard": "health_check_crew",
349
- "source_file": "",
350
- "source_line": null,
351
- "severity": "",
352
- "confidence": 1.0,
353
- "metadata": {},
354
- "tags": [],
355
- "created_at": "2026-01-10T06:56:27.034106",
356
- "updated_at": "2026-01-10T06:56:27.034108",
357
- "status": "open"
358
- },
359
- {
360
- "id": "health_check_20260110141920_c21baf66ce74",
361
- "type": "pattern",
362
- "name": "check:.",
363
- "description": "Health score: 100.0/100",
364
- "source_wizard": "health_check_crew",
365
- "source_file": "",
366
- "source_line": null,
367
- "severity": "",
368
- "confidence": 1.0,
369
- "metadata": {},
370
- "tags": [],
371
- "created_at": "2026-01-10T14:19:20.374673",
372
- "updated_at": "2026-01-10T14:19:20.374675",
373
- "status": "open"
374
- },
375
- {
376
- "id": "health_check_20260110142034_c21baf66ce74",
377
- "type": "pattern",
378
- "name": "check:.",
379
- "description": "Health score: 100.0/100",
380
- "source_wizard": "health_check_crew",
381
- "source_file": "",
382
- "source_line": null,
383
- "severity": "",
384
- "confidence": 1.0,
385
- "metadata": {},
386
- "tags": [],
387
- "created_at": "2026-01-10T14:20:34.057576",
388
- "updated_at": "2026-01-10T14:20:34.057577",
389
- "status": "open"
390
- },
391
- {
392
- "id": "health_check_20260110142817_c21baf66ce74",
393
- "type": "pattern",
394
- "name": "check:.",
395
- "description": "Health score: 100.0/100",
396
- "source_wizard": "health_check_crew",
397
- "source_file": "",
398
- "source_line": null,
399
- "severity": "",
400
- "confidence": 1.0,
401
- "metadata": {},
402
- "tags": [],
403
- "created_at": "2026-01-10T14:28:17.139586",
404
- "updated_at": "2026-01-10T14:28:17.139588",
405
- "status": "open"
406
- },
407
- {
408
- "id": "health_check_20260110144600_c21baf66ce74",
409
- "type": "pattern",
410
- "name": "check:.",
411
- "description": "Health score: 100.0/100",
412
- "source_wizard": "health_check_crew",
413
- "source_file": "",
414
- "source_line": null,
415
- "severity": "",
416
- "confidence": 1.0,
417
- "metadata": {},
418
- "tags": [],
419
- "created_at": "2026-01-10T14:46:00.673767",
420
- "updated_at": "2026-01-10T14:46:00.673769",
421
- "status": "open"
422
- },
423
- {
424
- "id": "health_check_20260110152843_c21baf66ce74",
425
- "type": "pattern",
426
- "name": "check:.",
427
- "description": "Health score: 100.0/100",
428
- "source_wizard": "health_check_crew",
429
- "source_file": "",
430
- "source_line": null,
431
- "severity": "",
432
- "confidence": 1.0,
433
- "metadata": {},
434
- "tags": [],
435
- "created_at": "2026-01-10T15:28:43.883055",
436
- "updated_at": "2026-01-10T15:28:43.883058",
437
- "status": "open"
438
- },
439
- {
440
- "id": "health_check_20260110155732_c21baf66ce74",
441
- "type": "pattern",
442
- "name": "check:.",
443
- "description": "Health score: 100.0/100",
444
- "source_wizard": "health_check_crew",
445
- "source_file": "",
446
- "source_line": null,
447
- "severity": "",
448
- "confidence": 1.0,
449
- "metadata": {},
450
- "tags": [],
451
- "created_at": "2026-01-10T15:57:32.497259",
452
- "updated_at": "2026-01-10T15:57:32.497262",
453
- "status": "open"
454
- },
455
- {
456
- "id": "health_check_20260110160351_c21baf66ce74",
457
- "type": "pattern",
458
- "name": "check:.",
459
- "description": "Health score: 100.0/100",
460
- "source_wizard": "health_check_crew",
461
- "source_file": "",
462
- "source_line": null,
463
- "severity": "",
464
- "confidence": 1.0,
465
- "metadata": {},
466
- "tags": [],
467
- "created_at": "2026-01-10T16:03:51.382282",
468
- "updated_at": "2026-01-10T16:03:51.382284",
469
- "status": "open"
470
- },
471
- {
472
- "id": "health_check_20260110161503_c21baf66ce74",
473
- "type": "pattern",
474
- "name": "check:.",
475
- "description": "Health score: 100.0/100",
476
- "source_wizard": "health_check_crew",
477
- "source_file": "",
478
- "source_line": null,
479
- "severity": "",
480
- "confidence": 1.0,
481
- "metadata": {},
482
- "tags": [],
483
- "created_at": "2026-01-10T16:15:03.105556",
484
- "updated_at": "2026-01-10T16:15:03.105559",
485
- "status": "open"
486
- },
487
- {
488
- "id": "health_check_20260110161810_7e8bafed1b4d",
489
- "type": "pattern",
490
- "name": "check:.",
491
- "description": "Health score: 80.0/100",
492
- "source_wizard": "health_check_crew",
493
- "source_file": "",
494
- "source_line": null,
495
- "severity": "",
496
- "confidence": 1.0,
497
- "metadata": {},
498
- "tags": [],
499
- "created_at": "2026-01-10T16:18:10.862125",
500
- "updated_at": "2026-01-10T16:18:10.862126",
501
- "status": "open"
502
- }
503
- ],
504
- "edges": []
505
- }
patterns/input.py DELETED
@@ -1,161 +0,0 @@
1
- """Input patterns for wizard data collection.
2
-
3
- Input patterns define how wizards collect data from users:
4
- - Structured Fields: Predefined fields with types
5
- - Code Analysis: Code, file path, and language inputs
6
- - Context-Based: Flexible dictionary-based input
7
-
8
- Copyright 2025 Smart AI Memory, LLC
9
- Licensed under Fair Source 0.9
10
- """
11
-
12
- from typing import Any, Literal
13
-
14
- from pydantic import BaseModel, Field
15
-
16
- from .core import BasePattern, CodeGeneratorMixin, PatternCategory
17
-
18
-
19
- class FieldDefinition(BaseModel):
20
- """Definition of a structured input field."""
21
-
22
- name: str = Field(..., description="Field name")
23
- field_type: str = Field(
24
- default="str",
25
- description="Python type (str, int, float, bool, list, dict)",
26
- )
27
- required: bool = Field(default=True, description="Whether field is required")
28
- description: str = Field(default="", description="Field description")
29
- default_value: Any = Field(default=None, description="Default value if not required")
30
-
31
-
32
- class StructuredFieldsPattern(BasePattern, CodeGeneratorMixin):
33
- """Structured field input pattern.
34
-
35
- **Description:**
36
- Wizards that collect data through predefined, typed fields. Each step
37
- has a set of fields with validation rules.
38
-
39
- **Usage:** 16 wizards (SOAP Note, Care Plan, Admission Assessment)
40
- **Reusability:** 0.9
41
-
42
- **Key Features:**
43
- - Type-safe field definitions
44
- - Per-step field organization
45
- - Automatic validation
46
- - Pydantic request models
47
-
48
- **Example:**
49
- Step 1: chief_complaint, history_present_illness, pain_description
50
- Step 2: vital_signs, physical_exam_findings, lab_results
51
- """
52
-
53
- category: Literal[PatternCategory.INPUT] = PatternCategory.INPUT
54
- fields_by_step: dict[int, list[FieldDefinition]] = Field(
55
- ..., description="Fields organized by step number"
56
- )
57
-
58
- def generate_code(self) -> str:
59
- """Generate Pydantic request models for each step."""
60
- models = []
61
-
62
- for step_num, fields in sorted(self.fields_by_step.items()):
63
- model_name = f"Step{step_num}Request"
64
- field_defs = []
65
-
66
- for field in fields:
67
- field_line = f" {field.name}: {field.field_type}"
68
-
69
- if not field.required:
70
- field_line += f" = {repr(field.default_value)}"
71
-
72
- if field.description:
73
- field_line += f" # {field.description}"
74
-
75
- field_defs.append(field_line)
76
-
77
- model = f'''
78
- class {model_name}(BaseModel):
79
- """Request model for step {step_num}"""
80
- {chr(10).join(field_defs)}
81
- '''
82
- models.append(model)
83
-
84
- return "\n".join(models)
85
-
86
-
87
- class CodeAnalysisPattern(BasePattern):
88
- """Code analysis input pattern.
89
-
90
- **Description:**
91
- Wizards that analyze source code take three standard inputs:
92
- - code: Source code string
93
- - file_path: Path to the file being analyzed
94
- - language: Programming language
95
-
96
- **Usage:** 16 wizards (all coach wizards)
97
- **Reusability:** 0.9
98
-
99
- **Signature:**
100
- def analyze_code(
101
- self,
102
- code: str,
103
- file_path: str,
104
- language: str
105
- ) -> list[WizardIssue]
106
- """
107
-
108
- category: Literal[PatternCategory.INPUT] = PatternCategory.INPUT
109
- supported_languages: list[str] = Field(
110
- default_factory=lambda: [
111
- "python",
112
- "javascript",
113
- "typescript",
114
- "java",
115
- "go",
116
- "rust",
117
- ],
118
- description="Supported programming languages",
119
- )
120
- returns_issues: bool = Field(
121
- default=True,
122
- description="Whether this returns a list of issues",
123
- )
124
-
125
-
126
- class ContextBasedPattern(BasePattern):
127
- """Context-based flexible input pattern.
128
-
129
- **Description:**
130
- Wizards that accept a flexible dictionary of context parameters,
131
- allowing for extensible input without rigid schemas.
132
-
133
- **Usage:** 12 wizards (AI wizards)
134
- **Reusability:** 0.8
135
-
136
- **Example Context:**
137
- {
138
- "project_path": ".",
139
- "linters": {"eslint": "output.json"},
140
- "configs": {"eslint": ".eslintrc.json"},
141
- "auto_fix": True,
142
- "verify": True,
143
- }
144
-
145
- **Signature:**
146
- async def analyze(self, context: dict[str, Any]) -> dict[str, Any]
147
- """
148
-
149
- category: Literal[PatternCategory.INPUT] = PatternCategory.INPUT
150
- required_keys: list[str] = Field(
151
- default_factory=list,
152
- description="Required context keys",
153
- )
154
- optional_keys: list[str] = Field(
155
- default_factory=list,
156
- description="Optional context keys",
157
- )
158
- key_descriptions: dict[str, str] = Field(
159
- default_factory=dict,
160
- description="Descriptions of what each key means",
161
- )
@@ -1,8 +0,0 @@
1
- {
2
- "version": "1.0",
3
- "updated_at": "2025-12-22T22:49:47.868937",
4
- "node_count": 0,
5
- "edge_count": 0,
6
- "nodes": [],
7
- "edges": []
8
- }