@orquentra/codebuddy 0.0.0-stage → 2.4.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 (82) hide show
  1. package/ARCHITECTURE.md +269 -0
  2. package/CLAUDE_CODEX.md +433 -0
  3. package/LICENSE +21 -0
  4. package/README.md +55 -2
  5. package/WORKFLOW.md +152 -0
  6. package/dist/chunk-3ZELDCR3.js +204 -0
  7. package/dist/chunk-3ZELDCR3.js.map +1 -0
  8. package/dist/chunk-5OWZVZSO.js +476 -0
  9. package/dist/chunk-5OWZVZSO.js.map +1 -0
  10. package/dist/chunk-DSN5CEHO.js +175 -0
  11. package/dist/chunk-DSN5CEHO.js.map +1 -0
  12. package/dist/chunk-GDJH7XJC.js +119 -0
  13. package/dist/chunk-GDJH7XJC.js.map +1 -0
  14. package/dist/chunk-IBMJYIEP.js +1578 -0
  15. package/dist/chunk-IBMJYIEP.js.map +1 -0
  16. package/dist/chunk-IE2OUO54.js +199 -0
  17. package/dist/chunk-IE2OUO54.js.map +1 -0
  18. package/dist/chunk-IHQM2ZDV.js +19 -0
  19. package/dist/chunk-IHQM2ZDV.js.map +1 -0
  20. package/dist/chunk-ITGRANYW.js +63 -0
  21. package/dist/chunk-ITGRANYW.js.map +1 -0
  22. package/dist/chunk-K63EOA4B.js +416 -0
  23. package/dist/chunk-K63EOA4B.js.map +1 -0
  24. package/dist/chunk-OLFCOR4U.js +8580 -0
  25. package/dist/chunk-OLFCOR4U.js.map +1 -0
  26. package/dist/chunk-PQK3GKZH.js +98 -0
  27. package/dist/chunk-PQK3GKZH.js.map +1 -0
  28. package/dist/chunk-PYLH4MH5.js +34 -0
  29. package/dist/chunk-PYLH4MH5.js.map +1 -0
  30. package/dist/chunk-PZ5AY32C.js +10 -0
  31. package/dist/chunk-PZ5AY32C.js.map +1 -0
  32. package/dist/chunk-TI5TQD6D.js +324 -0
  33. package/dist/chunk-TI5TQD6D.js.map +1 -0
  34. package/dist/chunk-WHZSVY2L.js +144 -0
  35. package/dist/chunk-WHZSVY2L.js.map +1 -0
  36. package/dist/cli/index.d.ts +1 -0
  37. package/dist/cli/index.js +15 -0
  38. package/dist/cli/index.js.map +1 -0
  39. package/dist/codebuddy-D2xJ6hFk.d.ts +841 -0
  40. package/dist/config-S2TULOMK.js +11 -0
  41. package/dist/config-S2TULOMK.js.map +1 -0
  42. package/dist/index.d.ts +2527 -0
  43. package/dist/index.js +116 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/langgraph/index.d.ts +53 -0
  46. package/dist/langgraph/index.js +143 -0
  47. package/dist/langgraph/index.js.map +1 -0
  48. package/dist/lean-command-D6TZJEFX.js +13 -0
  49. package/dist/lean-command-D6TZJEFX.js.map +1 -0
  50. package/dist/main-BFDVQHKO.js +4575 -0
  51. package/dist/main-BFDVQHKO.js.map +1 -0
  52. package/dist/memory-NIBFAMY4.js +57 -0
  53. package/dist/memory-NIBFAMY4.js.map +1 -0
  54. package/dist/pretool-command-MQQ2UNQM.js +10 -0
  55. package/dist/pretool-command-MQQ2UNQM.js.map +1 -0
  56. package/dist/rerank-Q7MIFNKA.js +60 -0
  57. package/dist/rerank-Q7MIFNKA.js.map +1 -0
  58. package/dist/summaries-TSE44KUQ.js +18 -0
  59. package/dist/summaries-TSE44KUQ.js.map +1 -0
  60. package/dist/zvec-F27AR357.js +23 -0
  61. package/dist/zvec-F27AR357.js.map +1 -0
  62. package/docker-compose.yml +20 -0
  63. package/examples/claude-code/README.md +67 -0
  64. package/examples/claude-desktop/README.md +54 -0
  65. package/examples/claude-desktop/claude_desktop_config.json +13 -0
  66. package/examples/langgraph-agent/README.md +32 -0
  67. package/examples/langgraph-agent/index.ts +71 -0
  68. package/examples/multi-agent-handoff/README.md +35 -0
  69. package/examples/multi-agent-handoff/index.ts +68 -0
  70. package/package.json +108 -4
  71. package/src/db/migrations/0000_cultured_satana.sql +144 -0
  72. package/src/db/migrations/0001_embedding_lease.sql +3 -0
  73. package/src/db/migrations/0002_embedding_lease_token.sql +1 -0
  74. package/src/db/migrations/0003_embedding_space.sql +9 -0
  75. package/src/db/migrations/0004_markdown_reconcile.sql +5 -0
  76. package/src/db/migrations/0005_fact_propositions.sql +1 -0
  77. package/src/db/migrations/meta/0000_snapshot.json +1169 -0
  78. package/src/db/migrations/meta/0002_snapshot.json +1181 -0
  79. package/src/db/migrations/meta/0003_snapshot.json +1214 -0
  80. package/src/db/migrations/meta/0004_snapshot.json +1225 -0
  81. package/src/db/migrations/meta/0005_snapshot.json +1231 -0
  82. package/src/db/migrations/meta/_journal.json +48 -0
package/package.json CHANGED
@@ -1,6 +1,110 @@
1
1
  {
2
2
  "name": "@orquentra/codebuddy",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "2.4.1",
4
+ "description": "Local-first project context and memory for AI coding agents.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "author": "Orquentra Inc",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/Orquentra-Inc/CodeBuddy"
14
+ },
15
+ "engines": {
16
+ "node": ">=20"
17
+ },
18
+ "bin": {
19
+ "codebuddy": "./dist/cli/index.js"
20
+ },
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ },
26
+ "./langgraph": {
27
+ "types": "./dist/langgraph/index.d.ts",
28
+ "import": "./dist/langgraph/index.js"
29
+ }
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "src/db/migrations",
34
+ "README.md",
35
+ "CLAUDE_CODEX.md",
36
+ "ARCHITECTURE.md",
37
+ "WORKFLOW.md",
38
+ "LICENSE",
39
+ "docker-compose.yml",
40
+ "examples"
41
+ ],
42
+ "scripts": {
43
+ "build": "tsup",
44
+ "dev": "tsx src/cli/index.ts",
45
+ "db:generate": "drizzle-kit generate",
46
+ "db:migrate": "drizzle-kit migrate",
47
+ "typecheck": "tsc --noEmit",
48
+ "test": "vitest run --passWithNoTests",
49
+ "test:pg": "bash scripts/test-pg-recovery.sh",
50
+ "eval:agent-ab": "tsx scripts/eval-agent-ab.mts",
51
+ "eval:memory-ab": "tsx scripts/eval-memory-ab.mts",
52
+ "eval:retrieval": "tsx scripts/eval-retrieval.mts",
53
+ "eval:savings": "tsx scripts/eval-task-savings.mts",
54
+ "branches:prune": "bash scripts/prune-merged-branches.sh",
55
+ "lint": "biome check .",
56
+ "format": "biome format --write .",
57
+ "prepublishOnly": "npm run typecheck && npm test && npm run build"
58
+ },
59
+ "keywords": [
60
+ "mcp",
61
+ "memory",
62
+ "agent",
63
+ "multi-agent",
64
+ "huggingface",
65
+ "pgvector",
66
+ "postgres",
67
+ "langgraph",
68
+ "claude"
69
+ ],
70
+ "homepage": "https://github.com/Orquentra-Inc/CodeBuddy",
71
+ "bugs": {
72
+ "url": "https://github.com/Orquentra-Inc/CodeBuddy/issues"
73
+ },
74
+ "dependencies": {
75
+ "@clack/prompts": "^0.11.0",
76
+ "@huggingface/inference": "^4.13.19",
77
+ "@modelcontextprotocol/sdk": "^1.17.5",
78
+ "commander": "^14.0.0",
79
+ "drizzle-orm": "^0.45.2",
80
+ "js-tiktoken": "^1.0.21",
81
+ "langsmith": "^0.7.10",
82
+ "ora": "^8.2.0",
83
+ "p-queue": "^8.1.0",
84
+ "p-retry": "^6.2.1",
85
+ "p-timeout": "^6.1.4",
86
+ "picocolors": "^1.1.1",
87
+ "pino": "^9.9.0",
88
+ "pino-pretty": "^13.1.1",
89
+ "postgres": "^3.4.7",
90
+ "yaml": "^2.9.0",
91
+ "zod": "^4.6.7"
92
+ },
93
+ "peerDependencies": {
94
+ "@langchain/langgraph": "^0.2.0 || ^0.3.0"
95
+ },
96
+ "peerDependenciesMeta": {
97
+ "@langchain/langgraph": {
98
+ "optional": true
99
+ }
100
+ },
101
+ "devDependencies": {
102
+ "@biomejs/biome": "^2.5.0",
103
+ "@types/node": "^24.3.0",
104
+ "drizzle-kit": "^0.31.10",
105
+ "tsup": "^8.5.0",
106
+ "tsx": "^4.20.5",
107
+ "typescript": "^5.9.2",
108
+ "vitest": "^4.1.12"
109
+ }
110
+ }
@@ -0,0 +1,144 @@
1
+ CREATE TYPE "public"."audit_action" AS ENUM('remember', 'remember_batch', 'share', 'forget', 'config');--> statement-breakpoint
2
+ CREATE TYPE "public"."embedding_owner_type" AS ENUM('interaction', 'fact', 'summary');--> statement-breakpoint
3
+ CREATE TYPE "public"."embedding_status" AS ENUM('pending', 'ready', 'failed');--> statement-breakpoint
4
+ CREATE TYPE "public"."interaction_role" AS ENUM('user', 'assistant', 'system');--> statement-breakpoint
5
+ CREATE TYPE "public"."memory_type" AS ENUM('interaction', 'fact', 'summary');--> statement-breakpoint
6
+ CREATE TYPE "public"."model_call_status" AS ENUM('success', 'failed', 'timeout', 'rate_limited', 'gated', 'fallback');--> statement-breakpoint
7
+ CREATE TYPE "public"."model_call_type" AS ENUM('embedding', 'llm');--> statement-breakpoint
8
+ CREATE TYPE "public"."share_mode" AS ENUM('reference', 'snapshot');--> statement-breakpoint
9
+ CREATE TABLE "audit_log" (
10
+ "id" text PRIMARY KEY NOT NULL,
11
+ "namespace_id" text,
12
+ "action" "audit_action" NOT NULL,
13
+ "entity_type" text NOT NULL,
14
+ "entity_id" text,
15
+ "created_by_agent" text,
16
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
17
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
18
+ );
19
+ --> statement-breakpoint
20
+ CREATE TABLE "checkpoints" (
21
+ "id" text PRIMARY KEY NOT NULL,
22
+ "namespace_id" text NOT NULL,
23
+ "thread_id" text NOT NULL,
24
+ "checkpoint_id" text NOT NULL,
25
+ "parent_id" text,
26
+ "channel_values" jsonb DEFAULT '{}'::jsonb NOT NULL,
27
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
28
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
29
+ );
30
+ --> statement-breakpoint
31
+ CREATE TABLE "embeddings" (
32
+ "id" text PRIMARY KEY NOT NULL,
33
+ "namespace_id" text NOT NULL,
34
+ "owner_type" "embedding_owner_type" NOT NULL,
35
+ "owner_id" text NOT NULL,
36
+ "vector" vector(384) NOT NULL,
37
+ "embedding_model" text NOT NULL,
38
+ "status" "embedding_status" DEFAULT 'pending' NOT NULL,
39
+ "attempts" integer DEFAULT 0 NOT NULL,
40
+ "last_error" text,
41
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
42
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
43
+ );
44
+ --> statement-breakpoint
45
+ CREATE TABLE "facts" (
46
+ "id" text PRIMARY KEY NOT NULL,
47
+ "namespace_id" text NOT NULL,
48
+ "subject" text NOT NULL,
49
+ "predicate" text NOT NULL,
50
+ "object" text NOT NULL,
51
+ "content" text NOT NULL,
52
+ "content_hash" text NOT NULL,
53
+ "confidence" numeric(5, 4) DEFAULT '1' NOT NULL,
54
+ "source_interaction_id" text,
55
+ "source_deleted" boolean DEFAULT false NOT NULL,
56
+ "embedding_model" text,
57
+ "created_by_agent" text,
58
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
59
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
60
+ );
61
+ --> statement-breakpoint
62
+ CREATE TABLE "interactions" (
63
+ "id" text PRIMARY KEY NOT NULL,
64
+ "namespace_id" text NOT NULL,
65
+ "session_id" text NOT NULL,
66
+ "role" "interaction_role" DEFAULT 'user' NOT NULL,
67
+ "content" text NOT NULL,
68
+ "content_hash" text NOT NULL,
69
+ "token_count" integer DEFAULT 0 NOT NULL,
70
+ "created_by_agent" text,
71
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
72
+ );
73
+ --> statement-breakpoint
74
+ CREATE TABLE "model_calls" (
75
+ "id" text PRIMARY KEY NOT NULL,
76
+ "namespace_id" text,
77
+ "model" text NOT NULL,
78
+ "type" "model_call_type" NOT NULL,
79
+ "latency_ms" integer,
80
+ "tokens" integer,
81
+ "status" "model_call_status" NOT NULL,
82
+ "error" text,
83
+ "metadata" jsonb DEFAULT '{}'::jsonb NOT NULL,
84
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
85
+ );
86
+ --> statement-breakpoint
87
+ CREATE TABLE "namespaces" (
88
+ "id" text PRIMARY KEY NOT NULL,
89
+ "name" text NOT NULL,
90
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
91
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
92
+ );
93
+ --> statement-breakpoint
94
+ CREATE TABLE "session_summaries" (
95
+ "id" text PRIMARY KEY NOT NULL,
96
+ "namespace_id" text NOT NULL,
97
+ "session_id" text NOT NULL,
98
+ "content" text NOT NULL,
99
+ "version" integer DEFAULT 1 NOT NULL,
100
+ "token_count" integer DEFAULT 0 NOT NULL,
101
+ "created_by_agent" text,
102
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
103
+ );
104
+ --> statement-breakpoint
105
+ CREATE TABLE "shares" (
106
+ "id" text PRIMARY KEY NOT NULL,
107
+ "from_namespace_id" text NOT NULL,
108
+ "to_namespace_id" text NOT NULL,
109
+ "source_fact_id" text NOT NULL,
110
+ "snapshot_fact_id" text,
111
+ "mode" "share_mode" DEFAULT 'reference' NOT NULL,
112
+ "tombstoned" boolean DEFAULT false NOT NULL,
113
+ "created_by_agent" text,
114
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
115
+ );
116
+ --> statement-breakpoint
117
+ ALTER TABLE "audit_log" ADD CONSTRAINT "audit_log_namespace_id_namespaces_id_fk" FOREIGN KEY ("namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
118
+ ALTER TABLE "checkpoints" ADD CONSTRAINT "checkpoints_namespace_id_namespaces_id_fk" FOREIGN KEY ("namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
119
+ ALTER TABLE "embeddings" ADD CONSTRAINT "embeddings_namespace_id_namespaces_id_fk" FOREIGN KEY ("namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
120
+ ALTER TABLE "facts" ADD CONSTRAINT "facts_namespace_id_namespaces_id_fk" FOREIGN KEY ("namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
121
+ ALTER TABLE "facts" ADD CONSTRAINT "facts_source_interaction_id_interactions_id_fk" FOREIGN KEY ("source_interaction_id") REFERENCES "public"."interactions"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
122
+ ALTER TABLE "interactions" ADD CONSTRAINT "interactions_namespace_id_namespaces_id_fk" FOREIGN KEY ("namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
123
+ ALTER TABLE "model_calls" ADD CONSTRAINT "model_calls_namespace_id_namespaces_id_fk" FOREIGN KEY ("namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
124
+ ALTER TABLE "session_summaries" ADD CONSTRAINT "session_summaries_namespace_id_namespaces_id_fk" FOREIGN KEY ("namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
125
+ ALTER TABLE "shares" ADD CONSTRAINT "shares_from_namespace_id_namespaces_id_fk" FOREIGN KEY ("from_namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
126
+ ALTER TABLE "shares" ADD CONSTRAINT "shares_to_namespace_id_namespaces_id_fk" FOREIGN KEY ("to_namespace_id") REFERENCES "public"."namespaces"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
127
+ ALTER TABLE "shares" ADD CONSTRAINT "shares_source_fact_id_facts_id_fk" FOREIGN KEY ("source_fact_id") REFERENCES "public"."facts"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
128
+ ALTER TABLE "shares" ADD CONSTRAINT "shares_snapshot_fact_id_facts_id_fk" FOREIGN KEY ("snapshot_fact_id") REFERENCES "public"."facts"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
129
+ CREATE INDEX "audit_log_namespace_action_created_idx" ON "audit_log" USING btree ("namespace_id","action","created_at");--> statement-breakpoint
130
+ CREATE UNIQUE INDEX "checkpoints_thread_checkpoint_unique" ON "checkpoints" USING btree ("namespace_id","thread_id","checkpoint_id");--> statement-breakpoint
131
+ CREATE UNIQUE INDEX "embeddings_owner_unique" ON "embeddings" USING btree ("owner_type","owner_id");--> statement-breakpoint
132
+ CREATE INDEX "embeddings_namespace_model_status_idx" ON "embeddings" USING btree ("namespace_id","embedding_model","status");--> statement-breakpoint
133
+ CREATE INDEX "embeddings_vector_hnsw_idx" ON "embeddings" USING hnsw ("vector" vector_cosine_ops);--> statement-breakpoint
134
+ CREATE UNIQUE INDEX "facts_namespace_content_hash_unique" ON "facts" USING btree ("namespace_id","content_hash");--> statement-breakpoint
135
+ CREATE INDEX "facts_namespace_subject_idx" ON "facts" USING btree ("namespace_id","subject");--> statement-breakpoint
136
+ CREATE INDEX "facts_source_interaction_idx" ON "facts" USING btree ("source_interaction_id");--> statement-breakpoint
137
+ CREATE UNIQUE INDEX "interactions_namespace_content_hash_unique" ON "interactions" USING btree ("namespace_id","content_hash");--> statement-breakpoint
138
+ CREATE INDEX "interactions_namespace_session_created_idx" ON "interactions" USING btree ("namespace_id","session_id","created_at");--> statement-breakpoint
139
+ CREATE INDEX "model_calls_model_created_idx" ON "model_calls" USING btree ("model","created_at");--> statement-breakpoint
140
+ CREATE INDEX "model_calls_namespace_created_idx" ON "model_calls" USING btree ("namespace_id","created_at");--> statement-breakpoint
141
+ CREATE UNIQUE INDEX "namespaces_name_unique" ON "namespaces" USING btree ("name");--> statement-breakpoint
142
+ CREATE INDEX "session_summaries_namespace_session_version_idx" ON "session_summaries" USING btree ("namespace_id","session_id","version");--> statement-breakpoint
143
+ CREATE UNIQUE INDEX "shares_target_source_unique" ON "shares" USING btree ("to_namespace_id","source_fact_id","mode");--> statement-breakpoint
144
+ CREATE INDEX "shares_from_namespace_idx" ON "shares" USING btree ("from_namespace_id");
@@ -0,0 +1,3 @@
1
+ ALTER TYPE "embedding_status" ADD VALUE 'processing';--> statement-breakpoint
2
+ ALTER TABLE "embeddings" ADD COLUMN "lease_until" timestamp with time zone;--> statement-breakpoint
3
+ CREATE INDEX IF NOT EXISTS "embeddings_status_created_idx" ON "embeddings" ("status","created_at");
@@ -0,0 +1 @@
1
+ ALTER TABLE "embeddings" ADD COLUMN "lease_token" text;
@@ -0,0 +1,9 @@
1
+ ALTER TABLE "embeddings" ADD COLUMN "embedding_space" text;--> statement-breakpoint
2
+ CREATE INDEX "embeddings_namespace_space_status_idx" ON "embeddings" USING btree ("namespace_id","embedding_space","status");
3
+ --> statement-breakpoint
4
+ -- Legacy vectors cannot prove revision/preprocessing identity. Preserve owners and
5
+ -- requeue derived vectors so the worker assigns the actual response space.
6
+ UPDATE "embeddings"
7
+ SET "status" = 'pending', "attempts" = 0, "last_error" = NULL,
8
+ "lease_until" = NULL, "lease_token" = NULL, "updated_at" = now()
9
+ WHERE "embedding_space" IS NULL;
@@ -0,0 +1,5 @@
1
+ ALTER TABLE "facts" DROP CONSTRAINT IF EXISTS "facts_source_interaction_id_interactions_id_fk";
2
+ --> statement-breakpoint
3
+ ALTER TABLE "facts" ADD COLUMN IF NOT EXISTS "superseded_by" text;--> statement-breakpoint
4
+ ALTER TABLE "facts" ADD COLUMN IF NOT EXISTS "file_backed" boolean DEFAULT false NOT NULL;--> statement-breakpoint
5
+ ALTER TABLE "session_summaries" ADD COLUMN IF NOT EXISTS "file_backed" boolean DEFAULT false NOT NULL;
@@ -0,0 +1 @@
1
+ ALTER TABLE "facts" ADD COLUMN "proposition_key" text;