@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
@@ -0,0 +1,298 @@
1
+ import { dirname, join } from "node:path";
2
+ import { homedir } from "node:os";
3
+ import { mkdirSync } from "node:fs";
4
+ import Database from "better-sqlite3";
5
+ import { v4 as uuidv4 } from "uuid";
6
+ import { CURRENT_SCHEMA_VERSION, MIGRATIONS, } from "./schema.js";
7
+ export const HIVE_DIRECTORY_NAME = ".hive";
8
+ export const HIVE_DB_FILENAME = "hive.db";
9
+ const AGENT_PROFILE_COLUMNS = [
10
+ { name: "dob", definition: "TEXT" },
11
+ { name: "location", definition: "TEXT" },
12
+ { name: "profession", definition: "TEXT" },
13
+ { name: "about_raw", definition: "TEXT" },
14
+ { name: "agent_name", definition: "TEXT" },
15
+ ];
16
+ export function getHiveHomeDir() {
17
+ return process.env.HIVE_HOME ?? join(homedir(), HIVE_DIRECTORY_NAME);
18
+ }
19
+ export function getHiveDatabasePath() {
20
+ return join(getHiveHomeDir(), HIVE_DB_FILENAME);
21
+ }
22
+ export function openHiveDatabase(databasePath = getHiveDatabasePath()) {
23
+ mkdirSync(dirname(databasePath), { recursive: true });
24
+ const db = new Database(databasePath);
25
+ configureDatabase(db);
26
+ runMigrations(db);
27
+ setMetaValue(db, "schema_version", String(CURRENT_SCHEMA_VERSION));
28
+ return db;
29
+ }
30
+ export function closeHiveDatabase(db) {
31
+ db.close();
32
+ }
33
+ function configureDatabase(db) {
34
+ db.pragma("foreign_keys = ON");
35
+ db.pragma("journal_mode = WAL");
36
+ db.pragma("synchronous = NORMAL");
37
+ }
38
+ function ensureMigrationTable(db) {
39
+ db.exec(`
40
+ CREATE TABLE IF NOT EXISTS schema_migrations (
41
+ version INTEGER PRIMARY KEY,
42
+ name TEXT NOT NULL,
43
+ applied_at TEXT NOT NULL
44
+ );
45
+ `);
46
+ }
47
+ export function runMigrations(db) {
48
+ ensureMigrationTable(db);
49
+ const appliedRows = db
50
+ .prepare("SELECT version FROM schema_migrations")
51
+ .all();
52
+ const appliedVersions = new Set(appliedRows.map((row) => row.version));
53
+ for (const migration of MIGRATIONS) {
54
+ if (appliedVersions.has(migration.version)) {
55
+ continue;
56
+ }
57
+ const applyMigration = db.transaction(() => {
58
+ if (migration.name === "v2_agents_profile_columns") {
59
+ ensureAgentProfileColumns(db);
60
+ }
61
+ else {
62
+ db.exec(migration.sql);
63
+ }
64
+ db.prepare(`
65
+ INSERT INTO schema_migrations (version, name, applied_at)
66
+ VALUES (?, ?, ?)
67
+ `).run(migration.version, migration.name, nowIso());
68
+ });
69
+ applyMigration();
70
+ }
71
+ }
72
+ function ensureAgentProfileColumns(db) {
73
+ const tableInfo = db.prepare("PRAGMA table_info(agents)").all();
74
+ const existingColumns = new Set(tableInfo.map((column) => column.name));
75
+ for (const column of AGENT_PROFILE_COLUMNS) {
76
+ if (existingColumns.has(column.name)) {
77
+ continue;
78
+ }
79
+ db.exec(`ALTER TABLE agents ADD COLUMN ${column.name} ${column.definition}`);
80
+ }
81
+ }
82
+ function nowIso() {
83
+ return new Date().toISOString();
84
+ }
85
+ export function getMetaValue(db, key) {
86
+ const row = db
87
+ .prepare("SELECT key, value, updated_at FROM meta WHERE key = ?")
88
+ .get(key);
89
+ return row?.value ?? null;
90
+ }
91
+ export function setMetaValue(db, key, value) {
92
+ db.prepare(`
93
+ INSERT INTO meta (key, value, updated_at)
94
+ VALUES (?, ?, ?)
95
+ ON CONFLICT(key) DO UPDATE SET
96
+ value = excluded.value,
97
+ updated_at = excluded.updated_at
98
+ `).run(key, value, nowIso());
99
+ }
100
+ export function isHiveInitialized(db) {
101
+ const row = db
102
+ .prepare("SELECT COUNT(1) as count FROM agents")
103
+ .get();
104
+ return row.count > 0;
105
+ }
106
+ export function getPrimaryAgent(db) {
107
+ const row = db
108
+ .prepare(`
109
+ SELECT
110
+ id,
111
+ name,
112
+ provider,
113
+ model,
114
+ persona,
115
+ dob,
116
+ location,
117
+ profession,
118
+ about_raw,
119
+ agent_name,
120
+ created_at,
121
+ updated_at
122
+ FROM agents
123
+ ORDER BY datetime(created_at) ASC
124
+ LIMIT 1
125
+ `)
126
+ .get();
127
+ return row ?? null;
128
+ }
129
+ export function upsertPrimaryAgent(db, input) {
130
+ const existing = getPrimaryAgent(db);
131
+ const timestamp = nowIso();
132
+ if (existing) {
133
+ db.prepare(`
134
+ UPDATE agents
135
+ SET
136
+ name = ?,
137
+ provider = ?,
138
+ model = ?,
139
+ persona = ?,
140
+ dob = ?,
141
+ location = ?,
142
+ profession = ?,
143
+ about_raw = ?,
144
+ agent_name = ?,
145
+ updated_at = ?
146
+ WHERE id = ?
147
+ `).run(input.name, input.provider, input.model, input.persona, input.dob ?? null, input.location ?? null, input.profession ?? null, input.aboutRaw ?? null, input.agentName ?? null, timestamp, existing.id);
148
+ return {
149
+ ...existing,
150
+ name: input.name,
151
+ provider: input.provider,
152
+ model: input.model,
153
+ persona: input.persona,
154
+ dob: input.dob ?? null,
155
+ location: input.location ?? null,
156
+ profession: input.profession ?? null,
157
+ about_raw: input.aboutRaw ?? null,
158
+ agent_name: input.agentName ?? null,
159
+ updated_at: timestamp,
160
+ };
161
+ }
162
+ const id = uuidv4();
163
+ db.prepare(`
164
+ INSERT INTO agents (
165
+ id,
166
+ name,
167
+ provider,
168
+ model,
169
+ persona,
170
+ dob,
171
+ location,
172
+ profession,
173
+ about_raw,
174
+ agent_name,
175
+ created_at,
176
+ updated_at
177
+ )
178
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
179
+ `).run(id, input.name, input.provider, input.model, input.persona, input.dob ?? null, input.location ?? null, input.profession ?? null, input.aboutRaw ?? null, input.agentName ?? null, timestamp, timestamp);
180
+ return {
181
+ id,
182
+ name: input.name,
183
+ provider: input.provider,
184
+ model: input.model,
185
+ persona: input.persona,
186
+ dob: input.dob ?? null,
187
+ location: input.location ?? null,
188
+ profession: input.profession ?? null,
189
+ about_raw: input.aboutRaw ?? null,
190
+ agent_name: input.agentName ?? null,
191
+ created_at: timestamp,
192
+ updated_at: timestamp,
193
+ };
194
+ }
195
+ export function updatePrimaryAgentProviderAndModel(db, input) {
196
+ const existing = getPrimaryAgent(db);
197
+ if (!existing) {
198
+ throw new Error("Hive is not initialized. Run `hive init` first.");
199
+ }
200
+ return updatePrimaryAgentConfiguration(db, existing, input.provider, input.model);
201
+ }
202
+ export function updatePrimaryAgentModel(db, model) {
203
+ const existing = getPrimaryAgent(db);
204
+ if (!existing) {
205
+ throw new Error("Hive is not initialized. Run `hive init` first.");
206
+ }
207
+ return updatePrimaryAgentConfiguration(db, existing, existing.provider, model);
208
+ }
209
+ function updatePrimaryAgentConfiguration(db, existing, provider, model) {
210
+ const timestamp = nowIso();
211
+ db.prepare(`
212
+ UPDATE agents
213
+ SET provider = ?, model = ?, updated_at = ?
214
+ WHERE id = ?
215
+ `).run(provider, model, timestamp, existing.id);
216
+ return {
217
+ ...existing,
218
+ provider,
219
+ model,
220
+ updated_at: timestamp,
221
+ };
222
+ }
223
+ export function createConversation(db, input) {
224
+ const id = uuidv4();
225
+ const timestamp = nowIso();
226
+ db.prepare(`
227
+ INSERT INTO conversations (id, agent_id, title, created_at, updated_at)
228
+ VALUES (?, ?, ?, ?, ?)
229
+ `).run(id, input.agentId, input.title ?? null, timestamp, timestamp);
230
+ return {
231
+ id,
232
+ agent_id: input.agentId,
233
+ title: input.title ?? null,
234
+ created_at: timestamp,
235
+ updated_at: timestamp,
236
+ };
237
+ }
238
+ export function getConversationById(db, conversationId) {
239
+ const row = db
240
+ .prepare(`
241
+ SELECT id, agent_id, title, created_at, updated_at
242
+ FROM conversations
243
+ WHERE id = ?
244
+ `)
245
+ .get(conversationId);
246
+ return row ?? null;
247
+ }
248
+ export function getLatestConversationForAgent(db, agentId) {
249
+ const row = db
250
+ .prepare(`
251
+ SELECT id, agent_id, title, created_at, updated_at
252
+ FROM conversations
253
+ WHERE agent_id = ?
254
+ ORDER BY datetime(updated_at) DESC
255
+ LIMIT 1
256
+ `)
257
+ .get(agentId);
258
+ return row ?? null;
259
+ }
260
+ export function appendMessage(db, input) {
261
+ const id = uuidv4();
262
+ const timestamp = nowIso();
263
+ const writeMessage = db.transaction(() => {
264
+ db.prepare(`
265
+ INSERT INTO messages (id, conversation_id, role, content, created_at)
266
+ VALUES (?, ?, ?, ?, ?)
267
+ `).run(id, input.conversationId, input.role, input.content, timestamp);
268
+ db.prepare(`
269
+ UPDATE conversations
270
+ SET updated_at = ?
271
+ WHERE id = ?
272
+ `).run(timestamp, input.conversationId);
273
+ });
274
+ writeMessage();
275
+ return {
276
+ id,
277
+ conversation_id: input.conversationId,
278
+ role: input.role,
279
+ content: input.content,
280
+ created_at: timestamp,
281
+ };
282
+ }
283
+ export function listMessages(db, conversationId, limit = 100) {
284
+ return db
285
+ .prepare(`
286
+ SELECT id, conversation_id, role, content, created_at
287
+ FROM (
288
+ SELECT id, conversation_id, role, content, created_at
289
+ FROM messages
290
+ WHERE conversation_id = ?
291
+ ORDER BY datetime(created_at) DESC
292
+ LIMIT ?
293
+ )
294
+ ORDER BY datetime(created_at) ASC
295
+ `)
296
+ .all(conversationId, limit);
297
+ }
298
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export declare const MESSAGE_ROLES: readonly ["system", "user", "assistant"];
2
+ export type MessageRole = (typeof MESSAGE_ROLES)[number];
3
+ export interface SchemaMigration {
4
+ version: number;
5
+ name: string;
6
+ sql: string;
7
+ }
8
+ export declare const CURRENT_SCHEMA_VERSION = 2;
9
+ export declare const MIGRATIONS: readonly SchemaMigration[];
10
+ export interface MetaRecord {
11
+ key: string;
12
+ value: string;
13
+ updated_at: string;
14
+ }
15
+ export interface AgentRecord {
16
+ id: string;
17
+ name: string;
18
+ provider: string;
19
+ model: string;
20
+ persona: string;
21
+ dob: string | null;
22
+ location: string | null;
23
+ profession: string | null;
24
+ about_raw: string | null;
25
+ agent_name: string | null;
26
+ created_at: string;
27
+ updated_at: string;
28
+ }
29
+ export interface ConversationRecord {
30
+ id: string;
31
+ agent_id: string;
32
+ title: string | null;
33
+ created_at: string;
34
+ updated_at: string;
35
+ }
36
+ export interface MessageRecord {
37
+ id: string;
38
+ conversation_id: string;
39
+ role: MessageRole;
40
+ content: string;
41
+ created_at: string;
42
+ }
43
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/storage/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,0CAA2C,CAAC;AAEtE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAmDxC,eAAO,MAAM,UAAU,EAAE,SAAS,eAAe,EAiBhD,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,69 @@
1
+ export const MESSAGE_ROLES = ["system", "user", "assistant"];
2
+ export const CURRENT_SCHEMA_VERSION = 2;
3
+ const initialSchemaSql = `
4
+ CREATE TABLE IF NOT EXISTS schema_migrations (
5
+ version INTEGER PRIMARY KEY,
6
+ name TEXT NOT NULL,
7
+ applied_at TEXT NOT NULL
8
+ );
9
+
10
+ CREATE TABLE IF NOT EXISTS meta (
11
+ key TEXT PRIMARY KEY,
12
+ value TEXT NOT NULL,
13
+ updated_at TEXT NOT NULL
14
+ );
15
+
16
+ CREATE TABLE IF NOT EXISTS agents (
17
+ id TEXT PRIMARY KEY,
18
+ name TEXT NOT NULL,
19
+ provider TEXT NOT NULL,
20
+ model TEXT NOT NULL,
21
+ persona TEXT NOT NULL,
22
+ dob TEXT,
23
+ location TEXT,
24
+ profession TEXT,
25
+ about_raw TEXT,
26
+ agent_name TEXT,
27
+ created_at TEXT NOT NULL,
28
+ updated_at TEXT NOT NULL
29
+ );
30
+
31
+ CREATE TABLE IF NOT EXISTS conversations (
32
+ id TEXT PRIMARY KEY,
33
+ agent_id TEXT NOT NULL REFERENCES agents(id) ON DELETE CASCADE,
34
+ title TEXT,
35
+ created_at TEXT NOT NULL,
36
+ updated_at TEXT NOT NULL
37
+ );
38
+
39
+ CREATE TABLE IF NOT EXISTS messages (
40
+ id TEXT PRIMARY KEY,
41
+ conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
42
+ role TEXT NOT NULL CHECK (role IN ('system', 'user', 'assistant')),
43
+ content TEXT NOT NULL,
44
+ created_at TEXT NOT NULL
45
+ );
46
+
47
+ CREATE INDEX IF NOT EXISTS idx_conversations_agent_id ON conversations(agent_id);
48
+ CREATE INDEX IF NOT EXISTS idx_messages_conversation_id ON messages(conversation_id);
49
+ CREATE INDEX IF NOT EXISTS idx_messages_created_at ON messages(created_at);
50
+ `;
51
+ export const MIGRATIONS = [
52
+ {
53
+ version: 1,
54
+ name: "v1_initial_schema",
55
+ sql: initialSchemaSql,
56
+ },
57
+ {
58
+ version: 2,
59
+ name: "v2_agents_profile_columns",
60
+ sql: `
61
+ ALTER TABLE agents ADD COLUMN dob TEXT;
62
+ ALTER TABLE agents ADD COLUMN location TEXT;
63
+ ALTER TABLE agents ADD COLUMN profession TEXT;
64
+ ALTER TABLE agents ADD COLUMN about_raw TEXT;
65
+ ALTER TABLE agents ADD COLUMN agent_name TEXT;
66
+ `,
67
+ },
68
+ ];
69
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/storage/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AAUtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CxB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAA+B;IACpD;QACE,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,mBAAmB;QACzB,GAAG,EAAE,gBAAgB;KACtB;IACD;QACE,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,2BAA2B;QACjC,GAAG,EAAE;;;;;;CAMR;KACE;CACF,CAAC"}
package/index.md ADDED
@@ -0,0 +1,16 @@
1
+ # Architecture Decision Records
2
+
3
+ This folder documents the key architectural decisions made building The Hive.
4
+ Each ADR explains what was decided, why, and what was rejected.
5
+
6
+ ---
7
+
8
+ ## Index
9
+
10
+ | # | Decision | Status |
11
+ |---|---|---|
12
+ | [001](./001-local-first-storage.md) | Local-first SQLite storage | Accepted |
13
+ | [002](./002-provider-abstraction.md) | AI provider abstraction layer | Accepted |
14
+ | [003](./003-memory-architecture.md) | 3-layer memory architecture | Accepted |
15
+ | [004](./004-mesh-protocol.md) | libp2p for mesh networking | Accepted |
16
+ | [005](./005-rust-daemon.md) | Rust for the background daemon | Accepted |
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@imisbahk/hive",
3
+ "version": "0.1.0",
4
+ "description": "Your agent. Always running. Always learning. Always working.",
5
+ "type": "module",
6
+ "bin": {
7
+ "hive": "dist/cli/index.js"
8
+ },
9
+ "scripts": {
10
+ "dev": "tsc --watch",
11
+ "build": "tsc",
12
+ "start": "node dist/cli/index.js",
13
+ "lint": "eslint src/**/*.ts",
14
+ "clean": "rm -rf dist"
15
+ },
16
+ "keywords": [
17
+ "ai",
18
+ "agent",
19
+ "cli",
20
+ "p2p",
21
+ "hive"
22
+ ],
23
+ "author": "",
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "@anthropic-ai/sdk": "^0.36.3",
27
+ "better-sqlite3": "^12.6.2",
28
+ "chalk": "^5.3.0",
29
+ "commander": "^12.0.0",
30
+ "dotenv": "^16.4.5",
31
+ "inquirer": "^9.2.15",
32
+ "keytar": "^7.9.0",
33
+ "node-fetch": "^3.3.2",
34
+ "openai": "^4.28.0",
35
+ "ora": "^8.0.1",
36
+ "uuid": "^9.0.1"
37
+ },
38
+ "devDependencies": {
39
+ "@types/better-sqlite3": "^7.6.8",
40
+ "@types/inquirer": "^9.0.7",
41
+ "@types/node": "^20.11.20",
42
+ "@types/uuid": "^9.0.8",
43
+ "typescript": "^5.3.3"
44
+ },
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ }
48
+ }
@@ -0,0 +1,23 @@
1
+ Behavior
2
+ Tone
3
+
4
+ Talk like a sharp, direct human. Not a customer support bot.
5
+ Short answers when the question is simple. Long answers when the question deserves it.
6
+ Never pad responses. Never repeat the question back. Never say "Certainly!" or "Great question!"
7
+ Swear if the conversation calls for it. Match the energy of who you're talking to.
8
+
9
+ Thinking
10
+
11
+ Think before answering. If something needs reasoning, reason through it.
12
+ If you're uncertain, say so — but still give your best answer.
13
+ If a question is vague, make a reasonable assumption and state it, rather than asking for clarification every time.
14
+
15
+ Actions
16
+
17
+ When asked to do something, do it. Don't ask for confirmation unless the action is irreversible or genuinely ambiguous.
18
+ Be proactive. If you notice something relevant while doing a task, mention it.
19
+
20
+ Limits
21
+
22
+ Don't pretend to have capabilities you don't have yet.
23
+ Don't make up facts. If you don't know, say so.
@@ -0,0 +1,12 @@
1
+
2
+ # Code
3
+
4
+ When helping with code:
5
+
6
+ - Read before writing. Understand what exists before suggesting changes.
7
+ - Surgical edits over full rewrites. Change the minimum required to solve the problem.
8
+ - If you spot something broken that wasn't asked about, mention it — but don't fix it uninstructed.
9
+ - Always explain what you changed and why, briefly.
10
+ - Prefer the patterns and conventions already in the codebase over your own preferences.
11
+ - When writing new code, match the style of what's already there.
12
+ - Tests matter. If you add a feature, mention what should be tested even if you don't write the test.
@@ -0,0 +1,11 @@
1
+ Memory
2
+ You have access to everything {name} has told you across past conversations.
3
+ When something from memory is relevant — reference it naturally. Don't announce that you're "accessing memory." Just use it, the way a person who knows someone well naturally remembers things about them.
4
+ If {name} tells you something new about themselves, treat it as real and important. You are building a picture of this person over time.
5
+ Facts you know about {name}:
6
+
7
+ Name: {name}
8
+ Date of birth: {dob}
9
+ Location: {location}
10
+ Profession: {profession}
11
+ About: {about}
@@ -0,0 +1,6 @@
1
+ System
2
+ You are {agent_name}, a personal AI agent running locally on {name}'s machine via The Hive.
3
+ You are direct, sharp, and human. You don't recite product descriptions. You don't give corporate non-answers. You just talk — like a brilliant person who knows {name} well and is genuinely trying to help.
4
+ You remember your conversations. You know who you're talking to. You adapt to context.
5
+ When you don't know something, say so. When you have an opinion, share it. When something is unclear, ask.
6
+ You are not an assistant. You are an agent.
File without changes