armature-agent-core 0.1.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/capabilities.d.ts +32 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +4 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/checkpoint.d.ts +48 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +46 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/guardrails.d.ts +47 -0
- package/dist/guardrails.d.ts.map +1 -0
- package/dist/guardrails.js +30 -0
- package/dist/guardrails.js.map +1 -0
- package/dist/handoff.d.ts +112 -0
- package/dist/handoff.d.ts.map +1 -0
- package/dist/handoff.js +42 -0
- package/dist/handoff.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/mcpServer.d.ts +142 -0
- package/dist/mcpServer.d.ts.map +1 -0
- package/dist/mcpServer.js +57 -0
- package/dist/mcpServer.js.map +1 -0
- package/dist/memory.d.ts +70 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +65 -0
- package/dist/memory.js.map +1 -0
- package/dist/messages.d.ts +54 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +13 -0
- package/dist/messages.js.map +1 -0
- package/dist/provider.d.ts +53 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +2 -0
- package/dist/provider.js.map +1 -0
- package/dist/runManifest.d.ts +25 -0
- package/dist/runManifest.d.ts.map +1 -0
- package/dist/runManifest.js +57 -0
- package/dist/runManifest.js.map +1 -0
- package/dist/tools.d.ts +24 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +2 -0
- package/dist/tools.js.map +1 -0
- package/dist/trace.d.ts +81 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +92 -0
- package/dist/trace.js.map +1 -0
- package/dist/workflow.d.ts +97 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +179 -0
- package/dist/workflow.js.map +1 -0
- package/package.json +20 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type ProviderReasoningMode = 'none' | 'budget' | 'adaptive';
|
|
2
|
+
export type RetryClassifier = 'rate_limit' | 'context_limit' | 'output_limit' | 'transient_network' | 'unsupported_feature';
|
|
3
|
+
export interface UsageFieldSupport {
|
|
4
|
+
reasoningTokens: boolean;
|
|
5
|
+
cacheReadTokens: boolean;
|
|
6
|
+
cacheWriteTokens: boolean;
|
|
7
|
+
toolCallCount: boolean;
|
|
8
|
+
webSearchCount: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface ProviderCapabilities {
|
|
11
|
+
streaming: boolean;
|
|
12
|
+
toolCalls: boolean;
|
|
13
|
+
parallelToolCalls: boolean;
|
|
14
|
+
serverSideTools: boolean;
|
|
15
|
+
structuredOutput: boolean;
|
|
16
|
+
reasoningMode: ProviderReasoningMode;
|
|
17
|
+
imagesIn: boolean;
|
|
18
|
+
documentsIn: boolean;
|
|
19
|
+
webSearchNative: boolean;
|
|
20
|
+
maxContextTokens?: number;
|
|
21
|
+
maxOutputTokens?: number;
|
|
22
|
+
toolSchemaDialect: 'json-schema' | 'anthropic' | 'openai' | 'custom';
|
|
23
|
+
toolResultContentDialect: 'text' | 'content-blocks' | 'parts' | 'custom';
|
|
24
|
+
supportsPartialToolArgs: boolean;
|
|
25
|
+
supportsResume: boolean;
|
|
26
|
+
supportsPromptCaching: boolean;
|
|
27
|
+
usageFields: UsageFieldSupport;
|
|
28
|
+
retryClassifiers: RetryClassifier[];
|
|
29
|
+
}
|
|
30
|
+
export type BooleanCapabilityName = 'streaming' | 'toolCalls' | 'parallelToolCalls' | 'serverSideTools' | 'structuredOutput' | 'imagesIn' | 'documentsIn' | 'webSearchNative' | 'supportsPartialToolArgs' | 'supportsResume' | 'supportsPromptCaching';
|
|
31
|
+
export declare function supportsCapability(capabilities: ProviderCapabilities, capability: BooleanCapabilityName): boolean;
|
|
32
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAA;AAElE,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,eAAe,GACf,cAAc,GACd,mBAAmB,GACnB,qBAAqB,CAAA;AAEzB,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,OAAO,CAAA;IACxB,eAAe,EAAE,OAAO,CAAA;IACxB,gBAAgB,EAAE,OAAO,CAAA;IACzB,aAAa,EAAE,OAAO,CAAA;IACtB,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,gBAAgB,EAAE,OAAO,CAAA;IACzB,aAAa,EAAE,qBAAqB,CAAA;IACpC,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;IACpB,eAAe,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpE,wBAAwB,EAAE,MAAM,GAAG,gBAAgB,GAAG,OAAO,GAAG,QAAQ,CAAA;IACxE,uBAAuB,EAAE,OAAO,CAAA;IAChC,cAAc,EAAE,OAAO,CAAA;IACvB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,WAAW,EAAE,iBAAiB,CAAA;IAC9B,gBAAgB,EAAE,eAAe,EAAE,CAAA;CACpC;AAED,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,WAAW,GACX,mBAAmB,GACnB,iBAAiB,GACjB,kBAAkB,GAClB,UAAU,GACV,aAAa,GACb,iBAAiB,GACjB,yBAAyB,GACzB,gBAAgB,GAChB,uBAAuB,CAAA;AAE3B,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,oBAAoB,EAClC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAET"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAmDA,MAAM,UAAU,kBAAkB,CAChC,YAAkC,EAClC,UAAiC;IAEjC,OAAO,YAAY,CAAC,UAAU,CAAC,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AgentMessage } from './messages.js';
|
|
2
|
+
export interface CheckpointEntry {
|
|
3
|
+
/** Unique checkpoint ID */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Session ID this checkpoint belongs to */
|
|
6
|
+
sessionId: string;
|
|
7
|
+
/** ISO 8601 timestamp */
|
|
8
|
+
createdAt: string;
|
|
9
|
+
/** The conversation history at this point */
|
|
10
|
+
messages: AgentMessage[];
|
|
11
|
+
/** Opaque agent state (tool permissions, pending tasks, etc.) */
|
|
12
|
+
agentState?: Record<string, unknown>;
|
|
13
|
+
/** Provider-specific metadata (model, usage, etc.) */
|
|
14
|
+
metadata?: Record<string, unknown>;
|
|
15
|
+
/** Optional human-readable label */
|
|
16
|
+
label?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface CheckpointQuery {
|
|
19
|
+
sessionId?: string;
|
|
20
|
+
label?: string;
|
|
21
|
+
/** Return at most N entries */
|
|
22
|
+
limit?: number;
|
|
23
|
+
/** Sort order by createdAt */
|
|
24
|
+
order?: 'asc' | 'desc';
|
|
25
|
+
}
|
|
26
|
+
export interface CheckpointStore {
|
|
27
|
+
/** Save a checkpoint. Overwrites if same ID exists. */
|
|
28
|
+
save(entry: CheckpointEntry): Promise<void>;
|
|
29
|
+
/** Load a single checkpoint by ID. Returns undefined if not found. */
|
|
30
|
+
load(id: string): Promise<CheckpointEntry | undefined>;
|
|
31
|
+
/** List checkpoints matching a query. */
|
|
32
|
+
list(query?: CheckpointQuery): Promise<CheckpointEntry[]>;
|
|
33
|
+
/** Delete a checkpoint by ID. No-op if not found. */
|
|
34
|
+
delete(id: string): Promise<void>;
|
|
35
|
+
/** Delete all checkpoints for a session. */
|
|
36
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export declare class InMemoryCheckpointStore implements CheckpointStore {
|
|
39
|
+
private store;
|
|
40
|
+
save(entry: CheckpointEntry): Promise<void>;
|
|
41
|
+
load(id: string): Promise<CheckpointEntry | undefined>;
|
|
42
|
+
list(query?: CheckpointQuery): Promise<CheckpointEntry[]>;
|
|
43
|
+
delete(id: string): Promise<void>;
|
|
44
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
45
|
+
/** Test helper: returns the current count of stored checkpoints */
|
|
46
|
+
get size(): number;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAMjD,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAA;IACjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,8BAA8B;IAC9B,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CACvB;AAMD,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,sEAAsE;IACtE,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAA;IACtD,yCAAyC;IACzC,IAAI,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;IACzD,qDAAqD;IACrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,4CAA4C;IAC5C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChD;AAMD,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,KAAK,CAAqC;IAE5C,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAKtD,IAAI,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAuBzD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrD,mEAAmE;IACnE,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// InMemoryCheckpointStore: reference implementation for testing
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
export class InMemoryCheckpointStore {
|
|
5
|
+
store = new Map();
|
|
6
|
+
async save(entry) {
|
|
7
|
+
this.store.set(entry.id, structuredClone(entry));
|
|
8
|
+
}
|
|
9
|
+
async load(id) {
|
|
10
|
+
const entry = this.store.get(id);
|
|
11
|
+
return entry ? structuredClone(entry) : undefined;
|
|
12
|
+
}
|
|
13
|
+
async list(query) {
|
|
14
|
+
let entries = [...this.store.values()];
|
|
15
|
+
if (query?.sessionId) {
|
|
16
|
+
entries = entries.filter(e => e.sessionId === query.sessionId);
|
|
17
|
+
}
|
|
18
|
+
if (query?.label) {
|
|
19
|
+
entries = entries.filter(e => e.label === query.label);
|
|
20
|
+
}
|
|
21
|
+
const order = query?.order ?? 'desc';
|
|
22
|
+
entries.sort((a, b) => {
|
|
23
|
+
const cmp = a.createdAt.localeCompare(b.createdAt);
|
|
24
|
+
return order === 'asc' ? cmp : -cmp;
|
|
25
|
+
});
|
|
26
|
+
if (query?.limit !== undefined && query.limit > 0) {
|
|
27
|
+
entries = entries.slice(0, query.limit);
|
|
28
|
+
}
|
|
29
|
+
return entries.map(e => structuredClone(e));
|
|
30
|
+
}
|
|
31
|
+
async delete(id) {
|
|
32
|
+
this.store.delete(id);
|
|
33
|
+
}
|
|
34
|
+
async deleteSession(sessionId) {
|
|
35
|
+
for (const [id, entry] of this.store) {
|
|
36
|
+
if (entry.sessionId === sessionId) {
|
|
37
|
+
this.store.delete(id);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Test helper: returns the current count of stored checkpoints */
|
|
42
|
+
get size() {
|
|
43
|
+
return this.store.size;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../src/checkpoint.ts"],"names":[],"mappings":"AAiDA,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E,MAAM,OAAO,uBAAuB;IAC1B,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAA;IAElD,KAAK,CAAC,IAAI,CAAC,KAAsB;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAChC,OAAO,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAuB;QAChC,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAEtC,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;YACrB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC,CAAA;QAChE,CAAC;QACD,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAA;QACxD,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,MAAM,CAAA;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;YAClD,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF,IAAI,KAAK,EAAE,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QACzC,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardrail verdict:
|
|
3
|
+
* - 'pass': content is safe, continue
|
|
4
|
+
* - 'warn': content is suspicious but not blocked; advisory only
|
|
5
|
+
* - 'block': content must be rejected; agent loop should halt or retry
|
|
6
|
+
*/
|
|
7
|
+
export type GuardrailVerdict = 'pass' | 'warn' | 'block';
|
|
8
|
+
export interface GuardrailResult {
|
|
9
|
+
verdict: GuardrailVerdict;
|
|
10
|
+
/** Human-readable reason when verdict is not 'pass' */
|
|
11
|
+
reason?: string;
|
|
12
|
+
/** Structured metadata for logging/tracing */
|
|
13
|
+
metadata?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface InputGuardrail {
|
|
16
|
+
/** Unique name for this guardrail (used in traces and logs) */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Evaluate user input text. Return a GuardrailResult. */
|
|
19
|
+
evaluate(input: string): GuardrailResult | Promise<GuardrailResult>;
|
|
20
|
+
}
|
|
21
|
+
export interface OutputGuardrail {
|
|
22
|
+
name: string;
|
|
23
|
+
/** Evaluate agent output text. Return a GuardrailResult. */
|
|
24
|
+
evaluate(output: string): GuardrailResult | Promise<GuardrailResult>;
|
|
25
|
+
}
|
|
26
|
+
export interface ToolGuardrailContext {
|
|
27
|
+
toolName: string;
|
|
28
|
+
input: unknown;
|
|
29
|
+
/** Whether the tool is read-only */
|
|
30
|
+
isReadOnly: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface ToolGuardrail {
|
|
33
|
+
name: string;
|
|
34
|
+
/** Evaluate a tool invocation. Return a GuardrailResult. */
|
|
35
|
+
evaluate(context: ToolGuardrailContext): GuardrailResult | Promise<GuardrailResult>;
|
|
36
|
+
}
|
|
37
|
+
export interface GuardrailPipelineResult {
|
|
38
|
+
/** Overall verdict: 'block' if any blocked, 'warn' if any warned, 'pass' otherwise */
|
|
39
|
+
verdict: GuardrailVerdict;
|
|
40
|
+
results: Array<{
|
|
41
|
+
name: string;
|
|
42
|
+
} & GuardrailResult>;
|
|
43
|
+
}
|
|
44
|
+
export declare function runInputGuardrails(guardrails: InputGuardrail[], input: string): Promise<GuardrailPipelineResult>;
|
|
45
|
+
export declare function runOutputGuardrails(guardrails: OutputGuardrail[], output: string): Promise<GuardrailPipelineResult>;
|
|
46
|
+
export declare function runToolGuardrails(guardrails: ToolGuardrail[], context: ToolGuardrailContext): Promise<GuardrailPipelineResult>;
|
|
47
|
+
//# sourceMappingURL=guardrails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../src/guardrails.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAExD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,gBAAgB,CAAA;IACzB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAMD,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACpE;AAMD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACrE;AAMD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;CACpF;AAMD,MAAM,WAAW,uBAAuB;IACtC,sFAAsF;IACtF,OAAO,EAAE,gBAAgB,CAAA;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,CAAC,CAAA;CACnD;AA0BD,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,cAAc,EAAE,EAC5B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,uBAAuB,CAAC,CAElC;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAElC;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,aAAa,EAAE,EAC3B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAElC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Guardrails: typed input/output/tool validators for agent safety
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
async function runGuardrails(guardrails, input) {
|
|
5
|
+
const results = [];
|
|
6
|
+
let overallVerdict = 'pass';
|
|
7
|
+
for (const guardrail of guardrails) {
|
|
8
|
+
const result = await guardrail.evaluate(input);
|
|
9
|
+
results.push({ name: guardrail.name, ...result });
|
|
10
|
+
if (result.verdict === 'block') {
|
|
11
|
+
overallVerdict = 'block';
|
|
12
|
+
// Short-circuit on block: no need to evaluate remaining guardrails
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
if (result.verdict === 'warn' && overallVerdict === 'pass') {
|
|
16
|
+
overallVerdict = 'warn';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return { verdict: overallVerdict, results };
|
|
20
|
+
}
|
|
21
|
+
export async function runInputGuardrails(guardrails, input) {
|
|
22
|
+
return runGuardrails(guardrails, input);
|
|
23
|
+
}
|
|
24
|
+
export async function runOutputGuardrails(guardrails, output) {
|
|
25
|
+
return runGuardrails(guardrails, output);
|
|
26
|
+
}
|
|
27
|
+
export async function runToolGuardrails(guardrails, context) {
|
|
28
|
+
return runGuardrails(guardrails, context);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=guardrails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../src/guardrails.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAkE9E,KAAK,UAAU,aAAa,CAC1B,UAAuG,EACvG,KAAQ;IAER,MAAM,OAAO,GAA8C,EAAE,CAAA;IAC7D,IAAI,cAAc,GAAqB,MAAM,CAAA;IAE7C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;QAEjD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,cAAc,GAAG,OAAO,CAAA;YACxB,mEAAmE;YACnE,MAAK;QACP,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;YAC3D,cAAc,GAAG,MAAM,CAAA;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,CAAA;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAA4B,EAC5B,KAAa;IAEb,OAAO,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAA6B,EAC7B,MAAc;IAEd,OAAO,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAA2B,EAC3B,OAA6B;IAE7B,OAAO,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { AgentMessage } from './messages.js';
|
|
2
|
+
import type { AgentToolDefinition } from './tools.js';
|
|
3
|
+
/**
|
|
4
|
+
* Who is involved in a handoff.
|
|
5
|
+
*/
|
|
6
|
+
export interface HandoffParticipant {
|
|
7
|
+
/** Agent identifier (e.g., 'code-reviewer', 'data-analyst') */
|
|
8
|
+
agentId: string;
|
|
9
|
+
/** Human-readable description of this agent's role */
|
|
10
|
+
role?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* What context is transferred during a handoff.
|
|
14
|
+
*/
|
|
15
|
+
export interface HandoffContext {
|
|
16
|
+
/** Conversation history to pass (may be filtered/summarized) */
|
|
17
|
+
messages?: AgentMessage[];
|
|
18
|
+
/** Tools the target agent is allowed to use */
|
|
19
|
+
allowedTools?: string[];
|
|
20
|
+
/** Tool definitions to inject (custom tools from the source) */
|
|
21
|
+
toolDefinitions?: AgentToolDefinition[];
|
|
22
|
+
/** Working directory or scope */
|
|
23
|
+
cwd?: string;
|
|
24
|
+
/** Arbitrary structured context */
|
|
25
|
+
metadata?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* How the handoff should be executed.
|
|
29
|
+
*/
|
|
30
|
+
export type HandoffMode =
|
|
31
|
+
/** Target runs to completion, result returned to source */
|
|
32
|
+
'delegate'
|
|
33
|
+
/** Source transfers full control; does not expect a return */
|
|
34
|
+
| 'transfer'
|
|
35
|
+
/** Target runs in parallel; source continues independently */
|
|
36
|
+
| 'parallel';
|
|
37
|
+
/**
|
|
38
|
+
* Permission policy for the handoff target.
|
|
39
|
+
*/
|
|
40
|
+
export type HandoffPermissionPolicy =
|
|
41
|
+
/** Target inherits source's permissions */
|
|
42
|
+
'inherit'
|
|
43
|
+
/** Target gets read-only subset */
|
|
44
|
+
| 'read_only'
|
|
45
|
+
/** Target gets explicit tool allowlist from context */
|
|
46
|
+
| 'allowlist'
|
|
47
|
+
/** Target runs with no tool permissions (analysis only) */
|
|
48
|
+
| 'none';
|
|
49
|
+
/**
|
|
50
|
+
* A request to hand off work to another agent.
|
|
51
|
+
*/
|
|
52
|
+
export interface HandoffRequest {
|
|
53
|
+
/** Who is initiating the handoff */
|
|
54
|
+
source: HandoffParticipant;
|
|
55
|
+
/** Who should receive the work */
|
|
56
|
+
target: HandoffParticipant;
|
|
57
|
+
/** The task description / prompt for the target */
|
|
58
|
+
prompt: string;
|
|
59
|
+
/** Execution mode */
|
|
60
|
+
mode: HandoffMode;
|
|
61
|
+
/** Permission policy for the target */
|
|
62
|
+
permissionPolicy: HandoffPermissionPolicy;
|
|
63
|
+
/** Context to transfer */
|
|
64
|
+
context?: HandoffContext;
|
|
65
|
+
/** Maximum turns the target may execute (for 'delegate' mode) */
|
|
66
|
+
maxTurns?: number;
|
|
67
|
+
/** Timeout in milliseconds */
|
|
68
|
+
timeoutMs?: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The result of a completed handoff.
|
|
72
|
+
*/
|
|
73
|
+
export type HandoffStatus = 'completed' | 'failed' | 'timeout' | 'cancelled';
|
|
74
|
+
export interface HandoffResult {
|
|
75
|
+
/** The original request */
|
|
76
|
+
request: HandoffRequest;
|
|
77
|
+
/** Completion status */
|
|
78
|
+
status: HandoffStatus;
|
|
79
|
+
/** The target agent's final text output */
|
|
80
|
+
output?: string;
|
|
81
|
+
/** Messages produced by the target during execution */
|
|
82
|
+
messages?: AgentMessage[];
|
|
83
|
+
/** Error message if status is 'failed' */
|
|
84
|
+
error?: string;
|
|
85
|
+
/** Execution metadata (duration, token usage, etc.) */
|
|
86
|
+
metadata?: Record<string, unknown>;
|
|
87
|
+
}
|
|
88
|
+
export interface HandoffRouter {
|
|
89
|
+
/** Resolve which agent should handle a handoff request. Returns undefined if no match. */
|
|
90
|
+
resolve(request: HandoffRequest): HandoffParticipant | undefined;
|
|
91
|
+
/** List all available agents that can be handed off to. */
|
|
92
|
+
listAgents(): HandoffParticipant[];
|
|
93
|
+
}
|
|
94
|
+
export declare class InMemoryHandoffRouter implements HandoffRouter {
|
|
95
|
+
private agents;
|
|
96
|
+
register(agent: HandoffParticipant): void;
|
|
97
|
+
unregister(agentId: string): void;
|
|
98
|
+
resolve(request: HandoffRequest): HandoffParticipant | undefined;
|
|
99
|
+
listAgents(): HandoffParticipant[];
|
|
100
|
+
}
|
|
101
|
+
export declare function createHandoffRequest(params: {
|
|
102
|
+
sourceId: string;
|
|
103
|
+
targetId: string;
|
|
104
|
+
prompt: string;
|
|
105
|
+
mode?: HandoffMode;
|
|
106
|
+
permissionPolicy?: HandoffPermissionPolicy;
|
|
107
|
+
context?: HandoffContext;
|
|
108
|
+
maxTurns?: number;
|
|
109
|
+
timeoutMs?: number;
|
|
110
|
+
}): HandoffRequest;
|
|
111
|
+
export declare function createHandoffResult(request: HandoffRequest, status: HandoffStatus, output?: string, error?: string): HandoffResult;
|
|
112
|
+
//# sourceMappingURL=handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"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"}
|
package/dist/handoff.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// InMemoryHandoffRouter: simple registry-based implementation
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
export class InMemoryHandoffRouter {
|
|
5
|
+
agents = new Map();
|
|
6
|
+
register(agent) {
|
|
7
|
+
this.agents.set(agent.agentId, agent);
|
|
8
|
+
}
|
|
9
|
+
unregister(agentId) {
|
|
10
|
+
this.agents.delete(agentId);
|
|
11
|
+
}
|
|
12
|
+
resolve(request) {
|
|
13
|
+
return this.agents.get(request.target.agentId);
|
|
14
|
+
}
|
|
15
|
+
listAgents() {
|
|
16
|
+
return [...this.agents.values()];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Helpers
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
export function createHandoffRequest(params) {
|
|
23
|
+
return {
|
|
24
|
+
source: { agentId: params.sourceId },
|
|
25
|
+
target: { agentId: params.targetId },
|
|
26
|
+
prompt: params.prompt,
|
|
27
|
+
mode: params.mode ?? 'delegate',
|
|
28
|
+
permissionPolicy: params.permissionPolicy ?? 'inherit',
|
|
29
|
+
context: params.context,
|
|
30
|
+
maxTurns: params.maxTurns,
|
|
31
|
+
timeoutMs: params.timeoutMs,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function createHandoffResult(request, status, output, error) {
|
|
35
|
+
return {
|
|
36
|
+
request,
|
|
37
|
+
status,
|
|
38
|
+
...(output !== undefined ? { output } : {}),
|
|
39
|
+
...(error !== undefined ? { error } : {}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AA8GA,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAE9E,MAAM,OAAO,qBAAqB;IACxB,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAA;IAEtD,QAAQ,CAAC,KAAyB;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACvC,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAClC,CAAC;CACF;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,UAAU,oBAAoB,CAAC,MASpC;IACC,OAAO;QACL,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE;QACpC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE;QACpC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,UAAU;QAC/B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,SAAS;QACtD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,MAAqB,EACrB,MAAe,EACf,KAAc;IAEd,OAAO;QACL,OAAO;QACP,MAAM;QACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAA;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './capabilities.js';
|
|
2
|
+
export * from './checkpoint.js';
|
|
3
|
+
export * from './guardrails.js';
|
|
4
|
+
export * from './handoff.js';
|
|
5
|
+
export * from './mcpServer.js';
|
|
6
|
+
export * from './memory.js';
|
|
7
|
+
export * from './messages.js';
|
|
8
|
+
export * from './provider.js';
|
|
9
|
+
export * from './runManifest.js';
|
|
10
|
+
export * from './tools.js';
|
|
11
|
+
export * from './trace.js';
|
|
12
|
+
export * from './workflow.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './capabilities.js';
|
|
2
|
+
export * from './checkpoint.js';
|
|
3
|
+
export * from './guardrails.js';
|
|
4
|
+
export * from './handoff.js';
|
|
5
|
+
export * from './mcpServer.js';
|
|
6
|
+
export * from './memory.js';
|
|
7
|
+
export * from './messages.js';
|
|
8
|
+
export * from './provider.js';
|
|
9
|
+
export * from './runManifest.js';
|
|
10
|
+
export * from './tools.js';
|
|
11
|
+
export * from './trace.js';
|
|
12
|
+
export * from './workflow.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A tool that the MCP server exposes to clients.
|
|
3
|
+
*/
|
|
4
|
+
export interface MCPServerTool {
|
|
5
|
+
/** Unique tool name */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Human-readable description */
|
|
8
|
+
description: string;
|
|
9
|
+
/** JSON Schema for the tool's input */
|
|
10
|
+
inputSchema: Record<string, unknown>;
|
|
11
|
+
/** Execute the tool with validated input. Returns string content. */
|
|
12
|
+
execute(input: unknown): Promise<MCPToolResponse>;
|
|
13
|
+
}
|
|
14
|
+
export interface MCPToolResponse {
|
|
15
|
+
content: string;
|
|
16
|
+
isError?: boolean;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A resource the MCP server exposes to clients (files, data, context).
|
|
21
|
+
*/
|
|
22
|
+
export interface MCPServerResource {
|
|
23
|
+
/** URI identifying this resource (e.g., "file:///workspace/README.md") */
|
|
24
|
+
uri: string;
|
|
25
|
+
/** Human-readable name */
|
|
26
|
+
name: string;
|
|
27
|
+
/** MIME type */
|
|
28
|
+
mimeType: string;
|
|
29
|
+
/** Description of what this resource contains */
|
|
30
|
+
description?: string;
|
|
31
|
+
/** Read the resource content. */
|
|
32
|
+
read(): Promise<MCPResourceContent>;
|
|
33
|
+
}
|
|
34
|
+
export interface MCPResourceContent {
|
|
35
|
+
uri: string;
|
|
36
|
+
mimeType: string;
|
|
37
|
+
text?: string;
|
|
38
|
+
blob?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A prompt template the MCP server exposes to clients.
|
|
42
|
+
*/
|
|
43
|
+
export interface MCPServerPrompt {
|
|
44
|
+
/** Unique prompt name */
|
|
45
|
+
name: string;
|
|
46
|
+
/** Human-readable description */
|
|
47
|
+
description: string;
|
|
48
|
+
/** Parameters this prompt accepts */
|
|
49
|
+
arguments?: MCPPromptArgument[];
|
|
50
|
+
/** Generate the prompt messages from arguments. */
|
|
51
|
+
generate(args: Record<string, string>): Promise<MCPPromptMessage[]>;
|
|
52
|
+
}
|
|
53
|
+
export interface MCPPromptArgument {
|
|
54
|
+
name: string;
|
|
55
|
+
description?: string;
|
|
56
|
+
required?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface MCPPromptMessage {
|
|
59
|
+
role: 'user' | 'assistant';
|
|
60
|
+
content: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Sampling: allow the MCP client to request a completion from the server's model.
|
|
64
|
+
*/
|
|
65
|
+
export interface MCPSamplingRequest {
|
|
66
|
+
messages: MCPPromptMessage[];
|
|
67
|
+
model?: string;
|
|
68
|
+
maxTokens?: number;
|
|
69
|
+
temperature?: number;
|
|
70
|
+
}
|
|
71
|
+
export interface MCPSamplingResponse {
|
|
72
|
+
role: 'assistant';
|
|
73
|
+
content: string;
|
|
74
|
+
model: string;
|
|
75
|
+
stopReason?: string;
|
|
76
|
+
}
|
|
77
|
+
export type MCPSamplingHandler = (request: MCPSamplingRequest) => Promise<MCPSamplingResponse>;
|
|
78
|
+
export interface MCPServerCapabilities {
|
|
79
|
+
tools: boolean;
|
|
80
|
+
resources: boolean;
|
|
81
|
+
prompts: boolean;
|
|
82
|
+
sampling: boolean;
|
|
83
|
+
}
|
|
84
|
+
export interface MCPServer {
|
|
85
|
+
/** Server name */
|
|
86
|
+
name: string;
|
|
87
|
+
/** Server version */
|
|
88
|
+
version: string;
|
|
89
|
+
/** Declared capabilities */
|
|
90
|
+
capabilities: MCPServerCapabilities;
|
|
91
|
+
/** Register a tool */
|
|
92
|
+
addTool(tool: MCPServerTool): void;
|
|
93
|
+
/** Remove a tool by name */
|
|
94
|
+
removeTool(name: string): void;
|
|
95
|
+
/** List all registered tools */
|
|
96
|
+
listTools(): MCPServerTool[];
|
|
97
|
+
/** Execute a tool by name */
|
|
98
|
+
callTool(name: string, input: unknown): Promise<MCPToolResponse>;
|
|
99
|
+
/** Register a resource */
|
|
100
|
+
addResource(resource: MCPServerResource): void;
|
|
101
|
+
/** Remove a resource by URI */
|
|
102
|
+
removeResource(uri: string): void;
|
|
103
|
+
/** List all registered resources */
|
|
104
|
+
listResources(): MCPServerResource[];
|
|
105
|
+
/** Read a resource by URI */
|
|
106
|
+
readResource(uri: string): Promise<MCPResourceContent>;
|
|
107
|
+
/** Register a prompt */
|
|
108
|
+
addPrompt(prompt: MCPServerPrompt): void;
|
|
109
|
+
/** Remove a prompt by name */
|
|
110
|
+
removePrompt(name: string): void;
|
|
111
|
+
/** List all registered prompts */
|
|
112
|
+
listPrompts(): MCPServerPrompt[];
|
|
113
|
+
/** Generate a prompt by name */
|
|
114
|
+
getPrompt(name: string, args: Record<string, string>): Promise<MCPPromptMessage[]>;
|
|
115
|
+
/** Set the sampling handler */
|
|
116
|
+
setSamplingHandler(handler: MCPSamplingHandler): void;
|
|
117
|
+
}
|
|
118
|
+
export declare class InMemoryMCPServer implements MCPServer {
|
|
119
|
+
readonly name: string;
|
|
120
|
+
readonly version: string;
|
|
121
|
+
readonly capabilities: MCPServerCapabilities;
|
|
122
|
+
private tools;
|
|
123
|
+
private resources;
|
|
124
|
+
private prompts;
|
|
125
|
+
private samplingHandler?;
|
|
126
|
+
constructor(name: string, version: string);
|
|
127
|
+
addTool(tool: MCPServerTool): void;
|
|
128
|
+
removeTool(name: string): void;
|
|
129
|
+
listTools(): MCPServerTool[];
|
|
130
|
+
callTool(name: string, input: unknown): Promise<MCPToolResponse>;
|
|
131
|
+
addResource(resource: MCPServerResource): void;
|
|
132
|
+
removeResource(uri: string): void;
|
|
133
|
+
listResources(): MCPServerResource[];
|
|
134
|
+
readResource(uri: string): Promise<MCPResourceContent>;
|
|
135
|
+
addPrompt(prompt: MCPServerPrompt): void;
|
|
136
|
+
removePrompt(name: string): void;
|
|
137
|
+
listPrompts(): MCPServerPrompt[];
|
|
138
|
+
getPrompt(name: string, args: Record<string, string>): Promise<MCPPromptMessage[]>;
|
|
139
|
+
setSamplingHandler(handler: MCPSamplingHandler): void;
|
|
140
|
+
createSampling(request: MCPSamplingRequest): Promise<MCPSamplingResponse>;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=mcpServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpServer.d.ts","sourceRoot":"","sources":["../src/mcpServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// MCP Server: contract for exposing agent capabilities to external consumers
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// InMemoryMCPServer: reference implementation
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
export class InMemoryMCPServer {
|
|
8
|
+
name;
|
|
9
|
+
version;
|
|
10
|
+
capabilities;
|
|
11
|
+
tools = new Map();
|
|
12
|
+
resources = new Map();
|
|
13
|
+
prompts = new Map();
|
|
14
|
+
samplingHandler;
|
|
15
|
+
constructor(name, version) {
|
|
16
|
+
this.name = name;
|
|
17
|
+
this.version = version;
|
|
18
|
+
this.capabilities = { tools: true, resources: true, prompts: true, sampling: false };
|
|
19
|
+
}
|
|
20
|
+
addTool(tool) { this.tools.set(tool.name, tool); }
|
|
21
|
+
removeTool(name) { this.tools.delete(name); }
|
|
22
|
+
listTools() { return [...this.tools.values()]; }
|
|
23
|
+
async callTool(name, input) {
|
|
24
|
+
const tool = this.tools.get(name);
|
|
25
|
+
if (!tool)
|
|
26
|
+
return { content: `Tool "${name}" not found`, isError: true };
|
|
27
|
+
return tool.execute(input);
|
|
28
|
+
}
|
|
29
|
+
addResource(resource) { this.resources.set(resource.uri, resource); }
|
|
30
|
+
removeResource(uri) { this.resources.delete(uri); }
|
|
31
|
+
listResources() { return [...this.resources.values()]; }
|
|
32
|
+
async readResource(uri) {
|
|
33
|
+
const resource = this.resources.get(uri);
|
|
34
|
+
if (!resource)
|
|
35
|
+
throw new Error(`Resource "${uri}" not found`);
|
|
36
|
+
return resource.read();
|
|
37
|
+
}
|
|
38
|
+
addPrompt(prompt) { this.prompts.set(prompt.name, prompt); }
|
|
39
|
+
removePrompt(name) { this.prompts.delete(name); }
|
|
40
|
+
listPrompts() { return [...this.prompts.values()]; }
|
|
41
|
+
async getPrompt(name, args) {
|
|
42
|
+
const prompt = this.prompts.get(name);
|
|
43
|
+
if (!prompt)
|
|
44
|
+
throw new Error(`Prompt "${name}" not found`);
|
|
45
|
+
return prompt.generate(args);
|
|
46
|
+
}
|
|
47
|
+
setSamplingHandler(handler) {
|
|
48
|
+
this.samplingHandler = handler;
|
|
49
|
+
this.capabilities.sampling = true;
|
|
50
|
+
}
|
|
51
|
+
async createSampling(request) {
|
|
52
|
+
if (!this.samplingHandler)
|
|
53
|
+
throw new Error('Sampling not configured');
|
|
54
|
+
return this.samplingHandler(request);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=mcpServer.js.map
|