@duro-app/cli 1.2.0 → 1.4.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 +77 -25
- package/dist/bin.js +2 -1
- package/dist/bin.js.map +1 -1
- package/dist/commands/hook.d.ts +7 -1
- package/dist/commands/hook.d.ts.map +1 -1
- package/dist/commands/hook.js +160 -5
- package/dist/commands/hook.js.map +1 -1
- package/dist/disambiguation.d.ts +24 -0
- package/dist/disambiguation.d.ts.map +1 -0
- package/dist/disambiguation.js +54 -0
- package/dist/disambiguation.js.map +1 -0
- package/dist/format.d.ts +6 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +15 -0
- package/dist/format.js.map +1 -1
- package/dist/hook-script.d.ts +30 -0
- package/dist/hook-script.d.ts.map +1 -0
- package/dist/hook-script.js +60 -0
- package/dist/hook-script.js.map +1 -0
- package/dist/manifest.d.ts +1 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +14 -6
- package/dist/manifest.js.map +1 -1
- package/package.json +5 -5
- package/registry.json +120 -29
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The generated Claude Code SessionStart hook, and the wiring it needs.
|
|
3
|
+
*
|
|
4
|
+
* Kept as data (not prose in a README) so `duro hook install` can write it and
|
|
5
|
+
* `duro hook install --check` can byte-compare it: every consuming repo runs
|
|
6
|
+
* the same script, and an upgrade is a regenerate rather than nine hand-edits.
|
|
7
|
+
*/
|
|
8
|
+
/** Repo-relative paths the hook owns. */
|
|
9
|
+
export const HOOK_SCRIPT_PATH = '.claude/hooks/duro-catalog.sh';
|
|
10
|
+
export const HOOK_SETTINGS_PATH = '.claude/settings.json';
|
|
11
|
+
export const HOOK_CACHE_PATH = '.claude/.duro-session.cache';
|
|
12
|
+
/**
|
|
13
|
+
* Glob, not the bare path: the script stages the fetch through
|
|
14
|
+
* "<cache>.tmp", and a session-start hook killed mid-npx leaves that behind.
|
|
15
|
+
*/
|
|
16
|
+
export const HOOK_CACHE_IGNORE = `${HOOK_CACHE_PATH}*`;
|
|
17
|
+
/** Repo-specific caveats, appended by the hook and never touched by install. */
|
|
18
|
+
export const HOOK_NOTES_PATH = '.claude/duro-hook.local.md';
|
|
19
|
+
/** What settings.json runs. Also the marker install matches on. */
|
|
20
|
+
export const HOOK_COMMAND = `sh ${HOOK_SCRIPT_PATH}`;
|
|
21
|
+
/**
|
|
22
|
+
* Floor for the npx pin. `hook session-start` landed in 1.2.0; on older
|
|
23
|
+
* versions the unknown "hook" positional falls through to lookup/search and
|
|
24
|
+
* caches junk. Raise this only when the script needs newer CLI behavior —
|
|
25
|
+
* a floating pin keeps patch releases from showing up as --check drift.
|
|
26
|
+
*/
|
|
27
|
+
export const HOOK_MIN_CLI = '1.2.0';
|
|
28
|
+
export const HOOK_SCRIPT = `#!/bin/sh
|
|
29
|
+
# Duro design-system session bootstrap — GENERATED by \`duro hook install\`.
|
|
30
|
+
# Regenerate: npx -y @duro-app/cli hook install (--check verifies it in CI)
|
|
31
|
+
#
|
|
32
|
+
# Injects the consult-first preamble plus the component catalog into agent
|
|
33
|
+
# context at SessionStart, so "check the design system before building UI" is
|
|
34
|
+
# ambient context instead of a step an agent has to remember.
|
|
35
|
+
#
|
|
36
|
+
# Do not hand-edit. Repo-specific caveats go in
|
|
37
|
+
# ${HOOK_NOTES_PATH} — appended below, and left alone by regeneration.
|
|
38
|
+
cache="${HOOK_CACHE_PATH}"
|
|
39
|
+
notes="${HOOK_NOTES_PATH}"
|
|
40
|
+
|
|
41
|
+
# npx resolution dominates session start; the catalog only changes on upgrade.
|
|
42
|
+
if [ ! -s "$cache" ] || [ -n "$(find "$cache" -mtime +7 2>/dev/null)" ]; then
|
|
43
|
+
if npx -y @duro-app/cli@^${HOOK_MIN_CLI} hook session-start >"$cache.tmp" 2>/dev/null; then
|
|
44
|
+
mv "$cache.tmp" "$cache"
|
|
45
|
+
else
|
|
46
|
+
rm -f "$cache.tmp"
|
|
47
|
+
fi
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# Offline with no cache yet: stay silent rather than fail the session.
|
|
51
|
+
[ -s "$cache" ] || exit 0
|
|
52
|
+
cat "$cache"
|
|
53
|
+
|
|
54
|
+
if [ -s "$notes" ]; then
|
|
55
|
+
echo
|
|
56
|
+
cat "$notes"
|
|
57
|
+
fi
|
|
58
|
+
`;
|
|
59
|
+
export const GITIGNORE_BLOCK = `# Duro session-hook cache (duro hook install)\n${HOOK_CACHE_IGNORE}\n`;
|
|
60
|
+
//# sourceMappingURL=hook-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-script.js","sourceRoot":"","sources":["../src/hook-script.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,+BAA+B,CAAA;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAA;AACzD,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAA;AAC5D;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,eAAe,GAAG,CAAA;AACtD,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,4BAA4B,CAAA;AAE3D,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAA;AAEnC,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;IASvB,eAAe;SACV,eAAe;SACf,eAAe;;;;6BAIK,YAAY;;;;;;;;;;;;;;;CAexC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,kDAAkD,iBAAiB,IAAI,CAAA"}
|
package/dist/manifest.d.ts
CHANGED
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAGjD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IACxF,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IAC7E,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAA;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,QAAQ,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAGjD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IACxF,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;IAC7E,OAAO,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CAAA;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,QAAQ,EAAE,WAAW,EA6FjC,CAAA;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;EAmBhE"}
|
package/dist/manifest.js
CHANGED
|
@@ -55,20 +55,27 @@ export const COMMANDS = [
|
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
name: 'hook',
|
|
58
|
-
summary: '
|
|
58
|
+
summary: 'Claude Code SessionStart hook: session-start prints the consult-first preamble + full catalog; install wires it into the current repo',
|
|
59
59
|
args: [
|
|
60
60
|
{
|
|
61
61
|
name: 'event',
|
|
62
62
|
required: true,
|
|
63
|
-
description: 'session-start (the
|
|
63
|
+
description: 'session-start (print the bootstrap) | install (wire it into this repo)',
|
|
64
|
+
valuesFrom: 'events',
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
flags: [
|
|
68
|
+
{
|
|
69
|
+
name: 'check',
|
|
70
|
+
type: 'boolean',
|
|
71
|
+
description: 'install: report drift and exit 1 instead of writing (for CI)',
|
|
64
72
|
},
|
|
65
73
|
],
|
|
66
|
-
flags: [],
|
|
67
74
|
returns: {
|
|
68
|
-
shape: '{preamble: string, entries: ListEntry[]}',
|
|
69
|
-
description: '
|
|
75
|
+
shape: '{preamble: string, entries: ListEntry[]} | {ok: boolean, changes: FileChange[]}',
|
|
76
|
+
description: 'session-start: the preamble plus the same entries as duro list. install: what each wired file did',
|
|
70
77
|
},
|
|
71
|
-
examples: ['duro hook session-start'],
|
|
78
|
+
examples: ['duro hook session-start', 'duro hook install', 'duro hook install --check'],
|
|
72
79
|
},
|
|
73
80
|
{
|
|
74
81
|
name: 'mcp',
|
|
@@ -97,6 +104,7 @@ export function buildManifest(registry, version) {
|
|
|
97
104
|
enums: {
|
|
98
105
|
names: lookupNames(registry),
|
|
99
106
|
kinds: ['components', 'recipes', 'tokens'],
|
|
107
|
+
events: ['session-start', 'install'],
|
|
100
108
|
},
|
|
101
109
|
};
|
|
102
110
|
}
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AAgBzC,MAAM,CAAC,MAAM,QAAQ,GAAkB;IACrC;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EACL,+LAA+L;QACjM,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,IAAI;gBACd,WAAW,EACT,uGAAuG;gBACzG,UAAU,EAAE,OAAO;aACpB;SACF;QACD,KAAK,EAAE;YACL,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAC;YACtF,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAC;YAChE,EAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,oCAAoC,EAAC;SAC1F;QACD,OAAO,EAAE;YACP,KAAK,EACH,wFAAwF;YAC1F,WAAW,EAAE,uEAAuE;SACrF;QACD,QAAQ,EAAE;YACR,aAAa;YACb,yBAAyB;YACzB,+BAA+B;YAC/B,uBAAuB;SACxB;QACD,OAAO,EAAE,aAAa;KACvB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,yCAAyC;QAClD,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,8CAA8C;gBAC3D,UAAU,EAAE,OAAO;aACpB;SACF;QACD,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,wCAAwC,EAAC;QACtF,QAAQ,EAAE,CAAC,WAAW,EAAE,0BAA0B,CAAC;QACnD,OAAO,EAAE,WAAW;KACrB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,8EAA8E;QACvF,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,mDAAmD,EAAC;QAC9F,QAAQ,EAAE,CAAC,sBAAsB,CAAC;QAClC,OAAO,EAAE,eAAe;KACzB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@duro-app/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Machine-queryable docs for the Duro design system: components, props, recipes, tokens and rules as CLI output, JSON, or an MCP server.",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@modelcontextprotocol/sdk": ">=1.0.0",
|
|
48
|
-
"@duro-app/ui": "^1.
|
|
48
|
+
"@duro-app/ui": "^1.4.0"
|
|
49
49
|
},
|
|
50
50
|
"peerDependenciesMeta": {
|
|
51
51
|
"@duro-app/ui": {
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
"@types/node": "^24.0.0",
|
|
61
61
|
"ts-morph": "^26.0.0",
|
|
62
62
|
"typescript": "^5.7.0",
|
|
63
|
-
"@duro-app/eslint-plugin": "^1.
|
|
64
|
-
"@duro-app/tokens": "^1.
|
|
65
|
-
"@duro-app/ui": "^1.
|
|
63
|
+
"@duro-app/eslint-plugin": "^1.4.0",
|
|
64
|
+
"@duro-app/tokens": "^1.4.0",
|
|
65
|
+
"@duro-app/ui": "^1.4.0"
|
|
66
66
|
},
|
|
67
67
|
"scripts": {
|
|
68
68
|
"registry": "node scripts/build-registry.mjs",
|