feat(mindspace): 0630004 空间 UI、聊天连接、微信分享与 Agent 能力
含 MindSpace 三列布局与统计修复、聊天加载态与连接降级、平台页脚标记与 og:site_name 微信卡片、勾选资料删除 Agent 接口及内部话术过滤。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env node
|
||||
import crypto from 'node:crypto';
|
||||
import mysql from 'mysql2/promise';
|
||||
import { zonedTimeToEpochMs } from '../schedule-time.mjs';
|
||||
|
||||
const pool = mysql.createPool(process.env.DATABASE_URL ?? 'mysql://boot:888888@localhost:3306/memind');
|
||||
const uid = '1c99b83b-0454-474f-a5d2-129d34506a32';
|
||||
const tz = 'Asia/Shanghai';
|
||||
const t = (y, m, d, h, mi) =>
|
||||
zonedTimeToEpochMs({ year: y, month: m, day: d, hour: h, minute: mi, second: 0 }, tz);
|
||||
|
||||
const badItems = [
|
||||
'f058e736-1e6d-4559-8399-36cb91d67634',
|
||||
'be571e96-365c-4a0a-806a-491089e02144',
|
||||
'03ff84f1-3ac0-4fc6-ab7e-9fe2064fbf15',
|
||||
];
|
||||
await pool.query('DELETE FROM h5_schedule_reminders WHERE item_id IN (?)', [badItems]);
|
||||
await pool.query('DELETE FROM h5_schedule_items WHERE id IN (?)', [badItems]);
|
||||
|
||||
await pool.query(
|
||||
'UPDATE h5_schedule_items SET kind=?, start_at=?, end_at=? WHERE id=?',
|
||||
['event', t(2026, 7, 1, 6, 0), t(2026, 7, 1, 6, 30), '8b34b44e-84cf-462b-86a4-e895e656d626'],
|
||||
);
|
||||
await pool.query(
|
||||
'UPDATE h5_schedule_items SET start_at=?, end_at=? WHERE id=?',
|
||||
[t(2026, 7, 1, 12, 0), t(2026, 7, 1, 13, 0), '6fb372ca-3537-4f63-8a8c-d30615d6e832'],
|
||||
);
|
||||
await pool.query('UPDATE h5_schedule_reminders SET remind_at=? WHERE id=?', [
|
||||
t(2026, 7, 1, 5, 55),
|
||||
'633b008a-791b-455c-8f3b-331d5c7b1971',
|
||||
]);
|
||||
await pool.query('UPDATE h5_schedule_reminders SET remind_at=? WHERE id=?', [
|
||||
t(2026, 7, 1, 11, 50),
|
||||
'e423c8be-7463-481a-b881-131cb32b6f99',
|
||||
]);
|
||||
|
||||
const [existingDinner] = await pool.query(
|
||||
`SELECT id FROM h5_schedule_items WHERE user_id=? AND title LIKE '%聚餐%' AND deleted_at IS NULL LIMIT 1`,
|
||||
[uid],
|
||||
);
|
||||
if (!existingDinner[0]) {
|
||||
const dinnerId = crypto.randomUUID();
|
||||
const now = Date.now();
|
||||
await pool.query(
|
||||
`INSERT INTO h5_schedule_items
|
||||
(id, user_id, kind, title, status, start_at, end_at, all_day, timezone, source_channel, created_at, updated_at)
|
||||
VALUES (?, ?, 'event', ?, 'active', ?, ?, 0, ?, 'agent', ?, ?)`,
|
||||
[
|
||||
dinnerId,
|
||||
uid,
|
||||
'同学聚餐 🍽️',
|
||||
t(2026, 7, 1, 18, 30),
|
||||
t(2026, 7, 1, 21, 0),
|
||||
tz,
|
||||
now,
|
||||
now,
|
||||
],
|
||||
);
|
||||
await pool.query(
|
||||
`INSERT INTO h5_schedule_reminders
|
||||
(id, user_id, item_id, remind_at, offset_minutes, channel, status, attempts, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, 30, 'wechat', 'pending', 0, ?, ?)`,
|
||||
[crypto.randomUUID(), uid, dinnerId, t(2026, 7, 1, 18, 0), now, now],
|
||||
);
|
||||
}
|
||||
|
||||
const [rows] = await pool.query(
|
||||
`SELECT title, start_at FROM h5_schedule_items WHERE user_id=? AND deleted_at IS NULL ORDER BY start_at`,
|
||||
[uid],
|
||||
);
|
||||
for (const row of rows) {
|
||||
console.log(
|
||||
row.title,
|
||||
new Date(Number(row.start_at)).toLocaleString('zh-CN', { timeZone: tz }),
|
||||
);
|
||||
}
|
||||
await pool.end();
|
||||
Reference in New Issue
Block a user