@goondocks/myco 0.18.1 → 0.19.1
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/README.md +17 -130
- package/dist/{agent-run-I4O2K2CK.js → agent-run-BV3ATBWB.js} +6 -6
- package/dist/{agent-tasks-UOW5BQIB.js → agent-tasks-I5SMLWVL.js} +6 -6
- package/dist/{chunk-TCSVDQF5.js → chunk-3J6TUJSV.js} +58 -58
- package/dist/chunk-3J6TUJSV.js.map +1 -0
- package/dist/{chunk-W7WENJ6F.js → chunk-46AQ7D23.js} +2 -2
- package/dist/{chunk-2V7HR7HB.js → chunk-4NIMDUYW.js} +5 -7
- package/dist/{chunk-2V7HR7HB.js.map → chunk-4NIMDUYW.js.map} +1 -1
- package/dist/{chunk-CURS2TNP.js → chunk-6DDRJQ4X.js} +2 -2
- package/dist/{chunk-D7TYRPRM.js → chunk-6LQIMRTC.js} +145 -145
- package/dist/chunk-6LQIMRTC.js.map +1 -0
- package/dist/{chunk-75AZFBFW.js → chunk-6ZDJXSEO.js} +3 -3
- package/dist/{chunk-TLK46KKD.js → chunk-AOCBCPAP.js} +5 -5
- package/dist/chunk-AOCBCPAP.js.map +1 -0
- package/dist/{chunk-O3TRN3RC.js → chunk-AULBWINA.js} +2 -2
- package/dist/chunk-CDM6ZLMZ.js +598 -0
- package/dist/chunk-CDM6ZLMZ.js.map +1 -0
- package/dist/{chunk-TOER6RNC.js → chunk-GVBVHYOT.js} +2 -2
- package/dist/{chunk-RIDSOQDR.js → chunk-HQLPB346.js} +2 -2
- package/dist/{chunk-CKJAWZQE.js → chunk-I54KLC6H.js} +13 -3
- package/dist/chunk-I54KLC6H.js.map +1 -0
- package/dist/{chunk-XWOQL4XN.js → chunk-NU74DHV3.js} +3 -3
- package/dist/{chunk-E4VLWIJC.js → chunk-ODXLRR4U.js} +1 -1
- package/dist/{chunk-RAV5YMRU.js → chunk-OR4XUYBJ.js} +4 -4
- package/dist/{chunk-CML4MCYF.js → chunk-PMT2LSTQ.js} +2 -2
- package/dist/{chunk-IB76KGBY.js → chunk-POEPHBQK.js} +1 -1
- package/dist/{chunk-TZAXQKO6.js → chunk-PZEAO35P.js} +2 -2
- package/dist/{chunk-GDY63YAW.js → chunk-U6PF3YII.js} +79 -79
- package/dist/chunk-U6PF3YII.js.map +1 -0
- package/dist/{chunk-C3EGL5JX.js → chunk-ULH667GT.js} +8 -8
- package/dist/{chunk-DPSLJ242.js → chunk-UVKQ62II.js} +3 -3
- package/dist/{chunk-N75GMQGA.js → chunk-VNL7KN4V.js} +3 -3
- package/dist/{chunk-U3J2DDSR.js → chunk-VQF5E4ZX.js} +2 -2
- package/dist/{chunk-LSP5HYOO.js → chunk-WGIQOJKJ.js} +4 -4
- package/dist/{chunk-YZPI2Y3E.js → chunk-WKNAKQKA.js} +3 -3
- package/dist/{chunk-NI23QCHB.js → chunk-YDU3AHSW.js} +5 -5
- package/dist/{cli-D3TJYJ2U.js → cli-2BW2PZMP.js} +39 -39
- package/dist/{client-4LLEXLVK.js → client-HMGTCKRW.js} +4 -4
- package/dist/{config-DA4IUVFL.js → config-LVXDVUYY.js} +6 -6
- package/dist/{detect-SZ2KDUF4.js → detect-BEOIHGBC.js} +5 -5
- package/dist/{detect-providers-PSVKXTWE.js → detect-providers-CDG6BKHU.js} +4 -4
- package/dist/{doctor-KCTXPX5D.js → doctor-AK3W5FMN.js} +11 -11
- package/dist/{executor-UYIZC3L5.js → executor-YLC7DHBY.js} +17 -17
- package/dist/{init-QFNBKKDC.js → init-4FV7ODOK.js} +15 -15
- package/dist/{llm-SMA5ZEAW.js → llm-INLSGEXY.js} +4 -4
- package/dist/{loader-Q3P3R4UP.js → loader-2ULW2FZS.js} +6 -6
- package/dist/{loader-SKKUMT5C.js → loader-HEGKUTGI.js} +6 -6
- package/dist/{main-5THODR77.js → main-IV64U72E.js} +348 -86
- package/dist/main-IV64U72E.js.map +1 -0
- package/dist/{open-7737CSPN.js → open-YSB36HP7.js} +6 -6
- package/dist/{post-compact-2TJ5FPZH.js → post-compact-5OB4LRLA.js} +10 -10
- package/dist/{post-tool-use-FRTSICC3.js → post-tool-use-2UOTDXXS.js} +9 -9
- package/dist/{post-tool-use-failure-KYO2NCNB.js → post-tool-use-failure-ZJQGHBMW.js} +10 -10
- package/dist/{pre-compact-J6GCJEJR.js → pre-compact-WD3FYUZ4.js} +10 -10
- package/dist/{provider-check-AE3L5Z6R.js → provider-check-V3NSOLZQ.js} +4 -4
- package/dist/{registry-O2NZLO3V.js → registry-XGRKLHEK.js} +7 -7
- package/dist/{remove-3WZZC7AX.js → remove-L6T4LMFP.js} +11 -11
- package/dist/{resolution-events-XWYLLDRK.js → resolution-events-PZFKMZHM.js} +4 -4
- package/dist/{restart-HUHEFOXU.js → restart-4UGLWER2.js} +7 -7
- package/dist/{search-ZGN3LDXG.js → search-MJGMQZ5N.js} +7 -7
- package/dist/{server-PTXLVVEE.js → server-MVBNGXLQ.js} +258 -173
- package/dist/server-MVBNGXLQ.js.map +1 -0
- package/dist/{session-7VV3IQMO.js → session-GLKHGGPJ.js} +8 -8
- package/dist/{session-end-SMU55UCM.js → session-end-ISPUQH3X.js} +9 -9
- package/dist/{session-start-NIMWEOIZ.js → session-start-VF26JMWW.js} +14 -14
- package/dist/{setup-llm-7S3VPAPN.js → setup-llm-7RCROQLP.js} +10 -10
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/{stats-GEOQ2DFF.js → stats-N7FYQSAY.js} +11 -11
- package/dist/{stop-7AKYBJJ2.js → stop-LVRFMSGO.js} +9 -9
- package/dist/{stop-failure-NLE2EURG.js → stop-failure-AXU5LOBN.js} +10 -10
- package/dist/{subagent-start-LBNZF2TG.js → subagent-start-KDJIQXQC.js} +10 -10
- package/dist/{subagent-stop-B2Z5GYAB.js → subagent-stop-2T2H2TYE.js} +10 -10
- package/dist/{task-completed-PO5TETJ7.js → task-completed-XHQ3XMYJ.js} +10 -10
- package/dist/team-GM2VZOVM.js +22 -0
- package/dist/ui/assets/{index-CiI1fwas.js → index-JtMb9fMt.js} +48 -48
- package/dist/ui/index.html +1 -1
- package/dist/{update-WBWB5URU.js → update-R6VHTRQA.js} +11 -11
- package/dist/{user-prompt-submit-IZJC3NV7.js → user-prompt-submit-EK2MDBLQ.js} +9 -9
- package/dist/{verify-FNSP62I3.js → verify-NK46D4II.js} +8 -8
- package/dist/{version-QEVU66NT.js → version-LTTJPC4F.js} +2 -2
- package/dist/version-LTTJPC4F.js.map +1 -0
- package/package.json +19 -2
- package/CONTRIBUTING.md +0 -132
- package/dist/chunk-CKJAWZQE.js.map +0 -1
- package/dist/chunk-D7TYRPRM.js.map +0 -1
- package/dist/chunk-GDY63YAW.js.map +0 -1
- package/dist/chunk-RJMXDUMA.js +0 -40
- package/dist/chunk-RJMXDUMA.js.map +0 -1
- package/dist/chunk-TCSVDQF5.js.map +0 -1
- package/dist/chunk-TLK46KKD.js.map +0 -1
- package/dist/main-5THODR77.js.map +0 -1
- package/dist/server-PTXLVVEE.js.map +0 -1
- package/dist/src/worker/package-lock.json +0 -4338
- package/dist/src/worker/package.json +0 -22
- package/dist/src/worker/src/auth.ts +0 -31
- package/dist/src/worker/src/index.ts +0 -476
- package/dist/src/worker/src/mcp/auth.ts +0 -65
- package/dist/src/worker/src/mcp/server.ts +0 -53
- package/dist/src/worker/src/mcp/tools/context.ts +0 -13
- package/dist/src/worker/src/mcp/tools/get.ts +0 -15
- package/dist/src/worker/src/mcp/tools/graph.ts +0 -35
- package/dist/src/worker/src/mcp/tools/search.ts +0 -32
- package/dist/src/worker/src/mcp/tools/sessions.ts +0 -24
- package/dist/src/worker/src/mcp/tools/skills.ts +0 -16
- package/dist/src/worker/src/mcp/tools/team.ts +0 -9
- package/dist/src/worker/src/schema.ts +0 -326
- package/dist/src/worker/src/search-helpers.ts +0 -70
- package/dist/src/worker/tsconfig.json +0 -16
- package/dist/src/worker/wrangler.toml +0 -30
- package/dist/team-DPNP2RN7.js +0 -368
- package/dist/team-DPNP2RN7.js.map +0 -1
- /package/dist/{agent-run-I4O2K2CK.js.map → agent-run-BV3ATBWB.js.map} +0 -0
- /package/dist/{agent-tasks-UOW5BQIB.js.map → agent-tasks-I5SMLWVL.js.map} +0 -0
- /package/dist/{chunk-W7WENJ6F.js.map → chunk-46AQ7D23.js.map} +0 -0
- /package/dist/{chunk-CURS2TNP.js.map → chunk-6DDRJQ4X.js.map} +0 -0
- /package/dist/{chunk-75AZFBFW.js.map → chunk-6ZDJXSEO.js.map} +0 -0
- /package/dist/{chunk-O3TRN3RC.js.map → chunk-AULBWINA.js.map} +0 -0
- /package/dist/{chunk-TOER6RNC.js.map → chunk-GVBVHYOT.js.map} +0 -0
- /package/dist/{chunk-RIDSOQDR.js.map → chunk-HQLPB346.js.map} +0 -0
- /package/dist/{chunk-XWOQL4XN.js.map → chunk-NU74DHV3.js.map} +0 -0
- /package/dist/{chunk-E4VLWIJC.js.map → chunk-ODXLRR4U.js.map} +0 -0
- /package/dist/{chunk-RAV5YMRU.js.map → chunk-OR4XUYBJ.js.map} +0 -0
- /package/dist/{chunk-CML4MCYF.js.map → chunk-PMT2LSTQ.js.map} +0 -0
- /package/dist/{chunk-IB76KGBY.js.map → chunk-POEPHBQK.js.map} +0 -0
- /package/dist/{chunk-TZAXQKO6.js.map → chunk-PZEAO35P.js.map} +0 -0
- /package/dist/{chunk-C3EGL5JX.js.map → chunk-ULH667GT.js.map} +0 -0
- /package/dist/{chunk-DPSLJ242.js.map → chunk-UVKQ62II.js.map} +0 -0
- /package/dist/{chunk-N75GMQGA.js.map → chunk-VNL7KN4V.js.map} +0 -0
- /package/dist/{chunk-U3J2DDSR.js.map → chunk-VQF5E4ZX.js.map} +0 -0
- /package/dist/{chunk-LSP5HYOO.js.map → chunk-WGIQOJKJ.js.map} +0 -0
- /package/dist/{chunk-YZPI2Y3E.js.map → chunk-WKNAKQKA.js.map} +0 -0
- /package/dist/{chunk-NI23QCHB.js.map → chunk-YDU3AHSW.js.map} +0 -0
- /package/dist/{cli-D3TJYJ2U.js.map → cli-2BW2PZMP.js.map} +0 -0
- /package/dist/{client-4LLEXLVK.js.map → client-HMGTCKRW.js.map} +0 -0
- /package/dist/{config-DA4IUVFL.js.map → config-LVXDVUYY.js.map} +0 -0
- /package/dist/{detect-SZ2KDUF4.js.map → detect-BEOIHGBC.js.map} +0 -0
- /package/dist/{detect-providers-PSVKXTWE.js.map → detect-providers-CDG6BKHU.js.map} +0 -0
- /package/dist/{doctor-KCTXPX5D.js.map → doctor-AK3W5FMN.js.map} +0 -0
- /package/dist/{executor-UYIZC3L5.js.map → executor-YLC7DHBY.js.map} +0 -0
- /package/dist/{init-QFNBKKDC.js.map → init-4FV7ODOK.js.map} +0 -0
- /package/dist/{llm-SMA5ZEAW.js.map → llm-INLSGEXY.js.map} +0 -0
- /package/dist/{loader-Q3P3R4UP.js.map → loader-2ULW2FZS.js.map} +0 -0
- /package/dist/{loader-SKKUMT5C.js.map → loader-HEGKUTGI.js.map} +0 -0
- /package/dist/{open-7737CSPN.js.map → open-YSB36HP7.js.map} +0 -0
- /package/dist/{post-compact-2TJ5FPZH.js.map → post-compact-5OB4LRLA.js.map} +0 -0
- /package/dist/{post-tool-use-FRTSICC3.js.map → post-tool-use-2UOTDXXS.js.map} +0 -0
- /package/dist/{post-tool-use-failure-KYO2NCNB.js.map → post-tool-use-failure-ZJQGHBMW.js.map} +0 -0
- /package/dist/{pre-compact-J6GCJEJR.js.map → pre-compact-WD3FYUZ4.js.map} +0 -0
- /package/dist/{provider-check-AE3L5Z6R.js.map → provider-check-V3NSOLZQ.js.map} +0 -0
- /package/dist/{registry-O2NZLO3V.js.map → registry-XGRKLHEK.js.map} +0 -0
- /package/dist/{remove-3WZZC7AX.js.map → remove-L6T4LMFP.js.map} +0 -0
- /package/dist/{resolution-events-XWYLLDRK.js.map → resolution-events-PZFKMZHM.js.map} +0 -0
- /package/dist/{restart-HUHEFOXU.js.map → restart-4UGLWER2.js.map} +0 -0
- /package/dist/{search-ZGN3LDXG.js.map → search-MJGMQZ5N.js.map} +0 -0
- /package/dist/{session-7VV3IQMO.js.map → session-GLKHGGPJ.js.map} +0 -0
- /package/dist/{session-end-SMU55UCM.js.map → session-end-ISPUQH3X.js.map} +0 -0
- /package/dist/{session-start-NIMWEOIZ.js.map → session-start-VF26JMWW.js.map} +0 -0
- /package/dist/{setup-llm-7S3VPAPN.js.map → setup-llm-7RCROQLP.js.map} +0 -0
- /package/dist/{stats-GEOQ2DFF.js.map → stats-N7FYQSAY.js.map} +0 -0
- /package/dist/{stop-7AKYBJJ2.js.map → stop-LVRFMSGO.js.map} +0 -0
- /package/dist/{stop-failure-NLE2EURG.js.map → stop-failure-AXU5LOBN.js.map} +0 -0
- /package/dist/{subagent-start-LBNZF2TG.js.map → subagent-start-KDJIQXQC.js.map} +0 -0
- /package/dist/{subagent-stop-B2Z5GYAB.js.map → subagent-stop-2T2H2TYE.js.map} +0 -0
- /package/dist/{task-completed-PO5TETJ7.js.map → task-completed-XHQ3XMYJ.js.map} +0 -0
- /package/dist/{version-QEVU66NT.js.map → team-GM2VZOVM.js.map} +0 -0
- /package/dist/{update-WBWB5URU.js.map → update-R6VHTRQA.js.map} +0 -0
- /package/dist/{user-prompt-submit-IZJC3NV7.js.map → user-prompt-submit-EK2MDBLQ.js.map} +0 -0
- /package/dist/{verify-FNSP62I3.js.map → verify-NK46D4II.js.map} +0 -0
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { Env } from '../../index';
|
|
2
|
-
|
|
3
|
-
export async function handleGraph(
|
|
4
|
-
args: { node_id: string; direction?: string },
|
|
5
|
-
env: Pick<Env, 'MYCO_TEAM_DB'>,
|
|
6
|
-
) {
|
|
7
|
-
const { node_id, direction = 'both' } = args;
|
|
8
|
-
let edgeCondition: string;
|
|
9
|
-
const edgeBinds: string[] = [];
|
|
10
|
-
|
|
11
|
-
if (direction === 'outgoing') { edgeCondition = 'source_id = ?'; edgeBinds.push(node_id); }
|
|
12
|
-
else if (direction === 'incoming') { edgeCondition = 'target_id = ?'; edgeBinds.push(node_id); }
|
|
13
|
-
else { edgeCondition = '(source_id = ? OR target_id = ?)'; edgeBinds.push(node_id, node_id); }
|
|
14
|
-
|
|
15
|
-
const { results: edges } = await env.MYCO_TEAM_DB.prepare(
|
|
16
|
-
`SELECT id, source_id, source_type, target_id, target_type, type, confidence, properties FROM graph_edges WHERE ${edgeCondition} LIMIT 100`,
|
|
17
|
-
).bind(...edgeBinds).all();
|
|
18
|
-
|
|
19
|
-
const entityIds = new Set<string>();
|
|
20
|
-
for (const edge of edges as Array<Record<string, unknown>>) {
|
|
21
|
-
if (edge.source_type === 'entity') entityIds.add(edge.source_id as string);
|
|
22
|
-
if (edge.target_type === 'entity') entityIds.add(edge.target_id as string);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let entities: Record<string, unknown>[] = [];
|
|
26
|
-
if (entityIds.size > 0) {
|
|
27
|
-
const placeholders = [...entityIds].map(() => '?').join(', ');
|
|
28
|
-
const { results } = await env.MYCO_TEAM_DB.prepare(
|
|
29
|
-
`SELECT id, type, name, properties, first_seen, last_seen FROM entities WHERE id IN (${placeholders})`,
|
|
30
|
-
).bind(...entityIds).all();
|
|
31
|
-
entities = results as Record<string, unknown>[];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return { content: [{ type: 'text' as const, text: JSON.stringify({ node_id, edges, entities }) }] };
|
|
35
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { Env } from '../../index';
|
|
2
|
-
import { embedText, hydrateVectorMatches } from '../../search-helpers';
|
|
3
|
-
|
|
4
|
-
interface SearchArgs {
|
|
5
|
-
query: string;
|
|
6
|
-
types?: string[];
|
|
7
|
-
limit?: number;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export async function handleSearch(args: SearchArgs, env: Pick<Env, 'MYCO_TEAM_DB' | 'MYCO_TEAM_VECTORS' | 'AI'>) {
|
|
11
|
-
const { query, types, limit = 10 } = args;
|
|
12
|
-
const topK = Math.min(Math.max(limit, 1), 50);
|
|
13
|
-
|
|
14
|
-
const queryVector = await embedText(env.AI, query);
|
|
15
|
-
const matches = await env.MYCO_TEAM_VECTORS.query(queryVector, { topK, returnMetadata: 'all' });
|
|
16
|
-
|
|
17
|
-
// Filter by types if specified, then cast metadata
|
|
18
|
-
let filtered = matches.matches.filter((m) => m.metadata);
|
|
19
|
-
if (types && types.length > 0) {
|
|
20
|
-
const typeSet = new Set(types);
|
|
21
|
-
filtered = filtered.filter((m) => typeSet.has((m.metadata as { table: string }).table));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const validMatches = filtered.map((m) => ({
|
|
25
|
-
metadata: m.metadata as { table: string; id: string; machine_id: string },
|
|
26
|
-
score: m.score,
|
|
27
|
-
}));
|
|
28
|
-
|
|
29
|
-
const results = await hydrateVectorMatches(env.MYCO_TEAM_DB, validMatches);
|
|
30
|
-
|
|
31
|
-
return { content: [{ type: 'text' as const, text: JSON.stringify({ results: results.slice(0, topK) }) }] };
|
|
32
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { Env } from '../../index';
|
|
2
|
-
|
|
3
|
-
export async function handleSessions(
|
|
4
|
-
args: { limit?: number; status?: string; agent?: string; branch?: string; since?: string },
|
|
5
|
-
env: Pick<Env, 'MYCO_TEAM_DB'>,
|
|
6
|
-
) {
|
|
7
|
-
const { limit = 20, status, agent, branch, since } = args;
|
|
8
|
-
const conditions: string[] = [];
|
|
9
|
-
const binds: unknown[] = [];
|
|
10
|
-
|
|
11
|
-
if (status) { conditions.push('status = ?'); binds.push(status); }
|
|
12
|
-
if (agent) { conditions.push('agent = ?'); binds.push(agent); }
|
|
13
|
-
if (branch) { conditions.push('branch = ?'); binds.push(branch); }
|
|
14
|
-
if (since) { conditions.push('started_at >= ?'); binds.push(Math.floor(new Date(since).getTime() / 1000)); }
|
|
15
|
-
|
|
16
|
-
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
17
|
-
binds.push(Math.min(Math.max(limit, 1), 100));
|
|
18
|
-
|
|
19
|
-
const { results } = await env.MYCO_TEAM_DB.prepare(
|
|
20
|
-
`SELECT id, machine_id, agent, "user", branch, status, title, SUBSTR(summary, 1, 300) as summary, prompt_count, tool_count, started_at, ended_at FROM sessions ${where} ORDER BY started_at DESC LIMIT ?`,
|
|
21
|
-
).bind(...binds).all();
|
|
22
|
-
|
|
23
|
-
return { content: [{ type: 'text' as const, text: JSON.stringify({ sessions: results }) }] };
|
|
24
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Env } from '../../index';
|
|
2
|
-
|
|
3
|
-
export async function handleSkills(args: { status?: string; limit?: number }, env: Pick<Env, 'MYCO_TEAM_DB'>) {
|
|
4
|
-
const { status, limit = 50 } = args;
|
|
5
|
-
const conditions: string[] = [];
|
|
6
|
-
const binds: unknown[] = [];
|
|
7
|
-
if (status) { conditions.push('status = ?'); binds.push(status); }
|
|
8
|
-
const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
|
|
9
|
-
binds.push(Math.min(Math.max(limit, 1), 100));
|
|
10
|
-
|
|
11
|
-
const { results } = await env.MYCO_TEAM_DB.prepare(
|
|
12
|
-
`SELECT id, machine_id, name, display_name, description, status, generation, usage_count, last_used_at, created_at, updated_at FROM skill_records ${where} ORDER BY usage_count DESC, created_at DESC LIMIT ?`,
|
|
13
|
-
).bind(...binds).all();
|
|
14
|
-
|
|
15
|
-
return { content: [{ type: 'text' as const, text: JSON.stringify({ skills: results }) }] };
|
|
16
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Env } from '../../index';
|
|
2
|
-
|
|
3
|
-
export async function handleTeam(env: Pick<Env, 'MYCO_TEAM_DB'>) {
|
|
4
|
-
const { results } = await env.MYCO_TEAM_DB.prepare(
|
|
5
|
-
`SELECT machine_id, package_version, schema_version, sync_protocol_version, last_seen, registered_at FROM nodes ORDER BY last_seen DESC`,
|
|
6
|
-
).all();
|
|
7
|
-
|
|
8
|
-
return { content: [{ type: 'text' as const, text: JSON.stringify({ nodes: results }) }] };
|
|
9
|
-
}
|
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* D1 schema for the Myco team sync worker.
|
|
3
|
-
*
|
|
4
|
-
* Mirrors the synced subset of the local SQLite schema. Tables use
|
|
5
|
-
* (id, machine_id) composite primary keys so records from multiple
|
|
6
|
-
* machines coexist without collision.
|
|
7
|
-
*
|
|
8
|
-
* Fully idempotent — safe to call on every request.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
// Inline constants — the worker is deployed independently and cannot
|
|
12
|
-
// import from the main @myco package at runtime.
|
|
13
|
-
const CANDIDATE_STATUS = { APPROVED: 'approved', GENERATED: 'generated' } as const;
|
|
14
|
-
|
|
15
|
-
const SESSIONS_TABLE = `
|
|
16
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
17
|
-
id TEXT NOT NULL,
|
|
18
|
-
machine_id TEXT NOT NULL,
|
|
19
|
-
agent TEXT NOT NULL,
|
|
20
|
-
"user" TEXT,
|
|
21
|
-
project_root TEXT,
|
|
22
|
-
branch TEXT,
|
|
23
|
-
started_at INTEGER NOT NULL,
|
|
24
|
-
ended_at INTEGER,
|
|
25
|
-
status TEXT DEFAULT 'active',
|
|
26
|
-
prompt_count INTEGER DEFAULT 0,
|
|
27
|
-
tool_count INTEGER DEFAULT 0,
|
|
28
|
-
title TEXT,
|
|
29
|
-
summary TEXT,
|
|
30
|
-
transcript_path TEXT,
|
|
31
|
-
parent_session_id TEXT,
|
|
32
|
-
parent_session_reason TEXT,
|
|
33
|
-
processed INTEGER DEFAULT 0,
|
|
34
|
-
content_hash TEXT,
|
|
35
|
-
created_at INTEGER NOT NULL,
|
|
36
|
-
synced_at INTEGER,
|
|
37
|
-
PRIMARY KEY (id, machine_id)
|
|
38
|
-
)`;
|
|
39
|
-
|
|
40
|
-
const PROMPT_BATCHES_TABLE = `
|
|
41
|
-
CREATE TABLE IF NOT EXISTS prompt_batches (
|
|
42
|
-
id INTEGER NOT NULL,
|
|
43
|
-
machine_id TEXT NOT NULL,
|
|
44
|
-
session_id TEXT NOT NULL,
|
|
45
|
-
prompt_number INTEGER,
|
|
46
|
-
user_prompt TEXT,
|
|
47
|
-
response_summary TEXT,
|
|
48
|
-
classification TEXT,
|
|
49
|
-
started_at INTEGER,
|
|
50
|
-
ended_at INTEGER,
|
|
51
|
-
status TEXT DEFAULT 'active',
|
|
52
|
-
activity_count INTEGER DEFAULT 0,
|
|
53
|
-
processed INTEGER DEFAULT 0,
|
|
54
|
-
content_hash TEXT,
|
|
55
|
-
created_at INTEGER NOT NULL,
|
|
56
|
-
synced_at INTEGER,
|
|
57
|
-
PRIMARY KEY (id, machine_id)
|
|
58
|
-
)`;
|
|
59
|
-
|
|
60
|
-
const SPORES_TABLE = `
|
|
61
|
-
CREATE TABLE IF NOT EXISTS spores (
|
|
62
|
-
id TEXT NOT NULL,
|
|
63
|
-
machine_id TEXT NOT NULL,
|
|
64
|
-
agent_id TEXT NOT NULL,
|
|
65
|
-
session_id TEXT,
|
|
66
|
-
prompt_batch_id INTEGER,
|
|
67
|
-
observation_type TEXT NOT NULL,
|
|
68
|
-
status TEXT DEFAULT 'active',
|
|
69
|
-
content TEXT NOT NULL,
|
|
70
|
-
context TEXT,
|
|
71
|
-
importance INTEGER DEFAULT 5,
|
|
72
|
-
file_path TEXT,
|
|
73
|
-
tags TEXT,
|
|
74
|
-
content_hash TEXT,
|
|
75
|
-
properties TEXT,
|
|
76
|
-
created_at INTEGER NOT NULL,
|
|
77
|
-
updated_at INTEGER,
|
|
78
|
-
synced_at INTEGER,
|
|
79
|
-
PRIMARY KEY (id, machine_id)
|
|
80
|
-
)`;
|
|
81
|
-
|
|
82
|
-
const ENTITIES_TABLE = `
|
|
83
|
-
CREATE TABLE IF NOT EXISTS entities (
|
|
84
|
-
id TEXT NOT NULL,
|
|
85
|
-
machine_id TEXT NOT NULL,
|
|
86
|
-
agent_id TEXT NOT NULL,
|
|
87
|
-
type TEXT NOT NULL,
|
|
88
|
-
name TEXT NOT NULL,
|
|
89
|
-
properties TEXT,
|
|
90
|
-
first_seen INTEGER NOT NULL,
|
|
91
|
-
last_seen INTEGER NOT NULL,
|
|
92
|
-
status TEXT DEFAULT 'active',
|
|
93
|
-
synced_at INTEGER,
|
|
94
|
-
PRIMARY KEY (id, machine_id)
|
|
95
|
-
)`;
|
|
96
|
-
|
|
97
|
-
const GRAPH_EDGES_TABLE = `
|
|
98
|
-
CREATE TABLE IF NOT EXISTS graph_edges (
|
|
99
|
-
id TEXT NOT NULL,
|
|
100
|
-
machine_id TEXT NOT NULL,
|
|
101
|
-
agent_id TEXT NOT NULL,
|
|
102
|
-
source_id TEXT NOT NULL,
|
|
103
|
-
source_type TEXT NOT NULL,
|
|
104
|
-
target_id TEXT NOT NULL,
|
|
105
|
-
target_type TEXT NOT NULL,
|
|
106
|
-
type TEXT NOT NULL,
|
|
107
|
-
session_id TEXT,
|
|
108
|
-
confidence REAL DEFAULT 1.0,
|
|
109
|
-
properties TEXT,
|
|
110
|
-
created_at INTEGER NOT NULL,
|
|
111
|
-
synced_at INTEGER,
|
|
112
|
-
PRIMARY KEY (id, machine_id)
|
|
113
|
-
)`;
|
|
114
|
-
|
|
115
|
-
const PLANS_TABLE = `
|
|
116
|
-
CREATE TABLE IF NOT EXISTS plans (
|
|
117
|
-
id TEXT NOT NULL,
|
|
118
|
-
machine_id TEXT NOT NULL,
|
|
119
|
-
status TEXT DEFAULT 'active',
|
|
120
|
-
author TEXT,
|
|
121
|
-
title TEXT,
|
|
122
|
-
content TEXT,
|
|
123
|
-
source_path TEXT,
|
|
124
|
-
tags TEXT,
|
|
125
|
-
session_id TEXT,
|
|
126
|
-
prompt_batch_id INTEGER,
|
|
127
|
-
content_hash TEXT,
|
|
128
|
-
processed INTEGER DEFAULT 0,
|
|
129
|
-
created_at INTEGER NOT NULL,
|
|
130
|
-
updated_at INTEGER,
|
|
131
|
-
synced_at INTEGER,
|
|
132
|
-
PRIMARY KEY (id, machine_id)
|
|
133
|
-
)`;
|
|
134
|
-
|
|
135
|
-
const ARTIFACTS_TABLE = `
|
|
136
|
-
CREATE TABLE IF NOT EXISTS artifacts (
|
|
137
|
-
id TEXT NOT NULL,
|
|
138
|
-
machine_id TEXT NOT NULL,
|
|
139
|
-
artifact_type TEXT,
|
|
140
|
-
source_path TEXT NOT NULL,
|
|
141
|
-
title TEXT NOT NULL,
|
|
142
|
-
content TEXT,
|
|
143
|
-
last_captured_by TEXT,
|
|
144
|
-
tags TEXT,
|
|
145
|
-
created_at INTEGER NOT NULL,
|
|
146
|
-
updated_at INTEGER,
|
|
147
|
-
synced_at INTEGER,
|
|
148
|
-
PRIMARY KEY (id, machine_id)
|
|
149
|
-
)`;
|
|
150
|
-
|
|
151
|
-
const ENTITY_MENTIONS_TABLE = `
|
|
152
|
-
CREATE TABLE IF NOT EXISTS entity_mentions (
|
|
153
|
-
entity_id TEXT NOT NULL,
|
|
154
|
-
note_id TEXT NOT NULL,
|
|
155
|
-
note_type TEXT NOT NULL,
|
|
156
|
-
agent_id TEXT NOT NULL,
|
|
157
|
-
machine_id TEXT NOT NULL,
|
|
158
|
-
synced_at INTEGER,
|
|
159
|
-
UNIQUE (entity_id, note_id, note_type, agent_id)
|
|
160
|
-
)`;
|
|
161
|
-
|
|
162
|
-
const RESOLUTION_EVENTS_TABLE = `
|
|
163
|
-
CREATE TABLE IF NOT EXISTS resolution_events (
|
|
164
|
-
id TEXT NOT NULL,
|
|
165
|
-
machine_id TEXT NOT NULL,
|
|
166
|
-
agent_id TEXT NOT NULL,
|
|
167
|
-
spore_id TEXT NOT NULL,
|
|
168
|
-
action TEXT NOT NULL,
|
|
169
|
-
new_spore_id TEXT,
|
|
170
|
-
reason TEXT,
|
|
171
|
-
session_id TEXT,
|
|
172
|
-
created_at INTEGER NOT NULL,
|
|
173
|
-
synced_at INTEGER,
|
|
174
|
-
PRIMARY KEY (id, machine_id)
|
|
175
|
-
)`;
|
|
176
|
-
|
|
177
|
-
const DIGEST_EXTRACTS_TABLE = `
|
|
178
|
-
CREATE TABLE IF NOT EXISTS digest_extracts (
|
|
179
|
-
id INTEGER NOT NULL,
|
|
180
|
-
machine_id TEXT NOT NULL,
|
|
181
|
-
agent_id TEXT NOT NULL,
|
|
182
|
-
tier INTEGER NOT NULL,
|
|
183
|
-
content TEXT NOT NULL,
|
|
184
|
-
substrate_hash TEXT,
|
|
185
|
-
generated_at INTEGER NOT NULL,
|
|
186
|
-
synced_at INTEGER,
|
|
187
|
-
PRIMARY KEY (id, machine_id)
|
|
188
|
-
)`;
|
|
189
|
-
|
|
190
|
-
const SKILL_CANDIDATES_TABLE = `
|
|
191
|
-
CREATE TABLE IF NOT EXISTS skill_candidates (
|
|
192
|
-
id TEXT NOT NULL,
|
|
193
|
-
machine_id TEXT NOT NULL,
|
|
194
|
-
agent_id TEXT NOT NULL,
|
|
195
|
-
topic TEXT NOT NULL,
|
|
196
|
-
rationale TEXT NOT NULL,
|
|
197
|
-
confidence REAL NOT NULL DEFAULT 0.0,
|
|
198
|
-
status TEXT NOT NULL DEFAULT 'identified',
|
|
199
|
-
source_ids TEXT NOT NULL DEFAULT '[]',
|
|
200
|
-
skill_id TEXT,
|
|
201
|
-
supersedes TEXT,
|
|
202
|
-
approved_at INTEGER,
|
|
203
|
-
created_at INTEGER NOT NULL,
|
|
204
|
-
updated_at INTEGER NOT NULL,
|
|
205
|
-
synced_at INTEGER,
|
|
206
|
-
PRIMARY KEY (id, machine_id)
|
|
207
|
-
)`;
|
|
208
|
-
|
|
209
|
-
const SKILL_RECORDS_TABLE = `
|
|
210
|
-
CREATE TABLE IF NOT EXISTS skill_records (
|
|
211
|
-
id TEXT NOT NULL,
|
|
212
|
-
machine_id TEXT NOT NULL,
|
|
213
|
-
agent_id TEXT NOT NULL,
|
|
214
|
-
name TEXT NOT NULL,
|
|
215
|
-
display_name TEXT NOT NULL,
|
|
216
|
-
description TEXT NOT NULL,
|
|
217
|
-
status TEXT NOT NULL DEFAULT 'active',
|
|
218
|
-
generation INTEGER NOT NULL DEFAULT 1,
|
|
219
|
-
candidate_id TEXT,
|
|
220
|
-
source_ids TEXT NOT NULL DEFAULT '[]',
|
|
221
|
-
path TEXT NOT NULL,
|
|
222
|
-
usage_count INTEGER NOT NULL DEFAULT 0,
|
|
223
|
-
last_used_at INTEGER,
|
|
224
|
-
created_at INTEGER NOT NULL,
|
|
225
|
-
updated_at INTEGER NOT NULL,
|
|
226
|
-
properties TEXT NOT NULL DEFAULT '{}',
|
|
227
|
-
synced_at INTEGER,
|
|
228
|
-
PRIMARY KEY (id, machine_id)
|
|
229
|
-
)`;
|
|
230
|
-
|
|
231
|
-
const SKILL_USAGE_TABLE = `
|
|
232
|
-
CREATE TABLE IF NOT EXISTS skill_usage (
|
|
233
|
-
id TEXT NOT NULL,
|
|
234
|
-
machine_id TEXT NOT NULL,
|
|
235
|
-
skill_id TEXT NOT NULL,
|
|
236
|
-
session_id TEXT NOT NULL,
|
|
237
|
-
detected_at INTEGER NOT NULL,
|
|
238
|
-
synced_at INTEGER,
|
|
239
|
-
PRIMARY KEY (id, machine_id)
|
|
240
|
-
)`;
|
|
241
|
-
|
|
242
|
-
const NODES_TABLE = `
|
|
243
|
-
CREATE TABLE IF NOT EXISTS nodes (
|
|
244
|
-
machine_id TEXT PRIMARY KEY,
|
|
245
|
-
package_version TEXT,
|
|
246
|
-
schema_version INTEGER,
|
|
247
|
-
sync_protocol_version INTEGER,
|
|
248
|
-
last_seen INTEGER NOT NULL,
|
|
249
|
-
registered_at INTEGER NOT NULL
|
|
250
|
-
)`;
|
|
251
|
-
|
|
252
|
-
const TEAM_CONFIG_TABLE = `
|
|
253
|
-
CREATE TABLE IF NOT EXISTS team_config (
|
|
254
|
-
key TEXT PRIMARY KEY,
|
|
255
|
-
value TEXT NOT NULL
|
|
256
|
-
)`;
|
|
257
|
-
|
|
258
|
-
const SECONDARY_INDEXES = [
|
|
259
|
-
'CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions (status)',
|
|
260
|
-
'CREATE INDEX IF NOT EXISTS idx_sessions_content_hash ON sessions (content_hash)',
|
|
261
|
-
'CREATE INDEX IF NOT EXISTS idx_spores_status ON spores (status)',
|
|
262
|
-
'CREATE INDEX IF NOT EXISTS idx_spores_content_hash ON spores (content_hash)',
|
|
263
|
-
'CREATE INDEX IF NOT EXISTS idx_spores_observation_type ON spores (observation_type)',
|
|
264
|
-
'CREATE INDEX IF NOT EXISTS idx_plans_content_hash ON plans (content_hash)',
|
|
265
|
-
'CREATE INDEX IF NOT EXISTS idx_graph_edges_source ON graph_edges (source_id, source_type)',
|
|
266
|
-
'CREATE INDEX IF NOT EXISTS idx_graph_edges_target ON graph_edges (target_id, target_type)',
|
|
267
|
-
'CREATE INDEX IF NOT EXISTS idx_entities_type ON entities (type)',
|
|
268
|
-
'CREATE INDEX IF NOT EXISTS idx_skill_candidates_status ON skill_candidates (status)',
|
|
269
|
-
'CREATE INDEX IF NOT EXISTS idx_skill_records_status ON skill_records (status)',
|
|
270
|
-
'CREATE INDEX IF NOT EXISTS idx_skill_records_name ON skill_records (name, machine_id)',
|
|
271
|
-
'CREATE INDEX IF NOT EXISTS idx_skill_usage_skill_id ON skill_usage (skill_id)',
|
|
272
|
-
];
|
|
273
|
-
|
|
274
|
-
const ALL_DDLS = [
|
|
275
|
-
SESSIONS_TABLE,
|
|
276
|
-
PROMPT_BATCHES_TABLE,
|
|
277
|
-
SPORES_TABLE,
|
|
278
|
-
ENTITIES_TABLE,
|
|
279
|
-
GRAPH_EDGES_TABLE,
|
|
280
|
-
ENTITY_MENTIONS_TABLE,
|
|
281
|
-
RESOLUTION_EVENTS_TABLE,
|
|
282
|
-
PLANS_TABLE,
|
|
283
|
-
ARTIFACTS_TABLE,
|
|
284
|
-
DIGEST_EXTRACTS_TABLE,
|
|
285
|
-
SKILL_CANDIDATES_TABLE,
|
|
286
|
-
SKILL_RECORDS_TABLE,
|
|
287
|
-
SKILL_USAGE_TABLE,
|
|
288
|
-
NODES_TABLE,
|
|
289
|
-
TEAM_CONFIG_TABLE,
|
|
290
|
-
];
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Create all D1 tables and indexes. Fully idempotent via IF NOT EXISTS.
|
|
294
|
-
* Includes ALTER TABLE migrations for columns added after initial deployment.
|
|
295
|
-
*/
|
|
296
|
-
export async function initD1Schema(db: D1Database): Promise<void> {
|
|
297
|
-
const statements = [...ALL_DDLS, ...SECONDARY_INDEXES];
|
|
298
|
-
const batch = statements.map((sql) => db.prepare(sql));
|
|
299
|
-
await db.batch(batch);
|
|
300
|
-
|
|
301
|
-
// Migrations for existing tables (safe to re-run — silently ignored if column exists)
|
|
302
|
-
const migrations = [
|
|
303
|
-
'ALTER TABLE skill_usage ADD COLUMN synced_at INTEGER',
|
|
304
|
-
'ALTER TABLE skill_candidates ADD COLUMN approved_at INTEGER',
|
|
305
|
-
'ALTER TABLE skill_candidates ADD COLUMN supersedes TEXT',
|
|
306
|
-
];
|
|
307
|
-
for (const sql of migrations) {
|
|
308
|
-
try {
|
|
309
|
-
await db.prepare(sql).run();
|
|
310
|
-
} catch {
|
|
311
|
-
// Column already exists — expected after first run
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// Backfill approved_at for already-synced historical rows so remote D1
|
|
316
|
-
// mirrors the local SQLite v10 migration semantics. Idempotent via the
|
|
317
|
-
// approved_at IS NULL guard.
|
|
318
|
-
await db.prepare(
|
|
319
|
-
`UPDATE skill_candidates
|
|
320
|
-
SET approved_at = strftime('%s', 'now')
|
|
321
|
-
WHERE approved_at IS NULL
|
|
322
|
-
AND status IN (?, ?)`,
|
|
323
|
-
)
|
|
324
|
-
.bind(CANDIDATE_STATUS.APPROVED, CANDIDATE_STATUS.GENERATED)
|
|
325
|
-
.run();
|
|
326
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared search helpers used by both the REST /search endpoint and MCP myco_search tool.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Embed text via Workers AI (bge-m3) and return the vector.
|
|
7
|
-
*/
|
|
8
|
-
export async function embedText(ai: Ai, text: string): Promise<number[]> {
|
|
9
|
-
const result = await ai.run('@cf/baai/bge-m3', { text: [text] }) as { data: number[][] };
|
|
10
|
-
return result.data[0];
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface HydratedResult {
|
|
14
|
-
id: string;
|
|
15
|
-
machine_id: string;
|
|
16
|
-
type: string;
|
|
17
|
-
score: number;
|
|
18
|
-
data: Record<string, unknown>;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
interface VectorMatch {
|
|
22
|
-
metadata: { table: string; id: string; machine_id: string };
|
|
23
|
-
score: number;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Group Vectorize matches by table and batch-hydrate each group from D1.
|
|
28
|
-
* Queries run in parallel across tables.
|
|
29
|
-
*/
|
|
30
|
-
export async function hydrateVectorMatches(
|
|
31
|
-
db: D1Database,
|
|
32
|
-
matches: VectorMatch[],
|
|
33
|
-
): Promise<HydratedResult[]> {
|
|
34
|
-
// Group by table
|
|
35
|
-
const groups = new Map<string, Array<{ id: string; machine_id: string; score: number }>>();
|
|
36
|
-
for (const match of matches) {
|
|
37
|
-
const { table, id, machine_id } = match.metadata;
|
|
38
|
-
const group = groups.get(table) ?? [];
|
|
39
|
-
group.push({ id, machine_id, score: match.score });
|
|
40
|
-
groups.set(table, group);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Hydrate all tables in parallel
|
|
44
|
-
const hydrationPromises = [...groups.entries()].map(async ([table, items]) => {
|
|
45
|
-
const placeholders = items.map(() => '(?, ?)').join(', ');
|
|
46
|
-
const binds = items.flatMap((item) => [item.id, item.machine_id]);
|
|
47
|
-
const { results: rows } = await db.prepare(
|
|
48
|
-
`SELECT * FROM ${table} WHERE (id, machine_id) IN (VALUES ${placeholders})`,
|
|
49
|
-
).bind(...binds).all();
|
|
50
|
-
|
|
51
|
-
const rowMap = new Map<string, Record<string, unknown>>();
|
|
52
|
-
for (const row of rows as Record<string, unknown>[]) {
|
|
53
|
-
rowMap.set(`${row.id}:${row.machine_id}`, row);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const results: HydratedResult[] = [];
|
|
57
|
-
for (const item of items) {
|
|
58
|
-
const row = rowMap.get(`${item.id}:${item.machine_id}`);
|
|
59
|
-
if (row) {
|
|
60
|
-
results.push({ id: item.id, machine_id: item.machine_id, type: table, score: item.score, data: row });
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return results;
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
const resultArrays = await Promise.all(hydrationPromises);
|
|
67
|
-
const results = resultArrays.flat();
|
|
68
|
-
results.sort((a, b) => b.score - a.score);
|
|
69
|
-
return results;
|
|
70
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "ES2022",
|
|
5
|
-
"moduleResolution": "bundler",
|
|
6
|
-
"lib": ["ES2022"],
|
|
7
|
-
"types": ["@cloudflare/workers-types"],
|
|
8
|
-
"strict": true,
|
|
9
|
-
"skipLibCheck": true,
|
|
10
|
-
"noEmit": true,
|
|
11
|
-
"isolatedModules": true,
|
|
12
|
-
"resolveJsonModule": true,
|
|
13
|
-
"esModuleInterop": true
|
|
14
|
-
},
|
|
15
|
-
"include": ["src/**/*.ts"]
|
|
16
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
name = "myco-team-sync"
|
|
2
|
-
main = "src/index.ts"
|
|
3
|
-
compatibility_date = "2025-03-27"
|
|
4
|
-
# nodejs_compat is required by the agents SDK and @modelcontextprotocol/sdk,
|
|
5
|
-
# which depend on packages that import Node.js built-ins (node:async_hooks,
|
|
6
|
-
# node:diagnostics_channel, node:os, etc.).
|
|
7
|
-
compatibility_flags = [ "nodejs_compat" ]
|
|
8
|
-
|
|
9
|
-
[vars]
|
|
10
|
-
SYNC_PROTOCOL_VERSION = "1"
|
|
11
|
-
|
|
12
|
-
# D1 database — fill database_id after `wrangler d1 create myco-team`
|
|
13
|
-
[[d1_databases]]
|
|
14
|
-
binding = "MYCO_TEAM_DB"
|
|
15
|
-
database_name = "myco-team"
|
|
16
|
-
database_id = "<YOUR_D1_DATABASE_ID>"
|
|
17
|
-
|
|
18
|
-
# Vectorize index — fill index_name after `wrangler vectorize create myco-team-vectors`
|
|
19
|
-
[[vectorize]]
|
|
20
|
-
binding = "MYCO_TEAM_VECTORS"
|
|
21
|
-
index_name = "myco-team-vectors"
|
|
22
|
-
|
|
23
|
-
# KV namespace for runtime secrets (MCP tokens, etc.)
|
|
24
|
-
[[kv_namespaces]]
|
|
25
|
-
binding = "MYCO_SECRETS"
|
|
26
|
-
id = "<YOUR_KV_NAMESPACE_ID>"
|
|
27
|
-
|
|
28
|
-
# Workers AI binding
|
|
29
|
-
[ai]
|
|
30
|
-
binding = "AI"
|