@proletariat/cli 0.3.87 → 0.3.88
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/dist/commands/init.d.ts +6 -1
- package/dist/commands/init.js +44 -89
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/new.d.ts +30 -2
- package/dist/commands/new.js +141 -9
- package/dist/commands/new.js.map +1 -1
- package/dist/hooks/init.js +3 -6
- package/dist/hooks/init.js.map +1 -1
- package/dist/lib/asana/config.d.ts +1 -1
- package/dist/lib/asana/config.js +18 -30
- package/dist/lib/asana/config.js.map +1 -1
- package/dist/lib/asana/mapper.d.ts +4 -3
- package/dist/lib/asana/mapper.js +17 -10
- package/dist/lib/asana/mapper.js.map +1 -1
- package/dist/lib/database/agents.d.ts +73 -0
- package/dist/lib/database/agents.js +341 -0
- package/dist/lib/database/agents.js.map +1 -0
- package/dist/lib/database/driver.d.ts +115 -0
- package/dist/lib/database/driver.js +109 -0
- package/dist/lib/database/driver.js.map +1 -0
- package/dist/lib/database/index.d.ts +25 -287
- package/dist/lib/database/index.js +35 -1067
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/database/media.d.ts +53 -0
- package/dist/lib/database/media.js +118 -0
- package/dist/lib/database/media.js.map +1 -0
- package/dist/lib/database/pmo-bootstrap.d.ts +30 -0
- package/dist/lib/database/pmo-bootstrap.js +105 -0
- package/dist/lib/database/pmo-bootstrap.js.map +1 -0
- package/dist/lib/database/repositories.d.ts +26 -0
- package/dist/lib/database/repositories.js +56 -0
- package/dist/lib/database/repositories.js.map +1 -0
- package/dist/lib/database/settings-store.d.ts +60 -0
- package/dist/lib/database/settings-store.js +87 -0
- package/dist/lib/database/settings-store.js.map +1 -0
- package/dist/lib/database/themes.d.ts +59 -0
- package/dist/lib/database/themes.js +212 -0
- package/dist/lib/database/themes.js.map +1 -0
- package/dist/lib/database/workspace.d.ts +46 -0
- package/dist/lib/database/workspace.js +158 -0
- package/dist/lib/database/workspace.js.map +1 -0
- package/dist/lib/database/worktrees.d.ts +33 -0
- package/dist/lib/database/worktrees.js +60 -0
- package/dist/lib/database/worktrees.js.map +1 -0
- package/dist/lib/execution/config.d.ts +1 -1
- package/dist/lib/execution/config.js +7 -17
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/spawner.d.ts +1 -1
- package/dist/lib/execution/storage.d.ts +4 -3
- package/dist/lib/execution/storage.js +11 -4
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/external-issues/mapping-store.d.ts +4 -3
- package/dist/lib/external-issues/mapping-store.js +21 -13
- package/dist/lib/external-issues/mapping-store.js.map +1 -1
- package/dist/lib/external-issues/outbound-sync.d.ts +1 -1
- package/dist/lib/jira/config.d.ts +1 -6
- package/dist/lib/jira/config.js +16 -33
- package/dist/lib/jira/config.js.map +1 -1
- package/dist/lib/linear/config.d.ts +1 -1
- package/dist/lib/linear/config.js +16 -38
- package/dist/lib/linear/config.js.map +1 -1
- package/dist/lib/linear/mapper.d.ts +4 -3
- package/dist/lib/linear/mapper.js +20 -13
- package/dist/lib/linear/mapper.js.map +1 -1
- package/dist/lib/monday/config.d.ts +1 -1
- package/dist/lib/monday/config.js +16 -32
- package/dist/lib/monday/config.js.map +1 -1
- package/dist/lib/monday/mapper.d.ts +4 -3
- package/dist/lib/monday/mapper.js +19 -12
- package/dist/lib/monday/mapper.js.map +1 -1
- package/dist/lib/onboarding/wizard.d.ts +2 -2
- package/dist/lib/onboarding/wizard.js +32 -24
- package/dist/lib/onboarding/wizard.js.map +1 -1
- package/dist/lib/pmo/diet.d.ts +1 -1
- package/dist/lib/pmo/storage/index.d.ts +8 -0
- package/dist/lib/pmo/storage/index.js +13 -1
- package/dist/lib/pmo/storage/index.js.map +1 -1
- package/dist/lib/pmo/storage/types.d.ts +4 -1
- package/dist/lib/shortcut/config.d.ts +1 -7
- package/dist/lib/shortcut/config.js +13 -32
- package/dist/lib/shortcut/config.js.map +1 -1
- package/dist/lib/trello/config.d.ts +1 -26
- package/dist/lib/trello/config.js +23 -64
- package/dist/lib/trello/config.js.map +1 -1
- package/dist/lib/trello/mapper.d.ts +4 -3
- package/dist/lib/trello/mapper.js +17 -10
- package/dist/lib/trello/mapper.js.map +1 -1
- package/dist/lib/work-lifecycle/post-execution.d.ts +1 -1
- package/dist/lib/work-source/config.d.ts +1 -1
- package/dist/lib/work-source/config.js +14 -24
- package/dist/lib/work-source/config.js.map +1 -1
- package/dist/lib/work-source/provider-sources.d.ts +1 -1
- package/dist/lib/work-source/provider-sources.js +8 -20
- package/dist/lib/work-source/provider-sources.js.map +1 -1
- package/oclif.manifest.json +1461 -1412
- package/package.json +1 -1
package/dist/commands/init.d.ts
CHANGED
|
@@ -2,11 +2,16 @@ import { Command } from '@oclif/core';
|
|
|
2
2
|
export default class Init extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
|
+
static hidden: boolean;
|
|
5
6
|
static flags: {
|
|
7
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
path: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
agents: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
repos: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
pmo: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
6
12
|
setup: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
13
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
14
|
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
15
|
};
|
|
10
16
|
run(): Promise<void>;
|
|
11
|
-
private outputJson;
|
|
12
17
|
}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,112 +1,67 @@
|
|
|
1
1
|
import { Command, Flags } from '@oclif/core';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import * as fs from 'node:fs';
|
|
4
|
-
import { ensureMachineConfigDir, getMachineConfigDir, getMachineConfigPath, readMachineConfig, writeMachineConfig, } from '../lib/machine-config.js';
|
|
5
|
-
import { isValidHQ } from '../lib/workspace.js';
|
|
6
3
|
import { machineOutputFlags } from '../lib/pmo/index.js';
|
|
7
|
-
import { shouldOutputJson } from '../lib/prompt-json.js';
|
|
8
|
-
import { isFirstTimeUser, runOnboardingWizard, runOnboardingJsonMode, detectAITools, } from '../lib/onboarding/index.js';
|
|
9
4
|
export default class Init extends Command {
|
|
10
|
-
static description = 'Initialize
|
|
5
|
+
static description = 'Initialize a new headquarters (deprecated — use `prlt new` instead)';
|
|
11
6
|
static examples = [
|
|
12
|
-
'<%= config.bin %>
|
|
13
|
-
'<%= config.bin %> <%= command.id %> --json',
|
|
14
|
-
'<%= config.bin %> <%= command.id %> --json --setup claude-code',
|
|
7
|
+
'<%= config.bin %> new',
|
|
15
8
|
];
|
|
9
|
+
static hidden = true;
|
|
10
|
+
// Accept the same flags as `new` so forwarding works correctly
|
|
16
11
|
static flags = {
|
|
17
12
|
...machineOutputFlags,
|
|
13
|
+
name: Flags.string({
|
|
14
|
+
description: 'HQ name',
|
|
15
|
+
char: 'n',
|
|
16
|
+
}),
|
|
17
|
+
path: Flags.string({
|
|
18
|
+
description: 'HQ path (defaults to ./{name}-hq)',
|
|
19
|
+
char: 'p',
|
|
20
|
+
}),
|
|
21
|
+
agents: Flags.string({
|
|
22
|
+
description: 'Comma-separated list of agent names',
|
|
23
|
+
char: 'a',
|
|
24
|
+
}),
|
|
25
|
+
repos: Flags.string({
|
|
26
|
+
description: 'Comma-separated list of repository paths to clone/move',
|
|
27
|
+
char: 'r',
|
|
28
|
+
}),
|
|
29
|
+
pmo: Flags.boolean({
|
|
30
|
+
description: 'Include PMO (Project Management Org)',
|
|
31
|
+
default: true,
|
|
32
|
+
allowNo: true,
|
|
33
|
+
}),
|
|
18
34
|
setup: Flags.string({
|
|
19
35
|
description: 'Setup method for agent-driven onboarding (claude-code, codex, or manual)',
|
|
20
36
|
options: ['claude-code', 'codex', 'manual'],
|
|
21
37
|
}),
|
|
22
38
|
};
|
|
23
39
|
async run() {
|
|
24
|
-
const { flags } = await this.parse(Init);
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const originalCount = config.headquarters.length;
|
|
38
|
-
config.headquarters = config.headquarters.filter(hq => {
|
|
39
|
-
if (!fs.existsSync(hq.path))
|
|
40
|
-
return false;
|
|
41
|
-
if (!isValidHQ(hq.path))
|
|
42
|
-
return false;
|
|
43
|
-
return true;
|
|
44
|
-
});
|
|
45
|
-
const prunedCount = originalCount - config.headquarters.length;
|
|
46
|
-
// Clear active HQ if it was pruned
|
|
47
|
-
if (config.activeHeadquarters && !config.headquarters.some(hq => hq.path === config.activeHeadquarters)) {
|
|
48
|
-
config.activeHeadquarters = null;
|
|
49
|
-
}
|
|
50
|
-
if (prunedCount > 0) {
|
|
51
|
-
writeMachineConfig(config);
|
|
52
|
-
}
|
|
53
|
-
// Step 4: Onboarding wizard for first-time users
|
|
54
|
-
const firstTime = isFirstTimeUser(config.headquarters.length, config.activeHeadquarters ?? null);
|
|
55
|
-
if (firstTime) {
|
|
56
|
-
if (jsonMode) {
|
|
57
|
-
// JSON mode: handle --setup flag for agent-driven onboarding
|
|
58
|
-
if (flags.setup) {
|
|
59
|
-
runOnboardingJsonMode(flags);
|
|
60
|
-
// If runOnboardingJsonMode returns (manual mode), fall through to normal JSON output
|
|
40
|
+
const { argv, flags } = await this.parse(Init);
|
|
41
|
+
console.log(chalk.yellow('`prlt init` is deprecated. Use `prlt new` instead.\n'));
|
|
42
|
+
// Build args for forwarding to `new`
|
|
43
|
+
const newArgs = ['new'];
|
|
44
|
+
for (const [key, value] of Object.entries(flags)) {
|
|
45
|
+
if (value === undefined)
|
|
46
|
+
continue;
|
|
47
|
+
if (typeof value === 'boolean') {
|
|
48
|
+
if (value) {
|
|
49
|
+
newArgs.push(`--${key}`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
newArgs.push(`--no-${key}`);
|
|
61
53
|
}
|
|
62
|
-
// No --setup flag: fall through to include onboarding info in success response
|
|
63
54
|
}
|
|
64
55
|
else {
|
|
65
|
-
|
|
66
|
-
const result = await runOnboardingWizard();
|
|
67
|
-
if (result.method === 'ai') {
|
|
68
|
-
// AI tool was spawned — it will guide the user through prlt new
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
// Manual: fall through to show normal init output with prlt new guidance
|
|
56
|
+
newArgs.push(`--${key}`, String(value));
|
|
72
57
|
}
|
|
73
58
|
}
|
|
74
|
-
//
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
success: true,
|
|
78
|
-
configDir: getMachineConfigDir(),
|
|
79
|
-
configPath,
|
|
80
|
-
headquarters: config.headquarters.length,
|
|
81
|
-
prunedStaleEntries: prunedCount,
|
|
82
|
-
activeHeadquarters: config.activeHeadquarters,
|
|
83
|
-
};
|
|
84
|
-
if (firstTime) {
|
|
85
|
-
const detection = detectAITools();
|
|
86
|
-
jsonResult.firstTimeUser = true;
|
|
87
|
-
jsonResult.detectedTools = detection.tools.map(t => ({
|
|
88
|
-
name: t.name,
|
|
89
|
-
command: t.command,
|
|
90
|
-
displayName: t.displayName,
|
|
91
|
-
}));
|
|
92
|
-
}
|
|
93
|
-
this.outputJson(jsonResult);
|
|
59
|
+
// Forward positional args
|
|
60
|
+
for (const arg of argv) {
|
|
61
|
+
newArgs.push(arg);
|
|
94
62
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
console.log(chalk.gray(` Config: ${configPath}`));
|
|
98
|
-
console.log(chalk.gray(` Registered HQs: ${config.headquarters.length}`));
|
|
99
|
-
if (prunedCount > 0) {
|
|
100
|
-
console.log(chalk.yellow(` Pruned ${prunedCount} stale HQ entries`));
|
|
101
|
-
}
|
|
102
|
-
if (config.headquarters.length === 0) {
|
|
103
|
-
console.log(chalk.blue('\nNo headquarters found. Create one with:'));
|
|
104
|
-
console.log(chalk.yellow(' prlt new'));
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
outputJson(data) {
|
|
109
|
-
console.log(JSON.stringify(data, null, 2));
|
|
63
|
+
const { run } = await import('@oclif/core');
|
|
64
|
+
await run(newArgs, this.config);
|
|
110
65
|
}
|
|
111
66
|
}
|
|
112
67
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAC,WAAW,GAAG,qEAAqE,CAAC;IAE3F,MAAM,CAAC,QAAQ,GAAG;QAChB,uBAAuB;KACxB,CAAC;IAEF,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAErB,+DAA+D;IAC/D,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,kBAAkB;QACrB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,GAAG;SACV,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,mCAAmC;YAChD,IAAI,EAAE,GAAG;SACV,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,qCAAqC;YAClD,IAAI,EAAE,GAAG;SACV,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,wDAAwD;YACrE,IAAI,EAAE,GAAG;SACV,CAAC;QACF,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;YACjB,WAAW,EAAE,sCAAsC;YACnD,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,0EAA0E;YACvF,OAAO,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC;SAC5C,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAElF,qCAAqC;QACrC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,0BAA0B;QAC1B,KAAK,MAAM,GAAG,IAAK,IAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC"}
|
package/dist/commands/new.d.ts
CHANGED
|
@@ -8,18 +8,46 @@ export default class New extends Command {
|
|
|
8
8
|
agents: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
repos: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
pmo: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
setup: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
12
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
13
|
machine: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
14
|
};
|
|
14
15
|
run(): Promise<void>;
|
|
15
16
|
/**
|
|
16
|
-
*
|
|
17
|
+
* Detect whether this is the user's first time (no HQ exists anywhere).
|
|
18
|
+
*/
|
|
19
|
+
private detectFirstTime;
|
|
20
|
+
/**
|
|
21
|
+
* Human mode: interactive prompts with colored output.
|
|
22
|
+
* If first-time user, shows welcome + explainer before setup prompts.
|
|
23
|
+
* If returning user, goes straight to setup (power user flow).
|
|
17
24
|
*/
|
|
18
25
|
private runHumanMode;
|
|
19
26
|
/**
|
|
20
|
-
*
|
|
27
|
+
* First-time user flow: welcome, explainer, setup method choice, then HQ creation.
|
|
28
|
+
*/
|
|
29
|
+
private runFirstTimeHumanMode;
|
|
30
|
+
/**
|
|
31
|
+
* Returning user flow: straight to HQ creation (power user mode).
|
|
32
|
+
*/
|
|
33
|
+
private runReturningHumanMode;
|
|
34
|
+
/**
|
|
35
|
+
* Shared HQ creation flow (used by both first-time and returning user).
|
|
36
|
+
*/
|
|
37
|
+
private createHQ;
|
|
38
|
+
/**
|
|
39
|
+
* Show what to do next after HQ creation.
|
|
40
|
+
*/
|
|
41
|
+
private showNextSteps;
|
|
42
|
+
/**
|
|
43
|
+
* Agent mode: use flags, output JSON.
|
|
44
|
+
* For first-time users without --name, includes onboarding context.
|
|
21
45
|
*/
|
|
22
46
|
private runAgentMode;
|
|
47
|
+
/**
|
|
48
|
+
* Output first-time user JSON prompt with model-friendly context.
|
|
49
|
+
*/
|
|
50
|
+
private outputFirstTimeJsonPrompt;
|
|
23
51
|
/**
|
|
24
52
|
* Output JSON to stdout
|
|
25
53
|
*/
|
package/dist/commands/new.js
CHANGED
|
@@ -2,11 +2,14 @@ import { Command, Flags } from '@oclif/core';
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import * as fs from 'node:fs';
|
|
5
|
-
import { promptForHQName, promptForHQLocation, initializeHQ,
|
|
5
|
+
import { promptForHQName, promptForHQLocation, initializeHQ, validateHQLocation, isHQNameTaken, } from '../lib/init/index.js';
|
|
6
6
|
import { promptForAgentsWithTheme } from '../lib/agents/index.js';
|
|
7
7
|
import { promptForRepositories } from '../lib/repos/index.js';
|
|
8
8
|
import { promptForPMOSetup, machineOutputFlags } from '../lib/pmo/index.js';
|
|
9
9
|
import { shouldOutputJson, outputPromptAsJson, buildPromptConfig, createMetadata, } from '../lib/prompt-json.js';
|
|
10
|
+
import { isFirstTimeUser, detectAITools, runOnboardingWizard, runOnboardingJsonMode, } from '../lib/onboarding/index.js';
|
|
11
|
+
import { readMachineConfig, ensureMachineConfigDir, } from '../lib/machine-config.js';
|
|
12
|
+
import { findHQRoot } from '../lib/workspace.js';
|
|
10
13
|
export default class New extends Command {
|
|
11
14
|
static description = 'Create a new headquarters for managing repositories, agents, and projects';
|
|
12
15
|
static examples = [
|
|
@@ -39,6 +42,10 @@ export default class New extends Command {
|
|
|
39
42
|
default: true,
|
|
40
43
|
allowNo: true,
|
|
41
44
|
}),
|
|
45
|
+
setup: Flags.string({
|
|
46
|
+
description: 'Setup method for agent-driven onboarding (claude-code, codex, or manual)',
|
|
47
|
+
options: ['claude-code', 'codex', 'manual'],
|
|
48
|
+
}),
|
|
42
49
|
};
|
|
43
50
|
async run() {
|
|
44
51
|
const { flags } = await this.parse(New);
|
|
@@ -46,14 +53,57 @@ export default class New extends Command {
|
|
|
46
53
|
await this.runAgentMode(flags);
|
|
47
54
|
}
|
|
48
55
|
else {
|
|
49
|
-
await this.runHumanMode();
|
|
56
|
+
await this.runHumanMode(flags);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Detect whether this is the user's first time (no HQ exists anywhere).
|
|
61
|
+
*/
|
|
62
|
+
detectFirstTime() {
|
|
63
|
+
ensureMachineConfigDir();
|
|
64
|
+
const config = readMachineConfig();
|
|
65
|
+
const currentHQ = findHQRoot();
|
|
66
|
+
return isFirstTimeUser(config.headquarters.length, currentHQ);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Human mode: interactive prompts with colored output.
|
|
70
|
+
* If first-time user, shows welcome + explainer before setup prompts.
|
|
71
|
+
* If returning user, goes straight to setup (power user flow).
|
|
72
|
+
*/
|
|
73
|
+
async runHumanMode(flags) {
|
|
74
|
+
const firstTime = this.detectFirstTime();
|
|
75
|
+
if (firstTime) {
|
|
76
|
+
await this.runFirstTimeHumanMode(flags);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
await this.runReturningHumanMode();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* First-time user flow: welcome, explainer, setup method choice, then HQ creation.
|
|
84
|
+
*/
|
|
85
|
+
async runFirstTimeHumanMode(flags) {
|
|
86
|
+
// Step 1: Welcome + explainer
|
|
87
|
+
const result = await runOnboardingWizard();
|
|
88
|
+
if (result.method === 'ai') {
|
|
89
|
+
// AI tool was spawned — it will guide the user through prlt new
|
|
90
|
+
return;
|
|
50
91
|
}
|
|
92
|
+
// Manual: continue with HQ creation prompts
|
|
93
|
+
console.log(chalk.blue('\n🚀 Let\'s set up your first workspace.\n'));
|
|
94
|
+
await this.createHQ();
|
|
51
95
|
}
|
|
52
96
|
/**
|
|
53
|
-
*
|
|
97
|
+
* Returning user flow: straight to HQ creation (power user mode).
|
|
54
98
|
*/
|
|
55
|
-
async
|
|
99
|
+
async runReturningHumanMode() {
|
|
56
100
|
console.log(chalk.blue('🚀 Creating a new headquarters...\n'));
|
|
101
|
+
await this.createHQ();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Shared HQ creation flow (used by both first-time and returning user).
|
|
105
|
+
*/
|
|
106
|
+
async createHQ() {
|
|
57
107
|
// Step 1: Get HQ name
|
|
58
108
|
const hqName = await promptForHQName();
|
|
59
109
|
// Step 2: Determine location (always adds -hq suffix)
|
|
@@ -78,15 +128,44 @@ export default class New extends Command {
|
|
|
78
128
|
// Initialize the HQ
|
|
79
129
|
await initializeHQ(options);
|
|
80
130
|
// Show next steps
|
|
81
|
-
|
|
131
|
+
this.showNextSteps(hqPath);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Show what to do next after HQ creation.
|
|
135
|
+
*/
|
|
136
|
+
showNextSteps(hqPath) {
|
|
137
|
+
const relativePath = path.relative(process.cwd(), hqPath);
|
|
138
|
+
console.log(chalk.green('\n✨ Your workspace is ready!\n'));
|
|
139
|
+
console.log(chalk.white('Here\'s what to do next:\n'));
|
|
140
|
+
console.log(chalk.yellow(` cd ${relativePath}`));
|
|
141
|
+
console.log(chalk.gray(' Navigate into your new HQ\n'));
|
|
142
|
+
console.log(chalk.yellow(' prlt work start TICKET-ID'));
|
|
143
|
+
console.log(chalk.gray(' Spawn an agent on a ticket\n'));
|
|
144
|
+
console.log(chalk.yellow(' prlt session list'));
|
|
145
|
+
console.log(chalk.gray(' See running agents\n'));
|
|
146
|
+
console.log(chalk.yellow(' prlt work peek AGENT'));
|
|
147
|
+
console.log(chalk.gray(' Watch an agent work\n'));
|
|
82
148
|
}
|
|
83
149
|
/**
|
|
84
|
-
* Agent mode: use flags, output JSON
|
|
150
|
+
* Agent mode: use flags, output JSON.
|
|
151
|
+
* For first-time users without --name, includes onboarding context.
|
|
85
152
|
*/
|
|
86
153
|
async runAgentMode(flags) {
|
|
154
|
+
const firstTime = this.detectFirstTime();
|
|
155
|
+
// Handle --setup flag for first-time agent-driven onboarding
|
|
156
|
+
if (firstTime && flags.setup) {
|
|
157
|
+
runOnboardingJsonMode(flags);
|
|
158
|
+
// If runOnboardingJsonMode returns (manual mode), fall through to normal flow
|
|
159
|
+
}
|
|
87
160
|
// If --name not provided, output a prompt so agents can supply it
|
|
88
161
|
if (!flags.name) {
|
|
89
|
-
|
|
162
|
+
if (firstTime) {
|
|
163
|
+
// First-time user in JSON mode — include onboarding context
|
|
164
|
+
this.outputFirstTimeJsonPrompt(flags);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
outputPromptAsJson(buildPromptConfig('input', 'name', 'Enter a name for your headquarters:', undefined, undefined), createMetadata('new', flags));
|
|
168
|
+
}
|
|
90
169
|
return;
|
|
91
170
|
}
|
|
92
171
|
const hqName = flags.name;
|
|
@@ -154,7 +233,7 @@ export default class New extends Command {
|
|
|
154
233
|
// Restore console.log
|
|
155
234
|
console.log = originalLog;
|
|
156
235
|
// Output success JSON
|
|
157
|
-
|
|
236
|
+
const result = {
|
|
158
237
|
success: true,
|
|
159
238
|
hq: {
|
|
160
239
|
name: hqName,
|
|
@@ -163,7 +242,17 @@ export default class New extends Command {
|
|
|
163
242
|
repos: repos.map(r => r.path),
|
|
164
243
|
pmo: flags.pmo,
|
|
165
244
|
},
|
|
166
|
-
}
|
|
245
|
+
};
|
|
246
|
+
if (firstTime) {
|
|
247
|
+
result.firstTimeUser = true;
|
|
248
|
+
result.nextSteps = [
|
|
249
|
+
{ command: `cd ${path.relative(process.cwd(), hqPath) || hqPath}`, description: 'Navigate into your new HQ' },
|
|
250
|
+
{ command: 'prlt work start TICKET-ID', description: 'Spawn an agent on a ticket' },
|
|
251
|
+
{ command: 'prlt session list', description: 'See running agents' },
|
|
252
|
+
{ command: 'prlt work peek AGENT', description: 'Watch an agent work' },
|
|
253
|
+
];
|
|
254
|
+
}
|
|
255
|
+
this.outputJson(result);
|
|
167
256
|
}
|
|
168
257
|
catch (error) {
|
|
169
258
|
// Restore console.log on error
|
|
@@ -175,6 +264,49 @@ export default class New extends Command {
|
|
|
175
264
|
this.exit(1);
|
|
176
265
|
}
|
|
177
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Output first-time user JSON prompt with model-friendly context.
|
|
269
|
+
*/
|
|
270
|
+
outputFirstTimeJsonPrompt(flags) {
|
|
271
|
+
const detection = detectAITools();
|
|
272
|
+
const metadata = createMetadata('new', flags);
|
|
273
|
+
const output = {
|
|
274
|
+
type: 'prompt',
|
|
275
|
+
firstTimeUser: true,
|
|
276
|
+
onboarding: {
|
|
277
|
+
welcome: 'Welcome to Proletariat — AI agent orchestration.',
|
|
278
|
+
whatIsHQ: 'An HQ (headquarters) is a workspace that manages your repositories, AI agents, and project tracking. It is the central hub for orchestrating AI coding agents across your projects.',
|
|
279
|
+
prerequisites: [
|
|
280
|
+
'Docker running (for agent execution)',
|
|
281
|
+
'A PMO account or local project tracking setup',
|
|
282
|
+
],
|
|
283
|
+
fullLoop: [
|
|
284
|
+
'Create an HQ workspace (prlt new --json --name YOUR_NAME)',
|
|
285
|
+
'Connect a repository (prlt repo add PATH_OR_URL)',
|
|
286
|
+
'Connect a PMO provider (prlt linear connect / prlt asana connect)',
|
|
287
|
+
'Spawn an agent on a ticket (prlt work start TICKET-ID)',
|
|
288
|
+
'Get a pull request from the agent',
|
|
289
|
+
],
|
|
290
|
+
},
|
|
291
|
+
prompt: {
|
|
292
|
+
type: 'input',
|
|
293
|
+
name: 'name',
|
|
294
|
+
message: 'Enter a name for your headquarters:',
|
|
295
|
+
},
|
|
296
|
+
detectedTools: detection.tools.map(t => ({
|
|
297
|
+
name: t.name,
|
|
298
|
+
command: t.command,
|
|
299
|
+
displayName: t.displayName,
|
|
300
|
+
})),
|
|
301
|
+
setupChoices: [
|
|
302
|
+
...(detection.hasClaudeCode ? [{ name: 'Claude Code guided setup', value: 'claude-code', command: 'prlt new --json --setup claude-code' }] : []),
|
|
303
|
+
...(detection.hasCodex ? [{ name: 'Codex guided setup', value: 'codex', command: 'prlt new --json --setup codex' }] : []),
|
|
304
|
+
{ name: 'Manual setup', value: 'manual', command: 'prlt new --json --name YOUR_NAME' },
|
|
305
|
+
],
|
|
306
|
+
metadata,
|
|
307
|
+
};
|
|
308
|
+
console.log(JSON.stringify(output, null, 2));
|
|
309
|
+
}
|
|
178
310
|
/**
|
|
179
311
|
* Output JSON to stdout
|
|
180
312
|
*/
|
package/dist/commands/new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/init.js
CHANGED
|
@@ -98,13 +98,11 @@ const hook = async function ({ id, argv, config }) {
|
|
|
98
98
|
// Never let update-check errors break the CLI
|
|
99
99
|
}
|
|
100
100
|
// ── First-time user detection ───────────────────────────────────────
|
|
101
|
-
// Skip for help-related commands/flags
|
|
102
101
|
// When user runs just `prlt` with no args, id is undefined
|
|
103
102
|
if (!id || id === 'help') {
|
|
104
103
|
// Check if this is first-time user running bare `prlt`
|
|
105
104
|
if (!id && isFirstTimeUser()) {
|
|
106
|
-
//
|
|
107
|
-
// in non-TTY it outputs a JSON prompt for the HQ name
|
|
105
|
+
// Redirect to `prlt new` which handles first-time vs returning flow
|
|
108
106
|
const { run } = await import('@oclif/core');
|
|
109
107
|
await run(['new'], config);
|
|
110
108
|
await shutdownAnalytics();
|
|
@@ -116,8 +114,7 @@ const hook = async function ({ id, argv, config }) {
|
|
|
116
114
|
if (!isHqOptionalCommand && isFirstTimeUser()) {
|
|
117
115
|
const chalk = await import('chalk');
|
|
118
116
|
console.log(chalk.default.yellow('\n⚠️ No headquarters found. Let\'s set one up first.\n'));
|
|
119
|
-
//
|
|
120
|
-
// in non-TTY it outputs a JSON prompt for the HQ name
|
|
117
|
+
// Redirect to `prlt new` which handles first-time vs returning flow
|
|
121
118
|
const { run } = await import('@oclif/core');
|
|
122
119
|
await run(['new'], config);
|
|
123
120
|
console.log(chalk.default.blue(`\n✅ Setup complete! You can now run: prlt ${id}\n`));
|
|
@@ -137,7 +134,7 @@ function shouldValidateNativeModules(id) {
|
|
|
137
134
|
id.startsWith('autocomplete:'));
|
|
138
135
|
}
|
|
139
136
|
/**
|
|
140
|
-
* Check if this is a first-time user (no headquarters configured)
|
|
137
|
+
* Check if this is a first-time user (no headquarters configured anywhere)
|
|
141
138
|
*/
|
|
142
139
|
function isFirstTimeUser() {
|
|
143
140
|
// Check if user is currently inside a valid HQ directory
|
package/dist/hooks/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/hooks/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/hooks/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
2
|
import type { AsanaConfig } from './types.js';
|
|
3
3
|
export declare function isAsanaConfigured(db: Database.Database): boolean;
|
|
4
4
|
export declare function loadAsanaConfig(db: Database.Database): AsanaConfig | null;
|
package/dist/lib/asana/config.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loadProviderSources, resolveApiKey } from '../work-source/provider-sources.js';
|
|
2
|
-
|
|
2
|
+
import { SettingsStore } from '../database/settings-store.js';
|
|
3
3
|
const ASANA_CONFIG_KEYS = {
|
|
4
4
|
accessToken: 'asana.access_token',
|
|
5
5
|
workspaceGid: 'asana.workspace_gid',
|
|
@@ -7,51 +7,39 @@ const ASANA_CONFIG_KEYS = {
|
|
|
7
7
|
projectGid: 'asana.project_gid',
|
|
8
8
|
projectName: 'asana.project_name',
|
|
9
9
|
};
|
|
10
|
-
function getSetting(db, key) {
|
|
11
|
-
const row = db
|
|
12
|
-
.prepare(`SELECT value FROM ${SETTINGS_TABLE} WHERE key = ?`)
|
|
13
|
-
.get(key);
|
|
14
|
-
return row?.value ?? null;
|
|
15
|
-
}
|
|
16
|
-
function setSetting(db, key, value) {
|
|
17
|
-
db.prepare(`
|
|
18
|
-
INSERT INTO ${SETTINGS_TABLE} (key, value)
|
|
19
|
-
VALUES (?, ?)
|
|
20
|
-
ON CONFLICT(key) DO UPDATE SET value = excluded.value
|
|
21
|
-
`).run(key, value);
|
|
22
|
-
}
|
|
23
|
-
function deleteSetting(db, key) {
|
|
24
|
-
db.prepare(`DELETE FROM ${SETTINGS_TABLE} WHERE key = ?`).run(key);
|
|
25
|
-
}
|
|
26
10
|
export function isAsanaConfigured(db) {
|
|
27
|
-
return
|
|
11
|
+
return new SettingsStore(db).has(ASANA_CONFIG_KEYS.accessToken);
|
|
28
12
|
}
|
|
29
13
|
export function loadAsanaConfig(db) {
|
|
30
|
-
const
|
|
14
|
+
const settings = new SettingsStore(db);
|
|
15
|
+
const accessToken = settings.get(ASANA_CONFIG_KEYS.accessToken);
|
|
31
16
|
if (!accessToken)
|
|
32
17
|
return null;
|
|
33
18
|
return {
|
|
34
19
|
accessToken,
|
|
35
|
-
workspaceGid:
|
|
36
|
-
workspaceName:
|
|
37
|
-
projectGid:
|
|
38
|
-
projectName:
|
|
20
|
+
workspaceGid: settings.get(ASANA_CONFIG_KEYS.workspaceGid) ?? undefined,
|
|
21
|
+
workspaceName: settings.get(ASANA_CONFIG_KEYS.workspaceName) ?? undefined,
|
|
22
|
+
projectGid: settings.get(ASANA_CONFIG_KEYS.projectGid) ?? undefined,
|
|
23
|
+
projectName: settings.get(ASANA_CONFIG_KEYS.projectName) ?? undefined,
|
|
39
24
|
};
|
|
40
25
|
}
|
|
41
26
|
export function saveAsanaAccessToken(db, accessToken) {
|
|
42
|
-
|
|
27
|
+
new SettingsStore(db).set(ASANA_CONFIG_KEYS.accessToken, accessToken);
|
|
43
28
|
}
|
|
44
29
|
export function saveAsanaWorkspace(db, workspaceGid, workspaceName) {
|
|
45
|
-
|
|
46
|
-
|
|
30
|
+
const settings = new SettingsStore(db);
|
|
31
|
+
settings.set(ASANA_CONFIG_KEYS.workspaceGid, workspaceGid);
|
|
32
|
+
settings.set(ASANA_CONFIG_KEYS.workspaceName, workspaceName);
|
|
47
33
|
}
|
|
48
34
|
export function saveAsanaProject(db, projectGid, projectName) {
|
|
49
|
-
|
|
50
|
-
|
|
35
|
+
const settings = new SettingsStore(db);
|
|
36
|
+
settings.set(ASANA_CONFIG_KEYS.projectGid, projectGid);
|
|
37
|
+
settings.set(ASANA_CONFIG_KEYS.projectName, projectName);
|
|
51
38
|
}
|
|
52
39
|
export function clearAsanaConfig(db) {
|
|
40
|
+
const settings = new SettingsStore(db);
|
|
53
41
|
for (const key of Object.values(ASANA_CONFIG_KEYS)) {
|
|
54
|
-
|
|
42
|
+
settings.delete(key);
|
|
55
43
|
}
|
|
56
44
|
}
|
|
57
45
|
export function getAsanaAccessToken(db) {
|
|
@@ -74,6 +62,6 @@ export function getAsanaAccessToken(db) {
|
|
|
74
62
|
if (envToken)
|
|
75
63
|
return envToken;
|
|
76
64
|
// 3. Legacy: stored workspace setting
|
|
77
|
-
return
|
|
65
|
+
return new SettingsStore(db).get(ASANA_CONFIG_KEYS.accessToken);
|
|
78
66
|
}
|
|
79
67
|
//# sourceMappingURL=config.js.map
|