dot-agents 0.5.0 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +239 -122
  2. package/dist/cli/commands/channel.d.ts +19 -0
  3. package/dist/cli/commands/channel.d.ts.map +1 -1
  4. package/dist/cli/commands/channel.js +220 -13
  5. package/dist/cli/commands/channel.js.map +1 -1
  6. package/dist/cli/commands/check.d.ts.map +1 -1
  7. package/dist/cli/commands/check.js +61 -1
  8. package/dist/cli/commands/check.js.map +1 -1
  9. package/dist/cli/commands/index.d.ts +2 -0
  10. package/dist/cli/commands/index.d.ts.map +1 -1
  11. package/dist/cli/commands/index.js +2 -0
  12. package/dist/cli/commands/index.js.map +1 -1
  13. package/dist/cli/commands/personas.d.ts +3 -0
  14. package/dist/cli/commands/personas.d.ts.map +1 -0
  15. package/dist/cli/commands/personas.js +402 -0
  16. package/dist/cli/commands/personas.js.map +1 -0
  17. package/dist/cli/commands/projects.d.ts +3 -0
  18. package/dist/cli/commands/projects.d.ts.map +1 -0
  19. package/dist/cli/commands/projects.js +138 -0
  20. package/dist/cli/commands/projects.js.map +1 -0
  21. package/dist/cli/commands/run.d.ts.map +1 -1
  22. package/dist/cli/commands/run.js +4 -5
  23. package/dist/cli/commands/run.js.map +1 -1
  24. package/dist/cli/index.js +3 -11
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/lib/runner.d.ts +2 -0
  27. package/dist/cli/lib/runner.d.ts.map +1 -1
  28. package/dist/cli/lib/runner.js +67 -8
  29. package/dist/cli/lib/runner.js.map +1 -1
  30. package/dist/daemon/api/channels.d.ts +6 -0
  31. package/dist/daemon/api/channels.d.ts.map +1 -0
  32. package/dist/daemon/api/channels.js +143 -0
  33. package/dist/daemon/api/channels.js.map +1 -0
  34. package/dist/daemon/api/server.d.ts.map +1 -1
  35. package/dist/daemon/api/server.js +56 -0
  36. package/dist/daemon/api/server.js.map +1 -1
  37. package/dist/daemon/daemon.d.ts +28 -3
  38. package/dist/daemon/daemon.d.ts.map +1 -1
  39. package/dist/daemon/daemon.js +142 -26
  40. package/dist/daemon/daemon.js.map +1 -1
  41. package/dist/daemon/lib/executor.d.ts +0 -4
  42. package/dist/daemon/lib/executor.d.ts.map +1 -1
  43. package/dist/daemon/lib/executor.js +48 -135
  44. package/dist/daemon/lib/executor.js.map +1 -1
  45. package/dist/daemon/lib/index.d.ts +1 -0
  46. package/dist/daemon/lib/index.d.ts.map +1 -1
  47. package/dist/daemon/lib/index.js +1 -0
  48. package/dist/daemon/lib/index.js.map +1 -1
  49. package/dist/daemon/lib/safeguards.d.ts +68 -0
  50. package/dist/daemon/lib/safeguards.d.ts.map +1 -0
  51. package/dist/daemon/lib/safeguards.js +135 -0
  52. package/dist/daemon/lib/safeguards.js.map +1 -0
  53. package/dist/daemon/lib/watcher.d.ts.map +1 -1
  54. package/dist/daemon/lib/watcher.js +48 -8
  55. package/dist/daemon/lib/watcher.js.map +1 -1
  56. package/dist/daemon/web/app.js +433 -0
  57. package/dist/daemon/web/index.html +68 -0
  58. package/dist/daemon/web/styles.css +452 -0
  59. package/dist/lib/channel.d.ts +53 -1
  60. package/dist/lib/channel.d.ts.map +1 -1
  61. package/dist/lib/channel.js +221 -30
  62. package/dist/lib/channel.js.map +1 -1
  63. package/dist/lib/daemon-status.d.ts +26 -0
  64. package/dist/lib/daemon-status.d.ts.map +1 -0
  65. package/dist/lib/daemon-status.js +64 -0
  66. package/dist/lib/daemon-status.js.map +1 -0
  67. package/dist/lib/environment.d.ts +88 -0
  68. package/dist/lib/environment.d.ts.map +1 -0
  69. package/dist/lib/environment.js +238 -0
  70. package/dist/lib/environment.js.map +1 -0
  71. package/dist/lib/frontmatter.d.ts +8 -0
  72. package/dist/lib/frontmatter.d.ts.map +1 -1
  73. package/dist/lib/frontmatter.js +16 -3
  74. package/dist/lib/frontmatter.js.map +1 -1
  75. package/dist/lib/index.d.ts +7 -0
  76. package/dist/lib/index.d.ts.map +1 -1
  77. package/dist/lib/index.js +7 -0
  78. package/dist/lib/index.js.map +1 -1
  79. package/dist/lib/invoke.d.ts +31 -0
  80. package/dist/lib/invoke.d.ts.map +1 -0
  81. package/dist/lib/invoke.js +170 -0
  82. package/dist/lib/invoke.js.map +1 -0
  83. package/dist/lib/persona.d.ts +22 -1
  84. package/dist/lib/persona.d.ts.map +1 -1
  85. package/dist/lib/persona.js +176 -31
  86. package/dist/lib/persona.js.map +1 -1
  87. package/dist/lib/processor.d.ts +58 -0
  88. package/dist/lib/processor.d.ts.map +1 -0
  89. package/dist/lib/processor.js +149 -0
  90. package/dist/lib/processor.js.map +1 -0
  91. package/dist/lib/registry.d.ts +109 -0
  92. package/dist/lib/registry.d.ts.map +1 -0
  93. package/dist/lib/registry.js +192 -0
  94. package/dist/lib/registry.js.map +1 -0
  95. package/dist/lib/session-thread.d.ts +75 -0
  96. package/dist/lib/session-thread.d.ts.map +1 -0
  97. package/dist/lib/session-thread.js +132 -0
  98. package/dist/lib/session-thread.js.map +1 -0
  99. package/dist/lib/session.d.ts +150 -0
  100. package/dist/lib/session.d.ts.map +1 -0
  101. package/dist/lib/session.js +183 -0
  102. package/dist/lib/session.js.map +1 -0
  103. package/dist/lib/types/channel.d.ts +4 -0
  104. package/dist/lib/types/channel.d.ts.map +1 -1
  105. package/dist/lib/types/persona.d.ts +49 -6
  106. package/dist/lib/types/persona.d.ts.map +1 -1
  107. package/dist/lib/validation/persona.d.ts.map +1 -1
  108. package/dist/lib/validation/persona.js +41 -4
  109. package/dist/lib/validation/persona.js.map +1 -1
  110. package/internal/personas/_base/PERSONA.md +222 -39
  111. package/internal/skills/channels/list/SKILL.md +76 -0
  112. package/package.json +15 -5
@@ -1,8 +1,10 @@
1
- import { readdir, stat } from "node:fs/promises";
1
+ import { readdir, stat, readFile } from "node:fs/promises";
2
2
  import { join, dirname, relative } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { loadMarkdownFile } from "./frontmatter.js";
5
5
  const PERSONA_FILENAME = "PERSONA.md";
6
+ const MCP_FILENAME = "mcp.json";
7
+ const HOOKS_FILENAME = "hooks.json";
6
8
  /**
7
9
  * Get the path to internal personas bundled with the package.
8
10
  * Resolves relative to this module's location.
@@ -88,6 +90,73 @@ async function hasPersonaFile(dirPath) {
88
90
  return false;
89
91
  }
90
92
  }
93
+ /**
94
+ * Load mcp.json from a persona directory if it exists
95
+ */
96
+ async function loadMcpConfig(personaPath) {
97
+ try {
98
+ const filePath = join(personaPath, MCP_FILENAME);
99
+ const content = await readFile(filePath, "utf-8");
100
+ return JSON.parse(content);
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ }
106
+ /**
107
+ * Merge MCP configs (child overrides parent for same server name)
108
+ */
109
+ function mergeMcpConfigs(parent, child) {
110
+ if (!parent && !child)
111
+ return null;
112
+ if (!parent)
113
+ return child;
114
+ if (!child)
115
+ return parent;
116
+ return {
117
+ mcpServers: {
118
+ ...parent.mcpServers,
119
+ ...child.mcpServers,
120
+ },
121
+ };
122
+ }
123
+ /**
124
+ * Load hooks.json from a persona directory if it exists
125
+ */
126
+ async function loadHooksConfig(personaPath) {
127
+ try {
128
+ const filePath = join(personaPath, HOOKS_FILENAME);
129
+ const content = await readFile(filePath, "utf-8");
130
+ return JSON.parse(content);
131
+ }
132
+ catch {
133
+ return null;
134
+ }
135
+ }
136
+ /**
137
+ * Merge hooks configs (child hooks are appended to parent hooks for each event)
138
+ */
139
+ function mergeHooksConfigs(parent, child) {
140
+ if (!parent && !child)
141
+ return null;
142
+ if (!parent)
143
+ return child;
144
+ if (!child)
145
+ return parent;
146
+ const merged = {};
147
+ // Get all hook event types from both configs
148
+ const allEvents = new Set([
149
+ ...Object.keys(parent),
150
+ ...Object.keys(child),
151
+ ]);
152
+ for (const event of allEvents) {
153
+ const parentHooks = parent[event] ?? [];
154
+ const childHooks = child[event] ?? [];
155
+ // Child hooks are appended (run after parent hooks)
156
+ merged[event] = [...parentHooks, ...childHooks];
157
+ }
158
+ return merged;
159
+ }
91
160
  /**
92
161
  * Load a single persona file
93
162
  */
@@ -118,6 +187,40 @@ export async function loadInternalBase() {
118
187
  }
119
188
  return null;
120
189
  }
190
+ /**
191
+ * Load the project's _project persona if it exists
192
+ * Returns null if not found (graceful degradation)
193
+ * @deprecated Use loadRootPersona() instead
194
+ */
195
+ export async function loadProjectBase(personasRoot) {
196
+ const projectPath = join(personasRoot, "_project");
197
+ if (await hasPersonaFile(projectPath)) {
198
+ return await loadPersona(projectPath);
199
+ }
200
+ return null;
201
+ }
202
+ /**
203
+ * Load the root persona from .agents/PERSONA.md if it exists
204
+ * Falls back to _project for backwards compatibility
205
+ * Returns null if neither found
206
+ */
207
+ export async function loadRootPersona(agentsRoot) {
208
+ // First try .agents/PERSONA.md (new pattern)
209
+ const rootPath = agentsRoot;
210
+ if (await hasPersonaFile(rootPath)) {
211
+ const persona = await loadPersona(rootPath);
212
+ // Override name to 'root' for consistency
213
+ return { ...persona, name: "root" };
214
+ }
215
+ // Fall back to .agents/personas/_project (legacy pattern)
216
+ const personasRoot = join(agentsRoot, "personas");
217
+ const projectPath = join(personasRoot, "_project");
218
+ if (await hasPersonaFile(projectPath)) {
219
+ const persona = await loadPersona(projectPath);
220
+ return persona;
221
+ }
222
+ return null;
223
+ }
121
224
  /**
122
225
  * Build the inheritance chain for a persona path
123
226
  * Returns paths from root to leaf (e.g., ["claude", "claude/autonomous"])
@@ -180,6 +283,18 @@ export function deepMerge(parent, child) {
180
283
  }
181
284
  return result;
182
285
  }
286
+ /**
287
+ * Combine prompts from parent and child with separator
288
+ */
289
+ function combinePrompts(parent, child) {
290
+ if (!parent && !child)
291
+ return undefined;
292
+ if (!parent)
293
+ return child;
294
+ if (!child)
295
+ return parent;
296
+ return parent + "\n\n---\n\n" + child;
297
+ }
183
298
  /**
184
299
  * Merge two personas (child inherits from parent)
185
300
  */
@@ -195,47 +310,75 @@ export function mergePersonas(parent, child) {
195
310
  env: deepMerge(parent.env ?? {}, child.env ?? {}),
196
311
  // Arrays: merge with negation
197
312
  skills: mergeArraysWithNegation(parent.skills ?? [], child.skills ?? []),
198
- // Prompt: child replaces entirely if present
199
- prompt: child.prompt ?? parent.prompt,
313
+ // Prompt: combine parent and child prompts
314
+ prompt: combinePrompts(parent.prompt, child.prompt),
200
315
  };
201
316
  }
317
+ /**
318
+ * Check if a directory contains a PERSONA.md file (exported for use in resolvePersona)
319
+ */
320
+ export { hasPersonaFile };
202
321
  /**
203
322
  * Resolve a persona with full inheritance chain
204
- * Includes implicit inheritance from internal _base persona unless extends: "none"
323
+ * Uses directory-based inheritance: child inherits from parent directories
324
+ * Includes implicit inheritance from internal _base persona and root persona
205
325
  */
206
326
  export async function resolvePersona(personaPath, personasRoot) {
207
- const chain = buildInheritanceChain(personaPath, personasRoot);
208
- const inheritanceChain = [];
209
- let resolved = null;
210
- for (const path of chain) {
211
- if (await hasPersonaFile(path)) {
212
- const persona = await loadPersona(path);
213
- inheritanceChain.push(path);
214
- if (resolved === null) {
215
- resolved = persona;
216
- }
217
- else {
218
- resolved = mergePersonas(resolved, persona);
219
- }
327
+ // Load the target persona
328
+ if (!(await hasPersonaFile(personaPath))) {
329
+ throw new Error(`No persona found at path: ${personaPath}`);
330
+ }
331
+ // Build directory-based inheritance chain (parent directories first)
332
+ const directoryChain = buildInheritanceChain(personaPath, personasRoot);
333
+ // Load personas from each directory in the chain (if they have PERSONA.md)
334
+ const personaChain = [];
335
+ for (const dirPath of directoryChain) {
336
+ if (await hasPersonaFile(dirPath)) {
337
+ const persona = await loadPersona(dirPath);
338
+ personaChain.push(persona);
220
339
  }
221
340
  }
222
- if (resolved === null) {
341
+ // Must have at least the target persona
342
+ if (personaChain.length === 0) {
223
343
  throw new Error(`No persona found at path: ${personaPath}`);
224
344
  }
225
- // Check if persona opts out of internal base inheritance
226
- // The root persona in the chain determines inheritance behavior
227
- const rootPersona = await loadPersona(inheritanceChain[0]);
228
- const shouldInheritBase = rootPersona.extends !== "none";
229
- // Load and merge internal _base persona (prepend its prompt)
345
+ // Merge personas from root to leaf
346
+ let resolved = personaChain[0];
347
+ for (let i = 1; i < personaChain.length; i++) {
348
+ resolved = mergePersonas(resolved, personaChain[i]);
349
+ }
350
+ // Build inheritance chain paths
351
+ const inheritanceChain = personaChain.map((p) => p.path);
352
+ // Load and merge MCP configs from inheritance chain
353
+ let mcpConfig = null;
354
+ for (const persona of personaChain) {
355
+ const personaMcp = await loadMcpConfig(persona.path);
356
+ mcpConfig = mergeMcpConfigs(mcpConfig, personaMcp);
357
+ }
358
+ // Load and merge hooks configs from inheritance chain
359
+ let hooksConfig = null;
360
+ for (const persona of personaChain) {
361
+ const personaHooks = await loadHooksConfig(persona.path);
362
+ hooksConfig = mergeHooksConfigs(hooksConfig, personaHooks);
363
+ }
230
364
  let finalPrompt = resolved.prompt;
231
- if (shouldInheritBase) {
232
- const base = await loadInternalBase();
233
- if (base?.prompt) {
234
- // Prepend base prompt with separator
235
- finalPrompt = base.prompt + (finalPrompt ? "\n\n---\n\n" + finalPrompt : "");
236
- // Add base to the start of inheritance chain
237
- inheritanceChain.unshift(base.path);
238
- }
365
+ // Auto-inherit root persona (project conventions) - prepended after _base
366
+ // Supports both new pattern (.agents/PERSONA.md) and legacy (_project)
367
+ const agentsRoot = dirname(personasRoot);
368
+ const rootPersonaConfig = await loadRootPersona(agentsRoot);
369
+ if (rootPersonaConfig?.prompt) {
370
+ // Prepend root prompt with separator
371
+ finalPrompt = rootPersonaConfig.prompt + (finalPrompt ? "\n\n---\n\n" + finalPrompt : "");
372
+ // Add root to the start of inheritance chain
373
+ inheritanceChain.unshift(rootPersonaConfig.path);
374
+ }
375
+ // Auto-inherit _base (dot-agents system knowledge) - prepended first
376
+ const base = await loadInternalBase();
377
+ if (base?.prompt) {
378
+ // Prepend base prompt with separator
379
+ finalPrompt = base.prompt + (finalPrompt ? "\n\n---\n\n" + finalPrompt : "");
380
+ // Add base to the start of inheritance chain
381
+ inheritanceChain.unshift(base.path);
239
382
  }
240
383
  // Resolve commands to normalized structure
241
384
  const commands = resolveCommands(resolved.cmd);
@@ -248,6 +391,8 @@ export async function resolvePersona(personaPath, personasRoot) {
248
391
  prompt: finalPrompt,
249
392
  path: resolved.path,
250
393
  inheritanceChain,
394
+ mcpConfig: mcpConfig ?? undefined,
395
+ hooksConfig: hooksConfig ?? undefined,
251
396
  };
252
397
  }
253
398
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"persona.js","sourceRoot":"","sources":["../../src/lib/persona.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persona.js","sourceRoot":"","sources":["../../src/lib/persona.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type DotAgentsConfig } from "./index.js";
2
+ /**
3
+ * Result of processing a single message
4
+ */
5
+ export interface ProcessResult {
6
+ /** Message ID that was processed */
7
+ messageId: string;
8
+ /** Channel the message was in */
9
+ channel: string;
10
+ /** Persona that processed the message */
11
+ persona: string;
12
+ /** Whether processing succeeded */
13
+ success: boolean;
14
+ /** Duration in milliseconds */
15
+ duration: number;
16
+ /** Error message if failed */
17
+ error?: string;
18
+ }
19
+ /**
20
+ * Result of processing all pending messages
21
+ */
22
+ export interface ProcessAllResult {
23
+ /** Number of channels checked */
24
+ channelsChecked: number;
25
+ /** Number of messages processed */
26
+ messagesProcessed: number;
27
+ /** Results for each processed message */
28
+ results: ProcessResult[];
29
+ /** Overall success (all messages processed successfully) */
30
+ success: boolean;
31
+ }
32
+ import type { ExecutionMode } from "./invoke.js";
33
+ export type { ExecutionMode };
34
+ /**
35
+ * Options for processing channels
36
+ */
37
+ export interface ProcessOptions {
38
+ /** Specific channel to process (e.g., @persona). If not provided, processes all DM channels. */
39
+ channel?: string;
40
+ /** Only process channels that have a matching persona */
41
+ requirePersona?: boolean;
42
+ /** Execution mode: headless (default) or interactive */
43
+ mode?: ExecutionMode;
44
+ /** Stream stdout/stderr during processing for visibility */
45
+ verbose?: boolean;
46
+ /** Callback for progress updates during processing */
47
+ onProgress?: (channel: string, status: "started" | "processing" | "complete", elapsedMs?: number) => void;
48
+ }
49
+ /**
50
+ * Process all pending messages in DM channels
51
+ *
52
+ * For each @persona channel with pending messages:
53
+ * 1. Check if persona exists
54
+ * 2. Invoke persona with each message
55
+ * 3. Mark channel as processed
56
+ */
57
+ export declare function processChannels(config: DotAgentsConfig, options?: ProcessOptions): Promise<ProcessAllResult>;
58
+ //# sourceMappingURL=processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/lib/processor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAOrB,MAAM,YAAY,CAAC;AAIpB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3G;AAqGD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAuE3B"}
@@ -0,0 +1,149 @@
1
+ import { getPendingMessages, markChannelProcessed, listDMChannels, listPersonas, invokePersona, } from "./index.js";
2
+ import { hasPersonaFile } from "./persona.js";
3
+ import { parseFromAddress } from "../cli/commands/channel.js";
4
+ /**
5
+ * Build context object from message metadata
6
+ * Extracts callback info from 'from' field if present
7
+ */
8
+ function buildMessageContext(message) {
9
+ const context = {
10
+ DM_MESSAGE_ID: message.id,
11
+ };
12
+ // Parse from address for callback routing
13
+ if (message.meta.from) {
14
+ const parsed = parseFromAddress(message.meta.from);
15
+ context.FROM_ADDRESS = message.meta.from;
16
+ context.FROM_CHANNEL = parsed.address;
17
+ if (parsed.thread) {
18
+ context.FROM_THREAD = parsed.thread;
19
+ }
20
+ }
21
+ return context;
22
+ }
23
+ /**
24
+ * Process a single pending message by invoking the persona
25
+ */
26
+ async function processMessage(config, message, options = {}) {
27
+ const personaName = message.channel.slice(1); // Remove @ prefix
28
+ const { mode = "headless", verbose = false } = options;
29
+ try {
30
+ const context = buildMessageContext(message);
31
+ const result = await invokePersona(config, personaName, message.content, {
32
+ source: message.channel,
33
+ context,
34
+ goal: `Process DM: ${personaName}`,
35
+ mode,
36
+ verbose,
37
+ });
38
+ return {
39
+ messageId: message.id,
40
+ channel: message.channel,
41
+ persona: personaName,
42
+ success: result.success,
43
+ duration: result.duration,
44
+ error: result.success ? undefined : (result.stderr || result.error),
45
+ };
46
+ }
47
+ catch (error) {
48
+ return {
49
+ messageId: message.id,
50
+ channel: message.channel,
51
+ persona: personaName,
52
+ success: false,
53
+ duration: 0,
54
+ error: error.message,
55
+ };
56
+ }
57
+ }
58
+ /**
59
+ * Check if a persona exists for a given DM channel
60
+ */
61
+ async function personaExists(config, channelName) {
62
+ const personaName = channelName.slice(1); // Remove @ prefix
63
+ // Check for root persona (.agents/PERSONA.md)
64
+ if (personaName === "root") {
65
+ return await hasPersonaFile(config.agentsDir);
66
+ }
67
+ const personaPaths = await listPersonas(config.personasDir);
68
+ for (const path of personaPaths) {
69
+ // Extract persona name from path
70
+ const parts = path.split("/");
71
+ const name = parts[parts.length - 1];
72
+ if (name === personaName) {
73
+ return true;
74
+ }
75
+ }
76
+ return false;
77
+ }
78
+ /**
79
+ * Process all pending messages in DM channels
80
+ *
81
+ * For each @persona channel with pending messages:
82
+ * 1. Check if persona exists
83
+ * 2. Invoke persona with each message
84
+ * 3. Mark channel as processed
85
+ */
86
+ export async function processChannels(config, options = {}) {
87
+ const results = [];
88
+ let channelsChecked = 0;
89
+ // Get channels to process
90
+ let channels;
91
+ if (options.channel) {
92
+ // Process specific channel
93
+ if (!options.channel.startsWith("@")) {
94
+ return {
95
+ channelsChecked: 0,
96
+ messagesProcessed: 0,
97
+ results: [],
98
+ success: false,
99
+ };
100
+ }
101
+ channels = [options.channel];
102
+ }
103
+ else {
104
+ // Process all DM channels
105
+ channels = await listDMChannels(config.channelsDir);
106
+ }
107
+ for (const channel of channels) {
108
+ channelsChecked++;
109
+ // Check if persona exists for this channel
110
+ const hasPersona = await personaExists(config, channel);
111
+ if (!hasPersona) {
112
+ if (options.requirePersona) {
113
+ continue;
114
+ }
115
+ // Skip channels without personas silently
116
+ continue;
117
+ }
118
+ // Get pending messages
119
+ const pending = await getPendingMessages(config.channelsDir, channel);
120
+ if (pending.length === 0) {
121
+ continue;
122
+ }
123
+ // Process each message
124
+ for (const message of pending) {
125
+ // Notify progress callback
126
+ if (options.onProgress) {
127
+ options.onProgress(channel, "started");
128
+ }
129
+ const result = await processMessage(config, message, {
130
+ mode: options.mode,
131
+ verbose: options.verbose,
132
+ });
133
+ results.push(result);
134
+ // Notify completion
135
+ if (options.onProgress) {
136
+ options.onProgress(channel, "complete", result.duration);
137
+ }
138
+ }
139
+ // Mark channel as processed
140
+ await markChannelProcessed(config.channelsDir, channel);
141
+ }
142
+ return {
143
+ channelsChecked,
144
+ messagesProcessed: results.length,
145
+ results,
146
+ success: results.every((r) => r.success),
147
+ };
148
+ }
149
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../src/lib/processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Project registry structure
3
+ */
4
+ export interface ProjectRegistry {
5
+ projects: Record<string, string>;
6
+ }
7
+ /**
8
+ * Parsed cross-project channel address
9
+ */
10
+ export interface CrossProjectAddress {
11
+ /** Project name from registry (null if local) */
12
+ project: string | null;
13
+ /** Channel type: # for public, @ for DM */
14
+ type: "#" | "@";
15
+ /** Channel or persona name */
16
+ name: string;
17
+ /** Full original address for display */
18
+ original: string;
19
+ }
20
+ /**
21
+ * Get path to the projects registry file
22
+ */
23
+ export declare function getRegistryPath(): string;
24
+ /**
25
+ * Load the project registry
26
+ */
27
+ export declare function loadRegistry(): Promise<ProjectRegistry>;
28
+ /**
29
+ * Save the project registry
30
+ */
31
+ export declare function saveRegistry(registry: ProjectRegistry): Promise<void>;
32
+ /**
33
+ * Register a project in the registry
34
+ */
35
+ export declare function registerProject(name: string, path: string): Promise<void>;
36
+ /**
37
+ * Unregister a project from the registry
38
+ */
39
+ export declare function unregisterProject(name: string): Promise<boolean>;
40
+ /**
41
+ * Resolve a project name to its .agents path
42
+ */
43
+ export declare function resolveProject(name: string): Promise<string | null>;
44
+ /**
45
+ * Parse a channel address that may include a project prefix
46
+ *
47
+ * Formats:
48
+ * - @persona (local DM)
49
+ * - #channel (local public channel)
50
+ * - @project/persona (cross-project DM)
51
+ * - #project/channel (cross-project public channel)
52
+ */
53
+ export declare function parseChannelAddress(address: string): CrossProjectAddress;
54
+ /**
55
+ * Result of resolving a channel address
56
+ */
57
+ export interface ResolvedChannelAddress {
58
+ /** Path to the channels directory (local or remote) */
59
+ channelsDir: string;
60
+ /** Channel name within that directory (e.g., @persona, #channel, @root) */
61
+ localChannelName: string;
62
+ /** True if this resolved to a project's entry point */
63
+ isProjectEntryPoint?: boolean;
64
+ /** The project name if routed to a project */
65
+ projectName?: string;
66
+ }
67
+ /**
68
+ * Resolve a channel address to a channels directory and local channel name
69
+ *
70
+ * Resolution order for @name (without /):
71
+ * 1. Check registered projects first - if found, routes to project's @root
72
+ * 2. Fall back to local persona lookup
73
+ *
74
+ * Returns:
75
+ * - channelsDir: The path to the channels directory (local or remote)
76
+ * - localChannelName: The channel name within that directory (e.g., @persona, #channel)
77
+ * - isProjectEntryPoint: True if routed to a project's entry point
78
+ * - projectName: The project name if routed to a project
79
+ */
80
+ export declare function resolveChannelAddress(address: string, localChannelsDir: string): Promise<ResolvedChannelAddress>;
81
+ /**
82
+ * List all registered projects
83
+ */
84
+ export declare function listProjects(): Promise<Array<{
85
+ name: string;
86
+ path: string;
87
+ }>>;
88
+ /**
89
+ * Get the project name for a given agents directory path
90
+ * Returns null if the path doesn't match any registered project
91
+ */
92
+ export declare function getProjectNameByPath(agentsDir: string): Promise<string | null>;
93
+ /**
94
+ * A collision between a project name and a local persona name
95
+ */
96
+ export interface NameCollision {
97
+ /** The conflicting name */
98
+ name: string;
99
+ /** Path to the registered project */
100
+ projectPath: string;
101
+ /** Path to the local persona */
102
+ personaPath: string;
103
+ }
104
+ /**
105
+ * Detect collisions between registered project names and local persona names.
106
+ * When a collision exists, @name will route to the project (projects take priority).
107
+ */
108
+ export declare function detectNameCollisions(personaNames: string[]): Promise<NameCollision[]>;
109
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,2CAA2C;IAC3C,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAS7D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3E;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQtE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAyBxE;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,sBAAsB,CAAC,CAsCjC;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAC3C,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CACtC,CAMA;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CAkB1B"}