@imisbahk/hive 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.
Files changed (132) hide show
  1. package/.rocket/ARCHITECTURE.md +7 -0
  2. package/.rocket/README.md +31 -0
  3. package/.rocket/SYMBOLS.md +282 -0
  4. package/.rocket/config.json +18 -0
  5. package/001-local-first-storage.md +43 -0
  6. package/003-memory-architechture.md +71 -0
  7. package/CONTRIBUTING.md +149 -0
  8. package/LICENSE.md +21 -0
  9. package/README.md +146 -0
  10. package/dist/agent/agent.d.ts +32 -0
  11. package/dist/agent/agent.d.ts.map +1 -0
  12. package/dist/agent/agent.js +103 -0
  13. package/dist/agent/agent.js.map +1 -0
  14. package/dist/agent/index.d.ts +3 -0
  15. package/dist/agent/index.d.ts.map +1 -0
  16. package/dist/agent/index.js +2 -0
  17. package/dist/agent/index.js.map +1 -0
  18. package/dist/cli/commands/chat.d.ts +12 -0
  19. package/dist/cli/commands/chat.d.ts.map +1 -0
  20. package/dist/cli/commands/chat.js +117 -0
  21. package/dist/cli/commands/chat.js.map +1 -0
  22. package/dist/cli/commands/config.d.ts +7 -0
  23. package/dist/cli/commands/config.d.ts.map +1 -0
  24. package/dist/cli/commands/config.js +234 -0
  25. package/dist/cli/commands/config.js.map +1 -0
  26. package/dist/cli/commands/init.d.ts +8 -0
  27. package/dist/cli/commands/init.d.ts.map +1 -0
  28. package/dist/cli/commands/init.js +186 -0
  29. package/dist/cli/commands/init.js.map +1 -0
  30. package/dist/cli/commands/nuke.d.ts +4 -0
  31. package/dist/cli/commands/nuke.d.ts.map +1 -0
  32. package/dist/cli/commands/nuke.js +47 -0
  33. package/dist/cli/commands/nuke.js.map +1 -0
  34. package/dist/cli/commands/status.d.ts +4 -0
  35. package/dist/cli/commands/status.d.ts.map +1 -0
  36. package/dist/cli/commands/status.js +114 -0
  37. package/dist/cli/commands/status.js.map +1 -0
  38. package/dist/cli/helpers/providerPrompts.d.ts +13 -0
  39. package/dist/cli/helpers/providerPrompts.d.ts.map +1 -0
  40. package/dist/cli/helpers/providerPrompts.js +138 -0
  41. package/dist/cli/helpers/providerPrompts.js.map +1 -0
  42. package/dist/cli/index.d.ts +3 -0
  43. package/dist/cli/index.d.ts.map +1 -0
  44. package/dist/cli/index.js +31 -0
  45. package/dist/cli/index.js.map +1 -0
  46. package/dist/providers/anthropic.d.ts +10 -0
  47. package/dist/providers/anthropic.d.ts.map +1 -0
  48. package/dist/providers/anthropic.js +108 -0
  49. package/dist/providers/anthropic.js.map +1 -0
  50. package/dist/providers/api-key.d.ts +3 -0
  51. package/dist/providers/api-key.d.ts.map +1 -0
  52. package/dist/providers/api-key.js +15 -0
  53. package/dist/providers/api-key.js.map +1 -0
  54. package/dist/providers/base.d.ts +41 -0
  55. package/dist/providers/base.d.ts.map +1 -0
  56. package/dist/providers/base.js +157 -0
  57. package/dist/providers/base.js.map +1 -0
  58. package/dist/providers/google.d.ts +6 -0
  59. package/dist/providers/google.d.ts.map +1 -0
  60. package/dist/providers/google.js +19 -0
  61. package/dist/providers/google.js.map +1 -0
  62. package/dist/providers/groq.d.ts +6 -0
  63. package/dist/providers/groq.d.ts.map +1 -0
  64. package/dist/providers/groq.js +19 -0
  65. package/dist/providers/groq.js.map +1 -0
  66. package/dist/providers/index.d.ts +4 -0
  67. package/dist/providers/index.d.ts.map +1 -0
  68. package/dist/providers/index.js +58 -0
  69. package/dist/providers/index.js.map +1 -0
  70. package/dist/providers/mistral.d.ts +6 -0
  71. package/dist/providers/mistral.d.ts.map +1 -0
  72. package/dist/providers/mistral.js +19 -0
  73. package/dist/providers/mistral.js.map +1 -0
  74. package/dist/providers/ollama.d.ts +6 -0
  75. package/dist/providers/ollama.d.ts.map +1 -0
  76. package/dist/providers/ollama.js +20 -0
  77. package/dist/providers/ollama.js.map +1 -0
  78. package/dist/providers/openai-compatible.d.ts +22 -0
  79. package/dist/providers/openai-compatible.d.ts.map +1 -0
  80. package/dist/providers/openai-compatible.js +36 -0
  81. package/dist/providers/openai-compatible.js.map +1 -0
  82. package/dist/providers/openai.d.ts +6 -0
  83. package/dist/providers/openai.d.ts.map +1 -0
  84. package/dist/providers/openai.js +19 -0
  85. package/dist/providers/openai.js.map +1 -0
  86. package/dist/providers/openrouter.d.ts +6 -0
  87. package/dist/providers/openrouter.d.ts.map +1 -0
  88. package/dist/providers/openrouter.js +19 -0
  89. package/dist/providers/openrouter.js.map +1 -0
  90. package/dist/providers/together.d.ts +6 -0
  91. package/dist/providers/together.d.ts.map +1 -0
  92. package/dist/providers/together.js +19 -0
  93. package/dist/providers/together.js.map +1 -0
  94. package/dist/storage/db.d.ts +48 -0
  95. package/dist/storage/db.d.ts.map +1 -0
  96. package/dist/storage/db.js +298 -0
  97. package/dist/storage/db.js.map +1 -0
  98. package/dist/storage/schema.d.ts +43 -0
  99. package/dist/storage/schema.d.ts.map +1 -0
  100. package/dist/storage/schema.js +69 -0
  101. package/dist/storage/schema.js.map +1 -0
  102. package/index.md +16 -0
  103. package/package.json +48 -0
  104. package/prompts/Behaviour.md +23 -0
  105. package/prompts/Code.md +12 -0
  106. package/prompts/Memory.md +11 -0
  107. package/prompts/System.md +6 -0
  108. package/releases/v1/v0.1/RELEASE-NOTES.md +0 -0
  109. package/src/agent/agent.ts +155 -0
  110. package/src/agent/index.ts +2 -0
  111. package/src/cli/commands/chat.ts +169 -0
  112. package/src/cli/commands/config.ts +282 -0
  113. package/src/cli/commands/init.ts +242 -0
  114. package/src/cli/commands/nuke.ts +60 -0
  115. package/src/cli/commands/status.ts +147 -0
  116. package/src/cli/helpers/providerPrompts.ts +192 -0
  117. package/src/cli/index.ts +38 -0
  118. package/src/providers/anthropic.ts +146 -0
  119. package/src/providers/api-key.ts +23 -0
  120. package/src/providers/base.ts +234 -0
  121. package/src/providers/google.ts +21 -0
  122. package/src/providers/groq.ts +21 -0
  123. package/src/providers/index.ts +65 -0
  124. package/src/providers/mistral.ts +21 -0
  125. package/src/providers/ollama.ts +22 -0
  126. package/src/providers/openai-compatible.ts +58 -0
  127. package/src/providers/openai.ts +21 -0
  128. package/src/providers/openrouter.ts +21 -0
  129. package/src/providers/together.ts +21 -0
  130. package/src/storage/db.ts +476 -0
  131. package/src/storage/schema.ts +116 -0
  132. package/tsconfig.json +51 -0
package/README.md ADDED
@@ -0,0 +1,146 @@
1
+ # 🐝 The Hive
2
+
3
+ > Your agent. Always running. Always learning. Always working.
4
+
5
+ The Hive is a globally distributed AI agent platform. Every user owns a node. Every node is an agent. The network is the product.
6
+
7
+ Your agent knows who you are, works for you while you sleep, connects to every tool in your life, writes and ships code, and communicates with other agents across the globe — all from your terminal.
8
+
9
+ ---
10
+
11
+ ## What It Is
12
+
13
+ - A personal AI agent that lives on your machine
14
+ - A peer-to-peer mesh network connecting agents globally
15
+ - A code intelligence layer powered by [Genie](https://github.com/imisbahk/genie)
16
+ - An automation engine with OS-level capabilities
17
+ - A distributed task network where agents work for each other
18
+
19
+ ## What It Is Not
20
+
21
+ - A chatbot
22
+ - A cloud product
23
+ - A subscription to someone else's infrastructure
24
+ - Something that stops working when you close your laptop
25
+
26
+ ---
27
+
28
+ ## Install
29
+
30
+ ```bash
31
+ curl https://thehive.sh/install | sh
32
+ ```
33
+
34
+ Or build from source:
35
+
36
+ ```bash
37
+ git clone https://github.com/imisbahk/hive
38
+ cd hive
39
+ npm install
40
+ npm run build
41
+ npm link
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Quickstart
47
+
48
+ ```bash
49
+ hive init # birth your agent
50
+ hive chat # talk to it
51
+ hive code # enter coding mode
52
+ hive status # see what's running
53
+ ```
54
+
55
+ ---
56
+
57
+ ## Commands
58
+
59
+ | Command | Description |
60
+ |---|---|
61
+ | `hive init` | Create your agent. Runs once. Ever. |
62
+ | `hive chat` | Talk to your agent |
63
+ | `hive code` | Enter coding mode with Genie intelligence |
64
+ | `hive task` | Manage running tasks |
65
+ | `hive memory` | Inspect and manage agent memory |
66
+ | `hive integrations` | Manage connected services |
67
+ | `hive agents` | Manage sub-agents |
68
+ | `hive status` | Health of your local node |
69
+ | `hive ui` | Open local web dashboard |
70
+ | `hive nuke` | Full wipe. Gone. |
71
+
72
+ ---
73
+
74
+ ## Architecture
75
+
76
+ ```
77
+ YOUR MACHINE
78
+ └── hive daemon (always running)
79
+ ├── Agent Core (personality, memory, reasoning)
80
+ ├── Task Engine (queue, execution, scheduling)
81
+ ├── Integration Runtime (Gmail, Notion, Slack, ...)
82
+ ├── Browser Automation (Playwright)
83
+ ├── Code Intelligence (Genie via MCP)
84
+ └── Mesh Node (libp2p, DHT, GossipSub)
85
+ └── THE HIVE NETWORK
86
+ └── every other agent on earth
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Memory Architecture
92
+
93
+ Your agent never forgets what matters and never bloats.
94
+
95
+ - **Core Persona** — compressed personality snapshot. Rewrites nightly. Never grows.
96
+ - **Episodic Memory** — recent events as semantic embeddings. Always searchable.
97
+ - **Knowledge Graph** — permanent hard facts about you and your life.
98
+
99
+ ---
100
+
101
+ ## The Network
102
+
103
+ Every agent has a permanent cryptographic identity — a HIVE-ID derived from an Ed25519 keypair. Every message is signed. Every agent is verifiable. No central authority.
104
+
105
+ The mesh runs on libp2p with Kademlia DHT for discovery and GossipSub for messaging. Your agent can find, message, and delegate tasks to any other agent on earth.
106
+
107
+ When your laptop closes — pending tasks are delegated to the mesh. Results wait in an encrypted mailbox. Nothing is lost.
108
+
109
+ ---
110
+
111
+ ## Privacy
112
+
113
+ - Everything stored locally. Encrypted at rest.
114
+ - AI provider of your choice — including fully local via Ollama.
115
+ - No telemetry. No analytics. No cloud dependency.
116
+ - Air gap mode available for full offline operation.
117
+ - You own your agent. Completely.
118
+
119
+ ---
120
+
121
+ ## Roadmap
122
+
123
+ | Version | Focus |
124
+ |---|---|
125
+ | v0.1 | Agent born. `hive init` + `hive chat`. |
126
+ | v0.2 | Agent works. Daemon + task execution. |
127
+ | v0.3 | Agent codes. Genie integration. |
128
+ | v0.4 | Agent connects. Integrations layer. |
129
+ | v0.5 | Agent has a face. Local web view. |
130
+ | v0.6 | Agent multiplies. Sub-agent spawning. |
131
+ | v0.7 | Agent owns the machine. OS capabilities. |
132
+ | v0.8 | Agents find each other. Mesh network. |
133
+ | v0.9 | Agents work for each other. Economy layer. |
134
+ | v1.0 | The Hive is alive. |
135
+
136
+ ---
137
+
138
+ ## Contributing
139
+
140
+ The Hive is early. If you're reading this and want to build something that matters — open an issue, start a conversation, or just ship a PR.
141
+
142
+ ---
143
+
144
+ ## License
145
+
146
+ MIT
@@ -0,0 +1,32 @@
1
+ import type { AgentRecord, ConversationRecord, HiveDatabase } from "../storage/db.js";
2
+ import type { Provider } from "../providers/base.js";
3
+ export interface AgentChatOptions {
4
+ conversationId?: string;
5
+ title?: string;
6
+ model?: string;
7
+ temperature?: number;
8
+ maxTokens?: number;
9
+ }
10
+ export type AgentStreamEvent = {
11
+ type: "token";
12
+ conversationId: string;
13
+ token: string;
14
+ } | {
15
+ type: "done";
16
+ conversationId: string;
17
+ assistantMessageId: string;
18
+ };
19
+ export declare class HiveAgent {
20
+ private readonly db;
21
+ private readonly provider;
22
+ private readonly agent;
23
+ private readonly historyLimit;
24
+ constructor(db: HiveDatabase, provider: Provider, agent: AgentRecord);
25
+ static load(db: HiveDatabase, provider?: Provider): Promise<HiveAgent>;
26
+ getProfile(): AgentRecord;
27
+ startConversation(title?: string): ConversationRecord;
28
+ chat(userMessage: string, options?: AgentChatOptions): AsyncGenerator<AgentStreamEvent>;
29
+ private resolveConversation;
30
+ }
31
+ export declare function buildDefaultPersona(ownerName: string): string;
32
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GACxB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEN,qBAAa,SAAS;IAIlB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;gBAGhB,EAAE,EAAE,YAAY,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,WAAW;WAGxB,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAU5E,UAAU,IAAI,WAAW;IAIzB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,kBAAkB;IAO9C,IAAI,CACT,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,gBAAqB,GAC7B,cAAc,CAAC,gBAAgB,CAAC;IAsDnC,OAAO,CAAC,mBAAmB;CAsB5B;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ7D"}
@@ -0,0 +1,103 @@
1
+ import { appendMessage, createConversation, getConversationById, getPrimaryAgent, listMessages, } from "../storage/db.js";
2
+ import { createProvider } from "../providers/index.js";
3
+ export class HiveAgent {
4
+ db;
5
+ provider;
6
+ agent;
7
+ historyLimit = 80;
8
+ constructor(db, provider, agent) {
9
+ this.db = db;
10
+ this.provider = provider;
11
+ this.agent = agent;
12
+ }
13
+ static async load(db, provider) {
14
+ const agent = getPrimaryAgent(db);
15
+ if (!agent) {
16
+ throw new Error("Hive is not initialized. Run `hive init` first.");
17
+ }
18
+ const resolvedProvider = provider ?? (await createProvider(agent.provider));
19
+ return new HiveAgent(db, resolvedProvider, agent);
20
+ }
21
+ getProfile() {
22
+ return this.agent;
23
+ }
24
+ startConversation(title) {
25
+ return createConversation(this.db, {
26
+ agentId: this.agent.id,
27
+ title,
28
+ });
29
+ }
30
+ async *chat(userMessage, options = {}) {
31
+ const trimmed = userMessage.trim();
32
+ if (trimmed.length === 0) {
33
+ throw new Error("Cannot send an empty message.");
34
+ }
35
+ const conversation = this.resolveConversation(options.conversationId, options.title);
36
+ appendMessage(this.db, {
37
+ conversationId: conversation.id,
38
+ role: "user",
39
+ content: trimmed,
40
+ });
41
+ const history = listMessages(this.db, conversation.id, this.historyLimit);
42
+ const providerRequest = {
43
+ model: options.model ?? this.agent.model,
44
+ temperature: options.temperature,
45
+ maxTokens: options.maxTokens,
46
+ messages: [
47
+ {
48
+ role: "system",
49
+ content: this.agent.persona,
50
+ },
51
+ ...history.map((message) => ({
52
+ role: message.role,
53
+ content: message.content,
54
+ })),
55
+ ],
56
+ };
57
+ let assistantText = "";
58
+ for await (const token of this.provider.streamChat(providerRequest)) {
59
+ assistantText += token;
60
+ yield {
61
+ type: "token",
62
+ conversationId: conversation.id,
63
+ token,
64
+ };
65
+ }
66
+ const savedMessage = appendMessage(this.db, {
67
+ conversationId: conversation.id,
68
+ role: "assistant",
69
+ content: assistantText,
70
+ });
71
+ yield {
72
+ type: "done",
73
+ conversationId: conversation.id,
74
+ assistantMessageId: savedMessage.id,
75
+ };
76
+ }
77
+ resolveConversation(conversationId, title) {
78
+ if (!conversationId) {
79
+ return createConversation(this.db, {
80
+ agentId: this.agent.id,
81
+ title,
82
+ });
83
+ }
84
+ const existingConversation = getConversationById(this.db, conversationId);
85
+ if (!existingConversation) {
86
+ throw new Error(`Conversation \"${conversationId}\" was not found.`);
87
+ }
88
+ if (existingConversation.agent_id !== this.agent.id) {
89
+ throw new Error("Conversation does not belong to the initialized Hive agent.");
90
+ }
91
+ return existingConversation;
92
+ }
93
+ }
94
+ export function buildDefaultPersona(ownerName) {
95
+ return [
96
+ "You are The Hive: a local-first personal AI agent.",
97
+ `You are assisting ${ownerName}.`,
98
+ "Be direct, useful, and execution-focused.",
99
+ "Prefer concrete actions over abstract advice.",
100
+ "If context is missing, ask one concise clarifying question.",
101
+ ].join("\n");
102
+ }
103
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { HiveAgent, buildDefaultPersona } from "./agent.js";
2
+ export type { AgentChatOptions, AgentStreamEvent } from "./agent.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { HiveAgent, buildDefaultPersona } from "./agent.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Command } from "commander";
2
+ interface ChatCommandOptions {
3
+ message?: string;
4
+ conversation?: string;
5
+ model?: string;
6
+ title?: string;
7
+ temperature?: string;
8
+ }
9
+ export declare function registerChatCommand(program: Command): void;
10
+ export declare function runChatCommand(options: ChatCommandOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAQD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY1D;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE/E"}
@@ -0,0 +1,117 @@
1
+ import { stdin, stdout } from "node:process";
2
+ import { createInterface } from "node:readline/promises";
3
+ import chalk from "chalk";
4
+ import { HiveAgent } from "../../agent/agent.js";
5
+ import { closeHiveDatabase, getPrimaryAgent, openHiveDatabase, } from "../../storage/db.js";
6
+ import { createProvider } from "../../providers/index.js";
7
+ export function registerChatCommand(program) {
8
+ program
9
+ .command("chat")
10
+ .description("Talk to your Hive agent")
11
+ .option("-m, --message <text>", "send a single message and exit")
12
+ .option("-c, --conversation <id>", "continue an existing conversation")
13
+ .option("--model <model>", "override model for this session")
14
+ .option("--title <title>", "title for a newly created conversation")
15
+ .option("-t, --temperature <value>", "sampling temperature")
16
+ .action(async (options) => {
17
+ await runChatCommand(options);
18
+ });
19
+ }
20
+ export async function runChatCommand(options) {
21
+ const temperature = parseTemperature(options.temperature);
22
+ const db = openHiveDatabase();
23
+ try {
24
+ const profile = getPrimaryAgent(db);
25
+ if (!profile) {
26
+ console.error(chalk.red("Hive is not initialized. Run `hive init` first."));
27
+ return;
28
+ }
29
+ const provider = await createProvider(profile.provider);
30
+ const agent = new HiveAgent(db, provider, profile);
31
+ let conversationId = options.conversation;
32
+ const runOptions = {
33
+ model: options.model,
34
+ title: options.title,
35
+ temperature,
36
+ };
37
+ if (options.message) {
38
+ conversationId = await streamReply(agent, options.message, conversationId, runOptions);
39
+ console.log(chalk.dim(`conversation: ${conversationId}`));
40
+ return;
41
+ }
42
+ const rl = createInterface({
43
+ input: stdin,
44
+ output: stdout,
45
+ terminal: true,
46
+ });
47
+ console.log(chalk.dim("Type /exit to quit, /new to start a fresh conversation."));
48
+ try {
49
+ while (true) {
50
+ const prompt = (await rl.question(chalk.cyan("you> "))).trim();
51
+ if (prompt.length === 0) {
52
+ continue;
53
+ }
54
+ if (prompt === "/exit" || prompt === "/quit") {
55
+ break;
56
+ }
57
+ if (prompt === "/new") {
58
+ conversationId = undefined;
59
+ console.log(chalk.dim("Started a new conversation context."));
60
+ continue;
61
+ }
62
+ try {
63
+ conversationId = await streamReply(agent, prompt, conversationId, runOptions);
64
+ }
65
+ catch (error) {
66
+ process.stdout.write("\n");
67
+ console.error(formatError(error));
68
+ }
69
+ }
70
+ }
71
+ finally {
72
+ rl.close();
73
+ }
74
+ }
75
+ finally {
76
+ closeHiveDatabase(db);
77
+ }
78
+ }
79
+ async function streamReply(agent, prompt, conversationId, options) {
80
+ process.stdout.write(chalk.green("hive> "));
81
+ let activeConversationId = conversationId;
82
+ for await (const event of agent.chat(prompt, {
83
+ conversationId: activeConversationId,
84
+ model: options.model,
85
+ temperature: options.temperature,
86
+ title: options.title,
87
+ })) {
88
+ if (event.type === "token") {
89
+ process.stdout.write(event.token);
90
+ activeConversationId = event.conversationId;
91
+ continue;
92
+ }
93
+ activeConversationId = event.conversationId;
94
+ }
95
+ process.stdout.write("\n");
96
+ if (!activeConversationId) {
97
+ throw new Error("Conversation state was not returned by the agent.");
98
+ }
99
+ return activeConversationId;
100
+ }
101
+ function parseTemperature(raw) {
102
+ if (raw === undefined) {
103
+ return undefined;
104
+ }
105
+ const parsed = Number.parseFloat(raw);
106
+ if (Number.isNaN(parsed) || parsed < 0 || parsed > 2) {
107
+ throw new Error("Temperature must be a number between 0 and 2.");
108
+ }
109
+ return parsed;
110
+ }
111
+ function formatError(error) {
112
+ if (error instanceof Error) {
113
+ return chalk.red(error.message);
114
+ }
115
+ return chalk.red(String(error));
116
+ }
117
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command } from "commander";
2
+ export declare function registerConfigCommand(program: Command): void;
3
+ export declare function runConfigProviderCommand(): Promise<void>;
4
+ export declare function runConfigModelCommand(): Promise<void>;
5
+ export declare function runConfigKeyCommand(): Promise<void>;
6
+ export declare function runConfigShowCommand(): Promise<void>;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgC5D;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiE9D;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuC3D;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0CzD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoB1D"}