@proletariat/cli 0.3.55 → 0.3.56
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 +5 -4
- package/dist/commands/agent/cleanup.d.ts +1 -0
- package/dist/commands/agent/cleanup.js +11 -1
- package/dist/commands/agent/cleanup.js.map +1 -1
- package/dist/commands/agent/rebuild.js +1 -1
- package/dist/commands/agent/rebuild.js.map +1 -1
- package/dist/commands/asana/import.d.ts +14 -0
- package/dist/commands/asana/import.js +240 -0
- package/dist/commands/asana/import.js.map +1 -0
- package/dist/commands/claude-yolo.d.ts +20 -0
- package/dist/commands/claude-yolo.js +86 -0
- package/dist/commands/claude-yolo.js.map +1 -0
- package/dist/commands/codex/index.d.ts +23 -0
- package/dist/commands/codex/index.js +168 -0
- package/dist/commands/codex/index.js.map +1 -0
- package/dist/commands/codex-yolo.d.ts +20 -0
- package/dist/commands/codex-yolo.js +86 -0
- package/dist/commands/codex-yolo.js.map +1 -0
- package/dist/commands/config/index.js +2 -2
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/docker/clean.js +1 -1
- package/dist/commands/docker/clean.js.map +1 -1
- package/dist/commands/docker/list.js +1 -1
- package/dist/commands/docker/list.js.map +1 -1
- package/dist/commands/docker/logs.js +1 -1
- package/dist/commands/docker/logs.js.map +1 -1
- package/dist/commands/docker/restart.js +1 -1
- package/dist/commands/docker/restart.js.map +1 -1
- package/dist/commands/docker/shell.js +1 -1
- package/dist/commands/docker/shell.js.map +1 -1
- package/dist/commands/docker/start.js +1 -1
- package/dist/commands/docker/start.js.map +1 -1
- package/dist/commands/docker/stop.js +1 -1
- package/dist/commands/docker/stop.js.map +1 -1
- package/dist/commands/docker/sync.js +1 -1
- package/dist/commands/docker/sync.js.map +1 -1
- package/dist/commands/execution/config.js +2 -2
- package/dist/commands/execution/config.js.map +1 -1
- package/dist/commands/execution/list.js +1 -1
- package/dist/commands/execution/list.js.map +1 -1
- package/dist/commands/execution/logs.js +10 -8
- package/dist/commands/execution/logs.js.map +1 -1
- package/dist/commands/execution/stop.js +1 -1
- package/dist/commands/execution/stop.js.map +1 -1
- package/dist/commands/execution/view.js +1 -1
- package/dist/commands/execution/view.js.map +1 -1
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.js +50 -160
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/logs.d.ts +20 -0
- package/dist/commands/logs.js +84 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/mcp-server.js +1 -1
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/commands/new.d.ts +27 -0
- package/dist/commands/new.js +184 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/orchestrator/attach.d.ts +1 -0
- package/dist/commands/orchestrator/attach.js +159 -26
- package/dist/commands/orchestrator/attach.js.map +1 -1
- package/dist/commands/orchestrator/start.d.ts +20 -0
- package/dist/commands/orchestrator/start.js +122 -14
- package/dist/commands/orchestrator/start.js.map +1 -1
- package/dist/commands/orchestrator/status.d.ts +4 -0
- package/dist/commands/orchestrator/status.js +70 -29
- package/dist/commands/orchestrator/status.js.map +1 -1
- package/dist/commands/orchestrator/stop.js +57 -23
- package/dist/commands/orchestrator/stop.js.map +1 -1
- package/dist/commands/peek.d.ts +20 -0
- package/dist/commands/peek.js +84 -0
- package/dist/commands/peek.js.map +1 -0
- package/dist/commands/poke.d.ts +20 -0
- package/dist/commands/poke.js +89 -0
- package/dist/commands/poke.js.map +1 -0
- package/dist/commands/pr/link.js +1 -1
- package/dist/commands/pr/link.js.map +1 -1
- package/dist/commands/pr/status.js +1 -1
- package/dist/commands/pr/status.js.map +1 -1
- package/dist/commands/ps.d.ts +18 -0
- package/dist/commands/ps.js +123 -0
- package/dist/commands/ps.js.map +1 -0
- package/dist/commands/qa/index.js +1 -1
- package/dist/commands/qa/index.js.map +1 -1
- package/dist/commands/repo/add.js +1 -1
- package/dist/commands/repo/add.js.map +1 -1
- package/dist/commands/repo/list.js +1 -1
- package/dist/commands/repo/list.js.map +1 -1
- package/dist/commands/repo/remove.js +1 -1
- package/dist/commands/repo/remove.js.map +1 -1
- package/dist/commands/repo/view.js +1 -1
- package/dist/commands/repo/view.js.map +1 -1
- package/dist/commands/run/index.d.ts +25 -0
- package/dist/commands/run/index.js +212 -0
- package/dist/commands/run/index.js.map +1 -0
- package/dist/commands/session/index.js +4 -0
- package/dist/commands/session/index.js.map +1 -1
- package/dist/commands/session/prune.d.ts +18 -0
- package/dist/commands/session/prune.js +327 -0
- package/dist/commands/session/prune.js.map +1 -0
- package/dist/commands/shortcut/connect.d.ts +15 -0
- package/dist/commands/shortcut/connect.js +210 -0
- package/dist/commands/shortcut/connect.js.map +1 -0
- package/dist/commands/stop.d.ts +19 -0
- package/dist/commands/stop.js +83 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/work/asana.d.ts +23 -0
- package/dist/commands/work/asana.js +213 -0
- package/dist/commands/work/asana.js.map +1 -0
- package/dist/commands/work/complete.js +1 -1
- package/dist/commands/work/complete.js.map +1 -1
- package/dist/commands/work/ready.js +1 -1
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/review.js +1 -1
- package/dist/commands/work/review.js.map +1 -1
- package/dist/commands/work/revise.js +1 -1
- package/dist/commands/work/revise.js.map +1 -1
- package/dist/commands/work/shortcut.d.ts +23 -0
- package/dist/commands/work/shortcut.js +212 -0
- package/dist/commands/work/shortcut.js.map +1 -0
- package/dist/commands/work/spawn.d.ts +3 -0
- package/dist/commands/work/spawn.js +175 -2
- package/dist/commands/work/spawn.js.map +1 -1
- package/dist/commands/work/start.js +22 -30
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/watch.js +1 -1
- package/dist/commands/work/watch.js.map +1 -1
- package/dist/commands/workspace/add.js +1 -1
- package/dist/commands/workspace/add.js.map +1 -1
- package/dist/commands/workspace/list.js +1 -1
- package/dist/commands/workspace/list.js.map +1 -1
- package/dist/hooks/init.d.ts +1 -1
- package/dist/hooks/init.js +6 -6
- package/dist/hooks/init.js.map +1 -1
- package/dist/lib/agent-naming.d.ts +15 -0
- package/dist/lib/agent-naming.js +32 -0
- package/dist/lib/agent-naming.js.map +1 -0
- package/dist/lib/agents/commands.d.ts +2 -0
- package/dist/lib/agents/commands.js +51 -44
- package/dist/lib/agents/commands.js.map +1 -1
- package/dist/lib/agents/index.js +5 -0
- package/dist/lib/agents/index.js.map +1 -1
- package/dist/lib/asana/client.d.ts +8 -0
- package/dist/lib/asana/client.js +26 -7
- package/dist/lib/asana/client.js.map +1 -1
- package/dist/lib/asana/types.d.ts +20 -0
- package/dist/lib/branch/index.d.ts +36 -0
- package/dist/lib/branch/index.js +129 -0
- package/dist/lib/branch/index.js.map +1 -1
- package/dist/lib/database/index.js +1 -1
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/events/emitting-runner.d.ts +30 -0
- package/dist/lib/events/emitting-runner.js +95 -0
- package/dist/lib/events/emitting-runner.js.map +1 -0
- package/dist/lib/events/event-bus.d.ts +54 -0
- package/dist/lib/events/event-bus.js +107 -0
- package/dist/lib/events/event-bus.js.map +1 -0
- package/dist/lib/events/events.d.ts +67 -0
- package/dist/lib/events/events.js +8 -0
- package/dist/lib/events/events.js.map +1 -0
- package/dist/lib/events/index.d.ts +7 -0
- package/dist/lib/events/index.js +6 -0
- package/dist/lib/events/index.js.map +1 -0
- package/dist/lib/execution/devcontainer.d.ts +27 -0
- package/dist/lib/execution/devcontainer.js +80 -0
- package/dist/lib/execution/devcontainer.js.map +1 -1
- package/dist/lib/execution/runners.d.ts +28 -0
- package/dist/lib/execution/runners.js +459 -31
- package/dist/lib/execution/runners.js.map +1 -1
- package/dist/lib/execution/spawner.js +35 -17
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/types.d.ts +1 -0
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/external-issues/adapters.d.ts +34 -0
- package/dist/lib/external-issues/adapters.js +191 -0
- package/dist/lib/external-issues/adapters.js.map +1 -1
- package/dist/lib/external-issues/asana.d.ts +75 -0
- package/dist/lib/external-issues/asana.js +243 -0
- package/dist/lib/external-issues/asana.js.map +1 -0
- package/dist/lib/external-issues/index.d.ts +4 -2
- package/dist/lib/external-issues/index.js +6 -2
- package/dist/lib/external-issues/index.js.map +1 -1
- package/dist/lib/external-issues/linear.js.map +1 -1
- package/dist/lib/external-issues/mapping-store.js +1 -1
- package/dist/lib/external-issues/shortcut.d.ts +86 -0
- package/dist/lib/external-issues/shortcut.js +274 -0
- package/dist/lib/external-issues/shortcut.js.map +1 -0
- package/dist/lib/external-issues/types.d.ts +3 -3
- package/dist/lib/external-issues/types.js +1 -1
- package/dist/lib/external-issues/types.js.map +1 -1
- package/dist/lib/mcp/tools/cli-passthrough.js +1 -1
- package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
- package/dist/lib/mcp/tools/work.js +1 -1
- package/dist/lib/mcp/tools/work.js.map +1 -1
- package/dist/lib/pmo/index.d.ts +2 -2
- package/dist/lib/pmo/index.js +3 -3
- package/dist/lib/pmo/index.js.map +1 -1
- package/dist/lib/pmo/sync-manager.js +1 -1
- package/dist/lib/pmo/sync-manager.js.map +1 -1
- package/dist/lib/pmo/watcher.js +1 -1
- package/dist/lib/pmo/watcher.js.map +1 -1
- package/dist/lib/repos/index.js +1 -1
- package/dist/lib/repos/index.js.map +1 -1
- package/dist/lib/runners/agent-runner.d.ts +92 -0
- package/dist/lib/runners/agent-runner.js +9 -0
- package/dist/lib/runners/agent-runner.js.map +1 -0
- package/dist/lib/runners/claude-code-runner.d.ts +53 -0
- package/dist/lib/runners/claude-code-runner.js +132 -0
- package/dist/lib/runners/claude-code-runner.js.map +1 -0
- package/dist/lib/runners/index.d.ts +34 -0
- package/dist/lib/runners/index.js +97 -0
- package/dist/lib/runners/index.js.map +1 -0
- package/dist/lib/session-store.d.ts +70 -0
- package/dist/lib/session-store.js +167 -0
- package/dist/lib/session-store.js.map +1 -0
- package/dist/lib/shortcut/config.d.ts +44 -0
- package/dist/lib/shortcut/config.js +98 -0
- package/dist/lib/shortcut/config.js.map +1 -0
- package/dist/lib/shortcut/index.d.ts +7 -0
- package/dist/lib/shortcut/index.js +7 -0
- package/dist/lib/shortcut/index.js.map +1 -0
- package/dist/lib/work-source/client.d.ts +10 -0
- package/dist/lib/work-source/client.js +74 -0
- package/dist/lib/work-source/client.js.map +1 -0
- package/dist/lib/work-source/config.d.ts +1 -1
- package/dist/lib/work-source/config.js +17 -1
- package/dist/lib/work-source/config.js.map +1 -1
- package/dist/lib/work-source/index.d.ts +1 -0
- package/dist/lib/work-source/index.js +1 -0
- package/dist/lib/work-source/index.js.map +1 -1
- package/dist/lib/workspace.js +2 -2
- package/dist/lib/workspace.js.map +1 -1
- package/oclif.manifest.json +4291 -3248
- package/package.json +1 -1
package/dist/commands/init.js
CHANGED
|
@@ -1,183 +1,73 @@
|
|
|
1
|
-
import { Command
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import * as path from 'node:path';
|
|
4
3
|
import * as fs from 'node:fs';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { shouldOutputJson, outputPromptAsJson, buildPromptConfig, createMetadata, } from '../lib/prompt-json.js';
|
|
4
|
+
import { ensureMachineConfigDir, getMachineConfigDir, getMachineConfigPath, readMachineConfig, writeMachineConfig, } from '../lib/machine-config.js';
|
|
5
|
+
import { isValidHQ } from '../lib/workspace.js';
|
|
6
|
+
import { machineOutputFlags } from '../lib/pmo/index.js';
|
|
7
|
+
import { shouldOutputJson } from '../lib/prompt-json.js';
|
|
10
8
|
export default class Init extends Command {
|
|
11
|
-
static description = 'Initialize
|
|
9
|
+
static description = 'Initialize machine-level Proletariat configuration (~/.proletariat)';
|
|
12
10
|
static examples = [
|
|
13
|
-
// Human mode (interactive)
|
|
14
11
|
'<%= config.bin %> <%= command.id %>',
|
|
15
|
-
|
|
16
|
-
'<%= config.bin %> <%= command.id %> --json --name myproject',
|
|
17
|
-
'<%= config.bin %> <%= command.id %> --json --name myproject --path /path/to/hq --agents agent1,agent2 --pmo',
|
|
12
|
+
'<%= config.bin %> <%= command.id %> --json',
|
|
18
13
|
];
|
|
19
14
|
static flags = {
|
|
20
15
|
...machineOutputFlags,
|
|
21
|
-
name: Flags.string({
|
|
22
|
-
description: 'HQ name',
|
|
23
|
-
char: 'n',
|
|
24
|
-
}),
|
|
25
|
-
path: Flags.string({
|
|
26
|
-
description: 'HQ path (defaults to ./{name}-hq)',
|
|
27
|
-
char: 'p',
|
|
28
|
-
}),
|
|
29
|
-
agents: Flags.string({
|
|
30
|
-
description: 'Comma-separated list of agent names',
|
|
31
|
-
char: 'a',
|
|
32
|
-
}),
|
|
33
|
-
repos: Flags.string({
|
|
34
|
-
description: 'Comma-separated list of repository paths to clone/move',
|
|
35
|
-
char: 'r',
|
|
36
|
-
}),
|
|
37
|
-
pmo: Flags.boolean({
|
|
38
|
-
description: 'Include PMO (Project Management Org)',
|
|
39
|
-
default: true,
|
|
40
|
-
allowNo: true,
|
|
41
|
-
}),
|
|
42
16
|
};
|
|
43
17
|
async run() {
|
|
44
18
|
const { flags } = await this.parse(Init);
|
|
45
|
-
|
|
46
|
-
|
|
19
|
+
const jsonMode = shouldOutputJson(flags);
|
|
20
|
+
// Step 1: Ensure machine config directory exists
|
|
21
|
+
ensureMachineConfigDir();
|
|
22
|
+
// Step 2: Ensure machine config file exists with valid structure
|
|
23
|
+
const configPath = getMachineConfigPath();
|
|
24
|
+
const config = readMachineConfig();
|
|
25
|
+
const configExists = fs.existsSync(configPath);
|
|
26
|
+
if (!configExists) {
|
|
27
|
+
// Write fresh config if none exists
|
|
28
|
+
writeMachineConfig(config);
|
|
47
29
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const hqPath = await promptForHQLocation(hqName);
|
|
62
|
-
// Step 3: Add agents (with theme options)
|
|
63
|
-
const agentResult = await promptForAgentsWithTheme();
|
|
64
|
-
// Step 4: Add repositories
|
|
65
|
-
const repos = await promptForRepositories(process.cwd(), []);
|
|
66
|
-
// Step 5: PMO setup (uses shared prompt from lib/pmo)
|
|
67
|
-
const pmoSetup = await promptForPMOSetup(hqPath, hqName);
|
|
68
|
-
// Create the options object
|
|
69
|
-
const options = {
|
|
70
|
-
workspaceType: 'hq',
|
|
71
|
-
hqName,
|
|
72
|
-
hqPath,
|
|
73
|
-
selectedAgents: agentResult.agents,
|
|
74
|
-
repos,
|
|
75
|
-
pmoSetup,
|
|
76
|
-
themeId: agentResult.themeId,
|
|
77
|
-
customTheme: agentResult.customTheme,
|
|
78
|
-
};
|
|
79
|
-
// Initialize the HQ
|
|
80
|
-
await initializeHQ(options);
|
|
81
|
-
// Show next steps
|
|
82
|
-
await showNextSteps(options);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Agent mode: use flags, output JSON
|
|
86
|
-
*/
|
|
87
|
-
async runAgentMode(flags) {
|
|
88
|
-
// If --name not provided, output a prompt so agents can supply it
|
|
89
|
-
if (!flags.name) {
|
|
90
|
-
outputPromptAsJson(buildPromptConfig('input', 'name', 'Enter a name for your headquarters:', undefined, undefined), createMetadata('init', flags));
|
|
30
|
+
// Step 3: Prune stale headquarters entries (paths that no longer exist)
|
|
31
|
+
const originalCount = config.headquarters.length;
|
|
32
|
+
config.headquarters = config.headquarters.filter(hq => {
|
|
33
|
+
if (!fs.existsSync(hq.path))
|
|
34
|
+
return false;
|
|
35
|
+
if (!isValidHQ(hq.path))
|
|
36
|
+
return false;
|
|
37
|
+
return true;
|
|
38
|
+
});
|
|
39
|
+
const prunedCount = originalCount - config.headquarters.length;
|
|
40
|
+
// Clear active HQ if it was pruned
|
|
41
|
+
if (config.activeHeadquarters && !config.headquarters.some(hq => hq.path === config.activeHeadquarters)) {
|
|
42
|
+
config.activeHeadquarters = null;
|
|
91
43
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (hqName && isHQNameTaken(hqName)) {
|
|
95
|
-
this.outputJson({
|
|
96
|
-
success: false,
|
|
97
|
-
error: `HQ name "${hqName}" is already in use on this machine. Pick another name.`,
|
|
98
|
-
});
|
|
99
|
-
this.exit(1);
|
|
44
|
+
if (prunedCount > 0) {
|
|
45
|
+
writeMachineConfig(config);
|
|
100
46
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (!validateHQLocation(hqPath)) {
|
|
104
|
-
this.outputJson({
|
|
105
|
-
success: false,
|
|
106
|
-
error: 'Cannot create HQ inside a git repository',
|
|
107
|
-
path: hqPath,
|
|
108
|
-
});
|
|
109
|
-
this.exit(1);
|
|
110
|
-
}
|
|
111
|
-
// Check if directory already exists
|
|
112
|
-
if (fs.existsSync(hqPath)) {
|
|
113
|
-
this.outputJson({
|
|
114
|
-
success: false,
|
|
115
|
-
error: 'Directory already exists',
|
|
116
|
-
path: hqPath,
|
|
117
|
-
});
|
|
118
|
-
this.exit(1);
|
|
119
|
-
}
|
|
120
|
-
// Parse agents
|
|
121
|
-
const selectedAgents = flags.agents
|
|
122
|
-
? flags.agents.split(',').map(a => a.trim()).filter(Boolean)
|
|
123
|
-
: [];
|
|
124
|
-
// Parse repos
|
|
125
|
-
const repos = flags.repos
|
|
126
|
-
? flags.repos.split(',').map(r => ({
|
|
127
|
-
path: r.trim(),
|
|
128
|
-
action: 'clone',
|
|
129
|
-
})).filter(r => r.path)
|
|
130
|
-
: [];
|
|
131
|
-
// Create options
|
|
132
|
-
const options = {
|
|
133
|
-
workspaceType: 'hq',
|
|
134
|
-
hqName,
|
|
135
|
-
hqPath,
|
|
136
|
-
selectedAgents,
|
|
137
|
-
repos,
|
|
138
|
-
quiet: true, // Suppress console output in JSON mode
|
|
139
|
-
pmoSetup: {
|
|
140
|
-
includePMO: flags.pmo,
|
|
141
|
-
location: 'separate',
|
|
142
|
-
boardTemplate: 'default',
|
|
143
|
-
boardName: `${hqName}-kanban`,
|
|
144
|
-
columns: ['Backlog', 'In Progress', 'Review', 'Done'],
|
|
145
|
-
storageType: 'sqlite',
|
|
146
|
-
},
|
|
147
|
-
};
|
|
148
|
-
// Suppress console output in JSON mode
|
|
149
|
-
const originalLog = console.log;
|
|
150
|
-
console.log = () => { };
|
|
151
|
-
try {
|
|
152
|
-
// Initialize the HQ
|
|
153
|
-
await initializeHQ(options);
|
|
154
|
-
// Restore console.log
|
|
155
|
-
console.log = originalLog;
|
|
156
|
-
// Output success JSON
|
|
47
|
+
// Output results
|
|
48
|
+
if (jsonMode) {
|
|
157
49
|
this.outputJson({
|
|
158
50
|
success: true,
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
pmo: flags.pmo,
|
|
165
|
-
},
|
|
51
|
+
configDir: getMachineConfigDir(),
|
|
52
|
+
configPath,
|
|
53
|
+
headquarters: config.headquarters.length,
|
|
54
|
+
prunedStaleEntries: prunedCount,
|
|
55
|
+
activeHeadquarters: config.activeHeadquarters,
|
|
166
56
|
});
|
|
167
57
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
console.log
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
58
|
+
else {
|
|
59
|
+
console.log(chalk.green('Machine configuration initialized.'));
|
|
60
|
+
console.log(chalk.gray(` Config: ${configPath}`));
|
|
61
|
+
console.log(chalk.gray(` Registered HQs: ${config.headquarters.length}`));
|
|
62
|
+
if (prunedCount > 0) {
|
|
63
|
+
console.log(chalk.yellow(` Pruned ${prunedCount} stale HQ entries`));
|
|
64
|
+
}
|
|
65
|
+
if (config.headquarters.length === 0) {
|
|
66
|
+
console.log(chalk.blue('\nNo headquarters found. Create one with:'));
|
|
67
|
+
console.log(chalk.yellow(' prlt new'));
|
|
68
|
+
}
|
|
176
69
|
}
|
|
177
70
|
}
|
|
178
|
-
/**
|
|
179
|
-
* Output JSON to stdout
|
|
180
|
-
*/
|
|
181
71
|
outputJson(data) {
|
|
182
72
|
console.log(JSON.stringify(data, null, 2));
|
|
183
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt logs <agent> — view full agent logs
|
|
3
|
+
*
|
|
4
|
+
* Captures the full tmux scrollback for an agent session.
|
|
5
|
+
* Works without HQ / PMO.
|
|
6
|
+
*/
|
|
7
|
+
import { PromptCommand } from '../lib/prompt-command.js';
|
|
8
|
+
export default class Logs extends PromptCommand {
|
|
9
|
+
static description: string;
|
|
10
|
+
static examples: string[];
|
|
11
|
+
static args: {
|
|
12
|
+
agent: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
13
|
+
};
|
|
14
|
+
static flags: {
|
|
15
|
+
lines: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prlt logs <agent> — view full agent logs
|
|
3
|
+
*
|
|
4
|
+
* Captures the full tmux scrollback for an agent session.
|
|
5
|
+
* Works without HQ / PMO.
|
|
6
|
+
*/
|
|
7
|
+
import { Args, Flags } from '@oclif/core';
|
|
8
|
+
import { PromptCommand } from '../lib/prompt-command.js';
|
|
9
|
+
import { machineOutputFlags } from '../lib/pmo/index.js';
|
|
10
|
+
import { shouldOutputJson, outputSuccessAsJson, outputErrorAsJson, createMetadata, } from '../lib/prompt-json.js';
|
|
11
|
+
import { SessionStore } from '../lib/session-store.js';
|
|
12
|
+
import { getRunner } from '../lib/runners/index.js';
|
|
13
|
+
export default class Logs extends PromptCommand {
|
|
14
|
+
static description = 'View full agent logs (full tmux scrollback)';
|
|
15
|
+
static examples = [
|
|
16
|
+
'<%= config.bin %> logs bold-fox',
|
|
17
|
+
'<%= config.bin %> logs SES-ABC123',
|
|
18
|
+
'<%= config.bin %> logs bold-fox --lines 500',
|
|
19
|
+
];
|
|
20
|
+
static args = {
|
|
21
|
+
agent: Args.string({
|
|
22
|
+
description: 'Agent name or session ID',
|
|
23
|
+
required: true,
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
static flags = {
|
|
27
|
+
...machineOutputFlags,
|
|
28
|
+
lines: Flags.integer({
|
|
29
|
+
char: 'l',
|
|
30
|
+
description: 'Number of scrollback lines to capture',
|
|
31
|
+
default: 10000,
|
|
32
|
+
}),
|
|
33
|
+
};
|
|
34
|
+
async run() {
|
|
35
|
+
const { args, flags } = await this.parse(Logs);
|
|
36
|
+
const jsonMode = shouldOutputJson(flags);
|
|
37
|
+
const store = new SessionStore();
|
|
38
|
+
try {
|
|
39
|
+
store.reconcile();
|
|
40
|
+
const session = store.resolve(args.agent);
|
|
41
|
+
if (!session) {
|
|
42
|
+
if (jsonMode) {
|
|
43
|
+
outputErrorAsJson('SESSION_NOT_FOUND', `No session found for "${args.agent}". Run "prlt ps" to see agents.`, createMetadata('logs', flags));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.error(`No session found for "${args.agent}". Run "prlt ps" to see agents.`);
|
|
47
|
+
}
|
|
48
|
+
const runner = getRunner(session.runner);
|
|
49
|
+
if (!runner) {
|
|
50
|
+
if (jsonMode) {
|
|
51
|
+
outputErrorAsJson('RUNNER_NOT_FOUND', `Runner "${session.runner}" not available.`, createMetadata('logs', flags));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.error(`Runner "${session.runner}" not available.`);
|
|
55
|
+
}
|
|
56
|
+
const agentSession = {
|
|
57
|
+
id: session.id,
|
|
58
|
+
runner: session.runner,
|
|
59
|
+
sessionName: session.sessionName,
|
|
60
|
+
task: session.task,
|
|
61
|
+
workdir: session.workdir,
|
|
62
|
+
startedAt: session.startedAt,
|
|
63
|
+
status: session.status,
|
|
64
|
+
};
|
|
65
|
+
const output = await runner.peek(agentSession, flags.lines);
|
|
66
|
+
if (jsonMode) {
|
|
67
|
+
outputSuccessAsJson({
|
|
68
|
+
id: session.id,
|
|
69
|
+
agentName: session.agentName,
|
|
70
|
+
sessionName: session.sessionName,
|
|
71
|
+
lines: flags.lines,
|
|
72
|
+
content: output,
|
|
73
|
+
}, createMetadata('logs', flags));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Raw text output — pipeable
|
|
77
|
+
process.stdout.write(output + '\n');
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
store.close();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,7 +64,7 @@ export default class McpServerCommand extends Command {
|
|
|
64
64
|
const ctx = {
|
|
65
65
|
get storage() {
|
|
66
66
|
if (!pmoContext) {
|
|
67
|
-
throw new Error('PMO not initialized. Run "prlt
|
|
67
|
+
throw new Error('PMO not initialized. Run "prlt new" first.');
|
|
68
68
|
}
|
|
69
69
|
return pmoContext.storage;
|
|
70
70
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/commands/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,CAAC,WAAW,GAAG,gFAAgF,CAAA;IAErG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;IAEpB,MAAM,CAAC,QAAQ,GAAG,CAAC,8BAA8B,CAAC,CAAA;IAElD,KAAK,CAAC,GAAG;QACP,6DAA6D;QAC7D,IAAI,UAAU,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAA;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC,CAAA;QAEF,4DAA4D;QAC5D,IAAI,gBAAgB,GAA0E,IAAI,CAAA;QAClG,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;YACxC,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;gBAC5E,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAC/B,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;gBACjD,gBAAgB,GAAG;oBACjB,aAAa;oBACb,gBAAgB;oBAChB,EAAE;oBACF,OAAO,EAAE,UAAU,CAAC,OAAO;iBAC5B,CAAA;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;QAED,sBAAsB;QACtB,MAAM,GAAG,GAAmB;YAC1B,IAAI,OAAO;gBACT,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/commands/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,CAAC,WAAW,GAAG,gFAAgF,CAAA;IAErG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAA;IAEpB,MAAM,CAAC,QAAQ,GAAG,CAAC,8BAA8B,CAAC,CAAA;IAElD,KAAK,CAAC,GAAG;QACP,6DAA6D;QAC7D,IAAI,UAAU,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAA;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;SAC7B,CAAC,CAAA;QAEF,4DAA4D;QAC5D,IAAI,gBAAgB,GAA0E,IAAI,CAAA;QAClG,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;YACxC,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;gBAC5E,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAA;gBAC/B,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;gBACjD,gBAAgB,GAAG;oBACjB,aAAa;oBACb,gBAAgB;oBAChB,EAAE;oBACF,OAAO,EAAE,UAAU,CAAC,OAAO;iBAC5B,CAAA;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;QAED,sBAAsB;QACtB,MAAM,GAAG,GAAmB;YAC1B,IAAI,OAAO;gBACT,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;gBAC/D,CAAC;gBACD,OAAO,UAAU,CAAC,OAAO,CAAA;YAC3B,CAAC;YACD,UAAU,EAAE,CAAC,GAAW,EAAU,EAAE;gBAClC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;wBAC3B,QAAQ,EAAE,OAAO;wBACjB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;wBAClB,GAAG,EAAE;4BACH,GAAG,OAAO,CAAC,GAAG;4BACd,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;yBAC9D;wBACD,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;qBAC5B,CAAC,CAAA;oBACF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;gBACtB,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACxB,MAAM,SAAS,GAAG,KAA+D,CAAA;oBACjF,IAAI,SAAS,CAAC,MAAM;wBAAE,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;oBACpD,IAAI,SAAS,CAAC,MAAM;wBAAE,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;oBACpD,MAAM,KAAK,CAAA;gBACb,CAAC;YACH,CAAC;YACD,mBAAmB,EAAE,gBAAgB;gBACnC,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAiB;gBACzB,CAAC,CAAC,SAAS;SACd,CAAA;QAED,+BAA+B;QAC/B,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACjC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC/B,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9B,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9B,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9B,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAClC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC/B,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACjC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAClC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAClC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9B,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9B,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC/B,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9B,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC/B,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9B,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9B,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAEjC,8BAA8B;QAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;QAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class New extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
path: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
agents: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
repos: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
pmo: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Human mode: interactive prompts with colored output
|
|
17
|
+
*/
|
|
18
|
+
private runHumanMode;
|
|
19
|
+
/**
|
|
20
|
+
* Agent mode: use flags, output JSON
|
|
21
|
+
*/
|
|
22
|
+
private runAgentMode;
|
|
23
|
+
/**
|
|
24
|
+
* Output JSON to stdout
|
|
25
|
+
*/
|
|
26
|
+
private outputJson;
|
|
27
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import * as fs from 'node:fs';
|
|
5
|
+
import { promptForHQName, promptForHQLocation, initializeHQ, showNextSteps, validateHQLocation, isHQNameTaken, } from '../lib/init/index.js';
|
|
6
|
+
import { promptForAgentsWithTheme } from '../lib/agents/index.js';
|
|
7
|
+
import { promptForRepositories } from '../lib/repos/index.js';
|
|
8
|
+
import { promptForPMOSetup, machineOutputFlags } from '../lib/pmo/index.js';
|
|
9
|
+
import { shouldOutputJson, outputPromptAsJson, buildPromptConfig, createMetadata, } from '../lib/prompt-json.js';
|
|
10
|
+
export default class New extends Command {
|
|
11
|
+
static description = 'Create a new headquarters for managing repositories, agents, and projects';
|
|
12
|
+
static examples = [
|
|
13
|
+
// Human mode (interactive)
|
|
14
|
+
'<%= config.bin %> <%= command.id %>',
|
|
15
|
+
// Agent mode (JSON)
|
|
16
|
+
'<%= config.bin %> <%= command.id %> --json --name myproject',
|
|
17
|
+
'<%= config.bin %> <%= command.id %> --json --name myproject --path /path/to/hq --agents agent1,agent2 --pmo',
|
|
18
|
+
];
|
|
19
|
+
static flags = {
|
|
20
|
+
...machineOutputFlags,
|
|
21
|
+
name: Flags.string({
|
|
22
|
+
description: 'HQ name',
|
|
23
|
+
char: 'n',
|
|
24
|
+
}),
|
|
25
|
+
path: Flags.string({
|
|
26
|
+
description: 'HQ path (defaults to ./{name}-hq)',
|
|
27
|
+
char: 'p',
|
|
28
|
+
}),
|
|
29
|
+
agents: Flags.string({
|
|
30
|
+
description: 'Comma-separated list of agent names',
|
|
31
|
+
char: 'a',
|
|
32
|
+
}),
|
|
33
|
+
repos: Flags.string({
|
|
34
|
+
description: 'Comma-separated list of repository paths to clone/move',
|
|
35
|
+
char: 'r',
|
|
36
|
+
}),
|
|
37
|
+
pmo: Flags.boolean({
|
|
38
|
+
description: 'Include PMO (Project Management Org)',
|
|
39
|
+
default: true,
|
|
40
|
+
allowNo: true,
|
|
41
|
+
}),
|
|
42
|
+
};
|
|
43
|
+
async run() {
|
|
44
|
+
const { flags } = await this.parse(New);
|
|
45
|
+
if (shouldOutputJson(flags)) {
|
|
46
|
+
await this.runAgentMode(flags);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
await this.runHumanMode();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Human mode: interactive prompts with colored output
|
|
54
|
+
*/
|
|
55
|
+
async runHumanMode() {
|
|
56
|
+
console.log(chalk.blue('🚀 Creating a new headquarters...\n'));
|
|
57
|
+
// Step 1: Get HQ name
|
|
58
|
+
const hqName = await promptForHQName();
|
|
59
|
+
// Step 2: Determine location (always adds -hq suffix)
|
|
60
|
+
const hqPath = await promptForHQLocation(hqName);
|
|
61
|
+
// Step 3: Add agents (with theme options)
|
|
62
|
+
const agentResult = await promptForAgentsWithTheme();
|
|
63
|
+
// Step 4: Add repositories
|
|
64
|
+
const repos = await promptForRepositories(process.cwd(), []);
|
|
65
|
+
// Step 5: PMO setup (uses shared prompt from lib/pmo)
|
|
66
|
+
const pmoSetup = await promptForPMOSetup(hqPath, hqName);
|
|
67
|
+
// Create the options object
|
|
68
|
+
const options = {
|
|
69
|
+
workspaceType: 'hq',
|
|
70
|
+
hqName,
|
|
71
|
+
hqPath,
|
|
72
|
+
selectedAgents: agentResult.agents,
|
|
73
|
+
repos,
|
|
74
|
+
pmoSetup,
|
|
75
|
+
themeId: agentResult.themeId,
|
|
76
|
+
customTheme: agentResult.customTheme,
|
|
77
|
+
};
|
|
78
|
+
// Initialize the HQ
|
|
79
|
+
await initializeHQ(options);
|
|
80
|
+
// Show next steps
|
|
81
|
+
await showNextSteps(options);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Agent mode: use flags, output JSON
|
|
85
|
+
*/
|
|
86
|
+
async runAgentMode(flags) {
|
|
87
|
+
// If --name not provided, output a prompt so agents can supply it
|
|
88
|
+
if (!flags.name) {
|
|
89
|
+
outputPromptAsJson(buildPromptConfig('input', 'name', 'Enter a name for your headquarters:', undefined, undefined), createMetadata('new', flags));
|
|
90
|
+
}
|
|
91
|
+
const hqName = flags.name;
|
|
92
|
+
// Check if HQ name is already in use
|
|
93
|
+
if (hqName && isHQNameTaken(hqName)) {
|
|
94
|
+
this.outputJson({
|
|
95
|
+
success: false,
|
|
96
|
+
error: `HQ name "${hqName}" is already in use on this machine. Pick another name.`,
|
|
97
|
+
});
|
|
98
|
+
this.exit(1);
|
|
99
|
+
}
|
|
100
|
+
const hqPath = flags.path || path.resolve(`./${hqName}-hq`);
|
|
101
|
+
// Validate HQ path is not inside a git repo
|
|
102
|
+
if (!validateHQLocation(hqPath)) {
|
|
103
|
+
this.outputJson({
|
|
104
|
+
success: false,
|
|
105
|
+
error: 'Cannot create HQ inside a git repository',
|
|
106
|
+
path: hqPath,
|
|
107
|
+
});
|
|
108
|
+
this.exit(1);
|
|
109
|
+
}
|
|
110
|
+
// Check if directory already exists
|
|
111
|
+
if (fs.existsSync(hqPath)) {
|
|
112
|
+
this.outputJson({
|
|
113
|
+
success: false,
|
|
114
|
+
error: 'Directory already exists',
|
|
115
|
+
path: hqPath,
|
|
116
|
+
});
|
|
117
|
+
this.exit(1);
|
|
118
|
+
}
|
|
119
|
+
// Parse agents
|
|
120
|
+
const selectedAgents = flags.agents
|
|
121
|
+
? flags.agents.split(',').map(a => a.trim()).filter(Boolean)
|
|
122
|
+
: [];
|
|
123
|
+
// Parse repos
|
|
124
|
+
const repos = flags.repos
|
|
125
|
+
? flags.repos.split(',').map(r => ({
|
|
126
|
+
path: r.trim(),
|
|
127
|
+
action: 'clone',
|
|
128
|
+
})).filter(r => r.path)
|
|
129
|
+
: [];
|
|
130
|
+
// Create options
|
|
131
|
+
const options = {
|
|
132
|
+
workspaceType: 'hq',
|
|
133
|
+
hqName,
|
|
134
|
+
hqPath,
|
|
135
|
+
selectedAgents,
|
|
136
|
+
repos,
|
|
137
|
+
quiet: true, // Suppress console output in JSON mode
|
|
138
|
+
pmoSetup: {
|
|
139
|
+
includePMO: flags.pmo,
|
|
140
|
+
location: 'separate',
|
|
141
|
+
boardTemplate: 'default',
|
|
142
|
+
boardName: `${hqName}-kanban`,
|
|
143
|
+
columns: ['Backlog', 'In Progress', 'Review', 'Done'],
|
|
144
|
+
storageType: 'sqlite',
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
// Suppress console output in JSON mode
|
|
148
|
+
const originalLog = console.log;
|
|
149
|
+
console.log = () => { };
|
|
150
|
+
try {
|
|
151
|
+
// Initialize the HQ
|
|
152
|
+
await initializeHQ(options);
|
|
153
|
+
// Restore console.log
|
|
154
|
+
console.log = originalLog;
|
|
155
|
+
// Output success JSON
|
|
156
|
+
this.outputJson({
|
|
157
|
+
success: true,
|
|
158
|
+
hq: {
|
|
159
|
+
name: hqName,
|
|
160
|
+
path: hqPath,
|
|
161
|
+
agents: selectedAgents,
|
|
162
|
+
repos: repos.map(r => r.path),
|
|
163
|
+
pmo: flags.pmo,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
// Restore console.log on error
|
|
169
|
+
console.log = originalLog;
|
|
170
|
+
this.outputJson({
|
|
171
|
+
success: false,
|
|
172
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
173
|
+
});
|
|
174
|
+
this.exit(1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Output JSON to stdout
|
|
179
|
+
*/
|
|
180
|
+
outputJson(data) {
|
|
181
|
+
console.log(JSON.stringify(data, null, 2));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|