@stigmer/sdk 3.15.3-dev.20260914121148 → 3.16.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/__tests__/plugin.test.d.ts +2 -0
- package/__tests__/plugin.test.d.ts.map +1 -0
- package/__tests__/plugin.test.js +74 -0
- package/__tests__/plugin.test.js.map +1 -0
- package/artifact-routing.d.ts +38 -0
- package/artifact-routing.d.ts.map +1 -0
- package/artifact-routing.js +60 -0
- package/artifact-routing.js.map +1 -0
- package/gen/authorization-config.d.ts.map +1 -1
- package/gen/authorization-config.js +1 -0
- package/gen/authorization-config.js.map +1 -1
- package/gen/client.d.ts +4 -0
- package/gen/client.d.ts.map +1 -1
- package/gen/client.js +4 -0
- package/gen/client.js.map +1 -1
- package/gen/plugin.d.ts +54 -0
- package/gen/plugin.d.ts.map +1 -0
- package/gen/plugin.js +120 -0
- package/gen/plugin.js.map +1 -0
- package/gen/resource-availability.d.ts.map +1 -1
- package/gen/resource-availability.js +1 -0
- package/gen/resource-availability.js.map +1 -1
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -1
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/plugin.d.ts +25 -0
- package/plugin.d.ts.map +1 -0
- package/plugin.js +46 -0
- package/plugin.js.map +1 -0
- package/skill.d.ts +8 -32
- package/skill.d.ts.map +1 -1
- package/skill.js +24 -81
- package/skill.js.map +1 -1
- package/src/__tests__/plugin.test.ts +92 -0
- package/src/artifact-routing.ts +111 -0
- package/src/gen/authorization-config.ts +1 -0
- package/src/gen/client.ts +5 -0
- package/src/gen/plugin.ts +143 -0
- package/src/gen/resource-availability.ts +1 -0
- package/src/index.ts +2 -0
- package/src/plugin.ts +59 -0
- package/src/skill.ts +28 -94
- package/src/stigmer.ts +13 -3
- package/stigmer.d.ts +7 -0
- package/stigmer.d.ts.map +1 -1
- package/stigmer.js +13 -2
- package/stigmer.js.map +1 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// Code generated by stigmer-codegen. DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
import { wrapError } from "./errors.js";
|
|
4
|
+
import { stripUndefined } from "./proto-utils.js";
|
|
5
|
+
import { type ResourceRef } from "./types.js";
|
|
6
|
+
import { create } from "@bufbuild/protobuf";
|
|
7
|
+
import { createClient, type Client, type Transport } from "@connectrpc/connect";
|
|
8
|
+
import { PluginSchema, type Plugin } from "@stigmer/protos/ai/stigmer/agentic/plugin/v1/api_pb";
|
|
9
|
+
import { PluginCommandController } from "@stigmer/protos/ai/stigmer/agentic/plugin/v1/command_pb";
|
|
10
|
+
import { PluginIdSchema, PushPluginRequestSchema, CreatePluginArtifactUploadUrlRequestSchema, PluginArtifactUploadUrlSchema, ListPluginMembersResponseSchema, ListPluginVersionsInputSchema, ListPluginVersionsResponseSchema, type PushPluginRequest, type CreatePluginArtifactUploadUrlRequest, type PluginArtifactUploadUrl, type ListPluginMembersResponse, type ListPluginVersionsInput, type ListPluginVersionsResponse } from "@stigmer/protos/ai/stigmer/agentic/plugin/v1/io_pb";
|
|
11
|
+
import { PluginQueryController } from "@stigmer/protos/ai/stigmer/agentic/plugin/v1/query_pb";
|
|
12
|
+
import { PluginSpecSchema, PluginDialect, PluginAuthorSchema } from "@stigmer/protos/ai/stigmer/agentic/plugin/v1/spec_pb";
|
|
13
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
14
|
+
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
15
|
+
import { ApiResourceReferenceSchema, type UpdateVisibilityInput } from "@stigmer/protos/ai/stigmer/commons/apiresource/io_pb";
|
|
16
|
+
import { ApiResourceMetadataSchema, ApiResourceMetadataVersionSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/metadata_pb";
|
|
17
|
+
|
|
18
|
+
/** Provides operations on plugin resources. */
|
|
19
|
+
export class PluginClient {
|
|
20
|
+
private readonly command: Client<typeof PluginCommandController>;
|
|
21
|
+
private readonly query: Client<typeof PluginQueryController>;
|
|
22
|
+
|
|
23
|
+
constructor(transport: Transport) {
|
|
24
|
+
this.command = createClient(PluginCommandController, transport);
|
|
25
|
+
this.query = createClient(PluginQueryController, transport);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async push(input: PushPluginRequest): Promise<Plugin> {
|
|
29
|
+
try {
|
|
30
|
+
return await this.command.push(input);
|
|
31
|
+
} catch (e) { throw wrapError(e); }
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async createArtifactUploadUrl(input: CreatePluginArtifactUploadUrlRequest): Promise<PluginArtifactUploadUrl> {
|
|
35
|
+
try {
|
|
36
|
+
return await this.command.createArtifactUploadUrl(input);
|
|
37
|
+
} catch (e) { throw wrapError(e); }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async updateVisibility(input: UpdateVisibilityInput): Promise<Plugin> {
|
|
41
|
+
try {
|
|
42
|
+
return await this.command.updateVisibility(input);
|
|
43
|
+
} catch (e) { throw wrapError(e); }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async delete(id: string): Promise<Plugin> {
|
|
47
|
+
try {
|
|
48
|
+
return await this.command.delete(create(PluginIdSchema, { value: id }));
|
|
49
|
+
} catch (e) { throw wrapError(e); }
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async get(id: string): Promise<Plugin> {
|
|
53
|
+
try {
|
|
54
|
+
return await this.query.get(create(PluginIdSchema, { value: id }));
|
|
55
|
+
} catch (e) { throw wrapError(e); }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async getByReference(ref: ResourceRef): Promise<Plugin> {
|
|
59
|
+
try {
|
|
60
|
+
return await this.query.getByReference(create(ApiResourceReferenceSchema, { ...ref, kind: ApiResourceKind.plugin }));
|
|
61
|
+
} catch (e) { throw wrapError(e); }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async listMembers(id: string): Promise<ListPluginMembersResponse> {
|
|
65
|
+
try {
|
|
66
|
+
return await this.query.listMembers(create(PluginIdSchema, { value: id }));
|
|
67
|
+
} catch (e) { throw wrapError(e); }
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async listVersions(input: ListPluginVersionsInput): Promise<ListPluginVersionsResponse> {
|
|
71
|
+
try {
|
|
72
|
+
return await this.query.listVersions(input);
|
|
73
|
+
} catch (e) { throw wrapError(e); }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Input for creating/updating a Plugin. */
|
|
78
|
+
export interface PluginInput {
|
|
79
|
+
/**
|
|
80
|
+
* The resource's `metadata.id`, for exact update addressing when set
|
|
81
|
+
* from a loaded resource. Required for updates to platform-scoped
|
|
82
|
+
* (org-less) kinds, where the org+slug fallback cannot match. On
|
|
83
|
+
* create, the cloud server stamps its own id regardless; the OSS
|
|
84
|
+
* server honors a caller-supplied id (existing apply semantics).
|
|
85
|
+
*/
|
|
86
|
+
id?: string;
|
|
87
|
+
name: string;
|
|
88
|
+
slug?: string;
|
|
89
|
+
org: string;
|
|
90
|
+
labels?: Record<string, string>;
|
|
91
|
+
visibility?: ApiResourceVisibility;
|
|
92
|
+
versionMessage?: string;
|
|
93
|
+
version?: string;
|
|
94
|
+
description?: string;
|
|
95
|
+
author?: PluginAuthorInput;
|
|
96
|
+
homepage?: string;
|
|
97
|
+
repository?: string;
|
|
98
|
+
license?: string;
|
|
99
|
+
keywords?: string[];
|
|
100
|
+
dialect?: PluginDialect;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** SDK input type for PluginAuthor. */
|
|
104
|
+
export interface PluginAuthorInput {
|
|
105
|
+
name?: string;
|
|
106
|
+
email?: string;
|
|
107
|
+
url?: string;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function buildPluginAuthorProto(input: PluginAuthorInput) {
|
|
111
|
+
return Object.assign(create(PluginAuthorSchema), stripUndefined({
|
|
112
|
+
name: input.name,
|
|
113
|
+
email: input.email,
|
|
114
|
+
url: input.url,
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function buildPluginProto(input: PluginInput): Plugin {
|
|
119
|
+
const author = input.author ? buildPluginAuthorProto(input.author) : undefined;
|
|
120
|
+
return Object.assign(create(PluginSchema), {
|
|
121
|
+
apiVersion: "agentic.stigmer.ai/v1",
|
|
122
|
+
kind: "Plugin",
|
|
123
|
+
metadata: Object.assign(create(ApiResourceMetadataSchema), {
|
|
124
|
+
...(input.id && { id: input.id }),
|
|
125
|
+
name: input.name,
|
|
126
|
+
org: input.org,
|
|
127
|
+
...(input.slug && { slug: input.slug }),
|
|
128
|
+
...(input.labels && { labels: input.labels }),
|
|
129
|
+
...(input.visibility && { visibility: input.visibility }),
|
|
130
|
+
...(input.versionMessage && { version: Object.assign(create(ApiResourceMetadataVersionSchema), { message: input.versionMessage }) }),
|
|
131
|
+
}),
|
|
132
|
+
spec: Object.assign(create(PluginSpecSchema), stripUndefined({
|
|
133
|
+
version: input.version,
|
|
134
|
+
description: input.description,
|
|
135
|
+
author,
|
|
136
|
+
homepage: input.homepage,
|
|
137
|
+
repository: input.repository,
|
|
138
|
+
license: input.license,
|
|
139
|
+
keywords: input.keywords,
|
|
140
|
+
dialect: input.dialect,
|
|
141
|
+
})),
|
|
142
|
+
}) as Plugin;
|
|
143
|
+
}
|
|
@@ -39,5 +39,6 @@ export const KIND_TIERS: ReadonlyMap<ApiResourceKind, ResourceTier> = new Map([
|
|
|
39
39
|
[ApiResourceKind.artifact, ResourceTier.open_source],
|
|
40
40
|
[ApiResourceKind.schedule, ResourceTier.open_source],
|
|
41
41
|
[ApiResourceKind.memory, ResourceTier.open_source],
|
|
42
|
+
[ApiResourceKind.plugin, ResourceTier.open_source],
|
|
42
43
|
[ApiResourceKind.project, ResourceTier.open_source],
|
|
43
44
|
]);
|
package/src/index.ts
CHANGED
|
@@ -362,6 +362,8 @@ export {
|
|
|
362
362
|
export { toDisplayFileChange } from "./execution/to-display-file-change.js";
|
|
363
363
|
export { SkillClient, type SkillInput } from "./gen/skill.js";
|
|
364
364
|
export { RoutedSkillClient, MAX_INLINE_ARTIFACT_BYTES } from "./skill.js";
|
|
365
|
+
export { PluginClient, type PluginInput, type PluginAuthorInput } from "./gen/plugin.js";
|
|
366
|
+
export { RoutedPluginClient } from "./plugin.js";
|
|
365
367
|
export {
|
|
366
368
|
WorkflowClient,
|
|
367
369
|
toWorkflowUpdateInput,
|
package/src/plugin.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { create } from "@bufbuild/protobuf";
|
|
2
|
+
import type { Transport } from "@connectrpc/connect";
|
|
3
|
+
import type { Plugin } from "@stigmer/protos/ai/stigmer/agentic/plugin/v1/api_pb";
|
|
4
|
+
import {
|
|
5
|
+
CreatePluginArtifactUploadUrlRequestSchema,
|
|
6
|
+
PushPluginRequestSchema,
|
|
7
|
+
type PushPluginRequest,
|
|
8
|
+
} from "@stigmer/protos/ai/stigmer/agentic/plugin/v1/io_pb";
|
|
9
|
+
import { pushRoutedArtifact } from "./artifact-routing.js";
|
|
10
|
+
import type { ArtifactRoute } from "./artifact-routing.js";
|
|
11
|
+
import { PluginClient } from "./gen/plugin.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Plugin client with transport-aware push routing: the plugin binding of
|
|
15
|
+
* `artifact-routing.ts`. A plugin archive travels inline when it fits the
|
|
16
|
+
* gRPC message cap and is staged over HTTP via `createArtifactUploadUrl`
|
|
17
|
+
* (the skill lane's slots, one upload surface) when it does not; `push`
|
|
18
|
+
* simply works for any valid archive size. Every other method is the
|
|
19
|
+
* generated client's, inherited unchanged.
|
|
20
|
+
*/
|
|
21
|
+
export class RoutedPluginClient extends PluginClient {
|
|
22
|
+
private readonly fetchImpl: typeof globalThis.fetch | undefined;
|
|
23
|
+
private readonly route: ArtifactRoute<PushPluginRequest, Plugin>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @param fetchImpl - Custom `fetch` for the staging PUT. Must be the same
|
|
27
|
+
* implementation the transport uses where the global one is restricted
|
|
28
|
+
* (the Tauri CSP/CORS case the `Stigmer.fetch` property documents).
|
|
29
|
+
*/
|
|
30
|
+
constructor(transport: Transport, fetchImpl?: typeof globalThis.fetch) {
|
|
31
|
+
super(transport);
|
|
32
|
+
this.fetchImpl = fetchImpl;
|
|
33
|
+
this.route = {
|
|
34
|
+
noun: "plugin",
|
|
35
|
+
artifactOf: (request) => request.artifact,
|
|
36
|
+
uploadRefOf: (request) => request.artifactUploadRef,
|
|
37
|
+
orgOf: (request) => request.org,
|
|
38
|
+
withUploadRef: (request, artifactUploadRef) =>
|
|
39
|
+
create(PushPluginRequestSchema, {
|
|
40
|
+
...request,
|
|
41
|
+
artifact: new Uint8Array(0),
|
|
42
|
+
artifactUploadRef,
|
|
43
|
+
}),
|
|
44
|
+
mintUploadUrl: (org, sizeBytes) =>
|
|
45
|
+
super.createArtifactUploadUrl(
|
|
46
|
+
create(CreatePluginArtifactUploadUrlRequestSchema, {
|
|
47
|
+
org,
|
|
48
|
+
sizeBytes,
|
|
49
|
+
}),
|
|
50
|
+
),
|
|
51
|
+
push: (request) => super.push(request),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Push a plugin archive, routing it by size (see the class comment). */
|
|
56
|
+
override push(input: PushPluginRequest): Promise<Plugin> {
|
|
57
|
+
return pushRoutedArtifact(this.route, input, this.fetchImpl);
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/skill.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { create } from "@bufbuild/protobuf";
|
|
2
|
-
import { Code } from "@connectrpc/connect";
|
|
3
2
|
import type { Transport } from "@connectrpc/connect";
|
|
4
3
|
import type { Skill } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
|
|
5
4
|
import {
|
|
@@ -7,31 +6,24 @@ import {
|
|
|
7
6
|
PushSkillRequestSchema,
|
|
8
7
|
type PushSkillRequest,
|
|
9
8
|
} from "@stigmer/protos/ai/stigmer/agentic/skill/v1/io_pb";
|
|
10
|
-
import {
|
|
9
|
+
import { pushRoutedArtifact } from "./artifact-routing.js";
|
|
10
|
+
import type { ArtifactRoute } from "./artifact-routing.js";
|
|
11
11
|
import { SkillClient } from "./gen/skill.js";
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
* Largest artifact pushed inline in the gRPC request (#675). The server's
|
|
15
|
-
* transport cap is 10MB for the WHOLE message, so the artifact leaves 64KB
|
|
16
|
-
* of headroom for the request envelope (org, tag, provenance, framing).
|
|
17
|
-
* Mirrors the Go SDK's maxInlineArtifactBytes.
|
|
18
|
-
*/
|
|
19
|
-
export const MAX_INLINE_ARTIFACT_BYTES = 10 * 1024 * 1024 - 64 * 1024;
|
|
13
|
+
export { MAX_INLINE_ARTIFACT_BYTES } from "./artifact-routing.js";
|
|
20
14
|
|
|
21
15
|
/**
|
|
22
|
-
* Skill client with transport-aware push routing (stigmer#675 / #701)
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* via `createArtifactUploadUrl` — a capability URL, so no auth header —
|
|
28
|
-
* and pushed by reference. Callers never see the mechanics: `push(req)`
|
|
29
|
-
* simply works for any valid skill size.
|
|
16
|
+
* Skill client with transport-aware push routing (stigmer#675 / #701):
|
|
17
|
+
* the skill binding of `artifact-routing.ts`, which holds the mechanism
|
|
18
|
+
* (small artifacts inline, larger ones staged over HTTP via
|
|
19
|
+
* `createArtifactUploadUrl` and pushed by reference). Callers never see
|
|
20
|
+
* the mechanics: `push(req)` simply works for any valid skill size.
|
|
30
21
|
*
|
|
31
22
|
* Every other method is the generated client's, inherited unchanged.
|
|
32
23
|
*/
|
|
33
24
|
export class RoutedSkillClient extends SkillClient {
|
|
34
25
|
private readonly fetchImpl: typeof globalThis.fetch | undefined;
|
|
26
|
+
private readonly route: ArtifactRoute<PushSkillRequest, Skill>;
|
|
35
27
|
|
|
36
28
|
/**
|
|
37
29
|
* @param fetchImpl - Custom `fetch` for the staging PUT. Must be the same
|
|
@@ -41,85 +33,27 @@ export class RoutedSkillClient extends SkillClient {
|
|
|
41
33
|
constructor(transport: Transport, fetchImpl?: typeof globalThis.fetch) {
|
|
42
34
|
super(transport);
|
|
43
35
|
this.fetchImpl = fetchImpl;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return super.push(input);
|
|
55
|
-
}
|
|
56
|
-
return this.pushViaUploadUrl(input);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Stage the artifact over HTTP and push by reference:
|
|
61
|
-
* createArtifactUploadUrl → PUT bytes → push(artifactUploadRef).
|
|
62
|
-
*/
|
|
63
|
-
private async pushViaUploadUrl(input: PushSkillRequest): Promise<Skill> {
|
|
64
|
-
let minted;
|
|
65
|
-
try {
|
|
66
|
-
minted = await super.createArtifactUploadUrl(
|
|
67
|
-
create(CreateSkillArtifactUploadUrlRequestSchema, {
|
|
68
|
-
org: input.org,
|
|
69
|
-
sizeBytes: BigInt(input.artifact.length),
|
|
36
|
+
this.route = {
|
|
37
|
+
noun: "skill",
|
|
38
|
+
artifactOf: (request) => request.artifact,
|
|
39
|
+
uploadRefOf: (request) => request.artifactUploadRef,
|
|
40
|
+
orgOf: (request) => request.org,
|
|
41
|
+
withUploadRef: (request, artifactUploadRef) =>
|
|
42
|
+
create(PushSkillRequestSchema, {
|
|
43
|
+
...request,
|
|
44
|
+
artifact: new Uint8Array(0),
|
|
45
|
+
artifactUploadRef,
|
|
70
46
|
}),
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
throw new StigmerError(
|
|
78
|
-
"unknown",
|
|
79
|
-
`skill artifact is ${input.artifact.length} bytes, above the ~10MB gRPC message cap, ` +
|
|
80
|
-
"and this server does not support the HTTP artifact transfer lane — " +
|
|
81
|
-
"upgrade stigmer-server to push skills of this size",
|
|
82
|
-
Code.Unimplemented,
|
|
83
|
-
{ cause: err },
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
throw err;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
await this.putArtifact(minted.url, input.artifact);
|
|
90
|
-
|
|
91
|
-
// Same request, artifact traveling by reference instead of by value.
|
|
92
|
-
const byRef = create(PushSkillRequestSchema, {
|
|
93
|
-
...input,
|
|
94
|
-
artifact: new Uint8Array(0),
|
|
95
|
-
artifactUploadRef: minted.artifactUploadRef,
|
|
96
|
-
});
|
|
97
|
-
return super.push(byRef);
|
|
47
|
+
mintUploadUrl: (org, sizeBytes) =>
|
|
48
|
+
super.createArtifactUploadUrl(
|
|
49
|
+
create(CreateSkillArtifactUploadUrlRequestSchema, { org, sizeBytes }),
|
|
50
|
+
),
|
|
51
|
+
push: (request) => super.push(request),
|
|
52
|
+
};
|
|
98
53
|
}
|
|
99
54
|
|
|
100
|
-
/**
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
* transfer lane on OSS), so no auth header is attached.
|
|
104
|
-
*/
|
|
105
|
-
private async putArtifact(url: string, artifact: Uint8Array): Promise<void> {
|
|
106
|
-
const doFetch = this.fetchImpl ?? globalThis.fetch;
|
|
107
|
-
const resp = await doFetch(url, {
|
|
108
|
-
method: "PUT",
|
|
109
|
-
// Both DOM and undici accept an ArrayBufferView body at runtime; the
|
|
110
|
-
// cast bridges TS 5.7's ArrayBufferLike generic, which BodyInit's
|
|
111
|
-
// typing predates. A Blob/Buffer wrapper would copy up to 100MB for
|
|
112
|
-
// nothing, and Buffer is Node-only while this client is isomorphic.
|
|
113
|
-
body: artifact as unknown as RequestInit["body"],
|
|
114
|
-
headers: { "content-type": "application/zip" },
|
|
115
|
-
});
|
|
116
|
-
if (!resp.ok) {
|
|
117
|
-
const detail = (await resp.text().catch(() => "")).slice(0, 512).trim();
|
|
118
|
-
throw new StigmerError(
|
|
119
|
-
"unknown",
|
|
120
|
-
`skill artifact upload rejected with HTTP ${resp.status}${detail === "" ? "" : `: ${detail}`}`,
|
|
121
|
-
Code.Unknown,
|
|
122
|
-
);
|
|
123
|
-
}
|
|
55
|
+
/** Push a skill, routing the artifact by size (see the class comment). */
|
|
56
|
+
override push(input: PushSkillRequest): Promise<Skill> {
|
|
57
|
+
return pushRoutedArtifact(this.route, input, this.fetchImpl);
|
|
124
58
|
}
|
|
125
59
|
}
|
package/src/stigmer.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { ManifestClient } from "./manifest/index.js";
|
|
|
7
7
|
import { PlatformClient } from "./platform.js";
|
|
8
8
|
import { ProviderStandingClient } from "./provider-standing.js";
|
|
9
9
|
import { SearchClient } from "./search.js";
|
|
10
|
+
import { RoutedPluginClient } from "./plugin.js";
|
|
10
11
|
import { RoutedSkillClient } from "./skill.js";
|
|
11
12
|
import { createStigmerTransport } from "./transport.js";
|
|
12
13
|
import {
|
|
@@ -92,6 +93,12 @@ export class Stigmer extends GeneratedClient {
|
|
|
92
93
|
* `stigmer.skill.push` simply works for any valid skill size.
|
|
93
94
|
*/
|
|
94
95
|
override readonly skill: RoutedSkillClient;
|
|
96
|
+
/**
|
|
97
|
+
* Plugin operations, with `push` routed by archive size over the same
|
|
98
|
+
* transfer lane — shadows the inherited generated client so
|
|
99
|
+
* `stigmer.plugin.push` simply works for any valid archive size.
|
|
100
|
+
*/
|
|
101
|
+
override readonly plugin: RoutedPluginClient;
|
|
95
102
|
|
|
96
103
|
private readonly _tokenProvider: TokenProvider;
|
|
97
104
|
|
|
@@ -106,7 +113,7 @@ export class Stigmer extends GeneratedClient {
|
|
|
106
113
|
this.defaultExecutionTarget = toExecutionTarget(config.executionTarget);
|
|
107
114
|
this._tokenProvider = config.apiKey
|
|
108
115
|
? () => config.apiKey!
|
|
109
|
-
: config.getAccessToken ?? (() => null);
|
|
116
|
+
: (config.getAccessToken ?? (() => null));
|
|
110
117
|
|
|
111
118
|
this.activity = new ActivityClient(transport);
|
|
112
119
|
this.billing = new BillingClient(transport);
|
|
@@ -117,6 +124,7 @@ export class Stigmer extends GeneratedClient {
|
|
|
117
124
|
this.github = new GitHubClient(transport);
|
|
118
125
|
this.manifest = new ManifestClient(transport);
|
|
119
126
|
this.skill = new RoutedSkillClient(transport, config.fetch);
|
|
127
|
+
this.plugin = new RoutedPluginClient(transport, config.fetch);
|
|
120
128
|
|
|
121
129
|
if (this.defaultExecutionTarget != null) {
|
|
122
130
|
this._applyExecutionTargetDefaults();
|
|
@@ -148,7 +156,10 @@ export class Stigmer extends GeneratedClient {
|
|
|
148
156
|
this.agentExecution.create = (input) =>
|
|
149
157
|
origExecutionCreate(
|
|
150
158
|
input.sessionSpec
|
|
151
|
-
? {
|
|
159
|
+
? {
|
|
160
|
+
...input,
|
|
161
|
+
sessionSpec: applySessionDefault(input.sessionSpec, target),
|
|
162
|
+
}
|
|
152
163
|
: input,
|
|
153
164
|
);
|
|
154
165
|
}
|
|
@@ -193,4 +204,3 @@ function applySessionDefault<T extends { executionTarget?: ExecutionTarget }>(
|
|
|
193
204
|
}
|
|
194
205
|
return input;
|
|
195
206
|
}
|
|
196
|
-
|
package/stigmer.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { ManifestClient } from "./manifest/index.js";
|
|
|
7
7
|
import { PlatformClient } from "./platform.js";
|
|
8
8
|
import { ProviderStandingClient } from "./provider-standing.js";
|
|
9
9
|
import { SearchClient } from "./search.js";
|
|
10
|
+
import { RoutedPluginClient } from "./plugin.js";
|
|
10
11
|
import { RoutedSkillClient } from "./skill.js";
|
|
11
12
|
import { type StigmerConfig } from "./config.js";
|
|
12
13
|
import { ExecutionTarget } from "@stigmer/protos/ai/stigmer/agentic/session/v1/enum_pb";
|
|
@@ -81,6 +82,12 @@ export declare class Stigmer extends GeneratedClient {
|
|
|
81
82
|
* `stigmer.skill.push` simply works for any valid skill size.
|
|
82
83
|
*/
|
|
83
84
|
readonly skill: RoutedSkillClient;
|
|
85
|
+
/**
|
|
86
|
+
* Plugin operations, with `push` routed by archive size over the same
|
|
87
|
+
* transfer lane — shadows the inherited generated client so
|
|
88
|
+
* `stigmer.plugin.push` simply works for any valid archive size.
|
|
89
|
+
*/
|
|
90
|
+
readonly plugin: RoutedPluginClient;
|
|
84
91
|
private readonly _tokenProvider;
|
|
85
92
|
constructor(config: StigmerConfig);
|
|
86
93
|
/**
|
package/stigmer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stigmer.d.ts","sourceRoot":"","sources":["../src/stigmer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,uDAAuD,CAAC;AAIxF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,OAAQ,SAAQ,eAAe;IAC1C;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;IAEpD;;;;;;;;;OASG;IACH,QAAQ,CAAC,sBAAsB,EAAE,eAAe,GAAG,SAAS,CAAC;IAE7D,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAC9C,uEAAuE;IACvE,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC;;;;OAIG;IACH,SAAkB,KAAK,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"stigmer.d.ts","sourceRoot":"","sources":["../src/stigmer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,uDAAuD,CAAC;AAIxF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,OAAQ,SAAQ,eAAe;IAC1C;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;IAEpD;;;;;;;;;OASG;IACH,QAAQ,CAAC,sBAAsB,EAAE,eAAe,GAAG,SAAS,CAAC;IAE7D,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAC9C,uEAAuE;IACvE,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC;;;;OAIG;IACH,SAAkB,KAAK,EAAE,iBAAiB,CAAC;IAC3C;;;;OAIG;IACH,SAAkB,MAAM,EAAE,kBAAkB,CAAC;IAE7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAEnC,MAAM,EAAE,aAAa;IA6BjC;;;;;;;;;OASG;IACH,OAAO,CAAC,6BAA6B;IAuBrC;;;;;;;;;OASG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGlD"}
|
package/stigmer.js
CHANGED
|
@@ -7,6 +7,7 @@ import { ManifestClient } from "./manifest/index.js";
|
|
|
7
7
|
import { PlatformClient } from "./platform.js";
|
|
8
8
|
import { ProviderStandingClient } from "./provider-standing.js";
|
|
9
9
|
import { SearchClient } from "./search.js";
|
|
10
|
+
import { RoutedPluginClient } from "./plugin.js";
|
|
10
11
|
import { RoutedSkillClient } from "./skill.js";
|
|
11
12
|
import { createStigmerTransport } from "./transport.js";
|
|
12
13
|
import { validateConfig, } from "./config.js";
|
|
@@ -82,6 +83,12 @@ export class Stigmer extends GeneratedClient {
|
|
|
82
83
|
* `stigmer.skill.push` simply works for any valid skill size.
|
|
83
84
|
*/
|
|
84
85
|
skill;
|
|
86
|
+
/**
|
|
87
|
+
* Plugin operations, with `push` routed by archive size over the same
|
|
88
|
+
* transfer lane — shadows the inherited generated client so
|
|
89
|
+
* `stigmer.plugin.push` simply works for any valid archive size.
|
|
90
|
+
*/
|
|
91
|
+
plugin;
|
|
85
92
|
_tokenProvider;
|
|
86
93
|
constructor(config) {
|
|
87
94
|
validateConfig(config);
|
|
@@ -92,7 +99,7 @@ export class Stigmer extends GeneratedClient {
|
|
|
92
99
|
this.defaultExecutionTarget = toExecutionTarget(config.executionTarget);
|
|
93
100
|
this._tokenProvider = config.apiKey
|
|
94
101
|
? () => config.apiKey
|
|
95
|
-
: config.getAccessToken ?? (() => null);
|
|
102
|
+
: (config.getAccessToken ?? (() => null));
|
|
96
103
|
this.activity = new ActivityClient(transport);
|
|
97
104
|
this.billing = new BillingClient(transport);
|
|
98
105
|
this.cursorAccounts = new CursorAccountsClient(transport);
|
|
@@ -102,6 +109,7 @@ export class Stigmer extends GeneratedClient {
|
|
|
102
109
|
this.github = new GitHubClient(transport);
|
|
103
110
|
this.manifest = new ManifestClient(transport);
|
|
104
111
|
this.skill = new RoutedSkillClient(transport, config.fetch);
|
|
112
|
+
this.plugin = new RoutedPluginClient(transport, config.fetch);
|
|
105
113
|
if (this.defaultExecutionTarget != null) {
|
|
106
114
|
this._applyExecutionTargetDefaults();
|
|
107
115
|
}
|
|
@@ -124,7 +132,10 @@ export class Stigmer extends GeneratedClient {
|
|
|
124
132
|
this.session.create = (input) => origSessionCreate(applySessionDefault(input, target));
|
|
125
133
|
this.session.apply = (input) => origSessionApply(applySessionDefault(input, target));
|
|
126
134
|
this.agentExecution.create = (input) => origExecutionCreate(input.sessionSpec
|
|
127
|
-
? {
|
|
135
|
+
? {
|
|
136
|
+
...input,
|
|
137
|
+
sessionSpec: applySessionDefault(input.sessionSpec, target),
|
|
138
|
+
}
|
|
128
139
|
: input);
|
|
129
140
|
}
|
|
130
141
|
/**
|
package/stigmer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stigmer.js","sourceRoot":"","sources":["../src/stigmer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,uDAAuD,CAAC;AAIxF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,OAAQ,SAAQ,eAAe;IAC1C;;;;;;OAMG;IACM,OAAO,CAAS;IAEzB;;;;;;;;OAQG;IACM,KAAK,CAAsC;IAEpD;;;;;;;;;OASG;IACM,sBAAsB,CAA8B;IAEpD,QAAQ,CAAiB;IACzB,OAAO,CAAgB;IAChC,yDAAyD;IAChD,cAAc,CAAuB;IAC9C,uEAAuE;IAC9D,gBAAgB,CAAyB;IACzC,QAAQ,CAAiB;IACzB,MAAM,CAAe;IACrB,MAAM,CAAe;IACrB,QAAQ,CAAiB;IAClC;;;;OAIG;IACe,KAAK,CAAoB;
|
|
1
|
+
{"version":3,"file":"stigmer.js","sourceRoot":"","sources":["../src/stigmer.ts"],"names":[],"mappings":"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"}
|