@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.
- package/dist/cli.js +229 -10
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/init-project.d.ts +18 -0
- package/dist/init-project.d.ts.map +1 -0
- package/dist/init-project.js +259 -0
- package/dist/init-project.js.map +1 -0
- package/dist/install-prefs.d.ts +17 -0
- package/dist/install-prefs.d.ts.map +1 -0
- package/dist/install-prefs.js +55 -0
- package/dist/install-prefs.js.map +1 -0
- package/dist/install-skills.d.ts +83 -0
- package/dist/install-skills.d.ts.map +1 -0
- package/dist/install-skills.js +311 -0
- package/dist/install-skills.js.map +1 -0
- package/dist/install-wizard.d.ts +56 -0
- package/dist/install-wizard.d.ts.map +1 -0
- package/dist/install-wizard.js +166 -0
- package/dist/install-wizard.js.map +1 -0
- package/dist/package-assets.d.ts +3 -0
- package/dist/package-assets.d.ts.map +1 -0
- package/dist/package-assets.js +13 -0
- package/dist/package-assets.js.map +1 -0
- package/dist/skill-roots.d.ts +51 -0
- package/dist/skill-roots.d.ts.map +1 -0
- package/dist/skill-roots.js +181 -0
- package/dist/skill-roots.js.map +1 -0
- package/package.json +3 -1
- package/skills/init-project/SKILL.md +196 -0
- package/skills/plan-program/SKILL.md +274 -0
- package/templates/AGENTS.md +29 -0
- package/templates/CLAUDE.md +7 -0
- package/templates/universal-directives.md +50 -0
- 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"}
|