agentplane 0.2.6 → 0.2.12

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 (140) hide show
  1. package/README.md +11 -0
  2. package/assets/AGENTS.md +35 -0
  3. package/assets/agents/CODER.json +0 -1
  4. package/assets/agents/INTEGRATOR.json +0 -1
  5. package/assets/agents/ORCHESTRATOR.json +1 -2
  6. package/assets/agents/PLANNER.json +1 -3
  7. package/assets/agents/TESTER.json +0 -1
  8. package/assets/agents/UPGRADER.json +17 -15
  9. package/dist/cli/archive.d.ts.map +1 -1
  10. package/dist/cli/archive.js +61 -36
  11. package/dist/cli/command-guide.d.ts.map +1 -1
  12. package/dist/cli/command-guide.js +4 -2
  13. package/dist/cli/run-cli/command-catalog.d.ts +4 -1
  14. package/dist/cli/run-cli/command-catalog.d.ts.map +1 -1
  15. package/dist/cli/run-cli/command-catalog.js +40 -22
  16. package/dist/cli/run-cli/commands/config.d.ts +5 -4
  17. package/dist/cli/run-cli/commands/config.d.ts.map +1 -1
  18. package/dist/cli/run-cli/commands/config.js +39 -29
  19. package/dist/cli/run-cli/commands/core.d.ts +2 -1
  20. package/dist/cli/run-cli/commands/core.d.ts.map +1 -1
  21. package/dist/cli/run-cli/commands/core.js +174 -67
  22. package/dist/cli/run-cli/commands/ide.d.ts +3 -1
  23. package/dist/cli/run-cli/commands/ide.d.ts.map +1 -1
  24. package/dist/cli/run-cli/commands/ide.js +7 -6
  25. package/dist/cli/run-cli/commands/init/ide-sync.d.ts.map +1 -1
  26. package/dist/cli/run-cli/commands/init/ide-sync.js +10 -1
  27. package/dist/cli/run-cli/commands/init/write-agents.d.ts.map +1 -1
  28. package/dist/cli/run-cli/commands/init/write-agents.js +4 -24
  29. package/dist/cli/run-cli/commands/init/write-gitignore.d.ts +4 -0
  30. package/dist/cli/run-cli/commands/init/write-gitignore.d.ts.map +1 -0
  31. package/dist/cli/run-cli/commands/init/write-gitignore.js +35 -0
  32. package/dist/cli/run-cli/commands/init.d.ts +1 -0
  33. package/dist/cli/run-cli/commands/init.d.ts.map +1 -1
  34. package/dist/cli/run-cli/commands/init.js +31 -8
  35. package/dist/cli/run-cli/registry.run.d.ts +6 -2
  36. package/dist/cli/run-cli/registry.run.d.ts.map +1 -1
  37. package/dist/cli/run-cli/registry.run.js +7 -2
  38. package/dist/cli/run-cli.d.ts.map +1 -1
  39. package/dist/cli/run-cli.js +94 -75
  40. package/dist/cli/run-cli.test-helpers.d.ts.map +1 -1
  41. package/dist/cli/run-cli.test-helpers.js +99 -3
  42. package/dist/cli/spec/parse-utils.d.ts +11 -0
  43. package/dist/cli/spec/parse-utils.d.ts.map +1 -0
  44. package/dist/cli/spec/parse-utils.js +28 -0
  45. package/dist/commands/block.command.d.ts +3 -18
  46. package/dist/commands/block.command.d.ts.map +1 -1
  47. package/dist/commands/block.command.js +2 -143
  48. package/dist/commands/block.run.d.ts +5 -0
  49. package/dist/commands/block.run.d.ts.map +1 -0
  50. package/dist/commands/block.run.js +22 -0
  51. package/dist/commands/block.spec.d.ts +17 -0
  52. package/dist/commands/block.spec.d.ts.map +1 -0
  53. package/dist/commands/block.spec.js +115 -0
  54. package/dist/commands/finish.command.d.ts +3 -27
  55. package/dist/commands/finish.command.d.ts.map +1 -1
  56. package/dist/commands/finish.command.js +2 -237
  57. package/dist/commands/finish.run.d.ts +5 -0
  58. package/dist/commands/finish.run.d.ts.map +1 -0
  59. package/dist/commands/finish.run.js +40 -0
  60. package/dist/commands/finish.spec.d.ts +26 -0
  61. package/dist/commands/finish.spec.d.ts.map +1 -0
  62. package/dist/commands/finish.spec.js +193 -0
  63. package/dist/commands/release/apply.command.d.ts +11 -0
  64. package/dist/commands/release/apply.command.d.ts.map +1 -0
  65. package/dist/commands/release/apply.command.js +343 -0
  66. package/dist/commands/release/plan.command.d.ts +12 -0
  67. package/dist/commands/release/plan.command.d.ts.map +1 -0
  68. package/dist/commands/release/plan.command.js +206 -0
  69. package/dist/commands/release/release.command.d.ts +5 -0
  70. package/dist/commands/release/release.command.d.ts.map +1 -0
  71. package/dist/commands/release/release.command.js +18 -0
  72. package/dist/commands/shared/task-backend.d.ts +1 -0
  73. package/dist/commands/shared/task-backend.d.ts.map +1 -1
  74. package/dist/commands/start.command.d.ts +3 -18
  75. package/dist/commands/start.command.d.ts.map +1 -1
  76. package/dist/commands/start.command.js +2 -143
  77. package/dist/commands/start.run.d.ts +5 -0
  78. package/dist/commands/start.run.d.ts.map +1 -0
  79. package/dist/commands/start.run.js +22 -0
  80. package/dist/commands/start.spec.d.ts +17 -0
  81. package/dist/commands/start.spec.d.ts.map +1 -0
  82. package/dist/commands/start.spec.js +115 -0
  83. package/dist/commands/task/add.command.d.ts.map +1 -1
  84. package/dist/commands/task/add.command.js +1 -7
  85. package/dist/commands/task/derive.command.d.ts.map +1 -1
  86. package/dist/commands/task/derive.command.js +1 -7
  87. package/dist/commands/task/list.command.d.ts +3 -8
  88. package/dist/commands/task/list.command.d.ts.map +1 -1
  89. package/dist/commands/task/list.command.js +2 -67
  90. package/dist/commands/task/list.run.d.ts +5 -0
  91. package/dist/commands/task/list.run.d.ts.map +1 -0
  92. package/dist/commands/task/list.run.js +10 -0
  93. package/dist/commands/task/list.spec.d.ts +7 -0
  94. package/dist/commands/task/list.spec.d.ts.map +1 -0
  95. package/dist/commands/task/list.spec.js +51 -0
  96. package/dist/commands/task/next.command.d.ts +3 -8
  97. package/dist/commands/task/next.command.d.ts.map +1 -1
  98. package/dist/commands/task/next.command.js +2 -89
  99. package/dist/commands/task/next.run.d.ts +5 -0
  100. package/dist/commands/task/next.run.d.ts.map +1 -0
  101. package/dist/commands/task/next.run.js +11 -0
  102. package/dist/commands/task/next.spec.d.ts +7 -0
  103. package/dist/commands/task/next.spec.d.ts.map +1 -0
  104. package/dist/commands/task/next.spec.js +69 -0
  105. package/dist/commands/task/search.command.d.ts +3 -10
  106. package/dist/commands/task/search.command.d.ts.map +1 -1
  107. package/dist/commands/task/search.command.js +2 -101
  108. package/dist/commands/task/search.run.d.ts +5 -0
  109. package/dist/commands/task/search.run.d.ts.map +1 -0
  110. package/dist/commands/task/search.run.js +13 -0
  111. package/dist/commands/task/search.spec.d.ts +9 -0
  112. package/dist/commands/task/search.spec.d.ts.map +1 -0
  113. package/dist/commands/task/search.spec.js +79 -0
  114. package/dist/commands/task/set-status.command.d.ts.map +1 -1
  115. package/dist/commands/task/set-status.command.js +1 -7
  116. package/dist/commands/task/shared.d.ts.map +1 -1
  117. package/dist/commands/task/shared.js +15 -8
  118. package/dist/commands/task/show.command.d.ts +3 -7
  119. package/dist/commands/task/show.command.d.ts.map +1 -1
  120. package/dist/commands/task/show.command.js +2 -19
  121. package/dist/commands/task/show.run.d.ts +5 -0
  122. package/dist/commands/task/show.run.d.ts.map +1 -0
  123. package/dist/commands/task/show.run.js +11 -0
  124. package/dist/commands/task/show.spec.d.ts +6 -0
  125. package/dist/commands/task/show.spec.d.ts.map +1 -0
  126. package/dist/commands/task/show.spec.js +8 -0
  127. package/dist/commands/task/update.command.d.ts.map +1 -1
  128. package/dist/commands/task/update.command.js +1 -7
  129. package/dist/commands/upgrade.d.ts.map +1 -1
  130. package/dist/commands/upgrade.js +149 -31
  131. package/dist/commands/verify.command.d.ts +3 -15
  132. package/dist/commands/verify.command.d.ts.map +1 -1
  133. package/dist/commands/verify.command.js +2 -113
  134. package/dist/commands/verify.run.d.ts +5 -0
  135. package/dist/commands/verify.run.d.ts.map +1 -0
  136. package/dist/commands/verify.run.js +17 -0
  137. package/dist/commands/verify.spec.d.ts +14 -0
  138. package/dist/commands/verify.spec.d.ts.map +1 -0
  139. package/dist/commands/verify.spec.js +96 -0
  140. package/package.json +1 -1
@@ -1,7 +1,8 @@
1
1
  import path from "node:path";
2
- import { loadConfig, resolveProject, saveConfig, setByDottedKey } from "@agentplaneorg/core";
2
+ import { saveConfig, setByDottedKey } from "@agentplaneorg/core";
3
3
  import { mapCoreError } from "../../error-map.js";
4
4
  import { usageError } from "../../spec/errors.js";
5
+ import { CliError } from "../../../shared/errors.js";
5
6
  export const configShowSpec = {
6
7
  id: ["config", "show"],
7
8
  group: "Config",
@@ -11,19 +12,19 @@ export const configShowSpec = {
11
12
  };
12
13
  async function cmdConfigShow(opts) {
13
14
  try {
14
- const resolved = await resolveProject({
15
- cwd: opts.cwd,
16
- rootOverride: opts.rootOverride ?? null,
17
- });
18
- const loaded = await loadConfig(resolved.agentplaneDir);
15
+ const loaded = await opts.deps.getLoadedConfig("config show");
19
16
  process.stdout.write(`${JSON.stringify(loaded.raw, null, 2)}\n`);
20
17
  return 0;
21
18
  }
22
19
  catch (err) {
20
+ if (err instanceof CliError)
21
+ throw err;
23
22
  throw mapCoreError(err, { command: "config show", root: opts.rootOverride ?? null });
24
23
  }
25
24
  }
26
- export const runConfigShow = (ctx) => cmdConfigShow({ cwd: ctx.cwd, rootOverride: ctx.rootOverride });
25
+ export function makeRunConfigShowHandler(deps) {
26
+ return (ctx) => cmdConfigShow({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, deps });
27
+ }
27
28
  export const configSetSpec = {
28
29
  id: ["config", "set"],
29
30
  group: "Config",
@@ -43,11 +44,8 @@ export const configSetSpec = {
43
44
  };
44
45
  async function cmdConfigSet(opts) {
45
46
  try {
46
- const resolved = await resolveProject({
47
- cwd: opts.cwd,
48
- rootOverride: opts.rootOverride ?? null,
49
- });
50
- const loaded = await loadConfig(resolved.agentplaneDir);
47
+ const resolved = await opts.deps.getResolvedProject("config set");
48
+ const loaded = await opts.deps.getLoadedConfig("config set");
51
49
  const raw = { ...loaded.raw };
52
50
  setByDottedKey(raw, opts.key, opts.value);
53
51
  await saveConfig(resolved.agentplaneDir, raw);
@@ -55,6 +53,8 @@ async function cmdConfigSet(opts) {
55
53
  return 0;
56
54
  }
57
55
  catch (err) {
56
+ if (err instanceof CliError)
57
+ throw err;
58
58
  throw mapCoreError(err, {
59
59
  command: "config set",
60
60
  key: opts.key,
@@ -62,7 +62,15 @@ async function cmdConfigSet(opts) {
62
62
  });
63
63
  }
64
64
  }
65
- export const runConfigSet = (ctx, p) => cmdConfigSet({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, key: p.key, value: p.value });
65
+ export function makeRunConfigSetHandler(deps) {
66
+ return (ctx, p) => cmdConfigSet({
67
+ cwd: ctx.cwd,
68
+ rootOverride: ctx.rootOverride,
69
+ key: p.key,
70
+ value: p.value,
71
+ deps,
72
+ });
73
+ }
66
74
  export const modeGetSpec = {
67
75
  id: ["mode", "get"],
68
76
  group: "Config",
@@ -72,19 +80,19 @@ export const modeGetSpec = {
72
80
  };
73
81
  async function cmdModeGet(opts) {
74
82
  try {
75
- const resolved = await resolveProject({
76
- cwd: opts.cwd,
77
- rootOverride: opts.rootOverride ?? null,
78
- });
79
- const loaded = await loadConfig(resolved.agentplaneDir);
83
+ const loaded = await opts.deps.getLoadedConfig("mode get");
80
84
  process.stdout.write(`${loaded.config.workflow_mode}\n`);
81
85
  return 0;
82
86
  }
83
87
  catch (err) {
88
+ if (err instanceof CliError)
89
+ throw err;
84
90
  throw mapCoreError(err, { command: "mode get", root: opts.rootOverride ?? null });
85
91
  }
86
92
  }
87
- export const runModeGet = (ctx) => cmdModeGet({ cwd: ctx.cwd, rootOverride: ctx.rootOverride });
93
+ export function makeRunModeGetHandler(deps) {
94
+ return (ctx) => cmdModeGet({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, deps });
95
+ }
88
96
  export const modeSetSpec = {
89
97
  id: ["mode", "set"],
90
98
  group: "Config",
@@ -104,11 +112,8 @@ export const modeSetSpec = {
104
112
  };
105
113
  async function cmdModeSet(opts) {
106
114
  try {
107
- const resolved = await resolveProject({
108
- cwd: opts.cwd,
109
- rootOverride: opts.rootOverride ?? null,
110
- });
111
- const loaded = await loadConfig(resolved.agentplaneDir);
115
+ const resolved = await opts.deps.getResolvedProject("mode set");
116
+ const loaded = await opts.deps.getLoadedConfig("mode set");
112
117
  const raw = { ...loaded.raw };
113
118
  setByDottedKey(raw, "workflow_mode", opts.mode);
114
119
  await saveConfig(resolved.agentplaneDir, raw);
@@ -116,6 +121,8 @@ async function cmdModeSet(opts) {
116
121
  return 0;
117
122
  }
118
123
  catch (err) {
124
+ if (err instanceof CliError)
125
+ throw err;
119
126
  throw mapCoreError(err, {
120
127
  command: "mode set",
121
128
  root: opts.rootOverride ?? null,
@@ -123,8 +130,11 @@ async function cmdModeSet(opts) {
123
130
  });
124
131
  }
125
132
  }
126
- export const runModeSet = (ctx, p) => cmdModeSet({
127
- cwd: ctx.cwd,
128
- rootOverride: ctx.rootOverride,
129
- mode: p.mode,
130
- });
133
+ export function makeRunModeSetHandler(deps) {
134
+ return (ctx, p) => cmdModeSet({
135
+ cwd: ctx.cwd,
136
+ rootOverride: ctx.rootOverride,
137
+ mode: p.mode,
138
+ deps,
139
+ });
140
+ }
@@ -1,4 +1,5 @@
1
1
  import type { CommandHandler, CommandSpec } from "../../spec/spec.js";
2
+ import type { RunDeps } from "../command-catalog.js";
2
3
  type QuickstartParsed = Record<string, never>;
3
4
  export declare const quickstartSpec: CommandSpec<QuickstartParsed>;
4
5
  export declare const runQuickstart: CommandHandler<QuickstartParsed>;
@@ -9,6 +10,6 @@ export declare const roleSpec: CommandSpec<RoleParsed>;
9
10
  export declare const runRole: CommandHandler<RoleParsed>;
10
11
  type AgentsParsed = Record<string, never>;
11
12
  export declare const agentsSpec: CommandSpec<AgentsParsed>;
12
- export declare const runAgents: CommandHandler<AgentsParsed>;
13
+ export declare function makeRunAgentsHandler(deps: RunDeps): CommandHandler<AgentsParsed>;
13
14
  export {};
14
15
  //# sourceMappingURL=core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/core.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtE,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE9C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,gBAAgB,CAOxD,CAAC;AAYF,eAAO,MAAM,aAAa,EAAE,cAAc,CAAC,gBAAgB,CAG1D,CAAC;AAEF,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,UAAU,CAO5C,CAAC;AA8BF,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,UAAU,CAG9C,CAAC;AAEF,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1C,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,YAAY,CAMhD,CAAC;AAkEF,eAAO,MAAM,SAAS,EAAE,cAAc,CAAC,YAAY,CACU,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/core.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE9C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,gBAAgB,CAOxD,CAAC;AAYF,eAAO,MAAM,aAAa,EAAE,cAAc,CAAC,gBAAgB,CAG1D,CAAC;AAEF,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,UAAU,CAO5C,CAAC;AAgLF,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,UAAU,CAE9C,CAAC;AAEF,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1C,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,YAAY,CAMhD,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,CA+DhF"}
@@ -7,6 +7,7 @@ import { CliError } from "../../../shared/errors.js";
7
7
  import { dedupeStrings } from "../../../shared/strings.js";
8
8
  import { usageError } from "../../spec/errors.js";
9
9
  import { listRoles, renderQuickstart, renderRole } from "../../command-guide.js";
10
+ import { toStringList } from "../../spec/parse-utils.js";
10
11
  export const quickstartSpec = {
11
12
  id: ["quickstart"],
12
13
  group: "Core",
@@ -38,7 +39,79 @@ export const roleSpec = {
38
39
  examples: [{ cmd: "agentplane role ORCHESTRATOR", why: "Show ORCHESTRATOR guide." }],
39
40
  parse: (raw) => ({ role: String(raw.args.role ?? "") }),
40
41
  };
41
- function cmdRole(opts) {
42
+ function normalizeRoleId(roleRaw) {
43
+ return roleRaw.trim().toUpperCase();
44
+ }
45
+ async function listAgentProfileIds(opts) {
46
+ try {
47
+ const resolved = await resolveProject({
48
+ cwd: opts.cwd,
49
+ rootOverride: opts.rootOverride ?? null,
50
+ });
51
+ const agentsDir = path.join(resolved.agentplaneDir, "agents");
52
+ if (!(await fileExists(agentsDir)))
53
+ return null;
54
+ const entriesRaw = await readdir(agentsDir);
55
+ const entries = entriesRaw.filter((n) => n.endsWith(".json")).toSorted();
56
+ const ids = entries.map((n) => n.replace(/\.json$/i, ""));
57
+ return { agentplaneDir: resolved.agentplaneDir, ids };
58
+ }
59
+ catch {
60
+ // Best-effort: role should not fail if we're not in an agentplane project.
61
+ return null;
62
+ }
63
+ }
64
+ async function readAgentProfile(opts) {
65
+ const listing = await listAgentProfileIds({ cwd: opts.cwd, rootOverride: opts.rootOverride });
66
+ if (!listing)
67
+ return null;
68
+ const roleId = normalizeRoleId(opts.roleId);
69
+ const candidates = [roleId, opts.roleId.trim()].filter(Boolean);
70
+ const idsLower = new Map();
71
+ for (const id of listing.ids)
72
+ idsLower.set(id.toLowerCase(), id);
73
+ let foundId = null;
74
+ for (const c of candidates) {
75
+ const exact = listing.ids.find((id) => id === c);
76
+ if (exact) {
77
+ foundId = exact;
78
+ break;
79
+ }
80
+ const ci = idsLower.get(c.toLowerCase());
81
+ if (ci) {
82
+ foundId = ci;
83
+ break;
84
+ }
85
+ }
86
+ if (!foundId)
87
+ return null;
88
+ const filename = `${foundId}.json`;
89
+ const filePath = path.join(listing.agentplaneDir, "agents", filename);
90
+ const raw = JSON.parse(await readFile(filePath, "utf8"));
91
+ return { agentplaneDir: listing.agentplaneDir, filename, profile: raw };
92
+ }
93
+ function renderAgentProfileBlock(opts) {
94
+ const id = (typeof opts.profile.id === "string" ? opts.profile.id : "").trim() || opts.roleId;
95
+ const role = (typeof opts.profile.role === "string" ? opts.profile.role : "").trim();
96
+ const description = (typeof opts.profile.description === "string" ? opts.profile.description : "").trim();
97
+ const inputs = toStringList(opts.profile.inputs);
98
+ const outputs = toStringList(opts.profile.outputs);
99
+ const permissions = toStringList(opts.profile.permissions);
100
+ const workflow = toStringList(opts.profile.workflow);
101
+ const lines = [
102
+ `### ${id}`,
103
+ ...(role ? [`Role: ${role}`] : []),
104
+ ...(description ? [`Description: ${description}`] : []),
105
+ ...(inputs.length > 0 ? ["", "Inputs:", ...inputs.map((s) => `- ${s}`)] : []),
106
+ ...(outputs.length > 0 ? ["", "Outputs:", ...outputs.map((s) => `- ${s}`)] : []),
107
+ ...(permissions.length > 0 ? ["", "Permissions:", ...permissions.map((s) => `- ${s}`)] : []),
108
+ ...(workflow.length > 0 ? ["", "Workflow:", ...workflow.map((s) => `- ${s}`)] : []),
109
+ "",
110
+ `Source: .agentplane/agents/${opts.filename} (lower priority; see AGENTS.md)`,
111
+ ];
112
+ return lines.join("\n").trimEnd();
113
+ }
114
+ async function cmdRole(opts) {
42
115
  try {
43
116
  const roleRaw = opts.role.trim();
44
117
  if (!roleRaw) {
@@ -48,17 +121,54 @@ function cmdRole(opts) {
48
121
  message: "Missing required argument: role",
49
122
  });
50
123
  }
51
- const guide = renderRole(roleRaw);
52
- if (!guide) {
53
- const roles = listRoles();
54
- const available = roles.length > 0 ? `\nAvailable roles: ${roles.join(", ")}` : "";
124
+ const normalizedRole = normalizeRoleId(roleRaw);
125
+ const guide = renderRole(normalizedRole);
126
+ const agentProfile = await readAgentProfile({
127
+ cwd: opts.cwd,
128
+ rootOverride: opts.rootOverride,
129
+ roleId: normalizedRole,
130
+ });
131
+ if (!guide && !agentProfile) {
132
+ const builtin = listRoles();
133
+ const agentIds = await listAgentProfileIds({
134
+ cwd: opts.cwd,
135
+ rootOverride: opts.rootOverride,
136
+ });
137
+ const discovered = agentIds ? agentIds.ids : [];
138
+ const availableList = dedupeStrings([...builtin, ...discovered]).toSorted();
139
+ const available = availableList.length > 0 ? `\nAvailable roles: ${availableList.join(", ")}` : "";
55
140
  throw usageError({
56
141
  spec: roleSpec,
57
142
  command: "role",
58
143
  message: `Unknown role: ${roleRaw}.${available}`,
59
144
  });
60
145
  }
61
- process.stdout.write(`${guide}\n`);
146
+ if (guide) {
147
+ process.stdout.write(`${guide}\n`);
148
+ if (agentProfile) {
149
+ const block = renderAgentProfileBlock({
150
+ filename: agentProfile.filename,
151
+ roleId: normalizedRole,
152
+ profile: agentProfile.profile,
153
+ });
154
+ process.stdout.write(`\n## Agent profile\n\n${block}\n`);
155
+ }
156
+ return 0;
157
+ }
158
+ if (!agentProfile) {
159
+ // Defensive: this should be unreachable due to the earlier guard.
160
+ throw usageError({
161
+ spec: roleSpec,
162
+ command: "role",
163
+ message: `Unknown role: ${roleRaw}.`,
164
+ });
165
+ }
166
+ const block = renderAgentProfileBlock({
167
+ filename: agentProfile.filename,
168
+ roleId: normalizedRole,
169
+ profile: agentProfile.profile,
170
+ });
171
+ process.stdout.write(`${block}\n`);
62
172
  return 0;
63
173
  }
64
174
  catch (err) {
@@ -68,8 +178,7 @@ function cmdRole(opts) {
68
178
  }
69
179
  }
70
180
  export const runRole = (ctx, p) => {
71
- cmdRole({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, role: p.role });
72
- return Promise.resolve(0);
181
+ return cmdRole({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, role: p.role });
73
182
  };
74
183
  export const agentsSpec = {
75
184
  id: ["agents"],
@@ -78,67 +187,65 @@ export const agentsSpec = {
78
187
  examples: [{ cmd: "agentplane agents", why: "Print available agent ids and roles." }],
79
188
  parse: () => ({}),
80
189
  };
81
- async function cmdAgents(opts) {
82
- try {
83
- const resolved = await resolveProject({
84
- cwd: opts.cwd,
85
- rootOverride: opts.rootOverride ?? null,
86
- });
87
- const agentsDir = path.join(resolved.agentplaneDir, "agents");
88
- if (!(await fileExists(agentsDir))) {
89
- throw new CliError({
90
- exitCode: 2,
91
- code: "E_USAGE",
92
- message: `Agents directory not found: ${agentsDir} (run \`agentplane init\`)`,
93
- });
94
- }
95
- const entriesRaw = await readdir(agentsDir);
96
- const entries = entriesRaw.filter((name) => name.endsWith(".json")).toSorted();
97
- if (entries.length === 0) {
98
- throw new CliError({
99
- exitCode: 2,
100
- code: "E_USAGE",
101
- message: `No agent definitions found under ${agentsDir} (expected *.json)`,
102
- });
103
- }
104
- const rows = [];
105
- const seen = new Set();
106
- const duplicates = [];
107
- for (const entry of entries) {
108
- const filePath = path.join(agentsDir, entry);
109
- const raw = JSON.parse(await readFile(filePath, "utf8"));
110
- const rawId = typeof raw.id === "string" ? raw.id : "";
111
- const rawRole = typeof raw.role === "string" ? raw.role : "";
112
- const agentId = rawId.trim() || "<missing-id>";
113
- const role = rawRole.trim() || "-";
114
- if (seen.has(agentId)) {
115
- duplicates.push(agentId);
190
+ export function makeRunAgentsHandler(deps) {
191
+ return async (ctx) => {
192
+ try {
193
+ const resolved = await deps.getResolvedProject("agents");
194
+ const agentsDir = path.join(resolved.agentplaneDir, "agents");
195
+ if (!(await fileExists(agentsDir))) {
196
+ throw new CliError({
197
+ exitCode: 2,
198
+ code: "E_USAGE",
199
+ message: `Agents directory not found: ${agentsDir} (run \`agentplane init\`)`,
200
+ });
116
201
  }
117
- else {
118
- seen.add(agentId);
202
+ const entriesRaw = await readdir(agentsDir);
203
+ const entries = entriesRaw.filter((name) => name.endsWith(".json")).toSorted();
204
+ if (entries.length === 0) {
205
+ throw new CliError({
206
+ exitCode: 2,
207
+ code: "E_USAGE",
208
+ message: `No agent definitions found under ${agentsDir} (expected *.json)`,
209
+ });
119
210
  }
120
- rows.push([agentId, role, entry]);
121
- }
122
- const widthId = Math.max(...rows.map((row) => row[0].length), "ID".length);
123
- const widthFile = Math.max(...rows.map((row) => row[2].length), "FILE".length);
124
- process.stdout.write(`${"ID".padEnd(widthId)} ${"FILE".padEnd(widthFile)} ROLE\n`);
125
- process.stdout.write(`${"-".repeat(widthId)} ${"-".repeat(widthFile)} ----\n`);
126
- for (const [agentId, role, filename] of rows) {
127
- process.stdout.write(`${agentId.padEnd(widthId)} ${filename.padEnd(widthFile)} ${role}\n`);
211
+ const rows = [];
212
+ const seen = new Set();
213
+ const duplicates = [];
214
+ for (const entry of entries) {
215
+ const filePath = path.join(agentsDir, entry);
216
+ const raw = JSON.parse(await readFile(filePath, "utf8"));
217
+ const rawId = typeof raw.id === "string" ? raw.id : "";
218
+ const rawRole = typeof raw.role === "string" ? raw.role : "";
219
+ const agentId = rawId.trim() || "<missing-id>";
220
+ const role = rawRole.trim() || "-";
221
+ if (seen.has(agentId)) {
222
+ duplicates.push(agentId);
223
+ }
224
+ else {
225
+ seen.add(agentId);
226
+ }
227
+ rows.push([agentId, role, entry]);
228
+ }
229
+ const widthId = Math.max(...rows.map((row) => row[0].length), "ID".length);
230
+ const widthFile = Math.max(...rows.map((row) => row[2].length), "FILE".length);
231
+ process.stdout.write(`${"ID".padEnd(widthId)} ${"FILE".padEnd(widthFile)} ROLE\n`);
232
+ process.stdout.write(`${"-".repeat(widthId)} ${"-".repeat(widthFile)} ----\n`);
233
+ for (const [agentId, role, filename] of rows) {
234
+ process.stdout.write(`${agentId.padEnd(widthId)} ${filename.padEnd(widthFile)} ${role}\n`);
235
+ }
236
+ if (duplicates.length > 0) {
237
+ throw new CliError({
238
+ exitCode: 2,
239
+ code: "E_USAGE",
240
+ message: `Duplicate agent ids: ${dedupeStrings(duplicates).toSorted().join(", ")}`,
241
+ });
242
+ }
243
+ return 0;
128
244
  }
129
- if (duplicates.length > 0) {
130
- throw new CliError({
131
- exitCode: 2,
132
- code: "E_USAGE",
133
- message: `Duplicate agent ids: ${dedupeStrings(duplicates).toSorted().join(", ")}`,
134
- });
245
+ catch (err) {
246
+ if (err instanceof CliError)
247
+ throw err;
248
+ throw mapCoreError(err, { command: "agents", root: ctx.rootOverride ?? null });
135
249
  }
136
- return 0;
137
- }
138
- catch (err) {
139
- if (err instanceof CliError)
140
- throw err;
141
- throw mapCoreError(err, { command: "agents", root: opts.rootOverride ?? null });
142
- }
250
+ };
143
251
  }
144
- export const runAgents = (ctx) => cmdAgents({ cwd: ctx.cwd, rootOverride: ctx.rootOverride });
@@ -1,4 +1,5 @@
1
1
  import type { CommandHandler, CommandSpec } from "../../spec/spec.js";
2
+ import type { RunDeps } from "../command-catalog.js";
2
3
  type IdeSyncParsed = {
3
4
  ide?: "cursor" | "windsurf";
4
5
  };
@@ -7,7 +8,8 @@ export declare function cmdIdeSync(opts: {
7
8
  cwd: string;
8
9
  rootOverride?: string;
9
10
  ide?: "cursor" | "windsurf";
11
+ deps: RunDeps;
10
12
  }): Promise<number>;
11
- export declare const runIdeSync: CommandHandler<IdeSyncParsed>;
13
+ export declare function makeRunIdeSyncHandler(deps: RunDeps): CommandHandler<IdeSyncParsed>;
12
14
  export {};
13
15
  //# sourceMappingURL=ide.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ide.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/ide.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtE,KAAK,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;CAAE,CAAC;AAErD,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,aAAa,CAkBlD,CAAC;AAEF,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClB;AAED,eAAO,MAAM,UAAU,EAAE,cAAc,CAAC,aAAa,CACqB,CAAC"}
1
+ {"version":3,"file":"ide.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/ide.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,KAAK,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAA;CAAE,CAAC;AAErD,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,aAAa,CAkBlD,CAAC;AAEF,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CA2ClB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAElF"}
@@ -1,8 +1,8 @@
1
1
  import { mkdir, readFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
- import { resolveProject } from "@agentplaneorg/core";
4
3
  import { mapCoreError } from "../../error-map.js";
5
4
  import { writeTextIfChanged } from "../../../shared/write-if-changed.js";
5
+ import { CliError } from "../../../shared/errors.js";
6
6
  export const ideSyncSpec = {
7
7
  id: ["ide", "sync"],
8
8
  group: "IDE",
@@ -24,10 +24,7 @@ export const ideSyncSpec = {
24
24
  };
25
25
  export async function cmdIdeSync(opts) {
26
26
  try {
27
- const resolved = await resolveProject({
28
- cwd: opts.cwd,
29
- rootOverride: opts.rootOverride ?? null,
30
- });
27
+ const resolved = await opts.deps.getResolvedProject("ide sync");
31
28
  const agentsPath = path.join(resolved.gitRoot, "AGENTS.md");
32
29
  const agentsText = await readFile(agentsPath, "utf8");
33
30
  const header = [
@@ -61,7 +58,11 @@ export async function cmdIdeSync(opts) {
61
58
  return 0;
62
59
  }
63
60
  catch (err) {
61
+ if (err instanceof CliError)
62
+ throw err;
64
63
  throw mapCoreError(err, { command: "ide sync", root: opts.rootOverride ?? null });
65
64
  }
66
65
  }
67
- export const runIdeSync = (ctx, p) => cmdIdeSync({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, ide: p.ide });
66
+ export function makeRunIdeSyncHandler(deps) {
67
+ return (ctx, p) => cmdIdeSync({ cwd: ctx.cwd, rootOverride: ctx.rootOverride, ide: p.ide, deps });
68
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"ide-sync.d.ts","sourceRoot":"","sources":["../../../../../src/cli/run-cli/commands/init/ide-sync.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAetC"}
1
+ {"version":3,"file":"ide-sync.d.ts","sourceRoot":"","sources":["../../../../../src/cli/run-cli/commands/init/ide-sync.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA0BtC"}
@@ -4,7 +4,16 @@ import { cmdIdeSync } from "../ide.js";
4
4
  export async function maybeSyncIde(opts) {
5
5
  if (opts.ide === "codex")
6
6
  return { installPaths: [] };
7
- await cmdIdeSync({ cwd: opts.cwd, rootOverride: opts.rootOverride, ide: opts.ide });
7
+ const deps = {
8
+ getCtx: (_cmd) => Promise.reject(new Error("getCtx is not available during init")),
9
+ getResolvedProject: (_cmd) => Promise.resolve({
10
+ gitRoot: opts.gitRoot,
11
+ agentplaneDir: path.join(opts.gitRoot, ".agentplane"),
12
+ }),
13
+ getLoadedConfig: (_cmd) => Promise.reject(new Error("getLoadedConfig is not available during init")),
14
+ getHelpJsonForDocs: () => [],
15
+ };
16
+ await cmdIdeSync({ cwd: opts.cwd, rootOverride: opts.rootOverride, ide: opts.ide, deps });
8
17
  const installPaths = [];
9
18
  const cursorPath = path.join(opts.gitRoot, ".cursor", "rules", "agentplane.mdc");
10
19
  const windsurfPath = path.join(opts.gitRoot, ".windsurf", "rules", "agentplane.md");
@@ -1 +1 @@
1
- {"version":3,"file":"write-agents.d.ts","sourceRoot":"","sources":["../../../../../src/cli/run-cli/commands/init/write-agents.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAQ1E,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA+CtC"}
1
+ {"version":3,"file":"write-agents.d.ts","sourceRoot":"","sources":["../../../../../src/cli/run-cli/commands/init/write-agents.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAQ1E,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA6BtC"}
@@ -1,45 +1,25 @@
1
- import { lstat, symlink } from "node:fs/promises";
2
1
  import path from "node:path";
3
2
  import { atomicWriteFile } from "@agentplaneorg/core";
4
3
  import { filterAgentsByWorkflow, loadAgentTemplates, loadAgentsTemplate, } from "../../../../agents/agents-template.js";
5
4
  import { fileExists } from "../../../fs-utils.js";
6
5
  export async function ensureAgentsFiles(opts) {
7
- const agentsLinkPath = path.join(opts.gitRoot, "AGENTS.md");
8
- const agentsManagedPath = path.join(opts.agentplaneDir, "AGENTS.md");
6
+ const agentsPath = path.join(opts.gitRoot, "AGENTS.md");
9
7
  const installPaths = [
10
8
  path.relative(opts.gitRoot, opts.configPathAbs),
11
9
  path.relative(opts.gitRoot, opts.backendPathAbs),
12
10
  ];
13
11
  let wroteAgents = false;
14
- if (await fileExists(agentsManagedPath)) {
12
+ if (await fileExists(agentsPath)) {
15
13
  // nothing
16
14
  }
17
15
  else {
18
16
  const template = await loadAgentsTemplate();
19
17
  const filtered = filterAgentsByWorkflow(template, opts.workflow);
20
- await atomicWriteFile(agentsManagedPath, filtered, "utf8");
18
+ await atomicWriteFile(agentsPath, filtered, "utf8");
21
19
  wroteAgents = true;
22
20
  }
23
21
  if (wroteAgents) {
24
- installPaths.push(path.relative(opts.gitRoot, agentsManagedPath));
25
- }
26
- // The workspace-root AGENTS.md is a symlink to the managed copy under .agentplane/.
27
- // This keeps the root policy path stable while making upgrades deterministic.
28
- if (await fileExists(agentsLinkPath)) {
29
- try {
30
- const st = await lstat(agentsLinkPath);
31
- if (!st.isSymbolicLink()) {
32
- // Do not overwrite user-owned AGENTS.md in init; upgrade handles migration.
33
- }
34
- }
35
- catch {
36
- // ignore
37
- }
38
- }
39
- else {
40
- const relTarget = path.relative(opts.gitRoot, agentsManagedPath);
41
- await symlink(relTarget, agentsLinkPath);
42
- installPaths.push(path.relative(opts.gitRoot, agentsLinkPath));
22
+ installPaths.push(path.relative(opts.gitRoot, agentsPath));
43
23
  }
44
24
  const agentTemplates = await loadAgentTemplates();
45
25
  for (const agent of agentTemplates) {
@@ -0,0 +1,4 @@
1
+ export declare function ensureGitignoreAgents(opts: {
2
+ gitRoot: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=write-gitignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-gitignore.d.ts","sourceRoot":"","sources":["../../../../../src/cli/run-cli/commands/init/write-gitignore.ts"],"names":[],"mappings":"AAeA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBpF"}
@@ -0,0 +1,35 @@
1
+ import path from "node:path";
2
+ import { readFile } from "node:fs/promises";
3
+ import { writeTextIfChanged } from "../../../../shared/write-if-changed.js";
4
+ async function readTextIfExists(filePath) {
5
+ try {
6
+ return await readFile(filePath, "utf8");
7
+ }
8
+ catch (err) {
9
+ const code = err?.code;
10
+ if (code === "ENOENT")
11
+ return null;
12
+ throw err;
13
+ }
14
+ }
15
+ export async function ensureGitignoreAgents(opts) {
16
+ const gitignorePath = path.join(opts.gitRoot, ".gitignore");
17
+ const existing = (await readTextIfExists(gitignorePath)) ?? "";
18
+ const ensuredLines = [
19
+ "# agentplane: ignore local agent prompts/templates",
20
+ "AGENTS.md",
21
+ ".agentplane/agents/",
22
+ ];
23
+ const existingLines = existing.split(/\r?\n/);
24
+ const existingSet = new Set(existingLines.map((line) => line.trimEnd()));
25
+ const missing = ensuredLines.filter((line) => !existingSet.has(line));
26
+ if (missing.length === 0)
27
+ return;
28
+ const nextLines = [...existingLines];
29
+ // Keep content stable and append a trailing newline.
30
+ if (nextLines.length > 0 && nextLines.at(-1) !== "")
31
+ nextLines.push("");
32
+ nextLines.push(...missing, "");
33
+ const nextText = `${nextLines.join("\n")}`.replaceAll(/\n{2,}$/g, "\n");
34
+ await writeTextIfChanged(gitignorePath, nextText);
35
+ }
@@ -4,6 +4,7 @@ type InitFlags = {
4
4
  workflow?: "direct" | "branch_pr";
5
5
  backend?: "local" | "redmine";
6
6
  hooks?: boolean;
7
+ gitignoreAgents?: boolean;
7
8
  requirePlanApproval?: boolean;
8
9
  requireNetworkApproval?: boolean;
9
10
  requireVerifyApproval?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/init.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAatE,KAAK,SAAS,GAAG;IACf,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAsBF,KAAK,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,UAAU,CA0I5C,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,UAAU,CACmB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/run-cli/commands/init.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAetE,KAAK,SAAS,GAAG;IACf,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtC,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAsBF,KAAK,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,CAAC;AAE5D,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,UAAU,CAsJ5C,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,cAAc,CAAC,UAAU,CACmB,CAAC"}