@cursor/july 0.1.6 → 0.1.7

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.
Files changed (83) hide show
  1. package/dist/bin/agent-serve.js +42 -17
  2. package/dist/channels/slack/post-update-delivery.d.ts +85 -0
  3. package/dist/channels/slack/post-update-delivery.d.ts.map +1 -0
  4. package/dist/docs/404.html +1 -1
  5. package/dist/docs/ab.html +2 -2
  6. package/dist/docs/assets/{app.DMboGKUD.js → app.COTN7wgo.js} +1 -1
  7. package/dist/docs/assets/chunks/@localSearchIndexroot.B7UcKvIn.js +1 -0
  8. package/dist/docs/assets/chunks/{VPLocalSearchBox.DkEqEnJU.js → VPLocalSearchBox.BW3TBdT0.js} +1 -1
  9. package/dist/docs/assets/chunks/{theme.ASugdMNm.js → theme.BEJW0vE7.js} +2 -2
  10. package/dist/docs/building-with-agents.html +2 -2
  11. package/dist/docs/concepts.html +2 -2
  12. package/dist/docs/deployment.html +2 -2
  13. package/dist/docs/evals.html +2 -2
  14. package/dist/docs/example-agents/approval-buddy.html +2 -2
  15. package/dist/docs/example-agents/benny.html +2 -2
  16. package/dist/docs/example-agents/bugbot.html +2 -2
  17. package/dist/docs/example-agents/codebase-wiki.html +2 -2
  18. package/dist/docs/example-agents/codeowners-review.html +2 -2
  19. package/dist/docs/example-agents/concierge.html +2 -2
  20. package/dist/docs/example-agents/fsd.html +2 -2
  21. package/dist/docs/example-agents/index.html +2 -2
  22. package/dist/docs/example-agents/knowledge-base.html +2 -2
  23. package/dist/docs/example-agents/security-reviewer.html +2 -2
  24. package/dist/docs/example-agents/slack-agent.html +2 -2
  25. package/dist/docs/example-agents/weather-agent.html +2 -2
  26. package/dist/docs/guides/agent-to-agent.html +2 -2
  27. package/dist/docs/guides/cloud-runtime.html +2 -2
  28. package/dist/docs/guides/github.html +2 -2
  29. package/dist/docs/guides/human-in-the-loop.html +2 -2
  30. package/dist/docs/guides/slack.html +2 -2
  31. package/dist/docs/guides/webhooks.html +2 -2
  32. package/dist/docs/hillclimbing.html +2 -2
  33. package/dist/docs/index.html +2 -2
  34. package/dist/docs/quickstart.html +2 -2
  35. package/dist/docs/reference/agent-config.html +2 -2
  36. package/dist/docs/reference/channels.html +2 -2
  37. package/dist/docs/reference/cli.html +2 -2
  38. package/dist/docs/reference/connections.html +2 -2
  39. package/dist/docs/reference/hooks.html +2 -2
  40. package/dist/docs/reference/http-api.html +2 -2
  41. package/dist/docs/reference/instructions.html +2 -2
  42. package/dist/docs/reference/playground.html +2 -2
  43. package/dist/docs/reference/project-layout.html +2 -2
  44. package/dist/docs/reference/schedules.html +2 -2
  45. package/dist/docs/reference/sessions.html +2 -2
  46. package/dist/docs/reference/skills.html +2 -2
  47. package/dist/docs/reference/subagents.html +2 -2
  48. package/dist/docs/reference/tools.html +2 -2
  49. package/dist/docs/scaffolding-agents.html +2 -2
  50. package/dist/docs/storage.html +2 -2
  51. package/dist/docs/troubleshooting.html +2 -2
  52. package/dist/evals.d.ts +2 -2
  53. package/dist/internal/cli-ax.d.ts +23 -10
  54. package/dist/internal/cli-ax.d.ts.map +1 -1
  55. package/dist/internal/cli-ax.js +358 -55
  56. package/dist/internal/eval-run-store.d.ts +2 -0
  57. package/dist/internal/eval-run-store.d.ts.map +1 -1
  58. package/dist/internal/eval-run-store.js +4 -4
  59. package/dist/internal/evals-client.d.ts +96 -0
  60. package/dist/internal/evals-client.d.ts.map +1 -0
  61. package/dist/internal/evals-client.js +262 -0
  62. package/dist/internal/init-project.js +3 -3
  63. package/dist/internal/json-dir-store.d.ts +32 -0
  64. package/dist/internal/json-dir-store.d.ts.map +1 -0
  65. package/dist/internal/persistence-coordinator.d.ts +127 -0
  66. package/dist/internal/persistence-coordinator.d.ts.map +1 -0
  67. package/dist/internal/server.js +11 -2
  68. package/dist/persistence.d.ts +184 -0
  69. package/dist/persistence.d.ts.map +1 -0
  70. package/dist/playground/assets/index-72vCOBWO.js +86 -0
  71. package/dist/playground/assets/index-BjnMwYoR.css +1 -0
  72. package/dist/playground/index.html +2 -2
  73. package/package.json +1 -1
  74. package/src/bin/agent-serve.ts +47 -16
  75. package/src/evals.ts +2 -2
  76. package/src/internal/cli-ax.ts +466 -75
  77. package/src/internal/eval-run-store.ts +5 -0
  78. package/src/internal/evals-client.ts +431 -0
  79. package/src/internal/init-project.ts +3 -3
  80. package/src/internal/server.ts +12 -0
  81. package/dist/docs/assets/chunks/@localSearchIndexroot.O6eP7QZr.js +0 -1
  82. package/dist/playground/assets/index-7GJIUFQj.css +0 -1
  83. package/dist/playground/assets/index-mux9aj5P.js +0 -319
@@ -27,7 +27,7 @@ import { resolve } from "node:path";
27
27
  import { parseArgs } from "node:util";
28
28
  import { formatDiagnostics, projectInfo, resolveAgentMounts, serve, } from "../index.js";
29
29
  import { registerAuthoredModuleLoaders } from "../internal/authored-loaders.js";
30
- import { cmdCall, cmdChat, cmdEval, cmdInit, cmdLogs, cmdPlayground, cmdResume, cmdRun, cmdSession, cmdSessions, cmdTrajectory, } from "../internal/cli-ax.js";
30
+ import { cmdCall, cmdChat, cmdEval, cmdEvalStatus, cmdInit, cmdLogs, cmdPlayground, cmdResume, cmdRun, cmdSession, cmdSessions, cmdTrajectory, } from "../internal/cli-ax.js";
31
31
  import { cmdDeploy, cmdDeploymentStatus, cmdDeployments, cmdRotatePodCredential, cmdRotateToken, cmdSecretsList, cmdSecretsSet, cmdSecretsUnset, cmdStop, } from "../internal/cli-deploy.js";
32
32
  import { CLI_COMMAND_NAME as CLI } from "../internal/distribution.js";
33
33
  import { clearTerminal, stdoutPalette } from "../internal/terminal-style.js";
@@ -67,8 +67,11 @@ Usage:
67
67
  ${CLI} init [dir] [--json]
68
68
  ${CLI} eval [--dir <path>] [evalId...] [--list] [--json]
69
69
  [--tag <tag>]... [--verbose] [--timeout-ms <n>]
70
- [--no-stream] [--local | --url <baseUrl>] [--slug <slug>]
70
+ [--no-stream] [--no-wait]
71
+ [--prod | --url <baseUrl>] [--slug <slug>]
71
72
  [--team <id>]
73
+ ${CLI} eval status [runId] --prod|--url <baseUrl> [--dir <path>] [--json]
74
+ [--slug <slug>] [--team <id>]
72
75
  ${CLI} info [--dir <path>] [--json]
73
76
  ${CLI} validate [--dir <path>]
74
77
  ${CLI} login [--api-key <key>] [--key-name <name>]
@@ -132,11 +135,19 @@ Commands:
132
135
  machine-readable and never blocks on login. No directory:
133
136
  print the setup guide.
134
137
  eval Run filesystem evals under evals/**/*.eval.ts (streams on a TTY).
135
- Runs against the team's hosted deployment by default (slug from
136
- --slug or the directory name); pass --local for an ephemeral
137
- local server, or --url for a running one. Pass evalId args to
138
- select: one datapoint (weather/nyc), a whole file (weather
139
- all cases in that file), several of either, or omit to run all.
138
+ Default: ephemeral local harness against evals on disk. Pass
139
+ --prod to kick off the batch on the team's hosted deployment
140
+ (slug from --slug or the directory name) via /v1/dev/evals/runs
141
+ so results appear in the playground and persist when the agent
142
+ declares an evals storage table; or --url for a running server
143
+ (same server-side path). With --prod/--url, pass --no-wait to
144
+ return the runId immediately without polling; check later with
145
+ \`${CLI} eval status <runId> --prod\` (omit runId to list recent
146
+ runs; exit 3 while still running). The status subcommand only
147
+ binds when --prod/--url is set, so an eval id named status still
148
+ runs locally. Pass evalId args to select: one datapoint
149
+ (weather/nyc), a whole file (weather → all cases in that file),
150
+ several of either, or omit to run all.
140
151
  info Print the discovered agent surface (tools, skills, channels, ...).
141
152
  validate Check the project(s) and exit non-zero on error diagnostics.
142
153
  login Sign the host in to Cursor: browser sign-in mints a named,
@@ -171,7 +182,8 @@ Agent loop:
171
182
  ${CLI} validate --dir .
172
183
  ${CLI} info --dir . --json
173
184
  ${CLI} run --dir . --message "..."
174
- ${CLI} eval --local --dir .
185
+ ${CLI} eval --dir .
186
+ ${CLI} eval --prod --dir .
175
187
  ${CLI} dev .
176
188
 
177
189
  Options:
@@ -210,15 +222,14 @@ Options:
210
222
  --prod chat/resume/run/call/eval/logs/sessions/session/playground:
211
223
  use the team's hosted deployment. Slug from --slug or the
212
224
  --dir basename. Mutually exclusive with --url. Requires
213
- \`${CLI} login\`. (eval already defaults to the
214
- deployment; there --prod is just being explicit.)
215
- --local eval: run against an ephemeral local server instead of
216
- the hosted deployment. Mutually exclusive with --url.
225
+ \`${CLI} login\`. For eval, this is how you opt into the
226
+ persisted server-side batch (default is local).
217
227
  --once logs: print current progress / log buffer once and exit
218
228
  (default is to follow).
219
229
  --print playground: print the URL only; do not open a browser.
220
- --no-wait deploy/stop: return right after the request is accepted
221
- instead of polling until a terminal status.
230
+ --no-wait deploy/stop/eval: return right after the request is
231
+ accepted instead of polling until a terminal status.
232
+ For eval, prints the runId (deployment / --url only).
222
233
  --no-playground Disable the bundled web playground at /playground (also skips
223
234
  auto-build / HMR).
224
235
  --no-docs Disable the documentation site at /docs (also skips its
@@ -326,7 +337,6 @@ function main(argv) {
326
337
  "no-docs": { type: "boolean", default: false },
327
338
  url: { type: "string" },
328
339
  prod: { type: "boolean", default: false },
329
- local: { type: "boolean", default: false },
330
340
  message: { type: "string", multiple: true },
331
341
  input: { type: "string" },
332
342
  "messages-file": { type: "string" },
@@ -550,6 +560,21 @@ function main(argv) {
550
560
  }));
551
561
  }
552
562
  case "eval": {
563
+ // Remote status subcommand only when targeting --prod/--url. Otherwise
564
+ // the bare token "status" is a normal eval id (evals/status.eval.ts).
565
+ if (positionals[0] === "status" &&
566
+ (values.prod === true || values.url !== undefined)) {
567
+ return cmdEvalStatus(positionals[1], axFromOptions({
568
+ dir,
569
+ json: values.json,
570
+ url: values.url,
571
+ prod: values.prod,
572
+ team: values.team,
573
+ apiKey: values["api-key"],
574
+ slug: values.slug,
575
+ bearerToken: values["bearer-token"],
576
+ }));
577
+ }
553
578
  return cmdEval(axFromOptions({
554
579
  dir,
555
580
  evalIds: positionals,
@@ -559,7 +584,7 @@ function main(argv) {
559
584
  tags: values.tag,
560
585
  url: values.url,
561
586
  prod: values.prod,
562
- local: values.local,
587
+ noWait: values["no-wait"],
563
588
  team: values.team,
564
589
  apiKey: values["api-key"],
565
590
  slug: values.slug,
@@ -870,7 +895,7 @@ function axFromOptions(partial) {
870
895
  toolInput: partial.toolInput,
871
896
  url: partial.url,
872
897
  prod: partial.prod,
873
- local: partial.local,
898
+ noWait: partial.noWait,
874
899
  team: partial.team,
875
900
  apiKey: partial.apiKey,
876
901
  fetchImpl: partial.fetchImpl,
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Live-reply delivery strategies for the Slack default handlers.
3
+ *
4
+ * A single strategy owns how an in-progress reply is opened, updated,
5
+ * finalized, and cleaned up so the handlers in `defaults.ts` don't fork on the
6
+ * delivery mode at every event:
7
+ *
8
+ * - `stream`: Slack chat.startStream / appendStream / stopStream.
9
+ * - `post-update`: a chat.postMessage skeleton edited with chat.update. This is
10
+ * the only path that preserves Cursor-account identity pinning (which only
11
+ * covers postMessage).
12
+ *
13
+ * `buildDefaultEvents` selects one via {@link selectLiveDeliveryStrategy} up
14
+ * front and calls into it. All calls keep the same soft-fail / log behavior as
15
+ * the inlined logic they replaced.
16
+ */
17
+ import type { ChannelEventContext } from "../../types.js";
18
+ import type { SlackLog } from "./log.js";
19
+ import type { SlackBotToken, SlackChannelState } from "./types.js";
20
+ type SlackChannel = ChannelEventContext<SlackChannelState>;
21
+ export interface LiveDeliveryDeps {
22
+ botToken: SlackBotToken | undefined;
23
+ getLog: () => SlackLog;
24
+ }
25
+ /**
26
+ * How the default handlers deliver an in-progress reply. Methods write live
27
+ * delivery state (`streamTs`, `streamChannelId`, `lastPostedText`,
28
+ * `lastPostUpdateAtMs`, `streamingUnavailable`) on `channel.state` directly.
29
+ */
30
+ export interface LiveDeliveryStrategy {
31
+ /** True when tool-call thinking steps can be appended to the live message. */
32
+ readonly inlineToolSteps: boolean;
33
+ /** Open the live message (skeleton post / stream start). */
34
+ start(args: {
35
+ channel: SlackChannel;
36
+ channelId: string;
37
+ threadTs: string;
38
+ sessionId: string;
39
+ }): Promise<void>;
40
+ /** Push the latest cumulative text to the live message (throttled). */
41
+ append(args: {
42
+ channel: SlackChannel;
43
+ channelId: string;
44
+ streamTs: string;
45
+ text: string;
46
+ sessionId: string;
47
+ }): Promise<void>;
48
+ /**
49
+ * Flush the final reply text. `delivered` is false only when the caller must
50
+ * post the full reply as a fresh message (finalize failed on partial text).
51
+ */
52
+ finalize(args: {
53
+ channel: SlackChannel;
54
+ channelId: string;
55
+ streamTs: string;
56
+ text: string;
57
+ sessionId: string;
58
+ }): Promise<{
59
+ delivered: boolean;
60
+ }>;
61
+ /** Close the live message when the turn produced no final text. */
62
+ finalizeEmpty(args: {
63
+ channel: SlackChannel;
64
+ channelId: string;
65
+ streamTs: string;
66
+ }): Promise<void>;
67
+ /** Best-effort remove a live message left open after the turn ended. */
68
+ cleanupOrphan(args: {
69
+ channel: SlackChannel;
70
+ }): Promise<void>;
71
+ /** Deliver the error text into the live message; `delivered` gates a fallback post. */
72
+ fail(args: {
73
+ channel: SlackChannel;
74
+ channelId: string;
75
+ streamTs: string;
76
+ errorText: string;
77
+ sessionId: string;
78
+ }): Promise<{
79
+ delivered: boolean;
80
+ }>;
81
+ }
82
+ /** Pick the live-reply delivery strategy for a `buildDefaultEvents` instance. */
83
+ export declare function selectLiveDeliveryStrategy(deps: LiveDeliveryDeps, usePostUpdate: boolean): LiveDeliveryStrategy;
84
+ export {};
85
+ //# sourceMappingURL=post-update-delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-update-delivery.d.ts","sourceRoot":"","sources":["../../../src/channels/slack/post-update-delivery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAW1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnE,KAAK,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,4DAA4D;IAC5D,KAAK,CAAC,IAAI,EAAE;QACV,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,IAAI,EAAE;QACX,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE;QACb,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpC,mEAAmE;IACnE,aAAa,CAAC,IAAI,EAAE;QAClB,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,wEAAwE;IACxE,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,uFAAuF;IACvF,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,YAAY,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrC;AA6RD,iFAAiF;AACjF,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,gBAAgB,EACtB,aAAa,EAAE,OAAO,GACrB,oBAAoB,CAItB"}
@@ -9,7 +9,7 @@
9
9
  <link rel="preload stylesheet" href="/docs/assets/style.Bj-IXa5W.css" as="style">
10
10
  <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/docs/assets/app.DMboGKUD.js"></script>
12
+ <script type="module" src="/docs/assets/app.COTN7wgo.js"></script>
13
13
  <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
14
  <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
15
15
  <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
package/dist/docs/ab.html CHANGED
@@ -9,9 +9,9 @@
9
9
  <link rel="preload stylesheet" href="/docs/assets/style.Bj-IXa5W.css" as="style">
10
10
  <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/docs/assets/app.DMboGKUD.js"></script>
12
+ <script type="module" src="/docs/assets/app.COTN7wgo.js"></script>
13
13
  <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
- <link rel="modulepreload" href="/docs/assets/chunks/theme.ASugdMNm.js">
14
+ <link rel="modulepreload" href="/docs/assets/chunks/theme.BEJW0vE7.js">
15
15
  <link rel="modulepreload" href="/docs/assets/chunks/framework.CAZyNGu9.js">
16
16
  <link rel="modulepreload" href="/docs/assets/ab.md.BMCZ6Hd7.lean.js">
17
17
  <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
@@ -1 +1 @@
1
- import{t as p}from"./chunks/theme.ASugdMNm.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.CAZyNGu9.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
1
+ import{t as p}from"./chunks/theme.BEJW0vE7.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.CAZyNGu9.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};