claude-mpm 5.6.8__py3-none-any.whl → 5.6.9__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/VERSION CHANGED
@@ -1 +1 @@
1
- 5.6.8
1
+ 5.6.9
@@ -28,4 +28,4 @@
28
28
  "claude-4-opus"
29
29
  ]
30
30
  }
31
- }
31
+ }
@@ -110,3 +110,24 @@ class InvalidRuntimeError(CommanderAPIError):
110
110
  f"Invalid runtime: {runtime}",
111
111
  400,
112
112
  )
113
+
114
+
115
+ class TmuxNoSpaceError(CommanderAPIError):
116
+ """Raised when tmux has no space for a new pane."""
117
+
118
+ def __init__(self, message: str | None = None):
119
+ """Initialize tmux no space error.
120
+
121
+ Args:
122
+ message: Custom error message (optional)
123
+ """
124
+ default_msg = (
125
+ "Unable to create session: tmux has no space for new pane. "
126
+ "Try closing some sessions or resize your terminal window. "
127
+ "You can also create a new tmux window with `tmux new-window`."
128
+ )
129
+ super().__init__(
130
+ "TMUX_NO_SPACE",
131
+ message or default_msg,
132
+ 409,
133
+ )
@@ -5,13 +5,19 @@ This module implements REST endpoints for creating and managing tool sessions
5
5
  """
6
6
 
7
7
  import logging
8
+ import subprocess # nosec B404 - needed for tmux error handling
8
9
  import uuid
9
10
  from typing import List
10
11
 
11
12
  from fastapi import APIRouter, Response
12
13
 
13
14
  from ...models import ToolSession
14
- from ..errors import InvalidRuntimeError, ProjectNotFoundError, SessionNotFoundError
15
+ from ..errors import (
16
+ InvalidRuntimeError,
17
+ ProjectNotFoundError,
18
+ SessionNotFoundError,
19
+ TmuxNoSpaceError,
20
+ )
15
21
  from ..schemas import CreateSessionRequest, SessionResponse
16
22
 
17
23
  router = APIRouter()
@@ -112,6 +118,7 @@ async def create_session(project_id: str, req: CreateSessionRequest) -> SessionR
112
118
  Raises:
113
119
  ProjectNotFoundError: If project_id doesn't exist
114
120
  InvalidRuntimeError: If runtime is not supported
121
+ TmuxNoSpaceError: If tmux has no space for new pane
115
122
 
116
123
  Example:
117
124
  POST /api/projects/abc-123/sessions
@@ -144,10 +151,16 @@ async def create_session(project_id: str, req: CreateSessionRequest) -> SessionR
144
151
  session_id = str(uuid.uuid4())
145
152
 
146
153
  # Create tmux pane for session
147
- tmux_target = tmux_orch.create_pane(
148
- pane_id=f"{project.name}-{req.runtime}",
149
- working_dir=project.path,
150
- )
154
+ try:
155
+ tmux_target = tmux_orch.create_pane(
156
+ pane_id=f"{project.name}-{req.runtime}",
157
+ working_dir=project.path,
158
+ )
159
+ except subprocess.CalledProcessError as e:
160
+ stderr = e.stderr.decode() if e.stderr else ""
161
+ if "no space for new pane" in stderr.lower():
162
+ raise TmuxNoSpaceError() from None
163
+ raise # Re-raise other subprocess errors
151
164
 
152
165
  # Create session object
153
166
  session = ToolSession(
@@ -1 +1 @@
1
- export const env={}
1
+ export const env={}
@@ -43,10 +43,10 @@ https://github.com/jquery/jquery/blob/master/src/event.js
43
43
  vec2 v = ab*vec2(-cs.y,cs.x);
44
44
  w = w + dot(p-u,v)/(dot(p-u,u)+dot(v,v));
45
45
  }
46
-
46
+
47
47
  // compute final point and distance
48
48
  float d = length(p-ab*vec2(cos(w),sin(w)));
49
-
49
+
50
50
  // return signed distance
51
51
  return (dot(p/ab,p/ab)>1.0) ? d : -d;
52
52
  }
@@ -55,16 +55,16 @@ https://github.com/jquery/jquery/blob/master/src/event.js
55
55
 
56
56
  uniform mat3 uPanZoomMatrix;
57
57
  uniform int uAtlasSize;
58
-
58
+
59
59
  // instanced
60
60
  in vec2 aPosition; // a vertex from the unit square
61
-
61
+
62
62
  in mat3 aTransform; // used to transform verticies, eg into a bounding box
63
63
  in int aVertType; // the type of thing we are rendering
64
64
 
65
65
  // the z-index that is output when using picking mode
66
66
  in vec4 aIndex;
67
-
67
+
68
68
  // For textures
69
69
  in int aAtlasId; // which shader unit/atlas to use
70
70
  in vec4 aTex; // x/y/w/h of texture in atlas
@@ -84,7 +84,7 @@ https://github.com/jquery/jquery/blob/master/src/event.js
84
84
  out vec4 vColor;
85
85
  out vec2 vPosition;
86
86
  // flat values are not interpolated
87
- flat out int vAtlasId;
87
+ flat out int vAtlasId;
88
88
  flat out int vVertType;
89
89
  flat out vec2 vTopRight;
90
90
  flat out vec2 vBotLeft;
@@ -92,7 +92,7 @@ https://github.com/jquery/jquery/blob/master/src/event.js
92
92
  flat out vec4 vBorderColor;
93
93
  flat out vec2 vBorderWidth;
94
94
  flat out vec4 vIndex;
95
-
95
+
96
96
  void main(void) {
97
97
  int vid = gl_VertexID;
98
98
  vec2 position = aPosition; // TODO make this a vec3, simplifies some code below
@@ -115,7 +115,7 @@ https://github.com/jquery/jquery/blob/master/src/event.js
115
115
 
116
116
  gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);
117
117
  }
118
- else if(aVertType == `).concat(_t," || aVertType == ").concat(pa,`
118
+ else if(aVertType == `).concat(_t," || aVertType == ").concat(pa,`
119
119
  || aVertType == `).concat(sn," || aVertType == ").concat(ga,`) { // simple shapes
120
120
 
121
121
  // the bounding box is needed by the fragment shader
@@ -145,7 +145,7 @@ https://github.com/jquery/jquery/blob/master/src/event.js
145
145
 
146
146
  gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);
147
147
  vColor = aColor;
148
- }
148
+ }
149
149
  else if(aVertType == `).concat(Xl,`) {
150
150
  vec2 pointA = aPointAPointB.xy;
151
151
  vec2 pointB = aPointAPointB.zw;
@@ -194,7 +194,7 @@ https://github.com/jquery/jquery/blob/master/src/event.js
194
194
  }
195
195
 
196
196
  vColor = aColor;
197
- }
197
+ }
198
198
  else if(aVertType == `).concat(Ts,` && vid < 3) {
199
199
  // massage the first triangle into an edge arrow
200
200
  if(vid == 0)
@@ -246,16 +246,16 @@ https://github.com/jquery/jquery/blob/master/src/event.js
246
246
  `).concat(vm,`
247
247
 
248
248
  vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha
249
- return vec4(
249
+ return vec4(
250
250
  top.rgb + (bot.rgb * (1.0 - top.a)),
251
- top.a + (bot.a * (1.0 - top.a))
251
+ top.a + (bot.a * (1.0 - top.a))
252
252
  );
253
253
  }
254
254
 
255
255
  vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance
256
256
  // scale to the zoom level so that borders don't look blurry when zoomed in
257
257
  // note 1.5 is an aribitrary value chosen because it looks good
258
- return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d)));
258
+ return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d)));
259
259
  }
260
260
 
261
261
  void main(void) {
@@ -263,7 +263,7 @@ https://github.com/jquery/jquery/blob/master/src/event.js
263
263
  // look up the texel from the texture unit
264
264
  `).concat(i.map(function(u){return"if(vAtlasId == ".concat(u,") outColor = texture(uTexture").concat(u,", vTexCoord);")}).join(`
265
265
  else `),`
266
- }
266
+ }
267
267
  else if(vVertType == `).concat(Ts,`) {
268
268
  // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out';
269
269
  outColor = blend(vColor, uBGColor);
@@ -272,7 +272,7 @@ https://github.com/jquery/jquery/blob/master/src/event.js
272
272
  else if(vVertType == `).concat(_t,` && vBorderWidth == vec2(0.0)) { // simple rectangle with no border
273
273
  outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done
274
274
  }
275
- else if(vVertType == `).concat(_t," || vVertType == ").concat(pa,`
275
+ else if(vVertType == `).concat(_t," || vVertType == ").concat(pa,`
276
276
  || vVertType == `).concat(sn," || vVertType == ").concat(ga,`) { // use SDF
277
277
 
278
278
  float outerBorder = vBorderWidth[0];
@@ -307,7 +307,7 @@ https://github.com/jquery/jquery/blob/master/src/event.js
307
307
  vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor;
308
308
  vec4 innerBorderColor = blend(vBorderColor, vColor);
309
309
  outColor = distInterp(innerBorderColor, outerColor, d);
310
- }
310
+ }
311
311
  else {
312
312
  vec4 outerColor;
313
313
  if(innerBorder == 0.0 && outerBorder == 0.0) {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 5.6.8
3
+ Version: 5.6.9
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
2
- claude_mpm/VERSION,sha256=TPELZ4bSYPd1-ct4QNuu3EP8d8XmrNtWst8upoSOwfY,6
2
+ claude_mpm/VERSION,sha256=nJST2g_21xhxfQk5QgAosXHOMTc1xwppJdB3d85to-g,6
3
3
  claude_mpm/__init__.py,sha256=AGfh00BHKvLYD-UVFw7qbKtl7NMRIzRXOWw7vEuZ-h4,2214
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=pz3lTrZZR5HhV3eZzYtIbtBwWo7iM6pkBHP_ixxmI6Y,6827
@@ -19,7 +19,7 @@ claude_mpm/agents/agent_loader.py,sha256=lrE6IMmvFeGVFguNTmi8d6WYyMb8goqcXj6RmiP
19
19
  claude_mpm/agents/agent_loader_integration.py,sha256=cU1LKCYvopZn66UefwzZxJUdTSxn6HLxdbukTjmP-KM,7280
20
20
  claude_mpm/agents/agents_metadata.py,sha256=XklRSaYxKt8_2hnGn9xr-V15RMcm57Fi-QzPbAe4ZR4,9867
21
21
  claude_mpm/agents/async_agent_loader.py,sha256=w9zk88SZUBycQeTHKrUiUez0CY_BrWZi13-EF6IOwWU,14597
22
- claude_mpm/agents/base_agent.json,sha256=CTy670tMO_U7KiVuqtjk4LNU-TDociRNHX_J6hfEcH4,27615
22
+ claude_mpm/agents/base_agent.json,sha256=9bWj1sL1AjGcvXdF8AiFZy0S6q_sJa2Zo_NGg9v8wkM,27614
23
23
  claude_mpm/agents/frontmatter_validator.py,sha256=H0R7rCrNdaok5q7yCxEX2uiIcELU286tgGbTK05tRf0,27471
24
24
  claude_mpm/agents/system_agent_config.py,sha256=19axX46jzvY6svETjfMaFyAYtgbQO2PRXKJ-VYnCPDk,24137
25
25
  claude_mpm/agents/templates/README.md,sha256=qqhKh10y2CGuoytQmqlQtXCa_RD1ZmeT0m24S5VPQnI,18511
@@ -165,14 +165,14 @@ claude_mpm/commander/adapters/claude_code.py,sha256=YGWZN9Y3QUdYC0mHQ-D5su7PDT6b
165
165
  claude_mpm/commander/adapters/communication.py,sha256=Gs_vmQ630a_CQLS1x0B0lgcQCOfW82_VZeqto3a9ZYQ,11707
166
166
  claude_mpm/commander/api/__init__.py,sha256=I73MajIx-r6iIEYVJ4eHo-InMwfKOruN78VXF_eMEIk,376
167
167
  claude_mpm/commander/api/app.py,sha256=r7swU1wF0frST6zOObcBjq9VM45VfDHT4aNldAjEPKc,3129
168
- claude_mpm/commander/api/errors.py,sha256=s_CJp9sryKViSEPBCrEwTSgX1NlndBe_ozbrTqOqEHk,2939
168
+ claude_mpm/commander/api/errors.py,sha256=cBwHbC-rt543ZmE1DNLFv5XBqeUD58z7f4fGJF1x5uA,3590
169
169
  claude_mpm/commander/api/schemas.py,sha256=VmoBRP4NUIIvkH0Do3af3nxXS3Q97sYCJpJurv20tXU,4933
170
170
  claude_mpm/commander/api/routes/__init__.py,sha256=xI13W9tT4zYGaCotLMw4rKpGDhjkvi1YqNRoLh-8E5I,229
171
171
  claude_mpm/commander/api/routes/events.py,sha256=XxSEpRdcty9cSrkRMjEMALktqZfcGGx5n-rHexGFZSs,4879
172
172
  claude_mpm/commander/api/routes/inbox.py,sha256=edwse_fHITO_jICd3kOTGFim41tx2GbB0MN55Mg036M,5276
173
173
  claude_mpm/commander/api/routes/messages.py,sha256=-jhR8jYd_CwhVW0WeM4un9WLzSMueLAhMrDrg080E5A,3916
174
174
  claude_mpm/commander/api/routes/projects.py,sha256=rN27P4D45Qzp0kE49PCM1bonLI4ZS65-q-u-3HprRto,7226
175
- claude_mpm/commander/api/routes/sessions.py,sha256=ONvsHNoJA2cplXh75MUQSL_VF-pRf0s0PkUy9016StY,5833
175
+ claude_mpm/commander/api/routes/sessions.py,sha256=LWlehH534YVoPl_4Cfhxa_GePRbRnYQ49hXf3e70x0s,6275
176
176
  claude_mpm/commander/api/routes/work.py,sha256=BKx9fd7iqvgxYUDm1stui7TGev6dfhuvP3X-_8pC2-U,7257
177
177
  claude_mpm/commander/chat/__init__.py,sha256=5Iiya2YPkF54OvtZgL4NNT0zp5PCsZnnE7D6l19aYnA,243
178
178
  claude_mpm/commander/chat/cli.py,sha256=mHWEXjDll7OFIi2frTwfMs0wnJ71aFkFHX3vJr_iEGM,3151
@@ -320,7 +320,7 @@ claude_mpm/dashboard/__init__.py,sha256=b5QKcz0kt_ZMCFkac7caRzA8DlMiICG9VzmunmxH
320
320
  claude_mpm/dashboard/api/simple_directory.py,sha256=b-ExWd9wutYIYa4dTYBW0y1s0hsElPn4_LLJglahUEY,7140
321
321
  claude_mpm/dashboard/static/svelte-build/favicon.svg,sha256=8WC8JPrjCWsajGxiyBr7WA7Sj896PtUZbYkVjNwd2K0,395
322
322
  claude_mpm/dashboard/static/svelte-build/index.html,sha256=QBZs_8cByu6lVPp5Upp1gxXDblACI74nlRjWIGqK6Pk,1173
323
- claude_mpm/dashboard/static/svelte-build/_app/env.js,sha256=Iu6wbiiLCcW1n9HhTsju7Y83nmMPQC3Myj_B4dOvWXM,20
323
+ claude_mpm/dashboard/static/svelte-build/_app/env.js,sha256=PFiLdc3lIpkAIqcK3hezpttwaPaFrEy4sxoQT34lhwY,19
324
324
  claude_mpm/dashboard/static/svelte-build/_app/version.json,sha256=SqUDoSw125-s8xi_Diq0Oy3VjnesiIuCvs7CTZgjwIE,28
325
325
  claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css,sha256=BLNxSTDsHOlvyrjeUgRzDhb4A3kPpI1pnIayA6UNBPM,28444
326
326
  claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css,sha256=HC7G-CRMmKQWPd26CLlZAL1pa0oUXXQbZ6A88CbTqvg,15985
@@ -332,7 +332,7 @@ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js,sha25
332
332
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js,sha256=roecan2HnDRdCpfyDiBPgrwlIi5l5IEWT-CTweT5jDI,29257
333
333
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js,sha256=7kfWcHYrVg1L5QidpYuUJJvy1YdmERs_srdTBnEad34,27498
334
334
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.js,sha256=LAuNlMt2us_gAtGKbVup7j2MXE8emIrHx0I82WAe9Hk,571
335
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js,sha256=bc2Upkbz5NyfLBmTs6l1D25pzEVLAaFVnCglNqBdPqA,442400
335
+ claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js,sha256=3VAewprLyc27yeOkKh16A3YpviIhZ_ZQr2pw0Kfs7Rs,442442
336
336
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BRcwIQNr.js,sha256=n6_iC4k_7w0Rxpw3zt0p6KoyL3_2S0EOJ_Nw7MmEH2Y,11160
337
337
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BSNlmTZj.js,sha256=Pcz47MBoSVumz-ilxfVzQOSz67t1FtEb0lADSpVoad0,523
338
338
  claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js,sha256=GNpl2Q76B1KopKPiIz6MrmyucF0eoqMzRhQjeZ2bJ3w,5891
@@ -432,7 +432,7 @@ claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc,sha256=vh
432
432
  claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-312.pyc,sha256=bj168CD_Md4vpYJfS9YvPafP7-nw1hAUnuuEpzSQNKY,27815
433
433
  claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-314.pyc,sha256=RVz6WvW-sD7kLbh6S5a96WarpPvZv4_qfFMR5SN8WUo,30603
434
434
  claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc,sha256=Tt3L5Ye7RJCLvIAaz6uLwKe3WGEaMLx6WElvqK60G0Q,38428
435
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-314.pyc,sha256=hxxLzkAFGV4sBK3NiYZ6zVlc1Cq9yTc8YPzp-mf5sxo,37219
435
+ claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-314.pyc,sha256=Mlynkrh8uwlSOTCEH0LYbDM0gxqJmaCL9Gb5DIt_rJ4,38836
436
436
  claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc,sha256=Xu_hwOf9AG0mZthl5gcDcVv68FiSo5KgZ6lDxdZXCfU,11185
437
437
  claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-312.pyc,sha256=w9SKmvg60p6kvNzuOIddYE-X9LYt-ZQzX3LWiKs4nZY,10055
438
438
  claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-314.pyc,sha256=oJhMGouqaFI1u3NZryHoRh6ucfPKHPe8GufcsPzi89o,11081
@@ -1109,10 +1109,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
1109
1109
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
1110
1110
  claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
1111
1111
  claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
1112
- claude_mpm-5.6.8.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
1113
- claude_mpm-5.6.8.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
1114
- claude_mpm-5.6.8.dist-info/METADATA,sha256=8lS7j7tnOGNu9c1kzaDSZwcUK-D84gQbbCb_MoncT_4,14983
1115
- claude_mpm-5.6.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1116
- claude_mpm-5.6.8.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
1117
- claude_mpm-5.6.8.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1118
- claude_mpm-5.6.8.dist-info/RECORD,,
1112
+ claude_mpm-5.6.9.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
1113
+ claude_mpm-5.6.9.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
1114
+ claude_mpm-5.6.9.dist-info/METADATA,sha256=zFOkKrO7QsszgLAusCpXjQiG-wsHRWCsCsxOIYntIL0,14983
1115
+ claude_mpm-5.6.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1116
+ claude_mpm-5.6.9.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
1117
+ claude_mpm-5.6.9.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1118
+ claude_mpm-5.6.9.dist-info/RECORD,,