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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { closeSync, constants, existsSync, fchmodSync, fstatSync, fsyncSync,
|
|
2
|
+
import { closeSync, constants, existsSync, fchmodSync, fstatSync, fsyncSync, openSync, readFileSync, readSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext, SessionEntry } from "@earendil-works/pi-coding-agent";
|
|
5
5
|
import { resolveCursorApiKey } from "./cursor-api-key.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
CLOUD_LIFECYCLE_ENTRY_TYPE,
|
|
13
13
|
CLOUD_LIFECYCLE_JOURNAL_PREFIX,
|
|
14
14
|
} from "../shared/cursor-cloud-lifecycle-constants.mjs";
|
|
15
|
-
import {
|
|
15
|
+
import { createRegularFileExclusive, fsyncExistingRegularFile, openExistingRegularFileNoFollow } from "./cursor-durable-fs.js";
|
|
16
16
|
import { truncateCursorDisplayLine } from "./cursor-display-text.js";
|
|
17
17
|
import { asRecord, getString } from "./cursor-record-utils.js";
|
|
18
18
|
import { scrubSensitiveText } from "./cursor-sensitive-text.js";
|
|
@@ -83,6 +83,7 @@ interface CloudLifecycleSessionState {
|
|
|
83
83
|
getBranch?: () => SessionEntry[];
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
const cloudBindings = new Map<object, { api: CloudLifecycleApi; session: CloudLifecycleSessionState }>();
|
|
86
87
|
let cloudLifecycleApi: CloudLifecycleApi | undefined;
|
|
87
88
|
let cloudLifecycleSession: CloudLifecycleSessionState = {};
|
|
88
89
|
let durableWriterForTests: ((data: CursorCloudLifecycleEntryData) => boolean) | undefined;
|
|
@@ -178,11 +179,12 @@ function buildBaseEntry(agentId: string, action: CloudLifecycleAction): CursorCl
|
|
|
178
179
|
};
|
|
179
180
|
}
|
|
180
181
|
|
|
181
|
-
function captureCloudLifecycleSession(ctx: CloudLifecycleSessionContext):
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
182
|
+
function captureCloudLifecycleSession(ctx: CloudLifecycleSessionContext): CloudLifecycleSessionState {
|
|
183
|
+
const manager = ctx.sessionManager;
|
|
184
|
+
return {
|
|
185
|
+
sessionFile: manager.getSessionFile() ?? undefined,
|
|
186
|
+
sessionId: manager.getSessionId(),
|
|
187
|
+
getBranch: () => manager.getBranch(),
|
|
186
188
|
};
|
|
187
189
|
}
|
|
188
190
|
|
|
@@ -191,38 +193,16 @@ function durableLedgerPath(sessionFile: string, sessionId: string): string {
|
|
|
191
193
|
return join(dirname(sessionFile), `${DURABLE_LEDGER_PREFIX}-${sessionHash}.journal`);
|
|
192
194
|
}
|
|
193
195
|
|
|
194
|
-
function
|
|
195
|
-
return left.dev === right.dev && left.ino === right.ino;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function createRegularFileExclusive(path: string, flags: number, mode: number): number {
|
|
199
|
-
let fd: number | undefined;
|
|
200
|
-
try {
|
|
201
|
-
fd = openSync(path, flags | constants.O_CREAT | constants.O_EXCL | noFollowFlag(), mode);
|
|
202
|
-
const opened = fstatSync(fd);
|
|
203
|
-
const after = lstatSync(path);
|
|
204
|
-
if (!opened.isFile() || !after.isFile() || !sameFileIdentity(opened, after)) {
|
|
205
|
-
throw new Error("created journal path changed while opening");
|
|
206
|
-
}
|
|
207
|
-
return fd;
|
|
208
|
-
} catch (error) {
|
|
209
|
-
if (fd !== undefined) {
|
|
210
|
-
try { closeSync(fd); } catch {}
|
|
211
|
-
}
|
|
212
|
-
throw error;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
function fsyncCloudLifecycleSessionFile(): boolean {
|
|
196
|
+
function fsyncCloudLifecycleSessionFile(session: CloudLifecycleSessionState): boolean {
|
|
217
197
|
if (sessionFsyncForTests) return sessionFsyncForTests();
|
|
218
|
-
const sessionFile =
|
|
198
|
+
const sessionFile = session.sessionFile;
|
|
219
199
|
if (!sessionFile || !existsSync(sessionFile)) return true;
|
|
220
200
|
return fsyncExistingRegularFile(sessionFile);
|
|
221
201
|
}
|
|
222
202
|
|
|
223
|
-
function appendDurableCloudLifecycleEntry(data: CursorCloudLifecycleEntryData, anchorEntryId: string): boolean {
|
|
203
|
+
function appendDurableCloudLifecycleEntry(data: CursorCloudLifecycleEntryData, anchorEntryId: string, session: CloudLifecycleSessionState): boolean {
|
|
224
204
|
if (durableWriterForTests) return durableWriterForTests(data);
|
|
225
|
-
const { sessionFile, sessionId } =
|
|
205
|
+
const { sessionFile, sessionId } = session;
|
|
226
206
|
if (!sessionFile || !sessionId) return false;
|
|
227
207
|
const entry: DurableCloudLifecycleEntry = {
|
|
228
208
|
...data,
|
|
@@ -269,13 +249,13 @@ function appendDurableCloudLifecycleEntry(data: CursorCloudLifecycleEntryData, a
|
|
|
269
249
|
}
|
|
270
250
|
}
|
|
271
251
|
|
|
272
|
-
function appendCloudLifecycleEntry(pi: CloudLifecycleApi, data: CursorCloudLifecycleEntryData | undefined): boolean {
|
|
273
|
-
if (!data || (!durableWriterForTests && (!
|
|
252
|
+
function appendCloudLifecycleEntry(pi: CloudLifecycleApi, data: CursorCloudLifecycleEntryData | undefined, session: CloudLifecycleSessionState): boolean {
|
|
253
|
+
if (!data || (!durableWriterForTests && (!session.sessionFile || !session.sessionId))) return false;
|
|
274
254
|
let anchorEntryId: string | undefined;
|
|
275
255
|
try {
|
|
276
|
-
const previousEntryId = durableWriterForTests ? undefined :
|
|
256
|
+
const previousEntryId = durableWriterForTests ? undefined : session.getBranch?.().at(-1)?.id;
|
|
277
257
|
pi.appendEntry<CursorCloudLifecycleEntryData>(CLOUD_LIFECYCLE_ENTRY_TYPE, data);
|
|
278
|
-
const anchor =
|
|
258
|
+
const anchor = session.getBranch?.().at(-1);
|
|
279
259
|
anchorEntryId = durableWriterForTests
|
|
280
260
|
? "test-cloud-lifecycle-entry"
|
|
281
261
|
: anchor?.type === "custom" &&
|
|
@@ -287,19 +267,19 @@ function appendCloudLifecycleEntry(pi: CloudLifecycleApi, data: CursorCloudLifec
|
|
|
287
267
|
return false;
|
|
288
268
|
}
|
|
289
269
|
return anchorEntryId !== undefined &&
|
|
290
|
-
fsyncCloudLifecycleSessionFile() &&
|
|
291
|
-
appendDurableCloudLifecycleEntry(data, anchorEntryId);
|
|
270
|
+
fsyncCloudLifecycleSessionFile(session) &&
|
|
271
|
+
appendDurableCloudLifecycleEntry(data, anchorEntryId, session);
|
|
292
272
|
}
|
|
293
273
|
|
|
294
274
|
function appendCloudLifecycleMutationEntry(
|
|
295
|
-
pi: CloudLifecycleApi,
|
|
296
|
-
ctx: CloudLifecycleCommandContext,
|
|
275
|
+
pi: CloudLifecycleApi | undefined,
|
|
297
276
|
data: CursorCloudLifecycleEntryData | undefined,
|
|
277
|
+
session: CloudLifecycleSessionState,
|
|
278
|
+
anchorEntryId: string | undefined,
|
|
298
279
|
): boolean {
|
|
299
|
-
|
|
300
|
-
if (!data || !anchorEntryId || !fsyncCloudLifecycleSessionFile() || !appendDurableCloudLifecycleEntry(data, anchorEntryId)) return false;
|
|
280
|
+
if (!data || !anchorEntryId || !fsyncCloudLifecycleSessionFile(session) || !appendDurableCloudLifecycleEntry(data, anchorEntryId, session)) return false;
|
|
301
281
|
try {
|
|
302
|
-
pi
|
|
282
|
+
pi?.appendEntry<CursorCloudLifecycleEntryData>(CLOUD_LIFECYCLE_ENTRY_TYPE, data);
|
|
303
283
|
} catch {
|
|
304
284
|
// The fsynced mutation journal is authoritative.
|
|
305
285
|
}
|
|
@@ -308,38 +288,54 @@ function appendCloudLifecycleMutationEntry(
|
|
|
308
288
|
|
|
309
289
|
export function registerCursorCloudLifecycleLedger(pi: CloudLifecycleApi): void {
|
|
310
290
|
cloudLifecycleApi = pi;
|
|
311
|
-
pi
|
|
312
|
-
|
|
313
|
-
|
|
291
|
+
const binding = { api: pi, session: {} as CloudLifecycleSessionState };
|
|
292
|
+
cloudBindings.set(pi, binding);
|
|
293
|
+
const capture = (ctx: CloudLifecycleSessionContext) => {
|
|
294
|
+
binding.session = captureCloudLifecycleSession(ctx);
|
|
295
|
+
cloudLifecycleSession = binding.session;
|
|
296
|
+
};
|
|
297
|
+
pi.on("session_start", (_event, ctx) => capture(ctx));
|
|
298
|
+
pi.on("before_agent_start", (_event, ctx) => capture(ctx));
|
|
299
|
+
pi.on("session_tree", (_event, ctx) => capture(ctx));
|
|
300
|
+
pi.on("session_shutdown", () => { cloudBindings.delete(pi); });
|
|
314
301
|
}
|
|
315
302
|
|
|
316
303
|
export function recordCursorCloudLifecycleRun(
|
|
317
304
|
report: Omit<CursorCloudRunReport, "runId"> & { runId?: string },
|
|
318
|
-
options: { apiKey?: string } = {},
|
|
305
|
+
options: { apiKey?: string; binding?: { api: CloudLifecycleApi; session: CloudLifecycleSessionState } } = {},
|
|
319
306
|
): boolean {
|
|
320
|
-
|
|
307
|
+
const api = options.binding?.api ?? cloudLifecycleApi;
|
|
308
|
+
if (!api) return false;
|
|
321
309
|
const baseEntry = buildBaseEntry(report.agentId, "record");
|
|
322
310
|
if (!baseEntry) return false;
|
|
323
311
|
const branches = buildBranchEntries(report, options.apiKey);
|
|
324
312
|
const runId = typeof report.runId === "string"
|
|
325
313
|
? sanitizeLedgerString(report.runId, MAX_LEDGER_RUN_ID_LENGTH, options.apiKey)
|
|
326
314
|
: "";
|
|
327
|
-
return appendCloudLifecycleEntry(
|
|
315
|
+
return appendCloudLifecycleEntry(api, {
|
|
328
316
|
...baseEntry,
|
|
329
317
|
...(runId ? { runId } : {}),
|
|
330
318
|
...(branches ? { branches } : {}),
|
|
331
|
-
});
|
|
319
|
+
}, options.binding?.session ?? cloudLifecycleSession);
|
|
332
320
|
}
|
|
333
321
|
|
|
334
|
-
export
|
|
335
|
-
report: { agentId: string; runId?: string },
|
|
322
|
+
export type CursorCloudLifecycleRecorder = (
|
|
323
|
+
report: { agentId: string; runId?: string; branches?: CursorCloudRunReport["branches"] },
|
|
336
324
|
apiKey: string | undefined,
|
|
337
|
-
)
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
325
|
+
) => boolean;
|
|
326
|
+
|
|
327
|
+
export function captureCursorCloudLifecycleRecorder(owner?: object): CursorCloudLifecycleRecorder {
|
|
328
|
+
const current = owner ? cloudBindings.get(owner) : undefined;
|
|
329
|
+
const api = current?.api ?? (owner ? undefined : cloudLifecycleApi);
|
|
330
|
+
const session = { ...(current?.session ?? (owner ? {} : cloudLifecycleSession)) };
|
|
331
|
+
return (report, apiKey) => {
|
|
332
|
+
if (!api) return false;
|
|
333
|
+
try {
|
|
334
|
+
return recordCursorCloudLifecycleRun({ ...report, branches: report.branches ?? [] }, { apiKey, binding: { api, session } });
|
|
335
|
+
} catch {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
};
|
|
343
339
|
}
|
|
344
340
|
|
|
345
341
|
export function createCursorCloudLifecyclePersistenceError(
|
|
@@ -444,9 +440,8 @@ export function readCursorCloudLifecycleAgents(entries: readonly SessionEntry[])
|
|
|
444
440
|
return reduceCloudLifecycleEntries(readCursorCloudLifecycleEntries(entries));
|
|
445
441
|
}
|
|
446
442
|
|
|
447
|
-
function readDurableCloudLifecycleJournal(
|
|
448
|
-
const sessionFile =
|
|
449
|
-
const sessionId = ctx.sessionManager.getSessionId?.();
|
|
443
|
+
function readDurableCloudLifecycleJournal(session: CloudLifecycleSessionState): ParsedDurableCloudLifecycleEntry[] {
|
|
444
|
+
const { sessionFile, sessionId } = session;
|
|
450
445
|
if (!sessionFile || !sessionId) return [];
|
|
451
446
|
let fd: number | undefined;
|
|
452
447
|
let lines: string[];
|
|
@@ -478,12 +473,12 @@ function readDurableCloudLifecycleJournal(ctx: CloudLifecycleCommandContext): Pa
|
|
|
478
473
|
return entries;
|
|
479
474
|
}
|
|
480
475
|
|
|
481
|
-
function readDurableCloudLifecycleEntries(
|
|
482
|
-
const sessionFile =
|
|
476
|
+
function readDurableCloudLifecycleEntries(session: CloudLifecycleSessionState): CursorCloudLifecycleEntryData[] {
|
|
477
|
+
const { sessionFile } = session;
|
|
483
478
|
if (!sessionFile) return [];
|
|
484
479
|
const fileless = !existsSync(sessionFile);
|
|
485
|
-
const branchIds = new Set(
|
|
486
|
-
return readDurableCloudLifecycleJournal(
|
|
480
|
+
const branchIds = new Set((session.getBranch?.() ?? []).map((entry) => entry.id));
|
|
481
|
+
return readDurableCloudLifecycleJournal(session).flatMap((entry) => {
|
|
487
482
|
if (entry.data.action !== "record") return [entry.data];
|
|
488
483
|
if (fileless) return entry.anchorEntryId === null ? [entry.data] : [];
|
|
489
484
|
return entry.anchorEntryId !== null && branchIds.has(entry.anchorEntryId) ? [entry.data] : [];
|
|
@@ -494,17 +489,17 @@ function cloudLifecycleEntryKey(data: CursorCloudLifecycleEntryData): string {
|
|
|
494
489
|
return JSON.stringify([data.action, data.agentId, data.runId, data.timestamp, data.branches]);
|
|
495
490
|
}
|
|
496
491
|
|
|
497
|
-
function reconcileDurableCloudLifecycleOrphans(pi: CloudLifecycleApi,
|
|
498
|
-
const sessionFile =
|
|
492
|
+
function reconcileDurableCloudLifecycleOrphans(pi: CloudLifecycleApi, session: CloudLifecycleSessionState): boolean {
|
|
493
|
+
const { sessionFile } = session;
|
|
499
494
|
if (!sessionFile || !existsSync(sessionFile)) return true;
|
|
500
|
-
const journal = readDurableCloudLifecycleJournal(
|
|
495
|
+
const journal = readDurableCloudLifecycleJournal(session);
|
|
501
496
|
const claimedAgentIds = new Set(journal.flatMap((entry) =>
|
|
502
497
|
entry.data.action === "record" && entry.anchorEntryId !== null ? [entry.data.agentId] : []));
|
|
503
498
|
const latestOrphanByAgent = new Map<string, ParsedDurableCloudLifecycleEntry>();
|
|
504
499
|
for (const entry of journal) {
|
|
505
500
|
if (entry.data.action === "record" && entry.anchorEntryId === null) latestOrphanByAgent.set(entry.data.agentId, entry);
|
|
506
501
|
}
|
|
507
|
-
const branch =
|
|
502
|
+
const branch = session.getBranch?.() ?? [];
|
|
508
503
|
for (const [agentId, orphan] of latestOrphanByAgent) {
|
|
509
504
|
if (claimedAgentIds.has(agentId)) continue;
|
|
510
505
|
let matchingEntry: SessionEntry | undefined;
|
|
@@ -518,24 +513,24 @@ function reconcileDurableCloudLifecycleOrphans(pi: CloudLifecycleApi, ctx: Cloud
|
|
|
518
513
|
}
|
|
519
514
|
}
|
|
520
515
|
if (matchingEntry) {
|
|
521
|
-
if (!fsyncCloudLifecycleSessionFile() || !appendDurableCloudLifecycleEntry(orphan.data, matchingEntry.id)) return false;
|
|
516
|
+
if (!fsyncCloudLifecycleSessionFile(session) || !appendDurableCloudLifecycleEntry(orphan.data, matchingEntry.id, session)) return false;
|
|
522
517
|
continue;
|
|
523
518
|
}
|
|
524
|
-
if (orphan.sessionFile !== sessionFile && !appendCloudLifecycleEntry(pi, orphan.data)) return false;
|
|
519
|
+
if (orphan.sessionFile !== sessionFile && !appendCloudLifecycleEntry(pi, orphan.data, session)) return false;
|
|
525
520
|
}
|
|
526
521
|
return true;
|
|
527
522
|
}
|
|
528
523
|
|
|
529
|
-
function reconcileDurableCloudLifecycleOrphansForCommand(pi: CloudLifecycleApi, ctx: CloudLifecycleCommandContext): boolean {
|
|
530
|
-
if (reconcileDurableCloudLifecycleOrphans(pi,
|
|
524
|
+
function reconcileDurableCloudLifecycleOrphansForCommand(pi: CloudLifecycleApi, ctx: CloudLifecycleCommandContext, session: CloudLifecycleSessionState): boolean {
|
|
525
|
+
if (reconcileDurableCloudLifecycleOrphans(pi, session)) return true;
|
|
531
526
|
ctx.ui.notify("Unable to reconcile the durable Cursor cloud lifecycle journal with this session branch.", "error");
|
|
532
527
|
return false;
|
|
533
528
|
}
|
|
534
529
|
|
|
535
|
-
function readRecordedCloudAgents(
|
|
536
|
-
const durableEntries = readDurableCloudLifecycleEntries(
|
|
530
|
+
function readRecordedCloudAgents(session: CloudLifecycleSessionState): CursorCloudLifecycleAgentRecord[] {
|
|
531
|
+
const durableEntries = readDurableCloudLifecycleEntries(session);
|
|
537
532
|
const durableKeys = new Set(durableEntries.map(cloudLifecycleEntryKey));
|
|
538
|
-
const branchOnlyEntries = readCursorCloudLifecycleEntries(
|
|
533
|
+
const branchOnlyEntries = readCursorCloudLifecycleEntries(session.getBranch?.() ?? [])
|
|
539
534
|
.filter((entry) => !durableKeys.has(cloudLifecycleEntryKey(entry)));
|
|
540
535
|
return reduceCloudLifecycleEntries([...durableEntries, ...branchOnlyEntries]);
|
|
541
536
|
}
|
|
@@ -618,51 +613,85 @@ async function mutateRecordedCloudAgent(params: {
|
|
|
618
613
|
ctx: CloudLifecycleCommandContext;
|
|
619
614
|
agentId: string;
|
|
620
615
|
action: "archive" | "delete";
|
|
621
|
-
|
|
616
|
+
session: CloudLifecycleSessionState;
|
|
622
617
|
}): Promise<void> {
|
|
623
|
-
const
|
|
624
|
-
const
|
|
618
|
+
const manager = params.ctx.sessionManager;
|
|
619
|
+
const ui = params.ctx.ui;
|
|
620
|
+
const modelRegistry = params.ctx.modelRegistry;
|
|
621
|
+
const binding = cloudBindings.get(params.pi);
|
|
622
|
+
let anchorEntryId = manager.getBranch().at(-1)?.id;
|
|
623
|
+
// Include recoverable fileless records before auth, without writing anything
|
|
624
|
+
// until credentials are available. General provider recording stays live.
|
|
625
|
+
const readAuthority = () => JSON.stringify([readRecordedCloudAgents(params.session), readDurableCloudLifecycleJournal(params.session)]);
|
|
626
|
+
let authority = readAuthority();
|
|
627
|
+
const isOriginCurrent = (): boolean => {
|
|
628
|
+
try {
|
|
629
|
+
return cloudBindings.get(params.pi) === binding &&
|
|
630
|
+
params.ctx.sessionManager === manager &&
|
|
631
|
+
manager.getSessionFile() === params.session.sessionFile &&
|
|
632
|
+
manager.getSessionId() === params.session.sessionId &&
|
|
633
|
+
manager.getBranch().at(-1)?.id === anchorEntryId;
|
|
634
|
+
} catch {
|
|
635
|
+
return false; // Pi invalidates the command context on owning reload.
|
|
636
|
+
}
|
|
637
|
+
};
|
|
638
|
+
const checkAuthority = (): boolean => {
|
|
639
|
+
if (isOriginCurrent() && readAuthority() === authority) return true;
|
|
640
|
+
ui.notify(`Cursor cloud ${params.action} was not started because its originating session branch or authority changed. Retry from the intended branch.`, "error");
|
|
641
|
+
return false;
|
|
642
|
+
};
|
|
643
|
+
const apiKey = await resolveCloudLifecycleMutationApiKey({ modelRegistry, ui, sessionManager: manager });
|
|
644
|
+
if (!apiKey || !checkAuthority()) return;
|
|
645
|
+
if (!reconcileDurableCloudLifecycleOrphansForCommand(params.pi, { modelRegistry, ui, sessionManager: manager }, params.session)) return;
|
|
646
|
+
// Reconciliation may append only the unchanged, captured orphan authority.
|
|
647
|
+
anchorEntryId = manager.getBranch().at(-1)?.id;
|
|
648
|
+
authority = readAuthority();
|
|
649
|
+
const validationError = validateRecordedCloudAgentId(params.agentId, readRecordedCloudAgents(params.session), params.action);
|
|
625
650
|
if (validationError) {
|
|
626
|
-
|
|
651
|
+
ui.notify(validationError, "error");
|
|
627
652
|
return;
|
|
628
653
|
}
|
|
629
|
-
const apiKey = params.apiKey;
|
|
630
654
|
let operations: CloudLifecycleSdkOperations;
|
|
631
655
|
try {
|
|
632
656
|
operations = await getSdkOperations();
|
|
633
657
|
} catch (error) {
|
|
634
|
-
|
|
658
|
+
ui.notify(`Failed to prepare Cursor cloud ${params.action}: ${formatCloudLifecycleError(error, apiKey)}`, "error");
|
|
635
659
|
return;
|
|
636
660
|
}
|
|
661
|
+
if (!checkAuthority()) return;
|
|
637
662
|
if (!appendCloudLifecycleMutationEntry(
|
|
638
663
|
params.pi,
|
|
639
|
-
params.ctx,
|
|
640
664
|
buildBaseEntry(params.agentId, params.action === "archive" ? "archive_intent" : "delete_intent"),
|
|
665
|
+
params.session,
|
|
666
|
+
anchorEntryId,
|
|
641
667
|
)) {
|
|
642
|
-
|
|
668
|
+
ui.notify(`Cursor cloud ${params.action} was not started because its durable intent could not be recorded.`, "error");
|
|
643
669
|
return;
|
|
644
670
|
}
|
|
671
|
+
// After SDK start the actual result belongs to this journal and post-intent
|
|
672
|
+
// anchor, even if Pi replaces the context or selects another branch.
|
|
673
|
+
anchorEntryId = manager.getBranch().at(-1)?.id;
|
|
645
674
|
try {
|
|
646
675
|
await operations[params.action](params.agentId, { apiKey });
|
|
647
676
|
} catch (error) {
|
|
648
|
-
|
|
677
|
+
ui.notify(
|
|
649
678
|
`Cursor cloud ${params.action} for agent ${params.agentId} is unresolved: ${formatCloudLifecycleError(error, apiKey)} Inspect it in the Cursor Cloud dashboard before retrying.`,
|
|
650
679
|
"error",
|
|
651
680
|
);
|
|
652
681
|
return;
|
|
653
682
|
}
|
|
654
|
-
if (!appendCloudLifecycleMutationEntry(params.pi
|
|
655
|
-
|
|
683
|
+
if (!appendCloudLifecycleMutationEntry(isOriginCurrent() ? params.pi : undefined, buildBaseEntry(params.agentId, params.action), params.session, anchorEntryId)) {
|
|
684
|
+
ui.notify(
|
|
656
685
|
`Cursor cloud agent ${params.agentId} ${params.action === "archive" ? "archived" : "deleted"}, but its durable result could not be recorded. Inspect it in the Cursor Cloud dashboard before retrying.`,
|
|
657
686
|
"error",
|
|
658
687
|
);
|
|
659
688
|
return;
|
|
660
689
|
}
|
|
661
|
-
|
|
690
|
+
ui.notify(`Cursor cloud agent ${params.agentId} ${params.action === "archive" ? "archived" : "deleted"}.`, "info");
|
|
662
691
|
}
|
|
663
692
|
|
|
664
693
|
export async function runCursorCloudLifecycleCommand(pi: CloudLifecycleApi, args: string, ctx: CloudLifecycleCommandContext): Promise<void> {
|
|
665
|
-
captureCloudLifecycleSession(ctx);
|
|
694
|
+
const session = captureCloudLifecycleSession(ctx);
|
|
666
695
|
const usage = "Usage: /cursor-cloud list | archive <bc-agentId> | delete <bc-agentId> --yes";
|
|
667
696
|
const tokens = tokenizeArgs(args);
|
|
668
697
|
const [subcommand, agentId, ...rest] = tokens;
|
|
@@ -671,8 +700,8 @@ export async function runCursorCloudLifecycleCommand(pi: CloudLifecycleApi, args
|
|
|
671
700
|
ctx.ui.notify(`Invalid Cursor cloud arguments. ${usage}`, "error");
|
|
672
701
|
return;
|
|
673
702
|
}
|
|
674
|
-
if (!reconcileDurableCloudLifecycleOrphansForCommand(pi, ctx)) return;
|
|
675
|
-
ctx.ui.notify(formatCloudLifecycleRecords(readRecordedCloudAgents(
|
|
703
|
+
if (!reconcileDurableCloudLifecycleOrphansForCommand(pi, ctx, session)) return;
|
|
704
|
+
ctx.ui.notify(formatCloudLifecycleRecords(readRecordedCloudAgents(session)), "info");
|
|
676
705
|
return;
|
|
677
706
|
}
|
|
678
707
|
if (subcommand === "archive") {
|
|
@@ -685,9 +714,7 @@ export async function runCursorCloudLifecycleCommand(pi: CloudLifecycleApi, args
|
|
|
685
714
|
ctx.ui.notify(validationError, "error");
|
|
686
715
|
return;
|
|
687
716
|
}
|
|
688
|
-
|
|
689
|
-
if (!apiKey || !reconcileDurableCloudLifecycleOrphansForCommand(pi, ctx)) return;
|
|
690
|
-
await mutateRecordedCloudAgent({ pi, ctx, agentId, action: "archive", apiKey });
|
|
717
|
+
await mutateRecordedCloudAgent({ pi, ctx, agentId, action: "archive", session });
|
|
691
718
|
return;
|
|
692
719
|
}
|
|
693
720
|
if (subcommand === "delete") {
|
|
@@ -700,9 +727,7 @@ export async function runCursorCloudLifecycleCommand(pi: CloudLifecycleApi, args
|
|
|
700
727
|
ctx.ui.notify(validationError, "error");
|
|
701
728
|
return;
|
|
702
729
|
}
|
|
703
|
-
|
|
704
|
-
if (!apiKey || !reconcileDurableCloudLifecycleOrphansForCommand(pi, ctx)) return;
|
|
705
|
-
await mutateRecordedCloudAgent({ pi, ctx, agentId, action: "delete", apiKey });
|
|
730
|
+
await mutateRecordedCloudAgent({ pi, ctx, agentId, action: "delete", session });
|
|
706
731
|
return;
|
|
707
732
|
}
|
|
708
733
|
ctx.ui.notify(`Invalid Cursor cloud command. ${usage}`, "error");
|
|
@@ -710,6 +735,7 @@ export async function runCursorCloudLifecycleCommand(pi: CloudLifecycleApi, args
|
|
|
710
735
|
|
|
711
736
|
export const __testUtils = {
|
|
712
737
|
reset: () => {
|
|
738
|
+
cloudBindings.clear();
|
|
713
739
|
cloudLifecycleApi = undefined;
|
|
714
740
|
cloudLifecycleSession = {};
|
|
715
741
|
durableWriterForTests = undefined;
|
|
@@ -49,6 +49,7 @@ export function buildCursorCloudAgentOptions(options: {
|
|
|
49
49
|
agentMode: AgentModeOption;
|
|
50
50
|
resolvedConfig: CursorResolvedSdkConfig;
|
|
51
51
|
name?: string;
|
|
52
|
+
agents?: AgentOptions["agents"];
|
|
52
53
|
}): AgentOptions {
|
|
53
54
|
const { resolvedConfig } = options;
|
|
54
55
|
const environment = resolvedConfig.cloud.environment.value;
|
|
@@ -91,6 +92,7 @@ export function buildCursorCloudAgentOptions(options: {
|
|
|
91
92
|
model: options.modelSelection,
|
|
92
93
|
mode: options.agentMode,
|
|
93
94
|
...(options.name ? { name: options.name } : {}),
|
|
95
|
+
...(options.agents && Object.keys(options.agents).length ? { agents: options.agents } : {}),
|
|
94
96
|
cloud,
|
|
95
97
|
};
|
|
96
98
|
}
|
package/src/cursor-config.ts
CHANGED
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
} from "node:fs";
|
|
14
14
|
import { dirname, join } from "node:path";
|
|
15
15
|
import { CONFIG_DIR_NAME, getAgentDir } from "@earendil-works/pi-coding-agent";
|
|
16
|
+
import type { ModelThinkingLevel } from "@earendil-works/pi-ai";
|
|
16
17
|
import { parseOptionalEnvBoolean } from "./cursor-env-boolean.js";
|
|
17
18
|
import { asRecord } from "./cursor-record-utils.js";
|
|
18
19
|
|
|
@@ -36,6 +37,7 @@ export const CURSOR_SANDBOX_ENV = "PI_CURSOR_SANDBOX";
|
|
|
36
37
|
export const CURSOR_LOCAL_FORCE_ENV = "PI_CURSOR_LOCAL_FORCE";
|
|
37
38
|
export const CURSOR_LOCAL_RESUME_ENV = "PI_CURSOR_LOCAL_RESUME";
|
|
38
39
|
export const CURSOR_HTTP1_ENV = "PI_CURSOR_HTTP_1_1";
|
|
40
|
+
export const CURSOR_STATE_ROOT_ENV = "PI_CURSOR_SDK_STATE_ROOT";
|
|
39
41
|
|
|
40
42
|
export type CursorConfigSource = "cli" | "environment" | "project" | "user" | "session" | "model-alias" | "builtin";
|
|
41
43
|
export type CursorConfigTrustLevel = "one-shot" | "environment" | "trusted-project" | "user" | "session" | "model-catalog" | "builtin";
|
|
@@ -48,9 +50,20 @@ export interface CursorCloudEnvironmentConfig {
|
|
|
48
50
|
name?: string;
|
|
49
51
|
}
|
|
50
52
|
|
|
53
|
+
export interface CursorCustomSubagentConfig {
|
|
54
|
+
description: string;
|
|
55
|
+
prompt: string;
|
|
56
|
+
model?: string;
|
|
57
|
+
thinking?: ModelThinkingLevel;
|
|
58
|
+
fast?: boolean;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export type CursorCustomSubagentsConfig = Record<string, CursorCustomSubagentConfig>;
|
|
62
|
+
|
|
51
63
|
export interface CursorSdkConfig {
|
|
52
64
|
fastDefaults?: Record<string, boolean>;
|
|
53
65
|
runtime?: CursorRuntime;
|
|
66
|
+
subagents?: CursorCustomSubagentsConfig;
|
|
54
67
|
cloud?: {
|
|
55
68
|
repo?: string;
|
|
56
69
|
branch?: string;
|
|
@@ -73,6 +86,7 @@ export interface CursorSdkConfig {
|
|
|
73
86
|
force?: boolean;
|
|
74
87
|
resume?: boolean;
|
|
75
88
|
useHttp1ForAgent?: boolean;
|
|
89
|
+
storeRoot?: string;
|
|
76
90
|
};
|
|
77
91
|
}
|
|
78
92
|
|
|
@@ -94,6 +108,7 @@ export interface CursorResolvedSetting<T> {
|
|
|
94
108
|
|
|
95
109
|
export interface CursorResolvedSdkConfig {
|
|
96
110
|
runtime: CursorResolvedSetting<CursorRuntime>;
|
|
111
|
+
subagents: CursorResolvedSetting<CursorCustomSubagentsConfig | undefined>;
|
|
97
112
|
cloud: {
|
|
98
113
|
repo: CursorResolvedSetting<string | undefined>;
|
|
99
114
|
branch: CursorResolvedSetting<string | undefined>;
|
|
@@ -113,6 +128,7 @@ export interface CursorResolvedSdkConfig {
|
|
|
113
128
|
force: CursorResolvedSetting<boolean>;
|
|
114
129
|
resume: CursorResolvedSetting<boolean>;
|
|
115
130
|
useHttp1ForAgent: CursorResolvedSetting<boolean>;
|
|
131
|
+
storeRoot: CursorResolvedSetting<string | undefined>;
|
|
116
132
|
};
|
|
117
133
|
}
|
|
118
134
|
|
|
@@ -237,6 +253,44 @@ function parseCloudEnvironment(value: unknown): CursorCloudEnvironmentConfig | u
|
|
|
237
253
|
return Object.keys(parsed).length > 0 ? parsed : undefined;
|
|
238
254
|
}
|
|
239
255
|
|
|
256
|
+
const THINKING_LEVELS = {
|
|
257
|
+
off: true,
|
|
258
|
+
minimal: true,
|
|
259
|
+
low: true,
|
|
260
|
+
medium: true,
|
|
261
|
+
high: true,
|
|
262
|
+
xhigh: true,
|
|
263
|
+
max: true,
|
|
264
|
+
} satisfies Record<ModelThinkingLevel, true>;
|
|
265
|
+
|
|
266
|
+
function isCursorSubagentThinkingLevel(value: unknown): value is ModelThinkingLevel {
|
|
267
|
+
return typeof value === "string" && Object.hasOwn(THINKING_LEVELS, value);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function parseCustomSubagents(value: unknown): CursorCustomSubagentsConfig | undefined {
|
|
271
|
+
const record = asRecord(value);
|
|
272
|
+
if (!record) return undefined;
|
|
273
|
+
const entries: Array<[string, CursorCustomSubagentConfig]> = [];
|
|
274
|
+
for (const [name, raw] of Object.entries(record)) {
|
|
275
|
+
// Extension config policy, not an upstream SDK naming restriction.
|
|
276
|
+
if (!/^[A-Za-z][A-Za-z0-9._-]{0,63}$/.test(name)) continue;
|
|
277
|
+
const entry = asRecord(raw);
|
|
278
|
+
const description = parseNonEmptyString(entry?.description);
|
|
279
|
+
const prompt = parseNonEmptyString(entry?.prompt);
|
|
280
|
+
if (!entry || !description || !prompt) continue;
|
|
281
|
+
const model = parseNonEmptyString(entry.model);
|
|
282
|
+
const thinking = entry.thinking;
|
|
283
|
+
entries.push([name, {
|
|
284
|
+
description,
|
|
285
|
+
prompt,
|
|
286
|
+
...(model ? { model } : {}),
|
|
287
|
+
...(isCursorSubagentThinkingLevel(thinking) ? { thinking } : {}),
|
|
288
|
+
...(typeof entry.fast === "boolean" ? { fast: entry.fast } : {}),
|
|
289
|
+
}]);
|
|
290
|
+
}
|
|
291
|
+
return entries.length ? Object.fromEntries(entries) : undefined;
|
|
292
|
+
}
|
|
293
|
+
|
|
240
294
|
export function parseCursorSdkConfig(value: unknown): CursorSdkConfig | undefined {
|
|
241
295
|
const record = asRecord(value);
|
|
242
296
|
if (!record) return undefined;
|
|
@@ -244,6 +298,9 @@ export function parseCursorSdkConfig(value: unknown): CursorSdkConfig | undefine
|
|
|
244
298
|
|
|
245
299
|
if (isCursorRuntime(record.runtime)) config.runtime = record.runtime;
|
|
246
300
|
|
|
301
|
+
const subagents = parseCustomSubagents(record.subagents);
|
|
302
|
+
if (subagents) config.subagents = subagents;
|
|
303
|
+
|
|
247
304
|
const fastDefaults = asRecord(record.fastDefaults);
|
|
248
305
|
if (fastDefaults) {
|
|
249
306
|
config.fastDefaults = Object.fromEntries(
|
|
@@ -275,6 +332,7 @@ export function parseCursorSdkConfig(value: unknown): CursorSdkConfig | undefine
|
|
|
275
332
|
const local = asRecord(record.local);
|
|
276
333
|
if (local) {
|
|
277
334
|
const parsedLocal: NonNullable<CursorSdkConfig["local"]> = {};
|
|
335
|
+
if (typeof local.storeRoot === "string" && local.storeRoot.trim()) parsedLocal.storeRoot = local.storeRoot;
|
|
278
336
|
if (typeof local.autoReview === "boolean") parsedLocal.autoReview = local.autoReview;
|
|
279
337
|
if (typeof local.sandbox === "boolean") parsedLocal.sandbox = local.sandbox;
|
|
280
338
|
if (typeof local.force === "boolean") parsedLocal.force = local.force;
|
|
@@ -533,6 +591,8 @@ const CLOUD_ORDER: CursorFieldSource[] = ["cli", "environment", "session", "user
|
|
|
533
591
|
const LOCAL_ORDER: CursorFieldSource[] = ["cli", "environment", "project", "user", "builtin"];
|
|
534
592
|
const LOCAL_FORCE_ORDER: CursorFieldSource[] = ["cli", "environment", "builtin"];
|
|
535
593
|
const HTTP1_ORDER: CursorFieldSource[] = ["session", "environment", "user", "builtin"];
|
|
594
|
+
const SUBAGENTS_ORDER: CursorFieldSource[] = ["project", "user", "builtin"];
|
|
595
|
+
const STORE_ROOT_ORDER: CursorFieldSource[] = ["environment", "user", "builtin"];
|
|
536
596
|
|
|
537
597
|
function buildFieldLayers<T>(order: CursorFieldSource[], values: CursorFieldValues<T>): Array<CursorResolvedSetting<T> | undefined> {
|
|
538
598
|
return order.map((source) => (source === "builtin" ? resolved("builtin", values.builtin as T) : valueFrom(source, values[source])));
|
|
@@ -550,6 +610,16 @@ function resolveEnvNamesSafetyField(order: CursorFieldSource[], values: CursorFi
|
|
|
550
610
|
return resolveWithCap(buildFieldLayers(order, values), valueFrom("user", values.user), envNamesCap);
|
|
551
611
|
}
|
|
552
612
|
|
|
613
|
+
export function resolveCursorLocalStoreRoot(
|
|
614
|
+
{ env = process.env, user }: Pick<ResolveCursorSdkConfigOptions, "env" | "user"> = {},
|
|
615
|
+
): CursorResolvedSetting<string | undefined> {
|
|
616
|
+
return resolveOrdinaryField(STORE_ROOT_ORDER, {
|
|
617
|
+
environment: env[CURSOR_STATE_ROOT_ENV]?.trim() ? env[CURSOR_STATE_ROOT_ENV] : undefined,
|
|
618
|
+
user: user?.local?.storeRoot?.trim() ? user.local.storeRoot : undefined,
|
|
619
|
+
builtin: undefined,
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
|
|
553
623
|
export function cursorSdkConfigFromEnv(env: Record<string, string | undefined> = process.env): CursorSdkConfig {
|
|
554
624
|
const config: CursorSdkConfig = {};
|
|
555
625
|
const runtime = validateExplicitValue(env[CURSOR_RUNTIME_ENV], CURSOR_RUNTIME_ENV, isCursorRuntime, '"local" or "cloud"');
|
|
@@ -648,6 +718,11 @@ export function resolveCursorSdkConfig(options: ResolveCursorSdkConfigOptions =
|
|
|
648
718
|
},
|
|
649
719
|
(value) => (value === "cloud" ? 1 : 0),
|
|
650
720
|
),
|
|
721
|
+
subagents: resolveOrdinaryField(SUBAGENTS_ORDER, {
|
|
722
|
+
project: parseCustomSubagents(project?.subagents),
|
|
723
|
+
user: parseCustomSubagents(user?.subagents),
|
|
724
|
+
builtin: undefined,
|
|
725
|
+
}),
|
|
651
726
|
cloud: {
|
|
652
727
|
repo: resolveOrdinaryField(CLOUD_ORDER, {
|
|
653
728
|
cli: cli?.cloud?.repo,
|
|
@@ -752,6 +827,7 @@ export function resolveCursorSdkConfig(options: ResolveCursorSdkConfigOptions =
|
|
|
752
827
|
}),
|
|
753
828
|
},
|
|
754
829
|
local: {
|
|
830
|
+
storeRoot: resolveCursorLocalStoreRoot({ env: options.env, user }),
|
|
755
831
|
autoReview: resolveOrdinaryField(LOCAL_ORDER, {
|
|
756
832
|
cli: cli?.local?.autoReview,
|
|
757
833
|
environment: env.local?.autoReview,
|