intentdocs 0.10.0 → 0.10.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.
package/dist/index.js CHANGED
@@ -2,21 +2,21 @@
2
2
  import {
3
3
  UPGRADE_MESSAGE_PLAIN,
4
4
  isPlanGated
5
- } from "./chunk-UR73WX5I.js";
5
+ } from "./chunk-UQDMUKLP.js";
6
6
  import {
7
7
  ci
8
- } from "./chunk-IDNUBI2P.js";
8
+ } from "./chunk-6X4BORMW.js";
9
9
  import {
10
10
  setup,
11
11
  sync
12
- } from "./chunk-EEKEF2FD.js";
12
+ } from "./chunk-PUGYRSMK.js";
13
13
  import {
14
14
  captureCli,
15
15
  shutdownCliAnalytics
16
- } from "./chunk-HEHHSSUM.js";
16
+ } from "./chunk-KPQ42YE6.js";
17
17
  import {
18
18
  scope
19
- } from "./chunk-5USVG4DW.js";
19
+ } from "./chunk-NHNBCNND.js";
20
20
  import {
21
21
  criterionPriority,
22
22
  criterionStatusLabel,
@@ -24,7 +24,7 @@ import {
24
24
  formatDesignRefLine,
25
25
  storyContextPath,
26
26
  writeStoryContext
27
- } from "./chunk-NFIXRIHM.js";
27
+ } from "./chunk-F52HPVNQ.js";
28
28
  import {
29
29
  matchesStoryRef,
30
30
  storyRef
@@ -43,13 +43,13 @@ import {
43
43
  syncHeaders,
44
44
  updateStories,
45
45
  uploadScreenshot
46
- } from "./chunk-YUW3W43S.js";
46
+ } from "./chunk-34JCN66H.js";
47
47
  import {
48
48
  hasConfig,
49
49
  readConfig,
50
50
  requireConfig,
51
51
  writeConfig
52
- } from "./chunk-UF535HZL.js";
52
+ } from "./chunk-JX2RLGOM.js";
53
53
  import {
54
54
  ask,
55
55
  closePrompt,
@@ -65,7 +65,7 @@ import {
65
65
  requireValidAuth,
66
66
  saveAuth,
67
67
  validateAuth
68
- } from "./chunk-LXQXJULN.js";
68
+ } from "./chunk-XZE2XP6O.js";
69
69
  import {
70
70
  API_BASE
71
71
  } from "./chunk-UYTVTYNB.js";
@@ -97,9 +97,9 @@ function finishLogin(data) {
97
97
  if (data.binding?.approvalStatus === "pending") {
98
98
  console.log("An admin has been asked to approve it. Until they do, this token reads your personal projects only.\n");
99
99
  }
100
- console.log("You can now run: intentdocs init");
100
+ console.log("You can now run: npx intentdocs init");
101
101
  console.log(
102
- "Optional: add your Anthropic API key to unlock AI features on any plan \u2014 intentdocs keys set"
102
+ "Optional: add your Anthropic API key to unlock AI features on any plan \u2014 npx intentdocs keys set"
103
103
  );
104
104
  }
105
105
  function openBrowser(url) {
@@ -171,7 +171,7 @@ async function login() {
171
171
  return;
172
172
  }
173
173
  if (data.status === "expired") {
174
- console.error("\n\nThe server-side login request expired. Run `intentdocs login` to start a new one.");
174
+ console.error("\n\nThe server-side login request expired. Run `npx intentdocs login` to start a new one.");
175
175
  process.exit(1);
176
176
  }
177
177
  } catch {
@@ -210,7 +210,7 @@ Waiting ${EXTEND_TIMEOUT_S / 60} more minutes...`);
210
210
  return;
211
211
  }
212
212
  if (data.status === "expired") {
213
- console.error("\n\nThe server-side login request expired. Run `intentdocs login` to start a new one.");
213
+ console.error("\n\nThe server-side login request expired. Run `npx intentdocs login` to start a new one.");
214
214
  process.exit(1);
215
215
  }
216
216
  } catch {
@@ -218,7 +218,7 @@ Waiting ${EXTEND_TIMEOUT_S / 60} more minutes...`);
218
218
  }
219
219
  }
220
220
  }
221
- console.error("\n\nLogin timed out. Run `intentdocs login` to try again.");
221
+ console.error("\n\nLogin timed out. Run `npx intentdocs login` to try again.");
222
222
  console.error("If the browser page is still open, complete it and re-run the command \u2014 your approval will still work within 10 minutes.\n");
223
223
  process.exit(1);
224
224
  }
@@ -236,7 +236,7 @@ async function logout() {
236
236
  }
237
237
 
238
238
  // src/commands/init.ts
239
- var INTENTDOCS_CLAUDE_BLOCK = "\n\n# intentdocs\nRead INTENT.md for the product story map, personas, and backlog.\nWhen you call `save_tests`, pass the `file` and the `full_name` (the full test name, describe blocks included) for every test, so CI can report each test's result back to its story.\nWhen you open a pull request for a story, pass its URL to `intent done` or `complete_story`; intentdocs stamps the PR with a 'Spec \u2192 Code via intentdocs.com' footer linking back to the story when GitHub is connected. If it is not, end the PR body with:\n---\nSpec \u2192 Code via [intentdocs.com](https://intentdocs.com?utm_source=github&utm_medium=pr-footer) \xB7 [story <story-id>](<story-url>)\n";
239
+ var INTENTDOCS_CLAUDE_BLOCK = "\n\n# intentdocs\nRead INTENT.md for the product story map, personas, and backlog.\nWhen you call `save_tests`, pass the `file` and the `full_name` (the full test name, describe blocks included) for every test, so CI can report each test's result back to its story.\nWhen you open a pull request for a story, pass its URL to `npx intentdocs done` or `complete_story`; intentdocs stamps the PR with a 'Spec \u2192 Code via intentdocs.com' footer linking back to the story when GitHub is connected. If it is not, end the PR body with:\n---\nSpec \u2192 Code via [intentdocs.com](https://intentdocs.com?utm_source=github&utm_medium=pr-footer) \xB7 [story <story-id>](<story-url>)\n";
240
240
  function ask2(rl, question) {
241
241
  return new Promise((resolve) => rl.question(question, resolve));
242
242
  }
@@ -280,11 +280,11 @@ function detectStack(cwd) {
280
280
  }
281
281
  async function init(tokenArg) {
282
282
  if (hasConfig()) {
283
- console.log("Already initialized. Run `intentdocs sync` to refresh.");
283
+ console.log("Already initialized. Run `npx intentdocs sync` to refresh.");
284
284
  return;
285
285
  }
286
286
  if (tokenArg) {
287
- console.error("Sync tokens have been retired \u2014 `intentdocs init` no longer takes one. Run `intentdocs login`, then `intentdocs init` and pick the project and map.");
287
+ console.error("Sync tokens have been retired \u2014 `npx intentdocs init` no longer takes one. Run `npx intentdocs login`, then `npx intentdocs init` and pick the project and map.");
288
288
  process.exit(1);
289
289
  }
290
290
  let auth = getAuth();
@@ -370,18 +370,18 @@ Connecting to "${map2.title}"${project.workspace ? ` in ${project.workspace.name
370
370
  console.log(`
371
371
  \u2705 Ready! Next steps:
372
372
 
373
- intent status \u2014 see your story map
374
- intent next \u2014 pick up the first story
375
- intent setup \u2014 configure Claude Code / Cursor slash commands
376
- intent ci \u2014 report your tests' results from CI to each story
377
- intent propose \u2014 plan a new feature from the terminal
373
+ npx intentdocs status \u2014 see your story map
374
+ npx intentdocs next \u2014 pick up the first story
375
+ npx intentdocs setup \u2014 configure Claude Code / Cursor slash commands
376
+ npx intentdocs ci \u2014 report your tests' results from CI to each story
377
+ npx intentdocs propose \u2014 plan a new feature from the terminal
378
378
  `);
379
379
  const setUpCi = await ask2(rl, " Set up CI test reporting now? It creates a key and adds the workflow. (y/N): ");
380
380
  if (/^y(es)?$/i.test(setUpCi.trim())) {
381
- const { ci: ci2 } = await import("./ci-LBOCMRKZ.js");
381
+ const { ci: ci2 } = await import("./ci-XCOXFTLB.js");
382
382
  await ci2();
383
383
  } else {
384
- console.log(" You can run `intent ci` any time to turn it on.\n");
384
+ console.log(" You can run `npx intentdocs ci` any time to turn it on.\n");
385
385
  }
386
386
  } finally {
387
387
  rl.close();
@@ -728,10 +728,10 @@ async function next(opts = {}) {
728
728
  `);
729
729
  for (const ip of inProgress) {
730
730
  console.log(` \u{1F528} ${ip.title}`);
731
- console.log(` ID: ${ip.id.slice(0, 8)} | Mark done: intent done ${ip.id.slice(0, 8)}`);
731
+ console.log(` ID: ${ip.id.slice(0, 8)} | Mark done: npx intentdocs done ${ip.id.slice(0, 8)}`);
732
732
  }
733
733
  console.log(`
734
- Finish those first, or run \`intentdocs next --skip-wip\` to pick the next todo anyway.
734
+ Finish those first, or run \`npx intentdocs next --skip-wip\` to pick the next todo anyway.
735
735
  `);
736
736
  return;
737
737
  }
@@ -759,12 +759,12 @@ async function next(opts = {}) {
759
759
  if (unsequencedCount > 0) {
760
760
  console.log(`
761
761
  \u{1F512} ${unsequencedCount} stor${unsequencedCount === 1 ? "y is" : "ies are"} unsequenced \u2014 agents only build stories you've deliberately ordered.`);
762
- console.log(` Sequence ${unsequencedCount === 1 ? "it" : "them"} on the Plan view, then run \`intentdocs next\` again.
762
+ console.log(` Sequence ${unsequencedCount === 1 ? "it" : "them"} on the Plan view, then run \`npx intentdocs next\` again.
763
763
  `);
764
764
  } else if (blockedCount > 0) {
765
765
  console.log(`
766
766
  \u{1F512} ${blockedCount} stories remain but all have unfinished dependencies.`);
767
- console.log(` Finish in-progress stories first, then run \`intentdocs next\` again.
767
+ console.log(` Finish in-progress stories first, then run \`npx intentdocs next\` again.
768
768
  `);
769
769
  } else {
770
770
  console.log("\n \u{1F389} All stories are done! Ship it.\n");
@@ -794,7 +794,7 @@ async function next(opts = {}) {
794
794
  console.log(` Plan: \u2705 Implementation plan available`);
795
795
  }
796
796
  console.log(`
797
- Start building: intent implement ${s.id.slice(0, 8)}
797
+ Start building: npx intentdocs implement ${s.id.slice(0, 8)}
798
798
  `);
799
799
  if (opts.open) {
800
800
  openBrowser2(specUrl);
@@ -855,7 +855,7 @@ async function generateVerificationSuggestions(story, contextPath) {
855
855
  `);
856
856
  return;
857
857
  }
858
- const lines = [`# Suggested verification commands: ${story.title}`, ``, `_Generated by \`intentdocs next --stub\` \u2014 copy into the criterion's command field, or run \`intentdocs check\` once wired up._`, ``];
858
+ const lines = [`# Suggested verification commands: ${story.title}`, ``, `_Generated by \`npx intentdocs next --stub\` \u2014 copy into the criterion's command field, or run \`npx intentdocs check\` once wired up._`, ``];
859
859
  console.log();
860
860
  for (const suggestion of suggestions) {
861
861
  const ac = candidates[suggestion.index - 1];
@@ -910,7 +910,7 @@ async function implement(storyId, opts = {}) {
910
910
  if (s.status === "in_progress") {
911
911
  console.log(`
912
912
  \u{1F528} "${s.title}" is already in progress.`);
913
- console.log(` Mark done: intent done ${s.id.slice(0, 8)}
913
+ console.log(` Mark done: npx intentdocs done ${s.id.slice(0, 8)}
914
914
  `);
915
915
  return;
916
916
  }
@@ -952,7 +952,7 @@ async function implement(storyId, opts = {}) {
952
952
  }
953
953
  console.log(` \u2502 \u2502`);
954
954
  console.log(` \u2502 Consider: \u2502`);
955
- console.log(` \u2502 intent sync --context refresh CLAUDE.md first \u2502`);
955
+ console.log(` \u2502 npx intentdocs sync --context (refresh CLAUDE.md) \u2502`);
956
956
  console.log(` \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
957
957
  `);
958
958
  const proceed = isInteractive() ? await confirm(" Assign this story and mark in progress?") : false;
@@ -999,7 +999,7 @@ async function implement(storyId, opts = {}) {
999
999
  console.log(` Priority: ${s.priority} | Effort: ${s.effort} | Release: ${s.release}${s.build_sequence ? ` | Build step: ${s.build_sequence}` : ""}`);
1000
1000
  console.log(` Context: ${relPath}`);
1001
1001
  console.log(` Spec: ${specUrl}`);
1002
- console.log(` Mark done: intent done ${s.id.slice(0, 8)}
1002
+ console.log(` Mark done: npx intentdocs done ${s.id.slice(0, 8)}
1003
1003
  `);
1004
1004
  if (opts.stub) {
1005
1005
  await generateVerificationSuggestions(s, contextPath);
@@ -1140,7 +1140,7 @@ async function done(idPrefix, opts = {}) {
1140
1140
  console.error(
1141
1141
  ` \u2717 Not marked done: "${match.title}" has unresolved 'must' criteria and no TTY is available to confirm an override.`
1142
1142
  );
1143
- console.error(` Report the criteria (intent check / report_criteria) or re-run interactively to force it.`);
1143
+ console.error(` Report the criteria (npx intentdocs check / report_criteria) or re-run interactively to force it.`);
1144
1144
  process.exit(1);
1145
1145
  }
1146
1146
  return;
@@ -1168,7 +1168,7 @@ async function done(idPrefix, opts = {}) {
1168
1168
  console.error(
1169
1169
  ` \u2717 Done-mark did not persist: server reports status="${persisted?.status ?? "not found"}" for "${match.title}" after the update.`
1170
1170
  );
1171
- console.error(` Not treating this run as successful \u2014 re-run \`intent done ${idPrefix}\` or check the sync API.`);
1171
+ console.error(` Not treating this run as successful \u2014 re-run \`npx intentdocs done ${idPrefix}\` or check the sync API.`);
1172
1172
  await shutdownCliAnalytics();
1173
1173
  closePrompt();
1174
1174
  process.exit(1);
@@ -1320,7 +1320,7 @@ function resolveStory(stories2, idPrefix) {
1320
1320
  const inProgress = stories2.filter((s) => s.status === "in_progress");
1321
1321
  if (inProgress.length === 1) return { story: inProgress[0] };
1322
1322
  return {
1323
- error: inProgress.length === 0 ? "No story in progress. Specify one: intent check <idPrefix>" : `${inProgress.length} stories in progress \u2014 specify one: intent check <idPrefix>`
1323
+ error: inProgress.length === 0 ? "No story in progress. Specify one: npx intentdocs check <idPrefix>" : `${inProgress.length} stories in progress \u2014 specify one: npx intentdocs check <idPrefix>`
1324
1324
  };
1325
1325
  }
1326
1326
  async function check(idPrefix, opts = {}) {
@@ -1466,7 +1466,7 @@ async function start() {
1466
1466
  } catch (err) {
1467
1467
  spinner.fail(" Failed to connect");
1468
1468
  console.error(` ${err.message}`);
1469
- console.error(" Make sure you're logged in: intentdocs login");
1469
+ console.error(" Make sure you're logged in: npx intentdocs login");
1470
1470
  closePrompt();
1471
1471
  return;
1472
1472
  }
@@ -1538,14 +1538,14 @@ async function start() {
1538
1538
  Failed to create project: ${data.error ?? "unknown error"}`);
1539
1539
  }
1540
1540
  } else {
1541
- console.error("\n Failed to create project. Try logging in again: intentdocs login");
1541
+ console.error("\n Failed to create project. Try logging in again: npx intentdocs login");
1542
1542
  }
1543
1543
  closePrompt();
1544
1544
  return;
1545
1545
  }
1546
1546
  const createContentType = createRes.headers.get("content-type") ?? "";
1547
1547
  if (!createContentType.includes("application/json")) {
1548
- console.error("\n Unexpected response from server. Try logging in again: intentdocs login");
1548
+ console.error("\n Unexpected response from server. Try logging in again: npx intentdocs login");
1549
1549
  closePrompt();
1550
1550
  return;
1551
1551
  }
@@ -1609,7 +1609,7 @@ async function start() {
1609
1609
  if (!readyToScope) {
1610
1610
  console.log(`
1611
1611
  No worries! When you're ready:
1612
- \u2022 Run: intent scope ${projectId}
1612
+ \u2022 Run: npx intentdocs scope ${projectId}
1613
1613
  \u2022 Or visit: ${API_BASE}
1614
1614
 
1615
1615
  Your project is saved and waiting for you.
@@ -1617,7 +1617,7 @@ async function start() {
1617
1617
  closePrompt();
1618
1618
  return;
1619
1619
  }
1620
- const { scope: scope2 } = await import("./scope-S3LZZ3KB.js");
1620
+ const { scope: scope2 } = await import("./scope-ZZLKQEF5.js");
1621
1621
  await scope2(projectId);
1622
1622
  }
1623
1623
 
@@ -1627,7 +1627,7 @@ import { join as join4 } from "path";
1627
1627
  async function propose(changeName, opts = {}) {
1628
1628
  await requireValidAuth();
1629
1629
  if (!hasConfig()) {
1630
- console.log(" Not connected to a project. Run `intentdocs init` first.");
1630
+ console.log(" Not connected to a project. Run `npx intentdocs init` first.");
1631
1631
  closePrompt();
1632
1632
  return;
1633
1633
  }
@@ -1769,9 +1769,9 @@ async function propose(changeName, opts = {}) {
1769
1769
  Local spec saved at: intent-changes/${slug}/proposal.md
1770
1770
 
1771
1771
  Next:
1772
- intent next \u2014 pick up the first story
1773
- intent status \u2014 see full progress
1774
- intent sync \u2014 refresh INTENT.md
1772
+ npx intentdocs next \u2014 pick up the first story
1773
+ npx intentdocs status \u2014 see full progress
1774
+ npx intentdocs sync \u2014 refresh INTENT.md
1775
1775
  `);
1776
1776
  closePrompt();
1777
1777
  }
@@ -1921,7 +1921,7 @@ async function proposeFromFile(filePath, config, nameOverride) {
1921
1921
  writeFileSync3(join4(changesDir, "proposal.md"), proposalMd);
1922
1922
  console.log(` \u2713 Saved intent-changes/${slug}/proposal.md`);
1923
1923
  console.log(`
1924
- \u2705 Done! Run \`intentdocs next\` to start building.
1924
+ \u2705 Done! Run \`npx intentdocs next\` to start building.
1925
1925
  `);
1926
1926
  }
1927
1927
 
@@ -1938,7 +1938,7 @@ async function show(idPrefix) {
1938
1938
  if (!story) {
1939
1939
  console.error(`
1940
1940
  No story found matching "${idPrefix}"
1941
- Run \`intentdocs stories\` to list IDs.
1941
+ Run \`npx intentdocs stories\` to list IDs.
1942
1942
  `);
1943
1943
  process.exit(1);
1944
1944
  }
@@ -1992,7 +1992,7 @@ async function show(idPrefix) {
1992
1992
  const relPath = contextPath.replace(process.cwd() + "/", "");
1993
1993
  console.log(`
1994
1994
  Context : ${relPath}`);
1995
- console.log(` Mark done: intent done ${storyRef(story)}
1995
+ console.log(` Mark done: npx intentdocs done ${storyRef(story)}
1996
1996
  `);
1997
1997
  }
1998
1998
 
@@ -2041,7 +2041,7 @@ async function example() {
2041
2041
  console.log(`
2042
2042
  \u2713 Example saved: "${data.title}"
2043
2043
  `);
2044
- console.log(" Run `intentdocs sync --context` to regenerate your CLAUDE.md with this pattern.\n");
2044
+ console.log(" Run `npx intentdocs sync --context` to regenerate your CLAUDE.md with this pattern.\n");
2045
2045
  } catch {
2046
2046
  rl.close();
2047
2047
  throw new Error("Aborted");
@@ -2919,7 +2919,7 @@ async function startMcpServer(mode = "all") {
2919
2919
  import { execSync as execSync3 } from "child_process";
2920
2920
  async function openclawRegister() {
2921
2921
  if (!hasConfig()) {
2922
- console.error("Not initialised. Run: intent init");
2922
+ console.error("Not initialised. Run: npx intentdocs init");
2923
2923
  process.exit(1);
2924
2924
  }
2925
2925
  const config = readConfig();
@@ -2963,13 +2963,13 @@ program.command("login").description("Log in to intentdocs (opens browser)").act
2963
2963
  program.command("logout").description("Log out of intentdocs").action(() => void logout());
2964
2964
  var keys = program.command("keys").description("Manage your Anthropic API key \u2014 unlock AI features on any plan");
2965
2965
  keys.command("set [key]").description("Save your Anthropic API key (prompts if omitted)").action((key) => {
2966
- import("./keys-5PA3D6CX.js").then((m) => void m.keysSet(key));
2966
+ import("./keys-UVXCCWCS.js").then((m) => void m.keysSet(key));
2967
2967
  });
2968
2968
  keys.command("status").description("Show whether a key is set (masked)").action(() => {
2969
- import("./keys-5PA3D6CX.js").then((m) => void m.keysStatus());
2969
+ import("./keys-UVXCCWCS.js").then((m) => void m.keysStatus());
2970
2970
  });
2971
2971
  keys.command("remove").description("Remove your stored key").action(() => {
2972
- import("./keys-5PA3D6CX.js").then((m) => void m.keysRemove());
2972
+ import("./keys-UVXCCWCS.js").then((m) => void m.keysRemove());
2973
2973
  });
2974
2974
  program.command("start").description("Start a new project \u2014 guided flow from problem to pitch").action(() => void start());
2975
2975
  program.command("scope [projectId]").description("Scope a project \u2014 generate blueprint, story map, and mockup").action((id) => void scope(id));
@@ -3001,7 +3001,7 @@ program.command("templates [name]").description("Browse story map templates").ac
3001
3001
  }
3002
3002
  });
3003
3003
  program.command("projects").description("List the projects your token can reach \u2014 the whole workspace it is bound to").action(() => {
3004
- import("./projects-F7GMH66U.js").then((m) => void m.projects());
3004
+ import("./projects-AYAYVFKL.js").then((m) => void m.projects());
3005
3005
  });
3006
3006
  program.command("init [token]").description("Connect this project to a intentdocs story map").action((token) => void init(token));
3007
3007
  program.command("sync").description("Refresh INTENT.md from the live story map").option("--context", "Refresh only the CLAUDE.md/AGENTS.md context file (not stories)").action((opts) => void sync(opts));
@@ -3016,39 +3016,39 @@ program.command("done <id>").description("Mark a story as done (accepts ID prefi
3016
3016
  program.command("stop <id>").description("Stop development of an in-progress story (resets to todo, signals agents to stop)").action((id) => void stop(id));
3017
3017
  program.command("add <title>").description("Create a new story").option("-a, --activity <activity>", "Activity to add the story under").option("-p, --priority <priority>", "Priority: must, should, could", "should").option("-e, --effort <effort>", "Effort: S, M, L, XL", "M").action((title, opts) => void add(title, opts));
3018
3018
  var decide = program.command("decide [title]").description("Log an architectural or product decision").option("-d, --description <desc>", "Decision description").option("-c, --category <cat>", "Category: architecture, product, technical, trade-off", "technical").option("-s, --story <id>", "Link to a story ID").action((title, opts) => {
3019
- import("./log-EVLWM64C.js").then((m) => void m.logDecision(title, opts));
3019
+ import("./log-XIH4BGFL.js").then((m) => void m.logDecision(title, opts));
3020
3020
  });
3021
3021
  decide.command("list").description("List logged decisions (id, category, title)").action(() => {
3022
- import("./log-EVLWM64C.js").then((m) => void m.listLoggedDecisions());
3022
+ import("./log-XIH4BGFL.js").then((m) => void m.listLoggedDecisions());
3023
3023
  });
3024
3024
  decide.command("amend <id>").description("Amend a logged decision's title, description, or category (accepts an ID prefix)").option("-t, --title <title>", "New title").option("-d, --description <desc>", "New description").option("-c, --category <cat>", "New category: architecture, product, technical, trade-off").action((id, opts) => {
3025
- import("./log-EVLWM64C.js").then((m) => void m.amendDecision(id, opts));
3025
+ import("./log-XIH4BGFL.js").then((m) => void m.amendDecision(id, opts));
3026
3026
  });
3027
3027
  decide.command("delete <id>").alias("retract").description("Retract a logged decision \u2014 soft-deleted and audited, not removed (accepts an ID prefix)").option("-r, --reason <reason>", "Why this decision is being retracted").option("-y, --yes", "Skip the confirmation prompt (required when there's no TTY)").action((id, opts) => {
3028
- import("./log-EVLWM64C.js").then((m) => void m.deleteDecision(id, opts));
3028
+ import("./log-XIH4BGFL.js").then((m) => void m.deleteDecision(id, opts));
3029
3029
  });
3030
3030
  program.command("note <storyId> [note]").description("Add implementation notes to a story").action((storyId, note) => {
3031
- import("./log-EVLWM64C.js").then((m) => void m.logNote(storyId, note));
3031
+ import("./log-XIH4BGFL.js").then((m) => void m.logNote(storyId, note));
3032
3032
  });
3033
3033
  program.command("example").description("Add a few-shot reference pattern (before/after code) to the project").action(() => void example());
3034
3034
  program.command("complexity [storyId]").description("Analyze story complexity with AI \u2014 scores, risks, effort estimates").action((id) => {
3035
- import("./complexity-ZOB3BPVD.js").then((m) => void m.complexity(id));
3035
+ import("./complexity-X3IJKNNV.js").then((m) => void m.complexity(id));
3036
3036
  });
3037
3037
  program.command("research [query]").description("Research a topic with AI using your project context").action((query) => {
3038
- import("./research-4ASCZSZN.js").then((m) => void m.research(query));
3038
+ import("./research-CO3W7PLC.js").then((m) => void m.research(query));
3039
3039
  });
3040
3040
  program.command("import [file]").description("Import a PRD or spec into your story map as stories").action((file) => {
3041
- import("./import-prd-MJUCIMHX.js").then((m) => void m.importPrd(file));
3041
+ import("./import-prd-IJTM6FZE.js").then((m) => void m.importPrd(file));
3042
3042
  });
3043
3043
  var map = program.command("map").description("Import or extract story maps from codebases");
3044
3044
  map.command("extract").description("Output a prompt for your coding agent to extract a story map from an existing codebase").action(() => {
3045
- import("./map-extract-W6WJLVOF.js").then((m) => void m.mapExtract());
3045
+ import("./map-extract-V6D27I3H.js").then((m) => void m.mapExtract());
3046
3046
  });
3047
3047
  map.command("import <file>").description("Import a storymap.json file generated by your coding agent").option("--yes", "Skip confirmation prompt").action((file, opts) => {
3048
- import("./map-import-LL4AIAQE.js").then((m) => void m.mapImport(file, opts));
3048
+ import("./map-import-LORTI4K4.js").then((m) => void m.mapImport(file, opts));
3049
3049
  });
3050
3050
  map.command("schema").description("Print the JSON Schema for storymap.json").action(() => {
3051
- import("./map-schema-6GL2UKZQ.js").then((m) => void m.mapSchema());
3051
+ import("./map-schema-5BEIJM2J.js").then((m) => void m.mapSchema());
3052
3052
  });
3053
3053
  program.command("mcp").description("Start MCP server for Claude Code / Cursor integration").option("-m, --mode <mode>", "Tool mode: core, standard, all", "all").action((opts) => void startMcpServer(opts.mode));
3054
3054
  program.command("openclaw-register").description("Register this project with OpenClaw MCP \u2014 gives spawned coding agents access to your story map").action(() => void openclawRegister());
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-WRRUCCVZ.js";
5
5
  import {
6
6
  requireValidAuth
7
- } from "./chunk-LXQXJULN.js";
7
+ } from "./chunk-XZE2XP6O.js";
8
8
  import "./chunk-UYTVTYNB.js";
9
9
 
10
10
  // src/commands/keys.ts
@@ -33,7 +33,7 @@ async function keysSet(key) {
33
33
  closePrompt();
34
34
  }
35
35
  if (!value) {
36
- console.error(" No key provided. Run `intentdocs keys set` to try again.");
36
+ console.error(" No key provided. Run `npx intentdocs keys set` to try again.");
37
37
  process.exit(1);
38
38
  }
39
39
  try {
@@ -60,11 +60,11 @@ async function keysStatus() {
60
60
  }
61
61
  if (data?.enabled) {
62
62
  console.log(`
63
- Anthropic API key: ${data.maskedKey ?? "(stored but unreadable \u2014 re-run `intentdocs keys set`)"}`);
63
+ Anthropic API key: ${data.maskedKey ?? "(stored but unreadable \u2014 re-run `npx intentdocs keys set`)"}`);
64
64
  console.log(" AI features run on your key.\n");
65
65
  } else {
66
66
  console.log("\n No Anthropic API key set.");
67
- console.log(" Add one with `intentdocs keys set` to unlock AI features on any plan.\n");
67
+ console.log(" Add one with `npx intentdocs keys set` to unlock AI features on any plan.\n");
68
68
  }
69
69
  } catch {
70
70
  console.error(" \u2717 Could not reach intentdocs. Check your connection and try again.");
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  appendNoteToContext,
3
3
  storyContextPath
4
- } from "./chunk-NFIXRIHM.js";
4
+ } from "./chunk-F52HPVNQ.js";
5
5
  import {
6
6
  matchesStoryRef
7
7
  } from "./chunk-LQTPZL2Y.js";
@@ -10,17 +10,17 @@ import {
10
10
  apiFetch,
11
11
  listDecisions,
12
12
  retractDecision
13
- } from "./chunk-YUW3W43S.js";
13
+ } from "./chunk-34JCN66H.js";
14
14
  import {
15
15
  requireConfig
16
- } from "./chunk-UF535HZL.js";
16
+ } from "./chunk-JX2RLGOM.js";
17
17
  import {
18
18
  ask,
19
19
  closePrompt,
20
20
  confirm,
21
21
  isInteractive
22
22
  } from "./chunk-WRRUCCVZ.js";
23
- import "./chunk-LXQXJULN.js";
23
+ import "./chunk-XZE2XP6O.js";
24
24
  import "./chunk-UYTVTYNB.js";
25
25
 
26
26
  // src/commands/log.ts
@@ -69,7 +69,7 @@ async function listLoggedDecisions() {
69
69
  const config = requireConfig();
70
70
  const { decisions } = await listDecisions(config);
71
71
  if (decisions.length === 0) {
72
- console.log(" No decisions logged yet. Run `intent decide` to log one.");
72
+ console.log(" No decisions logged yet. Run `npx intentdocs decide` to log one.");
73
73
  return;
74
74
  }
75
75
  console.log();
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  requireConfig
3
- } from "./chunk-UF535HZL.js";
3
+ } from "./chunk-JX2RLGOM.js";
4
4
  import "./chunk-UYTVTYNB.js";
5
5
 
6
6
  // src/commands/map-extract.ts
@@ -85,7 +85,7 @@ Field rules:
85
85
  4. Hand back to intentdocs
86
86
  After writing storymap.json, run:
87
87
 
88
- intent map import ./storymap.json
88
+ npx intentdocs map import ./storymap.json
89
89
 
90
90
  Then tell me (the founder): a one-paragraph summary of the map you produced, the count of stories by confidence level, and the top open questions you need me to answer.`;
91
91
  console.log("\n Copy the prompt below and paste it into your coding agent");
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  isPlanGated,
3
3
  printUpgradeMessage
4
- } from "./chunk-UR73WX5I.js";
4
+ } from "./chunk-UQDMUKLP.js";
5
5
  import {
6
6
  apiUrl,
7
7
  syncHeaders
8
- } from "./chunk-YUW3W43S.js";
8
+ } from "./chunk-34JCN66H.js";
9
9
  import {
10
10
  requireConfig
11
- } from "./chunk-UF535HZL.js";
11
+ } from "./chunk-JX2RLGOM.js";
12
12
  import {
13
13
  closePrompt,
14
14
  confirm
15
15
  } from "./chunk-WRRUCCVZ.js";
16
- import "./chunk-LXQXJULN.js";
16
+ import "./chunk-XZE2XP6O.js";
17
17
  import "./chunk-UYTVTYNB.js";
18
18
 
19
19
  // src/commands/map-import.ts
@@ -2,7 +2,7 @@
2
2
  var SCHEMA = {
3
3
  $schema: "https://json-schema.org/draft/2020-12/schema",
4
4
  title: "IntentDocs Story Map",
5
- description: "Schema for storymap.json files produced by `intentdocs map extract` and consumed by `intentdocs map import`.",
5
+ description: "Schema for storymap.json files produced by `npx intentdocs map extract` and consumed by `npx intentdocs map import`.",
6
6
  type: "object",
7
7
  required: ["schema_version", "source", "product_summary", "backbone"],
8
8
  additionalProperties: false,
@@ -2,7 +2,7 @@ import {
2
2
  authenticatedFetch,
3
3
  bindingLabel,
4
4
  getAuth
5
- } from "./chunk-LXQXJULN.js";
5
+ } from "./chunk-XZE2XP6O.js";
6
6
  import "./chunk-UYTVTYNB.js";
7
7
 
8
8
  // src/commands/projects.ts
@@ -29,7 +29,7 @@ async function projects() {
29
29
  if (p.description) console.log(` ${p.description.slice(0, 100)}`);
30
30
  }
31
31
  console.log(`
32
- ${data.projects.length} ${data.projects.length === 1 ? "project" : "projects"}. Check one out with: intentdocs init
32
+ ${data.projects.length} ${data.projects.length === 1 ? "project" : "projects"}. Check one out with: npx intentdocs init
33
33
  `);
34
34
  }
35
35
  export {
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  isPlanGated,
3
3
  printUpgradeMessage
4
- } from "./chunk-UR73WX5I.js";
4
+ } from "./chunk-UQDMUKLP.js";
5
5
  import {
6
6
  apiUrl,
7
7
  syncHeaders
8
- } from "./chunk-YUW3W43S.js";
8
+ } from "./chunk-34JCN66H.js";
9
9
  import {
10
10
  requireConfig
11
- } from "./chunk-UF535HZL.js";
11
+ } from "./chunk-JX2RLGOM.js";
12
12
  import {
13
13
  ask,
14
14
  closePrompt
15
15
  } from "./chunk-WRRUCCVZ.js";
16
- import "./chunk-LXQXJULN.js";
16
+ import "./chunk-XZE2XP6O.js";
17
17
  import "./chunk-UYTVTYNB.js";
18
18
 
19
19
  // src/commands/research.ts
@@ -0,0 +1,11 @@
1
+ import {
2
+ scope
3
+ } from "./chunk-NHNBCNND.js";
4
+ import "./chunk-34JCN66H.js";
5
+ import "./chunk-JX2RLGOM.js";
6
+ import "./chunk-WRRUCCVZ.js";
7
+ import "./chunk-XZE2XP6O.js";
8
+ import "./chunk-UYTVTYNB.js";
9
+ export {
10
+ scope
11
+ };
@@ -0,0 +1,14 @@
1
+ import {
2
+ setup
3
+ } from "./chunk-PUGYRSMK.js";
4
+ import "./chunk-KPQ42YE6.js";
5
+ import "./chunk-F52HPVNQ.js";
6
+ import "./chunk-LQTPZL2Y.js";
7
+ import "./chunk-34JCN66H.js";
8
+ import "./chunk-JX2RLGOM.js";
9
+ import "./chunk-WRRUCCVZ.js";
10
+ import "./chunk-XZE2XP6O.js";
11
+ import "./chunk-UYTVTYNB.js";
12
+ export {
13
+ setup
14
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intentdocs",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "description": "CLI for intentdocs.com — intent-driven development: connect your codebase to your product specs",
5
5
  "bin": {
6
6
  "intentdocs": "bin/intentdocs.js",
@@ -1,11 +0,0 @@
1
- import {
2
- ci
3
- } from "./chunk-IDNUBI2P.js";
4
- import "./chunk-HEHHSSUM.js";
5
- import "./chunk-UF535HZL.js";
6
- import "./chunk-WRRUCCVZ.js";
7
- import "./chunk-LXQXJULN.js";
8
- import "./chunk-UYTVTYNB.js";
9
- export {
10
- ci
11
- };