@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,165 @@
|
|
|
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.AgentHippoLoopbackAuthServer = void 0;
|
|
40
|
+
const http = __importStar(require("http"));
|
|
41
|
+
const SUCCESS_HTML = `<!DOCTYPE html>
|
|
42
|
+
<html lang="en"><head><meta charset="utf-8"/><title>AgentHippo</title></head>
|
|
43
|
+
<body style="font-family:system-ui,sans-serif;padding:2rem">
|
|
44
|
+
<p>Signed in to AgentHippo. You can close this tab.</p>
|
|
45
|
+
</body></html>`;
|
|
46
|
+
const STATE_MISMATCH_HTML = `<!DOCTYPE html>
|
|
47
|
+
<html lang="en"><head><meta charset="utf-8"/><title>AgentHippo</title></head>
|
|
48
|
+
<body style="font-family:system-ui,sans-serif;padding:2rem">
|
|
49
|
+
<p>Sign-in could not be verified (state mismatch). Close this tab and try again from the IDE.</p>
|
|
50
|
+
</body></html>`;
|
|
51
|
+
/**
|
|
52
|
+
* Localhost OAuth callback (same pattern as GitHub/Codex loopback flows).
|
|
53
|
+
* Browser redirects to http://127.0.0.1:<port>/callback — no IDE URI scheme required.
|
|
54
|
+
*/
|
|
55
|
+
class AgentHippoLoopbackAuthServer {
|
|
56
|
+
server;
|
|
57
|
+
port;
|
|
58
|
+
pending;
|
|
59
|
+
async start() {
|
|
60
|
+
if (this.server) {
|
|
61
|
+
return this.port;
|
|
62
|
+
}
|
|
63
|
+
return new Promise((resolve, reject) => {
|
|
64
|
+
const server = http.createServer((req, res) => {
|
|
65
|
+
try {
|
|
66
|
+
const host = `127.0.0.1:${this.port}`;
|
|
67
|
+
const url = new URL(req.url || '/', `http://${host}`);
|
|
68
|
+
if (url.pathname !== '/callback') {
|
|
69
|
+
res.writeHead(404);
|
|
70
|
+
res.end();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const code = url.searchParams.get('code');
|
|
74
|
+
const state = url.searchParams.get('state');
|
|
75
|
+
if (!code || !state) {
|
|
76
|
+
res.writeHead(400, { 'Content-Type': 'text/plain' });
|
|
77
|
+
res.end('Missing authorization code');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Validate state before showing success: a forged or cross-flow callback
|
|
81
|
+
// must not render "signed in" or be silently dropped to a timeout.
|
|
82
|
+
if (!this.pending || state !== this.pending.expectedState) {
|
|
83
|
+
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
84
|
+
res.end(STATE_MISMATCH_HTML);
|
|
85
|
+
this.pending?.reject(new Error('OAuth state mismatch'));
|
|
86
|
+
this.pending = undefined;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
90
|
+
res.end(SUCCESS_HTML);
|
|
91
|
+
this.pending.resolve(code);
|
|
92
|
+
this.pending = undefined;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
res.writeHead(500);
|
|
96
|
+
res.end();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
server.once('error', reject);
|
|
100
|
+
server.listen(0, '127.0.0.1', () => {
|
|
101
|
+
const address = server.address();
|
|
102
|
+
if (!address || typeof address === 'string') {
|
|
103
|
+
reject(new Error('Failed to bind loopback OAuth server'));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.server = server;
|
|
107
|
+
this.port = address.port;
|
|
108
|
+
resolve(address.port);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
getRedirectUri() {
|
|
113
|
+
if (!this.port) {
|
|
114
|
+
throw new Error('Loopback OAuth server not started');
|
|
115
|
+
}
|
|
116
|
+
return `http://127.0.0.1:${this.port}/callback`;
|
|
117
|
+
}
|
|
118
|
+
waitForAuthorizationCode(expectedState, timeoutMs, cancel) {
|
|
119
|
+
return new Promise((resolve, reject) => {
|
|
120
|
+
let pollCancel;
|
|
121
|
+
const cleanup = () => {
|
|
122
|
+
clearInterval(pollCancel);
|
|
123
|
+
};
|
|
124
|
+
const timeout = setTimeout(() => {
|
|
125
|
+
cleanup();
|
|
126
|
+
this.pending = undefined;
|
|
127
|
+
reject(new Error('Sign-in timed out waiting for browser callback.'));
|
|
128
|
+
}, timeoutMs);
|
|
129
|
+
this.pending = {
|
|
130
|
+
expectedState,
|
|
131
|
+
resolve: (code) => {
|
|
132
|
+
cleanup();
|
|
133
|
+
clearTimeout(timeout);
|
|
134
|
+
resolve(code);
|
|
135
|
+
},
|
|
136
|
+
reject: (err) => {
|
|
137
|
+
cleanup();
|
|
138
|
+
clearTimeout(timeout);
|
|
139
|
+
reject(err);
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
pollCancel = setInterval(() => {
|
|
143
|
+
if (cancel?.()) {
|
|
144
|
+
cleanup();
|
|
145
|
+
clearTimeout(timeout);
|
|
146
|
+
this.pending = undefined;
|
|
147
|
+
reject(new Error('Sign-in cancelled'));
|
|
148
|
+
}
|
|
149
|
+
}, 250);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
async stop() {
|
|
153
|
+
this.pending?.reject(new Error('Sign-in cancelled'));
|
|
154
|
+
this.pending = undefined;
|
|
155
|
+
if (!this.server) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
await new Promise((resolve) => {
|
|
159
|
+
this.server.close(() => resolve());
|
|
160
|
+
});
|
|
161
|
+
this.server = undefined;
|
|
162
|
+
this.port = undefined;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.AgentHippoLoopbackAuthServer = AgentHippoLoopbackAuthServer;
|
package/out/auth/pkce.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) AgentHippo.ai. All rights reserved.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.codeChallengeFromVerifier = exports.generateCodeVerifier = void 0;
|
|
7
|
+
var pkce_js_1 = require("../auth-broker/pkce.js");
|
|
8
|
+
Object.defineProperty(exports, "generateCodeVerifier", { enumerable: true, get: function () { return pkce_js_1.generateCodeVerifier; } });
|
|
9
|
+
Object.defineProperty(exports, "codeChallengeFromVerifier", { enumerable: true, get: function () { return pkce_js_1.codeChallengeFromVerifier; } });
|
|
@@ -0,0 +1,239 @@
|
|
|
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.AgentHippoAuthProvider = exports.getAgentHippoAccessToken = void 0;
|
|
40
|
+
exports.registerAgentHippoAuth = registerAgentHippoAuth;
|
|
41
|
+
exports.refreshBootstrapIfSignedIn = refreshBootstrapIfSignedIn;
|
|
42
|
+
exports.startAgentHippoTokenRefreshTimer = startAgentHippoTokenRefreshTimer;
|
|
43
|
+
const vscode = __importStar(require("vscode"));
|
|
44
|
+
const brokerClient_js_1 = require("./brokerClient.js");
|
|
45
|
+
const bootstrapApply_js_1 = require("./bootstrapApply.js");
|
|
46
|
+
const types_js_1 = require("./types.js");
|
|
47
|
+
const signInFlow_js_1 = require("./signInFlow.js");
|
|
48
|
+
const sessionStore_js_1 = require("./sessionStore.js");
|
|
49
|
+
var sessionStore_js_2 = require("./sessionStore.js");
|
|
50
|
+
Object.defineProperty(exports, "getAgentHippoAccessToken", { enumerable: true, get: function () { return sessionStore_js_2.getAgentHippoAccessToken; } });
|
|
51
|
+
const DEFAULT_AGENTHIPPO_MODEL_GATEWAY_URL = 'https://api.agenthippo.ai/v1';
|
|
52
|
+
function getAgentHippoModelGatewayUrl() {
|
|
53
|
+
return vscode.workspace.getConfiguration('agentide').get('AgentHippoModelGateway.url')?.trim() || DEFAULT_AGENTHIPPO_MODEL_GATEWAY_URL;
|
|
54
|
+
}
|
|
55
|
+
/** Returns true if the key was successfully pushed to the model gateway. */
|
|
56
|
+
async function syncAgentHippoModelGatewayToken(accessToken) {
|
|
57
|
+
try {
|
|
58
|
+
await vscode.commands.executeCommand('agentide.auth.applyBootstrapKeys', {
|
|
59
|
+
provider: 'agenthippo',
|
|
60
|
+
apiKey: accessToken,
|
|
61
|
+
baseUrl: getAgentHippoModelGatewayUrl(),
|
|
62
|
+
});
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// workbench may not be ready yet; model registry will pick it up on next refresh
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function clearAgentHippoModelGatewayToken() {
|
|
71
|
+
try {
|
|
72
|
+
await vscode.commands.executeCommand('agentide.auth.applyBootstrapKeys', {
|
|
73
|
+
provider: 'agenthippo',
|
|
74
|
+
apiKey: '',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// best effort
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
class AgentHippoAuthProvider {
|
|
82
|
+
context;
|
|
83
|
+
_onDidChangeSessions = new vscode.EventEmitter();
|
|
84
|
+
onDidChangeSessions = this._onDidChangeSessions.event;
|
|
85
|
+
constructor(context) {
|
|
86
|
+
this.context = context;
|
|
87
|
+
}
|
|
88
|
+
dispose() {
|
|
89
|
+
// no-op
|
|
90
|
+
}
|
|
91
|
+
async getSessions(scopes) {
|
|
92
|
+
const stored = await (0, sessionStore_js_1.getStoredAuthSession)(this.context.secrets);
|
|
93
|
+
if (!stored) {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
if (scopes?.length && !scopes.every((s) => stored.scopes.includes(s))) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
return [(0, sessionStore_js_1.storedSessionToVsCode)(stored)];
|
|
100
|
+
}
|
|
101
|
+
async createSession(scopes) {
|
|
102
|
+
const session = await (0, signInFlow_js_1.runAgentHippoSignInFlow)(this.context, { scopes });
|
|
103
|
+
if (!session) {
|
|
104
|
+
throw new Error('Sign-in cancelled');
|
|
105
|
+
}
|
|
106
|
+
this._onDidChangeSessions.fire({ added: [session], removed: [], changed: [] });
|
|
107
|
+
void syncAgentHippoModelGatewayToken(session.accessToken);
|
|
108
|
+
return session;
|
|
109
|
+
}
|
|
110
|
+
async removeSession(_sessionId) {
|
|
111
|
+
const stored = await (0, sessionStore_js_1.getStoredAuthSession)(this.context.secrets);
|
|
112
|
+
const removedSession = stored ? (0, sessionStore_js_1.storedSessionToVsCode)(stored) : undefined;
|
|
113
|
+
if (stored) {
|
|
114
|
+
const baseUrl = (0, brokerClient_js_1.getAuthBrokerBaseUrl)(vscode.workspace.getConfiguration('agentide').get('auth.baseUrl'));
|
|
115
|
+
try {
|
|
116
|
+
await fetch(`${baseUrl}/api/ide/signout`, {
|
|
117
|
+
method: 'POST',
|
|
118
|
+
headers: { Authorization: `Bearer ${stored.accessToken}` },
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// best effort
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
await (0, sessionStore_js_1.clearAuthSession)(this.context.secrets);
|
|
126
|
+
void clearAgentHippoModelGatewayToken();
|
|
127
|
+
await (0, bootstrapApply_js_1.revertTeamManagedBootstrap)({
|
|
128
|
+
getConfiguration: (section) => vscode.workspace.getConfiguration(section),
|
|
129
|
+
ConfigurationTarget: vscode.ConfigurationTarget,
|
|
130
|
+
setParticipantApiKey: async (args) => {
|
|
131
|
+
await vscode.commands.executeCommand('agentide.setParticipantApiKey', args);
|
|
132
|
+
await vscode.commands.executeCommand('agentide.auth.applyBootstrapKeys', args);
|
|
133
|
+
},
|
|
134
|
+
globalStateUpdate: async (key, value) => {
|
|
135
|
+
await this.context.globalState.update(key, value);
|
|
136
|
+
},
|
|
137
|
+
globalStateGet: (key) => this.context.globalState.get(key),
|
|
138
|
+
});
|
|
139
|
+
const removed = removedSession ? [removedSession] : [];
|
|
140
|
+
this._onDidChangeSessions.fire({ added: [], removed, changed: [] });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.AgentHippoAuthProvider = AgentHippoAuthProvider;
|
|
144
|
+
function registerAgentHippoAuth(context) {
|
|
145
|
+
const provider = new AgentHippoAuthProvider(context);
|
|
146
|
+
context.subscriptions.push(vscode.authentication.registerAuthenticationProvider(types_js_1.AUTH_PROVIDER_ID, 'AgentHippo', provider, { supportsMultipleAccounts: false }), vscode.commands.registerCommand('agenthippo.signIn', async () => {
|
|
147
|
+
try {
|
|
148
|
+
await vscode.authentication.getSession(types_js_1.AUTH_PROVIDER_ID, [...types_js_1.AUTH_SCOPES], { forceNewSession: true });
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
152
|
+
if (!message.toLowerCase().includes('cancel')) {
|
|
153
|
+
void vscode.window.showErrorMessage(`AgentHippo sign-in failed: ${message}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}), vscode.commands.registerCommand('agenthippo.signOut', async () => {
|
|
157
|
+
const session = await (0, sessionStore_js_1.getStoredAuthSession)(context.secrets);
|
|
158
|
+
if (session) {
|
|
159
|
+
await provider.removeSession(session.accountId);
|
|
160
|
+
}
|
|
161
|
+
}),
|
|
162
|
+
// Called by the workbench provider dispatcher on an AgentHippo model-gateway 401 to refresh
|
|
163
|
+
// the (possibly stale) JWT and re-push it to IAPIKeyService before a single retry. Returns
|
|
164
|
+
// true when a fresh key is now available in SecretStorage for the dispatcher to re-read.
|
|
165
|
+
vscode.commands.registerCommand('agentide.auth.refreshToken', async () => {
|
|
166
|
+
const token = await (0, sessionStore_js_1.getAgentHippoAccessToken)(context);
|
|
167
|
+
if (!token) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
return syncAgentHippoModelGatewayToken(token.accessToken);
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
async function refreshBootstrapIfSignedIn(context) {
|
|
174
|
+
const token = await (0, sessionStore_js_1.getAgentHippoAccessToken)(context);
|
|
175
|
+
if (!token) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
await (0, sessionStore_js_1.applyIdeBootstrapForContext)(context, token.accessToken);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// ignore startup refresh errors
|
|
183
|
+
}
|
|
184
|
+
void syncAgentHippoModelGatewayToken(token.accessToken);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Refresh cadence for the model-gateway JWT and LiteLLM routing key. The access token TTL is
|
|
188
|
+
* ~1h; getAgentHippoAccessToken refreshes it inside a 5-min pre-expiry window, so a 60s tick
|
|
189
|
+
* always lands inside that window with buffer and re-syncs the agenthippo provider key before
|
|
190
|
+
* the old JWT expires (fixes stale-key 401s on long sessions). Routing credentials are refreshed
|
|
191
|
+
* less often (every ~5 min) so a server-side rotation of the team LiteLLM key is picked up
|
|
192
|
+
* without re-sign-in. Both syncs are diff-gated so we don't churn SecretStorage / settings /
|
|
193
|
+
* onDidChangeKeys every tick when nothing changed.
|
|
194
|
+
*/
|
|
195
|
+
const TOKEN_REFRESH_INTERVAL_MS = 60_000;
|
|
196
|
+
const ROUTING_REFRESH_EVERY_N_TICKS = 5;
|
|
197
|
+
function startAgentHippoTokenRefreshTimer(context) {
|
|
198
|
+
let lastSyncedAccessToken = '';
|
|
199
|
+
let running = false;
|
|
200
|
+
let tick = 0;
|
|
201
|
+
const handle = setInterval(() => {
|
|
202
|
+
// Guard against overlapping ticks: a stalled fetch shouldn't let the next tick stack up.
|
|
203
|
+
if (running) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
void (async () => {
|
|
207
|
+
running = true;
|
|
208
|
+
try {
|
|
209
|
+
const token = await (0, sessionStore_js_1.getAgentHippoAccessToken)(context);
|
|
210
|
+
if (!token) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// Only push to the model gateway when the JWT actually changed (once per ~hour,
|
|
214
|
+
// on rotation) — setAPIKey fires onDidChangeKeys on every call, so re-syncing an
|
|
215
|
+
// unchanged token every 60s would churn listeners.
|
|
216
|
+
if (token.accessToken !== lastSyncedAccessToken) {
|
|
217
|
+
const ok = await syncAgentHippoModelGatewayToken(token.accessToken);
|
|
218
|
+
if (ok) {
|
|
219
|
+
lastSyncedAccessToken = token.accessToken;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Routing key rotation is rare; refresh infrequently and let the helper skip the
|
|
223
|
+
// settings write when the key hasn't changed.
|
|
224
|
+
if (++tick % ROUTING_REFRESH_EVERY_N_TICKS === 0) {
|
|
225
|
+
try {
|
|
226
|
+
await (0, sessionStore_js_1.refreshRoutingCredentialsForContext)(context, token.accessToken);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// best-effort routing refresh; next cycle retries
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
running = false;
|
|
235
|
+
}
|
|
236
|
+
})();
|
|
237
|
+
}, TOKEN_REFRESH_INTERVAL_MS);
|
|
238
|
+
return { dispose: () => clearInterval(handle) };
|
|
239
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
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.getStoredAuthSession = getStoredAuthSession;
|
|
40
|
+
exports.persistAuthSession = persistAuthSession;
|
|
41
|
+
exports.applyIdeBootstrapForContext = applyIdeBootstrapForContext;
|
|
42
|
+
exports.refreshRoutingCredentialsForContext = refreshRoutingCredentialsForContext;
|
|
43
|
+
exports.getAgentHippoAccessToken = getAgentHippoAccessToken;
|
|
44
|
+
exports.clearAuthSession = clearAuthSession;
|
|
45
|
+
exports.storedSessionToVsCode = storedSessionToVsCode;
|
|
46
|
+
const vscode = __importStar(require("vscode"));
|
|
47
|
+
const brokerClient_js_1 = require("./brokerClient.js");
|
|
48
|
+
const bootstrapApply_js_1 = require("./bootstrapApply.js");
|
|
49
|
+
const SESSION_SECRET_KEY = 'agenthippo.auth.session';
|
|
50
|
+
/**
|
|
51
|
+
* Refresh this far before expiry so the model-gateway key (synced by a periodic timer in
|
|
52
|
+
* provider.ts) is rotated with a buffer before the old short-lived JWT actually expires.
|
|
53
|
+
*/
|
|
54
|
+
const REFRESH_WINDOW_MS = 5 * 60_000;
|
|
55
|
+
/**
|
|
56
|
+
* De-dups concurrent refresh attempts. Refresh tokens are single-use (the broker revokes the
|
|
57
|
+
* rotated token on first exchange), so two simultaneous refreshes would burn one token and
|
|
58
|
+
* force a re-sign-in. Only the first caller performs the refresh; others await its result.
|
|
59
|
+
*/
|
|
60
|
+
let inFlightRefresh;
|
|
61
|
+
async function getStoredAuthSession(secrets) {
|
|
62
|
+
const raw = await secrets.get(SESSION_SECRET_KEY);
|
|
63
|
+
if (!raw) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
return JSON.parse(raw);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function storeAuthSession(secrets, session) {
|
|
74
|
+
await secrets.store(SESSION_SECRET_KEY, JSON.stringify(session));
|
|
75
|
+
}
|
|
76
|
+
function toVsCodeSession(stored) {
|
|
77
|
+
return {
|
|
78
|
+
id: stored.accountId,
|
|
79
|
+
accessToken: stored.accessToken,
|
|
80
|
+
account: { id: stored.accountId, label: stored.accountLabel },
|
|
81
|
+
scopes: stored.scopes,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
async function persistAuthSession(secrets, tokens, bootstrap, scopes) {
|
|
85
|
+
const session = {
|
|
86
|
+
accessToken: tokens.access_token,
|
|
87
|
+
refreshToken: tokens.refresh_token,
|
|
88
|
+
accountId: bootstrap.user.id,
|
|
89
|
+
accountLabel: bootstrap.user.email,
|
|
90
|
+
scopes: [...scopes],
|
|
91
|
+
expiresAt: Date.now() + tokens.expires_in * 1000,
|
|
92
|
+
};
|
|
93
|
+
await storeAuthSession(secrets, session);
|
|
94
|
+
return toVsCodeSession(session);
|
|
95
|
+
}
|
|
96
|
+
async function applyIdeBootstrapForContext(context, accessToken) {
|
|
97
|
+
const baseUrl = (0, brokerClient_js_1.getAuthBrokerBaseUrl)(vscode.workspace.getConfiguration('agentide').get('auth.baseUrl'));
|
|
98
|
+
const bootstrap = await (0, brokerClient_js_1.fetchBootstrap)(baseUrl, accessToken);
|
|
99
|
+
await (0, bootstrapApply_js_1.applyIdeBootstrap)(bootstrap, {
|
|
100
|
+
getConfiguration: (section) => vscode.workspace.getConfiguration(section),
|
|
101
|
+
ConfigurationTarget: vscode.ConfigurationTarget,
|
|
102
|
+
setParticipantApiKey: async (args) => {
|
|
103
|
+
await vscode.commands.executeCommand('agentide.setParticipantApiKey', args);
|
|
104
|
+
await vscode.commands.executeCommand('agentide.auth.applyBootstrapKeys', args);
|
|
105
|
+
},
|
|
106
|
+
globalStateUpdate: async (key, value) => {
|
|
107
|
+
await context.globalState.update(key, value);
|
|
108
|
+
},
|
|
109
|
+
globalStateGet: (key) => context.globalState.get(key),
|
|
110
|
+
});
|
|
111
|
+
return bootstrap;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Refresh only the LiteLLM routing credentials (lighter than re-fetching the full bootstrap)
|
|
115
|
+
* and re-apply them, merging into the last cached bootstrap. Handles server-side rotation of
|
|
116
|
+
* the team routing key without requiring a re-sign-in. No-op if no bootstrap has been applied.
|
|
117
|
+
*/
|
|
118
|
+
async function refreshRoutingCredentialsForContext(context, accessToken) {
|
|
119
|
+
const cached = context.globalState.get(bootstrapApply_js_1.TEAM_BOOTSTRAP_CACHE_KEY);
|
|
120
|
+
if (!cached) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const baseUrl = (0, brokerClient_js_1.getAuthBrokerBaseUrl)(vscode.workspace.getConfiguration('agentide').get('auth.baseUrl'));
|
|
124
|
+
const refreshed = await (0, brokerClient_js_1.fetchBootstrapRefresh)(baseUrl, accessToken);
|
|
125
|
+
// Skip the settings write when nothing rotated: applyIdeBootstrap re-writes store + routing
|
|
126
|
+
// and setAPIKey fires onDidChangeKeys on every call, so re-applying an unchanged key every
|
|
127
|
+
// few minutes would churn listeners and SecretStorage.
|
|
128
|
+
const keyChanged = refreshed.routing.litellmApiKey !== cached.routing.litellmApiKey;
|
|
129
|
+
const baseUrlChanged = refreshed.routing.litellmBaseUrl !== cached.routing.litellmBaseUrl;
|
|
130
|
+
if (!keyChanged && !baseUrlChanged) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const merged = {
|
|
134
|
+
...cached,
|
|
135
|
+
routing: { ...cached.routing, ...refreshed.routing },
|
|
136
|
+
};
|
|
137
|
+
await (0, bootstrapApply_js_1.applyIdeBootstrap)(merged, {
|
|
138
|
+
getConfiguration: (section) => vscode.workspace.getConfiguration(section),
|
|
139
|
+
ConfigurationTarget: vscode.ConfigurationTarget,
|
|
140
|
+
setParticipantApiKey: async (args) => {
|
|
141
|
+
await vscode.commands.executeCommand('agentide.setParticipantApiKey', args);
|
|
142
|
+
await vscode.commands.executeCommand('agentide.auth.applyBootstrapKeys', args);
|
|
143
|
+
},
|
|
144
|
+
globalStateUpdate: async (key, value) => {
|
|
145
|
+
await context.globalState.update(key, value);
|
|
146
|
+
},
|
|
147
|
+
globalStateGet: (key) => context.globalState.get(key),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
async function getAgentHippoAccessToken(context) {
|
|
151
|
+
const stored = await getStoredAuthSession(context.secrets);
|
|
152
|
+
if (!stored) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
if (stored.expiresAt > Date.now() + REFRESH_WINDOW_MS) {
|
|
156
|
+
return { accessToken: stored.accessToken, email: stored.accountLabel };
|
|
157
|
+
}
|
|
158
|
+
// Near expiry — refresh exactly once across concurrent callers.
|
|
159
|
+
if (!inFlightRefresh) {
|
|
160
|
+
const baseUrl = (0, brokerClient_js_1.getAuthBrokerBaseUrl)(vscode.workspace.getConfiguration('agentide').get('auth.baseUrl'));
|
|
161
|
+
const refreshing = stored;
|
|
162
|
+
inFlightRefresh = (async () => {
|
|
163
|
+
try {
|
|
164
|
+
const refreshed = await (0, brokerClient_js_1.refreshAccessToken)(baseUrl, refreshing.refreshToken);
|
|
165
|
+
const next = {
|
|
166
|
+
...refreshing,
|
|
167
|
+
accessToken: refreshed.access_token,
|
|
168
|
+
refreshToken: refreshed.refresh_token,
|
|
169
|
+
expiresAt: Date.now() + refreshed.expires_in * 1000,
|
|
170
|
+
};
|
|
171
|
+
await storeAuthSession(context.secrets, next);
|
|
172
|
+
return next;
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
inFlightRefresh = undefined;
|
|
179
|
+
}
|
|
180
|
+
})();
|
|
181
|
+
}
|
|
182
|
+
const result = await inFlightRefresh;
|
|
183
|
+
if (!result) {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
return { accessToken: result.accessToken, email: result.accountLabel };
|
|
187
|
+
}
|
|
188
|
+
async function clearAuthSession(secrets) {
|
|
189
|
+
await secrets.delete(SESSION_SECRET_KEY);
|
|
190
|
+
}
|
|
191
|
+
function storedSessionToVsCode(stored) {
|
|
192
|
+
return toVsCodeSession(stored);
|
|
193
|
+
}
|