@qodo/sdk 0.6.0 → 0.8.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/.claude/skills/qodo-agent/SKILL.md +233 -3
- package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +76 -2
- package/.claude/skills/qodo-agent/references/common-issues.md +79 -0
- package/bin/rg +0 -0
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js +13 -8
- package/dist/api/agent.js.map +1 -1
- package/dist/api/http.d.ts.map +1 -1
- package/dist/api/http.js +5 -2
- package/dist/api/http.js.map +1 -1
- package/dist/api/websocket.d.ts.map +1 -1
- package/dist/api/websocket.js +6 -3
- package/dist/api/websocket.js.map +1 -1
- package/dist/auth/index.d.ts +18 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +69 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/context/messageManager.d.ts +1 -1
- package/dist/context/messageManager.d.ts.map +1 -1
- package/dist/context/messageManager.js +1 -1
- package/dist/context/messageManager.js.map +1 -1
- package/dist/index.d.ts +21 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/MCPManager.js +2 -2
- package/dist/mcp/MCPManager.js.map +1 -1
- package/dist/mcp/baseServer.js +1 -1
- package/dist/mcp/baseServer.js.map +1 -1
- package/dist/mcp/servers/ripgrep.d.ts.map +1 -1
- package/dist/mcp/servers/ripgrep.js +6 -2
- package/dist/mcp/servers/ripgrep.js.map +1 -1
- package/dist/mcp/servers/shell.js +1 -1
- package/dist/mcp/servers/shell.js.map +1 -1
- package/dist/mcp/serversRegistry.d.ts.map +1 -1
- package/dist/mcp/serversRegistry.js +7 -1
- package/dist/mcp/serversRegistry.js.map +1 -1
- package/dist/mcp/toolProcessor.d.ts +44 -4
- package/dist/mcp/toolProcessor.d.ts.map +1 -1
- package/dist/mcp/toolProcessor.js +255 -20
- package/dist/mcp/toolProcessor.js.map +1 -1
- package/dist/messages/index.d.ts +8 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +7 -0
- package/dist/messages/index.js.map +1 -0
- package/dist/messages/openai.d.ts +26 -0
- package/dist/messages/openai.d.ts.map +1 -0
- package/dist/messages/openai.js +55 -0
- package/dist/messages/openai.js.map +1 -0
- package/dist/messages/types.d.ts +73 -0
- package/dist/messages/types.d.ts.map +1 -0
- package/dist/messages/types.js +78 -0
- package/dist/messages/types.js.map +1 -0
- package/dist/parser/index.js +3 -3
- package/dist/parser/index.js.map +1 -1
- package/dist/sdk/QodoSDK.d.ts +30 -10
- package/dist/sdk/QodoSDK.d.ts.map +1 -1
- package/dist/sdk/QodoSDK.js +165 -33
- package/dist/sdk/QodoSDK.js.map +1 -1
- package/dist/sdk/artifacts.d.ts +156 -0
- package/dist/sdk/artifacts.d.ts.map +1 -0
- package/dist/sdk/artifacts.js +166 -0
- package/dist/sdk/artifacts.js.map +1 -0
- package/dist/sdk/bootstrap.d.ts.map +1 -1
- package/dist/sdk/bootstrap.js +11 -4
- package/dist/sdk/bootstrap.js.map +1 -1
- package/dist/sdk/discovery.js +1 -1
- package/dist/sdk/discovery.js.map +1 -1
- package/dist/sdk/events.d.ts +46 -1
- package/dist/sdk/events.d.ts.map +1 -1
- package/dist/sdk/events.js +6 -0
- package/dist/sdk/events.js.map +1 -1
- package/dist/sdk/middleware.d.ts +59 -0
- package/dist/sdk/middleware.d.ts.map +1 -0
- package/dist/sdk/middleware.js +69 -0
- package/dist/sdk/middleware.js.map +1 -0
- package/dist/sdk/pipeline/PipelineBuilder.d.ts +61 -0
- package/dist/sdk/pipeline/PipelineBuilder.d.ts.map +1 -0
- package/dist/sdk/pipeline/PipelineBuilder.js +91 -0
- package/dist/sdk/pipeline/PipelineBuilder.js.map +1 -0
- package/dist/sdk/pipeline/PipelineRunner.d.ts +28 -0
- package/dist/sdk/pipeline/PipelineRunner.d.ts.map +1 -0
- package/dist/sdk/pipeline/PipelineRunner.js +210 -0
- package/dist/sdk/pipeline/PipelineRunner.js.map +1 -0
- package/dist/sdk/pipeline/compiler.d.ts +24 -0
- package/dist/sdk/pipeline/compiler.d.ts.map +1 -0
- package/dist/sdk/pipeline/compiler.js +197 -0
- package/dist/sdk/pipeline/compiler.js.map +1 -0
- package/dist/sdk/pipeline/declarative.d.ts +34 -0
- package/dist/sdk/pipeline/declarative.d.ts.map +1 -0
- package/dist/sdk/pipeline/declarative.js +9 -0
- package/dist/sdk/pipeline/declarative.js.map +1 -0
- package/dist/sdk/pipeline/index.d.ts +20 -0
- package/dist/sdk/pipeline/index.d.ts.map +1 -0
- package/dist/sdk/pipeline/index.js +19 -0
- package/dist/sdk/pipeline/index.js.map +1 -0
- package/dist/sdk/pipeline/types.d.ts +75 -0
- package/dist/sdk/pipeline/types.d.ts.map +1 -0
- package/dist/sdk/pipeline/types.js +10 -0
- package/dist/sdk/pipeline/types.js.map +1 -0
- package/dist/sdk/policies.d.ts +163 -0
- package/dist/sdk/policies.d.ts.map +1 -0
- package/dist/sdk/policies.js +243 -0
- package/dist/sdk/policies.js.map +1 -0
- package/dist/sdk/runner/AgentRunner.js +5 -5
- package/dist/sdk/runner/AgentRunner.js.map +1 -1
- package/dist/sdk/runner/finalize.d.ts +47 -0
- package/dist/sdk/runner/finalize.d.ts.map +1 -1
- package/dist/sdk/runner/finalize.js +42 -2
- package/dist/sdk/runner/finalize.js.map +1 -1
- package/dist/sdk/runner/formats.d.ts +1 -1
- package/dist/sdk/runner/formats.d.ts.map +1 -1
- package/dist/sdk/runner/formats.js +22 -37
- package/dist/sdk/runner/formats.js.map +1 -1
- package/dist/sdk/runner/progress.d.ts +1 -1
- package/dist/sdk/runner/progress.d.ts.map +1 -1
- package/dist/sdk/runner/progress.js +1 -1
- package/dist/sdk/runner/progress.js.map +1 -1
- package/dist/session/SessionContext.d.ts +1 -0
- package/dist/session/SessionContext.d.ts.map +1 -1
- package/dist/session/SessionContext.js +3 -0
- package/dist/session/SessionContext.js.map +1 -1
- package/dist/session/environment.d.ts +16 -6
- package/dist/session/environment.d.ts.map +1 -1
- package/dist/session/environment.js.map +1 -1
- package/dist/session/serverData.d.ts.map +1 -1
- package/dist/session/serverData.js +21 -3
- package/dist/session/serverData.js.map +1 -1
- package/dist/tracing/PipelineTracer.d.ts +37 -0
- package/dist/tracing/PipelineTracer.d.ts.map +1 -0
- package/dist/tracing/PipelineTracer.js +64 -0
- package/dist/tracing/PipelineTracer.js.map +1 -0
- package/dist/tracing/SdkTracer.d.ts +91 -0
- package/dist/tracing/SdkTracer.d.ts.map +1 -0
- package/dist/tracing/SdkTracer.js +243 -0
- package/dist/tracing/SdkTracer.js.map +1 -0
- package/dist/tracing/index.d.ts +6 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +3 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/pipelineHelpers.d.ts +20 -0
- package/dist/tracing/pipelineHelpers.d.ts.map +1 -0
- package/dist/tracing/pipelineHelpers.js +140 -0
- package/dist/tracing/pipelineHelpers.js.map +1 -0
- package/dist/tracing/types.d.ts +46 -0
- package/dist/tracing/types.d.ts.map +1 -0
- package/dist/tracing/types.js +9 -0
- package/dist/tracing/types.js.map +1 -0
- package/package.json +13 -6
- package/scripts/download-ripgrep.js +269 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact Management for pipeline intermediate results.
|
|
3
|
+
*
|
|
4
|
+
* Each pipeline step can produce typed artifacts that are stored,
|
|
5
|
+
* serialized, and optionally persisted via user-supplied hooks.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
*
|
|
9
|
+
* import { ArtifactStore } from '@qodo/sdk';
|
|
10
|
+
*
|
|
11
|
+
* const store = new ArtifactStore({
|
|
12
|
+
* onPersist: async (artifact) => {
|
|
13
|
+
* await fs.writeFile(`/artifacts/${artifact.stepName}.json`, artifact.serialized);
|
|
14
|
+
* },
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // In a pipeline step:
|
|
18
|
+
* store.set('lint', { issues: 3, output: '...' });
|
|
19
|
+
*
|
|
20
|
+
* // Retrieve later:
|
|
21
|
+
* const lintResult = store.get('lint');
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* A stored artifact with metadata.
|
|
25
|
+
*/
|
|
26
|
+
export interface Artifact<T = unknown> {
|
|
27
|
+
/** Step name that produced this artifact. */
|
|
28
|
+
stepName: string;
|
|
29
|
+
/** The artifact data. */
|
|
30
|
+
data: T;
|
|
31
|
+
/** ISO timestamp when the artifact was stored. */
|
|
32
|
+
createdAt: string;
|
|
33
|
+
/** Serialized representation (JSON by default). */
|
|
34
|
+
serialized: string;
|
|
35
|
+
/** Content type of the serialized representation. */
|
|
36
|
+
contentType: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Custom serializer for artifact data.
|
|
40
|
+
*/
|
|
41
|
+
export interface ArtifactSerializer {
|
|
42
|
+
/** Serialize the artifact data to a string. */
|
|
43
|
+
serialize(data: unknown): string;
|
|
44
|
+
/** Deserialize a string back to data. */
|
|
45
|
+
deserialize(serialized: string): unknown;
|
|
46
|
+
/** Content type identifier (e.g., 'application/json'). */
|
|
47
|
+
contentType: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Persistence hook called when an artifact is stored.
|
|
51
|
+
*/
|
|
52
|
+
export type PersistHook = (artifact: Artifact) => Promise<void> | void;
|
|
53
|
+
/**
|
|
54
|
+
* Options for ArtifactStore.
|
|
55
|
+
*/
|
|
56
|
+
export interface ArtifactStoreOptions {
|
|
57
|
+
/**
|
|
58
|
+
* Called when an artifact is stored. Use for writing to disk,
|
|
59
|
+
* uploading to cloud storage, etc.
|
|
60
|
+
*/
|
|
61
|
+
onPersist?: PersistHook;
|
|
62
|
+
/**
|
|
63
|
+
* Custom serializer (default: JSON with 2-space indent).
|
|
64
|
+
*/
|
|
65
|
+
serializer?: ArtifactSerializer;
|
|
66
|
+
}
|
|
67
|
+
export declare const jsonSerializer: ArtifactSerializer;
|
|
68
|
+
/**
|
|
69
|
+
* In-memory artifact store with optional persistence.
|
|
70
|
+
*
|
|
71
|
+
* Stores typed artifacts keyed by step name. When a persistence
|
|
72
|
+
* hook is provided, it is called asynchronously after each store
|
|
73
|
+
* operation (errors in the hook are caught and available via
|
|
74
|
+
* `getErrors()`).
|
|
75
|
+
*/
|
|
76
|
+
export declare class ArtifactStore {
|
|
77
|
+
private static readonly MAX_ERRORS;
|
|
78
|
+
private readonly artifacts;
|
|
79
|
+
private readonly serializer;
|
|
80
|
+
private readonly persistHook?;
|
|
81
|
+
private readonly errors;
|
|
82
|
+
constructor(options?: ArtifactStoreOptions);
|
|
83
|
+
/**
|
|
84
|
+
* Store an artifact for a given step name.
|
|
85
|
+
*
|
|
86
|
+
* Overwrites any existing artifact for the same step name.
|
|
87
|
+
* If a persistence hook is configured, it is called after storage.
|
|
88
|
+
*/
|
|
89
|
+
set<T>(stepName: string, data: T): Promise<Artifact<T>>;
|
|
90
|
+
/**
|
|
91
|
+
* Retrieve an artifact by step name.
|
|
92
|
+
*
|
|
93
|
+
* Returns undefined if no artifact exists for the given step.
|
|
94
|
+
*/
|
|
95
|
+
get<T = unknown>(stepName: string): Artifact<T> | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* Check if an artifact exists for a given step name.
|
|
98
|
+
*/
|
|
99
|
+
has(stepName: string): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Get all stored artifacts as an ordered array (insertion order).
|
|
102
|
+
*/
|
|
103
|
+
all(): Artifact[];
|
|
104
|
+
/**
|
|
105
|
+
* Get all step names that have artifacts.
|
|
106
|
+
*/
|
|
107
|
+
stepNames(): string[];
|
|
108
|
+
/**
|
|
109
|
+
* Delete an artifact by step name.
|
|
110
|
+
*/
|
|
111
|
+
delete(stepName: string): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Clear all stored artifacts.
|
|
114
|
+
*/
|
|
115
|
+
clear(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Get persistence errors that occurred during set() calls.
|
|
118
|
+
*/
|
|
119
|
+
getErrors(): ReadonlyArray<{
|
|
120
|
+
stepName: string;
|
|
121
|
+
error: Error;
|
|
122
|
+
}>;
|
|
123
|
+
/**
|
|
124
|
+
* Get the number of stored artifacts.
|
|
125
|
+
*/
|
|
126
|
+
get size(): number;
|
|
127
|
+
/**
|
|
128
|
+
* Deserialize a previously serialized artifact back to data.
|
|
129
|
+
*/
|
|
130
|
+
deserialize<T = unknown>(serialized: string): T;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create a pipeline step wrapper that automatically stores the step's
|
|
134
|
+
* output as an artifact.
|
|
135
|
+
*
|
|
136
|
+
* Usage with sdkPipeline:
|
|
137
|
+
*
|
|
138
|
+
* const store = new ArtifactStore({ onPersist: ... });
|
|
139
|
+
*
|
|
140
|
+
* const pipeline = sdkPipeline<{ repo: string }>()
|
|
141
|
+
* .step('lint', withArtifacts(store, async ({ state, run }) => {
|
|
142
|
+
* const result = await run('lint', { args: { path: state.repo } });
|
|
143
|
+
* return { lintOutput: result.result.final_output };
|
|
144
|
+
* }))
|
|
145
|
+
* .build();
|
|
146
|
+
*/
|
|
147
|
+
export declare function withArtifacts<TState extends Record<string, any>, TOut extends Record<string, any>>(store: ArtifactStore, fn: (ctx: {
|
|
148
|
+
state: Readonly<TState>;
|
|
149
|
+
run: any;
|
|
150
|
+
stepName: string;
|
|
151
|
+
}) => Promise<TOut>): (ctx: {
|
|
152
|
+
state: Readonly<TState>;
|
|
153
|
+
run: any;
|
|
154
|
+
stepName: string;
|
|
155
|
+
}) => Promise<TOut>;
|
|
156
|
+
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/sdk/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,IAAI,EAAE,CAAC,CAAC;IAER,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAElB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IAEnB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAEjC,yCAAyC;IACzC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAEzC,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IAExB;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAMD,eAAO,MAAM,cAAc,EAAE,kBAI5B,CAAC;AAMF;;;;;;;GAOG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAO;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;gBAE5D,OAAO,CAAC,EAAE,oBAAoB;IAK1C;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IA8B7D;;;;OAIG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS;IAI3D;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,GAAG,IAAI,QAAQ,EAAE;IAIjB;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,SAAS,IAAI,aAAa,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;IAI9D;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;CAGhD;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChG,KAAK,EAAE,aAAa,EACpB,EAAE,EAAE,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAClF,CAAC,GAAG,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAMjF"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact Management for pipeline intermediate results.
|
|
3
|
+
*
|
|
4
|
+
* Each pipeline step can produce typed artifacts that are stored,
|
|
5
|
+
* serialized, and optionally persisted via user-supplied hooks.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
*
|
|
9
|
+
* import { ArtifactStore } from '@qodo/sdk';
|
|
10
|
+
*
|
|
11
|
+
* const store = new ArtifactStore({
|
|
12
|
+
* onPersist: async (artifact) => {
|
|
13
|
+
* await fs.writeFile(`/artifacts/${artifact.stepName}.json`, artifact.serialized);
|
|
14
|
+
* },
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // In a pipeline step:
|
|
18
|
+
* store.set('lint', { issues: 3, output: '...' });
|
|
19
|
+
*
|
|
20
|
+
* // Retrieve later:
|
|
21
|
+
* const lintResult = store.get('lint');
|
|
22
|
+
*/
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Default JSON serializer
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
export const jsonSerializer = {
|
|
27
|
+
serialize: (data) => JSON.stringify(data, null, 2),
|
|
28
|
+
deserialize: (serialized) => JSON.parse(serialized),
|
|
29
|
+
contentType: 'application/json',
|
|
30
|
+
};
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// ArtifactStore
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
/**
|
|
35
|
+
* In-memory artifact store with optional persistence.
|
|
36
|
+
*
|
|
37
|
+
* Stores typed artifacts keyed by step name. When a persistence
|
|
38
|
+
* hook is provided, it is called asynchronously after each store
|
|
39
|
+
* operation (errors in the hook are caught and available via
|
|
40
|
+
* `getErrors()`).
|
|
41
|
+
*/
|
|
42
|
+
export class ArtifactStore {
|
|
43
|
+
static MAX_ERRORS = 100;
|
|
44
|
+
artifacts = new Map();
|
|
45
|
+
serializer;
|
|
46
|
+
persistHook;
|
|
47
|
+
errors = [];
|
|
48
|
+
constructor(options) {
|
|
49
|
+
this.serializer = options?.serializer ?? jsonSerializer;
|
|
50
|
+
this.persistHook = options?.onPersist;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Store an artifact for a given step name.
|
|
54
|
+
*
|
|
55
|
+
* Overwrites any existing artifact for the same step name.
|
|
56
|
+
* If a persistence hook is configured, it is called after storage.
|
|
57
|
+
*/
|
|
58
|
+
async set(stepName, data) {
|
|
59
|
+
const serialized = this.serializer.serialize(data);
|
|
60
|
+
const artifact = {
|
|
61
|
+
stepName,
|
|
62
|
+
data,
|
|
63
|
+
createdAt: new Date().toISOString(),
|
|
64
|
+
serialized,
|
|
65
|
+
contentType: this.serializer.contentType,
|
|
66
|
+
};
|
|
67
|
+
this.artifacts.set(stepName, artifact);
|
|
68
|
+
if (this.persistHook) {
|
|
69
|
+
try {
|
|
70
|
+
await this.persistHook(artifact);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (this.errors.length >= ArtifactStore.MAX_ERRORS) {
|
|
74
|
+
this.errors.shift();
|
|
75
|
+
}
|
|
76
|
+
this.errors.push({
|
|
77
|
+
stepName,
|
|
78
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return artifact;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Retrieve an artifact by step name.
|
|
86
|
+
*
|
|
87
|
+
* Returns undefined if no artifact exists for the given step.
|
|
88
|
+
*/
|
|
89
|
+
get(stepName) {
|
|
90
|
+
return this.artifacts.get(stepName);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if an artifact exists for a given step name.
|
|
94
|
+
*/
|
|
95
|
+
has(stepName) {
|
|
96
|
+
return this.artifacts.has(stepName);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get all stored artifacts as an ordered array (insertion order).
|
|
100
|
+
*/
|
|
101
|
+
all() {
|
|
102
|
+
return [...this.artifacts.values()];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get all step names that have artifacts.
|
|
106
|
+
*/
|
|
107
|
+
stepNames() {
|
|
108
|
+
return [...this.artifacts.keys()];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Delete an artifact by step name.
|
|
112
|
+
*/
|
|
113
|
+
delete(stepName) {
|
|
114
|
+
return this.artifacts.delete(stepName);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Clear all stored artifacts.
|
|
118
|
+
*/
|
|
119
|
+
clear() {
|
|
120
|
+
this.artifacts.clear();
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get persistence errors that occurred during set() calls.
|
|
124
|
+
*/
|
|
125
|
+
getErrors() {
|
|
126
|
+
return this.errors;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get the number of stored artifacts.
|
|
130
|
+
*/
|
|
131
|
+
get size() {
|
|
132
|
+
return this.artifacts.size;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Deserialize a previously serialized artifact back to data.
|
|
136
|
+
*/
|
|
137
|
+
deserialize(serialized) {
|
|
138
|
+
return this.serializer.deserialize(serialized);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// Pipeline integration helper
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
/**
|
|
145
|
+
* Create a pipeline step wrapper that automatically stores the step's
|
|
146
|
+
* output as an artifact.
|
|
147
|
+
*
|
|
148
|
+
* Usage with sdkPipeline:
|
|
149
|
+
*
|
|
150
|
+
* const store = new ArtifactStore({ onPersist: ... });
|
|
151
|
+
*
|
|
152
|
+
* const pipeline = sdkPipeline<{ repo: string }>()
|
|
153
|
+
* .step('lint', withArtifacts(store, async ({ state, run }) => {
|
|
154
|
+
* const result = await run('lint', { args: { path: state.repo } });
|
|
155
|
+
* return { lintOutput: result.result.final_output };
|
|
156
|
+
* }))
|
|
157
|
+
* .build();
|
|
158
|
+
*/
|
|
159
|
+
export function withArtifacts(store, fn) {
|
|
160
|
+
return async (ctx) => {
|
|
161
|
+
const output = await fn(ctx);
|
|
162
|
+
await store.set(ctx.stepName, output);
|
|
163
|
+
return output;
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/sdk/artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/sdk/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/sdk/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyB,MAAM,qBAAqB,CAAC;AAGxE,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,uBAA4B;IAElD,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;CAczC"}
|
package/dist/sdk/bootstrap.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ServerData } from '../session/index.js';
|
|
1
|
+
import { ServerData, getCurrentEnvironment } from '../session/index.js';
|
|
2
2
|
import { validateKey } from '../auth/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* BackendBootstrap
|
|
@@ -12,9 +12,16 @@ export class BackendBootstrap {
|
|
|
12
12
|
this.opts = opts;
|
|
13
13
|
}
|
|
14
14
|
async init() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const env = getCurrentEnvironment();
|
|
16
|
+
const authProvider = env.authProvider;
|
|
17
|
+
if (authProvider) {
|
|
18
|
+
// Environment-scoped auth (SDK path)
|
|
19
|
+
authProvider.validate();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
// Legacy fallback (CLI path)
|
|
23
|
+
validateKey();
|
|
24
|
+
}
|
|
18
25
|
return await ServerData.init(this.opts.baseUrlOverride);
|
|
19
26
|
}
|
|
20
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/sdk/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/sdk/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAgB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM7D;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,OAAgC,EAAE;QAAlC,SAAI,GAAJ,IAAI,CAA8B;IAAG,CAAC;IAE5D,KAAK,CAAC,IAAI;QACf,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,MAAM,YAAY,GAA6B,GAAG,CAAC,YAAY,CAAC;QAEhE,IAAI,YAAY,EAAE,CAAC;YACjB,qCAAqC;YACrC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,WAAW,EAAE,CAAC;QAChB,CAAC;QAED,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC;CACF"}
|
package/dist/sdk/discovery.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/sdk/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IAC3D,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAEtC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAE7D,OAAO,IAAI,EAAE,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnB,OAAO,CAAC,CAAC;YACX,CAAC;YAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/sdk/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IAC3D,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;IAEtC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAE7D,OAAO,IAAI,EAAE,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnB,OAAO,CAAC,CAAC;YACX,CAAC;YAAC,MAAM,CAAC,CAAC,iDAAiD,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,OAAO,KAAK,IAAI;YAAE,MAAM;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM;QAC9B,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/sdk/events.d.ts
CHANGED
|
@@ -15,6 +15,12 @@ export declare const SdkEventType: {
|
|
|
15
15
|
readonly ToolExecuted: "sdk.tool.executed";
|
|
16
16
|
readonly Error: "sdk.error";
|
|
17
17
|
readonly Final: "sdk.final";
|
|
18
|
+
readonly PipelineStarted: "sdk.pipeline.started";
|
|
19
|
+
readonly PipelineStepStarted: "sdk.pipeline.step.started";
|
|
20
|
+
readonly PipelineStepCompleted: "sdk.pipeline.step.completed";
|
|
21
|
+
readonly PipelineGateEvaluated: "sdk.pipeline.gate.evaluated";
|
|
22
|
+
readonly PipelineCompleted: "sdk.pipeline.completed";
|
|
23
|
+
readonly PipelineError: "sdk.pipeline.error";
|
|
18
24
|
};
|
|
19
25
|
export type SdkEventTypeName = (typeof SdkEventType)[keyof typeof SdkEventType];
|
|
20
26
|
export type SdkEventEnvelope<TType extends string, TData> = {
|
|
@@ -69,6 +75,8 @@ export type SdkRunStartedEvent = SdkEventEnvelope<typeof SdkEventType.RunStarted
|
|
|
69
75
|
path?: string;
|
|
70
76
|
};
|
|
71
77
|
tools_auto_approved: boolean;
|
|
78
|
+
/** When true, tools are simulated via dryRunTool() and no side effects occur. */
|
|
79
|
+
dry_run?: boolean;
|
|
72
80
|
}>;
|
|
73
81
|
export type SdkMessageDeltaEvent = SdkEventEnvelope<typeof SdkEventType.MessageDelta, {
|
|
74
82
|
message_id: string;
|
|
@@ -113,6 +121,8 @@ export type SdkToolExecutedEvent = SdkEventEnvelope<typeof SdkEventType.ToolExec
|
|
|
113
121
|
*/
|
|
114
122
|
raw?: any;
|
|
115
123
|
};
|
|
124
|
+
/** When true, this tool was simulated (dry run) and no side effects occurred. */
|
|
125
|
+
dry_run?: boolean;
|
|
116
126
|
}>;
|
|
117
127
|
export type SdkErrorEvent = SdkEventEnvelope<typeof SdkEventType.Error, {
|
|
118
128
|
message: string;
|
|
@@ -136,7 +146,42 @@ export type SdkFinalEvent = SdkEventEnvelope<typeof SdkEventType.Final, {
|
|
|
136
146
|
[k: string]: any;
|
|
137
147
|
};
|
|
138
148
|
}>;
|
|
139
|
-
export type
|
|
149
|
+
export type SdkPipelineStartedEvent = SdkEventEnvelope<typeof SdkEventType.PipelineStarted, {
|
|
150
|
+
/** Number of entries (sequential steps + parallel groups). */
|
|
151
|
+
entry_count: number;
|
|
152
|
+
/** Names of all steps in the pipeline. */
|
|
153
|
+
step_names: string[];
|
|
154
|
+
}>;
|
|
155
|
+
export type SdkPipelineStepStartedEvent = SdkEventEnvelope<typeof SdkEventType.PipelineStepStarted, {
|
|
156
|
+
step_name: string;
|
|
157
|
+
/** Whether this step is part of a parallel group. */
|
|
158
|
+
parallel: boolean;
|
|
159
|
+
}>;
|
|
160
|
+
export type SdkPipelineStepCompletedEvent = SdkEventEnvelope<typeof SdkEventType.PipelineStepCompleted, {
|
|
161
|
+
step_name: string;
|
|
162
|
+
status: 'completed' | 'skipped' | 'error';
|
|
163
|
+
duration_ms: number;
|
|
164
|
+
error?: string;
|
|
165
|
+
}>;
|
|
166
|
+
export type SdkPipelineGateEvaluatedEvent = SdkEventEnvelope<typeof SdkEventType.PipelineGateEvaluated, {
|
|
167
|
+
step_name: string;
|
|
168
|
+
/** Whether the gate passed (true) or the step was skipped (false). */
|
|
169
|
+
passed: boolean;
|
|
170
|
+
}>;
|
|
171
|
+
export type SdkPipelineCompletedEvent = SdkEventEnvelope<typeof SdkEventType.PipelineCompleted, {
|
|
172
|
+
/** Total duration of the pipeline run in ms. */
|
|
173
|
+
duration_ms: number;
|
|
174
|
+
/** Number of steps completed. */
|
|
175
|
+
steps_completed: number;
|
|
176
|
+
/** Number of steps skipped. */
|
|
177
|
+
steps_skipped: number;
|
|
178
|
+
}>;
|
|
179
|
+
export type SdkPipelineErrorEvent = SdkEventEnvelope<typeof SdkEventType.PipelineError, {
|
|
180
|
+
step_name: string;
|
|
181
|
+
message: string;
|
|
182
|
+
cause?: any;
|
|
183
|
+
}>;
|
|
184
|
+
export type QodoSdkEvent = SdkInitEvent | SdkRunStartedEvent | SdkMessageDeltaEvent | SdkMessageFullEvent | SdkProgressEvent | SdkToolRequestedEvent | SdkToolApprovedEvent | SdkToolExecutedEvent | SdkErrorEvent | SdkFinalEvent | SdkPipelineStartedEvent | SdkPipelineStepStartedEvent | SdkPipelineStepCompletedEvent | SdkPipelineGateEvaluatedEvent | SdkPipelineCompletedEvent | SdkPipelineErrorEvent;
|
|
140
185
|
export declare function createSdkEvent<TType extends QodoSdkEvent['type'], TData>(args: {
|
|
141
186
|
type: TType;
|
|
142
187
|
run_id: string;
|
package/dist/sdk/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/sdk/events.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,EAAG,aAAsB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/sdk/events.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/events.js
CHANGED
|
@@ -16,6 +16,12 @@ export const SdkEventType = {
|
|
|
16
16
|
ToolExecuted: 'sdk.tool.executed',
|
|
17
17
|
Error: 'sdk.error',
|
|
18
18
|
Final: 'sdk.final',
|
|
19
|
+
PipelineStarted: 'sdk.pipeline.started',
|
|
20
|
+
PipelineStepStarted: 'sdk.pipeline.step.started',
|
|
21
|
+
PipelineStepCompleted: 'sdk.pipeline.step.completed',
|
|
22
|
+
PipelineGateEvaluated: 'sdk.pipeline.gate.evaluated',
|
|
23
|
+
PipelineCompleted: 'sdk.pipeline.completed',
|
|
24
|
+
PipelineError: 'sdk.pipeline.error',
|
|
19
25
|
};
|
|
20
26
|
export function createSdkEvent(args) {
|
|
21
27
|
return {
|
package/dist/sdk/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/sdk/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,aAAsB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,iBAAiB;IAC7B,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,kBAAkB;IAC/B,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,oBAAoB;IACnC,YAAY,EAAE,mBAAmB;IACjC,YAAY,EAAE,mBAAmB;IACjC,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/sdk/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,aAAsB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,iBAAiB;IAC7B,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,kBAAkB;IAC/B,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,oBAAoB;IACnC,YAAY,EAAE,mBAAmB;IACjC,YAAY,EAAE,mBAAmB;IACjC,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,eAAe,EAAE,sBAAsB;IACvC,mBAAmB,EAAE,2BAA2B;IAChD,qBAAqB,EAAE,6BAA6B;IACpD,qBAAqB,EAAE,6BAA6B;IACpD,iBAAiB,EAAE,wBAAwB;IAC3C,aAAa,EAAE,oBAAoB;CAC3B,CAAC;AAuNX,MAAM,UAAU,cAAc,CAA4C,IASzE;IACC,OAAO;QACL,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;QACvC,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,IAAI,EAAE,IAAI,CAAC,IAAI;KACkB,CAAC;AACtC,CAAC;AAQD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,EAAgB,EAAE,QAA0B;IACxE,MAAM,EAAE,GAAI,QAAgB,CAAC,EAAE,CAAC,IAAI,CAA+C,CAAC;IACpF,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACtB,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,yDAAyD;IACzD,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public Tool Middleware API for SDK consumers.
|
|
3
|
+
*
|
|
4
|
+
* Middleware hooks run around tool execution, allowing consumers to inspect,
|
|
5
|
+
* modify, or log tool calls and results without touching internal code.
|
|
6
|
+
*
|
|
7
|
+
* Safety guarantees:
|
|
8
|
+
* - Protected fields (identifier, server_name, session_id) cannot be overwritten
|
|
9
|
+
* - User middleware is wrapped in a configurable timeout (default 10 s)
|
|
10
|
+
* - Errors in middleware are caught and reported, never crash the run
|
|
11
|
+
*/
|
|
12
|
+
import type { ToolData, ToolResult } from '../api/types.js';
|
|
13
|
+
/** Default timeout for user-registered middleware hooks (ms). */
|
|
14
|
+
export declare const MIDDLEWARE_TIMEOUT_MS = 10000;
|
|
15
|
+
/**
|
|
16
|
+
* Fields on ToolData that middleware is NOT allowed to overwrite.
|
|
17
|
+
* These are set by the engine and are essential for routing / identity.
|
|
18
|
+
*/
|
|
19
|
+
export declare const PROTECTED_TOOL_FIELDS: ReadonlySet<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Public middleware interface that SDK consumers implement.
|
|
22
|
+
*
|
|
23
|
+
* Both hooks are optional. Returning `undefined` / `void` from a hook means
|
|
24
|
+
* "no changes" — the original data flows through.
|
|
25
|
+
*/
|
|
26
|
+
export interface ToolMiddleware {
|
|
27
|
+
/** Display name for logging / error messages. */
|
|
28
|
+
name?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Called before a tool is executed.
|
|
31
|
+
* May return partial ToolData overrides (protected fields are stripped).
|
|
32
|
+
*/
|
|
33
|
+
preExecute?(toolData: Readonly<ToolData>): Promise<Partial<ToolData> | void> | Partial<ToolData> | void;
|
|
34
|
+
/**
|
|
35
|
+
* Called after a tool is executed with the result.
|
|
36
|
+
* May return a replacement ToolResult.
|
|
37
|
+
*/
|
|
38
|
+
postExecute?(toolData: Readonly<ToolData>, result: ToolResult): Promise<ToolResult | void> | ToolResult | void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Error class for middleware failures.
|
|
42
|
+
* Contains the middleware name and phase for diagnostics.
|
|
43
|
+
*/
|
|
44
|
+
export declare class ToolMiddlewareError extends Error {
|
|
45
|
+
readonly middlewareName: string;
|
|
46
|
+
readonly phase: 'preExecute' | 'postExecute';
|
|
47
|
+
readonly cause?: Error | undefined;
|
|
48
|
+
constructor(message: string, middlewareName: string, phase: 'preExecute' | 'postExecute', cause?: Error | undefined);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Strip protected fields from a partial ToolData override.
|
|
52
|
+
*/
|
|
53
|
+
export declare function stripProtectedFields(partial: Partial<ToolData>): Partial<ToolData>;
|
|
54
|
+
/**
|
|
55
|
+
* Wrap an async function with a timeout.
|
|
56
|
+
* Rejects with ToolMiddlewareError if the timeout expires.
|
|
57
|
+
*/
|
|
58
|
+
export declare function withTimeout<T>(fn: () => Promise<T> | T, timeoutMs: number, middlewareName: string, phase: 'preExecute' | 'postExecute'): Promise<T>;
|
|
59
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/sdk/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE5D,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAIpD,CAAC;AAEH;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,UAAU,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAExG;;;OAGG;IACH,WAAW,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC;CAChH;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,cAAc,EAAE,MAAM;aACtB,KAAK,EAAE,YAAY,GAAG,aAAa;aACnC,KAAK,CAAC,EAAE,KAAK;gBAH7B,OAAO,EAAE,MAAM,EACC,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,YAAY,GAAG,aAAa,EACnC,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAMlF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACxB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,YAAY,GAAG,aAAa,GAClC,OAAO,CAAC,CAAC,CAAC,CAsBZ"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public Tool Middleware API for SDK consumers.
|
|
3
|
+
*
|
|
4
|
+
* Middleware hooks run around tool execution, allowing consumers to inspect,
|
|
5
|
+
* modify, or log tool calls and results without touching internal code.
|
|
6
|
+
*
|
|
7
|
+
* Safety guarantees:
|
|
8
|
+
* - Protected fields (identifier, server_name, session_id) cannot be overwritten
|
|
9
|
+
* - User middleware is wrapped in a configurable timeout (default 10 s)
|
|
10
|
+
* - Errors in middleware are caught and reported, never crash the run
|
|
11
|
+
*/
|
|
12
|
+
/** Default timeout for user-registered middleware hooks (ms). */
|
|
13
|
+
export const MIDDLEWARE_TIMEOUT_MS = 10_000;
|
|
14
|
+
/**
|
|
15
|
+
* Fields on ToolData that middleware is NOT allowed to overwrite.
|
|
16
|
+
* These are set by the engine and are essential for routing / identity.
|
|
17
|
+
*/
|
|
18
|
+
export const PROTECTED_TOOL_FIELDS = new Set([
|
|
19
|
+
'identifier',
|
|
20
|
+
'server_name',
|
|
21
|
+
'session_id',
|
|
22
|
+
]);
|
|
23
|
+
/**
|
|
24
|
+
* Error class for middleware failures.
|
|
25
|
+
* Contains the middleware name and phase for diagnostics.
|
|
26
|
+
*/
|
|
27
|
+
export class ToolMiddlewareError extends Error {
|
|
28
|
+
middlewareName;
|
|
29
|
+
phase;
|
|
30
|
+
cause;
|
|
31
|
+
constructor(message, middlewareName, phase, cause) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.middlewareName = middlewareName;
|
|
34
|
+
this.phase = phase;
|
|
35
|
+
this.cause = cause;
|
|
36
|
+
this.name = 'ToolMiddlewareError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Strip protected fields from a partial ToolData override.
|
|
41
|
+
*/
|
|
42
|
+
export function stripProtectedFields(partial) {
|
|
43
|
+
const cleaned = { ...partial };
|
|
44
|
+
for (const field of PROTECTED_TOOL_FIELDS) {
|
|
45
|
+
delete cleaned[field];
|
|
46
|
+
}
|
|
47
|
+
return cleaned;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Wrap an async function with a timeout.
|
|
51
|
+
* Rejects with ToolMiddlewareError if the timeout expires.
|
|
52
|
+
*/
|
|
53
|
+
export function withTimeout(fn, timeoutMs, middlewareName, phase) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
const timer = setTimeout(() => {
|
|
56
|
+
reject(new ToolMiddlewareError(`Middleware "${middlewareName}" timed out after ${timeoutMs}ms in ${phase}`, middlewareName, phase));
|
|
57
|
+
}, timeoutMs);
|
|
58
|
+
Promise.resolve(fn())
|
|
59
|
+
.then((result) => {
|
|
60
|
+
clearTimeout(timer);
|
|
61
|
+
resolve(result);
|
|
62
|
+
})
|
|
63
|
+
.catch((err) => {
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
reject(err);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/sdk/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,YAAY;IACZ,aAAa;IACb,YAAY;CACb,CAAC,CAAC;AAyBH;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAG1B;IACA;IACA;IAJlB,YACE,OAAe,EACC,cAAsB,EACtB,KAAmC,EACnC,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,mBAAc,GAAd,cAAc,CAAQ;QACtB,UAAK,GAAL,KAAK,CAA8B;QACnC,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA0B;IAC7D,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE,CAAC;QAC1C,OAAQ,OAAe,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,EAAwB,EACxB,SAAiB,EACjB,cAAsB,EACtB,KAAmC;IAEnC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CACJ,IAAI,mBAAmB,CACrB,eAAe,cAAc,qBAAqB,SAAS,SAAS,KAAK,EAAE,EAC3E,cAAc,EACd,KAAK,CACN,CACF,CAAC;QACJ,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;aAClB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC"}
|