@wildorder/nightshift 0.1.0 → 0.2.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 (41) hide show
  1. package/dist/cli.js +229 -10
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +4 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +7 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/index.d.ts +5 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +5 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/init-project.d.ts +18 -0
  12. package/dist/init-project.d.ts.map +1 -0
  13. package/dist/init-project.js +259 -0
  14. package/dist/init-project.js.map +1 -0
  15. package/dist/install-prefs.d.ts +17 -0
  16. package/dist/install-prefs.d.ts.map +1 -0
  17. package/dist/install-prefs.js +55 -0
  18. package/dist/install-prefs.js.map +1 -0
  19. package/dist/install-skills.d.ts +83 -0
  20. package/dist/install-skills.d.ts.map +1 -0
  21. package/dist/install-skills.js +311 -0
  22. package/dist/install-skills.js.map +1 -0
  23. package/dist/install-wizard.d.ts +56 -0
  24. package/dist/install-wizard.d.ts.map +1 -0
  25. package/dist/install-wizard.js +166 -0
  26. package/dist/install-wizard.js.map +1 -0
  27. package/dist/package-assets.d.ts +3 -0
  28. package/dist/package-assets.d.ts.map +1 -0
  29. package/dist/package-assets.js +13 -0
  30. package/dist/package-assets.js.map +1 -0
  31. package/dist/skill-roots.d.ts +51 -0
  32. package/dist/skill-roots.d.ts.map +1 -0
  33. package/dist/skill-roots.js +181 -0
  34. package/dist/skill-roots.js.map +1 -0
  35. package/package.json +3 -1
  36. package/skills/init-project/SKILL.md +196 -0
  37. package/skills/plan-program/SKILL.md +274 -0
  38. package/templates/AGENTS.md +29 -0
  39. package/templates/CLAUDE.md +7 -0
  40. package/templates/universal-directives.md +50 -0
  41. package/templates/vision.md +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../src/init-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type InstallScope, type SkillTarget } from "./skill-roots.js";
2
+ /**
3
+ * Which agent tools a developer uses is a property of the developer, not of
4
+ * any one repository — so the wizard's answer is remembered per machine.
5
+ * Without this, the `prepare` hook and every later non-interactive run would
6
+ * silently re-derive defaults and undo the choice.
7
+ */
8
+ export declare const PREFS_PATH: string;
9
+ export type PreferredScope = InstallScope | "both";
10
+ export interface InstallPrefs {
11
+ targets: SkillTarget[];
12
+ scope: PreferredScope;
13
+ }
14
+ /** Returns undefined when no usable preference has been recorded yet. */
15
+ export declare function loadInstallPrefs(home?: string): Promise<InstallPrefs | undefined>;
16
+ export declare function saveInstallPrefs(prefs: InstallPrefs, home?: string): Promise<string>;
17
+ //# sourceMappingURL=install-prefs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-prefs.d.ts","sourceRoot":"","sources":["../src/install-prefs.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,QAAsC,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,MAAM,CAAC;AAQnD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;CACvB;AAMD,yEAAyE;AACzE,wBAAsB,gBAAgB,CACpC,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA2BnC;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,YAAY,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CASjB"}
@@ -0,0 +1,55 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { z } from "zod";
5
+ import { ALL_TARGETS } from "./skill-roots.js";
6
+ /**
7
+ * Which agent tools a developer uses is a property of the developer, not of
8
+ * any one repository — so the wizard's answer is remembered per machine.
9
+ * Without this, the `prepare` hook and every later non-interactive run would
10
+ * silently re-derive defaults and undo the choice.
11
+ */
12
+ export const PREFS_PATH = join(".nightshift", "install.json");
13
+ const prefsSchema = z.object({
14
+ schemaVersion: z.literal(1),
15
+ targets: z.array(z.string()).default([]),
16
+ scope: z.enum(["user", "project", "both"]).default("user"),
17
+ });
18
+ function prefsFile(home) {
19
+ return join(resolve(home ?? homedir()), PREFS_PATH);
20
+ }
21
+ /** Returns undefined when no usable preference has been recorded yet. */
22
+ export async function loadInstallPrefs(home) {
23
+ let raw;
24
+ try {
25
+ raw = await readFile(prefsFile(home), "utf8");
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ let parsed;
31
+ try {
32
+ parsed = JSON.parse(raw);
33
+ }
34
+ catch {
35
+ // A hand-corrupted preference file must not break installs; the caller
36
+ // falls back to detection.
37
+ return undefined;
38
+ }
39
+ const result = prefsSchema.safeParse(parsed);
40
+ if (!result.success)
41
+ return undefined;
42
+ // Unknown targets are dropped rather than rejected, so a file written by a
43
+ // newer version stays usable after a downgrade.
44
+ const targets = result.data.targets.filter((target) => ALL_TARGETS.includes(target));
45
+ if (targets.length === 0)
46
+ return undefined;
47
+ return { targets, scope: result.data.scope };
48
+ }
49
+ export async function saveInstallPrefs(prefs, home) {
50
+ const path = prefsFile(home);
51
+ await mkdir(dirname(path), { recursive: true });
52
+ await writeFile(path, `${JSON.stringify({ schemaVersion: 1, ...prefs }, null, 2)}\n`, "utf8");
53
+ return path;
54
+ }
55
+ //# sourceMappingURL=install-prefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-prefs.js","sourceRoot":"","sources":["../src/install-prefs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAuC,MAAM,kBAAkB,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAI9D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAC3D,CAAC,CAAC;AAOH,SAAS,SAAS,CAAC,IAAwB;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;AACtD,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAa;IAEb,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,2BAA2B;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAEtC,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAyB,EAAE,CAC3E,WAAW,CAAC,QAAQ,CAAC,MAAqB,CAAC,CAC5C,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAmB,EACnB,IAAa;IAEb,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CACb,IAAI,EACJ,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAC9D,MAAM,CACP,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { type InstallScope, type SkillTarget } from "./skill-roots.js";
2
+ export { ALL_TARGETS, DEFAULT_TARGETS, detectTargets, overrideEnvName, parseRootOverrides, parseTargets, type DetectedTarget, type InstallScope, type RootSource, type SkillTarget, } from "./skill-roots.js";
3
+ /**
4
+ * The skills that ship: the two human-judgment steps that sit outside the
5
+ * automated loop — deciding how the project is set up, and deciding what to
6
+ * build. Everything downstream of planning is a CLI command that composes
7
+ * its own brief and spawns clean agents.
8
+ */
9
+ export declare const WORKFLOWS: readonly ["init-project", "plan-program"];
10
+ /**
11
+ * Skills this package used to install and now removes. Empty so far — kept
12
+ * because the mechanism matters: a retired skill left in a skills directory
13
+ * keeps instructing an agent to do work that has since moved into a command.
14
+ * Never list another package's skills here (program-pipeline's included);
15
+ * retirement is only for names this package itself installed.
16
+ */
17
+ export declare const RETIRED_WORKFLOWS: readonly [];
18
+ export type Workflow = (typeof WORKFLOWS)[number];
19
+ export type RetiredWorkflow = (typeof RETIRED_WORKFLOWS)[number];
20
+ export type KnownWorkflow = Workflow | RetiredWorkflow;
21
+ export interface InstallSkillsOptions {
22
+ cwd: string;
23
+ targets: SkillTarget[];
24
+ force?: boolean;
25
+ home?: string;
26
+ /**
27
+ * Where the skills land. Defaults to project scope so existing programmatic
28
+ * callers keep their behavior; the CLI chooses user scope explicitly.
29
+ */
30
+ scopes?: InstallScope[];
31
+ /**
32
+ * Remove project-scope copies that this package generated and the user has
33
+ * not edited. Project skills shadow user skills in most harnesses, so a
34
+ * user-scope install is silently ineffective until the stale copies go.
35
+ */
36
+ pruneProject?: boolean;
37
+ /** Per-target root overrides, from `--root <target>=<path>`. */
38
+ roots?: Partial<Record<SkillTarget, string>>;
39
+ env?: NodeJS.ProcessEnv;
40
+ }
41
+ export interface DefinitionWarning {
42
+ workflow: KnownWorkflow;
43
+ kind: "command" | "skill";
44
+ scope: InstallScope;
45
+ target: SkillTarget;
46
+ path: string;
47
+ packageManaged: boolean;
48
+ }
49
+ export interface InstallSkillsResult {
50
+ installed: string[];
51
+ updated: string[];
52
+ skipped: string[];
53
+ conflicts: string[];
54
+ warnings: DefinitionWarning[];
55
+ /** Project-scope copies removed because their marker proved them unmodified. */
56
+ pruned: string[];
57
+ /** Project-scope copies left alone because the user had edited them. */
58
+ pruneSkipped: string[];
59
+ /** Retired skills removed because their marker proved them unmodified. */
60
+ retired: string[];
61
+ /** Retired skills left in place because the user had edited them. */
62
+ retiredKept: string[];
63
+ aborted: boolean;
64
+ }
65
+ export interface ProjectCopies {
66
+ /** Generated by this package and unmodified — safe to remove. */
67
+ managed: string[];
68
+ /** Edited since generation, or never ours — only a human should touch these. */
69
+ modified: string[];
70
+ }
71
+ /**
72
+ * Project-scope skill files for the given targets. Project skills shadow
73
+ * user-scope ones, so the caller needs this before a user-scope install to
74
+ * know whether the install would actually take effect.
75
+ */
76
+ export declare function findProjectCopies(cwd: string, targets: SkillTarget[], options?: {
77
+ home?: string;
78
+ env?: NodeJS.ProcessEnv;
79
+ roots?: Partial<Record<SkillTarget, string>>;
80
+ }): Promise<ProjectCopies>;
81
+ export declare function installSkills(input: InstallSkillsOptions): Promise<InstallSkillsResult>;
82
+ export declare function doctor(): Promise<string[]>;
83
+ //# sourceMappingURL=install-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-skills.d.ts","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"AAKA,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAE1B;;;;;GAKG;AACH,eAAO,MAAM,SAAS,2CAA4C,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,aAAc,CAAC;AAE7C,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,eAAe,CAAC;AAQvD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,gFAAgF;IAChF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,wEAAwE;IACxE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qEAAqE;IACrE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAsGD,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;CAAO,GACrG,OAAO,CAAC,aAAa,CAAC,CAwBxB;AA+ED,wBAAsB,aAAa,CACjC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CA6G9B;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBhD"}
@@ -0,0 +1,311 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readFile, rm, rmdir, writeFile } from "node:fs/promises";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { PACKAGE_ROOT } from "./package-assets.js";
6
+ import { detectTargets, pathExists, scanRoots, } from "./skill-roots.js";
7
+ export { ALL_TARGETS, DEFAULT_TARGETS, detectTargets, overrideEnvName, parseRootOverrides, parseTargets, } from "./skill-roots.js";
8
+ /**
9
+ * The skills that ship: the two human-judgment steps that sit outside the
10
+ * automated loop — deciding how the project is set up, and deciding what to
11
+ * build. Everything downstream of planning is a CLI command that composes
12
+ * its own brief and spawns clean agents.
13
+ */
14
+ export const WORKFLOWS = ["init-project", "plan-program"];
15
+ /**
16
+ * Skills this package used to install and now removes. Empty so far — kept
17
+ * because the mechanism matters: a retired skill left in a skills directory
18
+ * keeps instructing an agent to do work that has since moved into a command.
19
+ * Never list another package's skills here (program-pipeline's included);
20
+ * retirement is only for names this package itself installed.
21
+ */
22
+ export const RETIRED_WORKFLOWS = [];
23
+ /** Every name this package has ever installed, for scanning and cleanup. */
24
+ const ALL_KNOWN_WORKFLOWS = [
25
+ ...WORKFLOWS,
26
+ ...RETIRED_WORKFLOWS,
27
+ ];
28
+ const MARKER_PATTERN = /<!-- nightshift:sha256=([a-f0-9]{64}) -->\n?/u;
29
+ const COMMAND_EXTENSIONS = [".md", ".mdc", ".markdown", ".txt"];
30
+ function normalize(content) {
31
+ return content.replaceAll("\r\n", "\n");
32
+ }
33
+ function digest(content) {
34
+ return createHash("sha256").update(normalize(content)).digest("hex");
35
+ }
36
+ function withMarker(source) {
37
+ const normalized = normalize(source);
38
+ const marker = `<!-- nightshift:sha256=${digest(normalized)} -->\n`;
39
+ const frontmatterEnd = normalized.indexOf("\n---\n", 4);
40
+ if (!normalized.startsWith("---\n") || frontmatterEnd < 0) {
41
+ throw new Error("Skill must contain YAML frontmatter.");
42
+ }
43
+ const insertAt = frontmatterEnd + 5;
44
+ return `${normalized.slice(0, insertAt)}${marker}${normalized.slice(insertAt)}`;
45
+ }
46
+ function generatedFileIsUnmodified(content) {
47
+ const normalized = normalize(content);
48
+ const marker = normalized.match(MARKER_PATTERN);
49
+ if (!marker?.[1])
50
+ return false;
51
+ const withoutMarker = normalized.replace(MARKER_PATTERN, "");
52
+ return digest(withoutMarker) === marker[1];
53
+ }
54
+ function pathKey(path) {
55
+ return process.platform === "win32" ? path.toLowerCase() : path;
56
+ }
57
+ async function findDefinitionWarnings(projectRoot, userHome, detected, targets, destinations) {
58
+ const warnings = [];
59
+ const seen = new Set();
60
+ const selected = detected.filter((entry) => targets.includes(entry.target));
61
+ for (const location of scanRoots(selected, projectRoot, userHome)) {
62
+ for (const workflow of ALL_KNOWN_WORKFLOWS) {
63
+ const candidates = location.kind === "skill"
64
+ ? [join(location.root, workflow, "SKILL.md")]
65
+ : COMMAND_EXTENSIONS.map((extension) => join(location.root, `${workflow}${extension}`));
66
+ for (const candidate of candidates) {
67
+ const key = pathKey(candidate);
68
+ if (destinations.has(key) ||
69
+ seen.has(key) ||
70
+ !(await pathExists(candidate))) {
71
+ continue;
72
+ }
73
+ seen.add(key);
74
+ const content = await readFile(candidate, "utf8");
75
+ warnings.push({
76
+ workflow,
77
+ kind: location.kind,
78
+ scope: location.scope,
79
+ target: location.target,
80
+ path: location.scope === "project"
81
+ ? join(".", candidate.slice(projectRoot.length + 1))
82
+ : candidate,
83
+ packageManaged: location.kind === "skill" && generatedFileIsUnmodified(content),
84
+ });
85
+ }
86
+ }
87
+ }
88
+ return warnings;
89
+ }
90
+ /** Best-effort cleanup so pruning does not leave empty scaffolding behind. */
91
+ async function removeIfEmpty(path) {
92
+ try {
93
+ await rmdir(path);
94
+ }
95
+ catch {
96
+ // Still has content, or never existed. Either way there is nothing to do.
97
+ }
98
+ }
99
+ /**
100
+ * Project-scope skill files for the given targets. Project skills shadow
101
+ * user-scope ones, so the caller needs this before a user-scope install to
102
+ * know whether the install would actually take effect.
103
+ */
104
+ export async function findProjectCopies(cwd, targets, options = {}) {
105
+ const root = resolve(cwd);
106
+ const detected = await detectTargets({
107
+ home: resolve(options.home ?? homedir()),
108
+ ...(options.env ? { env: options.env } : {}),
109
+ ...(options.roots ? { roots: options.roots } : {}),
110
+ });
111
+ const copies = { managed: [], modified: [] };
112
+ for (const entry of detected) {
113
+ if (!targets.includes(entry.target))
114
+ continue;
115
+ for (const workflow of ALL_KNOWN_WORKFLOWS) {
116
+ const label = join(entry.projectRoot, workflow, "SKILL.md");
117
+ const path = join(root, label);
118
+ if (!(await pathExists(path)))
119
+ continue;
120
+ if (generatedFileIsUnmodified(await readFile(path, "utf8"))) {
121
+ copies.managed.push(label);
122
+ }
123
+ else {
124
+ copies.modified.push(label);
125
+ }
126
+ }
127
+ }
128
+ return copies;
129
+ }
130
+ async function pruneProjectCopies(projectRoot, detected, targets, result) {
131
+ for (const entry of detected) {
132
+ if (!targets.includes(entry.target))
133
+ continue;
134
+ const skillsRoot = join(projectRoot, entry.projectRoot);
135
+ for (const workflow of ALL_KNOWN_WORKFLOWS) {
136
+ const path = join(skillsRoot, workflow, "SKILL.md");
137
+ if (!(await pathExists(path)))
138
+ continue;
139
+ const label = join(entry.projectRoot, workflow, "SKILL.md");
140
+ if (generatedFileIsUnmodified(await readFile(path, "utf8"))) {
141
+ await rm(path);
142
+ await removeIfEmpty(dirname(path));
143
+ result.pruned.push(label);
144
+ }
145
+ else {
146
+ result.pruneSkipped.push(label);
147
+ }
148
+ }
149
+ await removeIfEmpty(skillsRoot);
150
+ }
151
+ }
152
+ /**
153
+ * Remove retired skills from **both** scopes, whatever scope this run is
154
+ * installing into.
155
+ *
156
+ * Scoping this to the install's own scopes was wrong: a stale skill almost
157
+ * always sits in the scope you *stopped* using. A project installed before
158
+ * the move to user-scope defaults keeps its project copies, and a later
159
+ * user-scope install would never look at them — leaving the retired skills
160
+ * exactly where the agent still reads them.
161
+ *
162
+ * Called only after a successful install, for the same reason pruning is: a
163
+ * run that aborted on a conflict must not have deleted anything.
164
+ */
165
+ async function retireWorkflows(projectRoot, detected, targets, result) {
166
+ const scopes = ["user", "project"];
167
+ const seen = new Set();
168
+ for (const entry of detected) {
169
+ if (!targets.includes(entry.target))
170
+ continue;
171
+ for (const scope of scopes) {
172
+ const skillsRoot = scope === "user"
173
+ ? entry.userRoot
174
+ : join(projectRoot, entry.projectRoot);
175
+ for (const workflow of RETIRED_WORKFLOWS) {
176
+ const path = join(skillsRoot, workflow, "SKILL.md");
177
+ const key = pathKey(path);
178
+ // Root overrides can point two targets at one directory.
179
+ if (seen.has(key))
180
+ continue;
181
+ seen.add(key);
182
+ if (!(await pathExists(path)))
183
+ continue;
184
+ const label = scope === "user"
185
+ ? path
186
+ : join(entry.projectRoot, workflow, "SKILL.md");
187
+ if (generatedFileIsUnmodified(await readFile(path, "utf8"))) {
188
+ await rm(path);
189
+ await removeIfEmpty(dirname(path));
190
+ result.retired.push(label);
191
+ }
192
+ else {
193
+ result.retiredKept.push(label);
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ export async function installSkills(input) {
200
+ const root = resolve(input.cwd);
201
+ const userHome = resolve(input.home ?? homedir());
202
+ const scopes = input.scopes ?? ["project"];
203
+ const result = {
204
+ installed: [],
205
+ updated: [],
206
+ skipped: [],
207
+ conflicts: [],
208
+ warnings: [],
209
+ pruned: [],
210
+ pruneSkipped: [],
211
+ retired: [],
212
+ retiredKept: [],
213
+ aborted: false,
214
+ };
215
+ const detected = await detectTargets({
216
+ home: userHome,
217
+ ...(input.env ? { env: input.env } : {}),
218
+ ...(input.roots ? { roots: input.roots } : {}),
219
+ });
220
+ const byTarget = new Map(detected.map((entry) => [entry.target, entry]));
221
+ const plans = [];
222
+ const planned = new Set();
223
+ for (const scope of scopes) {
224
+ for (const target of input.targets) {
225
+ const entry = byTarget.get(target);
226
+ if (!entry)
227
+ continue;
228
+ const skillsRoot = scope === "user" ? entry.userRoot : join(root, entry.projectRoot);
229
+ for (const workflow of WORKFLOWS) {
230
+ const destination = join(skillsRoot, workflow, "SKILL.md");
231
+ const key = pathKey(destination);
232
+ // Overrides can point two targets at one directory; write it once.
233
+ if (planned.has(key))
234
+ continue;
235
+ planned.add(key);
236
+ const label = scope === "user"
237
+ ? destination
238
+ : join(entry.projectRoot, workflow, "SKILL.md");
239
+ const source = await readFile(join(PACKAGE_ROOT, "skills", workflow, "SKILL.md"), "utf8");
240
+ const desired = withMarker(source);
241
+ if (!(await pathExists(destination))) {
242
+ plans.push({ label, destination, desired, action: "install" });
243
+ continue;
244
+ }
245
+ const current = await readFile(destination, "utf8");
246
+ if (normalize(current) === desired) {
247
+ plans.push({ label, destination, desired, action: "skip" });
248
+ }
249
+ else if (input.force || generatedFileIsUnmodified(current)) {
250
+ plans.push({ label, destination, desired, action: "update" });
251
+ }
252
+ else {
253
+ plans.push({ label, destination, desired, action: "conflict" });
254
+ }
255
+ }
256
+ }
257
+ }
258
+ result.warnings = await findDefinitionWarnings(root, userHome, detected, input.targets, planned);
259
+ result.conflicts = plans
260
+ .filter(({ action }) => action === "conflict")
261
+ .map(({ label }) => label);
262
+ result.skipped = plans
263
+ .filter(({ action }) => action === "skip")
264
+ .map(({ label }) => label);
265
+ if (result.conflicts.length > 0) {
266
+ result.aborted = true;
267
+ return result;
268
+ }
269
+ for (const plan of plans) {
270
+ if (plan.action === "install") {
271
+ await mkdir(dirname(plan.destination), { recursive: true });
272
+ await writeFile(plan.destination, plan.desired, "utf8");
273
+ result.installed.push(plan.label);
274
+ }
275
+ else if (plan.action === "update") {
276
+ await writeFile(plan.destination, plan.desired, "utf8");
277
+ result.updated.push(plan.label);
278
+ }
279
+ }
280
+ // Retired skills go from both scopes regardless of where this run installs:
281
+ // a stale copy anywhere keeps telling an agent to do work that is now a
282
+ // command.
283
+ await retireWorkflows(root, detected, input.targets, result);
284
+ // Only after a clean user-scope install: pruning first would delete the
285
+ // developer's working skills if the install then aborted.
286
+ if (input.pruneProject && scopes.includes("user") && !scopes.includes("project")) {
287
+ await pruneProjectCopies(root, detected, input.targets, result);
288
+ }
289
+ return result;
290
+ }
291
+ export async function doctor() {
292
+ const problems = [];
293
+ for (const workflow of WORKFLOWS) {
294
+ const path = join(PACKAGE_ROOT, "skills", workflow, "SKILL.md");
295
+ if (!(await pathExists(path))) {
296
+ problems.push(`Missing packaged skill: ${workflow}`);
297
+ }
298
+ }
299
+ for (const template of [
300
+ "vision.md",
301
+ "AGENTS.md",
302
+ "CLAUDE.md",
303
+ "universal-directives.md",
304
+ ]) {
305
+ if (!(await pathExists(join(PACKAGE_ROOT, "templates", template)))) {
306
+ problems.push(`Missing packaged template: ${template}`);
307
+ }
308
+ }
309
+ return problems;
310
+ }
311
+ //# sourceMappingURL=install-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-skills.js","sourceRoot":"","sources":["../src/install-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { type PreferredScope } from "./install-prefs.js";
2
+ import { type PromptStreams } from "./prompt.js";
3
+ import { type DetectedTarget, type InstallScope, type SkillTarget } from "./skill-roots.js";
4
+ export interface SkillPlanOptions {
5
+ cwd: string;
6
+ /** From `--targets`; presence alone suppresses the wizard. */
7
+ explicitTargets?: SkillTarget[];
8
+ /** From `--scope`. */
9
+ explicitScope?: PreferredScope;
10
+ /** From `--prune` / `--no-prune`. */
11
+ explicitPrune?: boolean;
12
+ /** From `--root <target>=<path>`. */
13
+ roots?: Partial<Record<SkillTarget, string>>;
14
+ /** From `--yes`: take the detected defaults without asking. */
15
+ yes?: boolean;
16
+ home?: string;
17
+ env?: NodeJS.ProcessEnv;
18
+ streams?: PromptStreams;
19
+ log?: (line: string) => void;
20
+ }
21
+ export interface SkillPlan {
22
+ targets: SkillTarget[];
23
+ scopes: InstallScope[];
24
+ pruneProject: boolean;
25
+ /** True when the user backed out; the caller must not write anything. */
26
+ cancelled: boolean;
27
+ detected: DetectedTarget[];
28
+ }
29
+ /** The option surface `install` and `setup` share, as plain values. */
30
+ export interface InstallArgvOptions {
31
+ cwd: string;
32
+ targets?: string;
33
+ scope?: string;
34
+ root: string[];
35
+ force: boolean;
36
+ yes: boolean;
37
+ prune?: boolean;
38
+ }
39
+ /**
40
+ * Rebuild a run's skill options as an `install` argv, so `setup` can hand off
41
+ * to the CLI it just installed rather than continuing in its own process —
42
+ * where the code in memory predates the files on disk.
43
+ *
44
+ * Every option must survive the round trip. Dropping `--scope` here would
45
+ * silently install to a different root than the user asked for, which is the
46
+ * exact class of failure this handoff exists to prevent.
47
+ */
48
+ export declare function installArgv(options: InstallArgvOptions, pruneCameFromCli: boolean): string[];
49
+ export declare function scopesFor(scope: PreferredScope): InstallScope[];
50
+ /**
51
+ * Decide what to install and where. Interactive only when a human is on both
52
+ * ends of the terminal and has not already answered on the command line;
53
+ * every other path resolves silently from detection and saved preferences.
54
+ */
55
+ export declare function planSkillInstall(options: SkillPlanOptions): Promise<SkillPlan>;
56
+ //# sourceMappingURL=install-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-wizard.d.ts","sourceRoot":"","sources":["../src/install-wizard.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;IAChC,sBAAsB;IACtB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,+DAA+D;IAC/D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,kBAAkB,EAC3B,gBAAgB,EAAE,OAAO,GACxB,MAAM,EAAE,CAUV;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,EAAE,CAG/D;AAMD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,CAAC,CA8HpB"}