zenn-cli 0.5.5-alpha.3 → 0.5.5-alpha.5

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.
@@ -208,8 +208,8 @@ AI scan:
208
208
  できるため、URLとslugは秘密情報として扱ってください。
209
209
 
210
210
  Public API:
211
- すべての操作はIPアドレスごとに毎分60リクエストまでです。listは自分の
212
- アーカイブ済みScrapも返します。getでは自分のアーカイブ済みScrapに加えて、
211
+ APIの利用にはレート制限があります。listは自分のアーカイブ済みScrapも返します。
212
+ getでは自分のアーカイブ済みScrapに加えて、
213
213
  閲覧可能な他ユーザーのScrapと、slugを知っている限定公開Scrapも取得できますが、
214
214
  非表示・スパム判定コメントは返しません。
215
215
  deleteは自分のアーカイブ済みScrapと配下の全コメントを削除します。
@@ -250,10 +250,9 @@ Environment:
250
250
 
251
251
  Notice:
252
252
  JPEG、PNG、GIF、WebP形式の3MB以下の画像に対応します。アップロード後は
253
- 公開URLで配信され、URLを知る人が閲覧できます。通常ユーザーは直近24時間に
254
- 50ファイル、合計50MiBまでです。画像は自動的には削除されません。
255
- 本で使用中の画像は削除できません。すべての操作は
256
- IPアドレスごとに毎分60リクエストまでです。機密情報や個人情報を含む画像は
253
+ 公開URLで配信され、URLを知る人が閲覧できます。APIの利用にはレート制限が
254
+ あります。画像は自動的には削除されません。本で使用中の画像は削除できません。
255
+ 機密情報や個人情報を含む画像は
257
256
  アップロードしないでください。
258
257
 
259
258
  Example:
@@ -279,4 +278,4 @@ ${i().cyan("npm install zenn-cli@latest")} で更新してください`,{padding
279
278
  事業情報などが対象です。
280
279
  `.trim();function p(e){let t=(0,l.A)(e)?.trim();if(!t)throw new s.T0(`${e} を設定してください`);return t}let N={low:1,medium:2,high:3,critical:4};function d(e,t){return e.replace(/\p{Cc}/gu," ").trim().slice(0,t)}function f(e){return`[${e.level}] ${d(e.finding,160)}: ${d(e.detail,500)}`}async function m(e,t,n){let r,{model:c,providerOptions:l}=function(e){var t;if("openai"===e.provider){let t=(0,a.createOpenAI)({apiKey:p("OPENAI_API_KEY"),baseURL:"https://api.openai.com/v1"}),n={..."none"===e.effort?{}:{reasoningEffort:e.effort},store:!1,strictJsonSchema:!0};return{model:t(e.model),providerOptions:{openai:n}}}return{model:(0,i.createFireworks)({apiKey:p("FIREWORKS_API_KEY"),baseURL:"https://api.fireworks.ai/inference/v1"})(e.model),providerOptions:{fireworks:(t=e.effort,"none"===t?{}:{thinking:{type:"enabled",budgetTokens:({low:1024,medium:2048,high:4096})[t]}})}}}(t);try{let a=await (0,o.generateText)({model:c,system:b,prompt:JSON.stringify({detectionPolicy:[v,t.customPrompt].filter(Boolean).join("\n\n"),userNotes:n||null,scrapContent:e}),output:o.Output.object({schema:S}),providerOptions:l,maxOutputTokens:8192,maxRetries:0,abortSignal:AbortSignal.timeout(3e4),experimental_telemetry:{isEnabled:!1,recordInputs:!1,recordOutputs:!1},telemetry:{isEnabled:!1,recordInputs:!1,recordOutputs:!1}});r=y.parse(a.output)}catch{throw new w("AIスキャンに失敗しました。投稿せずに終了します")}let s=r.findings.filter(e=>N[e.level]>=N[t.failureThreshold]);if(s.length>0){let e=s.sort((e,t)=>N[t.level]-N[e.level]).map(f).join("\n");throw new _(`AIスキャンで${t.failureThreshold}以上の検知事項が見つかりました。投稿せずに終了します。
281
280
  ${e}
282
- 機密情報をマスクするなど送信内容を変更してから、再度送信してください。判定に補足が必要な場合は --notes-to-ai <備考> を指定できます`)}return r.findings.sort((e,t)=>N[t.level]-N[e.level])}n.d(t,{Sm:()=>m,Y6:()=>f,nV:()=>w}),r()}catch(e){r(e)}})},4987(e,t,n){n.d(t,{Q5:()=>a,Oj:()=>i,Yb:()=>s,_n:()=>l});let r=require("fs"),o=/^[a-z0-9_-]{12,50}$/;class a extends Error{}function i(e){if(!e||!o.test(e))throw new a("返信先コメントのslugが不正です");return e}async function c(e){let t=[],n=0;for await(let r of e){let e=Buffer.isBuffer(r)?r:Buffer.from(r);if((n+=e.byteLength)>1048576)throw new a("本文は1MB以下にしてください");t.push(e)}let r=Buffer.concat(t).toString("utf8");if(!r.trim())throw new a("本文を入力してください");return r}async function l(e){if(!e)throw new a("--file を指定してください");try{return await c("-"===e?process.stdin:(0,r.createReadStream)(e))}catch(e){if(e instanceof a)throw e;throw new a("本文ファイルを読み込めませんでした")}}function s(e,t){let n;if(o.test(e))return e;try{n=new URL(e)}catch{throw new a("ScrapのslugまたはURLが不正です")}let r=new Set(["https://zenn.dev"]);t&&r.add(t);let i=n.pathname.match(/^\/[^/]+\/scraps\/([a-z0-9_-]{12,50})$/);if("https:"!==n.protocol&&"http:"!==n.protocol||!r.has(n.origin)||n.username||n.password||!i)throw new a("ZennのScrap URLまたはslugを指定してください");return i[1]}},2932(e,t,n){var r=n(1569),o=n(1099);class a extends Error{}let i=r.z.enum(["true","false"]),c=r.z.enum(["openai","fireworks"]),l=r.z.string().trim().min(1),s=r.z.enum(["none","low","medium","high"]),u=r.z.enum(["low","medium","high","critical"]),p=r.z.string().trim().min(1);function d(e,t){let n=(0,o.A)(e);if(void 0===n)return t;let r=i.safeParse(n);if(!r.success)throw new a(`${e} に true または false を設定してください`);return"true"===r.data}function f(e,t,n){let r=e.safeParse(t);if(!r.success)throw new a(n);return r.data}function m(e){let t={secretScanEnabled:!e.dangerouslySkipSecretScan,aiScanEnabled:d("ZENN_CLI_AI_SCAN",!1)&&!e.dangerouslySkipAiScan,secretScanSkipped:e.dangerouslySkipSecretScan,aiScanSkipped:e.dangerouslySkipAiScan,forceSafe:d("ZENN_CLI_FORCE_SAFE",!1)};if(t.forceSafe&&(!t.secretScanEnabled||!t.aiScanEnabled))throw new a("ZENN_CLI_FORCE_SAFE=true の場合はSecret scanとZENN_CLI_AI_SCAN=true が必要で、scanをスキップできません");return t}function h(){return d("ZENN_CLI_FORCE_UNLISTED",!1)}function g(){let e=f(c,(0,o.A)("ZENN_CLI_AI_PROVIDER"),"ZENN_CLI_AI_PROVIDER に openai または fireworks を設定してください"),t=(0,o.A)("ZENN_CLI_AI_MODEL"),n=f(s,(0,o.A)("ZENN_CLI_AI_EFFORT")||"medium","ZENN_CLI_AI_EFFORT に none、low、medium、high のいずれかを設定してください"),r=f(u,(0,o.A)("ZENN_CLI_AI_SCAN_FAILURE_THRESHOLD")||"high","ZENN_CLI_AI_SCAN_FAILURE_THRESHOLD に low、medium、high、critical のいずれかを設定してください"),i=(0,o.A)("ZENN_CLI_AI_SCAN_PROMPT"),d=void 0===t?"openai"===e?"gpt-5.6-luna":void 0:f(l,t,"ZENN_CLI_AI_MODEL を設定してください");if(!d)throw new a("ZENN_CLI_AI_MODEL を設定してください");return{provider:e,model:d,effort:n,failureThreshold:r,...void 0===i?{}:{customPrompt:f(p,i,"ZENN_CLI_AI_SCAN_PROMPT を空にできません")}}}n.d(t,{T0:()=>a,Uh:()=>g,iu:()=>h,s1:()=>m})},6951(e,t,n){n.a(e,async function(e,r){try{var o=n(7585),a=e([o]);o=(a.then?(await a)():a)[0];class c extends Error{}let l={rules:[{id:"@secretlint/secretlint-rule-preset-recommend"}]};async function i(e){let t=await (0,o.createEngine)({configFileJSON:l,formatter:"compact",color:!1,maskSecrets:!0}),n=[e.title,e.body,e.notes,e.aiPrompt].filter(e=>!!e).join("\n\n");if(!(await t.executeOnContent({content:n,filePath:"scrap.md"})).ok)throw new c("タイトル、本文、notes-to-ai、AI scan promptのいずれかにシークレットの可能性がある値が含まれています。削除してから再実行してください")}n.d(t,{G:()=>c,K:()=>i}),r()}catch(e){r(e)}})},6414(e,t,n){n.a(e,async function(e,r){try{var o=n(8611),a=n(5086),i=n(9748),c=n(1367),l=n(7213),s=e([l,c,i]);async function u(e){let{app:t,port:n,hostname:r,shouldOpen:a}=e,i=(0,o.createServer)(t);return new Promise((t,o)=>{i.listen(n,r).once("listening",function(){if(process.env.TS_NODE_DEV)console.log("\uD83D\uDE80 Server is ready.");else{let{name:e,host:t}=(0,l.cK)(r);console.log(`👀 Preview: http://${e}:${n}`),t&&console.log(`🌏 NetWork: http://${t}:${n}`)}a&&(0,c.default)(`http://localhost:${n}`),t(i)}).once("error",async function(r){if(r.message.includes("EADDRINUSE")){console.log(`💡 ポート${n}は既に使用されています。別のポートで起動中…`);let r=await u({...e,port:n+1});t(r)}else o(r)})})}function p(e,t){let n=new a.WebSocketServer({server:e}),r=i.default.watch(t);r.on("change",()=>{n.clients.forEach(e=>e.send("Should refresh"))}),process.on("SIGINT",()=>{n.close(),r.close(),process.exit()})}[l,c,i]=s.then?(await s)():s,n.d(t,{U:()=>u,j:()=>p}),r()}catch(e){r(e)}})},1501(e,t,n){var r=n(1099);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a extends Error{constructor(e,t,n){super(n??function(e){switch(e){case"configuration":return"ZENN_API_KEY を環境変数に設定してください";case"authentication":return"APIキーの発行状態・期限・アカウント状態を確認してください";case"authorization":return"APIキーのスコープ、または対象リソースの操作条件を確認してください";case"not-found":return"この環境またはアカウントではPublic APIを利用できないか、対象リソースを利用できません";case"validation":return"リクエスト値または画像ファイルを確認してください";case"conflict":return"本で使用中の画像は削除できません";case"rate-limit":return"レート制限に達しました。しばらく待ってから再実行してください";case"compatibility":return"Public APIの応答形式に互換性がありません";case"unknown-result":return"リクエスト結果を確認できませんでした。重複投稿を避けるため自動再試行していません";case"network":return"通信に失敗しました。リクエスト結果が不明なため自動再試行していません"}}(e)),o(this,"kind",void 0),o(this,"code",void 0),this.kind=e,this.code=t}}function i(){let e=(0,r.A)("ZENN_API_KEY")?.trim();if(!e)throw new a("configuration");return e}function c(){i()}function l(){let e,t=(0,r.A)("ZENN_API_BASE_URL")?.trim();if(!t)return new URL("https://zenn.dev");try{e=new URL(t)}catch{throw new a("configuration",void 0,"ZENN_API_BASE_URL の値が不正です")}let n="http:"===e.protocol&&"localhost"===e.hostname;if("https:"!==e.protocol&&!n||e.username||e.password||"/"!==e.pathname||e.search||e.hash)throw new a("configuration",void 0,"ZENN_API_BASE_URL の値が不正です");return e}async function s(e){try{return await e.json()}catch{return}}async function u(e,t,n){var r;let o,c,u,p=(u="localhost"===(c=l()).hostname?"/public-api/v1":"/api/public-api/v1",new URL(`${u}${t}`,c));try{o=await fetch(p,{method:e,redirect:"error",signal:AbortSignal.timeout(15e3),headers:{Authorization:`Bearer ${i()}`,...n.body&&!(n.body instanceof FormData)?{"Content-Type":"application/json"}:{}},...n.body?{body:n.body instanceof FormData?n.body:JSON.stringify(n.body)}:{}})}catch{throw new a(n.resultUnknownOnFailure?"unknown-result":"network")}let d=await s(o);if(!o.ok){let e=d?.error?.code,t="string"==typeof e&&/^[a-z0-9_]+$/.test(e)?e:void 0;throw new a(400===(r=o.status)?"validation":401===r?"authentication":403===r?"authorization":404===r?"not-found":422===r?"validation":409===r?"conflict":429===r?"rate-limit":r>=500?"unknown-result":"network",t)}if(o.status!==n.expectedStatus)throw new a("compatibility");if(!1!==n.expectsJson){if(!g(d))throw new a("compatibility");return d}}async function p(e){return u("GET",e,{expectedStatus:200,resultUnknownOnFailure:!1})}async function d(e,t){return u("POST",e,{body:t,expectedStatus:201,resultUnknownOnFailure:!0})}async function f(e,t){return u("PATCH",e,{body:t,expectedStatus:200,resultUnknownOnFailure:!0})}async function m(e){await u("DELETE",e,{expectedStatus:204,resultUnknownOnFailure:!0,expectsJson:!1})}async function h(e,t){return u("POST",e,{body:t,expectedStatus:201,resultUnknownOnFailure:!0})}function g(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function y(e,t){if(!Array.isArray(e[t]))throw new a("compatibility")}function w(e,t){if(!g(e[t]))throw new a("compatibility")}function _(e){let t=e.next_page;if(null!==t&&("number"!=typeof t||!Number.isInteger(t)))throw new a("compatibility")}function S(e,t){let n=new URLSearchParams;void 0!==e&&n.set("page",String(e)),void 0!==t&&n.set("count",String(t));let r=n.toString();return r?`?${r}`:""}function b(e){if("string"!=typeof e||!e.startsWith("/"))throw new a("compatibility");let t=l(),n=new URL(e,t);if(n.origin!==t.origin)throw new a("compatibility");return n.toString()}async function v(e){let t={title:e.title,body_markdown:e.bodyMarkdown,...void 0===e.closed?{}:{closed:e.closed},...void 0===e.archived?{}:{archived:e.archived},...void 0===e.canOthersPost?{}:{can_others_post:e.canOthersPost},...void 0===e.unlisted?{}:{unlisted:e.unlisted},...void 0===e.topicNames?{}:{topic_names:e.topicNames}},n=await d("/scraps",t);if("string"!=typeof n.scrap?.slug)throw new a("compatibility");return{url:b(n.scrap.path)}}async function N(e){let t={body_markdown:e.bodyMarkdown};e.parentCommentSlug&&(t.parent_comment_slug=e.parentCommentSlug);let n=await d(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments`,t);return{url:b(n.comment?.path)}}async function I(e,t){let n=await p(`/scraps${S(e,t)}`);return y(n,"scraps"),_(n),n}async function E(e,t,n){let r=await p(`/scraps/${encodeURIComponent(e)}${S(t,n)}`);return w(r,"scrap"),y(r,"comments"),_(r),r}async function z(e,t){let n={...void 0===t.title?{}:{title:t.title},...void 0===t.closed?{}:{closed:t.closed},...void 0===t.archived?{}:{archived:t.archived},...void 0===t.canOthersPost?{}:{can_others_post:t.canOthersPost},...void 0===t.unlisted?{}:{unlisted:t.unlisted},...void 0===t.topicNames?{}:{topic_names:t.topicNames}};if(!Object.keys(n).length)throw new a("configuration",void 0,"更新する項目を指定してください");let r=await f(`/scraps/${encodeURIComponent(e)}`,n);return w(r,"scrap"),r}async function A(e){if(e.length<1||e.length>100||e.some(e=>!e.trim()))throw new a("configuration",void 0,"コメントslugを1件以上100件以下指定してください");let t=new URLSearchParams;e.forEach(e=>t.append("slugs[]",e));let n=await p(`/comments?${t.toString()}`);return y(n,"comments"),y(n,"not_found_slugs"),n}async function k(e){let t=await f(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments/${encodeURIComponent(e.commentSlug)}`,{body_markdown:e.bodyMarkdown});return w(t,"comment"),t}async function P(e){await m(`/scraps/${encodeURIComponent(e)}`)}async function O(e){await m(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments/${encodeURIComponent(e.commentSlug)}`)}async function x(e){let t=new FormData,n=new Uint8Array(e.bytes.byteLength);return n.set(e.bytes),t.append("file",new Blob([n.buffer],{type:e.contentType}),e.filename),{url:function(e){let t;if("string"!=typeof e)throw new a("compatibility");try{t=new URL(e)}catch{throw new a("compatibility")}let n="http:"===t.protocol&&"localhost"===t.hostname;if("https:"!==t.protocol&&!n||t.username||t.password)throw new a("compatibility");return t.toString()}((await h("/images",t)).image_url)}}async function R(e,t){let n=await p(`/images${S(e,t)}`);return y(n,"images"),_(n),n}async function L(e){await m(`/images/${e}`)}n.d(t,{Ed:()=>O,RY:()=>R,V6:()=>x,WL:()=>v,ZK:()=>N,bw:()=>P,eb:()=>A,ic:()=>E,lq:()=>z,mZ:()=>k,qO:()=>c,vS:()=>L,vu:()=>a,yJ:()=>l,z9:()=>I})},7116(e,t,n){n.a(e,async function(e,t){try{var r=n(8456),o=n.n(r),a=n(4972),i=e([a]);a=(i.then?(await i)():i)[0];let c=o()({},{permissive:!0}),l=c._[0]||"preview",s=c._.slice(1);(0,a.m)(l,s,{canNotifyUpdate:!0}),t()}catch(e){t(e)}})},7250(e){e.exports=require("../../package.json")},8456(e){e.exports=require("arg")},4217(e){e.exports=require("cheerio")},3672(e){e.exports=require("colors")},1144(e){e.exports=require("colors/safe")},7252(e){e.exports=require("express")},4652(e){e.exports=require("fs-extra")},3531(e){e.exports=require("gray-matter")},6045(e){e.exports=require("image-size")},7089(e){e.exports=require("js-yaml")},5086(e){e.exports=require("ws")},1569(e){e.exports=require("zod")},595(e){e.exports=import("@ai-sdk/fireworks").then(function(e){return e})},7117(e){e.exports=import("@ai-sdk/openai").then(function(e){return e})},7585(e){e.exports=import("@secretlint/node").then(function(e){return e})},9470(e){e.exports=import("ai").then(function(e){return e})},6551(e){e.exports=import("boxen").then(function(e){return e})},9748(e){e.exports=import("chokidar").then(function(e){return e})},4926(e){e.exports=import("configstore").then(function(e){return e})},166(e){e.exports=import("node-fetch").then(function(e){return e})},1367(e){e.exports=import("open").then(function(e){return e})},2595(e){e.exports=import("package-manager-detector/commands").then(function(e){return e})},870(e){e.exports=import("package-manager-detector/detect").then(function(e){return e})},3498(e){e.exports=import("zenn-markdown-html").then(function(e){return e})},5612(e){e.exports=import("zenn-markdown-html/utils").then(function(e){return e})},6982(e){e.exports=require("crypto")},8611(e){e.exports=require("http")},857(e){e.exports=require("os")},6928(e){e.exports=require("path")}},l={};function s(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}};return c[e](n,n.exports,s),n.exports}s.c=l,t=(e="function"==typeof Symbol)?Symbol("rspack queues"):"__rspack_queues",n=s.aE=e?Symbol("rspack exports"):"__webpack_exports__",r=e?Symbol("rspack error"):"__rspack_error",o=e?Symbol("rspack done"):"__rspack_done",a=s.zS=e?Symbol("rspack defer"):"__rspack_defer",s.zT=e=>{if(e.some(e=>{var t=l[e];return!t||!1===t[o]}))return{then:(t,n)=>Promise.all(e.map(s)).then(t,n)}},i=e=>{e&&e.d<1&&(e.d=1,e.forEach(e=>e.r--),e.forEach(e=>e.r--?e.r++:e()))},s.a=(e,c,l)=>{l&&((u=[]).d=-1);var u,p,d,f,m=new Set,h=e.exports,g=new Promise((e,t)=>{f=t,d=e});g[n]=h,g[t]=e=>{u&&e(u),m.forEach(e),g.catch(()=>{})},e.exports=g,c(e=>{p=e.map(e=>{if(null!==e&&"object"==typeof e){if(!e[t]&&e[a]){var o=s.zT(e[a]);if(!o)return e;var c=e;e={then(e,t){o.then(()=>e(c),t)}}}if(e[t])return e;if(e.then){var l=[];l.d=0,e.then(e=>{u[n]=e,i(l)},e=>{u[r]=e,i(l)});var u={};return u[a]=!1,u[t]=e=>e(l),u}}var p={};return p[t]=()=>{},p[n]=e,p});var o,c=()=>p.map(e=>{if(e[a])return e;if(e[r])throw e[r];return e[n]}),l=new Promise(e=>{(o=()=>e(c)).r=0;var n=e=>e!==u&&!m.has(e)&&(m.add(e),e&&!e.d&&(o.r++,e.push(o)));p.map(e=>e[a]||e[t](n))});return o.r?l:c()},e=>(e?f(g[r]=e):d(h),i(u),g[o]=!0)),u&&u.d<0&&(u.d=0)},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t,n)=>{var r=(t,n)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[n]:t[r]})};r(t,"get"),r(n,"value")},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s(7116)})();
281
+ 機密情報をマスクするなど送信内容を変更してから、再度送信してください。判定に補足が必要な場合は --notes-to-ai <備考> を指定できます`)}return r.findings.sort((e,t)=>N[t.level]-N[e.level])}n.d(t,{Sm:()=>m,Y6:()=>f,nV:()=>w}),r()}catch(e){r(e)}})},4987(e,t,n){n.d(t,{Q5:()=>a,Oj:()=>i,Yb:()=>s,_n:()=>l});let r=require("fs"),o=/^[a-z0-9_-]{12,50}$/;class a extends Error{}function i(e){if(!e||!o.test(e))throw new a("返信先コメントのslugが不正です");return e}async function c(e){let t=[],n=0;for await(let r of e){let e=Buffer.isBuffer(r)?r:Buffer.from(r);if((n+=e.byteLength)>1048576)throw new a("本文は1MB以下にしてください");t.push(e)}let r=Buffer.concat(t).toString("utf8");if(!r.trim())throw new a("本文を入力してください");return r}async function l(e){if(!e)throw new a("--file を指定してください");try{return await c("-"===e?process.stdin:(0,r.createReadStream)(e))}catch(e){if(e instanceof a)throw e;throw new a("本文ファイルを読み込めませんでした")}}function s(e,t){let n;if(o.test(e))return e;try{n=new URL(e)}catch{throw new a("ScrapのslugまたはURLが不正です")}let r=new Set(["https://zenn.dev"]);t&&r.add(t);let i=n.pathname.match(/^\/[^/]+\/scraps\/([a-z0-9_-]{12,50})$/);if("https:"!==n.protocol&&"http:"!==n.protocol||!r.has(n.origin)||n.username||n.password||!i)throw new a("ZennのScrap URLまたはslugを指定してください");return i[1]}},2932(e,t,n){var r=n(1569),o=n(1099);class a extends Error{}let i=r.z.enum(["true","false"]),c=r.z.enum(["openai","fireworks"]),l=r.z.string().trim().min(1),s=r.z.enum(["none","low","medium","high"]),u=r.z.enum(["low","medium","high","critical"]),p=r.z.string().trim().min(1);function d(e,t){let n=(0,o.A)(e);if(void 0===n)return t;let r=i.safeParse(n);if(!r.success)throw new a(`${e} に true または false を設定してください`);return"true"===r.data}function f(e,t,n){let r=e.safeParse(t);if(!r.success)throw new a(n);return r.data}function m(e){let t={secretScanEnabled:!e.dangerouslySkipSecretScan,aiScanEnabled:d("ZENN_CLI_AI_SCAN",!1)&&!e.dangerouslySkipAiScan,secretScanSkipped:e.dangerouslySkipSecretScan,aiScanSkipped:e.dangerouslySkipAiScan,forceSafe:d("ZENN_CLI_FORCE_SAFE",!1)};if(t.forceSafe&&(!t.secretScanEnabled||!t.aiScanEnabled))throw new a("ZENN_CLI_FORCE_SAFE=true の場合はSecret scanとZENN_CLI_AI_SCAN=true が必要で、scanをスキップできません");return t}function h(){return d("ZENN_CLI_FORCE_UNLISTED",!1)}function g(){let e=f(c,(0,o.A)("ZENN_CLI_AI_PROVIDER"),"ZENN_CLI_AI_PROVIDER に openai または fireworks を設定してください"),t=(0,o.A)("ZENN_CLI_AI_MODEL"),n=f(s,(0,o.A)("ZENN_CLI_AI_EFFORT")||"medium","ZENN_CLI_AI_EFFORT に none、low、medium、high のいずれかを設定してください"),r=f(u,(0,o.A)("ZENN_CLI_AI_SCAN_FAILURE_THRESHOLD")||"high","ZENN_CLI_AI_SCAN_FAILURE_THRESHOLD に low、medium、high、critical のいずれかを設定してください"),i=(0,o.A)("ZENN_CLI_AI_SCAN_PROMPT"),d=void 0===t?"openai"===e?"gpt-5.6-luna":void 0:f(l,t,"ZENN_CLI_AI_MODEL を設定してください");if(!d)throw new a("ZENN_CLI_AI_MODEL を設定してください");return{provider:e,model:d,effort:n,failureThreshold:r,...void 0===i?{}:{customPrompt:f(p,i,"ZENN_CLI_AI_SCAN_PROMPT を空にできません")}}}n.d(t,{T0:()=>a,Uh:()=>g,iu:()=>h,s1:()=>m})},6951(e,t,n){n.a(e,async function(e,r){try{var o=n(7585),a=e([o]);o=(a.then?(await a)():a)[0];class c extends Error{}let l={rules:[{id:"@secretlint/secretlint-rule-preset-recommend"}]};async function i(e){let t=await (0,o.createEngine)({configFileJSON:l,formatter:"compact",color:!1,maskSecrets:!0}),n=[e.title,e.body,e.notes,e.aiPrompt].filter(e=>!!e).join("\n\n");if(!(await t.executeOnContent({content:n,filePath:"scrap.md"})).ok)throw new c("タイトル、本文、notes-to-ai、AI scan promptのいずれかにシークレットの可能性がある値が含まれています。削除してから再実行してください")}n.d(t,{G:()=>c,K:()=>i}),r()}catch(e){r(e)}})},6414(e,t,n){n.a(e,async function(e,r){try{var o=n(8611),a=n(5086),i=n(9748),c=n(1367),l=n(7213),s=e([l,c,i]);async function u(e){let{app:t,port:n,hostname:r,shouldOpen:a}=e,i=(0,o.createServer)(t);return new Promise((t,o)=>{i.listen(n,r).once("listening",function(){if(process.env.TS_NODE_DEV)console.log("\uD83D\uDE80 Server is ready.");else{let{name:e,host:t}=(0,l.cK)(r);console.log(`👀 Preview: http://${e}:${n}`),t&&console.log(`🌏 NetWork: http://${t}:${n}`)}a&&(0,c.default)(`http://localhost:${n}`),t(i)}).once("error",async function(r){if(r.message.includes("EADDRINUSE")){console.log(`💡 ポート${n}は既に使用されています。別のポートで起動中…`);let r=await u({...e,port:n+1});t(r)}else o(r)})})}function p(e,t){let n=new a.WebSocketServer({server:e}),r=i.default.watch(t);r.on("change",()=>{n.clients.forEach(e=>e.send("Should refresh"))}),process.on("SIGINT",()=>{n.close(),r.close(),process.exit()})}[l,c,i]=s.then?(await s)():s,n.d(t,{U:()=>u,j:()=>p}),r()}catch(e){r(e)}})},1501(e,t,n){var r=n(1099);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a extends Error{constructor(e,t,n){super(n??function(e){switch(e){case"configuration":return"ZENN_API_KEY を環境変数に設定してください";case"authentication":return"APIキーの発行状態・期限・アカウント状態を確認してください";case"authorization":return"APIキーのスコープ、または対象リソースの操作条件を確認してください";case"not-found":return"この環境またはアカウントではPublic APIを利用できないか、対象リソースを利用できません";case"validation":return"リクエスト値または画像ファイルを確認してください";case"conflict":return"本で使用中の画像は削除できません";case"rate-limit":return"レート制限に達しました。しばらく待ってから再実行してください";case"compatibility":return"Public APIの応答形式に互換性がありません";case"unknown-result":return"リクエスト結果を確認できませんでした。重複投稿を避けるため自動再試行していません";case"network":return"通信に失敗しました。リクエスト結果が不明なため自動再試行していません"}}(e)),o(this,"kind",void 0),o(this,"code",void 0),this.kind=e,this.code=t}}function i(){let e=(0,r.A)("ZENN_API_KEY")?.trim();if(!e)throw new a("configuration");return e}function c(){i()}function l(){let e,t=(0,r.A)("ZENN_API_BASE_URL")?.trim();if(!t)return new URL("https://zenn.dev");try{e=new URL(t)}catch{throw new a("configuration",void 0,"ZENN_API_BASE_URL の値が不正です")}let n="http:"===e.protocol&&"localhost"===e.hostname;if("https:"!==e.protocol&&!n||e.username||e.password||"/"!==e.pathname||e.search||e.hash)throw new a("configuration",void 0,"ZENN_API_BASE_URL の値が不正です");return e}async function s(e){try{return await e.json()}catch{return}}async function u(e,t,n){var r;let o,c,u,p=(u="localhost"===(c=l()).hostname?"/public-api/v0":"/api/public-api/v0",new URL(`${u}${t}`,c));try{o=await fetch(p,{method:e,redirect:"error",signal:AbortSignal.timeout(15e3),headers:{Authorization:`Bearer ${i()}`,...n.body&&!(n.body instanceof FormData)?{"Content-Type":"application/json"}:{}},...n.body?{body:n.body instanceof FormData?n.body:JSON.stringify(n.body)}:{}})}catch{throw new a(n.resultUnknownOnFailure?"unknown-result":"network")}let d=await s(o);if(!o.ok){let e=d?.error?.code,t="string"==typeof e&&/^[a-z0-9_]+$/.test(e)?e:void 0;throw new a(400===(r=o.status)?"validation":401===r?"authentication":403===r?"authorization":404===r?"not-found":422===r?"validation":409===r?"conflict":429===r?"rate-limit":r>=500?"unknown-result":"network",t)}if(o.status!==n.expectedStatus)throw new a("compatibility");if(!1!==n.expectsJson){if(!g(d))throw new a("compatibility");return d}}async function p(e){return u("GET",e,{expectedStatus:200,resultUnknownOnFailure:!1})}async function d(e,t){return u("POST",e,{body:t,expectedStatus:201,resultUnknownOnFailure:!0})}async function f(e,t){return u("PATCH",e,{body:t,expectedStatus:200,resultUnknownOnFailure:!0})}async function m(e){await u("DELETE",e,{expectedStatus:204,resultUnknownOnFailure:!0,expectsJson:!1})}async function h(e,t){return u("POST",e,{body:t,expectedStatus:201,resultUnknownOnFailure:!0})}function g(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function y(e,t){if(!Array.isArray(e[t]))throw new a("compatibility")}function w(e,t){if(!g(e[t]))throw new a("compatibility")}function _(e){let t=e.next_page;if(null!==t&&("number"!=typeof t||!Number.isInteger(t)))throw new a("compatibility")}function S(e,t){let n=new URLSearchParams;void 0!==e&&n.set("page",String(e)),void 0!==t&&n.set("count",String(t));let r=n.toString();return r?`?${r}`:""}function b(e){if("string"!=typeof e||!e.startsWith("/"))throw new a("compatibility");let t=l(),n=new URL(e,t);if(n.origin!==t.origin)throw new a("compatibility");return n.toString()}async function v(e){let t={title:e.title,body_markdown:e.bodyMarkdown,...void 0===e.closed?{}:{closed:e.closed},...void 0===e.archived?{}:{archived:e.archived},...void 0===e.canOthersPost?{}:{can_others_post:e.canOthersPost},...void 0===e.unlisted?{}:{unlisted:e.unlisted},...void 0===e.topicNames?{}:{topic_names:e.topicNames}},n=await d("/scraps",t);if("string"!=typeof n.scrap?.slug)throw new a("compatibility");return{url:b(n.scrap.path)}}async function N(e){let t={body_markdown:e.bodyMarkdown};e.parentCommentSlug&&(t.parent_comment_slug=e.parentCommentSlug);let n=await d(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments`,t);return{url:b(n.comment?.path)}}async function I(e,t){let n=await p(`/scraps${S(e,t)}`);return y(n,"scraps"),_(n),n}async function E(e,t,n){let r=await p(`/scraps/${encodeURIComponent(e)}${S(t,n)}`);return w(r,"scrap"),y(r,"comments"),_(r),r}async function z(e,t){let n={...void 0===t.title?{}:{title:t.title},...void 0===t.closed?{}:{closed:t.closed},...void 0===t.archived?{}:{archived:t.archived},...void 0===t.canOthersPost?{}:{can_others_post:t.canOthersPost},...void 0===t.unlisted?{}:{unlisted:t.unlisted},...void 0===t.topicNames?{}:{topic_names:t.topicNames}};if(!Object.keys(n).length)throw new a("configuration",void 0,"更新する項目を指定してください");let r=await f(`/scraps/${encodeURIComponent(e)}`,n);return w(r,"scrap"),r}async function A(e){if(e.length<1||e.length>100||e.some(e=>!e.trim()))throw new a("configuration",void 0,"コメントslugを1件以上100件以下指定してください");let t=new URLSearchParams;e.forEach(e=>t.append("slugs[]",e));let n=await p(`/comments?${t.toString()}`);return y(n,"comments"),y(n,"not_found_slugs"),n}async function k(e){let t=await f(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments/${encodeURIComponent(e.commentSlug)}`,{body_markdown:e.bodyMarkdown});return w(t,"comment"),t}async function P(e){await m(`/scraps/${encodeURIComponent(e)}`)}async function O(e){await m(`/scraps/${encodeURIComponent(e.scrapSlug)}/comments/${encodeURIComponent(e.commentSlug)}`)}async function x(e){let t=new FormData,n=new Uint8Array(e.bytes.byteLength);return n.set(e.bytes),t.append("file",new Blob([n.buffer],{type:e.contentType}),e.filename),{url:function(e){let t;if("string"!=typeof e)throw new a("compatibility");try{t=new URL(e)}catch{throw new a("compatibility")}let n="http:"===t.protocol&&"localhost"===t.hostname;if("https:"!==t.protocol&&!n||t.username||t.password)throw new a("compatibility");return t.toString()}((await h("/images",t)).image_url)}}async function R(e,t){let n=await p(`/images${S(e,t)}`);return y(n,"images"),_(n),n}async function L(e){await m(`/images/${e}`)}n.d(t,{Ed:()=>O,RY:()=>R,V6:()=>x,WL:()=>v,ZK:()=>N,bw:()=>P,eb:()=>A,ic:()=>E,lq:()=>z,mZ:()=>k,qO:()=>c,vS:()=>L,vu:()=>a,yJ:()=>l,z9:()=>I})},7116(e,t,n){n.a(e,async function(e,t){try{var r=n(8456),o=n.n(r),a=n(4972),i=e([a]);a=(i.then?(await i)():i)[0];let c=o()({},{permissive:!0}),l=c._[0]||"preview",s=c._.slice(1);(0,a.m)(l,s,{canNotifyUpdate:!0}),t()}catch(e){t(e)}})},7250(e){e.exports=require("../../package.json")},8456(e){e.exports=require("arg")},4217(e){e.exports=require("cheerio")},3672(e){e.exports=require("colors")},1144(e){e.exports=require("colors/safe")},7252(e){e.exports=require("express")},4652(e){e.exports=require("fs-extra")},3531(e){e.exports=require("gray-matter")},6045(e){e.exports=require("image-size")},7089(e){e.exports=require("js-yaml")},5086(e){e.exports=require("ws")},1569(e){e.exports=require("zod")},595(e){e.exports=import("@ai-sdk/fireworks").then(function(e){return e})},7117(e){e.exports=import("@ai-sdk/openai").then(function(e){return e})},7585(e){e.exports=import("@secretlint/node").then(function(e){return e})},9470(e){e.exports=import("ai").then(function(e){return e})},6551(e){e.exports=import("boxen").then(function(e){return e})},9748(e){e.exports=import("chokidar").then(function(e){return e})},4926(e){e.exports=import("configstore").then(function(e){return e})},166(e){e.exports=import("node-fetch").then(function(e){return e})},1367(e){e.exports=import("open").then(function(e){return e})},2595(e){e.exports=import("package-manager-detector/commands").then(function(e){return e})},870(e){e.exports=import("package-manager-detector/detect").then(function(e){return e})},3498(e){e.exports=import("zenn-markdown-html").then(function(e){return e})},5612(e){e.exports=import("zenn-markdown-html/utils").then(function(e){return e})},6982(e){e.exports=require("crypto")},8611(e){e.exports=require("http")},857(e){e.exports=require("os")},6928(e){e.exports=require("path")}},l={};function s(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}};return c[e](n,n.exports,s),n.exports}s.c=l,t=(e="function"==typeof Symbol)?Symbol("rspack queues"):"__rspack_queues",n=s.aE=e?Symbol("rspack exports"):"__webpack_exports__",r=e?Symbol("rspack error"):"__rspack_error",o=e?Symbol("rspack done"):"__rspack_done",a=s.zS=e?Symbol("rspack defer"):"__rspack_defer",s.zT=e=>{if(e.some(e=>{var t=l[e];return!t||!1===t[o]}))return{then:(t,n)=>Promise.all(e.map(s)).then(t,n)}},i=e=>{e&&e.d<1&&(e.d=1,e.forEach(e=>e.r--),e.forEach(e=>e.r--?e.r++:e()))},s.a=(e,c,l)=>{l&&((u=[]).d=-1);var u,p,d,f,m=new Set,h=e.exports,g=new Promise((e,t)=>{f=t,d=e});g[n]=h,g[t]=e=>{u&&e(u),m.forEach(e),g.catch(()=>{})},e.exports=g,c(e=>{p=e.map(e=>{if(null!==e&&"object"==typeof e){if(!e[t]&&e[a]){var o=s.zT(e[a]);if(!o)return e;var c=e;e={then(e,t){o.then(()=>e(c),t)}}}if(e[t])return e;if(e.then){var l=[];l.d=0,e.then(e=>{u[n]=e,i(l)},e=>{u[r]=e,i(l)});var u={};return u[a]=!1,u[t]=e=>e(l),u}}var p={};return p[t]=()=>{},p[n]=e,p});var o,c=()=>p.map(e=>{if(e[a])return e;if(e[r])throw e[r];return e[n]}),l=new Promise(e=>{(o=()=>e(c)).r=0;var n=e=>e!==u&&!m.has(e)&&(m.add(e),e&&!e.d&&(o.r++,e.push(o)));p.map(e=>e[a]||e[t](n))});return o.r?l:c()},e=>(e?f(g[r]=e):d(h),i(u),g[o]=!0)),u&&u.d<0&&(u.d=0)},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t,n)=>{var r=(t,n)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,[n]:t[r]})};r(t,"get"),r(n,"value")},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s(7116)})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zenn-cli",
3
- "version": "0.5.5-alpha.3",
3
+ "version": "0.5.5-alpha.5",
4
4
  "description": "Preview Zenn content locally.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -58,7 +58,7 @@
58
58
  "open": "^10.2.0",
59
59
  "package-manager-detector": "^1.6.0",
60
60
  "ws": "^8.18.3",
61
- "zenn-markdown-html": "0.5.5-alpha.3",
61
+ "zenn-markdown-html": "0.5.5-alpha.5",
62
62
  "zod": "^4.4.3"
63
63
  },
64
64
  "devDependencies": {
@@ -105,9 +105,9 @@
105
105
  "vite-plugin-svgr": "^5.2.0",
106
106
  "vitest": "^4.0.6",
107
107
  "wait-on": "^9.0.1",
108
- "zenn-content-css": "0.5.5-alpha.3",
109
- "zenn-embed-elements": "0.5.5-alpha.3",
110
- "zenn-model": "0.5.5-alpha.3"
108
+ "zenn-content-css": "0.5.5-alpha.5",
109
+ "zenn-embed-elements": "0.5.5-alpha.5",
110
+ "zenn-model": "0.5.5-alpha.5"
111
111
  },
112
112
  "engines": {
113
113
  "node": ">=22.12.0"
@@ -115,5 +115,5 @@
115
115
  "publishConfig": {
116
116
  "access": "public"
117
117
  },
118
- "gitHead": "438ec880ac36265fbfb8ab8dba1fca6975f66e57"
118
+ "gitHead": "0a3d5abf719f35d71c68bedd2f7e9b80223b8303"
119
119
  }