@michaelfromyeg/loom-schema 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/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts","../src/component.ts","../src/evals.ts","../src/indexfile.ts","../src/lockfile.ts","../src/marketplace.ts","../src/jsonschema.ts","../src/parse.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\n/** The five coding-agent harnesses Loom compiles to. */\nexport const Target = z.enum([\"claude\", \"codex\", \"cursor\", \"copilot\", \"opencode\"]);\nexport type Target = z.infer<typeof Target>;\n\nexport const ALL_TARGETS: readonly Target[] = Target.options;\n\n/** Reverse-DNS namespace, e.g. `com.acme`. */\nexport const Namespace = z\n .string()\n .regex(/^[a-z0-9]+(\\.[a-z0-9]+)+$/, \"namespace must be reverse-DNS, e.g. com.acme\");\n\nexport const Owner = z.object({\n name: z.string(),\n namespace: Namespace,\n email: z.email().optional(),\n});\nexport type Owner = z.infer<typeof Owner>;\n\n/** A config value a component reads at runtime. Declared, never stored (§11). */\nexport const ConfigVar = z.object({\n env: z.string(),\n secret: z.boolean().default(false),\n prompt: z.string().optional(),\n default: z.string().optional(),\n required: z.boolean().default(true),\n});\nexport type ConfigVar = z.infer<typeof ConfigVar>;\n\nconst commonFields = {\n /** Which harnesses to emit for; default = all five. */\n targets: z.array(Target).optional(),\n /** Path to a `cases.yaml` eval file, relative to the plugin root. */\n evals: z.string().optional(),\n} as const;\n\n/** The seven primitive component kinds. `passthrough` is verbatim/single-target. */\nexport const COMPONENT_KINDS = [\"skill\", \"mcp\", \"agent\", \"hook\", \"command\", \"passthrough\"] as const;\nexport type ComponentKind = (typeof COMPONENT_KINDS)[number];\n\nexport const SkillComponent = z.strictObject({ ...commonFields, skill: z.string() });\nexport const McpComponent = z.strictObject({\n ...commonFields,\n mcp: z.string(),\n config: z.array(ConfigVar).optional(),\n});\nexport const AgentComponent = z.strictObject({ ...commonFields, agent: z.string() });\nexport const HookComponent = z.strictObject({ ...commonFields, hook: z.string() });\nexport const CommandComponent = z.strictObject({ ...commonFields, command: z.string() });\n\n/** A verbatim executable artifact bound to a single harness. Placed DISABLED. */\nexport const PassthroughComponent = z.strictObject({\n passthrough: z.string(),\n target: Target,\n kind: z.enum([\"hook\", \"plugin\", \"script\"]),\n default_enabled: z.boolean().default(false),\n});\n\nexport const Component = z.union([\n SkillComponent,\n McpComponent,\n AgentComponent,\n HookComponent,\n CommandComponent,\n PassthroughComponent,\n]);\nexport type Component = z.infer<typeof Component>;\n\n/** Source forms accepted for a plugin reference. */\nexport const Dependency = z.object({\n /** github:owner/repo | <git-url> | npm:<pkg> | ./path */\n plugin: z.string(),\n version: z.string().optional(),\n /** Piecemeal: pull only these leaf names (+ their shared/sibling assets). */\n components: z.array(z.string()).optional(),\n});\nexport type Dependency = z.infer<typeof Dependency>;\n\nexport const Trust = z.object({\n sign: z.boolean().default(false),\n scan: z.array(z.enum([\"schema\", \"security\"])).default([\"schema\"]),\n});\nexport type Trust = z.infer<typeof Trust>;\n\n/** `loom.yaml` — the single file an author writes. */\nexport const Plugin = z.object({\n name: z.string().regex(/^[a-z0-9-]+$/, \"plugin name must be kebab-case\"),\n version: z.string(),\n owner: Owner,\n description: z.string().optional(),\n license: z.string().optional(),\n loom_min_version: z.string().optional(),\n components: z.array(Component),\n depends: z.array(Dependency).optional(),\n trust: Trust.optional(),\n});\nexport type Plugin = z.infer<typeof Plugin>;\n","import {\n AgentComponent,\n CommandComponent,\n type Component,\n type ComponentKind,\n HookComponent,\n McpComponent,\n PassthroughComponent,\n SkillComponent,\n} from \"./plugin\";\n\n/** The key that names each component variant in `loom.yaml`. */\nconst KIND_KEYS: Record<ComponentKind, string> = {\n skill: \"skill\",\n mcp: \"mcp\",\n agent: \"agent\",\n hook: \"hook\",\n command: \"command\",\n passthrough: \"passthrough\",\n};\n\nconst VARIANT_SCHEMAS = {\n skill: SkillComponent,\n mcp: McpComponent,\n agent: AgentComponent,\n hook: HookComponent,\n command: CommandComponent,\n passthrough: PassthroughComponent,\n} as const;\n\nexport interface DetectedKind {\n kind: ComponentKind;\n}\n\n/**\n * Decide a component's kind from which discriminating key is present.\n * Returns an error string instead of throwing so callers can attach a path.\n */\nexport function detectComponentKind(\n raw: unknown,\n): { ok: true; kind: ComponentKind } | { ok: false; error: string } {\n if (typeof raw !== \"object\" || raw === null) {\n return { ok: false, error: \"component must be an object\" };\n }\n const present = (Object.keys(KIND_KEYS) as ComponentKind[]).filter(\n (kind) => KIND_KEYS[kind] in (raw as Record<string, unknown>),\n );\n if (present.length === 0) {\n return {\n ok: false,\n error: `component has no kind key (one of: ${Object.values(KIND_KEYS).join(\", \")})`,\n };\n }\n if (present.length > 1) {\n return {\n ok: false,\n error: `component has conflicting kind keys: ${present.join(\", \")}`,\n };\n }\n return { ok: true, kind: present[0] as ComponentKind };\n}\n\n/** The schema for a detected kind — used by the loader for path-precise errors. */\nexport function schemaForKind(kind: ComponentKind) {\n return VARIANT_SCHEMAS[kind];\n}\n\n/** The kind of an already-validated component. */\nexport function kindOf(component: Component): ComponentKind {\n const detected = detectComponentKind(component);\n if (!detected.ok) throw new Error(detected.error);\n return detected.kind;\n}\n\n/** The relative path (skill dir, mcp dir, hook file, …) this component points at. */\nexport function refOf(component: Component): string {\n const c = component as Record<string, unknown>;\n const kind = kindOf(component);\n return c[KIND_KEYS[kind]] as string;\n}\n\n/**\n * The leaf name used to build a fully-qualified id `{namespace}/{plugin}:{leaf}`.\n * Derived from the basename of the component's ref, stripping a known extension.\n */\nexport function leafNameOf(component: Component): string {\n const ref = refOf(component);\n const base = ref.split(\"/\").filter(Boolean).pop() ?? ref;\n return base.replace(/\\.(md|json|toml|ya?ml|ts|js|sh)$/i, \"\");\n}\n\n/** Harnesses this component targets, defaulting to all when unspecified. */\nexport function targetsOf(component: Component, all: readonly string[]): readonly string[] {\n if (\"target\" in component && typeof component.target === \"string\") {\n return [component.target];\n }\n if (\"targets\" in component && component.targets && component.targets.length > 0) {\n return component.targets;\n }\n return all;\n}\n\n/** Build the canonical fully-qualified id for a component. */\nexport function fqid(namespace: string, bundleName: string, leaf: string): string {\n return `${namespace}/${bundleName}:${leaf}`;\n}\n","import { z } from \"zod\";\nimport { Target } from \"./plugin\";\n\nconst TraceAssert = z.object({\n kind: z.literal(\"trace\"),\n toolCalled: z.string().optional(),\n toolNotCalled: z.string().optional(),\n /** Required call order. */\n sequence: z.array(z.string()).optional(),\n /** Path-efficiency ceiling. */\n maxCalls: z.number().optional(),\n minPassRate: z.number().min(0).max(1).default(1.0),\n});\nexport type TraceAssert = z.infer<typeof TraceAssert>;\n\nconst OutputAssert = z.object({\n kind: z.literal(\"output\"),\n equals: z.string().optional(),\n matches: z.string().optional(),\n jsonSchema: z.string().optional(),\n tolerance: z.number().optional(),\n});\nexport type OutputAssert = z.infer<typeof OutputAssert>;\n\nconst JudgeAssert = z.object({\n kind: z.literal(\"judge\"),\n rubric: z.string(),\n mode: z.enum([\"absolute\", \"pairwise\"]).default(\"pairwise\"),\n /** Required for pairwise. */\n reference: z.string().optional(),\n samples: z.number().default(3),\n /** Absolute mode only. */\n threshold: z.number().optional(),\n /** Advisory unless true. */\n gate: z.boolean().default(false),\n});\nexport type JudgeAssert = z.infer<typeof JudgeAssert>;\n\nconst DifferentialAssert = z.object({\n kind: z.literal(\"differential\"),\n baseline: z.string().default(\"last-release\"),\n noWorseThan: z.number().default(0.0),\n});\nexport type DifferentialAssert = z.infer<typeof DifferentialAssert>;\n\nexport const Assertion = z.discriminatedUnion(\"kind\", [\n TraceAssert,\n OutputAssert,\n JudgeAssert,\n DifferentialAssert,\n]);\nexport type Assertion = z.infer<typeof Assertion>;\n\nexport const Case = z.object({\n name: z.string(),\n prompt: z.string(),\n /** Shell, run before. */\n setup: z.string().optional(),\n /** Shell, exit 0 = pass (post-state check). */\n verify: z.string().optional(),\n cleanup: z.string().optional(),\n samples: z.number().default(1),\n assert: z.array(Assertion),\n});\nexport type Case = z.infer<typeof Case>;\n\n/** `cases.yaml` — evals for one component. */\nexport const EvalFile = z.object({\n /** Fully-qualified component id. */\n component: z.string(),\n /** Which harnesses to run; others reported UNTESTED. */\n harnesses: z.array(Target),\n cases: z.array(Case),\n});\nexport type EvalFile = z.infer<typeof EvalFile>;\n","import { z } from \"zod\";\nimport { Target } from \"./plugin\";\n\n/** Trust badges (spec §10). valid/tested are computed in Phase 2; the rest in Phase 3. */\nexport const Badge = z.enum([\"valid\", \"tested\", \"verified\", \"scanned\", \"signed\"]);\nexport type Badge = z.infer<typeof Badge>;\n\nexport const IndexVersion = z.object({\n version: z.string(),\n ref: z.string(),\n sha: z.string(),\n badges: z.array(Badge),\n /** Harnesses with passing deterministic eval runs. */\n harnessCoverage: z.array(Target),\n});\nexport type IndexVersion = z.infer<typeof IndexVersion>;\n\nexport const IndexEntry = z.object({\n id: z.string(),\n source: z.string(),\n versions: z.array(IndexVersion),\n /** Aggregate, opt-in only -- never per-user. */\n telemetry: z\n .object({\n installs: z.number().default(0),\n activeUsage: z.number().default(0),\n })\n .optional(),\n});\nexport type IndexEntry = z.infer<typeof IndexEntry>;\n\n/** `loom.index/1` -- a metadata-only aggregator (spec §10), self-hostable static JSON. */\nexport const IndexFile = z.object({\n schema: z.literal(\"loom.index/1\"),\n plugins: z.array(IndexEntry),\n federated: z.array(z.object({ source: z.string(), ingestedAt: z.string() })).optional(),\n});\nexport type IndexFile = z.infer<typeof IndexFile>;\n","import { z } from \"zod\";\nimport { Target } from \"./plugin\";\n\nexport const Scope = z.enum([\"user\", \"project\"]);\nexport type Scope = z.infer<typeof Scope>;\n\nexport const ArtifactRecord = z.object({\n /** Fully-qualified component id. */\n component: z.string(),\n target: Target,\n scope: Scope,\n /** Absolute placement path. */\n path: z.string(),\n /** sha256 of compiled output. */\n hash: z.string(),\n placement: z.enum([\"copy\", \"shared\"]),\n /** Executable artifacts start disabled (§11). */\n enabled: z.boolean(),\n});\nexport type ArtifactRecord = z.infer<typeof ArtifactRecord>;\n\nexport const AdapterRecord = z.object({\n version: z.string(),\n targetSchema: z.string(),\n});\n\n/** `loom.lock` — generated and committed; drives update/uninstall/verify. */\nexport const Lockfile = z.object({\n loomVersion: z.string(),\n generatedAt: z.string(),\n plugin: z.object({\n id: z.string(),\n version: z.string(),\n ref: z.string(),\n sha: z.string(),\n }),\n dependencies: z.array(\n z.object({\n id: z.string(),\n range: z.string(),\n resolvedSha: z.string(),\n }),\n ),\n artifacts: z.array(ArtifactRecord),\n adapters: z\n .object({\n claude: AdapterRecord.optional(),\n codex: AdapterRecord.optional(),\n cursor: AdapterRecord.optional(),\n copilot: AdapterRecord.optional(),\n opencode: AdapterRecord.optional(),\n })\n .partial(),\n /** Bare leaf name -> fully-qualified id (§9.4). */\n aliases: z.record(z.string(), z.string()),\n});\nexport type Lockfile = z.infer<typeof Lockfile>;\n","import { z } from \"zod\";\nimport { Owner } from \"./plugin\";\n\nexport const MarketplaceEntry = z.object({\n /** Same source forms as Dependency.plugin. */\n plugin: z.string(),\n version: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\nexport type MarketplaceEntry = z.infer<typeof MarketplaceEntry>;\n\n/** `marketplace.yaml` — a curated catalog compiled to each harness's native form. */\nexport const Marketplace = z.object({\n name: z.string().regex(/^[a-z0-9-]+$/, \"marketplace name must be kebab-case\"),\n owner: Owner,\n description: z.string().optional(),\n plugins: z.array(MarketplaceEntry),\n /** Permitted external namespaces a plugin here may depend on. */\n allow_dependencies_on: z.array(z.string()).optional(),\n});\nexport type Marketplace = z.infer<typeof Marketplace>;\n","import { z } from \"zod\";\nimport { EvalFile } from \"./evals\";\nimport { Lockfile } from \"./lockfile\";\nimport { Marketplace } from \"./marketplace\";\nimport { Plugin } from \"./plugin\";\n\n/** Canonical manifests for which we publish a `$schema` for editor autocomplete. */\nexport const SCHEMAS = {\n \"loom.yaml\": Plugin,\n \"marketplace.yaml\": Marketplace,\n \"loom.lock\": Lockfile,\n \"cases.yaml\": EvalFile,\n} as const;\n\nexport type SchemaName = keyof typeof SCHEMAS;\n\n/** Export a JSON Schema (draft 2020-12) for one canonical manifest. */\nexport function jsonSchemaFor(name: SchemaName): unknown {\n return z.toJSONSchema(SCHEMAS[name], { target: \"draft-2020-12\" });\n}\n\n/** Export JSON Schemas for every canonical manifest, keyed by file name. */\nexport function allJsonSchemas(): Record<SchemaName, unknown> {\n const out = {} as Record<SchemaName, unknown>;\n for (const name of Object.keys(SCHEMAS) as SchemaName[]) {\n out[name] = jsonSchemaFor(name);\n }\n return out;\n}\n","import JSON5 from \"json5\";\nimport * as YAML from \"yaml\";\nimport type { z } from \"zod\";\nimport { detectComponentKind, schemaForKind } from \"./component\";\nimport { Plugin } from \"./plugin\";\n\nexport type DocFormat = \"yaml\" | \"json5\" | \"auto\";\n\nexport interface ParseIssue {\n path: string;\n message: string;\n}\nexport type ParseResult<T> = { ok: true; value: T } | { ok: false; issues: ParseIssue[] };\n\nfunction guessFormat(filename?: string): \"yaml\" | \"json5\" {\n if (filename && /\\.json5$/i.test(filename)) return \"json5\";\n return \"yaml\";\n}\n\n/**\n * Read raw manifest text into a plain object.\n *\n * YAML is parsed in **1.2 core** mode, which kills the \"Norway problem\": only\n * `true`/`false` are booleans, so `no`/`yes`/`on`/`off` stay strings. (Unquoted\n * `1.10` still becomes the float `1.1` per YAML semantics — but version fields\n * are typed as strings, so that surfaces as a precise Zod error telling the\n * author to quote it.) `strict` rejects duplicate keys. JSON5 input is accepted\n * against the same schemas.\n */\nexport function parseDocument(\n text: string,\n format: DocFormat = \"auto\",\n filename?: string,\n): unknown {\n const fmt = format === \"auto\" ? guessFormat(filename) : format;\n if (fmt === \"json5\") return JSON5.parse(text);\n return YAML.parse(text, { version: \"1.2\", schema: \"core\", strict: true });\n}\n\n/** Serialize an object back to YAML 1.2 (used when writing a generated manifest). */\nexport function stringifyDocument(obj: unknown): string {\n return YAML.stringify(obj, { version: \"1.2\" });\n}\n\nfunction pathStr(path: ReadonlyArray<PropertyKey>): string {\n let out = \"\";\n for (const seg of path) {\n if (typeof seg === \"number\") out += `[${seg}]`;\n else {\n const key = String(seg);\n out += out ? `.${key}` : key;\n }\n }\n return out;\n}\n\n/** Validate an already-parsed object against a schema, returning path-precise issues. */\nexport function validate<T>(schema: z.ZodType<T>, raw: unknown): ParseResult<T> {\n const r = schema.safeParse(raw);\n if (r.success) return { ok: true, value: r.data };\n return {\n ok: false,\n issues: r.error.issues.map((iss) => ({ path: pathStr(iss.path), message: iss.message })),\n };\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\n/**\n * Parse a plugin with kind-aware component routing, so a malformed component\n * produces `components[2].mcp: Required` rather than a noisy union error.\n */\nexport function parsePlugin(raw: unknown): ParseResult<Plugin> {\n const issues: ParseIssue[] = [];\n\n if (isRecord(raw) && Array.isArray(raw.components)) {\n raw.components.forEach((c, i) => {\n const det = detectComponentKind(c);\n if (!det.ok) {\n issues.push({ path: `components[${i}]`, message: det.error });\n return;\n }\n const r = schemaForKind(det.kind).safeParse(c);\n if (!r.success) {\n for (const iss of r.error.issues) {\n issues.push({ path: `components[${i}].${pathStr(iss.path)}`, message: iss.message });\n }\n }\n });\n }\n\n const full = Plugin.safeParse(raw);\n if (!full.success) {\n for (const iss of full.error.issues) {\n // Skip generic union noise on components — pass 1 gave precise messages.\n if (issues.length > 0 && iss.path[0] === \"components\") continue;\n issues.push({ path: pathStr(iss.path), message: iss.message });\n }\n }\n\n if (issues.length > 0) return { ok: false, issues };\n // No issues means the full parse succeeded (a bad component fails Plugin too).\n return { ok: true, value: (full as { data: Plugin }).data };\n}\n\n/** Convenience: read text (YAML/JSON5) and validate against any schema. */\nexport function loadManifest<T>(\n schema: z.ZodType<T>,\n text: string,\n opts: { format?: DocFormat; filename?: string } = {},\n): ParseResult<T> {\n let raw: unknown;\n try {\n raw = parseDocument(text, opts.format ?? \"auto\", opts.filename);\n } catch (err) {\n return { ok: false, issues: [{ path: \"\", message: `parse error: ${(err as Error).message}` }] };\n }\n return validate(schema, raw);\n}\n\n/** Read text (YAML/JSON5) and parse as a plugin with component routing. */\nexport function loadPlugin(\n text: string,\n opts: { format?: DocFormat; filename?: string } = {},\n): ParseResult<Plugin> {\n let raw: unknown;\n try {\n raw = parseDocument(text, opts.format ?? \"auto\", opts.filename);\n } catch (err) {\n return { ok: false, issues: [{ path: \"\", message: `parse error: ${(err as Error).message}` }] };\n }\n return parsePlugin(raw);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts","../src/component.ts","../src/evals.ts","../src/indexfile.ts","../src/lockfile.ts","../src/marketplace.ts","../src/jsonschema.ts","../src/parse.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\n/** The five coding-agent harnesses Loom compiles to. */\nexport const Target = z.enum([\"claude\", \"codex\", \"cursor\", \"copilot\", \"opencode\"]);\nexport type Target = z.infer<typeof Target>;\n\nexport const ALL_TARGETS: readonly Target[] = Target.options;\n\n/** Reverse-DNS namespace, e.g. `com.acme`. */\nexport const Namespace = z\n .string()\n .regex(/^[a-z0-9]+(\\.[a-z0-9]+)+$/, \"namespace must be reverse-DNS, e.g. com.acme\");\n\nexport const Owner = z.object({\n name: z.string(),\n namespace: Namespace,\n email: z.email().optional(),\n});\nexport type Owner = z.infer<typeof Owner>;\n\n/** A config value a component reads at runtime. Declared, never stored (§11). */\nexport const ConfigVar = z.object({\n env: z.string(),\n secret: z.boolean().default(false),\n prompt: z.string().optional(),\n default: z.string().optional(),\n required: z.boolean().default(true),\n});\nexport type ConfigVar = z.infer<typeof ConfigVar>;\n\nconst commonFields = {\n /** Which harnesses to emit for; default = all five. */\n targets: z.array(Target).optional(),\n /** Path to a `cases.yaml` eval file, relative to the plugin root. */\n evals: z.string().optional(),\n} as const;\n\n/** The seven primitive component kinds. `passthrough` is verbatim/single-target. */\nexport const COMPONENT_KINDS = [\"skill\", \"mcp\", \"agent\", \"hook\", \"command\", \"passthrough\"] as const;\nexport type ComponentKind = (typeof COMPONENT_KINDS)[number];\n\nexport const SkillComponent = z.strictObject({ ...commonFields, skill: z.string() });\nexport const McpComponent = z.strictObject({\n ...commonFields,\n mcp: z.string(),\n config: z.array(ConfigVar).optional(),\n});\nexport const AgentComponent = z.strictObject({ ...commonFields, agent: z.string() });\nexport const HookComponent = z.strictObject({ ...commonFields, hook: z.string() });\nexport const CommandComponent = z.strictObject({ ...commonFields, command: z.string() });\n\n/** A verbatim executable artifact bound to a single harness. Placed DISABLED. */\nexport const PassthroughComponent = z.strictObject({\n passthrough: z.string(),\n target: Target,\n kind: z.enum([\"hook\", \"plugin\", \"script\"]),\n default_enabled: z.boolean().default(false),\n});\n\nexport const Component = z.union([\n SkillComponent,\n McpComponent,\n AgentComponent,\n HookComponent,\n CommandComponent,\n PassthroughComponent,\n]);\nexport type Component = z.infer<typeof Component>;\n\n/** Source forms accepted for a plugin reference. */\nexport const Dependency = z.object({\n /** github:owner/repo | <git-url> | npm:<pkg> | ./path */\n plugin: z.string(),\n version: z.string().optional(),\n /** Piecemeal: pull only these leaf names (+ their shared/sibling assets). */\n components: z.array(z.string()).optional(),\n});\nexport type Dependency = z.infer<typeof Dependency>;\n\nexport const Trust = z.object({\n sign: z.boolean().default(false),\n scan: z.array(z.enum([\"schema\", \"security\"])).default([\"schema\"]),\n});\nexport type Trust = z.infer<typeof Trust>;\n\n/** `loom.yaml` — the single file an author writes. */\nexport const Plugin = z.object({\n name: z.string().regex(/^[a-z0-9-]+$/, \"plugin name must be kebab-case\"),\n version: z.string(),\n owner: Owner,\n description: z.string().optional(),\n license: z.string().optional(),\n loom_min_version: z.string().optional(),\n components: z.array(Component),\n depends: z.array(Dependency).optional(),\n trust: Trust.optional(),\n});\nexport type Plugin = z.infer<typeof Plugin>;\n","import {\n AgentComponent,\n CommandComponent,\n type Component,\n type ComponentKind,\n HookComponent,\n McpComponent,\n PassthroughComponent,\n SkillComponent,\n} from \"./plugin\";\n\n/** The key that names each component variant in `loom.yaml`. */\nconst KIND_KEYS: Record<ComponentKind, string> = {\n skill: \"skill\",\n mcp: \"mcp\",\n agent: \"agent\",\n hook: \"hook\",\n command: \"command\",\n passthrough: \"passthrough\",\n};\n\nconst VARIANT_SCHEMAS = {\n skill: SkillComponent,\n mcp: McpComponent,\n agent: AgentComponent,\n hook: HookComponent,\n command: CommandComponent,\n passthrough: PassthroughComponent,\n} as const;\n\nexport interface DetectedKind {\n kind: ComponentKind;\n}\n\n/**\n * Decide a component's kind from which discriminating key is present.\n * Returns an error string instead of throwing so callers can attach a path.\n */\nexport function detectComponentKind(\n raw: unknown,\n): { ok: true; kind: ComponentKind } | { ok: false; error: string } {\n if (typeof raw !== \"object\" || raw === null) {\n return { ok: false, error: \"component must be an object\" };\n }\n const present = (Object.keys(KIND_KEYS) as ComponentKind[]).filter(\n (kind) => KIND_KEYS[kind] in (raw as Record<string, unknown>),\n );\n if (present.length === 0) {\n return {\n ok: false,\n error: `component has no kind key (one of: ${Object.values(KIND_KEYS).join(\", \")})`,\n };\n }\n if (present.length > 1) {\n return {\n ok: false,\n error: `component has conflicting kind keys: ${present.join(\", \")}`,\n };\n }\n return { ok: true, kind: present[0] as ComponentKind };\n}\n\n/** The schema for a detected kind — used by the loader for path-precise errors. */\nexport function schemaForKind(kind: ComponentKind) {\n return VARIANT_SCHEMAS[kind];\n}\n\n/** The kind of an already-validated component. */\nexport function kindOf(component: Component): ComponentKind {\n const detected = detectComponentKind(component);\n if (!detected.ok) throw new Error(detected.error);\n return detected.kind;\n}\n\n/** The relative path (skill dir, mcp dir, hook file, …) this component points at. */\nexport function refOf(component: Component): string {\n const c = component as Record<string, unknown>;\n const kind = kindOf(component);\n return c[KIND_KEYS[kind]] as string;\n}\n\n/**\n * The leaf name used to build a fully-qualified id `{namespace}/{plugin}:{leaf}`.\n * Derived from the basename of the component's ref, stripping a known extension.\n */\nexport function leafNameOf(component: Component): string {\n const ref = refOf(component);\n const base = ref.split(\"/\").filter(Boolean).pop() ?? ref;\n return base.replace(/\\.(md|json|toml|ya?ml|ts|js|sh)$/i, \"\");\n}\n\n/** Harnesses this component targets, defaulting to all when unspecified. */\nexport function targetsOf(component: Component, all: readonly string[]): readonly string[] {\n if (\"target\" in component && typeof component.target === \"string\") {\n return [component.target];\n }\n if (\"targets\" in component && component.targets && component.targets.length > 0) {\n return component.targets;\n }\n return all;\n}\n\n/** Build the canonical fully-qualified id for a component. */\nexport function fqid(namespace: string, bundleName: string, leaf: string): string {\n return `${namespace}/${bundleName}:${leaf}`;\n}\n","import { z } from \"zod\";\nimport { Target } from \"./plugin\";\n\nconst TraceAssert = z.object({\n kind: z.literal(\"trace\"),\n toolCalled: z.string().optional(),\n toolNotCalled: z.string().optional(),\n /** Required call order. */\n sequence: z.array(z.string()).optional(),\n /** Path-efficiency ceiling. */\n maxCalls: z.number().optional(),\n minPassRate: z.number().min(0).max(1).default(1.0),\n});\nexport type TraceAssert = z.infer<typeof TraceAssert>;\n\nconst OutputAssert = z.object({\n kind: z.literal(\"output\"),\n equals: z.string().optional(),\n matches: z.string().optional(),\n jsonSchema: z.string().optional(),\n tolerance: z.number().optional(),\n});\nexport type OutputAssert = z.infer<typeof OutputAssert>;\n\nconst JudgeAssert = z.object({\n kind: z.literal(\"judge\"),\n rubric: z.string(),\n mode: z.enum([\"absolute\", \"pairwise\"]).default(\"pairwise\"),\n /** Required for pairwise. */\n reference: z.string().optional(),\n samples: z.number().default(3),\n /** Absolute mode only. */\n threshold: z.number().optional(),\n /** Advisory unless true. */\n gate: z.boolean().default(false),\n});\nexport type JudgeAssert = z.infer<typeof JudgeAssert>;\n\nconst DifferentialAssert = z.object({\n kind: z.literal(\"differential\"),\n baseline: z.string().default(\"last-release\"),\n noWorseThan: z.number().default(0.0),\n});\nexport type DifferentialAssert = z.infer<typeof DifferentialAssert>;\n\nexport const Assertion = z.discriminatedUnion(\"kind\", [\n TraceAssert,\n OutputAssert,\n JudgeAssert,\n DifferentialAssert,\n]);\nexport type Assertion = z.infer<typeof Assertion>;\n\nexport const Case = z.object({\n name: z.string(),\n prompt: z.string(),\n /** Shell, run before. */\n setup: z.string().optional(),\n /** Shell, exit 0 = pass (post-state check). */\n verify: z.string().optional(),\n cleanup: z.string().optional(),\n samples: z.number().default(1),\n assert: z.array(Assertion),\n});\nexport type Case = z.infer<typeof Case>;\n\n/** `cases.yaml` — evals for one component. */\nexport const EvalFile = z.object({\n /** Fully-qualified component id. */\n component: z.string(),\n /** Which harnesses to run; others reported UNTESTED. */\n harnesses: z.array(Target),\n cases: z.array(Case),\n});\nexport type EvalFile = z.infer<typeof EvalFile>;\n","import { z } from \"zod\";\nimport { Target } from \"./plugin\";\n\n/** Trust badges (spec §10). valid/tested are computed in Phase 2; the rest in Phase 3. */\nexport const Badge = z.enum([\"valid\", \"tested\", \"verified\", \"scanned\", \"signed\"]);\nexport type Badge = z.infer<typeof Badge>;\n\nexport const IndexVersion = z.object({\n version: z.string(),\n ref: z.string(),\n sha: z.string(),\n badges: z.array(Badge),\n /** Harnesses with passing deterministic eval runs. */\n harnessCoverage: z.array(Target),\n});\nexport type IndexVersion = z.infer<typeof IndexVersion>;\n\nexport const IndexEntry = z.object({\n id: z.string(),\n source: z.string(),\n versions: z.array(IndexVersion),\n /** Aggregate, opt-in only -- never per-user. */\n telemetry: z\n .object({\n installs: z.number().default(0),\n activeUsage: z.number().default(0),\n })\n .optional(),\n});\nexport type IndexEntry = z.infer<typeof IndexEntry>;\n\n/** `loom.index/1` -- a metadata-only aggregator (spec §10), self-hostable static JSON. */\nexport const IndexFile = z.object({\n schema: z.literal(\"loom.index/1\"),\n plugins: z.array(IndexEntry),\n federated: z.array(z.object({ source: z.string(), ingestedAt: z.string() })).optional(),\n});\nexport type IndexFile = z.infer<typeof IndexFile>;\n","import { z } from \"zod\";\nimport { Target } from \"./plugin\";\n\nexport const Scope = z.enum([\"user\", \"project\"]);\nexport type Scope = z.infer<typeof Scope>;\n\nexport const ArtifactRecord = z.object({\n /** Fully-qualified component id. */\n component: z.string(),\n target: Target,\n scope: Scope,\n /** Absolute placement path. */\n path: z.string(),\n /** sha256 of compiled output. */\n hash: z.string(),\n placement: z.enum([\"copy\", \"shared\"]),\n /** Executable artifacts start disabled (§11). */\n enabled: z.boolean(),\n});\nexport type ArtifactRecord = z.infer<typeof ArtifactRecord>;\n\nexport const AdapterRecord = z.object({\n version: z.string(),\n targetSchema: z.string(),\n});\n\n/** `loom.lock` — generated and committed; drives update/uninstall/verify. */\nexport const Lockfile = z.object({\n loomVersion: z.string(),\n generatedAt: z.string(),\n plugin: z.object({\n id: z.string(),\n version: z.string(),\n ref: z.string(),\n sha: z.string(),\n }),\n dependencies: z.array(\n z.object({\n id: z.string(),\n range: z.string(),\n resolvedSha: z.string(),\n }),\n ),\n artifacts: z.array(ArtifactRecord),\n adapters: z\n .object({\n claude: AdapterRecord.optional(),\n codex: AdapterRecord.optional(),\n cursor: AdapterRecord.optional(),\n copilot: AdapterRecord.optional(),\n opencode: AdapterRecord.optional(),\n })\n .partial(),\n /** Bare leaf name -> fully-qualified id (§9.4). */\n aliases: z.record(z.string(), z.string()),\n});\nexport type Lockfile = z.infer<typeof Lockfile>;\n","import { z } from \"zod\";\nimport { Owner } from \"./plugin\";\n\nexport const MarketplaceEntry = z.object({\n /** Same source forms as Dependency.plugin. */\n plugin: z.string(),\n version: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\nexport type MarketplaceEntry = z.infer<typeof MarketplaceEntry>;\n\n/** `marketplace.yaml` — a curated catalog compiled to each harness's native form. */\nexport const Marketplace = z.object({\n name: z.string().regex(/^[a-z0-9-]+$/, \"marketplace name must be kebab-case\"),\n owner: Owner,\n description: z.string().optional(),\n plugins: z.array(MarketplaceEntry),\n /** Permitted external namespaces a plugin here may depend on. */\n allow_dependencies_on: z.array(z.string()).optional(),\n});\nexport type Marketplace = z.infer<typeof Marketplace>;\n","import { z } from \"zod\";\nimport { EvalFile } from \"./evals\";\nimport { Lockfile } from \"./lockfile\";\nimport { Marketplace } from \"./marketplace\";\nimport { Plugin } from \"./plugin\";\n\n/** Canonical manifests for which we publish a `$schema` for editor autocomplete. */\nexport const SCHEMAS = {\n \"loom.yaml\": Plugin,\n \"marketplace.yaml\": Marketplace,\n \"loom.lock\": Lockfile,\n \"cases.yaml\": EvalFile,\n} as const;\n\nexport type SchemaName = keyof typeof SCHEMAS;\n\n/** Export a JSON Schema (draft 2020-12) for one canonical manifest. */\nexport function jsonSchemaFor(name: SchemaName): unknown {\n return z.toJSONSchema(SCHEMAS[name], { target: \"draft-2020-12\" });\n}\n\n/** Export JSON Schemas for every canonical manifest, keyed by file name. */\nexport function allJsonSchemas(): Record<SchemaName, unknown> {\n const out = {} as Record<SchemaName, unknown>;\n for (const name of Object.keys(SCHEMAS) as SchemaName[]) {\n out[name] = jsonSchemaFor(name);\n }\n return out;\n}\n","import JSON5 from \"json5\";\nimport * as YAML from \"yaml\";\nimport type { z } from \"zod\";\nimport { detectComponentKind, schemaForKind } from \"./component\";\nimport { Plugin } from \"./plugin\";\n\nexport type DocFormat = \"yaml\" | \"json5\" | \"auto\";\n\nexport interface ParseIssue {\n path: string;\n message: string;\n}\nexport type ParseResult<T> = { ok: true; value: T } | { ok: false; issues: ParseIssue[] };\n\nfunction guessFormat(filename?: string): \"yaml\" | \"json5\" {\n if (filename && /\\.json5$/i.test(filename)) return \"json5\";\n return \"yaml\";\n}\n\n/**\n * Read raw manifest text into a plain object.\n *\n * YAML is parsed in **1.2 core** mode, which kills the \"Norway problem\": only\n * `true`/`false` are booleans, so `no`/`yes`/`on`/`off` stay strings. (Unquoted\n * `1.10` still becomes the float `1.1` per YAML semantics — but version fields\n * are typed as strings, so that surfaces as a precise Zod error telling the\n * author to quote it.) `strict` rejects duplicate keys. JSON5 input is accepted\n * against the same schemas.\n */\nexport function parseDocument(\n text: string,\n format: DocFormat = \"auto\",\n filename?: string,\n): unknown {\n const fmt = format === \"auto\" ? guessFormat(filename) : format;\n if (fmt === \"json5\") return JSON5.parse(text);\n return YAML.parse(text, { version: \"1.2\", schema: \"core\", strict: true });\n}\n\n/** Serialize an object back to YAML 1.2 (used when writing a generated manifest). */\nexport function stringifyDocument(obj: unknown): string {\n return YAML.stringify(obj, { version: \"1.2\" });\n}\n\nfunction pathStr(path: readonly PropertyKey[]): string {\n let out = \"\";\n for (const seg of path) {\n if (typeof seg === \"number\") out += `[${seg}]`;\n else {\n const key = String(seg);\n out += out ? `.${key}` : key;\n }\n }\n return out;\n}\n\n/** Validate an already-parsed object against a schema, returning path-precise issues. */\nexport function validate<T>(schema: z.ZodType<T>, raw: unknown): ParseResult<T> {\n const r = schema.safeParse(raw);\n if (r.success) return { ok: true, value: r.data };\n return {\n ok: false,\n issues: r.error.issues.map((iss) => ({ path: pathStr(iss.path), message: iss.message })),\n };\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\n/**\n * Parse a plugin with kind-aware component routing, so a malformed component\n * produces `components[2].mcp: Required` rather than a noisy union error.\n */\nexport function parsePlugin(raw: unknown): ParseResult<Plugin> {\n const issues: ParseIssue[] = [];\n\n if (isRecord(raw) && Array.isArray(raw.components)) {\n raw.components.forEach((c, i) => {\n const det = detectComponentKind(c);\n if (!det.ok) {\n issues.push({ path: `components[${i}]`, message: det.error });\n return;\n }\n const r = schemaForKind(det.kind).safeParse(c);\n if (!r.success) {\n for (const iss of r.error.issues) {\n issues.push({ path: `components[${i}].${pathStr(iss.path)}`, message: iss.message });\n }\n }\n });\n }\n\n const full = Plugin.safeParse(raw);\n if (!full.success) {\n for (const iss of full.error.issues) {\n // Skip generic union noise on components — pass 1 gave precise messages.\n if (issues.length > 0 && iss.path[0] === \"components\") continue;\n issues.push({ path: pathStr(iss.path), message: iss.message });\n }\n }\n\n if (issues.length > 0) return { ok: false, issues };\n // No issues means the full parse succeeded (a bad component fails Plugin too).\n return { ok: true, value: (full as { data: Plugin }).data };\n}\n\n/** Convenience: read text (YAML/JSON5) and validate against any schema. */\nexport function loadManifest<T>(\n schema: z.ZodType<T>,\n text: string,\n opts: { format?: DocFormat; filename?: string } = {},\n): ParseResult<T> {\n let raw: unknown;\n try {\n raw = parseDocument(text, opts.format ?? \"auto\", opts.filename);\n } catch (err) {\n return { ok: false, issues: [{ path: \"\", message: `parse error: ${(err as Error).message}` }] };\n }\n return validate(schema, raw);\n}\n\n/** Read text (YAML/JSON5) and parse as a plugin with component routing. */\nexport function loadPlugin(\n text: string,\n opts: { format?: DocFormat; filename?: string } = {},\n): ParseResult<Plugin> {\n let raw: unknown;\n try {\n raw = parseDocument(text, opts.format ?? \"auto\", opts.filename);\n } catch (err) {\n return { ok: false, issues: [{ path: \"\", message: `parse error: ${(err as Error).message}` }] };\n }\n return parsePlugin(raw);\n}\n"]}
|