orcakit-harness-agent 0.7.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.
- orcakit_harness_agent-0.7.0/.gitignore +59 -0
- orcakit_harness_agent-0.7.0/CHANGELOG.md +55 -0
- orcakit_harness_agent-0.7.0/LICENSE +21 -0
- orcakit_harness_agent-0.7.0/PKG-INFO +286 -0
- orcakit_harness_agent-0.7.0/README.md +219 -0
- orcakit_harness_agent-0.7.0/pyproject.toml +256 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/__init__.py +76 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/acp/__init__.py +27 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/acp/client.py +199 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/acp/models.py +161 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/acp/permissions.py +206 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/acp/server.py +276 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/acp/service.py +390 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/acp/tool_adapter.py +83 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/agent.py +1082 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/backends/__init__.py +289 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/backends/compat.py +37 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/backends/cos.py +570 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/backends/probe.py +214 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/backends/utils.py +57 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/__init__.py +3 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/_sync.py +98 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/__init__.py +8 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/en/AGENTS.md +113 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/en/BOOTSTRAP.md +34 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/en/MEMORY.md +28 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/en/PROACTIVE.md +59 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/en/USER.md +42 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/zh/AGENTS.md +113 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/zh/BOOTSTRAP.md +34 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/zh/MEMORY.md +28 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/zh/PROACTIVE.md +65 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/md_files/zh/USER.md +42 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/__init__.py +1 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/apple-notes/SKILL.md +106 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/apple-reminders/SKILL.md +199 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/architecture-diagram/SKILL.md +164 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/architecture-diagram/templates/template.html +319 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-art/SKILL.md +338 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/README.md +290 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/SKILL.md +257 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/references/architecture.md +802 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/references/composition.md +892 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/references/effects.md +1865 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/references/inputs.md +685 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/references/optimization.md +688 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/references/scenes.md +1011 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/references/shaders.md +1385 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ascii-video/references/troubleshooting.md +367 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/docker-management/SKILL.md +297 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/excalidraw/SKILL.md +215 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/excalidraw/references/colors.md +44 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/excalidraw/references/dark-mode.md +68 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/excalidraw/references/examples.md +141 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/excalidraw/scripts/upload.py +135 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/fastmcp/SKILL.md +313 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/fastmcp/references/fastmcp-cli.md +110 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/fastmcp/scripts/scaffold_fastmcp.py +55 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/fastmcp/templates/api_wrapper.py +53 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/fastmcp/templates/database_server.py +76 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/fastmcp/templates/file_processor.py +54 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/findmy/SKILL.md +150 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/imessage/SKILL.md +118 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/install-skill/SKILL.md +195 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/jupyter-live-kernel/SKILL.md +186 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/jupyter-live-kernel/scripts/jupyter_live_kernel.py +2190 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/llm-wiki/SKILL.md +524 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/README.md +23 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/SKILL.md +285 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/animation-design-thinking.md +161 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/animations.md +282 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/camera-and-3d.md +135 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/decorations.md +202 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/equations.md +216 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/graphs-and-data.md +163 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/mobjects.md +333 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/paper-explainer.md +255 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/production-quality.md +190 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/rendering.md +185 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/scene-planning.md +118 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/troubleshooting.md +135 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/updaters-and-trackers.md +260 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/references/visual-design.md +124 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/manim-video/scripts/setup.sh +14 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/mcporter/SKILL.md +225 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/memory-management/SKILL.md +55 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/nano-pdf/SKILL.md +68 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ocr-and-documents/DESCRIPTION.md +3 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ocr-and-documents/SKILL.md +187 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ocr-and-documents/scripts/extract_marker.py +98 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/ocr-and-documents/scripts/extract_pymupdf.py +116 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/plan/SKILL.md +355 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/LICENSE.txt +30 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/SKILL.md +256 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/editing.md +205 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/pptxgenjs.md +420 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/__init__.py +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/add_slide.py +199 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/clean.py +279 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/helpers/__init__.py +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/helpers/merge_runs.py +192 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/helpers/simplify_redlines.py +192 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/pack.py +153 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ecma/fourth-edition/opc-contentTypes.xsd +42 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ecma/fourth-edition/opc-coreProperties.xsd +50 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ecma/fourth-edition/opc-digSig.xsd +49 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/ecma/fourth-edition/opc-relationships.xsd +33 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/mce/mc.xsd +75 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/powerpoint/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/skill-creator/SKILL.md +272 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/systematic-debugging/SKILL.md +425 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/using-workspace/SKILL.md +49 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/watchers/SKILL.md +132 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/watchers/scripts/_watermark.py +145 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/watchers/scripts/watch_github.py +153 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/watchers/scripts/watch_http_json.py +132 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/watchers/scripts/watch_rss.py +115 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/web-search/SKILL.md +108 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/skills/web-search/scripts/web_search.py +288 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/templates.py +46 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/__init__.py +17 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/acp_runner.py +309 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/browser_use.py +423 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/current_time.py +76 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/desktop_screenshot.py +133 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/memory_tools.py +79 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/send_file.py +109 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/web_fetch.py +61 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/web_search/__init__.py +18 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/web_search/_registry.py +137 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/web_search/brave.py +53 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/web_search/google.py +60 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/web_search/kimi.py +53 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/web_search/searchfree.py +74 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/builtin/tools/web_search/tavily.py +60 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/__init__.py +54 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/agents/__init__.py +8 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/agents/manager.py +111 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/agents/profile.py +68 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/commands/__init__.py +1 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/commands/agent_cmd.py +144 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/commands/chat.py +93 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/commands/config_cmd.py +169 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/commands/init_cmd.py +135 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/commands/skill.py +78 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/commands/update.py +43 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/config/__init__.py +7 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/config/loader.py +96 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/config/paths.py +98 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/config/schema.py +46 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/main.py +45 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/providers/__init__.py +33 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/providers/registry.py +37 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/providers/setup_wizard.py +224 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/py.typed +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/repl/__init__.py +7 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/repl/commands.py +442 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/repl/handler.py +345 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/repl/loop.py +201 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/repl/slash_router.py +114 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/repl/state.py +43 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/__init__.py +7 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/completer.py +184 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/file_ref.py +216 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/input.py +52 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/renderer.py +131 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/spinner.py +23 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/theme.py +81 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/thinking.py +122 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/token_bar.py +142 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/cli/ui/toolbar.py +33 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/config/__init__.py +717 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/config/env.py +147 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/init.py +201 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/llm/__init__.py +7 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/llm/factory.py +475 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/manager.py +420 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/mcp.py +206 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/messages.py +73 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/__init__.py +9 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/bootstrap.py +207 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/mcp_tools.py +106 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/media_offload.py +392 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/memory.py +454 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/model_router.py +135 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/pii.py +110 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/runtime.py +53 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/skill_filter.py +119 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/middleware/tool_guard.py +79 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/observability/__init__.py +12 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/observability/langfuse.py +111 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/observability/logging.py +99 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/plugins/__init__.py +26 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/plugins/context.py +90 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/plugins/loader.py +111 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/plugins/manifest.py +59 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/plugins/registry.py +94 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/plugins/tools.py +101 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/protocols/__init__.py +57 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/protocols/base.py +69 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/protocols/langgraph.py +194 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/protocols/mcp.py +168 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/protocols/openai.py +209 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/protocols/think_splitter.py +88 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/__init__.py +159 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/__init__.py +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/anthropic.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/custom-provider.svg +15 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/dashscope.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/deepseek.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/gemini.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/groq.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/mimo.svg +17 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/minimax.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/modelscope.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/moonshot.webp +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/ollama.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/openai.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/openrouter.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/silicon.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/tencent-coding-plan.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/tencent-token-plan.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/volces.svg +1 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/logos/zhipu.png +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/providers/provider_template.json +289 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/py.typed +0 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/registry.py +105 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/request.py +214 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/security/__init__.py +21 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/security/models.py +323 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/security/tool_guard/__init__.py +15 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/security/tool_guard/engine.py +97 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/security/tool_guard/models.py +114 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/security/tool_guard/rule_guardian.py +239 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/security/tool_guard/rules/dangerous_shell_commands.yaml +310 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/slash/__init__.py +37 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/slash/core.py +202 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/slash/dispatcher.py +8 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/slash/handlers.py +109 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/slash/runtime.py +140 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/teams/__init__.py +36 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/teams/inbox.py +275 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/teams/mentions.py +23 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/teams/processor.py +90 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/teams/team_manager.py +434 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/teams/tools.py +154 -0
- orcakit_harness_agent-0.7.0/src/harness_agent/teams/util.py +32 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
*.egg-info/
|
|
10
|
+
*.egg
|
|
11
|
+
.eggs/
|
|
12
|
+
wheels/
|
|
13
|
+
*.whl
|
|
14
|
+
|
|
15
|
+
# Virtual environments
|
|
16
|
+
.venv/
|
|
17
|
+
venv/
|
|
18
|
+
env/
|
|
19
|
+
ENV/
|
|
20
|
+
|
|
21
|
+
# Tooling caches
|
|
22
|
+
.pytest_cache/
|
|
23
|
+
.mypy_cache/
|
|
24
|
+
.ruff_cache/
|
|
25
|
+
.coverage
|
|
26
|
+
.coverage.*
|
|
27
|
+
htmlcov/
|
|
28
|
+
coverage.xml
|
|
29
|
+
.tox/
|
|
30
|
+
.nox/
|
|
31
|
+
|
|
32
|
+
# IDE
|
|
33
|
+
.vscode/
|
|
34
|
+
.idea/
|
|
35
|
+
*.swp
|
|
36
|
+
*.swo
|
|
37
|
+
.DS_Store
|
|
38
|
+
|
|
39
|
+
# uv
|
|
40
|
+
# Keep uv.lock tracked; ignore only local downloads
|
|
41
|
+
.uv/
|
|
42
|
+
|
|
43
|
+
# hatch-vcs auto-generated version file (single source of truth = git tag)
|
|
44
|
+
src/harness_agent/_version.py
|
|
45
|
+
|
|
46
|
+
# Local agent runtime artifacts (when using examples/)
|
|
47
|
+
agent_root/
|
|
48
|
+
.e2e_root/
|
|
49
|
+
.cos_e2e_root/
|
|
50
|
+
.init_demo_root/
|
|
51
|
+
.skills_tour_root/
|
|
52
|
+
*.sqlite
|
|
53
|
+
*.sqlite-journal
|
|
54
|
+
sessions/
|
|
55
|
+
|
|
56
|
+
# Direnv
|
|
57
|
+
.envrc
|
|
58
|
+
.env
|
|
59
|
+
.env.local
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- `teams`: `@agent` mentions now resolve peer agents by name (same path as `ask_agent` sync) via `resolve_mention_targets` / `ask_peer_sync`; hosts can call `TeamManager.prepare_request_mentions` for full request handling.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- MCP server integration via `langchain-mcp-adapters`: `HarnessAgentConfig.mcp_server_configs`,
|
|
16
|
+
`mcp_default_servers`, per-request opt-in on `ChatRequest` (`mcp_servers` / `mcp_use_default`),
|
|
17
|
+
and `HarnessAgentManager` shared `mcp_server_configs` merged into each agent.
|
|
18
|
+
- `harness_agent.providers` module: `ModelPreset`, `ProviderPreset` dataclasses and `load_provider_templates(templates_path=None)` — core layer, no CLI dependency.
|
|
19
|
+
- `AgentManager.list_provider_templates(templates_path=None)` — returns built-in or custom provider presets.
|
|
20
|
+
- `ChatRequest` per-request `skills` filter and optional `agent_id` (written to `RunnableConfig.configurable`).
|
|
21
|
+
- `SkillFilterMiddleware` restricts the skills system prompt to `ChatRequest.skills` when set.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- Renamed internal package `harness_agent.models` → `harness_agent.llm` (`ChatModelFactory` import path).
|
|
25
|
+
- Bootstrap middleware stays registered when `bootstrap_enabled=True` even if `BOOTSTRAP.md` is seeded after agent construction; `HarnessAgentManager.create_agent(..., init_workspace=True)` recompiles the graph after seeding. Marker detection uses the agent backend (`/.bootstrapped`); completing onboarding auto-writes the marker when `USER.md` is updated.
|
|
26
|
+
- `HarnessAgentManager.create_agent()` auto-generated `agent_id` is now a 6-character
|
|
27
|
+
lowercase alphanumeric string (was uuid4).
|
|
28
|
+
- `ProviderConfig` now has a required `id` field (was the dict key in `HarnessAgentConfig.providers`).
|
|
29
|
+
- `HarnessAgentConfig.providers` is now `list[ProviderConfig]` instead of `dict[str, ProviderConfig]`.
|
|
30
|
+
Old dict-format JSON configs are automatically migrated on load via `from_dict`.
|
|
31
|
+
- `ChatModelFactory` now accepts `list[ProviderConfig]` instead of `HarnessAgentConfig`.
|
|
32
|
+
- `HarnessAgent` accepts an optional `model_factory: ChatModelFactory` keyword argument.
|
|
33
|
+
When provided, the factory is reused directly instead of building a new one.
|
|
34
|
+
- `AgentManager` accepts an optional `providers: list[ProviderConfig]` constructor argument.
|
|
35
|
+
When provided, a shared `ChatModelFactory` is built once and reused for all managed agents.
|
|
36
|
+
- **Breaking:** `HarnessAgentManager` CRUD methods renamed for clarity: `create()` → `create_agent()`,
|
|
37
|
+
`get()` → `get_agent()`, `remove()` → `remove_agent()`, `list()` → `list_agents()`.
|
|
38
|
+
- `HarnessAgentManager.create_agent()` now builds and caches `HarnessAgent` eagerly (previously built lazily per-stream).
|
|
39
|
+
The cached instance is reused across all subsequent `stream()` calls for that agent.
|
|
40
|
+
- `HarnessAgentManager.create_agent()` gains `init_workspace: bool = True` — workspace is initialised automatically on agent creation.
|
|
41
|
+
- `HarnessAgentManager.remove_agent()` now calls `agent.close()` to release resources (SqliteSaver, etc.) before removing the entry.
|
|
42
|
+
- `AgentManager` gains a `close()` method that closes all cached agents and clears the registry.
|
|
43
|
+
- `AgentManager` supports both sync (`with`) and async (`async with`) context manager protocols.
|
|
44
|
+
- `AgentEntry` gains an `agent` field exposing the cached `HarnessAgent` instance (e.g. `entry.agent.backend` for direct backend access).
|
|
45
|
+
- `provider_template.json` moved from `builtin/providers/` to `providers/`.
|
|
46
|
+
|
|
47
|
+
### Removed
|
|
48
|
+
- `harness_agent.builtin.providers` compatibility shim (use `harness_agent.providers` instead).
|
|
49
|
+
- `cli/providers/registry.py` is now a thin re-export of core types.
|
|
50
|
+
- CLI: `harness-agent`(无参数)现在直接进入 chat REPL,不再显示 help 文本(`--help` 行为不变)
|
|
51
|
+
- CLI: 启动时自动加载 `.env` 文件(项目目录 `<cwd>/.env` 优先,回退到 `~/.harness-agent/.env`;不覆盖已有 shell 环境变量)
|
|
52
|
+
- CLI: REPL 新增 `/env` 命令,支持 `set`/`get`/`list`/`unset`/`reload` 操作,写入 `~/.harness-agent/.env`
|
|
53
|
+
- CLI: `/model` 改为交互式编号列表选择,去掉 `/model <name>` 直接设置
|
|
54
|
+
- CLI: 自动补全 slash 命令列表改为从命令注册表动态生成,修复缺少 `/env`、`/agent` 等命令的问题
|
|
55
|
+
- `python-dotenv>=1.0` 加入 `cli` optional extra 依赖
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OrcaKit
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: orcakit-harness-agent
|
|
3
|
+
Version: 0.7.0
|
|
4
|
+
Summary: Production-grade Harness Agent built on top of LangChain Deep Agents.
|
|
5
|
+
Project-URL: Homepage, https://github.com/orcakit/harness-agent
|
|
6
|
+
Project-URL: Repository, https://github.com/orcakit/harness-agent
|
|
7
|
+
Project-URL: Issues, https://github.com/orcakit/harness-agent/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/orcakit/harness-agent/blob/main/CHANGELOG.md
|
|
9
|
+
Author: orcakit
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: agent,deep-agents,harness,langchain,langgraph,llm
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: deepagents<1.0,>=0.6
|
|
24
|
+
Requires-Dist: harness-browser>=0.1.1
|
|
25
|
+
Requires-Dist: harness-memory>=0.1
|
|
26
|
+
Requires-Dist: httpx>=0.27
|
|
27
|
+
Requires-Dist: langchain-anthropic<2.0,>=1.4
|
|
28
|
+
Requires-Dist: langchain-core<2.0,>=1.4
|
|
29
|
+
Requires-Dist: langchain-mcp-adapters>=0.3.0
|
|
30
|
+
Requires-Dist: langchain-openai>=0.3
|
|
31
|
+
Requires-Dist: langchain<2.0,>=1.3
|
|
32
|
+
Requires-Dist: langgraph-checkpoint-sqlite>=2.0
|
|
33
|
+
Requires-Dist: langgraph<2.0,>=1.0
|
|
34
|
+
Requires-Dist: markdownify>=0.13
|
|
35
|
+
Requires-Dist: mcp>=1.27.1
|
|
36
|
+
Requires-Dist: pyyaml>=6.0
|
|
37
|
+
Provides-Extra: acp
|
|
38
|
+
Requires-Dist: agent-client-protocol>=0.9.0; extra == 'acp'
|
|
39
|
+
Requires-Dist: psutil>=5.9; extra == 'acp'
|
|
40
|
+
Provides-Extra: bedrock
|
|
41
|
+
Requires-Dist: langchain-aws>=0.2; extra == 'bedrock'
|
|
42
|
+
Provides-Extra: brave
|
|
43
|
+
Requires-Dist: langchain-community>=0.3; extra == 'brave'
|
|
44
|
+
Provides-Extra: cli
|
|
45
|
+
Requires-Dist: click>=8.1; extra == 'cli'
|
|
46
|
+
Requires-Dist: prompt-toolkit>=3.0; extra == 'cli'
|
|
47
|
+
Requires-Dist: python-dotenv>=1.0; extra == 'cli'
|
|
48
|
+
Requires-Dist: rich>=13.0; extra == 'cli'
|
|
49
|
+
Provides-Extra: cos
|
|
50
|
+
Requires-Dist: cos-python-sdk-v5>=1.9; extra == 'cos'
|
|
51
|
+
Provides-Extra: desktop
|
|
52
|
+
Requires-Dist: mss>=9.0; extra == 'desktop'
|
|
53
|
+
Provides-Extra: google-search
|
|
54
|
+
Requires-Dist: google-api-python-client>=2.0; extra == 'google-search'
|
|
55
|
+
Requires-Dist: langchain-community>=0.3; extra == 'google-search'
|
|
56
|
+
Provides-Extra: observability
|
|
57
|
+
Requires-Dist: langfuse>=4.9.0; extra == 'observability'
|
|
58
|
+
Provides-Extra: remote-backends
|
|
59
|
+
Requires-Dist: deepagents-backends>=0.2; (python_version >= '3.12') and extra == 'remote-backends'
|
|
60
|
+
Provides-Extra: tavily
|
|
61
|
+
Requires-Dist: langchain-tavily>=0.1; extra == 'tavily'
|
|
62
|
+
Provides-Extra: web-search-all
|
|
63
|
+
Requires-Dist: google-api-python-client>=2.0; extra == 'web-search-all'
|
|
64
|
+
Requires-Dist: langchain-community>=0.3; extra == 'web-search-all'
|
|
65
|
+
Requires-Dist: langchain-tavily>=0.1; extra == 'web-search-all'
|
|
66
|
+
Description-Content-Type: text/markdown
|
|
67
|
+
|
|
68
|
+
<p align="center">
|
|
69
|
+
<img src="assets/images/banner.jpeg" alt="Harness Agent Banner" width="100%" />
|
|
70
|
+
</p>
|
|
71
|
+
|
|
72
|
+
<h1 align="center">Harness Agent</h1>
|
|
73
|
+
|
|
74
|
+
<p align="center">
|
|
75
|
+
<strong>Production-grade AI agent platform built on LangChain Deep Agents.</strong>
|
|
76
|
+
</p>
|
|
77
|
+
|
|
78
|
+
<p align="center">
|
|
79
|
+
<a href="https://pypi.org/project/orcakit-harness-agent/"><img src="https://img.shields.io/pypi/v/orcakit-harness-agent" alt="PyPI" /></a>
|
|
80
|
+
<a href="https://github.com/orcakit/harness-agent/actions/workflows/ci.yml"><img src="https://github.com/orcakit/harness-agent/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
81
|
+
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11+-blue.svg" alt="Python 3.11+" /></a>
|
|
82
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" /></a>
|
|
83
|
+
</p>
|
|
84
|
+
|
|
85
|
+
<p align="center">
|
|
86
|
+
<b>English</b> · <a href="README_CN.md">中文</a>
|
|
87
|
+
</p>
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Highlights
|
|
92
|
+
|
|
93
|
+
- **Deep Agent Architecture** — Built on LangGraph with hierarchical agent routing, tool orchestration, and stateful conversation management
|
|
94
|
+
- **Multi-Agent Management** — `AgentManager` registry with metadata/tags, per-thread cancel, and id-based stream routing
|
|
95
|
+
- **Multi-Model Support** — OpenAI, Anthropic, AWS Bedrock, and any OpenAI-compatible endpoint out of the box; 17 provider presets in a user-editable JSON template
|
|
96
|
+
- **Built-in Tool Ecosystem** — Browser automation, desktop screenshots, web search (Tavily/Brave/Google/Kimi), and extensible skill system
|
|
97
|
+
- **Production Ready** — Checkpoint persistence, configurable backends (SQLite, S3, COS, PostgreSQL), and structured logging
|
|
98
|
+
- **Terminal-First CLI** — Rich interactive chat interface with skill management, config wizard, and workspace initialization
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Overview
|
|
103
|
+
|
|
104
|
+
Harness Agent is an open-source AI agent framework that provides a complete runtime for building, deploying, and managing autonomous AI agents. It wraps LangChain Deep Agents with batteries-included tooling: multi-provider model routing, persistent memory via [harness-memory](https://github.com/orcakit/harness-memory), browser automation via [harness-browser](https://github.com/orcakit/harness-browser), and a terminal CLI for interactive use.
|
|
105
|
+
|
|
106
|
+
The project is a single Python package with an optional CLI extra:
|
|
107
|
+
|
|
108
|
+
| Install | Description |
|
|
109
|
+
|---------|-------------|
|
|
110
|
+
| `pip install orcakit-harness-agent` | Core SDK — agent runtime, model routing, tools, skills, backends |
|
|
111
|
+
| `pip install orcakit-harness-agent[cli]` | Adds the terminal CLI — interactive chat, config, skill management |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Core Technology
|
|
116
|
+
|
|
117
|
+
| Layer | Technology | Purpose |
|
|
118
|
+
|-------|-----------|---------|
|
|
119
|
+
| Agent Runtime | [LangGraph](https://github.com/langchain-ai/langgraph) + [Deep Agents](https://pypi.org/project/deepagents/) | Stateful graph execution with hierarchical agent routing |
|
|
120
|
+
| Model Providers | LangChain model integrations | Unified interface for OpenAI, Anthropic, Bedrock, and custom endpoints |
|
|
121
|
+
| Memory | [harness-memory](https://github.com/orcakit/harness-memory) | Hierarchical recall with FTS search and pluggable backends |
|
|
122
|
+
| Browser | [harness-browser](https://github.com/orcakit/harness-browser) | CDP-based browser automation with profile-persistent login |
|
|
123
|
+
| Checkpointing | LangGraph Checkpoint + SQLite/Postgres | Conversation state persistence across sessions |
|
|
124
|
+
| CLI Framework | Click + Rich + Textual | Terminal UI with streaming output and rich formatting |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Features
|
|
129
|
+
|
|
130
|
+
### Agent Runtime
|
|
131
|
+
- Hierarchical agent routing with configurable delegation
|
|
132
|
+
- **`AgentManager`** — in-memory registry for creating and managing multiple agents by `agent_id`
|
|
133
|
+
- Stateful conversation management with checkpoint persistence
|
|
134
|
+
- Per-thread stream cancellation via `manager.cancel(agent_id, thread_id)`
|
|
135
|
+
- Middleware pipeline for request/response interception
|
|
136
|
+
- Configurable system prompts and persona management
|
|
137
|
+
|
|
138
|
+
### Model Routing
|
|
139
|
+
- **OpenAI** — GPT-4o, GPT-4, GPT-3.5, and any compatible endpoint
|
|
140
|
+
- **Anthropic** — Claude 4 Sonnet, Claude 4 Opus, Claude 3.5 family
|
|
141
|
+
- **AWS Bedrock** — Claude, Titan, and other Bedrock models
|
|
142
|
+
- **Custom** — Any OpenAI-compatible API via base URL configuration
|
|
143
|
+
|
|
144
|
+
### Built-in Tools
|
|
145
|
+
- **Browser Automation** — Navigate, click, type, screenshot via harness-browser
|
|
146
|
+
- **Desktop Screenshot** — Full-screen capture for visual context
|
|
147
|
+
- **Web Search** — Tavily, Brave, Google, Kimi (auto-detect or explicit selection)
|
|
148
|
+
- **Extensible Skills** — Custom tool registration with typed schemas
|
|
149
|
+
|
|
150
|
+
### Storage Backends
|
|
151
|
+
- **SQLite** — Zero-config local persistence (default)
|
|
152
|
+
- **Tencent Cloud COS** — Object storage for attachments and artifacts
|
|
153
|
+
- **Remote Backends** — S3, PostgreSQL, Azure, GCS, MongoDB, Redis via `deepagents-backends`
|
|
154
|
+
|
|
155
|
+
### CLI
|
|
156
|
+
- Interactive streaming chat with rich markdown rendering
|
|
157
|
+
- Workspace initialization (`harness-agent init`)
|
|
158
|
+
- Provider configuration wizard (`harness-agent config provider add`)
|
|
159
|
+
- Skill management and discovery
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Quick Start
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Install the CLI (includes core SDK)
|
|
167
|
+
pip install orcakit-harness-agent[cli]
|
|
168
|
+
|
|
169
|
+
# Initialize workspace
|
|
170
|
+
harness-agent init
|
|
171
|
+
|
|
172
|
+
# Configure a model provider
|
|
173
|
+
harness-agent config provider add
|
|
174
|
+
|
|
175
|
+
# Start chatting
|
|
176
|
+
harness-agent chat
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Programmatic Usage
|
|
180
|
+
|
|
181
|
+
```python
|
|
182
|
+
from harness_agent import HarnessAgentManager, HarnessAgentConfig, ProviderConfig, ChatRequest
|
|
183
|
+
|
|
184
|
+
config = HarnessAgentConfig(
|
|
185
|
+
workspace_dir="./workspace",
|
|
186
|
+
providers=[ProviderConfig(id="openai", api_key="sk-...", models=["gpt-4o"])],
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
manager = HarnessAgentManager()
|
|
190
|
+
entry = manager.create_agent(config)
|
|
191
|
+
|
|
192
|
+
async for chunk in manager.stream(entry.agent_id, ChatRequest(messages="Hello!")):
|
|
193
|
+
print(chunk.content, end="", flush=True)
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
> **Advanced:** For direct backend operations, access the cached agent via `entry.agent`.
|
|
197
|
+
> `HarnessAgent` can also be constructed directly, but `AgentManager` is the recommended
|
|
198
|
+
> entry point for all new code.
|
|
199
|
+
|
|
200
|
+
### Multi-Agent Management
|
|
201
|
+
|
|
202
|
+
```python
|
|
203
|
+
from harness_agent import HarnessAgentManager, HarnessAgentConfig, ProviderConfig
|
|
204
|
+
|
|
205
|
+
manager = HarnessAgentManager()
|
|
206
|
+
|
|
207
|
+
# Register agents with metadata and tags
|
|
208
|
+
entry = manager.create_agent(
|
|
209
|
+
config,
|
|
210
|
+
metadata={"tenant": "acme", "env": "prod"},
|
|
211
|
+
tags=["fast", "gpt4o"],
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
# Query agents by metadata / tags
|
|
215
|
+
agents = manager.list_agents(metadata={"env": "prod"}, tags=["fast"])
|
|
216
|
+
|
|
217
|
+
# Stream by agent_id
|
|
218
|
+
async for chunk in manager.stream(entry.agent_id, request):
|
|
219
|
+
print(chunk)
|
|
220
|
+
|
|
221
|
+
# Cancel mid-stream
|
|
222
|
+
manager.cancel(entry.agent_id, request.thread_id)
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Architecture
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
src/harness_agent/ Core SDK — agent runtime, model routing, tools, skills, backends
|
|
231
|
+
src/harness_agent/cli/ Terminal CLI — thin view layer over the SDK
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
The CLI is a thin view layer that delegates all agent logic to the core SDK. This separation enables future UIs (web, IDE extensions) to reuse the same SDK.
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Development
|
|
239
|
+
|
|
240
|
+
**Prerequisites:** Python 3.11+, [uv](https://docs.astral.sh/uv/)
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
git clone https://github.com/orcakit/harness-agent.git
|
|
244
|
+
cd harness-agent
|
|
245
|
+
make install # install dev dependencies
|
|
246
|
+
make all # lint + typecheck + test (CI ship bar)
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
| Command | Description |
|
|
250
|
+
|---------|-------------|
|
|
251
|
+
| `make lint` | Ruff check + format check |
|
|
252
|
+
| `make format` | Auto-fix and format |
|
|
253
|
+
| `make typecheck` | mypy strict |
|
|
254
|
+
| `make test` | pytest with coverage |
|
|
255
|
+
| `make build` | Build wheel + sdist |
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Contributing
|
|
260
|
+
|
|
261
|
+
Contributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) and run `make all` before opening a PR.
|
|
262
|
+
|
|
263
|
+
Security issues: see [SECURITY.md](SECURITY.md).
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Release
|
|
268
|
+
|
|
269
|
+
Tag `v<version>` (e.g., `v0.2.0`) to trigger a PyPI release via GitHub Actions with trusted publishing.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Related Projects
|
|
274
|
+
|
|
275
|
+
| Project | Description |
|
|
276
|
+
|---------|-------------|
|
|
277
|
+
| [orca (Octop)](https://github.com/orcakit/orca) | Self-hosted multi-user AI control plane |
|
|
278
|
+
| [harness-memory](https://github.com/orcakit/harness-memory) | Pluggable memory system with hierarchical recall and FTS |
|
|
279
|
+
| [harness-browser](https://github.com/orcakit/harness-browser) | AI-friendly browser automation via CDP |
|
|
280
|
+
| [harness-gateway](https://github.com/orcakit/harness-gateway) | Multi-platform IM channel bridge for AI agents |
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## License
|
|
285
|
+
|
|
286
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/images/banner.jpeg" alt="Harness Agent Banner" width="100%" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Harness Agent</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Production-grade AI agent platform built on LangChain Deep Agents.</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://pypi.org/project/orcakit-harness-agent/"><img src="https://img.shields.io/pypi/v/orcakit-harness-agent" alt="PyPI" /></a>
|
|
13
|
+
<a href="https://github.com/orcakit/harness-agent/actions/workflows/ci.yml"><img src="https://github.com/orcakit/harness-agent/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
14
|
+
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11+-blue.svg" alt="Python 3.11+" /></a>
|
|
15
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" /></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<b>English</b> · <a href="README_CN.md">中文</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Highlights
|
|
25
|
+
|
|
26
|
+
- **Deep Agent Architecture** — Built on LangGraph with hierarchical agent routing, tool orchestration, and stateful conversation management
|
|
27
|
+
- **Multi-Agent Management** — `AgentManager` registry with metadata/tags, per-thread cancel, and id-based stream routing
|
|
28
|
+
- **Multi-Model Support** — OpenAI, Anthropic, AWS Bedrock, and any OpenAI-compatible endpoint out of the box; 17 provider presets in a user-editable JSON template
|
|
29
|
+
- **Built-in Tool Ecosystem** — Browser automation, desktop screenshots, web search (Tavily/Brave/Google/Kimi), and extensible skill system
|
|
30
|
+
- **Production Ready** — Checkpoint persistence, configurable backends (SQLite, S3, COS, PostgreSQL), and structured logging
|
|
31
|
+
- **Terminal-First CLI** — Rich interactive chat interface with skill management, config wizard, and workspace initialization
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Overview
|
|
36
|
+
|
|
37
|
+
Harness Agent is an open-source AI agent framework that provides a complete runtime for building, deploying, and managing autonomous AI agents. It wraps LangChain Deep Agents with batteries-included tooling: multi-provider model routing, persistent memory via [harness-memory](https://github.com/orcakit/harness-memory), browser automation via [harness-browser](https://github.com/orcakit/harness-browser), and a terminal CLI for interactive use.
|
|
38
|
+
|
|
39
|
+
The project is a single Python package with an optional CLI extra:
|
|
40
|
+
|
|
41
|
+
| Install | Description |
|
|
42
|
+
|---------|-------------|
|
|
43
|
+
| `pip install orcakit-harness-agent` | Core SDK — agent runtime, model routing, tools, skills, backends |
|
|
44
|
+
| `pip install orcakit-harness-agent[cli]` | Adds the terminal CLI — interactive chat, config, skill management |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Core Technology
|
|
49
|
+
|
|
50
|
+
| Layer | Technology | Purpose |
|
|
51
|
+
|-------|-----------|---------|
|
|
52
|
+
| Agent Runtime | [LangGraph](https://github.com/langchain-ai/langgraph) + [Deep Agents](https://pypi.org/project/deepagents/) | Stateful graph execution with hierarchical agent routing |
|
|
53
|
+
| Model Providers | LangChain model integrations | Unified interface for OpenAI, Anthropic, Bedrock, and custom endpoints |
|
|
54
|
+
| Memory | [harness-memory](https://github.com/orcakit/harness-memory) | Hierarchical recall with FTS search and pluggable backends |
|
|
55
|
+
| Browser | [harness-browser](https://github.com/orcakit/harness-browser) | CDP-based browser automation with profile-persistent login |
|
|
56
|
+
| Checkpointing | LangGraph Checkpoint + SQLite/Postgres | Conversation state persistence across sessions |
|
|
57
|
+
| CLI Framework | Click + Rich + Textual | Terminal UI with streaming output and rich formatting |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Features
|
|
62
|
+
|
|
63
|
+
### Agent Runtime
|
|
64
|
+
- Hierarchical agent routing with configurable delegation
|
|
65
|
+
- **`AgentManager`** — in-memory registry for creating and managing multiple agents by `agent_id`
|
|
66
|
+
- Stateful conversation management with checkpoint persistence
|
|
67
|
+
- Per-thread stream cancellation via `manager.cancel(agent_id, thread_id)`
|
|
68
|
+
- Middleware pipeline for request/response interception
|
|
69
|
+
- Configurable system prompts and persona management
|
|
70
|
+
|
|
71
|
+
### Model Routing
|
|
72
|
+
- **OpenAI** — GPT-4o, GPT-4, GPT-3.5, and any compatible endpoint
|
|
73
|
+
- **Anthropic** — Claude 4 Sonnet, Claude 4 Opus, Claude 3.5 family
|
|
74
|
+
- **AWS Bedrock** — Claude, Titan, and other Bedrock models
|
|
75
|
+
- **Custom** — Any OpenAI-compatible API via base URL configuration
|
|
76
|
+
|
|
77
|
+
### Built-in Tools
|
|
78
|
+
- **Browser Automation** — Navigate, click, type, screenshot via harness-browser
|
|
79
|
+
- **Desktop Screenshot** — Full-screen capture for visual context
|
|
80
|
+
- **Web Search** — Tavily, Brave, Google, Kimi (auto-detect or explicit selection)
|
|
81
|
+
- **Extensible Skills** — Custom tool registration with typed schemas
|
|
82
|
+
|
|
83
|
+
### Storage Backends
|
|
84
|
+
- **SQLite** — Zero-config local persistence (default)
|
|
85
|
+
- **Tencent Cloud COS** — Object storage for attachments and artifacts
|
|
86
|
+
- **Remote Backends** — S3, PostgreSQL, Azure, GCS, MongoDB, Redis via `deepagents-backends`
|
|
87
|
+
|
|
88
|
+
### CLI
|
|
89
|
+
- Interactive streaming chat with rich markdown rendering
|
|
90
|
+
- Workspace initialization (`harness-agent init`)
|
|
91
|
+
- Provider configuration wizard (`harness-agent config provider add`)
|
|
92
|
+
- Skill management and discovery
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Quick Start
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Install the CLI (includes core SDK)
|
|
100
|
+
pip install orcakit-harness-agent[cli]
|
|
101
|
+
|
|
102
|
+
# Initialize workspace
|
|
103
|
+
harness-agent init
|
|
104
|
+
|
|
105
|
+
# Configure a model provider
|
|
106
|
+
harness-agent config provider add
|
|
107
|
+
|
|
108
|
+
# Start chatting
|
|
109
|
+
harness-agent chat
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Programmatic Usage
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
from harness_agent import HarnessAgentManager, HarnessAgentConfig, ProviderConfig, ChatRequest
|
|
116
|
+
|
|
117
|
+
config = HarnessAgentConfig(
|
|
118
|
+
workspace_dir="./workspace",
|
|
119
|
+
providers=[ProviderConfig(id="openai", api_key="sk-...", models=["gpt-4o"])],
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
manager = HarnessAgentManager()
|
|
123
|
+
entry = manager.create_agent(config)
|
|
124
|
+
|
|
125
|
+
async for chunk in manager.stream(entry.agent_id, ChatRequest(messages="Hello!")):
|
|
126
|
+
print(chunk.content, end="", flush=True)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
> **Advanced:** For direct backend operations, access the cached agent via `entry.agent`.
|
|
130
|
+
> `HarnessAgent` can also be constructed directly, but `AgentManager` is the recommended
|
|
131
|
+
> entry point for all new code.
|
|
132
|
+
|
|
133
|
+
### Multi-Agent Management
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
from harness_agent import HarnessAgentManager, HarnessAgentConfig, ProviderConfig
|
|
137
|
+
|
|
138
|
+
manager = HarnessAgentManager()
|
|
139
|
+
|
|
140
|
+
# Register agents with metadata and tags
|
|
141
|
+
entry = manager.create_agent(
|
|
142
|
+
config,
|
|
143
|
+
metadata={"tenant": "acme", "env": "prod"},
|
|
144
|
+
tags=["fast", "gpt4o"],
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
# Query agents by metadata / tags
|
|
148
|
+
agents = manager.list_agents(metadata={"env": "prod"}, tags=["fast"])
|
|
149
|
+
|
|
150
|
+
# Stream by agent_id
|
|
151
|
+
async for chunk in manager.stream(entry.agent_id, request):
|
|
152
|
+
print(chunk)
|
|
153
|
+
|
|
154
|
+
# Cancel mid-stream
|
|
155
|
+
manager.cancel(entry.agent_id, request.thread_id)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Architecture
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
src/harness_agent/ Core SDK — agent runtime, model routing, tools, skills, backends
|
|
164
|
+
src/harness_agent/cli/ Terminal CLI — thin view layer over the SDK
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The CLI is a thin view layer that delegates all agent logic to the core SDK. This separation enables future UIs (web, IDE extensions) to reuse the same SDK.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Development
|
|
172
|
+
|
|
173
|
+
**Prerequisites:** Python 3.11+, [uv](https://docs.astral.sh/uv/)
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
git clone https://github.com/orcakit/harness-agent.git
|
|
177
|
+
cd harness-agent
|
|
178
|
+
make install # install dev dependencies
|
|
179
|
+
make all # lint + typecheck + test (CI ship bar)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
| Command | Description |
|
|
183
|
+
|---------|-------------|
|
|
184
|
+
| `make lint` | Ruff check + format check |
|
|
185
|
+
| `make format` | Auto-fix and format |
|
|
186
|
+
| `make typecheck` | mypy strict |
|
|
187
|
+
| `make test` | pytest with coverage |
|
|
188
|
+
| `make build` | Build wheel + sdist |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Contributing
|
|
193
|
+
|
|
194
|
+
Contributions are welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) and run `make all` before opening a PR.
|
|
195
|
+
|
|
196
|
+
Security issues: see [SECURITY.md](SECURITY.md).
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Release
|
|
201
|
+
|
|
202
|
+
Tag `v<version>` (e.g., `v0.2.0`) to trigger a PyPI release via GitHub Actions with trusted publishing.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Related Projects
|
|
207
|
+
|
|
208
|
+
| Project | Description |
|
|
209
|
+
|---------|-------------|
|
|
210
|
+
| [orca (Octop)](https://github.com/orcakit/orca) | Self-hosted multi-user AI control plane |
|
|
211
|
+
| [harness-memory](https://github.com/orcakit/harness-memory) | Pluggable memory system with hierarchical recall and FTS |
|
|
212
|
+
| [harness-browser](https://github.com/orcakit/harness-browser) | AI-friendly browser automation via CDP |
|
|
213
|
+
| [harness-gateway](https://github.com/orcakit/harness-gateway) | Multi-platform IM channel bridge for AI agents |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## License
|
|
218
|
+
|
|
219
|
+
[MIT](LICENSE)
|