@hydracept/sdk 0.2.2 → 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/CHANGELOG.md +5 -0
- package/README.md +14 -1
- package/dist/index.d.ts +4 -1
- 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 +10 -2
- 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 +16 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +80 -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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.3 — 2026-08-13
|
|
4
|
+
|
|
5
|
+
- Pinned Execution: `createPinnedInference`, `getPinnedReceipt`, `listPinnedReceipts`
|
|
6
|
+
- Provenance: `createRunManifest`, `getRunManifest`, `verifyRunManifest`, `getLockfile`, `verifyLockfile`
|
|
7
|
+
|
|
3
8
|
## 0.2.2 — 2026-08-12
|
|
4
9
|
|
|
5
10
|
- Typed panel definition list response: `{ definitions: PanelDefinitionView[] }`
|
package/README.md
CHANGED
|
@@ -33,6 +33,19 @@ const status = await client.runtime.getJob(job.jobId);
|
|
|
33
33
|
const receipt = await client.runtime.getJobReceipt(job.jobId);
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
+
### Pinned Execution (RIP)
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
const result = await client.runtime.createPinnedInference({
|
|
40
|
+
pin: { provider: 'openai', model: 'gpt-5.6-sol', api: 'responses' },
|
|
41
|
+
isolation: 'stateless',
|
|
42
|
+
input: 'ping',
|
|
43
|
+
});
|
|
44
|
+
const pinned = await client.runtime.getPinnedReceipt(result.receipt.receipt_id);
|
|
45
|
+
const lock = await client.runtime.getLockfile(pinned.receiptId);
|
|
46
|
+
await client.runtime.verifyLockfile(lock);
|
|
47
|
+
```
|
|
48
|
+
|
|
36
49
|
### Panel sessions (embed host)
|
|
37
50
|
|
|
38
51
|
```ts
|
|
@@ -59,4 +72,4 @@ Pair with [`@hydracept/elements`](../../packages/elements) to mount the hosted i
|
|
|
59
72
|
|
|
60
73
|
Activate at https://hydracept.com/start · Docs: https://docs.hydracept.com
|
|
61
74
|
|
|
62
|
-
A Zencode
|
|
75
|
+
A Zencode company · © Zencode Consulting Inc.
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export { createHydraceptRuntimeApi } from './runtime.js';
|
|
|
12
12
|
export type { HydraceptRuntimeApi } from './runtime.js';
|
|
13
13
|
export { createHydraceptPanelsApi } from './panels.js';
|
|
14
14
|
export type { HydraceptPanelsApi } from './panels.js';
|
|
15
|
-
export type { PanelDefinitionListResponse, PanelDefinitionView, PanelDefinitionVersionView, PanelSessionCreated, } from './panel-types.js';
|
|
15
|
+
export type { PanelDefinitionListResponse, PanelDefinitionView, PanelDefinitionVersionView, PanelSessionCreated, SurfaceActionInputField, } from './panel-types.js';
|
|
16
16
|
export { iterInvocationEvents } from './sse.js';
|
|
17
17
|
export type { HydraceptAssetOut, HydraceptAssetPage, } from './types.js';
|
|
18
18
|
export type HydraceptClient = {
|
|
@@ -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,
|
|
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
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
/** Panel definition and session response shapes (additive /v1 contracts). */
|
|
2
|
+
export interface SurfaceActionInputField {
|
|
3
|
+
readonly key: string;
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly valueType?: 'string' | 'number' | 'boolean' | 'string[]';
|
|
6
|
+
}
|
|
2
7
|
export interface PanelDefinitionVersionView {
|
|
3
8
|
readonly id: string;
|
|
4
9
|
readonly definitionId: string;
|
|
5
10
|
readonly version: number;
|
|
6
|
-
readonly capabilityKey
|
|
7
|
-
readonly capabilityVersion
|
|
11
|
+
readonly capabilityKey?: string | null;
|
|
12
|
+
readonly capabilityVersion?: string | null;
|
|
8
13
|
readonly allowedOrigins: readonly string[];
|
|
14
|
+
readonly actions?: readonly unknown[];
|
|
9
15
|
}
|
|
10
16
|
export interface PanelDefinitionView {
|
|
11
17
|
readonly id: string;
|
|
@@ -13,6 +19,8 @@ export interface PanelDefinitionView {
|
|
|
13
19
|
readonly key: string;
|
|
14
20
|
readonly displayName: string;
|
|
15
21
|
readonly status: string;
|
|
22
|
+
readonly origin?: 'hydracept' | 'project';
|
|
23
|
+
readonly projectId?: string | null;
|
|
16
24
|
readonly currentVersion?: PanelDefinitionVersionView;
|
|
17
25
|
}
|
|
18
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,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,EAAE,MAAM,CAAC;
|
|
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>;
|
|
@@ -19,6 +27,14 @@ export declare function createHydraceptRuntimeApi(http: HydraceptHttp): {
|
|
|
19
27
|
submitComparisonJudgement<T = unknown>(comparisonId: string, body: unknown): Promise<T>;
|
|
20
28
|
getJobReceipt<T = unknown>(jobId: string): Promise<T>;
|
|
21
29
|
cancelJob<T = unknown>(jobId: string): Promise<T>;
|
|
30
|
+
createPinnedInference<T = unknown>(body: unknown, init?: RequestInit): Promise<T>;
|
|
31
|
+
getPinnedReceipt<T = unknown>(receiptId: string): Promise<T>;
|
|
32
|
+
listPinnedReceipts<T = unknown>(): Promise<T>;
|
|
33
|
+
createRunManifest<T = unknown>(body: unknown, init?: RequestInit): Promise<T>;
|
|
34
|
+
getRunManifest<T = unknown>(manifestId: string): Promise<T>;
|
|
35
|
+
verifyRunManifest<T = unknown>(manifestId: string, init?: RequestInit): Promise<T>;
|
|
36
|
+
getLockfile<T = unknown>(receiptId: string): Promise<T>;
|
|
37
|
+
verifyLockfile<T = unknown>(body: unknown, init?: RequestInit): Promise<T>;
|
|
22
38
|
downloadJobArtifact(jobId: string, artifactId: string): Promise<Blob>;
|
|
23
39
|
pollJobUntilTerminal<T extends {
|
|
24
40
|
status?: string;
|
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',
|
|
@@ -80,6 +121,45 @@ export function createHydraceptRuntimeApi(http) {
|
|
|
80
121
|
cancelJob(jobId) {
|
|
81
122
|
return http.fetchJson(`/jobs/${encodeURIComponent(jobId)}/cancel`, { method: 'POST' });
|
|
82
123
|
},
|
|
124
|
+
createPinnedInference(body, init = {}) {
|
|
125
|
+
return http.fetchJson('/inference/pinned', {
|
|
126
|
+
method: 'POST',
|
|
127
|
+
body: JSON.stringify(body),
|
|
128
|
+
...init,
|
|
129
|
+
});
|
|
130
|
+
},
|
|
131
|
+
getPinnedReceipt(receiptId) {
|
|
132
|
+
return http.fetchJson(`/inference/pinned/${encodeURIComponent(receiptId)}`);
|
|
133
|
+
},
|
|
134
|
+
listPinnedReceipts() {
|
|
135
|
+
return http.fetchJson('/inference/pinned');
|
|
136
|
+
},
|
|
137
|
+
createRunManifest(body, init = {}) {
|
|
138
|
+
return http.fetchJson('/provenance/manifests', {
|
|
139
|
+
method: 'POST',
|
|
140
|
+
body: JSON.stringify(body),
|
|
141
|
+
...init,
|
|
142
|
+
});
|
|
143
|
+
},
|
|
144
|
+
getRunManifest(manifestId) {
|
|
145
|
+
return http.fetchJson(`/provenance/manifests/${encodeURIComponent(manifestId)}`);
|
|
146
|
+
},
|
|
147
|
+
verifyRunManifest(manifestId, init = {}) {
|
|
148
|
+
return http.fetchJson(`/provenance/manifests/${encodeURIComponent(manifestId)}/verify`, {
|
|
149
|
+
method: 'POST',
|
|
150
|
+
...init,
|
|
151
|
+
});
|
|
152
|
+
},
|
|
153
|
+
getLockfile(receiptId) {
|
|
154
|
+
return http.fetchJson(`/provenance/lockfile?receipt_id=${encodeURIComponent(receiptId)}`);
|
|
155
|
+
},
|
|
156
|
+
verifyLockfile(body, init = {}) {
|
|
157
|
+
return http.fetchJson('/provenance/lockfile/verify', {
|
|
158
|
+
method: 'POST',
|
|
159
|
+
body: JSON.stringify(body),
|
|
160
|
+
...init,
|
|
161
|
+
});
|
|
162
|
+
},
|
|
83
163
|
downloadJobArtifact(jobId, artifactId) {
|
|
84
164
|
return http.fetchBlob(`/jobs/${encodeURIComponent(jobId)}/artifacts/${encodeURIComponent(artifactId)}`);
|
|
85
165
|
},
|
|
@@ -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": "
|
|
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
|
}
|