@geminilight/mindos-windows-arm64 1.0.6 → 1.0.8
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/_standalone/.mindos-build-version +1 -1
- package/_standalone/__next/BUILD_ID +1 -1
- package/_standalone/__next/app-path-routes-manifest.json +24 -24
- package/_standalone/__next/build-manifest.json +3 -3
- package/_standalone/__next/prerender-manifest.json +3 -3
- package/_standalone/__next/react-loadable-manifest.json +48 -7
- package/_standalone/__next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/_global-error.html +2 -2
- package/_standalone/__next/server/app/_global-error.rsc +1 -1
- package/_standalone/__next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/__next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/__next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/__next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/__next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/__next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/__next/server/app/_not-found/page.js +1 -1
- package/_standalone/__next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/agents/[agentKey]/page.js +2 -2
- package/_standalone/__next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/agents/page.js +2 -2
- package/_standalone/__next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/ask/route.js +2 -2
- package/_standalone/__next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/connect/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/embedding/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/extract-docx/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/im/activity/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/im/feishu/long-connection/event/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/im/feishu/long-connection/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/im/webhook/feishu/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/im/webhook-status/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/lint/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/obsidian/compat-report/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/obsidian/import/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/obsidian-plugins/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/search/prewarm/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/capture/history/page.js +1 -1
- package/_standalone/__next/server/app/capture/history/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/capture/history/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/capture/page.js +1 -1
- package/_standalone/__next/server/app/capture/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/capture/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/changelog/page.js +1 -1
- package/_standalone/__next/server/app/changelog/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/changelog/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/changes/page.js +1 -1
- package/_standalone/__next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/echo/[segment]/page.js +4 -4
- package/_standalone/__next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/echo/page.js +1 -1
- package/_standalone/__next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/explore/page.js +3 -3
- package/_standalone/__next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/help/page.js +2 -2
- package/_standalone/__next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/inbox/history/page.js +1 -1
- package/_standalone/__next/server/app/inbox/history/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/login/page.js +1 -1
- package/_standalone/__next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/page.js +1 -1
- package/_standalone/__next/server/app/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/settings/page.js +8 -3
- package/_standalone/__next/server/app/settings/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/setup/page.js +1 -1
- package/_standalone/__next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/todo/page.js +1 -1
- package/_standalone/__next/server/app/todo/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/todo/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/trash/page.js +2 -2
- package/_standalone/__next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/view/[...path]/page.js +3 -3
- package/_standalone/__next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app/wiki/page.js +1 -1
- package/_standalone/__next/server/app/wiki/page.js.nft.json +1 -1
- package/_standalone/__next/server/app/wiki/page_client-reference-manifest.js +1 -1
- package/_standalone/__next/server/app-paths-manifest.json +24 -24
- package/_standalone/__next/server/chunks/103.js +1 -1
- package/_standalone/__next/server/chunks/1976.js +1 -1
- package/_standalone/__next/server/chunks/6602.js +43 -66
- package/_standalone/__next/server/chunks/6646.js +16 -0
- package/_standalone/__next/server/chunks/8461.js +7 -7
- package/_standalone/__next/server/chunks/9868.js +2 -0
- package/_standalone/__next/server/chunks/{3219.js → 9969.js} +4 -4
- package/_standalone/__next/server/middleware-build-manifest.js +1 -1
- package/_standalone/__next/server/middleware-react-loadable-manifest.js +1 -1
- package/_standalone/__next/server/pages/500.html +2 -2
- package/_standalone/__next/server/server-reference-manifest.js +1 -1
- package/_standalone/__next/server/server-reference-manifest.json +1 -1
- package/_standalone/__next/static/chunks/{1430-c4ffa328888515c1.js → 1104-0822d9349a412b9b.js} +7 -2
- package/_standalone/__next/static/chunks/1655.0a559759973b42e9.js +1 -0
- package/_standalone/__next/static/chunks/{2073-3f913ebb13702b7e.js → 2073-fadffc82a27afdc7.js} +2 -2
- package/{static-web/_next/static/chunks/9216.d3339c27169b21bf.js → _standalone/__next/static/chunks/2245.ef71edb24c5232c2.js} +1 -1
- package/_standalone/__next/static/chunks/2258-2d3b5aac6a1fa92a.js +53 -0
- package/{static-web/_next/static/chunks/4937-4101fcdadacf46e3.js → _standalone/__next/static/chunks/2409-244f9b90dceb0c04.js} +1 -1
- package/_standalone/__next/static/chunks/3279-b49c25a4f2964b16.js +1 -0
- package/_standalone/__next/static/chunks/3807-115388f118106ca8.js +1 -0
- package/_standalone/__next/static/chunks/3966.ea75f9c5490955de.js +1 -0
- package/_standalone/__next/static/chunks/4010.48b219cb22dfa5d8.js +10 -0
- package/_standalone/__next/static/chunks/5026-7fed7ca22272c18f.js +1 -0
- package/_standalone/__next/static/chunks/5152-87e6ed56dfd7d17d.js +1 -0
- package/_standalone/__next/static/chunks/577.5e448c99068f1323.js +1 -0
- package/_standalone/__next/static/chunks/5913.a0a734f87b13f81a.js +1 -0
- package/_standalone/__next/static/chunks/596.9cbaf6ba90cb204f.js +7 -0
- package/_standalone/__next/static/chunks/6223-3fb90852221bda56.js +1 -0
- package/_standalone/__next/static/chunks/6343.582d063078c45d73.js +6 -0
- package/_standalone/__next/static/chunks/8174-50048777dc2469c0.js +1 -0
- package/_standalone/__next/static/chunks/{5913.3cee388e26959b62.js → 8294.cc9f9ff2f8b219ed.js} +1 -1
- package/_standalone/__next/static/chunks/8626-7da79d9ab2504eed.js +1 -0
- package/_standalone/__next/static/chunks/{8732.9002f42201b06fe8.js → 8732.87554c78e8825fac.js} +4 -4
- package/_standalone/__next/static/chunks/8922-3babcd35e18e9e4f.js +1 -0
- package/_standalone/__next/static/chunks/9440-eee639175695be7d.js +33 -0
- package/_standalone/__next/static/chunks/9479-b48d19e3588823c1.js +34 -0
- package/_standalone/__next/static/chunks/{9602.4e99e3525e5f062c.js → 9602.218427fc7b3d6b11.js} +1 -1
- package/_standalone/__next/static/chunks/app/agents/[agentKey]/page-ef111ea0a3368752.js +1 -0
- package/_standalone/__next/static/chunks/app/agents/page-aacead0f47cedb0d.js +1 -0
- package/_standalone/__next/static/chunks/app/layout-ed608bbf9585e78f.js +99 -0
- package/_standalone/__next/static/chunks/app/page-d22928276c36528c.js +1 -0
- package/_standalone/__next/static/chunks/app/settings/{page-c9f44b3447a41431.js → page-045afd8c0908f923.js} +1 -1
- package/{static-web/_next/static/chunks/app/setup/page-f5de08d0d588c778.js → _standalone/__next/static/chunks/app/setup/page-034a608f19d04653.js} +1 -1
- package/_standalone/__next/static/chunks/app/trash/page-251aaf5aac9d5a0b.js +1 -0
- package/_standalone/__next/static/chunks/app/view/[...path]/page-7e17c3d13fe2e275.js +12 -0
- package/_standalone/__next/static/chunks/webpack-1decda0633a8a874.js +1 -0
- package/_standalone/__next/static/css/5f000212c8b2e09a.css +1 -0
- package/_standalone/__node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@mariozechner/pi-coding-agent/node_modules/strip-ansi/node_modules/ansi-regex/index.js +14 -0
- package/_standalone/__node_modules/@mariozechner/pi-coding-agent/node_modules/strip-ansi/node_modules/ansi-regex/license +9 -0
- package/_standalone/__node_modules/@mariozechner/pi-coding-agent/node_modules/strip-ansi/node_modules/ansi-regex/package.json +61 -0
- package/_standalone/__node_modules/@smithy/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@smithy/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@smithy/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@smithy/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@smithy/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@smithy/core/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-cjs/index.js +20 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/dist-es/index.js +14 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/LICENSE +201 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-cjs/index.js +6 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/dist-es/index.js +2 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer/package.json +61 -0
- package/_standalone/__node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from/package.json +62 -0
- package/_standalone/__node_modules/bignumber.js/doc/API.html +2249 -0
- package/_standalone/__node_modules/entities/LICENSE +11 -0
- package/_standalone/__node_modules/entities/dist/decode-codepoint.js +46 -0
- package/_standalone/__node_modules/entities/dist/decode.js +544 -0
- package/_standalone/__node_modules/entities/dist/encode.js +90 -0
- package/_standalone/__node_modules/entities/dist/escape.js +132 -0
- package/_standalone/__node_modules/entities/dist/generated/decode-data-html.js +5 -0
- package/_standalone/__node_modules/entities/dist/generated/decode-data-xml.js +5 -0
- package/_standalone/__node_modules/entities/dist/generated/encode-html.js +12 -0
- package/_standalone/__node_modules/entities/dist/index.js +91 -0
- package/_standalone/__node_modules/entities/dist/internal/bin-trie-flags.js +18 -0
- package/_standalone/__node_modules/entities/dist/internal/decode-shared.js +17 -0
- package/_standalone/__node_modules/entities/dist/internal/encode-shared.js +93 -0
- package/_standalone/__node_modules/entities/package.json +83 -0
- package/_standalone/__node_modules/entities/src/decode-codepoint.ts +50 -0
- package/_standalone/__node_modules/entities/src/decode.ts +671 -0
- package/_standalone/__node_modules/entities/src/encode.ts +95 -0
- package/_standalone/__node_modules/entities/src/escape.ts +160 -0
- package/_standalone/__node_modules/entities/src/generated/decode-data-html.ts +7 -0
- package/_standalone/__node_modules/entities/src/generated/decode-data-xml.ts +7 -0
- package/_standalone/__node_modules/entities/src/generated/encode-html.ts +18 -0
- package/_standalone/__node_modules/entities/src/index.ts +162 -0
- package/_standalone/__node_modules/entities/src/internal/bin-trie-flags.ts +16 -0
- package/_standalone/__node_modules/entities/src/internal/decode-shared.ts +18 -0
- package/_standalone/__node_modules/entities/src/internal/encode-shared.ts +123 -0
- package/_standalone/__node_modules/has-flag/index.js +8 -0
- package/_standalone/__node_modules/has-flag/license +9 -0
- package/_standalone/__node_modules/has-flag/package.json +46 -0
- package/_standalone/__node_modules/koffi/doc/benchmarks.md +126 -0
- package/_standalone/__node_modules/koffi/doc/callbacks.md +210 -0
- package/_standalone/__node_modules/koffi/doc/contribute.md +148 -0
- package/_standalone/__node_modules/koffi/doc/functions.md +250 -0
- package/_standalone/__node_modules/koffi/doc/index.md +61 -0
- package/_standalone/__node_modules/koffi/doc/input.md +471 -0
- package/_standalone/__node_modules/koffi/doc/migration.md +159 -0
- package/_standalone/__node_modules/koffi/doc/misc.md +180 -0
- package/_standalone/__node_modules/koffi/doc/output.md +305 -0
- package/_standalone/__node_modules/koffi/doc/packaging.md +88 -0
- package/_standalone/__node_modules/koffi/doc/platforms.md +36 -0
- package/_standalone/__node_modules/koffi/doc/pointers.md +328 -0
- package/_standalone/__node_modules/koffi/doc/start.md +118 -0
- package/_standalone/__node_modules/koffi/doc/unions.md +186 -0
- package/_standalone/__node_modules/koffi/doc/variables.md +102 -0
- package/_standalone/__node_modules/supports-color/browser.js +5 -0
- package/_standalone/__node_modules/supports-color/index.js +135 -0
- package/_standalone/__node_modules/supports-color/license +9 -0
- package/_standalone/__node_modules/supports-color/package.json +53 -0
- package/_standalone/__node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/_standalone/__node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/_standalone/__node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/_standalone/__node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/_standalone/__node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/_standalone/__node_modules/yaml/dist/doc/Document.js +337 -0
- package/_standalone/__node_modules/yaml/dist/doc/anchors.js +76 -0
- package/_standalone/__node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/_standalone/__node_modules/yaml/dist/doc/createNode.js +90 -0
- package/_standalone/__node_modules/yaml/dist/doc/directives.js +178 -0
- package/_standalone/public/agent-icons/claude.svg +1 -0
- package/_standalone/public/agent-icons/cursor.svg +1 -0
- package/_standalone/public/agent-icons/github-copilot.svg +1 -0
- package/_standalone/public/agent-icons/google.svg +1 -0
- package/_standalone/public/agent-icons/openai.svg +1 -0
- package/_standalone/public/agent-icons/windsurf.svg +1 -0
- package/bin/lib/stop.js +45 -0
- package/bin/lib/sync.js +32 -19
- package/dist/server/handlers/file.js +5 -2
- package/dist/server/handlers/file.js.map +1 -1
- package/dist/server/handlers/mcp-restart.d.ts +2 -0
- package/dist/server/handlers/mcp-restart.d.ts.map +1 -1
- package/dist/server/handlers/mcp-restart.js +45 -2
- package/dist/server/handlers/mcp-restart.js.map +1 -1
- package/dist/server/handlers/skills.d.ts.map +1 -1
- package/dist/server/handlers/skills.js +17 -3
- package/dist/server/handlers/skills.js.map +1 -1
- package/dist/server/handlers/sync.d.ts.map +1 -1
- package/dist/server/handlers/sync.js +28 -10
- package/dist/server/handlers/sync.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/runtime.js +20 -21
- package/dist/server/runtime.js.map +1 -1
- package/package.json +1 -1
- package/runtime-manifest.json +1 -1
- package/scripts/build-bun-binary.mjs +139 -6
- package/scripts/prepare-standalone.mjs +0 -1
- package/scripts/prepare-static-web.mjs +52 -4
- package/scripts/release.sh +1 -1
- package/scripts/setup.js +115 -2
- package/scripts/verify-standalone.mjs +12 -0
- package/static-web/.mindos-build-version +1 -1
- package/static-web/_next/static/chunks/{1430-c4ffa328888515c1.js → 1104-0822d9349a412b9b.js} +7 -2
- package/static-web/_next/static/chunks/1655.0a559759973b42e9.js +1 -0
- package/static-web/_next/static/chunks/{2073-3f913ebb13702b7e.js → 2073-fadffc82a27afdc7.js} +2 -2
- package/{_standalone/__next/static/chunks/9216.d3339c27169b21bf.js → static-web/_next/static/chunks/2245.ef71edb24c5232c2.js} +1 -1
- package/static-web/_next/static/chunks/2258-2d3b5aac6a1fa92a.js +53 -0
- package/{_standalone/__next/static/chunks/4937-4101fcdadacf46e3.js → static-web/_next/static/chunks/2409-244f9b90dceb0c04.js} +1 -1
- package/static-web/_next/static/chunks/3279-b49c25a4f2964b16.js +1 -0
- package/static-web/_next/static/chunks/3807-115388f118106ca8.js +1 -0
- package/static-web/_next/static/chunks/3966.ea75f9c5490955de.js +1 -0
- package/static-web/_next/static/chunks/4010.48b219cb22dfa5d8.js +10 -0
- package/static-web/_next/static/chunks/5026-7fed7ca22272c18f.js +1 -0
- package/static-web/_next/static/chunks/5152-87e6ed56dfd7d17d.js +1 -0
- package/static-web/_next/static/chunks/577.5e448c99068f1323.js +1 -0
- package/static-web/_next/static/chunks/5913.a0a734f87b13f81a.js +1 -0
- package/static-web/_next/static/chunks/596.9cbaf6ba90cb204f.js +7 -0
- package/static-web/_next/static/chunks/6223-3fb90852221bda56.js +1 -0
- package/static-web/_next/static/chunks/6343.582d063078c45d73.js +6 -0
- package/static-web/_next/static/chunks/8174-50048777dc2469c0.js +1 -0
- package/static-web/_next/static/chunks/{5913.3cee388e26959b62.js → 8294.cc9f9ff2f8b219ed.js} +1 -1
- package/static-web/_next/static/chunks/8626-7da79d9ab2504eed.js +1 -0
- package/static-web/_next/static/chunks/{8732.9002f42201b06fe8.js → 8732.87554c78e8825fac.js} +4 -4
- package/static-web/_next/static/chunks/8922-3babcd35e18e9e4f.js +1 -0
- package/static-web/_next/static/chunks/9440-eee639175695be7d.js +33 -0
- package/static-web/_next/static/chunks/9479-b48d19e3588823c1.js +34 -0
- package/static-web/_next/static/chunks/{9602.4e99e3525e5f062c.js → 9602.218427fc7b3d6b11.js} +1 -1
- package/static-web/_next/static/chunks/app/agents/[agentKey]/page-ef111ea0a3368752.js +1 -0
- package/static-web/_next/static/chunks/app/agents/page-aacead0f47cedb0d.js +1 -0
- package/static-web/_next/static/chunks/app/layout-ed608bbf9585e78f.js +99 -0
- package/static-web/_next/static/chunks/app/page-d22928276c36528c.js +1 -0
- package/static-web/_next/static/chunks/app/settings/{page-c9f44b3447a41431.js → page-045afd8c0908f923.js} +1 -1
- package/{_standalone/__next/static/chunks/app/setup/page-f5de08d0d588c778.js → static-web/_next/static/chunks/app/setup/page-034a608f19d04653.js} +1 -1
- package/static-web/_next/static/chunks/app/trash/page-251aaf5aac9d5a0b.js +1 -0
- package/static-web/_next/static/chunks/app/view/[...path]/page-7e17c3d13fe2e275.js +12 -0
- package/static-web/_next/static/chunks/webpack-1decda0633a8a874.js +1 -0
- package/static-web/_next/static/css/5f000212c8b2e09a.css +1 -0
- package/static-web/agent-icons/claude.svg +1 -0
- package/static-web/agent-icons/cursor.svg +1 -0
- package/static-web/agent-icons/github-copilot.svg +1 -0
- package/static-web/agent-icons/google.svg +1 -0
- package/static-web/agent-icons/openai.svg +1 -0
- package/static-web/agent-icons/windsurf.svg +1 -0
- package/static-web/help/index.html +5 -20
- package/static-web/index.html +8 -22
- package/static-web/setup/index.html +5 -20
- package/static-web/static-web-manifest.json +1 -1
- package/static-web/wiki/index.html +5 -20
- package/_standalone/__next/server/chunks/2037.js +0 -2
- package/_standalone/__next/server/chunks/9350.js +0 -11
- package/_standalone/__next/static/chunks/2288-4dcb8ad3ccbd651e.js +0 -1
- package/_standalone/__next/static/chunks/2461-a1073a0bd04c228a.js +0 -33
- package/_standalone/__next/static/chunks/3424-060f01a8983e438d.js +0 -1
- package/_standalone/__next/static/chunks/4172-4fc551f07f7d082f.js +0 -1
- package/_standalone/__next/static/chunks/4454-f582e17b76ccf1d1.js +0 -1
- package/_standalone/__next/static/chunks/47-41e1a06e6d389b69.js +0 -48
- package/_standalone/__next/static/chunks/5152-2db55438be7ecb94.js +0 -1
- package/_standalone/__next/static/chunks/5200-6c82e5ce54a95b4b.js +0 -6
- package/_standalone/__next/static/chunks/6274-f173cb227ad1ef21.js +0 -1
- package/_standalone/__next/static/chunks/6947.7e50e18da7dc4aef.js +0 -1
- package/_standalone/__next/static/chunks/725-3b648bf7929ff78d.js +0 -1
- package/_standalone/__next/static/chunks/9479-7b304601a56304cd.js +0 -32
- package/_standalone/__next/static/chunks/app/agents/[agentKey]/page-44c493b744d18249.js +0 -1
- package/_standalone/__next/static/chunks/app/agents/page-6591b482a193e657.js +0 -1
- package/_standalone/__next/static/chunks/app/layout-5966cd317bbed698.js +0 -114
- package/_standalone/__next/static/chunks/app/page-5c9489e28657376e.js +0 -1
- package/_standalone/__next/static/chunks/app/trash/page-d87207a63591ee16.js +0 -1
- package/_standalone/__next/static/chunks/app/view/[...path]/page-1898f4ae4ab28db0.js +0 -12
- package/_standalone/__next/static/chunks/webpack-75abef9cbb1ea912.js +0 -1
- package/_standalone/__next/static/css/0d2fd378b5449176.css +0 -1
- package/static-web/_next/static/chunks/2288-4dcb8ad3ccbd651e.js +0 -1
- package/static-web/_next/static/chunks/2461-a1073a0bd04c228a.js +0 -33
- package/static-web/_next/static/chunks/3424-060f01a8983e438d.js +0 -1
- package/static-web/_next/static/chunks/4172-4fc551f07f7d082f.js +0 -1
- package/static-web/_next/static/chunks/4454-f582e17b76ccf1d1.js +0 -1
- package/static-web/_next/static/chunks/47-41e1a06e6d389b69.js +0 -48
- package/static-web/_next/static/chunks/5152-2db55438be7ecb94.js +0 -1
- package/static-web/_next/static/chunks/5200-6c82e5ce54a95b4b.js +0 -6
- package/static-web/_next/static/chunks/6274-f173cb227ad1ef21.js +0 -1
- package/static-web/_next/static/chunks/6947.7e50e18da7dc4aef.js +0 -1
- package/static-web/_next/static/chunks/725-3b648bf7929ff78d.js +0 -1
- package/static-web/_next/static/chunks/9479-7b304601a56304cd.js +0 -32
- package/static-web/_next/static/chunks/app/agents/[agentKey]/page-44c493b744d18249.js +0 -1
- package/static-web/_next/static/chunks/app/agents/page-6591b482a193e657.js +0 -1
- package/static-web/_next/static/chunks/app/layout-5966cd317bbed698.js +0 -114
- package/static-web/_next/static/chunks/app/page-5c9489e28657376e.js +0 -1
- package/static-web/_next/static/chunks/app/trash/page-d87207a63591ee16.js +0 -1
- package/static-web/_next/static/chunks/app/view/[...path]/page-1898f4ae4ab28db0.js +0 -12
- package/static-web/_next/static/chunks/webpack-75abef9cbb1ea912.js +0 -1
- package/static-web/_next/static/css/0d2fd378b5449176.css +0 -1
- /package/_standalone/__next/static/{J9M4pgRyRHH7Ofbxuuklh → apol5mbXb7N_sqaKgpXN1}/_buildManifest.js +0 -0
- /package/_standalone/__next/static/{J9M4pgRyRHH7Ofbxuuklh → apol5mbXb7N_sqaKgpXN1}/_ssgManifest.js +0 -0
- /package/static-web/_next/static/{J9M4pgRyRHH7Ofbxuuklh → apol5mbXb7N_sqaKgpXN1}/_buildManifest.js +0 -0
- /package/static-web/_next/static/{J9M4pgRyRHH7Ofbxuuklh → apol5mbXb7N_sqaKgpXN1}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A node inside the encoding trie used by `encode.ts`.
|
|
3
|
+
*
|
|
4
|
+
* There are two physical shapes to minimize allocations and lookup cost:
|
|
5
|
+
*
|
|
6
|
+
* 1. Leaf node (string)
|
|
7
|
+
* - A plain string (already in the form `"&name;"`).
|
|
8
|
+
* - Represents a terminal match with no children.
|
|
9
|
+
*
|
|
10
|
+
* 2. Branch / value node (object)
|
|
11
|
+
*/
|
|
12
|
+
export type EncodeTrieNode =
|
|
13
|
+
| string
|
|
14
|
+
| {
|
|
15
|
+
/**
|
|
16
|
+
* Entity value for the current code point sequence (wrapped: `&...;`).
|
|
17
|
+
* Present when the path to this node itself is a valid named entity.
|
|
18
|
+
*/
|
|
19
|
+
value: string | undefined;
|
|
20
|
+
/** If a number, the next code unit of the only next character. */
|
|
21
|
+
next: number | Map<number, EncodeTrieNode>;
|
|
22
|
+
/** If next is a number, `nextValue` contains the entity value. */
|
|
23
|
+
nextValue?: string;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Parse a compact encode trie string into a Map structure used for encoding.
|
|
28
|
+
*
|
|
29
|
+
* Format per entry (ascending code points using delta encoding):
|
|
30
|
+
* <diffBase36>[&name;][{<children>}] -- diff omitted when 0
|
|
31
|
+
* Where diff = currentKey - previousKey - 1 (first entry stores absolute key).
|
|
32
|
+
* `&name;` is the entity value (already wrapped); a following `{` denotes children.
|
|
33
|
+
* @param serialized Serialized text fragment to encode.
|
|
34
|
+
*/
|
|
35
|
+
export function parseEncodeTrie(
|
|
36
|
+
serialized: string,
|
|
37
|
+
): Map<number, EncodeTrieNode> {
|
|
38
|
+
const top = new Map<number, EncodeTrieNode>();
|
|
39
|
+
const totalLength = serialized.length;
|
|
40
|
+
let cursor = 0;
|
|
41
|
+
let lastTopKey = -1;
|
|
42
|
+
|
|
43
|
+
function readDiff(): number {
|
|
44
|
+
const start = cursor;
|
|
45
|
+
while (cursor < totalLength) {
|
|
46
|
+
const char = serialized.charAt(cursor);
|
|
47
|
+
|
|
48
|
+
if ((char < "0" || char > "9") && (char < "a" || char > "z")) {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
cursor++;
|
|
52
|
+
}
|
|
53
|
+
if (cursor === start) return 0;
|
|
54
|
+
return Number.parseInt(serialized.slice(start, cursor), 36);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function readEntity(): string {
|
|
58
|
+
if (serialized[cursor] !== "&") {
|
|
59
|
+
throw new Error(`Child entry missing value near index ${cursor}`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Cursor currently points at '&'
|
|
63
|
+
const start = cursor;
|
|
64
|
+
const end = serialized.indexOf(";", cursor + 1);
|
|
65
|
+
if (end === -1) {
|
|
66
|
+
throw new Error(`Unterminated entity starting at index ${start}`);
|
|
67
|
+
}
|
|
68
|
+
cursor = end + 1; // Move past ';'
|
|
69
|
+
return serialized.slice(start, cursor); // Includes & ... ;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
while (cursor < totalLength) {
|
|
73
|
+
const keyDiff = readDiff();
|
|
74
|
+
const key = lastTopKey === -1 ? keyDiff : lastTopKey + keyDiff + 1;
|
|
75
|
+
|
|
76
|
+
let value: string | undefined;
|
|
77
|
+
if (serialized[cursor] === "&") value = readEntity();
|
|
78
|
+
|
|
79
|
+
if (serialized[cursor] === "{") {
|
|
80
|
+
cursor++; // Skip '{'
|
|
81
|
+
// Parse first child
|
|
82
|
+
let diff = readDiff();
|
|
83
|
+
let childKey = diff; // First key (lastChildKey = -1)
|
|
84
|
+
const firstValue = readEntity();
|
|
85
|
+
if (serialized[cursor] === "{") {
|
|
86
|
+
throw new Error("Unexpected nested '{' beyond depth 2");
|
|
87
|
+
}
|
|
88
|
+
// If end of block -> single child optimization
|
|
89
|
+
if (serialized[cursor] === "}") {
|
|
90
|
+
top.set(key, { value, next: childKey, nextValue: firstValue });
|
|
91
|
+
cursor++; // Skip '}'
|
|
92
|
+
} else {
|
|
93
|
+
const childMap = new Map<number, EncodeTrieNode>([
|
|
94
|
+
[childKey, firstValue],
|
|
95
|
+
]);
|
|
96
|
+
let lastChildKey = childKey;
|
|
97
|
+
while (cursor < totalLength && serialized[cursor] !== "}") {
|
|
98
|
+
diff = readDiff();
|
|
99
|
+
childKey = lastChildKey + diff + 1;
|
|
100
|
+
const childValue = readEntity();
|
|
101
|
+
if (serialized[cursor] === "{") {
|
|
102
|
+
throw new Error("Unexpected nested '{' beyond depth 2");
|
|
103
|
+
}
|
|
104
|
+
childMap.set(childKey, childValue);
|
|
105
|
+
lastChildKey = childKey;
|
|
106
|
+
}
|
|
107
|
+
if (serialized[cursor] !== "}") {
|
|
108
|
+
throw new Error("Unterminated child block");
|
|
109
|
+
}
|
|
110
|
+
cursor++; // Skip '}'
|
|
111
|
+
top.set(key, { value, next: childMap });
|
|
112
|
+
}
|
|
113
|
+
} else if (value === undefined) {
|
|
114
|
+
throw new Error(
|
|
115
|
+
`Malformed encode trie: missing value at index ${cursor}`,
|
|
116
|
+
);
|
|
117
|
+
} else {
|
|
118
|
+
top.set(key, value);
|
|
119
|
+
}
|
|
120
|
+
lastTopKey = key;
|
|
121
|
+
}
|
|
122
|
+
return top;
|
|
123
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports = (flag, argv = process.argv) => {
|
|
4
|
+
const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
|
|
5
|
+
const position = argv.indexOf(prefix + flag);
|
|
6
|
+
const terminatorPosition = argv.indexOf('--');
|
|
7
|
+
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
|
8
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "has-flag",
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"description": "Check if argv has a specific flag",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": "sindresorhus/has-flag",
|
|
7
|
+
"author": {
|
|
8
|
+
"name": "Sindre Sorhus",
|
|
9
|
+
"email": "sindresorhus@gmail.com",
|
|
10
|
+
"url": "sindresorhus.com"
|
|
11
|
+
},
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=8"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "xo && ava && tsd"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"index.js",
|
|
20
|
+
"index.d.ts"
|
|
21
|
+
],
|
|
22
|
+
"keywords": [
|
|
23
|
+
"has",
|
|
24
|
+
"check",
|
|
25
|
+
"detect",
|
|
26
|
+
"contains",
|
|
27
|
+
"find",
|
|
28
|
+
"flag",
|
|
29
|
+
"cli",
|
|
30
|
+
"command-line",
|
|
31
|
+
"argv",
|
|
32
|
+
"process",
|
|
33
|
+
"arg",
|
|
34
|
+
"args",
|
|
35
|
+
"argument",
|
|
36
|
+
"arguments",
|
|
37
|
+
"getopt",
|
|
38
|
+
"minimist",
|
|
39
|
+
"optimist"
|
|
40
|
+
],
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"ava": "^1.4.1",
|
|
43
|
+
"tsd": "^0.7.2",
|
|
44
|
+
"xo": "^0.24.0"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
Here is a quick overview of the execution time of Koffi calls on three benchmarks, where it is compared to a theoretical ideal FFI implementation (approximated with pre-compiled static N-API glue code):
|
|
4
|
+
|
|
5
|
+
- The first benchmark is based on `rand()` calls
|
|
6
|
+
- The second benchmark is based on `atoi()` calls
|
|
7
|
+
- The third benchmark is based on [Raylib](https://www.raylib.com/)
|
|
8
|
+
|
|
9
|
+
<p style="text-align: center;">
|
|
10
|
+
<a href="{{ ASSET static/perf_linux.png }}" target="_blank"><img src="{{ ASSET static/perf_linux.png }}" alt="Linux x86_64 performance" style="width: 350px;"/></a>
|
|
11
|
+
<a href="{{ ASSET static/perf_windows.png }}" target="_blank"><img src="{{ ASSET static/perf_windows.png }}" alt="Windows x86_64 performance" style="width: 350px;"/></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
These results are detailed and explained below, and compared to node-ffi/node-ffi-napi.
|
|
15
|
+
|
|
16
|
+
# Linux x86_64
|
|
17
|
+
|
|
18
|
+
The results presented below were measured on my x86_64 Linux machine (AMD Ryzen™ 5 2600).
|
|
19
|
+
|
|
20
|
+
## rand results
|
|
21
|
+
|
|
22
|
+
This test is based around repeated calls to a simple standard C function `rand`, and has three implementations:
|
|
23
|
+
|
|
24
|
+
- the first one is the reference, it calls rand through an N-API module, and is close to the theoretical limit of a perfect (no overhead) Node.js > C FFI implementation (pre-compiled static glue code)
|
|
25
|
+
- the second one calls rand through Koffi
|
|
26
|
+
- the third one uses the official Node.js FFI implementation, node-ffi-napi
|
|
27
|
+
|
|
28
|
+
Benchmark | Iteration time | Relative performance | Overhead
|
|
29
|
+
------------- | -------------- | -------------------- | --------
|
|
30
|
+
rand_napi | 569 ns | x1.00 | (ref)
|
|
31
|
+
rand_koffi | 855 ns | x0.67 | +50%
|
|
32
|
+
rand_node_ffi | 58730 ns | x0.010 | +10228%
|
|
33
|
+
|
|
34
|
+
Because rand is a pretty small function, the FFI overhead is clearly visible.
|
|
35
|
+
|
|
36
|
+
## atoi results
|
|
37
|
+
|
|
38
|
+
This test is similar to the rand one, but it is based on `atoi`, which takes a string parameter. Javascript (V8) to C string conversion is relatively slow and heavy.
|
|
39
|
+
|
|
40
|
+
Benchmark | Iteration time | Relative performance | Overhead
|
|
41
|
+
------------- | -------------- | -------------------- | --------
|
|
42
|
+
atoi_napi | 1039 ns | x1.00 | (ref)
|
|
43
|
+
atoi_koffi | 1642 ns | x0.63 | +58%
|
|
44
|
+
atoi_node_ffi | 164790 ns | x0.006 | +15767%
|
|
45
|
+
|
|
46
|
+
Because atoi is a pretty small function, the FFI overhead is clearly visible.
|
|
47
|
+
|
|
48
|
+
## Raylib results
|
|
49
|
+
|
|
50
|
+
This benchmark uses the CPU-based image drawing functions in Raylib. The calls are much heavier than in previous benchmarks, thus the FFI overhead is reduced. In this implementation, Koffi is compared to:
|
|
51
|
+
|
|
52
|
+
- Baseline: Full C++ version of the code (no JS)
|
|
53
|
+
- [node-raylib](https://github.com/RobLoach/node-raylib): This is a native wrapper implemented with N-API
|
|
54
|
+
|
|
55
|
+
Benchmark | Iteration time | Relative performance | Overhead
|
|
56
|
+
------------------ | -------------- | -------------------- | --------
|
|
57
|
+
raylib_cc | 17.5 µs | x1.34 | -25%
|
|
58
|
+
raylib_node_raylib | 23.4 µs | x1.00 | (ref)
|
|
59
|
+
raylib_koffi | 28.8 µs | x0.81 | +23%
|
|
60
|
+
raylib_node_ffi | 103.9 µs | x0.23 | +344%
|
|
61
|
+
|
|
62
|
+
# Windows x86_64
|
|
63
|
+
|
|
64
|
+
The results presented below were measured on my x86_64 Windows machine (Intel® Core™ i5-4460).
|
|
65
|
+
|
|
66
|
+
## rand results
|
|
67
|
+
|
|
68
|
+
This test is based around repeated calls to a simple standard C function `rand`, and has three implementations:
|
|
69
|
+
|
|
70
|
+
- the first one is the reference, it calls rand through an N-API module, and is close to the theoretical limit of a perfect (no overhead) Node.js > C FFI implementation (pre-compiled static glue code)
|
|
71
|
+
- the second one calls rand through Koffi
|
|
72
|
+
- the third one uses the official Node.js FFI implementation, node-ffi-napi
|
|
73
|
+
|
|
74
|
+
Benchmark | Iteration time | Relative performance | Overhead
|
|
75
|
+
------------- | -------------- | -------------------- | --------
|
|
76
|
+
rand_napi | 859 ns | x1.00 | (ref)
|
|
77
|
+
rand_koffi | 1352 ns | x0.64 | +57%
|
|
78
|
+
rand_node_ffi | 35640 ns | x0.02 | +4048%
|
|
79
|
+
|
|
80
|
+
Because rand is a pretty small function, the FFI overhead is clearly visible.
|
|
81
|
+
|
|
82
|
+
## atoi results
|
|
83
|
+
|
|
84
|
+
This test is similar to the rand one, but it is based on `atoi`, which takes a string parameter. Javascript (V8) to C string conversion is relatively slow and heavy.
|
|
85
|
+
|
|
86
|
+
The results below were measured on my x86_64 Windows machine (Intel® Core™ i5-4460):
|
|
87
|
+
|
|
88
|
+
Benchmark | Iteration time | Relative performance | Overhead
|
|
89
|
+
------------- | -------------- | -------------------- | --------
|
|
90
|
+
atoi_napi | 1336 ns | x1.00 | (ref)
|
|
91
|
+
atoi_koffi | 2440 ns | x0.55 | +83%
|
|
92
|
+
atoi_node_ffi | 136890 ns | x0.010 | +10144%
|
|
93
|
+
|
|
94
|
+
Because atoi is a pretty small function, the FFI overhead is clearly visible.
|
|
95
|
+
|
|
96
|
+
## Raylib results
|
|
97
|
+
|
|
98
|
+
This benchmark uses the CPU-based image drawing functions in Raylib. The calls are much heavier than in the atoi benchmark, thus the FFI overhead is reduced. In this implementation, Koffi is compared to:
|
|
99
|
+
|
|
100
|
+
- [node-raylib](https://github.com/RobLoach/node-raylib) (baseline): This is a native wrapper implemented with N-API
|
|
101
|
+
- raylib_cc: C++ implementation of the benchmark, without any Javascript
|
|
102
|
+
|
|
103
|
+
Benchmark | Iteration time | Relative performance | Overhead
|
|
104
|
+
------------------ | -------------- | -------------------- | --------
|
|
105
|
+
raylib_cc | 18.2 µs | x1.50 | -33%
|
|
106
|
+
raylib_node_raylib | 27.3 µs | x1.00 | (ref)
|
|
107
|
+
raylib_koffi | 29.8 µs | x0.92 | +9%
|
|
108
|
+
raylib_node_ffi | 96.3 µs | x0.28 | +253%
|
|
109
|
+
|
|
110
|
+
# Running benchmarks
|
|
111
|
+
|
|
112
|
+
Please note that all benchmark results on this page are made with Clang-built binaries.
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
cd koffi
|
|
116
|
+
node ../../cnoke/cnoke.js --prefer-clang
|
|
117
|
+
|
|
118
|
+
cd koffi/benchmark
|
|
119
|
+
node ../../cnoke/cnoke.js --prefer-clang
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Once everything is built and ready, run:
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
node benchmark.js
|
|
126
|
+
```
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Callback types
|
|
2
|
+
|
|
3
|
+
*Changed in Koffi 2.7*
|
|
4
|
+
|
|
5
|
+
In order to pass a JS function to a C function expecting a callback, you must first create a callback type with the expected return type and parameters. The syntax is similar to the one used to load functions from a shared library.
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
// ES6 syntax: import koffi from 'koffi';
|
|
9
|
+
const koffi = require('koffi');
|
|
10
|
+
|
|
11
|
+
// With the classic syntax, this callback expects an integer and returns nothing
|
|
12
|
+
const ExampleCallback = koffi.proto('ExampleCallback', 'void', ['int']);
|
|
13
|
+
|
|
14
|
+
// With the prototype parser, this callback expects a double and float, and returns the sum as a double
|
|
15
|
+
const AddDoubleFloat = koffi.proto('double AddDoubleFloat(double d, float f)');
|
|
16
|
+
```
|
|
17
|
+
> [!NOTE]
|
|
18
|
+
> The function `koffi.proto()` was introduced in Koffi 2.4, it was called `koffi.callback()` in earlier versions.
|
|
19
|
+
|
|
20
|
+
For alternative [calling conventions](functions#calling-conventions) (such as `stdcall` on Windows x86 32-bit), you can specify as the first argument with the classic syntax, or after the return type in prototype strings, like this:
|
|
21
|
+
|
|
22
|
+
```js
|
|
23
|
+
const HANDLE = koffi.pointer('HANDLE', koffi.opaque());
|
|
24
|
+
const HWND = koffi.alias('HWND', HANDLE);
|
|
25
|
+
|
|
26
|
+
// These two declarations work the same, and use the __stdcall convention on Windows x86
|
|
27
|
+
const EnumWindowsProc = koffi.proto('bool __stdcall EnumWindowsProc (HWND hwnd, long lParam)');
|
|
28
|
+
const EnumWindowsProc = koffi.proto('__stdcall', 'EnumWindowsProc', 'bool', ['HWND', 'long']);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
> [!WARNING]
|
|
32
|
+
> You have to make sure you **get the calling convention right** (such as specifying __stdcall for a Windows API callback), or your code will crash on Windows 32-bit.
|
|
33
|
+
>
|
|
34
|
+
> Before Koffi 2.7, it was *impossible to use an alternative callback calling convention with the classic syntax*. Use a prototype string or *upgrade to Koffi 2.7* to solve this limitation.
|
|
35
|
+
|
|
36
|
+
Once your callback type is declared, you can use a pointer to it in struct definitions, as function parameters and/or return types, or to call/decode function pointers.
|
|
37
|
+
|
|
38
|
+
> [!NOTE]
|
|
39
|
+
> Callbacks **have changed in version 2.0**.
|
|
40
|
+
>
|
|
41
|
+
> In Koffi 1.x, callbacks were defined in a way that made them usable directly as parameter and return types, obscuring the underlying pointer.
|
|
42
|
+
>
|
|
43
|
+
> Now, you must use them through a pointer: `void CallIt(CallbackType func)` in Koffi 1.x becomes `void CallIt(CallbackType *func)` in version 2.0 and newer.
|
|
44
|
+
>
|
|
45
|
+
> Consult the [migration guide](migration) for more information.
|
|
46
|
+
|
|
47
|
+
# Transient and registered callbacks
|
|
48
|
+
|
|
49
|
+
Koffi only uses predefined static trampolines, and does not need to generate code at runtime, which makes it compatible with platforms with hardened W^X migitations (such as PaX mprotect). However, this imposes some restrictions on the maximum number of callbacks, and their duration.
|
|
50
|
+
|
|
51
|
+
Thus, Koffi distinguishes two callback modes:
|
|
52
|
+
|
|
53
|
+
- [Transient callbacks](#transient-callbacks) can only be called while the C function they are passed to is running, and are invalidated when it returns. If the C function calls the callback later, the behavior is undefined, though Koffi tries to detect such cases. If it does, an exception will be thrown, but this is no guaranteed. However, they are simple to use, and don't require any special handling.
|
|
54
|
+
- [Registered callbacks](#registered-callbacks) can be called at any time, but they must be manually registered and unregistered. A limited number of registered callbacks can exist at the same time.
|
|
55
|
+
|
|
56
|
+
You need to specify the correct [calling convention](functions#calling-conventions) on x86 platforms, or the behavior is undefined (Node will probably crash). Only *cdecl* and *stdcall* callbacks are supported.
|
|
57
|
+
|
|
58
|
+
## Transient callbacks
|
|
59
|
+
|
|
60
|
+
Use transient callbacks when the native C function only needs to call them while it runs (e.g. qsort, progress callback, `sqlite3_exec`). Here is a small example with the C part and the JS part.
|
|
61
|
+
|
|
62
|
+
```c
|
|
63
|
+
#include <string.h>
|
|
64
|
+
|
|
65
|
+
int TransferToJS(const char *name, int age, int (*cb)(const char *str, int age))
|
|
66
|
+
{
|
|
67
|
+
char buf[64];
|
|
68
|
+
snprintf(buf, sizeof(buf), "Hello %s!", str);
|
|
69
|
+
return cb(buf, age);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
```js
|
|
74
|
+
// ES6 syntax: import koffi from 'koffi';
|
|
75
|
+
const koffi = require('koffi');
|
|
76
|
+
|
|
77
|
+
const lib = koffi.load('./callbacks.so'); // Fake path
|
|
78
|
+
|
|
79
|
+
const TransferCallback = koffi.proto('int TransferCallback(const char *str, int age)');
|
|
80
|
+
|
|
81
|
+
const TransferToJS = lib.func('TransferToJS', 'int', ['str', 'int', koffi.pointer(TransferCallback)]);
|
|
82
|
+
|
|
83
|
+
let ret = TransferToJS('Niels', 27, (str, age) => {
|
|
84
|
+
console.log(str);
|
|
85
|
+
console.log('Your age is:', age);
|
|
86
|
+
return 42;
|
|
87
|
+
});
|
|
88
|
+
console.log(ret);
|
|
89
|
+
|
|
90
|
+
// This example prints:
|
|
91
|
+
// Hello Niels!
|
|
92
|
+
// Your age is: 27
|
|
93
|
+
// 42
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Registered callbacks
|
|
97
|
+
|
|
98
|
+
*New in Koffi 2.0 (explicit this binding in Koffi 2.2)*
|
|
99
|
+
|
|
100
|
+
Use registered callbacks when the function needs to be called at a later time (e.g. log handler, event handler, `fopencookie/funopen`). Call `koffi.register(func, type)` to register a callback function, with two arguments: the JS function, and the callback type.
|
|
101
|
+
|
|
102
|
+
When you are done, call `koffi.unregister()` (with the value returned by `koffi.register()`) to release the slot. A maximum of 8192 callbacks can exist at the same time. Failure to do so will leak the slot, and subsequent registrations may fail (with an exception) once all slots are used.
|
|
103
|
+
|
|
104
|
+
The example below shows how to register and unregister delayed callbacks.
|
|
105
|
+
|
|
106
|
+
```c
|
|
107
|
+
static const char *(*g_cb1)(const char *name);
|
|
108
|
+
static void (*g_cb2)(const char *str);
|
|
109
|
+
|
|
110
|
+
void RegisterFunctions(const char *(*cb1)(const char *name), void (*cb2)(const char *str))
|
|
111
|
+
{
|
|
112
|
+
g_cb1 = cb1;
|
|
113
|
+
g_cb2 = cb2;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
void SayIt(const char *name)
|
|
117
|
+
{
|
|
118
|
+
const char *str = g_cb1(name);
|
|
119
|
+
g_cb2(str);
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
```js
|
|
124
|
+
// ES6 syntax: import koffi from 'koffi';
|
|
125
|
+
const koffi = require('koffi');
|
|
126
|
+
|
|
127
|
+
const lib = koffi.load('./callbacks.so'); // Fake path
|
|
128
|
+
|
|
129
|
+
const GetCallback = koffi.proto('const char *GetCallback(const char *name)');
|
|
130
|
+
const PrintCallback = koffi.proto('void PrintCallback(const char *str)');
|
|
131
|
+
|
|
132
|
+
const RegisterFunctions = lib.func('void RegisterFunctions(GetCallback *cb1, PrintCallback *cb2)');
|
|
133
|
+
const SayIt = lib.func('void SayIt(const char *name)');
|
|
134
|
+
|
|
135
|
+
let cb1 = koffi.register(name => 'Hello ' + name + '!', koffi.pointer(GetCallback));
|
|
136
|
+
let cb2 = koffi.register(console.log, 'PrintCallback *');
|
|
137
|
+
|
|
138
|
+
RegisterFunctions(cb1, cb2);
|
|
139
|
+
SayIt('Kyoto'); // Prints Hello Kyoto!
|
|
140
|
+
|
|
141
|
+
koffi.unregister(cb1);
|
|
142
|
+
koffi.unregister(cb2);
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Starting *with Koffi 2.2*, you can optionally specify the `this` value for the function as the first argument.
|
|
146
|
+
|
|
147
|
+
```js
|
|
148
|
+
class ValueStore {
|
|
149
|
+
constructor(value) { this.value = value; }
|
|
150
|
+
get() { return this.value; }
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
let store = new ValueStore(42);
|
|
154
|
+
|
|
155
|
+
let cb1 = koffi.register(store.get, 'IntCallback *'); // If a C function calls cb1 it will fail because this will be undefined
|
|
156
|
+
let cb2 = koffi.register(store, store.get, 'IntCallback *'); // However in this case, this will match the store object
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
# Special considerations
|
|
160
|
+
|
|
161
|
+
## Decoding pointer arguments
|
|
162
|
+
|
|
163
|
+
*New in Koffi 2.2, changed in Koffi 2.3*
|
|
164
|
+
|
|
165
|
+
Koffi does not have enough information to convert callback pointer arguments to an appropriate JS value. In this case, your JS function will receive an opaque *External* object.
|
|
166
|
+
|
|
167
|
+
You can pass this value through to another C function that expects a pointer of the same type, or you can use [koffi.decode()](variables#decode-to-js-values) function to decode pointer arguments.
|
|
168
|
+
|
|
169
|
+
The following examples uses it to sort an array of strings in-place with the standard C function `qsort()`:
|
|
170
|
+
|
|
171
|
+
```js
|
|
172
|
+
// ES6 syntax: import koffi from 'koffi';
|
|
173
|
+
const koffi = require('koffi');
|
|
174
|
+
|
|
175
|
+
const lib = koffi.load('libc.so.6');
|
|
176
|
+
|
|
177
|
+
const SortCallback = koffi.proto('int SortCallback(const void *first, const void *second)');
|
|
178
|
+
const qsort = lib.func('void qsort(_Inout_ void *array, size_t count, size_t size, SortCallback *cb)');
|
|
179
|
+
|
|
180
|
+
let array = ['foo', 'bar', '123', 'foobar'];
|
|
181
|
+
|
|
182
|
+
qsort(koffi.as(array, 'char **'), array.length, koffi.sizeof('void *'), (ptr1, ptr2) => {
|
|
183
|
+
let str1 = koffi.decode(ptr1, 'char *');
|
|
184
|
+
let str2 = koffi.decode(ptr2, 'char *');
|
|
185
|
+
|
|
186
|
+
return str1.localeCompare(str2);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
console.log(array); // Prints ['123', 'bar', 'foo', 'foobar']
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Asynchronous callbacks
|
|
193
|
+
|
|
194
|
+
*New in Koffi 2.2.2*
|
|
195
|
+
|
|
196
|
+
JS execution is inherently single-threaded, so JS callbacks must run on the main thread. There are two ways you may want to call a callback function from another thread:
|
|
197
|
+
|
|
198
|
+
- Call the callback from an asynchronous FFI call (e.g. `waitpid.async`)
|
|
199
|
+
- Inside a synchronous FFI call, pass the callback to another thread
|
|
200
|
+
|
|
201
|
+
In both cases, Koffi will queue the call back to JS to run on the main thread, as soon as the JS event loop has a chance to run (for example when you await a promise).
|
|
202
|
+
|
|
203
|
+
> [!WARNING]
|
|
204
|
+
> Be careful, you can easily get into a deadlock situation if you call a callback from a secondary thread and your main thread never lets the JS event loop run (for example, if the main thread waits for the secondary thread to finish something itself).
|
|
205
|
+
|
|
206
|
+
# Handling of exceptions
|
|
207
|
+
|
|
208
|
+
If an exception happens inside the JS callback, the C API will receive 0 or NULL (depending on the return value type).
|
|
209
|
+
|
|
210
|
+
Handle the exception yourself (with try/catch) if you need to handle exceptions differently.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Bugs and feature requests
|
|
2
|
+
|
|
3
|
+
Use the official repository for bugs, ideas and features requests: https://github.com/Koromix/koffi
|
|
4
|
+
|
|
5
|
+
Please note that the source code is not in this repository, instead it lives in a monorepo: https://codeberg.org/Koromix/rygel/ (in the *src/koffi* subdirectory).
|
|
6
|
+
|
|
7
|
+
# Build from source
|
|
8
|
+
|
|
9
|
+
We provide prebuilt binaries, packaged in the NPM archive, so in most cases it should be as simple as `npm install koffi`. If you want to hack Koffi or use a specific platform, follow the instructions below.
|
|
10
|
+
|
|
11
|
+
Start by cloning the repository with [Git](https://git-scm.com/):
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
git clone https://codeberg.org/Koromix/rygel
|
|
15
|
+
cd rygel
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
As said before, this is a monorepository containg multiple projects, hence the name.
|
|
19
|
+
|
|
20
|
+
## Windows
|
|
21
|
+
|
|
22
|
+
First, make sure the following dependencies are met:
|
|
23
|
+
|
|
24
|
+
- The "Desktop development with C++" workload from [Visual Studio 2022 or 2019](https://visualstudio.microsoft.com/downloads/) or the "C++ build tools" workload from the [Build Tools](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022), with the default optional components.
|
|
25
|
+
- [CMake meta build system](https://cmake.org/)
|
|
26
|
+
- [Node.js](https://nodejs.org/) 16 or later
|
|
27
|
+
|
|
28
|
+
Once this is done, run this command _from the test or the benchmark directory_ (depending on what you want to build):
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
cd src/koffi
|
|
32
|
+
node ../cnoke/cnoke.js
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Other platforms
|
|
36
|
+
|
|
37
|
+
Make sure the following dependencies are met:
|
|
38
|
+
|
|
39
|
+
- `gcc` and `g++` >= 8.3 or newer
|
|
40
|
+
- GNU Make 3.81 or newer
|
|
41
|
+
- [CMake meta build system](https://cmake.org/)
|
|
42
|
+
- [Node.js](https://nodejs.org/) 16 or later
|
|
43
|
+
|
|
44
|
+
Once this is done, run this command _from the test or the benchmark directory_ (depending on what you want to build):
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
cd src/koffi
|
|
48
|
+
node ../cnoke/cnoke.js
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
# Run tests
|
|
52
|
+
|
|
53
|
+
## On your machine
|
|
54
|
+
|
|
55
|
+
Once Koffi is built, you can build the tests and run them with the following commands:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
cd src/koffi/test
|
|
59
|
+
node ../../cnoke/cnoke.js
|
|
60
|
+
|
|
61
|
+
node test.js
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## On virtual machines
|
|
65
|
+
|
|
66
|
+
Koffi is tested on multiple architectures using emulated (accelerated when possible) QEMU machines. First, you need to install qemu packages, such as `qemu-system` (or even `qemu-system-gui`) on Ubuntu.
|
|
67
|
+
|
|
68
|
+
These machines are not included directly in this repository (for license and size reasons), but they are available here: https://koromix.dev/files/machines/
|
|
69
|
+
|
|
70
|
+
For example, if you want to run the tests on Debian ARM64, run the following commands:
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
cd deploy/qemu/
|
|
74
|
+
|
|
75
|
+
wget -q -O- https://koromix.dev/files/machines/qemu_debian_arm64.tar.zst | zstd -d | tar xv
|
|
76
|
+
b3sum -c b3sum.txt
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Note that the machine disk content may change each time the machine runs, so the checksum test will fail once a machine has been used at least once.
|
|
80
|
+
|
|
81
|
+
And now you can run the tests with:
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
node qemu.js test # Several options are available, use --help
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
And be patient, this can be pretty slow for emulated machines. The Linux machines have and use ccache to build Koffi, so subsequent build steps will get much more tolerable.
|
|
88
|
+
|
|
89
|
+
By default, machines are started and stopped for each test. But you can start the machines ahead of time and run the tests multiple times instead:
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
node qemu.js start # Start the machines
|
|
93
|
+
node qemu.js test # Test (without shutting down)
|
|
94
|
+
node qemu.js test # Test again
|
|
95
|
+
node qemu.js stop # Stop everything
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
You can also restrict the test to a subset of machines:
|
|
99
|
+
|
|
100
|
+
```sh
|
|
101
|
+
# Full test cycle
|
|
102
|
+
node qemu.js test debian_x64 debian_i386
|
|
103
|
+
|
|
104
|
+
# Separate start, test, shutdown
|
|
105
|
+
node qemu.js start debian_x64 debian_i386
|
|
106
|
+
node qemu.js test debian_x64 debian_i386
|
|
107
|
+
node qemu.js stop
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Finally, you can join a running machine with SSH with the following shortcut, if you need to do some debugging or any other manual procedure:
|
|
111
|
+
|
|
112
|
+
```sh
|
|
113
|
+
node qemu.js ssh debian_i386
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Each machine is configured to run a VNC server available locally, which you can use to access the display, using KRDC or any other compatible viewer. Use the `info` command to get the VNC port.
|
|
117
|
+
|
|
118
|
+
```sh
|
|
119
|
+
node qemu.js info debian_x64
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
# Making a release
|
|
123
|
+
|
|
124
|
+
First, you must update the code in three steps:
|
|
125
|
+
|
|
126
|
+
- Change the version number in `package.json`
|
|
127
|
+
- Add an entry to `CHANGELOG` to summarize the changes since last release
|
|
128
|
+
- Commit theses changes with the message *Bump Koffi to X.Y.Z*
|
|
129
|
+
|
|
130
|
+
Once this is done, you can publish a new release with the following commands:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
node tools/qemu.js test # If not done before
|
|
134
|
+
node tools/qemu.js build
|
|
135
|
+
|
|
136
|
+
cd build/dist
|
|
137
|
+
npm publish
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Some platforms are emulated so this can take a few minutes until the pre-built binaries are ready. Go grab a cup of coffee, come back and execute the `npm publish` command!
|
|
141
|
+
|
|
142
|
+
# Code style
|
|
143
|
+
|
|
144
|
+
Koffi is programmed in a mix of C++ and assembly code (architecture-specific code). It uses [node-addon-api](https://github.com/nodejs/node-addon-api) (C++ N-API wrapper) to interact with Node.js.
|
|
145
|
+
|
|
146
|
+
My personal preference goes to a rather C-like C++ style, with careful use of templates (mainly for containers) and little object-oriented programming. I strongly prefer tagged unions and code locality over inheritance and virtual methods. Exceptions are disabled.
|
|
147
|
+
|
|
148
|
+
Find more information about code style in the [monorepository README](https://codeberg.org/Koromix/rygel/#c-flavor) file.
|