@x12i/sdk 0.3.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.
- package/README.md +47 -0
- package/dist/admin-import.d.ts +6 -0
- package/dist/admin-import.js +127 -0
- package/dist/admin-import.js.map +1 -0
- package/dist/admin-mcp.d.ts +3 -0
- package/dist/admin-mcp.js +60 -0
- package/dist/admin-mcp.js.map +1 -0
- package/dist/admin.d.ts +63 -0
- package/dist/admin.js +259 -0
- package/dist/admin.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +68 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +74 -118
- package/dist/client.js +183 -379
- package/dist/client.js.map +1 -1
- package/dist/identity.d.ts +8 -0
- package/dist/identity.js +34 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +6 -20
- package/dist/index.js +6 -11
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +18 -0
- package/dist/init.js +147 -0
- package/dist/init.js.map +1 -0
- package/dist/maturity.d.ts +65 -0
- package/dist/maturity.js +138 -0
- package/dist/maturity.js.map +1 -0
- package/dist/mcp.d.ts +27 -0
- package/dist/mcp.js +168 -0
- package/dist/mcp.js.map +1 -0
- package/dist/protocol.d.ts +38 -0
- package/dist/protocol.js +168 -0
- package/dist/protocol.js.map +1 -0
- package/dist/rank.d.ts +19 -0
- package/dist/rank.js +82 -0
- package/dist/rank.js.map +1 -0
- package/dist/runner.d.ts +22 -0
- package/dist/runner.js +99 -0
- package/dist/runner.js.map +1 -0
- package/package.json +66 -60
- package/LICENSE +0 -21
- package/dist/client.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/registry.d.ts +0 -8
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -21
- package/dist/registry.js.map +0 -1
package/dist/cli.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { X12iClient } from "./client.js";
|
|
3
|
+
import { loadOrCreateIdentity } from "./identity.js";
|
|
4
|
+
import { parseInitArgs, writeInit } from "./init.js";
|
|
5
|
+
import { runAdminCli } from "./admin.js";
|
|
6
|
+
import { serveMcp } from "./mcp.js";
|
|
7
|
+
const [command, ...rest] = process.argv.slice(2);
|
|
8
|
+
if (command === "mcp") {
|
|
9
|
+
await serveMcp(new X12iClient());
|
|
10
|
+
}
|
|
11
|
+
else if (command === "init") {
|
|
12
|
+
const options = parseInitArgs(rest);
|
|
13
|
+
const identity = await loadOrCreateIdentity();
|
|
14
|
+
const files = await writeInit(options);
|
|
15
|
+
process.stdout.write(`${JSON.stringify({ identity: identity.fingerprint, files }, null, 2)}\n`);
|
|
16
|
+
}
|
|
17
|
+
else if (command === "admin") {
|
|
18
|
+
await runAdminCli(rest);
|
|
19
|
+
}
|
|
20
|
+
else if (command === "readme" || command === "package") {
|
|
21
|
+
const name = rest[0];
|
|
22
|
+
if (!name) {
|
|
23
|
+
process.stderr.write(`Usage: x12i-sdk ${command} <package>\n`);
|
|
24
|
+
process.exitCode = 1;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const view = command === "readme" ? await new X12iClient().readme(name) : await new X12iClient().package(name);
|
|
28
|
+
process.stdout.write(command === "readme" ? formatReadme(view) : `${JSON.stringify(view, null, 2)}\n`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
process.stdout.write(`x12i-sdk readme <package>
|
|
33
|
+
Print the cached README, then the current one when the catalog knows the package was published again.
|
|
34
|
+
|
|
35
|
+
x12i-sdk package <package>
|
|
36
|
+
Print the cached package record, then refresh it when a newer publish is known.
|
|
37
|
+
|
|
38
|
+
x12i-sdk mcp
|
|
39
|
+
Start the stdio MCP server. Cursor, Claude Code, and Codex use this to search the @x12i catalog.
|
|
40
|
+
|
|
41
|
+
x12i-sdk init [--cursor] [--claude] [--codex] [--all] [--global] [--dir path]
|
|
42
|
+
Write the x12i MCP server into the current project. Cursor is the default.
|
|
43
|
+
--all writes Cursor, Claude Code, and Codex. --global writes user-level config for every agent.
|
|
44
|
+
|
|
45
|
+
x12i-sdk admin catalog
|
|
46
|
+
Print the entire catalog as JSON. x12i-sdk admin shows the update commands.
|
|
47
|
+
|
|
48
|
+
Set X12I_SDK_URL to point at a local catalog service. The default host is https://x12i-sdk.x12i.com.
|
|
49
|
+
Admin updates use X12I_SDK_ADMIN_KEY. Reviews and reports stay on the commands above.
|
|
50
|
+
`);
|
|
51
|
+
}
|
|
52
|
+
function formatReadme(view) {
|
|
53
|
+
if (view.source === "registry") {
|
|
54
|
+
return `The catalog service was unreachable. This README is from the npm registry.\n\n${view.readme}\n`;
|
|
55
|
+
}
|
|
56
|
+
if (view.cached.readmeStatus === "fresh") {
|
|
57
|
+
return `${view.name}\n\n${view.readme || "No README yet."}\n`;
|
|
58
|
+
}
|
|
59
|
+
const cachedText = view.cached.readme || "No README cached yet.";
|
|
60
|
+
if (view.refreshError) {
|
|
61
|
+
return `${view.name} · cached\n\n${cachedText}\n\nRefresh failed: ${view.refreshError}\n`;
|
|
62
|
+
}
|
|
63
|
+
if (!view.updated) {
|
|
64
|
+
return `${view.name} · cached\n\n${cachedText}\n\nThe latest publish matches this README.\n`;
|
|
65
|
+
}
|
|
66
|
+
return `${view.name} · cached\n\n${cachedText}\n\n---\nupdated\n\n${view.readme || "No README yet."}\n`;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,120 +1,76 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
fetchOptions?: FetchOptions;
|
|
12
|
-
reuseBrowser?: boolean;
|
|
13
|
-
search?: SearchProvider | SearchConfig | null;
|
|
14
|
-
fetchCache?: FetchCache;
|
|
15
|
-
snapshotStore?: SnapshotStore;
|
|
16
|
-
runStore?: RunStore;
|
|
17
|
-
extractionAdapter?: ExtractionAdapter;
|
|
18
|
-
/** When true, client owns and closes default in-memory stores it created. */
|
|
19
|
-
ownsDefaultStores?: boolean;
|
|
1
|
+
import { type StoredIdentity } from "./identity.js";
|
|
2
|
+
import { type RankedPackage } from "./rank.js";
|
|
3
|
+
import { type UsageFields } from "./protocol.js";
|
|
4
|
+
export declare const SDK_VERSION: string;
|
|
5
|
+
/** Catalog service. Override with X12I_SDK_URL. */
|
|
6
|
+
export declare const DEFAULT_SERVICE_URL = "https://x12i-sdk.x12i.com";
|
|
7
|
+
export declare class SdkError extends Error {
|
|
8
|
+
readonly status: number;
|
|
9
|
+
readonly code: string;
|
|
10
|
+
constructor(message: string, status?: number, code?: string);
|
|
20
11
|
}
|
|
21
|
-
export
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
12
|
+
export type SearchResult = {
|
|
13
|
+
source: "service" | "registry";
|
|
14
|
+
ranked: boolean;
|
|
15
|
+
task: string;
|
|
16
|
+
results: RankedPackage[];
|
|
17
|
+
};
|
|
18
|
+
export type ReviewInput = {
|
|
19
|
+
package: string;
|
|
20
|
+
packageVersion: string;
|
|
21
|
+
agent: UsageFields["agent"];
|
|
22
|
+
outcome: UsageFields["outcome"];
|
|
23
|
+
rating: number;
|
|
24
|
+
worked?: string;
|
|
25
|
+
failed?: string;
|
|
26
|
+
needed?: string;
|
|
27
|
+
improve?: string;
|
|
28
|
+
};
|
|
29
|
+
export type ReportInput = Omit<ReviewInput, "rating">;
|
|
30
|
+
export type ClientOptions = {
|
|
31
|
+
baseUrl?: string;
|
|
32
|
+
fetch?: typeof fetch;
|
|
33
|
+
identityPath?: string;
|
|
34
|
+
};
|
|
35
|
+
export type ReadmeStatus = "missing" | "stale" | "fresh";
|
|
36
|
+
export type CachedPackage = {
|
|
37
|
+
readme: string;
|
|
38
|
+
readmeStatus: ReadmeStatus;
|
|
39
|
+
version: string | null;
|
|
40
|
+
description: string;
|
|
41
|
+
modifiedAt: string | null;
|
|
42
|
+
refreshedAt: string | null;
|
|
43
|
+
};
|
|
44
|
+
export type PackageView = {
|
|
45
|
+
name: string;
|
|
46
|
+
readme: string;
|
|
47
|
+
readmeStatus: ReadmeStatus;
|
|
48
|
+
version: string | null;
|
|
49
|
+
description: string;
|
|
50
|
+
modifiedAt: string | null;
|
|
51
|
+
refreshedAt: string | null;
|
|
52
|
+
updated: boolean;
|
|
53
|
+
source: "service" | "registry";
|
|
54
|
+
cached: CachedPackage;
|
|
55
|
+
detail: Record<string, unknown>;
|
|
56
|
+
refreshError?: string;
|
|
57
|
+
};
|
|
58
|
+
export declare class X12iClient {
|
|
59
|
+
readonly baseUrl: string;
|
|
60
|
+
readonly identityPath: string;
|
|
61
|
+
private readonly fetchImpl;
|
|
62
|
+
constructor(options?: ClientOptions);
|
|
63
|
+
search(task: string): Promise<SearchResult>;
|
|
64
|
+
catalog(cursor?: string, limit?: number): Promise<unknown>;
|
|
65
|
+
package(name: string): Promise<PackageView>;
|
|
66
|
+
readme(name: string): Promise<PackageView>;
|
|
67
|
+
reviews(name: string): Promise<unknown>;
|
|
68
|
+
report(input: ReportInput): Promise<unknown>;
|
|
69
|
+
review(input: ReviewInput): Promise<unknown>;
|
|
70
|
+
status(): Promise<unknown>;
|
|
71
|
+
ensureEnrolled(): Promise<StoredIdentity>;
|
|
72
|
+
private signedPost;
|
|
73
|
+
private readThrough;
|
|
74
|
+
private readmeFromRegistry;
|
|
75
|
+
private send;
|
|
28
76
|
}
|
|
29
|
-
export interface FetchedSearchPage {
|
|
30
|
-
position?: number;
|
|
31
|
-
url: string;
|
|
32
|
-
title?: string;
|
|
33
|
-
fetch?: FetchResult;
|
|
34
|
-
error?: string;
|
|
35
|
-
}
|
|
36
|
-
export interface SearchAndFetchRequest extends WebSearchRequest {
|
|
37
|
-
top?: number;
|
|
38
|
-
positions?: number[];
|
|
39
|
-
urls?: string[];
|
|
40
|
-
concurrency?: number;
|
|
41
|
-
continueOnError?: boolean;
|
|
42
|
-
fetchOptions?: FetchOptions;
|
|
43
|
-
signal?: AbortSignal;
|
|
44
|
-
}
|
|
45
|
-
export interface SearchAndFetchResult {
|
|
46
|
-
search: WebSearchResponse;
|
|
47
|
-
pages: FetchedSearchPage[];
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Canonical programmatic surface: fetch/retrieve/research/crawl/extract/runs.
|
|
51
|
-
* CLI, REST, and MCP are thin adapters around this client.
|
|
52
|
-
*/
|
|
53
|
-
export declare class WebAgentClient {
|
|
54
|
-
readonly registry: ParserRegistry;
|
|
55
|
-
private readonly defaultFetchOptions;
|
|
56
|
-
private readonly reuseBrowser;
|
|
57
|
-
private readonly searchProvider;
|
|
58
|
-
private browserPromise;
|
|
59
|
-
readonly fetchCache: FetchCache;
|
|
60
|
-
readonly snapshotStore: SnapshotStore;
|
|
61
|
-
readonly runStore: RunStore;
|
|
62
|
-
private readonly extractionAdapter?;
|
|
63
|
-
private readonly ownsCache;
|
|
64
|
-
private readonly ownsSnapshots;
|
|
65
|
-
private readonly ownsRuns;
|
|
66
|
-
constructor(options?: WebAgentClientOptions);
|
|
67
|
-
use<T>(parser: Parser<T>): this;
|
|
68
|
-
/** Download a URL via Playwright (compatibility default: browser strategy). */
|
|
69
|
-
fetch(url: string, options?: FetchOptions): Promise<FetchResult>;
|
|
70
|
-
/** Strategy-aware multi-format retrieval (default strategy: auto). */
|
|
71
|
-
retrieve(url: string, options?: RetrieveOptions): Promise<FetchResult>;
|
|
72
|
-
fetchBatch(request: {
|
|
73
|
-
urls: string[];
|
|
74
|
-
concurrency?: number;
|
|
75
|
-
continueOnError?: boolean;
|
|
76
|
-
retrieveOptions?: RetrieveOptions;
|
|
77
|
-
signal?: AbortSignal;
|
|
78
|
-
}): Promise<RetrieveBatchItem[]>;
|
|
79
|
-
retrieveCached(url: string, options?: CachedRetrieveOptions): Promise<FetchResult>;
|
|
80
|
-
classify(url: string, options?: FetchOptions): Promise<ClassifyCandidate[]>;
|
|
81
|
-
parse<T = unknown>(url: string, options?: FetchOptions): Promise<ParsedResult<T>>;
|
|
82
|
-
parseAs<T = unknown>(type: string, url: string, options?: FetchOptions): Promise<ParsedResult<T>>;
|
|
83
|
-
listParsers(): {
|
|
84
|
-
type: string;
|
|
85
|
-
description?: string;
|
|
86
|
-
version?: string;
|
|
87
|
-
}[];
|
|
88
|
-
ingest(rootUrl: string, options?: IngestOptions): Promise<IngestResult>;
|
|
89
|
-
search(request: WebSearchRequest, options?: {
|
|
90
|
-
signal?: AbortSignal;
|
|
91
|
-
}): Promise<WebSearchResponse>;
|
|
92
|
-
searchConfigured(): boolean;
|
|
93
|
-
fetchSearchResults(searchResult: WebSearchResponse, options?: FetchSearchResultsOptions): Promise<FetchedSearchPage[]>;
|
|
94
|
-
searchAndFetch(request: SearchAndFetchRequest): Promise<SearchAndFetchResult>;
|
|
95
|
-
research(request: ResearchRequest, options?: {
|
|
96
|
-
signal?: AbortSignal;
|
|
97
|
-
}): Promise<ResearchPacket>;
|
|
98
|
-
startResearch(request: ResearchRequest, opts?: {
|
|
99
|
-
idempotencyKey?: string;
|
|
100
|
-
}): Promise<RunRecord>;
|
|
101
|
-
private runResearchJob;
|
|
102
|
-
crawl(request: CrawlRequest, options?: {
|
|
103
|
-
signal?: AbortSignal;
|
|
104
|
-
}): Promise<CrawlResult>;
|
|
105
|
-
startCrawl(request: CrawlRequest, opts?: {
|
|
106
|
-
idempotencyKey?: string;
|
|
107
|
-
}): Promise<RunRecord>;
|
|
108
|
-
private runCrawlJob;
|
|
109
|
-
extract(request: ExtractRequest): Promise<ExtractResult>;
|
|
110
|
-
checkChanges(request: ChangeCheckRequest & {
|
|
111
|
-
url?: string;
|
|
112
|
-
}): Promise<ChangeCheckResult>;
|
|
113
|
-
getRun(runId: string): Promise<RunRecord | undefined>;
|
|
114
|
-
listRunItems(runId: string, options?: ListItemsOptions): Promise<ListItemsResult>;
|
|
115
|
-
cancelRun(runId: string): Promise<RunRecord>;
|
|
116
|
-
resumeRun(runId: string): Promise<RunRecord>;
|
|
117
|
-
private getBrowser;
|
|
118
|
-
close(): Promise<void>;
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=client.d.ts.map
|