@stigmer/server 3.22.1 → 3.23.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/dist/artifactstorage/artifact-storage.d.ts +29 -31
- package/dist/artifactstorage/artifact-storage.d.ts.map +1 -1
- package/dist/artifactstorage/artifact-storage.js +5 -7
- package/dist/artifactstorage/artifact-storage.js.map +1 -1
- package/dist/artifactstorage/r2-storage.d.ts +12 -7
- package/dist/artifactstorage/r2-storage.d.ts.map +1 -1
- package/dist/artifactstorage/r2-storage.js +6 -14
- package/dist/artifactstorage/r2-storage.js.map +1 -1
- package/dist/boot/compose.d.ts.map +1 -1
- package/dist/boot/compose.js +49 -24
- package/dist/boot/compose.js.map +1 -1
- package/dist/boot/config.d.ts +4 -3
- package/dist/boot/config.d.ts.map +1 -1
- package/dist/boot/config.js.map +1 -1
- package/dist/boot/skill-transfer-origin.d.ts +52 -0
- package/dist/boot/skill-transfer-origin.d.ts.map +1 -0
- package/dist/boot/skill-transfer-origin.js +54 -0
- package/dist/boot/skill-transfer-origin.js.map +1 -0
- package/dist/domain/plugin/controller.d.ts +3 -7
- package/dist/domain/plugin/controller.d.ts.map +1 -1
- package/dist/domain/plugin/controller.js +8 -8
- package/dist/domain/plugin/controller.js.map +1 -1
- package/dist/domain/skill/constants.d.ts +26 -3
- package/dist/domain/skill/constants.d.ts.map +1 -1
- package/dist/domain/skill/constants.js +26 -3
- package/dist/domain/skill/constants.js.map +1 -1
- package/dist/domain/skill/controller.d.ts +6 -11
- package/dist/domain/skill/controller.d.ts.map +1 -1
- package/dist/domain/skill/controller.js +33 -22
- package/dist/domain/skill/controller.js.map +1 -1
- package/dist/domain/skill/push.d.ts +2 -2
- package/dist/domain/skill/push.d.ts.map +1 -1
- package/dist/domain/skill/push.js +2 -2
- package/dist/domain/skill/push.js.map +1 -1
- package/dist/domain/skill/transfer/handler.d.ts +17 -9
- package/dist/domain/skill/transfer/handler.d.ts.map +1 -1
- package/dist/domain/skill/transfer/handler.js +19 -8
- package/dist/domain/skill/transfer/handler.js.map +1 -1
- package/dist/domain/skill/transfer/slots.d.ts +26 -41
- package/dist/domain/skill/transfer/slots.d.ts.map +1 -1
- package/dist/domain/skill/transfer/slots.js +80 -87
- package/dist/domain/skill/transfer/slots.js.map +1 -1
- package/dist/domain/skill/transfer/staging.d.ts +48 -0
- package/dist/domain/skill/transfer/staging.d.ts.map +1 -0
- package/dist/domain/skill/transfer/staging.js +127 -0
- package/dist/domain/skill/transfer/staging.js.map +1 -0
- package/dist/pipeline/steps/resolve-artifact-source.d.ts +11 -8
- package/dist/pipeline/steps/resolve-artifact-source.d.ts.map +1 -1
- package/dist/pipeline/steps/resolve-artifact-source.js +8 -4
- package/dist/pipeline/steps/resolve-artifact-source.js.map +1 -1
- package/package.json +6 -6
- package/src/artifactstorage/__tests__/artifact-storage.test.ts +36 -33
- package/src/artifactstorage/__tests__/r2-storage.test.ts +11 -13
- package/src/artifactstorage/artifact-storage.ts +37 -33
- package/src/artifactstorage/r2-storage.ts +6 -15
- package/src/boot/__tests__/skill-transfer-origin.test.ts +72 -0
- package/src/boot/compose.ts +62 -25
- package/src/boot/config.ts +4 -3
- package/src/boot/skill-transfer-origin.ts +76 -0
- package/src/domain/plugin/controller.ts +15 -17
- package/src/domain/skill/__tests__/skill.test.ts +5 -3
- package/src/domain/skill/__tests__/slots.test.ts +113 -60
- package/src/domain/skill/__tests__/staging.test.ts +304 -0
- package/src/domain/skill/constants.ts +28 -3
- package/src/domain/skill/controller.ts +44 -35
- package/src/domain/skill/push.ts +3 -3
- package/src/domain/skill/transfer/handler.ts +33 -15
- package/src/domain/skill/transfer/slots.ts +89 -100
- package/src/domain/skill/transfer/staging.ts +191 -0
- package/src/pipeline/steps/resolve-artifact-source.ts +20 -13
- package/src/transport/registry/__tests__/lanes.test.ts +1 -1
|
@@ -12,17 +12,15 @@ export declare class ArtifactStorageNotFoundError extends Error {
|
|
|
12
12
|
constructor(key: string);
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* A staged upload minted by presignPut: the URL receives the bytes,
|
|
16
|
-
*
|
|
17
|
-
* short-lived by contract — the local lane sweeps them on TTL
|
|
18
|
-
* boot;
|
|
19
|
-
* prefix (the §6b driver-side sweep expectation).
|
|
15
|
+
* A staged upload minted by presignPut: the URL receives the bytes, which
|
|
16
|
+
* the caller reads back through download() under the key IT named. Staged
|
|
17
|
+
* blobs are short-lived by contract — the local lane sweeps them on TTL
|
|
18
|
+
* expiry and boot; a bucket deployment configures a lifecycle rule on the
|
|
19
|
+
* domain's staging prefix (the §6b driver-side sweep expectation).
|
|
20
20
|
*/
|
|
21
21
|
export interface PresignedUpload {
|
|
22
|
-
/** Accepts
|
|
22
|
+
/** Accepts an HTTP PUT of exactly the declared byte count. */
|
|
23
23
|
readonly url: string;
|
|
24
|
-
/** Driver key where the staged bytes land, readable via download(). */
|
|
25
|
-
readonly stagingKey: string;
|
|
26
24
|
/** The TTL actually granted, after per-driver clamping. */
|
|
27
25
|
readonly ttlMs: number;
|
|
28
26
|
}
|
|
@@ -47,18 +45,21 @@ export interface ArtifactStorage {
|
|
|
47
45
|
*/
|
|
48
46
|
getSignedUrl(key: string, expiresInMs: number, downloadFilename: string): Promise<string>;
|
|
49
47
|
/**
|
|
50
|
-
* A time-limited upload URL for a
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
48
|
+
* A time-limited upload URL for a blob of exactly declaredSizeBytes at
|
|
49
|
+
* the key the CALLER names (§6b). The key is the domain's: it chooses
|
|
50
|
+
* the staging prefix its sweep targets and the mapping from its wire
|
|
51
|
+
* reference, and reads the bytes back through download(key) — the
|
|
52
|
+
* driver never invents a key of its own. Per-driver semantics differ
|
|
53
|
+
* DELIBERATELY and are contract, not accident: the local backend rides
|
|
54
|
+
* the skill transfer lane's URL-as-credential slot mechanism
|
|
55
|
+
* (single-use, exact-size enforced by the lane, TTL clamped to the
|
|
56
|
+
* lane's slot TTL) and answers only on instances with a staged-upload
|
|
57
|
+
* lane wired — unwired instances throw the explicit not-configured
|
|
58
|
+
* error, never a silent no-op. The R2 backend presigns a PUT
|
|
59
|
+
* (repeatable within its TTL, size enforced by the signed
|
|
60
|
+
* Content-Length header, TTL clamped to the 7-day R2 maximum).
|
|
60
61
|
*/
|
|
61
|
-
presignPut(declaredSizeBytes: number, ttlMs: number): Promise<PresignedUpload>;
|
|
62
|
+
presignPut(key: string, declaredSizeBytes: number, ttlMs: number): Promise<PresignedUpload>;
|
|
62
63
|
/** Removes the artifact; missing is not an error. */
|
|
63
64
|
delete(key: string): Promise<void>;
|
|
64
65
|
/** Whether an artifact with the key exists. */
|
|
@@ -83,19 +84,16 @@ export type ArtifactStorageDriverFactory = () => ArtifactStorage;
|
|
|
83
84
|
* the shape it needs and stays ignorant of who provides it.
|
|
84
85
|
*/
|
|
85
86
|
export interface StagedUploadLane {
|
|
86
|
-
/** Reserves a single-use upload slot; returns its reference + TTL. */
|
|
87
|
-
mint(declaredSizeBytes: number): {
|
|
88
|
-
ref: string;
|
|
89
|
-
ttlMs: number;
|
|
90
|
-
};
|
|
91
|
-
/** The externally-reachable PUT URL for a minted reference. */
|
|
92
|
-
uploadUrl(ref: string): string;
|
|
93
87
|
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
88
|
+
* Reserves a single-use upload slot whose bytes land at `key` under this
|
|
89
|
+
* driver instance's root — the lane stages into the driver's own tree,
|
|
90
|
+
* so download(key) reads exactly what the lane received. Returns the
|
|
91
|
+
* externally-reachable PUT URL and the TTL the lane grants.
|
|
97
92
|
*/
|
|
98
|
-
|
|
93
|
+
reserve(key: string, declaredSizeBytes: number): {
|
|
94
|
+
url: string;
|
|
95
|
+
ttlMs: number;
|
|
96
|
+
};
|
|
99
97
|
}
|
|
100
98
|
export interface ArtifactStorageConfig {
|
|
101
99
|
/** "local" or "r2" ("" defaults to local — Go NewArtifactStorage). */
|
|
@@ -145,7 +143,7 @@ export declare class LocalArtifactStorage implements ArtifactStorage {
|
|
|
145
143
|
upload(key: string, data: Uint8Array, _contentType: string): Promise<void>;
|
|
146
144
|
download(key: string): Promise<Uint8Array>;
|
|
147
145
|
size(key: string): Promise<number>;
|
|
148
|
-
presignPut(declaredSizeBytes: number, _ttlMs: number): Promise<PresignedUpload>;
|
|
146
|
+
presignPut(key: string, declaredSizeBytes: number, _ttlMs: number): Promise<PresignedUpload>;
|
|
149
147
|
getSignedUrl(key: string, _expiresInMs: number, downloadFilename: string): Promise<string>;
|
|
150
148
|
delete(key: string): Promise<void>;
|
|
151
149
|
exists(key: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-storage.d.ts","sourceRoot":"","sources":["../../src/artifactstorage/artifact-storage.ts"],"names":[],"mappings":"AAuCA;qEACqE;AACrE,eAAO,MAAM,0BAA0B,aAAa,CAAC;AAErD;;;;;;GAMG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,GAAG,EAAE,MAAM;CAMxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B
|
|
1
|
+
{"version":3,"file":"artifact-storage.d.ts","sourceRoot":"","sources":["../../src/artifactstorage/artifact-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -132,19 +132,17 @@ export class LocalArtifactStorage {
|
|
|
132
132
|
throw error;
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
|
-
async presignPut(declaredSizeBytes, _ttlMs) {
|
|
135
|
+
async presignPut(key, declaredSizeBytes, _ttlMs) {
|
|
136
136
|
if (this.stagedUploadLane === undefined) {
|
|
137
137
|
throw new Error("local presigned uploads not configured - no staged-upload lane is wired to this store instance");
|
|
138
138
|
}
|
|
139
|
+
// The key must be one this instance can read back, or the lane would
|
|
140
|
+
// stage bytes download(key) can never reach.
|
|
141
|
+
this.resolveWithinRoot(key);
|
|
139
142
|
// The lane's slot TTL governs, not the caller's ask — the slot
|
|
140
143
|
// registry sweeps on ITS clock, and a URL outliving its slot would be
|
|
141
144
|
// a credential for nothing.
|
|
142
|
-
|
|
143
|
-
return {
|
|
144
|
-
url: this.stagedUploadLane.uploadUrl(ref),
|
|
145
|
-
stagingKey: this.stagedUploadLane.stagedKey(ref),
|
|
146
|
-
ttlMs,
|
|
147
|
-
};
|
|
145
|
+
return this.stagedUploadLane.reserve(key, declaredSizeBytes);
|
|
148
146
|
}
|
|
149
147
|
async getSignedUrl(key, _expiresInMs, downloadFilename) {
|
|
150
148
|
if (this.serveUrl === "") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-storage.js","sourceRoot":"","sources":["../../src/artifactstorage/artifact-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EACL,KAAK,EACL,QAAQ,EACR,EAAE,EACF,KAAK,EACL,IAAI,EACJ,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;qEACqE;AACrE,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,GAAW;QACrB,uEAAuE;QACvE,qDAAqD;QACrD,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"artifact-storage.js","sourceRoot":"","sources":["../../src/artifactstorage/artifact-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* R2 artifact storage — ports pkg/domain/artifact/storage/r2_storage.go:
|
|
3
|
+
* the Cloudflare R2 (S3-compatible) backend, filling the factory arm #17
|
|
4
|
+
* deferred to this sub-project (owner-ratified, approved at the #13 plan
|
|
5
|
+
* gate together with the @aws-sdk dependency).
|
|
6
|
+
*
|
|
7
|
+
* Not conformance-assertable on the local targets (same as Go — the Go
|
|
8
|
+
* tree carries no R2 tests at all); the port adds unit pins for the pieces
|
|
9
|
+
* that have logic: config validation copy, the 7-day presign clamp, the
|
|
10
|
+
* signed Content-Disposition, and the not-found mapping.
|
|
11
|
+
*/
|
|
1
12
|
import { S3Client } from "@aws-sdk/client-s3";
|
|
2
13
|
import { getSignedUrl as presignGetObject } from "@aws-sdk/s3-request-presigner";
|
|
3
14
|
import type { ArtifactStorage, PresignedUpload } from "./artifact-storage.js";
|
|
4
15
|
/** Go: "R2 has a maximum expiration of 7 days" — presigns clamp here. */
|
|
5
16
|
export declare const R2_MAX_EXPIRATION_MS: number;
|
|
6
|
-
/**
|
|
7
|
-
* Key prefix for presignPut staging blobs (§6b). Pinned as the surface a
|
|
8
|
-
* deployment's bucket lifecycle rule targets: the driver mints under it,
|
|
9
|
-
* operations sweeps it — changing it orphans staged blobs from the sweep.
|
|
10
|
-
*/
|
|
11
|
-
export declare const R2_STAGING_PREFIX = "staging/";
|
|
12
17
|
export interface R2StorageConfig {
|
|
13
18
|
readonly bucket: string;
|
|
14
19
|
readonly endpoint: string;
|
|
@@ -40,7 +45,7 @@ export declare class R2ArtifactStorage implements ArtifactStorage {
|
|
|
40
45
|
upload(key: string, data: Uint8Array, contentType: string): Promise<void>;
|
|
41
46
|
download(key: string): Promise<Uint8Array>;
|
|
42
47
|
size(key: string): Promise<number>;
|
|
43
|
-
presignPut(declaredSizeBytes: number, ttlMs: number): Promise<PresignedUpload>;
|
|
48
|
+
presignPut(key: string, declaredSizeBytes: number, ttlMs: number): Promise<PresignedUpload>;
|
|
44
49
|
getSignedUrl(key: string, expiresInMs: number, downloadFilename: string): Promise<string>;
|
|
45
50
|
delete(key: string): Promise<void>;
|
|
46
51
|
exists(key: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"r2-storage.d.ts","sourceRoot":"","sources":["../../src/artifactstorage/r2-storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"r2-storage.d.ts","sourceRoot":"","sources":["../../src/artifactstorage/r2-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAML,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM9E,yEAAyE;AACzE,eAAO,MAAM,oBAAoB,QAA0B,CAAC;AAU5D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,gBAAgB,CAAC;CAC3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAE7E;AAED,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,SAAS;IAkClD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAezE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB1C,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAclC,UAAU,CACd,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC;IAuBrB,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC;IAoBZ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAS9B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAevD"}
|
|
@@ -9,18 +9,11 @@
|
|
|
9
9
|
* that have logic: config validation copy, the 7-day presign clamp, the
|
|
10
10
|
* signed Content-Disposition, and the not-found mapping.
|
|
11
11
|
*/
|
|
12
|
-
import { randomBytes } from "node:crypto";
|
|
13
12
|
import { DeleteObjectCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, PutObjectCommand, S3Client, } from "@aws-sdk/client-s3";
|
|
14
13
|
import { getSignedUrl as presignGetObject } from "@aws-sdk/s3-request-presigner";
|
|
15
14
|
import { ArtifactStorageNotFoundError, contentDispositionAttachment, } from "./artifact-storage.js";
|
|
16
15
|
/** Go: "R2 has a maximum expiration of 7 days" — presigns clamp here. */
|
|
17
16
|
export const R2_MAX_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000;
|
|
18
|
-
/**
|
|
19
|
-
* Key prefix for presignPut staging blobs (§6b). Pinned as the surface a
|
|
20
|
-
* deployment's bucket lifecycle rule targets: the driver mints under it,
|
|
21
|
-
* operations sweeps it — changing it orphans staged blobs from the sweep.
|
|
22
|
-
*/
|
|
23
|
-
export const R2_STAGING_PREFIX = "staging/";
|
|
24
17
|
/**
|
|
25
18
|
* Go get_content/get_download_url wrap their storage calls in a 30s
|
|
26
19
|
* context timeout. The TS ArtifactStorage interface carries no signal, so
|
|
@@ -123,15 +116,14 @@ export class R2ArtifactStorage {
|
|
|
123
116
|
throw new Error(`r2 head failed: ${errorText(error)}`, { cause: error });
|
|
124
117
|
}
|
|
125
118
|
}
|
|
126
|
-
async presignPut(declaredSizeBytes, ttlMs) {
|
|
119
|
+
async presignPut(key, declaredSizeBytes, ttlMs) {
|
|
127
120
|
const clampedMs = Math.min(ttlMs, R2_MAX_EXPIRATION_MS);
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
const stagingKey = `${R2_STAGING_PREFIX}${randomBytes(16).toString("hex")}`;
|
|
121
|
+
// The key is the caller's: the domain names its staging prefix (the
|
|
122
|
+
// surface a bucket lifecycle rule sweeps) and keeps the unguessable
|
|
123
|
+
// part of the URL-as-credential in the reference it hands the client.
|
|
132
124
|
const command = new PutObjectCommand({
|
|
133
125
|
Bucket: this.bucket,
|
|
134
|
-
Key:
|
|
126
|
+
Key: key,
|
|
135
127
|
// Signed into the URL: a PUT whose body disagrees with the declared
|
|
136
128
|
// size fails the signature check — R2's arm of the exact-size
|
|
137
129
|
// contract the local lane enforces by counting bytes.
|
|
@@ -141,7 +133,7 @@ export class R2ArtifactStorage {
|
|
|
141
133
|
const url = await this.presign(this.client, command, {
|
|
142
134
|
expiresIn: Math.floor(clampedMs / 1000),
|
|
143
135
|
});
|
|
144
|
-
return { url,
|
|
136
|
+
return { url, ttlMs: clampedMs };
|
|
145
137
|
}
|
|
146
138
|
catch (error) {
|
|
147
139
|
throw new Error(`r2 presign failed: ${errorText(error)}`, { cause: error });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"r2-storage.js","sourceRoot":"","sources":["../../src/artifactstorage/r2-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"r2-storage.js","sourceRoot":"","sources":["../../src/artifactstorage/r2-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/boot/compose.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA6BpE,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAIzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAoCzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/boot/compose.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA6BpE,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAIzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAoCzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAsClE,OAAO,EAKL,aAAa,EAEd,MAAM,6BAA6B,CAAC;AA0BrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAInD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAWjE,OAAO,EAAE,YAAY,IAAI,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAW7G,OAAO,EAAE,WAAW,EAAyB,MAAM,wBAAwB,CAAC;AAQ5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,+EAA+E;IAC/E,KAAK,EAAE,KAAK,CAAC;IACb;;;;;;;;;OASG;IACH,OAAO,EAAE,aAAa,CAAC;IACvB;;;;;OAKG;IACH,eAAe,EAAE,eAAe,CAAC;IACjC;;;;;OAKG;IACH,iBAAiB,EAAE,iBAAiB,CAAC;IACrC;;;;OAIG;IACH,0BAA0B,EAAE,YAAY,CAAC;IACzC;;;;;OAKG;IACH,6BAA6B,EAAE,6BAA6B,CAAC;IAC7D;;;;;;;;;OASG;IACH,kBAAkB,EAAE,SAAS,CAAC;IAC9B;;;;;;;;OAQG;IACH,iBAAiB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD;;;;;OAKG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,+EAA+E;IAC/E,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,kEAAkE;IAClE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC5C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,CAAC,CAk9CzB"}
|
package/dist/boot/compose.js
CHANGED
|
@@ -92,11 +92,12 @@ import { registerSessionServices } from "../domain/session/controller.js";
|
|
|
92
92
|
import { registerPluginServices } from "../domain/plugin/controller.js";
|
|
93
93
|
import { PLUGIN_ARTIFACT_KEY_PREFIX } from "../domain/plugin/constants.js";
|
|
94
94
|
import { registerSkillServices } from "../domain/skill/controller.js";
|
|
95
|
-
import { DEFAULT_SLOT_TTL_MS, MAX_ZIP_SIZE, } from "../domain/skill/constants.js";
|
|
95
|
+
import { DEFAULT_SLOT_TTL_MS, MAX_ZIP_SIZE, STAGING_KEY_PREFIX, } from "../domain/skill/constants.js";
|
|
96
96
|
import { newSkillArtifactStorage } from "../domain/skill/storage/artifact-storage.js";
|
|
97
97
|
import { newContentAddressedArchiveStore } from "../archive/content-store.js";
|
|
98
|
-
import { newSkillTransferLane, uploadUrl as skillUploadUrl, } from "../domain/skill/transfer/handler.js";
|
|
98
|
+
import { newSkillTransferLane, transferServeUrl, uploadUrl as skillUploadUrl, } from "../domain/skill/transfer/handler.js";
|
|
99
99
|
import { UploadSlots } from "../domain/skill/transfer/slots.js";
|
|
100
|
+
import { newArchiveStaging, uploadRefOf, } from "../domain/skill/transfer/staging.js";
|
|
100
101
|
import { DEFAULT_WRITE_VERSION, ENCRYPTION_KEY_ENV_VAR, ENCRYPTION_KEY_FILE_NAME, ENCRYPTION_WRITE_VERSION_ENV_VAR, SecretService, StaticKeySecretCodec, } from "../encryption/encryption.js";
|
|
101
102
|
import { getOrCreateNamedKey } from "../encryption/key-manager.js";
|
|
102
103
|
import { V1_VERSION } from "../encryption/v1-codec.js";
|
|
@@ -121,6 +122,7 @@ import { PostgresStore } from "../store/postgres/store.js";
|
|
|
121
122
|
import { SqliteStore } from "../store/sqlite/store.js";
|
|
122
123
|
import { resolveExtensions } from "../extensions/registry.js";
|
|
123
124
|
import { resolveOAuthRedirectUri } from "./oauth-redirect-uri.js";
|
|
125
|
+
import { assessSkillTransferOrigin } from "./skill-transfer-origin.js";
|
|
124
126
|
import { registerWorkflowServices } from "../domain/workflow/controller.js";
|
|
125
127
|
import { bundledModelRegistryDocument, bundledTaskKindRegistryDocument, } from "../domain/workflow/registry/bundled.js";
|
|
126
128
|
import { ModelRegistryStore } from "../domain/workflow/registry/model-registry-store.js";
|
|
@@ -689,7 +691,7 @@ export async function composeServer(options) {
|
|
|
689
691
|
: undefined;
|
|
690
692
|
// The skill artifact store + transfer lane (Go server.go:318-340). The
|
|
691
693
|
// store is content-addressed and never-GC at {storagePath}/skills/;
|
|
692
|
-
// the slots registry wipes {storagePath}/skills
|
|
694
|
+
// the slots registry wipes {storagePath}/skills/staging at boot (orphans
|
|
693
695
|
// from a dead process are useless — the registry died with it). On OSS
|
|
694
696
|
// the lane is ALWAYS configured (Go wires it unconditionally too): the
|
|
695
697
|
// FailedPrecondition lane-absent arms exist for construction-order
|
|
@@ -701,11 +703,19 @@ export async function composeServer(options) {
|
|
|
701
703
|
// deployment changes nothing for skill artifacts until it opts in
|
|
702
704
|
// explicitly, and the Go-written skills/ directory keeps serving in
|
|
703
705
|
// place on the default arm.
|
|
704
|
-
|
|
706
|
+
//
|
|
707
|
+
// Capability URLs come from the driver through the staging port
|
|
708
|
+
// (domain/skill/transfer/staging.ts, stigmer#1219): the local driver's
|
|
709
|
+
// presignPut reserves a slot here and renders the lane URL below, a
|
|
710
|
+
// bucket driver's signs a PUT straight to the bucket, and the
|
|
711
|
+
// controllers cannot tell which. The slots are constructed on every
|
|
712
|
+
// arm so the HTTP lane always has a registry to consult; on a bucket
|
|
713
|
+
// arm nothing is ever reserved in it.
|
|
714
|
+
const skillUploadSlots = new UploadSlots(config.storagePath, STAGING_KEY_PREFIX, DEFAULT_SLOT_TTL_MS, MAX_ZIP_SIZE);
|
|
715
|
+
const skillType = config.skillArtifactStorageType === ""
|
|
716
|
+
? "local"
|
|
717
|
+
: config.skillArtifactStorageType;
|
|
705
718
|
const skillStorageDriver = (() => {
|
|
706
|
-
const skillType = config.skillArtifactStorageType === ""
|
|
707
|
-
? "local"
|
|
708
|
-
: config.skillArtifactStorageType;
|
|
709
719
|
if (skillType === "local") {
|
|
710
720
|
// Go layout invariant: {storagePath}/skills exists from boot with
|
|
711
721
|
// 0755 (the retired LocalFileStorage constructor's mkdir; the
|
|
@@ -716,14 +726,18 @@ export async function composeServer(options) {
|
|
|
716
726
|
});
|
|
717
727
|
// The local presigned-PUT arm rides the skill transfer lane's slot
|
|
718
728
|
// mechanism (§6b Q1 ruling: one upload surface, no new lane). The
|
|
719
|
-
// slots stage inside THIS driver's root
|
|
720
|
-
// reads back
|
|
721
|
-
//
|
|
722
|
-
//
|
|
723
|
-
return new LocalArtifactStorage(config.storagePath,
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
729
|
+
// slots stage inside THIS driver's root under the domain's staging
|
|
730
|
+
// key, so download(key) reads back what the lane received; the
|
|
731
|
+
// serve URL is the lane's download route, so getSignedUrl renders
|
|
732
|
+
// the very URL the lane dispatches.
|
|
733
|
+
return new LocalArtifactStorage(config.storagePath, transferServeUrl(config.skillTransferBaseUrl), {
|
|
734
|
+
reserve: (key, declaredSizeBytes) => {
|
|
735
|
+
const { ttlMs } = skillUploadSlots.reserve(key, declaredSizeBytes);
|
|
736
|
+
return {
|
|
737
|
+
url: skillUploadUrl(config.skillTransferBaseUrl, uploadRefOf(key)),
|
|
738
|
+
ttlMs,
|
|
739
|
+
};
|
|
740
|
+
},
|
|
727
741
|
});
|
|
728
742
|
}
|
|
729
743
|
// Non-local skill backends share the artifact store's R2 settings for
|
|
@@ -745,7 +759,24 @@ export async function composeServer(options) {
|
|
|
745
759
|
// (`plugins/`) keeps the two stores apart and the plugin store owns its
|
|
746
760
|
// keys (src/archive/content-store.ts).
|
|
747
761
|
const pluginArtifactStorage = newContentAddressedArchiveStore(skillStorageDriver, PLUGIN_ARTIFACT_KEY_PREFIX);
|
|
762
|
+
// One staging port for every archive kind, over the one skill blob
|
|
763
|
+
// driver: the controllers mint, consume and sign through it and never
|
|
764
|
+
// meet the slots or the bucket.
|
|
765
|
+
const skillArchiveStaging = newArchiveStaging(skillStorageDriver, logger);
|
|
748
766
|
const skillTransferLane = newSkillTransferLane(skillUploadSlots, skillArtifactStorage, logger);
|
|
767
|
+
// A hosted server relaying bytes through itself from its loopback
|
|
768
|
+
// default mints URLs no caller can reach (stigmer#1219); nothing inside
|
|
769
|
+
// the process can observe that, so the boot says it. Never fatal: the
|
|
770
|
+
// inline push and every other RPC work, and a self-host behind a tunnel
|
|
771
|
+
// it forgot to name deserves a pointer, not an outage.
|
|
772
|
+
const transferOrigin = assessSkillTransferOrigin({
|
|
773
|
+
baseUrl: config.skillTransferBaseUrl,
|
|
774
|
+
relaysThroughServer: skillType === "local",
|
|
775
|
+
requireAuthentication,
|
|
776
|
+
});
|
|
777
|
+
if (transferOrigin.kind === "loopback-hosted") {
|
|
778
|
+
logger.warn("skill artifact transfer lane mints capability URLs on the server's own loopback while the server requires authentication; pushes above the gRPC message cap and sandbox skill downloads will fail — set SKILL_TRANSFER_BASE_URL to the origin callers reach this server on", { baseUrl: transferOrigin.baseUrl });
|
|
779
|
+
}
|
|
749
780
|
// The console lane (lane 4, DD-012): present only when a static export
|
|
750
781
|
// is bundled (slim artifacts) or configured (STIGMER_CONSOLE_DIR) —
|
|
751
782
|
// "not bundled" is a modeled state, logged once, with the router
|
|
@@ -1163,14 +1194,11 @@ export async function composeServer(options) {
|
|
|
1163
1194
|
// The agentexecution blob store (server.go:362-363) — read side of
|
|
1164
1195
|
// pushFromExecutionArtifact.
|
|
1165
1196
|
executionArtifactStorage: artifactStorage,
|
|
1166
|
-
|
|
1167
|
-
slots: skillUploadSlots,
|
|
1168
|
-
baseUrl: config.skillTransferBaseUrl,
|
|
1169
|
-
},
|
|
1197
|
+
staging: skillArchiveStaging,
|
|
1170
1198
|
});
|
|
1171
1199
|
// Plugins materialise their members through the in-process lane as
|
|
1172
1200
|
// the installing caller; the lazy provider resolves the clients built
|
|
1173
|
-
// from these same routes after boot. The
|
|
1201
|
+
// from these same routes after boot. The staging port is the skill
|
|
1174
1202
|
// lane's: one upload surface for every archive.
|
|
1175
1203
|
registerPluginServices(router, {
|
|
1176
1204
|
store,
|
|
@@ -1179,10 +1207,7 @@ export async function composeServer(options) {
|
|
|
1179
1207
|
authorizationLifecycle,
|
|
1180
1208
|
artifactStorage: pluginArtifactStorage,
|
|
1181
1209
|
materializerProvider: () => requireInProcess().pluginMaterializer,
|
|
1182
|
-
|
|
1183
|
-
slots: skillUploadSlots,
|
|
1184
|
-
baseUrl: config.skillTransferBaseUrl,
|
|
1185
|
-
},
|
|
1210
|
+
staging: skillArchiveStaging,
|
|
1186
1211
|
});
|
|
1187
1212
|
// Artifact CRUD shares the ONE blob store with agentexecution's
|
|
1188
1213
|
// attachment lanes (Go server.go 347–374).
|