claude-mpm 3.2.1__tar.gz → 3.3.0__tar.gz
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-3.2.1 → claude_mpm-3.3.0}/CHANGELOG.md +6 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/PKG-INFO +1 -1
- claude_mpm-3.3.0/VERSION +1 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/package.json +1 -1
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/INSTRUCTIONS.md +71 -2
- claude_mpm-3.3.0/src/claude_mpm/scripts/launch_socketio_dashboard.py +261 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/socketio_server.py +224 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm.egg-info/PKG-INFO +1 -1
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm.egg-info/SOURCES.txt +1 -0
- claude_mpm-3.2.1/VERSION +0 -1
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.ai-trackdown/config.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.ai-trackdown/project.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.aitrackdown/project.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.aitrackdown-config.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/.claude.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/.claude.json.backup +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/data_engineer.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/documentation.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/engineer.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/ops.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/pm.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/qa.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/research.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/security.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/agents/version_control.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/commands/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/commands/mpm.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/hooks.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/scripts/command_router.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/settings.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753448752189-02zmkd.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753448752717-t1o960.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753448753258-cz40yi.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753448753816-5cj75h.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753449561020-uh844i.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753449676191-16dqe8.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753449766642-8sffyp.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753449795813-bj9blv.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753449953467-ru9ods.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753449966919-eb4aoq.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753450012330-ad1k3g.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753450254970-pvrwgd.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753450398246-etdteg.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753450789791-z5ptuf.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753450861209-w6so3e.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753451302996-01ahjc.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753451384857-mvpmcf.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753451508182-v942iw.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753451525128-q52z98.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753452958143-rd4nut.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753453029843-tyfjfo.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753460195020-02l99b.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753460396315-znuas3.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753460428488-tcy6i5.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753460542243-l181zr.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753461397341-fdy0v7.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753469116715-v6dpx9.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753477538332-i5g2cr.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753477560204-7vo17t.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753477883629-hsjia3.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753477961808-oiyqie.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753478292112-5g3i0g.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753478337101-xe1uid.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753478342176-env102.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753478361973-nr1cwq.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753478372714-lamo9k.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753478388184-yxkay7.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753478392376-eygj04.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/shell-snapshots/snapshot-zsh-1753482158558-cr2h0o.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/0aaf869f-0009-4249-b955-1c3942ff239f-agent-0aaf869f-0009-4249-b955-1c3942ff239f.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/0c24ded8-9422-489d-8d18-f83cc0737181-agent-0c24ded8-9422-489d-8d18-f83cc0737181.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/0d9501e6-77b0-4e8f-b132-bae208ed740a-agent-0d9501e6-77b0-4e8f-b132-bae208ed740a.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-048a118d-f0ea-4dce-90d3-d851514aa36a.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-0600940d-65ff-4678-ac90-9e0d42a3e138.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-1b8badbc-b05e-459e-b16c-a974f28673be.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-231626b2-0ce7-44fb-82e4-a9e72fdcecc4.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-2799acc0-b5e3-4086-940e-62bd2a5bbd7d.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-42b0c458-9d5f-4745-826e-7c618d3a7026.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-a324c872-b962-4438-b794-7966f5d7a7a9.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-ce91e7fd-64af-4f57-b691-1487c2db8d0b.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-dd250db2-edbb-43fc-a143-3eeafc0cd7fa.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1060b0c4-2bf3-414f-bd75-d6f8dcad9eb5-agent-f0cbf9cd-0136-4bca-b0e0-c66aa58d3aeb.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/109c42c9-0afd-4a5b-a1b3-e515e31b6a2f-agent-109c42c9-0afd-4a5b-a1b3-e515e31b6a2f.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1163a193-8464-4195-8281-6b875b5d987d-agent-1163a193-8464-4195-8281-6b875b5d987d.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/128d2198-5b02-422c-9531-f3396cbf0ce0-agent-128d2198-5b02-422c-9531-f3396cbf0ce0.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/16c51506-6afa-43aa-b199-da0c853f99a9-agent-16c51506-6afa-43aa-b199-da0c853f99a9.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1736bdd7-71f4-49a0-934d-18e3aa5e0b43-agent-1736bdd7-71f4-49a0-934d-18e3aa5e0b43.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1869eedc-69fc-4e81-a8ac-f57bd8e3946b-agent-1869eedc-69fc-4e81-a8ac-f57bd8e3946b.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/1a97dfda-12e5-4f13-8c8a-731373694a1c-agent-1a97dfda-12e5-4f13-8c8a-731373694a1c.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/283ac74b-5516-43f8-9548-24ded2b643b1-agent-283ac74b-5516-43f8-9548-24ded2b643b1.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/2ba08561-559e-4f64-9522-8d6c340e47da-agent-2ba08561-559e-4f64-9522-8d6c340e47da.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/31da8ed9-e1a5-40c8-91c8-8e9b51ca24a9-agent-31da8ed9-e1a5-40c8-91c8-8e9b51ca24a9.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/35194d51-6b8f-4ef5-b771-b0aa03f49a88-agent-35194d51-6b8f-4ef5-b771-b0aa03f49a88.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/3d1c0368-e607-4f47-b02d-7c0922cc0f25-agent-3d1c0368-e607-4f47-b02d-7c0922cc0f25.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/3d46c625-6377-4296-b9b3-22bc19341092-agent-3d46c625-6377-4296-b9b3-22bc19341092.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/40072791-2f2f-4743-b763-ec19321ccb0b-agent-40072791-2f2f-4743-b763-ec19321ccb0b.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/4157ab6d-5025-4862-82eb-5818c43c5a8c-agent-4157ab6d-5025-4862-82eb-5818c43c5a8c.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/458938f3-a317-46f3-8359-86f05ccacc7d-agent-458938f3-a317-46f3-8359-86f05ccacc7d.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/4dcf1510-e396-47bb-ac32-f62811ae9774-agent-4dcf1510-e396-47bb-ac32-f62811ae9774.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/4e71e501-1438-4c7d-8a89-18818b16ccb5-agent-4e71e501-1438-4c7d-8a89-18818b16ccb5.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/4eb9a1c4-92b0-44ee-9322-6ba0442efd42-agent-4eb9a1c4-92b0-44ee-9322-6ba0442efd42.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/4f57fa86-e804-4c8e-a0ff-196835df5bc9-agent-4f57fa86-e804-4c8e-a0ff-196835df5bc9.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/518e2724-687e-4ae3-bde9-582c8718695a-agent-518e2724-687e-4ae3-bde9-582c8718695a.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/51abf2eb-4e5a-4731-bd23-76cffe656a40-agent-51abf2eb-4e5a-4731-bd23-76cffe656a40.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/53c4beda-27f3-4247-ada4-f904320995ad-agent-53c4beda-27f3-4247-ada4-f904320995ad.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/56581e8b-07b1-4174-bf81-c280a3dee6b4-agent-56581e8b-07b1-4174-bf81-c280a3dee6b4.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/58848224-56e6-49f6-a4e5-c08f8f70c426-agent-58848224-56e6-49f6-a4e5-c08f8f70c426.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/58cf2d09-fd22-4a2e-8c74-c247ece6c802-agent-58cf2d09-fd22-4a2e-8c74-c247ece6c802.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/5bcc2e07-617c-4659-b82f-6b630ea891ff-agent-5bcc2e07-617c-4659-b82f-6b630ea891ff.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/5bf326e7-b61a-4d82-b483-94d5d7085755-agent-5bf326e7-b61a-4d82-b483-94d5d7085755.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/5dee78ec-d9ed-4484-b101-5490217fe423-agent-5dee78ec-d9ed-4484-b101-5490217fe423.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/5f6c7624-6a25-4ed9-be09-03fa3a70c4d8-agent-5f6c7624-6a25-4ed9-be09-03fa3a70c4d8.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/606431c0-6b47-4fb8-b386-132918a3aa0b-agent-606431c0-6b47-4fb8-b386-132918a3aa0b.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/6078e96f-e9a4-435f-8d2f-cf70346ebafe-agent-6078e96f-e9a4-435f-8d2f-cf70346ebafe.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/69e5a32b-bf2c-4264-93cd-6ac84b44ca9f-agent-69e5a32b-bf2c-4264-93cd-6ac84b44ca9f.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/6b729248-47b8-4657-ad7f-7f09fff21151-agent-6b729248-47b8-4657-ad7f-7f09fff21151.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/6d6970e8-f95f-468b-a8b8-3eacca8f1220-agent-6d6970e8-f95f-468b-a8b8-3eacca8f1220.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/6ec6cfa4-f2fd-4515-9c95-3ea74fbc571b-agent-6ec6cfa4-f2fd-4515-9c95-3ea74fbc571b.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/713e1bda-caa2-4cb9-a5a2-b7c6fec5776f-agent-713e1bda-caa2-4cb9-a5a2-b7c6fec5776f.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/71e6da9f-0dcd-4abd-ae8f-a5af695d9624-agent-71e6da9f-0dcd-4abd-ae8f-a5af695d9624.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/7653f086-93df-4423-98ce-640305e10823-agent-7653f086-93df-4423-98ce-640305e10823.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/76656734-acd3-411c-b333-f274dabae19c-agent-76656734-acd3-411c-b333-f274dabae19c.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/78150f02-9204-437c-9e12-9e800f3f73b9-agent-78150f02-9204-437c-9e12-9e800f3f73b9.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/7dda0a32-2834-4a47-9734-9ae9ca5b1a31-agent-7dda0a32-2834-4a47-9734-9ae9ca5b1a31.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/84b4d3c7-5506-4e4e-87dd-9cc48b8bc2ec-agent-84b4d3c7-5506-4e4e-87dd-9cc48b8bc2ec.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/86ce0d12-f82e-49b2-b553-2cd8a7e188a3-agent-86ce0d12-f82e-49b2-b553-2cd8a7e188a3.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/87626114-6cb1-43ef-978a-bb35f612e4eb-agent-87626114-6cb1-43ef-978a-bb35f612e4eb.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/880d3ea5-649e-449e-88bc-664a291ec338-agent-880d3ea5-649e-449e-88bc-664a291ec338.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/8962e6d9-0fc0-4578-bb08-a5dfbc2dbe5e-agent-8962e6d9-0fc0-4578-bb08-a5dfbc2dbe5e.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/8f998b9e-5f18-4ade-bd69-74c95a210f6a-agent-8f998b9e-5f18-4ade-bd69-74c95a210f6a.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/929364bd-aa69-4831-850e-37f8ab63803d-agent-929364bd-aa69-4831-850e-37f8ab63803d.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/95479b6c-cfbf-4bb7-9e00-b95a0b385775-agent-95479b6c-cfbf-4bb7-9e00-b95a0b385775.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/9628cc3a-355a-48f0-ab54-c28ac2e05dfe-agent-9628cc3a-355a-48f0-ab54-c28ac2e05dfe.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/a877fe3a-7057-49a9-9726-239ddb3421ee-agent-a877fe3a-7057-49a9-9726-239ddb3421ee.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/a9136d1b-6e01-4879-972f-5fcdde5e08d7-agent-a9136d1b-6e01-4879-972f-5fcdde5e08d7.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/b10ff15f-3c8c-46d7-93b4-a0d4d5ec4003-agent-b10ff15f-3c8c-46d7-93b4-a0d4d5ec4003.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/b1206d13-f0ec-4f53-a746-a845732fefd7-agent-b1206d13-f0ec-4f53-a746-a845732fefd7.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/b61be2e4-7de3-4e1b-b636-2232190ffc5c-agent-b61be2e4-7de3-4e1b-b636-2232190ffc5c.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/b80ad406-64d1-4a6c-b781-15496265fae0-agent-b80ad406-64d1-4a6c-b781-15496265fae0.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/babc6eac-d7d6-498a-8176-e09e00423a12-agent-babc6eac-d7d6-498a-8176-e09e00423a12.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/bf4b7700-9630-466e-afb0-8904fbddac42-agent-bf4b7700-9630-466e-afb0-8904fbddac42.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/c2189d0d-9c2b-400a-bf7c-3989ef6cd37d-agent-c2189d0d-9c2b-400a-bf7c-3989ef6cd37d.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/c35ee595-142f-454b-bb36-dc434d4a80a6-agent-c35ee595-142f-454b-bb36-dc434d4a80a6.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/c629949d-4641-45ff-81d3-d7c8f353da81-agent-c629949d-4641-45ff-81d3-d7c8f353da81.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/c8cecbec-a3bb-4507-98a4-c590a4e919b2-agent-c8cecbec-a3bb-4507-98a4-c590a4e919b2.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/cce78c00-7309-4bc4-802c-3bad75be09cc-agent-cce78c00-7309-4bc4-802c-3bad75be09cc.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/d55a3a18-0143-4401-ba56-ea630982c105-agent-d55a3a18-0143-4401-ba56-ea630982c105.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/d881887b-49bc-4fda-acda-c866681c8f13-agent-d881887b-49bc-4fda-acda-c866681c8f13.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/db3e76fb-7b9d-4f1c-8822-cce448fdf9e6-agent-db3e76fb-7b9d-4f1c-8822-cce448fdf9e6.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/dc7344a6-cd2e-4f20-a945-deb2e39f4fbc-agent-dc7344a6-cd2e-4f20-a945-deb2e39f4fbc.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/eb12ed58-94e3-490a-b8c8-b2912fa77fbe-agent-eb12ed58-94e3-490a-b8c8-b2912fa77fbe.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/ef4c285d-d79b-4c6e-a458-49cb26bf3c0a-agent-ef4c285d-d79b-4c6e-a458-49cb26bf3c0a.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/f295b25f-51d8-4fff-b71d-aa18d7028466-agent-f295b25f-51d8-4fff-b71d-aa18d7028466.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/f2a683d3-4d16-4c94-bf52-03efaf45f7f1-agent-f2a683d3-4d16-4c94-bf52-03efaf45f7f1.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/f536b1f5-879c-4236-9718-599337ffc815-agent-f536b1f5-879c-4236-9718-599337ffc815.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/fabcbe8a-6751-454b-a240-e9393391e2e9-agent-fabcbe8a-6751-454b-a240-e9393391e2e9.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/fdebc52b-3519-44c8-a3af-ce87f39272cd-agent-fdebc52b-3519-44c8-a3af-ce87f39272cd.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude/todos/fe57db22-5ef9-4522-9423-5c20dd665ef6-agent-fe57db22-5ef9-4522-9423-5c20dd665ef6.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/.claude.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/.claude.json.backup +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/.gitignore +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/agents/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/agents/poc-engineer.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/agents/poc-qa.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/agents/poc-researcher.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/agents/test-agent.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/agents/test-agent.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/config/project.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/projects/-Users-masa-Projects-claude-mpm/1f2d5a1d-a2fd-4c26-a1b2-3822f3a5fbf5.jsonl +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/projects/-Users-masa-Projects-claude-mpm/9217ce88-3ece-41db-adc8-9fc8532c6314.jsonl +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/shell-snapshots/snapshot-zsh-1753447830017-dejufl.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/shell-snapshots/snapshot-zsh-1753447830478-zr6tpi.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/stats/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/statsig/statsig.cached.evaluations.85901da9f9 +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/statsig/statsig.last_modified_time.evaluations +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/statsig/statsig.session_id.2656274335 +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/statsig/statsig.stable_id.2656274335 +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/todos/1f2d5a1d-a2fd-4c26-a1b2-3822f3a5fbf5-agent-1f2d5a1d-a2fd-4c26-a1b2-3822f3a5fbf5.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-mpm/todos/9217ce88-3ece-41db-adc8-9fc8532c6314-agent-9217ce88-3ece-41db-adc8-9fc8532c6314.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.claude-pm/config/project.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.githooks/pre-commit +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.gitignore +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.npmignore +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.python-version +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/.trackdown.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/CLAUDE.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/INSTALL.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/LICENSE +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/MANIFEST.in +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/Makefile +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/README.npm.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/bin/claude-mpm +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/bin/claude-mpm-hooks +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/bin/ticket +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/claude-mpm +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/config/mcp_services.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/docker/Dockerfile +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/docker/Dockerfile.npm +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/docker/Dockerfile.npm-local +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/docker/Dockerfile.npm-simple +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/docker/Dockerfile.npm-test +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/docker/Dockerfile.pip +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/examples/awesome-patterns/enhanced_claude_md_example.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/examples/awesome-patterns/slash_command_example.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/examples/awesome-patterns/validation_first_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/examples/dependency_injection_demo.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/examples/json_rpc_hooks_demo.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/examples/todo_prefix_hook_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/examples/todo_prefix_hook_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/install.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/install_dev.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/npm-bin/claude-mpm.js +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/pyproject.toml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/requirements.txt +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/add_agent_versioning.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/analyze_framework_loaders.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/analyze_git_clickup_correlation.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/check_version_sync.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/claude-mpm +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/cleanup_logs.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/consolidate_services.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/convert_agents_to_yaml.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/demo/subprocess_before_after.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/demo/subprocess_improvements_demo.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/demo_hook_behavior.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/deploy_local.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/fix_all_fallback_imports.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/fix_all_imports.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/fix_fallback_imports.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/install_hooks.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/interactive_wrapper.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/launch_with_agents.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/migrate_agents_to_new_schema.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/migrate_logging_imports.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/migrate_to_json_rpc_hooks.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/monitor_mcp_services.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/mpm_test.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/publish.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/release.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/remove_remaining_ticketing.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/remove_ticketing_references.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/requirements_analysis.txt +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/run_all_tests.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/run_e2e_tests.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/run_mpm.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/setup_local_mcp.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/show_pm_system_prompt.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/standardize_imports.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/sync_tickets_github.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_capabilities_usage.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_compatibility.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_content_verification.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_deployment.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_deployment_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_deployment_validation.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_functionality_complete.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_loader.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_loader_edge_cases.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_loader_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_loading.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_manager_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_migration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_name_consistency.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_name_formats.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_schema_system.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_validation_security.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agent_version_display.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_agents_command.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_basic_functionality.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_deployment_dynamic_capabilities.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_deployment_manager_capabilities.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_dynamic_capabilities.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_dynamic_capabilities_comprehensive.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_edge_cases.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_file_access_implementation.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_git_clickup_analysis.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_hello_world.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_helloworld_python_hook.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_helloworld_shell_hook.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_integration_performance.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_integration_simple.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_interactive_setup.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_mcp_integration.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_mcp_solution.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_migration_flow.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_mpm_agents_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_mpm_command.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_no_agents.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_npm_install.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_npm_install_simple.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_performance.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_pm_instructions.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_qa_script_access.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_qa_script_creation.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_real_deployment.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_real_deployment_capabilities.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_redeployment.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_release_enhancements.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_runtime_capabilities.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_runtime_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_schema_validation.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_semantic_versioning.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_simple_runner_logging.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_subagent_demo.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_system_health.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_todo_hook.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_todo_task_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_version_comparison.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_version_detection.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_version_management.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_version_migration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/test_working_dir_simple.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/run_tests.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/run_tests_updated.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_agent_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_claude_direct.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_hello_world.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_interactive.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_logging.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_orchestration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_pexpect.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_pexpect_install.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/tests/test_subprocess.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/ticket +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/trace_deployment.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/validate_agent_configuration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/validate_agent_schema.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/scripts/verify_imports.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/setup.cfg +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/setup.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/__main__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/agent-template.yaml +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/agent_loader.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/agent_loader_integration.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/agents_metadata.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/backups/INSTRUCTIONS.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/base_agent.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/base_agent_loader.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/schema/agent_schema.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/system_agent_config.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/backup/research_agent_20250726_234551.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/backup/security_agent_20250726_234551.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/data_engineer.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/documentation.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/engineer.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/ops.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/pm.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/qa.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/research.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/security.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/test-integration-agent.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/templates/version_control.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/agents/test_fix_deployment/.claude-pm/config/project.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/commands/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/commands/agents.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/commands/info.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/commands/memory.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/commands/run.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/commands/tickets.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/commands/ui.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/parser.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli/utils.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli_module/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli_module/args.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli_module/commands.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli_module/migration_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/cli_module/refactoring_guide.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/config/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/config/socketio_config.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/constants.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/agent_name_normalizer.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/agent_registry.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/agent_registry.py.bak +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/agent_session_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/base_service.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/base_service.py.bak +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/claude_runner.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/config.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/config_aliases.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/container.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/factories.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/framework_loader.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/hook_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/injectable_service.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/interfaces.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/logger.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/minimal_framework_loader.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/mixins.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/pm_hook_interceptor.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/service_registry.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/session_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/simple_runner.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/socketio_pool.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/tool_access_control.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/core/websocket_handler.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/deployment_paths.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/experimental/cli_enhancements.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/generators/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/generators/agent_profile_generator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/base_hook.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/logging_hook_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/memory_hooks_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/mpm_command_hook.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/post_delegation_hook_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/pre_delegation_hook_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/submit_hook_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/ticket_extraction_hook_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/todo_agent_prefix_hook.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/builtin/workflow_start_hook.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/claude_hooks/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/claude_hooks/hook_handler.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/claude_hooks/hook_wrapper.sh +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/memory_integration_hook.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/tool_call_interceptor.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/hooks/validation_hooks.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/init.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/models/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/models/agent_definition.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/SUBPROCESS_DESIGN.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/direct_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/factory.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/hook_enabled_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/hook_integration_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/interactive_subprocess_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/pexpect_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/pty_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/simple_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/subprocess_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/system_prompt_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/orchestration/archive/wrapper_orchestrator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/schemas/README_SECURITY.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/schemas/agent_schema.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/schemas/agent_schema_documentation.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/schemas/agent_schema_security_notes.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/schemas/examples/standard_workflow.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/schemas/ticket_workflow_documentation.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/schemas/ticket_workflow_schema.json +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/schemas/workflow_validator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/claude-mpm-socketio +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/claude_mpm_monitor.html +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/install_socketio_server.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/launch_monitor.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/manage_version.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/socketio_daemon.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/socketio_server_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/scripts/ticket.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_capabilities_generator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_deployment.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_lifecycle_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_management_service.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_memory_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_modification_tracker.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_persistence_service.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_profile_loader.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_registry.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/agent_versioning.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/base_agent_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/deployed_agent_discovery.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_agent_loader.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/content_assembler.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/content_validator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/deployment_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/footer.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/header.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/orchestration_principles.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/role_designation.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/section_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator/version_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/framework_claude_md_generator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/hook_service.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/README.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/backup_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/config_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/deduplication_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/framework_protector.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/operations.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/state_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/template_deployer.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/validation_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/version_control_helper.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/parent_directory_manager/version_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/shared_prompt_cache.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/socketio_client_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/standalone_socketio_server.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/ticket_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/ticket_manager_di.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/ticketing_service_original.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/version_control/VERSION +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/version_control/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/version_control/branch_strategy.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/version_control/conflict_resolution.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/version_control/git_operations.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/version_control/semantic_versioning.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/services/websocket_server.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/ui/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/ui/rich_terminal_ui.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/ui/terminal_ui.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/config_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/dependency_manager.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/error_handler.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/framework_detection.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/import_migration_example.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/imports.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/path_operations.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/utils/paths.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/validation/__init__.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/validation/agent_validator.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm/web/open_dashboard.py +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm.egg-info/dependency_links.txt +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm.egg-info/entry_points.txt +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm.egg-info/requires.txt +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/src/claude_mpm.egg-info/top_level.txt +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/ticket +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/epics/EP-0001.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/epics/EP-0002-subagent-pivot.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/epics/EP-0002.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/epics/EP-0003.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/epics/EP-0004.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/CONVERSION_MAPPING.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0001.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0002.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0003.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0004.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0005.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0006.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0007.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0008.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0009.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0010.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0011.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0012.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0013.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0014.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0015.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0016.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0017.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0018.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0019.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0020.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0021.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0022.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0023.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0024.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0025.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0026.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0027.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0028.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0029.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0030.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0031.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/issues/ISS-0032.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0001.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0002.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0003.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0004.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0005.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0006.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0007.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0008.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0009.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0011.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0016.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0017.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0018.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0019.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0020.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0021.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0022.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0023.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0024.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0025.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0026.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0027.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0028.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0029.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0030.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0031.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0032.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0033.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0034.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0035.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0036.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0037.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0038.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0039.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0040.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0041.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0042.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0043.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0044.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0045.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/tickets/tasks/TSK-0046.md +0 -0
- {claude_mpm-3.2.1 → claude_mpm-3.3.0}/uninstall.sh +0 -0
|
@@ -5,6 +5,12 @@ All notable changes to claude-mpm will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.3.0] - 2025-08-04
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Other Changes
|
|
12
|
+
|
|
13
|
+
- Add test file for git diff feature ([5a99eae])
|
|
8
14
|
## [3.2.0-beta.1] - 2025-07-30
|
|
9
15
|
|
|
10
16
|
### Added
|
claude_mpm-3.3.0/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.3.0
|
|
@@ -13,8 +13,77 @@ You are **Claude Multi-Agent Project Manager (claude-mpm)** - your **SOLE functi
|
|
|
13
13
|
|
|
14
14
|
**ABSOLUTE RULE**: ALL other work must be delegated to specialized agents via Task Tool.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
## BEHAVIOR RULES
|
|
17
|
+
|
|
18
|
+
### Professional Communication Standards
|
|
19
|
+
**Maintain neutral, professional tone as default** - avoid overeager enthusiasm that undermines credibility.
|
|
20
|
+
|
|
21
|
+
### Prohibited Overeager Phrases
|
|
22
|
+
**NEVER use these excessive responses**:
|
|
23
|
+
- "You're absolutely right!" / "Absolutely!"
|
|
24
|
+
- "Excellent!" / "Perfect!" / "Brilliant!" / "Amazing!" / "Fantastic!"
|
|
25
|
+
- "Great idea!" / "Wonderful suggestion!" / "Outstanding!"
|
|
26
|
+
- "That's incredible!" / "Genius!" / "Superb!"
|
|
27
|
+
- Other overly enthusiastic or sycophantic responses
|
|
28
|
+
|
|
29
|
+
### Appropriate Acknowledgments
|
|
30
|
+
**Use neutral, professional acknowledgments**:
|
|
31
|
+
- "Understood" / "I see" / "Acknowledged" / "Noted"
|
|
32
|
+
- "Yes" / "Correct" / "That's accurate" / "Confirmed"
|
|
33
|
+
- "I'll proceed with that approach" / "That makes sense"
|
|
34
|
+
|
|
35
|
+
### Context-Sensitive Tone Guidelines
|
|
36
|
+
- **Default**: Professional neutrality for all interactions
|
|
37
|
+
- **Match urgency**: Respond appropriately to critical/time-sensitive requests
|
|
38
|
+
- **Reserve enthusiasm**: Only for genuinely exceptional achievements or milestones
|
|
39
|
+
- **Technical discussions**: Focus on accuracy and precision over emotional responses
|
|
40
|
+
|
|
41
|
+
### Response Examples
|
|
42
|
+
|
|
43
|
+
**Bad Examples**:
|
|
44
|
+
```
|
|
45
|
+
❌ "You're absolutely right! That's a brilliant approach!"
|
|
46
|
+
❌ "Excellent suggestion! This is going to be amazing!"
|
|
47
|
+
❌ "Perfect! I love this idea - it's fantastic!"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Good Examples**:
|
|
51
|
+
```
|
|
52
|
+
✅ "Understood. I'll implement that approach."
|
|
53
|
+
✅ "That's accurate. Proceeding with the research phase."
|
|
54
|
+
✅ "Confirmed. This aligns with the project requirements."
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Production-Ready Implementation Standards
|
|
58
|
+
**PROHIBITED without explicit user instruction**:
|
|
59
|
+
- **Fallback to simpler solutions**: Never downgrade requirements or reduce scope
|
|
60
|
+
- **Mock implementations**: Never use mocks, stubs, or placeholder implementations outside test environments
|
|
61
|
+
|
|
62
|
+
**Why this matters**:
|
|
63
|
+
- Production systems require complete, robust implementations
|
|
64
|
+
- Simplified solutions create technical debt and security vulnerabilities
|
|
65
|
+
- Mock implementations mask integration issues and business logic gaps
|
|
66
|
+
|
|
67
|
+
**What NOT to do**:
|
|
68
|
+
```
|
|
69
|
+
❌ "I'll create a simple version first and we can enhance it later"
|
|
70
|
+
❌ "Let me mock the database connection for now"
|
|
71
|
+
❌ "I'll use a placeholder API call instead of the real implementation"
|
|
72
|
+
❌ "This simplified approach should work for most cases"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**What TO do instead**:
|
|
76
|
+
```
|
|
77
|
+
✅ "I need to research the full requirements before implementing"
|
|
78
|
+
✅ "Let me analyze the production constraints and dependencies"
|
|
79
|
+
✅ "I'll implement the complete solution including error handling"
|
|
80
|
+
✅ "This requires integration with the actual database/API"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**When simplification IS appropriate**:
|
|
84
|
+
- User explicitly requests: "make this simpler", "create a basic version", "prototype this"
|
|
85
|
+
- User explicitly authorizes: "use mocks for now", "skip error handling for this demo"
|
|
86
|
+
- Test environments: Unit tests, integration tests, development fixtures
|
|
18
87
|
|
|
19
88
|
|
|
20
89
|
## Memory Management
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Socket.IO Dashboard Launcher for Claude MPM.
|
|
3
|
+
|
|
4
|
+
WHY: This script provides a streamlined solution for launching the Socket.IO
|
|
5
|
+
monitoring dashboard using only the Python Socket.IO server implementation.
|
|
6
|
+
It handles server startup, dashboard creation, and browser opening.
|
|
7
|
+
|
|
8
|
+
DESIGN DECISION: Uses only python-socketio and aiohttp for a clean,
|
|
9
|
+
Node.js-free implementation. This simplifies deployment and reduces
|
|
10
|
+
dependencies while maintaining full functionality.
|
|
11
|
+
|
|
12
|
+
The script handles:
|
|
13
|
+
1. Python Socket.IO server startup
|
|
14
|
+
2. Dashboard HTML creation and serving
|
|
15
|
+
3. Browser opening with proper URL construction
|
|
16
|
+
4. Background/daemon mode operation
|
|
17
|
+
5. Graceful error handling and user feedback
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import argparse
|
|
21
|
+
import os
|
|
22
|
+
import sys
|
|
23
|
+
import time
|
|
24
|
+
import webbrowser
|
|
25
|
+
import signal
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
from typing import Optional
|
|
28
|
+
|
|
29
|
+
# Get script directory for relative paths
|
|
30
|
+
SCRIPT_DIR = Path(__file__).parent
|
|
31
|
+
PROJECT_ROOT = SCRIPT_DIR.parent.parent.parent # Go up to project root from src/claude_mpm/scripts/
|
|
32
|
+
|
|
33
|
+
def check_python_dependencies() -> bool:
|
|
34
|
+
"""Check if Python Socket.IO dependencies are available.
|
|
35
|
+
|
|
36
|
+
WHY: We need python-socketio and aiohttp packages for the server.
|
|
37
|
+
This function validates the environment and provides clear feedback.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
bool: True if Python dependencies are ready, False otherwise
|
|
41
|
+
"""
|
|
42
|
+
try:
|
|
43
|
+
import socketio
|
|
44
|
+
import aiohttp
|
|
45
|
+
socketio_version = getattr(socketio, '__version__', 'unknown')
|
|
46
|
+
aiohttp_version = getattr(aiohttp, '__version__', 'unknown')
|
|
47
|
+
print(f"✓ python-socketio v{socketio_version} detected")
|
|
48
|
+
print(f"✓ aiohttp v{aiohttp_version} detected")
|
|
49
|
+
return True
|
|
50
|
+
except ImportError as e:
|
|
51
|
+
print(f"❌ Required Python packages missing: {e}")
|
|
52
|
+
print(" Install with: pip install python-socketio aiohttp")
|
|
53
|
+
return False
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def check_dashboard_availability(port: int):
|
|
58
|
+
"""Check if the modular dashboard is available.
|
|
59
|
+
|
|
60
|
+
WHY: The new architecture uses a modular dashboard served by the Socket.IO server
|
|
61
|
+
instead of creating static HTML files. This validates the proper dashboard exists.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
port: Port number for the Socket.IO server
|
|
65
|
+
"""
|
|
66
|
+
# Check if new modular dashboard is available
|
|
67
|
+
web_templates_dir = PROJECT_ROOT / "src" / "claude_mpm" / "web" / "templates"
|
|
68
|
+
modular_dashboard = web_templates_dir / "index.html"
|
|
69
|
+
if modular_dashboard.exists():
|
|
70
|
+
print(f"✓ Modular dashboard found at {modular_dashboard}")
|
|
71
|
+
return True
|
|
72
|
+
else:
|
|
73
|
+
print(f"⚠️ Modular dashboard not found at {modular_dashboard}")
|
|
74
|
+
print(f" Expected path: {modular_dashboard}")
|
|
75
|
+
return False
|
|
76
|
+
|
|
77
|
+
def check_server_running(port: int) -> bool:
|
|
78
|
+
"""Check if a Socket.IO server is already running on the specified port.
|
|
79
|
+
|
|
80
|
+
WHY: We want to avoid starting multiple servers on the same port
|
|
81
|
+
and provide clear feedback to users about existing servers.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
port: Port number to check
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
bool: True if server is running, False otherwise
|
|
88
|
+
"""
|
|
89
|
+
try:
|
|
90
|
+
import socket
|
|
91
|
+
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
92
|
+
s.settimeout(1)
|
|
93
|
+
result = s.connect_ex(('127.0.0.1', port))
|
|
94
|
+
if result == 0:
|
|
95
|
+
print(f"✓ Socket.IO server already running on port {port}")
|
|
96
|
+
return True
|
|
97
|
+
except Exception:
|
|
98
|
+
pass
|
|
99
|
+
|
|
100
|
+
return False
|
|
101
|
+
|
|
102
|
+
def start_python_server(port: int, daemon: bool = False) -> Optional:
|
|
103
|
+
"""Start the Python Socket.IO server.
|
|
104
|
+
|
|
105
|
+
WHY: Uses python-socketio and aiohttp for a clean, Node.js-free
|
|
106
|
+
implementation that handles all Socket.IO functionality.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
port: Port number for the server
|
|
110
|
+
daemon: Whether to run in background mode
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
Thread object if successful, None otherwise
|
|
114
|
+
"""
|
|
115
|
+
try:
|
|
116
|
+
# Import the existing Python Socket.IO server
|
|
117
|
+
sys.path.insert(0, str(PROJECT_ROOT / "src"))
|
|
118
|
+
from claude_mpm.services.socketio_server import SocketIOServer
|
|
119
|
+
|
|
120
|
+
server = SocketIOServer(port=port)
|
|
121
|
+
|
|
122
|
+
if daemon:
|
|
123
|
+
# Start in background thread
|
|
124
|
+
server.start()
|
|
125
|
+
print(f"🚀 Python Socket.IO server started on port {port}")
|
|
126
|
+
return server.thread
|
|
127
|
+
else:
|
|
128
|
+
# Start and block
|
|
129
|
+
print(f"🚀 Starting Python Socket.IO server on port {port}")
|
|
130
|
+
server.start()
|
|
131
|
+
|
|
132
|
+
# Keep alive until interrupted
|
|
133
|
+
try:
|
|
134
|
+
while server.running:
|
|
135
|
+
time.sleep(1)
|
|
136
|
+
except KeyboardInterrupt:
|
|
137
|
+
print("\\n🛑 Shutting down Python server...")
|
|
138
|
+
server.stop()
|
|
139
|
+
|
|
140
|
+
return None
|
|
141
|
+
|
|
142
|
+
except Exception as e:
|
|
143
|
+
print(f"❌ Failed to start Python server: {e}")
|
|
144
|
+
return None
|
|
145
|
+
|
|
146
|
+
def open_dashboard(port: int, no_browser: bool = False):
|
|
147
|
+
"""Open the Socket.IO dashboard in browser.
|
|
148
|
+
|
|
149
|
+
WHY: Users need easy access to the monitoring dashboard. This function
|
|
150
|
+
handles URL construction and browser opening with fallback options.
|
|
151
|
+
Now uses the new modular dashboard location.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
port: Port number for the Socket.IO server
|
|
155
|
+
no_browser: Skip browser opening if True
|
|
156
|
+
"""
|
|
157
|
+
if no_browser:
|
|
158
|
+
print(f"📊 Dashboard available at: http://localhost:{port}/dashboard")
|
|
159
|
+
return
|
|
160
|
+
|
|
161
|
+
dashboard_url = f"http://localhost:{port}/dashboard?autoconnect=true&port={port}"
|
|
162
|
+
|
|
163
|
+
try:
|
|
164
|
+
print(f"🌐 Opening dashboard: {dashboard_url}")
|
|
165
|
+
webbrowser.open(dashboard_url)
|
|
166
|
+
|
|
167
|
+
except Exception as e:
|
|
168
|
+
print(f"⚠️ Failed to open browser automatically: {e}")
|
|
169
|
+
print(f"📊 Dashboard: {dashboard_url}")
|
|
170
|
+
|
|
171
|
+
def cleanup_handler(signum, frame):
|
|
172
|
+
"""Handle cleanup on shutdown signals.
|
|
173
|
+
|
|
174
|
+
WHY: Proper cleanup ensures sockets are closed and resources freed
|
|
175
|
+
when the script is terminated.
|
|
176
|
+
"""
|
|
177
|
+
print("\\n🛑 Shutting down Socket.IO launcher...")
|
|
178
|
+
sys.exit(0)
|
|
179
|
+
|
|
180
|
+
def main():
|
|
181
|
+
"""Main entry point for the Socket.IO dashboard launcher.
|
|
182
|
+
|
|
183
|
+
WHY: This orchestrates the entire launch process, from dependency checking
|
|
184
|
+
to server startup and dashboard opening, with comprehensive error handling.
|
|
185
|
+
"""
|
|
186
|
+
parser = argparse.ArgumentParser(
|
|
187
|
+
description="Launch Socket.IO dashboard for Claude MPM monitoring",
|
|
188
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
189
|
+
epilog='''
|
|
190
|
+
Examples:
|
|
191
|
+
python launch_socketio_dashboard.py # Start with default settings
|
|
192
|
+
python launch_socketio_dashboard.py --port 3000 # Use specific port
|
|
193
|
+
python launch_socketio_dashboard.py --daemon # Run in background
|
|
194
|
+
python launch_socketio_dashboard.py --no-browser # Don't open browser
|
|
195
|
+
python launch_socketio_dashboard.py --setup-only # Just create files
|
|
196
|
+
'''
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
parser.add_argument('--port', type=int, default=3000,
|
|
200
|
+
help='Socket.IO server port (default: 3000)')
|
|
201
|
+
parser.add_argument('--daemon', action='store_true',
|
|
202
|
+
help='Run server in background mode')
|
|
203
|
+
parser.add_argument('--no-browser', action='store_true',
|
|
204
|
+
help='Skip opening browser automatically')
|
|
205
|
+
parser.add_argument('--setup-only', action='store_true',
|
|
206
|
+
help='Create necessary files without starting server')
|
|
207
|
+
|
|
208
|
+
args = parser.parse_args()
|
|
209
|
+
|
|
210
|
+
# Setup signal handlers
|
|
211
|
+
signal.signal(signal.SIGINT, cleanup_handler)
|
|
212
|
+
signal.signal(signal.SIGTERM, cleanup_handler)
|
|
213
|
+
|
|
214
|
+
print("🚀 Claude MPM Socket.IO Dashboard Launcher")
|
|
215
|
+
print("=" * 50)
|
|
216
|
+
|
|
217
|
+
# Check dashboard availability (modular dashboard)
|
|
218
|
+
check_dashboard_availability(args.port)
|
|
219
|
+
|
|
220
|
+
if args.setup_only:
|
|
221
|
+
# Just setup files, don't start server
|
|
222
|
+
print("📁 Setup complete - files created")
|
|
223
|
+
return
|
|
224
|
+
|
|
225
|
+
# Check if server is already running
|
|
226
|
+
if check_server_running(args.port):
|
|
227
|
+
print(f"✅ Using existing server on port {args.port}")
|
|
228
|
+
open_dashboard(args.port, args.no_browser)
|
|
229
|
+
return
|
|
230
|
+
|
|
231
|
+
# Check Python dependencies
|
|
232
|
+
if not check_python_dependencies():
|
|
233
|
+
print("❌ Required Python packages not available")
|
|
234
|
+
sys.exit(1)
|
|
235
|
+
|
|
236
|
+
# Start Python Socket.IO server
|
|
237
|
+
print("🟢 Using Python Socket.IO server")
|
|
238
|
+
|
|
239
|
+
try:
|
|
240
|
+
server_thread = start_python_server(args.port, args.daemon)
|
|
241
|
+
|
|
242
|
+
if server_thread or not args.daemon:
|
|
243
|
+
# Server started or is starting
|
|
244
|
+
time.sleep(2) # Give server time to start
|
|
245
|
+
open_dashboard(args.port, args.no_browser)
|
|
246
|
+
|
|
247
|
+
if args.daemon and server_thread:
|
|
248
|
+
print(f"🔄 Python server running in background")
|
|
249
|
+
print(f" Dashboard: http://localhost:{args.port}/dashboard")
|
|
250
|
+
else:
|
|
251
|
+
print("❌ Failed to start Socket.IO server")
|
|
252
|
+
sys.exit(1)
|
|
253
|
+
|
|
254
|
+
except KeyboardInterrupt:
|
|
255
|
+
print("\\n✅ Socket.IO launcher stopped")
|
|
256
|
+
except Exception as e:
|
|
257
|
+
print(f"❌ Launcher error: {e}")
|
|
258
|
+
sys.exit(1)
|
|
259
|
+
|
|
260
|
+
if __name__ == "__main__":
|
|
261
|
+
main()
|
|
@@ -257,6 +257,16 @@ class SocketIOServer:
|
|
|
257
257
|
# Add HTTP routes
|
|
258
258
|
self.app.router.add_get('/health', self._handle_health)
|
|
259
259
|
self.app.router.add_get('/status', self._handle_health)
|
|
260
|
+
self.app.router.add_get('/api/git-diff', self._handle_git_diff)
|
|
261
|
+
|
|
262
|
+
# Add dashboard routes
|
|
263
|
+
self.app.router.add_get('/', self._handle_dashboard)
|
|
264
|
+
self.app.router.add_get('/dashboard', self._handle_dashboard)
|
|
265
|
+
|
|
266
|
+
# Add static file serving for web assets
|
|
267
|
+
static_path = get_project_root() / 'src' / 'claude_mpm' / 'web' / 'static'
|
|
268
|
+
if static_path.exists():
|
|
269
|
+
self.app.router.add_static('/static/', path=str(static_path), name='static')
|
|
260
270
|
|
|
261
271
|
# Register event handlers
|
|
262
272
|
self._register_events()
|
|
@@ -301,6 +311,220 @@ class SocketIOServer:
|
|
|
301
311
|
"host": self.host,
|
|
302
312
|
"clients_connected": len(self.clients)
|
|
303
313
|
})
|
|
314
|
+
|
|
315
|
+
async def _handle_dashboard(self, request):
|
|
316
|
+
"""Serve the dashboard HTML file."""
|
|
317
|
+
dashboard_path = get_project_root() / 'src' / 'claude_mpm' / 'web' / 'templates' / 'index.html'
|
|
318
|
+
self.logger.info(f"Dashboard requested, looking for: {dashboard_path}")
|
|
319
|
+
self.logger.info(f"Path exists: {dashboard_path.exists()}")
|
|
320
|
+
if dashboard_path.exists():
|
|
321
|
+
return web.FileResponse(str(dashboard_path))
|
|
322
|
+
else:
|
|
323
|
+
return web.Response(text=f"Dashboard not found at: {dashboard_path}", status=404)
|
|
324
|
+
|
|
325
|
+
async def _handle_git_diff(self, request):
|
|
326
|
+
"""Handle git diff requests for file operations.
|
|
327
|
+
|
|
328
|
+
Expected query parameters:
|
|
329
|
+
- file: The file path to generate diff for
|
|
330
|
+
- timestamp: ISO timestamp of the operation (optional)
|
|
331
|
+
- working_dir: Working directory for git operations (optional)
|
|
332
|
+
"""
|
|
333
|
+
try:
|
|
334
|
+
# Extract query parameters
|
|
335
|
+
file_path = request.query.get('file')
|
|
336
|
+
timestamp = request.query.get('timestamp')
|
|
337
|
+
working_dir = request.query.get('working_dir', os.getcwd())
|
|
338
|
+
|
|
339
|
+
if not file_path:
|
|
340
|
+
return web.json_response({
|
|
341
|
+
"error": "Missing required parameter: file"
|
|
342
|
+
}, status=400)
|
|
343
|
+
|
|
344
|
+
self.logger.debug(f"Git diff requested for file: {file_path}, timestamp: {timestamp}")
|
|
345
|
+
|
|
346
|
+
# Generate git diff using the _generate_git_diff helper
|
|
347
|
+
diff_result = await self._generate_git_diff(file_path, timestamp, working_dir)
|
|
348
|
+
|
|
349
|
+
return web.json_response(diff_result)
|
|
350
|
+
|
|
351
|
+
except Exception as e:
|
|
352
|
+
self.logger.error(f"Error generating git diff: {e}")
|
|
353
|
+
return web.json_response({
|
|
354
|
+
"error": f"Failed to generate git diff: {str(e)}"
|
|
355
|
+
}, status=500)
|
|
356
|
+
|
|
357
|
+
async def _generate_git_diff(self, file_path: str, timestamp: Optional[str] = None, working_dir: str = None):
|
|
358
|
+
"""Generate git diff for a specific file operation.
|
|
359
|
+
|
|
360
|
+
WHY: This method generates a git diff showing the changes made to a file
|
|
361
|
+
during a specific write operation. It uses git log and show commands to
|
|
362
|
+
find the most relevant commit around the specified timestamp.
|
|
363
|
+
|
|
364
|
+
Args:
|
|
365
|
+
file_path: Path to the file relative to the git repository
|
|
366
|
+
timestamp: ISO timestamp of the file operation (optional)
|
|
367
|
+
working_dir: Working directory containing the git repository
|
|
368
|
+
|
|
369
|
+
Returns:
|
|
370
|
+
dict: Contains diff content, metadata, and status information
|
|
371
|
+
"""
|
|
372
|
+
try:
|
|
373
|
+
if working_dir is None:
|
|
374
|
+
working_dir = os.getcwd()
|
|
375
|
+
|
|
376
|
+
# Change to the working directory
|
|
377
|
+
original_cwd = os.getcwd()
|
|
378
|
+
try:
|
|
379
|
+
os.chdir(working_dir)
|
|
380
|
+
|
|
381
|
+
# Check if this is a git repository
|
|
382
|
+
git_check = await asyncio.create_subprocess_exec(
|
|
383
|
+
'git', 'rev-parse', '--git-dir',
|
|
384
|
+
stdout=asyncio.subprocess.PIPE,
|
|
385
|
+
stderr=asyncio.subprocess.PIPE
|
|
386
|
+
)
|
|
387
|
+
await git_check.communicate()
|
|
388
|
+
|
|
389
|
+
if git_check.returncode != 0:
|
|
390
|
+
return {
|
|
391
|
+
"error": "Not a git repository",
|
|
392
|
+
"file_path": file_path,
|
|
393
|
+
"working_dir": working_dir
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
# Get the absolute path of the file relative to git root
|
|
397
|
+
git_root_proc = await asyncio.create_subprocess_exec(
|
|
398
|
+
'git', 'rev-parse', '--show-toplevel',
|
|
399
|
+
stdout=asyncio.subprocess.PIPE,
|
|
400
|
+
stderr=asyncio.subprocess.PIPE
|
|
401
|
+
)
|
|
402
|
+
git_root_output, _ = await git_root_proc.communicate()
|
|
403
|
+
|
|
404
|
+
if git_root_proc.returncode != 0:
|
|
405
|
+
return {"error": "Failed to determine git root directory"}
|
|
406
|
+
|
|
407
|
+
git_root = git_root_output.decode().strip()
|
|
408
|
+
|
|
409
|
+
# Make file_path relative to git root if it's absolute
|
|
410
|
+
if os.path.isabs(file_path):
|
|
411
|
+
try:
|
|
412
|
+
file_path = os.path.relpath(file_path, git_root)
|
|
413
|
+
except ValueError:
|
|
414
|
+
# File is not under git root
|
|
415
|
+
pass
|
|
416
|
+
|
|
417
|
+
# If timestamp is provided, try to find commits around that time
|
|
418
|
+
if timestamp:
|
|
419
|
+
# Convert timestamp to git format
|
|
420
|
+
try:
|
|
421
|
+
from datetime import datetime
|
|
422
|
+
dt = datetime.fromisoformat(timestamp.replace('Z', '+00:00'))
|
|
423
|
+
git_since = dt.strftime('%Y-%m-%d %H:%M:%S')
|
|
424
|
+
|
|
425
|
+
# Find commits that modified this file around the timestamp
|
|
426
|
+
log_proc = await asyncio.create_subprocess_exec(
|
|
427
|
+
'git', 'log', '--oneline', '--since', git_since,
|
|
428
|
+
'--until', f'{git_since} +1 hour', '--', file_path,
|
|
429
|
+
stdout=asyncio.subprocess.PIPE,
|
|
430
|
+
stderr=asyncio.subprocess.PIPE
|
|
431
|
+
)
|
|
432
|
+
log_output, _ = await log_proc.communicate()
|
|
433
|
+
|
|
434
|
+
if log_proc.returncode == 0 and log_output:
|
|
435
|
+
# Get the most recent commit hash
|
|
436
|
+
commits = log_output.decode().strip().split('\n')
|
|
437
|
+
if commits and commits[0]:
|
|
438
|
+
commit_hash = commits[0].split()[0]
|
|
439
|
+
|
|
440
|
+
# Get the diff for this specific commit
|
|
441
|
+
diff_proc = await asyncio.create_subprocess_exec(
|
|
442
|
+
'git', 'show', '--format=fuller', commit_hash, '--', file_path,
|
|
443
|
+
stdout=asyncio.subprocess.PIPE,
|
|
444
|
+
stderr=asyncio.subprocess.PIPE
|
|
445
|
+
)
|
|
446
|
+
diff_output, diff_error = await diff_proc.communicate()
|
|
447
|
+
|
|
448
|
+
if diff_proc.returncode == 0:
|
|
449
|
+
return {
|
|
450
|
+
"success": True,
|
|
451
|
+
"diff": diff_output.decode(),
|
|
452
|
+
"commit_hash": commit_hash,
|
|
453
|
+
"file_path": file_path,
|
|
454
|
+
"method": "timestamp_based",
|
|
455
|
+
"timestamp": timestamp
|
|
456
|
+
}
|
|
457
|
+
except Exception as e:
|
|
458
|
+
self.logger.warning(f"Failed to parse timestamp or find commits: {e}")
|
|
459
|
+
|
|
460
|
+
# Fallback: Get the most recent change to the file
|
|
461
|
+
log_proc = await asyncio.create_subprocess_exec(
|
|
462
|
+
'git', 'log', '-1', '--oneline', '--', file_path,
|
|
463
|
+
stdout=asyncio.subprocess.PIPE,
|
|
464
|
+
stderr=asyncio.subprocess.PIPE
|
|
465
|
+
)
|
|
466
|
+
log_output, _ = await log_proc.communicate()
|
|
467
|
+
|
|
468
|
+
if log_proc.returncode == 0 and log_output:
|
|
469
|
+
commit_hash = log_output.decode().strip().split()[0]
|
|
470
|
+
|
|
471
|
+
# Get the diff for the most recent commit
|
|
472
|
+
diff_proc = await asyncio.create_subprocess_exec(
|
|
473
|
+
'git', 'show', '--format=fuller', commit_hash, '--', file_path,
|
|
474
|
+
stdout=asyncio.subprocess.PIPE,
|
|
475
|
+
stderr=asyncio.subprocess.PIPE
|
|
476
|
+
)
|
|
477
|
+
diff_output, diff_error = await diff_proc.communicate()
|
|
478
|
+
|
|
479
|
+
if diff_proc.returncode == 0:
|
|
480
|
+
return {
|
|
481
|
+
"success": True,
|
|
482
|
+
"diff": diff_output.decode(),
|
|
483
|
+
"commit_hash": commit_hash,
|
|
484
|
+
"file_path": file_path,
|
|
485
|
+
"method": "latest_commit",
|
|
486
|
+
"timestamp": timestamp
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
# Final fallback: Show current working directory changes
|
|
490
|
+
diff_proc = await asyncio.create_subprocess_exec(
|
|
491
|
+
'git', 'diff', 'HEAD', '--', file_path,
|
|
492
|
+
stdout=asyncio.subprocess.PIPE,
|
|
493
|
+
stderr=asyncio.subprocess.PIPE
|
|
494
|
+
)
|
|
495
|
+
diff_output, _ = await diff_proc.communicate()
|
|
496
|
+
|
|
497
|
+
if diff_proc.returncode == 0:
|
|
498
|
+
working_diff = diff_output.decode()
|
|
499
|
+
if working_diff.strip():
|
|
500
|
+
return {
|
|
501
|
+
"success": True,
|
|
502
|
+
"diff": working_diff,
|
|
503
|
+
"commit_hash": "working_directory",
|
|
504
|
+
"file_path": file_path,
|
|
505
|
+
"method": "working_directory",
|
|
506
|
+
"timestamp": timestamp
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
return {
|
|
510
|
+
"error": "No git history found for this file",
|
|
511
|
+
"file_path": file_path,
|
|
512
|
+
"suggestions": [
|
|
513
|
+
"The file may not be tracked by git",
|
|
514
|
+
"The file may not have any committed changes",
|
|
515
|
+
"The timestamp may be outside the git history range"
|
|
516
|
+
]
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
finally:
|
|
520
|
+
os.chdir(original_cwd)
|
|
521
|
+
|
|
522
|
+
except Exception as e:
|
|
523
|
+
self.logger.error(f"Error in _generate_git_diff: {e}")
|
|
524
|
+
return {
|
|
525
|
+
"error": f"Git diff generation failed: {str(e)}",
|
|
526
|
+
"file_path": file_path
|
|
527
|
+
}
|
|
304
528
|
|
|
305
529
|
|
|
306
530
|
def _register_events(self):
|
|
@@ -464,6 +464,7 @@ src/claude_mpm/scripts/claude-mpm-socketio
|
|
|
464
464
|
src/claude_mpm/scripts/claude_mpm_monitor.html
|
|
465
465
|
src/claude_mpm/scripts/install_socketio_server.py
|
|
466
466
|
src/claude_mpm/scripts/launch_monitor.py
|
|
467
|
+
src/claude_mpm/scripts/launch_socketio_dashboard.py
|
|
467
468
|
src/claude_mpm/scripts/manage_version.py
|
|
468
469
|
src/claude_mpm/scripts/socketio_daemon.py
|
|
469
470
|
src/claude_mpm/scripts/socketio_server_manager.py
|
claude_mpm-3.2.1/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.2.1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|