dot-agents 0.5.0 → 0.6.0
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 +239 -122
- package/dist/cli/commands/channel.d.ts +19 -0
- package/dist/cli/commands/channel.d.ts.map +1 -1
- package/dist/cli/commands/channel.js +152 -13
- package/dist/cli/commands/channel.js.map +1 -1
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +61 -1
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/personas.d.ts +3 -0
- package/dist/cli/commands/personas.d.ts.map +1 -0
- package/dist/cli/commands/personas.js +402 -0
- package/dist/cli/commands/personas.js.map +1 -0
- package/dist/cli/commands/projects.d.ts +3 -0
- package/dist/cli/commands/projects.d.ts.map +1 -0
- package/dist/cli/commands/projects.js +138 -0
- package/dist/cli/commands/projects.js.map +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +4 -5
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/index.js +3 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lib/runner.d.ts +2 -0
- package/dist/cli/lib/runner.d.ts.map +1 -1
- package/dist/cli/lib/runner.js +67 -8
- package/dist/cli/lib/runner.js.map +1 -1
- package/dist/daemon/daemon.d.ts +10 -3
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +19 -21
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/lib/executor.d.ts +0 -4
- package/dist/daemon/lib/executor.d.ts.map +1 -1
- package/dist/daemon/lib/executor.js +48 -135
- package/dist/daemon/lib/executor.js.map +1 -1
- package/dist/lib/channel.d.ts +53 -1
- package/dist/lib/channel.d.ts.map +1 -1
- package/dist/lib/channel.js +221 -30
- package/dist/lib/channel.js.map +1 -1
- package/dist/lib/channel.test.d.ts +2 -0
- package/dist/lib/channel.test.d.ts.map +1 -0
- package/dist/lib/channel.test.js +33 -0
- package/dist/lib/channel.test.js.map +1 -0
- package/dist/lib/daemon-status.d.ts +26 -0
- package/dist/lib/daemon-status.d.ts.map +1 -0
- package/dist/lib/daemon-status.js +64 -0
- package/dist/lib/daemon-status.js.map +1 -0
- package/dist/lib/environment.d.ts +87 -0
- package/dist/lib/environment.d.ts.map +1 -0
- package/dist/lib/environment.js +224 -0
- package/dist/lib/environment.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +8 -0
- package/dist/lib/frontmatter.d.ts.map +1 -1
- package/dist/lib/frontmatter.js +16 -3
- package/dist/lib/frontmatter.js.map +1 -1
- package/dist/lib/frontmatter.test.d.ts +2 -0
- package/dist/lib/frontmatter.test.d.ts.map +1 -0
- package/dist/lib/frontmatter.test.js +60 -0
- package/dist/lib/frontmatter.test.js.map +1 -0
- package/dist/lib/index.d.ts +7 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +7 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/integration.test.d.ts +2 -0
- package/dist/lib/integration.test.d.ts.map +1 -0
- package/dist/lib/integration.test.js +445 -0
- package/dist/lib/integration.test.js.map +1 -0
- package/dist/lib/invoke.d.ts +23 -0
- package/dist/lib/invoke.d.ts.map +1 -0
- package/dist/lib/invoke.js +158 -0
- package/dist/lib/invoke.js.map +1 -0
- package/dist/lib/invoke.test.d.ts +2 -0
- package/dist/lib/invoke.test.d.ts.map +1 -0
- package/dist/lib/invoke.test.js +82 -0
- package/dist/lib/invoke.test.js.map +1 -0
- package/dist/lib/persona.d.ts +22 -1
- package/dist/lib/persona.d.ts.map +1 -1
- package/dist/lib/persona.js +176 -31
- package/dist/lib/persona.js.map +1 -1
- package/dist/lib/persona.test.d.ts +2 -0
- package/dist/lib/persona.test.d.ts.map +1 -0
- package/dist/lib/persona.test.js +324 -0
- package/dist/lib/persona.test.js.map +1 -0
- package/dist/lib/processor.d.ts +50 -0
- package/dist/lib/processor.d.ts.map +1 -0
- package/dist/lib/processor.js +135 -0
- package/dist/lib/processor.js.map +1 -0
- package/dist/lib/processor.test.d.ts +2 -0
- package/dist/lib/processor.test.d.ts.map +1 -0
- package/dist/lib/processor.test.js +134 -0
- package/dist/lib/processor.test.js.map +1 -0
- package/dist/lib/registry.d.ts +109 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +192 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/registry.test.d.ts +2 -0
- package/dist/lib/registry.test.d.ts.map +1 -0
- package/dist/lib/registry.test.js +236 -0
- package/dist/lib/registry.test.js.map +1 -0
- package/dist/lib/session-thread.d.ts +75 -0
- package/dist/lib/session-thread.d.ts.map +1 -0
- package/dist/lib/session-thread.js +132 -0
- package/dist/lib/session-thread.js.map +1 -0
- package/dist/lib/session-thread.test.d.ts +2 -0
- package/dist/lib/session-thread.test.d.ts.map +1 -0
- package/dist/lib/session-thread.test.js +235 -0
- package/dist/lib/session-thread.test.js.map +1 -0
- package/dist/lib/session.d.ts +150 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +183 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/session.test.d.ts +2 -0
- package/dist/lib/session.test.d.ts.map +1 -0
- package/dist/lib/session.test.js +336 -0
- package/dist/lib/session.test.js.map +1 -0
- package/dist/lib/types/channel.d.ts +4 -0
- package/dist/lib/types/channel.d.ts.map +1 -1
- package/dist/lib/types/persona.d.ts +49 -6
- package/dist/lib/types/persona.d.ts.map +1 -1
- package/internal/personas/_base/PERSONA.md +222 -39
- package/internal/skills/channels/list/SKILL.md +76 -0
- package/package.json +6 -2
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { execa } from "execa";
|
|
4
|
+
import { relative } from "node:path";
|
|
5
|
+
import { writeFile, mkdir } from "node:fs/promises";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { requireConfig, listPersonas, loadPersona, resolvePersona, expandVariables, createExecutionContext,
|
|
9
|
+
// Legacy session support (for --session-id backwards compatibility)
|
|
10
|
+
readSession,
|
|
11
|
+
// New session-as-thread support
|
|
12
|
+
startSession, endSession,
|
|
13
|
+
// Project registry for FROM_ADDRESS
|
|
14
|
+
getProjectNameByPath,
|
|
15
|
+
// Environment discovery
|
|
16
|
+
getEnvironmentContextMarkdown, } from "../../lib/index.js";
|
|
17
|
+
export const personasCommand = new Command("personas")
|
|
18
|
+
.description("Manage and run personas")
|
|
19
|
+
.action(() => {
|
|
20
|
+
personasCommand.help();
|
|
21
|
+
});
|
|
22
|
+
personasCommand
|
|
23
|
+
.command("list")
|
|
24
|
+
.description("List available personas")
|
|
25
|
+
.option("-v, --verbose", "Show detailed information")
|
|
26
|
+
.action(async (options) => {
|
|
27
|
+
try {
|
|
28
|
+
const config = await requireConfig();
|
|
29
|
+
// Check for root persona (.agents/PERSONA.md)
|
|
30
|
+
const { loadRootPersona } = await import("../../lib/persona.js");
|
|
31
|
+
const rootPersona = await loadRootPersona(config.agentsDir);
|
|
32
|
+
const personaPaths = await listPersonas(config.personasDir);
|
|
33
|
+
const totalCount = personaPaths.length + (rootPersona ? 1 : 0);
|
|
34
|
+
if (totalCount === 0) {
|
|
35
|
+
console.log(chalk.yellow("No personas found"));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.log(chalk.blue(`Personas (${totalCount}):\n`));
|
|
39
|
+
// Show root persona first if it exists
|
|
40
|
+
if (rootPersona) {
|
|
41
|
+
console.log(chalk.green(` root (default)`));
|
|
42
|
+
if (rootPersona.description) {
|
|
43
|
+
console.log(chalk.dim(` ${rootPersona.description}`));
|
|
44
|
+
}
|
|
45
|
+
if (options.verbose) {
|
|
46
|
+
const cmd = Array.isArray(rootPersona.cmd)
|
|
47
|
+
? rootPersona.cmd[0]
|
|
48
|
+
: typeof rootPersona.cmd === "object" && rootPersona.cmd !== null
|
|
49
|
+
? rootPersona.cmd.interactive?.[0] || rootPersona.cmd.headless?.[0]
|
|
50
|
+
: rootPersona.cmd;
|
|
51
|
+
if (cmd) {
|
|
52
|
+
console.log(chalk.dim(` Command: ${cmd}`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
console.log();
|
|
56
|
+
}
|
|
57
|
+
for (const personaPath of personaPaths) {
|
|
58
|
+
try {
|
|
59
|
+
const persona = await loadPersona(personaPath);
|
|
60
|
+
const relPath = relative(config.personasDir, personaPath);
|
|
61
|
+
// Skip _project if root persona came from there (avoid duplicate)
|
|
62
|
+
if (relPath === "_project" && rootPersona?.path === personaPath) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
console.log(chalk.white(` ${relPath}`));
|
|
66
|
+
if (persona.description) {
|
|
67
|
+
console.log(chalk.dim(` ${persona.description}`));
|
|
68
|
+
}
|
|
69
|
+
if (options.verbose) {
|
|
70
|
+
const cmd = Array.isArray(persona.cmd)
|
|
71
|
+
? persona.cmd[0]
|
|
72
|
+
: typeof persona.cmd === "object" && persona.cmd !== null
|
|
73
|
+
? persona.cmd.interactive?.[0] || persona.cmd.headless?.[0]
|
|
74
|
+
: persona.cmd;
|
|
75
|
+
if (cmd) {
|
|
76
|
+
console.log(chalk.dim(` Command: ${cmd}`));
|
|
77
|
+
}
|
|
78
|
+
if (persona.skills && persona.skills.length > 0) {
|
|
79
|
+
console.log(chalk.dim(` Skills: ${persona.skills.join(", ")}`));
|
|
80
|
+
}
|
|
81
|
+
if (persona.env && Object.keys(persona.env).length > 0) {
|
|
82
|
+
console.log(chalk.dim(` Env: ${Object.keys(persona.env).join(", ")}`));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
console.log();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.log(chalk.red(` ${personaPath} (invalid)`));
|
|
89
|
+
if (options.verbose) {
|
|
90
|
+
console.log(chalk.red(` Error: ${error.message}`));
|
|
91
|
+
}
|
|
92
|
+
console.log();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
personasCommand
|
|
102
|
+
.command("run")
|
|
103
|
+
.description("Run a persona directly (defaults to root persona if no name given)")
|
|
104
|
+
.argument("[name]", "Persona name/path (e.g., developer, claude/autonomous). Defaults to 'root'")
|
|
105
|
+
.option("-p, --prompt <text>", "Prompt to pass to the persona")
|
|
106
|
+
.option("--interactive", "Run in interactive mode (default)")
|
|
107
|
+
.option("--headless", "Run in headless/print mode")
|
|
108
|
+
.option("-w, --working-dir <path>", "Working directory")
|
|
109
|
+
.option("-s, --session-id <id>", "Resume an existing session")
|
|
110
|
+
.option("--upstream <address>", "Upstream return address (e.g., @odin:dottie --session-id abc)")
|
|
111
|
+
.option("-v, --verbose", "Verbose output")
|
|
112
|
+
.action(async (name, options) => {
|
|
113
|
+
const startedAt = new Date();
|
|
114
|
+
try {
|
|
115
|
+
const config = await requireConfig();
|
|
116
|
+
// Resolve persona path
|
|
117
|
+
let personaPath;
|
|
118
|
+
if (!name || name === "root") {
|
|
119
|
+
// No name or "root" - use root persona (.agents/PERSONA.md)
|
|
120
|
+
personaPath = config.agentsDir;
|
|
121
|
+
}
|
|
122
|
+
else if (name.startsWith("/")) {
|
|
123
|
+
personaPath = name;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
personaPath = `${config.personasDir}/${name}`;
|
|
127
|
+
}
|
|
128
|
+
if (options.verbose) {
|
|
129
|
+
console.log(chalk.dim(`Resolving persona: ${personaPath}`));
|
|
130
|
+
}
|
|
131
|
+
// Resolve persona with inheritance
|
|
132
|
+
const persona = await resolvePersona(personaPath, config.personasDir);
|
|
133
|
+
if (options.verbose) {
|
|
134
|
+
console.log(chalk.dim(`Found persona: ${persona.name}`));
|
|
135
|
+
console.log(chalk.dim(`Inheritance chain: ${persona.inheritanceChain.join(" → ")}`));
|
|
136
|
+
}
|
|
137
|
+
// Determine execution mode
|
|
138
|
+
let interactive = true; // Default to interactive
|
|
139
|
+
if (options.interactive && options.headless) {
|
|
140
|
+
console.error(chalk.red("Cannot specify both --interactive and --headless"));
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
else if (options.headless) {
|
|
144
|
+
interactive = false;
|
|
145
|
+
}
|
|
146
|
+
else if (options.interactive) {
|
|
147
|
+
interactive = true;
|
|
148
|
+
}
|
|
149
|
+
// Validate mode support
|
|
150
|
+
if (interactive && !persona.commands.interactive) {
|
|
151
|
+
console.error(chalk.red(`Persona '${persona.name}' does not support interactive mode`));
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
if (!interactive && !persona.commands.headless) {
|
|
155
|
+
console.error(chalk.red(`Persona '${persona.name}' does not support headless mode`));
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
// Select command
|
|
159
|
+
const cmds = interactive
|
|
160
|
+
? persona.commands.interactive
|
|
161
|
+
: persona.commands.headless;
|
|
162
|
+
if (!cmds || cmds.length === 0) {
|
|
163
|
+
console.error(chalk.red(`No commands configured for ${interactive ? "interactive" : "headless"} mode`));
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
// Determine working directory
|
|
167
|
+
const workingDir = options.workingDir ?? process.cwd();
|
|
168
|
+
// Handle session: resume legacy session or create new thread-based session
|
|
169
|
+
let legacySession = null;
|
|
170
|
+
let sessionThread = null;
|
|
171
|
+
let sessionId;
|
|
172
|
+
let workspacePath;
|
|
173
|
+
if (options.sessionId) {
|
|
174
|
+
// Try to resume existing legacy session (backwards compatibility)
|
|
175
|
+
legacySession = await readSession(config.sessionsDir, options.sessionId);
|
|
176
|
+
if (!legacySession) {
|
|
177
|
+
// TODO: In future, also check #sessions channel for thread-based sessions
|
|
178
|
+
console.error(chalk.red(`Session not found: ${options.sessionId}`));
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
181
|
+
sessionId = legacySession.id;
|
|
182
|
+
workspacePath = legacySession.path;
|
|
183
|
+
if (options.verbose) {
|
|
184
|
+
console.log(chalk.dim(`Resuming legacy session: ${sessionId}`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
// Create new thread-based session
|
|
189
|
+
sessionThread = await startSession({
|
|
190
|
+
channelsDir: config.channelsDir,
|
|
191
|
+
persona: persona.name,
|
|
192
|
+
mode: interactive ? "interactive" : "headless",
|
|
193
|
+
trigger: "manual",
|
|
194
|
+
goal: options.prompt ? `${options.prompt.substring(0, 100)}...` : undefined,
|
|
195
|
+
upstream: options.upstream,
|
|
196
|
+
});
|
|
197
|
+
sessionId = sessionThread.id;
|
|
198
|
+
workspacePath = sessionThread.workspacePath;
|
|
199
|
+
if (options.verbose) {
|
|
200
|
+
console.log(chalk.dim(`Created session thread: ${sessionId}`));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Build FROM_ADDRESS for callback routing
|
|
204
|
+
// Format: #project/sessions:session-id (if registered project) or #sessions:session-id (local)
|
|
205
|
+
let fromAddress = `#sessions:${sessionId}`;
|
|
206
|
+
const projectName = await getProjectNameByPath(config.agentsDir);
|
|
207
|
+
if (projectName) {
|
|
208
|
+
fromAddress = `#${projectName}/sessions:${sessionId}`;
|
|
209
|
+
}
|
|
210
|
+
// Create execution context with session
|
|
211
|
+
const context = createExecutionContext({
|
|
212
|
+
PERSONA_NAME: persona.name,
|
|
213
|
+
PERSONA_DIR: persona.path,
|
|
214
|
+
SESSION_ID: sessionId,
|
|
215
|
+
SESSION_THREAD_ID: sessionId, // Alias for clarity
|
|
216
|
+
SESSION_WORKSPACE: workspacePath,
|
|
217
|
+
FROM_ADDRESS: fromAddress,
|
|
218
|
+
});
|
|
219
|
+
// Build environment
|
|
220
|
+
// Note: We set both prefixed (DOT_AGENTS_*) and unprefixed versions
|
|
221
|
+
// The unprefixed versions match what _base persona documents ($SESSION_ID, etc.)
|
|
222
|
+
const env = {
|
|
223
|
+
...process.env,
|
|
224
|
+
...persona.env,
|
|
225
|
+
DOT_AGENTS_PERSONA: persona.path,
|
|
226
|
+
DOT_AGENTS_SESSION_ID: sessionId,
|
|
227
|
+
DOT_AGENTS_SESSION_THREAD_ID: sessionId,
|
|
228
|
+
DOT_AGENTS_SESSION_WORKSPACE: workspacePath,
|
|
229
|
+
// Unprefixed versions for persona use (matches _base documentation)
|
|
230
|
+
SESSION_ID: sessionId,
|
|
231
|
+
SESSION_THREAD_ID: sessionId,
|
|
232
|
+
SESSION_WORKSPACE: workspacePath,
|
|
233
|
+
FROM_ADDRESS: fromAddress,
|
|
234
|
+
};
|
|
235
|
+
// Expand environment variable values
|
|
236
|
+
for (const [key, value] of Object.entries(env)) {
|
|
237
|
+
if (value) {
|
|
238
|
+
env[key] = expandVariables(value, context, env);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Write MCP config to temp file if present
|
|
242
|
+
let mcpConfigPath;
|
|
243
|
+
if (persona.mcpConfig) {
|
|
244
|
+
const mcpDir = join(tmpdir(), "dot-agents-mcp");
|
|
245
|
+
await mkdir(mcpDir, { recursive: true });
|
|
246
|
+
mcpConfigPath = join(mcpDir, `${persona.name}-${Date.now()}.json`);
|
|
247
|
+
await writeFile(mcpConfigPath, JSON.stringify(persona.mcpConfig, null, 2));
|
|
248
|
+
if (options.verbose) {
|
|
249
|
+
console.log(chalk.dim(`MCP config: ${mcpConfigPath}`));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Write hooks config to temp settings file if present (Claude-specific)
|
|
253
|
+
// Claude Code reads hooks from settings.local.json in the project .claude directory
|
|
254
|
+
let hooksConfigPath;
|
|
255
|
+
if (persona.hooksConfig) {
|
|
256
|
+
const hooksDir = join(tmpdir(), "dot-agents-hooks");
|
|
257
|
+
await mkdir(hooksDir, { recursive: true });
|
|
258
|
+
hooksConfigPath = join(hooksDir, `${persona.name}-${Date.now()}.json`);
|
|
259
|
+
const settingsContent = { hooks: persona.hooksConfig };
|
|
260
|
+
await writeFile(hooksConfigPath, JSON.stringify(settingsContent, null, 2));
|
|
261
|
+
if (options.verbose) {
|
|
262
|
+
console.log(chalk.dim(`Hooks config: ${hooksConfigPath}`));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Build the full prompt (system prompt + environment + session context + user prompt)
|
|
266
|
+
const promptParts = [];
|
|
267
|
+
if (persona.prompt) {
|
|
268
|
+
promptParts.push(persona.prompt);
|
|
269
|
+
}
|
|
270
|
+
// Inject environment discovery context
|
|
271
|
+
const environmentContext = await getEnvironmentContextMarkdown(config);
|
|
272
|
+
if (promptParts.length > 0) {
|
|
273
|
+
promptParts.push("\n---\n");
|
|
274
|
+
}
|
|
275
|
+
promptParts.push(environmentContext);
|
|
276
|
+
// Include session context when resuming legacy session
|
|
277
|
+
if (legacySession?.content) {
|
|
278
|
+
if (promptParts.length > 0) {
|
|
279
|
+
promptParts.push("\n---\n");
|
|
280
|
+
}
|
|
281
|
+
promptParts.push("# Previous Session Context\n");
|
|
282
|
+
promptParts.push("You are resuming a previous session. Here is the context from that session:\n");
|
|
283
|
+
promptParts.push(legacySession.content);
|
|
284
|
+
}
|
|
285
|
+
if (options.prompt) {
|
|
286
|
+
if (promptParts.length > 0) {
|
|
287
|
+
promptParts.push("\n---\n");
|
|
288
|
+
}
|
|
289
|
+
promptParts.push(options.prompt);
|
|
290
|
+
}
|
|
291
|
+
const fullPrompt = promptParts.join("\n");
|
|
292
|
+
if (options.verbose) {
|
|
293
|
+
console.log(chalk.dim(`Execution mode: ${interactive ? "interactive" : "headless"}`));
|
|
294
|
+
console.log(chalk.dim(`Working dir: ${workingDir}`));
|
|
295
|
+
console.log(chalk.dim(`Command: ${cmds[0]}`));
|
|
296
|
+
if (persona.prompt) {
|
|
297
|
+
console.log(chalk.dim(`System prompt: ${persona.prompt.substring(0, 100)}...`));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Try each command in order
|
|
301
|
+
let lastError = null;
|
|
302
|
+
let success = false;
|
|
303
|
+
let stdout = "";
|
|
304
|
+
let stderr = "";
|
|
305
|
+
let exitCode = 1;
|
|
306
|
+
for (const cmd of cmds) {
|
|
307
|
+
try {
|
|
308
|
+
const expandedCmd = expandVariables(cmd, context, env);
|
|
309
|
+
let [command, ...args] = expandedCmd.split(/\s+/);
|
|
310
|
+
// Inject MCP config if present (Claude-specific for now)
|
|
311
|
+
if (mcpConfigPath && command === "claude") {
|
|
312
|
+
args = ["--mcp-config", mcpConfigPath, ...args];
|
|
313
|
+
}
|
|
314
|
+
// Inject hooks config if present (Claude-specific for now)
|
|
315
|
+
if (hooksConfigPath && command === "claude") {
|
|
316
|
+
args = ["--settings", hooksConfigPath, ...args];
|
|
317
|
+
}
|
|
318
|
+
if (options.verbose) {
|
|
319
|
+
console.log(chalk.dim(`Executing: ${command} ${args.join(" ")}`));
|
|
320
|
+
}
|
|
321
|
+
if (interactive) {
|
|
322
|
+
// Interactive mode: pass full prompt as CLI argument, inherit stdio
|
|
323
|
+
// Show session info before starting
|
|
324
|
+
console.log(chalk.dim(`Session: ${sessionId}`));
|
|
325
|
+
console.log(chalk.dim(`Workspace: ${workspacePath}`));
|
|
326
|
+
console.log();
|
|
327
|
+
const execArgs = fullPrompt ? [...args, fullPrompt] : args;
|
|
328
|
+
const result = await execa(command, execArgs, {
|
|
329
|
+
cwd: workingDir,
|
|
330
|
+
env,
|
|
331
|
+
stdio: "inherit",
|
|
332
|
+
reject: false,
|
|
333
|
+
});
|
|
334
|
+
exitCode = result.exitCode ?? 1;
|
|
335
|
+
if (exitCode === 0) {
|
|
336
|
+
success = true;
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
lastError = new Error(`Command exited with code ${exitCode}`);
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
// Headless mode: pass full prompt via stdin
|
|
343
|
+
if (fullPrompt) {
|
|
344
|
+
const result = await execa(command, args, {
|
|
345
|
+
input: fullPrompt,
|
|
346
|
+
cwd: workingDir,
|
|
347
|
+
env,
|
|
348
|
+
reject: false,
|
|
349
|
+
});
|
|
350
|
+
stdout = result.stdout ?? "";
|
|
351
|
+
stderr = result.stderr ?? "";
|
|
352
|
+
exitCode = result.exitCode ?? 1;
|
|
353
|
+
if (stdout) {
|
|
354
|
+
console.log(stdout);
|
|
355
|
+
}
|
|
356
|
+
if (exitCode === 0) {
|
|
357
|
+
success = true;
|
|
358
|
+
break;
|
|
359
|
+
}
|
|
360
|
+
if (stderr) {
|
|
361
|
+
console.error(stderr);
|
|
362
|
+
}
|
|
363
|
+
lastError = new Error(`Command exited with code ${exitCode}`);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
console.error(chalk.red("Headless mode requires --prompt or a persona with a system prompt"));
|
|
367
|
+
process.exit(1);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
lastError = error;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
const endedAt = new Date();
|
|
376
|
+
const duration = endedAt.getTime() - startedAt.getTime();
|
|
377
|
+
// Finalize session for headless mode (interactive sessions are managed by the user/persona)
|
|
378
|
+
if (!interactive && sessionThread) {
|
|
379
|
+
await endSession(sessionThread, {
|
|
380
|
+
success,
|
|
381
|
+
exitCode,
|
|
382
|
+
duration,
|
|
383
|
+
error: lastError?.message,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
if (!success) {
|
|
387
|
+
console.error(chalk.red(`Failed to run persona: ${lastError?.message ?? "unknown error"}`));
|
|
388
|
+
process.exit(exitCode);
|
|
389
|
+
}
|
|
390
|
+
// Show session info after interactive session ends
|
|
391
|
+
if (interactive) {
|
|
392
|
+
console.log();
|
|
393
|
+
console.log(chalk.dim(`Session ended: ${sessionId}`));
|
|
394
|
+
console.log(chalk.dim(`Thread: #sessions/${sessionId}`));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
catch (error) {
|
|
398
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
399
|
+
process.exit(1);
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
//# sourceMappingURL=personas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personas.js","sourceRoot":"","sources":["../../../src/cli/commands/personas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,eAAO,MAAM,eAAe,SAIxB,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { stat } from "node:fs/promises";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { homedir } from "node:os";
|
|
6
|
+
import { registerProject, unregisterProject, listProjects, getRegistryPath, getDaemonStatus, } from "../../lib/index.js";
|
|
7
|
+
/**
|
|
8
|
+
* Resolve a path, expanding ~ and auto-discovering .agents directory
|
|
9
|
+
*/
|
|
10
|
+
async function resolveProjectPath(inputPath) {
|
|
11
|
+
// Expand ~ to home directory
|
|
12
|
+
const expandedPath = inputPath.startsWith("~")
|
|
13
|
+
? join(homedir(), inputPath.slice(1))
|
|
14
|
+
: inputPath;
|
|
15
|
+
// Check if path ends with .agents
|
|
16
|
+
if (expandedPath.endsWith(".agents")) {
|
|
17
|
+
// Verify it exists
|
|
18
|
+
try {
|
|
19
|
+
const stats = await stat(expandedPath);
|
|
20
|
+
if (!stats.isDirectory()) {
|
|
21
|
+
throw new Error(`Path is not a directory: ${expandedPath}`);
|
|
22
|
+
}
|
|
23
|
+
return expandedPath;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code === "ENOENT") {
|
|
27
|
+
throw new Error(`Directory not found: ${expandedPath}`);
|
|
28
|
+
}
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Try auto-discovering .agents directory
|
|
33
|
+
const agentsPath = join(expandedPath, ".agents");
|
|
34
|
+
try {
|
|
35
|
+
const stats = await stat(agentsPath);
|
|
36
|
+
if (stats.isDirectory()) {
|
|
37
|
+
return agentsPath;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// .agents doesn't exist, check if user path itself exists
|
|
42
|
+
try {
|
|
43
|
+
await stat(expandedPath);
|
|
44
|
+
throw new Error(`No .agents directory found at ${agentsPath}. Create one or specify the full path.`);
|
|
45
|
+
}
|
|
46
|
+
catch (innerError) {
|
|
47
|
+
if (innerError.code === "ENOENT") {
|
|
48
|
+
throw new Error(`Directory not found: ${expandedPath}`);
|
|
49
|
+
}
|
|
50
|
+
throw innerError;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`No .agents directory found at ${agentsPath}`);
|
|
54
|
+
}
|
|
55
|
+
export const projectsCommand = new Command("projects")
|
|
56
|
+
.description("Manage registered projects for cross-project channel routing")
|
|
57
|
+
.action(() => {
|
|
58
|
+
projectsCommand.help();
|
|
59
|
+
});
|
|
60
|
+
projectsCommand
|
|
61
|
+
.command("add")
|
|
62
|
+
.description("Register a project for cross-project channel routing")
|
|
63
|
+
.argument("<name>", "Project name (used in channel addresses like @project/persona)")
|
|
64
|
+
.argument("<path>", "Path to the project (auto-discovers .agents directory)")
|
|
65
|
+
.action(async (name, path) => {
|
|
66
|
+
try {
|
|
67
|
+
const resolvedPath = await resolveProjectPath(path);
|
|
68
|
+
await registerProject(name, resolvedPath);
|
|
69
|
+
console.log(chalk.green(`Registered project: ${name}`));
|
|
70
|
+
console.log(chalk.dim(` Path: ${resolvedPath}`));
|
|
71
|
+
console.log();
|
|
72
|
+
console.log(chalk.cyan("Usage:"));
|
|
73
|
+
console.log(chalk.dim(` npx dot-agents channels publish "@${name}/persona" "message"`));
|
|
74
|
+
console.log(chalk.dim(` npx dot-agents channels read "@${name}/persona"`));
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
projectsCommand
|
|
82
|
+
.command("remove")
|
|
83
|
+
.description("Remove a project from the registry")
|
|
84
|
+
.argument("<name>", "Project name to remove")
|
|
85
|
+
.action(async (name) => {
|
|
86
|
+
try {
|
|
87
|
+
const removed = await unregisterProject(name);
|
|
88
|
+
if (removed) {
|
|
89
|
+
console.log(chalk.green(`Removed project: ${name}`));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.log(chalk.yellow(`Project not found: ${name}`));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
projectsCommand
|
|
101
|
+
.command("list")
|
|
102
|
+
.description("List all registered projects")
|
|
103
|
+
.action(async () => {
|
|
104
|
+
try {
|
|
105
|
+
const projects = await listProjects();
|
|
106
|
+
console.log(chalk.dim(`Registry: ${getRegistryPath()}`));
|
|
107
|
+
console.log();
|
|
108
|
+
if (projects.length === 0) {
|
|
109
|
+
console.log(chalk.yellow("No projects registered"));
|
|
110
|
+
console.log();
|
|
111
|
+
console.log(chalk.cyan("To register a project:"));
|
|
112
|
+
console.log(chalk.dim(" npx dot-agents projects add <name> /path/to/project"));
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
console.log(chalk.blue(`Registered projects (${projects.length}):\n`));
|
|
116
|
+
// Calculate max name length for alignment
|
|
117
|
+
const maxNameLength = Math.max(...projects.map((p) => p.name.length));
|
|
118
|
+
for (const { name, path } of projects) {
|
|
119
|
+
const daemonStatus = await getDaemonStatus(path);
|
|
120
|
+
const padding = " ".repeat(maxNameLength - name.length + 2);
|
|
121
|
+
let statusStr;
|
|
122
|
+
if (daemonStatus.running) {
|
|
123
|
+
statusStr = chalk.green(`● running (pid ${daemonStatus.pid})`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
statusStr = chalk.dim("○ stopped");
|
|
127
|
+
}
|
|
128
|
+
console.log(chalk.white(` ${name}`) + padding + statusStr);
|
|
129
|
+
console.log(chalk.dim(` ${path}`));
|
|
130
|
+
console.log();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/cli/commands/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,UAAU,SA8InB,CAAC"}
|
package/dist/cli/commands/run.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
import { requireConfig, findWorkflow, resolvePersona, validateInputs, } from "../../lib/index.js";
|
|
4
|
-
import { runWorkflow
|
|
4
|
+
import { runWorkflow } from "../lib/runner.js";
|
|
5
5
|
export const runCommand = new Command("run")
|
|
6
6
|
.description("Run a workflow")
|
|
7
7
|
.argument("<name>", "Workflow name to run")
|
|
@@ -96,18 +96,17 @@ export const runCommand = new Command("run")
|
|
|
96
96
|
timeout: options.timeout,
|
|
97
97
|
dryRun: options.dryRun,
|
|
98
98
|
interactive,
|
|
99
|
+
sessionsDir: config.sessionsDir,
|
|
99
100
|
});
|
|
100
101
|
if (options.dryRun) {
|
|
101
102
|
console.log(result.stdout);
|
|
102
103
|
return;
|
|
103
104
|
}
|
|
104
|
-
// Write log
|
|
105
|
-
const logPath = await writeExecutionLog(config.sessionsDir, { workflowName: workflow.name, personaName: persona.name }, result);
|
|
106
105
|
if (result.success) {
|
|
107
106
|
console.log(chalk.green(`\n✓ Workflow completed successfully`));
|
|
108
107
|
console.log(chalk.dim(` Run ID: ${result.runId}`));
|
|
109
108
|
console.log(chalk.dim(` Duration: ${result.duration}ms`));
|
|
110
|
-
console.log(chalk.dim(`
|
|
109
|
+
console.log(chalk.dim(` Session: ${config.sessionsDir}`));
|
|
111
110
|
if (options.verbose && result.stdout) {
|
|
112
111
|
console.log(chalk.dim("\n--- Output ---"));
|
|
113
112
|
console.log(result.stdout);
|
|
@@ -117,7 +116,7 @@ export const runCommand = new Command("run")
|
|
|
117
116
|
console.error(chalk.red(`\n✗ Workflow failed`));
|
|
118
117
|
console.error(chalk.dim(` Run ID: ${result.runId}`));
|
|
119
118
|
console.error(chalk.dim(` Exit code: ${result.exitCode}`));
|
|
120
|
-
console.error(chalk.dim(`
|
|
119
|
+
console.error(chalk.dim(` Session: ${config.sessionsDir}`));
|
|
121
120
|
if (result.stderr) {
|
|
122
121
|
console.error(chalk.red("\n--- Error ---"));
|
|
123
122
|
console.error(result.stderr);
|