@backendkit-labs/curator-codex-agent 0.2.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 (79) hide show
  1. package/AGENT.md +187 -0
  2. package/README.md +475 -0
  3. package/dist/analyzer.d.ts +44 -0
  4. package/dist/analyzer.d.ts.map +1 -0
  5. package/dist/analyzer.js +381 -0
  6. package/dist/analyzer.js.map +1 -0
  7. package/dist/api/config.d.ts +57 -0
  8. package/dist/api/config.d.ts.map +1 -0
  9. package/dist/api/config.js +183 -0
  10. package/dist/api/config.js.map +1 -0
  11. package/dist/api/http-server.d.ts +24 -0
  12. package/dist/api/http-server.d.ts.map +1 -0
  13. package/dist/api/http-server.js +108 -0
  14. package/dist/api/http-server.js.map +1 -0
  15. package/dist/api/routes.d.ts +8 -0
  16. package/dist/api/routes.d.ts.map +1 -0
  17. package/dist/api/routes.js +382 -0
  18. package/dist/api/routes.js.map +1 -0
  19. package/dist/api/security.d.ts +107 -0
  20. package/dist/api/security.d.ts.map +1 -0
  21. package/dist/api/security.js +200 -0
  22. package/dist/api/security.js.map +1 -0
  23. package/dist/checksum.d.ts +56 -0
  24. package/dist/checksum.d.ts.map +1 -0
  25. package/dist/checksum.js +186 -0
  26. package/dist/checksum.js.map +1 -0
  27. package/dist/documentation-curator.d.ts +18 -0
  28. package/dist/documentation-curator.d.ts.map +1 -0
  29. package/dist/documentation-curator.js +231 -0
  30. package/dist/documentation-curator.js.map +1 -0
  31. package/dist/http-server-main.d.ts +28 -0
  32. package/dist/http-server-main.d.ts.map +1 -0
  33. package/dist/http-server-main.js +69 -0
  34. package/dist/http-server-main.js.map +1 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +23 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/knowledge/engine.d.ts +90 -0
  40. package/dist/knowledge/engine.d.ts.map +1 -0
  41. package/dist/knowledge/engine.js +181 -0
  42. package/dist/knowledge/engine.js.map +1 -0
  43. package/dist/knowledge/rag-provider.d.ts +87 -0
  44. package/dist/knowledge/rag-provider.d.ts.map +1 -0
  45. package/dist/knowledge/rag-provider.js +189 -0
  46. package/dist/knowledge/rag-provider.js.map +1 -0
  47. package/dist/knowledge/synthesis.d.ts +27 -0
  48. package/dist/knowledge/synthesis.d.ts.map +1 -0
  49. package/dist/knowledge/synthesis.js +142 -0
  50. package/dist/knowledge/synthesis.js.map +1 -0
  51. package/dist/providers/anthropic-adapter.d.ts +14 -0
  52. package/dist/providers/anthropic-adapter.d.ts.map +1 -0
  53. package/dist/providers/anthropic-adapter.js +29 -0
  54. package/dist/providers/anthropic-adapter.js.map +1 -0
  55. package/dist/providers/index.d.ts +14 -0
  56. package/dist/providers/index.d.ts.map +1 -0
  57. package/dist/providers/index.js +29 -0
  58. package/dist/providers/index.js.map +1 -0
  59. package/dist/providers/openai-adapter.d.ts +16 -0
  60. package/dist/providers/openai-adapter.d.ts.map +1 -0
  61. package/dist/providers/openai-adapter.js +37 -0
  62. package/dist/providers/openai-adapter.js.map +1 -0
  63. package/dist/providers/types.d.ts +4 -0
  64. package/dist/providers/types.d.ts.map +1 -0
  65. package/dist/providers/types.js +3 -0
  66. package/dist/providers/types.js.map +1 -0
  67. package/dist/server.d.ts +33 -0
  68. package/dist/server.d.ts.map +1 -0
  69. package/dist/server.js +640 -0
  70. package/dist/server.js.map +1 -0
  71. package/dist/types.d.ts +41 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +4 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/watcher.d.ts +26 -0
  76. package/dist/watcher.d.ts.map +1 -0
  77. package/dist/watcher.js +168 -0
  78. package/dist/watcher.js.map +1 -0
  79. package/package.json +58 -0
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AnthropicAdapter = void 0;
7
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
8
+ class AnthropicAdapter {
9
+ client;
10
+ model;
11
+ maxTokens;
12
+ constructor(opts) {
13
+ this.client = new sdk_1.default({ apiKey: opts.apiKey });
14
+ this.model = opts.model ?? 'claude-opus-4-8';
15
+ this.maxTokens = opts.maxTokens ?? 16384;
16
+ }
17
+ async complete(systemPrompt, userMessage) {
18
+ const response = await this.client.messages.create({
19
+ model: this.model,
20
+ max_tokens: this.maxTokens,
21
+ system: systemPrompt,
22
+ messages: [{ role: 'user', content: userMessage }],
23
+ });
24
+ const block = response.content[0];
25
+ return block?.type === 'text' ? block.text : '{}';
26
+ }
27
+ }
28
+ exports.AnthropicAdapter = AnthropicAdapter;
29
+ //# sourceMappingURL=anthropic-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-adapter.js","sourceRoot":"","sources":["../../src/providers/anthropic-adapter.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA0C;AAS1C,MAAa,gBAAgB;IACR,MAAM,CAAY;IAClB,KAAK,CAAS;IACd,SAAS,CAAS;IAEnC,YAAY,IAA6B;QACrC,IAAI,CAAC,MAAM,GAAM,IAAI,aAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAO,IAAI,CAAC,KAAK,IAAQ,iBAAiB,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,YAAoB,EAAE,WAAmB;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/C,KAAK,EAAO,IAAI,CAAC,KAAK;YACtB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,MAAM,EAAM,YAAY;YACxB,QAAQ,EAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;SACvD,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;CACJ;AArBD,4CAqBC"}
@@ -0,0 +1,14 @@
1
+ import type { CuratorLLMProvider } from './types.js';
2
+ export { OpenAIAdapter } from './openai-adapter.js';
3
+ export { AnthropicAdapter } from './anthropic-adapter.js';
4
+ export type { CuratorLLMProvider } from './types.js';
5
+ export type ProviderName = 'openai' | 'deepseek' | 'ollama' | 'anthropic';
6
+ export interface ProviderConfig {
7
+ provider?: ProviderName;
8
+ apiKey: string;
9
+ model?: string;
10
+ baseUrl?: string;
11
+ maxTokens?: number;
12
+ }
13
+ export declare function createProvider(cfg?: Partial<ProviderConfig>): CuratorLLMProvider;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAS,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AASD,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAahF"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AnthropicAdapter = exports.OpenAIAdapter = void 0;
4
+ exports.createProvider = createProvider;
5
+ const openai_adapter_js_1 = require("./openai-adapter.js");
6
+ const anthropic_adapter_js_1 = require("./anthropic-adapter.js");
7
+ var openai_adapter_js_2 = require("./openai-adapter.js");
8
+ Object.defineProperty(exports, "OpenAIAdapter", { enumerable: true, get: function () { return openai_adapter_js_2.OpenAIAdapter; } });
9
+ var anthropic_adapter_js_2 = require("./anthropic-adapter.js");
10
+ Object.defineProperty(exports, "AnthropicAdapter", { enumerable: true, get: function () { return anthropic_adapter_js_2.AnthropicAdapter; } });
11
+ const DEFAULTS = {
12
+ deepseek: { model: 'deepseek-reasoner', baseUrl: 'https://api.deepseek.com/v1' },
13
+ openai: { model: 'o3-mini' },
14
+ ollama: { model: 'qwen2.5-coder:7b', baseUrl: 'http://localhost:11434/v1' },
15
+ anthropic: { model: 'claude-opus-4-8' },
16
+ };
17
+ function createProvider(cfg) {
18
+ const provider = (cfg?.provider ?? process.env.CURATOR_PROVIDER ?? 'deepseek');
19
+ const apiKey = cfg?.apiKey ?? process.env.CURATOR_API_KEY ?? '';
20
+ const model = cfg?.model ?? process.env.CURATOR_MODEL ?? DEFAULTS[provider].model;
21
+ const baseUrl = cfg?.baseUrl ?? process.env.CURATOR_BASE_URL ?? DEFAULTS[provider].baseUrl;
22
+ if (!apiKey)
23
+ throw new Error('CURATOR_API_KEY env var is required');
24
+ if (provider === 'anthropic') {
25
+ return new anthropic_adapter_js_1.AnthropicAdapter({ apiKey, model, maxTokens: cfg?.maxTokens });
26
+ }
27
+ return new openai_adapter_js_1.OpenAIAdapter({ apiKey, model, baseUrl, maxTokens: cfg?.maxTokens });
28
+ }
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;AAyBA,wCAaC;AAtCD,2DAAuD;AACvD,iEAA0D;AAG1D,yDAAuD;AAA9C,kHAAA,aAAa,OAAA;AACtB,+DAA0D;AAAjD,wHAAA,gBAAgB,OAAA;AAazB,MAAM,QAAQ,GAA8D;IACxE,QAAQ,EAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,6BAA6B,EAAE;IACjF,MAAM,EAAK,EAAE,KAAK,EAAE,SAAS,EAAE;IAC/B,MAAM,EAAK,EAAE,KAAK,EAAE,kBAAkB,EAAG,OAAO,EAAE,2BAA2B,EAAE;IAC/E,SAAS,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;CAC1C,CAAC;AAEF,SAAgB,cAAc,CAAC,GAA6B;IACxD,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU,CAAiB,CAAC;IAC/F,MAAM,MAAM,GAAK,GAAG,EAAE,MAAM,IAAM,OAAO,CAAC,GAAG,CAAC,eAAe,IAAM,EAAE,CAAC;IACtE,MAAM,KAAK,GAAM,GAAG,EAAE,KAAK,IAAO,OAAO,CAAC,GAAG,CAAC,aAAa,IAAS,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;IAC7F,MAAM,OAAO,GAAI,GAAG,EAAE,OAAO,IAAK,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;IAE/F,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAEpE,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,IAAI,uCAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,IAAI,iCAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;AACpF,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { CuratorLLMProvider } from './types.js';
2
+ export interface OpenAIAdapterOptions {
3
+ apiKey: string;
4
+ model: string;
5
+ baseUrl?: string;
6
+ maxTokens?: number;
7
+ }
8
+ export declare class OpenAIAdapter implements CuratorLLMProvider {
9
+ private readonly client;
10
+ private readonly model;
11
+ private readonly maxTokens;
12
+ private readonly isReasoner;
13
+ constructor(opts: OpenAIAdapterOptions);
14
+ complete(systemPrompt: string, userMessage: string): Promise<string>;
15
+ }
16
+ //# sourceMappingURL=openai-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../src/providers/openai-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,aAAc,YAAW,kBAAkB;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;gBAEzB,IAAI,EAAE,oBAAoB;IAUhC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAa7E"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OpenAIAdapter = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ class OpenAIAdapter {
9
+ client;
10
+ model;
11
+ maxTokens;
12
+ isReasoner;
13
+ constructor(opts) {
14
+ this.client = new openai_1.default({
15
+ apiKey: opts.apiKey,
16
+ baseURL: opts.baseUrl ?? 'https://api.deepseek.com/v1',
17
+ });
18
+ this.model = opts.model;
19
+ this.maxTokens = opts.maxTokens ?? 16384;
20
+ this.isReasoner = /reasoner|^o\d/.test(opts.model);
21
+ }
22
+ async complete(systemPrompt, userMessage) {
23
+ const completion = await this.client.chat.completions.create({
24
+ model: this.model,
25
+ max_tokens: this.maxTokens,
26
+ response_format: { type: 'json_object' },
27
+ ...(this.isReasoner ? {} : { temperature: 0.2 }),
28
+ messages: [
29
+ { role: 'system', content: systemPrompt },
30
+ { role: 'user', content: userMessage },
31
+ ],
32
+ });
33
+ return completion.choices[0]?.message?.content ?? '{}';
34
+ }
35
+ }
36
+ exports.OpenAIAdapter = OpenAIAdapter;
37
+ //# sourceMappingURL=openai-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../../src/providers/openai-adapter.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAU5B,MAAa,aAAa;IACL,MAAM,CAAS;IACf,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,UAAU,CAAU;IAErC,YAAY,IAA0B;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC;YACrB,MAAM,EAAG,IAAI,CAAC,MAAM;YACpB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,6BAA6B;SACzD,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAO,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,YAAoB,EAAE,WAAmB;QACpD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACzD,KAAK,EAAY,IAAI,CAAC,KAAK;YAC3B,UAAU,EAAO,IAAI,CAAC,SAAS;YAC/B,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;YACxC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;YAChD,QAAQ,EAAE;gBACN,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAI,OAAO,EAAE,WAAW,EAAE;aAC3C;SACJ,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IAC3D,CAAC;CACJ;AA7BD,sCA6BC"}
@@ -0,0 +1,4 @@
1
+ export interface CuratorLLMProvider {
2
+ complete(systemPrompt: string, userMessage: string): Promise<string>;
3
+ }
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxE"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * curator-codex-agent — Unified MCP Server (Stdio + HTTP)
4
+ *
5
+ * Dual-transport MCP server for maximum flexibility:
6
+ * - Stdio Transport (always active) — for Claude Desktop, local agents
7
+ * - HTTP Transport (optional) — for remote clients
8
+ *
9
+ * Both transports can run simultaneously, allowing:
10
+ * ✓ Claude Desktop (stdio) + remote clients (HTTP)
11
+ * ✓ bk-agent embedding (stdio) + external tools (HTTP)
12
+ *
13
+ * Required env vars:
14
+ * CURATOR_API_KEY — LLM API key
15
+ * CURATOR_OUTPUT_PATH — vault path
16
+ *
17
+ * Optional:
18
+ * CURATOR_HTTP_PORT — Enable HTTP transport on this port (e.g., 3101)
19
+ * CURATOR_MODEL — LLM model (default: deepseek-reasoner)
20
+ * CURATOR_BASE_URL — Custom LLM base URL
21
+ *
22
+ * Usage:
23
+ * # Stdio only (default, for Claude Desktop)
24
+ * npm start
25
+ *
26
+ * # Stdio + HTTP (for maximum flexibility)
27
+ * CURATOR_HTTP_PORT=3101 npm start
28
+ *
29
+ * # Stdio + HTTP + verbose logging
30
+ * DEBUG=* CURATOR_HTTP_PORT=3101 npm start
31
+ */
32
+ import 'dotenv/config';
33
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,eAAe,CAAC"}