grinders-farm 0.3.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 (77) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +135 -0
  3. package/SKILL.md +142 -0
  4. package/dist/scripts/generate-tiles.d.ts +2 -0
  5. package/dist/scripts/generate-tiles.d.ts.map +1 -0
  6. package/dist/scripts/generate-tiles.js +138 -0
  7. package/dist/scripts/generate-tiles.js.map +1 -0
  8. package/dist/src/adapters/auto-worker.d.ts +2 -0
  9. package/dist/src/adapters/auto-worker.d.ts.map +1 -0
  10. package/dist/src/adapters/auto-worker.js +79 -0
  11. package/dist/src/adapters/auto-worker.js.map +1 -0
  12. package/dist/src/adapters/daemon.d.ts +6 -0
  13. package/dist/src/adapters/daemon.d.ts.map +1 -0
  14. package/dist/src/adapters/daemon.js +6 -0
  15. package/dist/src/adapters/daemon.js.map +1 -0
  16. package/dist/src/adapters/image-server.d.ts +2 -0
  17. package/dist/src/adapters/image-server.d.ts.map +1 -0
  18. package/dist/src/adapters/image-server.js +90 -0
  19. package/dist/src/adapters/image-server.js.map +1 -0
  20. package/dist/src/adapters/oneshot.d.ts +2 -0
  21. package/dist/src/adapters/oneshot.d.ts.map +1 -0
  22. package/dist/src/adapters/oneshot.js +36 -0
  23. package/dist/src/adapters/oneshot.js.map +1 -0
  24. package/dist/src/adapters/terminal.d.ts +2 -0
  25. package/dist/src/adapters/terminal.d.ts.map +1 -0
  26. package/dist/src/adapters/terminal.js +70 -0
  27. package/dist/src/adapters/terminal.js.map +1 -0
  28. package/dist/src/game/crops.d.ts +8 -0
  29. package/dist/src/game/crops.d.ts.map +1 -0
  30. package/dist/src/game/crops.js +71 -0
  31. package/dist/src/game/crops.js.map +1 -0
  32. package/dist/src/game/engine.d.ts +15 -0
  33. package/dist/src/game/engine.d.ts.map +1 -0
  34. package/dist/src/game/engine.js +236 -0
  35. package/dist/src/game/engine.js.map +1 -0
  36. package/dist/src/game/farm.d.ts +12 -0
  37. package/dist/src/game/farm.d.ts.map +1 -0
  38. package/dist/src/game/farm.js +387 -0
  39. package/dist/src/game/farm.js.map +1 -0
  40. package/dist/src/game/types.d.ts +70 -0
  41. package/dist/src/game/types.d.ts.map +1 -0
  42. package/dist/src/game/types.js +23 -0
  43. package/dist/src/game/types.js.map +1 -0
  44. package/dist/src/index.d.ts +9 -0
  45. package/dist/src/index.d.ts.map +1 -0
  46. package/dist/src/index.js +8 -0
  47. package/dist/src/index.js.map +1 -0
  48. package/dist/src/local-auto.d.ts +13 -0
  49. package/dist/src/local-auto.d.ts.map +1 -0
  50. package/dist/src/local-auto.js +239 -0
  51. package/dist/src/local-auto.js.map +1 -0
  52. package/dist/src/notify/openclaw-delivery.d.ts +36 -0
  53. package/dist/src/notify/openclaw-delivery.d.ts.map +1 -0
  54. package/dist/src/notify/openclaw-delivery.js +104 -0
  55. package/dist/src/notify/openclaw-delivery.js.map +1 -0
  56. package/dist/src/notify/openclaw-push.d.ts +49 -0
  57. package/dist/src/notify/openclaw-push.d.ts.map +1 -0
  58. package/dist/src/notify/openclaw-push.js +451 -0
  59. package/dist/src/notify/openclaw-push.js.map +1 -0
  60. package/dist/src/render/ansi-renderer.d.ts +6 -0
  61. package/dist/src/render/ansi-renderer.d.ts.map +1 -0
  62. package/dist/src/render/ansi-renderer.js +41 -0
  63. package/dist/src/render/ansi-renderer.js.map +1 -0
  64. package/dist/src/render/image-renderer.d.ts +3 -0
  65. package/dist/src/render/image-renderer.d.ts.map +1 -0
  66. package/dist/src/render/image-renderer.js +174 -0
  67. package/dist/src/render/image-renderer.js.map +1 -0
  68. package/dist/src/render/text-renderer.d.ts +3 -0
  69. package/dist/src/render/text-renderer.d.ts.map +1 -0
  70. package/dist/src/render/text-renderer.js +73 -0
  71. package/dist/src/render/text-renderer.js.map +1 -0
  72. package/dist/src/storage/local-storage.d.ts +15 -0
  73. package/dist/src/storage/local-storage.d.ts.map +1 -0
  74. package/dist/src/storage/local-storage.js +115 -0
  75. package/dist/src/storage/local-storage.js.map +1 -0
  76. package/package.json +44 -0
  77. package/src/notify/notify.json.example +3 -0
@@ -0,0 +1,387 @@
1
+ import { GrowthStage, coordToLabel, labelToCoord, } from "./types.js";
2
+ import { CROP_DEFS, getCropDef, createPlantedCrop, advanceCropGrowth, getStage } from "./crops.js";
3
+ const DEFAULT_ROWS = 4;
4
+ const DEFAULT_COLS = 5;
5
+ const STARTING_GOLD = 50;
6
+ const MIN_MARKET_MULTIPLIER = 0.65;
7
+ const MAX_MARKET_MULTIPLIER = 1.35;
8
+ const MAX_SUPPLY_PENALTY = 0.35;
9
+ function clamp(n, min, max) {
10
+ return Math.min(max, Math.max(min, n));
11
+ }
12
+ function createEmptyMarketState() {
13
+ const sellMultipliers = {};
14
+ const recentSales = {};
15
+ for (const cropId of Object.keys(CROP_DEFS)) {
16
+ sellMultipliers[cropId] = 1;
17
+ recentSales[cropId] = 0;
18
+ }
19
+ return { sellMultipliers, recentSales };
20
+ }
21
+ function isValidOrder(order) {
22
+ return Boolean(order?.cropId && Number.isFinite(order.quantity) && Number.isFinite(order.rewardGold) && Number.isFinite(order.dueDay));
23
+ }
24
+ export function ensureFarmState(state) {
25
+ state.gridRows = state.gridRows || state.grid.length || DEFAULT_ROWS;
26
+ state.gridCols = state.gridCols || state.grid[0]?.length || DEFAULT_COLS;
27
+ state.market = state.market ?? createEmptyMarketState();
28
+ state.market.sellMultipliers = state.market.sellMultipliers ?? {};
29
+ state.market.recentSales = state.market.recentSales ?? {};
30
+ for (const cropId of Object.keys(CROP_DEFS)) {
31
+ if (!Number.isFinite(state.market.sellMultipliers[cropId]))
32
+ state.market.sellMultipliers[cropId] = 1;
33
+ if (!Number.isFinite(state.market.recentSales[cropId]))
34
+ state.market.recentSales[cropId] = 0;
35
+ }
36
+ if (state.activeOrder != null && !isValidOrder(state.activeOrder)) {
37
+ state.activeOrder = null;
38
+ }
39
+ for (let r = 0; r < state.grid.length; r++) {
40
+ for (let c = 0; c < state.grid[r].length; c++) {
41
+ const plot = state.grid[r][c];
42
+ plot.row = r;
43
+ plot.col = c;
44
+ plot.consecutiveSameCrop = plot.consecutiveSameCrop ?? 0;
45
+ if (plot.crop) {
46
+ const def = getCropDef(plot.crop.cropId);
47
+ if (!Number.isFinite(plot.crop.requiredWaterDays)) {
48
+ plot.crop.requiredWaterDays = def?.growthDays ?? 4;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ return state;
54
+ }
55
+ function getMarketMultiplier(state, cropId) {
56
+ const market = state.market ?? createEmptyMarketState();
57
+ const m = market.sellMultipliers[cropId];
58
+ if (!Number.isFinite(m))
59
+ return 1;
60
+ return clamp(m, MIN_MARKET_MULTIPLIER, MAX_MARKET_MULTIPLIER);
61
+ }
62
+ export function getCurrentSellPrice(state, cropId) {
63
+ const def = getCropDef(cropId);
64
+ if (!def)
65
+ return 0;
66
+ return Math.max(1, Math.round(def.sellPrice * getMarketMultiplier(state, cropId)));
67
+ }
68
+ function rollDailyMarket(state) {
69
+ const market = state.market ?? (state.market = createEmptyMarketState());
70
+ for (const cropId of Object.keys(CROP_DEFS)) {
71
+ const demandNoise = (Math.random() - 0.5) * 0.5; // ±25%
72
+ const supplyPenalty = Math.min(MAX_SUPPLY_PENALTY, (market.recentSales[cropId] ?? 0) * 0.04);
73
+ market.sellMultipliers[cropId] = clamp(1 + demandNoise - supplyPenalty, MIN_MARKET_MULTIPLIER, MAX_MARKET_MULTIPLIER);
74
+ market.recentSales[cropId] = Math.max(0, (market.recentSales[cropId] ?? 0) - 1);
75
+ }
76
+ }
77
+ function createRandomOrder(state) {
78
+ const cropIds = Object.keys(CROP_DEFS);
79
+ const cropId = cropIds[Math.floor(Math.random() * cropIds.length)];
80
+ const def = getCropDef(cropId);
81
+ const quantity = 2 + Math.floor(Math.random() * 3); // 2-4
82
+ const dueDay = state.day + 2 + Math.floor(Math.random() * 3); // +2~4 days
83
+ const rewardGold = Math.max(8, Math.round(quantity * def.sellPrice * 0.75));
84
+ return {
85
+ id: `D${state.day}-${Math.floor(Math.random() * 10000)}`,
86
+ cropId,
87
+ quantity,
88
+ rewardGold,
89
+ dueDay,
90
+ };
91
+ }
92
+ function applyRotationGrowthDays(plot, cropId, baseGrowthDays) {
93
+ const streak = plot.consecutiveSameCrop ?? 0;
94
+ if (plot.lastCropId === cropId && streak >= 1) {
95
+ return {
96
+ requiredWaterDays: baseGrowthDays + 1,
97
+ note: "(连作惩罚:生长 +1 天)",
98
+ };
99
+ }
100
+ if (plot.lastCropId && plot.lastCropId !== cropId) {
101
+ return {
102
+ requiredWaterDays: Math.max(2, baseGrowthDays - 1),
103
+ note: "(轮作加成:生长 -1 天)",
104
+ };
105
+ }
106
+ return { requiredWaterDays: baseGrowthDays, note: "" };
107
+ }
108
+ export function createNewFarm(rows = DEFAULT_ROWS, cols = DEFAULT_COLS) {
109
+ const grid = [];
110
+ for (let r = 0; r < rows; r++) {
111
+ const row = [];
112
+ for (let c = 0; c < cols; c++) {
113
+ row.push({ row: r, col: c, crop: null });
114
+ }
115
+ grid.push(row);
116
+ }
117
+ const state = ensureFarmState({
118
+ day: 1,
119
+ gold: STARTING_GOLD,
120
+ grid,
121
+ inventory: [],
122
+ gridRows: rows,
123
+ gridCols: cols,
124
+ market: createEmptyMarketState(),
125
+ activeOrder: null,
126
+ });
127
+ state.activeOrder = createRandomOrder(state);
128
+ return state;
129
+ }
130
+ function getPlot(state, row, col) {
131
+ if (row < 0 || row >= state.gridRows || col < 0 || col >= state.gridCols)
132
+ return null;
133
+ return state.grid[row][col];
134
+ }
135
+ function addToInventory(state, itemId, name, qty) {
136
+ const existing = state.inventory.find((i) => i.itemId === itemId);
137
+ if (existing) {
138
+ existing.quantity += qty;
139
+ }
140
+ else {
141
+ state.inventory.push({ itemId, name, quantity: qty });
142
+ }
143
+ }
144
+ export function plant(state, cropId, label) {
145
+ ensureFarmState(state);
146
+ const def = getCropDef(cropId);
147
+ if (!def) {
148
+ const validIds = Object.keys(CROP_DEFS).join(", ");
149
+ return { success: false, message: `未知作物 "${cropId}"。可选: ${validIds}` };
150
+ }
151
+ const coord = labelToCoord(label);
152
+ if (!coord) {
153
+ return { success: false, message: `无效坐标 "${label}"。格式如 A1, B3` };
154
+ }
155
+ const plot = getPlot(state, coord.row, coord.col);
156
+ if (!plot) {
157
+ return {
158
+ success: false,
159
+ message: `坐标 ${label} 超出农场范围 (${state.gridRows}×${state.gridCols})`,
160
+ };
161
+ }
162
+ if (plot.crop) {
163
+ return { success: false, message: `${coordToLabel(plot.row, plot.col)} 已有作物,请先收获或清除` };
164
+ }
165
+ if (state.gold < def.seedPrice) {
166
+ return { success: false, message: `金币不足!需要 ${def.seedPrice}G,当前 ${state.gold}G` };
167
+ }
168
+ state.gold -= def.seedPrice;
169
+ const planted = createPlantedCrop(cropId);
170
+ const rotation = applyRotationGrowthDays(plot, cropId, def.growthDays);
171
+ planted.requiredWaterDays = rotation.requiredWaterDays;
172
+ plot.crop = planted;
173
+ return {
174
+ success: true,
175
+ message: `在 ${coordToLabel(plot.row, plot.col)} 种下了${def.name} ${def.emoji}(-${def.seedPrice}G,余 ${state.gold}G)${rotation.note}`,
176
+ };
177
+ }
178
+ export function water(state, label) {
179
+ ensureFarmState(state);
180
+ if (label) {
181
+ const coord = labelToCoord(label);
182
+ if (!coord)
183
+ return { success: false, message: `无效坐标 "${label}"` };
184
+ const plot = getPlot(state, coord.row, coord.col);
185
+ if (!plot)
186
+ return { success: false, message: `坐标 ${label} 超出范围` };
187
+ if (!plot.crop)
188
+ return { success: false, message: `${label} 是空地,无需浇水` };
189
+ if (getStage(plot.crop) === GrowthStage.Ready)
190
+ return { success: false, message: `${label} 的作物已成熟,请收获` };
191
+ plot.crop.watered = true;
192
+ const def = getCropDef(plot.crop.cropId);
193
+ return {
194
+ success: true,
195
+ message: `给 ${label} 的${def?.name ?? "作物"}浇了水 💧`,
196
+ };
197
+ }
198
+ let count = 0;
199
+ for (const row of state.grid) {
200
+ for (const plot of row) {
201
+ if (plot.crop && getStage(plot.crop) !== GrowthStage.Ready && !plot.crop.watered) {
202
+ plot.crop.watered = true;
203
+ count++;
204
+ }
205
+ }
206
+ }
207
+ if (count === 0)
208
+ return { success: false, message: "没有需要浇水的作物" };
209
+ return { success: true, message: `给 ${count} 块地浇了水 💧` };
210
+ }
211
+ export function harvest(state, label) {
212
+ ensureFarmState(state);
213
+ if (label) {
214
+ const coord = labelToCoord(label);
215
+ if (!coord)
216
+ return { success: false, message: `无效坐标 "${label}"` };
217
+ const plot = getPlot(state, coord.row, coord.col);
218
+ if (!plot)
219
+ return { success: false, message: `坐标 ${label} 超出范围` };
220
+ if (!plot.crop)
221
+ return { success: false, message: `${label} 是空地` };
222
+ if (getStage(plot.crop) !== GrowthStage.Ready)
223
+ return { success: false, message: `${label} 的作物还未成熟` };
224
+ const def = getCropDef(plot.crop.cropId);
225
+ addToInventory(state, def.id, def.name, 1);
226
+ if (plot.lastCropId === def.id) {
227
+ plot.consecutiveSameCrop = (plot.consecutiveSameCrop ?? 0) + 1;
228
+ }
229
+ else {
230
+ plot.consecutiveSameCrop = 1;
231
+ }
232
+ plot.lastCropId = def.id;
233
+ plot.crop = null;
234
+ return {
235
+ success: true,
236
+ message: `收获了 ${def.name} ${def.emoji}!已放入仓库`,
237
+ };
238
+ }
239
+ const harvested = [];
240
+ for (const row of state.grid) {
241
+ for (const plot of row) {
242
+ if (plot.crop && getStage(plot.crop) === GrowthStage.Ready) {
243
+ const def = getCropDef(plot.crop.cropId);
244
+ addToInventory(state, def.id, def.name, 1);
245
+ harvested.push(`${coordToLabel(plot.row, plot.col)}:${def.name}`);
246
+ if (plot.lastCropId === def.id) {
247
+ plot.consecutiveSameCrop = (plot.consecutiveSameCrop ?? 0) + 1;
248
+ }
249
+ else {
250
+ plot.consecutiveSameCrop = 1;
251
+ }
252
+ plot.lastCropId = def.id;
253
+ plot.crop = null;
254
+ }
255
+ }
256
+ }
257
+ if (harvested.length === 0)
258
+ return { success: false, message: "没有可收获的作物" };
259
+ return {
260
+ success: true,
261
+ message: `收获了 ${harvested.length} 个作物: ${harvested.join(", ")}`,
262
+ };
263
+ }
264
+ export function sellAll(state) {
265
+ ensureFarmState(state);
266
+ if (state.inventory.length === 0) {
267
+ return { success: false, message: "仓库是空的,没什么可卖的" };
268
+ }
269
+ let orderMsg = "";
270
+ if (state.activeOrder) {
271
+ const order = state.activeOrder;
272
+ const inventoryItem = state.inventory.find((i) => i.itemId === order.cropId);
273
+ if (inventoryItem && inventoryItem.quantity >= order.quantity) {
274
+ inventoryItem.quantity -= order.quantity;
275
+ state.gold += order.rewardGold;
276
+ const def = getCropDef(order.cropId);
277
+ orderMsg = `\n✅ 完成订单:交付 ${def?.name ?? order.cropId}×${order.quantity},额外奖励 ${order.rewardGold}G!`;
278
+ if (inventoryItem.quantity <= 0) {
279
+ state.inventory = state.inventory.filter((i) => i.quantity > 0);
280
+ }
281
+ state.activeOrder = createRandomOrder(state);
282
+ }
283
+ }
284
+ let totalGold = 0;
285
+ const sold = [];
286
+ const marketFeedback = [];
287
+ const market = state.market ?? (state.market = createEmptyMarketState());
288
+ for (const item of state.inventory) {
289
+ if (item.quantity <= 0)
290
+ continue;
291
+ const def = getCropDef(item.itemId);
292
+ if (def) {
293
+ const unitPrice = getCurrentSellPrice(state, def.id);
294
+ const earn = unitPrice * item.quantity;
295
+ totalGold += earn;
296
+ sold.push(`${def.name}×${item.quantity} = ${earn}G(${unitPrice}G/个)`);
297
+ market.recentSales[def.id] = (market.recentSales[def.id] ?? 0) + item.quantity;
298
+ const pressure = item.quantity >= 6 ? "高" : item.quantity >= 3 ? "中" : "低";
299
+ const dropLikelihood = pressure === "高" ? "大概率降价" : pressure === "中" ? "中概率降价" : "小概率降价";
300
+ marketFeedback.push(`${def.name}+${item.quantity}(压力${pressure},${dropLikelihood})`);
301
+ }
302
+ }
303
+ state.gold += totalGold;
304
+ state.inventory = [];
305
+ const feedbackMsg = marketFeedback.length > 0
306
+ ? `\n📉 市场反馈(仅以下作物更可能降价):${marketFeedback.join(";")}。`
307
+ : "";
308
+ return {
309
+ success: true,
310
+ message: `出售: ${sold.join(", ")}。共获得 ${totalGold}G(余 ${state.gold}G)${orderMsg}${feedbackMsg}`,
311
+ };
312
+ }
313
+ export function nextDay(state) {
314
+ ensureFarmState(state);
315
+ const events = [];
316
+ for (const row of state.grid) {
317
+ for (const plot of row) {
318
+ if (plot.crop) {
319
+ const before = getStage(plot.crop);
320
+ plot.crop = advanceCropGrowth(plot.crop);
321
+ const after = getStage(plot.crop);
322
+ if (after !== before) {
323
+ const def = getCropDef(plot.crop.cropId);
324
+ const label = coordToLabel(plot.row, plot.col);
325
+ if (after === GrowthStage.Ready) {
326
+ events.push(`${label} ${def?.name} 成熟了!🎉`);
327
+ }
328
+ else {
329
+ events.push(`${label} ${def?.name} → ${after}`);
330
+ }
331
+ }
332
+ }
333
+ }
334
+ }
335
+ state.day++;
336
+ rollDailyMarket(state);
337
+ if (!state.activeOrder) {
338
+ state.activeOrder = createRandomOrder(state);
339
+ const def = getCropDef(state.activeOrder.cropId);
340
+ events.push(`📦 新订单:${def?.name ?? state.activeOrder.cropId} ×${state.activeOrder.quantity},截止第 ${state.activeOrder.dueDay} 天,奖励 ${state.activeOrder.rewardGold}G`);
341
+ }
342
+ else if (state.day > state.activeOrder.dueDay) {
343
+ const old = state.activeOrder;
344
+ const oldDef = getCropDef(old.cropId);
345
+ state.activeOrder = createRandomOrder(state);
346
+ const nextDef = getCropDef(state.activeOrder.cropId);
347
+ events.push(`⌛ 订单过期:${oldDef?.name ?? old.cropId} ×${old.quantity}`);
348
+ events.push(`📦 新订单:${nextDef?.name ?? state.activeOrder.cropId} ×${state.activeOrder.quantity},截止第 ${state.activeOrder.dueDay} 天,奖励 ${state.activeOrder.rewardGold}G`);
349
+ }
350
+ let msg = `☀️ 第 ${state.day} 天到了!`;
351
+ if (events.length > 0) {
352
+ msg += "\n" + events.join("\n");
353
+ }
354
+ else {
355
+ msg += "\n今天农场一片宁静。";
356
+ }
357
+ return { success: true, message: msg };
358
+ }
359
+ export function getShopText(state) {
360
+ const lines = ["🏪 种子商店:", ""];
361
+ for (const def of Object.values(CROP_DEFS)) {
362
+ const unitSell = state ? getCurrentSellPrice(state, def.id) : def.sellPrice;
363
+ const todayRoi = `${unitSell - def.seedPrice}G`;
364
+ const marketTag = state
365
+ ? unitSell > def.sellPrice
366
+ ? "📈"
367
+ : unitSell < def.sellPrice
368
+ ? "📉"
369
+ : "➖"
370
+ : "➖";
371
+ lines.push(` ${def.emoji} ${def.name} (${def.id}) — 种子 ${def.seedPrice}G | 今日售价 ${unitSell}G ${marketTag}(原价 ${def.sellPrice}G) | 生长 ${def.growthDays} 天 | 今日单个利润 ${todayRoi}`);
372
+ }
373
+ return lines.join("\n");
374
+ }
375
+ export function getInventoryText(state) {
376
+ ensureFarmState(state);
377
+ if (state.inventory.length === 0) {
378
+ return "📦 仓库: 空";
379
+ }
380
+ const lines = ["📦 仓库:"];
381
+ for (const item of state.inventory) {
382
+ const def = getCropDef(item.itemId);
383
+ lines.push(` ${def?.emoji ?? "?"} ${item.name} × ${item.quantity}`);
384
+ }
385
+ return lines.join("\n");
386
+ }
387
+ //# sourceMappingURL=farm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"farm.js","sourceRoot":"","sources":["../../../src/game/farm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ export declare enum GrowthStage {
2
+ Empty = "empty",
3
+ Seed = "seed",
4
+ Sprout = "sprout",
5
+ Growing1 = "growing_1",
6
+ Growing2 = "growing_2",
7
+ Ready = "ready"
8
+ }
9
+ export interface CropDef {
10
+ id: string;
11
+ name: string;
12
+ emoji: string;
13
+ realMaturityDays: number;
14
+ growthDays: number;
15
+ seedPrice: number;
16
+ sellPrice: number;
17
+ }
18
+ export interface PlantedCrop {
19
+ cropId: string;
20
+ wateredDays: number;
21
+ watered: boolean;
22
+ /** Effective growth target for this specific crop instance (supports rotation effects). */
23
+ requiredWaterDays?: number;
24
+ }
25
+ export interface Plot {
26
+ row: number;
27
+ col: number;
28
+ crop: PlantedCrop | null;
29
+ /** Last harvested crop id on this tile, for rotation bonuses/penalties. */
30
+ lastCropId?: string;
31
+ /** Consecutive count for same-crop harvesting on this tile. */
32
+ consecutiveSameCrop?: number;
33
+ }
34
+ export interface InventoryItem {
35
+ itemId: string;
36
+ name: string;
37
+ quantity: number;
38
+ }
39
+ export interface FarmState {
40
+ day: number;
41
+ gold: number;
42
+ grid: Plot[][];
43
+ inventory: InventoryItem[];
44
+ gridRows: number;
45
+ gridCols: number;
46
+ market?: FarmMarketState;
47
+ activeOrder?: FarmOrder | null;
48
+ }
49
+ export interface FarmMarketState {
50
+ sellMultipliers: Record<string, number>;
51
+ recentSales: Record<string, number>;
52
+ }
53
+ export interface FarmOrder {
54
+ id: string;
55
+ cropId: string;
56
+ quantity: number;
57
+ rewardGold: number;
58
+ dueDay: number;
59
+ }
60
+ export interface CommandResult {
61
+ message: string;
62
+ imagePath?: string;
63
+ success: boolean;
64
+ }
65
+ export declare function coordToLabel(row: number, col: number): string;
66
+ export declare function labelToCoord(label: string): {
67
+ row: number;
68
+ col: number;
69
+ } | null;
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/game/types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,2FAA2F;IAC3F,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IACf,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO/E"}
@@ -0,0 +1,23 @@
1
+ export var GrowthStage;
2
+ (function (GrowthStage) {
3
+ GrowthStage["Empty"] = "empty";
4
+ GrowthStage["Seed"] = "seed";
5
+ GrowthStage["Sprout"] = "sprout";
6
+ GrowthStage["Growing1"] = "growing_1";
7
+ GrowthStage["Growing2"] = "growing_2";
8
+ GrowthStage["Ready"] = "ready";
9
+ })(GrowthStage || (GrowthStage = {}));
10
+ export function coordToLabel(row, col) {
11
+ return `${String.fromCharCode(65 + row)}${col + 1}`;
12
+ }
13
+ export function labelToCoord(label) {
14
+ const match = label.match(/^([A-Za-z])(\d+)$/);
15
+ if (!match)
16
+ return null;
17
+ const row = match[1].toUpperCase().charCodeAt(0) - 65;
18
+ const col = parseInt(match[2], 10) - 1;
19
+ if (row < 0 || col < 0)
20
+ return null;
21
+ return { row, col };
22
+ }
23
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/game/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,gCAAiB,CAAA;IACjB,qCAAsB,CAAA;IACtB,qCAAsB,CAAA;IACtB,8BAAe,CAAA;AACjB,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAkED,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,GAAW;IACnD,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { GameEngine } from "./game/engine.js";
2
+ export { LocalStorage } from "./storage/local-storage.js";
3
+ export { createNewFarm, plant, water, harvest, sellAll, nextDay } from "./game/farm.js";
4
+ export { CROP_DEFS, getCropDef, getAllCropIds } from "./game/crops.js";
5
+ export { renderFarmText } from "./render/text-renderer.js";
6
+ export { renderFarmImage } from "./render/image-renderer.js";
7
+ export type { FarmState, Plot, CropDef, PlantedCrop, CommandResult, InventoryItem } from "./game/types.js";
8
+ export { GrowthStage, coordToLabel, labelToCoord } from "./game/types.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3G,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { GameEngine } from "./game/engine.js";
2
+ export { LocalStorage } from "./storage/local-storage.js";
3
+ export { createNewFarm, plant, water, harvest, sellAll, nextDay } from "./game/farm.js";
4
+ export { CROP_DEFS, getCropDef, getAllCropIds } from "./game/crops.js";
5
+ export { renderFarmText } from "./render/text-renderer.js";
6
+ export { renderFarmImage } from "./render/image-renderer.js";
7
+ export { GrowthStage, coordToLabel, labelToCoord } from "./game/types.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { CommandResult } from "./game/types.js";
2
+ /** Project root (grinders-farm repo), resolved from this file under `src/`. */
3
+ export declare const PROJECT_ROOT: string;
4
+ export declare const AUTO_PID_FILE: string;
5
+ export declare const AUTO_CONFIG_FILE: string;
6
+ /**
7
+ * 与 `startLocalAuto` 相同,但指定游戏仓库根目录(供 OpenClaw 插件使用,gameRoot 含 `src/adapters/oneshot.ts`)。
8
+ */
9
+ export declare function startLocalAutoAtRoot(gameRoot: string, intervalSec: number): Promise<CommandResult>;
10
+ export declare function startLocalAuto(intervalSec: number): Promise<CommandResult>;
11
+ export declare function stopLocalAuto(): CommandResult;
12
+ export declare function getLocalAutoStatus(): CommandResult;
13
+ //# sourceMappingURL=local-auto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-auto.d.ts","sourceRoot":"","sources":["../../src/local-auto.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,+EAA+E;AAC/E,eAAO,MAAM,YAAY,QAAmE,CAAC;AAG7F,eAAO,MAAM,aAAa,QAAkC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,QAA0C,CAAC;AAkFxE;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDxG;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAEhF;AAED,wBAAgB,aAAa,IAAI,aAAa,CAuD7C;AAED,wBAAgB,kBAAkB,IAAI,aAAa,CAiClD"}