@ulpi/cli 0.1.5 → 0.1.7

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 (109) hide show
  1. package/README.md +143 -214
  2. package/dist/{auth-PN7TMQHV-2W4ICG64.js → auth-FWM7MM4Q-VZC3U2XZ.js} +1 -1
  3. package/dist/{auth-BFFBUJUC.js → auth-HDK7ECJL.js} +2 -1
  4. package/dist/{chunk-RJIRWQJD.js → chunk-3BCW6ABU.js} +402 -142
  5. package/dist/{chunk-L3PWNHSA.js → chunk-3WB5CXH4.js} +180 -5
  6. package/dist/{chunk-K4OVPFY2.js → chunk-4UCJIAOU.js} +2 -2
  7. package/dist/chunk-4XTHZVDS.js +109 -0
  8. package/dist/chunk-4ZPOZULQ.js +6522 -0
  9. package/dist/{chunk-SIAQVRKG.js → chunk-5MI5GIXM.js} +48 -2
  10. package/dist/{chunk-KLEASXUR.js → chunk-6ZL6NXMV.js} +1 -1
  11. package/dist/{chunk-AV5RB3N2.js → chunk-76D3BYJD.js} +48 -0
  12. package/dist/{chunk-DOIKS6C5.js → chunk-AWOSRA5F.js} +1 -1
  13. package/dist/{chunk-UCMT5OKP.js → chunk-BFEKZZHM.js} +274 -57
  14. package/dist/chunk-C7CLUQI6.js +1286 -0
  15. package/dist/{chunk-ELTGWMDE.js → chunk-E3B5NROU.js} +7 -7
  16. package/dist/chunk-EJ7TW77N.js +1418 -0
  17. package/dist/{chunk-P2RESJRN.js → chunk-EWLYVXQ4.js} +2 -2
  18. package/dist/{chunk-6OURRFP7.js → chunk-IV6MWETF.js} +383 -168
  19. package/dist/chunk-IZPJHSPX.js +1478 -0
  20. package/dist/chunk-JLHNLM3C.js +228 -0
  21. package/dist/chunk-PO4NUZUU.js +147 -0
  22. package/dist/chunk-S6ANCSYO.js +1271 -0
  23. package/dist/chunk-SEU7WWNQ.js +1251 -0
  24. package/dist/chunk-SNQ7NAIS.js +453 -0
  25. package/dist/{ulpi-RMMCUAGP-EWYUE7RU.js → chunk-TSLDGT5O.js} +73 -35
  26. package/dist/{chunk-EIWYSP3A.js → chunk-UXHCHOWQ.js} +83 -62
  27. package/dist/chunk-WED4LM5N.js +322 -0
  28. package/dist/chunk-WVOZE25N.js +6757 -0
  29. package/dist/{chunk-5SCG7UYM.js → chunk-XKF4DPUM.js} +7 -7
  30. package/dist/{chunk-74WVVWJ4.js → chunk-YOKL7RB5.js} +184 -15
  31. package/dist/chunk-Z53CAR7G.js +298 -0
  32. package/dist/{ci-JQ56YIKC.js → ci-COZRTPGQ.js} +124 -26
  33. package/dist/cloud-2F3NLVHN.js +274 -0
  34. package/dist/{codemap-HMYBXJL2.js → codemap-XNGMAF3F.js} +37 -37
  35. package/dist/codex-MB5YTMRT.js +132 -0
  36. package/dist/{config-YYWEN7U2.js → config-OOELBYTH.js} +1 -1
  37. package/dist/dist-2BJYR5EI.js +59 -0
  38. package/dist/dist-3EIQTZHT.js +1380 -0
  39. package/dist/{dist-WAMAQVPK.js → dist-4U5L2X2C.js} +2 -2
  40. package/dist/{dist-4XTJ6HLM.js → dist-54KAMNLO.js} +16 -15
  41. package/dist/dist-6M4MZWZW.js +58 -0
  42. package/dist/dist-6X576SU2.js +27 -0
  43. package/dist/dist-7QOEYLFX.js +103 -0
  44. package/dist/dist-AYBGHEDY.js +2541 -0
  45. package/dist/dist-EK45QNEM.js +45 -0
  46. package/dist/{dist-U7ZIJMZD.js → dist-FKFEJRPX.js} +16 -15
  47. package/dist/dist-GTEJUBBT.js +66 -0
  48. package/dist/dist-HA74OKJZ.js +40 -0
  49. package/dist/{dist-XG2GG5SD.js → dist-HU5RZAON.js} +14 -2
  50. package/dist/dist-IYE3OBRB.js +374 -0
  51. package/dist/{dist-7WLLPWWB.js → dist-JLU26AB6.js} +12 -9
  52. package/dist/{dist-6G7JC2RA.js → dist-KUCI6JFE.js} +49 -9
  53. package/dist/dist-NUEMFZFL.js +33 -0
  54. package/dist/{dist-GWGTAHNM.js → dist-NUXMDXZ3.js} +31 -3
  55. package/dist/{dist-5R4RYNQO.js → dist-YCNWHSLN.js} +15 -5
  56. package/dist/{dist-6MFVWIFF.js → dist-YFFG2ZD6.js} +9 -16
  57. package/dist/dist-ZG4OKCSR.js +15 -0
  58. package/dist/doctor-FKYSIHER.js +345 -0
  59. package/dist/{export-import-4A5MWLIA.js → export-import-JFQH4KSJ.js} +1 -1
  60. package/dist/{history-RNUWO4JZ.js → history-UMGQNQQ7.js} +7 -7
  61. package/dist/{hooks-installer-K2JXEBNN.js → hooks-installer-YEYTYA6Q.js} +2 -2
  62. package/dist/index.js +398 -622
  63. package/dist/{init-NQWFZPKO.js → init-TJYW5ROZ.js} +78 -12
  64. package/dist/job-HIDMAFW2.js +376 -0
  65. package/dist/jobs.memory-PLMMSFHB-VBECCTHN.js +33 -0
  66. package/dist/kiro-VMUHDFGK.js +153 -0
  67. package/dist/{launchd-OYXUAVW6.js → launchd-U3MSWBRH.js} +9 -17
  68. package/dist/mcp-PDUD7SGP.js +249 -0
  69. package/dist/mcp-installer-PQU3XOGO.js +259 -0
  70. package/dist/mcp-setup-OA7IB3H3.js +263 -0
  71. package/dist/{memory-D6ZFFCI2.js → memory-ZNAEAK3B.js} +17 -17
  72. package/dist/{ollama-3XCUZMZT-FYKHW4TZ.js → ollama-3XCUZMZT-4JMH6B7P.js} +1 -1
  73. package/dist/{openai-E7G2YAHU-IG33BFYF.js → openai-E7G2YAHU-T3HMBPH7.js} +2 -2
  74. package/dist/portal-JYWVHXDU.js +210 -0
  75. package/dist/prd-Q4J5NVAR.js +408 -0
  76. package/dist/repos-WWZXNN3P.js +271 -0
  77. package/dist/review-integration-RQE4KMAV.js +14 -0
  78. package/dist/{rules-3OFGWHP4.js → rules-Y4VSOY5Y.js} +3 -3
  79. package/dist/run-VPNXEIBY.js +687 -0
  80. package/dist/server-COL4AXKU-P7S7NNF6.js +11 -0
  81. package/dist/server-U7PQ6FTS-MG4MJPTS.js +20 -0
  82. package/dist/{skills-GY2CTPWN.js → skills-QEYU2N27.js} +4 -2
  83. package/dist/start-IJKY5RVT.js +303 -0
  84. package/dist/{status-SE43TIFJ.js → status-BHQYYGAL.js} +2 -2
  85. package/dist/{templates-O2XDKB5R.js → templates-CBRUJ66V.js} +6 -5
  86. package/dist/tui-DP7736EX.js +61 -0
  87. package/dist/ulpi-5EN6JCAS-LFE3WSL4.js +10 -0
  88. package/dist/{uninstall-KWGSGZTI.js → uninstall-BX6FOV77.js} +3 -3
  89. package/dist/{update-QYZA4D23.js → update-AQKTHFVQ.js} +3 -3
  90. package/dist/{version-checker-MVB74DEX.js → version-checker-5L5PUOEX.js} +2 -2
  91. package/package.json +13 -4
  92. package/dist/chunk-26LLDX2T.js +0 -553
  93. package/dist/chunk-DDRLI6JU.js +0 -331
  94. package/dist/chunk-IFATANHR.js +0 -453
  95. package/dist/chunk-JWUUVXIV.js +0 -13694
  96. package/dist/chunk-LD52XG3X.js +0 -4273
  97. package/dist/chunk-MIAQVCFW.js +0 -39
  98. package/dist/chunk-YYZOFYS6.js +0 -415
  99. package/dist/dist-XD4YI27T.js +0 -26
  100. package/dist/mcp-installer-TOYDP77X.js +0 -124
  101. package/dist/projects-COUJP4ZC.js +0 -271
  102. package/dist/review-KMGP2S25.js +0 -152
  103. package/dist/server-USLHY6GH-F4JSXCWA.js +0 -18
  104. package/dist/server-X5P6WH2M-ULZF5WHZ.js +0 -11
  105. package/dist/ui-4SM2SUI6.js +0 -167
  106. package/dist/ui.html +0 -698
  107. /package/dist/skills/{ulpi-generate-guardian → ulpi-generate-guards}/SKILL.md +0 -0
  108. /package/dist/skills/{ulpi-generate-guardian → ulpi-generate-guards}/references/framework-rules.md +0 -0
  109. /package/dist/skills/{ulpi-generate-guardian → ulpi-generate-guards}/references/language-rules.md +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CLI_BIN_NAME,
3
3
  getBinaryPath
4
- } from "./chunk-DDRLI6JU.js";
4
+ } from "./chunk-C7CLUQI6.js";
5
5
 
6
6
  // src/hooks-installer.ts
7
7
  import * as fs from "fs";
@@ -51,14 +51,14 @@ function installHooks(projectDir) {
51
51
  function findSkillSource() {
52
52
  if (process.argv[1]) {
53
53
  const entryDir = path.dirname(path.resolve(process.argv[1]));
54
- const bundled = path.join(entryDir, "skills", "ulpi-generate-guardian");
54
+ const bundled = path.join(entryDir, "skills", "ulpi-generate-guards");
55
55
  if (fs.existsSync(bundled)) return bundled;
56
56
  }
57
57
  if (process.argv[1]) {
58
58
  let dir = path.dirname(path.resolve(process.argv[1]));
59
59
  for (let i = 0; i < 5; i++) {
60
60
  dir = path.dirname(dir);
61
- const candidate = path.join(dir, ".claude", "skills", "ulpi-generate-guardian");
61
+ const candidate = path.join(dir, ".claude", "skills", "ulpi-generate-guards");
62
62
  if (fs.existsSync(candidate)) return candidate;
63
63
  }
64
64
  }
@@ -66,7 +66,7 @@ function findSkillSource() {
66
66
  }
67
67
  function installGlobalSkill() {
68
68
  const homeDir = os.homedir();
69
- const globalSkillsDir = path.join(homeDir, ".claude", "skills", "ulpi-generate-guardian");
69
+ const globalSkillsDir = path.join(homeDir, ".claude", "skills", "ulpi-generate-guards");
70
70
  if (fs.existsSync(globalSkillsDir)) {
71
71
  return { installed: false, message: "Skill already installed globally" };
72
72
  }
@@ -77,13 +77,13 @@ function installGlobalSkill() {
77
77
  try {
78
78
  fs.mkdirSync(path.dirname(globalSkillsDir), { recursive: true });
79
79
  copyDirRecursive(skillSource, globalSkillsDir);
80
- return { installed: true, message: `Installed /ulpi-generate-guardian skill globally to ${globalSkillsDir}` };
80
+ return { installed: true, message: `Installed /ulpi-generate-guards skill globally to ${globalSkillsDir}` };
81
81
  } catch (err) {
82
82
  return { installed: false, message: `Failed to install skill: ${err instanceof Error ? err.message : String(err)}` };
83
83
  }
84
84
  }
85
85
  function installLocalSkill(projectDir) {
86
- const localSkillsDir = path.join(projectDir, ".claude", "skills", "ulpi-generate-guardian");
86
+ const localSkillsDir = path.join(projectDir, ".claude", "skills", "ulpi-generate-guards");
87
87
  if (fs.existsSync(localSkillsDir)) {
88
88
  return { installed: false, message: "Skill already installed locally" };
89
89
  }
@@ -94,7 +94,7 @@ function installLocalSkill(projectDir) {
94
94
  try {
95
95
  fs.mkdirSync(path.dirname(localSkillsDir), { recursive: true });
96
96
  copyDirRecursive(skillSource, localSkillsDir);
97
- return { installed: true, message: `Installed /ulpi-generate-guardian skill locally` };
97
+ return { installed: true, message: `Installed /ulpi-generate-guards skill locally` };
98
98
  } catch (err) {
99
99
  return { installed: false, message: `Failed to install skill: ${err instanceof Error ? err.message : String(err)}` };
100
100
  }
@@ -136,9 +136,9 @@ var PlanStatusSchema = external_exports.enum([
136
136
  "executing",
137
137
  "completed"
138
138
  ]);
139
- var CodemapEmbeddingProviderSchema = external_exports.enum(["openai", "ollama", "ulpi"]);
140
- var CodemapEmbeddingConfigSchema = external_exports.object({
141
- provider: CodemapEmbeddingProviderSchema.default("ulpi"),
139
+ var EmbeddingProviderSchema = external_exports.enum(["openai", "ollama", "ulpi"]);
140
+ var EmbeddingConfigSchema = external_exports.object({
141
+ provider: EmbeddingProviderSchema.default("ulpi"),
142
142
  model: external_exports.string().max(100).default("code"),
143
143
  dimensions: external_exports.number().int().positive().max(4096).default(1024),
144
144
  baseUrl: external_exports.string().url().max(200).optional()
@@ -175,13 +175,15 @@ var CodemapHybridConfigSchema = external_exports.object({
175
175
  weights: CodemapHybridWeightsSchema.default({})
176
176
  });
177
177
  var CodemapConfigSchema = external_exports.object({
178
- embedding: CodemapEmbeddingConfigSchema.default({}),
178
+ embedding: EmbeddingConfigSchema.default({}),
179
179
  chunking: CodemapChunkingConfigSchema.default({}),
180
180
  batch: CodemapBatchConfigSchema.default({}),
181
181
  hybrid: CodemapHybridConfigSchema.default({}),
182
182
  deny: external_exports.array(external_exports.string().max(500)).max(200).default(["**/.env*", "**/secrets/**", "**/certs/**"]),
183
183
  maxFileSize: external_exports.number().int().positive().default(1048576),
184
184
  // 1MB
185
+ searchTimeoutMs: external_exports.number().int().positive().default(15e3),
186
+ // Search embed timeout
185
187
  autoExport: external_exports.boolean().default(true),
186
188
  // Export to shadow branch on push / session-end
187
189
  autoImport: external_exports.boolean().default(true)
@@ -256,12 +258,6 @@ var MemoryEntrySchema = external_exports.object({
256
258
  lastAccessedAt: external_exports.string().optional(),
257
259
  supersededBy: external_exports.string().max(64).optional()
258
260
  });
259
- var MemoryEmbeddingConfigSchema = external_exports.object({
260
- provider: external_exports.enum(["openai", "ollama", "ulpi"]).default("ulpi"),
261
- model: external_exports.string().max(100).default("code"),
262
- dimensions: external_exports.number().int().positive().max(4096).default(1024),
263
- baseUrl: external_exports.string().url().max(200).optional()
264
- });
265
261
  var MemoryClassifierConfigSchema = external_exports.object({
266
262
  enabled: external_exports.boolean().default(true),
267
263
  model: external_exports.string().max(100).default("claude-sonnet-4-20250514"),
@@ -294,7 +290,7 @@ var MemoryConfigSchema = external_exports.object({
294
290
  captureMode: CaptureModeSchema.default("continuous"),
295
291
  surfaceOnStart: external_exports.boolean().default(true),
296
292
  surfaceLimit: external_exports.number().int().positive().max(20).default(5),
297
- embedding: MemoryEmbeddingConfigSchema.default({}),
293
+ embedding: EmbeddingConfigSchema.default({ model: "memory" }),
298
294
  classifier: MemoryClassifierConfigSchema.default({}),
299
295
  retention: MemoryRetentionConfigSchema.default({}),
300
296
  ranking: MemoryRankingConfigSchema.default({}),
@@ -328,6 +324,159 @@ var DepgraphConfigSchema = external_exports.object({
328
324
  excludeUnranked: external_exports.boolean().default(false),
329
325
  excludeUnrankedThreshold: external_exports.number().nonnegative().default(1e-4)
330
326
  });
327
+ var TrackerTaskStatusSchema = external_exports.enum([
328
+ "open",
329
+ "in_progress",
330
+ "done",
331
+ "failed",
332
+ "skipped"
333
+ ]);
334
+ var TaskPrioritySchema = external_exports.union([
335
+ external_exports.literal(0),
336
+ external_exports.literal(1),
337
+ external_exports.literal(2),
338
+ external_exports.literal(3),
339
+ external_exports.literal(4)
340
+ ]);
341
+ var TrackerTaskSchema = external_exports.object({
342
+ id: external_exports.string(),
343
+ title: external_exports.string(),
344
+ status: TrackerTaskStatusSchema,
345
+ priority: TaskPrioritySchema,
346
+ description: external_exports.string().optional(),
347
+ labels: external_exports.array(external_exports.string()).optional(),
348
+ type: external_exports.string().optional(),
349
+ parentId: external_exports.string().optional(),
350
+ dependsOn: external_exports.array(external_exports.string()).optional(),
351
+ blocks: external_exports.array(external_exports.string()).optional(),
352
+ assignee: external_exports.string().optional(),
353
+ createdAt: external_exports.string().optional(),
354
+ updatedAt: external_exports.string().optional(),
355
+ metadata: external_exports.record(external_exports.unknown()).optional()
356
+ });
357
+ var TaskFilterSchema = external_exports.object({
358
+ status: external_exports.union([TrackerTaskStatusSchema, external_exports.array(TrackerTaskStatusSchema)]).optional(),
359
+ priority: external_exports.union([TaskPrioritySchema, external_exports.array(TaskPrioritySchema)]).optional(),
360
+ labels: external_exports.array(external_exports.string()).optional(),
361
+ assignee: external_exports.string().optional(),
362
+ type: external_exports.union([external_exports.string(), external_exports.array(external_exports.string())]).optional(),
363
+ parentId: external_exports.string().optional(),
364
+ ready: external_exports.boolean().optional(),
365
+ limit: external_exports.number().int().positive().optional(),
366
+ offset: external_exports.number().int().nonnegative().optional(),
367
+ excludeIds: external_exports.array(external_exports.string()).optional()
368
+ });
369
+ var TaskCompletionResultSchema = external_exports.object({
370
+ taskId: external_exports.string(),
371
+ status: TrackerTaskStatusSchema,
372
+ summary: external_exports.string(),
373
+ filesChanged: external_exports.array(external_exports.string()).optional(),
374
+ commitSha: external_exports.string().optional()
375
+ });
376
+ var AgentPluginMetaSchema = external_exports.object({
377
+ name: external_exports.string(),
378
+ version: external_exports.string(),
379
+ description: external_exports.string(),
380
+ cliCommand: external_exports.string(),
381
+ supportsHooks: external_exports.boolean(),
382
+ supportsSkills: external_exports.boolean(),
383
+ supportsStreaming: external_exports.boolean(),
384
+ supportsSubagentTracing: external_exports.boolean()
385
+ });
386
+ var ExecuteOptionsSchema = external_exports.object({
387
+ prompt: external_exports.string(),
388
+ workingDir: external_exports.string(),
389
+ timeout: external_exports.number().positive().optional(),
390
+ env: external_exports.record(external_exports.string()).optional(),
391
+ sandboxConfig: external_exports.record(external_exports.unknown()).optional()
392
+ });
393
+ var ExecuteResultSchema = external_exports.object({
394
+ exitCode: external_exports.number(),
395
+ stdout: external_exports.string(),
396
+ stderr: external_exports.string(),
397
+ duration: external_exports.number(),
398
+ tokenUsage: external_exports.object({
399
+ input: external_exports.number().optional(),
400
+ output: external_exports.number().optional()
401
+ }).optional()
402
+ });
403
+ var TrackerPluginMetaSchema = external_exports.object({
404
+ id: external_exports.string(),
405
+ name: external_exports.string(),
406
+ description: external_exports.string(),
407
+ version: external_exports.string(),
408
+ supportsBidirectionalSync: external_exports.boolean(),
409
+ supportsHierarchy: external_exports.boolean(),
410
+ supportsDependencies: external_exports.boolean()
411
+ });
412
+ var SyncResultSchema = external_exports.object({
413
+ success: external_exports.boolean(),
414
+ message: external_exports.string(),
415
+ added: external_exports.number().optional(),
416
+ updated: external_exports.number().optional(),
417
+ removed: external_exports.number().optional(),
418
+ error: external_exports.string().optional(),
419
+ syncedAt: external_exports.string()
420
+ });
421
+ var McpConfigFieldSchema = external_exports.object({
422
+ type: external_exports.enum(["string", "number", "boolean"]).default("string"),
423
+ format: external_exports.enum(["env-ref", "plain"]).optional(),
424
+ required: external_exports.boolean().default(false),
425
+ sensitive: external_exports.boolean().default(false),
426
+ description: external_exports.string().optional(),
427
+ default: external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean()]).optional()
428
+ });
429
+ var McpTransportSchema = external_exports.enum(["stdio", "sse", "http"]).default("stdio");
430
+ var McpCategorySchema = external_exports.enum([
431
+ "database",
432
+ "api",
433
+ "devtools",
434
+ "comms",
435
+ "analytics",
436
+ "cloud",
437
+ "ai",
438
+ "search",
439
+ "monitoring",
440
+ "project-management",
441
+ "design",
442
+ "custom"
443
+ ]).default("custom");
444
+ var McpSourceSchema = external_exports.enum(["catalog", "manual"]).default("manual");
445
+ var McpDetectSignalsSchema = external_exports.object({
446
+ dependencies: external_exports.array(external_exports.string()).default([]),
447
+ env_vars: external_exports.array(external_exports.string()).default([]),
448
+ docker_services: external_exports.array(external_exports.string()).default([]),
449
+ config_files: external_exports.array(external_exports.string()).default([])
450
+ }).partial();
451
+ var McpDefinitionSchema = external_exports.object({
452
+ name: external_exports.string().min(1).max(128),
453
+ display_name: external_exports.string().max(256).optional(),
454
+ description: external_exports.string().max(1024).optional(),
455
+ command: external_exports.string().min(1).max(256),
456
+ args: external_exports.array(external_exports.string()).default([]),
457
+ transport: McpTransportSchema,
458
+ category: McpCategorySchema,
459
+ config_schema: external_exports.record(external_exports.string(), McpConfigFieldSchema).optional(),
460
+ tags: external_exports.array(external_exports.string()).default([]),
461
+ source: McpSourceSchema,
462
+ added_at: external_exports.string().optional()
463
+ });
464
+ var McpLibrarySchema = external_exports.object({
465
+ mcps: external_exports.record(external_exports.string(), McpDefinitionSchema).default({})
466
+ });
467
+ var McpActivationSchema = external_exports.object({
468
+ enabled: external_exports.boolean().default(true),
469
+ config: external_exports.record(external_exports.string(), external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean()])).default({})
470
+ });
471
+ var McpRepoConfigSchema = external_exports.object({
472
+ mcps: external_exports.record(external_exports.string(), McpActivationSchema).default({})
473
+ });
474
+ var McpCatalogEntrySchema = McpDefinitionSchema.extend({
475
+ detect_signals: McpDetectSignalsSchema.optional()
476
+ });
477
+ var McpCatalogSchema = external_exports.object({
478
+ catalog: external_exports.array(McpCatalogEntrySchema).default([])
479
+ });
331
480
 
332
481
  export {
333
482
  BlockTypeSchema,
@@ -349,8 +498,8 @@ export {
349
498
  ReviewDecisionSchema,
350
499
  RepoInfoSchema,
351
500
  PlanStatusSchema,
352
- CodemapEmbeddingProviderSchema,
353
- CodemapEmbeddingConfigSchema,
501
+ EmbeddingProviderSchema,
502
+ EmbeddingConfigSchema,
354
503
  CodemapChunkingStrategySchema,
355
504
  CodemapChunkingConfigSchema,
356
505
  CodemapBatchConfigSchema,
@@ -363,7 +512,6 @@ export {
363
512
  CaptureModeSchema,
364
513
  MemorySourceSchema,
365
514
  MemoryEntrySchema,
366
- MemoryEmbeddingConfigSchema,
367
515
  MemoryClassifierConfigSchema,
368
516
  MemoryRetentionConfigSchema,
369
517
  MemoryRankingConfigSchema,
@@ -371,5 +519,26 @@ export {
371
519
  ClassificationResultSchema,
372
520
  DepgraphPersonalizationConfigSchema,
373
521
  DepgraphPagerankConfigSchema,
374
- DepgraphConfigSchema
522
+ DepgraphConfigSchema,
523
+ TrackerTaskStatusSchema,
524
+ TaskPrioritySchema,
525
+ TrackerTaskSchema,
526
+ TaskFilterSchema,
527
+ TaskCompletionResultSchema,
528
+ AgentPluginMetaSchema,
529
+ ExecuteOptionsSchema,
530
+ ExecuteResultSchema,
531
+ TrackerPluginMetaSchema,
532
+ SyncResultSchema,
533
+ McpConfigFieldSchema,
534
+ McpTransportSchema,
535
+ McpCategorySchema,
536
+ McpSourceSchema,
537
+ McpDetectSignalsSchema,
538
+ McpDefinitionSchema,
539
+ McpLibrarySchema,
540
+ McpActivationSchema,
541
+ McpRepoConfigSchema,
542
+ McpCatalogEntrySchema,
543
+ McpCatalogSchema
375
544
  };
@@ -0,0 +1,298 @@
1
+ // ../../packages/http/dist/middleware/auth.js
2
+ import { randomBytes } from "crypto";
3
+ var apiSecret;
4
+ function generateApiSecret() {
5
+ return randomBytes(32).toString("hex");
6
+ }
7
+ function setApiSecret(secret) {
8
+ apiSecret = secret;
9
+ }
10
+ function getApiSecret() {
11
+ return apiSecret;
12
+ }
13
+ var LOOPBACK_ADDRESSES = /* @__PURE__ */ new Set(["127.0.0.1", "::1", "::ffff:127.0.0.1"]);
14
+ function validateLoopback(req) {
15
+ const remoteAddr = req.socket.remoteAddress ?? "";
16
+ return LOOPBACK_ADDRESSES.has(remoteAddr);
17
+ }
18
+ function validateAuth(req) {
19
+ if (!validateLoopback(req))
20
+ return false;
21
+ if (apiSecret) {
22
+ const headerSecret = req.headers["x-ulpi-secret"];
23
+ if (headerSecret === apiSecret)
24
+ return true;
25
+ try {
26
+ const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
27
+ const paramSecret = url.searchParams.get("secret");
28
+ if (paramSecret === apiSecret)
29
+ return true;
30
+ } catch {
31
+ }
32
+ return false;
33
+ }
34
+ return true;
35
+ }
36
+
37
+ // ../../packages/http/dist/router.js
38
+ function createRouter() {
39
+ const routes = [];
40
+ function add(method, pattern, handler) {
41
+ routes.push({ method, pattern, handler });
42
+ }
43
+ return {
44
+ get(pattern, handler) {
45
+ add("GET", pattern, handler);
46
+ },
47
+ post(pattern, handler) {
48
+ add("POST", pattern, handler);
49
+ },
50
+ put(pattern, handler) {
51
+ add("PUT", pattern, handler);
52
+ },
53
+ patch(pattern, handler) {
54
+ add("PATCH", pattern, handler);
55
+ },
56
+ delete(pattern, handler) {
57
+ add("DELETE", pattern, handler);
58
+ },
59
+ /**
60
+ * Try each registered route in order. For string patterns, performs an
61
+ * exact match against `ctx.pathname`. For RegExp patterns, tests the
62
+ * pathname and extracts named groups (or positional captures indexed by
63
+ * their number) into `params`.
64
+ *
65
+ * Returns `true` if a matching route was found (and its handler was
66
+ * invoked), `false` otherwise.
67
+ */
68
+ async handle(ctx) {
69
+ for (const route of routes) {
70
+ if (route.method !== ctx.method)
71
+ continue;
72
+ let params = {};
73
+ if (typeof route.pattern === "string") {
74
+ if (ctx.pathname !== route.pattern)
75
+ continue;
76
+ } else {
77
+ const match = route.pattern.exec(ctx.pathname);
78
+ if (!match)
79
+ continue;
80
+ if (match.groups) {
81
+ params = { ...match.groups };
82
+ }
83
+ for (let i = 1; i < match.length; i++) {
84
+ if (match[i] !== void 0) {
85
+ params[String(i)] = decodeURIComponent(match[i]);
86
+ }
87
+ }
88
+ }
89
+ await route.handler({ ...ctx, params });
90
+ return true;
91
+ }
92
+ return false;
93
+ }
94
+ };
95
+ }
96
+
97
+ // ../../packages/http/dist/request.js
98
+ function readBody(req, maxSize = 1048576) {
99
+ return new Promise((resolve, reject) => {
100
+ const chunks = [];
101
+ let size = 0;
102
+ req.on("data", (chunk) => {
103
+ size += chunk.length;
104
+ if (size > maxSize) {
105
+ req.destroy();
106
+ reject(new Error("Request body too large"));
107
+ return;
108
+ }
109
+ chunks.push(chunk);
110
+ });
111
+ req.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")));
112
+ req.on("error", reject);
113
+ });
114
+ }
115
+ function readBodyRaw(req, maxSize = 5 * 1024 * 1024) {
116
+ return new Promise((resolve, reject) => {
117
+ const chunks = [];
118
+ let size = 0;
119
+ req.on("data", (chunk) => {
120
+ size += chunk.length;
121
+ if (size > maxSize) {
122
+ req.destroy();
123
+ reject(new Error("Request body too large"));
124
+ return;
125
+ }
126
+ chunks.push(chunk);
127
+ });
128
+ req.on("end", () => resolve(Buffer.concat(chunks)));
129
+ req.on("error", reject);
130
+ });
131
+ }
132
+ async function parseJsonBody(req) {
133
+ try {
134
+ const raw = await readBody(req);
135
+ const parsed = JSON.parse(raw);
136
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
137
+ return { data: null, error: "Expected a JSON object" };
138
+ }
139
+ return { data: parsed, error: null };
140
+ } catch (err) {
141
+ const message = err instanceof Error ? err.message : "Invalid JSON body";
142
+ return { data: null, error: message };
143
+ }
144
+ }
145
+ function parseMultipartImage(body, boundary) {
146
+ const boundaryBuffer = Buffer.from(`--${boundary}`);
147
+ const start = body.indexOf(boundaryBuffer);
148
+ if (start === -1)
149
+ return null;
150
+ const headerEnd = body.indexOf(Buffer.from("\r\n\r\n"), start);
151
+ if (headerEnd === -1)
152
+ return null;
153
+ const headers = body.subarray(start + boundaryBuffer.length + 2, headerEnd).toString();
154
+ const ctMatch = headers.match(/Content-Type:\s*(.+)/i);
155
+ const contentType = ctMatch ? ctMatch[1].trim() : "image/png";
156
+ const dataStart = headerEnd + 4;
157
+ const nextBoundary = body.indexOf(boundaryBuffer, dataStart);
158
+ const dataEnd = nextBoundary !== -1 ? nextBoundary - 2 : body.length;
159
+ return { data: body.subarray(dataStart, dataEnd), contentType };
160
+ }
161
+
162
+ // ../../packages/http/dist/response.js
163
+ function resolveOrigin(options, req) {
164
+ if (!options)
165
+ return "*";
166
+ if (typeof options.origin === "function")
167
+ return options.origin(req);
168
+ return options.origin;
169
+ }
170
+ function corsHeaders(options, req) {
171
+ const headers = {
172
+ "Access-Control-Allow-Origin": resolveOrigin(options, req),
173
+ "Access-Control-Allow-Methods": options?.methods ?? "GET, POST, PUT, PATCH, DELETE, OPTIONS",
174
+ "Access-Control-Allow-Headers": options?.headers ?? "Content-Type, Authorization"
175
+ };
176
+ if (options?.credentials) {
177
+ headers["Access-Control-Allow-Credentials"] = "true";
178
+ }
179
+ if (options?.maxAge) {
180
+ headers["Access-Control-Max-Age"] = String(options.maxAge);
181
+ }
182
+ return headers;
183
+ }
184
+ function jsonResponse(res, data, status = 200, req, cors) {
185
+ const body = JSON.stringify(data);
186
+ res.writeHead(status, {
187
+ "Content-Type": "application/json",
188
+ ...corsHeaders(cors, req)
189
+ });
190
+ res.end(body);
191
+ }
192
+ function notFound(res, message = "Not found", req, cors) {
193
+ jsonResponse(res, { error: message }, 404, req, cors);
194
+ }
195
+ function sseHeaders(res, req, cors) {
196
+ res.writeHead(200, {
197
+ "Content-Type": "text/event-stream",
198
+ "Cache-Control": "no-cache",
199
+ Connection: "keep-alive",
200
+ ...corsHeaders(cors, req)
201
+ });
202
+ }
203
+ function sseEvent(res, eventName, data) {
204
+ res.write(`event: ${eventName}
205
+ data: ${JSON.stringify(data)}
206
+
207
+ `);
208
+ }
209
+
210
+ // ../../packages/http/dist/middleware/rate-limit.js
211
+ var store = /* @__PURE__ */ new Map();
212
+ var CLEANUP_INTERVAL = 6e4;
213
+ setInterval(() => {
214
+ const now = Date.now();
215
+ for (const [key, entry] of store) {
216
+ if (now >= entry.resetAt) {
217
+ store.delete(key);
218
+ }
219
+ }
220
+ }, CLEANUP_INTERVAL).unref();
221
+ function checkRateLimit(key, limit = 200, windowMs = 6e4) {
222
+ const now = Date.now();
223
+ const entry = store.get(key);
224
+ if (!entry || now >= entry.resetAt) {
225
+ store.set(key, { count: 1, resetAt: now + windowMs });
226
+ return true;
227
+ }
228
+ entry.count++;
229
+ return entry.count <= limit;
230
+ }
231
+
232
+ // ../../packages/http/dist/middleware/cors.js
233
+ function handleCorsPreFlight(req, res, options) {
234
+ if ((req.method ?? "GET") !== "OPTIONS")
235
+ return false;
236
+ res.writeHead(204, corsHeaders(options, req));
237
+ res.end();
238
+ return true;
239
+ }
240
+
241
+ // ../../packages/http/dist/websocket.js
242
+ import { WebSocketServer } from "ws";
243
+
244
+ // ../../packages/http/dist/sse.js
245
+ var SSEBroadcaster = class _SSEBroadcaster {
246
+ static MAX_CLIENTS = 100;
247
+ clients = /* @__PURE__ */ new Set();
248
+ /** Check if the broadcaster can accept another client. */
249
+ canAccept() {
250
+ return this.clients.size < _SSEBroadcaster.MAX_CLIENTS;
251
+ }
252
+ /** Register a new SSE client. */
253
+ add(res) {
254
+ this.clients.add(res);
255
+ }
256
+ /** Remove a disconnected SSE client. */
257
+ remove(res) {
258
+ this.clients.delete(res);
259
+ }
260
+ /** Broadcast a named SSE event to every connected client. */
261
+ broadcast(eventName, data) {
262
+ const message = `event: ${eventName}
263
+ data: ${JSON.stringify(data)}
264
+
265
+ `;
266
+ for (const client of this.clients) {
267
+ try {
268
+ client.write(message);
269
+ } catch {
270
+ this.clients.delete(client);
271
+ }
272
+ }
273
+ }
274
+ /** Number of currently connected clients. */
275
+ get size() {
276
+ return this.clients.size;
277
+ }
278
+ };
279
+
280
+ export {
281
+ createRouter,
282
+ readBody,
283
+ readBodyRaw,
284
+ parseJsonBody,
285
+ parseMultipartImage,
286
+ jsonResponse,
287
+ notFound,
288
+ sseHeaders,
289
+ sseEvent,
290
+ generateApiSecret,
291
+ setApiSecret,
292
+ getApiSecret,
293
+ validateLoopback,
294
+ validateAuth,
295
+ checkRateLimit,
296
+ handleCorsPreFlight,
297
+ SSEBroadcaster
298
+ };