@hanfani/core 0.1.2 → 0.1.4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Aziz Mashkour
3
+ Copyright (c) 2026 Fruitizz
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,97 +1,71 @@
1
1
  # @hanfani/core
2
2
 
3
+ [![build status][build-src]][build-href]
4
+ [![npm version][npm-version-src]][npm-version-href]
5
+ [![npm downloads][npm-downloads-src]][npm-downloads-href]
6
+ [![bundle][bundle-src]][bundle-href]
7
+ [![JSDocs][jsdocs-src]][jsdocs-href]
8
+ [![License][license-src]][license-href]
9
+
3
10
  Headless engine and types for the Hanfani agent framework.
4
11
 
5
- Pure logic — no I/O, no server, no React. This is the layer that defines what a
6
- workflow and an agent *are* and enforces the framework's one safety invariant:
7
-
8
- > An agent proposes, a human approves, the server acts.
9
-
10
- `defineAgent` refuses any `effect` that isn't also an `approval`, so a side
11
- effect can never be wired to fire without a human gate. `providerConformanceChecks`
12
- proves any provider honours that at runtime.
13
-
14
- ## Exports
15
-
16
- ### Definitions
17
-
18
- | Export | Description |
19
- | --- | --- |
20
- | `defineAgent` | Validate and construct an agent definition; enforces that every `effect` is a gated `approval`. |
21
- | `defineWorkflow` | Validate a workflow descriptor (unique agent ids, role:input entry agent, in-workflow handoffs, unique inputs) and return it. |
22
- | `definePrompt` | Build a prompt strategy from `onStart` / `onInput` / `onResume` handlers. |
23
- | `defineProviders` | Build a provider registry that resolves provider factories by name. |
24
- | `AgentDefinitionSchema` | The Zod schema backing `defineAgent`. |
25
-
26
- ### Messages
27
-
28
- | Export | Description |
29
- | --- | --- |
30
- | `isAssistant` | Type guard for assistant messages. |
31
- | `isToolMessage` | Type guard for tool-result messages. |
32
- | `toolCallsOf` | Extract the tool calls from a message. |
33
- | `hasPendingApproval` | True when an approval tool was called but has no tool result yet. |
34
- | `pairToolResults` | Map each tool result to the `toolCallId` it answers. |
35
- | `lastApprovalArgs` | Parsed arguments of the most recent approval tool call, or `null`. |
36
- | `resolvedApprovalCount` | How many approval calls have a matching tool result. |
37
- | `approvalResolved` | True when at least one approval call has resolved. |
38
-
39
- ### Handoffs
40
-
41
- | Export | Description |
42
- | --- | --- |
43
- | `encodeHandoff` | Encode a payload as a user message downstream agents can decode. |
44
- | `decodeHandoff` | Decode and validate the latest handoff payload from run input. |
45
- | `handoffNote` | Emit a handoff note event. |
46
- | `HandoffPayloadSchema` | Zod schema for a generic thread/email handoff payload. |
47
- | `TicketHandoffPayloadSchema` | Zod schema for a ticket/issue handoff payload. |
48
-
49
- ### Gates & events
50
-
51
- | Export | Description |
52
- | --- | --- |
53
- | `gateOpened` | Emit the custom event that opens a human-approval gate. |
54
- | `readGateOpened` | Read a `GATE_OPENED` value off an event, or `null`. |
55
- | `GATE_OPENED` | The gate-opened custom event name constant. |
56
- | `GateOpenedValueSchema` | Zod schema for a gate-opened value. |
57
- | `lifecycleNote` | Emit a lifecycle note event. |
58
- | `LIFECYCLE_NOTE_TEXT` | Human-readable label for each terminal outcome. |
59
- | `foldEventsToMessages` | Fold an ag-ui event stream into a flat list of messages. |
60
-
61
- ### Lifecycle & delivery
62
-
63
- | Export | Description |
64
- | --- | --- |
65
- | `lifecycle` | Derive display lifecycle (`isLive` / `isVisible` / `covers`) from phase + outcome. |
66
- | `hasLiveDescendant` | Set of ids that have a live descendant in a parent/child tree. |
67
- | `resolveDelivery` | Resolve where a payload should be delivered (agent or contract). |
68
- | `instanceId` | Stable `workflow__agent` instance id. |
69
- | `composeInstructions` | Prepend the workflow prompt to an agent's instructions. |
70
-
71
- ### Providers & integration
72
-
73
- | Export | Description |
74
- | --- | --- |
75
- | `providerConformanceChecks` | Provider-agnostic suite proving a provider honours the gate/effect contract. |
76
- | `aggregateHealth` | Return the first failing health check, or an ok result. |
77
- | `isOk` | Narrow a `HealthCheck` to its ok variant. |
78
- | `isOAuth2` | Narrow an `AuthSpec` to its oauth2 variant. |
79
-
80
- Plus the full type surface: `WorkflowDescriptor`, `Outcome`, `Phase`, `Provider`,
81
- `EffectFn`, `AuthSpec`, `ResolvedCredential`, and more.
82
-
83
- ## Build & test
84
-
85
- Built with the native TypeScript 7 compiler (`tsc` / tsgo) — no bundler, no
86
- compiler-API tooling, so nothing here breaks on the TS 7 upgrade.
12
+ Pure logic — no I/O, no server, no UI. It defines what a workflow and an agent
13
+ *are* and enforces one rule:
14
+
15
+ > **The agent proposes, a human approves, the server acts.**
16
+
17
+ `defineAgent` refuses any side effect that isn't behind a human-approval gate,
18
+ and `providerConformanceChecks` proves any model provider honors that at runtime.
19
+
20
+ ## Install
87
21
 
88
22
  ```bash
89
- pnpm build # tsc -p tsconfig.build.json → dist/*.js + dist/*.d.ts
90
- pnpm typecheck # tsc -p tsconfig.json --noEmit
91
- pnpm test # vitest smoke suite
23
+ pnpm add @hanfani/core
24
+ ```
25
+
26
+ ## Quick look
27
+
28
+ ```ts
29
+ import { defineAgent } from '@hanfani/core'
30
+
31
+ const reply = defineAgent({
32
+ id: 'reply',
33
+ name: 'Reply',
34
+ provider: 'claude',
35
+ instructions: 'Draft a reply for the human to approve.',
36
+ tools: ['saveDraft'],
37
+ approvals: ['saveDraft'], // saveDraft only fires after a human approves
38
+ renders: { saveDraft: 'DraftCard' },
39
+ })
92
40
  ```
93
41
 
94
- ## Peer runtime
42
+ ## Dependencies
43
+
44
+ Depends on [`@ag-ui/client`](https://github.com/ag-ui-protocol/ag-ui)
45
+ (event/message types) and [`zod`](https://github.com/colinhacks/zod) (schemas),
46
+ both declared as regular dependencies.
47
+
48
+ ## Docs
49
+
50
+ An auto-generated API reference is available at
51
+ [jsdocs.io](https://www.jsdocs.io/package/@hanfani/core). Full guides are coming
52
+ soon in the Hanfani framework docs.
53
+
54
+ ## License
55
+
56
+ [MIT](./LICENSE) License © [Fruitizz](https://github.com/fruitizz)
57
+
58
+ <!-- Badges -->
95
59
 
96
- Depends on `@ag-ui/client` (event/message types) and `zod` (schemas). Both are
97
- declared as regular dependencies.
60
+ [build-src]: https://img.shields.io/github/actions/workflow/status/fruitizz/hanfani-core/ci.yml?branch=main&style=flat&colorA=080f12&colorB=1fa669&label=build
61
+ [build-href]: https://github.com/fruitizz/hanfani-core/actions/workflows/ci.yml
62
+ [npm-version-src]: https://img.shields.io/npm/v/@hanfani/core?style=flat&colorA=080f12&colorB=1fa669
63
+ [npm-version-href]: https://npmjs.com/package/@hanfani/core
64
+ [npm-downloads-src]: https://img.shields.io/npm/dm/@hanfani/core?style=flat&colorA=080f12&colorB=1fa669
65
+ [npm-downloads-href]: https://npmjs.com/package/@hanfani/core
66
+ [bundle-src]: https://img.shields.io/bundlephobia/minzip/@hanfani/core?style=flat&colorA=080f12&colorB=1fa669&label=minzip
67
+ [bundle-href]: https://bundlephobia.com/result?p=@hanfani/core
68
+ [license-src]: https://img.shields.io/github/license/fruitizz/hanfani-core.svg?style=flat&colorA=080f12&colorB=1fa669
69
+ [license-href]: https://github.com/fruitizz/hanfani-core/blob/main/LICENSE
70
+ [jsdocs-src]: https://img.shields.io/badge/jsdocs-reference-080f12?style=flat&colorA=080f12&colorB=1fa669
71
+ [jsdocs-href]: https://www.jsdocs.io/package/@hanfani/core
@@ -72,5 +72,6 @@ export declare const AgentDefinitionSchema: z.ZodEffects<z.ZodObject<{
72
72
  }>;
73
73
  export type AgentDefinition = z.infer<typeof AgentDefinitionSchema>;
74
74
  export type AgentDefinitionInput = z.input<typeof AgentDefinitionSchema>;
75
+ /** Validate and construct an agent definition; throws on a tool/approval/effect rule violation. */
75
76
  export declare function defineAgent(def: AgentDefinitionInput): AgentDefinition;
76
77
  //# sourceMappingURL=defineAgent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineAgent.d.ts","sourceRoot":"","sources":["../src/defineAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgD9B,CAAA;AAEJ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAExE,wBAAgB,WAAW,CAAC,GAAG,EAAE,oBAAoB,GAAG,eAAe,CAEtE"}
1
+ {"version":3,"file":"defineAgent.d.ts","sourceRoot":"","sources":["../src/defineAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgD9B,CAAA;AAEJ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AACnE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAExE,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,GAAG,EAAE,oBAAoB,GAAG,eAAe,CAEtE"}
@@ -53,6 +53,7 @@ export const AgentDefinitionSchema = z
53
53
  }
54
54
  }
55
55
  });
56
+ /** Validate and construct an agent definition; throws on a tool/approval/effect rule violation. */
56
57
  export function defineAgent(def) {
57
58
  return AgentDefinitionSchema.parse(def);
58
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"defineAgent.js","sourceRoot":"","sources":["../src/defineAgent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defineAgent.js","sourceRoot":"","sources":["../src/defineAgent.ts"],"names":[],"mappings":"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"}
package/dist/gate.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import type { BaseEvent, CustomEvent as AguiCustomEvent } from '@ag-ui/client';
2
2
  import { z } from 'zod';
3
+ /** Custom-event name signalling that a human-approval gate has opened. */
3
4
  export declare const GATE_OPENED: 'GATE_OPENED';
5
+ /** Schema for the payload carried by a `GATE_OPENED` event. */
4
6
  export declare const GateOpenedValueSchema: z.ZodObject<{
5
7
  gateKind: z.ZodLiteral<"approval">;
6
8
  toolName: z.ZodString;
@@ -1 +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"}
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,0EAA0E;AAC1E,eAAO,MAAM,WAAW,EAAG,aAAsB,CAAA;AAEjD,+DAA+D;AAC/D,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 CHANGED
@@ -1,6 +1,8 @@
1
1
  import { EventType } from '@ag-ui/client';
2
2
  import { z } from 'zod';
3
+ /** Custom-event name signalling that a human-approval gate has opened. */
3
4
  export const GATE_OPENED = 'GATE_OPENED';
5
+ /** Schema for the payload carried by a `GATE_OPENED` event. */
4
6
  export const GateOpenedValueSchema = z.object({
5
7
  gateKind: z.literal('approval'),
6
8
  toolName: z.string(),
package/dist/gate.js.map CHANGED
@@ -1 +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"}
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,0EAA0E;AAC1E,MAAM,CAAC,MAAM,WAAW,GAAG,aAAsB,CAAA;AAEjD,+DAA+D;AAC/D,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"}
package/dist/handoff.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import type { Message, RunAgentInput } from '@ag-ui/client';
3
+ /** Schema for a generic thread/email handoff payload. */
3
4
  export declare const HandoffPayloadSchema: z.ZodObject<{
4
5
  threadId: z.ZodString;
5
6
  from: z.ZodString;
@@ -23,6 +24,7 @@ export declare const HandoffPayloadSchema: z.ZodObject<{
23
24
  priority: string;
24
25
  }>;
25
26
  export type HandoffPayload = z.infer<typeof HandoffPayloadSchema>;
27
+ /** Schema for a ticket/issue handoff payload. */
26
28
  export declare const TicketHandoffPayloadSchema: z.ZodObject<{
27
29
  repo: z.ZodString;
28
30
  number: z.ZodNumber;
@@ -1 +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"}
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,yDAAyD;AACzD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;EAO/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,iDAAiD;AACjD,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 CHANGED
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ /** Schema for a generic thread/email handoff payload. */
2
3
  export const HandoffPayloadSchema = z.object({
3
4
  threadId: z.string(),
4
5
  from: z.string(),
@@ -7,6 +8,7 @@ export const HandoffPayloadSchema = z.object({
7
8
  category: z.string(),
8
9
  priority: z.string(),
9
10
  });
11
+ /** Schema for a ticket/issue handoff payload. */
10
12
  export const TicketHandoffPayloadSchema = z.object({
11
13
  repo: z.string(),
12
14
  number: z.number(),
@@ -1 +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"}
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,yDAAyD;AACzD,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,iDAAiD;AACjD,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"}
@@ -5,8 +5,11 @@ export type AssistantMessage = Extract<Message, {
5
5
  export type ToolMessage = Extract<Message, {
6
6
  role: 'tool';
7
7
  }>;
8
+ /** Type guard for assistant messages. */
8
9
  export declare function isAssistant(m: Message): m is AssistantMessage;
10
+ /** Type guard for tool-result messages. */
9
11
  export declare function isToolMessage(m: Message): m is ToolMessage;
12
+ /** The tool calls on a message (empty for non-assistant messages). */
10
13
  export declare function toolCallsOf(m: Message): ToolCall[];
11
14
  /** True when an approval tool has been called but has no tool result yet. */
12
15
  export declare function hasPendingApproval(messages: readonly Message[], approvalNames: readonly string[]): boolean;
@@ -1 +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"}
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,yCAAyC;AACzC,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,gBAAgB,CAE7D;AAED,2CAA2C;AAC3C,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAE1D;AAED,sEAAsE;AACtE,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 CHANGED
@@ -1,9 +1,12 @@
1
+ /** Type guard for assistant messages. */
1
2
  export function isAssistant(m) {
2
3
  return m.role === 'assistant';
3
4
  }
5
+ /** Type guard for tool-result messages. */
4
6
  export function isToolMessage(m) {
5
7
  return m.role === 'tool';
6
8
  }
9
+ /** The tool calls on a message (empty for non-assistant messages). */
7
10
  export function toolCallsOf(m) {
8
11
  return isAssistant(m) && Array.isArray(m.toolCalls) ? m.toolCalls : [];
9
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@hanfani/core",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Headless engine and types for the Hanfani agent framework.",
5
5
  "license": "MIT",
6
- "author": "Aziz Mashkour",
6
+ "author": "Fruitizz",
7
7
  "type": "module",
8
8
  "sideEffects": false,
9
9
  "files": [
@@ -58,6 +58,7 @@ export const AgentDefinitionSchema = z
58
58
  export type AgentDefinition = z.infer<typeof AgentDefinitionSchema>
59
59
  export type AgentDefinitionInput = z.input<typeof AgentDefinitionSchema>
60
60
 
61
+ /** Validate and construct an agent definition; throws on a tool/approval/effect rule violation. */
61
62
  export function defineAgent(def: AgentDefinitionInput): AgentDefinition {
62
63
  return AgentDefinitionSchema.parse(def)
63
64
  }
package/src/gate.ts CHANGED
@@ -2,8 +2,10 @@ import { EventType } from '@ag-ui/client'
2
2
  import type { BaseEvent, CustomEvent as AguiCustomEvent } from '@ag-ui/client'
3
3
  import { z } from 'zod'
4
4
 
5
+ /** Custom-event name signalling that a human-approval gate has opened. */
5
6
  export const GATE_OPENED = 'GATE_OPENED' as const
6
7
 
8
+ /** Schema for the payload carried by a `GATE_OPENED` event. */
7
9
  export const GateOpenedValueSchema = z.object({
8
10
  gateKind: z.literal('approval'),
9
11
  toolName: z.string(),
package/src/handoff.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod'
2
2
  import type { Message, RunAgentInput } from '@ag-ui/client'
3
3
 
4
+ /** Schema for a generic thread/email handoff payload. */
4
5
  export const HandoffPayloadSchema = z.object({
5
6
  threadId: z.string(),
6
7
  from: z.string(),
@@ -11,6 +12,7 @@ export const HandoffPayloadSchema = z.object({
11
12
  })
12
13
  export type HandoffPayload = z.infer<typeof HandoffPayloadSchema>
13
14
 
15
+ /** Schema for a ticket/issue handoff payload. */
14
16
  export const TicketHandoffPayloadSchema = z.object({
15
17
  repo: z.string(),
16
18
  number: z.number(),
package/src/messages.ts CHANGED
@@ -3,14 +3,17 @@ import type { Message, ToolCall } from '@ag-ui/client'
3
3
  export type AssistantMessage = Extract<Message, { role: 'assistant' }>
4
4
  export type ToolMessage = Extract<Message, { role: 'tool' }>
5
5
 
6
+ /** Type guard for assistant messages. */
6
7
  export function isAssistant(m: Message): m is AssistantMessage {
7
8
  return m.role === 'assistant'
8
9
  }
9
10
 
11
+ /** Type guard for tool-result messages. */
10
12
  export function isToolMessage(m: Message): m is ToolMessage {
11
13
  return m.role === 'tool'
12
14
  }
13
15
 
16
+ /** The tool calls on a message (empty for non-assistant messages). */
14
17
  export function toolCallsOf(m: Message): ToolCall[] {
15
18
  return isAssistant(m) && Array.isArray(m.toolCalls) ? m.toolCalls : []
16
19
  }