cici 0.4.0 → 0.4.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.
Files changed (66) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +20 -20
  3. package/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/next-minimal-server.js.nft.json +1 -1
  6. package/.next/next-server.js.nft.json +1 -1
  7. package/.next/prerender-manifest.json +1 -1
  8. package/.next/required-server-files.json +1 -1
  9. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/mile/prompts.body +1 -1
  11. package/.next/server/app/atom.xml.body +1 -1
  12. package/.next/server/app/blog/[id]/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/blog/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/editor/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/memos/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/rss.xml.body +1 -1
  19. package/.next/server/app/sitemap.xml/route.js +4 -4
  20. package/.next/server/app/sitemap.xml.body +5 -5
  21. package/.next/server/app/unavailable/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app-paths-manifest.json +6 -6
  23. package/.next/server/chunks/3607.js +1 -1
  24. package/.next/server/chunks/3844.js +1 -1
  25. package/.next/server/chunks/719.js +1 -1
  26. package/.next/server/chunks/9715.js +1 -1
  27. package/.next/server/pages/500.html +1 -1
  28. package/.next/server/pages-manifest.json +1 -1
  29. package/.next/server/server-reference-manifest.json +1 -1
  30. package/.next/standalone/.next/BUILD_ID +1 -1
  31. package/.next/standalone/.next/app-build-manifest.json +20 -20
  32. package/.next/standalone/.next/app-path-routes-manifest.json +1 -1
  33. package/.next/standalone/.next/build-manifest.json +2 -2
  34. package/.next/standalone/.next/prerender-manifest.json +1 -1
  35. package/.next/standalone/.next/required-server-files.json +1 -1
  36. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/api/mile/prompts.body +1 -1
  38. package/.next/standalone/.next/server/app/atom.xml.body +1 -1
  39. package/.next/standalone/.next/server/app/blog/[id]/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/blog/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/editor/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/memos/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/rss.xml.body +1 -1
  46. package/.next/standalone/.next/server/app/sitemap.xml/route.js +4 -4
  47. package/.next/standalone/.next/server/app/sitemap.xml.body +5 -5
  48. package/.next/standalone/.next/server/app/unavailable/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app-paths-manifest.json +6 -6
  50. package/.next/standalone/.next/server/chunks/3607.js +1 -1
  51. package/.next/standalone/.next/server/chunks/3844.js +1 -1
  52. package/.next/standalone/.next/server/chunks/719.js +1 -1
  53. package/.next/standalone/.next/server/chunks/9715.js +1 -1
  54. package/.next/standalone/.next/server/pages/500.html +1 -1
  55. package/.next/standalone/.next/server/pages-manifest.json +1 -1
  56. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  57. package/.next/standalone/cache-handler.cjs +66 -0
  58. package/.next/standalone/package.json +1 -1
  59. package/.next/standalone/server.js +1 -1
  60. package/.next/trace +120 -120
  61. package/bin/cici.js +12 -0
  62. package/package.json +1 -1
  63. /package/.next/standalone/.next/static/{H78KNQuyrLX6JpnJaQChP → CsV2H6n03Dh7kIQJcmDlJ}/_buildManifest.js +0 -0
  64. /package/.next/standalone/.next/static/{H78KNQuyrLX6JpnJaQChP → CsV2H6n03Dh7kIQJcmDlJ}/_ssgManifest.js +0 -0
  65. /package/.next/static/{H78KNQuyrLX6JpnJaQChP → CsV2H6n03Dh7kIQJcmDlJ}/_buildManifest.js +0 -0
  66. /package/.next/static/{H78KNQuyrLX6JpnJaQChP → CsV2H6n03Dh7kIQJcmDlJ}/_ssgManifest.js +0 -0
@@ -2,31 +2,31 @@
2
2
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
3
  <url>
4
4
  <loc>https://blog.minghe.me</loc>
5
- <lastmod>2026-07-21T19:30:02.430Z</lastmod>
5
+ <lastmod>2026-07-21T20:19:35.423Z</lastmod>
6
6
  <changefreq>daily</changefreq>
7
7
  <priority>1</priority>
8
8
  </url>
9
9
  <url>
10
10
  <loc>https://blog.minghe.me/blog</loc>
11
- <lastmod>2026-07-21T19:30:02.430Z</lastmod>
11
+ <lastmod>2026-07-21T20:19:35.423Z</lastmod>
12
12
  <changefreq>daily</changefreq>
13
13
  <priority>0.9</priority>
14
14
  </url>
15
15
  <url>
16
16
  <loc>https://blog.minghe.me/memos</loc>
17
- <lastmod>2026-07-21T19:30:02.430Z</lastmod>
17
+ <lastmod>2026-07-21T20:19:35.423Z</lastmod>
18
18
  <changefreq>daily</changefreq>
19
19
  <priority>0.8</priority>
20
20
  </url>
21
21
  <url>
22
22
  <loc>https://blog.minghe.me/editor</loc>
23
- <lastmod>2026-07-21T19:30:02.430Z</lastmod>
23
+ <lastmod>2026-07-21T20:19:35.423Z</lastmod>
24
24
  <changefreq>weekly</changefreq>
25
25
  <priority>0.5</priority>
26
26
  </url>
27
27
  <url>
28
28
  <loc>https://blog.minghe.me/login</loc>
29
- <lastmod>2026-07-21T19:30:02.430Z</lastmod>
29
+ <lastmod>2026-07-21T20:19:35.423Z</lastmod>
30
30
  <changefreq>monthly</changefreq>
31
31
  <priority>0.3</priority>
32
32
  </url>
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/unavailable/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"80":{"*":{"id":"41868","name":"*","chunks":[],"async":false}},"3980":{"*":{"id":"94789","name":"*","chunks":[],"async":false}},"4707":{"*":{"id":"79671","name":"*","chunks":[],"async":false}},"12846":{"*":{"id":"12994","name":"*","chunks":[],"async":false}},"14447":{"*":{"id":"34239","name":"*","chunks":[],"async":false}},"16456":{"*":{"id":"13170","name":"*","chunks":[],"async":false}},"19107":{"*":{"id":"96114","name":"*","chunks":[],"async":false}},"28490":{"*":{"id":"93169","name":"*","chunks":[],"async":false}},"36423":{"*":{"id":"84759","name":"*","chunks":[],"async":false}},"37344":{"*":{"id":"92073","name":"*","chunks":[],"async":false}},"51113":{"*":{"id":"27551","name":"*","chunks":[],"async":false}},"59556":{"*":{"id":"77083","name":"*","chunks":[],"async":false}},"61060":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"63141":{"*":{"id":"78584","name":"*","chunks":[],"async":false}},"63156":{"*":{"id":"41713","name":"*","chunks":[],"async":false}},"65878":{"*":{"id":"92481","name":"*","chunks":[],"async":false}},"72972":{"*":{"id":"79404","name":"*","chunks":[],"async":false}},"75247":{"*":{"id":"80943","name":"*","chunks":[],"async":false}},"75873":{"*":{"id":"52719","name":"*","chunks":[],"async":false}},"81908":{"*":{"id":"18413","name":"*","chunks":[],"async":false}},"87232":{"*":{"id":"72892","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/cici/cici/node_modules/next/dist/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/app/globals.css":{"id":47960,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/Analytics.tsx":{"id":75873,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/CreateButton.tsx":{"id":28490,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/EditContext.tsx":{"id":75247,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/SessionProvider.tsx":{"id":63156,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/ui/toaster.tsx":{"id":59556,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next-intl/dist/esm/shared/NextIntlClientProvider.js":{"id":16456,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next/font/google/target.css?{\"path\":\"components/ui/font.ts\",\"import\":\"Gowun_Dodum\",\"arguments\":[{\"weight\":\"400\",\"subsets\":[\"latin\"],\"display\":\"swap\"}],\"variableName\":\"gowun_wodum\"}":{"id":91444,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/app/login/page.tsx":{"id":3980,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/components/Editor.tsx":{"id":14447,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/components/GitHubSignInButton.tsx":{"id":51113,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/components/BlogList.tsx":{"id":81908,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false},"/home/runner/work/cici/cici/app/blog/[id]/component.tsx":{"id":63141,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/discussing/dist/components/Discussion.js":{"id":37344,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/components/MemosList.tsx":{"id":87232,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/image-component.js":{"id":65878,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/image-component.js":{"id":65878,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/link.js":{"id":72972,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/link.js":{"id":72972,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false}},"entryCSSFiles":{"/home/runner/work/cici/cici/":[],"/home/runner/work/cici/cici/app/layout":["static/css/bf9d0ede562bd061.css","static/css/67e4cfd62ab3f75c.css"],"/home/runner/work/cici/cici/app/page":[],"/home/runner/work/cici/cici/app/unavailable/page":[]}}
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/unavailable/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"80":{"*":{"id":"41868","name":"*","chunks":[],"async":false}},"3980":{"*":{"id":"94789","name":"*","chunks":[],"async":false}},"4707":{"*":{"id":"79671","name":"*","chunks":[],"async":false}},"12846":{"*":{"id":"12994","name":"*","chunks":[],"async":false}},"14447":{"*":{"id":"34239","name":"*","chunks":[],"async":false}},"16456":{"*":{"id":"13170","name":"*","chunks":[],"async":false}},"19107":{"*":{"id":"96114","name":"*","chunks":[],"async":false}},"28490":{"*":{"id":"93169","name":"*","chunks":[],"async":false}},"36423":{"*":{"id":"84759","name":"*","chunks":[],"async":false}},"37344":{"*":{"id":"92073","name":"*","chunks":[],"async":false}},"51113":{"*":{"id":"27551","name":"*","chunks":[],"async":false}},"59556":{"*":{"id":"77083","name":"*","chunks":[],"async":false}},"61060":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"63141":{"*":{"id":"78584","name":"*","chunks":[],"async":false}},"63156":{"*":{"id":"41713","name":"*","chunks":[],"async":false}},"65878":{"*":{"id":"92481","name":"*","chunks":[],"async":false}},"72972":{"*":{"id":"79404","name":"*","chunks":[],"async":false}},"75247":{"*":{"id":"80943","name":"*","chunks":[],"async":false}},"75873":{"*":{"id":"52719","name":"*","chunks":[],"async":false}},"81908":{"*":{"id":"18413","name":"*","chunks":[],"async":false}},"87232":{"*":{"id":"72892","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/cici/cici/node_modules/next/dist/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/app/globals.css":{"id":47960,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/Analytics.tsx":{"id":75873,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/CreateButton.tsx":{"id":28490,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/EditContext.tsx":{"id":75247,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/SessionProvider.tsx":{"id":63156,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/components/ui/toaster.tsx":{"id":59556,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next-intl/dist/esm/shared/NextIntlClientProvider.js":{"id":16456,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next/font/google/target.css?{\"path\":\"components/ui/font.ts\",\"import\":\"Gowun_Dodum\",\"arguments\":[{\"weight\":\"400\",\"subsets\":[\"latin\"],\"display\":\"swap\"}],\"variableName\":\"gowun_wodum\"}":{"id":91444,"name":"*","chunks":["310","static/chunks/0e5ce63c-dc8fe6cd5df6dc6f.js","51","static/chunks/795d4814-090707ad3f792458.js","956","static/chunks/ee560e2c-0aeb447bc68f09f5.js","779","static/chunks/0e762574-561b753e40bf5566.js","37","static/chunks/37-4aae6f4051a21b05.js","152","static/chunks/152-16409649f7f42f9f.js","972","static/chunks/972-774fbff93f73f32d.js","343","static/chunks/343-ef3404804cc77cf3.js","153","static/chunks/153-f9c1aae3150e3029.js","185","static/chunks/app/layout-3439dc235234d73d.js"],"async":false},"/home/runner/work/cici/cici/app/login/page.tsx":{"id":3980,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/app/blog/[id]/component.tsx":{"id":63141,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/discussing/dist/components/Discussion.js":{"id":37344,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/components/Editor.tsx":{"id":14447,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/components/GitHubSignInButton.tsx":{"id":51113,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/components/BlogList.tsx":{"id":81908,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false},"/home/runner/work/cici/cici/components/MemosList.tsx":{"id":87232,"name":"*","chunks":[],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/image-component.js":{"id":65878,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/image-component.js":{"id":65878,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/client/link.js":{"id":72972,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false},"/home/runner/work/cici/cici/node_modules/next/dist/esm/client/link.js":{"id":72972,"name":"*","chunks":["37","static/chunks/37-4aae6f4051a21b05.js","586","static/chunks/586-51f7e768b82803f6.js","972","static/chunks/972-774fbff93f73f32d.js","878","static/chunks/878-b71984a1ef1b61e8.js","931","static/chunks/app/page-f7dabeade6df80fd.js"],"async":false}},"entryCSSFiles":{"/home/runner/work/cici/cici/":[],"/home/runner/work/cici/cici/app/layout":["static/css/bf9d0ede562bd061.css","static/css/67e4cfd62ab3f75c.css"],"/home/runner/work/cici/cici/app/page":[],"/home/runner/work/cici/cici/app/unavailable/page":[]}}
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "/_not-found/page": "app/_not-found/page.js",
3
3
  "/api/auth/[...nextauth]/route": "app/api/auth/[...nextauth]/route.js",
4
- "/api/blog/[id]/highlights/[hid]/comments/[cid]/route": "app/api/blog/[id]/highlights/[hid]/comments/[cid]/route.js",
5
4
  "/api/blog/[id]/highlights/[hid]/comments/[cid]/reactions/route": "app/api/blog/[id]/highlights/[hid]/comments/[cid]/reactions/route.js",
5
+ "/api/blog/[id]/highlights/[hid]/comments/[cid]/route": "app/api/blog/[id]/highlights/[hid]/comments/[cid]/route.js",
6
6
  "/api/blog/[id]/highlights/[hid]/replies/route": "app/api/blog/[id]/highlights/[hid]/replies/route.js",
7
7
  "/api/blog/[id]/highlights/[hid]/resolve/route": "app/api/blog/[id]/highlights/[hid]/resolve/route.js",
8
8
  "/api/blog/[id]/highlights/[hid]/route": "app/api/blog/[id]/highlights/[hid]/route.js",
9
9
  "/api/blog/[id]/highlights/route": "app/api/blog/[id]/highlights/route.js",
10
10
  "/api/webhooks/notification/route": "app/api/webhooks/notification/route.js",
11
- "/favicon.ico/route": "app/favicon.ico/route.js",
12
11
  "/login/page": "app/login/page.js",
12
+ "/favicon.ico/route": "app/favicon.ico/route.js",
13
13
  "/robots.txt/route": "app/robots.txt/route.js",
14
14
  "/unavailable/page": "app/unavailable/page.js",
15
15
  "/api/asset/[...path]/route": "app/api/asset/[...path]/route.js",
16
- "/atom.xml/route": "app/atom.xml/route.js",
17
16
  "/api/upload/route": "app/api/upload/route.js",
17
+ "/atom.xml/route": "app/atom.xml/route.js",
18
18
  "/api/mile/prompts/route": "app/api/mile/prompts/route.js",
19
+ "/blog/[id]/page": "app/blog/[id]/page.js",
19
20
  "/editor/page": "app/editor/page.js",
20
21
  "/blog/page": "app/blog/page.js",
21
- "/blog/[id]/page": "app/blog/[id]/page.js",
22
22
  "/memos/page": "app/memos/page.js",
23
- "/api/graphql/route": "app/api/graphql/route.js",
23
+ "/page": "app/page.js",
24
24
  "/rss.xml/route": "app/rss.xml/route.js",
25
25
  "/sitemap.xml/route": "app/sitemap.xml/route.js",
26
- "/page": "app/page.js"
26
+ "/api/graphql/route": "app/api/graphql/route.js"
27
27
  }
@@ -11,4 +11,4 @@ title: ${t}
11
11
  date: ${e}
12
12
  ${l}${a}${o}---
13
13
 
14
- ${r}`}function n(t){let e=t.match(/date:\s*(.+)/);return e?e[1]:void 0}function o(t){let e=t.match(/status:\s*(.+)/);return e?e[1].trim():void 0}r.d(e,{Mv:()=>o,X4:()=>s,gk:()=>i,xr:()=>n})},31470:(t,e,r)=>{r.d(e,{Bf:()=>s,CT:()=>o});let i="data",s={rootKeep:()=>".gitkeep",blogDir:()=>"blog",blogDirKeep:()=>"blog/.gitkeep",blogPost:t=>`blog/${t}.md`,blogFile:t=>`blog/${t}`,blogManifest:()=>"blog-manifest.json",memos:()=>"memos.json",likes:()=>"likes.json",siteConfig:()=>"site-config.json",highlightsDir:()=>"highlights",highlightsFile:t=>`highlights/${t}.json`},n=t=>`${i}/${t}`,o={root:()=>i,rootKeep:()=>n(s.rootKeep()),blogDir:()=>n(s.blogDir()),blogDirKeep:()=>n(s.blogDirKeep()),blogPost:t=>n(s.blogPost(t)),blogFile:t=>n(s.blogFile(t)),blogManifest:()=>n(s.blogManifest()),memos:()=>n(s.memos()),likes:()=>n(s.likes()),siteConfig:()=>n(s.siteConfig()),highlightsDir:()=>n(s.highlightsDir()),highlightsFile:t=>n(s.highlightsFile(t))}},82575:(t,e,r)=>{r.d(e,{I7:()=>f,XD:()=>p,CR:()=>y,Kx:()=>m,Ix:()=>w});var i=r(94545),s=r(31470);async function n(t,e,r){try{let n;let o=new i.v({auth:t}),{data:a}=await o.repos.getContent({owner:e,repo:r,path:s.CT.blogDir()});if(!Array.isArray(a)){console.error("Expected array of files but got:",typeof a);return}let l=a.filter(t=>"file"===t.type&&t.name.endsWith(".md")&&".gitkeep"!==t.name).map(t=>t.name).sort();try{let{data:t}=await o.repos.getContent({owner:e,repo:r,path:s.CT.blogManifest()});!Array.isArray(t)&&"sha"in t&&(n=t.sha)}catch(t){console.log("Blog manifest does not exist yet, will create it")}await o.repos.createOrUpdateFileContents({owner:e,repo:r,path:s.CT.blogManifest(),message:"Update blog manifest",content:Buffer.from(JSON.stringify({files:l},null,2)).toString("base64"),sha:n}),console.log("Blog manifest updated successfully with",l.length,"files")}catch(t){console.error("Failed to update blog manifest:",t)}}var o=r(42491),a=r(55315),l=r.n(a),c=r(45854);let u="cici";async function g(t,e,r){try{let{data:i}=await t.repos.get({owner:e,repo:r});if(!i.description){let{data:i}=await t.users.getAuthenticated(),s=i.login;await t.repos.update({owner:e,repo:r,description:`https://tinymind.me/${s}`}),console.log(`Updated repository description to https://tinymind.me/${s}`)}}catch(e){if((0,c.XD)(e))await t.repos.createForAuthenticatedUser({name:r,auto_init:!0}),console.log(`Created new repository: ${r}`);else throw e}try{let{data:i}=await t.repos.getContent({owner:e,repo:r,path:"README.md"});if(console.log("README content:",i),"content"in i){let s=Buffer.from(i.content,"base64").toString("utf-8");console.log("README Decoded content:",s.trim()),(""===s.trim()||"# tinymind-blog"===s.trim())&&(await t.repos.createOrUpdateFileContents({owner:e,repo:r,path:"README.md",message:"Update README.md with default content",content:Buffer.from("# cici Blog\n\nWrite blog posts and memos at https://tinymind.me with data stored on GitHub.").toString("base64"),sha:i.sha}),console.log("README.md updated with default content"))}}catch(i){if(i instanceof Error&&"status"in i&&404===i.status){let i=Buffer.from("Write blog posts and memos at https://tinymind.me with data stored on GitHub.").toString("base64");await t.repos.createOrUpdateFileContents({owner:e,repo:r,path:"README.md",message:"Initial commit: Add README.md",content:i})}else throw i}}async function d(t,e,r){try{await (0,c.QF)(t,e,r,s.CT.rootKeep(),"Initialize content directory",""),await (0,c.QF)(t,e,r,s.CT.blogDirKeep(),"Initialize blog directory",""),await (0,c.QF)(t,e,r,s.CT.memos(),"Initialize memos.json","[]")}catch(t){throw console.error("Error ensuring content structure:",t),t}}async function h(t,e,r){await g(t,e,r),await d(t,e,r)}async function f(t,e,r,i=[],a,l="published",u){let g=(0,c.Pe)(r),{owner:d,repo:f}=u??await (0,c.rP)(r);await h(g,d,f);let p=`${(0,o.gk)(t)}.md`,m=s.CT.blogFile(p),w=(0,o.X4)({title:t,date:new Date().toISOString(),content:e,status:l,location:a,discussions:i});await g.repos.createOrUpdateFileContents({owner:d,repo:f,path:m,message:`Add blog post: ${t}`,content:Buffer.from(w).toString("base64")}),await n(r,d,f)}async function p(t,e,r){if(console.log("Deleting blog post..."),!e)throw Error("Access token is required");let i=(0,c.Pe)(e);try{let{owner:o,repo:a}=r??await (0,c.rP)(e),l=decodeURIComponent(t),u=`${l}.md`,g=s.CT.blogFile(u);console.log(`Attempting to delete file: ${g}`);let d=await i.repos.getContent({owner:o,repo:a,path:g});if(Array.isArray(d.data)||!("sha"in d.data))throw Error("Unexpected response when fetching current blog post");await i.repos.deleteFile({owner:o,repo:a,path:g,message:"Delete blog post",sha:d.data.sha}),console.log("Blog post deleted successfully"),await n(e,o,a)}catch(t){throw console.error("Error deleting blog post:",t),t}}async function m(t,e,r,i,a=[],l,u,g){if(console.log("Updating blog post..."),!i)throw Error("Access token is required");let d=(0,c.Pe)(i);try{let{owner:h,repo:f}=g??await (0,c.rP)(i),{content:p,sha:m}=await (0,c.LK)(d,h,f,s.CT.blogPost(t)),w=(0,o.xr)(p)??new Date().toISOString(),y=void 0!==u?u:(0,o.Mv)(p)??"published",b=(0,o.X4)({title:e,date:w,content:r,status:y,location:l,discussions:a});await (0,c.gO)(d,h,f,s.CT.blogPost(t),"Update blog post",b,m),console.log("Blog post updated successfully"),await n(i,h,f)}catch(t){throw console.error("Error updating blog post:",t),t}}async function w(t,e,r){if(console.log("Uploading image..."),!e)throw Error("Access token is required");let i=(0,c.Pe)(e);console.log("Octokit instance created");try{let{owner:s,repo:n}=r??await (0,c.rP)(e);console.log("Repo info:",{owner:s,repo:n});let{data:o}=await i.repos.get({owner:s,repo:n}),a=o.default_branch;console.log("Default branch:",a),await h(i,s,n),console.log("GitHub structure initialized");let u=new Date().toISOString().split("T")[0],g=Date.now().toString(),d=l().extname(t.name),f=`${g}${d}`,p=`assets/images/${u}/${f}`;await (0,c.kP)(i,s,n,`assets/images/${u}`);let m=await (0,c.sT)(t),w=await i.repos.createOrUpdateFileContents({owner:s,repo:n,path:p,message:`Upload image: ${f}`,content:m});console.log(w),console.log("Image uploaded successfully");let y=w.data.content?.download_url;if(y){let t=y.split("/"),e=t[3],r=t[4],i=t.slice(6).join("/");return`https://github.com/${e}/${r}/blob/${a}/${i}?raw=true`}throw Error("Failed to get image URL")}catch(t){throw console.error("Error uploading image:",t),t}}async function y(t){let e,r;let i=null;if(t.length>40)try{i=(0,c.Pe)(t);let s=await (0,c.rP)(t);e=s.owner,r=s.repo}catch(i){console.error("Error getting authenticated user:",i),e=t,r=u}else e=t,r=u;let s=`https://github.com/${e}.png`,n=`https://github.com/${e}.png`,o=s,a=n;return i&&(o=await b(i,e,r,"assets/icon.jpg",s),a=await b(i,e,r,"assets/icon-144.jpg",n)),{iconPath:o,appleTouchIconPath:a}}async function b(t,e,r,i,s){try{return await t.repos.getContent({owner:e,repo:r,path:i}),`https://github.com/${e}/${r}/blob/main/${i}?raw=true`}catch(t){return console.warn(`No icon found in ${i}, using default:`,s),s}}},45854:(t,e,r)=>{r.d(e,{LK:()=>o,Pe:()=>s,QF:()=>g,XD:()=>u,gO:()=>a,kP:()=>l,rP:()=>n,sT:()=>c});var i=r(94545);function s(t){if(!t)throw Error("Access token is required");return new i.v({auth:t})}async function n(t){if(!t)throw Error("Access token is required");let e=s(t);try{let{data:t}=await e.users.getAuthenticated();return{owner:t.login,repo:"cici"}}catch(t){throw console.error("Error getting authenticated user:",t),Error("Failed to get authenticated user")}}async function o(t,e,r,i){let s=await t.repos.getContent({owner:e,repo:r,path:i});if(Array.isArray(s.data)||!("content"in s.data))throw Error("Unexpected response from GitHub API");return{content:Buffer.from(s.data.content,"base64").toString("utf-8"),sha:s.data.sha}}async function a(t,e,r,i,s,n,o){let a={owner:e,repo:r,path:i,message:s,content:Buffer.from(n).toString("base64")};o&&(a.sha=o),await t.repos.createOrUpdateFileContents(a)}async function l(t,e,r,i){try{await t.repos.getContent({owner:e,repo:r,path:i})}catch(s){if(s instanceof Error&&"status"in s&&404===s.status)await t.repos.createOrUpdateFileContents({owner:e,repo:r,path:`${i}/.gitkeep`,message:`Create directory: ${i}`,content:""});else throw s}}async function c(t){return new Promise((e,r)=>{let i=new FileReader;i.readAsDataURL(t),i.onload=()=>{"string"==typeof i.result?e(i.result.split(",")[1]):r(Error("Failed to convert file to base64"))},i.onerror=t=>r(t)})}function u(t){return t instanceof Error&&"status"in t&&404===t.status}async function g(t,e,r,i,s,n){try{await t.repos.getContent({owner:e,repo:r,path:i}),console.log(`File ${i} already exists.`)}catch(o){if(u(o)){console.log(`Creating file ${i}...`);try{await a(t,e,r,i,s,n),console.log(`File ${i} created successfully.`)}catch(t){throw console.error(`Error creating file ${i}:`,t),t}}else throw console.error(`Error checking file ${i}:`,o),o}}},54428:(t,e,r)=>{r.d(e,{Bi:()=>m,K4:()=>p,VD:()=>w});var i=r(92048),s=r(55315),n=r.n(s),o=r(94545),a=r(8502),l=r(31470),c=r(73194);let u="cici",g=new Map;function d(t){return l.CT.highlightsFile(t)}function h(t){if(!t||0===t.length||t.length>200||t.includes("/")||t.includes("\\")||t.includes("\0")||t.includes("..")||t.startsWith("."))throw Error(`Invalid postId: ${t}`)}function f(t){if("object"==typeof t&&null!==t&&"status"in t){let e=t.status;return"number"==typeof e?e:void 0}}class p{constructor(t){this.rootDir=t}absPath(t){return n().join(this.rootDir,l.Bf.highlightsFile(t))}async load(t){h(t);try{let e=await i.promises.readFile(this.absPath(t),"utf-8");return{data:a.x.parse(JSON.parse(e)),sha:null}}catch(e){if("ENOENT"===e?.code)return{data:(0,a.Bk)(t),sha:null};throw e}}async save(t,e,r,s){h(t);let o=a.x.parse(e),l=this.absPath(t);return await i.promises.mkdir(n().dirname(l),{recursive:!0}),await i.promises.writeFile(l,JSON.stringify(o,null,2),"utf-8"),{sha:""}}}class m{constructor(t,e){this.octokit=t,this.owner=e}async load(t){h(t);let e=g.get(t);if(e&&e.expiresAt>Date.now())return{data:e.data,sha:e.sha};let r=await this.readFile(t);if(!r){let e=(0,a.Bk)(t);return g.set(t,{data:e,sha:null,expiresAt:Date.now()+3e4}),{data:e,sha:null}}let i=a.x.parse(JSON.parse(r.content));return g.set(t,{data:i,sha:r.sha,expiresAt:Date.now()+3e4}),{data:i,sha:r.sha}}async save(t,e,r,i){h(t);let s=a.x.parse(e),n=Buffer.from(JSON.stringify(s,null,2)).toString("base64"),o=0,l=r;for(;o<3;)try{let e=await this.octokit.repos.createOrUpdateFileContents({owner:this.owner,repo:u,path:d(t),message:i,content:n,...l?{sha:l}:{}}),r=e.data.content?.sha??"";return g.set(t,{data:s,sha:r,expiresAt:Date.now()+3e4}),{sha:r}}catch(r){let e=f(r);if(409===e||422===e){g.delete(t),o++;let e=await this.readFile(t);l=e?.sha??null;continue}throw r}throw Error("Save failed after 3 retries due to write contention")}async readFile(t){try{let e=(await this.octokit.repos.getContent({owner:this.owner,repo:u,path:d(t)})).data;if(Array.isArray(e)||"file"!==e.type)return null;return{content:Buffer.from(e.content,"base64").toString("utf-8"),sha:e.sha}}catch(t){if(404===f(t))return null;throw t}}}function w(t={}){if((0,c.g)())return new p((0,c.$)());let e=t.ownerToken??process.env.HIGHLIGHTS_GH_TOKEN;if(!e)throw Error("HIGHLIGHTS_GH_TOKEN not configured. Inline comments require a service token in production.");let r=process.env.GITHUB_USERNAME;if(!r)throw Error("GITHUB_USERNAME not configured.");return new m(new o.v({auth:e}),r)}},8502:(t,e,r)=>{r.d(e,{Bk:()=>u,Om:()=>s,x:()=>c});var i=r(4037);let s=i.Ry({startOffset:i.Rx().int().nonnegative(),endOffset:i.Rx().int().nonnegative(),exact:i.Z_().min(1).max(1e3),prefix:i.Z_().max(64),suffix:i.Z_().max(64)}).refine(t=>t.endOffset>=t.startOffset,{message:"endOffset must be >= startOffset"}),n=i.IM(i.Z_(),i.IX(i.Z_())),o=i.Km(["ios","android","web"]),a=i.Ry({id:i.Z_().min(1).max(64),parentId:i.Z_().min(1).max(64).nullable(),body:i.Z_().min(1).max(2e3),authorName:i.Z_().max(40).nullable(),fingerprint:i.Z_().min(1).max(128),country:i.Z_().max(8),platform:o,reactions:n,resolved:i.O7(),createdAt:i.Z_().datetime(),hidden:i.O7(),hiddenReason:i.Z_().max(200).optional()}),l=i.Ry({id:i.Z_().min(1).max(64),anchor:s,thread:i.IX(a).min(1),resolved:i.O7(),createdAt:i.Z_().datetime()}),c=i.Ry({postId:i.Z_().min(1),highlights:i.IX(l),schemaVersion:i.i0(1)});function u(t){return{postId:t,highlights:[],schemaVersion:1}}},81336:(t,e,r)=>{r.d(e,{T:()=>g,X:()=>u});var i=r(92048),s=r.n(i),n=r(55315),o=r.n(n),a=r(73194);let l={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".avif":"image/avif"};function c(){return o().join((0,a.$)(),"assets")}async function u(t,e){let r=function(t,e){let r=o().extname(t||"").toLowerCase();if(r&&l[r])return r;if(e){let t=`.${e.split("/")[1]||""}`.toLowerCase();if(l[t])return t}return r||".png"}(t.name,t.type),i=o().posix.join("images",e.date),n=`${e.id}${r}`,a=o().join(c(),i);s().mkdirSync(a,{recursive:!0});let u=Buffer.from(await t.arrayBuffer());return s().writeFileSync(o().join(a,n),u),`/api/asset/${i}/${n}`}function g(t){if(t.some(t=>!t||".."===t||t.includes("\0")||t.includes("/")||t.includes("\\")))return null;let e=c(),r=o().resolve(e,...t);if(r!==e&&!r.startsWith(e+o().sep)||!s().existsSync(r)||!s().statSync(r).isFile())return null;let i=o().extname(r).toLowerCase();return{body:s().readFileSync(r),contentType:l[i]??"application/octet-stream"}}},88069:(t,e,r)=>{r.d(e,{D:()=>o});var i=r(55315),s=r.n(i);let n="cici";function o(t){let e=process.env.CICI_DIR;if(e)return{kind:"local",dir:s().resolve(e)};let r=process.env.CICI_REPO;if(r){let[e,i]=r.split("/");if(!e)throw Error(`Invalid CICI_REPO "${r}" — expected "owner/name".`);return{kind:"github",owner:e,repo:i||n,token:process.env.CICI_TOKEN||t||void 0}}return{kind:"github",owner:process.env.GITHUB_USERNAME||"metrue",repo:n,token:t||void 0}}},73194:(t,e,r)=>{r.d(e,{$:()=>a,g:()=>o});var i=r(55315),s=r.n(i),n=r(88069);function o(){return"local"===(0,n.D)().kind}function a(){let t=process.env.CICI_DIR;return t?s().resolve(t):s().join(process.cwd(),"sample-content")}},63607:(t,e,r)=>{r.d(e,{VH:()=>A});var i=r(88069),s=r(81336),n=r(54428),o=r(92048),a=r.n(o),l=r(55315),c=r.n(l);function u(t){let{frontmatter:e}=function(t){let e=t.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);return e?{frontmatter:e[1],body:e[2].replace(/^\n/,"")}:{frontmatter:"",body:t}}(t),r=e.match(/title:[ \t]*(.+)/),i=e.match(/date:[ \t]*(.+)/),s=e.match(/latitude:[ \t]*(.+)/),n=e.match(/longitude:[ \t]*(.+)/),o=e.match(/city:[ \t]*(.+)/),a=e.match(/street:[ \t]*(.+)/),l=e.match(/status:[ \t]*(.+)/),c=e.match(/publishedAt:[ \t]*(.+)/),u=e.match(/lastModified:[ \t]*(.+)/),g=s?.[1]?.trim(),d=n?.[1]?.trim(),h=g?parseFloat(g):NaN,f=d?parseFloat(d):NaN;return{title:r?r[1].trim():"",date:i?i[1].trim():new Date().toISOString(),discussions:function(t){let e=[],r=t.match(/external_discussions:\s*\n([\s\S]*?)(?=\n\w|$)/);if(!r)return e;let i=r[1].split("\n").filter(t=>t.trim()),s={};for(let t of i)t.includes("platform:")?(s.platform&&s.url&&e.push(s),s={platform:t.split(":")[1].trim()}):t.includes("url:")&&s.platform&&(s.url=t.split("url:")[1].trim());return s.platform&&s.url&&e.push(s),e}(e),...g&&!isNaN(h)&&{latitude:h},...d&&!isNaN(f)&&{longitude:f},...o&&o[1].trim()&&{city:o[1].trim()},...a&&a[1].trim()&&{street:a[1].trim()},...l&&{status:l[1].trim()},...c&&{publishedAt:c[1].trim()},...u&&{lastModified:u[1].trim()}}}var g=r(31470),d=r(73194),h=r(42491);class f{abs(t){return c().join((0,d.$)(),t)}get dataDir(){return(0,d.$)()}get blogDir(){return this.abs(g.Bf.blogDir())}async getBlogPosts(t=!1){try{if(!a().existsSync(this.blogDir))return console.log("Blog directory does not exist, returning empty array"),[];let e=a().readdirSync(this.blogDir).filter(t=>t.endsWith(".md")&&".gitkeep"!==t),r=[];for(let t of e){let e=await this.getBlogPost(t);e&&r.push(e)}let i=r.sort((t,e)=>new Date(e.date).getTime()-new Date(t.date).getTime());if(t)return i;return i.filter(t=>"published"===t.status)}catch(t){return console.error("Error reading local blog posts:",t),[]}}async getBlogPost(t){try{let e=c().join(this.blogDir,t);if(!a().existsSync(e))return null;let r=a().readFileSync(e,"utf-8"),i=u(r),s=this.getFirstImageURLFrom(r);return{id:t.replace(".md",""),title:i.title||t.replace(".md",""),content:r,imageUrl:s,date:i.date?new Date(i.date).toISOString():new Date().toISOString(),discussions:i.discussions.length>0?i.discussions:void 0,latitude:i.latitude,longitude:i.longitude,city:i.city,street:i.street,status:i.status||"published",publishedAt:i.publishedAt||i.date,lastModified:i.lastModified||i.date||new Date().toISOString()}}catch(e){return console.error(`Error reading blog post ${t}:`,e),null}}async getMemos(){try{let t=this.abs(g.Bf.memos());if(!a().existsSync(t))return console.log("memos.json not found, returning empty array"),[];let e=a().readFileSync(t,"utf-8"),r=JSON.parse(e);return Array.isArray(r)?r:[]}catch(t){return console.error("Error reading local memos:",t),[]}}async getSiteConfig(){try{let t=a().readFileSync(this.abs(g.Bf.siteConfig()),"utf-8");return JSON.parse(t)}catch{return null}}async getLinks(){try{let t=this.abs(g.Bf.siteConfig());if(!a().existsSync(t))return{};let e=a().readFileSync(t,"utf-8");return JSON.parse(e).links||{}}catch(t){return console.warn("Error reading local site config:",t),{}}}async getLikes(){try{let t=this.abs(g.Bf.likes());if(!a().existsSync(t))return console.log("likes.json not found, returning empty object"),{};let e=a().readFileSync(t,"utf-8"),r=JSON.parse(e);return"object"==typeof r&&null!==r?r:{}}catch(t){return console.error("Error reading local likes:",t),{}}}async updateLikes(t){try{let e=this.abs(g.Bf.likes()),r=JSON.stringify(t,null,2);a().writeFileSync(e,r,"utf-8"),console.log("Updated local likes data")}catch(t){throw console.error("Error updating local likes:",t),Error("Failed to update local likes data")}}async createMemo(t){try{let e=await this.getMemos(),r=[t,...e],i=this.abs(g.Bf.memos()),s=JSON.stringify(r,null,2);return a().writeFileSync(i,s,"utf-8"),console.log("Created new memo locally"),t}catch(t){throw console.error("Error creating local memo:",t),Error("Failed to create memo locally")}}async createBlogPost(t){let e=(0,h.gk)(t.title),r=this.abs(g.Bf.blogFile(`${e}.md`)),i=(0,h.X4)({title:t.title,date:new Date().toISOString(),content:t.content,status:t.status,location:t.location,discussions:t.discussions});return a().mkdirSync(c().dirname(r),{recursive:!0}),a().writeFileSync(r,i,"utf-8"),e}async updateBlogPost(t,e){let r=this.abs(g.Bf.blogPost(t)),i="";try{i=a().readFileSync(r,"utf-8")}catch{}let s=(0,h.xr)(i)??new Date().toISOString(),n=void 0!==e.status?e.status:(0,h.Mv)(i)??"published",o=(0,h.X4)({title:e.title,date:s,content:e.content,status:n,location:e.location,discussions:e.discussions});return a().mkdirSync(c().dirname(r),{recursive:!0}),a().writeFileSync(r,o,"utf-8"),t}async deleteBlogPost(t){let e=this.abs(g.Bf.blogPost(t));try{a().unlinkSync(e)}catch(t){if(t?.code!=="ENOENT")throw t}}async updateMemo(t,e){let r=await this.getMemos(),i=r.findIndex(e=>e.id===t);if(-1===i)throw Error("Memo not found");let s={...r[i],content:e},n=r.map((t,e)=>e===i?s:t);return a().writeFileSync(this.abs(g.Bf.memos()),JSON.stringify(n,null,2),"utf-8"),s}async deleteMemo(t){let e=(await this.getMemos()).filter(e=>e.id!==t);a().writeFileSync(this.abs(g.Bf.memos()),JSON.stringify(e,null,2),"utf-8")}async getDrafts(){return(await this.getBlogPosts(!0)).filter(t=>"draft"===t.status)}async getAllBlogPosts(){return this.getBlogPosts(!0)}async checkRepositoryHealth(){return a().existsSync(this.dataDir)}getFirstImageURLFrom(t){let e=/(https?:\/\/[^\s]+?\.(?:png|jpg|jpeg|gif|webp))/i.exec(t);if(e){let t=e[1];return t.startsWith("https://github")?`${t}?raw=true`:t}return null}}class p{constructor(t){this.dir=t,this.client=new f}get label(){return`local: ${this.dir}`}canWrite(){return!0}getBlogPosts(t){return this.client.getBlogPosts(t?.includeDrafts??!1)}async getBlogPost(t){return await this.client.getBlogPost(`${t}.md`)??void 0}getMemos(){return this.client.getMemos()}getLinks(){return this.client.getLinks()}getLikes(){return this.client.getLikes()}getSiteConfig(){return this.client.getSiteConfig()}createBlogPost(t){return this.client.createBlogPost(t)}updateBlogPost(t,e){return this.client.updateBlogPost(t,e)}deleteBlogPost(t){return this.client.deleteBlogPost(t)}createMemo(t){return this.client.createMemo(t)}updateMemo(t,e){return this.client.updateMemo(t,e)}deleteMemo(t){return this.client.deleteMemo(t)}updateLikes(t){return this.client.updateLikes(t)}uploadAsset(t){return(0,s.X)(t,{date:new Date().toISOString().split("T")[0],id:Date.now().toString()})}highlights(){return new n.K4(this.dir)}}var m=r(45854),w=r(82575),y=r(94545);let b=t=>{let e=/(https?:\/\/[^\s]+?\.(?:png|jpg|jpeg|gif|webp))/i.exec(t);if(e){let t=e[1];return t.startsWith("https://github")?`${t}?raw=true`:t}return null};class k{constructor(t,e="cici"){this.accessToken=t,this.repo=e}async getSafeOwner(t){if(t&&"true"!==t)return t;if(this.accessToken)try{let t=new y.v({auth:this.accessToken}),{data:e}=await t.users.getAuthenticated();if(e.login&&"true"!==e.login)return e.login}catch(t){console.warn("Failed to get authenticated user:",t)}return process.env.GITHUB_USERNAME||"metrue"}async getBlogPosts(t,e=!1){let r=this.accessToken?new y.v({auth:this.accessToken}):new y.v,i=await this.getSafeOwner(t);try{let t=await r.repos.getContent({owner:i,repo:this.repo,path:g.CT.blogDir()});if(!Array.isArray(t.data))return console.warn("Unexpected response from GitHub API: data is not an array"),[];let s=(await Promise.all(t.data.filter(t=>"file"===t.type&&".gitkeep"!==t.name&&t.name.endsWith(".md")).map(async t=>this.getBlogPost(t.name,i)))).filter(t=>void 0!==t);if(e&&this.accessToken)return s;return s.filter(t=>"published"===t.status)}catch(t){if(console.error("Error fetching blog posts:",t),t instanceof Error&&"status"in t&&404===t.status)return console.log("Blog directory does not exist, returning empty array"),[];throw t}}async getBlogPost(t,e){let r=this.accessToken?new y.v({auth:this.accessToken}):new y.v,i=await this.getSafeOwner(e),s=await r.repos.getContent({owner:i,repo:this.repo,path:g.CT.blogFile(t)});if("content"in s.data){let e=Buffer.from(s.data.content,"base64").toString("utf-8"),r=u(e);return{id:t.replace(".md",""),title:r.title?decodeURIComponent(r.title):decodeURIComponent(t.replace(".md","")),content:e,imageUrl:b(e),date:r.date?new Date(r.date).toISOString():new Date().toISOString(),discussions:r.discussions.length>0?r.discussions:void 0,latitude:r.latitude,longitude:r.longitude,city:r.city,street:r.street,status:r.status||"published",publishedAt:r.publishedAt||r.date,lastModified:r.lastModified||r.date||new Date().toISOString()}}}async getMemos(t){let e=this.accessToken?new y.v({auth:this.accessToken}):new y.v,r=await this.getSafeOwner(t);try{let t=await e.repos.getContent({owner:r,repo:this.repo,path:g.CT.memos()});if(Array.isArray(t.data)||!("content"in t.data))return[];let i=Buffer.from(t.data.content,"base64").toString("utf-8");return JSON.parse(i)}catch(t){return console.error("Error fetching public memos:",t),[]}}async getLinks(t){let e=this.accessToken?new y.v({auth:this.accessToken}):new y.v,r=await this.getSafeOwner(t);try{let t=await e.repos.getContent({owner:r,repo:this.repo,path:g.CT.siteConfig()});if(Array.isArray(t.data)||!("content"in t.data))return{};let i=Buffer.from(t.data.content,"base64").toString("utf-8");return JSON.parse(i).links||{}}catch(t){return console.warn("Error fetching links:",t),{}}}async getLikes(t){let e=this.accessToken?new y.v({auth:this.accessToken}):new y.v,r=await this.getSafeOwner(t);try{let t=await e.repos.getContent({owner:r,repo:this.repo,path:g.CT.likes()});if(Array.isArray(t.data)||!("content"in t.data))return{};let i=Buffer.from(t.data.content,"base64").toString("utf-8");return JSON.parse(i)}catch(t){if(console.error("Error fetching likes:",t),t instanceof Error&&"status"in t&&404===t.status)return{};throw t}}async updateLikes(t,e){let r=new y.v({auth:this.accessToken}),i=await this.getSafeOwner(e);try{let e;try{let t=await r.repos.getContent({owner:i,repo:this.repo,path:g.CT.likes()});!Array.isArray(t.data)&&"sha"in t.data&&(e=t.data.sha)}catch(t){}await r.repos.createOrUpdateFileContents({owner:i,repo:this.repo,path:g.CT.likes(),message:`Update likes data - ${new Date().toISOString()}`,content:Buffer.from(JSON.stringify(t,null,2)).toString("base64"),...e&&{sha:e}})}catch(t){throw console.error("Error updating likes:",t),Error("Failed to update likes data")}}async getDrafts(t){return(await this.getBlogPosts(t,!0)).filter(t=>"draft"===t.status)}async getAllBlogPosts(t){return this.getBlogPosts(t,!0)}}let S=(t,e)=>new k(t,e),$=t=>{let e=/(https?:\/\/[^\s]+?\.(?:png|jpg|jpeg|gif|webp))/i.exec(t);if(e){let t=e[1];return t.startsWith("https://github")?`${t}?raw=true`:t}return null};class C{constructor(t,e="cici"){this.owner=t,this.baseUrl=`https://raw.githubusercontent.com/${t}/${e}/main`}async getBlogPosts(t=!1){try{try{let e=await fetch(`${this.baseUrl}/${g.CT.blogManifest()}`);if(e.ok){let r=await e.json(),i=r.files||[...r.published||[],...r.drafts||[]],s=(await Promise.all(i.map(t=>this.getBlogPost(t)))).filter(t=>null!==t);if(t)return s;return s.filter(t=>"published"===t.status)}}catch{}return console.warn("Blog manifest not found, returning empty array"),[]}catch(t){throw console.error("Error fetching blog posts via raw URLs:",t),t}}async getBlogPost(t){try{let e=await fetch(`${this.baseUrl}/${g.CT.blogFile(t)}`);if(!e.ok){if(404===e.status)return null;throw Error(`HTTP ${e.status}: ${e.statusText}`)}let r=await e.text(),i=u(r);return{id:t.replace(".md",""),title:i.title?decodeURIComponent(i.title.trim()):decodeURIComponent(t.replace(".md","")),content:r,imageUrl:$(r),date:i.date?new Date(i.date.trim()).toISOString():new Date().toISOString(),discussions:i.discussions.length>0?i.discussions:void 0,latitude:i.latitude,longitude:i.longitude,city:i.city,street:i.street,status:i.status||"published",publishedAt:i.publishedAt||i.date,lastModified:i.lastModified||i.date||new Date().toISOString()}}catch(e){return console.error(`Error fetching blog post ${t}:`,e),null}}async getMemos(){try{let t=await fetch(`${this.baseUrl}/${g.CT.memos()}`);if(!t.ok){if(404===t.status)return console.log("memos.json not found, returning empty array"),[];throw Error(`HTTP ${t.status}: ${t.statusText}`)}let e=await t.json();return Array.isArray(e)?e:[]}catch(t){return console.error("Error fetching memos via raw URLs:",t),[]}}async getLinks(){try{let t=await fetch(`${this.baseUrl}/${g.CT.siteConfig()}`);if(!t.ok){if(404===t.status)return{};throw Error(`HTTP ${t.status}: ${t.statusText}`)}return(await t.json()).links||{}}catch(t){return console.warn("Error fetching links via raw URLs:",t),{}}}async getLikes(){try{let t=await fetch(`${this.baseUrl}/${g.CT.likes()}`);if(!t.ok){if(404===t.status)return console.log("likes.json not found, returning empty object"),{};throw Error(`HTTP ${t.status}: ${t.statusText}`)}let e=await t.json();return"object"==typeof e&&null!==e?e:{}}catch(t){return console.error("Error fetching likes via raw URLs:",t),{}}}async getDrafts(){return(await this.getBlogPosts(!0)).filter(t=>"draft"===t.status)}async getAllBlogPosts(){return this.getBlogPosts(!0)}async checkRepositoryHealth(){try{return(await fetch(`${this.baseUrl}/README.md`)).ok}catch{return!1}}}class E extends Error{constructor(t="This cici instance is read-only. Provide a token to enable editing."){super(t),this.name="ReadOnlyError"}}class B{constructor(t){this.owner=t.owner,this.repo=t.repo,this.token=t.token,this.reader=new C(t.owner,t.repo),this.apiReader=t.token?S(t.token,t.repo):void 0,this.target={owner:t.owner,repo:t.repo}}async fresh(t,e){if(this.apiReader)try{return await t(this.apiReader)}catch(t){console.warn("GitHub API read failed, falling back to raw URL:",t)}return e()}get label(){return`github: ${this.owner}/${this.repo}${this.token?"":" (read-only)"}`}canWrite(){return!!this.token}requireToken(){if(!this.token)throw new E;return this.token}writeOctokit(){return(0,m.Pe)(this.requireToken())}getBlogPosts(t){let e=t?.includeDrafts??!1;return this.fresh(t=>t.getBlogPosts(this.owner,e),()=>this.reader.getBlogPosts(e))}async getBlogPost(t){return await this.fresh(e=>e.getBlogPost(`${t}.md`,this.owner),()=>this.reader.getBlogPost(`${t}.md`))??void 0}getMemos(){return this.fresh(t=>t.getMemos(this.owner),()=>this.reader.getMemos())}getLinks(){return this.fresh(t=>t.getLinks(this.owner),()=>this.reader.getLinks())}getLikes(){return this.fresh(t=>t.getLikes(this.owner),()=>this.reader.getLikes())}async getSiteConfig(){if(this.token)try{let t=(0,m.Pe)(this.token),e=await t.repos.getContent({owner:this.owner,repo:this.repo,path:g.CT.siteConfig()});if(!Array.isArray(e.data)&&"content"in e.data){let t=Buffer.from(e.data.content,"base64").toString("utf-8");return JSON.parse(t)}}catch(t){console.warn("GitHub API site-config read failed, falling back to raw URL:",t)}try{let t=`https://raw.githubusercontent.com/${this.owner}/${this.repo}/main/${g.CT.siteConfig()}`,e=await fetch(t);if(!e.ok)return null;return await e.json()}catch{return null}}async createBlogPost(t){let e=this.requireToken();return await (0,w.I7)(t.title,t.content,e,t.discussions,t.location,t.status,this.target),(0,h.gk)(t.title)}async updateBlogPost(t,e){let r=this.requireToken();return await (0,w.Kx)(t,e.title,e.content,r,e.discussions,e.location,e.status,this.target),t}async deleteBlogPost(t){await (0,w.XD)(t,this.requireToken(),this.target)}async uploadAsset(t){return(0,w.Ix)(t,this.requireToken(),this.target)}async createMemo(t){let e=g.CT.memos(),{data:r,sha:i}=await this.getJsonFile(e),s=Array.isArray(r)?r:[];return await this.putFile(e,JSON.stringify([t,...s],null,2),`Add memo ${t.id}`,i),t}async updateMemo(t,e){let r=g.CT.memos(),{data:i,sha:s}=await this.getJsonFile(r),n=Array.isArray(i)?i:[],o=n.findIndex(e=>e.id===t);if(-1===o)throw Error("Memo not found");let a={...n[o],content:e},l=n.map((t,e)=>e===o?a:t);return await this.putFile(r,JSON.stringify(l,null,2),`Update memo ${t}`,s),a}async deleteMemo(t){let e=g.CT.memos(),{data:r,sha:i}=await this.getJsonFile(e),s=Array.isArray(r)?r:[];await this.putFile(e,JSON.stringify(s.filter(e=>e.id!==t),null,2),`Delete memo ${t}`,i)}async updateLikes(t){let e=g.CT.likes(),{sha:r}=await this.getJsonFile(e);await this.putFile(e,JSON.stringify(t,null,2),"Update likes",r)}highlights(){return new n.Bi((0,m.Pe)(this.token),this.owner)}async getJsonFile(t){let e=this.writeOctokit();try{let r=await e.repos.getContent({owner:this.owner,repo:this.repo,path:t});if(Array.isArray(r.data)||!("content"in r.data))return{data:null};let i=Buffer.from(r.data.content,"base64").toString("utf-8");return{data:JSON.parse(i),sha:r.data.sha}}catch(t){if(t?.status===404)return{data:null};throw t}}putFile(t,e,r,i){return(0,m.gO)(this.writeOctokit(),this.owner,this.repo,t,r,e,i)}}function A(t){var e;return"local"===(e=(0,i.D)(t)).kind?new p(e.dir):new B({owner:e.owner,repo:e.repo,token:e.token})}}};
14
+ ${r}`}function n(t){let e=t.match(/date:\s*(.+)/);return e?e[1]:void 0}function o(t){let e=t.match(/status:\s*(.+)/);return e?e[1].trim():void 0}r.d(e,{Mv:()=>o,X4:()=>s,gk:()=>i,xr:()=>n})},31470:(t,e,r)=>{r.d(e,{Bf:()=>s,CT:()=>o});let i="data",s={rootKeep:()=>".gitkeep",blogDir:()=>"blog",blogDirKeep:()=>"blog/.gitkeep",blogPost:t=>`blog/${t}.md`,blogFile:t=>`blog/${t}`,blogManifest:()=>"blog-manifest.json",memos:()=>"memos.json",likes:()=>"likes.json",siteConfig:()=>"site-config.json",highlightsDir:()=>"highlights",highlightsFile:t=>`highlights/${t}.json`},n=t=>`${i}/${t}`,o={root:()=>i,rootKeep:()=>n(s.rootKeep()),blogDir:()=>n(s.blogDir()),blogDirKeep:()=>n(s.blogDirKeep()),blogPost:t=>n(s.blogPost(t)),blogFile:t=>n(s.blogFile(t)),blogManifest:()=>n(s.blogManifest()),memos:()=>n(s.memos()),likes:()=>n(s.likes()),siteConfig:()=>n(s.siteConfig()),highlightsDir:()=>n(s.highlightsDir()),highlightsFile:t=>n(s.highlightsFile(t))}},82575:(t,e,r)=>{r.d(e,{I7:()=>f,XD:()=>p,CR:()=>y,Kx:()=>m,Ix:()=>w});var i=r(94545),s=r(31470);async function n(t,e,r){try{let n;let o=new i.v({auth:t}),{data:a}=await o.repos.getContent({owner:e,repo:r,path:s.CT.blogDir()});if(!Array.isArray(a)){console.error("Expected array of files but got:",typeof a);return}let l=a.filter(t=>"file"===t.type&&t.name.endsWith(".md")&&".gitkeep"!==t.name).map(t=>t.name).sort();try{let{data:t}=await o.repos.getContent({owner:e,repo:r,path:s.CT.blogManifest()});!Array.isArray(t)&&"sha"in t&&(n=t.sha)}catch(t){console.log("Blog manifest does not exist yet, will create it")}await o.repos.createOrUpdateFileContents({owner:e,repo:r,path:s.CT.blogManifest(),message:"Update blog manifest",content:Buffer.from(JSON.stringify({files:l},null,2)).toString("base64"),sha:n}),console.log("Blog manifest updated successfully with",l.length,"files")}catch(t){console.error("Failed to update blog manifest:",t)}}var o=r(42491),a=r(55315),l=r.n(a),c=r(45854);let u="cici";async function g(t,e,r){try{let{data:i}=await t.repos.get({owner:e,repo:r});if(!i.description){let{data:i}=await t.users.getAuthenticated(),s=i.login;await t.repos.update({owner:e,repo:r,description:`https://tinymind.me/${s}`}),console.log(`Updated repository description to https://tinymind.me/${s}`)}}catch(e){if((0,c.XD)(e))await t.repos.createForAuthenticatedUser({name:r,auto_init:!0}),console.log(`Created new repository: ${r}`);else throw e}try{let{data:i}=await t.repos.getContent({owner:e,repo:r,path:"README.md"});if(console.log("README content:",i),"content"in i){let s=Buffer.from(i.content,"base64").toString("utf-8");console.log("README Decoded content:",s.trim()),(""===s.trim()||"# tinymind-blog"===s.trim())&&(await t.repos.createOrUpdateFileContents({owner:e,repo:r,path:"README.md",message:"Update README.md with default content",content:Buffer.from("# cici Blog\n\nWrite blog posts and memos at https://tinymind.me with data stored on GitHub.").toString("base64"),sha:i.sha}),console.log("README.md updated with default content"))}}catch(i){if(i instanceof Error&&"status"in i&&404===i.status){let i=Buffer.from("Write blog posts and memos at https://tinymind.me with data stored on GitHub.").toString("base64");await t.repos.createOrUpdateFileContents({owner:e,repo:r,path:"README.md",message:"Initial commit: Add README.md",content:i})}else throw i}}async function d(t,e,r){try{await (0,c.QF)(t,e,r,s.CT.rootKeep(),"Initialize content directory",""),await (0,c.QF)(t,e,r,s.CT.blogDirKeep(),"Initialize blog directory",""),await (0,c.QF)(t,e,r,s.CT.memos(),"Initialize memos.json","[]")}catch(t){throw console.error("Error ensuring content structure:",t),t}}async function h(t,e,r){await g(t,e,r),await d(t,e,r)}async function f(t,e,r,i=[],a,l="published",u){let g=(0,c.Pe)(r),{owner:d,repo:f}=u??await (0,c.rP)(r);await h(g,d,f);let p=`${(0,o.gk)(t)}.md`,m=s.CT.blogFile(p),w=(0,o.X4)({title:t,date:new Date().toISOString(),content:e,status:l,location:a,discussions:i});await g.repos.createOrUpdateFileContents({owner:d,repo:f,path:m,message:`Add blog post: ${t}`,content:Buffer.from(w).toString("base64")}),await n(r,d,f)}async function p(t,e,r){if(console.log("Deleting blog post..."),!e)throw Error("Access token is required");let i=(0,c.Pe)(e);try{let{owner:o,repo:a}=r??await (0,c.rP)(e),l=decodeURIComponent(t),u=`${l}.md`,g=s.CT.blogFile(u);console.log(`Attempting to delete file: ${g}`);let d=await i.repos.getContent({owner:o,repo:a,path:g});if(Array.isArray(d.data)||!("sha"in d.data))throw Error("Unexpected response when fetching current blog post");await i.repos.deleteFile({owner:o,repo:a,path:g,message:"Delete blog post",sha:d.data.sha}),console.log("Blog post deleted successfully"),await n(e,o,a)}catch(t){throw console.error("Error deleting blog post:",t),t}}async function m(t,e,r,i,a=[],l,u,g){if(console.log("Updating blog post..."),!i)throw Error("Access token is required");let d=(0,c.Pe)(i);try{let{owner:h,repo:f}=g??await (0,c.rP)(i),{content:p,sha:m}=await (0,c.LK)(d,h,f,s.CT.blogPost(t)),w=(0,o.xr)(p)??new Date().toISOString(),y=void 0!==u?u:(0,o.Mv)(p)??"published",b=(0,o.X4)({title:e,date:w,content:r,status:y,location:l,discussions:a});await (0,c.gO)(d,h,f,s.CT.blogPost(t),"Update blog post",b,m),console.log("Blog post updated successfully"),await n(i,h,f)}catch(t){throw console.error("Error updating blog post:",t),t}}async function w(t,e,r){if(console.log("Uploading image..."),!e)throw Error("Access token is required");let i=(0,c.Pe)(e);console.log("Octokit instance created");try{let{owner:s,repo:n}=r??await (0,c.rP)(e);console.log("Repo info:",{owner:s,repo:n});let{data:o}=await i.repos.get({owner:s,repo:n}),a=o.default_branch;console.log("Default branch:",a),await h(i,s,n),console.log("GitHub structure initialized");let u=new Date().toISOString().split("T")[0],g=Date.now().toString(),d=l().extname(t.name),f=`${g}${d}`,p=`assets/images/${u}/${f}`;await (0,c.kP)(i,s,n,`assets/images/${u}`);let m=await (0,c.sT)(t),w=await i.repos.createOrUpdateFileContents({owner:s,repo:n,path:p,message:`Upload image: ${f}`,content:m});console.log(w),console.log("Image uploaded successfully");let y=w.data.content?.download_url;if(y){let t=y.split("/"),e=t[3],r=t[4],i=t.slice(6).join("/");return`https://github.com/${e}/${r}/blob/${a}/${i}?raw=true`}throw Error("Failed to get image URL")}catch(t){throw console.error("Error uploading image:",t),t}}async function y(t){let e,r;let i=null;if(t.length>40)try{i=(0,c.Pe)(t);let s=await (0,c.rP)(t);e=s.owner,r=s.repo}catch(i){console.error("Error getting authenticated user:",i),e=t,r=u}else e=t,r=u;let s=`https://github.com/${e}.png`,n=`https://github.com/${e}.png`,o=s,a=n;return i&&(o=await b(i,e,r,"assets/icon.jpg",s),a=await b(i,e,r,"assets/icon-144.jpg",n)),{iconPath:o,appleTouchIconPath:a}}async function b(t,e,r,i,s){try{return await t.repos.getContent({owner:e,repo:r,path:i}),`https://github.com/${e}/${r}/blob/main/${i}?raw=true`}catch(t){return console.warn(`No icon found in ${i}, using default:`,s),s}}},45854:(t,e,r)=>{r.d(e,{LK:()=>o,Pe:()=>s,QF:()=>g,XD:()=>u,gO:()=>a,kP:()=>l,rP:()=>n,sT:()=>c});var i=r(94545);function s(t){if(!t)throw Error("Access token is required");return new i.v({auth:t})}async function n(t){if(!t)throw Error("Access token is required");let e=s(t);try{let{data:t}=await e.users.getAuthenticated();return{owner:t.login,repo:"cici"}}catch(t){throw console.error("Error getting authenticated user:",t),Error("Failed to get authenticated user")}}async function o(t,e,r,i){let s=await t.repos.getContent({owner:e,repo:r,path:i});if(Array.isArray(s.data)||!("content"in s.data))throw Error("Unexpected response from GitHub API");return{content:Buffer.from(s.data.content,"base64").toString("utf-8"),sha:s.data.sha}}async function a(t,e,r,i,s,n,o){let a={owner:e,repo:r,path:i,message:s,content:Buffer.from(n).toString("base64")};o&&(a.sha=o),await t.repos.createOrUpdateFileContents(a)}async function l(t,e,r,i){try{await t.repos.getContent({owner:e,repo:r,path:i})}catch(s){if(s instanceof Error&&"status"in s&&404===s.status)await t.repos.createOrUpdateFileContents({owner:e,repo:r,path:`${i}/.gitkeep`,message:`Create directory: ${i}`,content:""});else throw s}}async function c(t){return new Promise((e,r)=>{let i=new FileReader;i.readAsDataURL(t),i.onload=()=>{"string"==typeof i.result?e(i.result.split(",")[1]):r(Error("Failed to convert file to base64"))},i.onerror=t=>r(t)})}function u(t){return t instanceof Error&&"status"in t&&404===t.status}async function g(t,e,r,i,s,n){try{await t.repos.getContent({owner:e,repo:r,path:i}),console.log(`File ${i} already exists.`)}catch(o){if(u(o)){console.log(`Creating file ${i}...`);try{await a(t,e,r,i,s,n),console.log(`File ${i} created successfully.`)}catch(t){throw console.error(`Error creating file ${i}:`,t),t}}else throw console.error(`Error checking file ${i}:`,o),o}}},54428:(t,e,r)=>{r.d(e,{Bi:()=>p,K4:()=>f,VD:()=>m});var i=r(92048),s=r(55315),n=r.n(s),o=r(94545),a=r(8502),l=r(31470),c=r(88069);let u=new Map;function g(t){return l.CT.highlightsFile(t)}function d(t){if(!t||0===t.length||t.length>200||t.includes("/")||t.includes("\\")||t.includes("\0")||t.includes("..")||t.startsWith("."))throw Error(`Invalid postId: ${t}`)}function h(t){if("object"==typeof t&&null!==t&&"status"in t){let e=t.status;return"number"==typeof e?e:void 0}}class f{constructor(t){this.rootDir=t}absPath(t){return n().join(this.rootDir,l.Bf.highlightsFile(t))}async load(t){d(t);try{let e=await i.promises.readFile(this.absPath(t),"utf-8");return{data:a.x.parse(JSON.parse(e)),sha:null}}catch(e){if("ENOENT"===e?.code)return{data:(0,a.Bk)(t),sha:null};throw e}}async save(t,e,r,s){d(t);let o=a.x.parse(e),l=this.absPath(t);return await i.promises.mkdir(n().dirname(l),{recursive:!0}),await i.promises.writeFile(l,JSON.stringify(o,null,2),"utf-8"),{sha:""}}}class p{constructor(t,e,r="cici"){this.octokit=t,this.owner=e,this.repo=r}async load(t){d(t);let e=u.get(t);if(e&&e.expiresAt>Date.now())return{data:e.data,sha:e.sha};let r=await this.readFile(t);if(!r){let e=(0,a.Bk)(t);return u.set(t,{data:e,sha:null,expiresAt:Date.now()+3e4}),{data:e,sha:null}}let i=a.x.parse(JSON.parse(r.content));return u.set(t,{data:i,sha:r.sha,expiresAt:Date.now()+3e4}),{data:i,sha:r.sha}}async save(t,e,r,i){d(t);let s=a.x.parse(e),n=Buffer.from(JSON.stringify(s,null,2)).toString("base64"),o=0,l=r;for(;o<3;)try{let e=await this.octokit.repos.createOrUpdateFileContents({owner:this.owner,repo:this.repo,path:g(t),message:i,content:n,...l?{sha:l}:{}}),r=e.data.content?.sha??"";return u.set(t,{data:s,sha:r,expiresAt:Date.now()+3e4}),{sha:r}}catch(r){let e=h(r);if(409===e||422===e){u.delete(t),o++;let e=await this.readFile(t);l=e?.sha??null;continue}throw r}throw Error("Save failed after 3 retries due to write contention")}async readFile(t){try{let e=(await this.octokit.repos.getContent({owner:this.owner,repo:this.repo,path:g(t)})).data;if(Array.isArray(e)||"file"!==e.type)return null;return{content:Buffer.from(e.content,"base64").toString("utf-8"),sha:e.sha}}catch(t){if(404===h(t))return null;throw t}}}function m(t={}){let e=(0,c.D)(t.ownerToken);if("local"===e.kind)return new f(e.dir);{let r=t.ownerToken??e.token??process.env.HIGHLIGHTS_GH_TOKEN;if(!r)throw Error("HIGHLIGHTS_GH_TOKEN not configured. Inline comments require a service token in production.");return new p(new o.v({auth:r}),e.owner,e.repo)}}},8502:(t,e,r)=>{r.d(e,{Bk:()=>u,Om:()=>s,x:()=>c});var i=r(4037);let s=i.Ry({startOffset:i.Rx().int().nonnegative(),endOffset:i.Rx().int().nonnegative(),exact:i.Z_().min(1).max(1e3),prefix:i.Z_().max(64),suffix:i.Z_().max(64)}).refine(t=>t.endOffset>=t.startOffset,{message:"endOffset must be >= startOffset"}),n=i.IM(i.Z_(),i.IX(i.Z_())),o=i.Km(["ios","android","web"]),a=i.Ry({id:i.Z_().min(1).max(64),parentId:i.Z_().min(1).max(64).nullable(),body:i.Z_().min(1).max(2e3),authorName:i.Z_().max(40).nullable(),fingerprint:i.Z_().min(1).max(128),country:i.Z_().max(8),platform:o,reactions:n,resolved:i.O7(),createdAt:i.Z_().datetime(),hidden:i.O7(),hiddenReason:i.Z_().max(200).optional()}),l=i.Ry({id:i.Z_().min(1).max(64),anchor:s,thread:i.IX(a).min(1),resolved:i.O7(),createdAt:i.Z_().datetime()}),c=i.Ry({postId:i.Z_().min(1),highlights:i.IX(l),schemaVersion:i.i0(1)});function u(t){return{postId:t,highlights:[],schemaVersion:1}}},81336:(t,e,r)=>{r.d(e,{T:()=>g,X:()=>u});var i=r(92048),s=r.n(i),n=r(55315),o=r.n(n),a=r(73194);let l={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml",".avif":"image/avif"};function c(){return o().join((0,a.$)(),"assets")}async function u(t,e){let r=function(t,e){let r=o().extname(t||"").toLowerCase();if(r&&l[r])return r;if(e){let t=`.${e.split("/")[1]||""}`.toLowerCase();if(l[t])return t}return r||".png"}(t.name,t.type),i=o().posix.join("images",e.date),n=`${e.id}${r}`,a=o().join(c(),i);s().mkdirSync(a,{recursive:!0});let u=Buffer.from(await t.arrayBuffer());return s().writeFileSync(o().join(a,n),u),`/api/asset/${i}/${n}`}function g(t){if(t.some(t=>!t||".."===t||t.includes("\0")||t.includes("/")||t.includes("\\")))return null;let e=c(),r=o().resolve(e,...t);if(r!==e&&!r.startsWith(e+o().sep)||!s().existsSync(r)||!s().statSync(r).isFile())return null;let i=o().extname(r).toLowerCase();return{body:s().readFileSync(r),contentType:l[i]??"application/octet-stream"}}},88069:(t,e,r)=>{r.d(e,{D:()=>o});var i=r(55315),s=r.n(i);let n="cici";function o(t){let e=process.env.CICI_DIR;if(e)return{kind:"local",dir:s().resolve(e)};let r=process.env.CICI_REPO;if(r){let[e,i]=r.split("/");if(!e)throw Error(`Invalid CICI_REPO "${r}" — expected "owner/name".`);return{kind:"github",owner:e,repo:i||n,token:process.env.CICI_TOKEN||t||void 0}}return{kind:"github",owner:process.env.GITHUB_USERNAME||"metrue",repo:n,token:t||void 0}}},73194:(t,e,r)=>{r.d(e,{$:()=>a,g:()=>o});var i=r(55315),s=r.n(i),n=r(88069);function o(){return"local"===(0,n.D)().kind}function a(){let t=process.env.CICI_DIR;return t?s().resolve(t):s().join(process.cwd(),"sample-content")}},63607:(t,e,r)=>{r.d(e,{VH:()=>T});var i=r(88069),s=r(81336),n=r(54428),o=r(92048),a=r.n(o),l=r(55315),c=r.n(l);function u(t){let{frontmatter:e}=function(t){let e=t.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);return e?{frontmatter:e[1],body:e[2].replace(/^\n/,"")}:{frontmatter:"",body:t}}(t),r=e.match(/title:[ \t]*(.+)/),i=e.match(/date:[ \t]*(.+)/),s=e.match(/latitude:[ \t]*(.+)/),n=e.match(/longitude:[ \t]*(.+)/),o=e.match(/city:[ \t]*(.+)/),a=e.match(/street:[ \t]*(.+)/),l=e.match(/status:[ \t]*(.+)/),c=e.match(/publishedAt:[ \t]*(.+)/),u=e.match(/lastModified:[ \t]*(.+)/),g=s?.[1]?.trim(),d=n?.[1]?.trim(),h=g?parseFloat(g):NaN,f=d?parseFloat(d):NaN;return{title:r?r[1].trim():"",date:i?i[1].trim():new Date().toISOString(),discussions:function(t){let e=[],r=t.match(/external_discussions:\s*\n([\s\S]*?)(?=\n\w|$)/);if(!r)return e;let i=r[1].split("\n").filter(t=>t.trim()),s={};for(let t of i)t.includes("platform:")?(s.platform&&s.url&&e.push(s),s={platform:t.split(":")[1].trim()}):t.includes("url:")&&s.platform&&(s.url=t.split("url:")[1].trim());return s.platform&&s.url&&e.push(s),e}(e),...g&&!isNaN(h)&&{latitude:h},...d&&!isNaN(f)&&{longitude:f},...o&&o[1].trim()&&{city:o[1].trim()},...a&&a[1].trim()&&{street:a[1].trim()},...l&&{status:l[1].trim()},...c&&{publishedAt:c[1].trim()},...u&&{lastModified:u[1].trim()}}}var g=r(31470),d=r(73194),h=r(42491);class f{abs(t){return c().join((0,d.$)(),t)}get dataDir(){return(0,d.$)()}get blogDir(){return this.abs(g.Bf.blogDir())}async getBlogPosts(t=!1){try{if(!a().existsSync(this.blogDir))return console.log("Blog directory does not exist, returning empty array"),[];let e=a().readdirSync(this.blogDir).filter(t=>t.endsWith(".md")&&".gitkeep"!==t),r=[];for(let t of e){let e=await this.getBlogPost(t);e&&r.push(e)}let i=r.sort((t,e)=>new Date(e.date).getTime()-new Date(t.date).getTime());if(t)return i;return i.filter(t=>"published"===t.status)}catch(t){return console.error("Error reading local blog posts:",t),[]}}async getBlogPost(t){try{let e=c().join(this.blogDir,t);if(!a().existsSync(e))return null;let r=a().readFileSync(e,"utf-8"),i=u(r),s=this.getFirstImageURLFrom(r);return{id:t.replace(".md",""),title:i.title||t.replace(".md",""),content:r,imageUrl:s,date:i.date?new Date(i.date).toISOString():new Date().toISOString(),discussions:i.discussions.length>0?i.discussions:void 0,latitude:i.latitude,longitude:i.longitude,city:i.city,street:i.street,status:i.status||"published",publishedAt:i.publishedAt||i.date,lastModified:i.lastModified||i.date||new Date().toISOString()}}catch(e){return console.error(`Error reading blog post ${t}:`,e),null}}async getMemos(){try{let t=this.abs(g.Bf.memos());if(!a().existsSync(t))return console.log("memos.json not found, returning empty array"),[];let e=a().readFileSync(t,"utf-8"),r=JSON.parse(e);return Array.isArray(r)?r:[]}catch(t){return console.error("Error reading local memos:",t),[]}}async getSiteConfig(){try{let t=a().readFileSync(this.abs(g.Bf.siteConfig()),"utf-8");return JSON.parse(t)}catch{return null}}async getLinks(){try{let t=this.abs(g.Bf.siteConfig());if(!a().existsSync(t))return{};let e=a().readFileSync(t,"utf-8");return JSON.parse(e).links||{}}catch(t){return console.warn("Error reading local site config:",t),{}}}async getLikes(){try{let t=this.abs(g.Bf.likes());if(!a().existsSync(t))return console.log("likes.json not found, returning empty object"),{};let e=a().readFileSync(t,"utf-8"),r=JSON.parse(e);return"object"==typeof r&&null!==r?r:{}}catch(t){return console.error("Error reading local likes:",t),{}}}async updateLikes(t){try{let e=this.abs(g.Bf.likes()),r=JSON.stringify(t,null,2);a().writeFileSync(e,r,"utf-8"),console.log("Updated local likes data")}catch(t){throw console.error("Error updating local likes:",t),Error("Failed to update local likes data")}}async createMemo(t){try{let e=await this.getMemos(),r=[t,...e],i=this.abs(g.Bf.memos()),s=JSON.stringify(r,null,2);return a().writeFileSync(i,s,"utf-8"),console.log("Created new memo locally"),t}catch(t){throw console.error("Error creating local memo:",t),Error("Failed to create memo locally")}}async createBlogPost(t){let e=(0,h.gk)(t.title),r=this.abs(g.Bf.blogFile(`${e}.md`)),i=(0,h.X4)({title:t.title,date:new Date().toISOString(),content:t.content,status:t.status,location:t.location,discussions:t.discussions});return a().mkdirSync(c().dirname(r),{recursive:!0}),a().writeFileSync(r,i,"utf-8"),e}async updateBlogPost(t,e){let r=this.abs(g.Bf.blogPost(t)),i="";try{i=a().readFileSync(r,"utf-8")}catch{}let s=(0,h.xr)(i)??new Date().toISOString(),n=void 0!==e.status?e.status:(0,h.Mv)(i)??"published",o=(0,h.X4)({title:e.title,date:s,content:e.content,status:n,location:e.location,discussions:e.discussions});return a().mkdirSync(c().dirname(r),{recursive:!0}),a().writeFileSync(r,o,"utf-8"),t}async deleteBlogPost(t){let e=this.abs(g.Bf.blogPost(t));try{a().unlinkSync(e)}catch(t){if(t?.code!=="ENOENT")throw t}}async updateMemo(t,e){let r=await this.getMemos(),i=r.findIndex(e=>e.id===t);if(-1===i)throw Error("Memo not found");let s={...r[i],content:e},n=r.map((t,e)=>e===i?s:t);return a().writeFileSync(this.abs(g.Bf.memos()),JSON.stringify(n,null,2),"utf-8"),s}async deleteMemo(t){let e=(await this.getMemos()).filter(e=>e.id!==t);a().writeFileSync(this.abs(g.Bf.memos()),JSON.stringify(e,null,2),"utf-8")}async getDrafts(){return(await this.getBlogPosts(!0)).filter(t=>"draft"===t.status)}async getAllBlogPosts(){return this.getBlogPosts(!0)}async checkRepositoryHealth(){return a().existsSync(this.dataDir)}getFirstImageURLFrom(t){let e=/(https?:\/\/[^\s]+?\.(?:png|jpg|jpeg|gif|webp))/i.exec(t);if(e){let t=e[1];return t.startsWith("https://github")?`${t}?raw=true`:t}return null}}class p{constructor(t){this.dir=t,this.client=new f}get label(){return`local: ${this.dir}`}canWrite(){return!0}getBlogPosts(t){return this.client.getBlogPosts(t?.includeDrafts??!1)}async getBlogPost(t){return await this.client.getBlogPost(`${t}.md`)??void 0}getMemos(){return this.client.getMemos()}getLinks(){return this.client.getLinks()}getLikes(){return this.client.getLikes()}getSiteConfig(){return this.client.getSiteConfig()}createBlogPost(t){return this.client.createBlogPost(t)}updateBlogPost(t,e){return this.client.updateBlogPost(t,e)}deleteBlogPost(t){return this.client.deleteBlogPost(t)}createMemo(t){return this.client.createMemo(t)}updateMemo(t,e){return this.client.updateMemo(t,e)}deleteMemo(t){return this.client.deleteMemo(t)}updateLikes(t){return this.client.updateLikes(t)}uploadAsset(t){return(0,s.X)(t,{date:new Date().toISOString().split("T")[0],id:Date.now().toString()})}highlights(){return new n.K4(this.dir)}}var m=r(45854),w=r(82575),y=r(94545);let b=t=>{let e=/(https?:\/\/[^\s]+?\.(?:png|jpg|jpeg|gif|webp))/i.exec(t);if(e){let t=e[1];return t.startsWith("https://github")?`${t}?raw=true`:t}return null};class k{constructor(t,e="cici"){this.accessToken=t,this.repo=e}async getSafeOwner(t){if(t&&"true"!==t)return t;if(this.accessToken)try{let t=new y.v({auth:this.accessToken}),{data:e}=await t.users.getAuthenticated();if(e.login&&"true"!==e.login)return e.login}catch(t){console.warn("Failed to get authenticated user:",t)}return process.env.GITHUB_USERNAME||"metrue"}async getBlogPosts(t,e=!1){let r=this.accessToken?new y.v({auth:this.accessToken}):new y.v,i=await this.getSafeOwner(t);try{let t=await r.repos.getContent({owner:i,repo:this.repo,path:g.CT.blogDir()});if(!Array.isArray(t.data))return console.warn("Unexpected response from GitHub API: data is not an array"),[];let s=(await Promise.all(t.data.filter(t=>"file"===t.type&&".gitkeep"!==t.name&&t.name.endsWith(".md")).map(async t=>this.getBlogPost(t.name,i)))).filter(t=>void 0!==t);if(e&&this.accessToken)return s;return s.filter(t=>"published"===t.status)}catch(t){if(console.error("Error fetching blog posts:",t),t instanceof Error&&"status"in t&&404===t.status)return console.log("Blog directory does not exist, returning empty array"),[];throw t}}async getBlogPost(t,e){let r=this.accessToken?new y.v({auth:this.accessToken}):new y.v,i=await this.getSafeOwner(e),s=await r.repos.getContent({owner:i,repo:this.repo,path:g.CT.blogFile(t)});if("content"in s.data){let e=Buffer.from(s.data.content,"base64").toString("utf-8"),r=u(e);return{id:t.replace(".md",""),title:r.title?decodeURIComponent(r.title):decodeURIComponent(t.replace(".md","")),content:e,imageUrl:b(e),date:r.date?new Date(r.date).toISOString():new Date().toISOString(),discussions:r.discussions.length>0?r.discussions:void 0,latitude:r.latitude,longitude:r.longitude,city:r.city,street:r.street,status:r.status||"published",publishedAt:r.publishedAt||r.date,lastModified:r.lastModified||r.date||new Date().toISOString()}}}async getMemos(t){let e=this.accessToken?new y.v({auth:this.accessToken}):new y.v,r=await this.getSafeOwner(t);try{let t=await e.repos.getContent({owner:r,repo:this.repo,path:g.CT.memos()});if(Array.isArray(t.data)||!("content"in t.data))return[];let i=Buffer.from(t.data.content,"base64").toString("utf-8");return JSON.parse(i)}catch(t){return console.error("Error fetching public memos:",t),[]}}async getLinks(t){let e=this.accessToken?new y.v({auth:this.accessToken}):new y.v,r=await this.getSafeOwner(t);try{let t=await e.repos.getContent({owner:r,repo:this.repo,path:g.CT.siteConfig()});if(Array.isArray(t.data)||!("content"in t.data))return{};let i=Buffer.from(t.data.content,"base64").toString("utf-8");return JSON.parse(i).links||{}}catch(t){return console.warn("Error fetching links:",t),{}}}async getLikes(t){let e=this.accessToken?new y.v({auth:this.accessToken}):new y.v,r=await this.getSafeOwner(t);try{let t=await e.repos.getContent({owner:r,repo:this.repo,path:g.CT.likes()});if(Array.isArray(t.data)||!("content"in t.data))return{};let i=Buffer.from(t.data.content,"base64").toString("utf-8");return JSON.parse(i)}catch(t){if(console.error("Error fetching likes:",t),t instanceof Error&&"status"in t&&404===t.status)return{};throw t}}async updateLikes(t,e){let r=new y.v({auth:this.accessToken}),i=await this.getSafeOwner(e);try{let e;try{let t=await r.repos.getContent({owner:i,repo:this.repo,path:g.CT.likes()});!Array.isArray(t.data)&&"sha"in t.data&&(e=t.data.sha)}catch(t){}await r.repos.createOrUpdateFileContents({owner:i,repo:this.repo,path:g.CT.likes(),message:`Update likes data - ${new Date().toISOString()}`,content:Buffer.from(JSON.stringify(t,null,2)).toString("base64"),...e&&{sha:e}})}catch(t){throw console.error("Error updating likes:",t),Error("Failed to update likes data")}}async getDrafts(t){return(await this.getBlogPosts(t,!0)).filter(t=>"draft"===t.status)}async getAllBlogPosts(t){return this.getBlogPosts(t,!0)}}let S=(t,e)=>new k(t,e),$=t=>{let e=/(https?:\/\/[^\s]+?\.(?:png|jpg|jpeg|gif|webp))/i.exec(t);if(e){let t=e[1];return t.startsWith("https://github")?`${t}?raw=true`:t}return null};class C{constructor(t,e="cici"){this.owner=t,this.baseUrl=`https://raw.githubusercontent.com/${t}/${e}/main`}async getBlogPosts(t=!1){try{try{let e=await fetch(`${this.baseUrl}/${g.CT.blogManifest()}`);if(e.ok){let r=await e.json(),i=r.files||[...r.published||[],...r.drafts||[]],s=(await Promise.all(i.map(t=>this.getBlogPost(t)))).filter(t=>null!==t);if(t)return s;return s.filter(t=>"published"===t.status)}}catch{}return console.warn("Blog manifest not found, returning empty array"),[]}catch(t){throw console.error("Error fetching blog posts via raw URLs:",t),t}}async getBlogPost(t){try{let e=await fetch(`${this.baseUrl}/${g.CT.blogFile(t)}`);if(!e.ok){if(404===e.status)return null;throw Error(`HTTP ${e.status}: ${e.statusText}`)}let r=await e.text(),i=u(r);return{id:t.replace(".md",""),title:i.title?decodeURIComponent(i.title.trim()):decodeURIComponent(t.replace(".md","")),content:r,imageUrl:$(r),date:i.date?new Date(i.date.trim()).toISOString():new Date().toISOString(),discussions:i.discussions.length>0?i.discussions:void 0,latitude:i.latitude,longitude:i.longitude,city:i.city,street:i.street,status:i.status||"published",publishedAt:i.publishedAt||i.date,lastModified:i.lastModified||i.date||new Date().toISOString()}}catch(e){return console.error(`Error fetching blog post ${t}:`,e),null}}async getMemos(){try{let t=await fetch(`${this.baseUrl}/${g.CT.memos()}`);if(!t.ok){if(404===t.status)return console.log("memos.json not found, returning empty array"),[];throw Error(`HTTP ${t.status}: ${t.statusText}`)}let e=await t.json();return Array.isArray(e)?e:[]}catch(t){return console.error("Error fetching memos via raw URLs:",t),[]}}async getLinks(){try{let t=await fetch(`${this.baseUrl}/${g.CT.siteConfig()}`);if(!t.ok){if(404===t.status)return{};throw Error(`HTTP ${t.status}: ${t.statusText}`)}return(await t.json()).links||{}}catch(t){return console.warn("Error fetching links via raw URLs:",t),{}}}async getLikes(){try{let t=await fetch(`${this.baseUrl}/${g.CT.likes()}`);if(!t.ok){if(404===t.status)return console.log("likes.json not found, returning empty object"),{};throw Error(`HTTP ${t.status}: ${t.statusText}`)}let e=await t.json();return"object"==typeof e&&null!==e?e:{}}catch(t){return console.error("Error fetching likes via raw URLs:",t),{}}}async getDrafts(){return(await this.getBlogPosts(!0)).filter(t=>"draft"===t.status)}async getAllBlogPosts(){return this.getBlogPosts(!0)}async checkRepositoryHealth(){try{return(await fetch(`${this.baseUrl}/README.md`)).ok}catch{return!1}}}class B extends Error{constructor(t="This cici instance is read-only. Provide a token to enable editing."){super(t),this.name="ReadOnlyError"}}class E{constructor(t){this.owner=t.owner,this.repo=t.repo,this.token=t.token,this.reader=new C(t.owner,t.repo),this.apiReader=t.token?S(t.token,t.repo):void 0,this.target={owner:t.owner,repo:t.repo}}async fresh(t,e){if(this.apiReader)try{return await t(this.apiReader)}catch(t){console.warn("GitHub API read failed, falling back to raw URL:",t)}return e()}get label(){return`github: ${this.owner}/${this.repo}${this.token?"":" (read-only)"}`}canWrite(){return!!this.token}requireToken(){if(!this.token)throw new B;return this.token}writeOctokit(){return(0,m.Pe)(this.requireToken())}getBlogPosts(t){let e=t?.includeDrafts??!1;return this.fresh(t=>t.getBlogPosts(this.owner,e),()=>this.reader.getBlogPosts(e))}async getBlogPost(t){return await this.fresh(e=>e.getBlogPost(`${t}.md`,this.owner),()=>this.reader.getBlogPost(`${t}.md`))??void 0}getMemos(){return this.fresh(t=>t.getMemos(this.owner),()=>this.reader.getMemos())}getLinks(){return this.fresh(t=>t.getLinks(this.owner),()=>this.reader.getLinks())}getLikes(){return this.fresh(t=>t.getLikes(this.owner),()=>this.reader.getLikes())}async getSiteConfig(){if(this.token)try{let t=(0,m.Pe)(this.token),e=await t.repos.getContent({owner:this.owner,repo:this.repo,path:g.CT.siteConfig()});if(!Array.isArray(e.data)&&"content"in e.data){let t=Buffer.from(e.data.content,"base64").toString("utf-8");return JSON.parse(t)}}catch(t){console.warn("GitHub API site-config read failed, falling back to raw URL:",t)}try{let t=`https://raw.githubusercontent.com/${this.owner}/${this.repo}/main/${g.CT.siteConfig()}`,e=await fetch(t);if(!e.ok)return null;return await e.json()}catch{return null}}async createBlogPost(t){let e=this.requireToken();return await (0,w.I7)(t.title,t.content,e,t.discussions,t.location,t.status,this.target),(0,h.gk)(t.title)}async updateBlogPost(t,e){let r=this.requireToken();return await (0,w.Kx)(t,e.title,e.content,r,e.discussions,e.location,e.status,this.target),t}async deleteBlogPost(t){await (0,w.XD)(t,this.requireToken(),this.target)}async uploadAsset(t){return(0,w.Ix)(t,this.requireToken(),this.target)}async createMemo(t){let e=g.CT.memos(),{data:r,sha:i}=await this.getJsonFile(e),s=Array.isArray(r)?r:[];return await this.putFile(e,JSON.stringify([t,...s],null,2),`Add memo ${t.id}`,i),t}async updateMemo(t,e){let r=g.CT.memos(),{data:i,sha:s}=await this.getJsonFile(r),n=Array.isArray(i)?i:[],o=n.findIndex(e=>e.id===t);if(-1===o)throw Error("Memo not found");let a={...n[o],content:e},l=n.map((t,e)=>e===o?a:t);return await this.putFile(r,JSON.stringify(l,null,2),`Update memo ${t}`,s),a}async deleteMemo(t){let e=g.CT.memos(),{data:r,sha:i}=await this.getJsonFile(e),s=Array.isArray(r)?r:[];await this.putFile(e,JSON.stringify(s.filter(e=>e.id!==t),null,2),`Delete memo ${t}`,i)}async updateLikes(t){let e=g.CT.likes(),{sha:r}=await this.getJsonFile(e);await this.putFile(e,JSON.stringify(t,null,2),"Update likes",r)}highlights(){return new n.Bi((0,m.Pe)(this.token),this.owner,this.repo)}async getJsonFile(t){let e=this.writeOctokit();try{let r=await e.repos.getContent({owner:this.owner,repo:this.repo,path:t});if(Array.isArray(r.data)||!("content"in r.data))return{data:null};let i=Buffer.from(r.data.content,"base64").toString("utf-8");return{data:JSON.parse(i),sha:r.data.sha}}catch(t){if(t?.status===404)return{data:null};throw t}}putFile(t,e,r,i){return(0,m.gO)(this.writeOctokit(),this.owner,this.repo,t,r,e,i)}}function T(t){var e;return"local"===(e=(0,i.D)(t)).kind?new p(e.dir):new E({owner:e.owner,repo:e.repo,token:e.token})}}};