@hydracept/sdk 0.2.3 → 0.3.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 +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/jobs.d.ts +21 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +71 -0
- package/dist/panel-types.d.ts +1 -0
- package/dist/panel-types.d.ts.map +1 -1
- package/dist/panels.d.ts +1 -1
- package/dist/panels.d.ts.map +1 -1
- package/dist/panels.js +3 -2
- package/dist/runtime.d.ts +8 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +41 -0
- package/dist/workspace.d.ts +17 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +54 -0
- package/package.json +8 -2
package/README.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -22,4 +22,7 @@ export type HydraceptClient = {
|
|
|
22
22
|
panels: ReturnType<typeof createHydraceptPanelsApi>;
|
|
23
23
|
};
|
|
24
24
|
export declare function createHydraceptClient(options: HydraceptClientOptions): HydraceptClient;
|
|
25
|
+
export { HydraceptWorkspace } from './workspace.js';
|
|
26
|
+
export { createHydraceptJobRunner } from './jobs.js';
|
|
27
|
+
export type { HydraceptJobRunner, HydraceptJobRunResult } from './jobs.js';
|
|
25
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,YAAY,EACV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACtD,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACtD,MAAM,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;CACrD,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAQtF"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,YAAY,EACV,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACtD,OAAO,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC;IACtD,MAAM,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;CACrD,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAQtF;AAED,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/jobs.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HydraceptClient } from './index.js';
|
|
2
|
+
export type HydraceptJobBinding = {
|
|
3
|
+
projectId: string;
|
|
4
|
+
environment?: string;
|
|
5
|
+
};
|
|
6
|
+
export type HydraceptJobRunResult = {
|
|
7
|
+
jobId: string;
|
|
8
|
+
status: string;
|
|
9
|
+
job: Record<string, unknown>;
|
|
10
|
+
receipt: Record<string, unknown> | null;
|
|
11
|
+
downloads: string[];
|
|
12
|
+
nextAction: string;
|
|
13
|
+
};
|
|
14
|
+
export type HydraceptJobRunner = {
|
|
15
|
+
run(capabilityKey: string, body: Record<string, unknown>, options?: {
|
|
16
|
+
downloadDir?: string;
|
|
17
|
+
pollMs?: number;
|
|
18
|
+
}): Promise<HydraceptJobRunResult>;
|
|
19
|
+
};
|
|
20
|
+
export declare function createHydraceptJobRunner(client: HydraceptClient, binding: HydraceptJobBinding): HydraceptJobRunner;
|
|
21
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAWF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CACD,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAClD,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnC,CAAC;AAMF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CAyDpB"}
|
package/dist/jobs.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
function nextActionForJob(job) {
|
|
5
|
+
const status = String(job.status || '').toLowerCase();
|
|
6
|
+
const artifacts = job.artifacts;
|
|
7
|
+
const hasArtifacts = Array.isArray(artifacts) && artifacts.length > 0;
|
|
8
|
+
if (['queued', 'running', 'awaiting_approval', 'canceling'].includes(status))
|
|
9
|
+
return 'poll';
|
|
10
|
+
if (status === 'succeeded')
|
|
11
|
+
return hasArtifacts ? 'download' : 'receipt';
|
|
12
|
+
return 'done';
|
|
13
|
+
}
|
|
14
|
+
function sleep(ms) {
|
|
15
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
16
|
+
}
|
|
17
|
+
export function createHydraceptJobRunner(client, binding) {
|
|
18
|
+
return {
|
|
19
|
+
async run(capabilityKey, body, options = {}) {
|
|
20
|
+
const payload = {
|
|
21
|
+
...body,
|
|
22
|
+
context: {
|
|
23
|
+
productId: binding.projectId,
|
|
24
|
+
projectId: binding.projectId,
|
|
25
|
+
environment: binding.environment || 'development',
|
|
26
|
+
...(body.context ?? {}),
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
const submitted = (await client.runtime.submitCapabilityJob(capabilityKey, payload));
|
|
30
|
+
const jobId = String(submitted.jobId || submitted.id || '');
|
|
31
|
+
if (!jobId)
|
|
32
|
+
throw new Error('No jobId in submit response');
|
|
33
|
+
const deadline = Date.now() + (options.pollMs ?? 120_000);
|
|
34
|
+
let job = submitted;
|
|
35
|
+
let status = String(submitted.status || 'queued');
|
|
36
|
+
while (Date.now() < deadline) {
|
|
37
|
+
job = (await client.runtime.getJob(jobId));
|
|
38
|
+
status = String(job.status || 'unknown');
|
|
39
|
+
if (['succeeded', 'failed', 'canceled', 'cancelled'].includes(status))
|
|
40
|
+
break;
|
|
41
|
+
await sleep(2000);
|
|
42
|
+
}
|
|
43
|
+
let receipt = null;
|
|
44
|
+
if (status === 'succeeded') {
|
|
45
|
+
receipt = (await client.runtime.getJobReceipt(jobId));
|
|
46
|
+
}
|
|
47
|
+
const downloads = [];
|
|
48
|
+
if (options.downloadDir && status === 'succeeded' && receipt) {
|
|
49
|
+
const artifacts = receipt.artifacts || [];
|
|
50
|
+
for (const item of artifacts) {
|
|
51
|
+
const artifactId = String(item.artifactId || item.id || '');
|
|
52
|
+
if (!artifactId)
|
|
53
|
+
continue;
|
|
54
|
+
const buffer = await client.http.fetchBytes(`/jobs/${encodeURIComponent(jobId)}/artifacts/${encodeURIComponent(artifactId)}`);
|
|
55
|
+
const bytes = new Uint8Array(buffer);
|
|
56
|
+
const expected = String(item.sha256 || '').toLowerCase();
|
|
57
|
+
const actual = createHash('sha256').update(bytes).digest('hex');
|
|
58
|
+
if (expected && expected !== actual) {
|
|
59
|
+
throw new Error(`SHA-256 mismatch for ${artifactId}`);
|
|
60
|
+
}
|
|
61
|
+
const filename = String(item.filename || item.label || artifactId);
|
|
62
|
+
const target = join(options.downloadDir, filename);
|
|
63
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
64
|
+
writeFileSync(target, bytes);
|
|
65
|
+
downloads.push(target);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { jobId, status, job, receipt, downloads, nextAction: nextActionForJob(job) };
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
package/dist/panel-types.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface PanelDefinitionView {
|
|
|
20
20
|
readonly displayName: string;
|
|
21
21
|
readonly status: string;
|
|
22
22
|
readonly origin?: 'hydracept' | 'project';
|
|
23
|
+
readonly projectId?: string | null;
|
|
23
24
|
readonly currentVersion?: PanelDefinitionVersionView;
|
|
24
25
|
}
|
|
25
26
|
/** GET /v1/panel-definitions list envelope. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel-types.d.ts","sourceRoot":"","sources":["../src/panel-types.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CACnE;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,0BAA0B,CAAC;CACtD;AAED,+CAA+C;AAC/C,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
|
|
1
|
+
{"version":3,"file":"panel-types.d.ts","sourceRoot":"","sources":["../src/panel-types.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CACnE;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,0BAA0B,CAAC;CACtD;AAED,+CAA+C;AAC/C,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
|
package/dist/panels.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { PanelDefinitionListResponse, PanelDefinitionView, PanelSessionCrea
|
|
|
3
3
|
/** Panel definition and session helpers for hosted panels and embed integrations. */
|
|
4
4
|
export declare function createHydraceptPanelsApi(http: HydraceptHttp): {
|
|
5
5
|
createPanelDefinition<T = PanelDefinitionView>(body: unknown, init?: RequestInit): Promise<T>;
|
|
6
|
-
listPanelDefinitions(): Promise<PanelDefinitionListResponse>;
|
|
6
|
+
listPanelDefinitions(projectId?: string): Promise<PanelDefinitionListResponse>;
|
|
7
7
|
getPanelDefinition<T = unknown>(definitionId: string): Promise<T>;
|
|
8
8
|
patchPanelDefinition<T = unknown>(definitionId: string, body: unknown, init?: RequestInit): Promise<T>;
|
|
9
9
|
createPanelSession(body: unknown, init?: RequestInit): Promise<PanelSessionCreated>;
|
package/dist/panels.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panels.d.ts","sourceRoot":"","sources":["../src/panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAE1B,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa;0BAElC,CAAC,8BAA8B,OAAO,SAAQ,WAAW,GAAQ,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"panels.d.ts","sourceRoot":"","sources":["../src/panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAE1B,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa;0BAElC,CAAC,8BAA8B,OAAO,SAAQ,WAAW,GAAQ,OAAO,CAAC,CAAC,CAAC;qCAQhE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;uBAK3D,CAAC,0BAA0B,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;yBAI5C,CAAC,0BACN,MAAM,QACd,OAAO,SACP,WAAW,GAChB,OAAO,CAAC,CAAC,CAAC;6BAQY,OAAO,SAAQ,WAAW,GAAQ,OAAO,CAAC,mBAAmB,CAAC;oBAQvE,CAAC,uBAAuB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;uBAIxC,CAAC,uBAAuB,MAAM,SAAQ,WAAW,GAAQ,OAAO,CAAC,CAAC,CAAC;0BAOhE,CAAC,uBAAuB,MAAM,SAAQ,WAAW,GAAQ,OAAO,CAAC,CAAC,CAAC;sBAUvE,CAAC,mBAAkB,WAAW,GAAQ,OAAO,CAAC,CAAC,CAAC;4BAI1C,CAAC,kBAAkB,OAAO,SAAQ,WAAW,GAAQ,OAAO,CAAC,CAAC,CAAC;EAQ1F;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
package/dist/panels.js
CHANGED
|
@@ -8,8 +8,9 @@ export function createHydraceptPanelsApi(http) {
|
|
|
8
8
|
...init,
|
|
9
9
|
});
|
|
10
10
|
},
|
|
11
|
-
listPanelDefinitions() {
|
|
12
|
-
|
|
11
|
+
listPanelDefinitions(projectId) {
|
|
12
|
+
const suffix = projectId ? `?projectId=${encodeURIComponent(projectId)}` : '';
|
|
13
|
+
return http.fetchJson(`/panel-definitions${suffix}`);
|
|
13
14
|
},
|
|
14
15
|
getPanelDefinition(definitionId) {
|
|
15
16
|
return http.fetchJson(`/panel-definitions/${encodeURIComponent(definitionId)}`);
|
package/dist/runtime.d.ts
CHANGED
|
@@ -11,6 +11,14 @@ export declare function createHydraceptRuntimeApi(http: HydraceptHttp): {
|
|
|
11
11
|
getJobResult<T = unknown>(jobId: string): Promise<T>;
|
|
12
12
|
getCapabilities<T = unknown>(): Promise<T>;
|
|
13
13
|
describeCapability<T = unknown>(key: string): Promise<T>;
|
|
14
|
+
resolveCapability<T = unknown>(body: unknown): Promise<T>;
|
|
15
|
+
estimateCapability<T = unknown>(key: string, body: unknown): Promise<T>;
|
|
16
|
+
quoteCapability<T = unknown>(key: string, body: unknown): Promise<T>;
|
|
17
|
+
createCapabilityRequest<T = unknown>(body: unknown): Promise<T>;
|
|
18
|
+
reviseCapabilityRequest<T = unknown>(requestId: string, body: unknown): Promise<T>;
|
|
19
|
+
submitCapabilityRequest<T = unknown>(requestId: string): Promise<T>;
|
|
20
|
+
getCapabilityRequest<T = unknown>(requestId: string): Promise<T>;
|
|
21
|
+
getCapabilityRequestQuote<T = unknown>(requestId: string): Promise<T>;
|
|
14
22
|
invokeCapability<T = unknown>(key: string, body: unknown, init?: RequestInit): Promise<T>;
|
|
15
23
|
submitCapabilityJob<T = unknown>(key: string, body: unknown, init?: RequestInit): Promise<T>;
|
|
16
24
|
createComparison<T = unknown>(key: string, body: unknown): Promise<T>;
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,0EAA0E;AAC1E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa;WAElD,CAAC,kBAAkB,OAAO,SAAQ,WAAW,GAAQ,OAAO,CAAC,CAAC,CAAC;kBAQxD,CAAC,yBAAyB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;eAIhD,CAAC,yBAAyB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;qBAIvC,CAAC,yBAAyB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;cAMpD,CAAC,kBAAkB,OAAO,SAAQ,WAAW,GAAQ,OAAO,CAAC,CAAC,CAAC;WAQlE,CAAC,mBAAmB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;iBAIjC,CAAC,mBAAmB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;oBAIpC,CAAC,eAAe,OAAO,CAAC,CAAC,CAAC;uBAIvB,CAAC,iBAAiB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -39,6 +39,47 @@ export function createHydraceptRuntimeApi(http) {
|
|
|
39
39
|
describeCapability(key) {
|
|
40
40
|
return http.fetchJson(`/capabilities/${encodeURIComponent(key)}`);
|
|
41
41
|
},
|
|
42
|
+
resolveCapability(body) {
|
|
43
|
+
return http.fetchJson('/capabilities/resolve', {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
body: JSON.stringify(body),
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
estimateCapability(key, body) {
|
|
49
|
+
return http.fetchJson(`/capabilities/${encodeURIComponent(key)}/quote`, {
|
|
50
|
+
method: 'POST',
|
|
51
|
+
body: JSON.stringify(body),
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
quoteCapability(key, body) {
|
|
55
|
+
return http.fetchJson(`/capabilities/${encodeURIComponent(key)}/quote`, {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
body: JSON.stringify(body),
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
createCapabilityRequest(body) {
|
|
61
|
+
return http.fetchJson('/capability-requests', {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
body: JSON.stringify(body),
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
reviseCapabilityRequest(requestId, body) {
|
|
67
|
+
return http.fetchJson(`/capability-requests/${encodeURIComponent(requestId)}/revisions`, {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
body: JSON.stringify(body),
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
submitCapabilityRequest(requestId) {
|
|
73
|
+
return http.fetchJson(`/capability-requests/${encodeURIComponent(requestId)}/submit`, {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
getCapabilityRequest(requestId) {
|
|
78
|
+
return http.fetchJson(`/capability-requests/${encodeURIComponent(requestId)}`);
|
|
79
|
+
},
|
|
80
|
+
getCapabilityRequestQuote(requestId) {
|
|
81
|
+
return http.fetchJson(`/capability-requests/${encodeURIComponent(requestId)}/quote`);
|
|
82
|
+
},
|
|
42
83
|
invokeCapability(key, body, init = {}) {
|
|
43
84
|
return http.fetchJson(`/capabilities/${encodeURIComponent(key)}/invoke`, {
|
|
44
85
|
method: 'POST',
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type HydraceptJobRunner } from './jobs.js';
|
|
2
|
+
import type { HydraceptClient } from './index.js';
|
|
3
|
+
export type HydraceptWorkspaceBinding = {
|
|
4
|
+
schemaVersion?: string;
|
|
5
|
+
projectId: string;
|
|
6
|
+
environment?: string;
|
|
7
|
+
apiOrigin?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare class HydraceptWorkspace {
|
|
10
|
+
readonly client: HydraceptClient;
|
|
11
|
+
readonly jobs: HydraceptJobRunner;
|
|
12
|
+
readonly root: string;
|
|
13
|
+
readonly binding: HydraceptWorkspaceBinding;
|
|
14
|
+
private constructor();
|
|
15
|
+
static open(root?: string): HydraceptWorkspace;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAE5C,OAAO;IAYP,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,kBAAkB;CAqC/C"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { createHydraceptHttp } from './http.js';
|
|
4
|
+
import { createHydraceptControlApi } from './control.js';
|
|
5
|
+
import { createHydraceptPanelsApi } from './panels.js';
|
|
6
|
+
import { createHydraceptRuntimeApi } from './runtime.js';
|
|
7
|
+
import { createHydraceptJobRunner } from './jobs.js';
|
|
8
|
+
export class HydraceptWorkspace {
|
|
9
|
+
client;
|
|
10
|
+
jobs;
|
|
11
|
+
root;
|
|
12
|
+
binding;
|
|
13
|
+
constructor(root, binding, client, jobs) {
|
|
14
|
+
this.root = root;
|
|
15
|
+
this.binding = binding;
|
|
16
|
+
this.client = client;
|
|
17
|
+
this.jobs = jobs;
|
|
18
|
+
}
|
|
19
|
+
static open(root) {
|
|
20
|
+
const projectRoot = resolve(root ?? process.cwd());
|
|
21
|
+
const bindingPath = join(projectRoot, '.hydracept', 'project.json');
|
|
22
|
+
if (!existsSync(bindingPath)) {
|
|
23
|
+
throw new Error('Missing .hydracept/project.json — run python -m hydracept init');
|
|
24
|
+
}
|
|
25
|
+
const binding = JSON.parse(readFileSync(bindingPath, 'utf8'));
|
|
26
|
+
if (!binding.projectId) {
|
|
27
|
+
throw new Error('project.json is missing projectId');
|
|
28
|
+
}
|
|
29
|
+
const envProject = process.env.HYDRACEPT_PROJECT || process.env.HYDRACEPT_PROJECT_ID;
|
|
30
|
+
if (envProject && envProject !== binding.projectId) {
|
|
31
|
+
throw new Error(`HYDRACEPT_PROJECT=${envProject} disagrees with project.json projectId=${binding.projectId}`);
|
|
32
|
+
}
|
|
33
|
+
const secretsPath = join(projectRoot, '.hydracept', 'secrets.json');
|
|
34
|
+
const secrets = existsSync(secretsPath)
|
|
35
|
+
? JSON.parse(readFileSync(secretsPath, 'utf8'))
|
|
36
|
+
: {};
|
|
37
|
+
const token = process.env.HYDRACEPT_API_KEY || secrets.apiKey || secrets.token;
|
|
38
|
+
if (!token) {
|
|
39
|
+
throw new Error('No workspace API key in secrets.json');
|
|
40
|
+
}
|
|
41
|
+
const http = createHydraceptHttp({
|
|
42
|
+
baseUrl: binding.apiOrigin || 'https://api.hydracept.com',
|
|
43
|
+
token,
|
|
44
|
+
});
|
|
45
|
+
const client = {
|
|
46
|
+
http,
|
|
47
|
+
control: createHydraceptControlApi(http),
|
|
48
|
+
runtime: createHydraceptRuntimeApi(http),
|
|
49
|
+
panels: createHydraceptPanelsApi(http),
|
|
50
|
+
};
|
|
51
|
+
const jobs = createHydraceptJobRunner(client, binding);
|
|
52
|
+
return new HydraceptWorkspace(projectRoot, binding, client, jobs);
|
|
53
|
+
}
|
|
54
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hydracept/sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "TypeScript client for Hydracept —
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "TypeScript client for Hydracept — production-ready game assets, with a receipt for every run.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -33,7 +33,12 @@
|
|
|
33
33
|
"unreal",
|
|
34
34
|
"ai",
|
|
35
35
|
"llm",
|
|
36
|
+
"mcp",
|
|
36
37
|
"image-generation",
|
|
38
|
+
"sprite-sheet",
|
|
39
|
+
"transparent-png",
|
|
40
|
+
"reference-image",
|
|
41
|
+
"multi-provider",
|
|
37
42
|
"audio",
|
|
38
43
|
"byok",
|
|
39
44
|
"api",
|
|
@@ -57,6 +62,7 @@
|
|
|
57
62
|
"provenance": false
|
|
58
63
|
},
|
|
59
64
|
"devDependencies": {
|
|
65
|
+
"@types/node": "^22.10.0",
|
|
60
66
|
"typescript": "^5.7.2"
|
|
61
67
|
}
|
|
62
68
|
}
|