@agenthippo-ai/agenthippo 1.110.9 → 1.110.19
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/out/agentpack/types.js +2 -5
- package/out/analytics/dashboard/artifactManager.js +2 -439
- package/out/analytics/dashboard/fleetDisplayUtils.js +2 -162
- package/out/analytics/dashboard/fleetOrchestrator.js +3 -142
- package/out/analytics/dashboard/fleetRegistry.js +2 -79
- package/out/analytics/dashboard/fleetRowDefaults.js +2 -87
- package/out/analytics/dashboard/fleetScriptAdapter.js +2 -146
- package/out/analytics/dashboard/fleetTypes.js +2 -29
- package/out/analytics/dashboard/index.js +2 -17
- package/out/analytics/dashboard/indexingService.js +2 -422
- package/out/analytics/dashboard/localFleetAdapter.js +2 -222
- package/out/analytics/dashboard/performanceMonitor.js +5 -76
- package/out/analytics/dashboard/processManager.js +2 -209
- package/out/analytics/dashboard/provider.js +38 -3817
- package/out/analytics/dashboard/queryRunner.js +62 -750
- package/out/analytics/dashboard/scheduledFleetStorage.js +2 -241
- package/out/analytics/dashboard/sessionJsonlFleet.js +3 -204
- package/out/analytics/dashboard/teamViewDiscovery.js +2 -106
- package/out/analytics/dashboard/webview/panel.js +34 -2318
- package/out/analytics/dashboard/webview/runtime-bridge.js +2 -82
- package/out/analytics/lifecycle.js +2 -43
- package/out/analytics/service.js +8 -1277
- package/out/auth/authBaseUrl.js +2 -59
- package/out/auth/bootstrapApply.js +2 -71
- package/out/auth/brokerClient.js +2 -160
- package/out/auth/callbackUri.js +2 -59
- package/out/auth/githubStoreGate.js +2 -70
- package/out/auth/loopbackAuthServer.js +4 -159
- package/out/auth/onboardingPrompt.js +2 -112
- package/out/auth/pkce.js +2 -9
- package/out/auth/provider.js +2 -226
- package/out/auth/sessionStore.js +2 -156
- package/out/auth/signInFlow.js +2 -183
- package/out/cli/index.js +619 -551
- package/out/cli/run-custom-engine-runner.js +3 -318
- package/out/cli/vscode-shim.js +2 -86
- package/out/engines/factory.js +2 -45
- package/out/engines/types.js +2 -17
- package/out/examples/run-headless-repl.js +6 -286
- package/out/examples/run-headless.js +2 -187
- package/out/extension.js +32 -4473
- package/out/gateway/gatewayRouteIndex.js +6 -371
- package/out/gateway/gatewaySessionStore.js +3 -243
- package/out/gateway/index.js +2 -31
- package/out/gateway/resetMappings.js +2 -52
- package/out/gateway/service.js +5 -1249
- package/out/mcp/publish.js +2 -143
- package/out/remote/handleRemoteChat.js +2 -169
- package/out/remote/remotePackStatusBar.js +3 -103
- package/out/remote/remoteTrust.js +6 -277
- package/out/remote/serveClient.js +4 -277
- package/out/remoteSkills.js +3 -191
- package/out/runtime/index.js +2 -32
- package/out/runtime/vscode/index.js +2 -20
- package/out/runtime/vscode/vscode-config-provider.js +2 -77
- package/out/runtime/vscode/vscode-edit-tracker.js +2 -122
- package/out/runtime/vscode/vscode-logger.js +2 -30
- package/out/runtime/vscode/vscode-permission-handler.js +2 -72
- package/out/scripts/agentide-litellm.sh +0 -1
- package/out/scripts/agentide_litellm_hooks_v1.py +170 -418
- package/out/scripts/analytics/agent-fleet-widget.js +18 -257
- package/out/scripts/analytics/agentide-litellm-otel.config.yaml +4 -4
- package/out/scripts/analytics/duckdbLocator.js +2 -28
- package/out/scripts/analytics/generate-default-charts.py +43 -323
- package/out/scripts/analytics/hotspot-analysis-widget.js +4 -430
- package/out/scripts/analytics/index-traces.py +78 -1036
- package/out/scripts/analytics/session-comparison-widget.js +26 -472
- package/out/scripts/analytics/session-timeline-widget.js +25 -846
- package/out/scripts/analytics/setup-analytics.ps1 +8 -1
- package/out/scripts/analytics/setup-analytics.sh +13 -2
- package/out/scripts/analytics/token-cost-flamegraph-widget.js +4 -461
- package/out/scripts/analytics/token-cost-trend-widget.js +4 -534
- package/out/scripts/analytics/workflows-collector.cjs +4 -314
- package/out/scripts/analytics/workflows-daemon.mjs +9 -185
- package/out/scripts/analytics/workflows-widget.cjs +15 -159
- package/out/scripts/analytics/wow-model-widget.js +10 -120
- package/out/scripts/vendor-tools.mjs +2 -233
- package/out/skills/publish.js +3 -178
- package/out/store/github/setup.js +7 -212
- package/out/store/oramaIndex.js +2 -884
- package/out/sync.js +26 -1829
- package/out/terminalLogger.js +5 -358
- package/out/utils/pathSafety.js +2 -60
- package/out/utils/pythonRunner.js +4 -258
- package/out/utils/toolPath.js +2 -83
- package/out/workspaceFolders.js +2 -59
- package/package.json +1 -1
- package/out/agentpack/github.js +0 -547
- package/out/agentpack/index.js +0 -67
- package/out/agentpack/install.js +0 -297
- package/out/agentpack/manager.js +0 -441
- package/out/agentpack/manifest.js +0 -135
- package/out/agentpack/paths.js +0 -498
- package/out/agentpack/publish.js +0 -248
- package/out/agentpack/stores.js +0 -554
- package/out/analytics/dashboard/fleetStatusUtils.js +0 -30
- package/out/analytics/dashboard/fleetTitleUtils.js +0 -68
- package/out/analytics/dashboard/refreshPolicy.js +0 -16
- package/out/analytics/dashboard/scheduledFleetFingerprint.js +0 -22
- package/out/analytics/dashboard/scheduledFleetUtils.js +0 -22
- package/out/analytics/dashboard/sessionEventFleetStats.js +0 -118
- package/out/analytics/dashboard/viewsConfigMerge.js +0 -221
- package/out/analytics/dashboard/webview/codicon.ttf +0 -0
- package/out/analytics/identity.js +0 -0
- package/out/analytics/sessionEvents.js +0 -323
- package/out/auth/callbackUriParse.js +0 -59
- package/out/auth/types.js +0 -12
- package/out/auth-broker/config.js +0 -112
- package/out/auth-broker/jwt.js +0 -105
- package/out/auth-broker/pkce.js +0 -59
- package/out/auth-broker/server.js +0 -677
- package/out/auth-broker/store.js +0 -275
- package/out/authority/warrant.js +0 -206
- package/out/base-prompts/mcp-servers/.mcp.json +0 -13
- package/out/base-prompts/mcp-servers/langfuse-analytics/README.md +0 -142
- package/out/base-prompts/mcp-servers/langfuse-analytics/mcp.json +0 -13
- package/out/base-prompts/mcp-servers/langfuse-analytics/package-lock.json +0 -1192
- package/out/base-prompts/mcp-servers/langfuse-analytics/package.json +0 -23
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/run-with-env.sh +0 -12
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/sdk-test.js +0 -102
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/simple-test.js +0 -137
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/test-client.js +0 -118
- package/out/base-prompts/mcp-servers/langfuse-analytics/scripts/test-server.js +0 -209
- package/out/base-prompts/mcp-servers/langfuse-analytics/src/client.ts +0 -431
- package/out/base-prompts/mcp-servers/langfuse-analytics/src/index.ts +0 -270
- package/out/base-prompts/mcp-servers/langfuse-analytics/tsconfig.json +0 -18
- package/out/base-prompts/rules/AGENTS.md +0 -204
- package/out/base-prompts/skills/agent-browser/SKILL.md +0 -102
- package/out/base-prompts/skills/agent-builder/SKILL.md +0 -73
- package/out/base-prompts/skills/agent-builder/references/agent-pack.md +0 -63
- package/out/base-prompts/skills/agent-builder/references/crewai.md +0 -66
- package/out/base-prompts/skills/agent-builder/references/langchain.md +0 -60
- package/out/base-prompts/skills/agent-builder/references/raw-sdk.md +0 -73
- package/out/base-prompts/skills/agent-engine-creator/SKILL.md +0 -586
- package/out/base-prompts/skills/agent-engine-installer/SKILL.md +0 -106
- package/out/base-prompts/skills/agent-engine-installer/scripts/install-engine.mjs +0 -259
- package/out/base-prompts/skills/agent-engine-installer/scripts/install-engine.ps1 +0 -189
- package/out/base-prompts/skills/agenthippo-cli/SKILL.md +0 -69
- package/out/base-prompts/skills/agenthippo-cli/scripts/install.sh +0 -63
- package/out/base-prompts/skills/agentpack-creator/SKILL.md +0 -375
- package/out/base-prompts/skills/agentpack-creator/references/agent-templates.md +0 -261
- package/out/base-prompts/skills/agentpack-creator/references/agents-md-guide.md +0 -195
- package/out/base-prompts/skills/agentpack-creator/scripts/init_pack.py +0 -391
- package/out/base-prompts/skills/agentpack-creator/scripts/init_pack_test.py +0 -294
- package/out/base-prompts/skills/agentpack-testbench/SKILL.md +0 -135
- package/out/base-prompts/skills/algorithmic-art/LICENSE.txt +0 -202
- package/out/base-prompts/skills/algorithmic-art/SKILL.md +0 -405
- package/out/base-prompts/skills/algorithmic-art/templates/generator_template.js +0 -223
- package/out/base-prompts/skills/algorithmic-art/templates/viewer.html +0 -599
- package/out/base-prompts/skills/debug-agent/SKILL.md +0 -83
- package/out/base-prompts/skills/desktop-automation/SKILL.md +0 -166
- package/out/base-prompts/skills/desktop-automation/references/agenthippo-ui-recipes.md +0 -441
- package/out/base-prompts/skills/desktop-automation/scripts/windows-desktop-uia.psm1 +0 -280
- package/out/base-prompts/skills/docx/LICENSE.txt +0 -30
- package/out/base-prompts/skills/docx/SKILL.md +0 -197
- package/out/base-prompts/skills/docx/docx-js.md +0 -350
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/out/base-prompts/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/out/base-prompts/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/out/base-prompts/skills/docx/ooxml/schemas/mce/mc.xsd +0 -75
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/out/base-prompts/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/out/base-prompts/skills/docx/ooxml/scripts/pack.py +0 -159
- package/out/base-prompts/skills/docx/ooxml/scripts/unpack.py +0 -29
- package/out/base-prompts/skills/docx/ooxml/scripts/validate.py +0 -69
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/__init__.py +0 -15
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/base.py +0 -951
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/docx.py +0 -274
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/pptx.py +0 -315
- package/out/base-prompts/skills/docx/ooxml/scripts/validation/redlining.py +0 -279
- package/out/base-prompts/skills/docx/ooxml.md +0 -610
- package/out/base-prompts/skills/docx/scripts/__init__.py +0 -1
- package/out/base-prompts/skills/docx/scripts/document.py +0 -1276
- package/out/base-prompts/skills/docx/scripts/templates/comments.xml +0 -3
- package/out/base-prompts/skills/docx/scripts/templates/commentsExtended.xml +0 -3
- package/out/base-prompts/skills/docx/scripts/templates/commentsExtensible.xml +0 -3
- package/out/base-prompts/skills/docx/scripts/templates/commentsIds.xml +0 -3
- package/out/base-prompts/skills/docx/scripts/templates/people.xml +0 -3
- package/out/base-prompts/skills/docx/scripts/utilities.py +0 -374
- package/out/base-prompts/skills/gateway-outbound/SKILL.md +0 -136
- package/out/base-prompts/skills/mcp-builder/LICENSE.txt +0 -202
- package/out/base-prompts/skills/mcp-builder/SKILL.md +0 -328
- package/out/base-prompts/skills/mcp-builder/reference/evaluation.md +0 -602
- package/out/base-prompts/skills/mcp-builder/reference/mcp_best_practices.md +0 -249
- package/out/base-prompts/skills/mcp-builder/reference/node_mcp_server.md +0 -970
- package/out/base-prompts/skills/mcp-builder/reference/python_mcp_server.md +0 -719
- package/out/base-prompts/skills/mcp-builder/scripts/connections.py +0 -151
- package/out/base-prompts/skills/mcp-builder/scripts/evaluation.py +0 -373
- package/out/base-prompts/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
- package/out/base-prompts/skills/mcp-builder/scripts/requirements.txt +0 -2
- package/out/base-prompts/skills/openclaw/SKILL.md +0 -406
- package/out/base-prompts/skills/openclaw/scripts/run-smoke.sh +0 -61
- package/out/base-prompts/skills/pdf/LICENSE.txt +0 -30
- package/out/base-prompts/skills/pdf/SKILL.md +0 -294
- package/out/base-prompts/skills/pdf/forms.md +0 -205
- package/out/base-prompts/skills/pdf/reference.md +0 -612
- package/out/base-prompts/skills/pdf/scripts/check_bounding_boxes.py +0 -70
- package/out/base-prompts/skills/pdf/scripts/check_bounding_boxes_test.py +0 -226
- package/out/base-prompts/skills/pdf/scripts/check_fillable_fields.py +0 -12
- package/out/base-prompts/skills/pdf/scripts/convert_pdf_to_images.py +0 -35
- package/out/base-prompts/skills/pdf/scripts/create_validation_image.py +0 -41
- package/out/base-prompts/skills/pdf/scripts/extract_form_field_info.py +0 -152
- package/out/base-prompts/skills/pdf/scripts/fill_fillable_fields.py +0 -114
- package/out/base-prompts/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -108
- package/out/base-prompts/skills/pptx/LICENSE.txt +0 -30
- package/out/base-prompts/skills/pptx/SKILL.md +0 -484
- package/out/base-prompts/skills/pptx/html2pptx.md +0 -625
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
- package/out/base-prompts/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
- package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
- package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
- package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
- package/out/base-prompts/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
- package/out/base-prompts/skills/pptx/ooxml/schemas/mce/mc.xsd +0 -75
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -560
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -67
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -14
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -20
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -13
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
- package/out/base-prompts/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -8
- package/out/base-prompts/skills/pptx/ooxml/scripts/pack.py +0 -159
- package/out/base-prompts/skills/pptx/ooxml/scripts/unpack.py +0 -29
- package/out/base-prompts/skills/pptx/ooxml/scripts/validate.py +0 -69
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/__init__.py +0 -15
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/base.py +0 -951
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/docx.py +0 -274
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/pptx.py +0 -315
- package/out/base-prompts/skills/pptx/ooxml/scripts/validation/redlining.py +0 -279
- package/out/base-prompts/skills/pptx/ooxml.md +0 -427
- package/out/base-prompts/skills/pptx/scripts/html2pptx.js +0 -984
- package/out/base-prompts/skills/pptx/scripts/inventory.py +0 -1020
- package/out/base-prompts/skills/pptx/scripts/rearrange.py +0 -231
- package/out/base-prompts/skills/pptx/scripts/replace.py +0 -385
- package/out/base-prompts/skills/pptx/scripts/thumbnail.py +0 -450
- package/out/base-prompts/skills/prompt-lab/SKILL.md +0 -149
- package/out/base-prompts/skills/prompt-lab/scripts/query-analytics.sh +0 -2551
- package/out/base-prompts/skills/skill-creator/LICENSE.txt +0 -202
- package/out/base-prompts/skills/skill-creator/SKILL.md +0 -371
- package/out/base-prompts/skills/skill-creator/references/output-patterns.md +0 -82
- package/out/base-prompts/skills/skill-creator/references/workflows.md +0 -28
- package/out/base-prompts/skills/skill-creator/scripts/init_skill.py +0 -303
- package/out/base-prompts/skills/skill-creator/scripts/package_skill.py +0 -110
- package/out/base-prompts/skills/skill-creator/scripts/quick_validate.py +0 -95
- package/out/base-prompts/skills/skill-installer/SKILL.md +0 -251
- package/out/base-prompts/skills/skill-installer/references/store-api.md +0 -219
- package/out/base-prompts/skills/spotlight-dashboard/SKILL.md +0 -83
- package/out/base-prompts/skills/spotlight-insights/SKILL.md +0 -101
- package/out/base-prompts/skills/spotlight-optimize/SKILL.md +0 -93
- package/out/base-prompts/skills/spotlight-optimize/scripts/query-analytics.sh +0 -2551
- package/out/base-prompts/skills/spotlight-query/SKILL.md +0 -314
- package/out/base-prompts/skills/spotlight-query/references/otel-schema.md +0 -163
- package/out/base-prompts/skills/spotlight-query/scripts/query-analytics.sh +0 -2551
- package/out/base-prompts/skills/spotlight-query/scripts/query-analytics.test.sh +0 -744
- package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/sessions/sess-test-1.jsonl +0 -14
- package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/traces/.duckdb-index.json +0 -7
- package/out/base-prompts/skills/spotlight-query/scripts/test-fixtures/analytics/traces/sample.jsonl +0 -5
- package/out/base-prompts/skills/spotlight-report/SKILL.md +0 -86
- package/out/base-prompts/skills/spotlight-visualize/SKILL.md +0 -92
- package/out/base-prompts/skills/spotlight-visualize/scripts/query-analytics.sh +0 -2551
- package/out/base-prompts/skills/xlsx/LICENSE.txt +0 -30
- package/out/base-prompts/skills/xlsx/SKILL.md +0 -289
- package/out/base-prompts/skills/xlsx/recalc.py +0 -178
- package/out/branding.js +0 -49
- package/out/cli/commands/anywhere.js +0 -66
- package/out/cli/commands/ask.js +0 -246
- package/out/cli/commands/auth-broker.js +0 -24
- package/out/cli/commands/auth.js +0 -219
- package/out/cli/commands/chat.js +0 -357
- package/out/cli/commands/conformance.js +0 -249
- package/out/cli/commands/data-plane.js +0 -67
- package/out/cli/commands/deploy.js +0 -263
- package/out/cli/commands/gateway.js +0 -218
- package/out/cli/commands/idp.js +0 -85
- package/out/cli/commands/pack.js +0 -399
- package/out/cli/commands/probe-custom-engine.js +0 -82
- package/out/cli/commands/sandbox.js +0 -332
- package/out/cli/commands/serve.js +0 -1758
- package/out/cli/commands/store.js +0 -927
- package/out/cli/credential-context.js +0 -91
- package/out/cli/data-plane/broker.js +0 -78
- package/out/cli/data-plane/connector-host.js +0 -121
- package/out/cli/data-plane/egress.js +0 -189
- package/out/cli/data-plane/gateway.js +0 -218
- package/out/cli/data-plane/index.js +0 -152
- package/out/cli/data-plane/registry.js +0 -89
- package/out/cli/data-plane/remote.js +0 -106
- package/out/cli/data-plane/sidecar.js +0 -161
- package/out/cli/deploy/blueprints/registry.js +0 -84
- package/out/cli/deploy/layers/identity.js +0 -172
- package/out/cli/deploy-init.js +0 -3023
- package/out/cli/deps.js +0 -342
- package/out/cli/idp-init.js +0 -338
- package/out/cli/pack-install-ref.js +0 -15
- package/out/cli/pack-loader.js +0 -418
- package/out/cli/pack-runtime.js +0 -61
- package/out/cli/runtime.js +0 -450
- package/out/cli/serve-hardening.js +0 -607
- package/out/cli/state-sync.js +0 -424
- package/out/cli/utils.js +0 -231
- package/out/engines/base.js +0 -188
- package/out/engines/claude.js +0 -1254
- package/out/engines/codex.js +0 -862
- package/out/engines/custom.js +0 -674
- package/out/engines/customEngineIpc.js +0 -95
- package/out/engines/customEngineRunnerEmbed.js +0 -107
- package/out/engines/customRegistry.js +0 -274
- package/out/engines/embeddedCustomEngineRunner.generated.js +0 -9
- package/out/engines/engineApiKey.js +0 -138
- package/out/engines/install.js +0 -372
- package/out/engines/persistentEngineWorker.js +0 -320
- package/out/engines/publish.js +0 -341
- package/out/evidence/sessionShip.js +0 -610
- package/out/gateway/bridge.js +0 -843
- package/out/gateway/cli-agent-id.js +0 -36
- package/out/gateway/client.js +0 -336
- package/out/gateway/client.test.js +0 -395
- package/out/gateway/gateway-scope-errors.js +0 -14
- package/out/gateway/gatewayBackup.js +0 -76
- package/out/gateway/installSource.js +0 -68
- package/out/gateway/lifecycle.js +0 -3190
- package/out/gateway/openclaw-channel-routing.js +0 -317
- package/out/gateway/outboundHandles.js +0 -373
- package/out/gateway/outboundPaths.js +0 -75
- package/out/gateway/outboundSend.js +0 -254
- package/out/gateway/protocol.js +0 -48
- package/out/gateway/secretsPreflight.js +0 -90
- package/out/gateway/sessionRouting.js +0 -77
- package/out/headless/index.js +0 -539
- package/out/headless/sync.js +0 -473
- package/out/live-e2e/mcp-demo/server.mjs +0 -32
- package/out/live-probe/connector.mjs +0 -8
- package/out/live-probe/env-report.mjs +0 -8
- package/out/mcp.js +0 -654
- package/out/pack/caps.js +0 -271
- package/out/pack/governor.js +0 -309
- package/out/pack/lease-schema.js +0 -270
- package/out/pack/lease.js +0 -640
- package/out/pack/reconcile.js +0 -217
- package/out/pack/signature.js +0 -839
- package/out/permissions.js +0 -108
- package/out/permissions.mapping.yaml +0 -68
- package/out/registry/index.js +0 -332
- package/out/runner/host.js +0 -131
- package/out/runner/protocol.js +0 -108
- package/out/runner/remoteEngine.js +0 -130
- package/out/runtime/interfaces/config-provider.js +0 -32
- package/out/runtime/interfaces/edit-tracker.js +0 -24
- package/out/runtime/interfaces/index.js +0 -29
- package/out/runtime/interfaces/logger.js +0 -40
- package/out/runtime/interfaces/permission-handler.js +0 -66
- package/out/runtime/interfaces/session-store.js +0 -342
- package/out/runtime/vscode/vscode-session-store.js +0 -22
- package/out/sandbox/containerDriver.js +0 -570
- package/out/sandbox/processDriver.js +0 -315
- package/out/sandbox/sandboxRunner.js +0 -191
- package/out/sandbox/support.js +0 -301
- package/out/sandbox/types.js +0 -55
- package/out/scripts/analytics/fleet-local-adapter.js +0 -246
- package/out/scripts/analytics/live-fleet-4-collector.cjs +0 -315
- package/out/scripts/analytics/live-fleet-4-daemon.mjs +0 -134
- package/out/scripts/analytics/live-fleet-4-widget.cjs +0 -433
- package/out/scripts/gateway/Dockerfile.serve +0 -45
- package/out/scripts/gateway/docker-serve.sh +0 -248
- package/out/scripts/gateway/setup-gateway-server.ps1 +0 -953
- package/out/scripts/gateway/setup-gateway-server.sh +0 -935
- package/out/session.js +0 -272
- package/out/shared/agentEngines.js +0 -170
- package/out/shared/index.js +0 -109
- package/out/shared/models.js +0 -136
- package/out/shared/providers.js +0 -205
- package/out/spotlight/install.js +0 -345
- package/out/spotlight/publish.js +0 -544
- package/out/spotlight/yaml.js +0 -31
- package/out/store/index.js +0 -786
- package/out/store/shared.js +0 -241
- package/out/test/agentEnvFile.test.js +0 -97
- package/out/test/agentYaml.test.js +0 -373
- package/out/test/agentpack.test.js +0 -639
- package/out/test/analytics-lifecycle.test.js +0 -174
- package/out/test/analytics.test.js +0 -756
- package/out/test/auth-baseurl.test.js +0 -132
- package/out/test/auth-bootstrapApply.test.js +0 -123
- package/out/test/auth-broker-hardening.test.js +0 -227
- package/out/test/auth-broker.test.js +0 -541
- package/out/test/auth-callback.test.js +0 -62
- package/out/test/blueprint-registry.test.js +0 -105
- package/out/test/branding.test.js +0 -242
- package/out/test/caps-governor.test.js +0 -455
- package/out/test/cli-agent-id.test.js +0 -55
- package/out/test/codex-new-file-survival.test.js +0 -119
- package/out/test/configuration-scopes.test.js +0 -131
- package/out/test/credential-context.test.js +0 -160
- package/out/test/custom-env-layering.test.js +0 -151
- package/out/test/customEngineInstall.test.js +0 -100
- package/out/test/customRegistry.test.js +0 -122
- package/out/test/data-plane-engine-wiring.test.js +0 -250
- package/out/test/data-plane.test.js +0 -311
- package/out/test/deploy-init.test.js +0 -854
- package/out/test/deps-auto-install.test.js +0 -81
- package/out/test/egress-broker.test.js +0 -172
- package/out/test/engine-integration.test.js +0 -297
- package/out/test/enginePaths.test.js +0 -195
- package/out/test/enginePublish.test.js +0 -82
- package/out/test/fleetDisplayUtils.test.js +0 -100
- package/out/test/gateway-client.test.js +0 -409
- package/out/test/gateway-install-source.test.js +0 -111
- package/out/test/gateway-lifecycle.test.js +0 -608
- package/out/test/gateway-outbound.test.js +0 -538
- package/out/test/gateway-reset-mappings.test.js +0 -221
- package/out/test/gateway-route-index.test.js +0 -235
- package/out/test/gateway-secrets-preflight.test.js +0 -127
- package/out/test/gateway-session-routing.test.js +0 -65
- package/out/test/gateway-session-store.test.js +0 -216
- package/out/test/github.test.js +0 -232
- package/out/test/governor-hardening.test.js +0 -217
- package/out/test/headless-sync.test.js +0 -301
- package/out/test/helpers/manifest-fixtures.js +0 -27
- package/out/test/idp-init.test.js +0 -151
- package/out/test/lease-signature.test.js +0 -357
- package/out/test/lease-trust-root.test.js +0 -273
- package/out/test/lease-validation.test.js +0 -169
- package/out/test/lease.test.js +0 -114
- package/out/test/mcp-obo.test.js +0 -107
- package/out/test/mcp.test.js +0 -389
- package/out/test/model-routing.test.js +0 -133
- package/out/test/openclaw-channel-routing.test.js +0 -191
- package/out/test/pack-admission.test.js +0 -216
- package/out/test/pack-digest-parity.test.js +0 -140
- package/out/test/pack-reconcile.test.js +0 -183
- package/out/test/pack-signature-artifact.test.js +0 -103
- package/out/test/pack-signature.test.js +0 -176
- package/out/test/pack-trust-root.test.js +0 -202
- package/out/test/pathSafety.test.js +0 -63
- package/out/test/permissions.test.js +0 -175
- package/out/test/persistent-engine-worker.test.js +0 -220
- package/out/test/refreshPolicy.test.js +0 -60
- package/out/test/registry.test.js +0 -351
- package/out/test/remote-trust.test.js +0 -242
- package/out/test/runner-protocol.test.js +0 -249
- package/out/test/runtime.test.js +0 -349
- package/out/test/sandbox-driver.test.js +0 -553
- package/out/test/sandbox-hardening.test.js +0 -395
- package/out/test/sandbox-runner.test.js +0 -343
- package/out/test/scheduledFleetStorage.test.js +0 -72
- package/out/test/serve-gateway-turn.test.js +0 -267
- package/out/test/serve-hardening.test.js +0 -418
- package/out/test/serveClient.test.js +0 -209
- package/out/test/sessionJsonlFleet.test.js +0 -78
- package/out/test/sessionShip.test.js +0 -560
- package/out/test/shared.test.js +0 -173
- package/out/test/skills-mcp.test.js +0 -299
- package/out/test/spotlightPublish.test.js +0 -327
- package/out/test/spotlightYaml.test.js +0 -58
- package/out/test/state-sync-peer.test.js +0 -156
- package/out/test/store-install-safe.test.js +0 -69
- package/out/test/store.test.js +0 -331
- package/out/test/stores.test.js +0 -504
- package/out/test/sync-switch.test.js +0 -251
- package/out/test/teamViewDiscovery.test.js +0 -90
- package/out/test/tls-bypass.test.js +0 -90
- package/out/test/toolPath.test.js +0 -120
- package/out/test/utils.test.js +0 -308
- package/out/test/viewsConfigMerge.test.js +0 -180
- package/out/test/warrant.test.js +0 -138
- package/out/test/windows-command-line.test.js +0 -75
- package/out/utils/agentEnvFile.js +0 -131
- package/out/utils/binary.js +0 -175
- package/out/utils/index.js +0 -37
- package/out/utils/network.js +0 -74
- package/out/utils/paths.js +0 -116
- package/out/utils/pid.js +0 -180
- package/out/utils/resolveNodeBinary.js +0 -168
- package/out/utils/windowsCommandLine.js +0 -29
- package/out/utils.js +0 -968
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* The trust root — where the fleet learns which code it is allowed to run.
|
|
4
|
-
*
|
|
5
|
-
* Every one of these pins a property that was absent: the JWKS URL was built from whatever
|
|
6
|
-
* AGENTHIPPO_LEASE_URL pointed at, fetched with a bare `fetch()`, with no scheme requirement, no
|
|
7
|
-
* pinning, and nothing signing the document. Whoever could answer that URL chose the trust root.
|
|
8
|
-
*--------------------------------------------------------------------------------------------*/
|
|
9
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
-
}
|
|
15
|
-
Object.defineProperty(o, k2, desc);
|
|
16
|
-
}) : (function(o, m, k, k2) {
|
|
17
|
-
if (k2 === undefined) k2 = k;
|
|
18
|
-
o[k2] = m[k];
|
|
19
|
-
}));
|
|
20
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
-
}) : function(o, v) {
|
|
23
|
-
o["default"] = v;
|
|
24
|
-
});
|
|
25
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
-
var ownKeys = function(o) {
|
|
27
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
-
var ar = [];
|
|
29
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
-
return ar;
|
|
31
|
-
};
|
|
32
|
-
return ownKeys(o);
|
|
33
|
-
};
|
|
34
|
-
return function (mod) {
|
|
35
|
-
if (mod && mod.__esModule) return mod;
|
|
36
|
-
var result = {};
|
|
37
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
-
__setModuleDefault(result, mod);
|
|
39
|
-
return result;
|
|
40
|
-
};
|
|
41
|
-
})();
|
|
42
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
require("mocha");
|
|
44
|
-
const assert = __importStar(require("assert"));
|
|
45
|
-
const warrant_1 = require("../authority/warrant");
|
|
46
|
-
const signature_1 = require("../pack/signature");
|
|
47
|
-
const key = (0, warrant_1.generateWarrantKeypair)('k1');
|
|
48
|
-
const other = (0, warrant_1.generateWarrantKeypair)('k2');
|
|
49
|
-
const okResponse = (body) => ({
|
|
50
|
-
ok: true,
|
|
51
|
-
status: 200,
|
|
52
|
-
json: async () => body,
|
|
53
|
-
});
|
|
54
|
-
const fetchReturning = (body) => (async () => okResponse(body));
|
|
55
|
-
suite('trust root — scheme', () => {
|
|
56
|
-
test('an http JWKS origin is refused: the keyring that decides what runs must not be rewritable in flight', async () => {
|
|
57
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
58
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'http://plane.example/.well-known/jwks.json' },
|
|
59
|
-
fetchImpl: fetchReturning({ pemsByKid: { k1: key.publicKeyPem } }),
|
|
60
|
-
});
|
|
61
|
-
assert.strictEqual(root.status, 'unavailable');
|
|
62
|
-
assert.match(root.reason ?? '', /must be https/);
|
|
63
|
-
assert.deepStrictEqual(root.keys, {});
|
|
64
|
-
});
|
|
65
|
-
test('https is accepted with no warning', async () => {
|
|
66
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
67
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'https://plane.example/.well-known/jwks.json' },
|
|
68
|
-
fetchImpl: fetchReturning({ pemsByKid: { k1: key.publicKeyPem } }),
|
|
69
|
-
});
|
|
70
|
-
assert.strictEqual(root.status, 'configured');
|
|
71
|
-
assert.deepStrictEqual(Object.keys(root.keys), ['k1']);
|
|
72
|
-
});
|
|
73
|
-
test('the local-dev escape hatch works and is LOUD', async () => {
|
|
74
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
75
|
-
env: {
|
|
76
|
-
[signature_1.PACK_JWKS_URL_ENV]: 'http://localhost:9000/.well-known/jwks.json',
|
|
77
|
-
[signature_1.ALLOW_INSECURE_TRUST_ROOT_ENV]: '1',
|
|
78
|
-
},
|
|
79
|
-
fetchImpl: fetchReturning({ pemsByKid: { k1: key.publicKeyPem } }),
|
|
80
|
-
});
|
|
81
|
-
assert.strictEqual(root.status, 'configured');
|
|
82
|
-
assert.ok(root.warnings.some((w) => /INSECURE/.test(w)), 'the opt-out must announce itself');
|
|
83
|
-
});
|
|
84
|
-
test('assertSecureTrustUrl rejects a malformed URL rather than assuming a scheme', () => {
|
|
85
|
-
const r = (0, signature_1.assertSecureTrustUrl)('not a url', 'the trust root', {});
|
|
86
|
-
assert.strictEqual(r.ok, false);
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
suite('trust root — independence from the lease origin', () => {
|
|
90
|
-
test('a dedicated JWKS URL takes precedence over anything derived from the lease', async () => {
|
|
91
|
-
let asked = '';
|
|
92
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
93
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'https://trust.example/jwks.json' },
|
|
94
|
-
leaseUrl: 'https://attacker.example/lease',
|
|
95
|
-
fetchImpl: (async (u) => { asked = u; return okResponse({ pemsByKid: { k1: key.publicKeyPem } }); }),
|
|
96
|
-
});
|
|
97
|
-
assert.strictEqual(asked, 'https://trust.example/jwks.json');
|
|
98
|
-
assert.strictEqual(root.status, 'configured');
|
|
99
|
-
});
|
|
100
|
-
test('deriving from the lease origin still works but says it is weaker', async () => {
|
|
101
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
102
|
-
env: {},
|
|
103
|
-
leaseUrl: 'https://plane.example/lease',
|
|
104
|
-
fetchImpl: fetchReturning({ pemsByKid: { k1: key.publicKeyPem } }),
|
|
105
|
-
});
|
|
106
|
-
assert.strictEqual(root.status, 'configured');
|
|
107
|
-
assert.strictEqual(root.derivedFromLease, true);
|
|
108
|
-
assert.ok(root.warnings.some((w) => /derived from AGENTHIPPO_LEASE_URL/.test(w)));
|
|
109
|
-
});
|
|
110
|
-
test('the derived URL asks for the pack-signing purpose, so a plane that splits keys by purpose still answers it', async () => {
|
|
111
|
-
let asked = '';
|
|
112
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
113
|
-
env: {},
|
|
114
|
-
leaseUrl: 'https://plane.example/lease',
|
|
115
|
-
fetchImpl: (async (u) => { asked = u; return okResponse({ pemsByKid: { k1: key.publicKeyPem } }); }),
|
|
116
|
-
});
|
|
117
|
-
// Without the query string a plane that now serves one purpose per document can hand back
|
|
118
|
-
// a set with no pack-signing key in it — an empty trust root, which with signing fail-closed
|
|
119
|
-
// means every instance refuses to boot at once.
|
|
120
|
-
assert.strictEqual(asked, 'https://plane.example/.well-known/jwks.json?purpose=pack-signing');
|
|
121
|
-
assert.strictEqual(root.status, 'configured');
|
|
122
|
-
});
|
|
123
|
-
test('nothing configured is UNCONFIGURED, not an error — an unmanaged deployment has no plane', async () => {
|
|
124
|
-
const root = await (0, signature_1.loadPackTrustRoot)({ env: {} });
|
|
125
|
-
assert.strictEqual(root.status, 'unconfigured');
|
|
126
|
-
assert.deepStrictEqual(root.keys, {});
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
suite('trust root — thumbprint pinning', () => {
|
|
130
|
-
test('a key that matches no pin is REFUSED, by either thumbprint form', async () => {
|
|
131
|
-
const tp = (0, signature_1.publicKeyThumbprints)(key.publicKeyPem);
|
|
132
|
-
for (const pin of [tp.jwk, tp.spki, `sha256:${tp.spki.toUpperCase()}`]) {
|
|
133
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
134
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'https://t.example/j', [signature_1.PACK_JWKS_PINS_ENV]: pin },
|
|
135
|
-
fetchImpl: fetchReturning({ pemsByKid: { k1: key.publicKeyPem, k2: other.publicKeyPem } }),
|
|
136
|
-
});
|
|
137
|
-
assert.strictEqual(root.status, 'configured', `pin form ${pin} should match`);
|
|
138
|
-
assert.deepStrictEqual(Object.keys(root.keys), ['k1'], 'the unpinned key must be dropped');
|
|
139
|
-
assert.ok(root.warnings.some((w) => /k2 does not match any pin/.test(w)));
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
test('a swapped trust root that matches NO pin is unavailable, not silently empty', async () => {
|
|
143
|
-
const tp = (0, signature_1.publicKeyThumbprints)(key.publicKeyPem);
|
|
144
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
145
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'https://t.example/j', [signature_1.PACK_JWKS_PINS_ENV]: tp.spki },
|
|
146
|
-
fetchImpl: fetchReturning({ pemsByKid: { k2: other.publicKeyPem } }),
|
|
147
|
-
});
|
|
148
|
-
assert.strictEqual(root.status, 'unavailable');
|
|
149
|
-
assert.match(root.reason ?? '', /pin check/);
|
|
150
|
-
});
|
|
151
|
-
test('parseJwksPins tolerates whitespace, prefixes and blanks', () => {
|
|
152
|
-
assert.deepStrictEqual((0, signature_1.parseJwksPins)(' sha256:AB , ,cd '), ['ab', 'cd']);
|
|
153
|
-
assert.deepStrictEqual((0, signature_1.parseJwksPins)(undefined), []);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
suite('trust root — A4: unavailable is not the same as unconfigured', () => {
|
|
157
|
-
test('a non-200 JWKS is an ERROR, not an empty keyring', async () => {
|
|
158
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
159
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'https://t.example/j' },
|
|
160
|
-
fetchImpl: (async () => ({ ok: false, status: 503 })),
|
|
161
|
-
});
|
|
162
|
-
assert.strictEqual(root.status, 'unavailable');
|
|
163
|
-
assert.match(root.reason ?? '', /HTTP 503/);
|
|
164
|
-
});
|
|
165
|
-
test('a transport failure is an ERROR', async () => {
|
|
166
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
167
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'https://t.example/j' },
|
|
168
|
-
fetchImpl: (async () => { throw new Error('ECONNREFUSED'); }),
|
|
169
|
-
});
|
|
170
|
-
assert.strictEqual(root.status, 'unavailable');
|
|
171
|
-
assert.match(root.reason ?? '', /ECONNREFUSED/);
|
|
172
|
-
});
|
|
173
|
-
test('a garbled inline keyring is an ERROR — a typo must not read as "unmanaged"', async () => {
|
|
174
|
-
const root = await (0, signature_1.loadPackTrustRoot)({ env: { AGENTHIPPO_PACK_SIGNING_KEYS: '{not json' } });
|
|
175
|
-
assert.strictEqual(root.status, 'unavailable');
|
|
176
|
-
assert.match(root.reason ?? '', /not valid JSON/);
|
|
177
|
-
});
|
|
178
|
-
test('a JWKS with no usable ES256 keys is an ERROR', async () => {
|
|
179
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
180
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'https://t.example/j' },
|
|
181
|
-
fetchImpl: fetchReturning({ keys: [{ kty: 'RSA', kid: 'r1', n: 'x', e: 'AQAB' }] }),
|
|
182
|
-
});
|
|
183
|
-
assert.strictEqual(root.status, 'unavailable');
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
suite('trust root — document shapes', () => {
|
|
187
|
-
test('a standard JWKS (what authority/warrant.ts publishes) is accepted', async () => {
|
|
188
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
189
|
-
env: { [signature_1.PACK_JWKS_URL_ENV]: 'https://t.example/j' },
|
|
190
|
-
fetchImpl: fetchReturning((0, warrant_1.jwks)([key])),
|
|
191
|
-
});
|
|
192
|
-
assert.strictEqual(root.status, 'configured');
|
|
193
|
-
assert.deepStrictEqual(Object.keys(root.keys), ['k1']);
|
|
194
|
-
});
|
|
195
|
-
test('inline keys need no network at all (air-gapped)', async () => {
|
|
196
|
-
const root = await (0, signature_1.loadPackTrustRoot)({
|
|
197
|
-
env: { AGENTHIPPO_PACK_SIGNING_KEYS: JSON.stringify({ k1: key.publicKeyPem }) },
|
|
198
|
-
fetchImpl: (async () => { throw new Error('must not be called'); }),
|
|
199
|
-
});
|
|
200
|
-
assert.strictEqual(root.status, 'configured');
|
|
201
|
-
});
|
|
202
|
-
});
|
|
@@ -1,63 +0,0 @@
|
|
|
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
|
-
require("mocha");
|
|
40
|
-
const assert = __importStar(require("assert"));
|
|
41
|
-
const path = __importStar(require("path"));
|
|
42
|
-
const pathSafety_1 = require("../utils/pathSafety");
|
|
43
|
-
suite('pathSafety', () => {
|
|
44
|
-
const root = path.resolve('/tmp/agentide-analytics');
|
|
45
|
-
test('isPathUnderRoot allows paths under root', () => {
|
|
46
|
-
assert.strictEqual((0, pathSafety_1.isPathUnderRoot)(root, path.join(root, 'views', 'cost-ops', 'view.yaml')), true);
|
|
47
|
-
assert.strictEqual((0, pathSafety_1.isPathUnderRoot)(root, root), true);
|
|
48
|
-
});
|
|
49
|
-
test('isPathUnderRoot rejects parent escape via ..', () => {
|
|
50
|
-
assert.strictEqual((0, pathSafety_1.isPathUnderRoot)(root, path.join(root, '..', 'secret.txt')), false);
|
|
51
|
-
assert.strictEqual((0, pathSafety_1.isPathUnderRoot)(root, '/tmp/secret.txt'), false);
|
|
52
|
-
});
|
|
53
|
-
test('isPathUnderRoot rejects prefix-only matches', () => {
|
|
54
|
-
const sibling = `${root}-other`;
|
|
55
|
-
assert.strictEqual((0, pathSafety_1.isPathUnderRoot)(root, path.join(sibling, 'views', 'x.yaml')), false);
|
|
56
|
-
});
|
|
57
|
-
test('isPathUnderAnyRoot checks multiple roots', () => {
|
|
58
|
-
const other = path.resolve('/tmp/other-analytics');
|
|
59
|
-
const candidate = path.join(other, 'panel', 'views.yaml');
|
|
60
|
-
assert.strictEqual((0, pathSafety_1.isPathUnderAnyRoot)([root, other], candidate), true);
|
|
61
|
-
assert.strictEqual((0, pathSafety_1.isPathUnderAnyRoot)([root], candidate), false);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
@@ -1,175 +0,0 @@
|
|
|
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
|
-
require("mocha");
|
|
40
|
-
const assert = __importStar(require("assert"));
|
|
41
|
-
const permissions_1 = require("../permissions");
|
|
42
|
-
function createManifest(spec = {}) {
|
|
43
|
-
return {
|
|
44
|
-
apiVersion: 'agenthippo.ai/v1',
|
|
45
|
-
kind: 'Agent',
|
|
46
|
-
metadata: {
|
|
47
|
-
name: 'test-agent',
|
|
48
|
-
version: '1.0.0',
|
|
49
|
-
},
|
|
50
|
-
spec: {
|
|
51
|
-
engine: 'claude',
|
|
52
|
-
...spec,
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
suite('Default Permissions', () => {
|
|
57
|
-
test('DEFAULT_PERMISSIONS stays full by default', () => {
|
|
58
|
-
assert.strictEqual(permissions_1.DEFAULT_PERMISSIONS.fileAccess, 'full');
|
|
59
|
-
});
|
|
60
|
-
test('getDefaultPermissions returns mapping-config default', () => {
|
|
61
|
-
const defaults = (0, permissions_1.getDefaultPermissions)();
|
|
62
|
-
assert.strictEqual(defaults.fileAccess, 'full');
|
|
63
|
-
});
|
|
64
|
-
test('getDefaultPermissions returns a new object each time', () => {
|
|
65
|
-
const a = (0, permissions_1.getDefaultPermissions)();
|
|
66
|
-
const b = (0, permissions_1.getDefaultPermissions)();
|
|
67
|
-
assert.notStrictEqual(a, b);
|
|
68
|
-
assert.deepStrictEqual(a, b);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
suite('Parse Permissions from Manifest', () => {
|
|
72
|
-
test('parsePermissions returns defaults for undefined manifest', () => {
|
|
73
|
-
const perms = (0, permissions_1.parsePermissions)(undefined);
|
|
74
|
-
assert.strictEqual(perms.fileAccess, 'full');
|
|
75
|
-
});
|
|
76
|
-
test('parsePermissions returns defaults for manifest without permissions', () => {
|
|
77
|
-
const manifest = createManifest({});
|
|
78
|
-
const perms = (0, permissions_1.parsePermissions)(manifest);
|
|
79
|
-
assert.strictEqual(perms.fileAccess, 'full');
|
|
80
|
-
});
|
|
81
|
-
test('parsePermissions reads fileAccess: read-only', () => {
|
|
82
|
-
const manifest = createManifest({
|
|
83
|
-
permissions: { fileAccess: 'read-only' },
|
|
84
|
-
});
|
|
85
|
-
const perms = (0, permissions_1.parsePermissions)(manifest);
|
|
86
|
-
assert.strictEqual(perms.fileAccess, 'read-only');
|
|
87
|
-
});
|
|
88
|
-
test('parsePermissions reads fileAccess: workspace-write', () => {
|
|
89
|
-
const manifest = createManifest({
|
|
90
|
-
permissions: { fileAccess: 'workspace-write' },
|
|
91
|
-
});
|
|
92
|
-
const perms = (0, permissions_1.parsePermissions)(manifest);
|
|
93
|
-
assert.strictEqual(perms.fileAccess, 'workspace-write');
|
|
94
|
-
});
|
|
95
|
-
test('parsePermissions reads fileAccess: full', () => {
|
|
96
|
-
const manifest = createManifest({
|
|
97
|
-
permissions: { fileAccess: 'full' },
|
|
98
|
-
});
|
|
99
|
-
const perms = (0, permissions_1.parsePermissions)(manifest);
|
|
100
|
-
assert.strictEqual(perms.fileAccess, 'full');
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
suite('Parse Manifest Permissions', () => {
|
|
104
|
-
test('parseManifestPermissions reads spec.permissions.fileAccess', () => {
|
|
105
|
-
const manifest = createManifest({
|
|
106
|
-
permissions: { fileAccess: 'read-only' },
|
|
107
|
-
});
|
|
108
|
-
const perms = (0, permissions_1.parseManifestPermissions)(manifest);
|
|
109
|
-
assert.strictEqual(perms.fileAccess, 'read-only');
|
|
110
|
-
});
|
|
111
|
-
test('parseManifestPermissions returns defaults for empty manifest', () => {
|
|
112
|
-
const manifest = createManifest({});
|
|
113
|
-
const perms = (0, permissions_1.parseManifestPermissions)(manifest);
|
|
114
|
-
assert.strictEqual(perms.fileAccess, 'full');
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
suite('Permission Enforcement', () => {
|
|
118
|
-
test('user fileAccess takes precedence over manifest fileAccess', () => {
|
|
119
|
-
assert.strictEqual((0, permissions_1.enforcePermissions)({ fileAccess: 'read-only' }, { fileAccess: 'full' }).fileAccess, 'full');
|
|
120
|
-
assert.strictEqual((0, permissions_1.enforcePermissions)({ fileAccess: 'full' }, { fileAccess: 'read-only' }).fileAccess, 'read-only');
|
|
121
|
-
assert.strictEqual((0, permissions_1.enforcePermissions)({ fileAccess: 'workspace-write' }, { fileAccess: 'workspace-write' }).fileAccess, 'workspace-write');
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
suite('Claude Permission Mapping', () => {
|
|
125
|
-
const workspaceFolders = ['/workspace/root', '/workspace/other'];
|
|
126
|
-
test('fileAccess: read-only maps to plan mode with workspace dirs', () => {
|
|
127
|
-
const opts = (0, permissions_1.toClaudeOptions)({ fileAccess: 'read-only' }, workspaceFolders);
|
|
128
|
-
assert.strictEqual(opts.permissionMode, 'plan');
|
|
129
|
-
assert.strictEqual(opts.allowDangerouslySkipPermissions, false);
|
|
130
|
-
assert.deepStrictEqual(opts.additionalDirectories, workspaceFolders);
|
|
131
|
-
});
|
|
132
|
-
test('fileAccess: workspace-write maps to acceptEdits with workspace dirs', () => {
|
|
133
|
-
const opts = (0, permissions_1.toClaudeOptions)({ fileAccess: 'workspace-write' }, workspaceFolders);
|
|
134
|
-
assert.strictEqual(opts.permissionMode, 'acceptEdits');
|
|
135
|
-
assert.strictEqual(opts.allowDangerouslySkipPermissions, false);
|
|
136
|
-
assert.deepStrictEqual(opts.additionalDirectories, workspaceFolders);
|
|
137
|
-
});
|
|
138
|
-
test('fileAccess: full maps to bypassPermissions with unrestricted dirs', () => {
|
|
139
|
-
const opts = (0, permissions_1.toClaudeOptions)({ fileAccess: 'full' }, workspaceFolders);
|
|
140
|
-
assert.strictEqual(opts.permissionMode, 'bypassPermissions');
|
|
141
|
-
assert.strictEqual(opts.allowDangerouslySkipPermissions, true);
|
|
142
|
-
assert.strictEqual(opts.additionalDirectories, undefined);
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
suite('Codex Permission Mapping', () => {
|
|
146
|
-
const workspaceFolders = ['/workspace/root', '/workspace/other'];
|
|
147
|
-
test('approvalPolicy is always never for non-interactive V1', () => {
|
|
148
|
-
const opts = (0, permissions_1.toCodexOptions)({ fileAccess: 'workspace-write' }, workspaceFolders);
|
|
149
|
-
assert.strictEqual(opts.approvalPolicy, 'never');
|
|
150
|
-
});
|
|
151
|
-
test('fileAccess: read-only maps to sandboxMode: read-only', () => {
|
|
152
|
-
const opts = (0, permissions_1.toCodexOptions)({ fileAccess: 'read-only' }, workspaceFolders);
|
|
153
|
-
assert.strictEqual(opts.sandboxMode, 'read-only');
|
|
154
|
-
});
|
|
155
|
-
test('fileAccess: workspace-write maps to sandboxMode: workspace-write', () => {
|
|
156
|
-
const opts = (0, permissions_1.toCodexOptions)({ fileAccess: 'workspace-write' }, workspaceFolders);
|
|
157
|
-
assert.strictEqual(opts.sandboxMode, 'workspace-write');
|
|
158
|
-
});
|
|
159
|
-
test('fileAccess: full maps to sandboxMode: danger-full-access', () => {
|
|
160
|
-
const opts = (0, permissions_1.toCodexOptions)({ fileAccess: 'full' }, workspaceFolders);
|
|
161
|
-
assert.strictEqual(opts.sandboxMode, 'danger-full-access');
|
|
162
|
-
});
|
|
163
|
-
test('additionalDirectories always includes workspace folders', () => {
|
|
164
|
-
const opts = (0, permissions_1.toCodexOptions)({ fileAccess: 'full' }, workspaceFolders);
|
|
165
|
-
assert.deepStrictEqual(opts.additionalDirectories, workspaceFolders);
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
suite('Permissions Config Loader', () => {
|
|
169
|
-
test('config cache can be reset', () => {
|
|
170
|
-
// Sanity check: function exists and doesn't throw
|
|
171
|
-
(0, permissions_1._resetMappingConfigCache)();
|
|
172
|
-
const defaults = (0, permissions_1.getDefaultPermissions)();
|
|
173
|
-
assert.ok(defaults.fileAccess);
|
|
174
|
-
});
|
|
175
|
-
});
|
|
@@ -1,220 +0,0 @@
|
|
|
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
|
-
const assert = __importStar(require("assert"));
|
|
40
|
-
const fs = __importStar(require("fs"));
|
|
41
|
-
const os = __importStar(require("os"));
|
|
42
|
-
const path = __importStar(require("path"));
|
|
43
|
-
const persistentEngineWorker_js_1 = require("../engines/persistentEngineWorker.js");
|
|
44
|
-
/**
|
|
45
|
-
* A fake runner that speaks the worker NDJSON protocol, driven by FAKE_MODE on the spawn env:
|
|
46
|
-
* - normal : ready; per run → text(message) then result(nativeSessionId="sess-<id>")
|
|
47
|
-
* - fail : ready; per run → error event + failed control message
|
|
48
|
-
* - ignore-abort : ready; per run → one text event, then never settles (ignores abort)
|
|
49
|
-
* - hang-start : never emits ready (simulates a wedged engine import)
|
|
50
|
-
* On startup it appends its pid to SPAWN_COUNT_FILE when set, so tests can count (re)spawns.
|
|
51
|
-
*/
|
|
52
|
-
const FAKE_RUNNER = `
|
|
53
|
-
const { createInterface } = require('node:readline');
|
|
54
|
-
const fs = require('node:fs');
|
|
55
|
-
const mode = process.env.FAKE_MODE || 'normal';
|
|
56
|
-
const spawnFile = process.env.SPAWN_COUNT_FILE;
|
|
57
|
-
if (spawnFile) { try { fs.appendFileSync(spawnFile, process.pid + '\\n'); } catch {} }
|
|
58
|
-
function emit(o) { process.stdout.write(JSON.stringify(o) + '\\n'); }
|
|
59
|
-
if (mode !== 'hang-start') { emit({ type: 'ready' }); }
|
|
60
|
-
const rl = createInterface({ input: process.stdin });
|
|
61
|
-
rl.on('line', (line) => {
|
|
62
|
-
let req; try { req = JSON.parse(line); } catch { return; }
|
|
63
|
-
if (req.type === 'run') {
|
|
64
|
-
const id = req.id;
|
|
65
|
-
if (mode === 'fail') {
|
|
66
|
-
emit({ id, event: { type: 'error', message: 'boom' } });
|
|
67
|
-
emit({ type: 'failed', id, message: 'boom' });
|
|
68
|
-
} else if (mode === 'ignore-abort') {
|
|
69
|
-
emit({ id, event: { type: 'text', delta: 'partial' } });
|
|
70
|
-
} else {
|
|
71
|
-
emit({ id, event: { type: 'text', delta: (req.env && req.env.AGENTHIPPO_MESSAGE) || 'hi' } });
|
|
72
|
-
emit({ type: 'result', id, nativeSessionId: 'sess-' + id });
|
|
73
|
-
}
|
|
74
|
-
} else if (req.type === 'shutdown') {
|
|
75
|
-
rl.close();
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
rl.on('close', () => process.exit(0));
|
|
79
|
-
if (mode === 'hang-start') { setInterval(() => {}, 1000); }
|
|
80
|
-
`;
|
|
81
|
-
function deferred() {
|
|
82
|
-
let resolve;
|
|
83
|
-
const promise = new Promise((r) => { resolve = r; });
|
|
84
|
-
return { promise, resolve };
|
|
85
|
-
}
|
|
86
|
-
function makeEmitter() {
|
|
87
|
-
const texts = [];
|
|
88
|
-
const errors = [];
|
|
89
|
-
let textGate;
|
|
90
|
-
const emitter = {
|
|
91
|
-
async thinking() { },
|
|
92
|
-
async text(delta) { texts.push(delta); if (textGate) {
|
|
93
|
-
await textGate.promise;
|
|
94
|
-
} },
|
|
95
|
-
async toolStart() { },
|
|
96
|
-
async toolEnd() { },
|
|
97
|
-
async progress() { },
|
|
98
|
-
async question() { return { selected: [], freeText: null, declined: true }; },
|
|
99
|
-
async error(message) { errors.push(message); },
|
|
100
|
-
async done() { },
|
|
101
|
-
};
|
|
102
|
-
return { emitter, texts, errors, setTextGate: (g) => { textGate = g; } };
|
|
103
|
-
}
|
|
104
|
-
const noopLogger = { debug: () => { }, info: () => { }, warn: () => { }, error: () => { } };
|
|
105
|
-
async function waitFor(cond, timeoutMs = 4000) {
|
|
106
|
-
const start = Date.now();
|
|
107
|
-
while (!cond()) {
|
|
108
|
-
if (Date.now() - start > timeoutMs) {
|
|
109
|
-
throw new Error('waitFor timed out');
|
|
110
|
-
}
|
|
111
|
-
await new Promise((r) => setTimeout(r, 10));
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
suite('Persistent engine worker pool', () => {
|
|
115
|
-
let tmpDir;
|
|
116
|
-
let runnerPath;
|
|
117
|
-
let pool;
|
|
118
|
-
let keySeq = 0;
|
|
119
|
-
setup(() => {
|
|
120
|
-
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'persistent-worker-'));
|
|
121
|
-
runnerPath = path.join(tmpDir, 'fake-runner.cjs');
|
|
122
|
-
fs.writeFileSync(runnerPath, FAKE_RUNNER, 'utf8');
|
|
123
|
-
pool = new persistentEngineWorker_js_1.PersistentEngineWorkerPool();
|
|
124
|
-
});
|
|
125
|
-
teardown(() => {
|
|
126
|
-
pool.disposeAll();
|
|
127
|
-
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
128
|
-
});
|
|
129
|
-
function opts(mode, extra = {}) {
|
|
130
|
-
return {
|
|
131
|
-
cacheKey: `key-${++keySeq}`,
|
|
132
|
-
runnerPath,
|
|
133
|
-
nodeBin: process.execPath,
|
|
134
|
-
cwd: tmpDir,
|
|
135
|
-
spawnEnv: { PATH: process.env.PATH ?? '', FAKE_MODE: mode },
|
|
136
|
-
logger: noopLogger,
|
|
137
|
-
label: `test.${mode}`,
|
|
138
|
-
...extra,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
test('runs a turn on a warm worker and streams text + result', async () => {
|
|
142
|
-
const o = opts('normal');
|
|
143
|
-
const { emitter, texts } = makeEmitter();
|
|
144
|
-
const result = await pool.run(o, { AGENTHIPPO_MESSAGE: 'hello' }, emitter);
|
|
145
|
-
assert.deepStrictEqual(texts, ['hello']);
|
|
146
|
-
assert.strictEqual(result.nativeSessionId, 'sess-1');
|
|
147
|
-
assert.strictEqual(pool._workerCountForTest(), 1);
|
|
148
|
-
});
|
|
149
|
-
test('reuses the same worker across turns (single spawn)', async () => {
|
|
150
|
-
const spawnFile = path.join(tmpDir, 'spawns.txt');
|
|
151
|
-
const o = opts('normal', { spawnEnv: { PATH: process.env.PATH ?? '', FAKE_MODE: 'normal', SPAWN_COUNT_FILE: spawnFile } });
|
|
152
|
-
await pool.run(o, {}, makeEmitter().emitter);
|
|
153
|
-
await pool.run(o, {}, makeEmitter().emitter);
|
|
154
|
-
await pool.run(o, {}, makeEmitter().emitter);
|
|
155
|
-
const spawns = fs.readFileSync(spawnFile, 'utf8').trim().split('\n').filter(Boolean);
|
|
156
|
-
assert.strictEqual(spawns.length, 1, 'engine should spawn exactly once for repeated turns');
|
|
157
|
-
});
|
|
158
|
-
test('a failed turn rejects, retires the worker, and the next turn spawns fresh', async () => {
|
|
159
|
-
const spawnFile = path.join(tmpDir, 'spawns.txt');
|
|
160
|
-
const o = opts('fail', { spawnEnv: { PATH: process.env.PATH ?? '', FAKE_MODE: 'fail', SPAWN_COUNT_FILE: spawnFile } });
|
|
161
|
-
const first = makeEmitter();
|
|
162
|
-
await assert.rejects(pool.run(o, {}, first.emitter), /boom/);
|
|
163
|
-
assert.deepStrictEqual(first.errors, ['boom'], 'error event should reach the emitter before reject');
|
|
164
|
-
// Retired worker must not be reused — the next turn gets a brand new child.
|
|
165
|
-
await assert.rejects(pool.run(o, {}, makeEmitter().emitter), /boom/);
|
|
166
|
-
await waitFor(() => fs.existsSync(spawnFile) && fs.readFileSync(spawnFile, 'utf8').trim().split('\n').filter(Boolean).length >= 2);
|
|
167
|
-
const spawns = fs.readFileSync(spawnFile, 'utf8').trim().split('\n').filter(Boolean);
|
|
168
|
-
assert.strictEqual(spawns.length, 2, 'failed worker should be replaced by a fresh spawn');
|
|
169
|
-
});
|
|
170
|
-
test('startup watchdog rejects when the engine never signals ready', async () => {
|
|
171
|
-
const o = opts('hang-start', { startupTimeoutMs: 250 });
|
|
172
|
-
const start = Date.now();
|
|
173
|
-
await assert.rejects(pool.run(o, {}, makeEmitter().emitter), /did not become ready/);
|
|
174
|
-
assert.ok(Date.now() - start < 3000, 'should reject promptly via the watchdog, not hang');
|
|
175
|
-
assert.strictEqual(pool._workerCountForTest(), 0, 'dead worker should be dropped from the pool');
|
|
176
|
-
});
|
|
177
|
-
test('abort settles the turn even when the engine ignores its AbortSignal', async () => {
|
|
178
|
-
const o = opts('ignore-abort', { abortSettleTimeoutMs: 250 });
|
|
179
|
-
const { emitter } = makeEmitter();
|
|
180
|
-
const controller = new AbortController();
|
|
181
|
-
const runPromise = pool.run(o, {}, emitter, controller.signal);
|
|
182
|
-
// Let the run get going (the worker emits one text event), then abort.
|
|
183
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
184
|
-
controller.abort();
|
|
185
|
-
await assert.rejects(runPromise, /aborted/);
|
|
186
|
-
});
|
|
187
|
-
test('per-run line chains: a stalled emitter on one turn does not block another', async () => {
|
|
188
|
-
const o = opts('normal');
|
|
189
|
-
const a = makeEmitter();
|
|
190
|
-
const b = makeEmitter();
|
|
191
|
-
const gate = deferred();
|
|
192
|
-
a.setTextGate(gate); // turn A's emitter.text will block until we release the gate
|
|
193
|
-
const runA = pool.run(o, { AGENTHIPPO_MESSAGE: 'A' }, a.emitter);
|
|
194
|
-
// Wait until A's text is being delivered (emitter.text entered and now blocked on the gate).
|
|
195
|
-
await waitFor(() => a.texts.length === 1);
|
|
196
|
-
const runB = pool.run(o, { AGENTHIPPO_MESSAGE: 'B' }, b.emitter);
|
|
197
|
-
// B must stream through while A is still blocked — proving chains are per-run, not global.
|
|
198
|
-
await waitFor(() => b.texts.length === 1);
|
|
199
|
-
assert.deepStrictEqual(b.texts, ['B']);
|
|
200
|
-
gate.resolve();
|
|
201
|
-
const [resA, resB] = await Promise.all([runA, runB]);
|
|
202
|
-
assert.deepStrictEqual(a.texts, ['A']);
|
|
203
|
-
assert.ok(resA.nativeSessionId && resB.nativeSessionId);
|
|
204
|
-
});
|
|
205
|
-
test('onMaintenance reaps idle workers', async () => {
|
|
206
|
-
const o = opts('normal', { idleTtlMs: 0 });
|
|
207
|
-
await pool.run(o, {}, makeEmitter().emitter);
|
|
208
|
-
assert.strictEqual(pool._workerCountForTest(), 1);
|
|
209
|
-
await new Promise((r) => setTimeout(r, 5)); // let lastUsedAt fall past the (0ms) TTL
|
|
210
|
-
pool.onMaintenance();
|
|
211
|
-
assert.strictEqual(pool._workerCountForTest(), 0);
|
|
212
|
-
});
|
|
213
|
-
test('disposeAll tears down all workers', async () => {
|
|
214
|
-
await pool.run(opts('normal'), {}, makeEmitter().emitter);
|
|
215
|
-
await pool.run(opts('normal'), {}, makeEmitter().emitter);
|
|
216
|
-
assert.strictEqual(pool._workerCountForTest(), 2);
|
|
217
|
-
pool.disposeAll();
|
|
218
|
-
assert.strictEqual(pool._workerCountForTest(), 0);
|
|
219
|
-
});
|
|
220
|
-
});
|