team-anya-cli 0.1.3 → 0.1.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.
- package/apps/server/dist/gateway/feishu-sender.js +46 -2
- package/apps/server/dist/gateway/feishu-ws.js +5 -4
- package/apps/server/dist/gateway/http.js +25 -0
- package/apps/server/dist/gateway/message-queue.js +14 -0
- package/apps/server/dist/loid/brain.js +1 -0
- package/apps/server/dist/loid/session-manager.js +126 -11
- package/apps/server/dist/main.js +20 -1
- package/apps/web/dist/assets/index-BiiEB0qZ.css +1 -0
- package/apps/web/dist/assets/{index-CJzAjoVH.js → index-DT5NuALG.js} +189 -189
- package/apps/web/dist/index.html +2 -2
- package/package.json +1 -1
- package/packages/db/dist/index.js +31 -10
- package/packages/db/dist/schema/audit-events.js +1 -1
- package/packages/db/dist/schema/cc-sessions.js +2 -2
- package/packages/db/dist/schema/chats.js +3 -3
- package/packages/db/dist/schema/commitments.js +1 -1
- package/packages/db/dist/schema/communication-events.js +1 -1
- package/packages/db/dist/schema/message-log.js +1 -1
- package/packages/db/dist/schema/opportunities.js +1 -1
- package/packages/db/dist/schema/org.js +1 -1
- package/packages/db/dist/schema/projects.js +3 -3
- package/packages/db/dist/schema/tasks.js +3 -3
- package/packages/db/dist/schema/trace-spans.js +1 -1
- package/packages/db/src/migrations/0005_lethal_golden_guardian.sql +5 -0
- package/packages/db/src/migrations/meta/0005_snapshot.json +1513 -0
- package/packages/db/src/migrations/meta/_journal.json +7 -0
- package/apps/web/dist/assets/index-CHIT0Dya.css +0 -1
package/apps/web/dist/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Anya Gateway Dashboard</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-DT5NuALG.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BiiEB0qZ.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -124,7 +124,7 @@ export function getOrgMember(db, memberId) {
|
|
|
124
124
|
export function upsertOrgMember(db, data) {
|
|
125
125
|
const setFields = {
|
|
126
126
|
name: data.name,
|
|
127
|
-
updated_at: sql `(
|
|
127
|
+
updated_at: sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`,
|
|
128
128
|
};
|
|
129
129
|
if (data.platform !== undefined)
|
|
130
130
|
setFields.platform = data.platform;
|
|
@@ -236,11 +236,32 @@ export function getRecentMessages(db, opts = {}) {
|
|
|
236
236
|
conditions.push(eq(messageLog.chat_id, chat_id));
|
|
237
237
|
if (chat_type)
|
|
238
238
|
conditions.push(eq(messageLog.chat_type, chat_type));
|
|
239
|
-
const
|
|
240
|
-
? db.select().from(messageLog).where(and(...conditions))
|
|
241
|
-
: db.select().from(messageLog);
|
|
239
|
+
const whereClause = conditions.length > 0 ? and(...conditions) : undefined;
|
|
242
240
|
const orderBy = sortOrder === 'asc' ? messageLog.created_at : desc(messageLog.created_at);
|
|
243
|
-
return
|
|
241
|
+
return db
|
|
242
|
+
.select({
|
|
243
|
+
id: messageLog.id,
|
|
244
|
+
direction: messageLog.direction,
|
|
245
|
+
source_type: messageLog.source_type,
|
|
246
|
+
source_ref: messageLog.source_ref,
|
|
247
|
+
sender: messageLog.sender,
|
|
248
|
+
sender_name: sql `(SELECT name FROM org_members WHERE member_id = ${messageLog.sender})`,
|
|
249
|
+
receiver: messageLog.receiver,
|
|
250
|
+
receiver_name: sql `(SELECT name FROM org_members WHERE member_id = ${messageLog.receiver})`,
|
|
251
|
+
chat_id: messageLog.chat_id,
|
|
252
|
+
chat_type: messageLog.chat_type,
|
|
253
|
+
content: messageLog.content,
|
|
254
|
+
message_type: messageLog.message_type,
|
|
255
|
+
intent_level: messageLog.intent_level,
|
|
256
|
+
related_task_id: messageLog.related_task_id,
|
|
257
|
+
metadata: messageLog.metadata,
|
|
258
|
+
trace_id: messageLog.trace_id,
|
|
259
|
+
created_at: messageLog.created_at,
|
|
260
|
+
chat_name: chats.name,
|
|
261
|
+
})
|
|
262
|
+
.from(messageLog)
|
|
263
|
+
.leftJoin(chats, eq(messageLog.chat_id, chats.chat_id))
|
|
264
|
+
.where(whereClause)
|
|
244
265
|
.orderBy(orderBy)
|
|
245
266
|
.limit(limit)
|
|
246
267
|
.offset(offset)
|
|
@@ -354,7 +375,7 @@ export function upsertChat(db, data) {
|
|
|
354
375
|
bot_count: data.bot_count,
|
|
355
376
|
metadata: data.metadata,
|
|
356
377
|
last_synced_at: data.last_synced_at,
|
|
357
|
-
updated_at: sql `(
|
|
378
|
+
updated_at: sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`,
|
|
358
379
|
},
|
|
359
380
|
})
|
|
360
381
|
.returning()
|
|
@@ -391,7 +412,7 @@ export function upsertChatMember(db, data) {
|
|
|
391
412
|
.get();
|
|
392
413
|
if (existing) {
|
|
393
414
|
return db.update(chatMembers)
|
|
394
|
-
.set({ role: data.role ?? existing.role, synced_at: sql `(
|
|
415
|
+
.set({ role: data.role ?? existing.role, synced_at: sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))` })
|
|
395
416
|
.where(eq(chatMembers.id, existing.id))
|
|
396
417
|
.returning()
|
|
397
418
|
.get();
|
|
@@ -425,7 +446,7 @@ export function getMemberChats(db, memberId) {
|
|
|
425
446
|
return db.select({
|
|
426
447
|
chat_id: chats.chat_id,
|
|
427
448
|
name: chats.name,
|
|
428
|
-
|
|
449
|
+
chat_mode: chats.chat_mode,
|
|
429
450
|
chat_tag: chats.chat_tag,
|
|
430
451
|
user_count: chats.user_count,
|
|
431
452
|
role: chatMembers.role,
|
|
@@ -452,7 +473,7 @@ export function upsertProject(db, data) {
|
|
|
452
473
|
description: data.description,
|
|
453
474
|
platform: data.platform,
|
|
454
475
|
claude_md: data.claude_md,
|
|
455
|
-
updated_at: sql `(
|
|
476
|
+
updated_at: sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`,
|
|
456
477
|
},
|
|
457
478
|
})
|
|
458
479
|
.returning()
|
|
@@ -506,7 +527,7 @@ export function getProjectWithRepos(db, projectId) {
|
|
|
506
527
|
}
|
|
507
528
|
// ── CC Sessions CRUD ──
|
|
508
529
|
export function insertCCSession(db, data) {
|
|
509
|
-
return db.insert(ccSessions).values(data).returning().get();
|
|
530
|
+
return db.insert(ccSessions).values(data).onConflictDoNothing({ target: ccSessions.session_id }).returning().get();
|
|
510
531
|
}
|
|
511
532
|
export function getCCSessionsByTask(db, taskId) {
|
|
512
533
|
return db.select().from(ccSessions)
|
|
@@ -8,6 +8,6 @@ export const auditEvents = sqliteTable('audit_events', {
|
|
|
8
8
|
summary: text('summary').notNull(),
|
|
9
9
|
detail: text('detail'), // JSON 字符串
|
|
10
10
|
file_ref: text('file_ref'),
|
|
11
|
-
created_at: text('created_at').notNull().default(sql `(
|
|
11
|
+
created_at: text('created_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
12
12
|
});
|
|
13
13
|
//# sourceMappingURL=audit-events.js.map
|
|
@@ -2,13 +2,13 @@ import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
|
|
|
2
2
|
import { sql } from 'drizzle-orm';
|
|
3
3
|
export const ccSessions = sqliteTable('cc_sessions', {
|
|
4
4
|
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
5
|
-
session_id: text('session_id').notNull(),
|
|
5
|
+
session_id: text('session_id').notNull().unique(),
|
|
6
6
|
role: text('role').notNull(), // 'loid' | 'yor'
|
|
7
7
|
instance_id: text('instance_id'),
|
|
8
8
|
task_id: text('task_id'),
|
|
9
9
|
chat_id: text('chat_id'),
|
|
10
10
|
project_path: text('project_path'),
|
|
11
|
-
started_at: text('started_at').notNull().default(sql `(
|
|
11
|
+
started_at: text('started_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
12
12
|
ended_at: text('ended_at'),
|
|
13
13
|
});
|
|
14
14
|
//# sourceMappingURL=cc-sessions.js.map
|
|
@@ -18,9 +18,9 @@ export const chats = sqliteTable('chats', {
|
|
|
18
18
|
user_count: integer('user_count'),
|
|
19
19
|
bot_count: integer('bot_count'),
|
|
20
20
|
metadata: text('metadata'), // JSON 扩展
|
|
21
|
-
first_seen_at: text('first_seen_at').notNull().default(sql `(
|
|
21
|
+
first_seen_at: text('first_seen_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
22
22
|
last_synced_at: text('last_synced_at'),
|
|
23
|
-
updated_at: text('updated_at').notNull().default(sql `(
|
|
23
|
+
updated_at: text('updated_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
24
24
|
});
|
|
25
25
|
// chat_members 关联表 — 群 ↔ 人 多对多
|
|
26
26
|
export const chatMembers = sqliteTable('chat_members', {
|
|
@@ -28,6 +28,6 @@ export const chatMembers = sqliteTable('chat_members', {
|
|
|
28
28
|
chat_id: text('chat_id').notNull().references(() => chats.chat_id),
|
|
29
29
|
member_id: text('member_id').notNull().references(() => orgMembers.member_id),
|
|
30
30
|
role: text('role').default('member'), // owner / admin / member
|
|
31
|
-
synced_at: text('synced_at').notNull().default(sql `(
|
|
31
|
+
synced_at: text('synced_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
32
32
|
});
|
|
33
33
|
//# sourceMappingURL=chats.js.map
|
|
@@ -13,6 +13,6 @@ export const commitments = sqliteTable('commitments', {
|
|
|
13
13
|
deadline: text('deadline'),
|
|
14
14
|
status: text('status').notNull().default('active'),
|
|
15
15
|
break_reason: text('break_reason'),
|
|
16
|
-
promised_at: text('promised_at').notNull().default(sql `(
|
|
16
|
+
promised_at: text('promised_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
17
17
|
});
|
|
18
18
|
//# sourceMappingURL=commitments.js.map
|
|
@@ -9,6 +9,6 @@ export const communicationEvents = sqliteTable('communication_events', {
|
|
|
9
9
|
summary: text('summary').notNull(),
|
|
10
10
|
raw_content_path: text('raw_content_path'),
|
|
11
11
|
opportunity_id: text('opportunity_id'),
|
|
12
|
-
created_at: text('created_at').notNull().default(sql `(
|
|
12
|
+
created_at: text('created_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
13
13
|
});
|
|
14
14
|
//# sourceMappingURL=communication-events.js.map
|
|
@@ -15,6 +15,6 @@ export const messageLog = sqliteTable('message_log', {
|
|
|
15
15
|
related_task_id: text('related_task_id'),
|
|
16
16
|
metadata: text('metadata'), // JSON
|
|
17
17
|
trace_id: text('trace_id'),
|
|
18
|
-
created_at: text('created_at').notNull().default(sql `(
|
|
18
|
+
created_at: text('created_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
19
19
|
});
|
|
20
20
|
//# sourceMappingURL=message-log.js.map
|
|
@@ -17,7 +17,7 @@ export const opportunities = sqliteTable('opportunities', {
|
|
|
17
17
|
score_permission: real('score_permission'),
|
|
18
18
|
total_score: real('total_score'),
|
|
19
19
|
converted_task_id: text('converted_task_id').references(() => tasks.task_id),
|
|
20
|
-
detected_at: text('detected_at').notNull().default(sql `(
|
|
20
|
+
detected_at: text('detected_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
21
21
|
claimed_at: text('claimed_at'),
|
|
22
22
|
});
|
|
23
23
|
//# sourceMappingURL=opportunities.js.map
|
|
@@ -17,7 +17,7 @@ export const orgMembers = sqliteTable('org_members', {
|
|
|
17
17
|
avatar_url: text('avatar_url'),
|
|
18
18
|
metadata: text('metadata'), // JSON 扩展
|
|
19
19
|
last_synced_at: text('last_synced_at'),
|
|
20
|
-
updated_at: text('updated_at').notNull().default(sql `(
|
|
20
|
+
updated_at: text('updated_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
21
21
|
});
|
|
22
22
|
export const orgOwnership = sqliteTable('org_ownership', {
|
|
23
23
|
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
@@ -6,8 +6,8 @@ export const projects = sqliteTable('projects', {
|
|
|
6
6
|
description: text('description'),
|
|
7
7
|
platform: text('platform').default('github'), // github | gitlab | local
|
|
8
8
|
claude_md: text('claude_md'),
|
|
9
|
-
created_at: text('created_at').notNull().default(sql `(
|
|
10
|
-
updated_at: text('updated_at').notNull().default(sql `(
|
|
9
|
+
created_at: text('created_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
10
|
+
updated_at: text('updated_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
11
11
|
deleted_at: text('deleted_at'), // null = 活跃,有值 = 已软删除
|
|
12
12
|
});
|
|
13
13
|
// project_repos 关联表 — 项目 ↔ 仓库 一对多
|
|
@@ -18,6 +18,6 @@ export const projectRepos = sqliteTable('project_repos', {
|
|
|
18
18
|
git_url: text('git_url'), // 远程仓库地址,用于自动 clone
|
|
19
19
|
repo_path: text('repo_path'), // 主仓库绝对路径
|
|
20
20
|
default_branch: text('default_branch').default('main'),
|
|
21
|
-
created_at: text('created_at').notNull().default(sql `(
|
|
21
|
+
created_at: text('created_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
22
22
|
});
|
|
23
23
|
//# sourceMappingURL=projects.js.map
|
|
@@ -30,8 +30,8 @@ export const tasks = sqliteTable('tasks', {
|
|
|
30
30
|
// 文件路径
|
|
31
31
|
workspace_path: text('workspace_path'),
|
|
32
32
|
// 时间戳
|
|
33
|
-
created_at: text('created_at').notNull().default(sql `(
|
|
34
|
-
updated_at: text('updated_at').notNull().default(sql `(
|
|
33
|
+
created_at: text('created_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
34
|
+
updated_at: text('updated_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
35
35
|
});
|
|
36
36
|
export const taskClarifications = sqliteTable('task_clarifications', {
|
|
37
37
|
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
@@ -40,7 +40,7 @@ export const taskClarifications = sqliteTable('task_clarifications', {
|
|
|
40
40
|
answer: text('answer'),
|
|
41
41
|
asked_by: text('asked_by').notNull().default('loid'),
|
|
42
42
|
answered_by: text('answered_by'),
|
|
43
|
-
asked_at: text('asked_at').notNull().default(sql `(
|
|
43
|
+
asked_at: text('asked_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
44
44
|
answered_at: text('answered_at'),
|
|
45
45
|
});
|
|
46
46
|
//# sourceMappingURL=tasks.js.map
|
|
@@ -14,6 +14,6 @@ export const traceSpans = sqliteTable('trace_spans', {
|
|
|
14
14
|
output: text('output'), // JSON
|
|
15
15
|
error: text('error'),
|
|
16
16
|
metadata: text('metadata'), // JSON
|
|
17
|
-
created_at: text('created_at').notNull().default(sql `(
|
|
17
|
+
created_at: text('created_at').notNull().default(sql `(strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))`),
|
|
18
18
|
});
|
|
19
19
|
//# sourceMappingURL=trace-spans.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
-- 先删除重复的 cc_sessions 记录(保留每个 session_id 中 id 最小的那条)
|
|
2
|
+
DELETE FROM `cc_sessions` WHERE `id` NOT IN (
|
|
3
|
+
SELECT MIN(`id`) FROM `cc_sessions` GROUP BY `session_id`
|
|
4
|
+
);--> statement-breakpoint
|
|
5
|
+
CREATE UNIQUE INDEX `cc_sessions_session_id_unique` ON `cc_sessions` (`session_id`);
|