@chiralkit/cli 0.1.0-alpha.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/LICENSE +21 -0
- package/README.md +97 -0
- package/dist/add.d.ts +4 -0
- package/dist/add.js +118 -0
- package/dist/add.js.map +1 -0
- package/dist/agents/subprocess.d.ts +10 -0
- package/dist/agents/subprocess.js +43 -0
- package/dist/agents/subprocess.js.map +1 -0
- package/dist/automation/index.d.ts +14 -0
- package/dist/automation/index.js +129 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/install.d.ts +19 -0
- package/dist/automation/install.js +116 -0
- package/dist/automation/install.js.map +1 -0
- package/dist/automation/parsers/audit-report.d.ts +2 -0
- package/dist/automation/parsers/audit-report.js +42 -0
- package/dist/automation/parsers/audit-report.js.map +1 -0
- package/dist/automation/parsers/exit-code.d.ts +2 -0
- package/dist/automation/parsers/exit-code.js +6 -0
- package/dist/automation/parsers/exit-code.js.map +1 -0
- package/dist/automation/parsers/index.d.ts +10 -0
- package/dist/automation/parsers/index.js +13 -0
- package/dist/automation/parsers/index.js.map +1 -0
- package/dist/automation/parsers/observer-snapshot.d.ts +2 -0
- package/dist/automation/parsers/observer-snapshot.js +30 -0
- package/dist/automation/parsers/observer-snapshot.js.map +1 -0
- package/dist/automation/parsers/plan-report.d.ts +2 -0
- package/dist/automation/parsers/plan-report.js +53 -0
- package/dist/automation/parsers/plan-report.js.map +1 -0
- package/dist/automation/parsers/refinement-report.d.ts +2 -0
- package/dist/automation/parsers/refinement-report.js +149 -0
- package/dist/automation/parsers/refinement-report.js.map +1 -0
- package/dist/automation/parsers/types.d.ts +7 -0
- package/dist/automation/parsers/types.js +2 -0
- package/dist/automation/parsers/types.js.map +1 -0
- package/dist/automation/run.d.ts +25 -0
- package/dist/automation/run.js +68 -0
- package/dist/automation/run.js.map +1 -0
- package/dist/automation/schema.d.ts +130 -0
- package/dist/automation/schema.js +46 -0
- package/dist/automation/schema.js.map +1 -0
- package/dist/automation/status.d.ts +16 -0
- package/dist/automation/status.js +56 -0
- package/dist/automation/status.js.map +1 -0
- package/dist/automation/verifiers/index.d.ts +7 -0
- package/dist/automation/verifiers/index.js +5 -0
- package/dist/automation/verifiers/index.js.map +1 -0
- package/dist/automation/verifiers/shell.d.ts +5 -0
- package/dist/automation/verifiers/shell.js +17 -0
- package/dist/automation/verifiers/shell.js.map +1 -0
- package/dist/automation/verifiers/types.d.ts +12 -0
- package/dist/automation/verifiers/types.js +2 -0
- package/dist/automation/verifiers/types.js.map +1 -0
- package/dist/backlog/add.d.ts +10 -0
- package/dist/backlog/add.js +30 -0
- package/dist/backlog/add.js.map +1 -0
- package/dist/backlog/index.d.ts +1 -0
- package/dist/backlog/index.js +53 -0
- package/dist/backlog/index.js.map +1 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.js +110 -0
- package/dist/config.js.map +1 -0
- package/dist/detect.d.ts +2 -0
- package/dist/detect.js +26 -0
- package/dist/detect.js.map +1 -0
- package/dist/doctor-invariants.d.ts +6 -0
- package/dist/doctor-invariants.js +50 -0
- package/dist/doctor-invariants.js.map +1 -0
- package/dist/doctor.d.ts +13 -0
- package/dist/doctor.js +281 -0
- package/dist/doctor.js.map +1 -0
- package/dist/generate.d.ts +1 -0
- package/dist/generate.js +275 -0
- package/dist/generate.js.map +1 -0
- package/dist/generator/agent.d.ts +8 -0
- package/dist/generator/agent.js +66 -0
- package/dist/generator/agent.js.map +1 -0
- package/dist/generator/api.d.ts +7 -0
- package/dist/generator/api.js +42 -0
- package/dist/generator/api.js.map +1 -0
- package/dist/generator/config.d.ts +23 -0
- package/dist/generator/config.js +121 -0
- package/dist/generator/config.js.map +1 -0
- package/dist/generator/parse-response.d.ts +5 -0
- package/dist/generator/parse-response.js +58 -0
- package/dist/generator/parse-response.js.map +1 -0
- package/dist/generator/prompt.d.ts +9 -0
- package/dist/generator/prompt.js +166 -0
- package/dist/generator/prompt.js.map +1 -0
- package/dist/generator/request.d.ts +17 -0
- package/dist/generator/request.js +15 -0
- package/dist/generator/request.js.map +1 -0
- package/dist/generators/prompts/stencil.md +45 -0
- package/dist/generators/prompts/vue.md +54 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +89 -0
- package/dist/init.js.map +1 -0
- package/dist/installers/context.d.ts +4 -0
- package/dist/installers/context.js +120 -0
- package/dist/installers/context.js.map +1 -0
- package/dist/installers/index.d.ts +7 -0
- package/dist/installers/index.js +22 -0
- package/dist/installers/index.js.map +1 -0
- package/dist/installers/installer.d.ts +12 -0
- package/dist/installers/installer.js +30 -0
- package/dist/installers/installer.js.map +1 -0
- package/dist/installers/stencil/django-template/installer.d.ts +10 -0
- package/dist/installers/stencil/django-template/installer.js +77 -0
- package/dist/installers/stencil/django-template/installer.js.map +1 -0
- package/dist/installers/stencil/react/installer.d.ts +9 -0
- package/dist/installers/stencil/react/installer.js +22 -0
- package/dist/installers/stencil/react/installer.js.map +1 -0
- package/dist/installers/stencil/react/manifest.json +17 -0
- package/dist/installers/types.d.ts +24 -0
- package/dist/installers/types.js +2 -0
- package/dist/installers/types.js.map +1 -0
- package/dist/lock.d.ts +25 -0
- package/dist/lock.js +86 -0
- package/dist/lock.js.map +1 -0
- package/dist/manifest.d.ts +1 -0
- package/dist/manifest.js +93 -0
- package/dist/manifest.js.map +1 -0
- package/dist/pm/audit.d.ts +36 -0
- package/dist/pm/audit.js +147 -0
- package/dist/pm/audit.js.map +1 -0
- package/dist/pm/backlog.d.ts +3 -0
- package/dist/pm/backlog.js +123 -0
- package/dist/pm/backlog.js.map +1 -0
- package/dist/pm/brief.d.ts +4 -0
- package/dist/pm/brief.js +18 -0
- package/dist/pm/brief.js.map +1 -0
- package/dist/pm/git.d.ts +3 -0
- package/dist/pm/git.js +43 -0
- package/dist/pm/git.js.map +1 -0
- package/dist/pm/grid.d.ts +8 -0
- package/dist/pm/grid.js +16 -0
- package/dist/pm/grid.js.map +1 -0
- package/dist/pm/index.d.ts +25 -0
- package/dist/pm/index.js +199 -0
- package/dist/pm/index.js.map +1 -0
- package/dist/pm/observe.d.ts +55 -0
- package/dist/pm/observe.js +177 -0
- package/dist/pm/observe.js.map +1 -0
- package/dist/pm/plan.d.ts +54 -0
- package/dist/pm/plan.js +151 -0
- package/dist/pm/plan.js.map +1 -0
- package/dist/pm/refinement-worktree.d.ts +31 -0
- package/dist/pm/refinement-worktree.js +160 -0
- package/dist/pm/refinement-worktree.js.map +1 -0
- package/dist/pm/refinement.d.ts +79 -0
- package/dist/pm/refinement.js +326 -0
- package/dist/pm/refinement.js.map +1 -0
- package/dist/pm/render.d.ts +2 -0
- package/dist/pm/render.js +39 -0
- package/dist/pm/render.js.map +1 -0
- package/dist/pm/roadmap-rings.d.ts +7 -0
- package/dist/pm/roadmap-rings.js +31 -0
- package/dist/pm/roadmap-rings.js.map +1 -0
- package/dist/pm/roadmap.d.ts +2 -0
- package/dist/pm/roadmap.js +118 -0
- package/dist/pm/roadmap.js.map +1 -0
- package/dist/pm/snapshot.d.ts +10 -0
- package/dist/pm/snapshot.js +129 -0
- package/dist/pm/snapshot.js.map +1 -0
- package/dist/pm/types.d.ts +99 -0
- package/dist/pm/types.js +29 -0
- package/dist/pm/types.js.map +1 -0
- package/dist/registry-layout.d.ts +18 -0
- package/dist/registry-layout.js +122 -0
- package/dist/registry-layout.js.map +1 -0
- package/dist/scaffold-registry.d.ts +10 -0
- package/dist/scaffold-registry.js +283 -0
- package/dist/scaffold-registry.js.map +1 -0
- package/dist/scaffold.d.ts +1 -0
- package/dist/scaffold.js +32 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/spec-from-react.d.ts +11 -0
- package/dist/spec-from-react.js +522 -0
- package/dist/spec-from-react.js.map +1 -0
- package/dist/spec-from-stencil.d.ts +7 -0
- package/dist/spec-from-stencil.js +275 -0
- package/dist/spec-from-stencil.js.map +1 -0
- package/dist/spec.d.ts +1 -0
- package/dist/spec.js +60 -0
- package/dist/spec.js.map +1 -0
- package/dist/tokens-map.d.ts +11 -0
- package/dist/tokens-map.js +43 -0
- package/dist/tokens-map.js.map +1 -0
- package/dist/update.d.ts +39 -0
- package/dist/update.js +490 -0
- package/dist/update.js.map +1 -0
- package/dist/workspace-init.d.ts +9 -0
- package/dist/workspace-init.js +119 -0
- package/dist/workspace-init.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { PARSERS } from "./parsers/index.js";
|
|
3
|
+
import { VERIFIERS } from "./verifiers/index.js";
|
|
4
|
+
const verifierKinds = Object.keys(VERIFIERS);
|
|
5
|
+
const parserKinds = Object.keys(PARSERS);
|
|
6
|
+
const cronTrigger = z.object({
|
|
7
|
+
kind: z.literal("cron"),
|
|
8
|
+
expression: z.string().min(1),
|
|
9
|
+
target: z.enum(["launchd"]),
|
|
10
|
+
}).strict();
|
|
11
|
+
const eventTrigger = z.object({
|
|
12
|
+
kind: z.literal("event"),
|
|
13
|
+
expression: z.string().min(1),
|
|
14
|
+
target: z.enum(["launchd"]),
|
|
15
|
+
}).strict();
|
|
16
|
+
const onDemandTrigger = z.object({
|
|
17
|
+
kind: z.literal("on-demand"),
|
|
18
|
+
}).strict();
|
|
19
|
+
const triggerSchema = z.discriminatedUnion("kind", [
|
|
20
|
+
cronTrigger,
|
|
21
|
+
eventTrigger,
|
|
22
|
+
onDemandTrigger,
|
|
23
|
+
]);
|
|
24
|
+
export const AutomationSchema = z.object({
|
|
25
|
+
name: z.string().regex(/^[a-z][a-z0-9-]*$/, "name must match /^[a-z][a-z0-9-]*$/"),
|
|
26
|
+
promise: z.string().min(1).max(200),
|
|
27
|
+
verifier: z.object({
|
|
28
|
+
kind: z.enum(verifierKinds),
|
|
29
|
+
command: z.string().min(1),
|
|
30
|
+
cwd: z.string().default("."),
|
|
31
|
+
timeout_seconds: z.number().int().min(1).max(3600).default(60),
|
|
32
|
+
parse: z.enum(parserKinds).default("exit-code"),
|
|
33
|
+
}),
|
|
34
|
+
trigger: triggerSchema,
|
|
35
|
+
broadcast: z.object({
|
|
36
|
+
on: z.array(z.enum(["drift", "failure"])).min(1),
|
|
37
|
+
channels: z.array(z.string().min(1)).min(1),
|
|
38
|
+
}),
|
|
39
|
+
retention: z.object({
|
|
40
|
+
runs: z.number().int().min(1).default(100),
|
|
41
|
+
}).default({ runs: 100 }),
|
|
42
|
+
});
|
|
43
|
+
export function parseAutomationConfig(raw) {
|
|
44
|
+
return AutomationSchema.parse(raw);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/automation/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface AutomationRow {
|
|
2
|
+
name: string;
|
|
3
|
+
promise: string;
|
|
4
|
+
triggerExpression: string;
|
|
5
|
+
status: "ok" | "drift" | "failure" | "never-run";
|
|
6
|
+
lastRun: string | null;
|
|
7
|
+
lastSummary: string | null;
|
|
8
|
+
nextTrigger: string | null;
|
|
9
|
+
parsed: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface StatusDependencies {
|
|
12
|
+
listDir: (path: string) => Promise<string[]>;
|
|
13
|
+
readText: (path: string) => Promise<string>;
|
|
14
|
+
fileExists: (path: string) => Promise<boolean>;
|
|
15
|
+
}
|
|
16
|
+
export declare function getAutomationStatus(cwd: string, deps: StatusDependencies): Promise<AutomationRow[]>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { parseAutomationConfig } from "./schema.js";
|
|
3
|
+
const SEVERITY = { failure: 0, drift: 1, "never-run": 2, ok: 3 };
|
|
4
|
+
function classify(state) {
|
|
5
|
+
if (!state)
|
|
6
|
+
return "never-run";
|
|
7
|
+
// Drift is a semantic signal that the parser already encoded — the runner
|
|
8
|
+
// conventionally emits exit=1 as its wire, so drift wins over failure when
|
|
9
|
+
// both are set. A non-zero exit without drift means the verifier actually
|
|
10
|
+
// crashed (ENOENT, timeout, unhandled throw) and stays "failure".
|
|
11
|
+
if (state.last_drift)
|
|
12
|
+
return "drift";
|
|
13
|
+
if (state.last_exit !== 0)
|
|
14
|
+
return "failure";
|
|
15
|
+
return "ok";
|
|
16
|
+
}
|
|
17
|
+
export async function getAutomationStatus(cwd, deps) {
|
|
18
|
+
const dir = join(cwd, "automations");
|
|
19
|
+
let names;
|
|
20
|
+
try {
|
|
21
|
+
names = await deps.listDir(dir);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const rows = [];
|
|
27
|
+
for (const name of names) {
|
|
28
|
+
if (name.startsWith("."))
|
|
29
|
+
continue;
|
|
30
|
+
const configPath = join(dir, name, "automation.json");
|
|
31
|
+
if (!(await deps.fileExists(configPath)))
|
|
32
|
+
continue;
|
|
33
|
+
const config = parseAutomationConfig(JSON.parse(await deps.readText(configPath)));
|
|
34
|
+
const statePath = join(dir, name, "state.json");
|
|
35
|
+
let state = null;
|
|
36
|
+
if (await deps.fileExists(statePath)) {
|
|
37
|
+
try {
|
|
38
|
+
state = JSON.parse(await deps.readText(statePath));
|
|
39
|
+
}
|
|
40
|
+
catch { /* ignore */ }
|
|
41
|
+
}
|
|
42
|
+
const status = classify(state);
|
|
43
|
+
rows.push({
|
|
44
|
+
name,
|
|
45
|
+
promise: config.promise,
|
|
46
|
+
triggerExpression: config.trigger.kind === "on-demand" ? "on-demand" : config.trigger.expression,
|
|
47
|
+
status,
|
|
48
|
+
lastRun: state?.last_run ?? null,
|
|
49
|
+
lastSummary: state?.last_summary ?? null,
|
|
50
|
+
nextTrigger: state?.next_trigger ?? null,
|
|
51
|
+
parsed: state?.last_parsed ?? null,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return rows.sort((a, b) => SEVERITY[a.status] - SEVERITY[b.status]);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/automation/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAoBpD,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAW,CAAC;AAE1E,SAAS,QAAQ,CAAC,KAAuB;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC;IAC/B,0EAA0E;IAC1E,2EAA2E;IAC3E,0EAA0E;IAC1E,kEAAkE;IAClE,IAAI,KAAK,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC;IACrC,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,IAAwB;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACrC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QAAC,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IACxC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IAEpB,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAAE,SAAS;QACnD,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,KAAK,GAAqB,IAAI,CAAC;QACnC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAc,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC;YACR,IAAI;YACJ,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU;YAChG,MAAM;YACN,OAAO,EAAE,KAAK,EAAE,QAAQ,IAAI,IAAI;YAChC,WAAW,EAAE,KAAK,EAAE,YAAY,IAAI,IAAI;YACxC,WAAW,EAAE,KAAK,EAAE,YAAY,IAAI,IAAI;YACxC,MAAM,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI;SACnC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Verifier } from "./types.js";
|
|
2
|
+
export declare const VERIFIERS: {
|
|
3
|
+
shell: Verifier<import("./shell.js").ShellVerifierConfig>;
|
|
4
|
+
};
|
|
5
|
+
export type VerifierKind = keyof typeof VERIFIERS;
|
|
6
|
+
export type { Verifier, VerifierContext, VerifierResult } from "./types.js";
|
|
7
|
+
export type { ShellVerifierConfig } from "./shell.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/automation/verifiers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,aAAa;CACmB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
export const shellVerifier = (config, ctx) => {
|
|
3
|
+
return new Promise((resolve) => {
|
|
4
|
+
const start = Date.now();
|
|
5
|
+
const child = execFile("/bin/sh", ["-c", config.command], { cwd: ctx.cwd, env: ctx.env, timeout: ctx.timeoutMs, maxBuffer: 10 * 1024 * 1024 }, (error, stdout, stderr) => {
|
|
6
|
+
const durationMs = Date.now() - start;
|
|
7
|
+
if (error && error.killed) {
|
|
8
|
+
resolve({ exit: 124, stdout: String(stdout), stderr: String(stderr), durationMs });
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const exit = error?.code !== undefined ? Number(error.code) : 0;
|
|
12
|
+
resolve({ exit, stdout: String(stdout), stderr: String(stderr), durationMs });
|
|
13
|
+
});
|
|
14
|
+
void child;
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/automation/verifiers/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK9C,MAAM,CAAC,MAAM,aAAa,GAAkC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;IAC1E,OAAO,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CACpB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EACjC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,EACnF,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACtC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;gBACnF,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAChF,CAAC,CACF,CAAC;QACF,KAAK,KAAK,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface VerifierContext {
|
|
2
|
+
cwd: string;
|
|
3
|
+
timeoutMs: number;
|
|
4
|
+
env: NodeJS.ProcessEnv;
|
|
5
|
+
}
|
|
6
|
+
export interface VerifierResult {
|
|
7
|
+
exit: number;
|
|
8
|
+
stdout: string;
|
|
9
|
+
stderr: string;
|
|
10
|
+
durationMs: number;
|
|
11
|
+
}
|
|
12
|
+
export type Verifier<Config> = (config: Config, ctx: VerifierContext) => Promise<VerifierResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/automation/verifiers/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
const INBOX_HEADER = "## Inbox (unrefined)";
|
|
3
|
+
const INBOX_COMMENT = "<!-- Raw captures awaiting refinement F(3). Do not manually reorder; refinement moves items from here into the priority sections above. -->";
|
|
4
|
+
export async function appendInboxItem(opts) {
|
|
5
|
+
const text = opts.text.replace(/\s+/g, " ").trim();
|
|
6
|
+
if (!text)
|
|
7
|
+
throw new Error("Backlog item text is required and cannot be empty.");
|
|
8
|
+
let md = await readFile(opts.backlogPath, "utf8");
|
|
9
|
+
const bullet = `- [ ] [status:inbox] [captured:${opts.capturedDate}] ${text} <!-- source: ${opts.source} -->`;
|
|
10
|
+
const trimmedNote = opts.note?.replace(/\s+/g, " ").trim();
|
|
11
|
+
const noteBullet = trimmedNote ? `\n - ${trimmedNote}` : "";
|
|
12
|
+
const idx = md.indexOf(INBOX_HEADER);
|
|
13
|
+
if (idx === -1) {
|
|
14
|
+
const prefix = md.endsWith("\n") ? md : md + "\n";
|
|
15
|
+
md = prefix + `\n${INBOX_HEADER}\n\n${INBOX_COMMENT}\n\n${bullet}${noteBullet}\n`;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const before = md.slice(0, idx);
|
|
19
|
+
const after = md.slice(idx);
|
|
20
|
+
const nextH2 = after.search(/\n## /);
|
|
21
|
+
const section = nextH2 === -1 ? after : after.slice(0, nextH2);
|
|
22
|
+
const rest = nextH2 === -1 ? "" : after.slice(nextH2);
|
|
23
|
+
const trimmedSection = section.replace(/\s+$/, "");
|
|
24
|
+
md = before + trimmedSection + `\n${bullet}${noteBullet}\n` + (rest.startsWith("\n") ? rest : "\n" + rest);
|
|
25
|
+
}
|
|
26
|
+
await writeFile(opts.backlogPath, md, "utf8");
|
|
27
|
+
const line = md.split("\n").findIndex((l) => l.trim() === bullet.trim()) + 1;
|
|
28
|
+
return { line };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/backlog/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAC5C,MAAM,aAAa,GACjB,6IAA6I,CAAC;AAUhJ,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAqB;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACjF,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,kCAAkC,IAAI,CAAC,YAAY,KAAK,IAAI,iBAAiB,IAAI,CAAC,MAAM,MAAM,CAAC;IAC9G,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;QAClD,EAAE,GAAG,MAAM,GAAG,KAAK,YAAY,OAAO,aAAa,OAAO,MAAM,GAAG,UAAU,IAAI,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnD,EAAE,GAAG,MAAM,GAAG,cAAc,GAAG,KAAK,MAAM,GAAG,UAAU,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7E,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runBacklogCommand(argv: string[]): Promise<number>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { KIT_NAMES, resolveKitsRoot } from "@chiralkit/kits";
|
|
3
|
+
import { appendInboxItem } from "./add.js";
|
|
4
|
+
const HELP = `chiralkit backlog — capture raw items to a kit's Inbox
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
chiralkit backlog add <kit> "<text>" [--note "<note>"]
|
|
8
|
+
|
|
9
|
+
Kits: ${KIT_NAMES.join(", ")}
|
|
10
|
+
`;
|
|
11
|
+
export async function runBacklogCommand(argv) {
|
|
12
|
+
const [sub, ...rest] = argv;
|
|
13
|
+
if (!sub || sub === "--help" || sub === "-h") {
|
|
14
|
+
console.log(HELP);
|
|
15
|
+
return 0;
|
|
16
|
+
}
|
|
17
|
+
if (sub !== "add") {
|
|
18
|
+
console.error(`Unknown subcommand: ${sub}. See 'chiralkit backlog --help'.`);
|
|
19
|
+
return 1;
|
|
20
|
+
}
|
|
21
|
+
const [kit, text, ...tail] = rest;
|
|
22
|
+
if (!kit || !KIT_NAMES.includes(kit)) {
|
|
23
|
+
console.error(`Unknown kit: '${kit ?? ""}'. Valid kits: ${KIT_NAMES.join(", ")}.`);
|
|
24
|
+
return 1;
|
|
25
|
+
}
|
|
26
|
+
if (!text || text.trim().length === 0) {
|
|
27
|
+
console.error("Backlog item text is required and cannot be empty.");
|
|
28
|
+
return 2;
|
|
29
|
+
}
|
|
30
|
+
let note;
|
|
31
|
+
for (let i = 0; i < tail.length; i++) {
|
|
32
|
+
if (tail[i] === "--note") {
|
|
33
|
+
note = tail[i + 1];
|
|
34
|
+
i++;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const backlogPath = join(resolveKitsRoot(), kit, "BACKLOG.md");
|
|
38
|
+
const source = process.env.CHIRALKIT_INVOKED_BY === "chiralkit-workspace" ? "chiralkit-workspace" : "human";
|
|
39
|
+
const capturedDate = new Date().toISOString().slice(0, 10);
|
|
40
|
+
try {
|
|
41
|
+
const { line } = await appendInboxItem({ backlogPath, text, note, capturedDate, source });
|
|
42
|
+
console.log(`Appended to kits/${kit}/BACKLOG.md § Inbox (unrefined) at line ${line}.`);
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
if (err.code === "ENOENT") {
|
|
47
|
+
console.error(`Backlog file not found: kits/${kit}/BACKLOG.md`);
|
|
48
|
+
return 3;
|
|
49
|
+
}
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backlog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,IAAI,GAAG;;;;;QAKL,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAc;IACpD,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,mCAAmC,CAAC,CAAC;QAC7E,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAClC,IAAI,CAAC,GAAG,IAAI,CAAE,SAA+B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,EAAE,kBAAkB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,IAAwB,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAC/D,MAAM,MAAM,GACV,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/F,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAe,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,2CAA2C,IAAI,GAAG,CAAC,CAAC;QACvF,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,gCAAgC,GAAG,aAAa,CAAC,CAAC;YAChE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { FrameworkTarget } from "@chiralkit/registry-schema";
|
|
2
|
+
export declare const CONFIG_DIR = "ck";
|
|
3
|
+
export declare const CONFIG_FILE = "chiralkit.config.json";
|
|
4
|
+
export declare function configPath(cwd: string): string;
|
|
5
|
+
export interface ChiralkitPaths {
|
|
6
|
+
components: string;
|
|
7
|
+
assets: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ChiralkitConfig {
|
|
10
|
+
framework: FrameworkTarget;
|
|
11
|
+
registry_path: string;
|
|
12
|
+
paths: ChiralkitPaths;
|
|
13
|
+
}
|
|
14
|
+
export declare function defaultPaths(framework: FrameworkTarget): ChiralkitPaths;
|
|
15
|
+
export declare function configExists(cwd: string): Promise<boolean>;
|
|
16
|
+
export declare function legacyConfigExists(cwd: string): Promise<boolean>;
|
|
17
|
+
export declare function legacyMigrationHint(cwd: string): string;
|
|
18
|
+
export declare function readConfig(cwd: string): Promise<ChiralkitConfig>;
|
|
19
|
+
export declare function writeConfig(cwd: string, config: ChiralkitConfig): Promise<void>;
|
|
20
|
+
export interface MaintainerBlock {
|
|
21
|
+
design_system_path: string;
|
|
22
|
+
registry_path: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function readConfigRaw(cwd: string): Promise<Record<string, unknown> | null>;
|
|
25
|
+
export declare function writeConfigRaw(cwd: string, obj: Record<string, unknown>): Promise<void>;
|
|
26
|
+
export declare function readMaintainerConfig(cwd: string): Promise<MaintainerBlock>;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
export const CONFIG_DIR = "ck";
|
|
4
|
+
export const CONFIG_FILE = "chiralkit.config.json";
|
|
5
|
+
export function configPath(cwd) {
|
|
6
|
+
return join(cwd, CONFIG_DIR, CONFIG_FILE);
|
|
7
|
+
}
|
|
8
|
+
export function defaultPaths(framework) {
|
|
9
|
+
switch (framework) {
|
|
10
|
+
case "react":
|
|
11
|
+
return {
|
|
12
|
+
components: "src/components/chiralkit",
|
|
13
|
+
assets: "public/chiralkit",
|
|
14
|
+
};
|
|
15
|
+
case "django-template":
|
|
16
|
+
return {
|
|
17
|
+
components: "templates/chiralkit",
|
|
18
|
+
assets: "static/chiralkit-ds",
|
|
19
|
+
};
|
|
20
|
+
case "html":
|
|
21
|
+
return { components: "components", assets: "assets" };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function configExists(cwd) {
|
|
25
|
+
try {
|
|
26
|
+
await access(configPath(cwd));
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// A project predating the ck/ folder had chiralkit.config.json at the
|
|
34
|
+
// project root. Detect it so init/read paths can point the user at the
|
|
35
|
+
// one-line move instead of silently drifting.
|
|
36
|
+
export async function legacyConfigExists(cwd) {
|
|
37
|
+
try {
|
|
38
|
+
await access(join(cwd, CONFIG_FILE));
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function legacyMigrationHint(cwd) {
|
|
46
|
+
return `Legacy config at ${join(cwd, CONFIG_FILE)} — move it: \`mkdir -p ${CONFIG_DIR} && git mv ${CONFIG_FILE} ${CONFIG_DIR}/${CONFIG_FILE}\`.`;
|
|
47
|
+
}
|
|
48
|
+
export async function readConfig(cwd) {
|
|
49
|
+
const path = configPath(cwd);
|
|
50
|
+
let raw;
|
|
51
|
+
try {
|
|
52
|
+
raw = await readFile(path, "utf8");
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
const hint = (await legacyConfigExists(cwd))
|
|
56
|
+
? ` ${legacyMigrationHint(cwd)}`
|
|
57
|
+
: ` Run 'chiralkit init' first.`;
|
|
58
|
+
throw new Error(`No ${CONFIG_DIR}/${CONFIG_FILE} found in ${cwd}.${hint}`);
|
|
59
|
+
}
|
|
60
|
+
return JSON.parse(raw);
|
|
61
|
+
}
|
|
62
|
+
export async function writeConfig(cwd, config) {
|
|
63
|
+
const path = configPath(cwd);
|
|
64
|
+
await mkdir(dirname(path), { recursive: true });
|
|
65
|
+
await writeFile(path, JSON.stringify(config, null, 2) + "\n", "utf8");
|
|
66
|
+
}
|
|
67
|
+
export async function readConfigRaw(cwd) {
|
|
68
|
+
const path = configPath(cwd);
|
|
69
|
+
let raw;
|
|
70
|
+
try {
|
|
71
|
+
raw = await readFile(path, "utf8");
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const parsed = JSON.parse(raw);
|
|
77
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
78
|
+
throw new Error(`${path} is not a JSON object at the top level.`);
|
|
79
|
+
}
|
|
80
|
+
return parsed;
|
|
81
|
+
}
|
|
82
|
+
export async function writeConfigRaw(cwd, obj) {
|
|
83
|
+
const path = configPath(cwd);
|
|
84
|
+
await mkdir(dirname(path), { recursive: true });
|
|
85
|
+
await writeFile(path, JSON.stringify(obj, null, 2) + "\n", "utf8");
|
|
86
|
+
}
|
|
87
|
+
export async function readMaintainerConfig(cwd) {
|
|
88
|
+
const parsed = await readConfigRaw(cwd);
|
|
89
|
+
if (parsed === null) {
|
|
90
|
+
const hint = (await legacyConfigExists(cwd))
|
|
91
|
+
? ` ${legacyMigrationHint(cwd)}`
|
|
92
|
+
: ` Run 'chiralkit init --maintainer' first.`;
|
|
93
|
+
throw new Error(`no ${CONFIG_DIR}/${CONFIG_FILE} found in ${cwd}.${hint}`);
|
|
94
|
+
}
|
|
95
|
+
const m = parsed["maintainer"];
|
|
96
|
+
if (typeof m !== "object" || m === null || Array.isArray(m)) {
|
|
97
|
+
throw new Error(`${CONFIG_DIR}/${CONFIG_FILE} has no 'maintainer' block. Run 'chiralkit init --maintainer' to add it, or edit the file to include design_system_path and registry_path.`);
|
|
98
|
+
}
|
|
99
|
+
const block = m;
|
|
100
|
+
const ds = block["design_system_path"];
|
|
101
|
+
const rp = block["registry_path"];
|
|
102
|
+
if (typeof ds !== "string" || ds.length === 0) {
|
|
103
|
+
throw new Error(`maintainer.design_system_path is required (a repo-relative path to the DS components directory, e.g. 'packages/design-system/src/components').`);
|
|
104
|
+
}
|
|
105
|
+
if (typeof rp !== "string" || rp.length === 0) {
|
|
106
|
+
throw new Error(`maintainer.registry_path is required (a repo-relative path to the registry root, e.g. 'registry').`);
|
|
107
|
+
}
|
|
108
|
+
return { design_system_path: ds, registry_path: rp };
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/detect.d.ts
ADDED
package/dist/detect.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { access, readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
async function fileExists(path) {
|
|
4
|
+
try {
|
|
5
|
+
await access(path);
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export async function detectFramework(cwd) {
|
|
13
|
+
if (await fileExists(join(cwd, "manage.py")))
|
|
14
|
+
return "django-template";
|
|
15
|
+
const pkgPath = join(cwd, "package.json");
|
|
16
|
+
if (await fileExists(pkgPath)) {
|
|
17
|
+
const pkg = JSON.parse(await readFile(pkgPath, "utf8"));
|
|
18
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
19
|
+
if (deps["react"])
|
|
20
|
+
return "react";
|
|
21
|
+
}
|
|
22
|
+
if (await fileExists(join(cwd, "index.html")))
|
|
23
|
+
return "html";
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAW;IAEX,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,iBAAiB,CAAC;IAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1C,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAGrD,CAAC;QACF,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IACpC,CAAC;IAED,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7D,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// The four invariants defined in 2026-07-24-agent-modules-design.md §3.
|
|
2
|
+
// Level comparison reads envelope.metadata.level (source of truth since 5ef54b2).
|
|
3
|
+
export function runInvariants(modules) {
|
|
4
|
+
const errors = [];
|
|
5
|
+
const oks = [];
|
|
6
|
+
const byName = new Map(modules.map((m) => [m.name, m]));
|
|
7
|
+
const reportedPairs = new Set();
|
|
8
|
+
for (const m of modules) {
|
|
9
|
+
const spec = m.spec;
|
|
10
|
+
// Rule 4a: pipeline_stage only for agents.
|
|
11
|
+
if (spec.pipeline_stage !== undefined && m.type !== "agent") {
|
|
12
|
+
errors.push(`${m.name}: pipeline_stage is only valid for type=agent (found type=${m.type})`);
|
|
13
|
+
}
|
|
14
|
+
// Rule 4b: pipeline_stage only at L3.
|
|
15
|
+
if (spec.pipeline_stage !== undefined && m.metadata.level !== 3) {
|
|
16
|
+
errors.push(`${m.name}: pipeline_stage is only valid at L3 (found level=${m.metadata.level})`);
|
|
17
|
+
}
|
|
18
|
+
if (spec.enantiomer_of === undefined)
|
|
19
|
+
continue;
|
|
20
|
+
const partner = byName.get(spec.enantiomer_of);
|
|
21
|
+
if (!partner) {
|
|
22
|
+
errors.push(`${m.name}: enantiomer_of points at "${spec.enantiomer_of}" which is not in the registry`);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const partnerSpec = partner.spec;
|
|
26
|
+
// Dedupe pair reporting.
|
|
27
|
+
const key = [m.name, partner.name].sort().join(" ↔ ");
|
|
28
|
+
if (reportedPairs.has(key))
|
|
29
|
+
continue;
|
|
30
|
+
reportedPairs.add(key);
|
|
31
|
+
// Rule 1: reciprocity.
|
|
32
|
+
if (partnerSpec.enantiomer_of !== m.name) {
|
|
33
|
+
errors.push(`${key}: reciprocity broken (${partner.name}.enantiomer_of=${partnerSpec.enantiomer_of ?? "unset"})`);
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// Rule 2: matching chiral_axis.
|
|
37
|
+
if (spec.chiral_axis !== partnerSpec.chiral_axis) {
|
|
38
|
+
errors.push(`${key}: chiral_axis mismatch ("${spec.chiral_axis}" vs "${partnerSpec.chiral_axis}")`);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Rule 3: same metadata.level.
|
|
42
|
+
if (m.metadata.level !== partner.metadata.level) {
|
|
43
|
+
errors.push(`${key}: metadata.level mismatch (${m.metadata.level} vs ${partner.metadata.level})`);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
oks.push(`chirality: ${key} on axis "${spec.chiral_axis}"`);
|
|
47
|
+
}
|
|
48
|
+
return { errors, oks };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=doctor-invariants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-invariants.js","sourceRoot":"","sources":["../src/doctor-invariants.ts"],"names":[],"mappings":"AAOA,wEAAwE;AACxE,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,OAAiB;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAU,CAAC,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAId,CAAC;QAEF,2CAA2C;QAC3C,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,6DAA6D,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC/F,CAAC;QACD,sCAAsC;QACtC,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,qDAAqD,CAAC,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QACjG,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAAE,SAAS;QAE/C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,8BAA8B,IAAI,CAAC,aAAa,gCAAgC,CAAC,CAAC;YACvG,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,IAG3B,CAAC;QAEF,yBAAyB;QACzB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACrC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEvB,uBAAuB;QACvB,IAAI,WAAW,CAAC,aAAa,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,yBAAyB,OAAO,CAAC,IAAI,kBAAkB,WAAW,CAAC,aAAa,IAAI,OAAO,GAAG,CAAC,CAAC;YAClH,SAAS;QACX,CAAC;QACD,gCAAgC;QAChC,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,4BAA4B,IAAI,CAAC,WAAW,SAAS,WAAW,CAAC,WAAW,IAAI,CAAC,CAAC;YACpG,SAAS;QACX,CAAC;QACD,+BAA+B;QAC/B,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,8BAA8B,CAAC,CAAC,QAAQ,CAAC,KAAK,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;YAClG,SAAS;QACX,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,aAAa,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AgentSpec } from "@chiralkit/registry-schema";
|
|
2
|
+
export interface Report {
|
|
3
|
+
errors: string[];
|
|
4
|
+
warnings: string[];
|
|
5
|
+
oks: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface AgentFileValidation {
|
|
8
|
+
problems: string[];
|
|
9
|
+
warnings: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function validateAgentFiles(moduleDir: string, spec: AgentSpec): Promise<AgentFileValidation>;
|
|
12
|
+
export declare function collectDoctorReport(root: string): Promise<Report>;
|
|
13
|
+
export declare function runDoctor(): Promise<void>;
|