pi-cursor-sdk 0.4.0 → 0.5.2
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/CHANGELOG.md +80 -0
- package/README.md +169 -37
- package/dist/context-window-cache.js +0 -6
- package/dist/context.js +61 -34
- package/dist/cursor-api-key.js +34 -19
- package/dist/cursor-cloud-lifecycle.js +122 -98
- package/dist/cursor-cloud-options.js +1 -0
- package/dist/cursor-config.js +59 -0
- package/dist/cursor-custom-store-path.js +177 -0
- package/dist/cursor-custom-subagent-definitions.js +14 -0
- package/dist/cursor-durable-fs.js +97 -3
- package/dist/cursor-fallback-models.generated.js +288 -1
- package/dist/cursor-fallback-warning.js +10 -4
- package/dist/cursor-http1.js +8 -8
- package/dist/cursor-live-run-coordinator.js +31 -15
- package/dist/cursor-mcp-timeout-override.js +3 -1
- package/dist/cursor-native-replay-routing.js +1 -1
- package/dist/cursor-native-tool-display-registration.js +46 -22
- package/dist/cursor-native-tool-display-state.js +57 -22
- package/dist/cursor-native-tool-display-tools.js +5 -6
- package/dist/cursor-pi-tool-bridge-constants.js +23 -2
- package/dist/cursor-pi-tool-bridge-run.js +28 -3
- package/dist/cursor-pi-tool-bridge-server.js +1 -1
- package/dist/cursor-pi-tool-bridge-snapshot.js +1 -1
- package/dist/cursor-pi-tool-bridge.js +31 -9
- package/dist/cursor-provider-binding.js +118 -0
- package/dist/cursor-provider-errors.js +61 -33
- package/dist/cursor-provider-lazy.js +23 -11
- package/dist/cursor-provider-live-run-drain.js +25 -16
- package/dist/cursor-provider-run-finalizer.js +21 -9
- package/dist/cursor-provider-turn-coordinator.js +1 -0
- package/dist/cursor-provider-turn-display-router.js +4 -0
- package/dist/cursor-provider-turn-emit.js +1 -0
- package/dist/cursor-provider-turn-finalize.js +29 -20
- package/dist/cursor-provider-turn-prepare.js +49 -20
- package/dist/cursor-provider-turn-runner.js +37 -11
- package/dist/cursor-provider-turn-send.js +22 -9
- package/dist/cursor-provider-turn-summary.js +89 -0
- package/dist/cursor-provider-turn-tool-ledger.js +13 -7
- package/dist/cursor-provider.js +10 -3
- package/dist/cursor-question-tool.js +5 -5
- package/dist/cursor-request-provenance.js +53 -0
- package/dist/cursor-ripgrep-path.js +14 -3
- package/dist/cursor-runtime-state.js +50 -43
- package/dist/cursor-sdk-billed-usage.js +54 -75
- package/dist/cursor-sdk-event-debug-session.js +5 -6
- package/dist/cursor-sdk-event-debug.js +9 -6
- package/dist/cursor-sdk-output-filter.js +1 -1
- package/dist/cursor-sdk-process-error-guard.js +9 -10
- package/dist/cursor-sdk-runtime.js +13 -1
- package/dist/cursor-sdk-vendor-env.js +20 -0
- package/dist/cursor-session-agent-cleanup.js +31 -28
- package/dist/cursor-session-agent-lifecycle.js +18 -9
- package/dist/cursor-session-agent-lineage.js +28 -12
- package/dist/cursor-session-agent-resume.js +51 -35
- package/dist/cursor-session-agent.js +47 -25
- package/dist/cursor-session-compaction-prep.js +2 -7
- package/dist/cursor-session-scope.js +71 -39
- package/dist/cursor-session-send-policy.js +2 -2
- package/dist/cursor-session-settings.js +61 -0
- package/dist/cursor-session-store.js +235 -45
- package/dist/cursor-skill-tool.js +32 -49
- package/dist/cursor-state.js +78 -65
- package/dist/cursor-tool-manifest.js +1 -1
- package/dist/cursor-usage-accounting.js +13 -70
- package/dist/cursor-usage-command.js +89 -0
- package/dist/cursor-usage-ledger.js +512 -0
- package/dist/index.js +29 -35
- package/dist/model-discovery.js +62 -37
- package/dist/model-list-cache.js +12 -1
- package/docs/cursor-dogfood-checklist.md +3 -3
- package/docs/cursor-live-smoke-checklist.md +15 -15
- package/docs/cursor-model-ux-spec.md +124 -39
- package/docs/cursor-native-tool-replay.md +18 -8
- package/docs/cursor-native-tool-visual-audit.md +8 -8
- package/docs/cursor-testing-lessons.md +87 -25
- package/docs/cursor-tool-surfaces.md +4 -4
- package/docs/platform-smoke-implementation.md +10 -6
- package/docs/platform-smoke.md +35 -46
- package/node_modules/@hono/node-server/README.md +21 -10
- package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
- package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
- package/node_modules/@hono/node-server/dist/index.cjs +41 -19
- package/node_modules/@hono/node-server/dist/index.mjs +42 -20
- package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
- package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
- package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
- package/node_modules/@hono/node-server/package.json +3 -2
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
- package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
- package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
- package/node_modules/@modelcontextprotocol/core/package.json +2 -2
- package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
- package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
- package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
- package/node_modules/@modelcontextprotocol/server/README.md +1 -7
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
- package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
- package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
- package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
- package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
- package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
- package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
- package/node_modules/@modelcontextprotocol/server/package.json +4 -4
- package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
- package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
- package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
- package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
- package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
- package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
- package/node_modules/hono/dist/adapter/bun/index.js +3 -13
- package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
- package/node_modules/hono/dist/adapter/bun/server.js +11 -5
- package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
- package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
- package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
- package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
- package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
- package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
- package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
- package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
- package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
- package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
- package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
- package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
- package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
- package/node_modules/hono/dist/adapter/deno/index.js +3 -10
- package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
- package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
- package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
- package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
- package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
- package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
- package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
- package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
- package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
- package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
- package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
- package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
- package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
- package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
- package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
- package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
- package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
- package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
- package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
- package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
- package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
- package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
- package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
- package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
- package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
- package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
- package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
- package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
- package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
- package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
- package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
- package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
- package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
- package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
- package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
- package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
- package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
- package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
- package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
- package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
- package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
- package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
- package/node_modules/hono/dist/cjs/client/client.js +139 -212
- package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
- package/node_modules/hono/dist/cjs/client/index.js +7 -32
- package/node_modules/hono/dist/cjs/client/types.js +0 -15
- package/node_modules/hono/dist/cjs/client/utils.js +54 -92
- package/node_modules/hono/dist/cjs/compose.js +49 -66
- package/node_modules/hono/dist/cjs/context.js +379 -450
- package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
- package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
- package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
- package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
- package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
- package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
- package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
- package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
- package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
- package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
- package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
- package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
- package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
- package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
- package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
- package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
- package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
- package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
- package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
- package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
- package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
- package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
- package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
- package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
- package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
- package/node_modules/hono/dist/cjs/hono-base.js +347 -403
- package/node_modules/hono/dist/cjs/hono.js +28 -42
- package/node_modules/hono/dist/cjs/http-exception.js +55 -56
- package/node_modules/hono/dist/cjs/index.js +22 -30
- package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
- package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
- package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
- package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
- package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
- package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
- package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
- package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
- package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
- package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
- package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
- package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
- package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
- package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
- package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
- package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
- package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
- package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
- package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
- package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
- package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
- package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
- package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
- package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
- package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
- package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
- package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
- package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
- package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
- package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
- package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
- package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
- package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
- package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
- package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
- package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
- package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
- package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
- package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
- package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
- package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
- package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
- package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
- package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
- package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
- package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
- package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
- package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
- package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
- package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
- package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
- package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
- package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
- package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
- package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
- package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
- package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
- package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
- package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
- package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
- package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
- package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
- package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
- package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
- package/node_modules/hono/dist/cjs/request/constants.js +5 -27
- package/node_modules/hono/dist/cjs/request.js +334 -346
- package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
- package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
- package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
- package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
- package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
- package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
- package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
- package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
- package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
- package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
- package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
- package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
- package/node_modules/hono/dist/cjs/router/utils.js +5 -27
- package/node_modules/hono/dist/cjs/router.js +37 -37
- package/node_modules/hono/dist/cjs/types.js +5 -28
- package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
- package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
- package/node_modules/hono/dist/cjs/utils/body.js +84 -110
- package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
- package/node_modules/hono/dist/cjs/utils/color.js +35 -44
- package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
- package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
- package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
- package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
- package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
- package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
- package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
- package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
- package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
- package/node_modules/hono/dist/cjs/utils/html.js +96 -137
- package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
- package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
- package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
- package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
- package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
- package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
- package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
- package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
- package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
- package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
- package/node_modules/hono/dist/cjs/utils/types.js +0 -15
- package/node_modules/hono/dist/cjs/utils/url.js +185 -234
- package/node_modules/hono/dist/cjs/validator/index.js +3 -27
- package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
- package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
- package/node_modules/hono/dist/client/client.js +138 -197
- package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
- package/node_modules/hono/dist/client/index.js +3 -7
- package/node_modules/hono/dist/client/types.js +1 -0
- package/node_modules/hono/dist/client/utils.js +51 -68
- package/node_modules/hono/dist/compose.js +49 -45
- package/node_modules/hono/dist/context.js +376 -426
- package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
- package/node_modules/hono/dist/helper/accepts/index.js +1 -4
- package/node_modules/hono/dist/helper/adapter/index.js +33 -52
- package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
- package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
- package/node_modules/hono/dist/helper/cookie/index.js +74 -94
- package/node_modules/hono/dist/helper/css/common.js +167 -225
- package/node_modules/hono/dist/helper/css/index.js +132 -137
- package/node_modules/hono/dist/helper/dev/index.js +44 -49
- package/node_modules/hono/dist/helper/factory/index.js +27 -27
- package/node_modules/hono/dist/helper/html/index.js +30 -39
- package/node_modules/hono/dist/helper/proxy/index.js +116 -88
- package/node_modules/hono/dist/helper/route/index.js +121 -43
- package/node_modules/hono/dist/helper/ssg/index.js +3 -18
- package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
- package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
- package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
- package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
- package/node_modules/hono/dist/helper/streaming/index.js +2 -8
- package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
- package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
- package/node_modules/hono/dist/helper/streaming/text.js +9 -10
- package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
- package/node_modules/hono/dist/helper/testing/index.js +16 -10
- package/node_modules/hono/dist/helper/websocket/index.js +49 -53
- package/node_modules/hono/dist/hono-base.js +344 -379
- package/node_modules/hono/dist/hono.js +27 -20
- package/node_modules/hono/dist/http-exception.js +53 -33
- package/node_modules/hono/dist/index.js +19 -6
- package/node_modules/hono/dist/jsx/base.js +231 -340
- package/node_modules/hono/dist/jsx/children.js +16 -20
- package/node_modules/hono/dist/jsx/components.js +118 -170
- package/node_modules/hono/dist/jsx/constants.js +9 -15
- package/node_modules/hono/dist/jsx/context.js +153 -150
- package/node_modules/hono/dist/jsx/dom/client.js +45 -48
- package/node_modules/hono/dist/jsx/dom/components.js +21 -29
- package/node_modules/hono/dist/jsx/dom/context.js +37 -44
- package/node_modules/hono/dist/jsx/dom/css.js +142 -147
- package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
- package/node_modules/hono/dist/jsx/dom/index.js +71 -134
- package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
- package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
- package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
- package/node_modules/hono/dist/jsx/dom/render.js +492 -631
- package/node_modules/hono/dist/jsx/dom/server.js +32 -32
- package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
- package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
- package/node_modules/hono/dist/jsx/index.js +45 -98
- package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
- package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
- package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
- package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
- package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
- package/node_modules/hono/dist/jsx/streaming.js +120 -142
- package/node_modules/hono/dist/jsx/types.js +1 -0
- package/node_modules/hono/dist/jsx/utils.js +105 -168
- package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
- package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
- package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
- package/node_modules/hono/dist/middleware/cache/index.js +165 -190
- package/node_modules/hono/dist/middleware/combine/index.js +134 -73
- package/node_modules/hono/dist/middleware/compress/index.js +75 -69
- package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
- package/node_modules/hono/dist/middleware/cors/index.js +107 -86
- package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
- package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
- package/node_modules/hono/dist/middleware/etag/index.js +71 -70
- package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
- package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
- package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
- package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
- package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
- package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
- package/node_modules/hono/dist/middleware/language/index.js +2 -15
- package/node_modules/hono/dist/middleware/language/language.js +180 -157
- package/node_modules/hono/dist/middleware/logger/index.js +43 -37
- package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
- package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
- package/node_modules/hono/dist/middleware/mount/index.js +70 -0
- package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
- package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
- package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
- package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
- package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
- package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
- package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
- package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
- package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
- package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
- package/node_modules/hono/dist/middleware/timing/index.js +2 -9
- package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
- package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
- package/node_modules/hono/dist/preset/quick.js +17 -15
- package/node_modules/hono/dist/preset/tiny.js +14 -11
- package/node_modules/hono/dist/request/constants.js +4 -5
- package/node_modules/hono/dist/request.js +328 -319
- package/node_modules/hono/dist/router/linear-router/index.js +1 -4
- package/node_modules/hono/dist/router/linear-router/router.js +93 -120
- package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
- package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
- package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
- package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
- package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
- package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
- package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
- package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
- package/node_modules/hono/dist/router/smart-router/index.js +1 -4
- package/node_modules/hono/dist/router/smart-router/router.js +46 -55
- package/node_modules/hono/dist/router/trie-router/index.js +1 -4
- package/node_modules/hono/dist/router/trie-router/node.js +131 -162
- package/node_modules/hono/dist/router/trie-router/router.js +11 -14
- package/node_modules/hono/dist/router/utils.js +4 -5
- package/node_modules/hono/dist/router.js +35 -14
- package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
- package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
- package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
- package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
- package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
- package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
- package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
- package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
- package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
- package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
- package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
- package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
- package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
- package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
- package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
- package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
- package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
- package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
- package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
- package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
- package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
- package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
- package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
- package/node_modules/hono/dist/types/client/client.d.ts +5 -3
- package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
- package/node_modules/hono/dist/types/client/index.d.ts +5 -7
- package/node_modules/hono/dist/types/client/types.d.ts +134 -159
- package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
- package/node_modules/hono/dist/types/compose.d.ts +4 -2
- package/node_modules/hono/dist/types/context.d.ts +335 -335
- package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
- package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
- package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
- package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
- package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
- package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
- package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
- package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
- package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
- package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
- package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
- package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
- package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
- package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
- package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
- package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
- package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
- package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
- package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
- package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
- package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
- package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
- package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
- package/node_modules/hono/dist/types/hono.d.ts +11 -10
- package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
- package/node_modules/hono/dist/types/index.d.ts +6 -37
- package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
- package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
- package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
- package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
- package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
- package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
- package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
- package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
- package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
- package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
- package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
- package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
- package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
- package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
- package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
- package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
- package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
- package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
- package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
- package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
- package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
- package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
- package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
- package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
- package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
- package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
- package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
- package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
- package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
- package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
- package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
- package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
- package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
- package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
- package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
- package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
- package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
- package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
- package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
- package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
- package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
- package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
- package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
- package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
- package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
- package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
- package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
- package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
- package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
- package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
- package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
- package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
- package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
- package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
- package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
- package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
- package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/request.d.ts +288 -286
- package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
- package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
- package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
- package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
- package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
- package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
- package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
- package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
- package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
- package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
- package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
- package/node_modules/hono/dist/types/router.d.ts +23 -22
- package/node_modules/hono/dist/types/types.d.ts +146 -505
- package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
- package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
- package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
- package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
- package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
- package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
- package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
- package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
- package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
- package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
- package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
- package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
- package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
- package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
- package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
- package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
- package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
- package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
- package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
- package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
- package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
- package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
- package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
- package/node_modules/hono/dist/types.js +4 -6
- package/node_modules/hono/dist/utils/accept.js +185 -212
- package/node_modules/hono/dist/utils/basic-auth.js +18 -21
- package/node_modules/hono/dist/utils/body.js +87 -92
- package/node_modules/hono/dist/utils/buffer.js +44 -71
- package/node_modules/hono/dist/utils/color.js +33 -21
- package/node_modules/hono/dist/utils/compress.js +11 -5
- package/node_modules/hono/dist/utils/concurrent.js +29 -38
- package/node_modules/hono/dist/utils/constants.js +7 -5
- package/node_modules/hono/dist/utils/cookie.js +114 -163
- package/node_modules/hono/dist/utils/crypto.js +30 -40
- package/node_modules/hono/dist/utils/encode.js +30 -26
- package/node_modules/hono/dist/utils/filepath.js +23 -33
- package/node_modules/hono/dist/utils/handler.js +10 -11
- package/node_modules/hono/dist/utils/headers.js +1 -0
- package/node_modules/hono/dist/utils/html.js +97 -117
- package/node_modules/hono/dist/utils/http-status.js +1 -0
- package/node_modules/hono/dist/utils/ipaddr.js +227 -279
- package/node_modules/hono/dist/utils/jwt/index.js +12 -4
- package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
- package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
- package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
- package/node_modules/hono/dist/utils/jwt/types.js +79 -95
- package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
- package/node_modules/hono/dist/utils/mime.js +74 -79
- package/node_modules/hono/dist/utils/stream.js +86 -88
- package/node_modules/hono/dist/utils/types.js +1 -0
- package/node_modules/hono/dist/utils/url.js +187 -215
- package/node_modules/hono/dist/validator/index.js +1 -4
- package/node_modules/hono/dist/validator/utils.js +1 -0
- package/node_modules/hono/dist/validator/validator.js +61 -83
- package/node_modules/hono/package.json +35 -27
- package/package.json +16 -14
- package/scripts/cloud-runtime-smoke.mjs +4 -2
- package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
- package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
- package/scripts/local-resume-smoke.mjs +1 -1
- package/scripts/platform-smoke/artifacts.mjs +7 -1
- package/scripts/platform-smoke/card-detect.mjs +2 -8
- package/scripts/platform-smoke/targets.mjs +8 -15
- package/scripts/platform-smoke/visual-evidence.mjs +7 -2
- package/scripts/tmux-live-smoke.sh +57 -90
- package/shared/cursor-sdk-output-filter.d.mts +3 -0
- package/shared/cursor-sdk-output-filter.mjs +117 -44
- package/src/context-window-cache.ts +0 -6
- package/src/context.ts +65 -33
- package/src/cursor-api-key.ts +37 -17
- package/src/cursor-cloud-lifecycle.ts +124 -98
- package/src/cursor-cloud-options.ts +2 -0
- package/src/cursor-config.ts +76 -0
- package/src/cursor-custom-store-path.ts +151 -0
- package/src/cursor-custom-subagent-definitions.ts +21 -0
- package/src/cursor-durable-fs.ts +65 -3
- package/src/cursor-fallback-models.generated.ts +288 -1
- package/src/cursor-fallback-warning.ts +9 -5
- package/src/cursor-http1.ts +8 -8
- package/src/cursor-live-run-coordinator.ts +33 -15
- package/src/cursor-mcp-timeout-override.ts +3 -1
- package/src/cursor-native-replay-routing.ts +2 -1
- package/src/cursor-native-tool-display-registration.ts +48 -24
- package/src/cursor-native-tool-display-state.ts +65 -21
- package/src/cursor-native-tool-display-tools.ts +7 -4
- package/src/cursor-pi-tool-bridge-constants.ts +27 -2
- package/src/cursor-pi-tool-bridge-run.ts +32 -3
- package/src/cursor-pi-tool-bridge-server.ts +1 -2
- package/src/cursor-pi-tool-bridge-snapshot.ts +1 -1
- package/src/cursor-pi-tool-bridge-types.ts +3 -0
- package/src/cursor-pi-tool-bridge.ts +26 -9
- package/src/cursor-provider-binding.ts +121 -0
- package/src/cursor-provider-errors.ts +59 -35
- package/src/cursor-provider-lazy.ts +21 -15
- package/src/cursor-provider-live-run-drain.ts +29 -17
- package/src/cursor-provider-run-finalizer.ts +26 -16
- package/src/cursor-provider-turn-coordinator.ts +2 -0
- package/src/cursor-provider-turn-display-router.ts +5 -0
- package/src/cursor-provider-turn-emit.ts +3 -1
- package/src/cursor-provider-turn-finalize.ts +38 -23
- package/src/cursor-provider-turn-prepare.ts +51 -27
- package/src/cursor-provider-turn-runner.ts +40 -13
- package/src/cursor-provider-turn-send.ts +23 -15
- package/src/cursor-provider-turn-summary.ts +94 -0
- package/src/cursor-provider-turn-tool-ledger.ts +12 -7
- package/src/cursor-provider-turn-types.ts +37 -4
- package/src/cursor-provider.ts +28 -4
- package/src/cursor-question-tool.ts +5 -5
- package/src/cursor-request-provenance.ts +79 -0
- package/src/cursor-ripgrep-path.ts +15 -5
- package/src/cursor-runtime-state.ts +53 -48
- package/src/cursor-sdk-billed-usage.ts +54 -102
- package/src/cursor-sdk-event-debug-session.ts +5 -5
- package/src/cursor-sdk-event-debug.ts +10 -6
- package/src/cursor-sdk-output-filter.ts +2 -0
- package/src/cursor-sdk-process-error-guard.ts +8 -9
- package/src/cursor-sdk-runtime.ts +15 -2
- package/src/cursor-sdk-vendor-env.ts +22 -0
- package/src/cursor-session-agent-cleanup.ts +30 -29
- package/src/cursor-session-agent-lifecycle.ts +14 -9
- package/src/cursor-session-agent-lineage.ts +26 -12
- package/src/cursor-session-agent-resume.ts +49 -36
- package/src/cursor-session-agent.ts +57 -27
- package/src/cursor-session-compaction-prep.ts +2 -7
- package/src/cursor-session-scope.ts +87 -39
- package/src/cursor-session-send-policy.ts +2 -2
- package/src/cursor-session-settings.ts +72 -0
- package/src/cursor-session-store.ts +259 -53
- package/src/cursor-skill-tool.ts +37 -61
- package/src/cursor-state.ts +81 -69
- package/src/cursor-tool-manifest.ts +1 -1
- package/src/cursor-usage-accounting.ts +17 -82
- package/src/cursor-usage-command.ts +76 -0
- package/src/cursor-usage-ledger.ts +500 -0
- package/src/index.ts +30 -39
- package/src/model-discovery.ts +76 -45
- package/src/model-list-cache.ts +11 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
- package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
package/dist/cursor-state.js
CHANGED
|
@@ -3,25 +3,23 @@ import { runCursorSessionAgentCleanupCommand } from "./cursor-session-agent-clea
|
|
|
3
3
|
import { CURSOR_HTTP1_ENTRY_TYPE, getStoredCursorHttp1Enabled, isCursorHttp1EntryData, setCursorHttp1GlobalPreferenceAuthoritative, setStoredCursorHttp1Enabled, } from "./cursor-http1.js";
|
|
4
4
|
import { buildCursorPiToolBridgeSnapshot, CURSOR_PI_TOOL_BRIDGE_ENV, resolveCursorPiToolBridgeEnabled, } from "./cursor-pi-tool-bridge-snapshot.js";
|
|
5
5
|
import { CURSOR_SETTING_SOURCES_ENV, DEFAULT_CURSOR_SETTING_SOURCES, resolveCursorSettingSources, } from "./cursor-setting-sources.js";
|
|
6
|
+
import { parseEnvBoolean } from "./cursor-env-boolean.js";
|
|
6
7
|
import { isCursorModel } from "./cursor-model.js";
|
|
7
8
|
import { registerCursorModelLifecycle } from "./cursor-model-lifecycle.js";
|
|
8
9
|
import { asRecord } from "./cursor-record-utils.js";
|
|
9
|
-
import { getCursorSessionScopeKey } from "./cursor-session-scope.js";
|
|
10
|
+
import { getCursorSessionScopeSnapshot, getCursorSessionScopeKey } from "./cursor-session-scope.js";
|
|
11
|
+
import { cursorSettingsScopeForContext, getCursorSessionSettings, registerCursorSessionSettings, resetCursorSessionSettingsForTests } from "./cursor-session-settings.js";
|
|
10
12
|
import { refreshSessionCursorAgentConfig } from "./cursor-session-agent.js";
|
|
11
13
|
import { getCursorModelMetadata } from "./model-discovery.js";
|
|
12
|
-
import { cursorFastDefaultsFromConfig, getCursorSdkUserConfigPath, loadCursorSdkUserConfig, mergeCursorSdkConfigForUpdate, resolveCursorFastDefault, updateCursorSdkConfig, } from "./cursor-config.js";
|
|
14
|
+
import { cursorFastDefaultsFromConfig, getCursorSdkUserConfigPath, loadCursorSdkUserConfig, mergeCursorSdkConfigForUpdate, resolveCursorFastDefault, resolveCursorLocalStoreRoot, updateCursorSdkConfig, } from "./cursor-config.js";
|
|
13
15
|
import { CURSOR_RUNTIME_ENTRY_TYPE, formatCursorStatus, registerCursorCloudRuntimeControls, resetCursorRuntimeStateForTests, resolveCursorStatusRuntime, restoreCursorCliState, restoreSessionCursorRuntimeState, } from "./cursor-runtime-state.js";
|
|
14
16
|
export { consumeCursorLocalForceOverride, getCursorCliConfig, getCursorSessionConfig, } from "./cursor-runtime-state.js";
|
|
17
|
+
export const CURSOR_FOOTER_ENV = "PI_CURSOR_FOOTER";
|
|
15
18
|
const FAST_ENTRY_TYPE = "cursor-fast-state";
|
|
16
19
|
const MODE_ENTRY_TYPE = "cursor-mode-state";
|
|
17
20
|
const DEFAULT_CURSOR_AGENT_MODE = "agent";
|
|
18
|
-
const sessionFastPreferences = new Map();
|
|
19
21
|
const authoritativeGlobalFastPreferenceIds = new Set();
|
|
20
22
|
let globalFastPreferences = new Map();
|
|
21
|
-
let cliForceFast = false;
|
|
22
|
-
let cliForceNoFast = false;
|
|
23
|
-
let sessionCursorAgentMode;
|
|
24
|
-
let cliCursorModeState = { kind: "unset" };
|
|
25
23
|
const invalidCursorModeNotifiedSessionScopeKeys = new Set();
|
|
26
24
|
export function isCursorAgentMode(value) {
|
|
27
25
|
return value === "agent" || value === "plan";
|
|
@@ -64,7 +62,8 @@ function saveGlobalCursorHttp1Enabled(enabled) {
|
|
|
64
62
|
local: { useHttp1ForAgent: enabled },
|
|
65
63
|
}), { newFileMode: 0o600 });
|
|
66
64
|
}
|
|
67
|
-
function restoreSessionFastPreferences(branch) {
|
|
65
|
+
function restoreSessionFastPreferences(branch, scopeKey) {
|
|
66
|
+
const sessionFastPreferences = getCursorSessionSettings(scopeKey).fast;
|
|
68
67
|
sessionFastPreferences.clear();
|
|
69
68
|
for (const entry of branch) {
|
|
70
69
|
if (entry.type !== "custom" || entry.customType !== FAST_ENTRY_TYPE)
|
|
@@ -76,30 +75,32 @@ function restoreSessionFastPreferences(branch) {
|
|
|
76
75
|
}
|
|
77
76
|
}
|
|
78
77
|
}
|
|
79
|
-
function restoreSessionCursorMode(branch) {
|
|
80
|
-
|
|
78
|
+
function restoreSessionCursorMode(branch, scopeKey) {
|
|
79
|
+
const state = getCursorSessionSettings(scopeKey);
|
|
80
|
+
state.mode = undefined;
|
|
81
81
|
for (const entry of branch) {
|
|
82
82
|
if (entry.type !== "custom" || entry.customType !== MODE_ENTRY_TYPE)
|
|
83
83
|
continue;
|
|
84
84
|
if (isCursorModeEntryData(entry.data)) {
|
|
85
|
-
|
|
85
|
+
state.mode = entry.data.mode;
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
function restoreSessionCursorPreferences(ctx) {
|
|
90
90
|
const branch = ctx.sessionManager.getBranch();
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
91
|
+
const scopeKey = cursorSettingsScopeForContext(ctx);
|
|
92
|
+
restoreSessionCursorRuntimeState(branch, scopeKey);
|
|
93
|
+
restoreSessionFastPreferences(branch, scopeKey);
|
|
94
|
+
restoreSessionCursorMode(branch, scopeKey);
|
|
95
|
+
restoreSessionCursorHttp1(branch, scopeKey);
|
|
96
|
+
}
|
|
97
|
+
function restoreSessionCursorHttp1(branch, scopeKey) {
|
|
98
|
+
setStoredCursorHttp1Enabled(undefined, scopeKey);
|
|
98
99
|
for (const entry of branch) {
|
|
99
100
|
if (entry.type !== "custom" || entry.customType !== CURSOR_HTTP1_ENTRY_TYPE)
|
|
100
101
|
continue;
|
|
101
102
|
if (isCursorHttp1EntryData(entry.data)) {
|
|
102
|
-
setStoredCursorHttp1Enabled(entry.data.enabled);
|
|
103
|
+
setStoredCursorHttp1Enabled(entry.data.enabled, scopeKey);
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
}
|
|
@@ -113,7 +114,8 @@ function getMapFastPreference(map, metadata) {
|
|
|
113
114
|
const preferenceModelId = getFastPreferenceModelId(metadata);
|
|
114
115
|
return map.get(preferenceModelId) ?? (preferenceModelId !== metadata.baseModelId ? map.get(metadata.baseModelId) : undefined);
|
|
115
116
|
}
|
|
116
|
-
function getEffectiveFast(modelId) {
|
|
117
|
+
function getEffectiveFast(modelId, scopeKey) {
|
|
118
|
+
const { forceNoFast: cliForceNoFast, forceFast: cliForceFast } = getCursorSessionSettings(scopeKey).cli;
|
|
117
119
|
const metadata = getCursorModelMetadata(modelId);
|
|
118
120
|
if (!metadata?.supportsFast)
|
|
119
121
|
return undefined;
|
|
@@ -123,7 +125,7 @@ function getEffectiveFast(modelId) {
|
|
|
123
125
|
aliasOverride: metadata.fastOverride,
|
|
124
126
|
sessionValue: authoritativeGlobalFastPreferenceIds.has(getFastPreferenceModelId(metadata))
|
|
125
127
|
? undefined
|
|
126
|
-
: getMapFastPreference(
|
|
128
|
+
: getMapFastPreference(getCursorSessionSettings(scopeKey).fast, metadata),
|
|
127
129
|
userValue: getMapFastPreference(globalFastPreferences, metadata),
|
|
128
130
|
modelDefault: metadata.defaultFast,
|
|
129
131
|
}).value;
|
|
@@ -131,40 +133,41 @@ function getEffectiveFast(modelId) {
|
|
|
131
133
|
function formatInvalidCursorMode(raw) {
|
|
132
134
|
return `Invalid --cursor-mode "${raw}". Use "agent" or "plan".`;
|
|
133
135
|
}
|
|
134
|
-
export function getStoredCursorAgentMode() {
|
|
135
|
-
return
|
|
136
|
+
export function getStoredCursorAgentMode(scopeKey) {
|
|
137
|
+
return getCursorSessionSettings(scopeKey).mode ?? DEFAULT_CURSOR_AGENT_MODE;
|
|
136
138
|
}
|
|
137
|
-
export function resolveCursorAgentMode() {
|
|
139
|
+
export function resolveCursorAgentMode(scopeKey) {
|
|
140
|
+
const cliCursorModeState = getCursorSessionSettings(scopeKey).cli.mode;
|
|
138
141
|
switch (cliCursorModeState.kind) {
|
|
139
142
|
case "valid":
|
|
140
143
|
return { kind: "valid", mode: cliCursorModeState.mode };
|
|
141
144
|
case "invalid":
|
|
142
145
|
return { kind: "invalid", raw: cliCursorModeState.raw, message: cliCursorModeState.message };
|
|
143
146
|
case "unset":
|
|
144
|
-
return { kind: "valid", mode: getStoredCursorAgentMode() };
|
|
147
|
+
return { kind: "valid", mode: getStoredCursorAgentMode(scopeKey) };
|
|
145
148
|
}
|
|
146
149
|
}
|
|
147
|
-
export function getCursorProviderAgentModeOrThrow() {
|
|
148
|
-
const resolution = resolveCursorAgentMode();
|
|
150
|
+
export function getCursorProviderAgentModeOrThrow(scopeKey) {
|
|
151
|
+
const resolution = resolveCursorAgentMode(scopeKey);
|
|
149
152
|
if (resolution.kind === "invalid")
|
|
150
153
|
throw new Error(resolution.message);
|
|
151
154
|
return resolution.mode;
|
|
152
155
|
}
|
|
153
156
|
function updateCursorStatus(ctx, model = ctx.model) {
|
|
154
|
-
if (!model || !isCursorModel(model)) {
|
|
157
|
+
if (!model || !isCursorModel(model) || !parseEnvBoolean(process.env[CURSOR_FOOTER_ENV], true)) {
|
|
155
158
|
ctx.ui.setStatus("cursor", undefined);
|
|
156
159
|
return;
|
|
157
160
|
}
|
|
158
161
|
const metadata = getCursorModelMetadata(model.id);
|
|
159
162
|
const resolution = resolveCursorStatusRuntime(ctx);
|
|
160
|
-
const modeResolution = resolveCursorAgentMode();
|
|
163
|
+
const modeResolution = resolveCursorAgentMode(cursorSettingsScopeForContext(ctx));
|
|
161
164
|
const mode = modeResolution.kind === "invalid" ? "invalid" : modeResolution.mode;
|
|
162
165
|
if (resolution.kind === "invalid") {
|
|
163
166
|
ctx.ui.setStatus("cursor", formatCursorStatus("invalid", undefined, mode));
|
|
164
167
|
return;
|
|
165
168
|
}
|
|
166
169
|
const runtime = resolution.runtime.value;
|
|
167
|
-
const fast = runtime === "cloud" ? undefined : metadata?.supportsFast ? getEffectiveFast(model.id) : undefined;
|
|
170
|
+
const fast = runtime === "cloud" ? undefined : metadata?.supportsFast ? getEffectiveFast(model.id, cursorSettingsScopeForContext(ctx)) : undefined;
|
|
168
171
|
ctx.ui.setStatus("cursor", formatCursorStatus(runtime, fast, mode, resolution.useHttp1ForAgent.value));
|
|
169
172
|
}
|
|
170
173
|
function getCurrentCursorMetadata(ctx) {
|
|
@@ -181,7 +184,8 @@ function restoreMapValue(map, key, previous) {
|
|
|
181
184
|
map.set(key, previous);
|
|
182
185
|
}
|
|
183
186
|
}
|
|
184
|
-
function persistFastPreference(pi, modelId, fast) {
|
|
187
|
+
function persistFastPreference(pi, modelId, fast, scopeKey) {
|
|
188
|
+
const sessionFastPreferences = getCursorSessionSettings(scopeKey).fast;
|
|
185
189
|
const previousSession = sessionFastPreferences.get(modelId);
|
|
186
190
|
const previousGlobal = globalFastPreferences.get(modelId);
|
|
187
191
|
sessionFastPreferences.set(modelId, fast);
|
|
@@ -204,25 +208,26 @@ function persistFastPreference(pi, modelId, fast) {
|
|
|
204
208
|
return error;
|
|
205
209
|
}
|
|
206
210
|
}
|
|
207
|
-
function persistCursorModePreference(pi, mode) {
|
|
208
|
-
const
|
|
209
|
-
|
|
211
|
+
function persistCursorModePreference(pi, mode, scopeKey) {
|
|
212
|
+
const state = getCursorSessionSettings(scopeKey);
|
|
213
|
+
const previousMode = state.mode;
|
|
214
|
+
state.mode = mode;
|
|
210
215
|
try {
|
|
211
216
|
pi.appendEntry(MODE_ENTRY_TYPE, { mode });
|
|
212
217
|
}
|
|
213
218
|
catch (error) {
|
|
214
|
-
|
|
219
|
+
state.mode = previousMode;
|
|
215
220
|
throw error;
|
|
216
221
|
}
|
|
217
222
|
}
|
|
218
|
-
function persistCursorHttp1Preference(pi, enabled) {
|
|
219
|
-
const previousSession = getStoredCursorHttp1Enabled();
|
|
220
|
-
setStoredCursorHttp1Enabled(enabled);
|
|
223
|
+
function persistCursorHttp1Preference(pi, enabled, scopeKey) {
|
|
224
|
+
const previousSession = getStoredCursorHttp1Enabled(scopeKey);
|
|
225
|
+
setStoredCursorHttp1Enabled(enabled, scopeKey);
|
|
221
226
|
try {
|
|
222
227
|
saveGlobalCursorHttp1Enabled(enabled);
|
|
223
228
|
}
|
|
224
229
|
catch (error) {
|
|
225
|
-
setStoredCursorHttp1Enabled(previousSession);
|
|
230
|
+
setStoredCursorHttp1Enabled(previousSession, scopeKey);
|
|
226
231
|
throw error;
|
|
227
232
|
}
|
|
228
233
|
try {
|
|
@@ -235,24 +240,25 @@ function persistCursorHttp1Preference(pi, enabled) {
|
|
|
235
240
|
return error;
|
|
236
241
|
}
|
|
237
242
|
}
|
|
238
|
-
function restoreCliCursorMode(raw) {
|
|
239
|
-
|
|
243
|
+
function restoreCliCursorMode(raw, scopeKey) {
|
|
244
|
+
const cli = getCursorSessionSettings(scopeKey).cli;
|
|
245
|
+
cli.mode = { kind: "unset" };
|
|
240
246
|
if (raw === undefined || raw === "" || raw === false)
|
|
241
247
|
return;
|
|
242
248
|
const parsed = parseCursorAgentMode(raw);
|
|
243
249
|
if (parsed) {
|
|
244
|
-
|
|
250
|
+
cli.mode = { kind: "valid", mode: parsed };
|
|
245
251
|
return;
|
|
246
252
|
}
|
|
247
253
|
const rawText = String(raw);
|
|
248
254
|
const message = formatInvalidCursorMode(rawText);
|
|
249
|
-
|
|
255
|
+
cli.mode = { kind: "invalid", raw: rawText, message };
|
|
250
256
|
}
|
|
251
257
|
function notifyInvalidCursorModeIfCursorActive(ctx) {
|
|
252
|
-
const modeResolution = resolveCursorAgentMode();
|
|
258
|
+
const modeResolution = resolveCursorAgentMode(cursorSettingsScopeForContext(ctx));
|
|
253
259
|
if (modeResolution.kind !== "invalid" || !ctx.hasUI || ctx.mode !== "tui")
|
|
254
260
|
return;
|
|
255
|
-
const scopeKey = getCursorSessionScopeKey();
|
|
261
|
+
const scopeKey = cursorSettingsScopeForContext(ctx) ?? getCursorSessionScopeKey();
|
|
256
262
|
if (invalidCursorModeNotifiedSessionScopeKeys.has(scopeKey))
|
|
257
263
|
return;
|
|
258
264
|
invalidCursorModeNotifiedSessionScopeKeys.add(scopeKey);
|
|
@@ -293,10 +299,11 @@ function emitCursorToolsDebugReport(pi, ctx) {
|
|
|
293
299
|
}
|
|
294
300
|
console.log(report);
|
|
295
301
|
}
|
|
296
|
-
export function getEffectiveFastForModelId(modelId) {
|
|
297
|
-
return getEffectiveFast(modelId);
|
|
302
|
+
export function getEffectiveFastForModelId(modelId, scopeKey) {
|
|
303
|
+
return getEffectiveFast(modelId, scopeKey);
|
|
298
304
|
}
|
|
299
305
|
export function registerCursorRuntimeControls(pi) {
|
|
306
|
+
registerCursorSessionSettings(pi);
|
|
300
307
|
registerCursorCloudRuntimeControls(pi, { refreshStatus: updateCursorStatus });
|
|
301
308
|
pi.registerFlag("cursor-fast", {
|
|
302
309
|
description: "Force Cursor fast mode for this run when the selected Cursor model supports it",
|
|
@@ -322,6 +329,7 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
322
329
|
ctx.ui.notify(`Fast mode not supported by ${modelName}`, "info");
|
|
323
330
|
return;
|
|
324
331
|
}
|
|
332
|
+
const { forceNoFast: cliForceNoFast, forceFast: cliForceFast } = getCursorSessionSettings(cursorSettingsScopeForContext(ctx)).cli;
|
|
325
333
|
if (cliForceNoFast) {
|
|
326
334
|
ctx.ui.notify("Cursor fast is forced off by --cursor-no-fast", "info");
|
|
327
335
|
return;
|
|
@@ -336,11 +344,11 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
336
344
|
return;
|
|
337
345
|
}
|
|
338
346
|
const preferenceModelId = getFastPreferenceModelId(metadata);
|
|
339
|
-
const current = getEffectiveFast(metadata.piModelId) ?? false;
|
|
347
|
+
const current = getEffectiveFast(metadata.piModelId, cursorSettingsScopeForContext(ctx)) ?? false;
|
|
340
348
|
const next = !current;
|
|
341
349
|
let appendError;
|
|
342
350
|
try {
|
|
343
|
-
appendError = persistFastPreference(pi, preferenceModelId, next);
|
|
351
|
+
appendError = persistFastPreference(pi, preferenceModelId, next, cursorSettingsScopeForContext(ctx));
|
|
344
352
|
}
|
|
345
353
|
catch (error) {
|
|
346
354
|
updateCursorStatus(ctx);
|
|
@@ -389,7 +397,7 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
389
397
|
}
|
|
390
398
|
let appendError;
|
|
391
399
|
try {
|
|
392
|
-
appendError = persistCursorHttp1Preference(pi, next);
|
|
400
|
+
appendError = persistCursorHttp1Preference(pi, next, cursorSettingsScopeForContext(ctx));
|
|
393
401
|
}
|
|
394
402
|
catch (error) {
|
|
395
403
|
updateCursorStatus(ctx);
|
|
@@ -407,7 +415,8 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
407
415
|
pi.registerCommand("cursor-local-resume-cleanup", {
|
|
408
416
|
description: "Dry-run or delete recorded superseded local Cursor SDK agents",
|
|
409
417
|
handler: async (args, ctx) => {
|
|
410
|
-
|
|
418
|
+
const storeRoot = resolveCursorLocalStoreRoot({ user: loadCursorSdkUserConfig() }).value;
|
|
419
|
+
await runCursorSessionAgentCleanupCommand(pi, args, ctx, storeRoot);
|
|
411
420
|
},
|
|
412
421
|
});
|
|
413
422
|
pi.registerCommand("cursor-refresh-config", {
|
|
@@ -418,7 +427,7 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
418
427
|
return;
|
|
419
428
|
}
|
|
420
429
|
try {
|
|
421
|
-
const result = await refreshSessionCursorAgentConfig();
|
|
430
|
+
const result = await refreshSessionCursorAgentConfig(getCursorSessionScopeSnapshot(pi).scopeKey);
|
|
422
431
|
const messages = {
|
|
423
432
|
reloaded: "Cursor SDK agent config refreshed.",
|
|
424
433
|
"no-agent": "No Cursor SDK agent exists yet; config will load on the next Cursor run.",
|
|
@@ -438,7 +447,7 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
438
447
|
const usage = "Usage: /cursor-mode agent|plan";
|
|
439
448
|
const mode = parseCursorAgentMode(args);
|
|
440
449
|
if (!args.trim()) {
|
|
441
|
-
const modeResolution = resolveCursorAgentMode();
|
|
450
|
+
const modeResolution = resolveCursorAgentMode(cursorSettingsScopeForContext(ctx));
|
|
442
451
|
if (modeResolution.kind === "invalid") {
|
|
443
452
|
ctx.ui.notify(`${modeResolution.message} ${usage}`, "error");
|
|
444
453
|
}
|
|
@@ -451,15 +460,17 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
451
460
|
ctx.ui.notify(`Invalid Cursor mode "${args.trim()}". ${usage}`, "error");
|
|
452
461
|
return;
|
|
453
462
|
}
|
|
463
|
+
const cli = getCursorSessionSettings(cursorSettingsScopeForContext(ctx)).cli;
|
|
464
|
+
const cliCursorModeState = cli.mode;
|
|
454
465
|
if (cliCursorModeState.kind === "valid") {
|
|
455
466
|
ctx.ui.notify(`Cursor mode is forced to ${cliCursorModeState.mode} by --cursor-mode`, "info");
|
|
456
467
|
return;
|
|
457
468
|
}
|
|
458
469
|
const clearedInvalidCliMode = cliCursorModeState.kind === "invalid";
|
|
459
470
|
try {
|
|
460
|
-
persistCursorModePreference(pi, mode);
|
|
471
|
+
persistCursorModePreference(pi, mode, cursorSettingsScopeForContext(ctx));
|
|
461
472
|
if (clearedInvalidCliMode)
|
|
462
|
-
|
|
473
|
+
cli.mode = { kind: "unset" };
|
|
463
474
|
}
|
|
464
475
|
catch (error) {
|
|
465
476
|
updateCursorStatus(ctx);
|
|
@@ -481,11 +492,13 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
481
492
|
authoritativeGlobalFastPreferenceIds.clear();
|
|
482
493
|
setCursorHttp1GlobalPreferenceAuthoritative(false);
|
|
483
494
|
globalFastPreferences = loadGlobalFastPreferences();
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
495
|
+
const scopeKey = cursorSettingsScopeForContext(ctx);
|
|
496
|
+
const cli = getCursorSessionSettings(scopeKey).cli;
|
|
497
|
+
cli.forceFast = pi.getFlag("cursor-fast") === true;
|
|
498
|
+
cli.forceNoFast = pi.getFlag("cursor-no-fast") === true;
|
|
499
|
+
restoreCursorCliState(pi, scopeKey);
|
|
487
500
|
restoreSessionCursorPreferences(ctx);
|
|
488
|
-
restoreCliCursorMode(pi.getFlag("cursor-mode"));
|
|
501
|
+
restoreCliCursorMode(pi.getFlag("cursor-mode"), scopeKey);
|
|
489
502
|
},
|
|
490
503
|
sync: (ctx) => {
|
|
491
504
|
if (isCursorModel(ctx.model))
|
|
@@ -495,10 +508,10 @@ export function registerCursorRuntimeControls(pi) {
|
|
|
495
508
|
});
|
|
496
509
|
}
|
|
497
510
|
function resetCursorModeStateForTests() {
|
|
498
|
-
|
|
511
|
+
resetCursorSessionSettingsForTests();
|
|
499
512
|
setCursorHttp1GlobalPreferenceAuthoritative(false);
|
|
500
513
|
setStoredCursorHttp1Enabled(undefined);
|
|
501
|
-
|
|
514
|
+
getCursorSessionSettings().cli.mode = { kind: "unset" };
|
|
502
515
|
resetCursorRuntimeStateForTests();
|
|
503
516
|
invalidCursorModeNotifiedSessionScopeKeys.clear();
|
|
504
517
|
authoritativeGlobalFastPreferenceIds.clear();
|
|
@@ -511,9 +524,9 @@ export const __testUtils = {
|
|
|
511
524
|
DEFAULT_CURSOR_AGENT_MODE,
|
|
512
525
|
getConfigPath,
|
|
513
526
|
loadGlobalFastPreferences,
|
|
514
|
-
sessionFastPreferences,
|
|
515
|
-
getSessionCursorAgentMode: () =>
|
|
516
|
-
getCliCursorAgentMode: () => (
|
|
517
|
-
getCliCursorModeState: () =>
|
|
527
|
+
get sessionFastPreferences() { return getCursorSessionSettings().fast; },
|
|
528
|
+
getSessionCursorAgentMode: () => getCursorSessionSettings().mode,
|
|
529
|
+
getCliCursorAgentMode: () => { const mode = getCursorSessionSettings().cli.mode; return mode.kind === "valid" ? mode.mode : undefined; },
|
|
530
|
+
getCliCursorModeState: () => getCursorSessionSettings().cli.mode,
|
|
518
531
|
resetCursorModeStateForTests,
|
|
519
532
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseEnvBoolean } from "./cursor-env-boolean.js";
|
|
2
2
|
export const CURSOR_TOOL_MANIFEST_ENV = "PI_CURSOR_TOOL_MANIFEST";
|
|
3
3
|
/**
|
|
4
|
-
* Representative
|
|
4
|
+
* Representative Cursor SDK local-agent ToolType values; actual exposure can vary by run.
|
|
5
5
|
* See docs/cursor-native-tool-replay.md#sdk-tooltype-replay-matrix.
|
|
6
6
|
*/
|
|
7
7
|
export const CURSOR_HOST_TOOL_MANIFEST_SUMMARY = "read/shell/search/edit/write and other host tools when Cursor exposes them";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { calculateCost } from "@earendil-works/pi-ai";
|
|
1
2
|
import { CURSOR_APPROX_CHARS_PER_TOKEN, CURSOR_IMAGE_TOKEN_ESTIMATE, estimateCursorContextTokens, estimateCursorTextTokens, } from "./context.js";
|
|
2
3
|
import { asRecord, getNumber } from "./cursor-record-utils.js";
|
|
3
4
|
function getPromptInputTokenBudget(model) {
|
|
@@ -81,86 +82,28 @@ export function applyCursorSdkUsage(partial, turnUsage) {
|
|
|
81
82
|
partial.usage.output = turnUsage.outputTokens;
|
|
82
83
|
partial.usage.cacheRead = turnUsage.cacheReadTokens;
|
|
83
84
|
partial.usage.cacheWrite = turnUsage.cacheWriteTokens;
|
|
84
|
-
//
|
|
85
|
+
// Full prompt + output equals the sum of Pi's disjoint components.
|
|
85
86
|
partial.usage.totalTokens = turnUsage.inputTokens + turnUsage.outputTokens;
|
|
86
87
|
}
|
|
87
|
-
function
|
|
88
|
-
return assistant.api === model.api && assistant.provider === model.provider && assistant.model === model.id;
|
|
89
|
-
}
|
|
90
|
-
function getLatestCompactionBoundary(context) {
|
|
91
|
-
for (let index = context.messages.length - 1; index >= 0; index -= 1) {
|
|
92
|
-
const message = context.messages[index];
|
|
93
|
-
if (message.role !== "compactionSummary")
|
|
94
|
-
continue;
|
|
95
|
-
const tokensBefore = message.tokensBefore;
|
|
96
|
-
return {
|
|
97
|
-
index,
|
|
98
|
-
tokensBefore: Number.isFinite(tokensBefore) && tokensBefore !== undefined && tokensBefore > 0 ? Math.floor(tokensBefore) : undefined,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
return undefined;
|
|
102
|
-
}
|
|
103
|
-
function getLastAcceptedContextOccupancy(context, model) {
|
|
104
|
-
const boundary = getLatestCompactionBoundary(context);
|
|
105
|
-
for (let index = context.messages.length - 1; index >= 0; index -= 1) {
|
|
106
|
-
if (boundary && index < boundary.index)
|
|
107
|
-
break;
|
|
108
|
-
const message = context.messages[index];
|
|
109
|
-
if (message.role !== "assistant" || !("usage" in message))
|
|
110
|
-
continue;
|
|
111
|
-
const assistant = message;
|
|
112
|
-
if (assistant.stopReason === "aborted" || assistant.stopReason === "error" || !assistant.usage)
|
|
113
|
-
continue;
|
|
114
|
-
if (!isCompatibleCursorAssistantMeasurement(assistant, model))
|
|
115
|
-
continue;
|
|
116
|
-
const { usage } = assistant;
|
|
117
|
-
const total = usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
|
|
118
|
-
if (!Number.isFinite(total) || total <= 0 || total > model.contextWindow)
|
|
119
|
-
continue;
|
|
120
|
-
if (boundary?.tokensBefore !== undefined && total >= boundary.tokensBefore)
|
|
121
|
-
continue;
|
|
122
|
-
return total;
|
|
123
|
-
}
|
|
124
|
-
return 0;
|
|
125
|
-
}
|
|
126
|
-
export function applyCursorApproximateUsage(partial, model, context, sessionInputTokens) {
|
|
88
|
+
export function applyCursorApproximateUsage(partial, model, context, sessionInputTokens, occupancyFloor) {
|
|
127
89
|
const outputTokens = estimateCursorAssistantSessionOutputTokens(partial);
|
|
128
|
-
|
|
90
|
+
const floor = occupancyFloor !== undefined && Number.isFinite(occupancyFloor) && occupancyFloor > 0 && occupancyFloor <= model.contextWindow ? occupancyFloor : 0;
|
|
91
|
+
const totalTokens = Math.max(Math.max(0, sessionInputTokens) + outputTokens, estimateCursorContextTotalTokens(partial, model, context), floor);
|
|
92
|
+
// Estimated prompt components describe the same occupancy as totalTokens.
|
|
93
|
+
partial.usage.input = totalTokens - outputTokens;
|
|
129
94
|
partial.usage.output = outputTokens;
|
|
130
95
|
partial.usage.cacheRead = 0;
|
|
131
96
|
partial.usage.cacheWrite = 0;
|
|
132
|
-
|
|
133
|
-
partial.usage.totalTokens = Math.max(partial.usage.input + partial.usage.output, estimateCursorContextTotalTokens(partial, model, context), getLastAcceptedContextOccupancy(context, model));
|
|
134
|
-
}
|
|
135
|
-
function applyCursorOccupancyEstimate(partial, model, context) {
|
|
136
|
-
partial.usage.totalTokens = Math.max(estimateCursorContextTotalTokens(partial, model, context), getLastAcceptedContextOccupancy(context, model));
|
|
137
|
-
}
|
|
138
|
-
function isCurrentLocalOccupancy(turn, model, context) {
|
|
139
|
-
if (!isCursorSdkUsageSafeForPiMessage(turn, model))
|
|
140
|
-
return false;
|
|
141
|
-
const tokensBefore = getLatestCompactionBoundary(context)?.tokensBefore;
|
|
142
|
-
return tokensBefore === undefined || turn.inputTokens + turn.outputTokens < tokensBefore;
|
|
143
|
-
}
|
|
144
|
-
function applyResolvedCursorOccupancy(partial, model, context, localTurn) {
|
|
145
|
-
if (localTurn && isCurrentLocalOccupancy(localTurn, model, context)) {
|
|
146
|
-
partial.usage.totalTokens = localTurn.inputTokens + localTurn.outputTokens;
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
applyCursorOccupancyEstimate(partial, model, context);
|
|
97
|
+
partial.usage.totalTokens = totalTokens;
|
|
150
98
|
}
|
|
151
99
|
export function applyCursorUsage(partial, model, context, sessionInputTokens, sdkUsage) {
|
|
152
|
-
const billed = sdkUsage?.billed;
|
|
153
100
|
const localTurn = sdkUsage?.runtime === "local" ? sdkUsage.turn : undefined;
|
|
154
|
-
if (billed && isCursorSdkUsagePartitionSafe(billed, model)) {
|
|
155
|
-
applyCursorSdkUsage(partial, billed);
|
|
156
|
-
applyResolvedCursorOccupancy(partial, model, context, localTurn);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
// Only local raw turn-ended usage has a captured full-prompt/cache-partition occupancy contract.
|
|
160
101
|
if (localTurn && isCursorSdkUsageSafeForPiMessage(localTurn, model)) {
|
|
102
|
+
// Fresh LOCAL occupancy supersedes any previous request-provenance floor.
|
|
161
103
|
applyCursorSdkUsage(partial, localTurn);
|
|
162
|
-
applyResolvedCursorOccupancy(partial, model, context, localTurn);
|
|
163
|
-
return;
|
|
164
104
|
}
|
|
165
|
-
|
|
105
|
+
else {
|
|
106
|
+
applyCursorApproximateUsage(partial, model, context, sessionInputTokens, sdkUsage?.occupancyFloor);
|
|
107
|
+
}
|
|
108
|
+
calculateCost(model, partial.usage);
|
|
166
109
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { closeSync, constants, fsyncSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { createRegularFileExclusive } from "./cursor-durable-fs.js";
|
|
4
|
+
import { fetchCursorSdkAgentUsage } from "./cursor-sdk-billed-usage.js";
|
|
5
|
+
import { resolveCursorApiKey } from "./cursor-api-key.js";
|
|
6
|
+
import { loadCursorSdk } from "./cursor-sdk-runtime.js";
|
|
7
|
+
import { readCursorUsageView, refreshCursorUsageView } from "./cursor-usage-ledger.js";
|
|
8
|
+
const HELP = [
|
|
9
|
+
"/cursor-usage — current branch telemetry (native footer unchanged)",
|
|
10
|
+
"/cursor-usage refresh — public getUsage only; up to 32 agents, 5 seconds each; no model sends or automatic polling",
|
|
11
|
+
"/cursor-usage export <new-file.json> — exclusive private JSON export; never overwrites a file",
|
|
12
|
+
"/cursor-usage help — this help",
|
|
13
|
+
"Storage ceiling: 16MiB per origin session. At the ceiling or after an incomplete trailing frame, new sends fail before spend. A torn tail is retained unchanged; view/export preserve validated prior frames and mark accounting incomplete. Malformed complete frames remain fail-closed.",
|
|
14
|
+
"Recovery: export readable facts and retain the original journal/session unchanged. Use Pi's native fork to preserve the conversation under a new session origin, or start a new native session. Never delete, truncate, or rewrite journals or native sessions to continue the old origin.",
|
|
15
|
+
"Other-branch facts have valid native claims elsewhere in this session; unclaimed facts have no surviving claim here and are not branch usage. Inherited records without a claim in this session retain unknown ownership; no sibling sessions are scanned. Fileless sessions are ephemeral.",
|
|
16
|
+
].join("\n");
|
|
17
|
+
export function renderCursorUsageView(view) {
|
|
18
|
+
return [
|
|
19
|
+
`Cursor usage — ${view.durability}; persistence ${view.persistenceStatus}; current branch telemetry`,
|
|
20
|
+
view.nativeConfiguredEstimates,
|
|
21
|
+
`Recorded corrected LOCAL raw tokens: ${view.correctedRawTotal.totalTokens} (input ${view.correctedRawTotal.inputTokens}, cache read ${view.correctedRawTotal.cacheReadTokens}, cache write ${view.correctedRawTotal.cacheWriteTokens}, output ${view.correctedRawTotal.outputTokens}).`,
|
|
22
|
+
`Original telemetry: ${view.records.filter(record => record.kind === "raw").length} raw turns; normalization unavailable/invalid: ${view.records.filter(record => record.kind === "raw" && !record.corrected).length}; ${view.records.filter(record => record.kind === "terminal").length} terminal facts (not added to raw).`,
|
|
23
|
+
`Other-branch journal records: ${view.otherBranchRecords.length}; unclaimed records: ${view.unclaimedRecords.length}; inherited records with unknown claim ownership: ${view.inheritedUnclaimedRecords.length}; inherited journal gaps: ${view.lineageGaps.length}; incomplete trailing frames: ${view.incompleteJournals.length}. Export retains these facts without billing them to this branch.`,
|
|
24
|
+
...view.lineageGaps,
|
|
25
|
+
...view.agents.slice(0, 32).map(agent => {
|
|
26
|
+
const missing = agent.billingStatus === "ambiguous-shared-lineage" ? "ambiguous" : agent.billingStatus === "unavailable" ? "unavailable" : agent.billingStatus === "pending" ? "pending" : "unknown";
|
|
27
|
+
const remainder = agent.billingStatus === "ambiguous-shared-lineage" ? "ambiguous" : agent.observationsByOrigin.some(observation => observation.incompleteHistory) ? "unknown (incomplete run history)" : agent.aggregateOnly?.totalTokens ?? missing;
|
|
28
|
+
return [
|
|
29
|
+
`${agent.agentId}: ${agent.billingStatus}${agent.unknownHistory ? "; unknown historical baseline" : ""}`,
|
|
30
|
+
agent.sharedAcrossBranches ? "; shared lineage, not attributable to this branch" : "; whole-agent facts, no client-run billing join",
|
|
31
|
+
`. Latest known billed tokens: ${agent.latestAggregate?.usage.totalTokens ?? missing}; SDK charged cents: ${agent.latestAggregate ? agent.latestAggregate.cost?.chargedCents ?? "not reported" : missing}; aggregate-only tokens: ${remainder}.`,
|
|
32
|
+
...agent.observationsByOrigin.map(observation => {
|
|
33
|
+
const absent = observation.lastAttempt.status === "unavailable" ? "unavailable" : "unknown";
|
|
34
|
+
return ` Origin ${observation.origin.sessionId}: ${observation.lastAttempt.status}${observation.incompleteHistory ? "; incomplete run history" : ""}; latest known billed tokens ${observation.latestAggregate?.usage.totalTokens ?? absent}; charged cents ${observation.latestAggregate ? observation.latestAggregate.cost?.chargedCents ?? "not reported" : absent}.`;
|
|
35
|
+
}),
|
|
36
|
+
].join("");
|
|
37
|
+
}),
|
|
38
|
+
...(view.agents.length > 32 ? [`${view.agents.length - 32} further agents retained in export.`] : []),
|
|
39
|
+
"Snapshots are observations, not final invoices. Multiple origin journals have no qualified global revision ordering. Cloud raw normalization is unqualified.",
|
|
40
|
+
`Journal ceiling: ${view.journalLimit}. See /cursor-usage help for recovery. Export contains no prompts or tool content.`,
|
|
41
|
+
].join("\n");
|
|
42
|
+
}
|
|
43
|
+
export function registerCursorUsageCommand(pi) {
|
|
44
|
+
pi.registerCommand("cursor-usage", {
|
|
45
|
+
description: "View Cursor telemetry; refresh public billing or export to a new JSON file",
|
|
46
|
+
handler: async (args, ctx) => {
|
|
47
|
+
const show = (message, error = false) => {
|
|
48
|
+
if (ctx.hasUI)
|
|
49
|
+
ctx.ui.notify(message, error ? "error" : "info");
|
|
50
|
+
else
|
|
51
|
+
process.stderr.write(`${message}\n`); // Keep non-UI stdout/RPC framing untouched.
|
|
52
|
+
};
|
|
53
|
+
try {
|
|
54
|
+
const argument = args.trim();
|
|
55
|
+
if (["help", "-h", "--help"].includes(argument)) {
|
|
56
|
+
show(HELP);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (argument && argument !== "refresh" && !argument.startsWith("export ")) {
|
|
60
|
+
show(HELP, true);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
let view = readCursorUsageView(pi, ctx);
|
|
64
|
+
if (argument === "refresh") {
|
|
65
|
+
const { Agent } = await loadCursorSdk();
|
|
66
|
+
const apiKey = resolveCursorApiKey(await ctx.modelRegistry.getApiKeyForProvider("cursor"));
|
|
67
|
+
view = await refreshCursorUsageView(pi, ctx, agentId => fetchCursorSdkAgentUsage({ getUsage: () => Agent.getUsage(agentId, { apiKey }) }));
|
|
68
|
+
}
|
|
69
|
+
else if (argument.startsWith("export ")) {
|
|
70
|
+
const path = resolve(ctx.cwd, argument.slice(7).trim());
|
|
71
|
+
const fd = createRegularFileExclusive(path, constants.O_WRONLY, 0o600);
|
|
72
|
+
try {
|
|
73
|
+
writeFileSync(fd, `${JSON.stringify(view, null, 2)}\n`);
|
|
74
|
+
fsyncSync(fd);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
closeSync(fd);
|
|
78
|
+
}
|
|
79
|
+
show(`Cursor usage exported to ${path}.`);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
show(renderCursorUsageView(view));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
show("Cursor usage could not be read, persisted, refreshed, or exported. Existing files were not replaced; accounting may be incomplete. See /cursor-usage help for storage limits and recovery.", true);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
}
|