@agenthippo-ai/agenthippo 0.1.0
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.
- package/LICENSE +21 -0
- package/bin/agenthippo.js +2 -0
- package/out/agentpack/github.js +547 -0
- package/out/agentpack/index.js +66 -0
- package/out/agentpack/install.js +297 -0
- package/out/agentpack/manager.js +441 -0
- package/out/agentpack/manifest.js +135 -0
- package/out/agentpack/paths.js +475 -0
- package/out/agentpack/publish.js +248 -0
- package/out/agentpack/stores.js +554 -0
- package/out/agentpack/types.js +5 -0
- package/out/analytics/dashboard/artifactManager.js +439 -0
- package/out/analytics/dashboard/fleetDisplayUtils.js +159 -0
- package/out/analytics/dashboard/fleetOrchestrator.js +142 -0
- package/out/analytics/dashboard/fleetRegistry.js +79 -0
- package/out/analytics/dashboard/fleetRowDefaults.js +87 -0
- package/out/analytics/dashboard/fleetScriptAdapter.js +146 -0
- package/out/analytics/dashboard/fleetStatusUtils.js +30 -0
- package/out/analytics/dashboard/fleetTitleUtils.js +68 -0
- package/out/analytics/dashboard/fleetTypes.js +29 -0
- package/out/analytics/dashboard/index.js +17 -0
- package/out/analytics/dashboard/indexingService.js +422 -0
- package/out/analytics/dashboard/localFleetAdapter.js +222 -0
- package/out/analytics/dashboard/performanceMonitor.js +76 -0
- package/out/analytics/dashboard/processManager.js +209 -0
- package/out/analytics/dashboard/provider.js +3885 -0
- package/out/analytics/dashboard/queryRunner.js +994 -0
- package/out/analytics/dashboard/refreshPolicy.js +16 -0
- package/out/analytics/dashboard/scheduledFleetFingerprint.js +22 -0
- package/out/analytics/dashboard/scheduledFleetStorage.js +241 -0
- package/out/analytics/dashboard/scheduledFleetUtils.js +22 -0
- package/out/analytics/dashboard/sessionEventFleetStats.js +118 -0
- package/out/analytics/dashboard/sessionJsonlFleet.js +204 -0
- package/out/analytics/dashboard/teamViewDiscovery.js +106 -0
- package/out/analytics/dashboard/viewsConfigMerge.js +221 -0
- package/out/analytics/dashboard/webview/analytics-panel.html +155 -0
- package/out/analytics/dashboard/webview/codicon.ttf +0 -0
- package/out/analytics/dashboard/webview/index.html +78 -0
- package/out/analytics/dashboard/webview/panel.js +2295 -0
- package/out/analytics/dashboard/webview/runtime-bridge.js +82 -0
- package/out/analytics/dashboard/webview/styles.css +1009 -0
- package/out/analytics/lifecycle.js +43 -0
- package/out/analytics/service.js +1279 -0
- package/out/analytics/sessionEvents.js +231 -0
- package/out/auth/bootstrapApply.js +72 -0
- package/out/auth/brokerClient.js +126 -0
- package/out/auth/callbackUri.js +59 -0
- package/out/auth/callbackUriParse.js +59 -0
- package/out/auth/githubStoreGate.js +70 -0
- package/out/auth/loopbackAuthServer.js +165 -0
- package/out/auth/pkce.js +9 -0
- package/out/auth/provider.js +239 -0
- package/out/auth/sessionStore.js +193 -0
- package/out/auth/signInFlow.js +182 -0
- package/out/auth/types.js +12 -0
- package/out/auth-broker/config.js +62 -0
- package/out/auth-broker/jwt.js +105 -0
- package/out/auth-broker/pkce.js +57 -0
- package/out/auth-broker/server.js +539 -0
- package/out/auth-broker/store.js +273 -0
- package/out/base-prompts/gateway/openclaw-starter.json5 +144 -0
- package/out/base-prompts/gateway/slack-socket-mode-minimal.manifest.json +44 -0
- package/out/base-prompts/mcp-servers/.mcp.json +13 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/README.md +142 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/mcp.json +13 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/package-lock.json +1192 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/package.json +23 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/run-with-env.sh +12 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/sdk-test.js +102 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/simple-test.js +137 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/test-client.js +118 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/test-server.js +209 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/src/client.ts +431 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/src/index.ts +270 -0
- package/out/base-prompts/mcp-servers/langfuse-analytics/tsconfig.json +18 -0
- package/out/base-prompts/rules/AGENTS.md +204 -0
- package/out/base-prompts/skills/agent-browser/SKILL.md +102 -0
- package/out/base-prompts/skills/agent-builder/SKILL.md +73 -0
- package/out/base-prompts/skills/agent-builder/references/agent-pack.md +63 -0
- package/out/base-prompts/skills/agent-builder/references/crewai.md +66 -0
- package/out/base-prompts/skills/agent-builder/references/langchain.md +60 -0
- package/out/base-prompts/skills/agent-builder/references/raw-sdk.md +73 -0
- package/out/base-prompts/skills/agent-engine-creator/SKILL.md +586 -0
- package/out/base-prompts/skills/agent-engine-installer/SKILL.md +106 -0
- package/out/base-prompts/skills/agent-engine-installer/scripts/install-engine.mjs +259 -0
- package/out/base-prompts/skills/agent-engine-installer/scripts/install-engine.ps1 +189 -0
- package/out/base-prompts/skills/agenthippo-cli/SKILL.md +69 -0
- package/out/base-prompts/skills/agenthippo-cli/scripts/install.sh +63 -0
- package/out/base-prompts/skills/agentpack-creator/SKILL.md +375 -0
- package/out/base-prompts/skills/agentpack-creator/references/agent-templates.md +261 -0
- package/out/base-prompts/skills/agentpack-creator/references/agents-md-guide.md +195 -0
- package/out/base-prompts/skills/agentpack-creator/scripts/init_pack.py +391 -0
- package/out/base-prompts/skills/agentpack-creator/scripts/init_pack_test.py +294 -0
- package/out/base-prompts/skills/agentpack-testbench/SKILL.md +135 -0
- package/out/base-prompts/skills/algorithmic-art/LICENSE.txt +202 -0
- package/out/base-prompts/skills/algorithmic-art/SKILL.md +405 -0
- package/out/base-prompts/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/out/base-prompts/skills/algorithmic-art/templates/viewer.html +599 -0
- package/out/base-prompts/skills/debug-agent/SKILL.md +83 -0
- package/out/base-prompts/skills/desktop-automation/SKILL.md +166 -0
- package/out/base-prompts/skills/desktop-automation/references/agenthippo-ui-recipes.md +441 -0
- package/out/base-prompts/skills/desktop-automation/scripts/windows-desktop-uia.psm1 +280 -0
- package/out/base-prompts/skills/docx/LICENSE.txt +30 -0
- package/out/base-prompts/skills/docx/SKILL.md +197 -0
- package/out/base-prompts/skills/docx/docx-js.md +350 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/out/base-prompts/skills/docx/ooxml/scripts/pack.py +159 -0
- package/out/base-prompts/skills/docx/ooxml/scripts/unpack.py +29 -0
- package/out/base-prompts/skills/docx/ooxml/scripts/validate.py +69 -0
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/base.py +951 -0
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/docx.py +274 -0
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/out/base-prompts/skills/docx/ooxml.md +610 -0
- package/out/base-prompts/skills/docx/scripts/__init__.py +1 -0
- package/out/base-prompts/skills/docx/scripts/document.py +1276 -0
- package/out/base-prompts/skills/docx/scripts/templates/comments.xml +3 -0
- package/out/base-prompts/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/out/base-prompts/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/out/base-prompts/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/out/base-prompts/skills/docx/scripts/templates/people.xml +3 -0
- package/out/base-prompts/skills/docx/scripts/utilities.py +374 -0
- package/out/base-prompts/skills/gateway-outbound/SKILL.md +136 -0
- package/out/base-prompts/skills/mcp-builder/LICENSE.txt +202 -0
- package/out/base-prompts/skills/mcp-builder/SKILL.md +328 -0
- package/out/base-prompts/skills/mcp-builder/reference/evaluation.md +602 -0
- package/out/base-prompts/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/out/base-prompts/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/out/base-prompts/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/out/base-prompts/skills/mcp-builder/scripts/connections.py +151 -0
- package/out/base-prompts/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/out/base-prompts/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/out/base-prompts/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/out/base-prompts/skills/openclaw/SKILL.md +406 -0
- package/out/base-prompts/skills/openclaw/scripts/run-smoke.sh +61 -0
- package/out/base-prompts/skills/pdf/LICENSE.txt +30 -0
- package/out/base-prompts/skills/pdf/SKILL.md +294 -0
- package/out/base-prompts/skills/pdf/forms.md +205 -0
- package/out/base-prompts/skills/pdf/reference.md +612 -0
- package/out/base-prompts/skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/out/base-prompts/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/out/base-prompts/skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/out/base-prompts/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/out/base-prompts/skills/pdf/scripts/create_validation_image.py +41 -0
- package/out/base-prompts/skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/out/base-prompts/skills/pdf/scripts/fill_fillable_fields.py +114 -0
- package/out/base-prompts/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/out/base-prompts/skills/pptx/LICENSE.txt +30 -0
- package/out/base-prompts/skills/pptx/SKILL.md +484 -0
- package/out/base-prompts/skills/pptx/html2pptx.md +625 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/out/base-prompts/skills/pptx/ooxml/scripts/pack.py +159 -0
- package/out/base-prompts/skills/pptx/ooxml/scripts/unpack.py +29 -0
- package/out/base-prompts/skills/pptx/ooxml/scripts/validate.py +69 -0
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/base.py +951 -0
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/out/base-prompts/skills/pptx/ooxml.md +427 -0
- package/out/base-prompts/skills/pptx/scripts/html2pptx.js +984 -0
- package/out/base-prompts/skills/pptx/scripts/inventory.py +1020 -0
- package/out/base-prompts/skills/pptx/scripts/rearrange.py +231 -0
- package/out/base-prompts/skills/pptx/scripts/replace.py +385 -0
- package/out/base-prompts/skills/pptx/scripts/thumbnail.py +450 -0
- package/out/base-prompts/skills/prompt-lab/SKILL.md +149 -0
- package/out/base-prompts/skills/prompt-lab/scripts/query-analytics.sh +2551 -0
- package/out/base-prompts/skills/skill-creator/LICENSE.txt +202 -0
- package/out/base-prompts/skills/skill-creator/SKILL.md +371 -0
- package/out/base-prompts/skills/skill-creator/references/output-patterns.md +82 -0
- package/out/base-prompts/skills/skill-creator/references/workflows.md +28 -0
- package/out/base-prompts/skills/skill-creator/scripts/init_skill.py +303 -0
- package/out/base-prompts/skills/skill-creator/scripts/package_skill.py +110 -0
- package/out/base-prompts/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/out/base-prompts/skills/skill-installer/SKILL.md +251 -0
- package/out/base-prompts/skills/skill-installer/references/store-api.md +219 -0
- package/out/base-prompts/skills/spotlight-dashboard/SKILL.md +83 -0
- package/out/base-prompts/skills/spotlight-insights/SKILL.md +101 -0
- package/out/base-prompts/skills/spotlight-optimize/SKILL.md +93 -0
- package/out/base-prompts/skills/spotlight-optimize/scripts/query-analytics.sh +2551 -0
- package/out/base-prompts/skills/spotlight-query/SKILL.md +314 -0
- package/out/base-prompts/skills/spotlight-query/references/otel-schema.md +163 -0
- package/out/base-prompts/skills/spotlight-query/scripts/query-analytics.sh +2551 -0
- package/out/base-prompts/skills/spotlight-query/scripts/query-analytics.test.sh +744 -0
- package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/sessions/sess-test-1.jsonl +14 -0
- package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/traces/.duckdb-index.json +7 -0
- package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/traces/sample.jsonl +5 -0
- package/out/base-prompts/skills/spotlight-report/SKILL.md +86 -0
- package/out/base-prompts/skills/spotlight-visualize/SKILL.md +92 -0
- package/out/base-prompts/skills/spotlight-visualize/scripts/query-analytics.sh +2551 -0
- package/out/base-prompts/skills/xlsx/LICENSE.txt +30 -0
- package/out/base-prompts/skills/xlsx/SKILL.md +289 -0
- package/out/base-prompts/skills/xlsx/recalc.py +178 -0
- package/out/branding.js +23 -0
- package/out/cli/commands/anywhere.js +66 -0
- package/out/cli/commands/ask.js +243 -0
- package/out/cli/commands/auth-broker.js +24 -0
- package/out/cli/commands/auth.js +219 -0
- package/out/cli/commands/chat.js +354 -0
- package/out/cli/commands/deploy.js +223 -0
- package/out/cli/commands/gateway.js +160 -0
- package/out/cli/commands/pack.js +220 -0
- package/out/cli/commands/probe-custom-engine.js +82 -0
- package/out/cli/commands/serve.js +583 -0
- package/out/cli/commands/store.js +919 -0
- package/out/cli/credential-context.js +113 -0
- package/out/cli/deploy-init.js +2087 -0
- package/out/cli/deps.js +238 -0
- package/out/cli/index.js +390 -0
- package/out/cli/pack-loader.js +376 -0
- package/out/cli/run-custom-engine-runner.js +318 -0
- package/out/cli/runtime.js +409 -0
- package/out/cli/serve-hardening.js +325 -0
- package/out/cli/state-sync.js +135 -0
- package/out/cli/utils.js +220 -0
- package/out/cli/vscode-shim.js +86 -0
- package/out/engines/base.js +159 -0
- package/out/engines/claude.js +1215 -0
- package/out/engines/codex.js +759 -0
- package/out/engines/custom.js +632 -0
- package/out/engines/customEngineIpc.js +95 -0
- package/out/engines/customEngineRunnerEmbed.js +107 -0
- package/out/engines/customRegistry.js +274 -0
- package/out/engines/embeddedCustomEngineRunner.generated.js +9 -0
- package/out/engines/engineApiKey.js +138 -0
- package/out/engines/factory.js +45 -0
- package/out/engines/install.js +372 -0
- package/out/engines/persistentEngineWorker.js +320 -0
- package/out/engines/publish.js +341 -0
- package/out/engines/types.js +17 -0
- package/out/examples/run-headless-repl.js +291 -0
- package/out/examples/run-headless.js +187 -0
- package/out/extension.js +4472 -0
- package/out/gateway/bridge.js +805 -0
- package/out/gateway/cli-agent-id.js +36 -0
- package/out/gateway/client.js +303 -0
- package/out/gateway/client.test.js +395 -0
- package/out/gateway/gateway-scope-errors.js +14 -0
- package/out/gateway/gatewayBackup.js +76 -0
- package/out/gateway/gatewayRouteIndex.js +371 -0
- package/out/gateway/gatewaySessionStore.js +243 -0
- package/out/gateway/index.js +31 -0
- package/out/gateway/lifecycle.js +3056 -0
- package/out/gateway/openclaw-channel-routing.js +317 -0
- package/out/gateway/outboundHandles.js +373 -0
- package/out/gateway/outboundPaths.js +72 -0
- package/out/gateway/outboundSend.js +254 -0
- package/out/gateway/protocol.js +48 -0
- package/out/gateway/resetMappings.js +52 -0
- package/out/gateway/service.js +1244 -0
- package/out/gateway/sessionRouting.js +77 -0
- package/out/headless/index.js +505 -0
- package/out/headless/sync.js +473 -0
- package/out/mcp/publish.js +143 -0
- package/out/mcp.js +597 -0
- package/out/permissions.js +108 -0
- package/out/permissions.mapping.yaml +68 -0
- package/out/registry/index.js +332 -0
- package/out/remote/handleRemoteChat.js +122 -0
- package/out/remote/remotePackStatusBar.js +103 -0
- package/out/remote/serveClient.js +216 -0
- package/out/remoteSkills.js +191 -0
- package/out/runtime/index.js +32 -0
- package/out/runtime/interfaces/config-provider.js +32 -0
- package/out/runtime/interfaces/edit-tracker.js +22 -0
- package/out/runtime/interfaces/index.js +29 -0
- package/out/runtime/interfaces/logger.js +40 -0
- package/out/runtime/interfaces/permission-handler.js +66 -0
- package/out/runtime/interfaces/session-store.js +342 -0
- package/out/runtime/vscode/index.js +20 -0
- package/out/runtime/vscode/vscode-config-provider.js +77 -0
- package/out/runtime/vscode/vscode-edit-tracker.js +120 -0
- package/out/runtime/vscode/vscode-logger.js +30 -0
- package/out/runtime/vscode/vscode-permission-handler.js +72 -0
- package/out/runtime/vscode/vscode-session-store.js +22 -0
- package/out/scripts/agentide-litellm.ps1 +501 -0
- package/out/scripts/agentide-litellm.sh +700 -0
- package/out/scripts/agentide_litellm_hooks_v1.py +604 -0
- package/out/scripts/analytics/agent-fleet-widget.js +954 -0
- package/out/scripts/analytics/agentide-litellm-otel.config.yaml +160 -0
- package/out/scripts/analytics/default-seed-scripts.json +12 -0
- package/out/scripts/analytics/duckdbLocator.js +29 -0
- package/out/scripts/analytics/fleet-local-adapter.js +246 -0
- package/out/scripts/analytics/fleet-workflow.sh +263 -0
- package/out/scripts/analytics/generate-default-charts.py +685 -0
- package/out/scripts/analytics/hotspot-analysis-widget.js +909 -0
- package/out/scripts/analytics/index-traces.py +1394 -0
- package/out/scripts/analytics/install-analytics.sh +286 -0
- package/out/scripts/analytics/live-fleet-4-collector.cjs +315 -0
- package/out/scripts/analytics/live-fleet-4-daemon.mjs +134 -0
- package/out/scripts/analytics/live-fleet-4-widget.cjs +433 -0
- package/out/scripts/analytics/otel-collector.yaml +55 -0
- package/out/scripts/analytics/query-analytics.ps1 +396 -0
- package/out/scripts/analytics/query-analytics.sh +2551 -0
- package/out/scripts/analytics/session-comparison-widget.js +1468 -0
- package/out/scripts/analytics/session-timeline-widget.js +2137 -0
- package/out/scripts/analytics/setup-analytics.ps1 +432 -0
- package/out/scripts/analytics/setup-analytics.sh +854 -0
- package/out/scripts/analytics/start-analytics.ps1 +169 -0
- package/out/scripts/analytics/start-analytics.sh +323 -0
- package/out/scripts/analytics/token-cost-flamegraph-widget.js +954 -0
- package/out/scripts/analytics/token-cost-trend-widget.js +1062 -0
- package/out/scripts/analytics/workflows-collector.cjs +315 -0
- package/out/scripts/analytics/workflows-daemon.mjs +186 -0
- package/out/scripts/analytics/workflows-widget.cjs +433 -0
- package/out/scripts/analytics/wow-model-widget.js +191 -0
- package/out/scripts/gateway/Dockerfile.serve +45 -0
- package/out/scripts/gateway/docker-serve.sh +248 -0
- package/out/scripts/gateway/setup-gateway-server.ps1 +953 -0
- package/out/scripts/gateway/setup-gateway-server.sh +935 -0
- package/out/scripts/gateway/setup-gateway.ps1 +1813 -0
- package/out/scripts/gateway/setup-gateway.sh +1541 -0
- package/out/scripts/setup-cli.ps1 +86 -0
- package/out/scripts/setup-cli.sh +117 -0
- package/out/scripts/tools-manifest.json +83 -0
- package/out/scripts/vendor-tools.mjs +234 -0
- package/out/session.js +272 -0
- package/out/shared/agentEngines.js +170 -0
- package/out/shared/index.js +109 -0
- package/out/shared/models.js +235 -0
- package/out/shared/providers.js +202 -0
- package/out/skills/publish.js +178 -0
- package/out/spotlight/install.js +339 -0
- package/out/spotlight/publish.js +544 -0
- package/out/spotlight/yaml.js +31 -0
- package/out/store/github/setup.js +235 -0
- package/out/store/github/templates/build-index.ts +339 -0
- package/out/store/github/templates/build-index.yml +97 -0
- package/out/store/github/templates/package.json +11 -0
- package/out/store/index.js +755 -0
- package/out/store/oramaIndex.js +884 -0
- package/out/store/shared.js +241 -0
- package/out/sync.js +1827 -0
- package/out/terminalLogger.js +358 -0
- package/out/test/agentEnvFile.test.js +97 -0
- package/out/test/agentYaml.test.js +373 -0
- package/out/test/agentpack.test.js +639 -0
- package/out/test/analytics-lifecycle.test.js +174 -0
- package/out/test/analytics.test.js +524 -0
- package/out/test/auth-bootstrapApply.test.js +102 -0
- package/out/test/auth-broker.test.js +434 -0
- package/out/test/auth-callback.test.js +62 -0
- package/out/test/branding.test.js +229 -0
- package/out/test/cli-agent-id.test.js +55 -0
- package/out/test/credential-context.test.js +105 -0
- package/out/test/customEngineInstall.test.js +100 -0
- package/out/test/customRegistry.test.js +122 -0
- package/out/test/deploy-init.test.js +532 -0
- package/out/test/deps-auto-install.test.js +81 -0
- package/out/test/engine-integration.test.js +297 -0
- package/out/test/enginePaths.test.js +195 -0
- package/out/test/enginePublish.test.js +82 -0
- package/out/test/fleetDisplayUtils.test.js +96 -0
- package/out/test/gateway-client.test.js +381 -0
- package/out/test/gateway-lifecycle.test.js +608 -0
- package/out/test/gateway-outbound.test.js +531 -0
- package/out/test/gateway-reset-mappings.test.js +221 -0
- package/out/test/gateway-route-index.test.js +235 -0
- package/out/test/gateway-session-routing.test.js +47 -0
- package/out/test/gateway-session-store.test.js +216 -0
- package/out/test/github.test.js +232 -0
- package/out/test/headless-sync.test.js +279 -0
- package/out/test/helpers/manifest-fixtures.js +27 -0
- package/out/test/mcp-obo.test.js +82 -0
- package/out/test/mcp.test.js +307 -0
- package/out/test/openclaw-channel-routing.test.js +191 -0
- package/out/test/pathSafety.test.js +63 -0
- package/out/test/permissions.test.js +175 -0
- package/out/test/persistent-engine-worker.test.js +220 -0
- package/out/test/refreshPolicy.test.js +60 -0
- package/out/test/registry.test.js +351 -0
- package/out/test/runtime.test.js +349 -0
- package/out/test/scheduledFleetStorage.test.js +72 -0
- package/out/test/serve-hardening.test.js +192 -0
- package/out/test/serveClient.test.js +173 -0
- package/out/test/sessionJsonlFleet.test.js +78 -0
- package/out/test/shared.test.js +173 -0
- package/out/test/skills-mcp.test.js +299 -0
- package/out/test/spotlightPublish.test.js +299 -0
- package/out/test/spotlightYaml.test.js +58 -0
- package/out/test/state-sync-peer.test.js +74 -0
- package/out/test/store.test.js +331 -0
- package/out/test/stores.test.js +504 -0
- package/out/test/sync-switch.test.js +251 -0
- package/out/test/teamViewDiscovery.test.js +90 -0
- package/out/test/toolPath.test.js +120 -0
- package/out/test/utils.test.js +308 -0
- package/out/test/viewsConfigMerge.test.js +180 -0
- package/out/test/windows-command-line.test.js +75 -0
- package/out/utils/agentEnvFile.js +131 -0
- package/out/utils/binary.js +175 -0
- package/out/utils/index.js +37 -0
- package/out/utils/network.js +74 -0
- package/out/utils/pathSafety.js +60 -0
- package/out/utils/paths.js +116 -0
- package/out/utils/pid.js +180 -0
- package/out/utils/pythonRunner.js +258 -0
- package/out/utils/resolveNodeBinary.js +168 -0
- package/out/utils/toolPath.js +83 -0
- package/out/utils/windowsCommandLine.js +29 -0
- package/out/utils.js +915 -0
- package/out/workspaceFolders.js +59 -0
- package/package.json +41 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) AgentHippo.ai. All rights reserved.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.resolvePackPath = resolvePackPath;
|
|
40
|
+
exports.listAvailablePacks = listAvailablePacks;
|
|
41
|
+
exports.loadAgentPack = loadAgentPack;
|
|
42
|
+
exports.getDefaultConfig = getDefaultConfig;
|
|
43
|
+
exports.getEnvDefaultModel = getEnvDefaultModel;
|
|
44
|
+
exports.getApiConfig = getApiConfig;
|
|
45
|
+
exports.getFileAccess = getFileAccess;
|
|
46
|
+
/**
|
|
47
|
+
* Agent Pack Loader
|
|
48
|
+
*
|
|
49
|
+
* Loads and validates agent packs from the filesystem.
|
|
50
|
+
*/
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const os = __importStar(require("os"));
|
|
54
|
+
const yaml = __importStar(require("js-yaml"));
|
|
55
|
+
const branding_1 = require("../branding");
|
|
56
|
+
// -----------------------------------------------------------------------------
|
|
57
|
+
// Constants
|
|
58
|
+
// -----------------------------------------------------------------------------
|
|
59
|
+
function getEnvVar(primary, legacy) {
|
|
60
|
+
return process.env[primary] ?? (legacy ? process.env[legacy] : undefined);
|
|
61
|
+
}
|
|
62
|
+
const AGENTHIPPO_HOME = process.env.AGENTHIPPO_HOME || path.join(os.homedir(), branding_1.AGENTIDE_DIR_NAME);
|
|
63
|
+
const USER_AGENTS_DIR = path.join(AGENTHIPPO_HOME, 'agents');
|
|
64
|
+
const AGENTS_SUBDIR = 'agents';
|
|
65
|
+
// -----------------------------------------------------------------------------
|
|
66
|
+
// Pack Resolution
|
|
67
|
+
// -----------------------------------------------------------------------------
|
|
68
|
+
/**
|
|
69
|
+
* Resolve a pack path with version support.
|
|
70
|
+
*
|
|
71
|
+
* Resolution order:
|
|
72
|
+
* 1. Check for current.txt pointer → use that version
|
|
73
|
+
* 2. Check if basePath itself has agent.yaml → flat structure
|
|
74
|
+
* 3. Auto-detect version directories (semver-like: X.Y.Z) → use latest
|
|
75
|
+
*/
|
|
76
|
+
function resolveVersionedPath(basePath) {
|
|
77
|
+
if (!fs.existsSync(basePath)) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
// 1. Check for current.txt version pointer
|
|
81
|
+
const currentFile = path.join(basePath, 'current.txt');
|
|
82
|
+
if (fs.existsSync(currentFile)) {
|
|
83
|
+
const version = fs.readFileSync(currentFile, 'utf-8').trim();
|
|
84
|
+
const versionPath = path.join(basePath, version);
|
|
85
|
+
if (fs.existsSync(versionPath)) {
|
|
86
|
+
return versionPath;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// 2. Flat structure - agent.yaml directly in basePath
|
|
90
|
+
const flatManifest = path.join(basePath, 'agent.yaml');
|
|
91
|
+
if (fs.existsSync(flatManifest)) {
|
|
92
|
+
return basePath;
|
|
93
|
+
}
|
|
94
|
+
// 3. Auto-detect version directories (look for semver-like: X.Y.Z or X.Y.Z-xxx)
|
|
95
|
+
try {
|
|
96
|
+
const entries = fs.readdirSync(basePath, { withFileTypes: true });
|
|
97
|
+
const versionDirs = entries
|
|
98
|
+
.filter(e => e.isDirectory() && /^\d+\.\d+\.\d+/.test(e.name))
|
|
99
|
+
.map(e => e.name)
|
|
100
|
+
.sort((a, b) => {
|
|
101
|
+
// Sort by semver (descending - latest first)
|
|
102
|
+
const [aMajor, aMinor, aPatch] = a.split('.').map(n => parseInt(n, 10) || 0);
|
|
103
|
+
const [bMajor, bMinor, bPatch] = b.split('.').map(n => parseInt(n, 10) || 0);
|
|
104
|
+
if (bMajor !== aMajor) {
|
|
105
|
+
return bMajor - aMajor;
|
|
106
|
+
}
|
|
107
|
+
if (bMinor !== aMinor) {
|
|
108
|
+
return bMinor - aMinor;
|
|
109
|
+
}
|
|
110
|
+
return bPatch - aPatch;
|
|
111
|
+
});
|
|
112
|
+
// Use latest version that has agent.yaml
|
|
113
|
+
for (const version of versionDirs) {
|
|
114
|
+
const versionPath = path.join(basePath, version);
|
|
115
|
+
const manifestPath = path.join(versionPath, 'agent.yaml');
|
|
116
|
+
if (fs.existsSync(manifestPath)) {
|
|
117
|
+
return versionPath;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Ignore read errors
|
|
123
|
+
}
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Find an agent pack by name or path.
|
|
128
|
+
*
|
|
129
|
+
* Search order:
|
|
130
|
+
* 1. Explicit path (absolute or relative to cwd)
|
|
131
|
+
* 2. Direct folder in cwd: ./<name> (convenience for development)
|
|
132
|
+
* 3. Local agents folder: ./agents/<name> (in cwd, for development)
|
|
133
|
+
* 4. Workspace branding folder: <workspace>/<brand>/agents/<name>
|
|
134
|
+
* 5. User agent library: ~/<brand>/agents/<name>
|
|
135
|
+
*
|
|
136
|
+
* @param nameOrPath - Pack name or path
|
|
137
|
+
* @param workspaceRoot - Workspace root directory (for workspace-local packs)
|
|
138
|
+
*/
|
|
139
|
+
function resolvePackPath(nameOrPath, workspaceRoot) {
|
|
140
|
+
// 1. Explicit path (absolute or relative to cwd)
|
|
141
|
+
// This handles both absolute paths and relative paths like "./myagent" or "../agents/myagent"
|
|
142
|
+
if (path.isAbsolute(nameOrPath) || nameOrPath.startsWith('./') || nameOrPath.startsWith('../')) {
|
|
143
|
+
const resolvedPath = path.isAbsolute(nameOrPath) ? nameOrPath : path.resolve(process.cwd(), nameOrPath);
|
|
144
|
+
if (fs.existsSync(resolvedPath)) {
|
|
145
|
+
try {
|
|
146
|
+
if (fs.statSync(resolvedPath).isDirectory()) {
|
|
147
|
+
return resolveVersionedPath(resolvedPath) ?? resolvedPath;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Ignore stat errors, fall back to raw path.
|
|
152
|
+
}
|
|
153
|
+
return resolvedPath;
|
|
154
|
+
}
|
|
155
|
+
// If explicit path doesn't exist, don't fall through to other search locations
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
// From here, nameOrPath is just a name (e.g., "joker1"), not a path
|
|
159
|
+
// Search in standard locations in priority order
|
|
160
|
+
// 2. Direct folder in cwd: ./<name> (convenience for development)
|
|
161
|
+
const cwdDirectPath = path.join(process.cwd(), nameOrPath);
|
|
162
|
+
const cwdDirectResolved = resolveVersionedPath(cwdDirectPath);
|
|
163
|
+
if (cwdDirectResolved) {
|
|
164
|
+
return cwdDirectResolved;
|
|
165
|
+
}
|
|
166
|
+
// 3. Local agents folder: ./agents/<name> (in cwd, for development)
|
|
167
|
+
const localAgentsPath = path.join(process.cwd(), AGENTS_SUBDIR, nameOrPath);
|
|
168
|
+
const localResolved = resolveVersionedPath(localAgentsPath);
|
|
169
|
+
if (localResolved) {
|
|
170
|
+
return localResolved;
|
|
171
|
+
}
|
|
172
|
+
// 4. Workspace branding folder: <workspace>/<brand>/agents/<name>
|
|
173
|
+
if (workspaceRoot) {
|
|
174
|
+
const workspacePackPath = path.join(workspaceRoot, branding_1.AGENTIDE_DIR_NAME, AGENTS_SUBDIR, nameOrPath);
|
|
175
|
+
const resolved = resolveVersionedPath(workspacePackPath);
|
|
176
|
+
if (resolved) {
|
|
177
|
+
return resolved;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// 5. User agent library: ~/<brand>/agents/<name>
|
|
181
|
+
const ualPath = path.join(USER_AGENTS_DIR, nameOrPath);
|
|
182
|
+
const resolved = resolveVersionedPath(ualPath);
|
|
183
|
+
if (resolved) {
|
|
184
|
+
return resolved;
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* List packs from a directory.
|
|
190
|
+
*/
|
|
191
|
+
function listPacksFromDir(agentsDir, source) {
|
|
192
|
+
const packs = [];
|
|
193
|
+
if (!fs.existsSync(agentsDir)) {
|
|
194
|
+
return packs;
|
|
195
|
+
}
|
|
196
|
+
const entries = fs.readdirSync(agentsDir, { withFileTypes: true });
|
|
197
|
+
for (const entry of entries) {
|
|
198
|
+
if (!entry.isDirectory()) {
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (entry.name.startsWith('.')) {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
const packPath = path.join(agentsDir, entry.name);
|
|
205
|
+
const resolvedPath = resolveVersionedPath(packPath);
|
|
206
|
+
if (!resolvedPath) {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
// Extract version from resolved path
|
|
210
|
+
let version;
|
|
211
|
+
if (resolvedPath !== packPath) {
|
|
212
|
+
version = path.basename(resolvedPath);
|
|
213
|
+
}
|
|
214
|
+
packs.push({
|
|
215
|
+
name: entry.name,
|
|
216
|
+
path: resolvedPath,
|
|
217
|
+
version,
|
|
218
|
+
source,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return packs;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* List all available agent packs.
|
|
225
|
+
*
|
|
226
|
+
* @param workspaceRoot - Workspace root to search for workspace-local packs
|
|
227
|
+
* @returns Array of packs from both workspace and user library
|
|
228
|
+
*/
|
|
229
|
+
function listAvailablePacks(workspaceRoot) {
|
|
230
|
+
const packs = [];
|
|
231
|
+
const seen = new Set();
|
|
232
|
+
// 1. Workspace-local packs (higher priority)
|
|
233
|
+
if (workspaceRoot) {
|
|
234
|
+
const workspaceAgentsDir = path.join(workspaceRoot, branding_1.AGENTIDE_DIR_NAME, AGENTS_SUBDIR);
|
|
235
|
+
const workspacePacks = listPacksFromDir(workspaceAgentsDir, 'workspace');
|
|
236
|
+
for (const pack of workspacePacks) {
|
|
237
|
+
packs.push(pack);
|
|
238
|
+
seen.add(pack.name);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// 2. User library packs (skip if already in workspace)
|
|
242
|
+
const userPacks = listPacksFromDir(USER_AGENTS_DIR, 'user-library');
|
|
243
|
+
for (const pack of userPacks) {
|
|
244
|
+
if (!seen.has(pack.name)) {
|
|
245
|
+
packs.push(pack);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return packs;
|
|
249
|
+
}
|
|
250
|
+
// -----------------------------------------------------------------------------
|
|
251
|
+
// Pack Loading
|
|
252
|
+
// -----------------------------------------------------------------------------
|
|
253
|
+
/**
|
|
254
|
+
* Load an agent pack from the filesystem.
|
|
255
|
+
*
|
|
256
|
+
* @param nameOrPath - Pack name or path
|
|
257
|
+
* @param workspaceRoot - Workspace root for finding workspace-local packs
|
|
258
|
+
*/
|
|
259
|
+
async function loadAgentPack(nameOrPath, workspaceRoot) {
|
|
260
|
+
const packPath = resolvePackPath(nameOrPath, workspaceRoot);
|
|
261
|
+
if (!packPath) {
|
|
262
|
+
const isExplicitPath = path.isAbsolute(nameOrPath) || nameOrPath.startsWith('./') || nameOrPath.startsWith('../');
|
|
263
|
+
const searchedLocations = isExplicitPath
|
|
264
|
+
? [path.resolve(process.cwd(), nameOrPath)]
|
|
265
|
+
: [
|
|
266
|
+
`${process.cwd()}/${nameOrPath}`,
|
|
267
|
+
`${process.cwd()}/agents/${nameOrPath}`,
|
|
268
|
+
workspaceRoot ? `${workspaceRoot}/${branding_1.AGENTIDE_DIR_NAME}/agents/${nameOrPath}` : null,
|
|
269
|
+
`${USER_AGENTS_DIR}/${nameOrPath}`,
|
|
270
|
+
].filter(Boolean);
|
|
271
|
+
throw new Error(`Agent pack not found: ${nameOrPath}\n Searched: ${searchedLocations.join(', ')}`);
|
|
272
|
+
}
|
|
273
|
+
// Load manifest
|
|
274
|
+
const manifestPath = path.join(packPath, 'agent.yaml');
|
|
275
|
+
if (!fs.existsSync(manifestPath)) {
|
|
276
|
+
throw new Error(`Missing agent.yaml in pack: ${packPath}`);
|
|
277
|
+
}
|
|
278
|
+
const manifestContent = fs.readFileSync(manifestPath, 'utf-8');
|
|
279
|
+
const manifest = yaml.load(manifestContent);
|
|
280
|
+
// Validate manifest
|
|
281
|
+
validateManifest(manifest, manifestPath);
|
|
282
|
+
const normalizedManifest = normalizeManifestForRuntime(manifest);
|
|
283
|
+
// Load system prompt
|
|
284
|
+
let systemPrompt = '';
|
|
285
|
+
const systemPromptPath = path.join(packPath, 'AGENTS.md');
|
|
286
|
+
if (fs.existsSync(systemPromptPath)) {
|
|
287
|
+
systemPrompt = fs.readFileSync(systemPromptPath, 'utf-8');
|
|
288
|
+
}
|
|
289
|
+
// Load rules
|
|
290
|
+
const rules = [];
|
|
291
|
+
return {
|
|
292
|
+
manifest: normalizedManifest,
|
|
293
|
+
packPath,
|
|
294
|
+
systemPrompt,
|
|
295
|
+
rules,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
function normalizeManifestForRuntime(manifest) {
|
|
299
|
+
const rawEngine = manifest.spec.engine?.trim() ?? '';
|
|
300
|
+
const normalizedEngine = rawEngine.toLowerCase();
|
|
301
|
+
if (rawEngine !== normalizedEngine) {
|
|
302
|
+
return {
|
|
303
|
+
...manifest,
|
|
304
|
+
spec: {
|
|
305
|
+
...manifest.spec,
|
|
306
|
+
engine: normalizedEngine,
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return manifest;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Validate a pack manifest.
|
|
314
|
+
*/
|
|
315
|
+
function validateManifest(manifest, sourcePath) {
|
|
316
|
+
const errors = [];
|
|
317
|
+
if (!manifest.metadata?.name) {
|
|
318
|
+
errors.push('Missing metadata.name');
|
|
319
|
+
}
|
|
320
|
+
if (!manifest.metadata?.version) {
|
|
321
|
+
errors.push('Missing metadata.version');
|
|
322
|
+
}
|
|
323
|
+
if (!manifest.spec?.engine?.trim()) {
|
|
324
|
+
errors.push('Missing spec.engine');
|
|
325
|
+
}
|
|
326
|
+
const normalizedEngine = manifest.spec?.engine?.trim().toLowerCase();
|
|
327
|
+
if (normalizedEngine === 'custom') {
|
|
328
|
+
errors.push('Invalid spec.engine: use the concrete custom engine id (for example, openclaw), not "custom"');
|
|
329
|
+
}
|
|
330
|
+
if (manifest.spec?.cheapModel !== undefined && typeof manifest.spec.cheapModel !== 'string') {
|
|
331
|
+
errors.push('Invalid spec.cheapModel: must be a string when provided');
|
|
332
|
+
}
|
|
333
|
+
if (errors.length > 0) {
|
|
334
|
+
throw new Error(`Invalid agent manifest at ${sourcePath}:\n - ${errors.join('\n - ')}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Get default engine and model when no pack is specified.
|
|
339
|
+
*/
|
|
340
|
+
function getDefaultConfig() {
|
|
341
|
+
const rawEngine = (getEnvVar('AGENTHIPPO_DEFAULT_ENGINE', 'AGENTIDE_DEFAULT_ENGINE') || 'claude').trim().toLowerCase();
|
|
342
|
+
return {
|
|
343
|
+
engine: rawEngine,
|
|
344
|
+
model: getEnvVar('AGENTHIPPO_DEFAULT_MODEL', 'AGENTIDE_DEFAULT_MODEL') || 'claude-sonnet-4-5-20250929',
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Returns the env-configured default model without a hardcoded fallback.
|
|
349
|
+
* Used after custom engine manifest defaults so AGENTHIPPO_DEFAULT_MODEL only
|
|
350
|
+
* wins when no request, pack, or manifest model is available.
|
|
351
|
+
*/
|
|
352
|
+
function getEnvDefaultModel() {
|
|
353
|
+
return getEnvVar('AGENTHIPPO_DEFAULT_MODEL', 'AGENTIDE_DEFAULT_MODEL')?.trim() || undefined;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Get API configuration from environment.
|
|
357
|
+
*/
|
|
358
|
+
function getApiConfig() {
|
|
359
|
+
const litellmApiKey = getEnvVar('AGENTHIPPO_LITELLM_API_KEY', 'AGENTIDE_LITELLM_API_KEY');
|
|
360
|
+
const litellmBaseUrl = getEnvVar('AGENTHIPPO_LITELLM_BASE_URL', 'AGENTIDE_LITELLM_BASE_URL');
|
|
361
|
+
const anthropicApiKey = process.env.ANTHROPIC_API_KEY || process.env.CLAUDE_API_KEY;
|
|
362
|
+
const openaiApiKey = process.env.OPENAI_API_KEY;
|
|
363
|
+
const apiKey = litellmApiKey || anthropicApiKey || openaiApiKey;
|
|
364
|
+
const useLiteLLM = Boolean(litellmApiKey && litellmBaseUrl);
|
|
365
|
+
return {
|
|
366
|
+
apiKey,
|
|
367
|
+
baseUrl: litellmBaseUrl,
|
|
368
|
+
useLiteLLM,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Get file access mode from pack manifest.
|
|
373
|
+
*/
|
|
374
|
+
function getFileAccess(pack) {
|
|
375
|
+
return pack?.manifest.spec.permissions?.fileAccess ?? 'workspace-write';
|
|
376
|
+
}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) AgentHippo.ai. All rights reserved.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.runCustomEngineRunnerMain = runCustomEngineRunnerMain;
|
|
40
|
+
const node_readline_1 = require("node:readline");
|
|
41
|
+
const node_url_1 = require("node:url");
|
|
42
|
+
const path = __importStar(require("node:path"));
|
|
43
|
+
/** Must stay self-contained — this file is embedded and run from ~/.agent-hippo/cache/cli/. */
|
|
44
|
+
const AGENTHIPPO_MCP_SERVERS_ENV = 'AGENTHIPPO_MCP_SERVERS';
|
|
45
|
+
function parseInlineMcpServers(raw) {
|
|
46
|
+
if (!raw?.trim()) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(raw);
|
|
51
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return parsed;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function emitEvent(obj) {
|
|
61
|
+
process.stdout.write(`${JSON.stringify(obj)}\n`);
|
|
62
|
+
}
|
|
63
|
+
const runtime = {
|
|
64
|
+
logger: {
|
|
65
|
+
info: () => { },
|
|
66
|
+
warn: () => { },
|
|
67
|
+
error: () => { },
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
/** Apply the engine entry's directory to cwd + NODE_PATH so its node_modules resolve. */
|
|
71
|
+
function applyEngineDir(entryPath) {
|
|
72
|
+
const engineDir = path.dirname(entryPath);
|
|
73
|
+
process.chdir(engineDir);
|
|
74
|
+
const engineNodeModules = path.join(engineDir, 'node_modules');
|
|
75
|
+
const existingNodePath = process.env.NODE_PATH?.trim();
|
|
76
|
+
process.env.NODE_PATH = existingNodePath
|
|
77
|
+
? `${engineNodeModules}${path.delimiter}${existingNodePath}`
|
|
78
|
+
: engineNodeModules;
|
|
79
|
+
}
|
|
80
|
+
/** Import the engine module and instantiate the exported engine (must provide run(turn)). */
|
|
81
|
+
async function loadEngine(entryPath, engineExport) {
|
|
82
|
+
const mod = (await import((0, node_url_1.pathToFileURL)(entryPath).href));
|
|
83
|
+
const exported = (engineExport ? (mod[engineExport] ?? mod.default?.[engineExport]) : undefined) ??
|
|
84
|
+
mod.default;
|
|
85
|
+
const EngineClass = typeof exported === 'function' ? exported : null;
|
|
86
|
+
const engine = EngineClass ? new EngineClass() : exported;
|
|
87
|
+
if (!engine || typeof engine.run !== 'function') {
|
|
88
|
+
throw new Error('Engine export must provide run(turn)');
|
|
89
|
+
}
|
|
90
|
+
return engine;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build a CustomEngineTurn from an env map (shared by one-shot and persistent modes).
|
|
94
|
+
*
|
|
95
|
+
* ENGINE CONTRACT: in persistent mode a single warm worker serves many chat sessions, and its
|
|
96
|
+
* process.env is frozen at first spawn (the *first* turn's secrets/session keys). Per-turn values
|
|
97
|
+
* arrive here in `env` (the worker's per-turn `run` message), never on process.env. Engines must
|
|
98
|
+
* therefore read all per-turn state from `turn.env`/`turn.routing`/`turn.session` and never from
|
|
99
|
+
* `process.env` directly, or they will see the spawn-time values for the worker's whole lifetime
|
|
100
|
+
* and cross-wire sessions.
|
|
101
|
+
*/
|
|
102
|
+
function buildTurn(env, emitter, signal) {
|
|
103
|
+
const entryPath = env.AGENTHIPPO_ENGINE_ENTRY?.trim() ?? '';
|
|
104
|
+
const engineDir = path.dirname(entryPath);
|
|
105
|
+
const message = env.AGENTHIPPO_MESSAGE ?? '';
|
|
106
|
+
const workspaceRoot = env.AGENTHIPPO_WORKSPACE_ROOT ?? process.cwd();
|
|
107
|
+
const modelId = env.AGENTHIPPO_MODEL_ID ?? 'auto';
|
|
108
|
+
const sessionKey = env.AGENTHIPPO_CONVERSATION_KEY?.trim()
|
|
109
|
+
|| env.AGENTIDE_CHAT_SESSION_ID?.trim()
|
|
110
|
+
|| env.AGENTHIPPO_CHAT_SESSION_ID?.trim()
|
|
111
|
+
|| 'runner';
|
|
112
|
+
const chatSessionId = env.AGENTIDE_CHAT_SESSION_ID?.trim()
|
|
113
|
+
|| env.AGENTHIPPO_CHAT_SESSION_ID?.trim()
|
|
114
|
+
|| sessionKey;
|
|
115
|
+
const contextSessionId = env.AGENTHIPPO_CONTEXT_SESSION_ID?.trim() || chatSessionId;
|
|
116
|
+
const mcpServers = parseInlineMcpServers(env[AGENTHIPPO_MCP_SERVERS_ENV]);
|
|
117
|
+
return {
|
|
118
|
+
message,
|
|
119
|
+
modelId,
|
|
120
|
+
workspaceRoot,
|
|
121
|
+
additionalDirectories: [],
|
|
122
|
+
permissions: { fileAccess: 'full' },
|
|
123
|
+
env: { ...env },
|
|
124
|
+
routing: {
|
|
125
|
+
useLiteLLM: env.AGENTHIPPO_USE_LITELLM === 'true',
|
|
126
|
+
...(env.AGENTHIPPO_API_KEY ? { apiKey: env.AGENTHIPPO_API_KEY } : {}),
|
|
127
|
+
...(env.AGENTHIPPO_BASE_URL ? { baseUrl: env.AGENTHIPPO_BASE_URL } : {}),
|
|
128
|
+
...(env.AGENTHIPPO_OPENAI_BASE_URL ? { openaiBaseUrl: env.AGENTHIPPO_OPENAI_BASE_URL } : {}),
|
|
129
|
+
},
|
|
130
|
+
session: {
|
|
131
|
+
key: sessionKey,
|
|
132
|
+
chatSessionId,
|
|
133
|
+
contextSessionId,
|
|
134
|
+
isEphemeral: env.AGENTHIPPO_IS_EPHEMERAL === 'true',
|
|
135
|
+
engineHomeDir: env.AGENTHIPPO_ENGINE_HOME?.trim() || engineDir,
|
|
136
|
+
engineSessionDir: env.AGENTHIPPO_ENGINE_SESSION_DIR?.trim() || engineDir,
|
|
137
|
+
nativeSessionId: env.AGENTHIPPO_NATIVE_SESSION_ID?.trim() || undefined,
|
|
138
|
+
contextFilePath: env.AGENTHIPPO_CONTEXT_EXPORT_PATH?.trim() || undefined,
|
|
139
|
+
terminalLogPath: env.AGENTHIPPO_TERMINAL_LOG_PATH?.trim() || undefined,
|
|
140
|
+
attachmentsDir: env.AGENTHIPPO_ATTACHMENTS_DIR?.trim() || undefined,
|
|
141
|
+
},
|
|
142
|
+
agent: { id: env.AGENTHIPPO_ACTIVE_AGENT ?? 'default' },
|
|
143
|
+
...(mcpServers ? { mcpServers } : {}),
|
|
144
|
+
emitter,
|
|
145
|
+
runtime,
|
|
146
|
+
signal,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* One-shot mode (strategy "node-subprocess"): build one turn from process.env, run, exit.
|
|
151
|
+
* Parent sets AGENTHIPPO_* env vars before spawn.
|
|
152
|
+
*/
|
|
153
|
+
async function runOnce() {
|
|
154
|
+
const entryPath = process.env.AGENTHIPPO_ENGINE_ENTRY?.trim();
|
|
155
|
+
if (!entryPath) {
|
|
156
|
+
emitEvent({ type: 'error', message: 'AGENTHIPPO_ENGINE_ENTRY is required' });
|
|
157
|
+
return 1;
|
|
158
|
+
}
|
|
159
|
+
applyEngineDir(entryPath);
|
|
160
|
+
let doneEmitted = false;
|
|
161
|
+
const emitter = {
|
|
162
|
+
async text(delta) { emitEvent({ type: 'text', delta }); },
|
|
163
|
+
async thinking(delta) { emitEvent({ type: 'thinking', delta }); },
|
|
164
|
+
async toolStart(toolName, input, toolCallId) { emitEvent({ type: 'toolStart', toolName, input, toolCallId }); },
|
|
165
|
+
async toolEnd(toolName, toolCallId, result, isError) { emitEvent({ type: 'toolEnd', toolName, toolCallId, result, isError }); },
|
|
166
|
+
async progress(msg) { emitEvent({ type: 'progress', message: msg }); },
|
|
167
|
+
async error(msg) { emitEvent({ type: 'error', message: msg }); },
|
|
168
|
+
async done() {
|
|
169
|
+
// Engines call done(); runner also calls done() after run — emit at most once.
|
|
170
|
+
if (doneEmitted) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
doneEmitted = true;
|
|
174
|
+
emitEvent({ type: 'done' });
|
|
175
|
+
},
|
|
176
|
+
async question() {
|
|
177
|
+
return { selected: [], freeText: null, declined: true };
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
try {
|
|
181
|
+
const engine = await loadEngine(entryPath, process.env.AGENTHIPPO_ENGINE_EXPORT?.trim());
|
|
182
|
+
if (process.env.AGENTHIPPO_CUSTOM_ENGINE_PROBE === 'import') {
|
|
183
|
+
emitEvent({ type: 'probe', ok: true });
|
|
184
|
+
return 0;
|
|
185
|
+
}
|
|
186
|
+
const turn = buildTurn(process.env, emitter);
|
|
187
|
+
const result = await engine.run(turn);
|
|
188
|
+
if (result?.nativeSessionId) {
|
|
189
|
+
emitEvent({ type: 'nativeSessionId', nativeSessionId: result.nativeSessionId });
|
|
190
|
+
}
|
|
191
|
+
await emitter.done();
|
|
192
|
+
return 0;
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
196
|
+
emitEvent({ type: 'error', message: msg });
|
|
197
|
+
return 1;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Persistent mode (strategy "persistent-worker"): load the engine once (SDK stays warm),
|
|
202
|
+
* then serve turns from stdin NDJSON requests, tagging each event with its run id so the
|
|
203
|
+
* host can multiplex concurrent turns. The host recycles this child on failure.
|
|
204
|
+
*/
|
|
205
|
+
async function runPersistent() {
|
|
206
|
+
const entryPath = process.env.AGENTHIPPO_ENGINE_ENTRY?.trim();
|
|
207
|
+
if (!entryPath) {
|
|
208
|
+
emitEvent({ type: 'error', message: 'AGENTHIPPO_ENGINE_ENTRY is required' });
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
applyEngineDir(entryPath);
|
|
212
|
+
let engine;
|
|
213
|
+
try {
|
|
214
|
+
engine = await loadEngine(entryPath, process.env.AGENTHIPPO_ENGINE_EXPORT?.trim());
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
emitEvent({ type: 'error', message: err instanceof Error ? err.message : String(err) });
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
220
|
+
const controllers = new Map();
|
|
221
|
+
const makeEmitter = (id) => {
|
|
222
|
+
const emit = (event) => emitEvent({ id, event });
|
|
223
|
+
let doneEmitted = false;
|
|
224
|
+
return {
|
|
225
|
+
async text(delta) { emit({ type: 'text', delta }); },
|
|
226
|
+
async thinking(delta) { emit({ type: 'thinking', delta }); },
|
|
227
|
+
async toolStart(toolName, input, toolCallId) { emit({ type: 'toolStart', toolName, input, toolCallId }); },
|
|
228
|
+
async toolEnd(toolName, toolCallId, result, isError) { emit({ type: 'toolEnd', toolName, toolCallId, result, isError }); },
|
|
229
|
+
async progress(msg) { emit({ type: 'progress', message: msg }); },
|
|
230
|
+
async error(msg) { emit({ type: 'error', message: msg }); },
|
|
231
|
+
async done() {
|
|
232
|
+
if (doneEmitted) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
doneEmitted = true;
|
|
236
|
+
emit({ type: 'done' });
|
|
237
|
+
},
|
|
238
|
+
async question() {
|
|
239
|
+
return { selected: [], freeText: null, declined: true };
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
const handleRun = async (id, runEnv) => {
|
|
244
|
+
const controller = new AbortController();
|
|
245
|
+
controllers.set(id, controller);
|
|
246
|
+
const emitter = makeEmitter(id);
|
|
247
|
+
try {
|
|
248
|
+
// Build the turn purely from this turn's runEnv — it is a complete environment
|
|
249
|
+
// (host buildRunnerChildEnv spreads process.env + the per-turn block). Do NOT merge
|
|
250
|
+
// the worker's process.env or mutate it: a warm worker serves many chat sessions, and
|
|
251
|
+
// per-session keys (AGENTHIPPO_NATIVE_SESSION_ID/CONVERSATION_KEY) are only present for
|
|
252
|
+
// sessions that have them, so leaking them across turns cross-wires Cursor sessions.
|
|
253
|
+
const turn = buildTurn(runEnv, emitter, controller.signal);
|
|
254
|
+
const result = await engine.run(turn);
|
|
255
|
+
await emitter.done();
|
|
256
|
+
// Terminal control message — sent after the engine fully settles so nativeSessionId
|
|
257
|
+
// is captured even though engines call done() mid-run.
|
|
258
|
+
emitEvent({ type: 'result', id, nativeSessionId: result?.nativeSessionId });
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
262
|
+
emitEvent({ id, event: { type: 'error', message } });
|
|
263
|
+
emitEvent({ type: 'failed', id, message });
|
|
264
|
+
}
|
|
265
|
+
finally {
|
|
266
|
+
controllers.delete(id);
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
const rl = (0, node_readline_1.createInterface)({ input: process.stdin });
|
|
270
|
+
rl.on('line', line => {
|
|
271
|
+
const trimmed = line.trim();
|
|
272
|
+
if (!trimmed) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
let req;
|
|
276
|
+
try {
|
|
277
|
+
req = JSON.parse(trimmed);
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
if (req.type === 'run' && typeof req.id === 'string') {
|
|
283
|
+
void handleRun(req.id, req.env ?? {});
|
|
284
|
+
}
|
|
285
|
+
else if (req.type === 'abort' && typeof req.id === 'string') {
|
|
286
|
+
controllers.get(req.id)?.abort();
|
|
287
|
+
}
|
|
288
|
+
else if (req.type === 'shutdown') {
|
|
289
|
+
rl.close();
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
rl.on('close', () => {
|
|
293
|
+
for (const controller of controllers.values()) {
|
|
294
|
+
controller.abort();
|
|
295
|
+
}
|
|
296
|
+
process.exit(0);
|
|
297
|
+
});
|
|
298
|
+
emitEvent({ type: 'ready' });
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Exported one-shot entry. NOTE: this is always one-shot regardless of AGENTHIPPO_RUNNER_MODE —
|
|
302
|
+
* persistent mode is selected only by the module-bottom dispatch below (the real CLI entrypoint),
|
|
303
|
+
* not by this function. Callers that import this module get one-shot behavior from this export.
|
|
304
|
+
*/
|
|
305
|
+
async function runCustomEngineRunnerMain() {
|
|
306
|
+
return runOnce();
|
|
307
|
+
}
|
|
308
|
+
// Module-level dispatch is the actual entrypoint: the mode is fixed at spawn by the env var the
|
|
309
|
+
// host sets, so importing this module for its export still runs the correct loop for that mode.
|
|
310
|
+
if (process.env.AGENTHIPPO_RUNNER_MODE === 'persistent') {
|
|
311
|
+
void runPersistent();
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
void runCustomEngineRunnerMain().then(code => { process.exit(code); }, err => {
|
|
315
|
+
emitEvent({ type: 'error', message: err instanceof Error ? err.message : String(err) });
|
|
316
|
+
process.exit(1);
|
|
317
|
+
});
|
|
318
|
+
}
|