@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
package/out/mcp.js
ADDED
|
@@ -0,0 +1,597 @@
|
|
|
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.AGENTHIPPO_MCP_SERVERS_ENV = exports.AGENTHIPPO_DATA_TOKEN_FILE_ENV = void 0;
|
|
40
|
+
exports.loadMcpServers = loadMcpServers;
|
|
41
|
+
exports.resolveMcpEnvVar = resolveMcpEnvVar;
|
|
42
|
+
exports.mcpConfigCacheSignatureSuffix = mcpConfigCacheSignatureSuffix;
|
|
43
|
+
exports.resolveMcpServerEnv = resolveMcpServerEnv;
|
|
44
|
+
exports.generateCodexMcpConfig = generateCodexMcpConfig;
|
|
45
|
+
exports.getDefaultMcpConfig = getDefaultMcpConfig;
|
|
46
|
+
exports.loadBundledMcpServers = loadBundledMcpServers;
|
|
47
|
+
exports.formatInlineMcpServers = formatInlineMcpServers;
|
|
48
|
+
exports.serializeInlineMcpServers = serializeInlineMcpServers;
|
|
49
|
+
exports.parseInlineMcpServers = parseInlineMcpServers;
|
|
50
|
+
const fs_1 = require("fs");
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const credential_context_1 = require("./cli/credential-context");
|
|
53
|
+
const paths_1 = require("./agentpack/paths");
|
|
54
|
+
const agentEnvFile_1 = require("./utils/agentEnvFile");
|
|
55
|
+
// -----------------------------------------------------------------------------
|
|
56
|
+
// Constants
|
|
57
|
+
// -----------------------------------------------------------------------------
|
|
58
|
+
/** Special command value indicating a bundled server reference */
|
|
59
|
+
const ENABLE_BUNDLED_COMMAND = 'enable-bundled';
|
|
60
|
+
/** Special command value indicating a bundled server should be explicitly disabled */
|
|
61
|
+
const DISABLE_BUNDLED_COMMAND = 'disable-bundled';
|
|
62
|
+
/** Name of the MCP config file */
|
|
63
|
+
const MCP_CONFIG_FILE = '.mcp.json';
|
|
64
|
+
/** MCP servers subdirectory in base-prompts */
|
|
65
|
+
const MCP_SERVERS_DIR = 'mcp-servers';
|
|
66
|
+
/**
|
|
67
|
+
* Env var passed to stdio MCP child processes: path to the per-turn data credential
|
|
68
|
+
* file (OBO token, etc.). MCP servers read this file on each tool call — spawn env
|
|
69
|
+
* is fixed at process start and cannot use AsyncLocalStorage.
|
|
70
|
+
*/
|
|
71
|
+
exports.AGENTHIPPO_DATA_TOKEN_FILE_ENV = 'AGENTHIPPO_DATA_TOKEN_FILE';
|
|
72
|
+
const ENV_PLACEHOLDER = /\$\{env:(\w+)\}/g;
|
|
73
|
+
const CREDENTIAL_PLACEHOLDER = /\$\{credential:(\w+)\}/g;
|
|
74
|
+
// -----------------------------------------------------------------------------
|
|
75
|
+
// Main API
|
|
76
|
+
// -----------------------------------------------------------------------------
|
|
77
|
+
/**
|
|
78
|
+
* Load MCP servers for an agent.
|
|
79
|
+
*
|
|
80
|
+
* All agents (including default) load from:
|
|
81
|
+
* <workspace>/.agentide/agents/<agentId>/mcp/.mcp.json
|
|
82
|
+
*
|
|
83
|
+
* @param agentId - Agent identifier ('default' or pack name)
|
|
84
|
+
* @param workspaceRoot - Workspace root path
|
|
85
|
+
* @param bundledBasePromptsDir - Path to extension's base-prompts directory (for bundled server resolution)
|
|
86
|
+
*/
|
|
87
|
+
async function loadMcpServers(agentId, workspaceRoot, bundledBasePromptsDir) {
|
|
88
|
+
const mcpDir = (0, paths_1.getAgentMcpDir)(workspaceRoot, agentId || paths_1.AGENT_CONSTANTS.DEFAULT_AGENT_ID);
|
|
89
|
+
const configPath = path.join(mcpDir, MCP_CONFIG_FILE);
|
|
90
|
+
if (!await pathExists(configPath)) {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
const bundledMcpDir = bundledBasePromptsDir
|
|
94
|
+
? path.join(bundledBasePromptsDir, MCP_SERVERS_DIR)
|
|
95
|
+
: '';
|
|
96
|
+
return loadMcpConfigFile(configPath, mcpDir, workspaceRoot, bundledMcpDir);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Load MCP servers from a .mcp.json config file.
|
|
100
|
+
*
|
|
101
|
+
* @param configPath - Path to the .mcp.json file
|
|
102
|
+
* @param mcpDir - Directory containing the .mcp.json (for relative path resolution)
|
|
103
|
+
* @param workspaceRoot - Workspace root for .env file loading
|
|
104
|
+
* @param bundledMcpDir - Path to bundled MCP servers directory
|
|
105
|
+
*/
|
|
106
|
+
async function loadMcpConfigFile(configPath, mcpDir, workspaceRoot, bundledMcpDir) {
|
|
107
|
+
let config;
|
|
108
|
+
try {
|
|
109
|
+
const raw = await fs_1.promises.readFile(configPath, 'utf-8');
|
|
110
|
+
config = JSON.parse(raw);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
console.warn(`[AgentIDE] Failed to load MCP config from ${configPath}:`, e);
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
if (!config.mcpServers) {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
// Load .env files for environment variable resolution
|
|
120
|
+
const envSources = await loadEnvFiles(workspaceRoot, mcpDir);
|
|
121
|
+
const servers = [];
|
|
122
|
+
for (const [name, entry] of Object.entries(config.mcpServers)) {
|
|
123
|
+
try {
|
|
124
|
+
const server = await resolveServerEntry(name, entry, mcpDir, bundledMcpDir, envSources);
|
|
125
|
+
if (server) {
|
|
126
|
+
servers.push(server);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
console.warn(`[AgentIDE] Failed to resolve MCP server '${name}':`, e);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return servers;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Resolve a server entry to a fully resolved McpServerConfig.
|
|
137
|
+
*/
|
|
138
|
+
async function resolveServerEntry(name, entry, mcpDir, bundledMcpDir, envSources) {
|
|
139
|
+
if (entry.command === DISABLE_BUNDLED_COMMAND) {
|
|
140
|
+
// Explicitly disabled in .mcp.json; skip this server entirely.
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
if (entry.command === ENABLE_BUNDLED_COMMAND) {
|
|
144
|
+
// Resolve bundled server
|
|
145
|
+
return resolveBundledServer(name, entry, bundledMcpDir, envSources);
|
|
146
|
+
}
|
|
147
|
+
// HTTP Streamable MCP server — no subprocess needed
|
|
148
|
+
if (entry.url) {
|
|
149
|
+
return {
|
|
150
|
+
name,
|
|
151
|
+
label: entry.label ?? name,
|
|
152
|
+
description: entry.description,
|
|
153
|
+
command: '',
|
|
154
|
+
args: [],
|
|
155
|
+
url: entry.url,
|
|
156
|
+
headers: resolveHeaders(entry.headers, envSources),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// Custom stdio server - resolve relative paths from mcpDir
|
|
160
|
+
return {
|
|
161
|
+
name,
|
|
162
|
+
label: entry.label ?? name,
|
|
163
|
+
description: entry.description,
|
|
164
|
+
command: entry.command ?? '',
|
|
165
|
+
args: resolveArgs(entry.args, mcpDir),
|
|
166
|
+
env: resolveEnv(entry.env, envSources),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Resolve a bundled server reference.
|
|
171
|
+
*/
|
|
172
|
+
async function resolveBundledServer(name, entry, bundledMcpDir, envSources) {
|
|
173
|
+
const bundled = await loadBundledServerConfig(name, bundledMcpDir);
|
|
174
|
+
if (!bundled) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
const serverDir = path.join(bundledMcpDir, name);
|
|
178
|
+
// Merge bundled env with user-provided overrides (user env takes precedence)
|
|
179
|
+
const mergedEnv = { ...(bundled.env ?? {}) };
|
|
180
|
+
if (entry.env) {
|
|
181
|
+
for (const [key, value] of Object.entries(entry.env)) {
|
|
182
|
+
mergedEnv[key] = value;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
name,
|
|
187
|
+
label: entry.label ?? bundled.label ?? name,
|
|
188
|
+
description: entry.description ?? bundled.description,
|
|
189
|
+
command: bundled.command,
|
|
190
|
+
args: resolveArgs(bundled.args, serverDir),
|
|
191
|
+
env: resolveEnv(mergedEnv, envSources),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Load a bundled server config from base-prompts/mcp-servers/<name>/mcp.json.
|
|
196
|
+
*/
|
|
197
|
+
async function loadBundledServerConfig(name, bundledMcpDir) {
|
|
198
|
+
if (!bundledMcpDir) {
|
|
199
|
+
console.warn(`[AgentIDE] Bundled MCP directory unavailable; cannot resolve '${name}'`);
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
const configPath = path.join(bundledMcpDir, name, 'mcp.json');
|
|
203
|
+
if (!await pathExists(configPath)) {
|
|
204
|
+
console.warn(`[AgentIDE] Bundled server '${name}' not found at ${configPath}`);
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
try {
|
|
208
|
+
const raw = await fs_1.promises.readFile(configPath, 'utf-8');
|
|
209
|
+
const config = JSON.parse(raw);
|
|
210
|
+
if (!config.command || typeof config.command !== 'string') {
|
|
211
|
+
console.warn(`[AgentIDE] Invalid bundled server config at ${configPath}: missing command`);
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
return config;
|
|
215
|
+
}
|
|
216
|
+
catch (e) {
|
|
217
|
+
console.warn(`[AgentIDE] Failed to load bundled server config from ${configPath}:`, e);
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// -----------------------------------------------------------------------------
|
|
222
|
+
// Variable Resolution
|
|
223
|
+
// -----------------------------------------------------------------------------
|
|
224
|
+
/**
|
|
225
|
+
* Resolve variables in args array.
|
|
226
|
+
* - Relative paths (./) are resolved from serverDir
|
|
227
|
+
* - ${serverDir} is resolved to serverDir
|
|
228
|
+
*/
|
|
229
|
+
function resolveArgs(args, serverDir) {
|
|
230
|
+
if (!args) {
|
|
231
|
+
return [];
|
|
232
|
+
}
|
|
233
|
+
return args.map(arg => {
|
|
234
|
+
let resolved = arg;
|
|
235
|
+
// Resolve ${serverDir}
|
|
236
|
+
resolved = resolved.replace(/\$\{serverDir\}/g, serverDir);
|
|
237
|
+
// Resolve relative paths
|
|
238
|
+
if (resolved.startsWith('./') || resolved.startsWith('../')) {
|
|
239
|
+
resolved = path.resolve(serverDir, resolved);
|
|
240
|
+
}
|
|
241
|
+
return resolved;
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Resolve ${env:VAR_NAME} in env values.
|
|
246
|
+
*
|
|
247
|
+
* Lookup order (first match wins):
|
|
248
|
+
* 1. process.env (shell environment)
|
|
249
|
+
* 2. Workspace .env file (<workspace>/.env)
|
|
250
|
+
* 3. MCP directory .env file (<mcpDir>/.env)
|
|
251
|
+
*
|
|
252
|
+
* @param env - Environment variables with ${env:VAR_NAME} placeholders
|
|
253
|
+
* @param envSources - Additional env sources to check (loaded from .env files)
|
|
254
|
+
*/
|
|
255
|
+
/**
|
|
256
|
+
* Resolve a single ${env:VAR} reference for MCP child processes.
|
|
257
|
+
*
|
|
258
|
+
* The turn's OBO data token is exposed two ways:
|
|
259
|
+
* - `${credential:dataToken}` placeholder (pack-author-facing; handled in resolveEnv).
|
|
260
|
+
* - A configurable set of env-var aliases (default `DATABRICKS_TOKEN`) for packs that
|
|
261
|
+
* reference the token via `${env:VAR}` directly. Override the alias list with the
|
|
262
|
+
* `AGENTHIPPO_DATA_TOKEN_ENV_VARS` env var (comma-separated) — keeps this helper
|
|
263
|
+
* vendor-neutral instead of hardcoding one provider's token name.
|
|
264
|
+
*
|
|
265
|
+
* When a turn-scoped data token file exists, the token is NOT baked into spawn env —
|
|
266
|
+
* MCP servers read it from AGENTHIPPO_DATA_TOKEN_FILE on each tool call instead.
|
|
267
|
+
*/
|
|
268
|
+
function resolveMcpEnvVar(varName, envSources = {}) {
|
|
269
|
+
const cred = (0, credential_context_1.currentCredential)();
|
|
270
|
+
const tokenFile = cred?.dataTokenFile;
|
|
271
|
+
const aliases = getDataTokenEnvAliases();
|
|
272
|
+
const isDataTokenVar = varName === 'dataToken' || aliases.includes(varName);
|
|
273
|
+
if (tokenFile && isDataTokenVar) {
|
|
274
|
+
// Token lives in the per-turn file (AGENTHIPPO_DATA_TOKEN_FILE); don't bake into spawn env.
|
|
275
|
+
return '';
|
|
276
|
+
}
|
|
277
|
+
if (varName === 'dataToken') {
|
|
278
|
+
return cred?.dataToken?.trim() ?? '';
|
|
279
|
+
}
|
|
280
|
+
if (cred?.dataToken?.trim() && aliases.includes(varName)) {
|
|
281
|
+
return cred.dataToken.trim();
|
|
282
|
+
}
|
|
283
|
+
return process.env[varName] ?? envSources[varName] ?? '';
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Env-var names that resolve to the turn's OBO data token when a pack references
|
|
287
|
+
* `${env:VAR}` directly. Defaults to `DATABRICKS_TOKEN`; override at deploy time via
|
|
288
|
+
* `AGENTHIPPO_DATA_TOKEN_ENV_VARS=VAR1,VAR2` (empty value → no aliases).
|
|
289
|
+
*/
|
|
290
|
+
function getDataTokenEnvAliases() {
|
|
291
|
+
const raw = process.env.AGENTHIPPO_DATA_TOKEN_ENV_VARS;
|
|
292
|
+
if (raw !== undefined) {
|
|
293
|
+
return raw.split(',').map((v) => v.trim()).filter(Boolean);
|
|
294
|
+
}
|
|
295
|
+
return ['DATABRICKS_TOKEN'];
|
|
296
|
+
}
|
|
297
|
+
function envValueUsesCredentialDataToken(value) {
|
|
298
|
+
return /\$\{credential:dataToken\}/.test(value);
|
|
299
|
+
}
|
|
300
|
+
/** Suffix for Codex config.toml cache invalidation when MCP credential scope changes. */
|
|
301
|
+
function mcpConfigCacheSignatureSuffix() {
|
|
302
|
+
const cred = (0, credential_context_1.currentCredential)();
|
|
303
|
+
const aliases = getDataTokenEnvAliases();
|
|
304
|
+
if (cred?.dataTokenFile) {
|
|
305
|
+
return `file:${cred.dataTokenFile}:aliases=${aliases.join(',')}`;
|
|
306
|
+
}
|
|
307
|
+
if (cred?.dataToken?.trim()) {
|
|
308
|
+
return `inline-token:aliases=${aliases.join(',')}`;
|
|
309
|
+
}
|
|
310
|
+
return `no-token:aliases=${aliases.join(',')}`;
|
|
311
|
+
}
|
|
312
|
+
function resolveEnv(env, envSources = {}) {
|
|
313
|
+
if (!env) {
|
|
314
|
+
return undefined;
|
|
315
|
+
}
|
|
316
|
+
const resolved = {};
|
|
317
|
+
const tokenFile = (0, credential_context_1.currentCredential)()?.dataTokenFile;
|
|
318
|
+
if (tokenFile) {
|
|
319
|
+
resolved[exports.AGENTHIPPO_DATA_TOKEN_FILE_ENV] = tokenFile;
|
|
320
|
+
}
|
|
321
|
+
for (const [key, value] of Object.entries(env)) {
|
|
322
|
+
CREDENTIAL_PLACEHOLDER.lastIndex = 0;
|
|
323
|
+
if (envValueUsesCredentialDataToken(value)) {
|
|
324
|
+
// Credential-backed secret. When a per-turn token file exists, the key is intentionally
|
|
325
|
+
// NOT set here: the MCP server reads the token from AGENTHIPPO_DATA_TOKEN_FILE
|
|
326
|
+
// (injected above) on each tool call, so baking it into spawn env would be redundant
|
|
327
|
+
// and would leak the turn-scoped token into the long-lived child process env.
|
|
328
|
+
// Prefer the OBO token file, then inline token, then env fallback.
|
|
329
|
+
if (tokenFile) {
|
|
330
|
+
// AGENTHIPPO_DATA_TOKEN_FILE already injected above; don't bake the token here.
|
|
331
|
+
}
|
|
332
|
+
else if ((0, credential_context_1.currentCredential)()?.dataToken?.trim()) {
|
|
333
|
+
resolved[key] = (0, credential_context_1.currentCredential)().dataToken.trim();
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
// No OBO credential (local dev / non-serve context): fall back to env var.
|
|
337
|
+
const fallback = process.env[key] ?? envSources[key] ?? '';
|
|
338
|
+
if (fallback) {
|
|
339
|
+
resolved[key] = fallback;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
resolved[key] = value.replace(ENV_PLACEHOLDER, (_, varName) => resolveMcpEnvVar(varName, envSources));
|
|
345
|
+
}
|
|
346
|
+
return resolved;
|
|
347
|
+
}
|
|
348
|
+
/** Resolve MCP server env placeholders (exported for tests). */
|
|
349
|
+
function resolveMcpServerEnv(env, envSources = {}) {
|
|
350
|
+
return resolveEnv(env, envSources);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Resolve `${env:VAR}` placeholders in HTTP MCP server headers and drop entries that resolve
|
|
354
|
+
* to empty (e.g. an unset token env var) so we never send a header like `Authorization: `.
|
|
355
|
+
* Returns undefined when no usable headers remain.
|
|
356
|
+
*/
|
|
357
|
+
function resolveHeaders(headers, envSources = {}) {
|
|
358
|
+
if (!headers) {
|
|
359
|
+
return undefined;
|
|
360
|
+
}
|
|
361
|
+
const resolved = {};
|
|
362
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
363
|
+
const rv = value.replace(ENV_PLACEHOLDER, (_, varName) => resolvePlainEnvVar(varName, envSources));
|
|
364
|
+
if (rv) {
|
|
365
|
+
resolved[key] = rv;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return Object.keys(resolved).length > 0 ? resolved : undefined;
|
|
369
|
+
}
|
|
370
|
+
/** Header values resolve env vars only (no credential/dataToken semantics). */
|
|
371
|
+
function resolvePlainEnvVar(varName, envSources) {
|
|
372
|
+
return process.env[varName] ?? envSources[varName] ?? '';
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Load environment variables from .env files.
|
|
376
|
+
*
|
|
377
|
+
* Checks these locations (later files override earlier):
|
|
378
|
+
* 1. <mcpDir>/.env (pack-specific defaults)
|
|
379
|
+
* 2. <workspace>/.env (workspace secrets)
|
|
380
|
+
*
|
|
381
|
+
* Note: process.env always takes priority over .env files.
|
|
382
|
+
*/
|
|
383
|
+
async function loadEnvFiles(workspaceRoot, mcpDir) {
|
|
384
|
+
const envSources = {};
|
|
385
|
+
// Load in order of priority (lower priority first, so higher priority overwrites)
|
|
386
|
+
const envFiles = [
|
|
387
|
+
path.join(mcpDir, '.env'), // Pack MCP .env (lowest priority)
|
|
388
|
+
path.join(workspaceRoot, '.env'), // Workspace .env (higher priority)
|
|
389
|
+
];
|
|
390
|
+
for (const envFile of envFiles) {
|
|
391
|
+
const parsed = await parseEnvFile(envFile);
|
|
392
|
+
Object.assign(envSources, parsed);
|
|
393
|
+
}
|
|
394
|
+
return envSources;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Parse a .env file into a key-value object.
|
|
398
|
+
*
|
|
399
|
+
* Supports:
|
|
400
|
+
* - KEY=value
|
|
401
|
+
* - KEY="quoted value"
|
|
402
|
+
* - KEY='single quoted'
|
|
403
|
+
* - # comments
|
|
404
|
+
* - Empty lines
|
|
405
|
+
*/
|
|
406
|
+
async function parseEnvFile(filePath) {
|
|
407
|
+
try {
|
|
408
|
+
const content = await fs_1.promises.readFile(filePath, 'utf-8');
|
|
409
|
+
return (0, agentEnvFile_1.parseEnvContent)(content);
|
|
410
|
+
}
|
|
411
|
+
catch {
|
|
412
|
+
// File doesn't exist or can't be read
|
|
413
|
+
return {};
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// -----------------------------------------------------------------------------
|
|
417
|
+
// Codex Config Generation
|
|
418
|
+
// -----------------------------------------------------------------------------
|
|
419
|
+
/**
|
|
420
|
+
* Generate MCP servers section for Codex config.toml
|
|
421
|
+
*
|
|
422
|
+
* Format:
|
|
423
|
+
* [mcp_servers.name]
|
|
424
|
+
* command = "node"
|
|
425
|
+
* args = ["/path/to/dist/index.js"]
|
|
426
|
+
* env = { KEY = "value" }
|
|
427
|
+
*/
|
|
428
|
+
function generateCodexMcpConfig(servers, options) {
|
|
429
|
+
if (servers.length === 0) {
|
|
430
|
+
return '';
|
|
431
|
+
}
|
|
432
|
+
// `default_tools_approval_mode = "auto"` is the documented Codex 0.122+ per-server key
|
|
433
|
+
// (values: auto/prompt/approve) that lets MCP tools run without an interactive prompt.
|
|
434
|
+
// Only emit it in headless/serve auto-approve contexts — the interactive IDE path leaves
|
|
435
|
+
// it unset so users get Codex's normal approval prompts. The previous `approval_mode =
|
|
436
|
+
// "never"` was an invalid key/value and was silently ignored by the Codex CLI.
|
|
437
|
+
const approvalLine = options?.autoApprove ? 'default_tools_approval_mode = "auto"' : undefined;
|
|
438
|
+
const sections = servers.map(s => {
|
|
439
|
+
// HTTP Streamable MCP server — codex connects via URL, no subprocess
|
|
440
|
+
if (s.url) {
|
|
441
|
+
const urlLines = [
|
|
442
|
+
`[mcp_servers.${s.name}]`,
|
|
443
|
+
`url = ${JSON.stringify(s.url)}`,
|
|
444
|
+
];
|
|
445
|
+
if (s.headers && Object.keys(s.headers).length > 0) {
|
|
446
|
+
const headerEntries = Object.entries(s.headers)
|
|
447
|
+
.map(([k, v]) => `${JSON.stringify(k)} = ${JSON.stringify(v)}`)
|
|
448
|
+
.join(', ');
|
|
449
|
+
urlLines.push(`http_headers = { ${headerEntries} }`);
|
|
450
|
+
}
|
|
451
|
+
if (approvalLine) {
|
|
452
|
+
urlLines.push(approvalLine);
|
|
453
|
+
}
|
|
454
|
+
return urlLines.join('\n');
|
|
455
|
+
}
|
|
456
|
+
const lines = [
|
|
457
|
+
`[mcp_servers.${s.name}]`,
|
|
458
|
+
`command = ${JSON.stringify(s.command)}`,
|
|
459
|
+
`args = ${JSON.stringify(s.args)}`,
|
|
460
|
+
];
|
|
461
|
+
if (approvalLine) {
|
|
462
|
+
lines.push(approvalLine);
|
|
463
|
+
}
|
|
464
|
+
if (s.env && Object.keys(s.env).length > 0) {
|
|
465
|
+
// Use separate [mcp_servers.name.env] section — codex binary requires this form
|
|
466
|
+
lines.push('', `[mcp_servers.${s.name}.env]`);
|
|
467
|
+
for (const [k, v] of Object.entries(s.env)) {
|
|
468
|
+
lines.push(`${k} = ${JSON.stringify(v)}`);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return lines.join('\n');
|
|
472
|
+
});
|
|
473
|
+
return '\n# MCP Servers (AgentIDE)\n' + sections.join('\n\n');
|
|
474
|
+
}
|
|
475
|
+
// -----------------------------------------------------------------------------
|
|
476
|
+
// Sync Support
|
|
477
|
+
// -----------------------------------------------------------------------------
|
|
478
|
+
/**
|
|
479
|
+
* Get the default .mcp.json config content for syncing to a workspace.
|
|
480
|
+
* This creates the initial config that users can edit.
|
|
481
|
+
*
|
|
482
|
+
* @param bundledBasePromptsDir - Path to extension's base-prompts directory
|
|
483
|
+
*/
|
|
484
|
+
async function getDefaultMcpConfig(bundledBasePromptsDir) {
|
|
485
|
+
const configPath = path.join(bundledBasePromptsDir, MCP_SERVERS_DIR, MCP_CONFIG_FILE);
|
|
486
|
+
if (!await pathExists(configPath)) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
try {
|
|
490
|
+
return await fs_1.promises.readFile(configPath, 'utf-8');
|
|
491
|
+
}
|
|
492
|
+
catch {
|
|
493
|
+
return null;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
// -----------------------------------------------------------------------------
|
|
497
|
+
// Bundled Server Definitions
|
|
498
|
+
// -----------------------------------------------------------------------------
|
|
499
|
+
async function loadBundledMcpServers(basePromptsDir) {
|
|
500
|
+
const mcpDir = path.join(basePromptsDir, MCP_SERVERS_DIR);
|
|
501
|
+
if (!await pathExists(mcpDir)) {
|
|
502
|
+
return [];
|
|
503
|
+
}
|
|
504
|
+
const servers = [];
|
|
505
|
+
let entries;
|
|
506
|
+
try {
|
|
507
|
+
entries = await fs_1.promises.readdir(mcpDir, { withFileTypes: true });
|
|
508
|
+
}
|
|
509
|
+
catch {
|
|
510
|
+
return [];
|
|
511
|
+
}
|
|
512
|
+
for (const entry of entries) {
|
|
513
|
+
if (!entry.isDirectory()) {
|
|
514
|
+
continue;
|
|
515
|
+
}
|
|
516
|
+
const serverName = entry.name;
|
|
517
|
+
const config = await loadBundledServerConfig(serverName, mcpDir);
|
|
518
|
+
if (!config) {
|
|
519
|
+
continue;
|
|
520
|
+
}
|
|
521
|
+
const serverDir = path.join(mcpDir, serverName);
|
|
522
|
+
servers.push({
|
|
523
|
+
name: config.name ?? serverName,
|
|
524
|
+
label: config.label ?? serverName,
|
|
525
|
+
description: config.description,
|
|
526
|
+
command: config.command,
|
|
527
|
+
args: resolveArgs(config.args, serverDir),
|
|
528
|
+
env: resolveEnv(config.env),
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
return servers;
|
|
532
|
+
}
|
|
533
|
+
/** Env var carrying JSON-serialized {@link InlineMcpServers} into custom engine workers. */
|
|
534
|
+
exports.AGENTHIPPO_MCP_SERVERS_ENV = 'AGENTHIPPO_MCP_SERVERS';
|
|
535
|
+
/**
|
|
536
|
+
* Convert resolved pack MCP servers to the inline record shape engines consume.
|
|
537
|
+
*
|
|
538
|
+
* stdio servers map to `{ command, args, env }`. HTTP Streamable / SSE servers map to
|
|
539
|
+
* `{ type: 'http', url, headers? }` — the Cursor SDK (`@cursor/sdk` McpServerConfig) accepts
|
|
540
|
+
* this shape inline, so remote MCP servers are available to cursor/custom engines, not just
|
|
541
|
+
* to the Codex engine (which gets them via config.toml).
|
|
542
|
+
*/
|
|
543
|
+
function formatInlineMcpServers(servers) {
|
|
544
|
+
const mcpServers = {};
|
|
545
|
+
for (const server of servers) {
|
|
546
|
+
if (server.url) {
|
|
547
|
+
mcpServers[server.name] = {
|
|
548
|
+
type: 'http',
|
|
549
|
+
url: server.url,
|
|
550
|
+
...(server.headers && Object.keys(server.headers).length > 0 ? { headers: server.headers } : {}),
|
|
551
|
+
};
|
|
552
|
+
continue;
|
|
553
|
+
}
|
|
554
|
+
mcpServers[server.name] = {
|
|
555
|
+
command: server.command,
|
|
556
|
+
args: server.args,
|
|
557
|
+
...(server.env && Object.keys(server.env).length > 0 ? { env: server.env } : {}),
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
return mcpServers;
|
|
561
|
+
}
|
|
562
|
+
function serializeInlineMcpServers(servers) {
|
|
563
|
+
if (Object.keys(servers).length === 0) {
|
|
564
|
+
return undefined;
|
|
565
|
+
}
|
|
566
|
+
return JSON.stringify(servers);
|
|
567
|
+
}
|
|
568
|
+
function parseInlineMcpServers(raw) {
|
|
569
|
+
if (!raw?.trim()) {
|
|
570
|
+
return undefined;
|
|
571
|
+
}
|
|
572
|
+
try {
|
|
573
|
+
const parsed = JSON.parse(raw);
|
|
574
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
575
|
+
return undefined;
|
|
576
|
+
}
|
|
577
|
+
return parsed;
|
|
578
|
+
}
|
|
579
|
+
catch {
|
|
580
|
+
return undefined;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
// -----------------------------------------------------------------------------
|
|
584
|
+
// Helpers
|
|
585
|
+
// -----------------------------------------------------------------------------
|
|
586
|
+
/**
|
|
587
|
+
* Check if a path exists on the filesystem.
|
|
588
|
+
*/
|
|
589
|
+
async function pathExists(p) {
|
|
590
|
+
try {
|
|
591
|
+
await fs_1.promises.access(p);
|
|
592
|
+
return true;
|
|
593
|
+
}
|
|
594
|
+
catch {
|
|
595
|
+
return false;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) AgentHippo.ai. All rights reserved.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_PERMISSIONS = void 0;
|
|
7
|
+
exports.getDefaultPermissions = getDefaultPermissions;
|
|
8
|
+
exports._resetMappingConfigCache = _resetMappingConfigCache;
|
|
9
|
+
exports.parsePermissions = parsePermissions;
|
|
10
|
+
exports.parseManifestPermissions = parseManifestPermissions;
|
|
11
|
+
exports.enforcePermissions = enforcePermissions;
|
|
12
|
+
exports.toClaudeOptions = toClaudeOptions;
|
|
13
|
+
exports.toCodexOptions = toCodexOptions;
|
|
14
|
+
/**
|
|
15
|
+
* Default runtime permissions.
|
|
16
|
+
*/
|
|
17
|
+
exports.DEFAULT_PERMISSIONS = {
|
|
18
|
+
fileAccess: 'full',
|
|
19
|
+
};
|
|
20
|
+
const PERMISSION_MAPPING_CONFIG = {
|
|
21
|
+
defaults: { fileAccess: 'full' },
|
|
22
|
+
claude: {
|
|
23
|
+
readOnly: { permissionMode: 'plan', allowDangerouslySkipPermissions: false },
|
|
24
|
+
workspaceWrite: { permissionMode: 'acceptEdits', allowDangerouslySkipPermissions: false },
|
|
25
|
+
fullAccess: { permissionMode: 'bypassPermissions', allowDangerouslySkipPermissions: true },
|
|
26
|
+
},
|
|
27
|
+
codex: {
|
|
28
|
+
approvalPolicy: 'never',
|
|
29
|
+
readOnly: { sandboxMode: 'read-only' },
|
|
30
|
+
workspaceWrite: { sandboxMode: 'workspace-write' },
|
|
31
|
+
fullAccess: { sandboxMode: 'danger-full-access' },
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Get default permissions from static mapping config.
|
|
36
|
+
*/
|
|
37
|
+
function getDefaultPermissions() {
|
|
38
|
+
return { ...PERMISSION_MAPPING_CONFIG.defaults };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* No-op compatibility hook retained for existing tests/callers.
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
function _resetMappingConfigCache() {
|
|
45
|
+
// no-op: config is now static and in-code
|
|
46
|
+
}
|
|
47
|
+
// =============================================================================
|
|
48
|
+
// Parse from Manifest
|
|
49
|
+
// =============================================================================
|
|
50
|
+
/**
|
|
51
|
+
* Parse permissions from an agent manifest.
|
|
52
|
+
* Falls back to defaults for missing fields.
|
|
53
|
+
*/
|
|
54
|
+
function parsePermissions(manifest) {
|
|
55
|
+
const perms = manifest?.spec?.permissions;
|
|
56
|
+
const defaults = getDefaultPermissions();
|
|
57
|
+
return {
|
|
58
|
+
fileAccess: perms?.fileAccess ?? defaults.fileAccess,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Parse effective permissions from manifest.
|
|
63
|
+
*/
|
|
64
|
+
function parseManifestPermissions(manifest) {
|
|
65
|
+
return parsePermissions(manifest);
|
|
66
|
+
}
|
|
67
|
+
// =============================================================================
|
|
68
|
+
// Enforcement
|
|
69
|
+
// =============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Resolve effective permissions with user settings taking precedence.
|
|
72
|
+
*/
|
|
73
|
+
function enforcePermissions(_manifestPerms, userPerms) {
|
|
74
|
+
return {
|
|
75
|
+
fileAccess: userPerms.fileAccess,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Map unified permissions to Claude SDK options.
|
|
80
|
+
*/
|
|
81
|
+
function toClaudeOptions(perms, workspaceFolders) {
|
|
82
|
+
const modeOpts = perms.fileAccess === 'read-only'
|
|
83
|
+
? PERMISSION_MAPPING_CONFIG.claude.readOnly
|
|
84
|
+
: (perms.fileAccess === 'workspace-write'
|
|
85
|
+
? PERMISSION_MAPPING_CONFIG.claude.workspaceWrite
|
|
86
|
+
: PERMISSION_MAPPING_CONFIG.claude.fullAccess);
|
|
87
|
+
return {
|
|
88
|
+
...modeOpts,
|
|
89
|
+
// Writable/read-only workspace modes: constrain to workspace folders
|
|
90
|
+
// Full mode: undefined lets Claude use its defaults
|
|
91
|
+
additionalDirectories: perms.fileAccess === 'full' ? undefined : workspaceFolders,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Map unified permissions to Codex SDK options.
|
|
96
|
+
*/
|
|
97
|
+
function toCodexOptions(perms, workspaceFolders) {
|
|
98
|
+
const fileOpts = perms.fileAccess === 'read-only'
|
|
99
|
+
? PERMISSION_MAPPING_CONFIG.codex.readOnly
|
|
100
|
+
: (perms.fileAccess === 'workspace-write'
|
|
101
|
+
? PERMISSION_MAPPING_CONFIG.codex.workspaceWrite
|
|
102
|
+
: PERMISSION_MAPPING_CONFIG.codex.fullAccess);
|
|
103
|
+
return {
|
|
104
|
+
approvalPolicy: PERMISSION_MAPPING_CONFIG.codex.approvalPolicy,
|
|
105
|
+
...fileOpts,
|
|
106
|
+
additionalDirectories: workspaceFolders,
|
|
107
|
+
};
|
|
108
|
+
}
|