@logixjs/cli 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/LICENSE +201 -0
  2. package/dist/Commands.d.ts +61 -0
  3. package/dist/Commands.js +16 -0
  4. package/dist/Commands.js.map +1 -0
  5. package/dist/anchorAutofill-V6CAXQHT.js +128 -0
  6. package/dist/anchorAutofill-V6CAXQHT.js.map +1 -0
  7. package/dist/anchorIndex-IEFARUZM.js +15 -0
  8. package/dist/anchorIndex-IEFARUZM.js.map +1 -0
  9. package/dist/bin/logix-devserver.d.ts +1 -0
  10. package/dist/bin/logix-devserver.js +32 -0
  11. package/dist/bin/logix-devserver.js.map +1 -0
  12. package/dist/bin/logix.d.ts +1 -0
  13. package/dist/bin/logix.js +37 -0
  14. package/dist/bin/logix.js.map +1 -0
  15. package/dist/chunk-6DZEO5HP.js +102 -0
  16. package/dist/chunk-6DZEO5HP.js.map +1 -0
  17. package/dist/chunk-HGHTOYNL.js +27 -0
  18. package/dist/chunk-HGHTOYNL.js.map +1 -0
  19. package/dist/chunk-PZ5AY32C.js +10 -0
  20. package/dist/chunk-PZ5AY32C.js.map +1 -0
  21. package/dist/chunk-RF7XSP3P.js +22 -0
  22. package/dist/chunk-RF7XSP3P.js.map +1 -0
  23. package/dist/chunk-TDQVD2IA.js +1193 -0
  24. package/dist/chunk-TDQVD2IA.js.map +1 -0
  25. package/dist/chunk-VRPSB3SV.js +143 -0
  26. package/dist/chunk-VRPSB3SV.js.map +1 -0
  27. package/dist/contractSuiteRun-5Y7LVI72.js +15 -0
  28. package/dist/contractSuiteRun-5Y7LVI72.js.map +1 -0
  29. package/dist/describe-5MFSLD7R.js +218 -0
  30. package/dist/describe-5MFSLD7R.js.map +1 -0
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.js +10 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/irDiff-WYXZEVA7.js +351 -0
  35. package/dist/irDiff-WYXZEVA7.js.map +1 -0
  36. package/dist/irExport-EI2VYIMT.js +87 -0
  37. package/dist/irExport-EI2VYIMT.js.map +1 -0
  38. package/dist/irValidate-JEQGVRL5.js +229 -0
  39. package/dist/irValidate-JEQGVRL5.js.map +1 -0
  40. package/dist/spyEvidence-JTJDS2WN.js +15 -0
  41. package/dist/spyEvidence-JTJDS2WN.js.map +1 -0
  42. package/dist/transformModule-D6YE3U5W.js +15 -0
  43. package/dist/transformModule-D6YE3U5W.js.map +1 -0
  44. package/dist/trialRun-SWVYG67P.js +15 -0
  45. package/dist/trialRun-SWVYG67P.js.map +1 -0
  46. package/package.json +69 -0
@@ -0,0 +1,229 @@
1
+ import {
2
+ makeArtifactOutput,
3
+ readJsonFile
4
+ } from "./chunk-VRPSB3SV.js";
5
+ import {
6
+ sha256DigestOfJson
7
+ } from "./chunk-RF7XSP3P.js";
8
+ import {
9
+ asSerializableErrorSummary,
10
+ makeCliError,
11
+ makeCommandResult
12
+ } from "./chunk-6DZEO5HP.js";
13
+ import "./chunk-PZ5AY32C.js";
14
+
15
+ // src/internal/commands/irValidate.ts
16
+ import { Effect } from "effect";
17
+ import fs from "fs/promises";
18
+ import path from "path";
19
+ var toBytes = (text) => new TextEncoder().encode(text).length;
20
+ var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
21
+ var isNonGatingFile = (fileName) => fileName === "trace.slim.json" || fileName === "trialrun.report.json";
22
+ var extractSemanticDigest = (fileName, value) => {
23
+ if (isNonGatingFile(fileName)) return { digest: void 0, digestKind: "nonGating" };
24
+ if (fileName === "control-surface.manifest.json") {
25
+ const digest = isRecord(value) && typeof value.digest === "string" ? value.digest : void 0;
26
+ return { digest: digest ?? sha256DigestOfJson(value), digestKind: "semantic" };
27
+ }
28
+ if (fileName === "workflow.surface.json") {
29
+ const digestPairs = Array.isArray(value) ? value.map((x) => {
30
+ const moduleId = isRecord(x) && typeof x.moduleId === "string" ? x.moduleId : void 0;
31
+ const surface = isRecord(x) ? x.surface : void 0;
32
+ const digest = isRecord(surface) && typeof surface.digest === "string" ? surface.digest : void 0;
33
+ return moduleId && digest ? { moduleId, digest } : void 0;
34
+ }).filter((x) => Boolean(x)).sort((a, b) => a.moduleId < b.moduleId ? -1 : a.moduleId > b.moduleId ? 1 : 0) : [];
35
+ return { digest: sha256DigestOfJson(digestPairs), digestKind: "semantic" };
36
+ }
37
+ return { digest: sha256DigestOfJson(value), digestKind: "content" };
38
+ };
39
+ var minimalValidateKnownFile = (fileName, value) => {
40
+ if (!value || typeof value !== "object") return [`INVALID_SHAPE:${fileName}`];
41
+ if (fileName === "control-surface.manifest.json") {
42
+ const version = value.version;
43
+ if (version !== 1) return [`MANIFEST_VERSION_MISMATCH:${String(version)}`];
44
+ const digest = value.digest;
45
+ if (typeof digest !== "string" || digest.length === 0) return ["MANIFEST_MISSING_DIGEST"];
46
+ const modules = value.modules;
47
+ if (!Array.isArray(modules)) return ["MANIFEST_MISSING_MODULES_ARRAY"];
48
+ }
49
+ if (fileName === "workflow.surface.json") {
50
+ if (!Array.isArray(value)) return ["WORKFLOW_SURFACE_NOT_ARRAY"];
51
+ for (const [i, item] of value.entries()) {
52
+ if (!isRecord(item)) return [`WORKFLOW_SURFACE_ITEM_NOT_OBJECT:${i}`];
53
+ if (typeof item.moduleId !== "string" || item.moduleId.length === 0) return [`WORKFLOW_SURFACE_ITEM_MISSING_MODULE_ID:${i}`];
54
+ const surface = item.surface;
55
+ if (!isRecord(surface)) return [`WORKFLOW_SURFACE_ITEM_MISSING_SURFACE:${i}`];
56
+ if (typeof surface.digest !== "string" || surface.digest.length === 0) return [`WORKFLOW_SURFACE_ITEM_MISSING_SURFACE_DIGEST:${i}`];
57
+ }
58
+ }
59
+ if (fileName === "trialrun.report.json") {
60
+ const ok = value.ok;
61
+ if (typeof ok !== "boolean") return ["TRIALRUN_MISSING_OK_BOOLEAN"];
62
+ }
63
+ return [];
64
+ };
65
+ var readDirJsonFileNames = (dirAbs) => Effect.tryPromise({
66
+ try: () => fs.readdir(dirAbs, { withFileTypes: true }),
67
+ catch: (cause) => makeCliError({
68
+ code: "CLI_IO_ERROR",
69
+ message: `[Logix][CLI] \u65E0\u6CD5\u8BFB\u53D6\u76EE\u5F55\uFF1A${dirAbs}`,
70
+ cause
71
+ })
72
+ }).pipe(
73
+ Effect.map(
74
+ (entries) => entries.filter((e) => e.isFile() && e.name.endsWith(".json")).map((e) => e.name).sort((a, b) => a < b ? -1 : a > b ? 1 : 0)
75
+ )
76
+ );
77
+ var checkJsonFile = (fileAbs, fileName) => Effect.tryPromise({
78
+ try: () => fs.readFile(fileAbs, "utf8"),
79
+ catch: (cause) => makeCliError({
80
+ code: "CLI_IO_ERROR",
81
+ message: `[Logix][CLI] \u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6\uFF1A${fileName}`,
82
+ cause
83
+ })
84
+ }).pipe(
85
+ Effect.flatMap(
86
+ (raw) => Effect.try({
87
+ try: () => JSON.parse(raw),
88
+ catch: (cause) => makeCliError({
89
+ code: "CLI_INVALID_INPUT",
90
+ message: `[Logix][CLI] \u65E0\u6CD5\u89E3\u6790 JSON\uFF1A${fileName}`,
91
+ cause
92
+ })
93
+ }).pipe(
94
+ Effect.map((parsed) => {
95
+ const digestInfo = extractSemanticDigest(fileName, parsed);
96
+ const reasonCodes = minimalValidateKnownFile(fileName, parsed);
97
+ return {
98
+ fileName,
99
+ ok: reasonCodes.length === 0,
100
+ digest: digestInfo.digest,
101
+ digestKind: digestInfo.digestKind,
102
+ bytes: toBytes(raw),
103
+ ...reasonCodes.length > 0 ? { reasonCodes } : null
104
+ };
105
+ })
106
+ )
107
+ ),
108
+ Effect.catch((cause) => Effect.succeed({
109
+ fileName,
110
+ ok: false,
111
+ error: asSerializableErrorSummary(cause)
112
+ }))
113
+ );
114
+ var runIrValidate = (inv) => {
115
+ const runId = inv.global.runId;
116
+ return Effect.gen(function* () {
117
+ const input = inv.input;
118
+ const requiredFiles = ["control-surface.manifest.json"];
119
+ const files = input.kind === "dir" ? yield* readDirJsonFileNames(path.resolve(process.cwd(), input.dir)) : [path.basename(path.resolve(process.cwd(), input.file))];
120
+ const checks = input.kind === "dir" ? yield* Effect.forEach(
121
+ files,
122
+ (name) => checkJsonFile(path.join(path.resolve(process.cwd(), input.dir), name), name)
123
+ ) : yield* Effect.forEach(files, (name) => checkJsonFile(path.resolve(process.cwd(), input.file), name));
124
+ const missingRequiredFiles = input.kind === "dir" ? requiredFiles.filter((f) => !files.includes(f)) : [];
125
+ const manifestCheck = checks.find((c) => c.fileName === "control-surface.manifest.json");
126
+ const workflowSurfaceCheck = checks.find((c) => c.fileName === "workflow.surface.json");
127
+ const workflowSurfaceReasons = [];
128
+ if (input.kind === "dir" && manifestCheck?.ok) {
129
+ const manifestFileAbs = path.join(path.resolve(process.cwd(), input.dir), "control-surface.manifest.json");
130
+ const manifestValue = yield* readJsonFile(manifestFileAbs).pipe(Effect.catch(() => Effect.succeed(void 0)));
131
+ const workflowRefs = isRecord(manifestValue) && Array.isArray(manifestValue.modules) ? manifestValue.modules.map((m) => m && typeof m.moduleId === "string" && m.workflowSurface && typeof m.workflowSurface.digest === "string" ? { moduleId: String(m.moduleId), digest: String(m.workflowSurface.digest) } : void 0).filter((x) => Boolean(x)) : [];
132
+ if (workflowRefs.length > 0) {
133
+ if (!files.includes("workflow.surface.json")) {
134
+ workflowSurfaceReasons.push("MISSING_WORKFLOW_SURFACE_FILE");
135
+ } else if (!workflowSurfaceCheck?.ok) {
136
+ workflowSurfaceReasons.push("WORKFLOW_SURFACE_FILE_INVALID");
137
+ } else {
138
+ const wfAbs = path.join(path.resolve(process.cwd(), input.dir), "workflow.surface.json");
139
+ const wfValue = yield* readJsonFile(wfAbs).pipe(Effect.catch(() => Effect.succeed(void 0)));
140
+ const wfMap = Array.isArray(wfValue) ? new Map(
141
+ wfValue.map((x) => {
142
+ const moduleId = isRecord(x) && typeof x.moduleId === "string" ? x.moduleId : void 0;
143
+ const surface = isRecord(x) ? x.surface : void 0;
144
+ const digest = isRecord(surface) && typeof surface.digest === "string" ? surface.digest : void 0;
145
+ return moduleId && digest ? [moduleId, digest] : void 0;
146
+ }).filter((x) => Boolean(x))
147
+ ) : /* @__PURE__ */ new Map();
148
+ for (const ref of workflowRefs) {
149
+ const got = wfMap.get(ref.moduleId);
150
+ if (!got) workflowSurfaceReasons.push(`WORKFLOW_SURFACE_MISSING_MODULE:${ref.moduleId}`);
151
+ else if (got !== ref.digest) workflowSurfaceReasons.push(`WORKFLOW_SURFACE_DIGEST_MISMATCH:${ref.moduleId}`);
152
+ }
153
+ }
154
+ }
155
+ }
156
+ const hasParseErrors = checks.some((c) => c.ok === false && c.error);
157
+ const hasViolations = missingRequiredFiles.length > 0 || checks.some((c) => c.ok === false && (c.reasonCodes?.length ?? 0) > 0) || workflowSurfaceReasons.length > 0;
158
+ const status = hasParseErrors ? "error" : hasViolations ? "violation" : "pass";
159
+ const report = {
160
+ schemaVersion: 1,
161
+ kind: "IrValidateReport",
162
+ input,
163
+ status,
164
+ requiredFiles,
165
+ missingRequiredFiles,
166
+ files: checks,
167
+ summary: {
168
+ checkedFiles: checks.length,
169
+ okFiles: checks.filter((c) => c.ok).length,
170
+ failedFiles: checks.filter((c) => !c.ok).length
171
+ }
172
+ };
173
+ const reportWithWorkflow = workflowSurfaceReasons.length > 0 ? { ...report, workflowSurface: { reasonCodes: workflowSurfaceReasons } } : report;
174
+ const artifactReasonCodes = Array.from(
175
+ /* @__PURE__ */ new Set([
176
+ ...missingRequiredFiles.map((fileName) => `MISSING_REQUIRED_FILE:${fileName}`),
177
+ ...checks.flatMap((check) => check.reasonCodes ?? []),
178
+ ...workflowSurfaceReasons,
179
+ ...checks.filter((check) => check.error?.code).map((check) => `PARSE_ERROR:${String(check.error?.code ?? "UNKNOWN")}`)
180
+ ])
181
+ ).sort();
182
+ const artifacts = [
183
+ yield* makeArtifactOutput({
184
+ outDir: inv.global.outDir,
185
+ budgetBytes: inv.global.budgetBytes,
186
+ fileName: "ir.validate.report.json",
187
+ outputKey: "irValidateReport",
188
+ kind: "IrValidateReport",
189
+ value: reportWithWorkflow,
190
+ ...artifactReasonCodes.length > 0 ? { reasonCodes: artifactReasonCodes } : null
191
+ })
192
+ ];
193
+ if (status === "pass") {
194
+ return makeCommandResult({ runId, command: "ir.validate", ok: true, artifacts });
195
+ }
196
+ const topError = status === "violation" ? asSerializableErrorSummary(
197
+ makeCliError({
198
+ code: "CLI_VIOLATION_IR_VALIDATE",
199
+ message: "[Logix][CLI] ir validate: \u95E8\u7981\u672A\u901A\u8FC7"
200
+ })
201
+ ) : asSerializableErrorSummary(
202
+ makeCliError({
203
+ code: "CLI_INVALID_INPUT",
204
+ message: "[Logix][CLI] ir validate: \u8F93\u5165\u4E0D\u53EF\u89E3\u6790"
205
+ })
206
+ );
207
+ return makeCommandResult({
208
+ runId,
209
+ command: "ir.validate",
210
+ ok: false,
211
+ artifacts,
212
+ error: topError
213
+ });
214
+ }).pipe(
215
+ Effect.catch((cause) => Effect.succeed(
216
+ makeCommandResult({
217
+ runId,
218
+ command: "ir.validate",
219
+ ok: false,
220
+ artifacts: [],
221
+ error: asSerializableErrorSummary(cause)
222
+ })
223
+ ))
224
+ );
225
+ };
226
+ export {
227
+ runIrValidate
228
+ };
229
+ //# sourceMappingURL=irValidate-JEQGVRL5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/commands/irValidate.ts"],"sourcesContent":["import { Effect } from 'effect'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport { makeArtifactOutput } from '../artifacts.js'\nimport type { CliInvocation, IrValidateInput } from '../args.js'\nimport { asSerializableErrorSummary, makeCliError } from '../errors.js'\nimport { readJsonFile } from '../output.js'\nimport type { ArtifactOutput, CommandResult } from '../result.js'\nimport { makeCommandResult } from '../result.js'\nimport { sha256DigestOfJson } from '../stableJson.js'\n\ntype IrValidateFileCheck = {\n readonly fileName: string\n readonly ok: boolean\n readonly digest?: string\n readonly digestKind?: 'semantic' | 'content' | 'nonGating'\n readonly bytes?: number\n readonly reasonCodes?: ReadonlyArray<string>\n readonly error?: ReturnType<typeof asSerializableErrorSummary>\n}\n\ntype IrValidateReportV1 = {\n readonly schemaVersion: 1\n readonly kind: 'IrValidateReport'\n readonly input: IrValidateInput\n readonly status: 'pass' | 'violation' | 'error'\n readonly requiredFiles: ReadonlyArray<string>\n readonly missingRequiredFiles: ReadonlyArray<string>\n readonly files: ReadonlyArray<IrValidateFileCheck>\n readonly summary: {\n readonly checkedFiles: number\n readonly okFiles: number\n readonly failedFiles: number\n }\n}\n\nconst toBytes = (text: string): number => new TextEncoder().encode(text).length\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isNonGatingFile = (fileName: string): boolean => fileName === 'trace.slim.json' || fileName === 'trialrun.report.json'\n\nconst extractSemanticDigest = (fileName: string, value: unknown): { readonly digest?: string; readonly digestKind: IrValidateFileCheck['digestKind'] } => {\n if (isNonGatingFile(fileName)) return { digest: undefined, digestKind: 'nonGating' }\n\n if (fileName === 'control-surface.manifest.json') {\n const digest = isRecord(value) && typeof value.digest === 'string' ? value.digest : undefined\n return { digest: digest ?? sha256DigestOfJson(value), digestKind: 'semantic' }\n }\n\n if (fileName === 'workflow.surface.json') {\n const digestPairs = Array.isArray(value)\n ? value\n .map((x) => {\n const moduleId = isRecord(x) && typeof x.moduleId === 'string' ? x.moduleId : undefined\n const surface = isRecord(x) ? x.surface : undefined\n const digest = isRecord(surface) && typeof surface.digest === 'string' ? surface.digest : undefined\n return moduleId && digest ? { moduleId, digest } : undefined\n })\n .filter((x): x is { moduleId: string; digest: string } => Boolean(x))\n .sort((a, b) => (a.moduleId < b.moduleId ? -1 : a.moduleId > b.moduleId ? 1 : 0))\n : []\n return { digest: sha256DigestOfJson(digestPairs), digestKind: 'semantic' }\n }\n\n return { digest: sha256DigestOfJson(value), digestKind: 'content' }\n}\n\nconst minimalValidateKnownFile = (fileName: string, value: unknown): ReadonlyArray<string> => {\n if (!value || typeof value !== 'object') return [`INVALID_SHAPE:${fileName}`]\n\n if (fileName === 'control-surface.manifest.json') {\n const version = (value as any).version\n if (version !== 1) return [`MANIFEST_VERSION_MISMATCH:${String(version)}`]\n const digest = (value as any).digest\n if (typeof digest !== 'string' || digest.length === 0) return ['MANIFEST_MISSING_DIGEST']\n const modules = (value as any).modules\n if (!Array.isArray(modules)) return ['MANIFEST_MISSING_MODULES_ARRAY']\n }\n\n if (fileName === 'workflow.surface.json') {\n if (!Array.isArray(value)) return ['WORKFLOW_SURFACE_NOT_ARRAY']\n for (const [i, item] of value.entries()) {\n if (!isRecord(item)) return [`WORKFLOW_SURFACE_ITEM_NOT_OBJECT:${i}`]\n if (typeof item.moduleId !== 'string' || item.moduleId.length === 0) return [`WORKFLOW_SURFACE_ITEM_MISSING_MODULE_ID:${i}`]\n const surface = item.surface\n if (!isRecord(surface)) return [`WORKFLOW_SURFACE_ITEM_MISSING_SURFACE:${i}`]\n if (typeof surface.digest !== 'string' || surface.digest.length === 0) return [`WORKFLOW_SURFACE_ITEM_MISSING_SURFACE_DIGEST:${i}`]\n }\n }\n\n if (fileName === 'trialrun.report.json') {\n const ok = (value as any).ok\n if (typeof ok !== 'boolean') return ['TRIALRUN_MISSING_OK_BOOLEAN']\n }\n\n return []\n}\n\nconst readDirJsonFileNames = (dirAbs: string): Effect.Effect<ReadonlyArray<string>, unknown> =>\n Effect.tryPromise({\n try: () => fs.readdir(dirAbs, { withFileTypes: true }),\n catch: (cause) =>\n makeCliError({\n code: 'CLI_IO_ERROR',\n message: `[Logix][CLI] 无法读取目录:${dirAbs}`,\n cause,\n }),\n }).pipe(\n Effect.map((entries) =>\n entries\n .filter((e) => e.isFile() && e.name.endsWith('.json'))\n .map((e) => e.name)\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)),\n ),\n )\n\nconst checkJsonFile = (fileAbs: string, fileName: string): Effect.Effect<IrValidateFileCheck, never> =>\n Effect.tryPromise({\n try: () => fs.readFile(fileAbs, 'utf8'),\n catch: (cause) =>\n makeCliError({\n code: 'CLI_IO_ERROR',\n message: `[Logix][CLI] 无法读取文件:${fileName}`,\n cause,\n }),\n }).pipe(\n Effect.flatMap((raw) =>\n Effect.try({\n try: () => JSON.parse(raw) as unknown,\n catch: (cause) =>\n makeCliError({\n code: 'CLI_INVALID_INPUT',\n message: `[Logix][CLI] 无法解析 JSON:${fileName}`,\n cause,\n }),\n }).pipe(\n Effect.map((parsed) => {\n const digestInfo = extractSemanticDigest(fileName, parsed)\n const reasonCodes = minimalValidateKnownFile(fileName, parsed)\n return {\n fileName,\n ok: reasonCodes.length === 0,\n digest: digestInfo.digest,\n digestKind: digestInfo.digestKind,\n bytes: toBytes(raw),\n ...(reasonCodes.length > 0 ? { reasonCodes } : null),\n } satisfies IrValidateFileCheck\n }),\n ),\n ),\n Effect.catch((cause) =>\n Effect.succeed({\n fileName,\n ok: false,\n error: asSerializableErrorSummary(cause),\n })),\n )\n\ntype IrValidateInvocation = Extract<CliInvocation, { readonly command: 'ir.validate' }>\n\nexport const runIrValidate = (inv: IrValidateInvocation): Effect.Effect<CommandResult, never> => {\n const runId = inv.global.runId\n\n return Effect.gen(function* () {\n const input = inv.input\n\n const requiredFiles = ['control-surface.manifest.json']\n\n const files =\n input.kind === 'dir'\n ? yield* readDirJsonFileNames(path.resolve(process.cwd(), input.dir))\n : [path.basename(path.resolve(process.cwd(), input.file))]\n\n const checks =\n input.kind === 'dir'\n ? yield* Effect.forEach(files, (name) =>\n checkJsonFile(path.join(path.resolve(process.cwd(), input.dir), name), name),\n )\n : yield* Effect.forEach(files, (name) => checkJsonFile(path.resolve(process.cwd(), input.file), name))\n\n const missingRequiredFiles =\n input.kind === 'dir' ? requiredFiles.filter((f) => !files.includes(f)) : ([] as ReadonlyArray<string>)\n\n const manifestCheck = checks.find((c) => c.fileName === 'control-surface.manifest.json')\n const workflowSurfaceCheck = checks.find((c) => c.fileName === 'workflow.surface.json')\n\n const workflowSurfaceReasons: string[] = []\n if (input.kind === 'dir' && manifestCheck?.ok) {\n const manifestFileAbs = path.join(path.resolve(process.cwd(), input.dir), 'control-surface.manifest.json')\n const manifestValue = yield* readJsonFile(manifestFileAbs).pipe(Effect.catch(() => Effect.succeed(undefined)))\n\n const workflowRefs =\n isRecord(manifestValue) && Array.isArray((manifestValue as any).modules)\n ? (manifestValue as any).modules\n .map((m: any) => (m && typeof m.moduleId === 'string' && m.workflowSurface && typeof m.workflowSurface.digest === 'string'\n ? { moduleId: String(m.moduleId), digest: String(m.workflowSurface.digest) }\n : undefined))\n .filter((x: any) => Boolean(x))\n : []\n\n if (workflowRefs.length > 0) {\n if (!files.includes('workflow.surface.json')) {\n workflowSurfaceReasons.push('MISSING_WORKFLOW_SURFACE_FILE')\n } else if (!workflowSurfaceCheck?.ok) {\n workflowSurfaceReasons.push('WORKFLOW_SURFACE_FILE_INVALID')\n } else {\n const wfAbs = path.join(path.resolve(process.cwd(), input.dir), 'workflow.surface.json')\n const wfValue = yield* readJsonFile(wfAbs).pipe(Effect.catch(() => Effect.succeed(undefined)))\n const wfMap =\n Array.isArray(wfValue)\n ? new Map(\n wfValue\n .map((x: any) => {\n const moduleId = isRecord(x) && typeof x.moduleId === 'string' ? x.moduleId : undefined\n const surface = isRecord(x) ? x.surface : undefined\n const digest = isRecord(surface) && typeof surface.digest === 'string' ? surface.digest : undefined\n return moduleId && digest ? [moduleId, digest] : undefined\n })\n .filter((x: any): x is [string, string] => Boolean(x)),\n )\n : new Map<string, string>()\n\n for (const ref of workflowRefs) {\n const got = wfMap.get(ref.moduleId)\n if (!got) workflowSurfaceReasons.push(`WORKFLOW_SURFACE_MISSING_MODULE:${ref.moduleId}`)\n else if (got !== ref.digest) workflowSurfaceReasons.push(`WORKFLOW_SURFACE_DIGEST_MISMATCH:${ref.moduleId}`)\n }\n }\n }\n }\n\n const hasParseErrors = checks.some((c) => c.ok === false && c.error)\n const hasViolations =\n missingRequiredFiles.length > 0 ||\n checks.some((c) => c.ok === false && (c.reasonCodes?.length ?? 0) > 0) ||\n workflowSurfaceReasons.length > 0\n\n const status: IrValidateReportV1['status'] = hasParseErrors ? 'error' : hasViolations ? 'violation' : 'pass'\n\n const report: IrValidateReportV1 = {\n schemaVersion: 1,\n kind: 'IrValidateReport',\n input,\n status,\n requiredFiles,\n missingRequiredFiles,\n files: checks,\n summary: {\n checkedFiles: checks.length,\n okFiles: checks.filter((c) => c.ok).length,\n failedFiles: checks.filter((c) => !c.ok).length,\n },\n }\n\n const reportWithWorkflow: IrValidateReportV1 & { readonly workflowSurface?: { readonly reasonCodes: ReadonlyArray<string> } } =\n workflowSurfaceReasons.length > 0 ? { ...report, workflowSurface: { reasonCodes: workflowSurfaceReasons } } : report\n\n const artifactReasonCodes = Array.from(\n new Set([\n ...missingRequiredFiles.map((fileName) => `MISSING_REQUIRED_FILE:${fileName}`),\n ...checks.flatMap((check) => check.reasonCodes ?? []),\n ...workflowSurfaceReasons,\n ...checks\n .filter((check) => check.error?.code)\n .map((check) => `PARSE_ERROR:${String(check.error?.code ?? 'UNKNOWN')}`),\n ]),\n ).sort()\n\n const artifacts: ArtifactOutput[] = [\n yield* makeArtifactOutput({\n outDir: inv.global.outDir,\n budgetBytes: inv.global.budgetBytes,\n fileName: 'ir.validate.report.json',\n outputKey: 'irValidateReport',\n kind: 'IrValidateReport',\n value: reportWithWorkflow,\n ...(artifactReasonCodes.length > 0 ? { reasonCodes: artifactReasonCodes } : null),\n }),\n ]\n\n if (status === 'pass') {\n return makeCommandResult({ runId, command: 'ir.validate', ok: true, artifacts })\n }\n\n const topError =\n status === 'violation'\n ? asSerializableErrorSummary(\n makeCliError({\n code: 'CLI_VIOLATION_IR_VALIDATE',\n message: '[Logix][CLI] ir validate: 门禁未通过',\n }),\n )\n : asSerializableErrorSummary(\n makeCliError({\n code: 'CLI_INVALID_INPUT',\n message: '[Logix][CLI] ir validate: 输入不可解析',\n }),\n )\n\n return makeCommandResult({\n runId,\n command: 'ir.validate',\n ok: false,\n artifacts,\n error: topError,\n })\n }).pipe(\n Effect.catch((cause) =>\n Effect.succeed(\n makeCommandResult({\n runId,\n command: 'ir.validate',\n ok: false,\n artifacts: [],\n error: asSerializableErrorSummary(cause),\n }),\n )),\n )\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,15 @@
1
+ import {
2
+ runUnsupportedCommand
3
+ } from "./chunk-HGHTOYNL.js";
4
+ import "./chunk-6DZEO5HP.js";
5
+ import "./chunk-PZ5AY32C.js";
6
+
7
+ // src/internal/commands/spyEvidence.ts
8
+ var runSpyEvidence = (inv) => runUnsupportedCommand({
9
+ runId: inv.global.runId,
10
+ command: "spy.evidence"
11
+ });
12
+ export {
13
+ runSpyEvidence
14
+ };
15
+ //# sourceMappingURL=spyEvidence-JTJDS2WN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/commands/spyEvidence.ts"],"sourcesContent":["import { Effect } from 'effect'\n\nimport type { CliInvocation } from '../args.js'\nimport type { CommandResult } from '../result.js'\nimport { runUnsupportedCommand } from './unsupported.js'\n\ntype SpyEvidenceInvocation = Extract<CliInvocation, { readonly command: 'spy.evidence' }>\n\nexport const runSpyEvidence = (inv: SpyEvidenceInvocation): Effect.Effect<CommandResult, never> =>\n runUnsupportedCommand({\n runId: inv.global.runId,\n command: 'spy.evidence',\n })\n"],"mappings":";;;;;;;AAQO,IAAM,iBAAiB,CAAC,QAC7B,sBAAsB;AAAA,EACpB,OAAO,IAAI,OAAO;AAAA,EAClB,SAAS;AACX,CAAC;","names":[]}
@@ -0,0 +1,15 @@
1
+ import {
2
+ runUnsupportedCommand
3
+ } from "./chunk-HGHTOYNL.js";
4
+ import "./chunk-6DZEO5HP.js";
5
+ import "./chunk-PZ5AY32C.js";
6
+
7
+ // src/internal/commands/transformModule.ts
8
+ var runTransformModule = (inv) => runUnsupportedCommand({
9
+ runId: inv.global.runId,
10
+ command: "transform.module"
11
+ });
12
+ export {
13
+ runTransformModule
14
+ };
15
+ //# sourceMappingURL=transformModule-D6YE3U5W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/commands/transformModule.ts"],"sourcesContent":["import { Effect } from 'effect'\n\nimport type { CliInvocation } from '../args.js'\nimport type { CommandResult } from '../result.js'\nimport { runUnsupportedCommand } from './unsupported.js'\n\ntype TransformModuleInvocation = Extract<CliInvocation, { readonly command: 'transform.module' }>\n\nexport const runTransformModule = (inv: TransformModuleInvocation): Effect.Effect<CommandResult, never> =>\n runUnsupportedCommand({\n runId: inv.global.runId,\n command: 'transform.module',\n })\n"],"mappings":";;;;;;;AAQO,IAAM,qBAAqB,CAAC,QACjC,sBAAsB;AAAA,EACpB,OAAO,IAAI,OAAO;AAAA,EAClB,SAAS;AACX,CAAC;","names":[]}
@@ -0,0 +1,15 @@
1
+ import {
2
+ runUnsupportedCommand
3
+ } from "./chunk-HGHTOYNL.js";
4
+ import "./chunk-6DZEO5HP.js";
5
+ import "./chunk-PZ5AY32C.js";
6
+
7
+ // src/internal/commands/trialRun.ts
8
+ var runTrialRun = (inv) => runUnsupportedCommand({
9
+ runId: inv.global.runId,
10
+ command: "trialrun"
11
+ });
12
+ export {
13
+ runTrialRun
14
+ };
15
+ //# sourceMappingURL=trialRun-SWVYG67P.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/commands/trialRun.ts"],"sourcesContent":["import { Effect } from 'effect'\n\nimport type { CliInvocation } from '../args.js'\nimport type { CommandResult } from '../result.js'\nimport { runUnsupportedCommand } from './unsupported.js'\n\ntype TrialRunInvocation = Extract<CliInvocation, { readonly command: 'trialrun' }>\n\nexport const runTrialRun = (inv: TrialRunInvocation): Effect.Effect<CommandResult, never> =>\n runUnsupportedCommand({\n runId: inv.global.runId,\n command: 'trialrun',\n })\n"],"mappings":";;;;;;;AAQO,IAAM,cAAc,CAAC,QAC1B,sBAAsB;AAAA,EACpB,OAAO,IAAI,OAAO;AAAA,EAClB,SAAS;AACX,CAAC;","names":[]}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@logixjs/cli",
3
+ "version": "1.0.1",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/yoyooyooo/logix",
7
+ "directory": "packages/logix-cli"
8
+ },
9
+ "license": "Apache-2.0",
10
+ "description": "Node-only Logix CLI toolbox (IR export / trialrun / gates)",
11
+ "type": "module",
12
+ "bin": {
13
+ "logix": "dist/bin/logix.js",
14
+ "logix-devserver": "dist/bin/logix-devserver.js"
15
+ },
16
+ "files": [
17
+ "dist/**"
18
+ ],
19
+ "exports": {
20
+ "./package.json": "./package.json",
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js",
24
+ "require": "./dist/index.cjs"
25
+ },
26
+ "./Commands": {
27
+ "types": "./dist/Commands.d.ts",
28
+ "import": "./dist/Commands.js",
29
+ "require": "./dist/Commands.cjs"
30
+ },
31
+ "./internal/*": null
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "dependencies": {
37
+ "@effect/platform-node": "4.0.0-beta.28",
38
+ "effect": "4.0.0-beta.28",
39
+ "happy-dom": "^20.0.11",
40
+ "ts-morph": "^25.0.0",
41
+ "tsx": "^4.20.6",
42
+ "ws": "^8.0.0",
43
+ "@logixjs/core": "1.0.1"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^22.19.1",
47
+ "@types/ws": "^8.5.0",
48
+ "tsup": "^8.5.1",
49
+ "typescript": "5.8.2",
50
+ "vitest": "^4.0.15"
51
+ },
52
+ "peerDependencies": {
53
+ "effect": "4.0.0-beta.28",
54
+ "@logixjs/core": "1.0.1"
55
+ },
56
+ "scripts": {
57
+ "build": "tsup",
58
+ "typecheck": "tsc -p tsconfig.json --noEmit",
59
+ "typecheck:test": "tsc -p tsconfig.test.json --noEmit",
60
+ "test": "vitest run",
61
+ "test:changed": "vitest run --changed",
62
+ "test:cache": "vitest run --cache",
63
+ "measure:startup": "node ./scripts/measure-startup.mjs --samples 9 --warmup 1 --thresholdMs 500",
64
+ "measure:startup:ci": "node ./scripts/measure-startup.mjs --samples 11 --warmup 2 --thresholdMs 500 --jsonOut ./perf/startup.report.json"
65
+ },
66
+ "main": "./dist/index.cjs",
67
+ "module": "./dist/index.js",
68
+ "types": "./dist/index.d.ts"
69
+ }