@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,473 @@
|
|
|
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.syncPackMcpToWorkspace = syncPackMcpToWorkspace;
|
|
40
|
+
exports.syncPackToWorkspace = syncPackToWorkspace;
|
|
41
|
+
exports.computeSkillsSignature = computeSkillsSignature;
|
|
42
|
+
exports.createSkillsSignatureGetter = createSkillsSignatureGetter;
|
|
43
|
+
exports.createSessionDir = createSessionDir;
|
|
44
|
+
exports.getSessionDir = getSessionDir;
|
|
45
|
+
/**
|
|
46
|
+
* Headless Sync
|
|
47
|
+
*
|
|
48
|
+
* Simple one-time sync of pack content to workspace derived directories.
|
|
49
|
+
* This is a lightweight alternative to the full SyncService used in the extension.
|
|
50
|
+
*
|
|
51
|
+
* The extension's SyncService handles:
|
|
52
|
+
* - File watchers for live reload
|
|
53
|
+
* - Bi-directional sync
|
|
54
|
+
* - Manifest tracking
|
|
55
|
+
* - Remote skills sync
|
|
56
|
+
*
|
|
57
|
+
* This module does:
|
|
58
|
+
* - One-time copy of pack content to <brand>/agents/<packId>/ (where engines look)
|
|
59
|
+
* - Copy AGENTS.md to .claude/CLAUDE.md and .codex/AGENTS.md (derived dirs)
|
|
60
|
+
* - Symlink skills/ and rules/ directories
|
|
61
|
+
* - Create session directories
|
|
62
|
+
* - Compute skills signature for cache invalidation
|
|
63
|
+
*/
|
|
64
|
+
const fs_1 = require("fs");
|
|
65
|
+
const path = __importStar(require("path"));
|
|
66
|
+
const crypto_1 = require("crypto");
|
|
67
|
+
const utils_1 = require("../utils");
|
|
68
|
+
const shared_1 = require("../shared");
|
|
69
|
+
const paths_1 = require("../agentpack/paths");
|
|
70
|
+
const manifest_1 = require("../agentpack/manifest");
|
|
71
|
+
const mcp_1 = require("../mcp");
|
|
72
|
+
const customRegistry_1 = require("../engines/customRegistry");
|
|
73
|
+
/**
|
|
74
|
+
* Merge pack agent.yaml spec.mcp configs into workspace .mcp.json so loadMcpServers()
|
|
75
|
+
* and inline custom-engine MCP work after syncPackToWorkspace (serve/ask).
|
|
76
|
+
*/
|
|
77
|
+
async function syncPackMcpToWorkspace(packPath, workspaceRoot, packId, logger) {
|
|
78
|
+
const manifestPath = path.join(packPath, paths_1.AGENT_CONSTANTS.MANIFEST_FILE);
|
|
79
|
+
if (!(await (0, utils_1.pathExists)(manifestPath))) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
let manifest;
|
|
83
|
+
try {
|
|
84
|
+
manifest = await (0, manifest_1.loadAgentManifest)(manifestPath);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
logInfo(logger, `[AgentIDE] Skipping pack MCP sync for ${packId}: ${e instanceof Error ? e.message : String(e)}`);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const mcpEntries = manifest.spec?.mcp;
|
|
91
|
+
if (!mcpEntries?.length) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const agentideMcpDir = path.join(workspaceRoot, paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME, paths_1.AGENT_CONSTANTS.AGENTS_DIR, packId, paths_1.AGENT_CONSTANTS.MCP_DIR);
|
|
95
|
+
await fs_1.promises.mkdir(agentideMcpDir, { recursive: true });
|
|
96
|
+
const merged = { mcpServers: {} };
|
|
97
|
+
const targetPath = path.join(agentideMcpDir, '.mcp.json');
|
|
98
|
+
for (const entry of mcpEntries) {
|
|
99
|
+
const configRel = entry.config?.trim();
|
|
100
|
+
if (!configRel) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const configPath = path.resolve(packPath, configRel);
|
|
104
|
+
if (!isWithin(packPath, configPath)) {
|
|
105
|
+
logInfo(logger, `[AgentIDE] Skipping MCP config ${configRel}: path escapes pack root`);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (!(await (0, utils_1.pathExists)(configPath))) {
|
|
109
|
+
logInfo(logger, `[AgentIDE] Skipping MCP config ${configRel}: file not found`);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
const raw = JSON.parse(await fs_1.promises.readFile(configPath, 'utf8'));
|
|
114
|
+
const servers = raw.mcpServers;
|
|
115
|
+
if (servers && typeof servers === 'object') {
|
|
116
|
+
Object.assign(merged.mcpServers, servers);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (e) {
|
|
120
|
+
logInfo(logger, `[AgentIDE] Skipping MCP config ${configRel}: ${e instanceof Error ? e.message : String(e)}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Copy pack mcp/ subdirs (server assets referenced via ${serverDir}/…).
|
|
124
|
+
const packMcpDir = path.join(packPath, paths_1.AGENT_CONSTANTS.MCP_DIR);
|
|
125
|
+
if (await (0, utils_1.pathExists)(packMcpDir)) {
|
|
126
|
+
const entries = await fs_1.promises.readdir(packMcpDir, { withFileTypes: true });
|
|
127
|
+
for (const entry of entries) {
|
|
128
|
+
if (!entry.isDirectory() || entry.name.startsWith('.')) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const src = path.join(packMcpDir, entry.name);
|
|
132
|
+
const dst = path.join(agentideMcpDir, entry.name);
|
|
133
|
+
if (!(await (0, utils_1.pathExists)(dst))) {
|
|
134
|
+
await (0, utils_1.copyDirRecursive)(src, dst);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (!merged.mcpServers || Object.keys(merged.mcpServers).length === 0) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
await (0, utils_1.writeFileIfChanged)(targetPath, `${JSON.stringify(merged, null, 2)}\n`);
|
|
142
|
+
logInfo(logger, `[AgentIDE] Synced pack MCP config: ${targetPath}`);
|
|
143
|
+
}
|
|
144
|
+
function isRelativeLocalPath(value) {
|
|
145
|
+
if (!value || !value.trim()) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
if (path.isAbsolute(value)) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
if (/^(https?:\/\/|git@|ssh:\/\/)/i.test(value)) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
function isWithin(baseDir, candidate) {
|
|
157
|
+
const rel = path.relative(baseDir, candidate);
|
|
158
|
+
return rel !== '..' && !rel.startsWith(`..${path.sep}`) && !path.isAbsolute(rel);
|
|
159
|
+
}
|
|
160
|
+
async function isDirEmpty(targetDir) {
|
|
161
|
+
const entries = await fs_1.promises.readdir(targetDir);
|
|
162
|
+
return entries.length === 0;
|
|
163
|
+
}
|
|
164
|
+
async function seedPackDataIfNeeded(workspaceRoot, packPath, packId, logger) {
|
|
165
|
+
const manifestPath = path.join(packPath, paths_1.AGENT_CONSTANTS.MANIFEST_FILE);
|
|
166
|
+
if (!(await (0, utils_1.pathExists)(manifestPath))) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
const manifest = await (0, manifest_1.loadAgentManifest)(manifestPath);
|
|
171
|
+
const data = manifest.spec?.data;
|
|
172
|
+
if (!data) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const sourcePath = data.sourcePath?.trim() || './data';
|
|
176
|
+
const workspacePath = (data.workspacePath?.trim() || `.${path.sep}${paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME}${path.sep}data${path.sep}${packId}`)
|
|
177
|
+
.replace(/^(?:\.\/|\.\\)/, '');
|
|
178
|
+
if (!isRelativeLocalPath(sourcePath) || !isRelativeLocalPath(workspacePath)) {
|
|
179
|
+
logInfo(logger, `[AgentIDE] Skipping data sync for ${packId}: invalid spec.data paths`);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const sourceDir = path.resolve(packPath, sourcePath);
|
|
183
|
+
const targetDir = path.resolve(workspaceRoot, workspacePath);
|
|
184
|
+
if (!isWithin(packPath, sourceDir) || !isWithin(workspaceRoot, targetDir)) {
|
|
185
|
+
logInfo(logger, `[AgentIDE] Skipping data sync for ${packId}: path escapes allowed root`);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (!(await (0, utils_1.pathExists)(sourceDir))) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (!(await (0, utils_1.pathExists)(targetDir))) {
|
|
192
|
+
await (0, utils_1.copyDirRecursive)(sourceDir, targetDir);
|
|
193
|
+
logInfo(logger, `[AgentIDE] Seeded pack data for ${packId}: ${targetDir}`);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const st = await fs_1.promises.stat(targetDir);
|
|
197
|
+
if (st.isDirectory() && await isDirEmpty(targetDir)) {
|
|
198
|
+
await (0, utils_1.copyDirRecursive)(sourceDir, targetDir);
|
|
199
|
+
logInfo(logger, `[AgentIDE] Seeded pack data for ${packId}: ${targetDir}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
logInfo(logger, `[AgentIDE] Skipping data sync for ${packId}: ${e instanceof Error ? e.message : String(e)}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async function skillDirHasReadableSkillMd(skillDir) {
|
|
207
|
+
const skillMd = path.join(skillDir, 'SKILL.md');
|
|
208
|
+
try {
|
|
209
|
+
const stat = await fs_1.promises.lstat(skillMd);
|
|
210
|
+
if (stat.isSymbolicLink()) {
|
|
211
|
+
const link = await fs_1.promises.readlink(skillMd);
|
|
212
|
+
const linkAbs = path.isAbsolute(link) ? link : path.resolve(path.dirname(skillMd), link);
|
|
213
|
+
if (path.resolve(linkAbs) === path.resolve(skillMd)) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
await fs_1.promises.access(skillMd);
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async function mergeBundledSkillsIntoAgentideDir(bundledBasePromptsDir, agentideSkillsDir, logger) {
|
|
225
|
+
const bundledSkillsDir = path.join(bundledBasePromptsDir, 'skills');
|
|
226
|
+
if (!(await (0, utils_1.pathExists)(bundledSkillsDir))) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
await fs_1.promises.mkdir(agentideSkillsDir, { recursive: true });
|
|
230
|
+
const entries = await fs_1.promises.readdir(bundledSkillsDir, { withFileTypes: true });
|
|
231
|
+
for (const entry of entries) {
|
|
232
|
+
if (!entry.isDirectory()) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const dstSkill = path.join(agentideSkillsDir, entry.name);
|
|
236
|
+
if (await (0, utils_1.pathExists)(dstSkill) && await skillDirHasReadableSkillMd(dstSkill)) {
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
if (await (0, utils_1.pathExists)(dstSkill)) {
|
|
240
|
+
await fs_1.promises.rm(dstSkill, { recursive: true, force: true });
|
|
241
|
+
}
|
|
242
|
+
await (0, utils_1.copyDirRecursive)(path.join(bundledSkillsDir, entry.name), dstSkill);
|
|
243
|
+
logInfo(logger, `[AgentIDE] Bootstrapped bundled skill: ${entry.name}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Sync pack content to workspace directories.
|
|
248
|
+
*
|
|
249
|
+
* This prepares the workspace so that the engine SDKs can find the pack's
|
|
250
|
+
* AGENTS.md, rules, and skills. Syncs to both:
|
|
251
|
+
* - <brand>/agents/<packId>/ (where engines look for skills)
|
|
252
|
+
* - .claude/ or .codex/ (derived dirs for rules files)
|
|
253
|
+
*
|
|
254
|
+
* @param workspaceRoot - The workspace directory where the engine will run
|
|
255
|
+
* @param packPath - Path to the pack (e.g., ~/<brand>/agents/joker/1.0.0/)
|
|
256
|
+
* @param packId - The pack ID (e.g., 'joker' or 'default')
|
|
257
|
+
* @param engine - Which engine to sync for ('claude' or 'codex')
|
|
258
|
+
* @param logger - Logger for output
|
|
259
|
+
* @param bundledBasePromptsDir - Optional path to extension's base-prompts (for default agent MCP sync)
|
|
260
|
+
*/
|
|
261
|
+
async function syncPackToWorkspace(workspaceRoot, packPath, packId, engine, logger, bundledBasePromptsDir) {
|
|
262
|
+
const builtinEngine = shared_1.AGENT_ENGINES[engine];
|
|
263
|
+
const engineConfig = builtinEngine
|
|
264
|
+
? {
|
|
265
|
+
workspaceDir: builtinEngine.workspaceDir,
|
|
266
|
+
rulesFile: builtinEngine.rulesFile,
|
|
267
|
+
includeSkills: true,
|
|
268
|
+
includeRules: true,
|
|
269
|
+
}
|
|
270
|
+
: (() => {
|
|
271
|
+
const manifest = (0, customRegistry_1.tryResolveCustomEngineManifest)(workspaceRoot, engine);
|
|
272
|
+
if (!manifest) {
|
|
273
|
+
throw new Error(`Unknown engine: ${engine}`);
|
|
274
|
+
}
|
|
275
|
+
if (!manifest.workspaceSync?.enabled) {
|
|
276
|
+
return undefined;
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
workspaceDir: manifest.workspaceSync.dir,
|
|
280
|
+
rulesFile: manifest.workspaceSync.rulesFile,
|
|
281
|
+
includeSkills: manifest.workspaceSync.includeSkills,
|
|
282
|
+
includeRules: manifest.workspaceSync.includeRules,
|
|
283
|
+
};
|
|
284
|
+
})();
|
|
285
|
+
const agentsMdPath = path.join(packPath, 'AGENTS.md');
|
|
286
|
+
const contextMdPath = path.join(packPath, 'context.md');
|
|
287
|
+
const skillsDir = path.join(packPath, 'skills');
|
|
288
|
+
const rulesDir = path.join(packPath, 'rules');
|
|
289
|
+
// 1. Ensure workspace has .gitignore for derived dirs
|
|
290
|
+
await (0, utils_1.ensureWorkspaceGitAndGitignore)(workspaceRoot, logger);
|
|
291
|
+
// 2. Sync to <brand>/agents/<packId>/ (where engines look for skills)
|
|
292
|
+
const agentideAgentsDir = path.join(workspaceRoot, paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME, paths_1.AGENT_CONSTANTS.AGENTS_DIR, packId);
|
|
293
|
+
await fs_1.promises.mkdir(agentideAgentsDir, { recursive: true });
|
|
294
|
+
// Copy AGENTS.md to <brand>/agents/<packId>/
|
|
295
|
+
if (await (0, utils_1.pathExists)(agentsMdPath)) {
|
|
296
|
+
const agentsContent = await fs_1.promises.readFile(agentsMdPath, 'utf8');
|
|
297
|
+
await (0, utils_1.writeFileIfChanged)(path.join(agentideAgentsDir, paths_1.AGENT_CONSTANTS.AGENTS_MD), agentsContent);
|
|
298
|
+
}
|
|
299
|
+
// Copy context.md to <brand>/agents/<packId>/
|
|
300
|
+
if (await (0, utils_1.pathExists)(contextMdPath)) {
|
|
301
|
+
const contextContent = await fs_1.promises.readFile(contextMdPath, 'utf8');
|
|
302
|
+
await (0, utils_1.writeFileIfChanged)(path.join(agentideAgentsDir, paths_1.AGENT_CONSTANTS.CONTEXT_MD), contextContent);
|
|
303
|
+
}
|
|
304
|
+
// Copy GHOST_TEXT.md (inline completions prompt) if pack includes one
|
|
305
|
+
const ghostTextPath = path.join(packPath, paths_1.AGENT_CONSTANTS.GHOST_TEXT_FILE);
|
|
306
|
+
if (await (0, utils_1.pathExists)(ghostTextPath)) {
|
|
307
|
+
const ghostTextContent = await fs_1.promises.readFile(ghostTextPath, 'utf8');
|
|
308
|
+
await (0, utils_1.writeFileIfChanged)(path.join(agentideAgentsDir, paths_1.AGENT_CONSTANTS.GHOST_TEXT_FILE), ghostTextContent);
|
|
309
|
+
logInfo(logger, `[AgentIDE] Synced GHOST_TEXT.md to ${paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME}`);
|
|
310
|
+
}
|
|
311
|
+
// Sync skills/ to <brand>/agents/<packId>/skills/
|
|
312
|
+
const agentideSkillsDir = path.join(agentideAgentsDir, paths_1.AGENT_CONSTANTS.SKILLS_DIR);
|
|
313
|
+
const resolvedSkillsDir = path.resolve(skillsDir);
|
|
314
|
+
const resolvedAgentideSkillsDir = path.resolve(agentideSkillsDir);
|
|
315
|
+
if (await (0, utils_1.pathExists)(skillsDir)) {
|
|
316
|
+
if (resolvedSkillsDir === resolvedAgentideSkillsDir) {
|
|
317
|
+
logInfo(logger, `[AgentIDE] Skipping skills self-sync (pack already under ${paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME}/agents/${packId})`);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
await (0, utils_1.syncDirByFileLinks)(skillsDir, agentideSkillsDir, logger, `${paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME}/agents/${packId}/skills`);
|
|
321
|
+
logInfo(logger, `[AgentIDE] Synced skills to ${paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME}: ${agentideSkillsDir}`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
if (bundledBasePromptsDir) {
|
|
325
|
+
await mergeBundledSkillsIntoAgentideDir(bundledBasePromptsDir, agentideSkillsDir, logger);
|
|
326
|
+
}
|
|
327
|
+
// Sync rules/ to <brand>/agents/<packId>/rules/
|
|
328
|
+
const agentideRulesDir = path.join(agentideAgentsDir, paths_1.AGENT_CONSTANTS.RULES_DIR);
|
|
329
|
+
if (await (0, utils_1.pathExists)(rulesDir)) {
|
|
330
|
+
await fs_1.promises.mkdir(agentideRulesDir, { recursive: true });
|
|
331
|
+
const entries = await fs_1.promises.readdir(rulesDir, { withFileTypes: true });
|
|
332
|
+
for (const entry of entries) {
|
|
333
|
+
if (!entry.isFile() || !entry.name.toLowerCase().endsWith('.md')) {
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
const src = path.join(rulesDir, entry.name);
|
|
337
|
+
const dst = path.join(agentideRulesDir, entry.name);
|
|
338
|
+
await (0, utils_1.symlinkOrCopyFile)(src, dst, logger, `rules/${entry.name}`, { force: true });
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
// Sync MCP config to <brand>/agents/<packId>/mcp/.mcp.json (for default agent)
|
|
342
|
+
if (packId === paths_1.AGENT_CONSTANTS.DEFAULT_AGENT_ID && bundledBasePromptsDir) {
|
|
343
|
+
const mcpConfig = await (0, mcp_1.getDefaultMcpConfig)(bundledBasePromptsDir);
|
|
344
|
+
if (mcpConfig) {
|
|
345
|
+
const agentideMcpDir = path.join(agentideAgentsDir, paths_1.AGENT_CONSTANTS.MCP_DIR);
|
|
346
|
+
await fs_1.promises.mkdir(agentideMcpDir, { recursive: true });
|
|
347
|
+
const mcpConfigPath = path.join(agentideMcpDir, '.mcp.json');
|
|
348
|
+
await (0, utils_1.writeFileIfChanged)(mcpConfigPath, mcpConfig);
|
|
349
|
+
logInfo(logger, `[AgentIDE] Synced MCP config: ${mcpConfigPath}`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// Pack-declared MCP (agent.yaml spec.mcp → workspace .mcp.json for inline engine pass-through)
|
|
353
|
+
await syncPackMcpToWorkspace(packPath, workspaceRoot, packId, logger);
|
|
354
|
+
// Seed optional data directory into workspace (seed-if-empty)
|
|
355
|
+
await seedPackDataIfNeeded(workspaceRoot, packPath, packId, logger);
|
|
356
|
+
if (!engineConfig) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
// 3. Sync to derived directory (.claude/, .codex/, or manifest workspaceSync.dir)
|
|
360
|
+
const derivedDir = path.join(workspaceRoot, engineConfig.workspaceDir);
|
|
361
|
+
await fs_1.promises.mkdir(derivedDir, { recursive: true });
|
|
362
|
+
// Read and combine AGENTS.md with context.md
|
|
363
|
+
let content = '';
|
|
364
|
+
if (await (0, utils_1.pathExists)(agentsMdPath)) {
|
|
365
|
+
content = await fs_1.promises.readFile(agentsMdPath, 'utf8');
|
|
366
|
+
}
|
|
367
|
+
if (await (0, utils_1.pathExists)(contextMdPath)) {
|
|
368
|
+
const contextContent = await fs_1.promises.readFile(contextMdPath, 'utf8');
|
|
369
|
+
content = content.trimEnd() + '\n\n---\n\n' + contextContent.trimEnd() + '\n';
|
|
370
|
+
}
|
|
371
|
+
// Write to engine-specific rules file
|
|
372
|
+
const rulesFilePath = path.join(derivedDir, engineConfig.rulesFile);
|
|
373
|
+
if (content) {
|
|
374
|
+
await (0, utils_1.writeFileIfChanged)(rulesFilePath, content);
|
|
375
|
+
logInfo(logger, `[AgentIDE] Synced rules: ${rulesFilePath}`);
|
|
376
|
+
}
|
|
377
|
+
// Sync skills/ to derived dir (pack + bundled skills under agentide agents dir)
|
|
378
|
+
const derivedSkillsDir = path.join(derivedDir, 'skills');
|
|
379
|
+
if (engineConfig.includeSkills && await (0, utils_1.pathExists)(agentideSkillsDir)) {
|
|
380
|
+
await (0, utils_1.syncDirByFileLinks)(agentideSkillsDir, derivedSkillsDir, logger, `${engineConfig.workspaceDir}/skills`);
|
|
381
|
+
}
|
|
382
|
+
// Sync rules/ fragments to derived dir
|
|
383
|
+
const derivedRulesDir = path.join(derivedDir, 'rules');
|
|
384
|
+
if (engineConfig.includeRules && await (0, utils_1.pathExists)(rulesDir)) {
|
|
385
|
+
await fs_1.promises.mkdir(derivedRulesDir, { recursive: true });
|
|
386
|
+
const entries = await fs_1.promises.readdir(rulesDir, { withFileTypes: true });
|
|
387
|
+
for (const entry of entries) {
|
|
388
|
+
if (!entry.isFile() || !entry.name.toLowerCase().endsWith('.md')) {
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
391
|
+
const src = path.join(rulesDir, entry.name);
|
|
392
|
+
const dst = path.join(derivedRulesDir, entry.name);
|
|
393
|
+
await (0, utils_1.symlinkOrCopyFile)(src, dst, logger, `rules/${entry.name}`, { force: true });
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
logInfo(logger, `[AgentIDE] Pack '${packId}' synced to workspace: ${workspaceRoot}`);
|
|
397
|
+
}
|
|
398
|
+
// -----------------------------------------------------------------------------
|
|
399
|
+
// Skills Signature
|
|
400
|
+
// -----------------------------------------------------------------------------
|
|
401
|
+
/**
|
|
402
|
+
* Compute a signature for the skills directory (for cache invalidation).
|
|
403
|
+
* This matches what SyncService.getSkillsSignature does but is standalone.
|
|
404
|
+
*
|
|
405
|
+
* @param workspaceRoot - The workspace root directory
|
|
406
|
+
* @param packId - The pack ID to get skills signature for
|
|
407
|
+
* @returns Hash signature or undefined if no skills
|
|
408
|
+
*/
|
|
409
|
+
function computeSkillsSignature(workspaceRoot, packId) {
|
|
410
|
+
const skillsDir = path.join(workspaceRoot, paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME, paths_1.AGENT_CONSTANTS.AGENTS_DIR, packId, paths_1.AGENT_CONSTANTS.SKILLS_DIR);
|
|
411
|
+
try {
|
|
412
|
+
const fs = require('fs');
|
|
413
|
+
if (!fs.existsSync(skillsDir)) {
|
|
414
|
+
return undefined;
|
|
415
|
+
}
|
|
416
|
+
const hash = (0, crypto_1.createHash)('sha256');
|
|
417
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
418
|
+
for (const entry of entries) {
|
|
419
|
+
if (!entry.isDirectory() || entry.name.startsWith('.')) {
|
|
420
|
+
continue;
|
|
421
|
+
}
|
|
422
|
+
const skillMdPath = path.join(skillsDir, entry.name, 'SKILL.md');
|
|
423
|
+
if (fs.existsSync(skillMdPath)) {
|
|
424
|
+
const stat = fs.statSync(skillMdPath);
|
|
425
|
+
hash.update(`${entry.name}:${stat.mtimeMs}`);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return hash.digest('hex').slice(0, 16);
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
return undefined;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Create a getter function for skills signature compatible with engine constructor.
|
|
436
|
+
*/
|
|
437
|
+
function createSkillsSignatureGetter(packId) {
|
|
438
|
+
return (workspaceRoot) => computeSkillsSignature(workspaceRoot, packId);
|
|
439
|
+
}
|
|
440
|
+
// -----------------------------------------------------------------------------
|
|
441
|
+
// Session Management
|
|
442
|
+
// -----------------------------------------------------------------------------
|
|
443
|
+
/**
|
|
444
|
+
* Create a session directory and return the session ID.
|
|
445
|
+
* Creates <brand>/sessions/<sessionId>/ in the workspace.
|
|
446
|
+
*
|
|
447
|
+
* @param workspaceRoot - The workspace root directory
|
|
448
|
+
* @returns The session ID (UUID)
|
|
449
|
+
*/
|
|
450
|
+
async function createSessionDir(workspaceRoot) {
|
|
451
|
+
const sessionId = (0, crypto_1.randomUUID)();
|
|
452
|
+
const sessionDir = path.join(workspaceRoot, paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME, paths_1.AGENT_CONSTANTS.SESSIONS_DIR, sessionId);
|
|
453
|
+
await fs_1.promises.mkdir(sessionDir, { recursive: true });
|
|
454
|
+
return sessionId;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Get the session directory path for a given session ID.
|
|
458
|
+
*/
|
|
459
|
+
function getSessionDir(workspaceRoot, sessionId) {
|
|
460
|
+
return path.join(workspaceRoot, paths_1.AGENT_CONSTANTS.AGENTIDE_DIR_NAME, paths_1.AGENT_CONSTANTS.SESSIONS_DIR, sessionId);
|
|
461
|
+
}
|
|
462
|
+
// -----------------------------------------------------------------------------
|
|
463
|
+
// Helpers
|
|
464
|
+
// -----------------------------------------------------------------------------
|
|
465
|
+
/** Helper to log a message */
|
|
466
|
+
function logInfo(logger, msg) {
|
|
467
|
+
if (logger.appendLine) {
|
|
468
|
+
logger.appendLine(msg);
|
|
469
|
+
}
|
|
470
|
+
else if (logger.info) {
|
|
471
|
+
logger.info(msg);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) AgentHippo.ai. All rights reserved.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/*---------------------------------------------------------------------------------------------
|
|
6
|
+
* MCP server validation and file collection for publishing.
|
|
7
|
+
* Publishing uses the central store via publishToStore() in store/index.ts.
|
|
8
|
+
*--------------------------------------------------------------------------------------------*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.validateMcpConfig = validateMcpConfig;
|
|
44
|
+
exports.createMcpManifest = createMcpManifest;
|
|
45
|
+
exports.collectMcpFiles = collectMcpFiles;
|
|
46
|
+
const fs_1 = require("fs");
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
// -----------------------------------------------------------------------------
|
|
49
|
+
// Validation
|
|
50
|
+
// -----------------------------------------------------------------------------
|
|
51
|
+
/**
|
|
52
|
+
* Validate MCP server configuration.
|
|
53
|
+
*/
|
|
54
|
+
function validateMcpConfig(config) {
|
|
55
|
+
const errors = [];
|
|
56
|
+
const warnings = [];
|
|
57
|
+
if (!config.name) {
|
|
58
|
+
errors.push('MCP server config missing: name');
|
|
59
|
+
}
|
|
60
|
+
if (!config.version) {
|
|
61
|
+
errors.push('MCP server config missing: version');
|
|
62
|
+
}
|
|
63
|
+
else if (!/^\d+\.\d+\.\d+/.test(config.version)) {
|
|
64
|
+
errors.push(`Invalid version format: ${config.version}. Use semver (e.g., 1.0.0)`);
|
|
65
|
+
}
|
|
66
|
+
if (!config.transport) {
|
|
67
|
+
errors.push('MCP server config missing: transport (stdio, sse, or http)');
|
|
68
|
+
}
|
|
69
|
+
else if (!['stdio', 'sse', 'http'].includes(config.transport)) {
|
|
70
|
+
errors.push(`Invalid transport: ${config.transport}. Must be stdio, sse, or http`);
|
|
71
|
+
}
|
|
72
|
+
// Transport-specific validation
|
|
73
|
+
if (config.transport === 'stdio') {
|
|
74
|
+
if (!config.command && !config.npmPackage) {
|
|
75
|
+
errors.push('stdio transport requires command or npmPackage');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (config.transport === 'sse' || config.transport === 'http') {
|
|
79
|
+
if (!config.url) {
|
|
80
|
+
warnings.push(`${config.transport} transport typically requires a url`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (!config.description) {
|
|
84
|
+
warnings.push('Consider adding a description for discoverability');
|
|
85
|
+
}
|
|
86
|
+
return { valid: errors.length === 0, errors, warnings };
|
|
87
|
+
}
|
|
88
|
+
// -----------------------------------------------------------------------------
|
|
89
|
+
// Manifest Creation
|
|
90
|
+
// -----------------------------------------------------------------------------
|
|
91
|
+
/**
|
|
92
|
+
* Create an MCP manifest object from config.
|
|
93
|
+
*/
|
|
94
|
+
function createMcpManifest(config) {
|
|
95
|
+
return {
|
|
96
|
+
name: config.name,
|
|
97
|
+
version: config.version,
|
|
98
|
+
description: config.description,
|
|
99
|
+
transport: config.transport,
|
|
100
|
+
command: config.command,
|
|
101
|
+
args: config.args,
|
|
102
|
+
env: config.env,
|
|
103
|
+
url: config.url,
|
|
104
|
+
npmPackage: config.npmPackage,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// -----------------------------------------------------------------------------
|
|
108
|
+
// File Collection
|
|
109
|
+
// -----------------------------------------------------------------------------
|
|
110
|
+
/**
|
|
111
|
+
* Collect all files from an MCP server directory.
|
|
112
|
+
*/
|
|
113
|
+
async function collectMcpFiles(dir) {
|
|
114
|
+
const files = [];
|
|
115
|
+
async function walk(currentDir, prefix) {
|
|
116
|
+
const entries = await fs_1.promises.readdir(currentDir);
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
// Skip common non-source files
|
|
119
|
+
if (entry.startsWith('.') ||
|
|
120
|
+
entry === 'node_modules' ||
|
|
121
|
+
entry === 'dist' ||
|
|
122
|
+
entry === 'build') {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const fullPath = path.join(currentDir, entry);
|
|
126
|
+
const relativePath = prefix ? `${prefix}/${entry}` : entry;
|
|
127
|
+
const stat = await fs_1.promises.stat(fullPath);
|
|
128
|
+
if (stat.isDirectory()) {
|
|
129
|
+
await walk(fullPath, relativePath);
|
|
130
|
+
}
|
|
131
|
+
else if (stat.isFile()) {
|
|
132
|
+
// Only include source files
|
|
133
|
+
const ext = path.extname(entry).toLowerCase();
|
|
134
|
+
if (['.ts', '.js', '.json', '.md', '.py', '.sh', '.yaml', '.yml'].includes(ext)) {
|
|
135
|
+
const content = await fs_1.promises.readFile(fullPath, 'utf-8');
|
|
136
|
+
files.push({ path: relativePath, content });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
await walk(dir, '');
|
|
142
|
+
return files;
|
|
143
|
+
}
|