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/src/cursor-state.ts
CHANGED
|
@@ -24,10 +24,12 @@ import {
|
|
|
24
24
|
DEFAULT_CURSOR_SETTING_SOURCES,
|
|
25
25
|
resolveCursorSettingSources,
|
|
26
26
|
} from "./cursor-setting-sources.js";
|
|
27
|
+
import { parseEnvBoolean } from "./cursor-env-boolean.js";
|
|
27
28
|
import { isCursorModel } from "./cursor-model.js";
|
|
28
29
|
import { registerCursorModelLifecycle } from "./cursor-model-lifecycle.js";
|
|
29
30
|
import { asRecord } from "./cursor-record-utils.js";
|
|
30
|
-
import { getCursorSessionScopeKey } from "./cursor-session-scope.js";
|
|
31
|
+
import { getCursorSessionScopeSnapshot, getCursorSessionScopeKey } from "./cursor-session-scope.js";
|
|
32
|
+
import { cursorSettingsScopeForContext, getCursorSessionSettings, registerCursorSessionSettings, resetCursorSessionSettingsForTests } from "./cursor-session-settings.js";
|
|
31
33
|
import { refreshSessionCursorAgentConfig } from "./cursor-session-agent.js";
|
|
32
34
|
import { getCursorModelMetadata } from "./model-discovery.js";
|
|
33
35
|
import {
|
|
@@ -36,6 +38,7 @@ import {
|
|
|
36
38
|
loadCursorSdkUserConfig,
|
|
37
39
|
mergeCursorSdkConfigForUpdate,
|
|
38
40
|
resolveCursorFastDefault,
|
|
41
|
+
resolveCursorLocalStoreRoot,
|
|
39
42
|
updateCursorSdkConfig,
|
|
40
43
|
} from "./cursor-config.js";
|
|
41
44
|
import {
|
|
@@ -58,6 +61,8 @@ export {
|
|
|
58
61
|
getCursorSessionConfig,
|
|
59
62
|
} from "./cursor-runtime-state.js";
|
|
60
63
|
|
|
64
|
+
export const CURSOR_FOOTER_ENV = "PI_CURSOR_FOOTER";
|
|
65
|
+
|
|
61
66
|
const FAST_ENTRY_TYPE = "cursor-fast-state";
|
|
62
67
|
const MODE_ENTRY_TYPE = "cursor-mode-state";
|
|
63
68
|
|
|
@@ -80,18 +85,8 @@ type CursorRuntimeControlsExtensionApi = Pick<
|
|
|
80
85
|
"appendEntry" | "getFlag" | "registerFlag" | "registerCommand" | "on" | "getActiveTools" | "getAllTools"
|
|
81
86
|
> & CursorRuntimeStateExtensionApi;
|
|
82
87
|
|
|
83
|
-
type CursorCliModeState =
|
|
84
|
-
| { kind: "unset" }
|
|
85
|
-
| { kind: "valid"; mode: AgentModeOption }
|
|
86
|
-
| { kind: "invalid"; raw: string; message: string };
|
|
87
|
-
|
|
88
|
-
const sessionFastPreferences = new Map<string, boolean>();
|
|
89
88
|
const authoritativeGlobalFastPreferenceIds = new Set<string>();
|
|
90
89
|
let globalFastPreferences = new Map<string, boolean>();
|
|
91
|
-
let cliForceFast = false;
|
|
92
|
-
let cliForceNoFast = false;
|
|
93
|
-
let sessionCursorAgentMode: AgentModeOption | undefined;
|
|
94
|
-
let cliCursorModeState: CursorCliModeState = { kind: "unset" };
|
|
95
90
|
const invalidCursorModeNotifiedSessionScopeKeys = new Set<string>();
|
|
96
91
|
|
|
97
92
|
export function isCursorAgentMode(value: unknown): value is AgentModeOption {
|
|
@@ -152,7 +147,8 @@ function saveGlobalCursorHttp1Enabled(enabled: boolean): void {
|
|
|
152
147
|
);
|
|
153
148
|
}
|
|
154
149
|
|
|
155
|
-
function restoreSessionFastPreferences(branch: readonly SessionEntry[]): void {
|
|
150
|
+
function restoreSessionFastPreferences(branch: readonly SessionEntry[], scopeKey?: string): void {
|
|
151
|
+
const sessionFastPreferences = getCursorSessionSettings(scopeKey).fast;
|
|
156
152
|
sessionFastPreferences.clear();
|
|
157
153
|
for (const entry of branch) {
|
|
158
154
|
if (entry.type !== "custom" || entry.customType !== FAST_ENTRY_TYPE) continue;
|
|
@@ -163,30 +159,32 @@ function restoreSessionFastPreferences(branch: readonly SessionEntry[]): void {
|
|
|
163
159
|
}
|
|
164
160
|
}
|
|
165
161
|
|
|
166
|
-
function restoreSessionCursorMode(branch: readonly SessionEntry[]): void {
|
|
167
|
-
|
|
162
|
+
function restoreSessionCursorMode(branch: readonly SessionEntry[], scopeKey?: string): void {
|
|
163
|
+
const state = getCursorSessionSettings(scopeKey);
|
|
164
|
+
state.mode = undefined;
|
|
168
165
|
for (const entry of branch) {
|
|
169
166
|
if (entry.type !== "custom" || entry.customType !== MODE_ENTRY_TYPE) continue;
|
|
170
167
|
if (isCursorModeEntryData(entry.data)) {
|
|
171
|
-
|
|
168
|
+
state.mode = entry.data.mode;
|
|
172
169
|
}
|
|
173
170
|
}
|
|
174
171
|
}
|
|
175
172
|
|
|
176
|
-
function restoreSessionCursorPreferences(ctx:
|
|
173
|
+
function restoreSessionCursorPreferences(ctx: Pick<ExtensionContext, "sessionManager">): void {
|
|
177
174
|
const branch = ctx.sessionManager.getBranch();
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
175
|
+
const scopeKey = cursorSettingsScopeForContext(ctx);
|
|
176
|
+
restoreSessionCursorRuntimeState(branch, scopeKey);
|
|
177
|
+
restoreSessionFastPreferences(branch, scopeKey);
|
|
178
|
+
restoreSessionCursorMode(branch, scopeKey);
|
|
179
|
+
restoreSessionCursorHttp1(branch, scopeKey);
|
|
182
180
|
}
|
|
183
181
|
|
|
184
|
-
function restoreSessionCursorHttp1(branch: readonly SessionEntry[]): void {
|
|
185
|
-
setStoredCursorHttp1Enabled(undefined);
|
|
182
|
+
function restoreSessionCursorHttp1(branch: readonly SessionEntry[], scopeKey?: string): void {
|
|
183
|
+
setStoredCursorHttp1Enabled(undefined, scopeKey);
|
|
186
184
|
for (const entry of branch) {
|
|
187
185
|
if (entry.type !== "custom" || entry.customType !== CURSOR_HTTP1_ENTRY_TYPE) continue;
|
|
188
186
|
if (isCursorHttp1EntryData(entry.data)) {
|
|
189
|
-
setStoredCursorHttp1Enabled(entry.data.enabled);
|
|
187
|
+
setStoredCursorHttp1Enabled(entry.data.enabled, scopeKey);
|
|
190
188
|
}
|
|
191
189
|
}
|
|
192
190
|
}
|
|
@@ -207,7 +205,8 @@ function getMapFastPreference(
|
|
|
207
205
|
return map.get(preferenceModelId) ?? (preferenceModelId !== metadata.baseModelId ? map.get(metadata.baseModelId) : undefined);
|
|
208
206
|
}
|
|
209
207
|
|
|
210
|
-
function getEffectiveFast(modelId: string): boolean | undefined {
|
|
208
|
+
function getEffectiveFast(modelId: string, scopeKey?: string): boolean | undefined {
|
|
209
|
+
const { forceNoFast: cliForceNoFast, forceFast: cliForceFast } = getCursorSessionSettings(scopeKey).cli;
|
|
211
210
|
const metadata = getCursorModelMetadata(modelId);
|
|
212
211
|
if (!metadata?.supportsFast) return undefined;
|
|
213
212
|
return resolveCursorFastDefault({
|
|
@@ -216,7 +215,7 @@ function getEffectiveFast(modelId: string): boolean | undefined {
|
|
|
216
215
|
aliasOverride: metadata.fastOverride,
|
|
217
216
|
sessionValue: authoritativeGlobalFastPreferenceIds.has(getFastPreferenceModelId(metadata))
|
|
218
217
|
? undefined
|
|
219
|
-
: getMapFastPreference(
|
|
218
|
+
: getMapFastPreference(getCursorSessionSettings(scopeKey).fast, metadata),
|
|
220
219
|
userValue: getMapFastPreference(globalFastPreferences, metadata),
|
|
221
220
|
modelDefault: metadata.defaultFast,
|
|
222
221
|
}).value;
|
|
@@ -230,44 +229,45 @@ export type CursorAgentModeResolution =
|
|
|
230
229
|
| { kind: "valid"; mode: AgentModeOption }
|
|
231
230
|
| { kind: "invalid"; raw: string; message: string };
|
|
232
231
|
|
|
233
|
-
export function getStoredCursorAgentMode(): AgentModeOption {
|
|
234
|
-
return
|
|
232
|
+
export function getStoredCursorAgentMode(scopeKey?: string): AgentModeOption {
|
|
233
|
+
return getCursorSessionSettings(scopeKey).mode ?? DEFAULT_CURSOR_AGENT_MODE;
|
|
235
234
|
}
|
|
236
235
|
|
|
237
|
-
export function resolveCursorAgentMode(): CursorAgentModeResolution {
|
|
236
|
+
export function resolveCursorAgentMode(scopeKey?: string): CursorAgentModeResolution {
|
|
237
|
+
const cliCursorModeState = getCursorSessionSettings(scopeKey).cli.mode;
|
|
238
238
|
switch (cliCursorModeState.kind) {
|
|
239
239
|
case "valid":
|
|
240
240
|
return { kind: "valid", mode: cliCursorModeState.mode };
|
|
241
241
|
case "invalid":
|
|
242
242
|
return { kind: "invalid", raw: cliCursorModeState.raw, message: cliCursorModeState.message };
|
|
243
243
|
case "unset":
|
|
244
|
-
return { kind: "valid", mode: getStoredCursorAgentMode() };
|
|
244
|
+
return { kind: "valid", mode: getStoredCursorAgentMode(scopeKey) };
|
|
245
245
|
}
|
|
246
246
|
}
|
|
247
247
|
|
|
248
|
-
export function getCursorProviderAgentModeOrThrow(): AgentModeOption {
|
|
249
|
-
const resolution = resolveCursorAgentMode();
|
|
248
|
+
export function getCursorProviderAgentModeOrThrow(scopeKey?: string): AgentModeOption {
|
|
249
|
+
const resolution = resolveCursorAgentMode(scopeKey);
|
|
250
250
|
if (resolution.kind === "invalid") throw new Error(resolution.message);
|
|
251
251
|
return resolution.mode;
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
-
type CursorStatusContext = Pick<ExtensionContext, "cwd"> & Partial<Pick<ExtensionContext, "isProjectTrusted">>;
|
|
254
|
+
type CursorStatusContext = Pick<ExtensionContext, "cwd"> & Partial<Pick<ExtensionContext, "isProjectTrusted" | "sessionManager">>;
|
|
255
255
|
|
|
256
256
|
function updateCursorStatus(ctx: CursorStatusContext & Pick<ExtensionContext, "model" | "ui">, model = ctx.model): void {
|
|
257
|
-
if (!model || !isCursorModel(model)) {
|
|
257
|
+
if (!model || !isCursorModel(model) || !parseEnvBoolean(process.env[CURSOR_FOOTER_ENV], true)) {
|
|
258
258
|
ctx.ui.setStatus("cursor", undefined);
|
|
259
259
|
return;
|
|
260
260
|
}
|
|
261
261
|
const metadata = getCursorModelMetadata(model.id);
|
|
262
262
|
const resolution = resolveCursorStatusRuntime(ctx);
|
|
263
|
-
const modeResolution = resolveCursorAgentMode();
|
|
263
|
+
const modeResolution = resolveCursorAgentMode(cursorSettingsScopeForContext(ctx));
|
|
264
264
|
const mode = modeResolution.kind === "invalid" ? "invalid" : modeResolution.mode;
|
|
265
265
|
if (resolution.kind === "invalid") {
|
|
266
266
|
ctx.ui.setStatus("cursor", formatCursorStatus("invalid", undefined, mode));
|
|
267
267
|
return;
|
|
268
268
|
}
|
|
269
269
|
const runtime = resolution.runtime.value;
|
|
270
|
-
const fast = runtime === "cloud" ? undefined : metadata?.supportsFast ? getEffectiveFast(model.id) : undefined;
|
|
270
|
+
const fast = runtime === "cloud" ? undefined : metadata?.supportsFast ? getEffectiveFast(model.id, cursorSettingsScopeForContext(ctx)) : undefined;
|
|
271
271
|
ctx.ui.setStatus(
|
|
272
272
|
"cursor",
|
|
273
273
|
formatCursorStatus(runtime, fast, mode, resolution.useHttp1ForAgent.value),
|
|
@@ -292,7 +292,9 @@ function persistFastPreference(
|
|
|
292
292
|
pi: Pick<ExtensionAPI, "appendEntry">,
|
|
293
293
|
modelId: string,
|
|
294
294
|
fast: boolean,
|
|
295
|
+
scopeKey: string | undefined,
|
|
295
296
|
): unknown | undefined {
|
|
297
|
+
const sessionFastPreferences = getCursorSessionSettings(scopeKey).fast;
|
|
296
298
|
const previousSession = sessionFastPreferences.get(modelId);
|
|
297
299
|
const previousGlobal = globalFastPreferences.get(modelId);
|
|
298
300
|
sessionFastPreferences.set(modelId, fast);
|
|
@@ -314,13 +316,14 @@ function persistFastPreference(
|
|
|
314
316
|
}
|
|
315
317
|
}
|
|
316
318
|
|
|
317
|
-
function persistCursorModePreference(pi: Pick<ExtensionAPI, "appendEntry">, mode: AgentModeOption): void {
|
|
318
|
-
const
|
|
319
|
-
|
|
319
|
+
function persistCursorModePreference(pi: Pick<ExtensionAPI, "appendEntry">, mode: AgentModeOption, scopeKey: string | undefined): void {
|
|
320
|
+
const state = getCursorSessionSettings(scopeKey);
|
|
321
|
+
const previousMode = state.mode;
|
|
322
|
+
state.mode = mode;
|
|
320
323
|
try {
|
|
321
324
|
pi.appendEntry<CursorModeEntryData>(MODE_ENTRY_TYPE, { mode });
|
|
322
325
|
} catch (error) {
|
|
323
|
-
|
|
326
|
+
state.mode = previousMode;
|
|
324
327
|
throw error;
|
|
325
328
|
}
|
|
326
329
|
}
|
|
@@ -328,13 +331,14 @@ function persistCursorModePreference(pi: Pick<ExtensionAPI, "appendEntry">, mode
|
|
|
328
331
|
function persistCursorHttp1Preference(
|
|
329
332
|
pi: Pick<ExtensionAPI, "appendEntry">,
|
|
330
333
|
enabled: boolean,
|
|
334
|
+
scopeKey: string | undefined,
|
|
331
335
|
): unknown | undefined {
|
|
332
|
-
const previousSession = getStoredCursorHttp1Enabled();
|
|
333
|
-
setStoredCursorHttp1Enabled(enabled);
|
|
336
|
+
const previousSession = getStoredCursorHttp1Enabled(scopeKey);
|
|
337
|
+
setStoredCursorHttp1Enabled(enabled, scopeKey);
|
|
334
338
|
try {
|
|
335
339
|
saveGlobalCursorHttp1Enabled(enabled);
|
|
336
340
|
} catch (error) {
|
|
337
|
-
setStoredCursorHttp1Enabled(previousSession);
|
|
341
|
+
setStoredCursorHttp1Enabled(previousSession, scopeKey);
|
|
338
342
|
throw error;
|
|
339
343
|
}
|
|
340
344
|
try {
|
|
@@ -347,23 +351,24 @@ function persistCursorHttp1Preference(
|
|
|
347
351
|
}
|
|
348
352
|
}
|
|
349
353
|
|
|
350
|
-
function restoreCliCursorMode(raw: boolean | string | undefined): void {
|
|
351
|
-
|
|
354
|
+
function restoreCliCursorMode(raw: boolean | string | undefined, scopeKey?: string): void {
|
|
355
|
+
const cli = getCursorSessionSettings(scopeKey).cli;
|
|
356
|
+
cli.mode = { kind: "unset" };
|
|
352
357
|
if (raw === undefined || raw === "" || raw === false) return;
|
|
353
358
|
const parsed = parseCursorAgentMode(raw);
|
|
354
359
|
if (parsed) {
|
|
355
|
-
|
|
360
|
+
cli.mode = { kind: "valid", mode: parsed };
|
|
356
361
|
return;
|
|
357
362
|
}
|
|
358
363
|
const rawText = String(raw);
|
|
359
364
|
const message = formatInvalidCursorMode(rawText);
|
|
360
|
-
|
|
365
|
+
cli.mode = { kind: "invalid", raw: rawText, message };
|
|
361
366
|
}
|
|
362
367
|
|
|
363
|
-
function notifyInvalidCursorModeIfCursorActive(ctx: Pick<ExtensionContext, "hasUI" | "mode" | "ui">): void {
|
|
364
|
-
const modeResolution = resolveCursorAgentMode();
|
|
368
|
+
function notifyInvalidCursorModeIfCursorActive(ctx: Pick<ExtensionContext, "hasUI" | "mode" | "ui" | "sessionManager">): void {
|
|
369
|
+
const modeResolution = resolveCursorAgentMode(cursorSettingsScopeForContext(ctx));
|
|
365
370
|
if (modeResolution.kind !== "invalid" || !ctx.hasUI || ctx.mode !== "tui") return;
|
|
366
|
-
const scopeKey = getCursorSessionScopeKey();
|
|
371
|
+
const scopeKey = cursorSettingsScopeForContext(ctx) ?? getCursorSessionScopeKey();
|
|
367
372
|
if (invalidCursorModeNotifiedSessionScopeKeys.has(scopeKey)) return;
|
|
368
373
|
invalidCursorModeNotifiedSessionScopeKeys.add(scopeKey);
|
|
369
374
|
ctx.ui.notify(modeResolution.message, "error");
|
|
@@ -414,11 +419,12 @@ function emitCursorToolsDebugReport(
|
|
|
414
419
|
console.log(report);
|
|
415
420
|
}
|
|
416
421
|
|
|
417
|
-
export function getEffectiveFastForModelId(modelId: string): boolean | undefined {
|
|
418
|
-
return getEffectiveFast(modelId);
|
|
422
|
+
export function getEffectiveFastForModelId(modelId: string, scopeKey?: string): boolean | undefined {
|
|
423
|
+
return getEffectiveFast(modelId, scopeKey);
|
|
419
424
|
}
|
|
420
425
|
|
|
421
426
|
export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtensionApi): void {
|
|
427
|
+
registerCursorSessionSettings(pi);
|
|
422
428
|
registerCursorCloudRuntimeControls(pi, { refreshStatus: updateCursorStatus });
|
|
423
429
|
|
|
424
430
|
pi.registerFlag("cursor-fast", {
|
|
@@ -448,6 +454,7 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
448
454
|
ctx.ui.notify(`Fast mode not supported by ${modelName}`, "info");
|
|
449
455
|
return;
|
|
450
456
|
}
|
|
457
|
+
const { forceNoFast: cliForceNoFast, forceFast: cliForceFast } = getCursorSessionSettings(cursorSettingsScopeForContext(ctx)).cli;
|
|
451
458
|
if (cliForceNoFast) {
|
|
452
459
|
ctx.ui.notify("Cursor fast is forced off by --cursor-no-fast", "info");
|
|
453
460
|
return;
|
|
@@ -466,11 +473,11 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
466
473
|
}
|
|
467
474
|
|
|
468
475
|
const preferenceModelId = getFastPreferenceModelId(metadata);
|
|
469
|
-
const current = getEffectiveFast(metadata.piModelId) ?? false;
|
|
476
|
+
const current = getEffectiveFast(metadata.piModelId, cursorSettingsScopeForContext(ctx)) ?? false;
|
|
470
477
|
const next = !current;
|
|
471
478
|
let appendError: unknown;
|
|
472
479
|
try {
|
|
473
|
-
appendError = persistFastPreference(pi, preferenceModelId, next);
|
|
480
|
+
appendError = persistFastPreference(pi, preferenceModelId, next, cursorSettingsScopeForContext(ctx));
|
|
474
481
|
} catch (error) {
|
|
475
482
|
updateCursorStatus(ctx);
|
|
476
483
|
ctx.ui.notify(`Failed to save Cursor fast preference: ${error instanceof Error ? error.message : String(error)}`, "error");
|
|
@@ -529,7 +536,7 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
529
536
|
}
|
|
530
537
|
let appendError: unknown;
|
|
531
538
|
try {
|
|
532
|
-
appendError = persistCursorHttp1Preference(pi, next);
|
|
539
|
+
appendError = persistCursorHttp1Preference(pi, next, cursorSettingsScopeForContext(ctx));
|
|
533
540
|
} catch (error) {
|
|
534
541
|
updateCursorStatus(ctx);
|
|
535
542
|
ctx.ui.notify(
|
|
@@ -556,7 +563,8 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
556
563
|
pi.registerCommand("cursor-local-resume-cleanup", {
|
|
557
564
|
description: "Dry-run or delete recorded superseded local Cursor SDK agents",
|
|
558
565
|
handler: async (args, ctx) => {
|
|
559
|
-
|
|
566
|
+
const storeRoot = resolveCursorLocalStoreRoot({ user: loadCursorSdkUserConfig() }).value;
|
|
567
|
+
await runCursorSessionAgentCleanupCommand(pi, args, ctx, storeRoot);
|
|
560
568
|
},
|
|
561
569
|
});
|
|
562
570
|
|
|
@@ -568,7 +576,7 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
568
576
|
return;
|
|
569
577
|
}
|
|
570
578
|
try {
|
|
571
|
-
const result = await refreshSessionCursorAgentConfig();
|
|
579
|
+
const result = await refreshSessionCursorAgentConfig(getCursorSessionScopeSnapshot(pi).scopeKey);
|
|
572
580
|
const messages: Record<typeof result, string> = {
|
|
573
581
|
reloaded: "Cursor SDK agent config refreshed.",
|
|
574
582
|
"no-agent": "No Cursor SDK agent exists yet; config will load on the next Cursor run.",
|
|
@@ -588,7 +596,7 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
588
596
|
const usage = "Usage: /cursor-mode agent|plan";
|
|
589
597
|
const mode = parseCursorAgentMode(args);
|
|
590
598
|
if (!args.trim()) {
|
|
591
|
-
const modeResolution = resolveCursorAgentMode();
|
|
599
|
+
const modeResolution = resolveCursorAgentMode(cursorSettingsScopeForContext(ctx));
|
|
592
600
|
if (modeResolution.kind === "invalid") {
|
|
593
601
|
ctx.ui.notify(`${modeResolution.message} ${usage}`, "error");
|
|
594
602
|
} else {
|
|
@@ -600,14 +608,16 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
600
608
|
ctx.ui.notify(`Invalid Cursor mode "${args.trim()}". ${usage}`, "error");
|
|
601
609
|
return;
|
|
602
610
|
}
|
|
611
|
+
const cli = getCursorSessionSettings(cursorSettingsScopeForContext(ctx)).cli;
|
|
612
|
+
const cliCursorModeState = cli.mode;
|
|
603
613
|
if (cliCursorModeState.kind === "valid") {
|
|
604
614
|
ctx.ui.notify(`Cursor mode is forced to ${cliCursorModeState.mode} by --cursor-mode`, "info");
|
|
605
615
|
return;
|
|
606
616
|
}
|
|
607
617
|
const clearedInvalidCliMode = cliCursorModeState.kind === "invalid";
|
|
608
618
|
try {
|
|
609
|
-
persistCursorModePreference(pi, mode);
|
|
610
|
-
if (clearedInvalidCliMode)
|
|
619
|
+
persistCursorModePreference(pi, mode, cursorSettingsScopeForContext(ctx));
|
|
620
|
+
if (clearedInvalidCliMode) cli.mode = { kind: "unset" };
|
|
611
621
|
} catch (error) {
|
|
612
622
|
updateCursorStatus(ctx);
|
|
613
623
|
ctx.ui.notify(`Failed to save Cursor mode preference: ${error instanceof Error ? error.message : String(error)}`, "error");
|
|
@@ -633,11 +643,13 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
633
643
|
authoritativeGlobalFastPreferenceIds.clear();
|
|
634
644
|
setCursorHttp1GlobalPreferenceAuthoritative(false);
|
|
635
645
|
globalFastPreferences = loadGlobalFastPreferences();
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
646
|
+
const scopeKey = cursorSettingsScopeForContext(ctx);
|
|
647
|
+
const cli = getCursorSessionSettings(scopeKey).cli;
|
|
648
|
+
cli.forceFast = pi.getFlag("cursor-fast") === true;
|
|
649
|
+
cli.forceNoFast = pi.getFlag("cursor-no-fast") === true;
|
|
650
|
+
restoreCursorCliState(pi, scopeKey);
|
|
639
651
|
restoreSessionCursorPreferences(ctx);
|
|
640
|
-
restoreCliCursorMode(pi.getFlag("cursor-mode"));
|
|
652
|
+
restoreCliCursorMode(pi.getFlag("cursor-mode"), scopeKey);
|
|
641
653
|
},
|
|
642
654
|
sync: (ctx) => {
|
|
643
655
|
if (isCursorModel(ctx.model)) notifyInvalidCursorModeIfCursorActive(ctx);
|
|
@@ -647,10 +659,10 @@ export function registerCursorRuntimeControls(pi: CursorRuntimeControlsExtension
|
|
|
647
659
|
}
|
|
648
660
|
|
|
649
661
|
function resetCursorModeStateForTests(): void {
|
|
650
|
-
|
|
662
|
+
resetCursorSessionSettingsForTests();
|
|
651
663
|
setCursorHttp1GlobalPreferenceAuthoritative(false);
|
|
652
664
|
setStoredCursorHttp1Enabled(undefined);
|
|
653
|
-
|
|
665
|
+
getCursorSessionSettings().cli.mode = { kind: "unset" };
|
|
654
666
|
resetCursorRuntimeStateForTests();
|
|
655
667
|
invalidCursorModeNotifiedSessionScopeKeys.clear();
|
|
656
668
|
authoritativeGlobalFastPreferenceIds.clear();
|
|
@@ -664,9 +676,9 @@ export const __testUtils = {
|
|
|
664
676
|
DEFAULT_CURSOR_AGENT_MODE,
|
|
665
677
|
getConfigPath,
|
|
666
678
|
loadGlobalFastPreferences,
|
|
667
|
-
sessionFastPreferences,
|
|
668
|
-
getSessionCursorAgentMode: () =>
|
|
669
|
-
getCliCursorAgentMode: () => (
|
|
670
|
-
getCliCursorModeState: () =>
|
|
679
|
+
get sessionFastPreferences() { return getCursorSessionSettings().fast; },
|
|
680
|
+
getSessionCursorAgentMode: () => getCursorSessionSettings().mode,
|
|
681
|
+
getCliCursorAgentMode: () => { const mode = getCursorSessionSettings().cli.mode; return mode.kind === "valid" ? mode.mode : undefined; },
|
|
682
|
+
getCliCursorModeState: () => getCursorSessionSettings().cli.mode,
|
|
671
683
|
resetCursorModeStateForTests,
|
|
672
684
|
};
|
|
@@ -4,7 +4,7 @@ import type { CursorPiToolBridgeSnapshot } from "./cursor-pi-tool-bridge-types.j
|
|
|
4
4
|
export const CURSOR_TOOL_MANIFEST_ENV = "PI_CURSOR_TOOL_MANIFEST";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Representative
|
|
7
|
+
* Representative Cursor SDK local-agent ToolType values; actual exposure can vary by run.
|
|
8
8
|
* See docs/cursor-native-tool-replay.md#sdk-tooltype-replay-matrix.
|
|
9
9
|
*/
|
|
10
10
|
export const CURSOR_HOST_TOOL_MANIFEST_SUMMARY =
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { calculateCost } from "@earendil-works/pi-ai";
|
|
1
2
|
import type { Api, AssistantMessage, Context, Model } from "@earendil-works/pi-ai";
|
|
2
3
|
import {
|
|
3
4
|
CURSOR_APPROX_CHARS_PER_TOKEN,
|
|
@@ -112,7 +113,7 @@ export function isCursorSdkUsageSafeForPiMessage(turnUsage: CursorSdkTurnUsage,
|
|
|
112
113
|
export interface CursorSdkUsageApplyOptions {
|
|
113
114
|
runtime: CursorRuntime;
|
|
114
115
|
turn?: CursorSdkTurnUsage;
|
|
115
|
-
|
|
116
|
+
occupancyFloor?: number;
|
|
116
117
|
}
|
|
117
118
|
|
|
118
119
|
export function applyCursorSdkUsage(partial: AssistantMessage, turnUsage: CursorSdkTurnUsage): void {
|
|
@@ -121,84 +122,24 @@ export function applyCursorSdkUsage(partial: AssistantMessage, turnUsage: Cursor
|
|
|
121
122
|
partial.usage.output = turnUsage.outputTokens;
|
|
122
123
|
partial.usage.cacheRead = turnUsage.cacheReadTokens;
|
|
123
124
|
partial.usage.cacheWrite = turnUsage.cacheWriteTokens;
|
|
124
|
-
//
|
|
125
|
+
// Full prompt + output equals the sum of Pi's disjoint components.
|
|
125
126
|
partial.usage.totalTokens = turnUsage.inputTokens + turnUsage.outputTokens;
|
|
126
127
|
}
|
|
127
128
|
|
|
128
|
-
function
|
|
129
|
-
return assistant.api === model.api && assistant.provider === model.provider && assistant.model === model.id;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function getLatestCompactionBoundary(context: Context): { index: number; tokensBefore?: number } | undefined {
|
|
133
|
-
for (let index = context.messages.length - 1; index >= 0; index -= 1) {
|
|
134
|
-
const message = context.messages[index] as { role?: string; tokensBefore?: number };
|
|
135
|
-
if (message.role !== "compactionSummary") continue;
|
|
136
|
-
const tokensBefore = message.tokensBefore;
|
|
137
|
-
return {
|
|
138
|
-
index,
|
|
139
|
-
tokensBefore: Number.isFinite(tokensBefore) && tokensBefore !== undefined && tokensBefore > 0 ? Math.floor(tokensBefore) : undefined,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
return undefined;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function getLastAcceptedContextOccupancy(context: Context, model: Model<Api>): number {
|
|
146
|
-
const boundary = getLatestCompactionBoundary(context);
|
|
147
|
-
for (let index = context.messages.length - 1; index >= 0; index -= 1) {
|
|
148
|
-
if (boundary && index < boundary.index) break;
|
|
149
|
-
const message = context.messages[index];
|
|
150
|
-
if (message.role !== "assistant" || !("usage" in message)) continue;
|
|
151
|
-
const assistant = message as AssistantMessage;
|
|
152
|
-
if (assistant.stopReason === "aborted" || assistant.stopReason === "error" || !assistant.usage) continue;
|
|
153
|
-
if (!isCompatibleCursorAssistantMeasurement(assistant, model)) continue;
|
|
154
|
-
const { usage } = assistant;
|
|
155
|
-
const total =
|
|
156
|
-
usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
|
|
157
|
-
if (!Number.isFinite(total) || total <= 0 || total > model.contextWindow) continue;
|
|
158
|
-
if (boundary?.tokensBefore !== undefined && total >= boundary.tokensBefore) continue;
|
|
159
|
-
return total;
|
|
160
|
-
}
|
|
161
|
-
return 0;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
export function applyCursorApproximateUsage(partial: AssistantMessage, model: Model<Api>, context: Context, sessionInputTokens: number): void {
|
|
129
|
+
export function applyCursorApproximateUsage(partial: AssistantMessage, model: Model<Api>, context: Context, sessionInputTokens: number, occupancyFloor?: number): void {
|
|
165
130
|
const outputTokens = estimateCursorAssistantSessionOutputTokens(partial);
|
|
166
|
-
|
|
131
|
+
const floor = occupancyFloor !== undefined && Number.isFinite(occupancyFloor) && occupancyFloor > 0 && occupancyFloor <= model.contextWindow ? occupancyFloor : 0;
|
|
132
|
+
const totalTokens = Math.max(
|
|
133
|
+
Math.max(0, sessionInputTokens) + outputTokens,
|
|
134
|
+
estimateCursorContextTotalTokens(partial, model, context),
|
|
135
|
+
floor,
|
|
136
|
+
);
|
|
137
|
+
// Estimated prompt components describe the same occupancy as totalTokens.
|
|
138
|
+
partial.usage.input = totalTokens - outputTokens;
|
|
167
139
|
partial.usage.output = outputTokens;
|
|
168
140
|
partial.usage.cacheRead = 0;
|
|
169
141
|
partial.usage.cacheWrite = 0;
|
|
170
|
-
|
|
171
|
-
partial.usage.totalTokens = Math.max(
|
|
172
|
-
partial.usage.input + partial.usage.output,
|
|
173
|
-
estimateCursorContextTotalTokens(partial, model, context),
|
|
174
|
-
getLastAcceptedContextOccupancy(context, model),
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function applyCursorOccupancyEstimate(partial: AssistantMessage, model: Model<Api>, context: Context): void {
|
|
179
|
-
partial.usage.totalTokens = Math.max(
|
|
180
|
-
estimateCursorContextTotalTokens(partial, model, context),
|
|
181
|
-
getLastAcceptedContextOccupancy(context, model),
|
|
182
|
-
);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
function isCurrentLocalOccupancy(turn: CursorSdkTurnUsage, model: Model<Api>, context: Context): boolean {
|
|
186
|
-
if (!isCursorSdkUsageSafeForPiMessage(turn, model)) return false;
|
|
187
|
-
const tokensBefore = getLatestCompactionBoundary(context)?.tokensBefore;
|
|
188
|
-
return tokensBefore === undefined || turn.inputTokens + turn.outputTokens < tokensBefore;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
function applyResolvedCursorOccupancy(
|
|
192
|
-
partial: AssistantMessage,
|
|
193
|
-
model: Model<Api>,
|
|
194
|
-
context: Context,
|
|
195
|
-
localTurn: CursorSdkTurnUsage | undefined,
|
|
196
|
-
): void {
|
|
197
|
-
if (localTurn && isCurrentLocalOccupancy(localTurn, model, context)) {
|
|
198
|
-
partial.usage.totalTokens = localTurn.inputTokens + localTurn.outputTokens;
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
applyCursorOccupancyEstimate(partial, model, context);
|
|
142
|
+
partial.usage.totalTokens = totalTokens;
|
|
202
143
|
}
|
|
203
144
|
|
|
204
145
|
export function applyCursorUsage(
|
|
@@ -208,18 +149,12 @@ export function applyCursorUsage(
|
|
|
208
149
|
sessionInputTokens: number,
|
|
209
150
|
sdkUsage?: CursorSdkUsageApplyOptions,
|
|
210
151
|
): void {
|
|
211
|
-
const billed = sdkUsage?.billed;
|
|
212
152
|
const localTurn = sdkUsage?.runtime === "local" ? sdkUsage.turn : undefined;
|
|
213
|
-
if (billed && isCursorSdkUsagePartitionSafe(billed, model)) {
|
|
214
|
-
applyCursorSdkUsage(partial, billed);
|
|
215
|
-
applyResolvedCursorOccupancy(partial, model, context, localTurn);
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
// Only local raw turn-ended usage has a captured full-prompt/cache-partition occupancy contract.
|
|
219
153
|
if (localTurn && isCursorSdkUsageSafeForPiMessage(localTurn, model)) {
|
|
154
|
+
// Fresh LOCAL occupancy supersedes any previous request-provenance floor.
|
|
220
155
|
applyCursorSdkUsage(partial, localTurn);
|
|
221
|
-
|
|
222
|
-
|
|
156
|
+
} else {
|
|
157
|
+
applyCursorApproximateUsage(partial, model, context, sessionInputTokens, sdkUsage?.occupancyFloor);
|
|
223
158
|
}
|
|
224
|
-
|
|
159
|
+
calculateCost(model, partial.usage);
|
|
225
160
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { closeSync, constants, fsyncSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
4
|
+
import { createRegularFileExclusive } from "./cursor-durable-fs.js";
|
|
5
|
+
import { fetchCursorSdkAgentUsage } from "./cursor-sdk-billed-usage.js";
|
|
6
|
+
import { resolveCursorApiKey } from "./cursor-api-key.js";
|
|
7
|
+
import { loadCursorSdk } from "./cursor-sdk-runtime.js";
|
|
8
|
+
import { readCursorUsageView, refreshCursorUsageView, type CursorUsageView } from "./cursor-usage-ledger.js";
|
|
9
|
+
|
|
10
|
+
const HELP = [
|
|
11
|
+
"/cursor-usage — current branch telemetry (native footer unchanged)",
|
|
12
|
+
"/cursor-usage refresh — public getUsage only; up to 32 agents, 5 seconds each; no model sends or automatic polling",
|
|
13
|
+
"/cursor-usage export <new-file.json> — exclusive private JSON export; never overwrites a file",
|
|
14
|
+
"/cursor-usage help — this help",
|
|
15
|
+
"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.",
|
|
16
|
+
"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.",
|
|
17
|
+
"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.",
|
|
18
|
+
].join("\n");
|
|
19
|
+
export function renderCursorUsageView(view: CursorUsageView): string {
|
|
20
|
+
return [
|
|
21
|
+
`Cursor usage — ${view.durability}; persistence ${view.persistenceStatus}; current branch telemetry`,
|
|
22
|
+
view.nativeConfiguredEstimates,
|
|
23
|
+
`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}).`,
|
|
24
|
+
`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).`,
|
|
25
|
+
`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.`,
|
|
26
|
+
...view.lineageGaps,
|
|
27
|
+
...view.agents.slice(0, 32).map(agent => {
|
|
28
|
+
const missing = agent.billingStatus === "ambiguous-shared-lineage" ? "ambiguous" : agent.billingStatus === "unavailable" ? "unavailable" : agent.billingStatus === "pending" ? "pending" : "unknown";
|
|
29
|
+
const remainder = agent.billingStatus === "ambiguous-shared-lineage" ? "ambiguous" : agent.observationsByOrigin.some(observation => observation.incompleteHistory) ? "unknown (incomplete run history)" : agent.aggregateOnly?.totalTokens ?? missing;
|
|
30
|
+
return [
|
|
31
|
+
`${agent.agentId}: ${agent.billingStatus}${agent.unknownHistory ? "; unknown historical baseline" : ""}`,
|
|
32
|
+
agent.sharedAcrossBranches ? "; shared lineage, not attributable to this branch" : "; whole-agent facts, no client-run billing join",
|
|
33
|
+
`. 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}.`,
|
|
34
|
+
...agent.observationsByOrigin.map(observation => {
|
|
35
|
+
const absent = observation.lastAttempt.status === "unavailable" ? "unavailable" : "unknown";
|
|
36
|
+
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}.`;
|
|
37
|
+
}),
|
|
38
|
+
].join("");
|
|
39
|
+
}),
|
|
40
|
+
...(view.agents.length > 32 ? [`${view.agents.length - 32} further agents retained in export.`] : []),
|
|
41
|
+
"Snapshots are observations, not final invoices. Multiple origin journals have no qualified global revision ordering. Cloud raw normalization is unqualified.",
|
|
42
|
+
`Journal ceiling: ${view.journalLimit}. See /cursor-usage help for recovery. Export contains no prompts or tool content.`,
|
|
43
|
+
].join("\n");
|
|
44
|
+
}
|
|
45
|
+
export function registerCursorUsageCommand(pi: Pick<ExtensionAPI, "appendEntry" | "registerCommand">): void {
|
|
46
|
+
pi.registerCommand("cursor-usage", {
|
|
47
|
+
description: "View Cursor telemetry; refresh public billing or export to a new JSON file",
|
|
48
|
+
handler: async (args, ctx) => {
|
|
49
|
+
const show = (message: string, error = false) => {
|
|
50
|
+
if (ctx.hasUI) ctx.ui.notify(message, error ? "error" : "info");
|
|
51
|
+
else 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)) { show(HELP); return; }
|
|
56
|
+
if (argument && argument !== "refresh" && !argument.startsWith("export ")) { show(HELP, true); return; }
|
|
57
|
+
let view = readCursorUsageView(pi, ctx);
|
|
58
|
+
if (argument === "refresh") {
|
|
59
|
+
const { Agent } = await loadCursorSdk();
|
|
60
|
+
const apiKey = resolveCursorApiKey(await ctx.modelRegistry.getApiKeyForProvider("cursor"));
|
|
61
|
+
view = await refreshCursorUsageView(pi, ctx, agentId => fetchCursorSdkAgentUsage({ getUsage: () => Agent.getUsage(agentId, { apiKey }) }));
|
|
62
|
+
} else if (argument.startsWith("export ")) {
|
|
63
|
+
const path = resolve(ctx.cwd, argument.slice(7).trim());
|
|
64
|
+
const fd = createRegularFileExclusive(path, constants.O_WRONLY, 0o600);
|
|
65
|
+
try { writeFileSync(fd, `${JSON.stringify(view, null, 2)}\n`); fsyncSync(fd); }
|
|
66
|
+
finally { closeSync(fd); }
|
|
67
|
+
show(`Cursor usage exported to ${path}.`);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
show(renderCursorUsageView(view));
|
|
71
|
+
} catch {
|
|
72
|
+
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);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|