@canonry/canonry 7.62.1 → 7.63.1

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 (131) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +2 -1
  2. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +16 -3
  3. package/assets/assets/{AgentSetupPage-DtPnVaeF.js → AgentSetupPage-D6lCJ1G1.js} +1 -1
  4. package/assets/assets/{AuditHistoryPanel-Ce_oy4OV.js → AuditHistoryPanel-DlgI3o-U.js} +1 -1
  5. package/assets/assets/{BacklinksPage-CrqPWRd8.js → BacklinksPage-ByiMqbSI.js} +1 -1
  6. package/assets/assets/{HistoryPage-5v0JM7DN.js → HistoryPage-DclVeuLO.js} +1 -1
  7. package/assets/assets/{MeasurementPropertyPage-Bm5Mrd5a.js → MeasurementPropertyPage-DDHybtHa.js} +1 -1
  8. package/assets/assets/{ProjectPage-DaWUh6iw.js → ProjectPage-vBu6oWFi.js} +1 -1
  9. package/assets/assets/{RunsPage-CfdAR2v2.js → RunsPage-CYBJ6pXX.js} +1 -1
  10. package/assets/assets/{SettingsPage-BFooA7JG.js → SettingsPage-w0GmXir0.js} +1 -1
  11. package/assets/assets/{SiteHealthSection-CerUQgAp.js → SiteHealthSection-DDTjGZ05.js} +2 -2
  12. package/assets/assets/ToneBadge-MKA1xeYc.js +60 -0
  13. package/assets/assets/{TrafficPage-C5fhZGJ2.js → TrafficPage-hUWYv-HT.js} +1 -1
  14. package/assets/assets/{TrafficSourceDetailPage-BoqARHYz.js → TrafficSourceDetailPage-CGHgPxs8.js} +1 -1
  15. package/assets/assets/{account-context-D_CDYrs8.js → account-context-qX-Es0RK.js} +1 -1
  16. package/assets/assets/{card-C6z0XyOo.js → card-CzROANT5.js} +1 -1
  17. package/assets/assets/{extract-error-message-By_wcU8g.js → extract-error-message-BY1STLiX.js} +1 -1
  18. package/assets/assets/{format-helpers-D3Ubm8vk.js → format-helpers-BNQR1HNK.js} +1 -1
  19. package/assets/assets/{index-DSVFZqv6.js → index-LmB57HOs.js} +4 -4
  20. package/assets/assets/{query-client-BETh6SO9.js → query-client-Gz37p16p.js} +1 -1
  21. package/assets/assets/{react-query-DzDr4w41.js → react-query-C6DtBAYQ.js} +1 -1
  22. package/assets/assets/{react-sigma_core.esm.min-3kgtOWbQ.js → react-sigma_core.esm.min-CgxuyPPF.js} +1 -1
  23. package/assets/assets/{service-BUaUaize.js → service-DyHZWnMe.js} +1 -1
  24. package/assets/index.html +7 -7
  25. package/dist/{ads-7WUY5CVC.js → ads-FOUJNHP4.js} +3 -3
  26. package/dist/{agent-NOA33LVM.js → agent-UVDVH7LK.js} +7 -7
  27. package/dist/{agent-ask-PKQDFJ7K.js → agent-ask-UEYN2SQX.js} +3 -3
  28. package/dist/{agent-conversations-7HVWPSFB.js → agent-conversations-F54376Q2.js} +3 -3
  29. package/dist/{agent-memory-Y4M2EWKA.js → agent-memory-SOHBTJ4U.js} +3 -3
  30. package/dist/{agent-providers-P67FWELV.js → agent-providers-MMEK2H6V.js} +3 -3
  31. package/dist/{agent-transcript-C2BYWPRT.js → agent-transcript-5IJ3VAEV.js} +3 -3
  32. package/dist/{analytics-XHYWNNW7.js → analytics-LDWO5IW6.js} +3 -3
  33. package/dist/{apply-6OIWDXQP.js → apply-PSGFDJIC.js} +3 -3
  34. package/dist/{backfill-KQPXCUUJ.js → backfill-2BVFKQ6J.js} +9 -9
  35. package/dist/{backlinks-ASYIZFLQ.js → backlinks-X6DXIL2O.js} +3 -3
  36. package/dist/{bing-ZLKJ3MIL.js → bing-3HMFUEOO.js} +3 -3
  37. package/dist/{bootstrap-KMVQY5JD.js → bootstrap-ZUSSLXCI.js} +10 -10
  38. package/dist/{cdp-V2HX4ZLE.js → cdp-FH627HJ6.js} +7 -7
  39. package/dist/{chunk-2HNTNKFC.js → chunk-22ABGRB7.js} +505 -131
  40. package/dist/{chunk-GSHHYR24.js → chunk-2LAL5W6J.js} +3 -3
  41. package/dist/{chunk-LFXKB5FZ.js → chunk-32KNDPD3.js} +351 -333
  42. package/dist/{chunk-3B2GBWIA.js → chunk-5GMYD7UZ.js} +5 -5
  43. package/dist/{chunk-X3GWBK7N.js → chunk-5VAC4KQ2.js} +3 -3
  44. package/dist/{chunk-WKZZILBI.js → chunk-5YC6IU44.js} +2 -2
  45. package/dist/{chunk-5NYS3ABL.js → chunk-67262NJL.js} +2 -2
  46. package/dist/{chunk-7EWDQUNH.js → chunk-6ABOEN5D.js} +8 -8
  47. package/dist/{chunk-2LY4FY4N.js → chunk-A57HYHJ3.js} +1 -1
  48. package/dist/{chunk-O6VSPM5S.js → chunk-AGSQWIE4.js} +76 -29
  49. package/dist/{chunk-KLGHY67V.js → chunk-CWMJQ2JV.js} +4 -4
  50. package/dist/{chunk-U2WPZZPQ.js → chunk-EHTSCLEL.js} +1 -1
  51. package/dist/{chunk-IVZMXHXE.js → chunk-ERJ54U2I.js} +1 -1
  52. package/dist/{chunk-IALK4DQJ.js → chunk-GRWZC3GQ.js} +1 -1
  53. package/dist/{chunk-YQGVA64Q.js → chunk-H22RCHYH.js} +22 -6
  54. package/dist/{chunk-RGD5SDT3.js → chunk-HNZQVIPS.js} +1 -1
  55. package/dist/{chunk-UVDBUMYV.js → chunk-IDQZTPRG.js} +2 -2
  56. package/dist/{chunk-I3CMCTNE.js → chunk-IRRONWF7.js} +4 -4
  57. package/dist/{chunk-UUGT7UMF.js → chunk-JM6OFCLX.js} +4 -4
  58. package/dist/{chunk-B5CSCGVD.js → chunk-L2QPAUTQ.js} +2 -1
  59. package/dist/{chunk-CJC4AQ2M.js → chunk-LBD7YXVD.js} +2 -2
  60. package/dist/{chunk-SDZKHJ6W.js → chunk-LEG7F3DN.js} +20 -2
  61. package/dist/{chunk-MMRJUOE2.js → chunk-NOQCIXM6.js} +1 -1
  62. package/dist/{chunk-Q7PTBHNG.js → chunk-OIHJJHJR.js} +1 -1
  63. package/dist/{chunk-YBDUZBGU.js → chunk-PH7RTAWW.js} +1 -1
  64. package/dist/{chunk-LAILXR2F.js → chunk-QNFX7ZCT.js} +1 -1
  65. package/dist/{chunk-SYQLUOR7.js → chunk-SG2OPR7J.js} +1 -1
  66. package/dist/{chunk-DAKJBAUN.js → chunk-SN5A767O.js} +1 -1
  67. package/dist/{chunk-YJAN2ZDV.js → chunk-SQYYAYH6.js} +3 -3
  68. package/dist/{chunk-U6CNJC2Y.js → chunk-TKLE2Y6H.js} +35 -1
  69. package/dist/{chunk-KTQVRQDM.js → chunk-UBP3AAKA.js} +1 -1
  70. package/dist/{chunk-APQ5EAL2.js → chunk-UYPBR3SF.js} +2 -2
  71. package/dist/{chunk-AO4P75DI.js → chunk-V3QMOGZE.js} +5 -5
  72. package/dist/{chunk-OJVXKPIN.js → chunk-ZJTU73GW.js} +3 -3
  73. package/dist/{citations-NOCVQPPU.js → citations-BKWLP5S3.js} +3 -3
  74. package/dist/{cli-catalog-WOWYZ7Q2.js → cli-catalog-VRJS66GR.js} +3 -3
  75. package/dist/{cli-commands-VSS42S5I.js → cli-commands-ONFE63OB.js} +7 -7
  76. package/dist/cli.js +13 -13
  77. package/dist/{competitor-KQK66W3M.js → competitor-VELMM2TJ.js} +3 -3
  78. package/dist/{content-OHOQO5LP.js → content-I525MITL.js} +3 -3
  79. package/dist/{dashboard-W6MII62Z.js → dashboard-BC4NKAO2.js} +6 -6
  80. package/dist/{demo-23H25IOO.js → demo-ZRFZ5EBH.js} +1 -1
  81. package/dist/{demo-server-WYYWTH4H.js → demo-server-7R7NGWJA.js} +11 -11
  82. package/dist/{discover-557WRGEK.js → discover-E2CV5ZP7.js} +3 -3
  83. package/dist/{discover-eval-GGRZZHHI.js → discover-eval-ESRCWRHP.js} +3 -3
  84. package/dist/{doctor-D5JNJKVE.js → doctor-BQDVERII.js} +3 -3
  85. package/dist/{evidence-DHYYVPWW.js → evidence-NUULK5XD.js} +3 -3
  86. package/dist/{export-cmd-M24S3YBY.js → export-cmd-K324RTN4.js} +3 -3
  87. package/dist/{ga-XM6WXZNP.js → ga-PQ36UFTK.js} +3 -3
  88. package/dist/{gbp-M3S5XYPG.js → gbp-KTYA6KHR.js} +3 -3
  89. package/dist/{google-PULCSUOU.js → google-3D4E7TJX.js} +4 -4
  90. package/dist/{google-marketing-AA625HA4.js → google-marketing-4FRO4PRN.js} +1 -1
  91. package/dist/{health-cmd-LVEW6OBD.js → health-cmd-CZJOZUAQ.js} +3 -3
  92. package/dist/{history-32ZYGZGQ.js → history-JNH34GAM.js} +3 -3
  93. package/dist/index.d.ts +13 -7
  94. package/dist/index.js +24 -24
  95. package/dist/{init-VJDDRCBV.js → init-TU4VSGVU.js} +11 -11
  96. package/dist/{insights-RK3MJ4UM.js → insights-STYJSZBB.js} +3 -3
  97. package/dist/intelligence-service-MWTHUE7S.js +15 -0
  98. package/dist/{journeys-S4CPNZYU.js → journeys-POTSSBOM.js} +3 -3
  99. package/dist/{keys-WCXE7WXV.js → keys-BPCSPX2O.js} +3 -3
  100. package/dist/{keyword-HHVLC4HI.js → keyword-6SML434W.js} +3 -3
  101. package/dist/{logs-VYESWGAN.js → logs-WTKKH4UJ.js} +3 -3
  102. package/dist/{mcp-4LRFIOLC.js → mcp-HTAHMVRC.js} +2 -2
  103. package/dist/mcp.js +9 -9
  104. package/dist/{measurement-plan-AL3EHWRK.js → measurement-plan-LJHKKRZ7.js} +5 -5
  105. package/dist/{notify-LUDG5PWU.js → notify-EARS4LMG.js} +3 -3
  106. package/dist/{organic-evidence-CIOHMKLD.js → organic-evidence-W7ZQQKPL.js} +3 -3
  107. package/dist/{overview-NAZJ6PJG.js → overview-C7KQD4NR.js} +4 -4
  108. package/dist/{project-N3MU5V6T.js → project-YU2FIL4B.js} +3 -3
  109. package/dist/{query-XMI2FV6G.js → query-SYFLWHFA.js} +3 -3
  110. package/dist/{research-MQ6QA5TV.js → research-UOUXMFBV.js} +3 -3
  111. package/dist/{results-export-OFEZXCJK.js → results-export-VYPG2Z6S.js} +3 -3
  112. package/dist/{run-YQS3LCFT.js → run-GZD3MQGS.js} +4 -4
  113. package/dist/{schedule-DF6HCMXN.js → schedule-PAA2NLGF.js} +3 -3
  114. package/dist/{search-MRDJKVOL.js → search-6RWCUEEY.js} +3 -3
  115. package/dist/{serve-OCAFOFS2.js → serve-VIEGFGSK.js} +25 -25
  116. package/dist/{session-5OXLS7NP.js → session-JLH72BF5.js} +12 -12
  117. package/dist/{settings-NIF34QPH.js → settings-TTA775EJ.js} +3 -3
  118. package/dist/{skills-JOSNWG7B.js → skills-GA35KKOV.js} +2 -2
  119. package/dist/{snapshot-32DLVRIJ.js → snapshot-QVQVAMMN.js} +3 -3
  120. package/dist/{src-F63SHN5T.js → src-CTHVFVLF.js} +2 -2
  121. package/dist/{status-IERHHP4C.js → status-E7B726S6.js} +4 -4
  122. package/dist/{technical-aeo-D7CA3CK6.js → technical-aeo-SMPN3QDQ.js} +3 -3
  123. package/dist/{telemetry-DRURFCCJ.js → telemetry-CTBFPMWD.js} +4 -4
  124. package/dist/{tools-3IZMSHSY.js → tools-YOV2KHF2.js} +11 -11
  125. package/dist/{traffic-AME5NDMN.js → traffic-XACOSYYM.js} +36 -7
  126. package/dist/{users-4CQ6ATAG.js → users-WJC7SGRL.js} +3 -3
  127. package/dist/{visibility-stats-R5JBISBX.js → visibility-stats-H3ZNFV5M.js} +3 -3
  128. package/dist/{wordpress-GFK4GR3O.js → wordpress-72YMWF7F.js} +3 -3
  129. package/package.json +1 -1
  130. package/assets/assets/ToneBadge-DKvZcONW.js +0 -60
  131. package/dist/intelligence-service-UNKFCG5N.js +0 -15
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  pickProjectCitedDomain
3
- } from "./chunk-U2WPZZPQ.js";
3
+ } from "./chunk-EHTSCLEL.js";
4
4
  import {
5
5
  GBP_INSIGHT_PROVIDER,
6
6
  PERSISTENT_GAP_THRESHOLD,
@@ -14,10 +14,10 @@ import {
14
14
  mergeGscQueryTotalsWithFallback,
15
15
  readGscQueryDailyRows,
16
16
  readLatestGscDataDate
17
- } from "./chunk-2HNTNKFC.js";
17
+ } from "./chunk-22ABGRB7.js";
18
18
  import {
19
19
  getRequestContext
20
- } from "./chunk-LAILXR2F.js";
20
+ } from "./chunk-QNFX7ZCT.js";
21
21
  import {
22
22
  competitors,
23
23
  gbpDailyMetrics,
@@ -35,7 +35,7 @@ import {
35
35
  queries,
36
36
  querySnapshots,
37
37
  runs
38
- } from "./chunk-RGD5SDT3.js";
38
+ } from "./chunk-HNZQVIPS.js";
39
39
  import {
40
40
  CitationStates,
41
41
  RunKinds,
@@ -45,7 +45,7 @@ import {
45
45
  effectiveDomains,
46
46
  redactLogString,
47
47
  redactLogValue
48
- } from "./chunk-U6CNJC2Y.js";
48
+ } from "./chunk-TKLE2Y6H.js";
49
49
 
50
50
  // src/intelligence-service.ts
51
51
  import { eq, desc, asc, and, ne, or, inArray, gte, lte, isNull, sql, exists } from "drizzle-orm";
@@ -6,12 +6,12 @@ import {
6
6
  import {
7
7
  createApiClient,
8
8
  runWithUsageTags
9
- } from "./chunk-SDZKHJ6W.js";
9
+ } from "./chunk-LEG7F3DN.js";
10
10
  import {
11
11
  canonryMcpTools,
12
12
  mcpOutputSchema,
13
13
  toolOperationAccess
14
- } from "./chunk-YQGVA64Q.js";
14
+ } from "./chunk-H22RCHYH.js";
15
15
  import {
16
16
  PACKAGE_VERSION
17
17
  } from "./chunk-AOJU5LKX.js";
@@ -24,7 +24,7 @@ import {
24
24
  isReadOnlyKey,
25
25
  restrictedWriteScopes,
26
26
  upgradeCaveatFor
27
- } from "./chunk-U6CNJC2Y.js";
27
+ } from "./chunk-TKLE2Y6H.js";
28
28
 
29
29
  // src/mcp/server.ts
30
30
  import { randomUUID } from "crypto";
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-RGD5SDT3.js";
8
+ } from "./chunk-HNZQVIPS.js";
9
9
  import {
10
10
  SITE_CRAWL_GRAPH_MAX_EDGES,
11
11
  SITE_CRAWL_GRAPH_MAX_NODES,
@@ -15,7 +15,7 @@ import {
15
15
  factorStatusFromDistribution,
16
16
  factorStatusFromScore,
17
17
  roundPreservingTotal
18
- } from "./chunk-U6CNJC2Y.js";
18
+ } from "./chunk-TKLE2Y6H.js";
19
19
 
20
20
  // src/site-audit-factors.ts
21
21
  function recordedSharePct(factor) {
@@ -5,7 +5,7 @@ import {
5
5
  loadConfig,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-2LY4FY4N.js";
8
+ } from "./chunk-A57HYHJ3.js";
9
9
  import {
10
10
  CANONRY_NPM_PACKAGE_URL,
11
11
  compareSemver,
@@ -18,7 +18,7 @@ import {
18
18
  updateCheckEnvOptOut,
19
19
  upgradeCaveatFor,
20
20
  upgradeCommandFor
21
- } from "./chunk-U6CNJC2Y.js";
21
+ } from "./chunk-TKLE2Y6H.js";
22
22
 
23
23
  // src/runtime-context.ts
24
24
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -7,27 +7,27 @@ import {
7
7
  reparseStoredResult4,
8
8
  reparseStoredResult5,
9
9
  resolveStoredApiResponse
10
- } from "./chunk-APQ5EAL2.js";
10
+ } from "./chunk-UYPBR3SF.js";
11
11
  import {
12
12
  loadConfig
13
- } from "./chunk-2LY4FY4N.js";
13
+ } from "./chunk-A57HYHJ3.js";
14
14
  import {
15
15
  isMachineFormat
16
16
  } from "./chunk-HGMYEDAQ.js";
17
17
  import {
18
18
  determineCitationState
19
- } from "./chunk-U2WPZZPQ.js";
19
+ } from "./chunk-EHTSCLEL.js";
20
20
  import {
21
21
  backfillProjectAnswerMentions,
22
22
  competitorIdentityColumns,
23
23
  createRunCompetitorResolver,
24
24
  readMarketCompetitorNames,
25
25
  refreshSnapshotMentionIdentity
26
- } from "./chunk-2HNTNKFC.js";
26
+ } from "./chunk-22ABGRB7.js";
27
27
  import {
28
28
  classifyAiUserFetch,
29
29
  classifyCrawler
30
- } from "./chunk-SYQLUOR7.js";
30
+ } from "./chunk-SG2OPR7J.js";
31
31
  import {
32
32
  aiUserFetchEventsHourly,
33
33
  auditLog,
@@ -42,7 +42,7 @@ import {
42
42
  querySnapshots,
43
43
  rawEventSamples,
44
44
  runs
45
- } from "./chunk-RGD5SDT3.js";
45
+ } from "./chunk-HNZQVIPS.js";
46
46
  import {
47
47
  ProviderNames,
48
48
  RetrievalContracts,
@@ -59,7 +59,7 @@ import {
59
59
  extractRecommendedCompetitors,
60
60
  normalizeUrlPath,
61
61
  openRouterRouteModel
62
- } from "./chunk-U6CNJC2Y.js";
62
+ } from "./chunk-TKLE2Y6H.js";
63
63
 
64
64
  // src/commands/backfill.ts
65
65
  import { setImmediate as yieldToEventLoop } from "timers/promises";
@@ -437,7 +437,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
437
437
  }
438
438
  }
439
439
  async function backfillInsightsCommand(project, opts) {
440
- const { IntelligenceService } = await import("./intelligence-service-UNKFCG5N.js");
440
+ const { IntelligenceService } = await import("./intelligence-service-MWTHUE7S.js");
441
441
  const config = loadConfig();
442
442
  const db = createClient(config.database);
443
443
  migrate(db);
@@ -20,7 +20,7 @@ import {
20
20
  resolveProviderModel,
21
21
  schedulableRunKindSchema,
22
22
  sentimentEvaluatorProviderSchema
23
- } from "./chunk-U6CNJC2Y.js";
23
+ } from "./chunk-TKLE2Y6H.js";
24
24
 
25
25
  // ../config/src/index.ts
26
26
  import { z as z4 } from "zod";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  answerServiceAdapters,
3
3
  answerServiceDescriptors
4
- } from "./chunk-Q7PTBHNG.js";
4
+ } from "./chunk-OIHJJHJR.js";
5
5
  import {
6
6
  AeroLlmUsageFeatures,
7
7
  aeroTurnStatus,
@@ -27,14 +27,14 @@ import {
27
27
  resolveConfiguredAgentProvider,
28
28
  resolveSessionProviderAndModel,
29
29
  setAeroSystemPrompt
30
- } from "./chunk-AO4P75DI.js";
30
+ } from "./chunk-V3QMOGZE.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-UUGT7UMF.js";
37
+ } from "./chunk-JM6OFCLX.js";
38
38
  import {
39
39
  getGoogleAuthConfig,
40
40
  getGoogleConnection,
@@ -53,7 +53,7 @@ import {
53
53
  removeCloudflareTrafficConnection,
54
54
  removeCloudflareTrafficConnectionBySourceId,
55
55
  upsertCloudflareTrafficConnection
56
- } from "./chunk-KTQVRQDM.js";
56
+ } from "./chunk-UBP3AAKA.js";
57
57
  import {
58
58
  claudeAdapter,
59
59
  embedQueries,
@@ -64,7 +64,7 @@ import {
64
64
  openaiAdapter,
65
65
  openrouterAdapter,
66
66
  perplexityAdapter
67
- } from "./chunk-APQ5EAL2.js";
67
+ } from "./chunk-UYPBR3SF.js";
68
68
  import {
69
69
  classifyUsageSurface,
70
70
  createApiUsageTelemetry,
@@ -76,7 +76,7 @@ import {
76
76
  startOutcomeTimer,
77
77
  trackFeatureCompleted,
78
78
  trackInstallState
79
- } from "./chunk-KLGHY67V.js";
79
+ } from "./chunk-CWMJQ2JV.js";
80
80
  import {
81
81
  isLoopbackBindHost
82
82
  } from "./chunk-TSENU4GG.js";
@@ -84,7 +84,7 @@ import {
84
84
  isApiProviderRegistrable,
85
85
  isCdpProviderRegistrable,
86
86
  registeredProviderNames
87
- } from "./chunk-IALK4DQJ.js";
87
+ } from "./chunk-GRWZC3GQ.js";
88
88
  import {
89
89
  checkLatestVersionForServer,
90
90
  getOrCreateAnonymousId,
@@ -95,17 +95,17 @@ import {
95
95
  recordDashboardEvent,
96
96
  setTelemetryPreference,
97
97
  trackEvent
98
- } from "./chunk-5NYS3ABL.js";
98
+ } from "./chunk-67262NJL.js";
99
99
  import {
100
100
  createCanonryMcpServer
101
- } from "./chunk-X3GWBK7N.js";
101
+ } from "./chunk-5VAC4KQ2.js";
102
102
  import {
103
103
  CANONRY_MCP_TIERS,
104
104
  CANONRY_MCP_TOOLKIT_NAMES
105
105
  } from "./chunk-NCIPNVD6.js";
106
106
  import {
107
107
  ApiClient
108
- } from "./chunk-SDZKHJ6W.js";
108
+ } from "./chunk-LEG7F3DN.js";
109
109
  import {
110
110
  AGENT_PROVIDERS,
111
111
  adapterSupportsBatch,
@@ -136,21 +136,21 @@ import {
136
136
  saveConfigPatch,
137
137
  sentimentInstallReadiness,
138
138
  updateSharedProviderExecutionGate
139
- } from "./chunk-2LY4FY4N.js";
139
+ } from "./chunk-A57HYHJ3.js";
140
140
  import {
141
141
  getBundledSkillSnapshots
142
- } from "./chunk-YBDUZBGU.js";
142
+ } from "./chunk-PH7RTAWW.js";
143
143
  import {
144
144
  computeFactorAverages,
145
145
  deleteSiteCrawlGraphLayout,
146
146
  persistSiteCrawlGraphLayout,
147
147
  prepareSiteCrawlGraphLayout,
148
148
  recordedSharePct
149
- } from "./chunk-WKZZILBI.js";
149
+ } from "./chunk-5YC6IU44.js";
150
150
  import {
151
151
  CanonryMcpToolNames,
152
152
  canonryMcpTools
153
- } from "./chunk-YQGVA64Q.js";
153
+ } from "./chunk-H22RCHYH.js";
154
154
  import {
155
155
  PACKAGE_VERSION
156
156
  } from "./chunk-AOJU5LKX.js";
@@ -162,11 +162,11 @@ import {
162
162
  addLogListener,
163
163
  createFastifyLogger,
164
164
  createLogger
165
- } from "./chunk-3B2GBWIA.js";
165
+ } from "./chunk-5GMYD7UZ.js";
166
166
  import {
167
167
  computeCitedCompetitorDomains,
168
168
  determineCitationState
169
- } from "./chunk-U2WPZZPQ.js";
169
+ } from "./chunk-EHTSCLEL.js";
170
170
  import {
171
171
  BingApiError,
172
172
  CC_CACHE_DIR,
@@ -285,7 +285,7 @@ import {
285
285
  webhookResponseReason,
286
286
  webhookTargetRefusalReason,
287
287
  writeAuditLog
288
- } from "./chunk-2HNTNKFC.js";
288
+ } from "./chunk-22ABGRB7.js";
289
289
  import {
290
290
  OperationalLogStore,
291
291
  SentimentIdempotencyConflict,
@@ -371,7 +371,7 @@ import {
371
371
  siteLivenessState,
372
372
  trafficSources,
373
373
  usageCounters
374
- } from "./chunk-RGD5SDT3.js";
374
+ } from "./chunk-HNZQVIPS.js";
375
375
  import {
376
376
  AGENT_MEMORY_VALUE_MAX_BYTES,
377
377
  AI_ENGINE_DOMAINS,
@@ -401,6 +401,7 @@ import {
401
401
  GoogleAdsSnapshotKinds,
402
402
  GoogleMarketingProviders,
403
403
  GtmSnapshotKinds,
404
+ HEALTH_NO_LONGER_URGENT,
404
405
  HostedMcpStatuses,
405
406
  HostedMcpUnavailableReasons,
406
407
  INTEGRATION_NAMES,
@@ -616,7 +617,7 @@ import {
616
617
  winnabilityClassLabel,
617
618
  withRetry,
618
619
  withSkippedProviders
619
- } from "./chunk-U6CNJC2Y.js";
620
+ } from "./chunk-TKLE2Y6H.js";
620
621
 
621
622
  // src/google-marketing-runtime.ts
622
623
  import crypto2 from "crypto";
@@ -5657,7 +5658,7 @@ function nonBlank(value) {
5657
5658
  return trimmed ? trimmed : void 0;
5658
5659
  }
5659
5660
  function resolveBuildCommit(env = process.env) {
5660
- const embedded = true ? "6b84bb1b02f35a10a9f5acf10daf9c9e9df2a2d1" : void 0;
5661
+ const embedded = true ? "bf661eb5ab6eb02b455254b13b5cc8d0d8ca6536" : void 0;
5661
5662
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5662
5663
  }
5663
5664
  function resolveInstanceIdentity(env = process.env) {
@@ -12995,6 +12996,23 @@ var SLOT_FIRED = { status: OutcomeStatuses.succeeded };
12995
12996
  var slotSkipped = (reasonCode) => ({ status: OutcomeStatuses.skipped, reasonCode });
12996
12997
  var slotFailed = (reasonCode) => ({ status: OutcomeStatuses.failed, reasonCode });
12997
12998
  var DEFAULT_HEALTH_CRON = "0 */6 * * *";
12999
+ var SCHEDULE_SPREAD_MS = 12e4;
13000
+ var UNSPREAD_KINDS = /* @__PURE__ */ new Set([SchedulableRunKinds["answer-visibility"]]);
13001
+ function scheduleSpreadMs(projectId, kind, spreadMs = SCHEDULE_SPREAD_MS) {
13002
+ if (spreadMs <= 0) return 0;
13003
+ return crypto20.createHash("sha256").update(`${projectId}:${kind}`).digest().readUInt32BE(0) % spreadMs;
13004
+ }
13005
+ function shortestCronGapMs(cronExpr, timezone, from = /* @__PURE__ */ new Date()) {
13006
+ let previous = nextRunFromCron(cronExpr, timezone, from);
13007
+ let shortest = Number.POSITIVE_INFINITY;
13008
+ for (let i = 0; previous && i < 8; i++) {
13009
+ const next = nextRunFromCron(cronExpr, timezone, new Date(Date.parse(previous) + 1e3));
13010
+ if (!next) break;
13011
+ shortest = Math.min(shortest, Date.parse(next) - Date.parse(previous));
13012
+ previous = next;
13013
+ }
13014
+ return Number.isFinite(shortest) ? shortest : null;
13015
+ }
12998
13016
  function ensureDefaultHealthSchedule(db, projectId, now = (/* @__PURE__ */ new Date()).toISOString()) {
12999
13017
  const result = db.insert(schedules).values({
13000
13018
  id: crypto20.randomUUID(),
@@ -13023,9 +13041,14 @@ var Scheduler = class {
13023
13041
  tasks = /* @__PURE__ */ new Map();
13024
13042
  /** A cron can fire every minute, so slot outcomes are sampled per status and reason. */
13025
13043
  sampleSlot = createOutcomeSampler({ burst: 5, refillMs: 30 * 6e4 });
13026
- constructor(db, callbacks) {
13044
+ /** How far background work may start after its cron minute; 0 starts it on the minute. */
13045
+ spreadMs;
13046
+ /** Spread starts waiting to fire, by task key, so stopping a task cancels its start too. */
13047
+ spreadTimers = /* @__PURE__ */ new Map();
13048
+ constructor(db, callbacks, options = {}) {
13027
13049
  this.db = db;
13028
13050
  this.callbacks = callbacks;
13051
+ this.spreadMs = options.spreadMs ?? 0;
13029
13052
  }
13030
13053
  /**
13031
13054
  * Give every project a health schedule if it has never had one.
@@ -13147,6 +13170,11 @@ var Scheduler = class {
13147
13170
  stopTask(key, task, verb) {
13148
13171
  void task.stop();
13149
13172
  void task.destroy();
13173
+ const pending = this.spreadTimers.get(key);
13174
+ if (pending) {
13175
+ clearTimeout(pending);
13176
+ this.spreadTimers.delete(key);
13177
+ }
13150
13178
  log17.info(`task.${verb.toLowerCase()}`, { key });
13151
13179
  }
13152
13180
  /** Runtime timing writes must not restore a version already issued to a settings caller. */
@@ -13176,12 +13204,27 @@ var Scheduler = class {
13176
13204
  log17.error("cron.invalid", { projectId, kind, cronExpr });
13177
13205
  return false;
13178
13206
  }
13207
+ const key = taskKey(projectId, kind);
13208
+ const gapMs = this.spreadMs > 0 && !UNSPREAD_KINDS.has(kind) ? shortestCronGapMs(cronExpr, timezone) : null;
13209
+ const spreadMs = gapMs === null ? 0 : scheduleSpreadMs(projectId, kind, Math.min(this.spreadMs, Math.floor(gapMs / 2)));
13179
13210
  const task = cron.schedule(cronExpr, () => {
13180
- this.triggerRun(scheduleId, projectId, kind);
13211
+ if (spreadMs === 0) {
13212
+ this.triggerRun(scheduleId, projectId, kind);
13213
+ return;
13214
+ }
13215
+ const overdue = this.spreadTimers.get(key);
13216
+ if (overdue) {
13217
+ clearTimeout(overdue);
13218
+ this.triggerRun(scheduleId, projectId, kind);
13219
+ }
13220
+ this.spreadTimers.set(key, setTimeout(() => {
13221
+ this.spreadTimers.delete(key);
13222
+ this.triggerRun(scheduleId, projectId, kind);
13223
+ }, spreadMs));
13181
13224
  }, {
13182
13225
  timezone
13183
13226
  });
13184
- this.tasks.set(taskKey(projectId, kind), task);
13227
+ this.tasks.set(key, task);
13185
13228
  if (!options.preserveNextRunAt || !schedule.nextRunAt) {
13186
13229
  this.updateScheduleTiming(scheduleId, {
13187
13230
  nextRunAt: nextRunFromCron(cronExpr, timezone)
@@ -14446,7 +14489,7 @@ var Notifier = class {
14446
14489
  const urgentItems = [];
14447
14490
  for (const c of failing) {
14448
14491
  if (c.urgent !== true) continue;
14449
- urgentItems.push({ id: c.id, code: c.code, rank: rank(c.status), status: c.status, summary: c.summary, remediation: c.remediation ?? null });
14492
+ urgentItems.push({ id: c.id, code: c.code, rank: rank(c.status), status: c.status, summary: c.summary, remediation: c.remediation ?? null, ...c.alert ? { alert: c.alert } : {} });
14450
14493
  }
14451
14494
  for (const c of healthChecks) {
14452
14495
  const supersededCode = c.details?.supersededCode;
@@ -14454,7 +14497,7 @@ var Notifier = class {
14454
14497
  const causeIds = Array.isArray(c.details?.supersededBy) ? c.details.supersededBy : [];
14455
14498
  const cause = failing.find((f) => causeIds.includes(f.id));
14456
14499
  const status2 = c.details?.supersededStatus === "warn" ? "warn" : "fail";
14457
- urgentItems.push({ id: c.id, code: supersededCode, rank: rank(status2), status: status2, summary: cause?.summary ?? c.summary, remediation: cause?.remediation ?? null });
14500
+ urgentItems.push({ id: c.id, code: supersededCode, rank: rank(status2), status: status2, summary: cause?.summary ?? c.summary, remediation: cause?.remediation ?? null, ...cause?.alert ? { alert: cause.alert } : {} });
14458
14501
  }
14459
14502
  urgentItems.sort((a, b) => b.rank - a.rank);
14460
14503
  const urgentById = new Map(urgentItems.map((item) => [item.id, item]));
@@ -14517,7 +14560,7 @@ var Notifier = class {
14517
14560
  const previousUrgent = toldRank === 0 ? "ok" : toldRank === 2 ? "fail" : "warn";
14518
14561
  const lead = urgentNew[0];
14519
14562
  const onlyCleared = urgentCleared.length === 1 ? graded.find((c) => c.id === urgentCleared[0].id) : void 0;
14520
- const resolvedSummary = onlyCleared ? onlyCleared.status === "ok" ? onlyCleared.summary : `No longer urgent. ${onlyCleared.summary}` : `${urgentCleared.length} urgent problems are resolved.`;
14563
+ const resolvedSummary = onlyCleared ? onlyCleared.status === "ok" ? onlyCleared.summary : `${HEALTH_NO_LONGER_URGENT} ${onlyCleared.summary}` : `${urgentCleared.length} urgent problems are resolved.`;
14521
14564
  const urgentHealth = urgentEvent === "health.urgent" && lead ? {
14522
14565
  status: lead.status,
14523
14566
  code: lead.code,
@@ -14525,7 +14568,7 @@ var Notifier = class {
14525
14568
  remediation: lead.remediation,
14526
14569
  checkedAt: now,
14527
14570
  previousStatus: previousUrgent,
14528
- failing: urgentItems.map((item) => ({ id: item.id, status: item.status, code: item.code, summary: item.summary })),
14571
+ failing: urgentItems.map((item) => ({ id: item.id, status: item.status, code: item.code, summary: item.summary, remediation: item.remediation, ...item.alert ? { alert: item.alert } : {} })),
14529
14572
  added: breachCodes(urgentNew),
14530
14573
  ...urgentCleared.length > 0 ? { cleared: breachCodes(urgentCleared) } : {}
14531
14574
  } : {
@@ -14583,7 +14626,7 @@ var Notifier = class {
14583
14626
  remediation: worst?.remediation ?? null,
14584
14627
  checkedAt: now,
14585
14628
  previousStatus,
14586
- failing: failing.map((c) => ({ id: c.id, status: c.status, code: c.code, summary: c.summary })),
14629
+ failing: failing.map((c) => ({ id: c.id, status: c.status, code: c.code, summary: c.summary, remediation: c.remediation ?? null, ...c.alert ? { alert: c.alert } : {} })),
14587
14630
  ...added ? { added } : {},
14588
14631
  ...cleared ? { cleared } : {}
14589
14632
  },
@@ -19680,6 +19723,10 @@ async function createServer(opts) {
19680
19723
  schedulerClient.trafficSync(projectName, sourceId).finally(() => {
19681
19724
  scheduledSyncClaims.delete(syncRunClaimKey(projectName, RunKinds["traffic-sync"], sourceId));
19682
19725
  }).catch((err) => {
19726
+ if (err instanceof CliError && err.code === "OPERATION_IN_PROGRESS") {
19727
+ app.log.info({ projectName, sourceId }, "Scheduled traffic sync skipped: the source is busy");
19728
+ return;
19729
+ }
19683
19730
  app.log.error(
19684
19731
  {
19685
19732
  projectName,
@@ -19730,7 +19777,7 @@ async function createServer(opts) {
19730
19777
  onSiteAuditRequested: (runId, projectId, auditOpts) => {
19731
19778
  runSiteAudit(runId, projectId, auditOpts);
19732
19779
  }
19733
- });
19780
+ }, { spreadMs: opts.scheduleSpreadMs ?? SCHEDULE_SPREAD_MS });
19734
19781
  const providerSummary = providerSummaries(registry, opts.config);
19735
19782
  const googleSettingsSummary = {
19736
19783
  configured: Boolean(
@@ -2,13 +2,13 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-5NYS3ABL.js";
5
+ } from "./chunk-67262NJL.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-2LY4FY4N.js";
8
+ } from "./chunk-A57HYHJ3.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
- } from "./chunk-LAILXR2F.js";
11
+ } from "./chunk-QNFX7ZCT.js";
12
12
  import {
13
13
  AGENT_NONE,
14
14
  OutcomeSurfaces,
@@ -19,7 +19,7 @@ import {
19
19
  integrationConnectionPropertiesSchema,
20
20
  normalizeAgentSlug,
21
21
  usageSurfaceSchema
22
- } from "./chunk-U6CNJC2Y.js";
22
+ } from "./chunk-TKLE2Y6H.js";
23
23
 
24
24
  // src/outcome-telemetry.ts
25
25
  import fs from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hostMatchesDomain
3
- } from "./chunk-U6CNJC2Y.js";
3
+ } from "./chunk-TKLE2Y6H.js";
4
4
 
5
5
  // src/citation-utils.ts
6
6
  function pickProjectCitedDomain(citedDomains, projectDomains) {
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-HGMYEDAQ.js";
9
9
  import {
10
10
  describeError
11
- } from "./chunk-U6CNJC2Y.js";
11
+ } from "./chunk-TKLE2Y6H.js";
12
12
 
13
13
  // src/commands/mcp.ts
14
14
  import fs from "fs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  API_PROVIDER_NAMES,
3
3
  ProviderNames
4
- } from "./chunk-U6CNJC2Y.js";
4
+ } from "./chunk-TKLE2Y6H.js";
5
5
 
6
6
  // src/provider-registration.ts
7
7
  function isApiProviderRegistrable(name, entry) {
@@ -2,11 +2,11 @@ import {
2
2
  dedupeGscSitemapUrls,
3
3
  resolveDiscoveredGscSitemapUrls,
4
4
  submitGscSitemapBatches
5
- } from "./chunk-DAKJBAUN.js";
5
+ } from "./chunk-SN5A767O.js";
6
6
  import {
7
7
  measurementDraftOperationSchema,
8
8
  runMeasurementDraftAction
9
- } from "./chunk-MMRJUOE2.js";
9
+ } from "./chunk-NOQCIXM6.js";
10
10
  import {
11
11
  CliError
12
12
  } from "./chunk-HGMYEDAQ.js";
@@ -173,7 +173,7 @@ import {
173
173
  trafficSeriesGranularitySchema,
174
174
  visibilityCompareSelectionSchema,
175
175
  visibilityReportRequestSchema
176
- } from "./chunk-U6CNJC2Y.js";
176
+ } from "./chunk-TKLE2Y6H.js";
177
177
 
178
178
  // src/mcp/tool-registry.ts
179
179
  import { z as z2 } from "zod";
@@ -861,10 +861,15 @@ var trafficBackfillInputSchema = z2.object({
861
861
  sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
862
862
  days: z2.number().int().positive().max(90).optional().describe("Lookback window in days. Default 30, capped by the adapter at 90d. Generic WordPress replace backfill is unavailable because retained coverage is unproven.")
863
863
  });
864
+ var trafficDeclareGapInputSchema = z2.object({
865
+ project: projectNameSchema,
866
+ sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
867
+ skippedThroughAt: z2.string().min(1).describe("The source's current skippedThroughAt, exactly as canonry_traffic_sources_list returned it. A newer skip is refused, never cleared.")
868
+ });
864
869
  var trafficResetInputSchema = z2.object({
865
870
  project: projectNameSchema,
866
871
  sourceId: z2.string().min(1).describe("Traffic source ID returned by canonry_traffic_sources_list."),
867
- advanceToNow: z2.literal(true).describe("Must be `true`. Explicit gate against accidental resets. Advances lastSyncedAt to NOW and clears the source's error state; WordPress also clears its continuation state and records an unrecovered span that needs retention-aware repair.")
872
+ advanceToNow: z2.literal(true).describe("Must be `true`. Explicit gate against accidental resets. Advances lastSyncedAt to NOW and clears the source's error state; WordPress also clears its continuation state and records an unrecovered span; once it cannot be recovered, record it with canonry_traffic_declare_gap.")
868
873
  });
869
874
  var trafficEventsInputSchema = z2.object({
870
875
  project: projectNameSchema,
@@ -2934,7 +2939,7 @@ var rawCanonryMcpTools = [
2934
2939
  defineTool({
2935
2940
  name: "canonry_traffic_backfill",
2936
2941
  title: "Backfill traffic source",
2937
- description: 'Async one-shot reclassification for Cloud Run or Vercel traffic. It replaces the selected window\u2019s rollups with a fresh bounded pull and current classifier output. WordPress generic replace backfill is unavailable because the endpoint cannot prove retained coverage; use a retention-aware repair that explicitly declares any unrecoverable span. Returns `{ runId, status: "running" }`; poll canonry_run_get for completion.',
2942
+ description: 'Async one-shot reclassification for Cloud Run or Vercel traffic. It replaces the selected window\u2019s rollups with a fresh bounded pull and current classifier output. WordPress generic replace backfill is unavailable because the endpoint cannot prove retained coverage; record a span that cannot be recovered with canonry_traffic_declare_gap. Returns `{ runId, status: "running" }`; poll canonry_run_get for completion.',
2938
2943
  access: "write",
2939
2944
  tier: "traffic",
2940
2945
  inputSchema: trafficBackfillInputSchema,
@@ -2945,7 +2950,7 @@ var rawCanonryMcpTools = [
2945
2950
  defineTool({
2946
2951
  name: "canonry_traffic_reset",
2947
2952
  title: "Advance traffic source lastSyncedAt to NOW",
2948
- description: "Operator recovery for a stuck traffic source. Advances `lastSyncedAt` to NOW, sets `status` back to `connected`, and clears `last_error`. A WordPress reset also clears its continuation state and records an unrecovered span so its next bounded drain cannot combine an old cursor with a new window. That stops replay but is not historical repair. Generic WordPress replace-mode backfill is unavailable because retained coverage is unproven; use a retention-aware repair that explicitly declares any unrecoverable span. Archived sources are rejected; reconnect them with the appropriate canonry_traffic_connect_* tool.",
2953
+ description: "Operator recovery for a stuck traffic source. Advances `lastSyncedAt` to NOW, sets `status` back to `connected`, and clears `last_error`. A WordPress reset also clears its continuation state and records an unrecovered span so its next bounded drain cannot combine an old cursor with a new window. That stops replay but is not historical repair. Generic WordPress replace-mode backfill is unavailable because retained coverage is unproven; once a span cannot be recovered, record it with canonry_traffic_declare_gap. Archived sources are rejected; reconnect them with the appropriate canonry_traffic_connect_* tool.",
2949
2954
  access: "write",
2950
2955
  tier: "traffic",
2951
2956
  inputSchema: trafficResetInputSchema,
@@ -2953,6 +2958,17 @@ var rawCanonryMcpTools = [
2953
2958
  openApiOperations: ["POST /api/v1/projects/{name}/traffic/sources/{id}/reset"],
2954
2959
  handler: (client, input) => client.trafficReset(input.project, input.sourceId)
2955
2960
  }),
2961
+ defineTool({
2962
+ name: "canonry_traffic_declare_gap",
2963
+ title: "Record a traffic gap as unrecoverable",
2964
+ description: "Record a traffic source's unrecovered skip (its skippedThroughAt) as data that cannot be recovered, and clear it so the traffic.sync-lag.unrecovered-skip doctor check passes. Rollups are untouched; an audit entry keeps the span. For WordPress, whose plugin feed cannot prove a historical repair, or any source whose provider no longer retains the span; backfill a recoverable gap instead. This hides a data-loss warning, so declare only after the person running the project agrees.",
2965
+ access: "write",
2966
+ tier: "traffic",
2967
+ inputSchema: trafficDeclareGapInputSchema,
2968
+ annotations: writeAnnotations({ idempotentHint: false, destructiveHint: true }),
2969
+ openApiOperations: ["POST /api/v1/projects/{name}/traffic/sources/{id}/declare-gap"],
2970
+ handler: (client, input) => client.trafficDeclareGap(input.project, input.sourceId, input.skippedThroughAt)
2971
+ }),
2956
2972
  defineTool({
2957
2973
  name: "canonry_snapshot",
2958
2974
  title: "Generate a prospect snapshot",
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-U6CNJC2Y.js";
23
+ } from "./chunk-TKLE2Y6H.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-SDZKHJ6W.js";
3
+ } from "./chunk-LEG7F3DN.js";
4
4
  import {
5
5
  emitJsonl
6
6
  } from "./chunk-Z7IUAJOF.js";
@@ -19,7 +19,7 @@ import {
19
19
  formatMicros,
20
20
  formatRunErrorOneLine,
21
21
  resolveProviderInput
22
- } from "./chunk-U6CNJC2Y.js";
22
+ } from "./chunk-TKLE2Y6H.js";
23
23
 
24
24
  // src/commands/run.ts
25
25
  function getClient() {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registeredProviderNames
3
- } from "./chunk-IALK4DQJ.js";
3
+ } from "./chunk-GRWZC3GQ.js";
4
4
  import {
5
5
  configExists,
6
6
  loadConfigRaw
7
- } from "./chunk-2LY4FY4N.js";
7
+ } from "./chunk-A57HYHJ3.js";
8
8
 
9
9
  // src/setup-state.ts
10
10
  import fs from "fs";
@@ -28,7 +28,7 @@ async function buildSetupState() {
28
28
  }
29
29
  if (dbPath && fs.existsSync(dbPath)) {
30
30
  try {
31
- const { createClient, projects, queries: queriesTable } = await import("./src-F63SHN5T.js");
31
+ const { createClient, projects, queries: queriesTable } = await import("./src-CTHVFVLF.js");
32
32
  const db = createClient(dbPath);
33
33
  project_count = db.select({ id: projects.id }).from(projects).all().length;
34
34
  const firstQuery = db.select({ id: queriesTable.id }).from(queriesTable).limit(1).all();
@@ -47,7 +47,7 @@ function queueServeHandoff() {
47
47
  async function runPendingServeHandoff(format) {
48
48
  if (!pendingServeHandoff) return;
49
49
  pendingServeHandoff = false;
50
- const { serveCommand } = await import("./serve-OCAFOFS2.js");
50
+ const { serveCommand } = await import("./serve-VIEGFGSK.js");
51
51
  await serveCommand(format);
52
52
  }
53
53