agentmesh-ai 0.2.1 → 0.3.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/GUIDE.md +155 -286
- package/README.md +127 -144
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +41 -22
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/join.d.ts +1 -5
- package/dist/cli/commands/join.d.ts.map +1 -1
- package/dist/cli/commands/join.js +99 -76
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +8 -1
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +31 -10
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +15 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/index.js +3 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cloud/cloud-conversation.d.ts +83 -0
- package/dist/cloud/cloud-conversation.d.ts.map +1 -0
- package/dist/cloud/cloud-conversation.js +357 -0
- package/dist/cloud/cloud-conversation.js.map +1 -0
- package/dist/cloud/index.d.ts +4 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +3 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/supabase-client.d.ts +29 -0
- package/dist/cloud/supabase-client.d.ts.map +1 -0
- package/dist/cloud/supabase-client.js +135 -0
- package/dist/cloud/supabase-client.js.map +1 -0
- package/dist/conversation/server.d.ts.map +1 -1
- package/dist/conversation/server.js +6 -0
- package/dist/conversation/server.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/conversation-tools.d.ts +5 -1
- package/dist/mcp/conversation-tools.d.ts.map +1 -1
- package/dist/mcp/conversation-tools.js +202 -149
- package/dist/mcp/conversation-tools.js.map +1 -1
- package/dist/mcp/index.js +94 -36
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/memory-tools.d.ts +20 -2
- package/dist/mcp/memory-tools.d.ts.map +1 -1
- package/dist/mcp/memory-tools.js +88 -44
- package/dist/mcp/memory-tools.js.map +1 -1
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/merge-view.d.ts.map +1 -1
- package/dist/memory/merge-view.js +5 -4
- package/dist/memory/merge-view.js.map +1 -1
- package/dist/memory/reader.js +2 -2
- package/dist/memory/reader.js.map +1 -1
- package/dist/memory/schema.d.ts +3 -0
- package/dist/memory/schema.d.ts.map +1 -1
- package/dist/memory/schema.js +1 -0
- package/dist/memory/schema.js.map +1 -1
- package/dist/memory/types.d.ts +1 -0
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/write-utils.d.ts +30 -0
- package/dist/memory/write-utils.d.ts.map +1 -0
- package/dist/memory/write-utils.js +98 -0
- package/dist/memory/write-utils.js.map +1 -0
- package/dist/memory/writer.d.ts.map +1 -1
- package/dist/memory/writer.js +21 -84
- package/dist/memory/writer.js.map +1 -1
- package/dist/utils/id.d.ts +2 -0
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +4 -0
- package/dist/utils/id.js.map +1 -1
- package/dist/utils/notify.d.ts +2 -0
- package/dist/utils/notify.d.ts.map +1 -0
- package/dist/utils/notify.js +50 -0
- package/dist/utils/notify.js.map +1 -0
- package/package.json +5 -4
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getEffectiveStatus } from './write-utils.js';
|
|
1
2
|
/** Merge all agent memories into a single sorted list, with optional filtering. */
|
|
2
3
|
export function mergeMemories(memories, options) {
|
|
3
4
|
let entries = [];
|
|
@@ -38,11 +39,11 @@ export function mergeMemories(memories, options) {
|
|
|
38
39
|
function entryScore(entry, now, recentWindow) {
|
|
39
40
|
let score = 0;
|
|
40
41
|
// Status weight: protected > proposal > auto
|
|
41
|
-
const status =
|
|
42
|
+
const status = getEffectiveStatus(entry);
|
|
42
43
|
if (status === 'protected')
|
|
43
|
-
score +=
|
|
44
|
+
score += 30;
|
|
44
45
|
else if (status === 'proposal')
|
|
45
|
-
score +=
|
|
46
|
+
score += 15;
|
|
46
47
|
// Recency weight: entries within last 7 days get a boost
|
|
47
48
|
const entryTime = new Date(entry.date).getTime();
|
|
48
49
|
if (now - entryTime < recentWindow) {
|
|
@@ -60,7 +61,7 @@ export function formatMergedMemories(entries, totalBeforeLimit) {
|
|
|
60
61
|
const lines = [];
|
|
61
62
|
lines.push(`# Shared Memory (${entries.length} entries)\n`);
|
|
62
63
|
for (const entry of entries) {
|
|
63
|
-
const effectiveStatus =
|
|
64
|
+
const effectiveStatus = getEffectiveStatus(entry);
|
|
64
65
|
const badge = effectiveStatus === 'protected' ? ' 🔒' : effectiveStatus === 'proposal' ? ' 📋' : '';
|
|
65
66
|
lines.push(`## ${entry.topic}${badge}`);
|
|
66
67
|
lines.push(`Agent: ${entry.agent} (${entry.agent_role})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-view.js","sourceRoot":"","sources":["../../src/memory/merge-view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"merge-view.js","sourceRoot":"","sources":["../../src/memory/merge-view.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/reader.js
CHANGED
|
@@ -12,7 +12,7 @@ export async function readHubConfig(agentHubDir) {
|
|
|
12
12
|
return null;
|
|
13
13
|
const result = hubConfigSchema.safeParse(raw);
|
|
14
14
|
if (!result.success) {
|
|
15
|
-
|
|
15
|
+
process.stderr.write('[agentmesh] hub.yaml has invalid format, using defaults\n');
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
18
|
return result.data;
|
|
@@ -25,7 +25,7 @@ export async function readAgentMemory(filePath) {
|
|
|
25
25
|
const result = agentMemoryFileSchema.safeParse(raw);
|
|
26
26
|
if (!result.success) {
|
|
27
27
|
// Tolerate parse errors - skip this file rather than crash
|
|
28
|
-
|
|
28
|
+
process.stderr.write(`[agentmesh] ${filePath} has invalid format, skipping\n`);
|
|
29
29
|
return null;
|
|
30
30
|
}
|
|
31
31
|
return result.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/memory/reader.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrE,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAU,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/memory/reader.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrE,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAU,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAU,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,2DAA2D;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,iCAAiC,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAE9C,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/E,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/memory/schema.d.ts
CHANGED
|
@@ -114,6 +114,7 @@ export declare const hubConfigSchema: z.ZodObject<{
|
|
|
114
114
|
project: z.ZodString;
|
|
115
115
|
created: z.ZodString;
|
|
116
116
|
version: z.ZodDefault<z.ZodString>;
|
|
117
|
+
team_id: z.ZodOptional<z.ZodString>;
|
|
117
118
|
agents: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
118
119
|
id: z.ZodString;
|
|
119
120
|
display_name: z.ZodString;
|
|
@@ -140,10 +141,12 @@ export declare const hubConfigSchema: z.ZodObject<{
|
|
|
140
141
|
id: string;
|
|
141
142
|
display_name: string;
|
|
142
143
|
}[];
|
|
144
|
+
team_id?: string | undefined;
|
|
143
145
|
}, {
|
|
144
146
|
project: string;
|
|
145
147
|
created: string;
|
|
146
148
|
version?: string | undefined;
|
|
149
|
+
team_id?: string | undefined;
|
|
147
150
|
agents?: {
|
|
148
151
|
role: string;
|
|
149
152
|
tool: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/memory/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMhC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAK1B,CAAC;AAEH,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/memory/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMhC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAK1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM1B,CAAC"}
|
package/dist/memory/schema.js
CHANGED
|
@@ -29,6 +29,7 @@ export const hubConfigSchema = z.object({
|
|
|
29
29
|
project: z.string().min(1),
|
|
30
30
|
created: z.string(),
|
|
31
31
|
version: z.string().default('1.0'),
|
|
32
|
+
team_id: z.string().optional(),
|
|
32
33
|
agents: z.array(agentInfoSchema).default([]),
|
|
33
34
|
});
|
|
34
35
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/memory/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,kBAAkB;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/memory/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,kBAAkB;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC"}
|
package/dist/memory/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAE7D,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,sCAAsC;AACtC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CAEpB;AAED,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAE7D,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,sCAAsC;AACtC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oCAAoC;AACpC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CAEpB;AAED,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { AgentMemoryFile, MemoryEntry, MemoryStatus, WriteMemoryOptions, WriteResult } from './types.js';
|
|
2
|
+
/** Resolve the effective status of a memory entry (handles backward compat). */
|
|
3
|
+
export declare function getEffectiveStatus(entry: {
|
|
4
|
+
status?: MemoryStatus;
|
|
5
|
+
protected?: boolean;
|
|
6
|
+
}): MemoryStatus;
|
|
7
|
+
/**
|
|
8
|
+
* Check if writing to this topic is blocked by protection rules.
|
|
9
|
+
* Returns a blocked WriteResult if the topic is protected by another agent,
|
|
10
|
+
* and an optional proposal warning if someone has a pending proposal.
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkProtection(allMemories: AgentMemoryFile[], agentId: string, topic: string): {
|
|
13
|
+
blocked?: WriteResult;
|
|
14
|
+
proposalWarning?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Validate content for secrets. Returns a blocked WriteResult if secrets are found.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateContent(content: string): {
|
|
20
|
+
blocked?: WriteResult;
|
|
21
|
+
warnings: string[];
|
|
22
|
+
};
|
|
23
|
+
/** Build a new MemoryEntry from write options. */
|
|
24
|
+
export declare function buildMemoryEntry(options: WriteMemoryOptions, now: string): MemoryEntry;
|
|
25
|
+
/**
|
|
26
|
+
* Upsert a new entry into an entries array (update by topic or append).
|
|
27
|
+
* Preserves status/owner from old entries when not explicitly set.
|
|
28
|
+
*/
|
|
29
|
+
export declare function upsertEntry(entries: MemoryEntry[], newEntry: MemoryEntry, options: WriteMemoryOptions): void;
|
|
30
|
+
//# sourceMappingURL=write-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-utils.d.ts","sourceRoot":"","sources":["../../src/memory/write-utils.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9G,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,YAAY,CAEtG;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,eAAe,EAAE,EAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ;IAAE,OAAO,CAAC,EAAE,WAAW,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CA8BrD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,OAAO,CAAC,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAa9F;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAatF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,EAAE,EACtB,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAiBN"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared write utilities for memory operations.
|
|
3
|
+
*
|
|
4
|
+
* Used by both local writer (writer.ts) and cloud writer (supabase-client.ts)
|
|
5
|
+
* to eliminate duplicated protection checks, entry construction, and status logic.
|
|
6
|
+
*/
|
|
7
|
+
import { scanForSecrets } from './secret-scanner.js';
|
|
8
|
+
/** Resolve the effective status of a memory entry (handles backward compat). */
|
|
9
|
+
export function getEffectiveStatus(entry) {
|
|
10
|
+
return entry.status ?? (entry.protected ? 'protected' : 'auto');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Check if writing to this topic is blocked by protection rules.
|
|
14
|
+
* Returns a blocked WriteResult if the topic is protected by another agent,
|
|
15
|
+
* and an optional proposal warning if someone has a pending proposal.
|
|
16
|
+
*/
|
|
17
|
+
export function checkProtection(allMemories, agentId, topic) {
|
|
18
|
+
for (const memory of allMemories) {
|
|
19
|
+
if (memory.agent === agentId)
|
|
20
|
+
continue;
|
|
21
|
+
const matchingEntry = memory.entries.find(e => e.topic.toLowerCase() === topic.toLowerCase());
|
|
22
|
+
if (!matchingEntry)
|
|
23
|
+
continue;
|
|
24
|
+
const effectiveStatus = getEffectiveStatus(matchingEntry);
|
|
25
|
+
if (effectiveStatus === 'protected') {
|
|
26
|
+
const owner = matchingEntry.owner ?? memory.agent;
|
|
27
|
+
if (owner !== agentId) {
|
|
28
|
+
return {
|
|
29
|
+
blocked: {
|
|
30
|
+
success: false,
|
|
31
|
+
blocked: true,
|
|
32
|
+
reason: `Topic "${topic}" is protected (locked after a team decision) by ${memory.agent}${matchingEntry.owner ? ` (owner: ${matchingEntry.owner})` : ''}. Protected topics cannot be overwritten by other agents.\n\nTo propose changes, use the discuss tool to start a conversation about revising this decision. Or record your thoughts under a different topic, e.g. "${topic} — ${agentId} notes".`,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else if (effectiveStatus === 'proposal') {
|
|
38
|
+
return {
|
|
39
|
+
proposalWarning: `Note: ${memory.agent} has a proposal on "${matchingEntry.topic}". Your entry will coexist, but consider discussing before overriding.`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate content for secrets. Returns a blocked WriteResult if secrets are found.
|
|
47
|
+
*/
|
|
48
|
+
export function validateContent(content) {
|
|
49
|
+
const scanResult = scanForSecrets(content);
|
|
50
|
+
if (scanResult.blocked) {
|
|
51
|
+
return {
|
|
52
|
+
blocked: {
|
|
53
|
+
success: false,
|
|
54
|
+
blocked: true,
|
|
55
|
+
reason: `Content contains sensitive information that must not be shared:\n${scanResult.warnings.join('\n')}\n\nRemove the sensitive data and try again.`,
|
|
56
|
+
},
|
|
57
|
+
warnings: scanResult.warnings,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return { warnings: scanResult.warnings };
|
|
61
|
+
}
|
|
62
|
+
/** Build a new MemoryEntry from write options. */
|
|
63
|
+
export function buildMemoryEntry(options, now) {
|
|
64
|
+
const resolvedStatus = getEffectiveStatus({ status: options.status, protected: options.protected });
|
|
65
|
+
return {
|
|
66
|
+
topic: options.topic,
|
|
67
|
+
tags: options.tags,
|
|
68
|
+
content: options.content,
|
|
69
|
+
date: now,
|
|
70
|
+
status: resolvedStatus,
|
|
71
|
+
...(options.decided_with ? { decided_with: options.decided_with } : {}),
|
|
72
|
+
...(resolvedStatus === 'protected' ? { protected: true } : {}),
|
|
73
|
+
...(options.owner ? { owner: options.owner } : {}),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Upsert a new entry into an entries array (update by topic or append).
|
|
78
|
+
* Preserves status/owner from old entries when not explicitly set.
|
|
79
|
+
*/
|
|
80
|
+
export function upsertEntry(entries, newEntry, options) {
|
|
81
|
+
const existingIndex = entries.findIndex(e => e.topic.toLowerCase() === newEntry.topic.toLowerCase());
|
|
82
|
+
if (existingIndex >= 0) {
|
|
83
|
+
const oldEntry = entries[existingIndex];
|
|
84
|
+
const oldStatus = getEffectiveStatus(oldEntry);
|
|
85
|
+
if (!options.status && !options.protected && (oldStatus === 'protected' || oldStatus === 'proposal')) {
|
|
86
|
+
newEntry.status = oldStatus;
|
|
87
|
+
if (oldStatus === 'protected')
|
|
88
|
+
newEntry.protected = true;
|
|
89
|
+
if (oldEntry.owner)
|
|
90
|
+
newEntry.owner = oldEntry.owner;
|
|
91
|
+
}
|
|
92
|
+
entries[existingIndex] = newEntry;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
entries.push(newEntry);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=write-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-utils.js","sourceRoot":"","sources":["../../src/memory/write-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/memory/writer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAmB,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnF,4DAA4D;AAC5D,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/memory/writer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAmB,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnF,4DAA4D;AAC5D,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CA2CtB"}
|
package/dist/memory/writer.js
CHANGED
|
@@ -5,105 +5,42 @@ import { join } from 'node:path';
|
|
|
5
5
|
import { readYaml, writeYaml } from '../utils/yaml.js';
|
|
6
6
|
import { agentMemoryFileSchema } from './schema.js';
|
|
7
7
|
import { readAllAgentMemories } from './reader.js';
|
|
8
|
-
import {
|
|
8
|
+
import { checkProtection, validateContent, buildMemoryEntry, upsertEntry } from './write-utils.js';
|
|
9
9
|
/** Write a new memory entry to the current agent's file. */
|
|
10
10
|
export async function writeMemoryEntry(agentHubDir, agentId, agentRole, agentTool, options) {
|
|
11
|
-
// Check
|
|
11
|
+
// Check protection rules
|
|
12
12
|
const allMemories = await readAllAgentMemories(agentHubDir);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const effectiveStatus = matchingEntry.status ?? (matchingEntry.protected ? 'protected' : 'auto');
|
|
22
|
-
if (effectiveStatus === 'protected') {
|
|
23
|
-
const owner = matchingEntry.owner ?? memory.agent;
|
|
24
|
-
if (owner !== agentId) {
|
|
25
|
-
return {
|
|
26
|
-
success: false,
|
|
27
|
-
blocked: true,
|
|
28
|
-
reason: `This topic is protected by ${memory.agent}${matchingEntry.owner ? ` (owner: ${matchingEntry.owner})` : ''}. Record your thoughts under a different topic name, e.g. "${options.topic} — ${agentId} notes".`,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
else if (effectiveStatus === 'proposal') {
|
|
33
|
-
proposalWarning = `Note: ${memory.agent} has a proposal on "${matchingEntry.topic}". Your entry will coexist, but consider discussing before overriding.`;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// Scan for sensitive information before writing
|
|
37
|
-
const scanResult = scanForSecrets(options.content);
|
|
38
|
-
if (scanResult.blocked) {
|
|
39
|
-
return {
|
|
40
|
-
success: false,
|
|
41
|
-
blocked: true,
|
|
42
|
-
reason: `Content contains sensitive information that must not be shared:\n${scanResult.warnings.join('\n')}\n\nRemove the sensitive data and try again.`,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
13
|
+
const { blocked, proposalWarning } = checkProtection(allMemories, agentId, options.topic);
|
|
14
|
+
if (blocked)
|
|
15
|
+
return blocked;
|
|
16
|
+
// Scan for secrets
|
|
17
|
+
const { blocked: secretBlocked, warnings } = validateContent(options.content);
|
|
18
|
+
if (secretBlocked)
|
|
19
|
+
return secretBlocked;
|
|
20
|
+
// Read or create agent's memory file
|
|
45
21
|
const filePath = join(agentHubDir, 'memory', `${agentId}.yaml`);
|
|
46
|
-
// Read existing file or create new one
|
|
47
|
-
let memoryFile;
|
|
48
22
|
const existing = await readYaml(filePath);
|
|
23
|
+
let memoryFile;
|
|
49
24
|
if (existing) {
|
|
50
25
|
const parsed = agentMemoryFileSchema.safeParse(existing);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
memoryFile = {
|
|
56
|
-
agent: agentId,
|
|
57
|
-
role: agentRole,
|
|
58
|
-
tool: agentTool,
|
|
59
|
-
last_active: new Date().toISOString(),
|
|
60
|
-
entries: [],
|
|
61
|
-
};
|
|
62
|
-
}
|
|
26
|
+
memoryFile = parsed.success ? parsed.data : {
|
|
27
|
+
agent: agentId, role: agentRole, tool: agentTool,
|
|
28
|
+
last_active: new Date().toISOString(), entries: [],
|
|
29
|
+
};
|
|
63
30
|
}
|
|
64
31
|
else {
|
|
65
32
|
memoryFile = {
|
|
66
|
-
agent: agentId,
|
|
67
|
-
|
|
68
|
-
tool: agentTool,
|
|
69
|
-
last_active: new Date().toISOString(),
|
|
70
|
-
entries: [],
|
|
33
|
+
agent: agentId, role: agentRole, tool: agentTool,
|
|
34
|
+
last_active: new Date().toISOString(), entries: [],
|
|
71
35
|
};
|
|
72
36
|
}
|
|
37
|
+
// Build and upsert entry
|
|
73
38
|
const now = new Date().toISOString();
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
// Resolve status: explicit status > legacy protected flag > default 'auto'
|
|
77
|
-
const resolvedStatus = options.status ?? (options.protected ? 'protected' : 'auto');
|
|
78
|
-
const newEntry = {
|
|
79
|
-
topic: options.topic,
|
|
80
|
-
tags: options.tags,
|
|
81
|
-
content: options.content,
|
|
82
|
-
date: now,
|
|
83
|
-
status: resolvedStatus,
|
|
84
|
-
...(options.decided_with ? { decided_with: options.decided_with } : {}),
|
|
85
|
-
...(resolvedStatus === 'protected' ? { protected: true } : {}), // backward compat
|
|
86
|
-
...(options.owner ? { owner: options.owner } : {}),
|
|
87
|
-
};
|
|
88
|
-
if (existingIndex >= 0) {
|
|
89
|
-
// Preserve status/protected/owner from old entry if not explicitly set
|
|
90
|
-
const oldEntry = memoryFile.entries[existingIndex];
|
|
91
|
-
const oldStatus = oldEntry.status ?? (oldEntry.protected ? 'protected' : 'auto');
|
|
92
|
-
if (!options.status && !options.protected && (oldStatus === 'protected' || oldStatus === 'proposal')) {
|
|
93
|
-
newEntry.status = oldStatus;
|
|
94
|
-
if (oldStatus === 'protected')
|
|
95
|
-
newEntry.protected = true;
|
|
96
|
-
if (oldEntry.owner)
|
|
97
|
-
newEntry.owner = oldEntry.owner;
|
|
98
|
-
}
|
|
99
|
-
memoryFile.entries[existingIndex] = newEntry;
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
memoryFile.entries.push(newEntry);
|
|
103
|
-
}
|
|
39
|
+
const newEntry = buildMemoryEntry(options, now);
|
|
40
|
+
upsertEntry(memoryFile.entries, newEntry, options);
|
|
104
41
|
memoryFile.last_active = now;
|
|
105
42
|
await writeYaml(filePath, memoryFile);
|
|
106
|
-
const allWarnings = [...
|
|
43
|
+
const allWarnings = [...warnings];
|
|
107
44
|
if (proposalWarning)
|
|
108
45
|
allWarnings.push(proposalWarning);
|
|
109
46
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/memory/writer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/memory/writer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGnG,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,OAAe,EACf,SAAiB,EACjB,SAAiB,EACjB,OAA2B;IAE3B,yBAAyB;IACzB,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1F,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,mBAAmB;IACnB,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9E,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,qCAAqC;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAU,QAAQ,CAAC,CAAC;IACnD,IAAI,UAA2B,CAAC;IAEhC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzD,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;YAChD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE;SACnD,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,UAAU,GAAG;YACX,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;YAChD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE;SACnD,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAChD,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,UAAU,CAAC,WAAW,GAAG,GAAG,CAAC;IAE7B,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEtC,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,IAAI,eAAe;QAAE,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEvD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC"}
|
package/dist/utils/id.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** Generate a unique team ID (short, human-friendly). */
|
|
2
|
+
export declare function generateTeamId(): string;
|
|
1
3
|
/** Generate a slug-style agent ID from display name and tool. */
|
|
2
4
|
export declare function generateAgentId(displayName: string, tool: string): string;
|
|
3
5
|
//# sourceMappingURL=id.d.ts.map
|
package/dist/utils/id.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAKA,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASzE"}
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAKA,yDAAyD;AACzD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASzE"}
|
package/dist/utils/id.js
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
* Agent ID generation utilities.
|
|
3
3
|
*/
|
|
4
4
|
import { randomBytes } from 'node:crypto';
|
|
5
|
+
/** Generate a unique team ID (short, human-friendly). */
|
|
6
|
+
export function generateTeamId() {
|
|
7
|
+
return `team-${randomBytes(4).toString('hex')}`;
|
|
8
|
+
}
|
|
5
9
|
/** Generate a slug-style agent ID from display name and tool. */
|
|
6
10
|
export function generateAgentId(displayName, tool) {
|
|
7
11
|
const namePart = slugify(displayName);
|
package/dist/utils/id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,IAAY;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B,qFAAqF;IACrF,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,QAAQ,IAAI,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAEtE,OAAO,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,mFAAmF;AACnF,SAAS,OAAO,CAAC,GAAW;IAC1B,OAAO,GAAG;SACP,WAAW,EAAE;SACb,IAAI,EAAE;QACP,2DAA2D;SAC1D,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAG,0CAA0C;SACpE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAO,4BAA4B;SACtD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAI,gCAAgC;AAC/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,yDAAyD;AACzD,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,IAAY;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B,qFAAqF;IACrF,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,QAAQ,IAAI,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAEtE,OAAO,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,mFAAmF;AACnF,SAAS,OAAO,CAAC,GAAW;IAC1B,OAAO,GAAG;SACP,WAAW,EAAE;SACb,IAAI,EAAE;QACP,2DAA2D;SAC1D,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAG,0CAA0C;SACpE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAO,4BAA4B;SACtD,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAI,gCAAgC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/utils/notify.ts"],"names":[],"mappings":"AAWA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CA+BzE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Desktop notification utility.
|
|
3
|
+
*
|
|
4
|
+
* Shows a native OS notification without any extra dependencies.
|
|
5
|
+
* Windows: PowerShell toast notification
|
|
6
|
+
* macOS: osascript
|
|
7
|
+
* Linux: notify-send
|
|
8
|
+
*/
|
|
9
|
+
import { exec } from 'node:child_process';
|
|
10
|
+
import { platform } from 'node:os';
|
|
11
|
+
export function showDesktopNotification(title, body) {
|
|
12
|
+
if (process.env.AGENTHUB_NOTIFY === 'false')
|
|
13
|
+
return;
|
|
14
|
+
const os = platform();
|
|
15
|
+
try {
|
|
16
|
+
if (os === 'win32') {
|
|
17
|
+
// Windows: use PowerShell to show a balloon tip notification
|
|
18
|
+
const ps = `
|
|
19
|
+
Add-Type -AssemblyName System.Windows.Forms;
|
|
20
|
+
$n = New-Object System.Windows.Forms.NotifyIcon;
|
|
21
|
+
$n.Icon = [System.Drawing.SystemIcons]::Information;
|
|
22
|
+
$n.BalloonTipTitle = '${escapePS(title)}';
|
|
23
|
+
$n.BalloonTipText = '${escapePS(body)}';
|
|
24
|
+
$n.Visible = $true;
|
|
25
|
+
$n.ShowBalloonTip(8000);
|
|
26
|
+
Start-Sleep -Seconds 9;
|
|
27
|
+
$n.Dispose();
|
|
28
|
+
`.replace(/\n\s*/g, ' ');
|
|
29
|
+
exec(`powershell -NoProfile -Command "${ps}"`, { windowsHide: true });
|
|
30
|
+
}
|
|
31
|
+
else if (os === 'darwin') {
|
|
32
|
+
// macOS: osascript
|
|
33
|
+
exec(`osascript -e 'display notification "${escapeShell(body)}" with title "${escapeShell(title)}"'`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// Linux: notify-send
|
|
37
|
+
exec(`notify-send "${escapeShell(title)}" "${escapeShell(body)}"`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Notification is best-effort, never crash
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function escapePS(str) {
|
|
45
|
+
return str.replace(/'/g, "''").replace(/`/g, '``').replace(/\$/g, '`$');
|
|
46
|
+
}
|
|
47
|
+
function escapeShell(str) {
|
|
48
|
+
return str.replace(/"/g, '\\"').replace(/`/g, '\\`');
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=notify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/utils/notify.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,UAAU,uBAAuB,CAAC,KAAa,EAAE,IAAY;IACjE,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO;QAAE,OAAO;IAEpD,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,IAAI,CAAC;QACH,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YACnB,6DAA6D;YAC7D,MAAM,EAAE,GAAG;;;;gCAIe,QAAQ,CAAC,KAAK,CAAC;+BAChB,QAAQ,CAAC,IAAI,CAAC;;;;;OAKtC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAEzB,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,mBAAmB;YACnB,IAAI,CAAC,uCAAuC,WAAW,CAAC,IAAI,CAAC,iBAAiB,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxG,CAAC;aAAM,CAAC;YACN,qBAAqB;YACrB,IAAI,CAAC,gBAAgB,WAAW,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentmesh-ai",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"description": "Let your AI agents share knowledge and talk to each other",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -43,12 +43,13 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
46
|
+
"@supabase/supabase-js": "^2.101.1",
|
|
47
|
+
"chalk": "^5.4.0",
|
|
46
48
|
"commander": "^13.0.0",
|
|
47
49
|
"inquirer": "^12.0.0",
|
|
48
50
|
"ws": "^8.18.0",
|
|
49
51
|
"yaml": "^2.7.0",
|
|
50
|
-
"zod": "^3.25.0"
|
|
51
|
-
"chalk": "^5.4.0"
|
|
52
|
+
"zod": "^3.25.0"
|
|
52
53
|
},
|
|
53
54
|
"devDependencies": {
|
|
54
55
|
"@types/node": "^22.0.0",
|