agent-work-loop 0.6.45 → 0.6.46

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.
@@ -13,10 +13,10 @@ import {
13
13
  isCheckPassed,
14
14
  runVerifyChecks,
15
15
  writeVerifyBaseline
16
- } from "./chunk-QKKMA2VT.js";
16
+ } from "./chunk-WWZIKKHP.js";
17
17
  import {
18
18
  gitBranch
19
- } from "./chunk-DQF7RF37.js";
19
+ } from "./chunk-DA27NBCS.js";
20
20
  import {
21
21
  loadProjectName
22
22
  } from "./chunk-FK3Q7UY2.js";
@@ -8,10 +8,10 @@ import {
8
8
  } from "./chunk-VE2GVNNS.js";
9
9
  import {
10
10
  gatherVersionInputs
11
- } from "./chunk-HAUTKVB5.js";
11
+ } from "./chunk-XWMS6Z5E.js";
12
12
  import {
13
13
  checkVersions
14
- } from "./chunk-5MXSJD3C.js";
14
+ } from "./chunk-ZEX5ZF6C.js";
15
15
  import {
16
16
  CommandNotFoundError,
17
17
  run,
@@ -5,7 +5,7 @@ import {
5
5
  runWorkNew,
6
6
  sanitizeForGit,
7
7
  worktreeDirtyTracked
8
- } from "./chunk-ISLNBWKV.js";
8
+ } from "./chunk-AGFQC2UO.js";
9
9
  import {
10
10
  loadProjectName
11
11
  } from "./chunk-FK3Q7UY2.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-VVZOIFL4.js";
4
4
  import {
5
5
  gitDirtyFiles
6
- } from "./chunk-DQF7RF37.js";
6
+ } from "./chunk-DA27NBCS.js";
7
7
  import {
8
8
  applyVerificationAttempts,
9
9
  loadState,
@@ -3,7 +3,7 @@ import {
3
3
  getLatestVersionCached,
4
4
  name,
5
5
  version
6
- } from "./chunk-5MXSJD3C.js";
6
+ } from "./chunk-ZEX5ZF6C.js";
7
7
  import {
8
8
  resolveProjectRoot
9
9
  } from "./chunk-MLTY3EE6.js";
@@ -4,7 +4,7 @@ import {
4
4
 
5
5
  // package.json
6
6
  var name = "agent-work-loop";
7
- var version = "0.6.45";
7
+ var version = "0.6.46";
8
8
 
9
9
  // src/core/npm-registry.ts
10
10
  import fs from "fs";
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  computeUpdateAvailable,
4
4
  readCachedLatestVersion,
5
5
  version
6
- } from "./chunk-5MXSJD3C.js";
6
+ } from "./chunk-ZEX5ZF6C.js";
7
7
  import {
8
8
  caps,
9
9
  engineDir,
@@ -26,19 +26,25 @@ var BANNER = `
26
26
  \uD310\uB2E8\uC740 Claude Code\uB098 Codex\uAC00 \uD558\uACE0,
27
27
  awl\uC740 \uD30C\uC77C\uACFC \uC0C1\uD0DC\uB9CC \uAD00\uB9AC\uD569\uB2C8\uB2E4.`;
28
28
  var GETTING_STARTED = [
29
- { cmd: "awl init", desc: "\uC774 \uD504\uB85C\uC81D\uD2B8\uB97C \uC124\uC815\uD569\uB2C8\uB2E4" },
30
- { cmd: "awl status", desc: "\uC9C0\uAE08 \uC5B4\uB514\uAE4C\uC9C0 \uC654\uB294\uC9C0 \uBD05\uB2C8\uB2E4" },
31
- { cmd: "awl doctor", desc: "\uC124\uCE58\uC640 \uD658\uACBD\uC744 \uC810\uAC80\uD569\uB2C8\uB2E4" }
29
+ { label: "1", cmd: "awl init", desc: "\uC791\uC5C5 \uC911\uC778 \uD504\uB85C\uC81D\uD2B8\uC5D0 awl \uD658\uACBD\uC744 \uC124\uC815\uD569\uB2C8\uB2E4." },
30
+ { label: "2-1", cmd: "/awl-loop <\uBAA9\uD45C>", desc: "\uBAA9\uD45C\uB97C \uC644\uC218\uD560 \uB54C\uAE4C\uC9C0 \uB2E8\uC77C \uB8E8\uD504\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4." },
31
+ {
32
+ label: "2-2",
33
+ cmd: "/awl-pipeline <lane\uBA85> <mode>",
34
+ desc: "\uB808\uC778 \uB2E8\uC704\uB85C exec\xB7review \uC138\uC158\uC744 \uBB34\uC778 \uC2E4\uD589\uD569\uB2C8\uB2E4."
35
+ }
32
36
  ];
33
37
  function padVisible(s, width) {
34
38
  return s + " ".repeat(Math.max(0, width - visibleWidth(s)));
35
39
  }
36
40
  function renderGettingStartedCard(c) {
37
41
  const t = makeTokens(c);
42
+ const prefixWidth = Math.max(...GETTING_STARTED.map((g) => `${g.label}.`.length));
38
43
  const cmdWidth = Math.max(...GETTING_STARTED.map((g) => visibleWidth(g.cmd)));
39
44
  const lines = GETTING_STARTED.map(
40
- (g, i) => `${i + 1}. ${t.accent(padVisible(g.cmd, cmdWidth))} ${g.desc}`
45
+ (g) => `${`${g.label}.`.padEnd(prefixWidth)} ${t.accent(padVisible(g.cmd, cmdWidth))} ${g.desc}`
41
46
  );
47
+ lines.push(t.muted("*2-1 \uD639\uC740 2-2\uB97C \uC2E4\uD589\uD558\uBA74 \uBC14\uB85C \uC2DC\uC791\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."));
42
48
  return sectionBox("\uC2DC\uC791\uD558\uAE30", lines, c);
43
49
  }
44
50
  function renderExamplesCard(c) {
@@ -127,6 +133,65 @@ function renderExamplesCard(c) {
127
133
  });
128
134
  return sectionBox("\uC608\uC2DC", lines, c);
129
135
  }
136
+ function renderSkillsCard(c) {
137
+ const t = makeTokens(c);
138
+ const lines = [
139
+ t.muted("\uBC18\uB4DC\uC2DC Claude Code \uAC19\uC740 LLM \uC548\uC5D0\uC11C \uC2E4\uD589\uD558\uC138\uC694 \u2014 awl \uD63C\uC790\uC11C\uB294 \uD310\uB2E8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."),
140
+ "",
141
+ t.muted("/awl-loop <\uBAA9\uD45C>"),
142
+ " \uBAA9\uD45C\uB97C \uC644\uB8CC \uC870\uAC74\uC73C\uB85C \uBC88\uC5ED\uD558\uACE0, \uAC8C\uC774\uD2B8 \uC2B9\uC778 \uD6C4 \uD55C \uC138\uC158\uC774 \uCC98\uC74C\uBD80\uD130 \uB05D\uAE4C\uC9C0 \uC9C1\uC811",
143
+ " \uC790\uC728 \uB8E8\uD504\uB85C \uAD6C\uD604\uD569\uB2C8\uB2E4. \uC6CC\uD06C\uC544\uC774\uD15C \uD558\uB098\uB97C \uD55C \uC138\uC158\uC774 \uAD00\uD1B5\uD569\uB2C8\uB2E4.",
144
+ "",
145
+ t.muted("/awl-pipeline <lane\uBA85> <mode>"),
146
+ " \uB808\uC778(lane) \uB2E8\uC704\uB85C \uBB34\uC778 \uD30C\uC774\uD504\uB77C\uC778\uC744 \uB3CC\uB9BD\uB2C8\uB2E4. \uC624\uCF00\uC2A4\uD2B8\uB808\uC774\uD130 \uC138\uC158\uC740 \uBAA9\uD45C\uB97C",
147
+ " \uC77C\uAC10\uC73C\uB85C \uC62E\uACA8 \uB808\uC778 \uD050\uC5D0 \uB123\uAE30\uB9CC \uD558\uACE0, exec\xB7review\uB294 \uAC01\uAC01 \uBCC4\uB3C4 \uBC31\uADF8\uB77C\uC6B4\uB4DC",
148
+ " \uC138\uC158\uC73C\uB85C \uC2A4\uD3F0\uB3FC \uADF8 \uB808\uC778 \uC548\uC5D0\uC11C \uAD6C\uD604\xB7\uAC80\uC99D\uC744 \uC9C4\uD589\uD569\uB2C8\uB2E4.",
149
+ "",
150
+ t.muted("\uB808\uC778(lane)\uC774\uB780"),
151
+ " .awl-worktrees/<lane\uBA85> \uACA9\uB9AC \uC6CC\uD06C\uD2B8\uB9AC \uD558\uB098\uC5D0 \uB300\uC751\uD558\uB294 \uC791\uC5C5 \uB2E8\uC704\uC785\uB2C8\uB2E4.",
152
+ " \uB808\uC778\uBA85\uC744 \uC0DD\uB7B5\uD558\uBA74 unknown-lane-<N>\uC774 \uC790\uB3D9 \uC0DD\uC131\uB3FC cwd\uC640 \uC11E\uC774\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4",
153
+ " (\uB2E8, cwd\uAC00 \uC774\uBBF8 \uB2E4\uB978 \uB808\uC778 \uC6CC\uD06C\uD2B8\uB9AC \uC548\uC774\uBA74 \uADF8 \uB808\uC778\uC744 \uADF8\uB300\uB85C \uC501\uB2C8\uB2E4).",
154
+ "",
155
+ t.muted("\uD30C\uC774\uD504\uB77C\uC778 \uAD6C\uC870 (\uAC04\uB7B5)"),
156
+ " plan(\uC624\uCF00\uC2A4\uD2B8\uB808\uC774\uD130) \u2192 exec\xB7review \uC2A4\uD3F0(\uB808\uC778\uBCC4) \u2192 \uC218\uC9D1\xB7\uAC8C\uC774\uD2B8 \u2192 \uC0C1\uD0DC \uD45C\uC2DC.",
157
+ " exec\xB7review\uAC00 \uD544\uC694\uC2DC \uC2A4\uD3F0\uD558\uB294 \uC870\uC0AC\xB7\uAC80\uC99D\uC6A9 \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB294 \uB354 \uC7AC\uC704\uC784\uD558\uC9C0",
158
+ " \uC54A\uACE0, \uC2A4\uD3F0\uB41C exec\xB7review \uC790\uC2E0\uB3C4 \uC2A4\uC2A4\uB85C \uC7AC\uAC1C\uD558\uC9C0 \uBABB\uD574 \uC624\uCF00\uC2A4\uD2B8\uB808\uC774\uD130\uAC00",
159
+ " \uC720\uD734 \uC2E0\uD638\uB97C \uBC1B\uC744 \uB54C\uB9C8\uB2E4 \uB2E4\uC2DC \uAE68\uC6C1\uB2C8\uB2E4.",
160
+ "",
161
+ t.muted("<mode> \u2014 \uAC8C\uC774\uD2B8 \uBC00\uB3C4 (\uB192\uC744\uC218\uB85D \uC0AC\uB78C \uAC1C\uC785\uC774 \uB9CE\uC2B5\uB2C8\uB2E4, \uAE30\uBCF8\uC740 gate-high)")
162
+ ];
163
+ const modes = [
164
+ { flag: "--gh, --gate-high", desc: "(\uAE30\uBCF8\uAC12) \uAC8C\uC774\uD2B8\uB9C8\uB2E4 \uC0AC\uB78C\uC5D0\uAC8C \uC2B9\uC778\uBC1B\uC2B5\uB2C8\uB2E4 \u2014 \uAC1C\uC785 \uCD5C\uB300" },
165
+ {
166
+ flag: "--gm, --gate-medium",
167
+ desc: "\uAC8C\uC774\uD2B8\uB97C \uC790\uB3D9 \uC2B9\uC778\uD558\uB418 \uC2EC\uAC01 \uD56D\uBAA9\uB9CC \uBAA8\uC544 \uBCF4\uACE0\uD569\uB2C8\uB2E4 \u2014 \uAC1C\uC785 \uC911\uAC04"
168
+ },
169
+ {
170
+ flag: "--gl, --gate-low",
171
+ desc: "\uAC8C\uC774\uD2B8\uB97C \uC804\uBD80 \uC790\uB3D9 \uC2B9\uC778\uD558\uACE0 \uB05D\uAE4C\uC9C0 \uC790\uC728\uB85C \uC9C4\uD589\uD569\uB2C8\uB2E4 \u2014 \uAC1C\uC785 \uCD5C\uC18C"
172
+ }
173
+ ];
174
+ const flagWidth = Math.max(...modes.map((m) => visibleWidth(m.flag)));
175
+ for (const m of modes) {
176
+ lines.push(` ${t.accent(padVisible(m.flag, flagWidth))} ${m.desc}`);
177
+ }
178
+ return sectionBox("\uC2A4\uD0AC", lines, c);
179
+ }
180
+ function renderSkillsHelpFooter(c) {
181
+ const t = makeTokens(c);
182
+ const color = makeColors(c.color);
183
+ const lines = [
184
+ t.muted("\uBC18\uB4DC\uC2DC Claude Code \uAC19\uC740 LLM \uC548\uC5D0\uC11C \uC2E4\uD589\uD558\uC138\uC694 \u2014 awl \uD63C\uC790\uC11C\uB294 \uD310\uB2E8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4."),
185
+ "",
186
+ ` ${t.accent("/awl-loop <\uBAA9\uD45C>")}`,
187
+ " \uB2E8\uC77C \uC138\uC158\uC774 \uBAA9\uD45C \uD558\uB098\uB97C \uC644\uB8CC \uC870\uAC74 \u2192 \uAC8C\uC774\uD2B8 \u2192 \uAD6C\uD604\uAE4C\uC9C0 \uC9C1\uC811 \uAD00\uD1B5\uD569\uB2C8\uB2E4.",
188
+ ` ${t.accent("/awl-pipeline <lane\uBA85> <mode>")}`,
189
+ " \uB808\uC778\uBCC4\uB85C exec\xB7review \uC138\uC158\uC744 \uC2A4\uD3F0\uD574 \uBB34\uC778 \uD30C\uC774\uD504\uB77C\uC778\uC744 \uB3CC\uB9BD\uB2C8\uB2E4.",
190
+ "",
191
+ color.dim("\uB808\uC778\xB7\uD30C\uC774\uD504\uB77C\uC778 \uAD6C\uC870\xB7<mode> \uAC8C\uC774\uD2B8 \uBC00\uB3C4(--gh/--gm/--gl)\uB294 awl --skills \uB85C \uBD05\uB2C8\uB2E4.")
192
+ ];
193
+ return sectionBox("skills \uBD80\uC5F0\uC124\uBA85", lines, c);
194
+ }
130
195
  var DENSE_AWL = `
131
196
  \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557
132
197
  \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551
@@ -154,7 +219,7 @@ function renderBanner(c = caps()) {
154
219
 
155
220
  ${renderGettingStartedCard(c)}
156
221
 
157
- ${color.dim("\uC608\uC2DC\uB294 awl --examples \uB85C \uBD05\uB2C8\uB2E4.")}`;
222
+ ${color.dim("\uC608\uC2DC\uB294 awl --examples \uB85C, \uC2A4\uD0AC \uC124\uBA85\uC740 awl --skills \uB85C \uBD05\uB2C8\uB2E4.")}`;
158
223
  }
159
224
  function displayHomePath(p) {
160
225
  const home = os.homedir();
@@ -230,7 +295,12 @@ function parseWorkitemsOption(input) {
230
295
  function buildProgram() {
231
296
  const program = new Command();
232
297
  program.name("awl").version(versionString(), "-v, --version", "\uBC84\uC804\uC744 \uCD9C\uB825\uD569\uB2C8\uB2E4").helpOption("-h, --help", "\uB3C4\uC6C0\uB9D0\uC744 \uCD9C\uB825\uD569\uB2C8\uB2E4").addHelpText("beforeAll", (ctx) => ctx.command === program ? `${renderBanner()}
233
- ` : "").option("--examples", "\uC790\uC8FC \uC4F0\uB294 \uBA85\uB839 \uC608\uC2DC\uB97C \uBCF4\uC5EC\uC90D\uB2C8\uB2E4").showHelpAfterError();
298
+ ` : "").addHelpText(
299
+ "after",
300
+ (ctx) => ctx.command === program ? `
301
+ ${renderSkillsHelpFooter(caps())}
302
+ ` : ""
303
+ ).option("--examples", "\uC790\uC8FC \uC4F0\uB294 \uBA85\uB839 \uC608\uC2DC\uB97C \uBCF4\uC5EC\uC90D\uB2C8\uB2E4").option("--skills", "awl-loop/awl-pipeline \uC2A4\uD0AC\uC744 \uBD80\uC5F0\uC124\uBA85\uD569\uB2C8\uB2E4").showHelpAfterError();
234
304
  program.command("init").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 Agent Work Loop \uB97C \uC124\uC815\uD569\uB2C8\uB2E4").option("--yes", "\uC9C8\uBB38 \uC5C6\uC774 \uC790\uB3D9 \uAC10\uC9C0\uB41C \uAC12\uC73C\uB85C \uC9C4\uD589\uD569\uB2C8\uB2E4 (\uBE44\uB300\uD654\uD615)").action(async (opts) => {
235
305
  const { runInit } = await import("./init-3B4ZRGWY.js");
236
306
  await runInit({ yes: opts.yes === true });
@@ -251,11 +321,11 @@ function buildProgram() {
251
321
  await runBrief({ today: opts.today === true, date: opts.date, json: opts.json === true });
252
322
  });
253
323
  program.command("doctor").description("\uC124\uCE58\uC640 \uD658\uACBD\uC744 \uC810\uAC80\uD569\uB2C8\uB2E4 (\uC544\uBB34\uAC83\uB3C4 \uACE0\uCE58\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
254
- const { runDoctor } = await import("./doctor-TMMIO4CE.js");
324
+ const { runDoctor } = await import("./doctor-JNUZJC6Z.js");
255
325
  await runDoctor({ json: opts.json === true });
256
326
  });
257
327
  program.command("version-check").description("\uBC84\uC804 \uBD88\uC77C\uCE58\uB97C \uAC80\uC0AC\uD569\uB2C8\uB2E4 (package/engine/\uD504\uB85C\uC81D\uD2B8/\uC2A4\uD0AC)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
258
- const { runVersionCheck } = await import("./version-check-3BZXXAQD.js");
328
+ const { runVersionCheck } = await import("./version-check-5BX3SO7G.js");
259
329
  await runVersionCheck({ json: opts.json === true });
260
330
  });
261
331
  program.command("update").description(
@@ -269,7 +339,7 @@ function buildProgram() {
269
339
  });
270
340
  program.command("remove").description("awl \uC774 \uC190\uB304 \uD754\uC801\uC744 \uC9C0\uC6C1\uB2C8\uB2E4 (\uAE30\uBCF8\uC740 \uB4DC\uB77C\uC774\uB7F0 \u2014 --yes \uC5C6\uC774\uB294 \uC0AD\uC81C\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4)").option("--yes", "\uC2E4\uC81C\uB85C \uC0AD\uC81C\uD569\uB2C8\uB2E4 (\uAE30\uBCF8\uC740 \uB4DC\uB77C\uC774\uB7F0)").option("--project", "\uC774 \uD504\uB85C\uC81D\uD2B8 \uB85C\uCEEC\uB9CC \uC815\uB9AC\uD569\uB2C8\uB2E4 (\uAE30\uBCF8\uAC12)").option("--global", "\uC804\uC5ED(~/.awl)\uB9CC \uC815\uB9AC\uD569\uB2C8\uB2E4 \u2014 \uB2E4\uB978 \uD504\uB85C\uC81D\uD2B8\uC758 \uD559\uC2B5\uB3C4 \uD568\uAED8 \uC0AC\uB77C\uC9D1\uB2C8\uB2E4").option("--all", "\uD504\uB85C\uC81D\uD2B8 \uB85C\uCEEC + \uC804\uC5ED\uC744 \uBAA8\uB450 \uC815\uB9AC\uD569\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(
271
341
  async (opts) => {
272
- const { runRemove } = await import("./remove-J7B32U75.js");
342
+ const { runRemove } = await import("./remove-VJ7VBKTZ.js");
273
343
  await runRemove({
274
344
  yes: opts.yes === true,
275
345
  project: opts.project === true,
@@ -292,11 +362,11 @@ function buildProgram() {
292
362
  );
293
363
  const work = program.command("work").description("\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uAD00\uB9AC\uD569\uB2C8\uB2E4");
294
364
  work.option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
295
- const { runWorkList } = await import("./work-PEJN55JB.js");
365
+ const { runWorkList } = await import("./work-3YHL3P6U.js");
296
366
  runWorkList({ json: opts.json === true });
297
367
  });
298
368
  work.command("list").description("\uB4F1\uB85D\uB41C \uC6CC\uD06C\uC544\uC774\uD15C \uBAA9\uB85D\uACFC \uC9C4\uD589 \uC0C1\uD669\uC744 \uBD05\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
299
- const { runWorkList } = await import("./work-PEJN55JB.js");
369
+ const { runWorkList } = await import("./work-3YHL3P6U.js");
300
370
  runWorkList({ json: opts.json === true });
301
371
  });
302
372
  work.command("new <id> [description]").description("\uC0C8 \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uB9CC\uB4E4\uACE0 \uC804\uD658\uD569\uB2C8\uB2E4 (\uD604\uC7AC \uC6CC\uD06C\uC544\uC774\uD15C\uC740 \uBCF4\uAD00\uB429\uB2C8\uB2E4)").option("--worktree [branch]", "\uACA9\uB9AC\uB41C git worktree \uB97C \uB9CC\uB4E4\uC5B4 \uADF8 \uC548\uC5D0\uC11C \uC2DC\uC791\uD569\uB2C8\uB2E4").option("--skip-baseline", "\uAC80\uC99D \uBCA0\uC774\uC2A4\uB77C\uC778 \uCEA1\uCC98\uB97C \uAC74\uB108\uB701\uB2C8\uB2E4 (\uB290\uB9B0 \uD504\uB85C\uC81D\uD2B8\uC6A9)").option(
@@ -304,7 +374,7 @@ function buildProgram() {
304
374
  "records(~/.awl)\uB97C \uC774 \uC6CC\uD06C\uC544\uC774\uD15C \uC804\uC6A9 AWL_HOME \uC73C\uB85C \uACA9\uB9AC\uD569\uB2C8\uB2E4 (\uBCD1\uB82C \uC138\uC158\uC6A9)"
305
375
  ).option("--experiment <json>", '\uC2E4\uD5D8 \uCF00\uC774\uC2A4 \uBA54\uD0C0 JSON (\uC608: {"model":"lite","mode":"loop"})').action(
306
376
  async (id, description, opts) => {
307
- const { runWorkNew } = await import("./work-PEJN55JB.js");
377
+ const { runWorkNew } = await import("./work-3YHL3P6U.js");
308
378
  const parsedExp = parseExperimentOption(opts.experiment);
309
379
  if (!parsedExp.ok) {
310
380
  process.stderr.write(`
@@ -316,34 +386,34 @@ function buildProgram() {
316
386
  }
317
387
  );
318
388
  work.command("switch <id>").description("\uB2E4\uB978 \uC6CC\uD06C\uC544\uC774\uD15C\uC73C\uB85C \uC804\uD658\uD569\uB2C8\uB2E4 (\uD604\uC7AC \uC6CC\uD06C\uC544\uC774\uD15C\uC740 \uBCF4\uAD00\uB429\uB2C8\uB2E4)").action(async (id) => {
319
- const { runWorkSwitch } = await import("./work-PEJN55JB.js");
389
+ const { runWorkSwitch } = await import("./work-3YHL3P6U.js");
320
390
  await runWorkSwitch(id);
321
391
  });
322
392
  work.command("abandon <id>").description("\uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uC911\uB2E8 \uCC98\uB9AC\uD569\uB2C8\uB2E4 (\uC0AD\uC81C\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4, \uAE30\uB85D\uC740 \uB0A8\uC2B5\uB2C8\uB2E4)").action(async (id) => {
323
- const { runWorkAbandon } = await import("./work-PEJN55JB.js");
393
+ const { runWorkAbandon } = await import("./work-3YHL3P6U.js");
324
394
  runWorkAbandon(id);
325
395
  });
326
396
  work.command("done <id>").description(
327
397
  "\uC644\uB8CC\uB41C \uC6CC\uD06C\uC544\uC774\uD15C\uC744 \uC815\uB9AC\uD569\uB2C8\uB2E4 (\uC6CC\uD06C\uD2B8\uB9AC \uC81C\uAC70 + \uC0C1\uD0DC \uC2A4\uB0C5\uC0F7 \uD68C\uC218, \uAE30\uB85D\uC740 \uB0A8\uC2B5\uB2C8\uB2E4)"
328
398
  ).option("--force", "\uC815\uB9AC\uB418\uC9C0 \uC54A\uC740 \uBCC0\uACBD\uC774 \uC788\uC5B4\uB3C4 \uC6CC\uD06C\uD2B8\uB9AC\uB97C \uC81C\uAC70\uD569\uB2C8\uB2E4").action(async (id, opts) => {
329
- const { runWorkDone } = await import("./work-PEJN55JB.js");
399
+ const { runWorkDone } = await import("./work-3YHL3P6U.js");
330
400
  await runWorkDone(id, { force: opts.force === true });
331
401
  });
332
402
  const lane = program.command("lane").description("\uACA9\uB9AC \uB808\uC778(worktree)\uC73C\uB85C \uD30C\uC774\uD504\uB77C\uC778\uC744 \uBCD1\uB82C \uC2E4\uD589\uD569\uB2C8\uB2E4 (\uB808\uC778 \uC0DD\uC131\xB7\uC870\uD68C\xB7\uC815\uB9AC)");
333
403
  lane.option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
334
- const { runLaneList } = await import("./lane-24GAVVR6.js");
404
+ const { runLaneList } = await import("./lane-ETMPPVXP.js");
335
405
  await runLaneList({ json: opts.json === true });
336
406
  });
337
407
  lane.command("new <name> [description]").description("\uACA9\uB9AC \uB808\uC778\uC744 \uB9CC\uB4ED\uB2C8\uB2E4 (worktree + \uC804\uC6A9 AWL_HOME + \uC2A4\uD0AC \uC7AC\uC124\uCE58 + \uAE30\uB3D9 \uC548\uB0B4)").action(async (name, description) => {
338
- const { runLaneNew } = await import("./lane-24GAVVR6.js");
408
+ const { runLaneNew } = await import("./lane-ETMPPVXP.js");
339
409
  await runLaneNew(name, description);
340
410
  });
341
411
  lane.command("ls").description("\uD604\uC874 \uB808\uC778\uC744 \uC774\uB984\xB7\uACBD\uB85C\xB7\uBE0C\uB79C\uCE58\uC640 \uD568\uAED8 \uB098\uC5F4\uD569\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
342
- const { runLaneList } = await import("./lane-24GAVVR6.js");
412
+ const { runLaneList } = await import("./lane-ETMPPVXP.js");
343
413
  await runLaneList({ json: opts.json === true });
344
414
  });
345
415
  lane.command("rm <name>").description("\uB808\uC778\uC758 \uC6CC\uD06C\uD2B8\uB9AC\uB97C \uD68C\uC218\uD558\uACE0 \uB514\uB809\uD1A0\uB9AC\uB97C \uC81C\uAC70\uD569\uB2C8\uB2E4").option("--force", "\uCEE4\uBC0B\uB418\uC9C0 \uC54A\uC740 \uBCC0\uACBD\uC774 \uC788\uC5B4\uB3C4 \uC81C\uAC70\uD569\uB2C8\uB2E4").action(async (name, opts) => {
346
- const { runLaneRemove } = await import("./lane-24GAVVR6.js");
416
+ const { runLaneRemove } = await import("./lane-ETMPPVXP.js");
347
417
  await runLaneRemove(name, { force: opts.force === true });
348
418
  });
349
419
  program.command("records").description("\uC313\uC778 \uAE30\uB85D\uC744 \uBD05\uB2C8\uB2E4").option("--type <type>", "\uD0C0\uC785\uC73C\uB85C \uAC70\uB985\uB2C8\uB2E4 (attempt, blocked \uB4F1)").option("--workitem <id>", "\uC6CC\uD06C\uC544\uC774\uD15C\uC73C\uB85C \uAC70\uB985\uB2C8\uB2E4").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").action(async (opts) => {
@@ -415,7 +485,7 @@ function buildProgram() {
415
485
  }
416
486
  );
417
487
  program.command("review <range>").description("\uB9AC\uBDF0\uC5B4\uC5D0\uAC8C \uB118\uAE38 \uC790\uB8CC\uB97C \uC870\uB9BD\uD569\uB2C8\uB2E4 (provenance \uD3EC\uD568)").option("--json", "\uAE30\uACC4\uAC00 \uC77D\uC744 \uC218 \uC788\uB294 JSON\uC73C\uB85C \uCD9C\uB825\uD569\uB2C8\uB2E4").option("--base <ref>", "diff \uAE30\uC900 (\uAE30\uBCF8\uC740 \uC644\uB8CC \uC870\uAC74 baseline)").action(async (range, opts) => {
418
- const { runReview } = await import("./review-EM5Q2ZJX.js");
488
+ const { runReview } = await import("./review-CGALGS5X.js");
419
489
  await runReview(range, { json: opts.json === true, base: opts.base });
420
490
  });
421
491
  program.command("record <type>", { hidden: true }).description("\uAD6C\uC870\uD654\uB41C \uAE30\uB85D\uC744 \uB0A8\uAE41\uB2C8\uB2E4").option("--json <data>", "\uAE30\uB85D\uD560 \uB370\uC774\uD130 (JSON \uBB38\uC790\uC5F4)").option("--file <path>", "\uB370\uC774\uD130 \uD30C\uC77C \uACBD\uB85C (\uD070 \uB370\uC774\uD130\uC6A9)").option("--diff", "git diff \uB97C \uCEA1\uCC98\uD574 \uCCA8\uBD80\uD569\uB2C8\uB2E4 (blocked)").option("--workitem <id>", "\uC774 \uAE30\uB85D\uB9CC \uB2E4\uB978 \uC6CC\uD06C\uC544\uC774\uD15C\uC73C\uB85C \uB0A8\uAE41\uB2C8\uB2E4(\uAE30\uBCF8\uC740 \uD604\uC7AC \uC6CC\uD06C\uC544\uC774\uD15C)").action(
@@ -434,7 +504,7 @@ function buildProgram() {
434
504
  "\uBCC0\uACBD\uB41C \uD30C\uC77C\uC5D0 \uAD00\uB828\uB41C \uD14C\uC2A4\uD2B8\uB9CC \uC2E4\uD589\uD569\uB2C8\uB2E4(relatedCmd \uD544\uC694, \uC5C6\uC73C\uBA74 \uC804\uCCB4 \uD14C\uC2A4\uD2B8\uB85C \uD3F4\uBC31)"
435
505
  ).action(
436
506
  async (opts) => {
437
- const { runVerify } = await import("./verify-VWKIBPZD.js");
507
+ const { runVerify } = await import("./verify-7NQ3DOFY.js");
438
508
  await runVerify({
439
509
  json: opts.json === true,
440
510
  bail: opts.bail === true,
@@ -491,6 +561,11 @@ function buildProgram() {
491
561
  program.action((opts, command) => {
492
562
  if (opts.examples) {
493
563
  process.stdout.write(`${renderExamplesCard(caps())}
564
+ `);
565
+ return;
566
+ }
567
+ if (opts.skills) {
568
+ process.stdout.write(`${renderSkillsCard(caps())}
494
569
  `);
495
570
  return;
496
571
  }
@@ -8,11 +8,11 @@ import {
8
8
  gitHasCommits,
9
9
  renderText,
10
10
  runDoctor
11
- } from "./chunk-DQF7RF37.js";
11
+ } from "./chunk-DA27NBCS.js";
12
12
  import "./chunk-FK3Q7UY2.js";
13
13
  import "./chunk-VE2GVNNS.js";
14
- import "./chunk-HAUTKVB5.js";
15
- import "./chunk-5MXSJD3C.js";
14
+ import "./chunk-XWMS6Z5E.js";
15
+ import "./chunk-ZEX5ZF6C.js";
16
16
  import "./chunk-MLTY3EE6.js";
17
17
  import "./chunk-SJG22DAK.js";
18
18
  import "./chunk-FGHILN3D.js";
@@ -9,19 +9,19 @@ import {
9
9
  runLaneRemove,
10
10
  unmergedCommitCount,
11
11
  worktreeUntracked
12
- } from "./chunk-IA32FVBA.js";
13
- import "./chunk-ISLNBWKV.js";
12
+ } from "./chunk-SSSOO2GH.js";
13
+ import "./chunk-AGFQC2UO.js";
14
14
  import "./chunk-D5OINC3G.js";
15
15
  import "./chunk-EHJYX57P.js";
16
16
  import "./chunk-ZRKOZQKP.js";
17
17
  import "./chunk-IVEV5L7P.js";
18
- import "./chunk-QKKMA2VT.js";
18
+ import "./chunk-WWZIKKHP.js";
19
19
  import "./chunk-VVZOIFL4.js";
20
- import "./chunk-DQF7RF37.js";
20
+ import "./chunk-DA27NBCS.js";
21
21
  import "./chunk-FK3Q7UY2.js";
22
22
  import "./chunk-VE2GVNNS.js";
23
- import "./chunk-HAUTKVB5.js";
24
- import "./chunk-5MXSJD3C.js";
23
+ import "./chunk-XWMS6Z5E.js";
24
+ import "./chunk-ZEX5ZF6C.js";
25
25
  import "./chunk-MLTY3EE6.js";
26
26
  import "./chunk-SJG22DAK.js";
27
27
  import "./chunk-FGHILN3D.js";
@@ -4,22 +4,22 @@ import {
4
4
  laneBranchMap,
5
5
  unmergedCommitCount,
6
6
  worktreeUntracked
7
- } from "./chunk-IA32FVBA.js";
7
+ } from "./chunk-SSSOO2GH.js";
8
8
  import {
9
9
  removeGitWorktree,
10
10
  worktreeDirtyTracked
11
- } from "./chunk-ISLNBWKV.js";
11
+ } from "./chunk-AGFQC2UO.js";
12
12
  import "./chunk-D5OINC3G.js";
13
13
  import "./chunk-EHJYX57P.js";
14
14
  import "./chunk-ZRKOZQKP.js";
15
15
  import "./chunk-IVEV5L7P.js";
16
- import "./chunk-QKKMA2VT.js";
16
+ import "./chunk-WWZIKKHP.js";
17
17
  import "./chunk-VVZOIFL4.js";
18
- import "./chunk-DQF7RF37.js";
18
+ import "./chunk-DA27NBCS.js";
19
19
  import "./chunk-FK3Q7UY2.js";
20
20
  import "./chunk-VE2GVNNS.js";
21
- import "./chunk-HAUTKVB5.js";
22
- import "./chunk-5MXSJD3C.js";
21
+ import "./chunk-XWMS6Z5E.js";
22
+ import "./chunk-ZEX5ZF6C.js";
23
23
  import {
24
24
  resolveProjectRoot
25
25
  } from "./chunk-MLTY3EE6.js";
@@ -6,15 +6,15 @@ import "./chunk-ZRKOZQKP.js";
6
6
  import "./chunk-IVEV5L7P.js";
7
7
  import {
8
8
  runVerifyChecks
9
- } from "./chunk-QKKMA2VT.js";
9
+ } from "./chunk-WWZIKKHP.js";
10
10
  import "./chunk-VVZOIFL4.js";
11
- import "./chunk-DQF7RF37.js";
11
+ import "./chunk-DA27NBCS.js";
12
12
  import "./chunk-FK3Q7UY2.js";
13
13
  import {
14
14
  loadState
15
15
  } from "./chunk-VE2GVNNS.js";
16
- import "./chunk-HAUTKVB5.js";
17
- import "./chunk-5MXSJD3C.js";
16
+ import "./chunk-XWMS6Z5E.js";
17
+ import "./chunk-ZEX5ZF6C.js";
18
18
  import {
19
19
  requireConfig,
20
20
  run
@@ -11,13 +11,13 @@ import {
11
11
  substituteRelatedCmd,
12
12
  verifyBaselinePath,
13
13
  writeVerifyBaseline
14
- } from "./chunk-QKKMA2VT.js";
14
+ } from "./chunk-WWZIKKHP.js";
15
15
  import "./chunk-VVZOIFL4.js";
16
- import "./chunk-DQF7RF37.js";
16
+ import "./chunk-DA27NBCS.js";
17
17
  import "./chunk-FK3Q7UY2.js";
18
18
  import "./chunk-VE2GVNNS.js";
19
- import "./chunk-HAUTKVB5.js";
20
- import "./chunk-5MXSJD3C.js";
19
+ import "./chunk-XWMS6Z5E.js";
20
+ import "./chunk-ZEX5ZF6C.js";
21
21
  import "./chunk-MLTY3EE6.js";
22
22
  import "./chunk-SJG22DAK.js";
23
23
  import "./chunk-FGHILN3D.js";
@@ -2,8 +2,8 @@ import {
2
2
  gatherVersionInputs,
3
3
  renderVersionCheck,
4
4
  runVersionCheck
5
- } from "./chunk-HAUTKVB5.js";
6
- import "./chunk-5MXSJD3C.js";
5
+ } from "./chunk-XWMS6Z5E.js";
6
+ import "./chunk-ZEX5ZF6C.js";
7
7
  import "./chunk-MLTY3EE6.js";
8
8
  import "./chunk-SJG22DAK.js";
9
9
  import "./chunk-FGHILN3D.js";
@@ -20,18 +20,18 @@ import {
20
20
  summarizeWorkitems,
21
21
  withCostAtStart,
22
22
  worktreeDirtyTracked
23
- } from "./chunk-ISLNBWKV.js";
23
+ } from "./chunk-AGFQC2UO.js";
24
24
  import "./chunk-D5OINC3G.js";
25
25
  import "./chunk-EHJYX57P.js";
26
26
  import "./chunk-ZRKOZQKP.js";
27
27
  import "./chunk-IVEV5L7P.js";
28
- import "./chunk-QKKMA2VT.js";
28
+ import "./chunk-WWZIKKHP.js";
29
29
  import "./chunk-VVZOIFL4.js";
30
- import "./chunk-DQF7RF37.js";
30
+ import "./chunk-DA27NBCS.js";
31
31
  import "./chunk-FK3Q7UY2.js";
32
32
  import "./chunk-VE2GVNNS.js";
33
- import "./chunk-HAUTKVB5.js";
34
- import "./chunk-5MXSJD3C.js";
33
+ import "./chunk-XWMS6Z5E.js";
34
+ import "./chunk-ZEX5ZF6C.js";
35
35
  import "./chunk-MLTY3EE6.js";
36
36
  import "./chunk-SJG22DAK.js";
37
37
  import "./chunk-FGHILN3D.js";
@@ -1,4 +1,4 @@
1
1
  {
2
- "engineVersion": "0.6.45",
2
+ "engineVersion": "0.6.46",
3
3
  "note": "~/.awl/engine 으로 복사되는 스킬·검사기·템플릿·마이그레이션. skills/ 에 awl-loop 스킬이 들어있습니다."
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-work-loop",
3
- "version": "0.6.45",
3
+ "version": "0.6.46",
4
4
  "description": "같은 실패를 두 번 하지 않는 도구. AI 에이전트가 한 일과 확인한 내용을 파일로 남깁니다.",
5
5
  "type": "module",
6
6
  "bin": {