@x12i/sdk 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +47 -0
  2. package/dist/admin-import.d.ts +6 -0
  3. package/dist/admin-import.js +127 -0
  4. package/dist/admin-import.js.map +1 -0
  5. package/dist/admin-mcp.d.ts +3 -0
  6. package/dist/admin-mcp.js +60 -0
  7. package/dist/admin-mcp.js.map +1 -0
  8. package/dist/admin.d.ts +63 -0
  9. package/dist/admin.js +259 -0
  10. package/dist/admin.js.map +1 -0
  11. package/dist/cli.d.ts +2 -0
  12. package/dist/cli.js +68 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/client.d.ts +74 -195
  15. package/dist/client.js +187 -695
  16. package/dist/client.js.map +1 -1
  17. package/dist/identity.d.ts +8 -0
  18. package/dist/identity.js +34 -0
  19. package/dist/identity.js.map +1 -0
  20. package/dist/index.d.ts +6 -22
  21. package/dist/index.js +6 -12
  22. package/dist/index.js.map +1 -1
  23. package/dist/init.d.ts +18 -0
  24. package/dist/init.js +147 -0
  25. package/dist/init.js.map +1 -0
  26. package/dist/maturity.d.ts +65 -0
  27. package/dist/maturity.js +138 -0
  28. package/dist/maturity.js.map +1 -0
  29. package/dist/mcp.d.ts +27 -0
  30. package/dist/mcp.js +168 -0
  31. package/dist/mcp.js.map +1 -0
  32. package/dist/protocol.d.ts +38 -0
  33. package/dist/protocol.js +168 -0
  34. package/dist/protocol.js.map +1 -0
  35. package/dist/rank.d.ts +19 -0
  36. package/dist/rank.js +82 -0
  37. package/dist/rank.js.map +1 -0
  38. package/dist/runner.d.ts +22 -0
  39. package/dist/runner.js +99 -0
  40. package/dist/runner.js.map +1 -0
  41. package/package.json +66 -61
  42. package/LICENSE +0 -21
  43. package/dist/client.d.ts.map +0 -1
  44. package/dist/index.d.ts.map +0 -1
  45. package/dist/registry.d.ts +0 -8
  46. package/dist/registry.d.ts.map +0 -1
  47. package/dist/registry.js +0 -21
  48. package/dist/registry.js.map +0 -1
package/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # @x12i/sdk
2
+
3
+ Version 1.0.0 is the catalog SDK. The earlier web client remains installable as `@x12i/sdk@0.4.0`.
4
+
5
+ Find an `@x12i` package that fits a task, read its README and maturity, and file a signed review other code agents can see.
6
+
7
+ The catalog and the ratings come from the x12i SDK service. A README is shown from the catalog cache first. When that cache is older than the publish time the catalog knows, the SDK fetches the current README and returns both. Listing and README text can also be read straight from the npm registry through `@x12i/npm-core` when that service is unreachable. Those registry matches are labeled unranked.
8
+
9
+ ```bash
10
+ npx @x12i/sdk init
11
+ npx @x12i/sdk init --all
12
+ npx @x12i/sdk init --global
13
+ npx @x12i/sdk mcp
14
+ npx @x12i/sdk readme @x12i/sdk
15
+ ```
16
+
17
+ `init` with no host flags writes Cursor's `.cursor/mcp.json` and `.cursor/rules/x12i-sdk.mdc`. `--claude` and `--codex` add Claude Code and Codex. `--all` writes all three. Existing MCP servers are left in place. The first run also creates an Ed25519 install key under `%LOCALAPPDATA%\x12i\sdk` on Windows (or the platform config directory). The private key stays there. There is no shared API key in this package.
18
+
19
+ The rule tells the agent to call `x12i_search` before adding a dependency x12i might already publish, and `x12i_review` after trying one.
20
+
21
+ The service is `https://x12i-sdk.x12i.com`. `X12I_SDK_URL` overrides it. Use `http://127.0.0.1:8789` for the local service.
22
+
23
+ Search, README, reviews, and MCP are the regular SDK. Admin is separate and is not added to the MCP server:
24
+
25
+ ```bash
26
+ x12i-sdk admin catalog
27
+ x12i-sdk admin refresh
28
+ x12i-sdk admin refresh @x12i/sdk
29
+ ```
30
+
31
+ `admin catalog` prints every package as JSON, newest publish first. `admin refresh` updates the org listing, READMEs, and vulnerability scans. Set `X12I_SDK_ADMIN_KEY` for a remote service. The local service on `127.0.0.1` accepts its dev key when that variable is unset. `import { X12iAdmin } from "@x12i/sdk/admin"` is the same client.
32
+
33
+ Managed catalog commands mint a scoped capability and never print it:
34
+
35
+ ```bash
36
+ x12i-sdk admin import --from C:\path\to\x12i-catalog --dry-run
37
+ x12i-sdk admin export
38
+ x12i-sdk admin gaps
39
+ x12i-sdk admin lineage
40
+ x12i-sdk admin reconcile
41
+ x12i-sdk admin npm-links
42
+ x12i-sdk admin examples
43
+ x12i-sdk admin runner path\to\usage-repo
44
+ x12i-sdk admin mcp
45
+ ```
46
+
47
+ `admin mcp` is a second stdio server for catalog edits, example preparation, and publish. The public `x12i-sdk mcp` server does not receive it. Publish tools dry-run unless the caller sets `dryRun` to false on a token that includes `examples:publish`. The App private key stays on the service. See `packages/sdk-service/ADMIN.md`.
@@ -0,0 +1,6 @@
1
+ import { X12iAdmin } from "./admin.js";
2
+ export declare function verifyCheckpoint(root: string): Promise<{
3
+ checked: number;
4
+ }>;
5
+ export declare function planImport(root: string): Promise<Record<string, number>>;
6
+ export declare function runImport(root: string, admin: X12iAdmin, dryRun: boolean): Promise<Record<string, unknown>>;
@@ -0,0 +1,127 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readdir, readFile, stat } from "node:fs/promises";
3
+ import { join, relative } from "node:path";
4
+ const SKIP = new Set(["node_modules", ".git", "dist", ".vite"]);
5
+ export async function verifyCheckpoint(root) {
6
+ const status = JSON.parse(await readFile(join(root, "research", "handover-status.json"), "utf8"));
7
+ const hashes = status.artifactSha256 ?? {};
8
+ let checked = 0;
9
+ for (const [name, expected] of Object.entries(hashes)) {
10
+ const actual = createHash("sha256").update(await readFile(join(root, name))).digest("hex");
11
+ if (actual !== expected)
12
+ throw new Error(`Checkpoint hash differs for ${name}`);
13
+ checked += 1;
14
+ }
15
+ return { checked };
16
+ }
17
+ export async function planImport(root) {
18
+ const catalog = JSON.parse(await readFile(join(root, "catalog.json"), "utf8"));
19
+ const evidence = JSON.parse(await readFile(join(root, "research", "enriched-evidence-index.json"), "utf8"));
20
+ const tasks = JSON.parse(await readFile(join(root, "todo.json"), "utf8"));
21
+ const receipts = JSON.parse(await readFile(join(root, "research", "usage-publish-receipts.json"), "utf8"));
22
+ return {
23
+ packages: catalog.packages.length,
24
+ families: catalog.families.length,
25
+ evidence: evidence.length,
26
+ tasks: tasks.tasks.length,
27
+ receipts: Object.keys(receipts).length,
28
+ };
29
+ }
30
+ export async function runImport(root, admin, dryRun) {
31
+ const checked = await verifyCheckpoint(root);
32
+ const plan = await planImport(root);
33
+ if (dryRun)
34
+ return { dryRun: true, ...checked, ...plan, uploaded: false };
35
+ const catalog = JSON.parse(await readFile(join(root, "catalog.json"), "utf8"));
36
+ const tokenAdmin = admin;
37
+ let applied = 0;
38
+ applied += await chunks(tokenAdmin, "packages", catalog.packages, (item) => String(item.name));
39
+ applied += await chunks(tokenAdmin, "families", catalog.families, (item) => String(item.id));
40
+ const evidence = JSON.parse(await readFile(join(root, "research", "enriched-evidence-index.json"), "utf8"));
41
+ applied += await chunks(tokenAdmin, "evidence", evidence, (item) => String(item.id));
42
+ const tasks = JSON.parse(await readFile(join(root, "todo.json"), "utf8"));
43
+ applied += await chunks(tokenAdmin, "tasks", tasks.tasks, (item) => String(item.id));
44
+ const findings = JSON.parse(await readFile(join(root, "research", "manual-findings.json"), "utf8"));
45
+ applied += await chunks(tokenAdmin, "findings", findings, (item) => String(item.title));
46
+ const receipts = JSON.parse(await readFile(join(root, "research", "usage-publish-receipts.json"), "utf8"));
47
+ applied += await chunks(tokenAdmin, "receipts", Object.entries(receipts).map(([slug, receipt]) => ({ slug, ...receipt })), (item) => String(item.slug));
48
+ const validation = JSON.parse(await readFile(join(root, "research", "usage-validation.json"), "utf8"));
49
+ applied += await chunks(tokenAdmin, "validations", validation, (item) => String(item.package));
50
+ const repositoryPlan = JSON.parse(await readFile(join(root, "research", "usage-repository-plan.json"), "utf8"));
51
+ applied += await chunks(tokenAdmin, "repositories", repositoryPlan.repositories, (item) => String(item.name));
52
+ const patches = JSON.parse(await readFile(join(root, "source-link-patches", "index.json"), "utf8"));
53
+ const links = patches.repositories.flatMap((repository) => repository.packages.map((pkg) => ({ ...pkg, repository: repository.repository, patch: repository.patch })));
54
+ applied += await chunks(tokenAdmin, "source-links", links, (item) => String(item.package));
55
+ applied += await importUsageFiles(root, tokenAdmin);
56
+ const current = await tokenAdmin.exportCatalog();
57
+ const finished = await tokenAdmin.finishImport(Number(current.revision ?? 0));
58
+ return { dryRun: false, ...checked, ...plan, chunks: applied, revision: finished.revision };
59
+ }
60
+ async function sendChunk(admin, chunk) {
61
+ for (let attempt = 0; attempt < 5; attempt += 1) {
62
+ try {
63
+ await admin.importChunk(chunk);
64
+ return;
65
+ }
66
+ catch (error) {
67
+ const status = error instanceof Error && "status" in error ? Number(error.status) : 0;
68
+ if (attempt === 4 || (status > 0 && status < 500))
69
+ throw error;
70
+ await new Promise((resolve) => setTimeout(resolve, 1000 * (attempt + 1)));
71
+ }
72
+ }
73
+ }
74
+ async function chunks(admin, kind, items, idOf) {
75
+ const size = 25;
76
+ let count = 0;
77
+ for (let index = 0; index < items.length; index += size) {
78
+ const slice = items.slice(index, index + size);
79
+ const chunkId = `${kind}-${index / size}`;
80
+ const digest = createHash("sha256").update(JSON.stringify(slice)).digest("hex");
81
+ await sendChunk(admin, { kind, chunkId, digest, items: slice.map((item) => ({ ...item, chunkKey: idOf(item) })) });
82
+ count += 1;
83
+ }
84
+ return count;
85
+ }
86
+ async function importUsageFiles(root, admin) {
87
+ const base = join(root, "usage-repos");
88
+ let count = 0;
89
+ let entries = [];
90
+ try {
91
+ entries = await readdir(base);
92
+ }
93
+ catch {
94
+ return 0;
95
+ }
96
+ for (const slug of entries) {
97
+ const directory = join(base, slug);
98
+ if (!(await stat(directory)).isDirectory())
99
+ continue;
100
+ const files = {};
101
+ await walk(directory, directory, files);
102
+ if (Object.keys(files).length === 0)
103
+ continue;
104
+ await sendChunk(admin, { kind: "usage-files", chunkId: slug, digest: createHash("sha256").update(JSON.stringify(files)).digest("hex"), items: [{ slug, files, state: "imported-draft" }] });
105
+ count += 1;
106
+ }
107
+ return count;
108
+ }
109
+ async function walk(root, directory, files) {
110
+ for (const name of await readdir(directory)) {
111
+ if (SKIP.has(name))
112
+ continue;
113
+ const path = join(directory, name);
114
+ const info = await stat(path);
115
+ if (info.isDirectory()) {
116
+ await walk(root, path, files);
117
+ continue;
118
+ }
119
+ if (info.size > 2_000_000)
120
+ continue;
121
+ const relativePath = relative(root, path).replaceAll("\\", "/");
122
+ if (!/^(README\.md|package\.json|package-lock\.json|\.gitignore|usage\.json|src\/.*)$/.test(relativePath))
123
+ continue;
124
+ files[relativePath] = await readFile(path, "utf8");
125
+ }
126
+ }
127
+ //# sourceMappingURL=admin-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-import.js","sourceRoot":"","sources":["../src/admin-import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { X12iAdmin } from "./admin.js";
2
+ export declare function runAdminMcp(admin: X12iAdmin): Promise<void>;
3
+ export declare function handleAdminMcp(line: string, admin: X12iAdmin): Promise<string | undefined>;
@@ -0,0 +1,60 @@
1
+ import { createInterface } from "node:readline";
2
+ const object = (properties, required) => ({ type: "object", properties, required, additionalProperties: false });
3
+ const str = (description) => ({ type: "string", description });
4
+ const TOOLS = [
5
+ { name: "x12i_admin_gaps", description: "List packages that still need a confirmed tier or tag. Suggested rows are not confirmed.", inputSchema: object({}, []), run: (admin) => admin.gaps() },
6
+ { name: "x12i_admin_lineage", description: "Read the Memorix lineage report. Spelling collisions are not confirmed replacements.", inputSchema: object({}, []), run: (admin) => admin.lineage() },
7
+ { name: "x12i_admin_taxonomy", description: "Preview or save tier, tag, family, and lifecycle edits. Send expectedRevision.", inputSchema: object({ expectedRevision: { type: "integer" }, reason: str("Why this edit is being made"), preview: { type: "boolean" }, changes: { type: "array" } }, ["expectedRevision", "reason", "changes"]), run: (admin, args) => admin.taxonomy(args) },
8
+ { name: "x12i_admin_propose_replacement", description: "Propose a rename, successor, split, or merge. This does not hide the source package.", inputSchema: object({ expectedRevision: { type: "integer" }, source: { type: "array" }, target: { type: "array" }, kind: str("rename, successor, split, or merge"), migrationNotes: str("What a consumer should do") }, ["expectedRevision", "source", "target", "kind", "migrationNotes"]), run: (admin, args) => admin.proposeReplacement(args) },
9
+ { name: "x12i_admin_confirm_replacement", description: "Confirm a proposed replacement and mark its sources superseded.", inputSchema: object({ expectedRevision: { type: "integer" }, proposalId: str("Proposal id") }, ["expectedRevision", "proposalId"]), run: (admin, args) => admin.confirmReplacement(String(args.proposalId ?? ""), Number(args.expectedRevision)) },
10
+ { name: "x12i_admin_reconcile", description: "Compare the catalog, receipts, and drafts. Historical inventory and published coverage are separate.", inputSchema: object({}, []), run: (admin) => admin.reconcile() },
11
+ { name: "x12i_admin_npm_links", description: "List source link patches that are ready for review. This does not open a pull request or publish npm.", inputSchema: object({}, []), run: (admin) => admin.npmLinks() },
12
+ { name: "x12i_admin_prepare_example", description: "Store a usage draft. dryRun writes nothing.", inputSchema: object({ packageName: str("Exact npm name"), version: str("Exact version"), scenario: str("What the example demonstrates"), dryRun: { type: "boolean" }, files: { type: "object" } }, ["packageName", "version", "scenario"]), run: (admin, args) => admin.prepareDraft(args) },
13
+ { name: "x12i_admin_publish_example", description: "Publish a validated usage draft. dryRun is the default and creates nothing on GitHub.", inputSchema: object({ draftId: str("Draft id"), validationId: str("Validation id"), idempotencyKey: str("Retry key"), expectedRemoteHead: str("Remote commit the update must replace"), dryRun: { type: "boolean", description: "Defaults to true" } }, ["draftId", "validationId", "idempotencyKey"]), run: (admin, args) => admin.publishExample({ ...args, dryRun: args.dryRun !== false }) },
14
+ ];
15
+ export async function runAdminMcp(admin) {
16
+ const token = process.env.X12I_SDK_ADMIN_TOKEN;
17
+ const scopes = (process.env.X12I_SDK_ADMIN_SCOPES ?? "catalog:read,metadata:write,examples:prepare,release:prepare").split(",").map((scope) => scope.trim()).filter(Boolean);
18
+ const scoped = token ? admin.withToken(token) : admin.withToken((await admin.mint(scopes, "admin-mcp")).token);
19
+ const lines = createInterface({ input: process.stdin });
20
+ for await (const line of lines) {
21
+ if (!line.trim())
22
+ continue;
23
+ const response = await handleAdminMcp(line, scoped);
24
+ if (response)
25
+ process.stdout.write(`${response}\n`);
26
+ }
27
+ }
28
+ export async function handleAdminMcp(line, admin) {
29
+ let message;
30
+ try {
31
+ message = JSON.parse(line);
32
+ }
33
+ catch {
34
+ return JSON.stringify({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "Parse error" } });
35
+ }
36
+ if (message.id === undefined)
37
+ return undefined;
38
+ const id = message.id ?? null;
39
+ const params = message.params ?? {};
40
+ if (message.method === "initialize") {
41
+ return JSON.stringify({ jsonrpc: "2.0", id, result: { protocolVersion: "2025-06-18", capabilities: { tools: { listChanged: false } }, serverInfo: { name: "x12i-admin", version: "0.1.0" }, instructions: "Use these tools for catalog administration. Publishing defaults to a dry run. You do not receive the GitHub App key." } });
42
+ }
43
+ if (message.method === "tools/list") {
44
+ return JSON.stringify({ jsonrpc: "2.0", id, result: { tools: TOOLS.map(({ run: _run, ...tool }) => tool) } });
45
+ }
46
+ if (message.method === "tools/call") {
47
+ const tool = TOOLS.find((item) => item.name === params.name);
48
+ if (!tool)
49
+ return JSON.stringify({ jsonrpc: "2.0", id, error: { code: -32602, message: "Unknown tool" } });
50
+ try {
51
+ const value = await tool.run(admin, (params.arguments ?? {}));
52
+ return JSON.stringify({ jsonrpc: "2.0", id, result: { content: [{ type: "text", text: JSON.stringify(value) }], structuredContent: value, isError: false } });
53
+ }
54
+ catch (error) {
55
+ return JSON.stringify({ jsonrpc: "2.0", id, result: { content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }], isError: true } });
56
+ }
57
+ }
58
+ return JSON.stringify({ jsonrpc: "2.0", id, error: { code: -32601, message: "Method not found" } });
59
+ }
60
+ //# sourceMappingURL=admin-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-mcp.js","sourceRoot":"","sources":["../src/admin-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /** Dev key the local catalog accepts when SDK_ADMIN_KEY is unset. Never sent to a remote host. */
2
+ export declare const LOCAL_ADMIN_KEY = "dev-only-x12i-sdk-admin-key";
3
+ export type AdminOptions = {
4
+ baseUrl?: string;
5
+ adminKey?: string;
6
+ fetch?: typeof fetch;
7
+ };
8
+ export type AdminRefreshTarget = "listing" | "readmes" | "audits" | "package";
9
+ type CatalogPage = {
10
+ total?: number;
11
+ packages?: unknown[];
12
+ next?: string | null;
13
+ order?: string;
14
+ maturity?: unknown;
15
+ };
16
+ export declare class X12iAdmin {
17
+ readonly baseUrl: string;
18
+ readonly adminKey: string;
19
+ private readonly fetchImpl;
20
+ constructor(options?: AdminOptions);
21
+ /** Every catalog package, newest publish first, without README bodies. */
22
+ catalog(): Promise<CatalogPage>;
23
+ status(): Promise<unknown>;
24
+ refresh(target: Exclude<AdminRefreshTarget, "package">, budget?: number): Promise<Record<string, unknown>>;
25
+ refreshPackage(name: string): Promise<Record<string, unknown>>;
26
+ /** Refresh the org listing, then READMEs, then vulnerability scans, until each queue is caught up. */
27
+ refreshAll(onBatch?: (kind: string, batch: Record<string, unknown>) => void): Promise<Record<string, unknown>>;
28
+ private untilQuiet;
29
+ mint(scopes: string[], label?: string, limits?: {
30
+ packageScope?: string[];
31
+ repoScope?: string[];
32
+ }): Promise<{
33
+ id: string;
34
+ token: string;
35
+ scopes: string[];
36
+ }>;
37
+ importChunk(chunk: {
38
+ kind: string;
39
+ chunkId: string;
40
+ digest: string;
41
+ items: unknown[];
42
+ }): Promise<unknown>;
43
+ finishImport(expectedRevision: number, reason?: string): Promise<unknown>;
44
+ exportCatalog(part?: "overrides"): Promise<unknown>;
45
+ taxonomy(body: Record<string, unknown>): Promise<unknown>;
46
+ proposeReplacement(body: Record<string, unknown>): Promise<unknown>;
47
+ confirmReplacement(proposalId: string, expectedRevision: number): Promise<unknown>;
48
+ gaps(): Promise<unknown>;
49
+ lineage(): Promise<unknown>;
50
+ reconcile(): Promise<unknown>;
51
+ npmLinks(): Promise<unknown>;
52
+ prepareDraft(body: Record<string, unknown>): Promise<unknown>;
53
+ recordValidation(body: Record<string, unknown>): Promise<unknown>;
54
+ publishExample(body: Record<string, unknown>): Promise<unknown>;
55
+ withToken(token: string): X12iAdmin;
56
+ operation(id: string): Promise<unknown>;
57
+ cancelOperation(id: string): Promise<unknown>;
58
+ resumeOperation(id: string): Promise<unknown>;
59
+ exampleBacklog(): Promise<unknown>;
60
+ private send;
61
+ }
62
+ export declare function runAdminCli(args: string[]): Promise<void>;
63
+ export {};
package/dist/admin.js ADDED
@@ -0,0 +1,259 @@
1
+ import { SdkError, DEFAULT_SERVICE_URL } from "./client.js";
2
+ import { runImport } from "./admin-import.js";
3
+ import { runAdminMcp } from "./admin-mcp.js";
4
+ import { runValidationRunner } from "./runner.js";
5
+ /** Dev key the local catalog accepts when SDK_ADMIN_KEY is unset. Never sent to a remote host. */
6
+ export const LOCAL_ADMIN_KEY = "dev-only-x12i-sdk-admin-key";
7
+ export class X12iAdmin {
8
+ baseUrl;
9
+ adminKey;
10
+ fetchImpl;
11
+ constructor(options = {}) {
12
+ this.baseUrl = (options.baseUrl ?? process.env.X12I_SDK_URL ?? DEFAULT_SERVICE_URL).replace(/\/$/, "");
13
+ this.adminKey = resolveAdminKey(this.baseUrl, options.adminKey);
14
+ this.fetchImpl = options.fetch ?? fetch;
15
+ }
16
+ /** Every catalog package, newest publish first, without README bodies. */
17
+ async catalog() {
18
+ return this.send("GET", "/v1/admin/catalog");
19
+ }
20
+ status() {
21
+ return this.send("GET", "/v1/admin/status");
22
+ }
23
+ refresh(target, budget) {
24
+ return this.send("POST", "/v1/admin/refresh", { target, budget });
25
+ }
26
+ refreshPackage(name) {
27
+ return this.send("POST", "/v1/admin/refresh", { target: "package", name });
28
+ }
29
+ /** Refresh the org listing, then READMEs, then vulnerability scans, until each queue is caught up. */
30
+ async refreshAll(onBatch) {
31
+ const listing = await this.refresh("listing", 40);
32
+ onBatch?.("listing", listing);
33
+ const readmes = await this.untilQuiet("readmes", 20, onBatch);
34
+ const audits = await this.untilQuiet("audits", 200, onBatch);
35
+ return { listing, readmes, audits };
36
+ }
37
+ async untilQuiet(target, budget, onBatch) {
38
+ let last = {};
39
+ for (let attempt = 0; attempt < 40; attempt += 1) {
40
+ last = await this.refresh(target, budget);
41
+ onBatch?.(target, last);
42
+ const pending = Number(last.pending ?? 0);
43
+ const moved = Number(last.updated ?? last.scanned ?? 0);
44
+ if (pending === 0 || moved === 0 || last.stopped === true)
45
+ break;
46
+ }
47
+ return last;
48
+ }
49
+ mint(scopes, label = "agent", limits = {}) {
50
+ return this.send("POST", "/v1/admin/capabilities", { scopes, label, ...limits });
51
+ }
52
+ importChunk(chunk) {
53
+ return this.send("POST", "/v1/admin/import", chunk);
54
+ }
55
+ finishImport(expectedRevision, reason = "Import catalog baseline") {
56
+ return this.send("POST", "/v1/admin/import/finish", { expectedRevision, reason });
57
+ }
58
+ exportCatalog(part) {
59
+ return this.send("GET", part ? `/v1/admin/export?part=${part}` : "/v1/admin/export");
60
+ }
61
+ taxonomy(body) {
62
+ return this.send("POST", "/v1/admin/taxonomy", body);
63
+ }
64
+ proposeReplacement(body) {
65
+ return this.send("POST", "/v1/admin/replacements", body);
66
+ }
67
+ confirmReplacement(proposalId, expectedRevision) {
68
+ return this.send("POST", "/v1/admin/replacements/confirm", { proposalId, expectedRevision });
69
+ }
70
+ gaps() {
71
+ return this.send("GET", "/v1/admin/gaps");
72
+ }
73
+ lineage() {
74
+ return this.send("GET", "/v1/admin/lineage");
75
+ }
76
+ reconcile() {
77
+ return this.send("GET", "/v1/admin/reconcile");
78
+ }
79
+ npmLinks() {
80
+ return this.send("GET", "/v1/admin/npm-links");
81
+ }
82
+ prepareDraft(body) {
83
+ return this.send("POST", "/v1/admin/drafts", body);
84
+ }
85
+ recordValidation(body) {
86
+ return this.send("POST", "/v1/admin/validations", body);
87
+ }
88
+ publishExample(body) {
89
+ return this.send("POST", "/v1/admin/publications", body);
90
+ }
91
+ withToken(token) {
92
+ return new X12iAdmin({ baseUrl: this.baseUrl, adminKey: token, fetch: this.fetchImpl });
93
+ }
94
+ operation(id) {
95
+ return this.send("GET", `/v1/admin/operations/${encodeURIComponent(id)}`);
96
+ }
97
+ cancelOperation(id) {
98
+ return this.send("POST", `/v1/admin/operations/${encodeURIComponent(id)}/cancel`, {});
99
+ }
100
+ resumeOperation(id) {
101
+ return this.send("POST", `/v1/admin/operations/${encodeURIComponent(id)}/resume`, {});
102
+ }
103
+ exampleBacklog() {
104
+ return this.send("POST", "/v1/admin/example-backlog", {});
105
+ }
106
+ async send(method, path, payload) {
107
+ const response = await this.fetchImpl(`${this.baseUrl}${path}`, {
108
+ method,
109
+ headers: {
110
+ authorization: `Bearer ${this.adminKey}`,
111
+ ...(payload ? { "content-type": "application/json" } : {}),
112
+ },
113
+ body: payload ? JSON.stringify(payload) : undefined,
114
+ });
115
+ const text = await response.text();
116
+ let body = {};
117
+ try {
118
+ body = text ? JSON.parse(text) : {};
119
+ }
120
+ catch {
121
+ throw new SdkError(`Admin request returned ${response.status}: ${text.replace(/\s+/g, " ").slice(0, 180)}`, response.status, "ADMIN_REQUEST_FAILED");
122
+ }
123
+ if (!response.ok) {
124
+ const message = body && typeof body === "object" && "error" in body ? String(body.error?.message ?? response.status) : `Admin request failed (${response.status})`;
125
+ throw new SdkError(message, response.status, "ADMIN_REQUEST_FAILED");
126
+ }
127
+ return body;
128
+ }
129
+ }
130
+ export async function runAdminCli(args) {
131
+ const [command, ...rest] = args;
132
+ if (!command || command === "help") {
133
+ process.stdout.write(adminHelp());
134
+ return;
135
+ }
136
+ const admin = new X12iAdmin();
137
+ if (command === "catalog") {
138
+ const catalog = await admin.catalog();
139
+ process.stdout.write(`${JSON.stringify(catalog, null, 2)}\n`);
140
+ return;
141
+ }
142
+ if (command === "status") {
143
+ process.stdout.write(`${JSON.stringify(await admin.status(), null, 2)}\n`);
144
+ return;
145
+ }
146
+ if (command === "mcp") {
147
+ await runAdminMcp(admin);
148
+ return;
149
+ }
150
+ if (command === "runner") {
151
+ const directory = rest.find((arg) => !arg.startsWith("--"));
152
+ process.stdout.write(`${JSON.stringify(await runValidationRunner(admin, directory), null, 2)}\n`);
153
+ return;
154
+ }
155
+ if (command === "examples") {
156
+ const minted = await admin.mint(["catalog:read", "metadata:write"], "examples");
157
+ const scoped = admin.withToken(minted.token);
158
+ process.stdout.write(`${JSON.stringify(await scoped.exampleBacklog(), null, 2)}\n`);
159
+ return;
160
+ }
161
+ if (command === "import") {
162
+ const dryRun = rest.includes("--dry-run");
163
+ const fromFlag = rest.indexOf("--from");
164
+ const root = fromFlag >= 0 ? rest[fromFlag + 1] : "";
165
+ if (!root) {
166
+ process.stderr.write("x12i-sdk admin import --from <catalog> [--dry-run]\n");
167
+ process.exitCode = 1;
168
+ return;
169
+ }
170
+ const minted = await admin.mint(["catalog:read", "metadata:write", "examples:prepare", "examples:validate", "examples:publish", "release:prepare"], "import");
171
+ const scoped = admin.withToken(minted.token);
172
+ const result = await runImport(root, scoped, dryRun);
173
+ process.stdout.write(`${JSON.stringify({ ...result, capability: minted.id }, null, 2)}\n`);
174
+ return;
175
+ }
176
+ if (command === "export" || command === "gaps" || command === "lineage" || command === "reconcile" || command === "npm-links") {
177
+ const minted = await admin.mint(["catalog:read", "release:prepare"], command);
178
+ const reader = admin.withToken(minted.token);
179
+ const result = command === "export" ? await reader.exportCatalog() : command === "gaps" ? await reader.gaps() : command === "lineage" ? await reader.lineage() : command === "reconcile" ? await reader.reconcile() : await reader.npmLinks();
180
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
181
+ return;
182
+ }
183
+ if (command === "refresh") {
184
+ const target = rest[0];
185
+ if (!target) {
186
+ const result = await admin.refreshAll((kind, batch) => {
187
+ process.stderr.write(`${kind} ${JSON.stringify(batch)}\n`);
188
+ });
189
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
190
+ return;
191
+ }
192
+ if (target.startsWith("@") || target.includes("/")) {
193
+ process.stdout.write(`${JSON.stringify(await admin.refreshPackage(target), null, 2)}\n`);
194
+ return;
195
+ }
196
+ if (target === "listing" || target === "readmes" || target === "audits") {
197
+ const result = target === "listing" ? await admin.refresh("listing", 40) : await admin.refresh(target);
198
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
199
+ return;
200
+ }
201
+ process.stderr.write(`Unknown refresh target ${target}\n${adminHelp()}`);
202
+ process.exitCode = 1;
203
+ return;
204
+ }
205
+ process.stderr.write(adminHelp());
206
+ process.exitCode = 1;
207
+ }
208
+ function adminHelp() {
209
+ return `x12i-sdk admin catalog
210
+ Print the entire catalog as JSON. Newest publish is first. README bodies stay on each package.
211
+
212
+ x12i-sdk admin status
213
+ Package count, READMEs still due, and vulnerability scans still due.
214
+
215
+ x12i-sdk admin refresh
216
+ Update the org listing, then READMEs, then vulnerability scans.
217
+
218
+ x12i-sdk admin refresh listing|readmes|audits
219
+ Run one of those updates.
220
+
221
+ x12i-sdk admin refresh <package>
222
+ Update one package's record, README, and vulnerability scan.
223
+
224
+ x12i-sdk admin import --from <catalog> [--dry-run]
225
+ Check the handover hashes and import the managed catalog. --dry-run does not upload.
226
+
227
+ x12i-sdk admin export|gaps|lineage|reconcile|npm-links
228
+ Read the managed catalog. npm-links does not open pull requests.
229
+
230
+ x12i-sdk admin examples
231
+ Record a task for each package that still has no verified public example.
232
+
233
+ x12i-sdk admin runner <usage-directory>
234
+ Install with scripts disabled, run each consumer, and store a fixture validation.
235
+
236
+ x12i-sdk admin mcp
237
+ Admin MCP server. Set X12I_SDK_ADMIN_TOKEN to reuse a capability. Publishing tools dry-run unless asked.
238
+
239
+ Set X12I_SDK_URL for the catalog. Set X12I_SDK_ADMIN_KEY for any host other than 127.0.0.1 or localhost.
240
+ `;
241
+ }
242
+ function resolveAdminKey(baseUrl, explicit) {
243
+ if (explicit)
244
+ return explicit;
245
+ const fromEnv = process.env.X12I_SDK_ADMIN_KEY;
246
+ if (fromEnv)
247
+ return fromEnv;
248
+ let host = "";
249
+ try {
250
+ host = new URL(baseUrl).hostname;
251
+ }
252
+ catch {
253
+ host = "";
254
+ }
255
+ if (host === "127.0.0.1" || host === "localhost" || host === "[::1]")
256
+ return LOCAL_ADMIN_KEY;
257
+ throw new SdkError("Set X12I_SDK_ADMIN_KEY to use admin commands against this service.", 0, "ADMIN_KEY_REQUIRED");
258
+ }
259
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};