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/README.md +5 -0
- package/dist/{chunk-YUW3W43S.js → chunk-34JCN66H.js} +7 -7
- package/dist/{chunk-IDNUBI2P.js → chunk-6X4BORMW.js} +6 -6
- package/dist/{chunk-NFIXRIHM.js → chunk-F52HPVNQ.js} +3 -3
- package/dist/{chunk-UF535HZL.js → chunk-JX2RLGOM.js} +2 -2
- package/dist/{chunk-HEHHSSUM.js → chunk-KPQ42YE6.js} +1 -1
- package/dist/{chunk-5USVG4DW.js → chunk-NHNBCNND.js} +8 -8
- package/dist/{chunk-EEKEF2FD.js → chunk-PUGYRSMK.js} +59 -59
- package/dist/{chunk-UR73WX5I.js → chunk-UQDMUKLP.js} +2 -2
- package/dist/{chunk-LXQXJULN.js → chunk-XZE2XP6O.js} +3 -3
- package/dist/ci-XCOXFTLB.js +11 -0
- package/dist/{complexity-ZOB3BPVD.js → complexity-X3IJKNNV.js} +4 -4
- package/dist/{import-prd-MJUCIMHX.js → import-prd-IJTM6FZE.js} +4 -4
- package/dist/index.js +65 -65
- package/dist/{keys-5PA3D6CX.js → keys-UVXCCWCS.js} +4 -4
- package/dist/{log-EVLWM64C.js → log-XIH4BGFL.js} +5 -5
- package/dist/{map-extract-W6WJLVOF.js → map-extract-V6D27I3H.js} +2 -2
- package/dist/{map-import-LL4AIAQE.js → map-import-LORTI4K4.js} +4 -4
- package/dist/{map-schema-6GL2UKZQ.js → map-schema-5BEIJM2J.js} +1 -1
- package/dist/{projects-F7GMH66U.js → projects-AYAYVFKL.js} +2 -2
- package/dist/{research-4ASCZSZN.js → research-CO3W7PLC.js} +4 -4
- package/dist/scope-ZZLKQEF5.js +11 -0
- package/dist/setup-WSYIG2CR.js +14 -0
- package/package.json +1 -1
- package/dist/ci-LBOCMRKZ.js +0 -11
- package/dist/scope-S3LZZ3KB.js +0 -11
- package/dist/setup-YLUPBLK6.js +0 -14
package/dist/index.js
CHANGED
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
import {
|
|
3
3
|
UPGRADE_MESSAGE_PLAIN,
|
|
4
4
|
isPlanGated
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-UQDMUKLP.js";
|
|
6
6
|
import {
|
|
7
7
|
ci
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-6X4BORMW.js";
|
|
9
9
|
import {
|
|
10
10
|
setup,
|
|
11
11
|
sync
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-PUGYRSMK.js";
|
|
13
13
|
import {
|
|
14
14
|
captureCli,
|
|
15
15
|
shutdownCliAnalytics
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-KPQ42YE6.js";
|
|
17
17
|
import {
|
|
18
18
|
scope
|
|
19
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
46
|
+
} from "./chunk-34JCN66H.js";
|
|
47
47
|
import {
|
|
48
48
|
hasConfig,
|
|
49
49
|
readConfig,
|
|
50
50
|
requireConfig,
|
|
51
51
|
writeConfig
|
|
52
|
-
} from "./chunk-
|
|
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-
|
|
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 `
|
|
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
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
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-
|
|
381
|
+
const { ci: ci2 } = await import("./ci-XCOXFTLB.js");
|
|
382
382
|
await ci2();
|
|
383
383
|
} else {
|
|
384
|
-
console.log(" You can run `
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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 (
|
|
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 \`
|
|
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:
|
|
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:
|
|
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-
|
|
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
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
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:
|
|
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:
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
13
|
+
} from "./chunk-34JCN66H.js";
|
|
14
14
|
import {
|
|
15
15
|
requireConfig
|
|
16
|
-
} from "./chunk-
|
|
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-
|
|
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 `
|
|
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-
|
|
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
|
-
|
|
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-
|
|
4
|
+
} from "./chunk-UQDMUKLP.js";
|
|
5
5
|
import {
|
|
6
6
|
apiUrl,
|
|
7
7
|
syncHeaders
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-34JCN66H.js";
|
|
9
9
|
import {
|
|
10
10
|
requireConfig
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JX2RLGOM.js";
|
|
12
12
|
import {
|
|
13
13
|
closePrompt,
|
|
14
14
|
confirm
|
|
15
15
|
} from "./chunk-WRRUCCVZ.js";
|
|
16
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
4
|
+
} from "./chunk-UQDMUKLP.js";
|
|
5
5
|
import {
|
|
6
6
|
apiUrl,
|
|
7
7
|
syncHeaders
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-34JCN66H.js";
|
|
9
9
|
import {
|
|
10
10
|
requireConfig
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JX2RLGOM.js";
|
|
12
12
|
import {
|
|
13
13
|
ask,
|
|
14
14
|
closePrompt
|
|
15
15
|
} from "./chunk-WRRUCCVZ.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-XZE2XP6O.js";
|
|
17
17
|
import "./chunk-UYTVTYNB.js";
|
|
18
18
|
|
|
19
19
|
// src/commands/research.ts
|
|
@@ -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
package/dist/ci-LBOCMRKZ.js
DELETED