@gyoungwe/plugin-api 0.0.0-stage → 1.1.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 CHANGED
@@ -1,3 +1,15 @@
1
- # Temporary Holding Version
1
+ # @gyoungwe/plugin-api
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Stable, host-independent TypeScript contracts for Drone capability plugins.
4
+ The package contains no Electron, backend, Pi SDK, filesystem, or network
5
+ implementation. A host implements `DroneHostPort` and performs the capability
6
+ negotiation before loading a plugin.
7
+
8
+ The package is intentionally published at API major `1` while its npm scope is
9
+ still a project decision. Before publication, the host and `drone-plugins`
10
+ workspace use an `npm pack` tarball or a pinned git commit; they must never use
11
+ a relative path into the Drone source repository.
12
+
13
+ `compatible` and `incompatible` are the only negotiation outcomes in API v1.
14
+ There is no implicit partial or degraded load: a plugin that cannot satisfy its
15
+ declared requirements is refused with an actionable reason.
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Public host contract for Drone capability plugins.
3
+ *
4
+ * Keep this module dependency-free. It is consumed by native Pi packages and
5
+ * by the Desktop adapter, so it must not import Electron, the Pi SDK, or any
6
+ * Drone implementation package. Runtime values are deliberately limited to
7
+ * the API/contract identifiers and the pure negotiation helper below.
8
+ */
9
+ export declare const PLUGIN_API_VERSION: 1;
10
+ export declare const RESULT_CONTRACT: "drone-result/v3";
11
+ export type PluginApiVersion = typeof PLUGIN_API_VERSION;
12
+ export type ResultContractVersion = typeof RESULT_CONTRACT;
13
+ export type PluginHost = "native-pi" | "drone-desktop";
14
+ /** Capability identifiers are open-ended so new host features remain additive. */
15
+ export type HostCapability = "readSource" | "searchKnowledge" | "persistRun" | "runCompute" | "requestAuthorization" | (string & {});
16
+ export interface HostCapabilities {
17
+ readonly host: PluginHost;
18
+ readonly hostVersion: string;
19
+ /** Drone Plugin API major implemented by this host. */
20
+ readonly pluginApiVersion: number;
21
+ /** Pi extension API version, kept separate from the Drone contract. */
22
+ readonly piApiVersion?: number;
23
+ readonly capabilities: readonly HostCapability[];
24
+ }
25
+ export interface PluginRequirements {
26
+ readonly pluginApi: number;
27
+ readonly minHostVersion?: string;
28
+ readonly hosts?: readonly PluginHost[];
29
+ readonly capabilities?: readonly HostCapability[];
30
+ }
31
+ /** v1 intentionally has no degraded/partial loading state. */
32
+ export type CapabilityNegotiationStatus = "compatible" | "incompatible";
33
+ export interface CapabilityNegotiation {
34
+ readonly status: CapabilityNegotiationStatus;
35
+ readonly host: PluginHost;
36
+ readonly pluginApi: number;
37
+ readonly missingCapabilities: readonly HostCapability[];
38
+ readonly reason?: "plugin-api" | "host-version" | "host" | "capability";
39
+ readonly message?: string;
40
+ }
41
+ /**
42
+ * Compare the numeric components of a host version. Pre-release suffixes are
43
+ * intentionally treated as the same patch for the v1 minimum-version gate;
44
+ * the CI matrix is responsible for testing the exact supported Pi versions.
45
+ */
46
+ export declare function compareHostVersions(left: string, right: string): number;
47
+ /** Validate a plugin manifest's host requirements without loading its code. */
48
+ export declare function negotiateCapabilities(requirements: PluginRequirements, host: HostCapabilities): CapabilityNegotiation;
49
+ export interface ReadSourceInput {
50
+ readonly sourceRef: string;
51
+ readonly revision?: string;
52
+ readonly locator?: string;
53
+ }
54
+ export interface ReadReceipt {
55
+ readonly sourceRef: string;
56
+ readonly receiptRef: string;
57
+ readonly contentHash: string;
58
+ readonly readAt: string;
59
+ readonly version?: string;
60
+ readonly content: string;
61
+ }
62
+ export interface SearchInput {
63
+ readonly query: string;
64
+ readonly limit?: number;
65
+ readonly scope?: string;
66
+ }
67
+ export interface SearchResultItem {
68
+ readonly sourceRef: string;
69
+ readonly title?: string;
70
+ readonly snippet?: string;
71
+ readonly contentHash?: string;
72
+ readonly receiptRef?: string;
73
+ }
74
+ export interface SearchResult {
75
+ readonly query: string;
76
+ readonly items: readonly SearchResultItem[];
77
+ readonly searchedAt: string;
78
+ }
79
+ export type ResultStatus = "unknown" | "queued" | "running" | "succeeded" | "failed" | "blocked" | "cancelled";
80
+ export type ResultRedlineCode = "missing-source" | "stale-source" | "hash-mismatch" | "authorization-required" | "missing-provenance" | "unknown";
81
+ export interface ResultRedline {
82
+ readonly code: ResultRedlineCode;
83
+ readonly message: string;
84
+ readonly blocking: boolean;
85
+ readonly sourceRefs?: readonly string[];
86
+ }
87
+ export interface RunSnapshot {
88
+ readonly runId: string;
89
+ readonly status: ResultStatus;
90
+ readonly inputRefs: readonly string[];
91
+ readonly outputRefs: readonly string[];
92
+ readonly startedAt?: string;
93
+ readonly finishedAt?: string;
94
+ readonly redlines?: readonly ResultRedline[];
95
+ readonly error?: string;
96
+ }
97
+ export interface RunReceipt {
98
+ readonly contract: ResultContractVersion;
99
+ readonly runId: string;
100
+ readonly status: ResultStatus;
101
+ readonly recordedAt: string;
102
+ readonly outputRefs: readonly string[];
103
+ readonly redlines: readonly ResultRedline[];
104
+ readonly receiptRef: string;
105
+ readonly error?: string;
106
+ }
107
+ export interface ComputeRequest {
108
+ readonly runId: string;
109
+ readonly workflowId: string;
110
+ readonly inputRefs: readonly string[];
111
+ readonly parameters?: Readonly<Record<string, string | number | boolean | null>>;
112
+ readonly authorizationRef?: string;
113
+ }
114
+ export interface ComputeReceipt {
115
+ readonly contract: ResultContractVersion;
116
+ readonly runId: string;
117
+ readonly status: ResultStatus;
118
+ readonly receiptRef: string;
119
+ readonly outputRefs: readonly string[];
120
+ readonly redlines: readonly ResultRedline[];
121
+ readonly submittedAt?: string;
122
+ readonly finishedAt?: string;
123
+ readonly error?: string;
124
+ }
125
+ export interface AuthorizationRequest {
126
+ readonly action: string;
127
+ readonly reason?: string;
128
+ readonly scope?: string;
129
+ }
130
+ export interface AuthorizationReceipt {
131
+ readonly granted: boolean;
132
+ readonly authorizationRef?: string;
133
+ readonly decidedAt: string;
134
+ readonly reason?: string;
135
+ }
136
+ /** Stable host seam shared by native Pi and Drone Desktop adapters. */
137
+ export interface DroneHostPort {
138
+ readonly host: PluginHost;
139
+ capabilities(): HostCapabilities;
140
+ readSource(input: ReadSourceInput): Promise<ReadReceipt>;
141
+ searchKnowledge(input: SearchInput): Promise<SearchResult>;
142
+ persistRun(snapshot: RunSnapshot): Promise<RunReceipt>;
143
+ runCompute(input: ComputeRequest): Promise<ComputeReceipt>;
144
+ requestAuthorization(input: AuthorizationRequest): Promise<AuthorizationReceipt>;
145
+ }
146
+ export * from "./knowledge.js";
147
+ /** Public, host-neutral analysis contract used by native Pi packages. */
148
+ export declare const ANALYSIS_CONTRACT_VERSION: 1;
149
+ export type AnalysisMode = "exploratory" | "inferential";
150
+ export type AnalysisDomain = "bioinformatics" | "genomics" | "transcriptomics" | "proteomics" | "other";
151
+ export type AnalysisResearchStage = "design" | "readiness" | "execution" | "review" | "delivery";
152
+ export type AnalysisSideEffect = "read-only" | "network" | "project-write" | "code-execution" | "external-service";
153
+ export type AnalysisGateSeverity = "pause" | "block";
154
+ export type AnalysisGateCode = "scientific-ambiguity" | "missing-data" | "missing-biological-replicates" | "reference-mismatch" | "unsupported-method";
155
+ export interface AnalysisIdentity {
156
+ readonly id: string;
157
+ readonly version: string;
158
+ }
159
+ export interface AnalysisGate {
160
+ readonly code: AnalysisGateCode;
161
+ readonly severity: AnalysisGateSeverity;
162
+ readonly message: string;
163
+ readonly evidenceKey: string;
164
+ }
165
+ export interface AnalysisReadiness {
166
+ readonly ok: boolean;
167
+ readonly inferentialClaimsAllowed: boolean;
168
+ readonly gates: readonly AnalysisGate[];
169
+ readonly warnings: readonly string[];
170
+ }
171
+ export interface AnalysisContext {
172
+ readonly version: typeof ANALYSIS_CONTRACT_VERSION;
173
+ readonly id: string;
174
+ readonly question: string;
175
+ readonly assay: string;
176
+ readonly mode: AnalysisMode;
177
+ readonly adapter?: AnalysisIdentity;
178
+ }
179
+ export interface AnalysisSchemaField {
180
+ readonly id: string;
181
+ readonly type: "file" | "table" | "metadata" | "metric" | "report";
182
+ readonly required: boolean;
183
+ readonly formats?: readonly string[];
184
+ }
185
+ export interface AnalysisDatasetFileRef {
186
+ readonly path: string;
187
+ readonly bytes?: number;
188
+ readonly sha256?: string;
189
+ }
190
+ /** Host maps its ComputePreflightJobSpec into this immutable portable shape. */
191
+ export interface AnalysisComputePlanInput {
192
+ readonly outputs?: readonly (string | {
193
+ readonly path: string;
194
+ })[];
195
+ readonly dataDesign?: {
196
+ readonly rows?: readonly Readonly<Record<string, unknown>>[];
197
+ readonly dataset?: {
198
+ readonly files?: readonly AnalysisDatasetFileRef[];
199
+ };
200
+ };
201
+ }
202
+ export interface AnalysisAdapterContract {
203
+ readonly schemaVersion: typeof ANALYSIS_CONTRACT_VERSION;
204
+ readonly assay: string;
205
+ readonly domain: AnalysisDomain;
206
+ readonly researchStages: readonly AnalysisResearchStage[];
207
+ readonly inputs: readonly AnalysisSchemaField[];
208
+ readonly outputs: readonly AnalysisSchemaField[];
209
+ readonly capabilities: readonly string[];
210
+ readonly sideEffects: readonly AnalysisSideEffect[];
211
+ readonly evidenceTypes: readonly string[];
212
+ readonly workflow?: AnalysisIdentity;
213
+ }
214
+ export interface AnalysisArtifactEvidence {
215
+ readonly path: string;
216
+ readonly bytes?: number;
217
+ readonly sha256?: string;
218
+ readonly text?: string;
219
+ }
220
+ export interface AnalysisReviewCheck {
221
+ readonly id: string;
222
+ readonly passed: boolean;
223
+ readonly detail: string;
224
+ }
225
+ export interface AnalysisAdapterPlan {
226
+ readonly method: AnalysisIdentity;
227
+ readonly requiredOutputs: readonly string[];
228
+ readonly assessment: AnalysisReadiness;
229
+ readonly adapterSnapshotSha256: string;
230
+ }
231
+ export interface AnalysisAdapter {
232
+ readonly identity: AnalysisIdentity;
233
+ readonly contract: AnalysisAdapterContract;
234
+ supports(assay: string): boolean;
235
+ buildPlan(context: AnalysisContext, spec: AnalysisComputePlanInput, evidence: unknown): AnalysisAdapterPlan;
236
+ reviewResults(context: AnalysisContext, artifacts: readonly AnalysisArtifactEvidence[]): readonly AnalysisReviewCheck[];
237
+ readonly reviewInstructions: string;
238
+ }
239
+ export declare function analysisAdapterSnapshotSha256(adapter: Pick<AnalysisAdapter, "identity" | "contract">): string;
240
+ export declare function createAnalysisContext(input: {
241
+ id: string;
242
+ question: string;
243
+ assay: string;
244
+ mode: AnalysisMode;
245
+ adapter: AnalysisIdentity;
246
+ }): AnalysisContext;
247
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Public host contract for Drone capability plugins.
3
+ *
4
+ * Keep this module dependency-free. It is consumed by native Pi packages and
5
+ * by the Desktop adapter, so it must not import Electron, the Pi SDK, or any
6
+ * Drone implementation package. Runtime values are deliberately limited to
7
+ * the API/contract identifiers and the pure negotiation helper below.
8
+ */
9
+ export const PLUGIN_API_VERSION = 1;
10
+ export const RESULT_CONTRACT = "drone-result/v3";
11
+ /**
12
+ * Compare the numeric components of a host version. Pre-release suffixes are
13
+ * intentionally treated as the same patch for the v1 minimum-version gate;
14
+ * the CI matrix is responsible for testing the exact supported Pi versions.
15
+ */
16
+ export function compareHostVersions(left, right) {
17
+ const parse = (value) => value
18
+ .trim()
19
+ .replace(/^v/i, "")
20
+ .split(".")
21
+ .slice(0, 3)
22
+ .map((part) => {
23
+ const match = part.match(/^\d+/);
24
+ return match ? Number(match[0]) : 0;
25
+ });
26
+ const a = parse(left);
27
+ const b = parse(right);
28
+ for (let i = 0; i < 3; i += 1) {
29
+ const delta = (a[i] ?? 0) - (b[i] ?? 0);
30
+ if (delta !== 0)
31
+ return delta;
32
+ }
33
+ return 0;
34
+ }
35
+ /** Validate a plugin manifest's host requirements without loading its code. */
36
+ export function negotiateCapabilities(requirements, host) {
37
+ if (requirements.pluginApi !== host.pluginApiVersion) {
38
+ return {
39
+ status: "incompatible",
40
+ host: host.host,
41
+ pluginApi: requirements.pluginApi,
42
+ missingCapabilities: [],
43
+ reason: "plugin-api",
44
+ message: `Plugin API ${requirements.pluginApi} requires host API ${requirements.pluginApi}; host provides ${host.pluginApiVersion}.`,
45
+ };
46
+ }
47
+ if (requirements.hosts && !requirements.hosts.includes(host.host)) {
48
+ return {
49
+ status: "incompatible",
50
+ host: host.host,
51
+ pluginApi: requirements.pluginApi,
52
+ missingCapabilities: [],
53
+ reason: "host",
54
+ message: `Plugin does not declare support for ${host.host}.`,
55
+ };
56
+ }
57
+ if (requirements.minHostVersion && compareHostVersions(host.hostVersion, requirements.minHostVersion) < 0) {
58
+ return {
59
+ status: "incompatible",
60
+ host: host.host,
61
+ pluginApi: requirements.pluginApi,
62
+ missingCapabilities: [],
63
+ reason: "host-version",
64
+ message: `Host ${host.hostVersion} is below the required ${requirements.minHostVersion}.`,
65
+ };
66
+ }
67
+ const available = new Set(host.capabilities);
68
+ const missingCapabilities = (requirements.capabilities ?? []).filter((capability) => !available.has(capability));
69
+ if (missingCapabilities.length) {
70
+ return {
71
+ status: "incompatible",
72
+ host: host.host,
73
+ pluginApi: requirements.pluginApi,
74
+ missingCapabilities,
75
+ reason: "capability",
76
+ message: `Host is missing: ${missingCapabilities.join(", ")}.`,
77
+ };
78
+ }
79
+ return {
80
+ status: "compatible",
81
+ host: host.host,
82
+ pluginApi: requirements.pluginApi,
83
+ missingCapabilities: [],
84
+ };
85
+ }
86
+ export * from "./knowledge.js";
87
+ /** Public, host-neutral analysis contract used by native Pi packages. */
88
+ export const ANALYSIS_CONTRACT_VERSION = 1;
89
+ function stableContractJson(value) {
90
+ if (value === null || typeof value !== "object")
91
+ return JSON.stringify(value) ?? "null";
92
+ if (Array.isArray(value))
93
+ return `[${value.map(stableContractJson).join(",")}]`;
94
+ const object = value;
95
+ return `{${Object.keys(object)
96
+ .sort()
97
+ .map((key) => `${JSON.stringify(key)}:${stableContractJson(object[key])}`)
98
+ .join(",")}}`;
99
+ }
100
+ // Small dependency-free SHA-256 implementation keeps the public contract
101
+ // usable from native Pi, Electron preload and browser-based hosts alike.
102
+ function sha256Hex(input) {
103
+ const encoded = encodeURIComponent(input);
104
+ const utf8 = [];
105
+ for (let i = 0; i < encoded.length; i += 1) {
106
+ if (encoded[i] === "%") {
107
+ utf8.push(Number.parseInt(encoded.slice(i + 1, i + 3), 16));
108
+ i += 2;
109
+ }
110
+ else {
111
+ utf8.push(encoded.charCodeAt(i));
112
+ }
113
+ }
114
+ const bytes = Uint8Array.from(utf8);
115
+ const words = new Array(64).fill(0);
116
+ const hash = [
117
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
118
+ ];
119
+ const constants = [
120
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
121
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
122
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
123
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
124
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
125
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
126
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
127
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
128
+ ];
129
+ const readNumber = (values, index) => {
130
+ const value = values[index];
131
+ if (value === undefined)
132
+ throw new Error(`SHA-256 state index ${index} is out of bounds`);
133
+ return value;
134
+ };
135
+ const bitLength = bytes.length * 8;
136
+ const paddedLength = Math.ceil((bytes.length + 9) / 64) * 64;
137
+ const padded = new Uint8Array(paddedLength);
138
+ padded.set(bytes);
139
+ padded[bytes.length] = 0x80;
140
+ const view = new DataView(padded.buffer);
141
+ view.setUint32(paddedLength - 4, bitLength >>> 0);
142
+ view.setUint32(paddedLength - 8, Math.floor(bitLength / 0x100000000));
143
+ for (let offset = 0; offset < padded.length; offset += 64) {
144
+ for (let i = 0; i < 16; i += 1)
145
+ words[i] = view.getUint32(offset + i * 4);
146
+ for (let i = 16; i < 64; i += 1) {
147
+ const value = readNumber(words, i - 15);
148
+ const smallSigma0 = ((value >>> 7) | (value << 25)) ^ ((value >>> 18) | (value << 14)) ^ (value >>> 3);
149
+ const previous = readNumber(words, i - 2);
150
+ const smallSigma1 = ((previous >>> 17) | (previous << 15)) ^ ((previous >>> 19) | (previous << 13)) ^ (previous >>> 10);
151
+ words[i] = (readNumber(words, i - 16) + smallSigma0 + readNumber(words, i - 7) + smallSigma1) >>> 0;
152
+ }
153
+ let a = readNumber(hash, 0);
154
+ let b = readNumber(hash, 1);
155
+ let c = readNumber(hash, 2);
156
+ let d = readNumber(hash, 3);
157
+ let e = readNumber(hash, 4);
158
+ let f = readNumber(hash, 5);
159
+ let g = readNumber(hash, 6);
160
+ let h = readNumber(hash, 7);
161
+ for (let i = 0; i < 64; i += 1) {
162
+ const bigSigma1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));
163
+ const choose = (e & f) ^ (~e & g);
164
+ const temp1 = (h + bigSigma1 + choose + readNumber(constants, i) + readNumber(words, i)) >>> 0;
165
+ const bigSigma0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));
166
+ const majority = (a & b) ^ (a & c) ^ (b & c);
167
+ const temp2 = (bigSigma0 + majority) >>> 0;
168
+ h = g;
169
+ g = f;
170
+ f = e;
171
+ e = (d + temp1) >>> 0;
172
+ d = c;
173
+ c = b;
174
+ b = a;
175
+ a = (temp1 + temp2) >>> 0;
176
+ }
177
+ hash[0] = (readNumber(hash, 0) + a) >>> 0;
178
+ hash[1] = (readNumber(hash, 1) + b) >>> 0;
179
+ hash[2] = (readNumber(hash, 2) + c) >>> 0;
180
+ hash[3] = (readNumber(hash, 3) + d) >>> 0;
181
+ hash[4] = (readNumber(hash, 4) + e) >>> 0;
182
+ hash[5] = (readNumber(hash, 5) + f) >>> 0;
183
+ hash[6] = (readNumber(hash, 6) + g) >>> 0;
184
+ hash[7] = (readNumber(hash, 7) + h) >>> 0;
185
+ }
186
+ return [...hash].map((value) => value.toString(16).padStart(8, "0")).join("");
187
+ }
188
+ export function analysisAdapterSnapshotSha256(adapter) {
189
+ return sha256Hex(stableContractJson({ identity: adapter.identity, contract: adapter.contract }));
190
+ }
191
+ export function createAnalysisContext(input) {
192
+ const clean = (value, label, max) => {
193
+ const text = value.normalize("NFKC").replace(/\s+/g, " ").trim();
194
+ if (!text || text.length > max)
195
+ throw new Error(`${label} must be a non-empty bounded string`);
196
+ return text;
197
+ };
198
+ const id = clean(input.id, "Analysis id", 128);
199
+ if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/.test(id))
200
+ throw new Error("Analysis id contains unsafe characters");
201
+ return {
202
+ version: ANALYSIS_CONTRACT_VERSION,
203
+ id,
204
+ question: clean(input.question, "Analysis question", 512),
205
+ assay: clean(input.assay, "Assay", 128),
206
+ mode: input.mode,
207
+ adapter: input.adapter,
208
+ };
209
+ }
210
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}