@halo-sdk/core 1.0.0 → 1.0.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.
Files changed (54) hide show
  1. package/README.md +50 -5
  2. package/dist/halo-agent.d.ts +45 -7
  3. package/dist/halo-agent.d.ts.map +1 -1
  4. package/dist/halo.d.ts +13 -2
  5. package/dist/halo.d.ts.map +1 -1
  6. package/dist/index.cjs +6934 -0
  7. package/dist/index.cjs.map +1 -0
  8. package/dist/index.d.ts +8 -4
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +6895 -5
  11. package/dist/index.js.map +1 -1
  12. package/dist/model-adapter.d.ts +20 -8
  13. package/dist/model-adapter.d.ts.map +1 -1
  14. package/dist/sandbox.d.ts +78 -0
  15. package/dist/sandbox.d.ts.map +1 -0
  16. package/dist/session-impl.d.ts +34 -6
  17. package/dist/session-impl.d.ts.map +1 -1
  18. package/dist/session.d.ts +92 -2
  19. package/dist/session.d.ts.map +1 -1
  20. package/dist/skills.d.ts +27 -0
  21. package/dist/skills.d.ts.map +1 -0
  22. package/dist/tool.d.ts +10 -13
  23. package/dist/tool.d.ts.map +1 -1
  24. package/dist/tools-builtin.d.ts +12 -0
  25. package/dist/tools-builtin.d.ts.map +1 -0
  26. package/dist/types.d.ts +11 -0
  27. package/dist/types.d.ts.map +1 -1
  28. package/package.json +13 -8
  29. package/dist/halo-agent.js +0 -95
  30. package/dist/halo-agent.js.map +0 -1
  31. package/dist/halo-session.d.ts +0 -60
  32. package/dist/halo-session.d.ts.map +0 -1
  33. package/dist/halo-session.js +0 -80
  34. package/dist/halo-session.js.map +0 -1
  35. package/dist/halo.js +0 -20
  36. package/dist/halo.js.map +0 -1
  37. package/dist/log.js +0 -41
  38. package/dist/log.js.map +0 -1
  39. package/dist/model-adapter.js +0 -2
  40. package/dist/model-adapter.js.map +0 -1
  41. package/dist/prefix.js +0 -84
  42. package/dist/prefix.js.map +0 -1
  43. package/dist/session-impl.js +0 -308
  44. package/dist/session-impl.js.map +0 -1
  45. package/dist/session.js +0 -2
  46. package/dist/session.js.map +0 -1
  47. package/dist/strategies.js +0 -2
  48. package/dist/strategies.js.map +0 -1
  49. package/dist/tool-utils.js +0 -36
  50. package/dist/tool-utils.js.map +0 -1
  51. package/dist/tool.js +0 -23
  52. package/dist/tool.js.map +0 -1
  53. package/dist/types.js +0 -2
  54. package/dist/types.js.map +0 -1
package/README.md CHANGED
@@ -1,8 +1,53 @@
1
1
  # @halo-sdk/core
2
2
 
3
- Core types, factory, and session management for Halo AI SDK.
3
+ Core types, factory, and session management for the Halo AI SDK — a cache-first agent framework with automatic prefix caching.
4
4
 
5
- - `Halo` — factory for creating sessions
6
- - `HaloAgent` — cache-aware AI agent with automatic tool-call loop
7
- - `StablePrefix` — SHA-256 fingerprinted prefix management
8
- - `MessageLog` — in-memory message history
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @halo-sdk/core
9
+ ```
10
+
11
+ Requires Node.js >= 22 and a compatible model adapter (e.g. `@halo-sdk/adapters`).
12
+
13
+ ## Quick Start
14
+
15
+ ```ts
16
+ import { Halo, tool } from "@halo-sdk/core";
17
+ import { DeepSeekAdapter } from "@halo-sdk/adapters";
18
+
19
+ const halo = new Halo({
20
+ adapter: new DeepSeekAdapter({ apiKey: process.env.DEEPSEEK_API_KEY! }),
21
+ });
22
+
23
+ const agent = halo.agent({
24
+ messages: [{ role: "system", content: "You are a helpful assistant." }],
25
+ tools: {
26
+ weather: tool({
27
+ description: "Get weather for a city",
28
+ parameters: {
29
+ type: "object",
30
+ properties: { city: { type: "string" } },
31
+ required: ["city"],
32
+ },
33
+ execute: async ({ city }) => `Sunny, 22°C in ${city}`,
34
+ }),
35
+ },
36
+ });
37
+
38
+ const result = await agent.generateText("What's the weather in Paris?");
39
+ console.log(result.content);
40
+ // → "The weather in Paris is sunny, 22°C."
41
+ ```
42
+
43
+ ## Key Features
44
+
45
+ - **Cache-first architecture** — `StablePrefix` (system prompt + tools + few-shots) is automatically cached by DeepSeek. Only dynamic conversation history is billed at full rate.
46
+ - **Auto tool loop** — tools with `execute` are automatically called by `generateText()`.
47
+ - **Streaming** — `streamText()` with full tool-loop support, compatible with Vercel AI SDK `useChat`.
48
+ - **Structured output** — `generateObject()` with Zod or JSON Schema.
49
+ - **Agent Skills** — progressive disclosure via `discoverSkills()` + auto-registered `loadSkill` tool.
50
+
51
+ ## Documentation
52
+
53
+ See the [Halo SDK docs](https://halo-sdk.github.io/halo-ai/en/api-reference/halo-agent) for full API reference and guides.
@@ -1,5 +1,6 @@
1
1
  import type { ChatMessage, ToolCall, ToolDefinition, ToolSpec } from "./types.js";
2
- import type { TurnResult, TurnChunk, ToolResult, SessionStats, HaloAgentOptions } from "./session.js";
2
+ import type { TurnResult, TurnChunk, ToolResult, SessionStats, HaloAgentOptions, StreamTextOptions, StreamTextResult, GenerateObjectOptions, GenerateObjectResult } from "./session.js";
3
+ import type { ModelCallOptions } from "./model-adapter.js";
3
4
  /**
4
5
  * A cache-aware AI agent with automatic tool-call loop.
5
6
  *
@@ -13,9 +14,19 @@ export declare class HaloAgent {
13
14
  /** Read-only agent statistics. Updated after every turn. */
14
15
  get stats(): Readonly<SessionStats>;
15
16
  /**
16
- * Run a prompt with automatic tool-call loop.
17
- * This is the default entry point for 80% of use-cases.
17
+ * Generate a text response with automatic tool-call loop.
18
+ * This is the primary entry point for non-streaming use-cases.
18
19
  */
20
+ generateText(input: string, opts?: {
21
+ maxSteps?: number;
22
+ onToolCall?: (call: ToolCall) => Promise<ToolResult>;
23
+ onStep?: (step: {
24
+ step: number;
25
+ content: string;
26
+ toolCalls: ToolCall[];
27
+ }) => void;
28
+ } & ModelCallOptions): Promise<TurnResult>;
29
+ /** @deprecated Use `generateText()` instead. */
19
30
  run(input: string, opts?: {
20
31
  maxSteps?: number;
21
32
  onToolCall?: (call: ToolCall) => Promise<ToolResult>;
@@ -24,16 +35,43 @@ export declare class HaloAgent {
24
35
  content: string;
25
36
  toolCalls: ToolCall[];
26
37
  }) => void;
27
- }): Promise<TurnResult>;
38
+ } & ModelCallOptions): Promise<TurnResult>;
39
+ /**
40
+ * Send a single message. Tool calls are returned, NOT auto-executed.
41
+ * Use `submitToolResult()` to feed results back manually.
42
+ *
43
+ * For automatic tool loops, use `generateText()` or `streamText()` instead.
44
+ */
28
45
  /**
29
46
  * Send a message. Tool calls are returned, NOT automatically executed.
30
47
  * Use submitToolResult() to feed results back.
31
48
  */
32
- send(input: string): Promise<TurnResult>;
49
+ send(input: string, options?: ModelCallOptions): Promise<TurnResult>;
33
50
  /** Stream a message. */
34
- stream(input: string): AsyncGenerator<TurnChunk>;
51
+ stream(input: string, options?: ModelCallOptions): AsyncGenerator<TurnChunk>;
52
+ /**
53
+ * Streaming entry with full tool-call loop and named callbacks.
54
+ *
55
+ * Accepts a string (plain input) or `ChatMessage[]` (AI SDK useChat integration).
56
+ * Returns a `StreamTextResult` with multiple consumption paths.
57
+ */
58
+ streamText(input: string | ChatMessage[], opts?: StreamTextOptions): StreamTextResult;
59
+ /**
60
+ * Generate a structured object from a prompt.
61
+ *
62
+ * Accepts Zod schemas (compile-time type inference) or plain JSON Schema.
63
+ * Schema is sent as `responseFormat` — does NOT enter StablePrefix.
64
+ * Tools are suppressed for this call.
65
+ */
66
+ generateObject<T = unknown>(input: string, opts: GenerateObjectOptions<unknown>): Promise<GenerateObjectResult<T>>;
67
+ /**
68
+ * Stream a progressively-built object from a prompt.
69
+ *
70
+ * Yields incremental partial objects as the JSON builds up.
71
+ */
72
+ streamObject<T = unknown>(input: string, opts: GenerateObjectOptions<unknown>): AsyncGenerator<T>;
35
73
  /** Submit a tool execution result. Triggers another model call. */
36
- submitToolResult(result: ToolResult): Promise<TurnResult>;
74
+ submitToolResult(result: ToolResult, options?: ModelCallOptions): Promise<TurnResult>;
37
75
  /**
38
76
  * Stream-compatible entry for AI SDK (useChat) integration.
39
77
  *
@@ -1 +1 @@
1
- {"version":3,"file":"halo-agent.d.ts","sourceRoot":"","sources":["../src/halo-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAGtB;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAgB;gBAEjB,IAAI,EAAE,gBAAgB;IAMlC,4DAA4D;IAC5D,IAAI,KAAK,IAAI,QAAQ,CAAC,YAAY,CAAC,CAElC;IAED;;;OAGG;IACG,GAAG,CACP,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;SAAE,KAAK,IAAI,CAAC;KACnF,GACA,OAAO,CAAC,UAAU,CAAC;IAItB;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI9C,wBAAwB;IACjB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC;IAIvD,mEAAmE;IAC7D,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAI/D;;;;;;OAMG;IACI,SAAS,CACd,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,GAC5C,cAAc,CAAC,SAAS,CAAC;IAM5B,2EAA2E;IAC3E,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAC7B,0DAA0D;IAC1D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;IAQhD,gDAAgD;IAChD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAG9B,yDAAyD;IACzD,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAGlC,0CAA0C;IAC1C,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMrC;;;;OAIG;IACH,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE;IAMpD,kFAAkF;IAClF,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAMtC,8DAA8D;IAC9D,QAAQ,IAAI,IAAI;IAGhB,qDAAqD;IACrD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGhC"}
1
+ {"version":3,"file":"halo-agent.d.ts","sourceRoot":"","sources":["../src/halo-agent.ts"],"names":[],"mappings":"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"}
package/dist/halo.d.ts CHANGED
@@ -1,17 +1,28 @@
1
1
  import { HaloAgent } from "./halo-agent.js";
2
- import type { AgentEvent } from "./session.js";
2
+ import type { AgentEvent, ModelConfig, SkillMetadata } from "./session.js";
3
3
  import type { ModelAdapter } from "./model-adapter.js";
4
4
  import type { ContextStrategy, RepairStrategy } from "./strategies.js";
5
5
  import type { ToolSpec, ChatMessage, ToolDefinition } from "./types.js";
6
+ import type { Sandbox } from "./sandbox.js";
6
7
  export declare class Halo {
7
8
  private _adapter;
8
9
  constructor(opts: {
9
10
  adapter: ModelAdapter;
10
11
  });
11
12
  agent(opts: {
12
- system: string;
13
+ /** Prefix messages (preferred). Mutually exclusive with `system`. */
14
+ messages?: ChatMessage[];
15
+ /** @deprecated Use `messages` with `role: "system"` instead. */
16
+ system?: string;
13
17
  tools?: ToolSpec[] | Record<string, ToolDefinition<any>>;
18
+ /** @deprecated Use `messages` with `role: "user"` / `role: "assistant"` instead. */
14
19
  fewShots?: ChatMessage[];
20
+ /** Agent-level model defaults. Does not enter prefix — safe to change. */
21
+ model?: ModelConfig;
22
+ /** Agent Skills (agentskills.io). Name+description enter system prompt. */
23
+ skills?: SkillMetadata[];
24
+ /** Sandbox for file ops and command execution. Does NOT enter prefix. */
25
+ sandbox?: Sandbox;
15
26
  context?: ContextStrategy;
16
27
  repair?: RepairStrategy;
17
28
  on?: (event: AgentEvent, payload: unknown) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"halo.d.ts","sourceRoot":"","sources":["../src/halo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAExE,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAe;gBAEnB,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE;IAI3C,KAAK,CAAC,IAAI,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;QAEzB,OAAO,CAAC,EAAE,eAAe,CAAC;QAC1B,MAAM,CAAC,EAAE,cAAc,CAAC;QAExB,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACpD,GAAG,SAAS;CAad"}
1
+ {"version":3,"file":"halo.d.ts","sourceRoot":"","sources":["../src/halo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAoB,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,qBAAa,IAAI;IACf,OAAO,CAAC,QAAQ,CAAe;gBAEnB,IAAI,EAAE;QAAE,OAAO,EAAE,YAAY,CAAA;KAAE;IAI3C,KAAK,CAAC,IAAI,EAAE;QACV,qEAAqE;QACrE,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;QACzB,gEAAgE;QAChE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,oFAAoF;QACpF,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;QACzB,0EAA0E;QAC1E,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,2EAA2E;QAC3E,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;QACzB,yEAAyE;QACzE,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB,OAAO,CAAC,EAAE,eAAe,CAAC;QAC1B,MAAM,CAAC,EAAE,cAAc,CAAC;QAExB,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KACpD,GAAG,SAAS;CAiBd"}