issy 0.2.1 → 0.3.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.
Files changed (2) hide show
  1. package/dist/cli.js +29 -2
  2. package/package.json +3 -3
package/dist/cli.js CHANGED
@@ -93,6 +93,9 @@ function generateFrontmatter(data) {
93
93
  lines.push(`title: ${data.title}`);
94
94
  lines.push(`description: ${data.description}`);
95
95
  lines.push(`priority: ${data.priority}`);
96
+ if (data.scope) {
97
+ lines.push(`scope: ${data.scope}`);
98
+ }
96
99
  lines.push(`type: ${data.type}`);
97
100
  if (data.labels) {
98
101
  lines.push(`labels: ${data.labels}`);
@@ -178,10 +181,14 @@ async function createIssue(input) {
178
181
  throw new Error("Title is required");
179
182
  }
180
183
  const priority = input.priority || "medium";
184
+ const scope = input.scope;
181
185
  const type = input.type || "improvement";
182
186
  if (!["high", "medium", "low"].includes(priority)) {
183
187
  throw new Error("Priority must be: high, medium, or low");
184
188
  }
189
+ if (scope && !["small", "medium", "large"].includes(scope)) {
190
+ throw new Error("Scope must be: small, medium, or large");
191
+ }
185
192
  if (!["bug", "improvement"].includes(type)) {
186
193
  throw new Error("Type must be: bug or improvement");
187
194
  }
@@ -192,6 +199,7 @@ async function createIssue(input) {
192
199
  title: input.title,
193
200
  description: input.description || input.title,
194
201
  priority,
202
+ scope: scope || undefined,
195
203
  type,
196
204
  labels: input.labels || undefined,
197
205
  status: "open",
@@ -227,6 +235,7 @@ async function updateIssue(id, input) {
227
235
  ...input.title && { title: input.title },
228
236
  ...input.description && { description: input.description },
229
237
  ...input.priority && { priority: input.priority },
238
+ ...input.scope && { scope: input.scope },
230
239
  ...input.type && { type: input.type },
231
240
  ...input.labels !== undefined && {
232
241
  labels: input.labels || undefined
@@ -249,6 +258,7 @@ async function closeIssue(id) {
249
258
  var SUPPORTED_QUALIFIERS = new Set([
250
259
  "is",
251
260
  "priority",
261
+ "scope",
252
262
  "type",
253
263
  "label",
254
264
  "sort"
@@ -1570,6 +1580,9 @@ function filterIssues(issues, filters) {
1570
1580
  if (filters.priority && issue.frontmatter.priority !== filters.priority) {
1571
1581
  return false;
1572
1582
  }
1583
+ if (filters.scope && issue.frontmatter.scope !== filters.scope) {
1584
+ return false;
1585
+ }
1573
1586
  if (filters.type && issue.frontmatter.type !== filters.type) {
1574
1587
  return false;
1575
1588
  }
@@ -1629,6 +1642,7 @@ async function listIssues(options) {
1629
1642
  const issues = filterAndSearchIssues(allIssues, {
1630
1643
  status: options.all ? undefined : "open",
1631
1644
  priority: options.priority,
1645
+ scope: options.scope,
1632
1646
  type: options.type,
1633
1647
  search: options.search
1634
1648
  });
@@ -1660,6 +1674,9 @@ ${"=".repeat(70)}`);
1660
1674
  console.log(` ID: ${issue.id}`);
1661
1675
  console.log(` Status: ${issue.frontmatter.status.toUpperCase()}`);
1662
1676
  console.log(` Priority: ${prioritySymbol(issue.frontmatter.priority)} ${issue.frontmatter.priority}`);
1677
+ if (issue.frontmatter.scope) {
1678
+ console.log(` Scope: ${issue.frontmatter.scope}`);
1679
+ }
1663
1680
  console.log(` Type: ${issue.frontmatter.type}`);
1664
1681
  if (issue.frontmatter.labels) {
1665
1682
  console.log(` Labels: ${issue.frontmatter.labels}`);
@@ -1716,6 +1733,7 @@ Create New Issue`);
1716
1733
  options.title = await prompt("Title: ");
1717
1734
  options.description = await prompt("Description: ");
1718
1735
  options.priority = await prompt("Priority (high/medium/low) [medium]: ");
1736
+ options.scope = await prompt("Scope (small/medium/large) []: ");
1719
1737
  options.type = await prompt("Type (bug/improvement) [improvement]: ");
1720
1738
  options.labels = await prompt("Labels (comma-separated) []: ");
1721
1739
  if (!options.priority)
@@ -1732,6 +1750,7 @@ Create New Issue`);
1732
1750
  title: options.title,
1733
1751
  description: options.description,
1734
1752
  priority: options.priority,
1753
+ scope: options.scope,
1735
1754
  type: options.type,
1736
1755
  labels: options.labels
1737
1756
  };
@@ -1749,6 +1768,7 @@ async function updateIssueCommand(id, options) {
1749
1768
  title: options.title,
1750
1769
  description: options.description,
1751
1770
  priority: options.priority,
1771
+ scope: options.scope,
1752
1772
  type: options.type,
1753
1773
  labels: options.labels,
1754
1774
  status: options.status
@@ -1785,6 +1805,7 @@ Commands:
1785
1805
  list List all open issues
1786
1806
  --all, -a Include closed issues
1787
1807
  --priority, -p <p> Filter by priority (high, medium, low)
1808
+ --scope <s> Filter by scope (small, medium, large)
1788
1809
  --type, -t <t> Filter by type (bug, improvement)
1789
1810
  --search, -s <q> Fuzzy search issues
1790
1811
 
@@ -1797,6 +1818,7 @@ Commands:
1797
1818
  --title, -t <t> Issue title
1798
1819
  --description, -d <d> Short description
1799
1820
  --priority, -p <p> Priority (high, medium, low)
1821
+ --scope <s> Scope (small, medium, large)
1800
1822
  --type <t> Type (bug, improvement)
1801
1823
  --labels, -l <l> Comma-separated labels
1802
1824
 
@@ -1804,6 +1826,7 @@ Commands:
1804
1826
  --title, -t <t> New title
1805
1827
  --description, -d <d> New description
1806
1828
  --priority, -p <p> New priority
1829
+ --scope <s> New scope
1807
1830
  --type <t> New type
1808
1831
  --labels, -l <l> New labels
1809
1832
  --status, -s <s> New status (open, closed)
@@ -1813,11 +1836,12 @@ Commands:
1813
1836
  Examples:
1814
1837
  issy list
1815
1838
  issy list --priority high --type bug
1839
+ issy list --scope large
1816
1840
  issy search "dashboard"
1817
1841
  issy search "k8s" --all
1818
1842
  issy read 0001
1819
- issy create --title "Fix login bug" --type bug --priority high
1820
- issy update 0001 --priority low
1843
+ issy create --title "Fix login bug" --type bug --priority high --scope small
1844
+ issy update 0001 --priority low --scope medium
1821
1845
  issy close 0001
1822
1846
  `);
1823
1847
  return;
@@ -1829,6 +1853,7 @@ Examples:
1829
1853
  options: {
1830
1854
  all: { type: "boolean", short: "a" },
1831
1855
  priority: { type: "string", short: "p" },
1856
+ scope: { type: "string" },
1832
1857
  type: { type: "string", short: "t" },
1833
1858
  search: { type: "string", short: "s" }
1834
1859
  },
@@ -1869,6 +1894,7 @@ Examples:
1869
1894
  title: { type: "string", short: "t" },
1870
1895
  description: { type: "string", short: "d" },
1871
1896
  priority: { type: "string", short: "p" },
1897
+ scope: { type: "string" },
1872
1898
  type: { type: "string" },
1873
1899
  labels: { type: "string", short: "l" }
1874
1900
  },
@@ -1889,6 +1915,7 @@ Examples:
1889
1915
  title: { type: "string", short: "t" },
1890
1916
  description: { type: "string", short: "d" },
1891
1917
  priority: { type: "string", short: "p" },
1918
+ scope: { type: "string" },
1892
1919
  type: { type: "string" },
1893
1920
  labels: { type: "string", short: "l" },
1894
1921
  status: { type: "string", short: "s" }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "issy",
3
- "version": "0.2.1",
3
+ "version": "0.3.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",
@@ -34,8 +34,8 @@
34
34
  "lint": "biome check src bin"
35
35
  },
36
36
  "dependencies": {
37
- "@miketromba/issy-app": "^0.2.1",
38
- "@miketromba/issy-core": "^0.2.1",
37
+ "@miketromba/issy-app": "^0.3.0",
38
+ "@miketromba/issy-core": "^0.3.0",
39
39
  "update-notifier": "^7.3.1"
40
40
  }
41
41
  }