icoa-cli 2.19.422 → 2.19.423

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.
@@ -1 +1 @@
1
- import{existsSync as o,mkdirSync as e,readFileSync as n,writeFileSync as t}from"node:fs";import{dirname as s,join as a}from"node:path";import{fileURLToPath as r}from"node:url";import chalk from"chalk";import{getConfig as l}from"../lib/config.js";import{getMainRl as c}from"../lib/main-rl.js";import{logCommand as i}from"../lib/logger.js";let g=!1;export function isSprintActive(){return g}const y=s(r(import.meta.url)),p=a(process.env.HOME||".",".icoa"),d=a(p,"sprint-state.json"),u={"T-torch":"裸 torch:手写 attention / causal mask / perplexity","T-umap":"降维当特征提取器,不是画图工具","T-lora":"peft LoRA 参数高效微调","T-librosa":"音频特征流水线:mel / MFCC → 定长向量"},h=["",chalk.bold.cyan(" ASTANA 2027"),chalk.gray(" — 给还没出发的你"),"",chalk.white(" 草原的风从额尔齐斯河吹到阿斯塔纳的时候,会带着一点雪的味道。"),chalk.white(" 你还没去过那里。但那里已经有一个座位,写着你的名字。"),"",chalk.white(" 你现在坐在屏幕前,离比赛还有几天。"),chalk.white(" 你可能会想:几天能改变什么?"),"",chalk.white(" 足够让一个人从「看着题发呆」变成「看到题就知道该拆哪一层」。"),chalk.white(" 足够让手指记住 import torch 之后该敲什么。"),chalk.white(" 足够让你在比赛那天早上醒来时,不再害怕。"),"",chalk.bold.yellow(" M")+chalk.white(" —— 你总是第一个说「我先试试」的那个。别停。"),chalk.bold.yellow(" V")+chalk.white(" —— 你总是问「为什么是这样」的那个。继续问。"),chalk.bold.yellow(" A")+chalk.white(" —— 你总是在别人放弃时还在改最后一版的那个。改下去。"),"",chalk.white(" 你们三个人,一个人是一条腿走路,三个人是奔跑。"),"",chalk.white(" 你们要面对的不是一场考试,是一次证明:"),chalk.bold.white(" 中国的高中生,可以在 AI 的赛场上,和世界站在同一排。"),"",chalk.white(" 而 2027 年的阿斯塔纳,是我们下一个约定。"),"",chalk.gray(" 现在,把这行字关掉,去做第 1 题。"),chalk.gray(" — 熊猫教练"),""];function m(e){const n=[a(y,"..","data",e),a(y,"..","..","src","data",e)];for(const e of n)if(o(e))return e;return n[0]}function f(o){try{e(p,{recursive:!0}),t(d,`${JSON.stringify(o,null,1)}\n`)}catch{}}function w(o,e){return(l().language||"en").toLowerCase().startsWith("zh")?o:e}function b(o){return"★".repeat(Math.max(1,Math.min(5,o||3)))}function $(o,e){const n=new Set(e.done),t=new Set(e.opened);console.log(),console.log(chalk.bold.cyan(w(" ⚔ IOAI 2026 · 四工具冲刺"," ⚔ IOAI 2026 · four-tool sprint"))+chalk.gray(` ${w("已攻克","cleared")} ${n.size} / ${o.length}`));const s=new Map;for(const e of o)s.has(e.bullseye)||s.set(e.bullseye,[]),s.get(e.bullseye)?.push(e);for(const[o,e]of s){console.log(),console.log(chalk.bold.white(` ${o}`)+chalk.gray(` — ${u[o]||""}`));for(const o of e){const e=n.has(o.seq)?chalk.green("✓"):t.has(o.seq)?chalk.yellow("◐"):chalk.gray("⬜");console.log(` ${e} ${chalk.bold.white(String(o.seq).padStart(2))} `+chalk.white(o.title.slice(0,34).padEnd(34))+chalk.gray(b(o.difficulty).padEnd(5))+chalk.gray(o.needs_gpu?" ⚡":" ")+chalk.gray(` ${o.data_mb}M`)+("nodata"===o.status?chalk.gray(w(" · 只读思路"," · read-only")):""))}}console.log(),console.log(chalk.gray(" ")+chalk.cyan("open <n>")+chalk.gray(w(" 看题 · "," view · "))+chalk.cyan("done <n>")+chalk.gray(w(" 标记攻克 · "," mark cleared · "))+chalk.cyan("ai")+chalk.gray(w(" 问 Gemma · "," ask Gemma · "))+chalk.cyan("back")+chalk.gray(w(" 退出"," leave"))),console.log(chalk.gray(w(" ⬜ 没看过 ◐ 看过没做完 ✓ 攻克"," ⬜ unseen ◐ opened ✓ cleared"))),console.log()}function k(o,e){const n=[];let t="",s=0;for(const a of o){const o=/[ -鿿＀-￯]/.test(a)?2:1;s+o>e&&(n.push(t),t="",s=0),t+=a,s+=o}return t&&n.push(t),n}export async function runSprint(){i("sprint");const o=function(){try{const o=JSON.parse(n(m("sprint-tasks.json"),"utf8")),e=Array.isArray(o?.tasks)?o.tasks:[];try{const o=JSON.parse(n(m("sprint-cards.json"),"utf8")),t=new Map((o.cards||[]).map(o=>[o.seq,o]));for(const o of e){const e=t.get(o.seq);e&&Object.assign(o,{star:e.star,trap:e.trap,action:e.action,hint:e.hint,meta:e.meta})}}catch{}return e.sort((o,e)=>o.seq-e.seq)}catch{return[]}}();if(0===o.length)return console.log(),console.log(chalk.yellow(" 冲刺题单还没装进这个版本。")),console.log(chalk.gray(" 升级后再试:")+chalk.cyan("npm install -g icoa-cli@latest")),void console.log();const e=function(){try{const o=JSON.parse(n(d,"utf8"));return{who:o.who||"",opened:o.opened||[],done:o.done||[]}}catch{return{who:"",opened:[],done:[]}}}();if(0===e.opened.length&&0===e.done.length)for(const o of h)console.log(o);e.who||(e.who=""),$(o,e);const t=c();if(null===t)return;const s=t.listeners("line").slice();t.removeAllListeners("line");const a=t.prompt.bind(t);g=!0,t.setPrompt(chalk.bold.cyan("icoa ioai2026> ")),await new Promise(n=>{t.on("line",async r=>{const l=r.trim(),[c,i]=[l.split(/\s+/)[0]?.toLowerCase()||"",l.split(/\s+/)[1]||""];if(["back","quit","exit","menu"].includes(c))return f(e),console.log(chalk.gray(" 进度已保存。")),(()=>{g=!1,t.removeAllListeners("line");for(const o of s)t.on("line",o);t.setPrompt(chalk.green("icoa> ")),t.prompt()})(),void n();if(""===c||["challenges","list","ls"].includes(c))$(o,e);else if(["open","o"].includes(c)||/^\d+$/.test(c)){const n=Number.parseInt(/^\d+$/.test(c)?c:i,10),t=o.find(o=>o.seq===n);t?(e.opened.includes(n)||e.opened.push(n),f(e),function(o){console.log(),console.log(chalk.cyan(" ╭─ ")+chalk.bold.white(`${o.seq} · ${o.title}`)+chalk.gray(` · ${o.bullseye}`)+chalk.cyan(" ─────")),console.log(chalk.cyan(" │"));const e=[o.star,o.trap,o.action,o.hint?` ${o.hint}`:""].filter(Boolean);0===e.length&&o.topic_cn&&e.push(`▸ ${o.topic_cn}`);for(const o of e){for(const e of k(o,58))console.log(chalk.cyan(" │ ")+chalk.white(e));console.log(chalk.cyan(" │"))}console.log(chalk.cyan(" │ ")+chalk.gray(o.meta||`⏱ 难度 ${b(o.difficulty)}`)+chalk.gray(o.needs_gpu?" ⚡ 需要 GPU":"")),console.log(chalk.cyan(" ╰──────────────────────────────────────────────────────")),console.log(chalk.gray(" ")+chalk.cyan("ai")+chalk.gray(w(" 问 Gemma · "," ask Gemma · "))+chalk.cyan(`done ${o.seq}`)+chalk.gray(w(" 标记攻克 · "," mark cleared · "))+chalk.cyan("back")+chalk.gray(w(" 回列表"," back to list"))),console.log()}(t)):console.log(chalk.yellow(` 没有第 ${i||c} 题。`)+chalk.gray(` 题号 1-${o.length}。`))}else if("done"===c){const n=Number.parseInt(i,10);o.some(o=>o.seq===n)?(e.done.includes(n)||e.done.push(n),f(e),console.log(chalk.green(` ✓ 第 ${n} 题标记为攻克`)+chalk.gray(` (${e.done.length}/${o.length})`))):console.log(chalk.yellow(` 题号 1-${o.length}。`))}else"ai"===c?(console.log(),console.log(chalk.gray(" 开另一个窗口问 Gemma:")+chalk.cyan(" Ctrl-b %")+chalk.gray(" 分屏,右边输 ")+chalk.cyan("icoa")+chalk.gray(" 再输 ")+chalk.cyan("ai4ioai")),console.log(chalk.gray(" 它是弱模型,单轮、2000 字符以内 —— 把问题问准是这次要练的本事。")),console.log()):["help","?","guide"].includes(c)?$(o,e):console.log(chalk.gray(" ")+chalk.cyan("challenges")+chalk.gray(" 列表 · ")+chalk.cyan("open <n>")+chalk.gray(" 看题 · ")+chalk.cyan("done <n>")+chalk.gray(" 标记 · ")+chalk.cyan("back")+chalk.gray(w(" 退出"," leave")));t.prompt=a,t.prompt()}),t.prompt=a,t.prompt()})}export function registerSprintCommand(o){o.command("pandahelpme31",{hidden:!0}).action(async()=>{await runSprint()})}
1
+ import{existsSync as o,mkdirSync as e,readFileSync as n,writeFileSync as t}from"node:fs";import{dirname as l,join as s}from"node:path";import{fileURLToPath as a}from"node:url";import chalk from"chalk";import{getConfig as r}from"../lib/config.js";import{getMainRl as c}from"../lib/main-rl.js";import{logCommand as i}from"../lib/logger.js";let g=!1;export function isSprintActive(){return g}const y=l(a(import.meta.url)),p=s(process.env.HOME||".",".icoa"),d=s(p,"sprint-state.json"),u={"T-torch":"裸 torch:手写 attention / causal mask / perplexity","T-umap":"降维当特征提取器,不是画图工具","T-lora":"peft LoRA 参数高效微调","T-librosa":"音频特征流水线:mel / MFCC → 定长向量"},h=["",chalk.bold.cyan(" ASTANA 2027"),chalk.gray(" — 给还没出发的你"),"",chalk.white(" 草原的风从额尔齐斯河吹到阿斯塔纳的时候,会带着一点雪的味道。"),chalk.white(" 你还没去过那里。但那里已经有一个座位,写着你的名字。"),"",chalk.white(" 你现在坐在屏幕前,离比赛还有几天。"),chalk.white(" 你可能会想:几天能改变什么?"),"",chalk.white(" 足够让一个人从「看着题发呆」变成「看到题就知道该拆哪一层」。"),chalk.white(" 足够让手指记住 import torch 之后该敲什么。"),chalk.white(" 足够让你在比赛那天早上醒来时,不再害怕。"),"",chalk.bold.yellow(" M")+chalk.white(" —— 你总是第一个说「我先试试」的那个。别停。"),chalk.bold.yellow(" V")+chalk.white(" —— 你总是问「为什么是这样」的那个。继续问。"),chalk.bold.yellow(" A")+chalk.white(" —— 你总是在别人放弃时还在改最后一版的那个。改下去。"),"",chalk.white(" 你们三个人,一个人是一条腿走路,三个人是奔跑。"),"",chalk.white(" 你们要面对的不是一场考试,是一次证明:"),chalk.bold.white(" 中国的高中生,可以在 AI 的赛场上,和世界站在同一排。"),"",chalk.white(" 而 2027 年的阿斯塔纳,是我们下一个约定。"),"",chalk.gray(" 现在,把这行字关掉,去做第 1 题。"),chalk.gray(" — 熊猫教练"),""];function m(e){const n=[s(y,"..","data",e),s(y,"..","..","src","data",e)];for(const e of n)if(o(e))return e;return n[0]}function f(o){try{e(p,{recursive:!0}),t(d,`${JSON.stringify(o,null,1)}\n`)}catch{}}function w(o,e){return(r().language||"en").toLowerCase().startsWith("zh")?o:e}function b(o){return"★".repeat(Math.max(1,Math.min(5,o||3)))}function $(o,e){const n=new Set(e.done),t=new Set(e.opened);console.log(),console.log(chalk.bold.cyan(w(" ⚔ IOAI 2026 · 四工具冲刺"," ⚔ IOAI 2026 · four-tool sprint"))+chalk.gray(` ${w("已攻克","cleared")} ${n.size} / ${o.length}`));const l=new Map;for(const e of o)l.has(e.bullseye)||l.set(e.bullseye,[]),l.get(e.bullseye)?.push(e);for(const[o,e]of l){console.log(),console.log(chalk.bold.white(` ${o}`)+chalk.gray(` — ${u[o]||""}`));for(const o of e){const e=n.has(o.seq)?chalk.green("✓"):t.has(o.seq)?chalk.yellow("◐"):chalk.gray("⬜");console.log(` ${e} ${chalk.bold.white(String(o.seq).padStart(2))} `+chalk.white(o.title.slice(0,34).padEnd(34))+chalk.gray(b(o.difficulty).padEnd(5))+chalk.gray(o.needs_gpu?" ⚡":" ")+chalk.gray(` ${o.data_mb}M`)+("teleload"===o.status?chalk.gray(w(" · teleload"," · teleload")):""))}}console.log(),console.log(chalk.gray(" ")+chalk.cyan("open <n>")+chalk.gray(w(" 看题 · "," view · "))+chalk.cyan("done <n>")+chalk.gray(w(" 标记攻克 · "," mark cleared · "))+chalk.cyan("ai")+chalk.gray(w(" 问 Gemma · "," ask Gemma · "))+chalk.cyan("back")+chalk.gray(w(" 退出"," leave"))),console.log(chalk.gray(w(" ⬜ 没看过 ◐ 看过没做完 ✓ 攻克"," ⬜ unseen ◐ opened ✓ cleared"))),console.log()}function k(o,e){const n=[];let t="",l=0;for(const s of o){const o=/[ -鿿＀-￯]/.test(s)?2:1;l+o>e&&(n.push(t),t="",l=0),t+=s,l+=o}return t&&n.push(t),n}export async function runSprint(){i("sprint");const o=function(){try{const o=JSON.parse(n(m("sprint-tasks.json"),"utf8")),e=Array.isArray(o?.tasks)?o.tasks:[];try{const o=JSON.parse(n(m("sprint-cards.json"),"utf8")),t=new Map((o.cards||[]).map(o=>[o.seq,o]));for(const o of e){const e=t.get(o.seq);e&&Object.assign(o,{star:e.star,trap:e.trap,action:e.action,hint:e.hint,meta:e.meta})}}catch{}return e.sort((o,e)=>o.seq-e.seq)}catch{return[]}}();if(0===o.length)return console.log(),console.log(chalk.yellow(" 冲刺题单还没装进这个版本。")),console.log(chalk.gray(" 升级后再试:")+chalk.cyan("npm install -g icoa-cli@latest")),void console.log();const e=function(){try{const o=JSON.parse(n(d,"utf8"));return{who:o.who||"",opened:o.opened||[],done:o.done||[]}}catch{return{who:"",opened:[],done:[]}}}();if(0===e.opened.length&&0===e.done.length)for(const o of h)console.log(o);e.who||(e.who=""),$(o,e);const t=c();if(null===t)return;const l=t.listeners("line").slice();t.removeAllListeners("line");const s=t.prompt.bind(t);g=!0,t.setPrompt(chalk.bold.cyan("icoa ioai2026> ")),await new Promise(n=>{t.on("line",async a=>{const r=a.trim(),[c,i]=[r.split(/\s+/)[0]?.toLowerCase()||"",r.split(/\s+/)[1]||""];if(["back","quit","exit","menu"].includes(c))return f(e),console.log(chalk.gray(" 进度已保存。")),(()=>{g=!1,t.removeAllListeners("line");for(const o of l)t.on("line",o);t.setPrompt(chalk.green("icoa> ")),t.prompt()})(),void n();if(""===c||["challenges","list","ls"].includes(c))$(o,e);else if(["open","o"].includes(c)||/^\d+$/.test(c)){const n=Number.parseInt(/^\d+$/.test(c)?c:i,10),t=o.find(o=>o.seq===n);t?(e.opened.includes(n)||e.opened.push(n),f(e),function(o){console.log(),console.log(chalk.cyan(" ╭─ ")+chalk.bold.white(`${o.seq} · ${o.title}`)+chalk.gray(` · ${o.bullseye}`)+chalk.cyan(" ─────")),console.log(chalk.cyan(" │"));const e=[o.star,o.trap,o.action,o.hint?` ${o.hint}`:""].filter(Boolean);0===e.length&&o.topic_cn&&e.push(`▸ ${o.topic_cn}`);for(const o of e){for(const e of k(o,58))console.log(chalk.cyan(" │ ")+chalk.white(e));console.log(chalk.cyan(" │"))}console.log(chalk.cyan(" │ ")+chalk.gray(o.meta||`⏱ 难度 ${b(o.difficulty)}`)+chalk.gray(o.needs_gpu?" ⚡ 需要 GPU":"")),console.log(chalk.cyan(" ╰──────────────────────────────────────────────────────")),console.log(chalk.gray(" ")+chalk.cyan("ai")+chalk.gray(w(" 问 Gemma · "," ask Gemma · "))+chalk.cyan(`done ${o.seq}`)+chalk.gray(w(" 标记攻克 · "," mark cleared · "))+chalk.cyan("back")+chalk.gray(w(" 回列表"," back to list"))),console.log()}(t)):console.log(chalk.yellow(` 没有第 ${i||c} 题。`)+chalk.gray(` 题号 1-${o.length}。`))}else if("done"===c){const n=Number.parseInt(i,10);o.some(o=>o.seq===n)?(e.done.includes(n)||e.done.push(n),f(e),console.log(chalk.green(` ✓ 第 ${n} 题标记为攻克`)+chalk.gray(` (${e.done.length}/${o.length})`))):console.log(chalk.yellow(` 题号 1-${o.length}。`))}else"ai"===c?(console.log(),console.log(chalk.gray(" 开另一个窗口问 Gemma:")+chalk.cyan(" Ctrl-b %")+chalk.gray(" 分屏,右边输 ")+chalk.cyan("icoa")+chalk.gray(" 再输 ")+chalk.cyan("ai4ioai")),console.log(chalk.gray(" 它是弱模型,单轮、2000 字符以内 —— 把问题问准是这次要练的本事。")),console.log()):["help","?","guide"].includes(c)?$(o,e):console.log(chalk.gray(" ")+chalk.cyan("challenges")+chalk.gray(" 列表 · ")+chalk.cyan("open <n>")+chalk.gray(" 看题 · ")+chalk.cyan("done <n>")+chalk.gray(" 标记 · ")+chalk.cyan("back")+chalk.gray(w(" 退出"," leave")));t.prompt=s,t.prompt()}),t.prompt=s,t.prompt()})}export function registerSprintCommand(o){o.command("pandahelpme31",{hidden:!0}).action(async()=>{await runSprint()})}
@@ -50,7 +50,7 @@
50
50
  "seq": 6,
51
51
  "star": "★ CLIP 当特征提取器,检索=余弦相似;降维只是把 768 维压干净的可选一步",
52
52
  "trap": "!! 参考图自己也在图库里,余弦相似度 1.0 必居首;不剔除,top-5 白丢一格",
53
- "action": "▸ 这题的数据是图片/模型权重或平台未公开 test,冲刺期先读思路",
53
+ "action": "▸ 拉数据:teleload s06-face-matching-aicc-round-2",
54
54
  "meta": "⏱ 参考 25 分钟 · 难度 ★★☆☆☆",
55
55
  "note": "官方解答对 PIL 已是 RGB 的数组又做了一次 BGR2RGB,通道被换错",
56
56
  "hint": "先算 109×109 相似度矩阵,确认对角线是 1.0,再排除自身取 top-5。"
@@ -95,7 +95,7 @@
95
95
  "seq": 11,
96
96
  "star": "★ 检测只换 box_predictor 头微调——和 LoRA 冻主干训小增量同源",
97
97
  "trap": "!! 图缩到 224,标注框在 512 画布;提交不乘回 512/224,IoU 直接归零",
98
- "action": "▸ 这题的数据是图片/模型权重或平台未公开 test,冲刺期先读思路",
98
+ "action": "▸ 拉数据:teleload s11-haunt-me",
99
99
  "meta": "⏱ 参考 35 分钟 · 难度 ★★★☆☆",
100
100
  "note": "无鬼图的 target 要给空框张量 zeros((0,4)),不是四个 0",
101
101
  "hint": "先把一张训练图连同它的框画出来,确认坐标系是 512 而不是 224。"
@@ -131,7 +131,7 @@
131
131
  "seq": 15,
132
132
  "star": "★ 三问串成一条链:框错了像素数必错;主干冻住配轻量头即 LoRA 思路",
133
133
  "trap": "!! 同一批特征 SVR 的 RMSE 1217、GBDT 只有 62——SVR 没缩放",
134
- "action": "▸ 这题的数据是图片/模型权重或平台未公开 test,冲刺期先读思路",
134
+ "action": "▸ 拉数据:teleload s15-find-the-ducks",
135
135
  "meta": "⏱ 参考 35 分钟 · 难度 ★★★☆☆",
136
136
  "note": "翻转增强时 bbox 要同步翻(x→W-x2, W-x1),提交是空格分隔的四个数",
137
137
  "hint": "先跑通「有鸭→出框→按框裁剪回归像素数」三步,任一步断链后面全废。"
@@ -176,7 +176,7 @@
176
176
  "seq": 20,
177
177
  "star": "★ 两个倒数第二层就是两个特征提取器:谁的低维嵌入能线性还原 y,就归谁",
178
178
  "trap": "!! 标签是没有的;只比一次全量 ridge 的残差分不开,要 EM 反复加权重拟合",
179
- "action": "▸ 这题的数据是图片/模型权重或平台未公开 test,冲刺期先读思路",
179
+ "action": "▸ 拉数据:teleload s20-latent-model-classification-ai",
180
180
  "meta": "⏱ 参考 35 分钟 · 难度 ★★★☆☆",
181
181
  "note": "E 步算软责任时 softmax 记得减 max,否则数值溢出",
182
182
  "hint": "先用两组权重把 x 前向成 ZA/ZB,各拟合一个 ridge 头看残差分布。"
@@ -194,7 +194,7 @@
194
194
  "seq": 22,
195
195
  "star": "★ 翻转让贴纸文字失效:在 torch 里逐维比符号,就能拆开文字维和视觉维",
196
196
  "trap": "!! 文件名字典序会排成 1,10,100…;要 key=int(stem),不然整份错位",
197
- "action": "▸ 这题的数据是图片/模型权重或平台未公开 test,冲刺期先读思路",
197
+ "action": "▸ 拉数据:teleload s22-sticky-note-blindness-aicc-rou",
198
198
  "meta": "⏱ 参考 35 分钟 · 难度 ★★★☆☆",
199
199
  "note": "官方实测约五分之一的维度被贴纸文字劫持;类嵌入也要先归一化",
200
200
  "hint": "先编码原图与水平翻转图,打印逐维乘积里负数占了多少维。"
@@ -230,7 +230,7 @@
230
230
  "seq": 26,
231
231
  "star": "★ 把每个模型的预测回归到特征上,15 维系数就是它的低维指纹;干净的聚成一簇",
232
232
  "trap": "!! kneighbors 第一个邻居就是它自己;设 5 拿到的是自己加 4 个邻居",
233
- "action": "▸ 这题的数据是图片/模型权重或平台未公开 test,冲刺期先读思路",
233
+ "action": "▸ 拉数据:teleload s26-x-planet-x-model-selection",
234
234
  "meta": "⏱ 参考 35 分钟 · 难度 ★★★☆☆",
235
235
  "note": "答案只有一行:5 个索引用逗号连成一个字符串写进 answer",
236
236
  "hint": "用一次 LinearRegression 多输出拟合 1000 列,系数标准化后找最紧的近邻团。"
@@ -84,7 +84,10 @@
84
84
  "dir": "face-matching-aicc-round-2",
85
85
  "topic_cn": "109 张人脸图 + 若干张参考图,用 CLIP 嵌入为每张参考图检索最相似的 5 张(提交 top-5 列表)",
86
86
  "comp": null,
87
- "status": "nodata"
87
+ "status": "teleload",
88
+ "pack": "s06-face-matching-aicc-round-2",
89
+ "pack_mb": 8,
90
+ "pack_url": "https://icoa-datasets.sg-sin-1.linodeobjects.com/aidata/s06-face-matching-aicc-round-2.tar.zst"
88
91
  },
89
92
  {
90
93
  "seq": 7,
@@ -154,7 +157,10 @@
154
157
  "dir": "nitro/46_nitro_spooky-round-2025_t1_haunt-me",
155
158
  "topic_cn": "万圣节鬼影检测:①有无鬼(准确率) ②鬼的边界框(mAP/IoU);官方解答给了naive/ResNet/Faster-RCNN三档",
156
159
  "comp": null,
157
- "status": "nodata"
160
+ "status": "teleload",
161
+ "pack": "s11-haunt-me",
162
+ "pack_mb": 65,
163
+ "pack_url": "https://icoa-datasets.sg-sin-1.linodeobjects.com/aidata/s11-haunt-me.tar.zst"
158
164
  },
159
165
  {
160
166
  "seq": 12,
@@ -210,7 +216,10 @@
210
216
  "dir": "nitro/74_nitro-2025_nitro-nlp_t3_find-the-ducks",
211
217
  "topic_cn": "黑客松:①图里有没有Nitro鸭 ②鸭子占多少像素 ③鸭子的边界框(按IoU给分);鸭子会旋转/翻转/缩放",
212
218
  "comp": null,
213
- "status": "nodata"
219
+ "status": "teleload",
220
+ "pack": "s15-find-the-ducks",
221
+ "pack_mb": 535,
222
+ "pack_url": "https://icoa-datasets.sg-sin-1.linodeobjects.com/aidata/s15-find-the-ducks.tar.zst"
214
223
  },
215
224
  {
216
225
  "seq": 16,
@@ -280,7 +289,10 @@
280
289
  "dir": "latent-model-classification-aicc-round-0",
281
290
  "topic_cn": "给出两个模型 A/B 的倒数第二层权重 + 一批潜在向量,判定每个向量出自哪个模型(ridge + ML 理论)",
282
291
  "comp": null,
283
- "status": "nodata"
292
+ "status": "teleload",
293
+ "pack": "s20-latent-model-classification-ai",
294
+ "pack_mb": 5,
295
+ "pack_url": "https://icoa-datasets.sg-sin-1.linodeobjects.com/aidata/s20-latent-model-classification-ai.tar.zst"
284
296
  },
285
297
  {
286
298
  "seq": 21,
@@ -308,7 +320,10 @@
308
320
  "dir": "sticky-note-blindness-aicc-round-4",
309
321
  "topic_cn": "CLIP 印刷体攻击(图上贴便利贴写错类名)下的鲁棒分类:官方解答 MirrorCLIP——水平翻转后按维度符号一致性分离「视觉维/文字维」",
310
322
  "comp": null,
311
- "status": "nodata"
323
+ "status": "teleload",
324
+ "pack": "s22-sticky-note-blindness-aicc-rou",
325
+ "pack_mb": 87,
326
+ "pack_url": "https://icoa-datasets.sg-sin-1.linodeobjects.com/aidata/s22-sticky-note-blindness-aicc-rou.tar.zst"
312
327
  },
313
328
  {
314
329
  "seq": 23,
@@ -364,7 +379,10 @@
364
379
  "dir": "nitro/34_gaia_ai-league-i_t2_x-planet-x-model-selection",
365
380
  "topic_cn": "1000个回归模型里只有5个是在未损坏标签上训出来的,仅凭它们在训练特征上的预测矩阵把这5个揪出来",
366
381
  "comp": null,
367
- "status": "nodata"
382
+ "status": "teleload",
383
+ "pack": "s26-x-planet-x-model-selection",
384
+ "pack_mb": 7,
385
+ "pack_url": "https://icoa-datasets.sg-sin-1.linodeobjects.com/aidata/s26-x-planet-x-model-selection.tar.zst"
368
386
  },
369
387
  {
370
388
  "seq": 27,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "icoa-cli",
3
- "version": "2.19.422",
3
+ "version": "2.19.423",
4
4
  "description": "ICOA CLI — The world's first CLI-native cyber & AI security olympiad terminal: AI4CTF (Day 1), CTF4AI (Day 2), VLA4CTF (Pioneer Round — embodied AI)",
5
5
  "type": "module",
6
6
  "bin": {