@marcopeg/hal 1.0.32 → 1.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +19 -44
  2. package/dist/bot/commands/loader.d.ts +1 -0
  3. package/dist/bot/commands/loader.d.ts.map +1 -1
  4. package/dist/bot/commands/loader.js +7 -0
  5. package/dist/bot/commands/loader.js.map +1 -1
  6. package/dist/bot/commands/message.d.ts.map +1 -1
  7. package/dist/bot/commands/message.js +1 -0
  8. package/dist/bot/commands/message.js.map +1 -1
  9. package/dist/bot/commands/npm/exec.d.ts +15 -0
  10. package/dist/bot/commands/npm/exec.d.ts.map +1 -0
  11. package/dist/bot/commands/npm/exec.js +66 -0
  12. package/dist/bot/commands/npm/exec.js.map +1 -0
  13. package/dist/bot/commands/npm/format.d.ts +11 -0
  14. package/dist/bot/commands/npm/format.d.ts.map +1 -0
  15. package/dist/bot/commands/npm/format.js +40 -0
  16. package/dist/bot/commands/npm/format.js.map +1 -0
  17. package/dist/bot/commands/npm/index.d.ts +5 -0
  18. package/dist/bot/commands/npm/index.d.ts.map +1 -0
  19. package/dist/bot/commands/npm/index.js +126 -0
  20. package/dist/bot/commands/npm/index.js.map +1 -0
  21. package/dist/bot/commands/npm/scripts.d.ts +18 -0
  22. package/dist/bot/commands/npm/scripts.d.ts.map +1 -0
  23. package/dist/bot/commands/npm/scripts.js +66 -0
  24. package/dist/bot/commands/npm/scripts.js.map +1 -0
  25. package/dist/bot.d.ts.map +1 -1
  26. package/dist/bot.js +6 -0
  27. package/dist/bot.js.map +1 -1
  28. package/dist/cli.js +207 -19
  29. package/dist/cli.js.map +1 -1
  30. package/dist/config.d.ts +40 -0
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +46 -2
  33. package/dist/config.js.map +1 -1
  34. package/dist/engine/adapters/copilot.d.ts.map +1 -1
  35. package/dist/engine/adapters/copilot.js +35 -1
  36. package/dist/engine/adapters/copilot.js.map +1 -1
  37. package/dist/wizard/analyzer.d.ts +17 -0
  38. package/dist/wizard/analyzer.d.ts.map +1 -0
  39. package/dist/wizard/analyzer.js +173 -0
  40. package/dist/wizard/analyzer.js.map +1 -0
  41. package/dist/wizard/config-builder.d.ts +15 -0
  42. package/dist/wizard/config-builder.d.ts.map +1 -0
  43. package/dist/wizard/config-builder.js +199 -0
  44. package/dist/wizard/config-builder.js.map +1 -0
  45. package/dist/wizard/confirm-and-write.d.ts +7 -0
  46. package/dist/wizard/confirm-and-write.d.ts.map +1 -0
  47. package/dist/wizard/confirm-and-write.js +135 -0
  48. package/dist/wizard/confirm-and-write.js.map +1 -0
  49. package/dist/wizard/engine-discovery.d.ts +8 -0
  50. package/dist/wizard/engine-discovery.d.ts.map +1 -0
  51. package/dist/wizard/engine-discovery.js +55 -0
  52. package/dist/wizard/engine-discovery.js.map +1 -0
  53. package/dist/wizard/index.d.ts +14 -0
  54. package/dist/wizard/index.d.ts.map +1 -0
  55. package/dist/wizard/index.js +116 -0
  56. package/dist/wizard/index.js.map +1 -0
  57. package/dist/wizard/runner.d.ts +16 -0
  58. package/dist/wizard/runner.d.ts.map +1 -0
  59. package/dist/wizard/runner.js +47 -0
  60. package/dist/wizard/runner.js.map +1 -0
  61. package/dist/wizard/steps/additional-users.d.ts +3 -0
  62. package/dist/wizard/steps/additional-users.d.ts.map +1 -0
  63. package/dist/wizard/steps/additional-users.js +57 -0
  64. package/dist/wizard/steps/additional-users.js.map +1 -0
  65. package/dist/wizard/steps/bot-token.d.ts +3 -0
  66. package/dist/wizard/steps/bot-token.d.ts.map +1 -0
  67. package/dist/wizard/steps/bot-token.js +130 -0
  68. package/dist/wizard/steps/bot-token.js.map +1 -0
  69. package/dist/wizard/steps/cwd.d.ts +3 -0
  70. package/dist/wizard/steps/cwd.d.ts.map +1 -0
  71. package/dist/wizard/steps/cwd.js +80 -0
  72. package/dist/wizard/steps/cwd.js.map +1 -0
  73. package/dist/wizard/steps/engine.d.ts +3 -0
  74. package/dist/wizard/steps/engine.d.ts.map +1 -0
  75. package/dist/wizard/steps/engine.js +118 -0
  76. package/dist/wizard/steps/engine.js.map +1 -0
  77. package/dist/wizard/steps/index.d.ts +5 -0
  78. package/dist/wizard/steps/index.d.ts.map +1 -0
  79. package/dist/wizard/steps/index.js +15 -0
  80. package/dist/wizard/steps/index.js.map +1 -0
  81. package/dist/wizard/steps/model.d.ts +3 -0
  82. package/dist/wizard/steps/model.d.ts.map +1 -0
  83. package/dist/wizard/steps/model.js +88 -0
  84. package/dist/wizard/steps/model.js.map +1 -0
  85. package/dist/wizard/steps/project-name.d.ts +3 -0
  86. package/dist/wizard/steps/project-name.d.ts.map +1 -0
  87. package/dist/wizard/steps/project-name.js +59 -0
  88. package/dist/wizard/steps/project-name.js.map +1 -0
  89. package/dist/wizard/steps/session.d.ts +3 -0
  90. package/dist/wizard/steps/session.d.ts.map +1 -0
  91. package/dist/wizard/steps/session.js +81 -0
  92. package/dist/wizard/steps/session.js.map +1 -0
  93. package/dist/wizard/steps/user-id.d.ts +3 -0
  94. package/dist/wizard/steps/user-id.d.ts.map +1 -0
  95. package/dist/wizard/steps/user-id.js +155 -0
  96. package/dist/wizard/steps/user-id.js.map +1 -0
  97. package/dist/wizard/types.d.ts +108 -0
  98. package/dist/wizard/types.d.ts.map +1 -0
  99. package/dist/wizard/types.js +2 -0
  100. package/dist/wizard/types.js.map +1 -0
  101. package/package.json +7 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/wizard/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGjD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAkB,EAClB,KAAmB;IAEnB,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK;QAC9B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACjB,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;YAC1C,IAAI,IAAI;gBAAE,OAAO,KAAK,CAAC;YACvB,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IAEP,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,UAAU;YAAE,SAAS;QAEzB,IAAI,IAAI,EAAE,CAAC;YACT,iEAAiE;YACjE,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,WAAW,KAAK,IAAI,cAAc,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,IAAI,CAC7D,CAAC;QACF,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { WizardStep } from "../types.js";
2
+ export declare const additionalUsersStep: WizardStep;
3
+ //# sourceMappingURL=additional-users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"additional-users.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/additional-users.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,aAAa,CAAC;AAY7D,eAAO,MAAM,mBAAmB,EAAE,UAiDjC,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { confirm, text } from "@clack/prompts";
2
+ import { guardCancel } from "../runner.js";
3
+ const TELEGRAM_USER_ID_MAX = 0xfffffffff;
4
+ function parseUserId(raw) {
5
+ const str = raw.trim();
6
+ const num = Number(str);
7
+ if (!Number.isFinite(num) || !Number.isInteger(num))
8
+ return null;
9
+ if (num < 1 || num > TELEGRAM_USER_ID_MAX)
10
+ return null;
11
+ return num;
12
+ }
13
+ export const additionalUsersStep = {
14
+ id: "additional-users",
15
+ label: "Additional allowed users",
16
+ isConfigured(ctx) {
17
+ // Skip this step in gap-fill mode if at least one user ID is already present
18
+ // (we don't want to nag about adding more users every time).
19
+ // Only prompt in --reset mode or fresh setup.
20
+ const globalIds = ctx.existingConfig?.globals?.access?.allowedUserIds ?? [];
21
+ const projects = ctx.existingConfig?.projects ?? {};
22
+ const projectIds = Object.values(projects).flatMap((p) => p.access?.allowedUserIds ?? []);
23
+ return !ctx.reset && (globalIds.length > 0 || projectIds.length > 0);
24
+ },
25
+ run: async (ctx) => {
26
+ const extra = [];
27
+ while (true) {
28
+ const addMore = await confirm({
29
+ message: extra.length === 0
30
+ ? "Add another allowed user? (other people who can use the bot)"
31
+ : "Add another user?",
32
+ initialValue: false,
33
+ });
34
+ guardCancel(addMore);
35
+ if (!addMore)
36
+ break;
37
+ const answer = await text({
38
+ message: "Enter their Telegram user ID (numeric):",
39
+ placeholder: "987654321",
40
+ validate(value) {
41
+ if (!value || value.trim() === "")
42
+ return "User ID is required.";
43
+ const n = parseUserId(value);
44
+ if (n === null)
45
+ return `Invalid user ID. Must be a positive integer up to ${TELEGRAM_USER_ID_MAX}.`;
46
+ return undefined;
47
+ },
48
+ });
49
+ guardCancel(answer);
50
+ const n = parseUserId(answer.trim());
51
+ if (n !== null)
52
+ extra.push(n);
53
+ }
54
+ ctx.results.additionalUserIds = extra;
55
+ },
56
+ };
57
+ //# sourceMappingURL=additional-users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"additional-users.js","sourceRoot":"","sources":["../../../src/wizard/steps/additional-users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEzC,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,EAAE,EAAE,kBAAkB;IACtB,KAAK,EAAE,0BAA0B;IAEjC,YAAY,CAAC,GAAkB;QAC7B,6EAA6E;QAC7E,6DAA6D;QAC7D,8CAA8C;QAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC;QAC5E,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAChD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CACtC,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,GAAG,EAAE,KAAK,EAAE,GAAkB,EAAE,EAAE;QAChC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;gBAC5B,OAAO,EACL,KAAK,CAAC,MAAM,KAAK,CAAC;oBAChB,CAAC,CAAC,8DAA8D;oBAChE,CAAC,CAAC,mBAAmB;gBACzB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,IAAI,CAAC,OAAO;gBAAE,MAAM;YAEpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;gBACxB,OAAO,EAAE,yCAAyC;gBAClD,WAAW,EAAE,WAAW;gBACxB,QAAQ,CAAC,KAAK;oBACZ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;wBAAE,OAAO,sBAAsB,CAAC;oBACjE,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;oBAC7B,IAAI,CAAC,KAAK,IAAI;wBACZ,OAAO,qDAAqD,oBAAoB,GAAG,CAAC;oBACtF,OAAO,SAAS,CAAC;gBACnB,CAAC;aACF,CAAC,CAAC;YACH,WAAW,CAAC,MAAM,CAAC,CAAC;YAEpB,MAAM,CAAC,GAAG,WAAW,CAAE,MAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,GAAG,CAAC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACxC,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { WizardStep } from "../types.js";
2
+ export declare const botTokenStep: WizardStep;
3
+ //# sourceMappingURL=bot-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-token.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/bot-token.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,aAAa,CAAC;AAyD7D,eAAO,MAAM,YAAY,EAAE,UAwE1B,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { execSync, spawn } from "node:child_process";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { confirm, text } from "@clack/prompts";
5
+ import { parse as parseEnv } from "dotenv";
6
+ import { guardCancel } from "../runner.js";
7
+ const PLACEHOLDER_RE = /^\$\{[^}]+\}$/;
8
+ const BOT_TOKEN_RE = /^\d+:[A-Za-z0-9_-]{35,}$/;
9
+ const HELP_URL = "https://github.com/marcopeg/hal/blob/main/docs/telegram/README.md#creating-a-telegram-bot";
10
+ function isPlaceholder(value) {
11
+ return typeof value === "string" && PLACEHOLDER_RE.test(value.trim());
12
+ }
13
+ function placeholderVar(value) {
14
+ if (!isPlaceholder(value))
15
+ return null;
16
+ const s = value.trim();
17
+ return s.slice(2, -1).trim() || null;
18
+ }
19
+ function loadEnvFromConfigDir(configDir) {
20
+ const out = {};
21
+ for (const file of [join(configDir, ".env"), join(configDir, ".env.local")]) {
22
+ if (!existsSync(file))
23
+ continue;
24
+ try {
25
+ const parsed = parseEnv(readFileSync(file, "utf-8"));
26
+ Object.assign(out, parsed);
27
+ }
28
+ catch {
29
+ // ignore
30
+ }
31
+ }
32
+ return out;
33
+ }
34
+ function openUrl(url) {
35
+ try {
36
+ const cmd = process.platform === "darwin"
37
+ ? "open"
38
+ : process.platform === "win32"
39
+ ? "start"
40
+ : "xdg-open";
41
+ spawn(cmd, [url], { stdio: "ignore", detached: true }).unref();
42
+ }
43
+ catch {
44
+ // silently ignore — not critical
45
+ }
46
+ }
47
+ function findEditor() {
48
+ for (const cmd of ["code", "cursor"]) {
49
+ try {
50
+ execSync(`which ${cmd}`, { stdio: "pipe" });
51
+ return cmd;
52
+ }
53
+ catch { }
54
+ }
55
+ return null;
56
+ }
57
+ // suppress unused variable lint — editor may be used in future
58
+ void findEditor;
59
+ export const botTokenStep = {
60
+ id: "bot-token",
61
+ label: "Telegram bot token",
62
+ isConfigured(ctx) {
63
+ const env = loadEnvFromConfigDir(ctx.cwd);
64
+ const projects = ctx.existingConfig?.projects ?? {};
65
+ const key = ctx.currentProjectKey ?? ctx.results.projectKey;
66
+ const candidates = key && projects[key] ? [projects[key]] : Object.values(projects);
67
+ return candidates.some((p) => {
68
+ const token = p.telegram?.botToken;
69
+ if (!token)
70
+ return false;
71
+ if (!isPlaceholder(token))
72
+ return true;
73
+ const varName = placeholderVar(token);
74
+ if (!varName)
75
+ return false;
76
+ return ((process.env[varName] ?? env[varName]) || "") !== "";
77
+ });
78
+ },
79
+ shouldSkip(ctx) {
80
+ const key = ctx.prefill.apiKey ?? ctx.prefill.botKey;
81
+ if (!key)
82
+ return false;
83
+ const oneProject = (ctx.targetProjectKeys?.length ?? 1) <= 1;
84
+ return oneProject && BOT_TOKEN_RE.test(key);
85
+ },
86
+ run: async (ctx) => {
87
+ const projectKey = ctx.currentProjectKey ?? ctx.results.projectKey;
88
+ if (!ctx.results.projectEdits)
89
+ ctx.results.projectEdits = {};
90
+ const edits = ctx.results.projectEdits;
91
+ if (projectKey)
92
+ edits[projectKey] ??= {};
93
+ // Pre-fill: apply silently
94
+ const key = ctx.prefill.apiKey ?? ctx.prefill.botKey;
95
+ if ((ctx.targetProjectKeys?.length ?? 1) <= 1 &&
96
+ key &&
97
+ BOT_TOKEN_RE.test(key)) {
98
+ if (projectKey)
99
+ edits[projectKey].botToken = key;
100
+ ctx.results.botToken = key;
101
+ return;
102
+ }
103
+ const needHelp = await confirm({
104
+ message: "Do you need help creating a Telegram bot? (opens docs in browser)",
105
+ initialValue: false,
106
+ });
107
+ guardCancel(needHelp);
108
+ if (needHelp) {
109
+ openUrl(HELP_URL);
110
+ console.log(`\n Docs: ${HELP_URL}\n`);
111
+ }
112
+ const answer = await text({
113
+ message: "Paste your Telegram bot token:",
114
+ placeholder: "123456789:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
115
+ validate(value) {
116
+ if (!value || value.trim() === "")
117
+ return "Bot token is required.";
118
+ if (!BOT_TOKEN_RE.test(value.trim()))
119
+ return "Invalid format. Expected: <digits>:<alphanumeric 35+ chars>";
120
+ return undefined;
121
+ },
122
+ });
123
+ guardCancel(answer);
124
+ const v = answer.trim();
125
+ if (projectKey)
126
+ edits[projectKey].botToken = v;
127
+ ctx.results.botToken = v;
128
+ },
129
+ };
130
+ //# sourceMappingURL=bot-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-token.js","sourceRoot":"","sources":["../../../src/wizard/steps/bot-token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { WizardStep } from "../types.js";
2
+ export declare const cwdStep: WizardStep;
3
+ //# sourceMappingURL=cwd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwd.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/cwd.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,aAAa,CAAC;AAyB7D,eAAO,MAAM,OAAO,EAAE,UA4DrB,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { readdirSync, statSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ import { select } from "@clack/prompts";
4
+ import { guardCancel } from "../runner.js";
5
+ const PLACEHOLDER_RE = /^\$\{[^}]+\}$/;
6
+ function isPlaceholder(value) {
7
+ return typeof value === "string" && PLACEHOLDER_RE.test(value.trim());
8
+ }
9
+ function listSubdirs(dir) {
10
+ try {
11
+ return readdirSync(dir)
12
+ .filter((entry) => {
13
+ if (entry.startsWith("."))
14
+ return false;
15
+ try {
16
+ return statSync(join(dir, entry)).isDirectory();
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ })
22
+ .sort();
23
+ }
24
+ catch {
25
+ return [];
26
+ }
27
+ }
28
+ export const cwdStep = {
29
+ id: "cwd",
30
+ label: "Project working directory",
31
+ isConfigured(ctx) {
32
+ const projects = ctx.existingConfig?.projects ?? {};
33
+ const key = ctx.currentProjectKey ?? ctx.results.projectKey;
34
+ if (key && projects[key]) {
35
+ const p = projects[key];
36
+ return !!(p.cwd && !isPlaceholder(p.cwd) && p.cwd !== "");
37
+ }
38
+ return Object.values(projects).some((p) => p.cwd && !isPlaceholder(p.cwd) && p.cwd !== "");
39
+ },
40
+ shouldSkip(ctx) {
41
+ const oneProject = (ctx.targetProjectKeys?.length ?? 1) <= 1;
42
+ return (oneProject &&
43
+ typeof ctx.prefill.cwd === "string" &&
44
+ ctx.prefill.cwd.trim() !== "");
45
+ },
46
+ run: async (ctx) => {
47
+ const key = ctx.currentProjectKey ?? ctx.results.projectKey;
48
+ if (!ctx.results.projectEdits)
49
+ ctx.results.projectEdits = {};
50
+ const edits = ctx.results.projectEdits;
51
+ if (key)
52
+ edits[key] ??= {};
53
+ // Pre-fill: apply silently
54
+ if ((ctx.targetProjectKeys?.length ?? 1) <= 1 &&
55
+ ctx.prefill.cwd &&
56
+ ctx.prefill.cwd.trim() !== "") {
57
+ const v = ctx.prefill.cwd.trim();
58
+ if (key)
59
+ edits[key].cwd = v;
60
+ ctx.results.cwd = v;
61
+ return;
62
+ }
63
+ const subdirs = listSubdirs(ctx.cwd);
64
+ const absRoot = resolve(ctx.cwd);
65
+ const options = [
66
+ { value: ".", label: `. (current directory — ${absRoot})` },
67
+ ...subdirs.map((d) => ({ value: `./${d}`, label: d })),
68
+ ];
69
+ const answer = await select({
70
+ message: "Which directory should the project run in?",
71
+ options,
72
+ });
73
+ guardCancel(answer);
74
+ const v = answer;
75
+ if (key)
76
+ edits[key].cwd = v;
77
+ ctx.results.cwd = v;
78
+ },
79
+ };
80
+ //# sourceMappingURL=cwd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cwd.js","sourceRoot":"","sources":["../../../src/wizard/steps/cwd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { WizardStep } from "../types.js";
2
+ export declare const engineStep: WizardStep;
3
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,aAAa,CAAC;AAoB7D,eAAO,MAAM,UAAU,EAAE,UA2HxB,CAAC"}
@@ -0,0 +1,118 @@
1
+ import { multiselect, select, spinner } from "@clack/prompts";
2
+ import { guardCancel } from "../runner.js";
3
+ const VALID_ENGINES = [
4
+ "claude",
5
+ "copilot",
6
+ "codex",
7
+ "opencode",
8
+ "cursor",
9
+ "antigravity",
10
+ ];
11
+ function enabledEnginesFromProviders(providers) {
12
+ if (!providers || typeof providers !== "object")
13
+ return null;
14
+ const keys = Object.keys(providers);
15
+ const enabled = keys.filter((k) => VALID_ENGINES.includes(k));
16
+ return enabled.length > 0 ? enabled : null;
17
+ }
18
+ export const engineStep = {
19
+ id: "engine",
20
+ label: "Engines and default",
21
+ isConfigured(ctx) {
22
+ const globalEngine = ctx.existingConfig?.globals?.engine?.name;
23
+ const projects = ctx.existingConfig?.projects ?? {};
24
+ const keys = Object.keys(projects);
25
+ const primaryKey = ctx.results.projectKey ??
26
+ (keys.length > 0 ? keys[0] : undefined);
27
+ const primaryProject = typeof primaryKey === "string" ? projects[primaryKey] : undefined;
28
+ const projectEngine = primaryProject?.engine?.name;
29
+ return !!(globalEngine || projectEngine);
30
+ },
31
+ shouldSkip(ctx) {
32
+ const e = ctx.prefill.engine;
33
+ return (typeof e === "string" && VALID_ENGINES.includes(e));
34
+ },
35
+ run: async (ctx) => {
36
+ // Prefill: engine flag means "enable only this engine and set it as default".
37
+ if (ctx.prefill.engine &&
38
+ VALID_ENGINES.includes(ctx.prefill.engine)) {
39
+ const engine = ctx.prefill.engine;
40
+ ctx.results.enabledEngines = [engine];
41
+ ctx.results.engine = engine;
42
+ return;
43
+ }
44
+ // Gap-fill: if providers are already configured, do not re-ask which engines
45
+ // to enable — just pick the default engine from the enabled set.
46
+ const fromProviders = enabledEnginesFromProviders(ctx.existingConfig?.providers);
47
+ if (fromProviders) {
48
+ ctx.results.enabledEngines = fromProviders;
49
+ let defaultEngine;
50
+ if (fromProviders.length === 1) {
51
+ defaultEngine = fromProviders[0];
52
+ }
53
+ else {
54
+ const picked = await select({
55
+ message: "Which engine should be used by default?",
56
+ options: fromProviders.map((e) => ({ value: e, label: e })),
57
+ });
58
+ guardCancel(picked);
59
+ defaultEngine = picked;
60
+ }
61
+ ctx.results.engine = defaultEngine;
62
+ return;
63
+ }
64
+ let availableList = [];
65
+ if (ctx.availableEnginesPromise) {
66
+ // If discovery hasn't finished yet, show a spinner so it doesn't feel stuck.
67
+ const s = spinner();
68
+ s.start("Investigating which engines are available in your system...");
69
+ try {
70
+ const res = await ctx.availableEnginesPromise;
71
+ availableList = res.filter((e) => VALID_ENGINES.includes(e));
72
+ }
73
+ finally {
74
+ s.stop("Engine discovery complete");
75
+ }
76
+ }
77
+ const available = new Set(availableList);
78
+ const options = VALID_ENGINES.map((e) => ({
79
+ value: e,
80
+ label: available.has(e) ? e : `${e} (not detected)`,
81
+ }));
82
+ const initial = available.size > 0
83
+ ? VALID_ENGINES.filter((e) => available.has(e))
84
+ : ["codex"];
85
+ console.log(" Tip: Space to toggle, Enter to confirm.");
86
+ // Enable engines (providers)
87
+ const enabled = await multiselect({
88
+ message: "Which engines do you want to enable on this machine?",
89
+ options,
90
+ initialValues: initial,
91
+ required: true,
92
+ });
93
+ guardCancel(enabled);
94
+ const enabledEngines = enabled;
95
+ // Default engine (only ask when 2+ enabled)
96
+ let defaultEngine;
97
+ if (ctx.prefill.engine &&
98
+ VALID_ENGINES.includes(ctx.prefill.engine) &&
99
+ enabledEngines.includes(ctx.prefill.engine)) {
100
+ defaultEngine = ctx.prefill.engine;
101
+ console.log(` Default engine pre-filled: ${defaultEngine}`);
102
+ }
103
+ else if (enabledEngines.length >= 2) {
104
+ const answer = await select({
105
+ message: "Which engine should be used by default?",
106
+ options: enabledEngines.map((e) => ({ value: e, label: e })),
107
+ });
108
+ guardCancel(answer);
109
+ defaultEngine = answer;
110
+ }
111
+ else {
112
+ defaultEngine = enabledEngines[0];
113
+ }
114
+ ctx.results.enabledEngines = enabledEngines;
115
+ ctx.results.engine = defaultEngine;
116
+ },
117
+ };
118
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/wizard/steps/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { WizardStep } from "../types.js";
2
+ export declare const globalSteps: WizardStep[];
3
+ export declare const projectSteps: WizardStep[];
4
+ export declare const finalSteps: WizardStep[];
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAS9C,eAAO,MAAM,WAAW,EAAE,UAAU,EAA4B,CAAC;AAEjE,eAAO,MAAM,YAAY,EAAE,UAAU,EAIpC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAAU,EAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { botTokenStep } from "./bot-token.js";
2
+ import { cwdStep } from "./cwd.js";
3
+ import { engineStep } from "./engine.js";
4
+ import { modelStep } from "./model.js";
5
+ import { projectNameStep } from "./project-name.js";
6
+ import { userIdStep } from "./user-id.js";
7
+ // Execution order matters — steps run top to bottom.
8
+ export const globalSteps = [engineStep, modelStep];
9
+ export const projectSteps = [
10
+ cwdStep,
11
+ projectNameStep,
12
+ botTokenStep,
13
+ ];
14
+ export const finalSteps = [userIdStep];
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wizard/steps/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qDAAqD;AACrD,MAAM,CAAC,MAAM,WAAW,GAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,OAAO;IACP,eAAe;IACf,YAAY;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAiB,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { WizardStep } from "../types.js";
2
+ export declare const modelStep: WizardStep;
3
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/model.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7D,eAAO,MAAM,SAAS,EAAE,UAyGvB,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { select, spinner, text } from "@clack/prompts";
2
+ import { getCursorModelsFromCli, getOpencodeModelsFromCli, } from "../../engine/opencode-models.js";
3
+ import { defaultEngineCommand } from "../engine-discovery.js";
4
+ import { guardCancel } from "../runner.js";
5
+ export const modelStep = {
6
+ id: "model",
7
+ label: "Default model",
8
+ isConfigured(ctx) {
9
+ const engine = (ctx.results.engine ??
10
+ ctx.existingConfig?.globals?.engine?.name);
11
+ // If the engine doesn't require / doesn't support an explicit model in the wizard,
12
+ // treat this step as configured (unless user explicitly provided --model).
13
+ if ((engine === "codex" || engine === "copilot") &&
14
+ !(typeof ctx.prefill.model === "string" && ctx.prefill.model.trim() !== "")) {
15
+ return true;
16
+ }
17
+ const globalModel = ctx.existingConfig?.globals?.engine?.model;
18
+ return typeof globalModel === "string" && globalModel.trim() !== "";
19
+ },
20
+ shouldSkip(ctx) {
21
+ const engine = (ctx.results.engine ??
22
+ ctx.existingConfig?.globals?.engine?.name);
23
+ // Codex/Copilot: skip model question unless explicitly prefilled.
24
+ if (engine === "codex" || engine === "copilot") {
25
+ return !(typeof ctx.prefill.model === "string" && ctx.prefill.model.trim() !== "");
26
+ }
27
+ return (typeof ctx.prefill.model === "string" && ctx.prefill.model.trim() !== "");
28
+ },
29
+ run: async (ctx) => {
30
+ const engine = (ctx.results.engine ??
31
+ ctx.existingConfig?.globals?.engine?.name);
32
+ if (!engine) {
33
+ // Engine not chosen (or configured) yet; leave model unset.
34
+ ctx.results.model = undefined;
35
+ return;
36
+ }
37
+ // Codex/Copilot: no meaningful model choice in the wizard unless explicitly provided.
38
+ if (engine === "codex" || engine === "copilot") {
39
+ if (ctx.prefill.model && ctx.prefill.model.trim() !== "") {
40
+ ctx.results.model = ctx.prefill.model.trim();
41
+ }
42
+ else {
43
+ ctx.results.model = undefined;
44
+ }
45
+ return;
46
+ }
47
+ // Prefill: apply silently (no validation here; engine adapters may accept arbitrary strings)
48
+ if (ctx.prefill.model && ctx.prefill.model.trim() !== "") {
49
+ ctx.results.model = ctx.prefill.model.trim();
50
+ return;
51
+ }
52
+ // Cursor/OpenCode: offer discovered model list
53
+ if (engine === "cursor" || engine === "opencode") {
54
+ const s = spinner();
55
+ s.start("Fetching available models...");
56
+ const cmd = defaultEngineCommand(engine);
57
+ const models = engine === "cursor"
58
+ ? getCursorModelsFromCli(ctx.cwd, cmd)
59
+ : getOpencodeModelsFromCli(ctx.cwd, cmd);
60
+ s.stop(models.length > 0 ? "Models loaded" : "No models discovered");
61
+ if (models.length > 0) {
62
+ const picked = await select({
63
+ message: "Which model should be used by default? (optional)",
64
+ options: [
65
+ { value: "", label: "engine defaults (recommended)" },
66
+ ...models.map((m) => ({ value: m.name, label: m.name })),
67
+ ],
68
+ });
69
+ guardCancel(picked);
70
+ const v = picked;
71
+ ctx.results.model = v === "" ? undefined : v;
72
+ return;
73
+ }
74
+ // No models discovered: keep unset and let engine decide
75
+ ctx.results.model = undefined;
76
+ return;
77
+ }
78
+ // Other engines: accept free-form model name, or empty to use engine defaults
79
+ const answer = await text({
80
+ message: "Default model (optional — press Enter to use engine defaults):",
81
+ placeholder: "engine defaults",
82
+ });
83
+ guardCancel(answer);
84
+ const v = typeof answer === "string" ? answer.trim() : "";
85
+ ctx.results.model = v === "" ? undefined : v;
86
+ },
87
+ };
88
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/wizard/steps/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { WizardStep } from "../types.js";
2
+ export declare const projectNameStep: WizardStep;
3
+ //# sourceMappingURL=project-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-name.d.ts","sourceRoot":"","sources":["../../../src/wizard/steps/project-name.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,UA+D7B,CAAC"}