@hanfani/core 0.1.1
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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/conformance.d.ts +25 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +90 -0
- package/dist/conformance.js.map +1 -0
- package/dist/defineAgent.d.ts +76 -0
- package/dist/defineAgent.d.ts.map +1 -0
- package/dist/defineAgent.js +59 -0
- package/dist/defineAgent.js.map +1 -0
- package/dist/definePrompt.d.ts +15 -0
- package/dist/definePrompt.d.ts.map +1 -0
- package/dist/definePrompt.js +23 -0
- package/dist/definePrompt.js.map +1 -0
- package/dist/defineWorkflow.d.ts +10 -0
- package/dist/defineWorkflow.d.ts.map +1 -0
- package/dist/defineWorkflow.js +38 -0
- package/dist/defineWorkflow.js.map +1 -0
- package/dist/delivery.d.ts +8 -0
- package/dist/delivery.d.ts.map +1 -0
- package/dist/delivery.js +21 -0
- package/dist/delivery.js.map +1 -0
- package/dist/fold.d.ts +8 -0
- package/dist/fold.d.ts.map +1 -0
- package/dist/fold.js +98 -0
- package/dist/fold.js.map +1 -0
- package/dist/gate.d.ts +25 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +22 -0
- package/dist/gate.js.map +1 -0
- package/dist/handoff.d.ts +77 -0
- package/dist/handoff.d.ts.map +1 -0
- package/dist/handoff.js +52 -0
- package/dist/handoff.js.map +1 -0
- package/dist/handoffNote.d.ts +11 -0
- package/dist/handoffNote.d.ts.map +1 -0
- package/dist/handoffNote.js +6 -0
- package/dist/handoffNote.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +9 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +13 -0
- package/dist/integration.js.map +1 -0
- package/dist/integrationAuth.d.ts +8 -0
- package/dist/integrationAuth.d.ts.map +1 -0
- package/dist/integrationAuth.js +5 -0
- package/dist/integrationAuth.js.map +1 -0
- package/dist/lifecycle.d.ts +16 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +57 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/lifecycleNote.d.ts +13 -0
- package/dist/lifecycleNote.d.ts.map +1 -0
- package/dist/lifecycleNote.js +17 -0
- package/dist/lifecycleNote.js.map +1 -0
- package/dist/messages.d.ts +21 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +78 -0
- package/dist/messages.js.map +1 -0
- package/dist/prompt.d.ts +3 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +6 -0
- package/dist/prompt.js.map +1 -0
- package/dist/providers.d.ts +4 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +12 -0
- package/dist/providers.js.map +1 -0
- package/dist/types.d.ts +158 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -0
- package/src/conformance.ts +118 -0
- package/src/defineAgent.ts +63 -0
- package/src/definePrompt.ts +33 -0
- package/src/defineWorkflow.ts +52 -0
- package/src/delivery.ts +28 -0
- package/src/fold.ts +129 -0
- package/src/gate.ts +26 -0
- package/src/handoff.ts +58 -0
- package/src/handoffNote.ts +15 -0
- package/src/index.ts +101 -0
- package/src/integration.ts +14 -0
- package/src/integrationAuth.ts +8 -0
- package/src/lifecycle.ts +61 -0
- package/src/lifecycleNote.ts +27 -0
- package/src/messages.ts +99 -0
- package/src/prompt.ts +8 -0
- package/src/providers.ts +12 -0
- package/src/types.ts +151 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,WAAW,EAAG,aAAsB,CAAA;AAEjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAKhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE,8DAA8D;AAC9D,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAElE;AAED,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,GAAG,IAAI,CAKvE"}
|
package/dist/gate.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { EventType } from '@ag-ui/client';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export const GATE_OPENED = 'GATE_OPENED';
|
|
4
|
+
export const GateOpenedValueSchema = z.object({
|
|
5
|
+
gateKind: z.literal('approval'),
|
|
6
|
+
toolName: z.string(),
|
|
7
|
+
toolCallId: z.string(),
|
|
8
|
+
proposedArtifact: z.record(z.unknown()),
|
|
9
|
+
});
|
|
10
|
+
/** Emit the custom event that opens a human-approval gate. */
|
|
11
|
+
export function gateOpened(value) {
|
|
12
|
+
return { type: EventType.CUSTOM, name: GATE_OPENED, value };
|
|
13
|
+
}
|
|
14
|
+
/** Read a GATE_OPENED value off an event, or null if it isn't one. */
|
|
15
|
+
export function readGateOpened(event) {
|
|
16
|
+
const e = event;
|
|
17
|
+
if (e.type !== EventType.CUSTOM || e.name !== GATE_OPENED)
|
|
18
|
+
return null;
|
|
19
|
+
const parsed = GateOpenedValueSchema.safeParse(e.value);
|
|
20
|
+
return parsed.success ? parsed.data : null;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=gate.js.map
|
package/dist/gate.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,WAAW,GAAG,aAAsB,CAAA;AAEjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CACxC,CAAC,CAAA;AAGF,8DAA8D;AAC9D,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAqB,CAAA;AAChF,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,MAAM,CAAC,GAAG,KAAwB,CAAA;IAClC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IACtE,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACvD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAC5C,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { Message, RunAgentInput } from '@ag-ui/client';
|
|
3
|
+
export declare const HandoffPayloadSchema: z.ZodObject<{
|
|
4
|
+
threadId: z.ZodString;
|
|
5
|
+
from: z.ZodString;
|
|
6
|
+
subject: z.ZodString;
|
|
7
|
+
summary: z.ZodString;
|
|
8
|
+
category: z.ZodString;
|
|
9
|
+
priority: z.ZodString;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
threadId: string;
|
|
12
|
+
from: string;
|
|
13
|
+
subject: string;
|
|
14
|
+
summary: string;
|
|
15
|
+
category: string;
|
|
16
|
+
priority: string;
|
|
17
|
+
}, {
|
|
18
|
+
threadId: string;
|
|
19
|
+
from: string;
|
|
20
|
+
subject: string;
|
|
21
|
+
summary: string;
|
|
22
|
+
category: string;
|
|
23
|
+
priority: string;
|
|
24
|
+
}>;
|
|
25
|
+
export type HandoffPayload = z.infer<typeof HandoffPayloadSchema>;
|
|
26
|
+
export declare const TicketHandoffPayloadSchema: z.ZodObject<{
|
|
27
|
+
repo: z.ZodString;
|
|
28
|
+
number: z.ZodNumber;
|
|
29
|
+
title: z.ZodString;
|
|
30
|
+
status: z.ZodString;
|
|
31
|
+
priority: z.ZodString;
|
|
32
|
+
body: z.ZodString;
|
|
33
|
+
lastComment: z.ZodNullable<z.ZodObject<{
|
|
34
|
+
author: z.ZodString;
|
|
35
|
+
body: z.ZodString;
|
|
36
|
+
}, "strip", z.ZodTypeAny, {
|
|
37
|
+
author: string;
|
|
38
|
+
body: string;
|
|
39
|
+
}, {
|
|
40
|
+
author: string;
|
|
41
|
+
body: string;
|
|
42
|
+
}>>;
|
|
43
|
+
recommendation: z.ZodString;
|
|
44
|
+
url: z.ZodString;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
repo: string;
|
|
47
|
+
number: number;
|
|
48
|
+
title: string;
|
|
49
|
+
status: string;
|
|
50
|
+
priority: string;
|
|
51
|
+
body: string;
|
|
52
|
+
lastComment: {
|
|
53
|
+
author: string;
|
|
54
|
+
body: string;
|
|
55
|
+
} | null;
|
|
56
|
+
recommendation: string;
|
|
57
|
+
url: string;
|
|
58
|
+
}, {
|
|
59
|
+
repo: string;
|
|
60
|
+
number: number;
|
|
61
|
+
title: string;
|
|
62
|
+
status: string;
|
|
63
|
+
priority: string;
|
|
64
|
+
body: string;
|
|
65
|
+
lastComment: {
|
|
66
|
+
author: string;
|
|
67
|
+
body: string;
|
|
68
|
+
} | null;
|
|
69
|
+
recommendation: string;
|
|
70
|
+
url: string;
|
|
71
|
+
}>;
|
|
72
|
+
export type TicketHandoffPayload = z.infer<typeof TicketHandoffPayloadSchema>;
|
|
73
|
+
/** Encode a payload as a user message that downstream agents can decode. */
|
|
74
|
+
export declare function encodeHandoff(payload: unknown): Message;
|
|
75
|
+
/** Decode the most recent handoff payload in the run input, validated by `schema`. */
|
|
76
|
+
export declare function decodeHandoff<T>(input: RunAgentInput, schema: z.ZodType<T>): T | null;
|
|
77
|
+
//# sourceMappingURL=handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE3D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAO/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAerC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAI7E,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAMvD;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAcrF"}
|
package/dist/handoff.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const HandoffPayloadSchema = z.object({
|
|
3
|
+
threadId: z.string(),
|
|
4
|
+
from: z.string(),
|
|
5
|
+
subject: z.string(),
|
|
6
|
+
summary: z.string(),
|
|
7
|
+
category: z.string(),
|
|
8
|
+
priority: z.string(),
|
|
9
|
+
});
|
|
10
|
+
export const TicketHandoffPayloadSchema = z.object({
|
|
11
|
+
repo: z.string(),
|
|
12
|
+
number: z.number(),
|
|
13
|
+
title: z.string(),
|
|
14
|
+
status: z.string(),
|
|
15
|
+
priority: z.string(),
|
|
16
|
+
body: z.string(),
|
|
17
|
+
lastComment: z
|
|
18
|
+
.object({
|
|
19
|
+
author: z.string(),
|
|
20
|
+
body: z.string(),
|
|
21
|
+
})
|
|
22
|
+
.nullable(),
|
|
23
|
+
recommendation: z.string(),
|
|
24
|
+
url: z.string(),
|
|
25
|
+
});
|
|
26
|
+
const HANDOFF_PREFIX = '[handoff]';
|
|
27
|
+
/** Encode a payload as a user message that downstream agents can decode. */
|
|
28
|
+
export function encodeHandoff(payload) {
|
|
29
|
+
return {
|
|
30
|
+
id: crypto.randomUUID(),
|
|
31
|
+
role: 'user',
|
|
32
|
+
content: `${HANDOFF_PREFIX} ${JSON.stringify(payload)}`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** Decode the most recent handoff payload in the run input, validated by `schema`. */
|
|
36
|
+
export function decodeHandoff(input, schema) {
|
|
37
|
+
const messages = input?.messages ?? [];
|
|
38
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
39
|
+
const m = messages[i];
|
|
40
|
+
if (m && m.role === 'user' && typeof m.content === 'string' && m.content.startsWith(HANDOFF_PREFIX)) {
|
|
41
|
+
try {
|
|
42
|
+
const parsed = schema.safeParse(JSON.parse(m.content.slice(HANDOFF_PREFIX.length).trim()));
|
|
43
|
+
return parsed.success ? parsed.data : null;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC;SACX,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;KACjB,CAAC;SACD,QAAQ,EAAE;IACb,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAA;AAGF,MAAM,cAAc,GAAG,WAAW,CAAA;AAElC,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;QACvB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,GAAG,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;KACxD,CAAA;AACH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAI,KAAoB,EAAE,MAAoB;IACzE,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAA;IACtC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACpG,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC1F,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BaseEvent } from '@ag-ui/client';
|
|
2
|
+
export interface HandoffNoteValue {
|
|
3
|
+
kind: 'handoff';
|
|
4
|
+
targetAgentId: string;
|
|
5
|
+
childWorkItemId: string;
|
|
6
|
+
deduped: boolean;
|
|
7
|
+
at: number;
|
|
8
|
+
}
|
|
9
|
+
/** Emit a handoff note event. */
|
|
10
|
+
export declare function handoffNote(value: HandoffNoteValue): BaseEvent;
|
|
11
|
+
//# sourceMappingURL=handoffNote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoffNote.d.ts","sourceRoot":"","sources":["../src/handoffNote.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,iCAAiC;AACjC,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAE9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoffNote.js","sourceRoot":"","sources":["../src/handoffNote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAWzC,iCAAiC;AACjC,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAA0B,CAAA;AACnF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type { Message, ToolCall } from '@ag-ui/client';
|
|
2
|
+
export { AgentDefinitionSchema, defineAgent, type AgentDefinition, type AgentDefinitionInput, } from './defineAgent.js';
|
|
3
|
+
export { defineWorkflow, instanceId } from './defineWorkflow.js';
|
|
4
|
+
export { definePrompt, type PromptSpec } from './definePrompt.js';
|
|
5
|
+
export { defineProviders } from './providers.js';
|
|
6
|
+
export { composeInstructions } from './prompt.js';
|
|
7
|
+
export { approvalResolved, hasPendingApproval, isAssistant, isToolMessage, lastApprovalArgs, pairToolResults, resolvedApprovalCount, toolCallsOf, type AssistantMessage, type ToolMessage, } from './messages.js';
|
|
8
|
+
export { decodeHandoff, encodeHandoff, HandoffPayloadSchema, TicketHandoffPayloadSchema, type HandoffPayload, type TicketHandoffPayload, } from './handoff.js';
|
|
9
|
+
export { handoffNote, type HandoffNoteValue } from './handoffNote.js';
|
|
10
|
+
export { GATE_OPENED, gateOpened, GateOpenedValueSchema, readGateOpened, type GateOpenedValue, } from './gate.js';
|
|
11
|
+
export { LIFECYCLE_NOTE_TEXT, lifecycleNote, type LifecycleNoteValue } from './lifecycleNote.js';
|
|
12
|
+
export { hasLiveDescendant, lifecycle } from './lifecycle.js';
|
|
13
|
+
export { foldEventsToMessages } from './fold.js';
|
|
14
|
+
export { resolveDelivery } from './delivery.js';
|
|
15
|
+
export { providerConformanceChecks, type ConformanceCheck, type ConformanceScenario, } from './conformance.js';
|
|
16
|
+
export { aggregateHealth, isOk } from './integration.js';
|
|
17
|
+
export { isOAuth2 } from './integrationAuth.js';
|
|
18
|
+
export type { AgentRole, AuthSpec, BatchActionResult, CredentialResolver, DeliveryResult, Destination, EffectFn, GateResolution, HealthCheck, Lifecycle, Outcome, Phase, PromptStrategy, Provider, ProviderConfig, ProviderFactory, ProviderRegistry, ReadResult, ResolvedCredential, ResumeHandle, ResumeOutcome, WorkflowAgent, WorkflowConnection, WorkflowDescriptor, WorkflowInput, } from './types.js';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEtD,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,WAAW,GACjB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAErE,OAAO,EACL,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,cAAc,EACd,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEhG,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EACL,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE/C,YAAY,EACV,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,QAAQ,EACR,cAAc,EACd,WAAW,EACX,SAAS,EACT,OAAO,EACP,KAAK,EACL,cAAc,EACd,QAAQ,EACR,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,GACd,MAAM,YAAY,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @hanfani/core — headless engine and types for the Hanfani agent framework.
|
|
2
|
+
//
|
|
3
|
+
// The one invariant this package encodes: an agent proposes, a human approves,
|
|
4
|
+
// the server acts. `defineAgent` refuses any effect that isn't gated behind an
|
|
5
|
+
// approval; the conformance suite proves providers honour that at runtime.
|
|
6
|
+
export { AgentDefinitionSchema, defineAgent, } from './defineAgent.js';
|
|
7
|
+
export { defineWorkflow, instanceId } from './defineWorkflow.js';
|
|
8
|
+
export { definePrompt } from './definePrompt.js';
|
|
9
|
+
export { defineProviders } from './providers.js';
|
|
10
|
+
export { composeInstructions } from './prompt.js';
|
|
11
|
+
export { approvalResolved, hasPendingApproval, isAssistant, isToolMessage, lastApprovalArgs, pairToolResults, resolvedApprovalCount, toolCallsOf, } from './messages.js';
|
|
12
|
+
export { decodeHandoff, encodeHandoff, HandoffPayloadSchema, TicketHandoffPayloadSchema, } from './handoff.js';
|
|
13
|
+
export { handoffNote } from './handoffNote.js';
|
|
14
|
+
export { GATE_OPENED, gateOpened, GateOpenedValueSchema, readGateOpened, } from './gate.js';
|
|
15
|
+
export { LIFECYCLE_NOTE_TEXT, lifecycleNote } from './lifecycleNote.js';
|
|
16
|
+
export { hasLiveDescendant, lifecycle } from './lifecycle.js';
|
|
17
|
+
export { foldEventsToMessages } from './fold.js';
|
|
18
|
+
export { resolveDelivery } from './delivery.js';
|
|
19
|
+
export { providerConformanceChecks, } from './conformance.js';
|
|
20
|
+
export { aggregateHealth, isOk } from './integration.js';
|
|
21
|
+
export { isOAuth2 } from './integrationAuth.js';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAK3E,OAAO,EACL,qBAAqB,EACrB,WAAW,GAGZ,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAA;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,WAAW,GAGZ,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,0BAA0B,GAG3B,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAA;AAErE,OAAO,EACL,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,cAAc,GAEf,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAA;AAEhG,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EACL,yBAAyB,GAG1B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HealthCheck } from './types.js';
|
|
2
|
+
/** Narrow a HealthCheck to its ok variant. */
|
|
3
|
+
export declare function isOk(h: HealthCheck): h is {
|
|
4
|
+
ok: true;
|
|
5
|
+
detail?: string;
|
|
6
|
+
};
|
|
7
|
+
/** Return the first failing check, or an ok result if all pass. */
|
|
8
|
+
export declare function aggregateHealth(checks: HealthCheck[]): HealthCheck;
|
|
9
|
+
//# sourceMappingURL=integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,8CAA8C;AAC9C,wBAAgB,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAEvE;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CAKlE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Narrow a HealthCheck to its ok variant. */
|
|
2
|
+
export function isOk(h) {
|
|
3
|
+
return h.ok;
|
|
4
|
+
}
|
|
5
|
+
/** Return the first failing check, or an ok result if all pass. */
|
|
6
|
+
export function aggregateHealth(checks) {
|
|
7
|
+
for (const check of checks) {
|
|
8
|
+
if (!check.ok)
|
|
9
|
+
return check;
|
|
10
|
+
}
|
|
11
|
+
return { ok: true };
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.js","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"AAEA,8CAA8C;AAC9C,MAAM,UAAU,IAAI,CAAC,CAAc;IACjC,OAAO,CAAC,CAAC,EAAE,CAAA;AACb,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,MAAqB;IACnD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,KAAK,CAAA;IAC7B,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AuthSpec } from './types.js';
|
|
2
|
+
/** Narrow an AuthSpec to its oauth2 variant. */
|
|
3
|
+
export declare function isOAuth2(auth: AuthSpec): auth is {
|
|
4
|
+
kind: 'oauth2';
|
|
5
|
+
provider: string;
|
|
6
|
+
scopes: string[];
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=integrationAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrationAuth.d.ts","sourceRoot":"","sources":["../src/integrationAuth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C,gDAAgD;AAChD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,GACb,IAAI,IAAI;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAEhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrationAuth.js","sourceRoot":"","sources":["../src/integrationAuth.ts"],"names":[],"mappings":"AAEA,gDAAgD;AAChD,MAAM,UAAU,QAAQ,CACtB,IAAc;IAEd,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Lifecycle, Outcome, Phase } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derive display lifecycle from a work item's phase/outcome plus whether it has
|
|
4
|
+
* a render card and whether it has a live descendant.
|
|
5
|
+
*/
|
|
6
|
+
export declare function lifecycle(phase: Phase, outcome: Outcome, hasCard: boolean, hasLiveDescendant: boolean): Lifecycle;
|
|
7
|
+
/**
|
|
8
|
+
* Given flat parent/child rows, return the set of ids that have at least one
|
|
9
|
+
* live descendant (a queued/active/awaiting_human node somewhere below them).
|
|
10
|
+
*/
|
|
11
|
+
export declare function hasLiveDescendant<T extends {
|
|
12
|
+
id: string;
|
|
13
|
+
parentId: string | null;
|
|
14
|
+
phase: Phase;
|
|
15
|
+
}>(rows: readonly T[]): Set<string>;
|
|
16
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAO3D;;;GAGG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,OAAO,GACzB,SAAS,CASX;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,EAC/F,IAAI,EAAE,SAAS,CAAC,EAAE,GACjB,GAAG,CAAC,MAAM,CAAC,CA2Bb"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const LIVE_PHASES = new Set(['queued', 'active', 'awaiting_human']);
|
|
2
|
+
const SILENT_OUTCOMES = new Set(['superseded', 'reset', 'dismissed']);
|
|
3
|
+
const FAILED_OUTCOMES = new Set(['stopped', 'rejected', 'error']);
|
|
4
|
+
const COVERING_OUTCOMES = new Set(['done', 'stopped', 'rejected']);
|
|
5
|
+
/**
|
|
6
|
+
* Derive display lifecycle from a work item's phase/outcome plus whether it has
|
|
7
|
+
* a render card and whether it has a live descendant.
|
|
8
|
+
*/
|
|
9
|
+
export function lifecycle(phase, outcome, hasCard, hasLiveDescendant) {
|
|
10
|
+
const isLive = LIVE_PHASES.has(phase);
|
|
11
|
+
let isVisible;
|
|
12
|
+
if (phase === 'queued')
|
|
13
|
+
isVisible = false;
|
|
14
|
+
else if (isLive)
|
|
15
|
+
isVisible = true;
|
|
16
|
+
else if (SILENT_OUTCOMES.has(outcome))
|
|
17
|
+
isVisible = false;
|
|
18
|
+
else
|
|
19
|
+
isVisible = hasCard || FAILED_OUTCOMES.has(outcome) || hasLiveDescendant;
|
|
20
|
+
const covers = isLive || COVERING_OUTCOMES.has(outcome);
|
|
21
|
+
return { phase, outcome, isLive, isVisible, covers };
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Given flat parent/child rows, return the set of ids that have at least one
|
|
25
|
+
* live descendant (a queued/active/awaiting_human node somewhere below them).
|
|
26
|
+
*/
|
|
27
|
+
export function hasLiveDescendant(rows) {
|
|
28
|
+
const childrenByParent = new Map();
|
|
29
|
+
for (const row of rows) {
|
|
30
|
+
if (!row.parentId)
|
|
31
|
+
continue;
|
|
32
|
+
const siblings = childrenByParent.get(row.parentId) ?? [];
|
|
33
|
+
siblings.push(row);
|
|
34
|
+
childrenByParent.set(row.parentId, siblings);
|
|
35
|
+
}
|
|
36
|
+
const memo = new Map();
|
|
37
|
+
const visit = (id) => {
|
|
38
|
+
const cached = memo.get(id);
|
|
39
|
+
if (cached !== undefined)
|
|
40
|
+
return cached;
|
|
41
|
+
memo.set(id, false); // guard against cycles
|
|
42
|
+
let live = false;
|
|
43
|
+
for (const child of childrenByParent.get(id) ?? []) {
|
|
44
|
+
if (LIVE_PHASES.has(child.phase) || visit(child.id))
|
|
45
|
+
live = true;
|
|
46
|
+
}
|
|
47
|
+
memo.set(id, live);
|
|
48
|
+
return live;
|
|
49
|
+
};
|
|
50
|
+
const result = new Set();
|
|
51
|
+
for (const row of rows) {
|
|
52
|
+
if (visit(row.id))
|
|
53
|
+
result.add(row.id);
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BaseEvent } from '@ag-ui/client';
|
|
2
|
+
import type { Outcome } from './types.js';
|
|
3
|
+
export interface LifecycleNoteValue {
|
|
4
|
+
kind: 'lifecycle';
|
|
5
|
+
outcome: Outcome;
|
|
6
|
+
actor: string | null;
|
|
7
|
+
at: number;
|
|
8
|
+
}
|
|
9
|
+
/** Emit a lifecycle note event. */
|
|
10
|
+
export declare function lifecycleNote(value: LifecycleNoteValue): BaseEvent;
|
|
11
|
+
/** Human-readable label shown for each terminal outcome. */
|
|
12
|
+
export declare const LIFECYCLE_NOTE_TEXT: Record<Outcome, string>;
|
|
13
|
+
//# sourceMappingURL=lifecycleNote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycleNote.d.ts","sourceRoot":"","sources":["../src/lifecycleNote.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAElE;AAED,4DAA4D;AAC5D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CASvD,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EventType } from '@ag-ui/client';
|
|
2
|
+
/** Emit a lifecycle note event. */
|
|
3
|
+
export function lifecycleNote(value) {
|
|
4
|
+
return { type: EventType.CUSTOM, name: 'lifecycle', value };
|
|
5
|
+
}
|
|
6
|
+
/** Human-readable label shown for each terminal outcome. */
|
|
7
|
+
export const LIFECYCLE_NOTE_TEXT = {
|
|
8
|
+
running: '',
|
|
9
|
+
done: 'Done',
|
|
10
|
+
stopped: 'Stopped — cancelled',
|
|
11
|
+
rejected: 'Rejected',
|
|
12
|
+
error: 'Error',
|
|
13
|
+
superseded: 'Superseded by a re-run',
|
|
14
|
+
reset: 'Cleared from board',
|
|
15
|
+
dismissed: 'Error acknowledged — dismissed',
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=lifecycleNote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycleNote.js","sourceRoot":"","sources":["../src/lifecycleNote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAWzC,mCAAmC;AACnC,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAA0B,CAAA;AACrF,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAA4B;IAC1D,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,wBAAwB;IACpC,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,gCAAgC;CAC5C,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Message, ToolCall } from '@ag-ui/client';
|
|
2
|
+
export type AssistantMessage = Extract<Message, {
|
|
3
|
+
role: 'assistant';
|
|
4
|
+
}>;
|
|
5
|
+
export type ToolMessage = Extract<Message, {
|
|
6
|
+
role: 'tool';
|
|
7
|
+
}>;
|
|
8
|
+
export declare function isAssistant(m: Message): m is AssistantMessage;
|
|
9
|
+
export declare function isToolMessage(m: Message): m is ToolMessage;
|
|
10
|
+
export declare function toolCallsOf(m: Message): ToolCall[];
|
|
11
|
+
/** True when an approval tool has been called but has no tool result yet. */
|
|
12
|
+
export declare function hasPendingApproval(messages: readonly Message[], approvalNames: readonly string[]): boolean;
|
|
13
|
+
/** Map each tool result message by the toolCallId it answers. */
|
|
14
|
+
export declare function pairToolResults(messages: readonly Message[]): Map<string, ToolMessage>;
|
|
15
|
+
/** Parsed arguments of the most recent approval tool call, or null. */
|
|
16
|
+
export declare function lastApprovalArgs(messages: readonly Message[], approvalNames: readonly string[]): Record<string, unknown> | null;
|
|
17
|
+
/** How many approval tool calls have a matching tool result. */
|
|
18
|
+
export declare function resolvedApprovalCount(messages: readonly Message[], approvalNames: readonly string[]): number;
|
|
19
|
+
/** True when at least one approval call has resolved. */
|
|
20
|
+
export declare function approvalResolved(messages: readonly Message[], approvalNames: readonly string[]): boolean;
|
|
21
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAAA;AACtE,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE5D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,gBAAgB,CAE7D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAE1D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,CAElD;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAiBT;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAMtF;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAehC;AAED,gEAAgE;AAChE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,CAgBR;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,OAAO,CAET"}
|
package/dist/messages.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export function isAssistant(m) {
|
|
2
|
+
return m.role === 'assistant';
|
|
3
|
+
}
|
|
4
|
+
export function isToolMessage(m) {
|
|
5
|
+
return m.role === 'tool';
|
|
6
|
+
}
|
|
7
|
+
export function toolCallsOf(m) {
|
|
8
|
+
return isAssistant(m) && Array.isArray(m.toolCalls) ? m.toolCalls : [];
|
|
9
|
+
}
|
|
10
|
+
/** True when an approval tool has been called but has no tool result yet. */
|
|
11
|
+
export function hasPendingApproval(messages, approvalNames) {
|
|
12
|
+
const resolvedIds = new Set();
|
|
13
|
+
for (const m of messages) {
|
|
14
|
+
if (isToolMessage(m) && typeof m.toolCallId === 'string')
|
|
15
|
+
resolvedIds.add(m.toolCallId);
|
|
16
|
+
}
|
|
17
|
+
for (const m of messages) {
|
|
18
|
+
for (const call of toolCallsOf(m)) {
|
|
19
|
+
if (approvalNames.includes(call.function.name) &&
|
|
20
|
+
typeof call.id === 'string' &&
|
|
21
|
+
!resolvedIds.has(call.id)) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
/** Map each tool result message by the toolCallId it answers. */
|
|
29
|
+
export function pairToolResults(messages) {
|
|
30
|
+
const byCallId = new Map();
|
|
31
|
+
for (const m of messages) {
|
|
32
|
+
if (isToolMessage(m) && typeof m.toolCallId === 'string')
|
|
33
|
+
byCallId.set(m.toolCallId, m);
|
|
34
|
+
}
|
|
35
|
+
return byCallId;
|
|
36
|
+
}
|
|
37
|
+
/** Parsed arguments of the most recent approval tool call, or null. */
|
|
38
|
+
export function lastApprovalArgs(messages, approvalNames) {
|
|
39
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
40
|
+
const m = messages[i];
|
|
41
|
+
if (!m)
|
|
42
|
+
continue;
|
|
43
|
+
for (const call of toolCallsOf(m)) {
|
|
44
|
+
if (approvalNames.includes(call.function.name)) {
|
|
45
|
+
try {
|
|
46
|
+
return JSON.parse(call.function.arguments);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
/** How many approval tool calls have a matching tool result. */
|
|
57
|
+
export function resolvedApprovalCount(messages, approvalNames) {
|
|
58
|
+
const approvalCallIds = new Set();
|
|
59
|
+
for (const m of messages) {
|
|
60
|
+
for (const call of toolCallsOf(m)) {
|
|
61
|
+
if (approvalNames.includes(call.function.name) && typeof call.id === 'string') {
|
|
62
|
+
approvalCallIds.add(call.id);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const resolved = new Set();
|
|
67
|
+
for (const m of messages) {
|
|
68
|
+
if (isToolMessage(m) && typeof m.toolCallId === 'string' && approvalCallIds.has(m.toolCallId)) {
|
|
69
|
+
resolved.add(m.toolCallId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return resolved.size;
|
|
73
|
+
}
|
|
74
|
+
/** True when at least one approval call has resolved. */
|
|
75
|
+
export function approvalResolved(messages, approvalNames) {
|
|
76
|
+
return resolvedApprovalCount(messages, approvalNames) > 0;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAGR"}
|
package/dist/prompt.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Prepend the workflow-level prompt (if any) to an agent's own instructions. */
|
|
2
|
+
export function composeInstructions(workflowPrompt, agentInstructions) {
|
|
3
|
+
const prefix = workflowPrompt?.trim();
|
|
4
|
+
return prefix ? `${prefix}\n\n${agentInstructions}` : agentInstructions;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CACjC,cAAkC,EAClC,iBAAyB;IAEzB,MAAM,MAAM,GAAG,cAAc,EAAE,IAAI,EAAE,CAAA;IACrC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,iBAAiB,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAA;AACzE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ProviderFactory, ProviderRegistry } from './types.js';
|
|
2
|
+
/** Build a registry that resolves provider factories by name. */
|
|
3
|
+
export declare function defineProviders(map: Record<string, ProviderFactory>): ProviderRegistry;
|
|
4
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEnE,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,gBAAgB,CAQtF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Build a registry that resolves provider factories by name. */
|
|
2
|
+
export function defineProviders(map) {
|
|
3
|
+
return {
|
|
4
|
+
resolve(name) {
|
|
5
|
+
const factory = map[name];
|
|
6
|
+
if (!factory)
|
|
7
|
+
throw new Error(`Unknown provider: ${name}`);
|
|
8
|
+
return factory;
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,GAAoC;IAClE,OAAO;QACL,OAAO,CAAC,IAAY;YAClB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;YACzB,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;YAC1D,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;AACH,CAAC"}
|