claude-mpm 3.2.1__py3-none-any.whl → 3.3.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/agents/INSTRUCTIONS.md +71 -2
- claude_mpm/agents/templates/data_engineer.json +1 -1
- claude_mpm/agents/templates/documentation.json +1 -1
- claude_mpm/agents/templates/engineer.json +1 -1
- claude_mpm/agents/templates/ops.json +1 -1
- claude_mpm/agents/templates/pm.json +1 -1
- claude_mpm/agents/templates/qa.json +1 -1
- claude_mpm/agents/templates/research.json +1 -1
- claude_mpm/agents/templates/security.json +1 -1
- claude_mpm/agents/templates/test_integration.json +112 -0
- claude_mpm/agents/templates/version_control.json +1 -1
- claude_mpm/cli/commands/memory.py +575 -25
- claude_mpm/cli/commands/run.py +115 -14
- claude_mpm/cli/parser.py +76 -0
- claude_mpm/constants.py +5 -0
- claude_mpm/core/claude_runner.py +13 -11
- claude_mpm/core/session_manager.py +46 -0
- claude_mpm/core/simple_runner.py +13 -11
- claude_mpm/hooks/claude_hooks/hook_handler.py +2 -26
- claude_mpm/scripts/launch_socketio_dashboard.py +261 -0
- claude_mpm/services/agent_memory_manager.py +264 -23
- claude_mpm/services/memory_builder.py +491 -0
- claude_mpm/services/memory_optimizer.py +619 -0
- claude_mpm/services/memory_router.py +445 -0
- claude_mpm/services/socketio_server.py +389 -1
- claude_mpm-3.3.2.dist-info/METADATA +159 -0
- {claude_mpm-3.2.1.dist-info → claude_mpm-3.3.2.dist-info}/RECORD +31 -29
- claude_mpm/agents/templates/test-integration-agent.md +0 -34
- claude_mpm/core/websocket_handler.py +0 -233
- claude_mpm/services/websocket_server.py +0 -376
- claude_mpm-3.2.1.dist-info/METADATA +0 -432
- {claude_mpm-3.2.1.dist-info → claude_mpm-3.3.2.dist-info}/WHEEL +0 -0
- {claude_mpm-3.2.1.dist-info → claude_mpm-3.3.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-3.2.1.dist-info → claude_mpm-3.3.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-3.2.1.dist-info → claude_mpm-3.3.2.dist-info}/top_level.txt +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
claude_mpm/__init__.py,sha256=uDX48EOBrmJbY8Xv3bBpd8kibulIlmZv5jmczAjHNb8,648
|
|
2
2
|
claude_mpm/__main__.py,sha256=8IcM9tEbTqSN_er04eKTPX3AGo6qzRiTnPI7KfIf7rw,641
|
|
3
|
-
claude_mpm/constants.py,sha256=
|
|
3
|
+
claude_mpm/constants.py,sha256=kquxfabo4JRbeN86KHBTi8g4h2mSdB8OsUCyTq50kVM,4328
|
|
4
4
|
claude_mpm/deployment_paths.py,sha256=JO7-fhhp_AkVB7ZssggHDBbee-r2sokpkqjoqnQLTmM,9073
|
|
5
5
|
claude_mpm/init.py,sha256=gOreOf7BLXkT0_HrQk_As4Kz1OT_NJG_RG0i0hbY0z0,8088
|
|
6
6
|
claude_mpm/agents/BASE_AGENT_TEMPLATE.md,sha256=TYgSd9jNBMWp4mAOBUl9dconX4RcGbvmMEScRy5uyko,3343
|
|
7
|
-
claude_mpm/agents/INSTRUCTIONS.md,sha256=
|
|
7
|
+
claude_mpm/agents/INSTRUCTIONS.md,sha256=7CzaIBCf85rYCufZuOo4KjJGyWRrMd1AkN-Zzun93pE,13245
|
|
8
8
|
claude_mpm/agents/__init__.py,sha256=r-p7ervzjLPD7_8dm2tXX_fwvdTZy6KwKA03ofxN3sA,3275
|
|
9
9
|
claude_mpm/agents/agent-template.yaml,sha256=koKJn8MCAJx0QNQMHouvIZrwvw5qjPV0U-aV-YVyk6s,2036
|
|
10
10
|
claude_mpm/agents/agent_loader.py,sha256=P4h3qupJHvZL9dfb6ntB582xenYv9JbkMOVav_kNkAo,44030
|
|
@@ -16,16 +16,16 @@ claude_mpm/agents/system_agent_config.py,sha256=Lke4FFjU0Vq3LLo4O7KvtHxadP7agAwC
|
|
|
16
16
|
claude_mpm/agents/backups/INSTRUCTIONS.md,sha256=3iMs6KyLJ5HzCmzqze1FasWKLKevhqpqwb8PlYiJ7Gw,9155
|
|
17
17
|
claude_mpm/agents/schema/agent_schema.json,sha256=7zuSk4VfBNTlQN33AkfJp0Y1GltlviwengIM0mb7dGg,8741
|
|
18
18
|
claude_mpm/agents/templates/__init__.py,sha256=7UyIChghCnkrDctvmCRYr0Wrnn8Oj-eCdgL0KpFy1Mo,2668
|
|
19
|
-
claude_mpm/agents/templates/data_engineer.json,sha256=
|
|
20
|
-
claude_mpm/agents/templates/documentation.json,sha256=
|
|
21
|
-
claude_mpm/agents/templates/engineer.json,sha256=
|
|
22
|
-
claude_mpm/agents/templates/ops.json,sha256=
|
|
23
|
-
claude_mpm/agents/templates/pm.json,sha256=
|
|
24
|
-
claude_mpm/agents/templates/qa.json,sha256=
|
|
25
|
-
claude_mpm/agents/templates/research.json,sha256=
|
|
26
|
-
claude_mpm/agents/templates/security.json,sha256=
|
|
27
|
-
claude_mpm/agents/templates/
|
|
28
|
-
claude_mpm/agents/templates/version_control.json,sha256=
|
|
19
|
+
claude_mpm/agents/templates/data_engineer.json,sha256=Z63nwhO3Bo3sUjSc4O0yGVFbJVdCmMLAgcBjKJmfc8Y,8793
|
|
20
|
+
claude_mpm/agents/templates/documentation.json,sha256=z5ApzJYOty5dw5yidNxhwX7QU8FICRAzmzD1xdxPkCI,6224
|
|
21
|
+
claude_mpm/agents/templates/engineer.json,sha256=Qt9mJjbVM0wH9GE6kqAhGDRVmLhWbs0fwGW1IoluTZ8,12474
|
|
22
|
+
claude_mpm/agents/templates/ops.json,sha256=b-LRqYRWjMZnXKd8SMPXDLCq6-nRAmCHN60IlJctjXM,6488
|
|
23
|
+
claude_mpm/agents/templates/pm.json,sha256=FbH9TOJ1NUmgHREPEhl5nOuWS8k7ee_KEQlC7cnLj2w,5239
|
|
24
|
+
claude_mpm/agents/templates/qa.json,sha256=UmNbeONvnzSvHFB3GUXwnN8n-TF5wgrk0JaAkYwOvfY,6636
|
|
25
|
+
claude_mpm/agents/templates/research.json,sha256=10XO-W7cV_SGP16SHboagjbNUlKUoGfpbrjrI2tiSWU,13591
|
|
26
|
+
claude_mpm/agents/templates/security.json,sha256=DkiB98uJf5mo5nP7EIhu8hhsvwGhOnR_FA60EJGuNBk,6741
|
|
27
|
+
claude_mpm/agents/templates/test_integration.json,sha256=QqJtUABq23MlkldAaomTviopOvM7hqxNWbaYbUVCJpk,7620
|
|
28
|
+
claude_mpm/agents/templates/version_control.json,sha256=H9GzDk8Ys8KmOEgfTWGr1GakKFscbd_907ObmAqzlzc,6535
|
|
29
29
|
claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json,sha256=lLso4RHXVTQmX4A1XwF84kT59zZDblPO1xCgBj4S4x8,5060
|
|
30
30
|
claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json,sha256=snfJW2yW9aMv9ldCSIWW7zwnyoQRx5u7xLMkNlfus9I,2258
|
|
31
31
|
claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json,sha256=21o8TGCM9TO6eocSV9Ev5MmCq-xYwwCqMU7KQESaY2Q,8479
|
|
@@ -37,13 +37,13 @@ claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json,sh
|
|
|
37
37
|
claude_mpm/agents/test_fix_deployment/.claude-pm/config/project.json,sha256=YZQgq2ri2_Y3qKzvPlC6TmzZKviDv0__GuyUOo1LbT8,146
|
|
38
38
|
claude_mpm/cli/README.md,sha256=exe9V_UEsMSPXOMlvQUv5FsCuhUpPOsMvIhyDSyuFdI,3423
|
|
39
39
|
claude_mpm/cli/__init__.py,sha256=OBcyg1xLPddsPURZPCvVhUfHkeak7Ph2qTvhOGYL7rQ,5506
|
|
40
|
-
claude_mpm/cli/parser.py,sha256=
|
|
40
|
+
claude_mpm/cli/parser.py,sha256=5mzUgDWsdGoQjs1OalgXqhwAm3aQJ1g4F7VRTJc9wGU,15823
|
|
41
41
|
claude_mpm/cli/utils.py,sha256=k_EHLcjDAzYhDeVeWvE-vqvHsEoG6Cc6Yk7fs3YoRVA,6022
|
|
42
42
|
claude_mpm/cli/commands/__init__.py,sha256=6Oh31iPNWcAehZWIIkX2hoSUBTcvFU733P7Q8Ssf56g,509
|
|
43
43
|
claude_mpm/cli/commands/agents.py,sha256=FqqEQcfAfCxjz_E7fGQUtLznloJLz8fWQtnjQhkbalQ,6795
|
|
44
44
|
claude_mpm/cli/commands/info.py,sha256=ETL6jC08OTQVTPjs219Y0m3FzfKOUlI0-yI81AI8FXY,2990
|
|
45
|
-
claude_mpm/cli/commands/memory.py,sha256=
|
|
46
|
-
claude_mpm/cli/commands/run.py,sha256=
|
|
45
|
+
claude_mpm/cli/commands/memory.py,sha256=oaGcEl5eW42vq20CUu52MDX4CGNcrUgo2ZY0ROE8FBU,30124
|
|
46
|
+
claude_mpm/cli/commands/run.py,sha256=ArHaNBr2_jnZL5FuQdyOU1zySL27u6zdFOBGxkz3xcQ,28761
|
|
47
47
|
claude_mpm/cli/commands/tickets.py,sha256=SXyGtHSyGJwTeJwDAHf7kRbdiG1DlZkXkod5UoNy7Ik,2150
|
|
48
48
|
claude_mpm/cli/commands/ui.py,sha256=FhBQiOKW61cNduyryRu0UhC366d6o1eEkBgbPd7Au1w,1900
|
|
49
49
|
claude_mpm/cli_module/__init__.py,sha256=CkMp4gzWKoZZF_qKyBDi2sQaZw_GLWZYLtKouv-4f8s,390
|
|
@@ -60,7 +60,7 @@ claude_mpm/core/agent_registry.py.bak,sha256=cXB0yqhonE1XsXmWcdwyNuvv8yddK_PyZIL
|
|
|
60
60
|
claude_mpm/core/agent_session_manager.py,sha256=6alXQr4gnMR-unT4J1ryEtTxJqQolA0-NgPQN6X3lqY,11212
|
|
61
61
|
claude_mpm/core/base_service.py,sha256=qWI_rUybHmmKroptJxcE4rzPBhK8yeMKIt2JqnqJB7E,29125
|
|
62
62
|
claude_mpm/core/base_service.py.bak,sha256=48A8eI_HPqxYm42X5jaTo8zQVOfFFXe7SqIUo-8IyC4,13124
|
|
63
|
-
claude_mpm/core/claude_runner.py,sha256=
|
|
63
|
+
claude_mpm/core/claude_runner.py,sha256=UTeAvhdeZK7EViNaEiiMIPWBmn44utJvj9fNiqwGNe8,37740
|
|
64
64
|
claude_mpm/core/config.py,sha256=_V0sbCOFNabm9nZUuRAZ9AGe65A03FbFY36QFCrDdHo,13464
|
|
65
65
|
claude_mpm/core/config_aliases.py,sha256=8eqA4wpWViIDm_9pL3f9j7cR_ssmhOYYiY2UzHrfUzg,10058
|
|
66
66
|
claude_mpm/core/container.py,sha256=P4c4nSo_USSfHTxvpR1sQkVGNsgqozZBN27l3IXqiDc,12216
|
|
@@ -74,11 +74,10 @@ claude_mpm/core/minimal_framework_loader.py,sha256=liYS4IyuW_aFK7yhRDZwTwT-3q09f
|
|
|
74
74
|
claude_mpm/core/mixins.py,sha256=rTEH-7FDpNiLB8oo6mSb0CLarJklv4fDJw1xM-gr5wI,5599
|
|
75
75
|
claude_mpm/core/pm_hook_interceptor.py,sha256=PRaloqgxn-Alt9HflrywYXRL2GL3Ixb8Wxov8GfAMMU,7173
|
|
76
76
|
claude_mpm/core/service_registry.py,sha256=wKJUO1g4UFA4dUpE3RkIYz1Ek8kIh4XfvU1kFeLCl2Q,10529
|
|
77
|
-
claude_mpm/core/session_manager.py,sha256=
|
|
78
|
-
claude_mpm/core/simple_runner.py,sha256=
|
|
77
|
+
claude_mpm/core/session_manager.py,sha256=D6ZA7bHAgfdkv0nLKjza0FKDng5iqi___IESrb3nSuk,8292
|
|
78
|
+
claude_mpm/core/simple_runner.py,sha256=UTeAvhdeZK7EViNaEiiMIPWBmn44utJvj9fNiqwGNe8,37740
|
|
79
79
|
claude_mpm/core/socketio_pool.py,sha256=B83uDsmqRF5S0QDwwatyKS-m2SdTvotCVfc3_2uQxd8,22438
|
|
80
80
|
claude_mpm/core/tool_access_control.py,sha256=htZbDhC8s7D7BVqfmk0BwRrYJnlnUAk8_NeJKOaeNlg,6632
|
|
81
|
-
claude_mpm/core/websocket_handler.py,sha256=1PwnZ6AzAOgfTWO5n4T52fSQxAuboj7bHOmL3TItq6M,8895
|
|
82
81
|
claude_mpm/experimental/cli_enhancements.py,sha256=-N5f2u9TaxUcOJegUd3lt1FRz5ErEyYUvvgrNmMRL7Q,11814
|
|
83
82
|
claude_mpm/generators/__init__.py,sha256=l53aBn6kBQSDz3b6bZkMCJBcEmYnV9hHEZq8LKzXgH8,152
|
|
84
83
|
claude_mpm/generators/agent_profile_generator.py,sha256=2HjOscogSyvrtQj8KwdgNPS6Ym_QvgX1BMeauQZewZA,5751
|
|
@@ -99,7 +98,7 @@ claude_mpm/hooks/builtin/ticket_extraction_hook_example.py,sha256=4wNhS2tFUXgdcv
|
|
|
99
98
|
claude_mpm/hooks/builtin/todo_agent_prefix_hook.py,sha256=v_4w2vcZIt0bkZxqdHmgtN79yHZ1gviuhhBws0FHpIQ,10226
|
|
100
99
|
claude_mpm/hooks/builtin/workflow_start_hook.py,sha256=EQrtYD9qLMLSYPl3oQinEheZAJ2i5EO_h2jhhR8lmt0,7490
|
|
101
100
|
claude_mpm/hooks/claude_hooks/__init__.py,sha256=bMUwt2RzDGAcEbtDMA7vWS1uJsauOY0OixIe4pHwgQ0,129
|
|
102
|
-
claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=
|
|
101
|
+
claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=xK7Gr6hQRM3bRsubNEy9l4sc3W4vq8z5UyaYmK9wN6A,30814
|
|
103
102
|
claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=otLBTac_sBI3s5dH--9nok59tU91_U_vV5kmzc2fmRo,1995
|
|
104
103
|
claude_mpm/models/__init__.py,sha256=vy2NLX2KT9QeH76SjCYh9dOYKPLRgxGrnwkQFAg08gc,465
|
|
105
104
|
claude_mpm/models/agent_definition.py,sha256=y9XQOED_maOyiYKhNB8H8MfJJMBN0vIYPS_wCXnRJmA,6647
|
|
@@ -130,6 +129,7 @@ claude_mpm/scripts/claude-mpm-socketio,sha256=usdZgOQs0vjAKBhUcGJoRPnzJt3wYZDQM8
|
|
|
130
129
|
claude_mpm/scripts/claude_mpm_monitor.html,sha256=24g1YWNB8PZ2S_q2xLQycK0Z06e2C7yOTsEm6qQRVUI,17634
|
|
131
130
|
claude_mpm/scripts/install_socketio_server.py,sha256=Bx3BL48EF1peH111k_HU7tQdcUU6QVthAemGQcPsano,15522
|
|
132
131
|
claude_mpm/scripts/launch_monitor.py,sha256=fAgRFJknrYq31SEWD9oEAEH2xvR3Lh_bzRPGDKEAFGg,4437
|
|
132
|
+
claude_mpm/scripts/launch_socketio_dashboard.py,sha256=BaZv_nuNY8rIFu76YhKswnrJAdM1pA3xNpb5-hQfsiA,9274
|
|
133
133
|
claude_mpm/scripts/manage_version.py,sha256=5c86LD-_m0AlWqfgjRF6BH3Jc7n_nm5Z7hFVqB3iExQ,17524
|
|
134
134
|
claude_mpm/scripts/socketio_daemon.py,sha256=HuRr7kzwwZskgLjHqf0wSW8IndsTs2s-aeR1tgnPMag,5115
|
|
135
135
|
claude_mpm/scripts/socketio_server_manager.py,sha256=94uTdTuMHvTZrBNSrOHSKMz_z0AINl3uoc44msWfEz8,15522
|
|
@@ -139,7 +139,7 @@ claude_mpm/services/agent_capabilities_generator.py,sha256=hWG0zV2InmzrDMxSbQzjV
|
|
|
139
139
|
claude_mpm/services/agent_deployment.py,sha256=DtK1BX2yCrutUkQdVPD01mYHm-ya36l3EPOnEcaDfog,67961
|
|
140
140
|
claude_mpm/services/agent_lifecycle_manager.py,sha256=fWggWu5rT7FkDQrRHyw05Y4KaNN9cXeaCinsymPJwM4,50127
|
|
141
141
|
claude_mpm/services/agent_management_service.py,sha256=eX5n6w17b9urcogVdr4V-kXcuo7yyjORTrIihjF8PeQ,22853
|
|
142
|
-
claude_mpm/services/agent_memory_manager.py,sha256=
|
|
142
|
+
claude_mpm/services/agent_memory_manager.py,sha256=xFwOxcknDhsZRuMtMoenbroWtbMuWmtSXpc6pcK2bm4,37277
|
|
143
143
|
claude_mpm/services/agent_modification_tracker.py,sha256=uxELrXtFt5Xlv0mhRbq5ynagEowczTRrv3mAp-aRZFc,34519
|
|
144
144
|
claude_mpm/services/agent_persistence_service.py,sha256=B_Vz43zCKWq47zWkoibcia-Qwn2y3gARu7MV5Cpiptc,2893
|
|
145
145
|
claude_mpm/services/agent_profile_loader.py,sha256=4D1Xj0vgqV8wN7Y3r8lijh7ghy5cVGU5t5s931sVqGc,23133
|
|
@@ -150,14 +150,16 @@ claude_mpm/services/deployed_agent_discovery.py,sha256=GoXhho5EBz_FZDDl4xUWW_BnP
|
|
|
150
150
|
claude_mpm/services/framework_agent_loader.py,sha256=QdRSYRurYF3YbAXJwIGei71BffD5AqOVcV3ktRPdk7g,14018
|
|
151
151
|
claude_mpm/services/framework_claude_md_generator.py,sha256=3kHmkRLHTex6HFZ4DhbLVQb48j-5dAoy1q6UW1Qf7U8,22914
|
|
152
152
|
claude_mpm/services/hook_service.py,sha256=hkpN8mXXYCwzdLVJwsoVg_fw5seEmei-q0ZzQyNoCXA,14200
|
|
153
|
+
claude_mpm/services/memory_builder.py,sha256=T-JrR5vlLN5ucXSK0uQsgYQwpFIIXbHFbJOT_U9orz4,19288
|
|
154
|
+
claude_mpm/services/memory_optimizer.py,sha256=YLs9DHH2c7T-t5Mr-OIlV4-vWdvKxS0KN3CIDGiPa5A,23332
|
|
155
|
+
claude_mpm/services/memory_router.py,sha256=opUFx2xJs1vZN6FyGo8yubqLRwQ6apIm1htZ_6yyoBc,17693
|
|
153
156
|
claude_mpm/services/shared_prompt_cache.py,sha256=D04lrRWyg0lHyqGcAHy7IYvRHRKSg6EOpAJwBUPa2wk,29890
|
|
154
157
|
claude_mpm/services/socketio_client_manager.py,sha256=2Ly63iiGA_BUzf73UwQDu9Q75wA1C4O1CWFv8hi8bms,18074
|
|
155
|
-
claude_mpm/services/socketio_server.py,sha256=
|
|
158
|
+
claude_mpm/services/socketio_server.py,sha256=1DIBfm6oqI7whB02bvSjEmNU1KkatrExqJjlxadw0JA,47687
|
|
156
159
|
claude_mpm/services/standalone_socketio_server.py,sha256=XhsJ40Me3eSFHDpweIouy7dIqHK1aubikHCY275mUXk,24764
|
|
157
160
|
claude_mpm/services/ticket_manager.py,sha256=Ki11YjBkDax8BFVSaDdOBk3K4VU5gvdbgq9AmCyyoZ0,7454
|
|
158
161
|
claude_mpm/services/ticket_manager_di.py,sha256=pIsIGncbboKzBYSRQTO7ZX5MuQzV6iFfIflvKe6u1jw,11123
|
|
159
162
|
claude_mpm/services/ticketing_service_original.py,sha256=Dg3TYKsy0Z3JCqV5rlMBXeMrhrkAGxOgAMUNRZtJIhw,16680
|
|
160
|
-
claude_mpm/services/websocket_server.py,sha256=mC033w8TjwUGIv1r4uedtvQBPQQ_X7ZUA-u3ANugdMo,13553
|
|
161
163
|
claude_mpm/services/framework_claude_md_generator/README.md,sha256=_-ty72t2afPagDVVUEizPkhs4BYkCeqCnZDNPgZAYtY,3511
|
|
162
164
|
claude_mpm/services/framework_claude_md_generator/__init__.py,sha256=OtnwxLiJektfFtsKdkHM1X27rKkFiNd_rcf4843ziKw,7334
|
|
163
165
|
claude_mpm/services/framework_claude_md_generator/content_assembler.py,sha256=CZlw84bBWjvK68VQhjAdLnMxXBXipZtcdyPtYWLdrKo,6590
|
|
@@ -211,9 +213,9 @@ claude_mpm/utils/paths.py,sha256=Xv0SZWdZRkRjN9e6clBcA165ya00GNQxt7SwMz51tfA,101
|
|
|
211
213
|
claude_mpm/validation/__init__.py,sha256=bJ19g9lnk7yIjtxzN8XPegp87HTFBzCrGQOpFgRTf3g,155
|
|
212
214
|
claude_mpm/validation/agent_validator.py,sha256=GCA2b2rKhKDeaNyUqWxTiWIs3sDdWjD9cgOFRp9K6ic,18227
|
|
213
215
|
claude_mpm/web/open_dashboard.py,sha256=aXUc6LzUMwmTQMkl_h2jjvICimr-ED4FPMHP_9mnrgQ,1108
|
|
214
|
-
claude_mpm-3.2.
|
|
215
|
-
claude_mpm-3.2.
|
|
216
|
-
claude_mpm-3.2.
|
|
217
|
-
claude_mpm-3.2.
|
|
218
|
-
claude_mpm-3.2.
|
|
219
|
-
claude_mpm-3.2.
|
|
216
|
+
claude_mpm-3.3.2.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
|
|
217
|
+
claude_mpm-3.3.2.dist-info/METADATA,sha256=QAeWt_WCNC36nD1Q8d5OdTW0kEUB0-mHLmbagNBflXY,5304
|
|
218
|
+
claude_mpm-3.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
219
|
+
claude_mpm-3.3.2.dist-info/entry_points.txt,sha256=3_d7wLrg9sRmQ1SfrFGWoTNL8Wrd6lQb2XVSYbTwRIg,324
|
|
220
|
+
claude_mpm-3.3.2.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
221
|
+
claude_mpm-3.3.2.dist-info/RECORD,,
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
author: test-script
|
|
3
|
-
model_preference: claude-3-sonnet
|
|
4
|
-
specializations: []
|
|
5
|
-
tags:
|
|
6
|
-
- test
|
|
7
|
-
- integration
|
|
8
|
-
type: custom
|
|
9
|
-
version: 1.0.0
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Test Integration Agent
|
|
13
|
-
|
|
14
|
-
## 🎯 Primary Role
|
|
15
|
-
test-integration-agent agent
|
|
16
|
-
|
|
17
|
-
## 🎯 When to Use This Agent
|
|
18
|
-
|
|
19
|
-
**Select this agent when:**
|
|
20
|
-
|
|
21
|
-
**Do NOT select for:**
|
|
22
|
-
|
|
23
|
-
## 🔧 Core Capabilities
|
|
24
|
-
|
|
25
|
-
## 🔑 Authority & Permissions
|
|
26
|
-
|
|
27
|
-
### ✅ Exclusive Write Access
|
|
28
|
-
|
|
29
|
-
### ❌ Forbidden Operations
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
**Agent Type**: custom
|
|
33
|
-
**Model Preference**: claude-3-sonnet
|
|
34
|
-
**Version**: 1.0.0
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
"""Socket.IO logging handler with connection pooling for real-time log streaming.
|
|
2
|
-
|
|
3
|
-
This handler now uses the Socket.IO connection pool to reduce overhead
|
|
4
|
-
and implement circuit breaker and batching patterns for log events.
|
|
5
|
-
|
|
6
|
-
WHY connection pooling approach:
|
|
7
|
-
- Reduces connection setup/teardown overhead by 80%
|
|
8
|
-
- Implements circuit breaker for resilience during outages
|
|
9
|
-
- Provides micro-batching for high-frequency log events
|
|
10
|
-
- Maintains persistent connections for better performance
|
|
11
|
-
- Falls back gracefully when pool unavailable
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
import logging
|
|
15
|
-
import json
|
|
16
|
-
import os
|
|
17
|
-
from datetime import datetime
|
|
18
|
-
from typing import Optional
|
|
19
|
-
|
|
20
|
-
# Connection pool import
|
|
21
|
-
try:
|
|
22
|
-
from .socketio_pool import get_connection_pool
|
|
23
|
-
POOL_AVAILABLE = True
|
|
24
|
-
except ImportError:
|
|
25
|
-
POOL_AVAILABLE = False
|
|
26
|
-
get_connection_pool = None
|
|
27
|
-
|
|
28
|
-
# Fallback imports
|
|
29
|
-
from ..services.websocket_server import get_server_instance
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class WebSocketHandler(logging.Handler):
|
|
33
|
-
"""Logging handler that broadcasts log messages via Socket.IO connection pool.
|
|
34
|
-
|
|
35
|
-
WHY connection pooling design:
|
|
36
|
-
- Uses shared connection pool to reduce overhead by 80%
|
|
37
|
-
- Implements circuit breaker pattern for resilience
|
|
38
|
-
- Provides micro-batching for high-frequency log events (50ms window)
|
|
39
|
-
- Maintains persistent connections across log events
|
|
40
|
-
- Falls back gracefully when pool unavailable
|
|
41
|
-
"""
|
|
42
|
-
|
|
43
|
-
def __init__(self, level=logging.NOTSET):
|
|
44
|
-
super().__init__(level)
|
|
45
|
-
self._websocket_server = None
|
|
46
|
-
self._connection_pool = None
|
|
47
|
-
self._pool_initialized = False
|
|
48
|
-
self._debug = os.environ.get('CLAUDE_MPM_HOOK_DEBUG', '').lower() == 'true'
|
|
49
|
-
|
|
50
|
-
def _init_connection_pool(self):
|
|
51
|
-
"""Initialize connection pool with lazy loading.
|
|
52
|
-
|
|
53
|
-
WHY connection pool approach:
|
|
54
|
-
- Reuses connections to reduce overhead by 80%
|
|
55
|
-
- Implements circuit breaker for resilience
|
|
56
|
-
- Provides micro-batching for high-frequency log events
|
|
57
|
-
- Falls back gracefully when unavailable
|
|
58
|
-
"""
|
|
59
|
-
if not POOL_AVAILABLE:
|
|
60
|
-
if self._debug:
|
|
61
|
-
import sys
|
|
62
|
-
print("Connection pool not available for logging - falling back to legacy mode", file=sys.stderr)
|
|
63
|
-
return
|
|
64
|
-
|
|
65
|
-
try:
|
|
66
|
-
self._connection_pool = get_connection_pool()
|
|
67
|
-
if self._debug:
|
|
68
|
-
import sys
|
|
69
|
-
print("WebSocket handler: Using Socket.IO connection pool", file=sys.stderr)
|
|
70
|
-
except Exception as e:
|
|
71
|
-
if self._debug:
|
|
72
|
-
import sys
|
|
73
|
-
print(f"WebSocket handler: Failed to initialize connection pool: {e}", file=sys.stderr)
|
|
74
|
-
self._connection_pool = None
|
|
75
|
-
|
|
76
|
-
@property
|
|
77
|
-
def websocket_server(self):
|
|
78
|
-
"""Get WebSocket server instance lazily (fallback compatibility)."""
|
|
79
|
-
if self._websocket_server is None:
|
|
80
|
-
self._websocket_server = get_server_instance()
|
|
81
|
-
return self._websocket_server
|
|
82
|
-
|
|
83
|
-
def emit(self, record: logging.LogRecord):
|
|
84
|
-
"""Emit a log record via Socket.IO connection pool with batching.
|
|
85
|
-
|
|
86
|
-
WHY connection pool approach:
|
|
87
|
-
- Uses shared connection pool to reduce overhead by 80%
|
|
88
|
-
- Implements circuit breaker for resilience during outages
|
|
89
|
-
- Provides micro-batching for high-frequency log events (50ms window)
|
|
90
|
-
- Falls back gracefully when pool unavailable
|
|
91
|
-
"""
|
|
92
|
-
try:
|
|
93
|
-
# Skip connection pool logs to avoid infinite recursion
|
|
94
|
-
if "socketio" in record.name.lower() or record.name == "claude_mpm.websocket_client_proxy":
|
|
95
|
-
return
|
|
96
|
-
|
|
97
|
-
# Skip circuit breaker logs to avoid recursion
|
|
98
|
-
if "circuit_breaker" in record.name.lower() or "socketio_pool" in record.name.lower():
|
|
99
|
-
return
|
|
100
|
-
|
|
101
|
-
# Format the log message
|
|
102
|
-
log_data = {
|
|
103
|
-
"timestamp": datetime.utcnow().isoformat() + "Z",
|
|
104
|
-
"level": record.levelname,
|
|
105
|
-
"logger": record.name,
|
|
106
|
-
"message": self.format(record),
|
|
107
|
-
"module": record.module,
|
|
108
|
-
"function": record.funcName,
|
|
109
|
-
"line": record.lineno,
|
|
110
|
-
"thread": record.thread,
|
|
111
|
-
"thread_name": record.threadName
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
# Add exception info if present
|
|
115
|
-
if record.exc_info:
|
|
116
|
-
import traceback
|
|
117
|
-
log_data["exception"] = ''.join(traceback.format_exception(*record.exc_info))
|
|
118
|
-
|
|
119
|
-
# Lazy initialize connection pool on first use
|
|
120
|
-
if POOL_AVAILABLE and not self._pool_initialized:
|
|
121
|
-
self._pool_initialized = True
|
|
122
|
-
self._init_connection_pool()
|
|
123
|
-
|
|
124
|
-
# Try connection pool first (preferred method)
|
|
125
|
-
if self._connection_pool:
|
|
126
|
-
try:
|
|
127
|
-
self._connection_pool.emit_event('/log', 'message', log_data)
|
|
128
|
-
if self._debug:
|
|
129
|
-
import sys
|
|
130
|
-
print(f"Emitted pooled Socket.IO log event: /log/message", file=sys.stderr)
|
|
131
|
-
return
|
|
132
|
-
except Exception as e:
|
|
133
|
-
if self._debug:
|
|
134
|
-
import sys
|
|
135
|
-
print(f"Connection pool log emit failed: {e}", file=sys.stderr)
|
|
136
|
-
|
|
137
|
-
# Fallback to legacy WebSocket server
|
|
138
|
-
if self.websocket_server:
|
|
139
|
-
try:
|
|
140
|
-
# Debug: Check what type of server we have
|
|
141
|
-
server_type = type(self.websocket_server).__name__
|
|
142
|
-
if server_type == "SocketIOClientProxy":
|
|
143
|
-
# For exec mode with Socket.IO client proxy, skip local emission
|
|
144
|
-
# The persistent server process handles its own logging
|
|
145
|
-
return
|
|
146
|
-
|
|
147
|
-
# Use new Socket.IO event format
|
|
148
|
-
if hasattr(self.websocket_server, 'log_message'):
|
|
149
|
-
self.websocket_server.log_message(
|
|
150
|
-
level=record.levelname,
|
|
151
|
-
message=self.format(record),
|
|
152
|
-
module=record.module
|
|
153
|
-
)
|
|
154
|
-
else:
|
|
155
|
-
# Legacy fallback
|
|
156
|
-
self.websocket_server.broadcast_event("log.message", log_data)
|
|
157
|
-
|
|
158
|
-
if self._debug:
|
|
159
|
-
import sys
|
|
160
|
-
print(f"Emitted legacy log event", file=sys.stderr)
|
|
161
|
-
|
|
162
|
-
except Exception as fallback_error:
|
|
163
|
-
if self._debug:
|
|
164
|
-
import sys
|
|
165
|
-
print(f"Legacy log emit failed: {fallback_error}", file=sys.stderr)
|
|
166
|
-
|
|
167
|
-
except Exception as e:
|
|
168
|
-
# Don't let logging errors break the application
|
|
169
|
-
# But print for debugging
|
|
170
|
-
import sys
|
|
171
|
-
print(f"WebSocketHandler.emit error: {e}", file=sys.stderr)
|
|
172
|
-
|
|
173
|
-
def __del__(self):
|
|
174
|
-
"""Cleanup connection pool on handler destruction.
|
|
175
|
-
|
|
176
|
-
NOTE: Connection pool is shared across handlers, so we don't
|
|
177
|
-
shut it down here. The pool manages its own lifecycle.
|
|
178
|
-
"""
|
|
179
|
-
# Connection pool is managed globally, no cleanup needed per handler
|
|
180
|
-
pass
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
class WebSocketFormatter(logging.Formatter):
|
|
184
|
-
"""Custom formatter for WebSocket log messages."""
|
|
185
|
-
|
|
186
|
-
def __init__(self):
|
|
187
|
-
super().__init__(
|
|
188
|
-
fmt='%(name)s - %(levelname)s - %(message)s',
|
|
189
|
-
datefmt='%Y-%m-%d %H:%M:%S'
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
def setup_websocket_logging(logger_name: Optional[str] = None, level: int = logging.INFO):
|
|
194
|
-
"""
|
|
195
|
-
Set up WebSocket logging for a logger.
|
|
196
|
-
|
|
197
|
-
Args:
|
|
198
|
-
logger_name: Name of logger to configure (None for root logger)
|
|
199
|
-
level: Minimum logging level to broadcast
|
|
200
|
-
|
|
201
|
-
Returns:
|
|
202
|
-
The configured WebSocketHandler
|
|
203
|
-
"""
|
|
204
|
-
handler = WebSocketHandler(level=level)
|
|
205
|
-
handler.setFormatter(WebSocketFormatter())
|
|
206
|
-
|
|
207
|
-
# Get the logger
|
|
208
|
-
logger = logging.getLogger(logger_name)
|
|
209
|
-
|
|
210
|
-
# Add handler if not already present
|
|
211
|
-
# Check by handler type to avoid duplicates
|
|
212
|
-
has_websocket_handler = any(
|
|
213
|
-
isinstance(h, WebSocketHandler) for h in logger.handlers
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
if not has_websocket_handler:
|
|
217
|
-
logger.addHandler(handler)
|
|
218
|
-
|
|
219
|
-
return handler
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
def remove_websocket_logging(logger_name: Optional[str] = None):
|
|
223
|
-
"""Remove WebSocket handler from a logger."""
|
|
224
|
-
logger = logging.getLogger(logger_name)
|
|
225
|
-
|
|
226
|
-
# Remove all WebSocket handlers
|
|
227
|
-
handlers_to_remove = [
|
|
228
|
-
h for h in logger.handlers if isinstance(h, WebSocketHandler)
|
|
229
|
-
]
|
|
230
|
-
|
|
231
|
-
for handler in handlers_to_remove:
|
|
232
|
-
logger.removeHandler(handler)
|
|
233
|
-
handler.close()
|