issy 0.5.7 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -78,7 +78,7 @@ Once installed globally, you can run commands from your terminal:
78
78
  issy # Start the web UI
79
79
  issy list # List open issues (roadmap order)
80
80
  issy next # Show next issue to work on
81
- issy create --title "Bug" # Create issue
81
+ issy create --title "Bug" # Create an issue
82
82
  ```
83
83
 
84
84
  ### Repository installation
@@ -127,7 +127,9 @@ issy next # Show next issue to work on
127
127
  issy search "auth" # Fuzzy search
128
128
  issy read 0001 # View issue
129
129
  issy create --title "Bug" --after 0002 # Create issue after #0002
130
+ issy create --title "Bug" --body "Details here" --last # Create with body content
130
131
  issy update 0001 --before 0003 # Reposition in roadmap
132
+ issy update 0001 --body "New details" # Replace body content
131
133
  issy close 0001 # Close issue
132
134
  issy reopen 0001 --after 0004 # Reopen and place in roadmap
133
135
  issy skill install # Install the AI skill
@@ -193,7 +195,6 @@ This moves your issues to `.issy/issues/` and assigns roadmap order to all open
193
195
  ```markdown
194
196
  ---
195
197
  title: Fix login redirect
196
- description: Users get stuck after OAuth callback
197
198
  priority: high
198
199
  scope: medium
199
200
  type: bug
package/dist/cli.js CHANGED
@@ -325,7 +325,6 @@ function parseFrontmatter(content) {
325
325
  function generateFrontmatter(data) {
326
326
  const lines = ["---"];
327
327
  lines.push(`title: ${data.title}`);
328
- lines.push(`description: ${data.description}`);
329
328
  lines.push(`priority: ${data.priority}`);
330
329
  if (data.scope) {
331
330
  lines.push(`scope: ${data.scope}`);
@@ -481,7 +480,6 @@ async function createIssue(input) {
481
480
  const filename = `${issueNumber}-${slug}.md`;
482
481
  const frontmatter = {
483
482
  title: input.title,
484
- description: input.description || input.title,
485
483
  priority,
486
484
  scope: scope || undefined,
487
485
  type,
@@ -490,12 +488,13 @@ async function createIssue(input) {
490
488
  order: input.order || undefined,
491
489
  created: formatDate()
492
490
  };
493
- const content = `${generateFrontmatter(frontmatter)}
494
-
491
+ const body = input.body ?? `
495
492
  ## Details
496
493
 
497
494
  <!-- Add detailed description here -->
498
-
495
+ `;
496
+ const content = `${generateFrontmatter(frontmatter)}
497
+ ${body}
499
498
  `;
500
499
  await writeFile(join(getIssuesDir(), filename), content);
501
500
  return {
@@ -503,10 +502,7 @@ async function createIssue(input) {
503
502
  filename,
504
503
  frontmatter,
505
504
  content: `
506
- ## Details
507
-
508
- <!-- Add detailed description here -->
509
-
505
+ ${body}
510
506
  `
511
507
  };
512
508
  }
@@ -518,7 +514,6 @@ async function updateIssue(id, input) {
518
514
  const updatedFrontmatter = {
519
515
  ...issue.frontmatter,
520
516
  ...input.title && { title: input.title },
521
- ...input.description && { description: input.description },
522
517
  ...input.priority && { priority: input.priority },
523
518
  ...input.scope && { scope: input.scope },
524
519
  ...input.type && { type: input.type },
@@ -529,12 +524,16 @@ async function updateIssue(id, input) {
529
524
  ...input.order && { order: input.order },
530
525
  updated: formatDate()
531
526
  };
527
+ const updatedContent = input.body !== undefined ? `
528
+ ${input.body}
529
+ ` : issue.content;
532
530
  const content = `${generateFrontmatter(updatedFrontmatter)}
533
- ${issue.content}`;
531
+ ${updatedContent}`;
534
532
  await writeFile(join(getIssuesDir(), issue.filename), content);
535
533
  return {
536
534
  ...issue,
537
- frontmatter: updatedFrontmatter
535
+ frontmatter: updatedFrontmatter,
536
+ content: updatedContent
538
537
  };
539
538
  }
540
539
  async function closeIssue(id) {
@@ -1915,7 +1914,6 @@ Fuse.config = Config;
1915
1914
  var FUSE_OPTIONS = {
1916
1915
  keys: [
1917
1916
  { name: "frontmatter.title", weight: 1 },
1918
- { name: "frontmatter.description", weight: 0.7 },
1919
1917
  { name: "frontmatter.labels", weight: 0.5 },
1920
1918
  { name: "content", weight: 0.3 }
1921
1919
  ],
@@ -2229,7 +2227,6 @@ Create New Issue`);
2229
2227
  });
2230
2228
  };
2231
2229
  options.title = await prompt("Title: ");
2232
- options.description = await prompt("Description: ");
2233
2230
  options.priority = await prompt("Priority (high/medium/low) [medium]: ");
2234
2231
  options.scope = await prompt("Scope (small/medium/large) []: ");
2235
2232
  options.type = await prompt("Type (bug/improvement) [improvement]: ");
@@ -2253,7 +2250,7 @@ Create New Issue`);
2253
2250
  });
2254
2251
  const input = {
2255
2252
  title: options.title,
2256
- description: options.description,
2253
+ body: options.body,
2257
2254
  priority: options.priority,
2258
2255
  scope: options.scope,
2259
2256
  type: options.type,
@@ -2283,7 +2280,7 @@ async function updateIssueCommand(id, options) {
2283
2280
  }
2284
2281
  const issue = await updateIssue(id, {
2285
2282
  title: options.title,
2286
- description: options.description,
2283
+ body: options.body,
2287
2284
  priority: options.priority,
2288
2285
  scope: options.scope,
2289
2286
  type: options.type,
@@ -2338,9 +2335,6 @@ async function nextIssueCommand() {
2338
2335
  Next issue:`);
2339
2336
  console.log(` ${"-".repeat(60)}`);
2340
2337
  console.log(` #${issue.id} ${prioritySymbol(issue.frontmatter.priority)} ${typeSymbol(issue.frontmatter.type)} ${issue.frontmatter.title}`);
2341
- if (issue.frontmatter.description !== issue.frontmatter.title) {
2342
- console.log(` ${issue.frontmatter.description}`);
2343
- }
2344
2338
  console.log();
2345
2339
  }
2346
2340
  async function main() {
@@ -2374,7 +2368,7 @@ Commands:
2374
2368
 
2375
2369
  create Create a new issue
2376
2370
  --title, -t <t> Issue title
2377
- --description, -d <d> Short description
2371
+ --body, -b <b> Markdown body content
2378
2372
  --priority, -p <p> Priority (high, medium, low)
2379
2373
  --scope <s> Scope (small, medium, large)
2380
2374
  --type <t> Type (bug, improvement)
@@ -2386,7 +2380,7 @@ Commands:
2386
2380
 
2387
2381
  update <id> Update an issue
2388
2382
  --title, -t <t> New title
2389
- --description, -d <d> New description
2383
+ --body, -b <b> New markdown body content
2390
2384
  --priority, -p <p> New priority
2391
2385
  --scope <s> New scope
2392
2386
  --type <t> New type
@@ -2471,7 +2465,7 @@ Examples:
2471
2465
  args: args.slice(1),
2472
2466
  options: {
2473
2467
  title: { type: "string", short: "t" },
2474
- description: { type: "string", short: "d" },
2468
+ body: { type: "string", short: "b" },
2475
2469
  priority: { type: "string", short: "p" },
2476
2470
  scope: { type: "string" },
2477
2471
  type: { type: "string" },
@@ -2496,7 +2490,7 @@ Examples:
2496
2490
  args: args.slice(2),
2497
2491
  options: {
2498
2492
  title: { type: "string", short: "t" },
2499
- description: { type: "string", short: "d" },
2493
+ body: { type: "string", short: "b" },
2500
2494
  priority: { type: "string", short: "p" },
2501
2495
  scope: { type: "string" },
2502
2496
  type: { type: "string" },
package/dist/main.js CHANGED
@@ -336,7 +336,6 @@ function parseFrontmatter(content) {
336
336
  function generateFrontmatter(data) {
337
337
  const lines = ["---"];
338
338
  lines.push(`title: ${data.title}`);
339
- lines.push(`description: ${data.description}`);
340
339
  lines.push(`priority: ${data.priority}`);
341
340
  if (data.scope) {
342
341
  lines.push(`scope: ${data.scope}`);
@@ -492,7 +491,6 @@ async function createIssue(input) {
492
491
  const filename = `${issueNumber}-${slug}.md`;
493
492
  const frontmatter = {
494
493
  title: input.title,
495
- description: input.description || input.title,
496
494
  priority,
497
495
  scope: scope || undefined,
498
496
  type,
@@ -501,12 +499,13 @@ async function createIssue(input) {
501
499
  order: input.order || undefined,
502
500
  created: formatDate()
503
501
  };
504
- const content = `${generateFrontmatter(frontmatter)}
505
-
502
+ const body = input.body ?? `
506
503
  ## Details
507
504
 
508
505
  <!-- Add detailed description here -->
509
-
506
+ `;
507
+ const content = `${generateFrontmatter(frontmatter)}
508
+ ${body}
510
509
  `;
511
510
  await writeFile(join(getIssuesDir(), filename), content);
512
511
  return {
@@ -514,10 +513,7 @@ async function createIssue(input) {
514
513
  filename,
515
514
  frontmatter,
516
515
  content: `
517
- ## Details
518
-
519
- <!-- Add detailed description here -->
520
-
516
+ ${body}
521
517
  `
522
518
  };
523
519
  }
@@ -529,7 +525,6 @@ async function updateIssue(id, input) {
529
525
  const updatedFrontmatter = {
530
526
  ...issue.frontmatter,
531
527
  ...input.title && { title: input.title },
532
- ...input.description && { description: input.description },
533
528
  ...input.priority && { priority: input.priority },
534
529
  ...input.scope && { scope: input.scope },
535
530
  ...input.type && { type: input.type },
@@ -540,12 +535,16 @@ async function updateIssue(id, input) {
540
535
  ...input.order && { order: input.order },
541
536
  updated: formatDate()
542
537
  };
538
+ const updatedContent = input.body !== undefined ? `
539
+ ${input.body}
540
+ ` : issue.content;
543
541
  const content = `${generateFrontmatter(updatedFrontmatter)}
544
- ${issue.content}`;
542
+ ${updatedContent}`;
545
543
  await writeFile(join(getIssuesDir(), issue.filename), content);
546
544
  return {
547
545
  ...issue,
548
- frontmatter: updatedFrontmatter
546
+ frontmatter: updatedFrontmatter,
547
+ content: updatedContent
549
548
  };
550
549
  }
551
550
  async function closeIssue(id) {
@@ -1926,7 +1925,6 @@ Fuse.config = Config;
1926
1925
  var FUSE_OPTIONS = {
1927
1926
  keys: [
1928
1927
  { name: "frontmatter.title", weight: 1 },
1929
- { name: "frontmatter.description", weight: 0.7 },
1930
1928
  { name: "frontmatter.labels", weight: 0.5 },
1931
1929
  { name: "content", weight: 0.3 }
1932
1930
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "issy",
3
- "version": "0.5.7",
3
+ "version": "0.7.0",
4
4
  "description": "AI-native issue tracking. Markdown files in .issues/, managed by your coding assistant.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -35,8 +35,8 @@
35
35
  "lint": "biome check src bin"
36
36
  },
37
37
  "dependencies": {
38
- "@miketromba/issy-app": "^0.5.7",
39
- "@miketromba/issy-core": "^0.5.7",
38
+ "@miketromba/issy-app": "^0.7.0",
39
+ "@miketromba/issy-core": "^0.7.0",
40
40
  "update-notifier": "^7.3.1"
41
41
  }
42
42
  }