@iloom/cli 0.9.0 → 0.9.1

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 (52) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/dist/{GitHubService-ACZVNTJE.js → GitHubService-O7T6CFAJ.js} +3 -3
  4. package/dist/README.md +1 -1
  5. package/dist/{chunk-SC6X5EBG.js → chunk-3P6J4IZZ.js} +3 -3
  6. package/dist/{chunk-6Y3FTRJL.js → chunk-4ZIHFUPN.js} +41 -18
  7. package/dist/chunk-4ZIHFUPN.js.map +1 -0
  8. package/dist/{chunk-RNBIISBZ.js → chunk-ENGCJIYQ.js} +48 -3
  9. package/dist/chunk-ENGCJIYQ.js.map +1 -0
  10. package/dist/{chunk-I23OQB4Y.js → chunk-I3HMNWQQ.js} +6 -5
  11. package/dist/chunk-I3HMNWQQ.js.map +1 -0
  12. package/dist/{chunk-XJHQVOT6.js → chunk-J7FJ6PUT.js} +2 -2
  13. package/dist/{chunk-UDZCTLD6.js → chunk-OK7LUTRW.js} +3 -3
  14. package/dist/{chunk-Z6F5CUS6.js → chunk-POU2UMWN.js} +2 -2
  15. package/dist/{chunk-THS5L54H.js → chunk-TRUMP4DA.js} +26 -2
  16. package/dist/{chunk-THS5L54H.js.map → chunk-TRUMP4DA.js.map} +1 -1
  17. package/dist/{chunk-PVW6JE7E.js → chunk-Y5HSSIK2.js} +2 -2
  18. package/dist/{chunk-PL2FDYEK.js → chunk-Y5O2ALDZ.js} +2 -2
  19. package/dist/{cleanup-M6N7KV7E.js → cleanup-D3CSRBBZ.js} +8 -8
  20. package/dist/cli.js +36 -20
  21. package/dist/cli.js.map +1 -1
  22. package/dist/{commit-ORHR53KW.js → commit-IWGT42XN.js} +4 -4
  23. package/dist/{contribute-4KCEOHSH.js → contribute-WSJTV2RX.js} +2 -2
  24. package/dist/{feedback-XRI7SGYX.js → feedback-QPNDZQRV.js} +5 -5
  25. package/dist/{ignite-3FHQY23X.js → ignite-OPO6EDYT.js} +6 -6
  26. package/dist/index.d.ts +3 -0
  27. package/dist/index.js +3 -2
  28. package/dist/index.js.map +1 -1
  29. package/dist/issues-L7TBUPXT.js +116 -0
  30. package/dist/issues-L7TBUPXT.js.map +1 -0
  31. package/dist/mcp/issue-management-server.js +3 -2
  32. package/dist/mcp/issue-management-server.js.map +1 -1
  33. package/dist/{plan-P6MXL7AU.js → plan-BRJBFJHF.js} +7 -7
  34. package/dist/{summary-WNEYCO4S.js → summary-ZKOA35PT.js} +6 -6
  35. package/package.json +1 -1
  36. package/dist/chunk-6Y3FTRJL.js.map +0 -1
  37. package/dist/chunk-I23OQB4Y.js.map +0 -1
  38. package/dist/chunk-RNBIISBZ.js.map +0 -1
  39. /package/dist/{GitHubService-ACZVNTJE.js.map → GitHubService-O7T6CFAJ.js.map} +0 -0
  40. /package/dist/{chunk-SC6X5EBG.js.map → chunk-3P6J4IZZ.js.map} +0 -0
  41. /package/dist/{chunk-XJHQVOT6.js.map → chunk-J7FJ6PUT.js.map} +0 -0
  42. /package/dist/{chunk-UDZCTLD6.js.map → chunk-OK7LUTRW.js.map} +0 -0
  43. /package/dist/{chunk-Z6F5CUS6.js.map → chunk-POU2UMWN.js.map} +0 -0
  44. /package/dist/{chunk-PVW6JE7E.js.map → chunk-Y5HSSIK2.js.map} +0 -0
  45. /package/dist/{chunk-PL2FDYEK.js.map → chunk-Y5O2ALDZ.js.map} +0 -0
  46. /package/dist/{cleanup-M6N7KV7E.js.map → cleanup-D3CSRBBZ.js.map} +0 -0
  47. /package/dist/{commit-ORHR53KW.js.map → commit-IWGT42XN.js.map} +0 -0
  48. /package/dist/{contribute-4KCEOHSH.js.map → contribute-WSJTV2RX.js.map} +0 -0
  49. /package/dist/{feedback-XRI7SGYX.js.map → feedback-QPNDZQRV.js.map} +0 -0
  50. /package/dist/{ignite-3FHQY23X.js.map → ignite-OPO6EDYT.js.map} +0 -0
  51. /package/dist/{plan-P6MXL7AU.js.map → plan-BRJBFJHF.js.map} +0 -0
  52. /package/dist/{summary-WNEYCO4S.js.map → summary-ZKOA35PT.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SessionSummaryService
4
- } from "./chunk-Z6F5CUS6.js";
4
+ } from "./chunk-POU2UMWN.js";
5
5
  import "./chunk-NXMDEL3F.js";
6
6
  import {
7
7
  CLIIsolationManager,
@@ -9,10 +9,10 @@ import {
9
9
  EnvironmentManager,
10
10
  LoomManager,
11
11
  ResourceCleanup
12
- } from "./chunk-6Y3FTRJL.js";
12
+ } from "./chunk-4ZIHFUPN.js";
13
13
  import {
14
14
  PRManager
15
- } from "./chunk-I23OQB4Y.js";
15
+ } from "./chunk-I3HMNWQQ.js";
16
16
  import {
17
17
  launchFirstRunSetup,
18
18
  needsFirstRunSetup
@@ -23,7 +23,7 @@ import {
23
23
  } from "./chunk-HZXBHMVM.js";
24
24
  import {
25
25
  IssueTrackerFactory
26
- } from "./chunk-SC6X5EBG.js";
26
+ } from "./chunk-3P6J4IZZ.js";
27
27
  import {
28
28
  ProcessManager
29
29
  } from "./chunk-NTTSUAVM.js";
@@ -42,8 +42,8 @@ import "./chunk-Q7POFB5Q.js";
42
42
  import {
43
43
  IssueEnhancementService,
44
44
  capitalizeFirstLetter
45
- } from "./chunk-PL2FDYEK.js";
46
- import "./chunk-XJHQVOT6.js";
45
+ } from "./chunk-Y5O2ALDZ.js";
46
+ import "./chunk-J7FJ6PUT.js";
47
47
  import {
48
48
  openBrowser
49
49
  } from "./chunk-YETJNRQM.js";
@@ -57,10 +57,10 @@ import {
57
57
  } from "./chunk-5LVVQGB3.js";
58
58
  import {
59
59
  IssueManagementProviderFactory
60
- } from "./chunk-UDZCTLD6.js";
60
+ } from "./chunk-OK7LUTRW.js";
61
61
  import {
62
62
  getLinearChildIssues
63
- } from "./chunk-RNBIISBZ.js";
63
+ } from "./chunk-ENGCJIYQ.js";
64
64
  import {
65
65
  installDependencies
66
66
  } from "./chunk-4LKGCFGG.js";
@@ -112,10 +112,10 @@ import {
112
112
  } from "./chunk-KBEIQP4G.js";
113
113
  import {
114
114
  GitHubService
115
- } from "./chunk-PVW6JE7E.js";
115
+ } from "./chunk-Y5HSSIK2.js";
116
116
  import {
117
117
  getSubIssues
118
- } from "./chunk-THS5L54H.js";
118
+ } from "./chunk-TRUMP4DA.js";
119
119
  import {
120
120
  promptConfirmation,
121
121
  waitForKeypress
@@ -2267,7 +2267,7 @@ async function validateSettingsForCommand(command) {
2267
2267
  if (bypassCommands.includes(commandName)) {
2268
2268
  return;
2269
2269
  }
2270
- const warnOnlyCommands = ["list", "projects"];
2270
+ const warnOnlyCommands = ["list", "projects", "issues"];
2271
2271
  try {
2272
2272
  const settingsManager = new SettingsManager();
2273
2273
  const settings = await settingsManager.loadSettings();
@@ -2291,7 +2291,7 @@ async function validateGhCliForCommand(command) {
2291
2291
  const commandName = command.name();
2292
2292
  const alwaysRequireGh = ["feedback", "contribute"];
2293
2293
  const conditionallyRequireGh = ["start", "finish", "enhance", "add-issue", "ignite", "spin"];
2294
- const warnOnly = ["init", "list", "rebase", "cleanup", "run", "update", "open"];
2294
+ const warnOnly = ["init", "list", "rebase", "cleanup", "run", "update", "open", "issues"];
2295
2295
  if (commandName.startsWith("test-") || commandName === "help") {
2296
2296
  return;
2297
2297
  }
@@ -2489,7 +2489,7 @@ program.command("add-issue").alias("a").description("Create and enhance GitHub i
2489
2489
  });
2490
2490
  program.command("feedback").alias("f").description("Submit feedback/bug report to iloom-cli repository").argument("<description>", "Feedback title (>30 chars, >2 spaces; or any non-empty text when --body provided)").option("--body <text>", "Body text for feedback (added after diagnostics)").action(async (description, options) => {
2491
2491
  try {
2492
- const { FeedbackCommand } = await import("./feedback-XRI7SGYX.js");
2492
+ const { FeedbackCommand } = await import("./feedback-QPNDZQRV.js");
2493
2493
  const command = new FeedbackCommand();
2494
2494
  const feedbackOptions = {};
2495
2495
  if (options.body !== void 0) {
@@ -2574,7 +2574,7 @@ program.command("finish").alias("dn").description("Merge work and cleanup worksp
2574
2574
  program.command("commit").alias("c").description("Commit all uncommitted files with issue reference").option("-m, --message <text>", "Custom commit message (skip Claude generation)").option("--fixes", 'Use "Fixes #N" trailer instead of "Refs #N" (closes issue)').option("--no-review", "Skip commit message review prompt").option("--json", "Output result as JSON (implies --no-review)").option("--wip-commit", "Quick WIP commit: skip validations and pre-commit hooks").action(async (options) => {
2575
2575
  const executeAction = async () => {
2576
2576
  try {
2577
- const { CommitCommand } = await import("./commit-ORHR53KW.js");
2577
+ const { CommitCommand } = await import("./commit-IWGT42XN.js");
2578
2578
  const command = new CommitCommand();
2579
2579
  const noReview = options.review === false || options.json === true;
2580
2580
  const result = await command.execute({
@@ -2626,7 +2626,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
2626
2626
  options.oneShot = "bypassPermissions";
2627
2627
  }
2628
2628
  try {
2629
- const { IgniteCommand } = await import("./ignite-3FHQY23X.js");
2629
+ const { IgniteCommand } = await import("./ignite-OPO6EDYT.js");
2630
2630
  const command = new IgniteCommand();
2631
2631
  if (options.json && options.jsonStream) {
2632
2632
  logger.error("--json and --json-stream are mutually exclusive");
@@ -2747,7 +2747,7 @@ program.command("compile").alias("typecheck").description("Run the compile or ty
2747
2747
  program.command("cleanup").alias("remove").alias("clean").description("Remove workspaces").argument("[identifier]", "Branch name or issue number to cleanup (auto-detected)").option("-l, --list", "List all worktrees").option("-a, --all", "Remove all worktrees (interactive confirmation)").option("-i, --issue <number>", "Cleanup by issue number", parseInt).option("-f, --force", "Skip confirmations and force removal").option("--dry-run", "Show what would be done without doing it").option("--json", "Output result as JSON").option("--defer <ms>", "Wait specified milliseconds before cleanup", parseInt).action(async (identifier, options) => {
2748
2748
  const executeAction = async () => {
2749
2749
  try {
2750
- const { CleanupCommand } = await import("./cleanup-M6N7KV7E.js");
2750
+ const { CleanupCommand } = await import("./cleanup-D3CSRBBZ.js");
2751
2751
  const command = new CleanupCommand();
2752
2752
  const input = {
2753
2753
  options: options ?? {}
@@ -3072,6 +3072,22 @@ program.command("projects").description("List configured iloom projects").option
3072
3072
  process.exit(1);
3073
3073
  }
3074
3074
  });
3075
+ program.command("issues").description("List project issues from configured issue tracker").argument("[project-path]", "Path to project root (auto-detected if omitted)").option("--json", "Output as JSON (default behavior)").option("--limit <n>", "Max issues to return", "100").action(async (projectPath, options) => {
3076
+ try {
3077
+ const { IssuesCommand } = await import("./issues-L7TBUPXT.js");
3078
+ const command = new IssuesCommand();
3079
+ const parsedLimit = parseInt((options == null ? void 0 : options.limit) ?? "100", 10);
3080
+ const limit = Number.isNaN(parsedLimit) || parsedLimit <= 0 ? 100 : parsedLimit;
3081
+ const result = await command.execute({
3082
+ ...projectPath ? { projectPath } : {},
3083
+ limit
3084
+ });
3085
+ console.log(JSON.stringify(result, null, 2));
3086
+ } catch (error) {
3087
+ logger.error(`Failed to list issues: ${error instanceof Error ? error.message : "Unknown error"}`);
3088
+ process.exit(1);
3089
+ }
3090
+ });
3075
3091
  program.command("init").alias("config").description("Initialize iloom configuration").argument("[prompt]", 'Custom initial message to send to Claude (defaults to "Help me configure iloom settings.")').action(async (prompt) => {
3076
3092
  try {
3077
3093
  const { InitCommand } = await import("./init-ALYWKNWG.js");
@@ -3088,7 +3104,7 @@ program.command("plan").description("Launch interactive planning session with Ar
3088
3104
  new Option("--output-format <format>", "Output format for Claude CLI (requires --print)").choices(["json", "stream-json", "text"])
3089
3105
  ).option("--verbose", "Enable verbose output (requires --print)").option("--json", "Output final result as JSON object (requires --print)").option("--json-stream", "Stream JSONL output to stdout in real-time (requires --print)").action(async (prompt, options) => {
3090
3106
  try {
3091
- const { PlanCommand } = await import("./plan-P6MXL7AU.js");
3107
+ const { PlanCommand } = await import("./plan-BRJBFJHF.js");
3092
3108
  const command = new PlanCommand();
3093
3109
  if ((options == null ? void 0 : options.json) && (options == null ? void 0 : options.jsonStream)) {
3094
3110
  logger.error("--json and --json-stream are mutually exclusive");
@@ -3115,7 +3131,7 @@ program.command("plan").description("Launch interactive planning session with Ar
3115
3131
  });
3116
3132
  program.command("contribute").description("Set up local development environment for contributing to a GitHub project").argument("[repository]", "GitHub repository (owner/repo, github.com/owner/repo, or full URL). Defaults to iloom-ai/iloom-cli").action(async (repository) => {
3117
3133
  try {
3118
- const { ContributeCommand } = await import("./contribute-4KCEOHSH.js");
3134
+ const { ContributeCommand } = await import("./contribute-WSJTV2RX.js");
3119
3135
  const command = new ContributeCommand();
3120
3136
  await command.execute(repository);
3121
3137
  } catch (error) {
@@ -3135,7 +3151,7 @@ program.command("update").description("Update iloom-cli to the latest version").
3135
3151
  });
3136
3152
  program.command("test-github").description("Test GitHub integration (Issue #3)").argument("<identifier>", "Issue number or PR number").option("--no-claude", "Skip Claude for branch name generation").action(async (identifier, options) => {
3137
3153
  try {
3138
- const { GitHubService: GitHubService2 } = await import("./GitHubService-ACZVNTJE.js");
3154
+ const { GitHubService: GitHubService2 } = await import("./GitHubService-O7T6CFAJ.js");
3139
3155
  const { DefaultBranchNamingService: DefaultBranchNamingService2 } = await import("./BranchNamingService-K6XNWQ6C.js");
3140
3156
  logger.info("Testing GitHub Integration\n");
3141
3157
  const service = new GitHubService2();
@@ -3385,7 +3401,7 @@ program.command("test-prefix").description("Test worktree prefix configuration -
3385
3401
  program.command("summary").description("Generate Claude session summary for a loom").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--with-comment", "Post summary as a comment to the issue/PR").option("--json", "Output result as JSON").action(async (identifier, options) => {
3386
3402
  const executeAction = async () => {
3387
3403
  try {
3388
- const { SummaryCommand } = await import("./summary-WNEYCO4S.js");
3404
+ const { SummaryCommand } = await import("./summary-ZKOA35PT.js");
3389
3405
  const command = new SummaryCommand();
3390
3406
  const result = await command.execute({ identifier, options });
3391
3407
  if (options.json && result) {