@ddwang/magnitude-core 0.3.1-ddwang.2 → 0.3.1-ddwang.21
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/dist/cli.cjs +2 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +2 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.mjs +1 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/index.cjs +2704 -1522
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +188 -50
- package/dist/index.d.ts +1147 -23
- package/dist/index.mjs +2527 -1362
- package/dist/index.mjs.map +1 -0
- package/node_modules/patchright-core/README.md +3 -0
- package/node_modules/patchright-core/ThirdPartyNotices.txt +13 -0
- package/node_modules/patchright-core/bin/install_media_pack.ps1 +5 -0
- package/node_modules/patchright-core/bin/install_webkit_wsl.ps1 +33 -0
- package/node_modules/patchright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
- package/node_modules/patchright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
- package/node_modules/patchright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
- package/node_modules/patchright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
- package/node_modules/patchright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
- package/node_modules/patchright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
- package/node_modules/patchright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
- package/node_modules/patchright-core/browsers.json +52 -0
- package/node_modules/patchright-core/cli.js +22 -0
- package/node_modules/patchright-core/index.d.ts +17 -0
- package/node_modules/patchright-core/index.js +17 -0
- package/node_modules/patchright-core/index.mjs +28 -0
- package/node_modules/patchright-core/lib/bootstrap.js +149 -0
- package/node_modules/patchright-core/lib/coreBundle.js +80653 -0
- package/node_modules/patchright-core/lib/entry/cliDaemon.js +5 -0
- package/node_modules/patchright-core/lib/entry/dashboardApp.js +3 -0
- package/node_modules/patchright-core/lib/entry/mcp.js +10 -0
- package/node_modules/patchright-core/lib/entry/oopBrowserDownload.js +3 -0
- package/node_modules/patchright-core/lib/package.js +50 -0
- package/node_modules/patchright-core/lib/server/chromium/appIcon.png +0 -0
- package/node_modules/patchright-core/lib/server/electron/loader.js +112 -0
- package/node_modules/patchright-core/lib/serverRegistry.js +1939 -0
- package/node_modules/patchright-core/lib/serverRegistry.js.LICENSE +65 -0
- package/node_modules/patchright-core/lib/tools/cli-client/channelSessions.js +141 -0
- package/node_modules/patchright-core/lib/tools/cli-client/cli.js +7 -0
- package/node_modules/patchright-core/lib/tools/cli-client/help.json +808 -0
- package/node_modules/patchright-core/lib/tools/cli-client/minimist.js +128 -0
- package/node_modules/patchright-core/lib/tools/cli-client/output.js +352 -0
- package/node_modules/patchright-core/lib/tools/cli-client/program.js +422 -0
- package/node_modules/patchright-core/lib/tools/cli-client/registry.js +180 -0
- package/node_modules/patchright-core/lib/tools/cli-client/session.js +261 -0
- package/node_modules/patchright-core/lib/tools/dashboard/appIcon.png +0 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/SKILL.md +493 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/element-attributes.md +23 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/pr-attachments.md +60 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/request-mocking.md +87 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/running-code.md +245 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/session-management.md +227 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/storage-state.md +275 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/test-generation.md +433 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/tracing.md +139 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-cli/references/video-recording.md +216 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-component-testing/SKILL.md +136 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-component-testing/references/gallery-spec.md +144 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-component-testing/references/migration.md +89 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-component-testing/references/react.md +69 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-component-testing/references/typing.md +173 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-component-testing/references/vue.md +77 -0
- package/node_modules/patchright-core/lib/tools/skills/playwright-trace/SKILL.md +174 -0
- package/node_modules/patchright-core/lib/tools/utils/extension.js +112 -0
- package/node_modules/patchright-core/lib/tools/utils/socketConnection.js +108 -0
- package/node_modules/patchright-core/lib/utilsBundle.js +86225 -0
- package/node_modules/patchright-core/lib/utilsBundle.js.LICENSE +1890 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/codeMirrorModule--QdMvsKi.css +1 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/codeMirrorModule-CQ8RZGBm.js +32 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/index-AwgwcYie.css +1 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/index-hRvO4yU2.js +12 -0
- package/node_modules/patchright-core/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
- package/node_modules/patchright-core/lib/vite/dashboard/index.html +29 -0
- package/node_modules/patchright-core/lib/vite/dashboard/playwright-logo.svg +24 -0
- package/node_modules/patchright-core/lib/vite/htmlReport/index.html +16 -0
- package/node_modules/patchright-core/lib/vite/htmlReport/report.css +2 -0
- package/node_modules/patchright-core/lib/vite/htmlReport/report.js +32 -0
- package/node_modules/patchright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +1 -0
- package/node_modules/patchright-core/lib/vite/recorder/assets/codeMirrorModule-GBnsXk4c.js +32 -0
- package/node_modules/patchright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/node_modules/patchright-core/lib/vite/recorder/assets/index-BZpYJZ-P.css +1 -0
- package/node_modules/patchright-core/lib/vite/recorder/assets/index-CVDOfo-j.js +129 -0
- package/node_modules/patchright-core/lib/vite/recorder/index.html +29 -0
- package/node_modules/patchright-core/lib/vite/recorder/playwright-logo.svg +9 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/assets/codeMirrorModule-G79327TW.js +32 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/assets/defaultSettingsView-D9EV0iaS.js +184 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +1 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/assets/xtermModule-Al_u-Nk5.js +7 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +1 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/defaultSettingsView.C8BeHuxd.css +1 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/index.B_TqY17P.css +1 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/index.CMB2-c8e.js +1 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/index.html +44 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +1 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/snapshot.html +10 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/sw.bundle.js +4 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/uiMode.C3yLoy2G.js +5 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/uiMode.CyMfwkXJ.css +1 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/uiMode.html +18 -0
- package/node_modules/patchright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +1 -0
- package/node_modules/patchright-core/lib/webp_codec.LICENSE +173 -0
- package/node_modules/patchright-core/lib/webp_codec.wasm +0 -0
- package/node_modules/patchright-core/lib/xdg-open +1267 -0
- package/node_modules/patchright-core/package.json +34 -0
- package/node_modules/patchright-core/types/protocol.d.ts +24776 -0
- package/node_modules/patchright-core/types/structs.d.ts +52 -0
- package/node_modules/patchright-core/types/types.d.ts +27167 -0
- package/node_modules/playwright/.bun-tag-91d746a6045e143f +0 -0
- package/node_modules/playwright/README.md +300 -0
- package/node_modules/playwright/ThirdPartyNotices.txt +14 -0
- package/node_modules/playwright/cli.js +19 -0
- package/node_modules/playwright/index.d.ts +17 -0
- package/node_modules/playwright/index.js +17 -0
- package/node_modules/playwright/index.mjs +18 -0
- package/node_modules/playwright/lib/agents/agentParser.js +89 -0
- package/node_modules/playwright/lib/agents/copilot-setup-steps.yml +34 -0
- package/node_modules/playwright/lib/agents/generateAgents.js +395 -0
- package/node_modules/playwright/lib/agents/playwright-test-coverage.prompt.md +31 -0
- package/node_modules/playwright/lib/agents/playwright-test-generate.prompt.md +8 -0
- package/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +88 -0
- package/node_modules/playwright/lib/agents/playwright-test-heal.prompt.md +6 -0
- package/node_modules/playwright/lib/agents/playwright-test-healer.agent.md +56 -0
- package/node_modules/playwright/lib/agents/playwright-test-plan.prompt.md +9 -0
- package/node_modules/playwright/lib/agents/playwright-test-planner.agent.md +74 -0
- package/node_modules/playwright/lib/cli/reportActions.js +78 -0
- package/node_modules/playwright/lib/cli/testActions.js +217 -0
- package/node_modules/playwright/lib/common/index.js +2937 -0
- package/node_modules/playwright/lib/common/index.js.txt +33 -0
- package/node_modules/playwright/lib/errorContext.js +129 -0
- package/node_modules/playwright/lib/globals.js +58 -0
- package/node_modules/playwright/lib/index.js +827 -0
- package/node_modules/playwright/lib/isomorphic.js +260 -0
- package/node_modules/playwright/lib/isomorphic.js.txt +9 -0
- package/node_modules/playwright/lib/loader/loaderProcessEntry.js +34 -0
- package/node_modules/playwright/lib/loader/loaderProcessEntry.js.txt +9 -0
- package/node_modules/playwright/lib/matchers/expect.js +13496 -0
- package/node_modules/playwright/lib/matchers/expect.js.LICENSE +640 -0
- package/node_modules/playwright/lib/matchers/expect.js.txt +67 -0
- package/node_modules/playwright/lib/mcp/test/browserBackend.js +135 -0
- package/node_modules/playwright/lib/mcp/test/generatorTools.js +122 -0
- package/node_modules/playwright/lib/mcp/test/plannerTools.js +150 -0
- package/node_modules/playwright/lib/mcp/test/seed.js +82 -0
- package/node_modules/playwright/lib/mcp/test/streams.js +44 -0
- package/node_modules/playwright/lib/mcp/test/testBackend.js +99 -0
- package/node_modules/playwright/lib/mcp/test/testContext.js +306 -0
- package/node_modules/playwright/lib/mcp/test/testTool.js +30 -0
- package/node_modules/playwright/lib/mcp/test/testTools.js +98 -0
- package/node_modules/playwright/lib/package.js +47 -0
- package/node_modules/playwright/lib/program.js +242 -0
- package/node_modules/playwright/lib/runner/index.js +8721 -0
- package/node_modules/playwright/lib/runner/index.js.txt +62 -0
- package/node_modules/playwright/lib/transform/babelBundle.js +72490 -0
- package/node_modules/playwright/lib/transform/babelBundle.js.LICENSE +2384 -0
- package/node_modules/playwright/lib/transform/babelBundle.js.txt +328 -0
- package/node_modules/playwright/lib/transform/esmLoader.js +8213 -0
- package/node_modules/playwright/lib/transform/esmLoader.js.LICENSE +355 -0
- package/node_modules/playwright/lib/transform/esmLoader.js.txt +60 -0
- package/node_modules/playwright/lib/util.js +373 -0
- package/node_modules/playwright/lib/worker/workerProcessEntry.js +1860 -0
- package/node_modules/playwright/lib/worker/workerProcessEntry.js.txt +19 -0
- package/node_modules/playwright/package.json +50 -0
- package/node_modules/playwright/test.d.ts +18 -0
- package/node_modules/playwright/test.js +24 -0
- package/node_modules/playwright/test.mjs +35 -0
- package/node_modules/playwright/types/test.d.ts +11191 -0
- package/node_modules/playwright/types/testReporter.d.ts +950 -0
- package/package.json +21 -12
- package/dist/actions/desktopActions.d.ts +0 -58
- package/dist/actions/desktopActions.js +0 -155
- package/dist/actions/index.d.ts +0 -27
- package/dist/actions/index.js +0 -11
- package/dist/actions/memoryActions.d.ts +0 -9
- package/dist/actions/memoryActions.js +0 -34
- package/dist/actions/taskActions.d.ts +0 -8
- package/dist/actions/taskActions.js +0 -27
- package/dist/actions/types.d.ts +0 -35
- package/dist/actions/types.js +0 -5
- package/dist/actions/util.d.ts +0 -21
- package/dist/actions/util.js +0 -280
- package/dist/actions/webActions.d.ts +0 -87
- package/dist/actions/webActions.js +0 -214
- package/dist/actions/webActions.test.d.ts +0 -1
- package/dist/actions/webActions.test.js +0 -43
- package/dist/agent/browserAgent.d.ts +0 -31
- package/dist/agent/browserAgent.js +0 -136
- package/dist/agent/errors.d.ts +0 -22
- package/dist/agent/errors.js +0 -97
- package/dist/agent/index.d.ts +0 -64
- package/dist/agent/index.js +0 -505
- package/dist/agent/narrator.d.ts +0 -4
- package/dist/agent/narrator.js +0 -63
- package/dist/agent/pause.test.d.ts +0 -1
- package/dist/agent/pause.test.js +0 -194
- package/dist/ai/baml_client/async_client.d.ts +0 -64
- package/dist/ai/baml_client/async_client.js +0 -284
- package/dist/ai/baml_client/async_request.d.ts +0 -39
- package/dist/ai/baml_client/async_request.js +0 -134
- package/dist/ai/baml_client/config.d.ts +0 -11
- package/dist/ai/baml_client/config.js +0 -20
- package/dist/ai/baml_client/globals.d.ts +0 -16
- package/dist/ai/baml_client/globals.js +0 -37
- package/dist/ai/baml_client/index.d.ts +0 -17
- package/dist/ai/baml_client/index.js +0 -42
- package/dist/ai/baml_client/inlinedbaml.d.ts +0 -19
- package/dist/ai/baml_client/inlinedbaml.js +0 -31
- package/dist/ai/baml_client/parser.d.ts +0 -53
- package/dist/ai/baml_client/parser.js +0 -86
- package/dist/ai/baml_client/partial_types.d.ts +0 -61
- package/dist/ai/baml_client/partial_types.js +0 -10
- package/dist/ai/baml_client/sync_client.d.ts +0 -57
- package/dist/ai/baml_client/sync_client.js +0 -142
- package/dist/ai/baml_client/sync_request.d.ts +0 -37
- package/dist/ai/baml_client/sync_request.js +0 -134
- package/dist/ai/baml_client/tracing.d.ts +0 -16
- package/dist/ai/baml_client/tracing.js +0 -18
- package/dist/ai/baml_client/type_builder.d.ts +0 -40
- package/dist/ai/baml_client/type_builder.js +0 -120
- package/dist/ai/baml_client/types.d.ts +0 -69
- package/dist/ai/baml_client/types.js +0 -15
- package/dist/ai/baml_client/watchers.d.ts +0 -32
- package/dist/ai/baml_client/watchers.js +0 -50
- package/dist/ai/baseten.d.ts +0 -4
- package/dist/ai/baseten.js +0 -10
- package/dist/ai/claudeCode.d.ts +0 -1
- package/dist/ai/claudeCode.js +0 -186
- package/dist/ai/modelHarness.d.ts +0 -39
- package/dist/ai/modelHarness.js +0 -324
- package/dist/ai/modelResponseError.d.ts +0 -4
- package/dist/ai/modelResponseError.js +0 -8
- package/dist/ai/multiModelHarness.d.ts +0 -24
- package/dist/ai/multiModelHarness.js +0 -52
- package/dist/ai/plannerResponse.d.ts +0 -34
- package/dist/ai/plannerResponse.js +0 -96
- package/dist/ai/plannerResponse.test.d.ts +0 -1
- package/dist/ai/plannerResponse.test.js +0 -112
- package/dist/ai/structuredOutput.d.ts +0 -11
- package/dist/ai/structuredOutput.js +0 -94
- package/dist/ai/structuredOutput.test.d.ts +0 -1
- package/dist/ai/structuredOutput.test.js +0 -91
- package/dist/ai/types.d.ts +0 -119
- package/dist/ai/types.js +0 -5
- package/dist/ai/util.d.ts +0 -13
- package/dist/ai/util.js +0 -200
- package/dist/ai/util.test.d.ts +0 -1
- package/dist/ai/util.test.js +0 -95
- package/dist/cli.js +0 -3
- package/dist/common/actions.js +0 -14
- package/dist/common/events.d.ts +0 -17
- package/dist/common/events.js +0 -3
- package/dist/common/failure.d.ts +0 -68
- package/dist/common/failure.js +0 -1
- package/dist/common/index.d.ts +0 -3
- package/dist/common/index.js +0 -3
- package/dist/common/operation.d.ts +0 -31
- package/dist/common/operation.js +0 -102
- package/dist/common/operation.test.d.ts +0 -1
- package/dist/common/operation.test.js +0 -53
- package/dist/common/retry.d.ts +0 -16
- package/dist/common/retry.js +0 -35
- package/dist/common/util.d.ts +0 -23
- package/dist/common/util.js +0 -139
- package/dist/connectors/browserConnector.d.ts +0 -53
- package/dist/connectors/browserConnector.js +0 -290
- package/dist/connectors/desktopConnector.d.ts +0 -58
- package/dist/connectors/desktopConnector.js +0 -68
- package/dist/connectors/index.d.ts +0 -14
- package/dist/connectors/index.js +0 -2
- package/dist/index.js +0 -28
- package/dist/logger.d.ts +0 -3
- package/dist/logger.js +0 -15
- package/dist/memory/agentMemory.d.ts +0 -47
- package/dist/memory/agentMemory.js +0 -167
- package/dist/memory/agentMemory.test.d.ts +0 -1
- package/dist/memory/agentMemory.test.js +0 -150
- package/dist/memory/image.d.ts +0 -28
- package/dist/memory/image.js +0 -95
- package/dist/memory/image.test.d.ts +0 -1
- package/dist/memory/image.test.js +0 -46
- package/dist/memory/index.d.ts +0 -3
- package/dist/memory/index.js +0 -3
- package/dist/memory/masking.d.ts +0 -7
- package/dist/memory/masking.js +0 -141
- package/dist/memory/masking.test.d.ts +0 -1
- package/dist/memory/masking.test.js +0 -117
- package/dist/memory/notebook.d.ts +0 -58
- package/dist/memory/notebook.js +0 -75
- package/dist/memory/notebook.test.d.ts +0 -1
- package/dist/memory/notebook.test.js +0 -99
- package/dist/memory/observation.d.ts +0 -38
- package/dist/memory/observation.js +0 -79
- package/dist/memory/rendering/index.d.ts +0 -10
- package/dist/memory/rendering/index.js +0 -13
- package/dist/memory/rendering/renderJsonParts.d.ts +0 -3
- package/dist/memory/rendering/renderJsonParts.js +0 -115
- package/dist/memory/rendering/renderJsonParts.test.d.ts +0 -1
- package/dist/memory/rendering/renderJsonParts.test.js +0 -217
- package/dist/memory/rendering/renderXmlParts.d.ts +0 -7
- package/dist/memory/rendering/renderXmlParts.js +0 -127
- package/dist/memory/serde.d.ts +0 -20
- package/dist/memory/serde.js +0 -67
- package/dist/memory/serde.test.d.ts +0 -1
- package/dist/memory/serde.test.js +0 -64
- package/dist/memory/util.d.ts +0 -2
- package/dist/memory/util.js +0 -17
- package/dist/telemetry/events.d.ts +0 -9
- package/dist/telemetry/events.js +0 -80
- package/dist/telemetry/index.d.ts +0 -6
- package/dist/telemetry/index.js +0 -91
- package/dist/types.d.ts +0 -30
- package/dist/types.js +0 -1
- package/dist/util.d.ts +0 -1
- package/dist/util.js +0 -12
- package/dist/version.d.ts +0 -1
- package/dist/version.js +0 -3
- package/dist/web/browserProvider.d.ts +0 -24
- package/dist/web/browserProvider.js +0 -164
- package/dist/web/browserProvider.test.d.ts +0 -1
- package/dist/web/browserProvider.test.js +0 -44
- package/dist/web/harness.d.ts +0 -109
- package/dist/web/harness.js +0 -401
- package/dist/web/recovery.d.ts +0 -46
- package/dist/web/recovery.js +0 -137
- package/dist/web/recovery.test.d.ts +0 -1
- package/dist/web/recovery.test.js +0 -182
- package/dist/web/stability.d.ts +0 -57
- package/dist/web/stability.js +0 -323
- package/dist/web/tabs.d.ts +0 -58
- package/dist/web/tabs.js +0 -293
- package/dist/web/transformer.d.ts +0 -7
- package/dist/web/transformer.js +0 -41
- package/dist/web/types.d.ts +0 -37
- package/dist/web/types.js +0 -2
- package/dist/web/util.d.ts +0 -3
- package/dist/web/util.js +0 -81
- package/dist/web/visualizer/cursor.d.ts +0 -16
- package/dist/web/visualizer/cursor.js +0 -153
- package/dist/web/visualizer/index.d.ts +0 -22
- package/dist/web/visualizer/index.js +0 -47
- package/dist/web/visualizer/mouseEffects.d.ts +0 -18
- package/dist/web/visualizer/mouseEffects.js +0 -287
- package/dist/web/visualizer/typeEffects.d.ts +0 -10
- package/dist/web/visualizer/typeEffects.js +0 -190
- package/dist/web/zodReexport.test.d.ts +0 -1
- package/dist/web/zodReexport.test.js +0 -14
- /package/{dist/common/actions.d.ts → node_modules/patchright-core/.bun-tag-19f23bd68c84ec1f} +0 -0
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { Image } from "@/memory/image";
|
|
2
|
-
import { Image as BamlImage } from '@boundaryml/baml';
|
|
3
|
-
async function buildJsonPartsRecursive(data, partsList, indent, currentLevel = 0, isRoot = false) {
|
|
4
|
-
if (data instanceof Image) {
|
|
5
|
-
const bamlImg = await data.toBaml();
|
|
6
|
-
if (bamlImg) {
|
|
7
|
-
partsList.push(bamlImg);
|
|
8
|
-
}
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
if (data instanceof BamlImage) {
|
|
12
|
-
partsList.push(data);
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (data === null) {
|
|
16
|
-
partsList.push('null');
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
if (data === undefined) {
|
|
20
|
-
return; // Undefined values are omitted in JSON
|
|
21
|
-
}
|
|
22
|
-
if (typeof data === 'string') {
|
|
23
|
-
if (isRoot) {
|
|
24
|
-
partsList.push(data);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
partsList.push(JSON.stringify(data));
|
|
28
|
-
}
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
if (typeof data === 'number' || typeof data === 'boolean') {
|
|
32
|
-
partsList.push(String(data));
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
const newline = indent > 0 ? '\n' : '';
|
|
36
|
-
const spacing = indent > 0 ? ' '.repeat(currentLevel * indent) : '';
|
|
37
|
-
const nextSpacing = indent > 0 ? ' '.repeat((currentLevel + 1) * indent) : '';
|
|
38
|
-
if (Array.isArray(data)) {
|
|
39
|
-
partsList.push('[');
|
|
40
|
-
for (let index = 0; index < data.length; index++) {
|
|
41
|
-
const item = data[index];
|
|
42
|
-
if (item !== undefined) { // Skip undefined values in arrays
|
|
43
|
-
if (index > 0) {
|
|
44
|
-
partsList.push(',');
|
|
45
|
-
}
|
|
46
|
-
if (indent > 0) {
|
|
47
|
-
partsList.push(newline + nextSpacing);
|
|
48
|
-
}
|
|
49
|
-
else if (index > 0) {
|
|
50
|
-
partsList.push(' ');
|
|
51
|
-
}
|
|
52
|
-
await buildJsonPartsRecursive(item, partsList, indent, currentLevel + 1, false);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (data.length > 0 && indent > 0) {
|
|
56
|
-
partsList.push(newline + spacing);
|
|
57
|
-
}
|
|
58
|
-
partsList.push(']');
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (typeof data === 'object' && data !== null) {
|
|
62
|
-
partsList.push('{');
|
|
63
|
-
const entries = Object.entries(data).filter(([, val]) => val !== undefined);
|
|
64
|
-
for (let index = 0; index < entries.length; index++) {
|
|
65
|
-
const [key, value] = entries[index];
|
|
66
|
-
if (index > 0) {
|
|
67
|
-
partsList.push(',');
|
|
68
|
-
}
|
|
69
|
-
if (indent > 0) {
|
|
70
|
-
partsList.push(newline + nextSpacing);
|
|
71
|
-
}
|
|
72
|
-
else if (index > 0) {
|
|
73
|
-
partsList.push(' ');
|
|
74
|
-
}
|
|
75
|
-
// Add the key
|
|
76
|
-
partsList.push(JSON.stringify(key));
|
|
77
|
-
partsList.push(': ');
|
|
78
|
-
// Add the value
|
|
79
|
-
await buildJsonPartsRecursive(value, partsList, indent, currentLevel + 1, false);
|
|
80
|
-
}
|
|
81
|
-
if (entries.length > 0 && indent > 0) {
|
|
82
|
-
partsList.push(newline + spacing);
|
|
83
|
-
}
|
|
84
|
-
partsList.push('}');
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
throw new Error(`Object type not supported for JSON rendering: '${typeof data}'. Data: ${data}`);
|
|
88
|
-
}
|
|
89
|
-
export async function renderJsonParts(data, indent) {
|
|
90
|
-
const rawList = [];
|
|
91
|
-
await buildJsonPartsRecursive(data, rawList, indent, 0, true);
|
|
92
|
-
// Merge adjacent strings
|
|
93
|
-
if (rawList.length === 0) {
|
|
94
|
-
return [];
|
|
95
|
-
}
|
|
96
|
-
const mergedList = [];
|
|
97
|
-
let currentString = "";
|
|
98
|
-
for (const item of rawList) {
|
|
99
|
-
if (typeof item === 'string') {
|
|
100
|
-
currentString += item;
|
|
101
|
-
}
|
|
102
|
-
else { // It's a BamlImage
|
|
103
|
-
if (currentString.length > 0) {
|
|
104
|
-
mergedList.push(currentString);
|
|
105
|
-
}
|
|
106
|
-
currentString = ""; // Reset accumulator
|
|
107
|
-
mergedList.push(item); // Push the BamlImage
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// Add any trailing string
|
|
111
|
-
if (currentString.length > 0) {
|
|
112
|
-
mergedList.push(currentString);
|
|
113
|
-
}
|
|
114
|
-
return mergedList;
|
|
115
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test';
|
|
2
|
-
import { renderJsonParts } from './renderJsonParts';
|
|
3
|
-
import { Image } from '@/memory/image';
|
|
4
|
-
import sharp from 'sharp';
|
|
5
|
-
// Create a mock Image that will convert to BamlImage
|
|
6
|
-
class MockImage extends Image {
|
|
7
|
-
id;
|
|
8
|
-
constructor(id) {
|
|
9
|
-
super(sharp());
|
|
10
|
-
this.id = id;
|
|
11
|
-
}
|
|
12
|
-
async toBaml() {
|
|
13
|
-
// Return a mock BamlImage
|
|
14
|
-
return {
|
|
15
|
-
__mockBamlImage: true,
|
|
16
|
-
id: this.id
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
describe('renderJsonParts', () => {
|
|
21
|
-
test('renders primitive types correctly', async () => {
|
|
22
|
-
expect(await renderJsonParts('hello', 0)).toEqual(['hello']);
|
|
23
|
-
expect(await renderJsonParts(42, 0)).toEqual(['42']);
|
|
24
|
-
expect(await renderJsonParts(true, 0)).toEqual(['true']);
|
|
25
|
-
expect(await renderJsonParts(false, 0)).toEqual(['false']);
|
|
26
|
-
expect(await renderJsonParts(null, 0)).toEqual(['null']);
|
|
27
|
-
});
|
|
28
|
-
test('renders root-level strings without quotes', async () => {
|
|
29
|
-
expect(await renderJsonParts('CLICK THE UNICORN', 0)).toEqual(['CLICK THE UNICORN']);
|
|
30
|
-
expect(await renderJsonParts('Hello World', 0)).toEqual(['Hello World']);
|
|
31
|
-
expect(await renderJsonParts('{"already":"json"}', 0)).toEqual(['{"already":"json"}']);
|
|
32
|
-
});
|
|
33
|
-
test('properly quotes strings inside objects and arrays', async () => {
|
|
34
|
-
// Strings in objects should be quoted
|
|
35
|
-
expect(await renderJsonParts({ message: 'hello' }, 0)).toEqual(['{"message": "hello"}']);
|
|
36
|
-
expect(await renderJsonParts({ name: 'John', city: 'NYC' }, 0)).toEqual(['{"name": "John", "city": "NYC"}']);
|
|
37
|
-
// Strings in arrays should be quoted
|
|
38
|
-
expect(await renderJsonParts(['apple', 'banana'], 0)).toEqual(['["apple", "banana"]']);
|
|
39
|
-
expect(await renderJsonParts(['hello', 123, 'world'], 0)).toEqual(['["hello", 123, "world"]']);
|
|
40
|
-
// Nested structures
|
|
41
|
-
expect(await renderJsonParts({ items: ['a', 'b'], text: 'test' }, 0)).toEqual(['{"items": ["a", "b"], "text": "test"}']);
|
|
42
|
-
});
|
|
43
|
-
test('renders empty structures', async () => {
|
|
44
|
-
expect(await renderJsonParts([], 0)).toEqual(['[]']);
|
|
45
|
-
expect(await renderJsonParts({}, 0)).toEqual(['{}']);
|
|
46
|
-
});
|
|
47
|
-
test('renders simple arrays', async () => {
|
|
48
|
-
expect(await renderJsonParts([1, 2, 3], 0)).toEqual(['[1, 2, 3]']);
|
|
49
|
-
expect(await renderJsonParts(['a', 'b', 'c'], 0)).toEqual(['["a", "b", "c"]']);
|
|
50
|
-
expect(await renderJsonParts([true, false, null], 0)).toEqual(['[true, false, null]']);
|
|
51
|
-
});
|
|
52
|
-
test('renders simple objects', async () => {
|
|
53
|
-
expect(await renderJsonParts({ name: 'John', age: 30 }, 0)).toEqual(['{"name": "John", "age": 30}']);
|
|
54
|
-
expect(await renderJsonParts({ a: 1, b: true, c: null }, 0)).toEqual(['{"a": 1, "b": true, "c": null}']);
|
|
55
|
-
});
|
|
56
|
-
test('handles undefined values correctly', async () => {
|
|
57
|
-
// Undefined at root level returns empty array
|
|
58
|
-
expect(await renderJsonParts(undefined, 0)).toEqual([]);
|
|
59
|
-
// Undefined in arrays is skipped
|
|
60
|
-
expect(await renderJsonParts([1, undefined, 3], 0)).toEqual(['[1, 3]']);
|
|
61
|
-
// Undefined in objects is omitted
|
|
62
|
-
expect(await renderJsonParts({ a: 1, b: undefined, c: 3 }, 0)).toEqual(['{"a": 1, "c": 3}']);
|
|
63
|
-
});
|
|
64
|
-
test('renders nested structures', async () => {
|
|
65
|
-
const nested = {
|
|
66
|
-
user: {
|
|
67
|
-
name: 'Alice',
|
|
68
|
-
scores: [95, 87, 92],
|
|
69
|
-
active: true
|
|
70
|
-
},
|
|
71
|
-
metadata: {
|
|
72
|
-
created: '2024-01-01',
|
|
73
|
-
tags: ['important', 'verified']
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const result = await renderJsonParts(nested, 0);
|
|
77
|
-
expect(result).toEqual(['{"user": {"name": "Alice", "scores": [95, 87, 92], "active": true}, "metadata": {"created": "2024-01-01", "tags": ["important", "verified"]}}']);
|
|
78
|
-
});
|
|
79
|
-
test('splits JSON around BamlImage in object', async () => {
|
|
80
|
-
const mockImage = new MockImage('img1');
|
|
81
|
-
const data = {
|
|
82
|
-
title: 'Product',
|
|
83
|
-
image: mockImage,
|
|
84
|
-
price: 29.99
|
|
85
|
-
};
|
|
86
|
-
const result = await renderJsonParts(data, 0);
|
|
87
|
-
expect(result.length).toBe(3);
|
|
88
|
-
expect(result[0]).toBe('{"title": "Product", "image": ');
|
|
89
|
-
expect(result[1]).toHaveProperty('__mockBamlImage', true);
|
|
90
|
-
expect(result[2]).toBe(', "price": 29.99}');
|
|
91
|
-
});
|
|
92
|
-
test('splits JSON around multiple BamlImages in object', async () => {
|
|
93
|
-
const mockImage1 = new MockImage('img1');
|
|
94
|
-
const mockImage2 = new MockImage('img2');
|
|
95
|
-
const data = {
|
|
96
|
-
before: 'text',
|
|
97
|
-
image1: mockImage1,
|
|
98
|
-
middle: 'more text',
|
|
99
|
-
image2: mockImage2,
|
|
100
|
-
after: 'final'
|
|
101
|
-
};
|
|
102
|
-
const result = await renderJsonParts(data, 0);
|
|
103
|
-
expect(result.length).toBe(5);
|
|
104
|
-
expect(result[0]).toBe('{"before": "text", "image1": ');
|
|
105
|
-
expect(result[1]).toHaveProperty('__mockBamlImage', true);
|
|
106
|
-
expect(result[2]).toBe(', "middle": "more text", "image2": ');
|
|
107
|
-
expect(result[3]).toHaveProperty('__mockBamlImage', true);
|
|
108
|
-
expect(result[4]).toBe(', "after": "final"}');
|
|
109
|
-
});
|
|
110
|
-
test('splits JSON around BamlImage in array', async () => {
|
|
111
|
-
const mockImage = new MockImage('img1');
|
|
112
|
-
const data = ['start', mockImage, 'end'];
|
|
113
|
-
const result = await renderJsonParts(data, 0);
|
|
114
|
-
expect(result.length).toBe(3);
|
|
115
|
-
expect(result[0]).toBe('["start", ');
|
|
116
|
-
expect(result[1]).toHaveProperty('__mockBamlImage', true);
|
|
117
|
-
expect(result[2]).toBe(', "end"]');
|
|
118
|
-
});
|
|
119
|
-
test('handles array with only BamlImages', async () => {
|
|
120
|
-
const mockImage1 = new MockImage('img1');
|
|
121
|
-
const mockImage2 = new MockImage('img2');
|
|
122
|
-
const data = [mockImage1, mockImage2];
|
|
123
|
-
const result = await renderJsonParts(data, 0);
|
|
124
|
-
expect(result.length).toBe(5);
|
|
125
|
-
expect(result[0]).toBe('[');
|
|
126
|
-
expect(result[1]).toHaveProperty('__mockBamlImage', true);
|
|
127
|
-
expect(result[2]).toBe(', ');
|
|
128
|
-
expect(result[3]).toHaveProperty('__mockBamlImage', true);
|
|
129
|
-
expect(result[4]).toBe(']');
|
|
130
|
-
});
|
|
131
|
-
test('handles nested structures with images', async () => {
|
|
132
|
-
const mockImage = new MockImage('img1');
|
|
133
|
-
const data = {
|
|
134
|
-
user: {
|
|
135
|
-
name: 'Bob',
|
|
136
|
-
avatar: mockImage,
|
|
137
|
-
settings: {
|
|
138
|
-
theme: 'dark'
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
posts: [
|
|
142
|
-
{ id: 1, image: mockImage, text: 'Hello' }
|
|
143
|
-
]
|
|
144
|
-
};
|
|
145
|
-
const result = await renderJsonParts(data, 0);
|
|
146
|
-
// Should have multiple parts due to images
|
|
147
|
-
expect(result.length).toBeGreaterThan(1);
|
|
148
|
-
// First part should start with JSON
|
|
149
|
-
expect(result[0]).toMatch(/^{"user": /);
|
|
150
|
-
// Should contain the mock images
|
|
151
|
-
const imageParts = result.filter(part => part && typeof part === 'object' && '__mockBamlImage' in part);
|
|
152
|
-
expect(imageParts.length).toBe(2);
|
|
153
|
-
});
|
|
154
|
-
test('handles edge case with image as first array element', async () => {
|
|
155
|
-
const mockImage = new MockImage('img1');
|
|
156
|
-
const data = [mockImage, 'text'];
|
|
157
|
-
const result = await renderJsonParts(data, 0);
|
|
158
|
-
expect(result.length).toBe(3);
|
|
159
|
-
expect(result[0]).toBe('[');
|
|
160
|
-
expect(result[1]).toHaveProperty('__mockBamlImage', true);
|
|
161
|
-
expect(result[2]).toBe(', "text"]');
|
|
162
|
-
});
|
|
163
|
-
test('handles edge case with image as last array element', async () => {
|
|
164
|
-
const mockImage = new MockImage('img1');
|
|
165
|
-
const data = ['text', mockImage];
|
|
166
|
-
const result = await renderJsonParts(data, 0);
|
|
167
|
-
expect(result.length).toBe(3);
|
|
168
|
-
expect(result[0]).toBe('["text", ');
|
|
169
|
-
expect(result[1]).toHaveProperty('__mockBamlImage', true);
|
|
170
|
-
expect(result[2]).toBe(']');
|
|
171
|
-
});
|
|
172
|
-
test('properly escapes special characters in strings', async () => {
|
|
173
|
-
const data = {
|
|
174
|
-
quote: 'He said "Hello"',
|
|
175
|
-
newline: 'Line 1\nLine 2',
|
|
176
|
-
tab: 'Col1\tCol2',
|
|
177
|
-
backslash: 'C:\\Users\\Path'
|
|
178
|
-
};
|
|
179
|
-
const result = await renderJsonParts(data, 0);
|
|
180
|
-
expect(result[0]).toContain('\\"Hello\\"');
|
|
181
|
-
expect(result[0]).toContain('\\n');
|
|
182
|
-
expect(result[0]).toContain('\\t');
|
|
183
|
-
expect(result[0]).toContain('\\\\');
|
|
184
|
-
});
|
|
185
|
-
test('renders with proper indentation when indent is 2', async () => {
|
|
186
|
-
const data = {
|
|
187
|
-
name: 'John',
|
|
188
|
-
age: 30,
|
|
189
|
-
hobbies: ['reading', 'coding']
|
|
190
|
-
};
|
|
191
|
-
const result = await renderJsonParts(data, 2);
|
|
192
|
-
expect(result).toEqual(['{\n "name": "John",\n "age": 30,\n "hobbies": [\n "reading",\n "coding"\n ]\n}']);
|
|
193
|
-
});
|
|
194
|
-
test('renders with proper indentation when indent is 4', async () => {
|
|
195
|
-
const data = {
|
|
196
|
-
user: {
|
|
197
|
-
name: 'Alice',
|
|
198
|
-
active: true
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
const result = await renderJsonParts(data, 4);
|
|
202
|
-
expect(result).toEqual(['{\n "user": {\n "name": "Alice",\n "active": true\n }\n}']);
|
|
203
|
-
});
|
|
204
|
-
test('handles indentation with images', async () => {
|
|
205
|
-
const mockImage = new MockImage('img1');
|
|
206
|
-
const data = {
|
|
207
|
-
title: 'Product',
|
|
208
|
-
image: mockImage,
|
|
209
|
-
price: 29.99
|
|
210
|
-
};
|
|
211
|
-
const result = await renderJsonParts(data, 2);
|
|
212
|
-
expect(result.length).toBe(3);
|
|
213
|
-
expect(result[0]).toBe('{\n "title": "Product",\n "image": ');
|
|
214
|
-
expect(result[1]).toHaveProperty('__mockBamlImage', true);
|
|
215
|
-
expect(result[2]).toBe(',\n "price": 29.99\n}');
|
|
216
|
-
});
|
|
217
|
-
});
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Convert observations to form that can be passed as BAML context, rendered as a custom XML-like structure.
|
|
3
|
-
*/
|
|
4
|
-
import { Image as BamlImage } from '@boundaryml/baml';
|
|
5
|
-
import { RenderableContent } from '@/memory/observation';
|
|
6
|
-
export type MultiMediaContentPart = BamlImage | string;
|
|
7
|
-
export declare function renderXmlParts(data: RenderableContent): Promise<MultiMediaContentPart[]>;
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Convert observations to form that can be passed as BAML context, rendered as a custom XML-like structure.
|
|
3
|
-
*/
|
|
4
|
-
import { Image as BamlImage } from '@boundaryml/baml';
|
|
5
|
-
import { Image } from '@/memory/image';
|
|
6
|
-
//export type BamlRenderable = BamlImage | string;
|
|
7
|
-
// export type BamlRenderable = {
|
|
8
|
-
// role: ''
|
|
9
|
-
// content: (BamlImage | string)[]
|
|
10
|
-
// }
|
|
11
|
-
async function buildXmlPartsRecursive(data, indentLevel, partsList, isInsideList = false) {
|
|
12
|
-
const indent = ' '.repeat(indentLevel);
|
|
13
|
-
if (data instanceof Image) {
|
|
14
|
-
const bamlImg = await data.toBaml();
|
|
15
|
-
if (bamlImg) {
|
|
16
|
-
partsList.push(bamlImg);
|
|
17
|
-
}
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
if (data instanceof BamlImage) {
|
|
21
|
-
partsList.push(data);
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
if (typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean' || data === null) {
|
|
25
|
-
partsList.push(String(data)); // No XML escaping, direct string conversion
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (data === undefined) {
|
|
29
|
-
return; // Undefined values are omitted
|
|
30
|
-
}
|
|
31
|
-
if (Array.isArray(data)) {
|
|
32
|
-
// data.forEach(async (item, index) => {
|
|
33
|
-
// await buildXmlPartsRecursive(item, indentLevel, partsList, true);
|
|
34
|
-
// if (index < data.length - 1) {
|
|
35
|
-
// partsList.push("\n");
|
|
36
|
-
// }
|
|
37
|
-
// });
|
|
38
|
-
for (let index = 0; index < data.length; index++) {
|
|
39
|
-
await buildXmlPartsRecursive(data[index], indentLevel, partsList, true);
|
|
40
|
-
if (index < data.length - 1) {
|
|
41
|
-
partsList.push("\n");
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
if (typeof data === 'object' && data !== null) {
|
|
47
|
-
const objectEntries = Object.entries(data).filter(([, val]) => val !== undefined);
|
|
48
|
-
objectEntries.forEach(async ([key, value], entryIndex) => {
|
|
49
|
-
const tagName = key; // Use key directly as tag name
|
|
50
|
-
const currentValueParts = [];
|
|
51
|
-
await buildXmlPartsRecursive(value, indentLevel + 1, currentValueParts, false);
|
|
52
|
-
// Merge adjacent strings in currentValueParts for easier analysis
|
|
53
|
-
const mergedValueParts = [];
|
|
54
|
-
let currentStr = "";
|
|
55
|
-
for (const part of currentValueParts) {
|
|
56
|
-
if (typeof part === 'string') {
|
|
57
|
-
currentStr += part;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
if (currentStr)
|
|
61
|
-
mergedValueParts.push(currentStr);
|
|
62
|
-
currentStr = "";
|
|
63
|
-
mergedValueParts.push(part);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (currentStr)
|
|
67
|
-
mergedValueParts.push(currentStr);
|
|
68
|
-
// Apply styling rules
|
|
69
|
-
if (mergedValueParts.length === 1 && mergedValueParts[0] instanceof BamlImage) {
|
|
70
|
-
partsList.push(`${indent}<${tagName}>`);
|
|
71
|
-
partsList.push(mergedValueParts[0]); // The BamlImage
|
|
72
|
-
partsList.push(`</${tagName}>`);
|
|
73
|
-
}
|
|
74
|
-
else if (mergedValueParts.length === 1 && typeof mergedValueParts[0] === 'string') {
|
|
75
|
-
const contentStr = mergedValueParts[0];
|
|
76
|
-
if (contentStr.includes('\n')) {
|
|
77
|
-
partsList.push(`${indent}<${tagName}>\n${contentStr}\n${indent}</${tagName}>`);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
partsList.push(`${indent}<${tagName}>${contentStr}</${tagName}>`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
else { // Empty content or multiple parts (complex/nested)
|
|
84
|
-
partsList.push(`${indent}<${tagName}>\n`);
|
|
85
|
-
mergedValueParts.forEach((part, partIdx) => {
|
|
86
|
-
partsList.push(part);
|
|
87
|
-
if (partIdx < mergedValueParts.length - 1) {
|
|
88
|
-
partsList.push("\n");
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
partsList.push(`\n${indent}</${tagName}>`);
|
|
92
|
-
}
|
|
93
|
-
if (entryIndex < objectEntries.length - 1) {
|
|
94
|
-
partsList.push("\n"); // Newline between sibling XML elements
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
throw new Error(`Object type not supported for LLM context: ${typeof data}`);
|
|
100
|
-
}
|
|
101
|
-
export async function renderXmlParts(data) {
|
|
102
|
-
const rawList = [];
|
|
103
|
-
await buildXmlPartsRecursive(data, 0, rawList);
|
|
104
|
-
// Merge adjacent strings
|
|
105
|
-
if (rawList.length === 0) {
|
|
106
|
-
return [];
|
|
107
|
-
}
|
|
108
|
-
const mergedList = [];
|
|
109
|
-
let currentString = "";
|
|
110
|
-
for (const item of rawList) {
|
|
111
|
-
if (typeof item === 'string') {
|
|
112
|
-
currentString += item;
|
|
113
|
-
}
|
|
114
|
-
else { // It's a BamlImage
|
|
115
|
-
if (currentString.length > 0) {
|
|
116
|
-
mergedList.push(currentString);
|
|
117
|
-
}
|
|
118
|
-
currentString = ""; // Reset accumulator
|
|
119
|
-
mergedList.push(item); // Push the BamlImage
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
// Add any trailing string
|
|
123
|
-
if (currentString.length > 0) {
|
|
124
|
-
mergedList.push(currentString);
|
|
125
|
-
}
|
|
126
|
-
return mergedList;
|
|
127
|
-
}
|
package/dist/memory/serde.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { RenderableContent } from "./observation";
|
|
2
|
-
export type StoredMedia = {
|
|
3
|
-
type: 'media';
|
|
4
|
-
format: string;
|
|
5
|
-
storage: 'base64';
|
|
6
|
-
base64: string;
|
|
7
|
-
};
|
|
8
|
-
export interface StoredPrimitive {
|
|
9
|
-
type: 'primitive';
|
|
10
|
-
content: string | boolean | number;
|
|
11
|
-
}
|
|
12
|
-
type MultiMediaPrimitive = StoredMedia | StoredPrimitive | undefined | null;
|
|
13
|
-
type MultiMediaArray = Array<MultiMediaJson>;
|
|
14
|
-
export type MultiMediaObject = {
|
|
15
|
-
[key: string]: MultiMediaJson;
|
|
16
|
-
};
|
|
17
|
-
export type MultiMediaJson = MultiMediaPrimitive | MultiMediaArray | MultiMediaObject;
|
|
18
|
-
export declare function observableDataToJson(data: RenderableContent): Promise<MultiMediaJson>;
|
|
19
|
-
export declare function jsonToObservableData(data: MultiMediaJson): Promise<RenderableContent>;
|
|
20
|
-
export {};
|
package/dist/memory/serde.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Image } from './image';
|
|
2
|
-
export async function observableDataToJson(data) {
|
|
3
|
-
if (data instanceof Image) {
|
|
4
|
-
return await data.toJson(); //return imageToJson(data);
|
|
5
|
-
}
|
|
6
|
-
if (typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean') {
|
|
7
|
-
return { type: "primitive", content: data };
|
|
8
|
-
}
|
|
9
|
-
if (data === undefined) {
|
|
10
|
-
return undefined; // JSON.stringify will omit keys with this value or handle standalone undefined
|
|
11
|
-
}
|
|
12
|
-
if (data === null) {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
if (Array.isArray(data)) {
|
|
16
|
-
// Filter out undefined items first, then map and process the rest.
|
|
17
|
-
return Promise.all(data
|
|
18
|
-
.filter(item => item !== undefined)
|
|
19
|
-
.map(item => observableDataToJson(item)));
|
|
20
|
-
}
|
|
21
|
-
if (typeof data === 'object') { // Known not to be null or array here
|
|
22
|
-
const entries = await Promise.all(Object.entries(data).map(async ([key, value]) => [key, await observableDataToJson(value)]));
|
|
23
|
-
// fromEntries preserves own keys such as __proto__ as data properties.
|
|
24
|
-
return Object.fromEntries(entries.filter(([, value]) => value !== undefined));
|
|
25
|
-
}
|
|
26
|
-
// Fallback for any unexpected data types not covered by ObservableData.
|
|
27
|
-
// Returning undefined is consistent with how unrepresentable values are handled.
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
// TODO: Implement deserialization, and actually leverage serde for logging stuff
|
|
31
|
-
export async function jsonToObservableData(data) {
|
|
32
|
-
// Handle null and undefined primitives
|
|
33
|
-
if (data === null || data === undefined) {
|
|
34
|
-
return data;
|
|
35
|
-
}
|
|
36
|
-
// Handle arrays by recursively converting each item
|
|
37
|
-
if (Array.isArray(data)) {
|
|
38
|
-
return Promise.all(data.map(item => jsonToObservableData(item)));
|
|
39
|
-
}
|
|
40
|
-
// Handle objects, which can be StoredMedia, StoredPrimitive, or a generic object
|
|
41
|
-
if (typeof data === 'object') {
|
|
42
|
-
// Check for our special typed objects
|
|
43
|
-
if ('type' in data && typeof data.type === 'string') {
|
|
44
|
-
switch (data.type) {
|
|
45
|
-
case 'media':
|
|
46
|
-
// Cast the object to StoredMedia and use the static `fromBase64` method.
|
|
47
|
-
const media = data;
|
|
48
|
-
if (media.storage === 'base64') {
|
|
49
|
-
return Image.fromBase64(media.base64);
|
|
50
|
-
}
|
|
51
|
-
throw new Error(`Unsupported media storage type: ${media.storage}`);
|
|
52
|
-
case 'primitive':
|
|
53
|
-
// Unwrap the primitive value from its container object.
|
|
54
|
-
return data.content;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// Handle generic observable data object by recursively converting each property's value
|
|
58
|
-
const keys = Object.keys(data);
|
|
59
|
-
// Process all values concurrently for better performance
|
|
60
|
-
const values = await Promise.all(keys.map(key => jsonToObservableData(data[key])));
|
|
61
|
-
return Object.fromEntries(keys.map((key, index) => [key, values[index]]));
|
|
62
|
-
}
|
|
63
|
-
// According to the MultiMediaJson type definition, raw primitives (string, number, boolean)
|
|
64
|
-
// are not valid at the top level and should be wrapped in a StoredPrimitive object.
|
|
65
|
-
// Throw an error if we encounter them, as the input is malformed.
|
|
66
|
-
throw new Error(`Invalid MultiMediaJson format: Unexpected primitive value '${data}'.`);
|
|
67
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { expect, test } from 'bun:test';
|
|
2
|
-
import sharp from 'sharp';
|
|
3
|
-
import { AgentMemory } from './agentMemory';
|
|
4
|
-
import { Image } from './image';
|
|
5
|
-
import { maskObservations } from './masking';
|
|
6
|
-
import { Observation } from './observation';
|
|
7
|
-
import { jsonToObservableData, observableDataToJson } from './serde';
|
|
8
|
-
const roundTrip = async (value) => jsonToObservableData(JSON.parse(JSON.stringify(await observableDataToJson(value))));
|
|
9
|
-
test('nested objects, arrays, and falsy values survive an actual JSON round trip', async () => {
|
|
10
|
-
const value = { count: 17, empty: '', nested: { label: 'fixture', values: [true, false, 0, null, { n: -2 }] } };
|
|
11
|
-
expect(await roundTrip(value)).toEqual(value);
|
|
12
|
-
expect(await roundTrip([value, 'text', 0, false, null])).toEqual([value, 'text', 0, false, null]);
|
|
13
|
-
});
|
|
14
|
-
test('undefined entries are omitted without losing null or empty values', async () => {
|
|
15
|
-
expect(await roundTrip({ missing: undefined, empty: {}, nested: { absent: undefined, present: null }, values: [undefined, '', null] }))
|
|
16
|
-
.toEqual({ empty: {}, nested: { present: null }, values: ['', null] });
|
|
17
|
-
expect(await observableDataToJson(undefined)).toBeUndefined();
|
|
18
|
-
expect(await jsonToObservableData(undefined)).toBeUndefined();
|
|
19
|
-
});
|
|
20
|
-
test('arbitrary own property names survive without changing object prototypes', async () => {
|
|
21
|
-
const value = JSON.parse('{"__proto__":{"fixture":true},"constructor":{"prototype":{"n":2}},"a/b~c":false}');
|
|
22
|
-
const saved = await observableDataToJson(value);
|
|
23
|
-
const loaded = await roundTrip(value);
|
|
24
|
-
for (const object of [saved, loaded]) {
|
|
25
|
-
if (!object || typeof object !== 'object')
|
|
26
|
-
throw new Error('Expected a saved/restored object');
|
|
27
|
-
expect(Object.hasOwn(object, '__proto__')).toBe(true);
|
|
28
|
-
expect(Object.getPrototypeOf(object)).toBe(Object.prototype);
|
|
29
|
-
}
|
|
30
|
-
expect(loaded).toEqual(value);
|
|
31
|
-
expect(Object.hasOwn(Object.prototype, 'fixture')).toBe(false);
|
|
32
|
-
});
|
|
33
|
-
test('nested media is serialized before JSON encoding and restored as an Image', async () => {
|
|
34
|
-
const screenshot = new Image(sharp({ create: { width: 2, height: 3, channels: 3, background: '#123456' } }).png());
|
|
35
|
-
const value = { nested: { screenshot }, rows: [screenshot, { label: 'image fixture' }] };
|
|
36
|
-
const saved = (await observableDataToJson(value));
|
|
37
|
-
const loaded = await roundTrip(value);
|
|
38
|
-
expect(loaded.nested.screenshot).toBeInstanceOf(Image);
|
|
39
|
-
expect(await loaded.nested.screenshot.getDimensions()).toEqual({ width: 2, height: 3 });
|
|
40
|
-
expect(await observableDataToJson(loaded)).toEqual(saved);
|
|
41
|
-
});
|
|
42
|
-
test('memory checkpoints retain structured observations and their metadata', async () => {
|
|
43
|
-
const memory = new AgentMemory();
|
|
44
|
-
memory.recordObservation(new Observation('connector:fixture', 'user', { a: [{ b: 4 }] }, { type: 'state', dedupe: true }, 123));
|
|
45
|
-
const saved = JSON.parse(JSON.stringify(await memory.toJSON()));
|
|
46
|
-
const restored = new AgentMemory();
|
|
47
|
-
await restored.loadJSON(saved);
|
|
48
|
-
expect(await restored.toJSON()).toEqual(saved);
|
|
49
|
-
expect((await restored.toJSON()).observations[0].data).toEqual({ a: [{ b: { type: 'primitive', content: 4 } }] });
|
|
50
|
-
});
|
|
51
|
-
test('deduplication distinguishes different structured observation values', async () => {
|
|
52
|
-
const observations = [1, 1, 2].map(value => Observation.fromConnector('fixture', { nested: { value } }, { type: 'state', dedupe: true }));
|
|
53
|
-
expect(await observations[0].equals(observations[1])).toBe(true);
|
|
54
|
-
expect(await observations[1].equals(observations[2])).toBe(false);
|
|
55
|
-
expect(await maskObservations(observations)).toEqual([false, true, true]);
|
|
56
|
-
});
|
|
57
|
-
test('varied synthetic object keys and nested values round-trip independently of task content', async () => {
|
|
58
|
-
let seed = 0xa173;
|
|
59
|
-
for (let i = 0; i < 64; i++) {
|
|
60
|
-
seed = (Math.imul(seed, 1664525) + 1013904223) >>> 0;
|
|
61
|
-
const value = { [`field_${seed.toString(36)}_é`]: [{ count: seed, enabled: !!(seed % 2), nested: { value: `value-${i}` } }] };
|
|
62
|
-
expect(await roundTrip(value)).toEqual(value);
|
|
63
|
-
}
|
|
64
|
-
});
|
package/dist/memory/util.d.ts
DELETED
package/dist/memory/util.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export function mergeMessages(messages) {
|
|
2
|
-
if (messages.length === 0)
|
|
3
|
-
return [];
|
|
4
|
-
const merged = [];
|
|
5
|
-
let current = messages[0];
|
|
6
|
-
for (let i = 1; i < messages.length; i++) {
|
|
7
|
-
if (messages[i].role === current.role) {
|
|
8
|
-
current.content.push(...messages[i].content);
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
merged.push(current);
|
|
12
|
-
current = messages[i];
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
merged.push(current);
|
|
16
|
-
return merged;
|
|
17
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Agent } from "@/agent";
|
|
2
|
-
import { LLMClientIdentifier } from "@/ai/types";
|
|
3
|
-
export type UsageReport = {
|
|
4
|
-
llm: LLMClientIdentifier;
|
|
5
|
-
inputTokens: number;
|
|
6
|
-
outputTokens: number;
|
|
7
|
-
numCalls: number;
|
|
8
|
-
}[];
|
|
9
|
-
export declare function telemetrifyAgent(agent: Agent): void;
|