claude-mpm 3.3.2__py3-none-any.whl → 3.4.2__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.
- claude_mpm/cli/commands/memory.py +192 -14
- claude_mpm/cli/parser.py +13 -1
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +61 -0
- claude_mpm/core/config.py +161 -1
- claude_mpm/core/simple_runner.py +61 -0
- claude_mpm/hooks/builtin/mpm_command_hook.py +5 -5
- claude_mpm/hooks/claude_hooks/hook_handler.py +211 -4
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +10 -3
- claude_mpm/hooks/memory_integration_hook.py +51 -5
- claude_mpm/scripts/socketio_daemon.py +49 -9
- claude_mpm/scripts/socketio_server_manager.py +370 -45
- claude_mpm/services/__init__.py +41 -5
- claude_mpm/services/agent_memory_manager.py +541 -51
- claude_mpm/services/exceptions.py +677 -0
- claude_mpm/services/health_monitor.py +892 -0
- claude_mpm/services/memory_builder.py +341 -7
- claude_mpm/services/memory_optimizer.py +6 -2
- claude_mpm/services/project_analyzer.py +771 -0
- claude_mpm/services/recovery_manager.py +670 -0
- claude_mpm/services/socketio_server.py +653 -36
- claude_mpm/services/standalone_socketio_server.py +703 -34
- claude_mpm/services/version_control/git_operations.py +26 -0
- {claude_mpm-3.3.2.dist-info → claude_mpm-3.4.2.dist-info}/METADATA +34 -10
- {claude_mpm-3.3.2.dist-info → claude_mpm-3.4.2.dist-info}/RECORD +30 -44
- claude_mpm/agents/agent-template.yaml +0 -83
- claude_mpm/agents/test_fix_deployment/.claude-pm/config/project.json +0 -6
- claude_mpm/cli/README.md +0 -109
- claude_mpm/cli_module/refactoring_guide.md +0 -253
- claude_mpm/core/agent_registry.py.bak +0 -312
- claude_mpm/core/base_service.py.bak +0 -406
- claude_mpm/hooks/README.md +0 -97
- claude_mpm/orchestration/SUBPROCESS_DESIGN.md +0 -66
- claude_mpm/schemas/README_SECURITY.md +0 -92
- claude_mpm/schemas/agent_schema.json +0 -395
- claude_mpm/schemas/agent_schema_documentation.md +0 -181
- claude_mpm/schemas/agent_schema_security_notes.md +0 -165
- claude_mpm/schemas/examples/standard_workflow.json +0 -505
- claude_mpm/schemas/ticket_workflow_documentation.md +0 -482
- claude_mpm/schemas/ticket_workflow_schema.json +0 -590
- claude_mpm/services/framework_claude_md_generator/README.md +0 -92
- claude_mpm/services/parent_directory_manager/README.md +0 -83
- claude_mpm/services/version_control/VERSION +0 -1
- /claude_mpm/{web → dashboard}/open_dashboard.py +0 -0
- {claude_mpm-3.3.2.dist-info → claude_mpm-3.4.2.dist-info}/WHEEL +0 -0
- {claude_mpm-3.3.2.dist-info → claude_mpm-3.4.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-3.3.2.dist-info → claude_mpm-3.4.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-3.3.2.dist-info → claude_mpm-3.4.2.dist-info}/top_level.txt +0 -0
|
@@ -1,590 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"title": "Claude MPM Ticket Workflow Schema",
|
|
5
|
-
"description": "Schema definition for ticket workflow management in Claude MPM. This schema enforces the structure and validation rules for ticket status workflows, resolution types, and state transitions.",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"required": [
|
|
8
|
-
"schema_version",
|
|
9
|
-
"workflow_id",
|
|
10
|
-
"workflow_version",
|
|
11
|
-
"metadata",
|
|
12
|
-
"status_states",
|
|
13
|
-
"resolution_types",
|
|
14
|
-
"transitions",
|
|
15
|
-
"status_resolution_mapping"
|
|
16
|
-
],
|
|
17
|
-
"properties": {
|
|
18
|
-
"schema_version": {
|
|
19
|
-
"type": "string",
|
|
20
|
-
"pattern": "^\\d+\\.\\d+\\.\\d+$",
|
|
21
|
-
"description": "Schema version for the ticket workflow format. This ensures compatibility between the workflow definition and the schema validator.",
|
|
22
|
-
"examples": ["1.0.0", "1.1.0"]
|
|
23
|
-
},
|
|
24
|
-
"workflow_id": {
|
|
25
|
-
"type": "string",
|
|
26
|
-
"pattern": "^[a-z][a-z0-9_]*$",
|
|
27
|
-
"description": "Unique workflow identifier used for workflow discovery and loading. This ID must be unique across all workflows in the system.",
|
|
28
|
-
"examples": ["standard_workflow", "support_workflow", "bug_tracking_workflow"]
|
|
29
|
-
},
|
|
30
|
-
"workflow_version": {
|
|
31
|
-
"type": "string",
|
|
32
|
-
"pattern": "^\\d+\\.\\d+\\.\\d+$",
|
|
33
|
-
"description": "Semantic version of the workflow definition itself (not the schema). Increment major for breaking changes, minor for new features, patch for bug fixes.",
|
|
34
|
-
"examples": ["1.0.0", "2.1.3"]
|
|
35
|
-
},
|
|
36
|
-
"metadata": {
|
|
37
|
-
"type": "object",
|
|
38
|
-
"required": [
|
|
39
|
-
"name",
|
|
40
|
-
"description",
|
|
41
|
-
"workflow_type"
|
|
42
|
-
],
|
|
43
|
-
"properties": {
|
|
44
|
-
"name": {
|
|
45
|
-
"type": "string",
|
|
46
|
-
"minLength": 3,
|
|
47
|
-
"maxLength": 50,
|
|
48
|
-
"description": "Human-readable workflow name displayed in UI and logs."
|
|
49
|
-
},
|
|
50
|
-
"description": {
|
|
51
|
-
"type": "string",
|
|
52
|
-
"minLength": 10,
|
|
53
|
-
"maxLength": 200,
|
|
54
|
-
"description": "Brief description of workflow purpose and use cases."
|
|
55
|
-
},
|
|
56
|
-
"workflow_type": {
|
|
57
|
-
"type": "string",
|
|
58
|
-
"enum": ["standard", "support", "bug_tracking", "feature_request", "task_management", "custom"],
|
|
59
|
-
"description": "Type of workflow that determines its primary use case and default behaviors."
|
|
60
|
-
},
|
|
61
|
-
"author": {
|
|
62
|
-
"type": "string",
|
|
63
|
-
"description": "Workflow author or maintainer"
|
|
64
|
-
},
|
|
65
|
-
"created_at": {
|
|
66
|
-
"type": "string",
|
|
67
|
-
"format": "date-time",
|
|
68
|
-
"description": "Creation timestamp"
|
|
69
|
-
},
|
|
70
|
-
"updated_at": {
|
|
71
|
-
"type": "string",
|
|
72
|
-
"format": "date-time",
|
|
73
|
-
"description": "Last update timestamp"
|
|
74
|
-
},
|
|
75
|
-
"tags": {
|
|
76
|
-
"type": "array",
|
|
77
|
-
"items": {
|
|
78
|
-
"type": "string",
|
|
79
|
-
"pattern": "^[a-z][a-z0-9-]*$"
|
|
80
|
-
},
|
|
81
|
-
"uniqueItems": true,
|
|
82
|
-
"description": "Tags for workflow categorization and discovery"
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
"status_states": {
|
|
87
|
-
"type": "object",
|
|
88
|
-
"description": "Definition of all possible status states in the workflow. Status tracks the current position in the workflow lifecycle.",
|
|
89
|
-
"required": ["states"],
|
|
90
|
-
"properties": {
|
|
91
|
-
"states": {
|
|
92
|
-
"type": "array",
|
|
93
|
-
"minItems": 3,
|
|
94
|
-
"items": {
|
|
95
|
-
"type": "object",
|
|
96
|
-
"required": ["id", "name", "description", "category"],
|
|
97
|
-
"properties": {
|
|
98
|
-
"id": {
|
|
99
|
-
"type": "string",
|
|
100
|
-
"pattern": "^[a-z][a-z0-9_]*$",
|
|
101
|
-
"description": "Unique identifier for the status state"
|
|
102
|
-
},
|
|
103
|
-
"name": {
|
|
104
|
-
"type": "string",
|
|
105
|
-
"description": "Display name for the status"
|
|
106
|
-
},
|
|
107
|
-
"description": {
|
|
108
|
-
"type": "string",
|
|
109
|
-
"description": "Detailed description of what this status means"
|
|
110
|
-
},
|
|
111
|
-
"category": {
|
|
112
|
-
"type": "string",
|
|
113
|
-
"enum": ["initial", "active", "waiting", "terminal"],
|
|
114
|
-
"description": "Category of the status for grouping and logic"
|
|
115
|
-
},
|
|
116
|
-
"is_default": {
|
|
117
|
-
"type": "boolean",
|
|
118
|
-
"default": false,
|
|
119
|
-
"description": "Whether this is the default status for new tickets"
|
|
120
|
-
},
|
|
121
|
-
"color": {
|
|
122
|
-
"type": "string",
|
|
123
|
-
"pattern": "^#[0-9A-Fa-f]{6}$",
|
|
124
|
-
"description": "Hex color code for UI display"
|
|
125
|
-
},
|
|
126
|
-
"icon": {
|
|
127
|
-
"type": "string",
|
|
128
|
-
"description": "Icon identifier for UI display"
|
|
129
|
-
},
|
|
130
|
-
"sla_hours": {
|
|
131
|
-
"type": "integer",
|
|
132
|
-
"minimum": 0,
|
|
133
|
-
"description": "SLA hours for this status (optional)"
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
"default_status": {
|
|
139
|
-
"type": "string",
|
|
140
|
-
"description": "ID of the default status for new tickets"
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
"resolution_types": {
|
|
145
|
-
"type": "object",
|
|
146
|
-
"description": "Definition of all possible resolution types. Resolution tracks the outcome reasoning of a ticket.",
|
|
147
|
-
"required": ["types"],
|
|
148
|
-
"properties": {
|
|
149
|
-
"types": {
|
|
150
|
-
"type": "array",
|
|
151
|
-
"minItems": 1,
|
|
152
|
-
"items": {
|
|
153
|
-
"type": "object",
|
|
154
|
-
"required": ["id", "name", "description", "category"],
|
|
155
|
-
"properties": {
|
|
156
|
-
"id": {
|
|
157
|
-
"type": "string",
|
|
158
|
-
"pattern": "^[a-z][a-z0-9_]*$",
|
|
159
|
-
"description": "Unique identifier for the resolution type"
|
|
160
|
-
},
|
|
161
|
-
"name": {
|
|
162
|
-
"type": "string",
|
|
163
|
-
"description": "Display name for the resolution"
|
|
164
|
-
},
|
|
165
|
-
"description": {
|
|
166
|
-
"type": "string",
|
|
167
|
-
"description": "Detailed description of what this resolution means"
|
|
168
|
-
},
|
|
169
|
-
"category": {
|
|
170
|
-
"type": "string",
|
|
171
|
-
"enum": ["successful", "unsuccessful", "invalid", "deferred"],
|
|
172
|
-
"description": "Category of the resolution for reporting and metrics"
|
|
173
|
-
},
|
|
174
|
-
"requires_comment": {
|
|
175
|
-
"type": "boolean",
|
|
176
|
-
"default": false,
|
|
177
|
-
"description": "Whether a comment is required when using this resolution"
|
|
178
|
-
},
|
|
179
|
-
"color": {
|
|
180
|
-
"type": "string",
|
|
181
|
-
"pattern": "^#[0-9A-Fa-f]{6}$",
|
|
182
|
-
"description": "Hex color code for UI display"
|
|
183
|
-
},
|
|
184
|
-
"icon": {
|
|
185
|
-
"type": "string",
|
|
186
|
-
"description": "Icon identifier for UI display"
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
"transitions": {
|
|
194
|
-
"type": "object",
|
|
195
|
-
"description": "Definition of valid state transitions in the workflow",
|
|
196
|
-
"required": ["rules"],
|
|
197
|
-
"properties": {
|
|
198
|
-
"rules": {
|
|
199
|
-
"type": "array",
|
|
200
|
-
"items": {
|
|
201
|
-
"type": "object",
|
|
202
|
-
"required": ["from_status", "to_status", "name"],
|
|
203
|
-
"properties": {
|
|
204
|
-
"from_status": {
|
|
205
|
-
"type": "string",
|
|
206
|
-
"description": "Source status ID (use '*' for any status)"
|
|
207
|
-
},
|
|
208
|
-
"to_status": {
|
|
209
|
-
"type": "string",
|
|
210
|
-
"description": "Target status ID"
|
|
211
|
-
},
|
|
212
|
-
"name": {
|
|
213
|
-
"type": "string",
|
|
214
|
-
"description": "Name of the transition action"
|
|
215
|
-
},
|
|
216
|
-
"description": {
|
|
217
|
-
"type": "string",
|
|
218
|
-
"description": "Description of the transition"
|
|
219
|
-
},
|
|
220
|
-
"required_fields": {
|
|
221
|
-
"type": "array",
|
|
222
|
-
"items": {
|
|
223
|
-
"type": "string"
|
|
224
|
-
},
|
|
225
|
-
"description": "Fields that must be set for this transition"
|
|
226
|
-
},
|
|
227
|
-
"permissions": {
|
|
228
|
-
"type": "array",
|
|
229
|
-
"items": {
|
|
230
|
-
"type": "string"
|
|
231
|
-
},
|
|
232
|
-
"description": "Required permissions for this transition"
|
|
233
|
-
},
|
|
234
|
-
"auto_assign": {
|
|
235
|
-
"type": "boolean",
|
|
236
|
-
"default": false,
|
|
237
|
-
"description": "Whether to auto-assign the ticket during this transition"
|
|
238
|
-
},
|
|
239
|
-
"triggers": {
|
|
240
|
-
"type": "array",
|
|
241
|
-
"items": {
|
|
242
|
-
"type": "object",
|
|
243
|
-
"properties": {
|
|
244
|
-
"type": {
|
|
245
|
-
"type": "string",
|
|
246
|
-
"enum": ["webhook", "notification", "automation"]
|
|
247
|
-
},
|
|
248
|
-
"config": {
|
|
249
|
-
"type": "object"
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
},
|
|
253
|
-
"description": "Actions triggered by this transition"
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
},
|
|
258
|
-
"allow_self_transitions": {
|
|
259
|
-
"type": "boolean",
|
|
260
|
-
"default": false,
|
|
261
|
-
"description": "Whether tickets can transition to the same status"
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
},
|
|
265
|
-
"status_resolution_mapping": {
|
|
266
|
-
"type": "object",
|
|
267
|
-
"description": "Mapping of which resolutions are valid for which statuses",
|
|
268
|
-
"required": ["mappings"],
|
|
269
|
-
"properties": {
|
|
270
|
-
"mappings": {
|
|
271
|
-
"type": "array",
|
|
272
|
-
"items": {
|
|
273
|
-
"type": "object",
|
|
274
|
-
"required": ["status_id", "allowed_resolutions"],
|
|
275
|
-
"properties": {
|
|
276
|
-
"status_id": {
|
|
277
|
-
"type": "string",
|
|
278
|
-
"description": "Status ID"
|
|
279
|
-
},
|
|
280
|
-
"allowed_resolutions": {
|
|
281
|
-
"type": "array",
|
|
282
|
-
"items": {
|
|
283
|
-
"type": "string"
|
|
284
|
-
},
|
|
285
|
-
"description": "List of resolution IDs allowed for this status"
|
|
286
|
-
},
|
|
287
|
-
"requires_resolution": {
|
|
288
|
-
"type": "boolean",
|
|
289
|
-
"default": false,
|
|
290
|
-
"description": "Whether a resolution is required for this status"
|
|
291
|
-
},
|
|
292
|
-
"default_resolution": {
|
|
293
|
-
"type": "string",
|
|
294
|
-
"description": "Default resolution ID for this status"
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
},
|
|
301
|
-
"business_rules": {
|
|
302
|
-
"type": "object",
|
|
303
|
-
"description": "Business rules and constraints for the workflow",
|
|
304
|
-
"properties": {
|
|
305
|
-
"auto_close": {
|
|
306
|
-
"type": "object",
|
|
307
|
-
"properties": {
|
|
308
|
-
"enabled": {
|
|
309
|
-
"type": "boolean",
|
|
310
|
-
"default": false
|
|
311
|
-
},
|
|
312
|
-
"days_after_resolved": {
|
|
313
|
-
"type": "integer",
|
|
314
|
-
"minimum": 1,
|
|
315
|
-
"description": "Days after resolution before auto-closing"
|
|
316
|
-
},
|
|
317
|
-
"excluded_resolutions": {
|
|
318
|
-
"type": "array",
|
|
319
|
-
"items": {
|
|
320
|
-
"type": "string"
|
|
321
|
-
},
|
|
322
|
-
"description": "Resolution IDs that prevent auto-close"
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
},
|
|
326
|
-
"reopen_rules": {
|
|
327
|
-
"type": "object",
|
|
328
|
-
"properties": {
|
|
329
|
-
"allow_reopen": {
|
|
330
|
-
"type": "boolean",
|
|
331
|
-
"default": true
|
|
332
|
-
},
|
|
333
|
-
"from_statuses": {
|
|
334
|
-
"type": "array",
|
|
335
|
-
"items": {
|
|
336
|
-
"type": "string"
|
|
337
|
-
},
|
|
338
|
-
"description": "Status IDs from which tickets can be reopened"
|
|
339
|
-
},
|
|
340
|
-
"max_reopen_count": {
|
|
341
|
-
"type": "integer",
|
|
342
|
-
"minimum": 0,
|
|
343
|
-
"description": "Maximum number of times a ticket can be reopened"
|
|
344
|
-
},
|
|
345
|
-
"reopen_window_days": {
|
|
346
|
-
"type": "integer",
|
|
347
|
-
"minimum": 0,
|
|
348
|
-
"description": "Days after closing during which reopening is allowed"
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
},
|
|
352
|
-
"escalation_rules": {
|
|
353
|
-
"type": "array",
|
|
354
|
-
"items": {
|
|
355
|
-
"type": "object",
|
|
356
|
-
"required": ["condition", "action"],
|
|
357
|
-
"properties": {
|
|
358
|
-
"name": {
|
|
359
|
-
"type": "string"
|
|
360
|
-
},
|
|
361
|
-
"condition": {
|
|
362
|
-
"type": "object",
|
|
363
|
-
"properties": {
|
|
364
|
-
"status": {
|
|
365
|
-
"type": "string"
|
|
366
|
-
},
|
|
367
|
-
"hours_in_status": {
|
|
368
|
-
"type": "integer"
|
|
369
|
-
},
|
|
370
|
-
"priority": {
|
|
371
|
-
"type": "string"
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
},
|
|
375
|
-
"action": {
|
|
376
|
-
"type": "object",
|
|
377
|
-
"properties": {
|
|
378
|
-
"change_status": {
|
|
379
|
-
"type": "string"
|
|
380
|
-
},
|
|
381
|
-
"change_priority": {
|
|
382
|
-
"type": "string"
|
|
383
|
-
},
|
|
384
|
-
"notify": {
|
|
385
|
-
"type": "array",
|
|
386
|
-
"items": {
|
|
387
|
-
"type": "string"
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
},
|
|
397
|
-
"ui_configuration": {
|
|
398
|
-
"type": "object",
|
|
399
|
-
"description": "UI-specific configuration for the workflow",
|
|
400
|
-
"properties": {
|
|
401
|
-
"status_display_order": {
|
|
402
|
-
"type": "array",
|
|
403
|
-
"items": {
|
|
404
|
-
"type": "string"
|
|
405
|
-
},
|
|
406
|
-
"description": "Order in which statuses should be displayed"
|
|
407
|
-
},
|
|
408
|
-
"resolution_display_order": {
|
|
409
|
-
"type": "array",
|
|
410
|
-
"items": {
|
|
411
|
-
"type": "string"
|
|
412
|
-
},
|
|
413
|
-
"description": "Order in which resolutions should be displayed"
|
|
414
|
-
},
|
|
415
|
-
"quick_transitions": {
|
|
416
|
-
"type": "array",
|
|
417
|
-
"items": {
|
|
418
|
-
"type": "object",
|
|
419
|
-
"properties": {
|
|
420
|
-
"from_status": {
|
|
421
|
-
"type": "string"
|
|
422
|
-
},
|
|
423
|
-
"to_status": {
|
|
424
|
-
"type": "string"
|
|
425
|
-
},
|
|
426
|
-
"button_label": {
|
|
427
|
-
"type": "string"
|
|
428
|
-
},
|
|
429
|
-
"button_style": {
|
|
430
|
-
"type": "string",
|
|
431
|
-
"enum": ["primary", "secondary", "success", "danger", "warning"]
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
},
|
|
435
|
-
"description": "Quick action buttons for common transitions"
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
},
|
|
439
|
-
"metrics": {
|
|
440
|
-
"type": "object",
|
|
441
|
-
"description": "Metrics and reporting configuration",
|
|
442
|
-
"properties": {
|
|
443
|
-
"cycle_time_statuses": {
|
|
444
|
-
"type": "object",
|
|
445
|
-
"properties": {
|
|
446
|
-
"start": {
|
|
447
|
-
"type": "array",
|
|
448
|
-
"items": {
|
|
449
|
-
"type": "string"
|
|
450
|
-
},
|
|
451
|
-
"description": "Status IDs that mark the start of cycle time"
|
|
452
|
-
},
|
|
453
|
-
"end": {
|
|
454
|
-
"type": "array",
|
|
455
|
-
"items": {
|
|
456
|
-
"type": "string"
|
|
457
|
-
},
|
|
458
|
-
"description": "Status IDs that mark the end of cycle time"
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
},
|
|
462
|
-
"resolution_metrics": {
|
|
463
|
-
"type": "array",
|
|
464
|
-
"items": {
|
|
465
|
-
"type": "object",
|
|
466
|
-
"properties": {
|
|
467
|
-
"name": {
|
|
468
|
-
"type": "string"
|
|
469
|
-
},
|
|
470
|
-
"resolution_ids": {
|
|
471
|
-
"type": "array",
|
|
472
|
-
"items": {
|
|
473
|
-
"type": "string"
|
|
474
|
-
}
|
|
475
|
-
},
|
|
476
|
-
"metric_type": {
|
|
477
|
-
"type": "string",
|
|
478
|
-
"enum": ["success_rate", "failure_rate", "defect_rate", "satisfaction_rate"]
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
},
|
|
486
|
-
"additionalProperties": false,
|
|
487
|
-
"definitions": {
|
|
488
|
-
"standard_statuses": {
|
|
489
|
-
"description": "Common status states used across different workflow types",
|
|
490
|
-
"open": {
|
|
491
|
-
"name": "Open/New",
|
|
492
|
-
"description": "Ticket has been created but not yet assigned or started",
|
|
493
|
-
"category": "initial"
|
|
494
|
-
},
|
|
495
|
-
"in_progress": {
|
|
496
|
-
"name": "In Progress/Assigned",
|
|
497
|
-
"description": "Ticket is actively being worked on",
|
|
498
|
-
"category": "active"
|
|
499
|
-
},
|
|
500
|
-
"pending": {
|
|
501
|
-
"name": "Pending/Waiting",
|
|
502
|
-
"description": "Ticket is waiting for external input or dependencies",
|
|
503
|
-
"category": "waiting"
|
|
504
|
-
},
|
|
505
|
-
"resolved": {
|
|
506
|
-
"name": "Resolved",
|
|
507
|
-
"description": "Work is complete and solution has been implemented",
|
|
508
|
-
"category": "terminal"
|
|
509
|
-
},
|
|
510
|
-
"closed": {
|
|
511
|
-
"name": "Closed",
|
|
512
|
-
"description": "Ticket is closed and no further action is required",
|
|
513
|
-
"category": "terminal"
|
|
514
|
-
},
|
|
515
|
-
"reopened": {
|
|
516
|
-
"name": "Reopened",
|
|
517
|
-
"description": "Previously closed ticket has been reopened",
|
|
518
|
-
"category": "active"
|
|
519
|
-
},
|
|
520
|
-
"on_hold": {
|
|
521
|
-
"name": "On Hold",
|
|
522
|
-
"description": "Work is temporarily suspended",
|
|
523
|
-
"category": "waiting"
|
|
524
|
-
},
|
|
525
|
-
"escalated": {
|
|
526
|
-
"name": "Escalated",
|
|
527
|
-
"description": "Ticket has been escalated to higher priority or management",
|
|
528
|
-
"category": "active"
|
|
529
|
-
},
|
|
530
|
-
"canceled": {
|
|
531
|
-
"name": "Canceled",
|
|
532
|
-
"description": "Ticket has been canceled before completion",
|
|
533
|
-
"category": "terminal"
|
|
534
|
-
}
|
|
535
|
-
},
|
|
536
|
-
"standard_resolutions": {
|
|
537
|
-
"description": "Common resolution types used across different workflow types",
|
|
538
|
-
"fixed": {
|
|
539
|
-
"name": "Fixed/Resolved",
|
|
540
|
-
"description": "Issue was successfully fixed or request was fulfilled",
|
|
541
|
-
"category": "successful"
|
|
542
|
-
},
|
|
543
|
-
"wont_fix": {
|
|
544
|
-
"name": "Won't Fix",
|
|
545
|
-
"description": "Decision made not to address the issue",
|
|
546
|
-
"category": "unsuccessful"
|
|
547
|
-
},
|
|
548
|
-
"duplicate": {
|
|
549
|
-
"name": "Duplicate",
|
|
550
|
-
"description": "Issue is a duplicate of another ticket",
|
|
551
|
-
"category": "invalid"
|
|
552
|
-
},
|
|
553
|
-
"cannot_reproduce": {
|
|
554
|
-
"name": "Cannot Reproduce",
|
|
555
|
-
"description": "Issue cannot be reproduced or verified",
|
|
556
|
-
"category": "invalid"
|
|
557
|
-
},
|
|
558
|
-
"works_as_designed": {
|
|
559
|
-
"name": "Works as Designed",
|
|
560
|
-
"description": "Behavior is intentional and not a bug",
|
|
561
|
-
"category": "invalid"
|
|
562
|
-
},
|
|
563
|
-
"incomplete": {
|
|
564
|
-
"name": "Incomplete",
|
|
565
|
-
"description": "Insufficient information to proceed",
|
|
566
|
-
"category": "unsuccessful"
|
|
567
|
-
},
|
|
568
|
-
"user_error": {
|
|
569
|
-
"name": "User Error",
|
|
570
|
-
"description": "Issue was due to user error or misunderstanding",
|
|
571
|
-
"category": "invalid"
|
|
572
|
-
},
|
|
573
|
-
"configuration": {
|
|
574
|
-
"name": "Configuration",
|
|
575
|
-
"description": "Issue was resolved through configuration changes",
|
|
576
|
-
"category": "successful"
|
|
577
|
-
},
|
|
578
|
-
"workaround": {
|
|
579
|
-
"name": "Workaround",
|
|
580
|
-
"description": "A workaround has been provided",
|
|
581
|
-
"category": "successful"
|
|
582
|
-
},
|
|
583
|
-
"documentation": {
|
|
584
|
-
"name": "Documentation",
|
|
585
|
-
"description": "Issue was resolved by updating or providing documentation",
|
|
586
|
-
"category": "successful"
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# Framework CLAUDE.md Generator
|
|
2
|
-
|
|
3
|
-
This directory contains the refactored framework CLAUDE.md generator service, originally a single 1,267-line file.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
### Core Modules
|
|
8
|
-
|
|
9
|
-
- **`__init__.py`** (~250 lines) - Main facade class that coordinates all functionality
|
|
10
|
-
- **`version_manager.py`** (~100 lines) - Handles version parsing, incrementing, and comparison
|
|
11
|
-
- **`content_assembler.py`** (~120 lines) - Assembles sections and applies template variables
|
|
12
|
-
- **`content_validator.py`** (~80 lines) - Validates generated content structure and completeness
|
|
13
|
-
- **`deployment_manager.py`** (~80 lines) - Handles deployment to parent directories
|
|
14
|
-
- **`section_manager.py`** (~60 lines) - Manages section registration, ordering, and updates
|
|
15
|
-
|
|
16
|
-
### Section Generators
|
|
17
|
-
|
|
18
|
-
The `section_generators/` subdirectory contains individual generators for each section:
|
|
19
|
-
|
|
20
|
-
- **`__init__.py`** - Base classes and registry
|
|
21
|
-
- **`header.py`** - Header with version metadata
|
|
22
|
-
- **`role_designation.py`** - AI Assistant role designation
|
|
23
|
-
- **`agents.py`** (~570 lines) - Comprehensive agents documentation (largest section)
|
|
24
|
-
- **`todo_task_tools.py`** - Todo and Task Tools integration
|
|
25
|
-
- **`claude_pm_init.py`** - Claude-PM initialization procedures
|
|
26
|
-
- **`orchestration_principles.py`** - Core orchestration principles
|
|
27
|
-
- **`subprocess_validation.py`** - Subprocess validation protocol
|
|
28
|
-
- **`delegation_constraints.py`** - Critical delegation constraints
|
|
29
|
-
- **`environment_config.py`** - Environment configuration
|
|
30
|
-
- **`troubleshooting.py`** - Troubleshooting guide
|
|
31
|
-
- **`core_responsibilities.py`** - Core responsibilities list
|
|
32
|
-
- **`footer.py`** - Footer with metadata
|
|
33
|
-
|
|
34
|
-
## Usage
|
|
35
|
-
|
|
36
|
-
The API remains unchanged from the original implementation:
|
|
37
|
-
|
|
38
|
-
```python
|
|
39
|
-
from claude_pm.services.framework_claude_md_generator import FrameworkClaudeMdGenerator
|
|
40
|
-
|
|
41
|
-
# Create generator instance
|
|
42
|
-
generator = FrameworkClaudeMdGenerator()
|
|
43
|
-
|
|
44
|
-
# Generate content
|
|
45
|
-
content = generator.generate(
|
|
46
|
-
current_content=existing_content, # Optional: for version auto-increment
|
|
47
|
-
template_variables={'PLATFORM': 'darwin', 'PYTHON_CMD': 'python3'}
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
# Deploy to parent directory
|
|
51
|
-
success, message = generator.deploy_to_parent(Path('/parent/dir'))
|
|
52
|
-
|
|
53
|
-
# Update a section
|
|
54
|
-
generator.update_section('agents', 'Custom agents content')
|
|
55
|
-
|
|
56
|
-
# Add custom section
|
|
57
|
-
generator.add_custom_section('custom', 'Custom content', after='agents')
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## Design Benefits
|
|
61
|
-
|
|
62
|
-
1. **Modularity**: Each concern is separated into its own module
|
|
63
|
-
2. **Maintainability**: Smaller, focused modules are easier to understand and modify
|
|
64
|
-
3. **Testability**: Individual components can be tested in isolation
|
|
65
|
-
4. **Extensibility**: New section generators can be added easily
|
|
66
|
-
5. **Performance**: Section generators are loaded on demand
|
|
67
|
-
6. **Backward Compatibility**: Original API preserved through facade pattern
|
|
68
|
-
|
|
69
|
-
## Section Generator Pattern
|
|
70
|
-
|
|
71
|
-
To add a new section generator:
|
|
72
|
-
|
|
73
|
-
1. Create a new file in `section_generators/`
|
|
74
|
-
2. Inherit from `BaseSectionGenerator`
|
|
75
|
-
3. Implement the `generate()` method
|
|
76
|
-
4. Register in `section_generators/__init__.py`
|
|
77
|
-
|
|
78
|
-
Example:
|
|
79
|
-
```python
|
|
80
|
-
from . import BaseSectionGenerator
|
|
81
|
-
|
|
82
|
-
class CustomSectionGenerator(BaseSectionGenerator):
|
|
83
|
-
def generate(self, data: Dict[str, Any]) -> str:
|
|
84
|
-
return "## Custom Section\n\nContent here..."
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Refactoring Summary
|
|
88
|
-
|
|
89
|
-
- **Original**: 1,267 lines in a single file
|
|
90
|
-
- **Refactored**: ~250 lines in main module + well-organized submodules
|
|
91
|
-
- **Total line reduction**: Main module reduced by 80%
|
|
92
|
-
- **Improved organization**: 13 focused modules instead of 1 large file
|