clover-hackathon 0.1.0

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 (52) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +82 -0
  3. package/dist/cli/commands.d.ts +18 -0
  4. package/dist/cli/commands.js +474 -0
  5. package/dist/cli/commands.js.map +1 -0
  6. package/dist/cli/index.d.ts +1 -0
  7. package/dist/cli/index.js +205 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/core/agent.d.ts +27 -0
  10. package/dist/core/agent.js +108 -0
  11. package/dist/core/agent.js.map +1 -0
  12. package/dist/core/permissions.d.ts +9 -0
  13. package/dist/core/permissions.js +45 -0
  14. package/dist/core/permissions.js.map +1 -0
  15. package/dist/core/session.d.ts +7 -0
  16. package/dist/core/session.js +42 -0
  17. package/dist/core/session.js.map +1 -0
  18. package/dist/core/tools.d.ts +7 -0
  19. package/dist/core/tools.js +216 -0
  20. package/dist/core/tools.js.map +1 -0
  21. package/dist/hackathon/workflows.d.ts +13 -0
  22. package/dist/hackathon/workflows.js +132 -0
  23. package/dist/hackathon/workflows.js.map +1 -0
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.js +8 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/models/provider.d.ts +26 -0
  28. package/dist/models/provider.js +347 -0
  29. package/dist/models/provider.js.map +1 -0
  30. package/dist/types.d.ts +131 -0
  31. package/dist/types.js +3 -0
  32. package/dist/types.js.map +1 -0
  33. package/dist/utils/config.d.ts +15 -0
  34. package/dist/utils/config.js +93 -0
  35. package/dist/utils/config.js.map +1 -0
  36. package/dist/utils/cost.d.ts +16 -0
  37. package/dist/utils/cost.js +48 -0
  38. package/dist/utils/cost.js.map +1 -0
  39. package/dist/utils/input.d.ts +4 -0
  40. package/dist/utils/input.js +37 -0
  41. package/dist/utils/input.js.map +1 -0
  42. package/dist/utils/logger.d.ts +6 -0
  43. package/dist/utils/logger.js +33 -0
  44. package/dist/utils/logger.js.map +1 -0
  45. package/dist/utils/pet.d.ts +9 -0
  46. package/dist/utils/pet.js +74 -0
  47. package/dist/utils/pet.js.map +1 -0
  48. package/package.json +53 -0
  49. package/src/templates/pitch.md +30 -0
  50. package/src/templates/readme.md +36 -0
  51. package/src/templates/submission.md +40 -0
  52. package/src/templates/timeline.md +28 -0
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Clover contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
package/README.md ADDED
@@ -0,0 +1,82 @@
1
+ # 🍀 Clover(三叶草)
2
+
3
+ **专为黑客松比赛设计的命令行 AI Agent** —— 从读到赛题到提交作品的每一步都有人帮。
4
+
5
+ Clover 以 Claude Code 风格的终端交互为体验基准,具备完整通用 Agent 能力(文件读写、命令执行、联网搜索、多模态、多模型),同时内置黑客松专属工作流:赛题解析、点子评估、MVP 规划、时间管理、提交检查、Pitch 辅助、赛后复盘。
6
+
7
+ > 当前状态:M4 多模态已完成,进入发布准备(M5)
8
+
9
+ ## 功能一览
10
+
11
+ - 🧩 通用 Agent 能力:文件读写、终端命令、联网搜索、LLM 对话、多模态(图片输入:PNG / JPG / GIF / WebP)
12
+ - 🏆 黑客松工作流:赛题解析 → 点子生成/评估(联网市场分析)→ MVP 规划 → 提交检查 → Pitch 辅助 → 赛后复盘
13
+ - 🧠 多模型:OpenAI / Anthropic / Gemini / Ollama 本地 / 自定义兼容接口,可切换
14
+ - 💰 成本控制:token 用量与费用统计,预算上限提醒
15
+ - ⚡ 竞速模式:默认命令需确认,可一键切换全自动,配定时 git 备份
16
+ - 📁 比赛管理:每场一个目录 + 全局档案,历史可回溯
17
+ - 📝 模板库:README / Pitch / 提交说明 / 时间线 一键生成
18
+ - 🐾 终端小宠物:ASCII 三叶草吉祥物,启动时随机姿态出场
19
+
20
+ ## 快速开始
21
+
22
+ ```bash
23
+ npm install -g clover-hack
24
+ clover config # 配置向导:模型、API Key、语言、预算
25
+ clover init # 在当前目录初始化比赛
26
+ clover start # 开始和 Clover 对话
27
+ ```
28
+
29
+ > npm 包名 `clover` 若已被占用,本包使用 `clover-hack`,命令名保持 `clover`。
30
+
31
+ ## 命令
32
+
33
+ | 命令 | 说明 |
34
+ | --- | --- |
35
+ | `clover init` | 初始化比赛项目(当前目录) |
36
+ | `clover new <name>` | 创建新比赛档案 |
37
+ | `clover start` | 进入 Agent 对话模式(对话内 `/img <图片> [问题]` 发送图片) |
38
+ | `clover analyze <file/url>` | 赛题解析 |
39
+ | `clover ideate` | 点子生成 |
40
+ | `clover evaluate <idea>` | 点子评估(联网市场分析) |
41
+ | `clover plan` | MVP 规划 |
42
+ | `clover template <type>` | 生成模板文档 |
43
+ | `clover check` | 提交前检查 |
44
+ | `clover review` | 赛后复盘 |
45
+ | `clover status` | 比赛状态/倒计时/预算 |
46
+ | `clover config` | 配置向导 |
47
+ | `clover models` | 模型管理 |
48
+ | `clover archive list` | 历史比赛档案 |
49
+
50
+ ## 开发
51
+
52
+ ```bash
53
+ npm install
54
+ npm run dev -- --help # tsx 直接跑
55
+ npm run build # 编译到 dist/
56
+ npm run typecheck # 类型检查
57
+ ```
58
+
59
+ ## 目录结构
60
+
61
+ ```text
62
+ src/
63
+ ├── index.ts # 入口
64
+ ├── cli/ # 命令实现
65
+ ├── core/ # agent 循环 / 工具注册 / 会话 / 权限
66
+ ├── hackathon/ # 黑客松领域逻辑
67
+ ├── models/ # 模型 Provider 抽象与实现
68
+ ├── templates/ # 文档模板
69
+ └── utils/ # 配置 / 成本 / 日志
70
+ ```
71
+
72
+ ## 路线图
73
+
74
+ - M1 脚手架:项目结构、命令骨架、配置系统 ✅
75
+ - M2 Agent 核心:Provider 抽象、对话循环、工具调用、会话恢复 ✅
76
+ - M3 黑客松工作流:赛题解析 / 点子评估 / 规划 / 检查 / Pitch / 复盘 + 联网市场分析 ✅
77
+ - M4 多模态:图片输入,OpenAI / Anthropic / Gemini / Ollama 四家格式适配 ✅
78
+ - M5 发布:GitHub 开源 + npm 发布
79
+
80
+ ## 开源
81
+
82
+ MIT License,欢迎贡献。完整需求见 [docs/PRD.md](docs/PRD.md)。
@@ -0,0 +1,18 @@
1
+ export declare function cmdInit(): Promise<void>;
2
+ export declare function cmdNew(name: string): Promise<void>;
3
+ export declare function cmdArchiveList(): void;
4
+ export declare function cmdStatus(): void;
5
+ export declare function cmdTemplate(type: string): void;
6
+ export declare function cmdCheck(): Promise<void>;
7
+ export declare function cmdConfig(): Promise<void>;
8
+ export declare function cmdModels(): void;
9
+ export declare function cmdSessions(id?: string): void;
10
+ export declare function cmdAnalyze(source?: string): Promise<void>;
11
+ export declare function cmdIdeate(): Promise<void>;
12
+ export declare function cmdEvaluate(idea?: string): Promise<void>;
13
+ export declare function cmdPlan(): Promise<void>;
14
+ export declare function cmdPitch(): Promise<void>;
15
+ export declare function cmdReview(): Promise<void>;
16
+ /** 自动备份:git add -A + commit;非 git 仓库或没有改动时静默跳过 */
17
+ export declare function autoCommit(): string | null;
18
+ export declare function cmdStart(): Promise<void>;
@@ -0,0 +1,474 @@
1
+ // 所有 clover 子命令实现
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { execFileSync } from "node:child_process";
6
+ import { askInput, askYesNo } from "../utils/input.js";
7
+ import { PermissionManager } from "../core/permissions.js";
8
+ import { createProvider } from "../models/provider.js";
9
+ import { Agent } from "../core/agent.js";
10
+ import { createSession, latestSession, listSessions, loadSession } from "../core/session.js";
11
+ import { loadGlobalConfig, saveGlobalConfig, GLOBAL_CONFIG_PATH, ARCHIVE_PATH, PROJECT_CONFIG_PATH, requireProject, readJsonFile, writeJsonFile } from "../utils/config.js";
12
+ import { formatUsd } from "../utils/cost.js";
13
+ import { banner, info, note, warn, error } from "../utils/logger.js";
14
+ import { findPet, randomPet, renderPet } from "../utils/pet.js";
15
+ import { searchWeb } from "../core/tools.js";
16
+ import { buildAnalyzePrompt, buildIdeatePrompt, buildEvaluatePrompt, buildMvpPrompt, buildPitchPrompt, buildRetrospectivePrompt, runSubmissionChecks } from "../hackathon/workflows.js";
17
+ const STATE_PATH = path.join(".clover", "state.json");
18
+ // 输入统一走 utils/input.ts(单 readline + 行队列,兼容交互与管道输入)
19
+ // ---------- 宠物出场 ----------
20
+ function showPet(name) {
21
+ const pet = (name ? findPet(name) : undefined) ?? randomPet();
22
+ console.log("\n" + renderPet(pet) + "\n");
23
+ note(pet.caption);
24
+ }
25
+ function loadState() {
26
+ return readJsonFile(STATE_PATH) ?? {};
27
+ }
28
+ function saveState(state) {
29
+ writeJsonFile(STATE_PATH, state);
30
+ }
31
+ function getMeta() {
32
+ const state = loadState();
33
+ return state.meta ?? null;
34
+ }
35
+ function getActiveProvider(config) {
36
+ const providerConfig = config.providers[config.defaultProvider];
37
+ if (!providerConfig)
38
+ throw new Error("默认 Provider 未配置,请运行 clover config");
39
+ return createProvider(providerConfig);
40
+ }
41
+ function requireConfigured() {
42
+ const config = loadGlobalConfig();
43
+ const provider = config.providers[config.defaultProvider];
44
+ if (!provider || !provider.apiKey) {
45
+ throw new Error("尚未配置模型 API Key,请先运行 clover config");
46
+ }
47
+ return config;
48
+ }
49
+ function saveReport(fileName, content) {
50
+ const dir = path.join(".clover", "reports");
51
+ fs.mkdirSync(dir, { recursive: true });
52
+ const target = path.join(dir, fileName);
53
+ fs.writeFileSync(target, content, "utf8");
54
+ return target;
55
+ }
56
+ async function runChatWith(provider, prompt) {
57
+ const result = await provider.chat([{ role: "user", content: prompt }]);
58
+ note("本次消耗 " + result.usage.inputTokens + " in / " + result.usage.outputTokens + " out · " + formatUsd(result.estimatedCostUsd));
59
+ return result.content;
60
+ }
61
+ // ---------- init / new / archive ----------
62
+ export async function cmdInit() {
63
+ if (fs.existsSync(PROJECT_CONFIG_PATH)) {
64
+ warn("当前目录已是 Clover 比赛项目");
65
+ return;
66
+ }
67
+ const name = await askInput("比赛名称(如 Hackathon 2026)", "My Hackathon");
68
+ const url = await askInput("比赛链接/官网");
69
+ const durationHours = Number(await askInput("比赛时长(小时,如 48 / 72 / 168)", "48"));
70
+ const endAt = await askInput("提交截止时间(YYYY-MM-DD HH:mm)");
71
+ const meta = {
72
+ name,
73
+ url: url || undefined,
74
+ endAt: endAt || undefined,
75
+ durationHours: Number.isFinite(durationHours) && durationHours > 0 ? durationHours : 48,
76
+ createdAt: new Date().toISOString(),
77
+ };
78
+ fs.mkdirSync(".clover", { recursive: true });
79
+ writeJsonFile(PROJECT_CONFIG_PATH, { meta });
80
+ saveState({ meta });
81
+ showPet("happy");
82
+ info("✓ 比赛项目已初始化:" + name);
83
+ note("下一步:clover analyze <赛题文件或URL> 解析赛题");
84
+ }
85
+ export async function cmdNew(name) {
86
+ const safe = name.replace(/[\\/:*?"<>|]/g, "-");
87
+ const dir = path.join(process.cwd(), safe);
88
+ if (fs.existsSync(dir))
89
+ throw new Error("目录已存在: " + safe);
90
+ const meta = {
91
+ name,
92
+ durationHours: 48,
93
+ createdAt: new Date().toISOString(),
94
+ };
95
+ fs.mkdirSync(path.join(dir, ".clover"), { recursive: true });
96
+ writeJsonFile(path.join(dir, PROJECT_CONFIG_PATH), { meta });
97
+ const entry = {
98
+ id: Date.now().toString(36),
99
+ name,
100
+ path: dir,
101
+ createdAt: new Date().toISOString(),
102
+ };
103
+ const archives = readJsonFile(ARCHIVE_PATH) ?? [];
104
+ archives.unshift(entry);
105
+ writeJsonFile(ARCHIVE_PATH, archives);
106
+ info("✓ 已创建比赛档案目录:" + safe);
107
+ note("cd " + safe + " 后运行 clover init 初始化该比赛");
108
+ }
109
+ export function cmdArchiveList() {
110
+ const archives = readJsonFile(ARCHIVE_PATH) ?? [];
111
+ if (archives.length === 0) {
112
+ note("还没有历史比赛档案。用 clover new <比赛名> 创建档案目录。");
113
+ return;
114
+ }
115
+ banner("历史比赛档案(" + archives.length + ")");
116
+ for (const archive of archives) {
117
+ info("🍀 " + archive.name + " · " + archive.path + " · " + archive.createdAt.slice(0, 10));
118
+ }
119
+ }
120
+ // ---------- status / template / check ----------
121
+ export function cmdStatus() {
122
+ const meta = getMeta();
123
+ const config = loadGlobalConfig();
124
+ const state = loadState();
125
+ banner("比赛状态");
126
+ if (meta) {
127
+ info("比赛: " + meta.name);
128
+ if (meta.endAt) {
129
+ const remain = new Date(meta.endAt).getTime() - Date.now();
130
+ const hours = Math.max(0, Math.floor(remain / 3_600_000));
131
+ note("剩余: " + hours + " 小时(截止 " + meta.endAt + ")");
132
+ }
133
+ }
134
+ else {
135
+ warn("当前目录尚未初始化比赛(clover init)");
136
+ }
137
+ const provider = config.providers[config.defaultProvider];
138
+ note("模型: " + config.defaultProvider + " / " + (provider?.model ?? "未配置"));
139
+ note("预算: " + (config.budgetUsd > 0 ? formatUsd(config.budgetUsd) : "不限制") + " · 模式: " + (config.speedMode ? "竞速(自动执行)" : "默认确认"));
140
+ note("赛题摘要: " + (state.challengeSummary ? "已生成" : "无"));
141
+ note("点子: " + (state.ideas?.length ?? 0) + " 个");
142
+ }
143
+ const TEMPLATES_DIR = fileURLToPath(new URL("../../src/templates", import.meta.url));
144
+ export function cmdTemplate(type) {
145
+ requireProject();
146
+ const valid = ["readme", "pitch", "submission", "timeline"];
147
+ if (!valid.includes(type)) {
148
+ throw new Error("不支持的模板类型:" + type + "(可用:readme / pitch / submission / timeline)");
149
+ }
150
+ const target = type === "readme" ? "README.md" : type + ".md";
151
+ if (fs.existsSync(target)) {
152
+ warn(target + " 已存在,跳过生成");
153
+ return;
154
+ }
155
+ const source = path.join(TEMPLATES_DIR, type + ".md");
156
+ if (!fs.existsSync(source))
157
+ throw new Error("模板文件不存在: " + source);
158
+ fs.writeFileSync(target, fs.readFileSync(source, "utf8"), "utf8");
159
+ info("✓ 已生成 " + target);
160
+ note("下一步:填写内容,或 clover check 检查提交材料");
161
+ }
162
+ export async function cmdCheck() {
163
+ requireProject();
164
+ banner("提交检查中…");
165
+ const items = await runSubmissionChecks(getMeta());
166
+ let allPass = true;
167
+ for (const item of items) {
168
+ if (item.pass) {
169
+ info("✓ " + item.name);
170
+ }
171
+ else {
172
+ warn("✗ " + item.name + "(" + item.detail + ")");
173
+ allPass = false;
174
+ }
175
+ }
176
+ if (allPass) {
177
+ showPet("happy");
178
+ info("✓ 全部通过,可以提交!");
179
+ }
180
+ else {
181
+ note("还有未通过项,处理后再运行 clover check");
182
+ }
183
+ }
184
+ // ---------- 配置 ----------
185
+ const PROVIDER_IDS = ["openai", "anthropic", "gemini", "ollama", "custom"];
186
+ const DEFAULT_MODELS = {
187
+ openai: "gpt-4o-mini",
188
+ anthropic: "claude-sonnet-4-5",
189
+ gemini: "gemini-2.5-flash",
190
+ ollama: "qwen2.5:7b",
191
+ custom: "gpt-4o-mini",
192
+ };
193
+ export async function cmdConfig() {
194
+ const config = loadGlobalConfig();
195
+ banner("Clover 配置向导(直接回车使用当前值)");
196
+ const lang = await askInput("界面语言(zh / en)", config.language);
197
+ config.language = lang === "en" ? "en" : "zh";
198
+ const pick = (await askInput("默认模型 Provider(" + PROVIDER_IDS.join(" / ") + ")", config.defaultProvider)).toLowerCase();
199
+ if (PROVIDER_IDS.includes(pick)) {
200
+ config.defaultProvider = pick;
201
+ }
202
+ for (const id of PROVIDER_IDS) {
203
+ const provider = config.providers[id] ?? { id, model: DEFAULT_MODELS[id] ?? "", apiKey: undefined, baseUrl: undefined, enabled: false };
204
+ const enabled = await askYesNo("启用 " + id + " ?");
205
+ provider.enabled = enabled;
206
+ if (enabled) {
207
+ const key = await askInput(id + " API Key(可留空,用环境变量 CLOVER_" + id.toUpperCase() + "_KEY)", provider.apiKey ?? "");
208
+ if (key)
209
+ provider.apiKey = key;
210
+ const model = await askInput(id + " 模型名", provider.model || DEFAULT_MODELS[id] || "");
211
+ if (model)
212
+ provider.model = model;
213
+ if (id === "ollama" || id === "custom") {
214
+ const base = await askInput(id + " Base URL", provider.baseUrl ?? (id === "ollama" ? "http://localhost:11434" : ""));
215
+ if (base)
216
+ provider.baseUrl = base;
217
+ }
218
+ }
219
+ config.providers[id] = provider;
220
+ }
221
+ const budget = Number(await askInput("预算上限(美元,0 表示不限制)", String(config.budgetUsd)));
222
+ if (Number.isFinite(budget) && budget >= 0)
223
+ config.budgetUsd = budget;
224
+ config.speedMode = await askYesNo("竞速模式?已批准的命令类型自动执行");
225
+ config.autoBackup = await askYesNo("自动备份(git 定时提交)?");
226
+ const interval = Number(await askInput("自动备份间隔(分钟)", String(config.backupIntervalMinutes)));
227
+ if (Number.isFinite(interval) && interval > 0)
228
+ config.backupIntervalMinutes = interval;
229
+ saveGlobalConfig(config);
230
+ info("✓ 配置已保存:" + GLOBAL_CONFIG_PATH);
231
+ showPet("happy");
232
+ }
233
+ export function cmdModels() {
234
+ const config = loadGlobalConfig();
235
+ banner("模型配置");
236
+ for (const id of PROVIDER_IDS) {
237
+ const provider = config.providers[id];
238
+ if (!provider)
239
+ continue;
240
+ const key = provider.apiKey ? provider.apiKey.slice(0, 7) + "…" : "未配置";
241
+ const extra = provider.baseUrl ? " · " + provider.baseUrl : "";
242
+ note(id + " · " + provider.model + " · key: " + key + extra + (provider.enabled ? " · 启用" : " · 未启用"));
243
+ }
244
+ info("默认:" + config.defaultProvider);
245
+ }
246
+ // ---------- 会话浏览 ----------
247
+ export function cmdSessions(id) {
248
+ if (!id) {
249
+ const sessions = listSessions();
250
+ if (sessions.length === 0) {
251
+ note("还没有会话记录。进入 clover start 开始对话。");
252
+ return;
253
+ }
254
+ banner("历史会话(" + sessions.length + ")");
255
+ for (const s of sessions) {
256
+ info("🍀 " + s.id.slice(0, 8) + " · " + s.startedAt.slice(0, 16).replace("T", " ") + " · " + s.messages.length + " 条 · " + formatUsd(s.totalCostUsd));
257
+ }
258
+ note("查看详情:clover sessions <会话ID>");
259
+ return;
260
+ }
261
+ const session = loadSession(id) ?? listSessions().find((s) => s.id.startsWith(id)) ?? null;
262
+ if (!session) {
263
+ warn("找不到会话:" + id);
264
+ return;
265
+ }
266
+ banner("会话 " + session.id.slice(0, 8) + " · " + session.messages.length + " 条消息 · " + formatUsd(session.totalCostUsd));
267
+ for (const m of session.messages) {
268
+ const tag = m.role === "system" ? "系统" : m.role === "user" ? "用户" : m.role === "assistant" ? "Clover" : "工具";
269
+ const text = m.content.slice(0, 200) + (m.content.length > 200 ? "…" : "");
270
+ note("[" + tag + "] " + text);
271
+ }
272
+ }
273
+ // ---------- 赛题工作流 ----------
274
+ async function getChallengeSummary(config) {
275
+ const state = loadState();
276
+ if (typeof state.challengeSummary === "string" && state.challengeSummary)
277
+ return state.challengeSummary;
278
+ throw new Error("还没有赛题摘要,请先运行 clover analyze <赛题文件或URL>");
279
+ }
280
+ export async function cmdAnalyze(source) {
281
+ requireProject();
282
+ const config = requireConfigured();
283
+ let raw = source ?? "";
284
+ if (!raw)
285
+ raw = await askInput("粘贴赛题文本,或输入文件路径/URL");
286
+ if (fs.existsSync(raw)) {
287
+ raw = fs.readFileSync(raw, "utf8");
288
+ }
289
+ else if (/^https?:\/\//.test(raw)) {
290
+ const res = await fetch(raw);
291
+ if (!res.ok)
292
+ throw new Error("无法获取 URL:" + res.status);
293
+ raw = await res.text();
294
+ }
295
+ banner("解析赛题中…");
296
+ const output = await runChatWith(getActiveProvider(config), buildAnalyzePrompt(raw));
297
+ const state = loadState();
298
+ state.challengeSummary = output;
299
+ saveState(state);
300
+ const target = saveReport("challenge.md", output);
301
+ console.log("\n" + output + "\n");
302
+ note("已保存:" + target + " · 下一步:clover ideate");
303
+ }
304
+ export async function cmdIdeate() {
305
+ requireProject();
306
+ const config = requireConfigured();
307
+ const summary = await getChallengeSummary(config);
308
+ const skills = await askInput("你的技能栈(如 TypeScript/React/Node)", "通用 Web 开发");
309
+ banner("生成点子中…");
310
+ const output = await runChatWith(getActiveProvider(config), buildIdeatePrompt(summary, skills));
311
+ const target = saveReport("ideas.md", output);
312
+ console.log("\n" + output + "\n");
313
+ note("已保存:" + target + " · 下一步:clover evaluate 「选中的点子」");
314
+ }
315
+ export async function cmdEvaluate(idea) {
316
+ requireProject();
317
+ const config = requireConfigured();
318
+ const text = idea ?? (await askInput("要评估的点子描述"));
319
+ banner("联网市场分析中…");
320
+ const searchResults = await searchWeb(text, 5).catch(() => "");
321
+ const prompt = buildEvaluatePrompt(text) + (searchResults ? "\n\n## 联网搜索参考资料(供市场分析参考)\n" + searchResults : "");
322
+ const output = await runChatWith(getActiveProvider(config), prompt);
323
+ const target = saveReport("evaluation.md", output);
324
+ console.log("\n" + output + "\n");
325
+ note("已保存:" + target + " · 下一步:clover plan");
326
+ }
327
+ export async function cmdPlan() {
328
+ requireProject();
329
+ const config = requireConfigured();
330
+ const summary = await getChallengeSummary(config);
331
+ const idea = await askInput("选定的点子(或输入文件路径)");
332
+ const ideaText = fs.existsSync(idea) ? fs.readFileSync(idea, "utf8") : idea;
333
+ const meta = getMeta();
334
+ banner("规划 MVP 中…");
335
+ const output = await runChatWith(getActiveProvider(config), buildMvpPrompt(summary, ideaText, meta?.durationHours ?? 48));
336
+ const target = saveReport("mvp-plan.md", output);
337
+ console.log("\n" + output + "\n");
338
+ note("已保存:" + target);
339
+ }
340
+ export async function cmdPitch() {
341
+ requireProject();
342
+ const config = requireConfigured();
343
+ const meta = getMeta();
344
+ const infoText = await askInput("项目信息(一句话)或文件路径");
345
+ const text = fs.existsSync(infoText) ? fs.readFileSync(infoText, "utf8") : infoText;
346
+ banner("生成 Pitch 稿中…");
347
+ const output = await runChatWith(getActiveProvider(config), buildPitchPrompt(meta?.name ?? "项目", text));
348
+ const target = saveReport("pitch.md", output);
349
+ console.log("\n" + output + "\n");
350
+ note("已保存:" + target);
351
+ }
352
+ export async function cmdReview() {
353
+ requireProject();
354
+ const config = requireConfigured();
355
+ banner("生成复盘报告中…");
356
+ const output = await runChatWith(getActiveProvider(config), buildRetrospectivePrompt(getMeta(), latestSession()));
357
+ const target = saveReport("retrospective.md", output);
358
+ console.log("\n" + output + "\n");
359
+ note("已保存:" + target);
360
+ }
361
+ // ---------- 多模态输入 ----------
362
+ const IMAGE_EXTENSIONS = {
363
+ ".png": "image/png",
364
+ ".jpg": "image/jpeg",
365
+ ".jpeg": "image/jpeg",
366
+ ".gif": "image/gif",
367
+ ".webp": "image/webp",
368
+ };
369
+ const MAX_IMAGE_BYTES = 5 * 1024 * 1024;
370
+ /** 从输入里识别图片路径并加载为 base64,其余内容保留为文本 */
371
+ function parseInputImages(input) {
372
+ const tokens = input.split(/\s+/);
373
+ const images = [];
374
+ const rest = [];
375
+ for (const token of tokens) {
376
+ const cleaned = token.replace(/^["']|["']$/g, "");
377
+ const ext = path.extname(cleaned).toLowerCase();
378
+ const mediaType = IMAGE_EXTENSIONS[ext];
379
+ if (mediaType && fs.existsSync(cleaned)) {
380
+ const stat = fs.statSync(cleaned);
381
+ if (stat.size > MAX_IMAGE_BYTES) {
382
+ warn("图片超过 5MB,已跳过:" + cleaned);
383
+ continue;
384
+ }
385
+ images.push({ mediaType, dataBase64: fs.readFileSync(cleaned).toString("base64") });
386
+ note("🖼 已附加图片:" + cleaned);
387
+ }
388
+ else {
389
+ rest.push(token);
390
+ }
391
+ }
392
+ return { text: rest.join(" ").trim(), images };
393
+ }
394
+ // ---------- 自动 git 备份 ----------
395
+ /** 自动备份:git add -A + commit;非 git 仓库或没有改动时静默跳过 */
396
+ export function autoCommit() {
397
+ if (!fs.existsSync(path.join(process.cwd(), ".git")))
398
+ return null;
399
+ try {
400
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
401
+ execFileSync("git", ["add", "-A"], { stdio: "ignore" });
402
+ execFileSync("git", ["commit", "-m", "clover: auto backup " + stamp], { stdio: "ignore" });
403
+ return "已自动提交备份 " + stamp;
404
+ }
405
+ catch {
406
+ return null;
407
+ }
408
+ }
409
+ // ---------- start(对话模式) ----------
410
+ export async function cmdStart() {
411
+ requireProject();
412
+ const config = requireConfigured();
413
+ const provider = getActiveProvider(config);
414
+ const session = latestSession() ?? createSession();
415
+ const permissions = new PermissionManager(config);
416
+ const agent = new Agent({ provider, session, budgetUsd: config.budgetUsd, permissions });
417
+ let backupTimer = null;
418
+ if (config.autoBackup && config.backupIntervalMinutes > 0) {
419
+ backupTimer = setInterval(() => {
420
+ const message = autoCommit();
421
+ if (message)
422
+ note("🔄 " + message);
423
+ }, config.backupIntervalMinutes * 60_000);
424
+ note("自动备份已开启:每 " + config.backupIntervalMinutes + " 分钟提交一次");
425
+ }
426
+ showPet();
427
+ banner("Clover 对话模式(输入 /quit 退出,/status 看预算,/help 帮助)");
428
+ if (session.messages.length > 0) {
429
+ note("已恢复会话:" + session.id.slice(0, 8) + "(" + session.messages.length + " 条消息)");
430
+ }
431
+ for (;;) {
432
+ const input = (await askInput("clover>")).trim();
433
+ if (!input)
434
+ continue;
435
+ if (input === "/quit" || input === "exit" || input === "quit")
436
+ break;
437
+ if (input === "/status") {
438
+ cmdStatus();
439
+ continue;
440
+ }
441
+ if (input === "/help") {
442
+ note("命令:/quit 退出 · /status 状态 · /img <图片> [问题] 发送图片 · /help 帮助");
443
+ continue;
444
+ }
445
+ if (input.startsWith("/img ")) {
446
+ const parsed = parseInputImages(input.slice(5));
447
+ if (parsed.images.length === 0) {
448
+ warn("用法:/img <图片路径> [问题]");
449
+ continue;
450
+ }
451
+ try {
452
+ const answer = await agent.turn(parsed.text || "请描述这张图片", parsed.images);
453
+ console.log("\n" + answer + "\n");
454
+ }
455
+ catch (err) {
456
+ error(err instanceof Error ? err.message : String(err));
457
+ }
458
+ continue;
459
+ }
460
+ const parsed = parseInputImages(input);
461
+ if (!parsed.text && parsed.images.length === 0)
462
+ continue;
463
+ try {
464
+ const answer = await agent.turn(parsed.text || "请描述这张图片", parsed.images);
465
+ console.log("\n" + answer + "\n");
466
+ }
467
+ catch (err) {
468
+ error(err instanceof Error ? err.message : String(err));
469
+ }
470
+ }
471
+ if (backupTimer)
472
+ clearInterval(backupTimer);
473
+ }
474
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runCli(): Promise<void>;