agent-bober 0.6.2 → 0.7.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 (145) hide show
  1. package/README.md +156 -28
  2. package/dist/cli/commands/eval.d.ts +2 -0
  3. package/dist/cli/commands/eval.d.ts.map +1 -1
  4. package/dist/cli/commands/eval.js +10 -0
  5. package/dist/cli/commands/eval.js.map +1 -1
  6. package/dist/cli/commands/init.d.ts.map +1 -1
  7. package/dist/cli/commands/init.js +181 -61
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/commands/plan.d.ts +2 -0
  10. package/dist/cli/commands/plan.d.ts.map +1 -1
  11. package/dist/cli/commands/plan.js +10 -0
  12. package/dist/cli/commands/plan.js.map +1 -1
  13. package/dist/cli/commands/run.d.ts +2 -0
  14. package/dist/cli/commands/run.d.ts.map +1 -1
  15. package/dist/cli/commands/run.js +10 -0
  16. package/dist/cli/commands/run.js.map +1 -1
  17. package/dist/cli/commands/sprint.d.ts +2 -0
  18. package/dist/cli/commands/sprint.d.ts.map +1 -1
  19. package/dist/cli/commands/sprint.js +10 -0
  20. package/dist/cli/commands/sprint.js.map +1 -1
  21. package/dist/cli/index.js +22 -2
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/config/schema.d.ts +160 -43
  24. package/dist/config/schema.d.ts.map +1 -1
  25. package/dist/config/schema.js +11 -7
  26. package/dist/config/schema.js.map +1 -1
  27. package/dist/contracts/sprint-contract.d.ts +8 -8
  28. package/dist/index.d.ts +8 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +8 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/mcp/index.d.ts +4 -0
  33. package/dist/mcp/index.d.ts.map +1 -0
  34. package/dist/mcp/index.js +4 -0
  35. package/dist/mcp/index.js.map +1 -0
  36. package/dist/mcp/run-manager.d.ts +47 -0
  37. package/dist/mcp/run-manager.d.ts.map +1 -0
  38. package/dist/mcp/run-manager.js +79 -0
  39. package/dist/mcp/run-manager.js.map +1 -0
  40. package/dist/mcp/server.d.ts +15 -0
  41. package/dist/mcp/server.d.ts.map +1 -0
  42. package/dist/mcp/server.js +107 -0
  43. package/dist/mcp/server.js.map +1 -0
  44. package/dist/mcp/tools/config.d.ts +2 -0
  45. package/dist/mcp/tools/config.d.ts.map +1 -0
  46. package/dist/mcp/tools/config.js +153 -0
  47. package/dist/mcp/tools/config.js.map +1 -0
  48. package/dist/mcp/tools/contracts.d.ts +2 -0
  49. package/dist/mcp/tools/contracts.d.ts.map +1 -0
  50. package/dist/mcp/tools/contracts.js +61 -0
  51. package/dist/mcp/tools/contracts.js.map +1 -0
  52. package/dist/mcp/tools/eval.d.ts +2 -0
  53. package/dist/mcp/tools/eval.d.ts.map +1 -0
  54. package/dist/mcp/tools/eval.js +157 -0
  55. package/dist/mcp/tools/eval.js.map +1 -0
  56. package/dist/mcp/tools/index.d.ts +20 -0
  57. package/dist/mcp/tools/index.d.ts.map +1 -0
  58. package/dist/mcp/tools/index.js +47 -0
  59. package/dist/mcp/tools/index.js.map +1 -0
  60. package/dist/mcp/tools/init.d.ts +2 -0
  61. package/dist/mcp/tools/init.d.ts.map +1 -0
  62. package/dist/mcp/tools/init.js +121 -0
  63. package/dist/mcp/tools/init.js.map +1 -0
  64. package/dist/mcp/tools/plan.d.ts +2 -0
  65. package/dist/mcp/tools/plan.d.ts.map +1 -0
  66. package/dist/mcp/tools/plan.js +97 -0
  67. package/dist/mcp/tools/plan.js.map +1 -0
  68. package/dist/mcp/tools/principles.d.ts +2 -0
  69. package/dist/mcp/tools/principles.d.ts.map +1 -0
  70. package/dist/mcp/tools/principles.js +66 -0
  71. package/dist/mcp/tools/principles.js.map +1 -0
  72. package/dist/mcp/tools/registry.d.ts +45 -0
  73. package/dist/mcp/tools/registry.d.ts.map +1 -0
  74. package/dist/mcp/tools/registry.js +23 -0
  75. package/dist/mcp/tools/registry.js.map +1 -0
  76. package/dist/mcp/tools/run.d.ts +2 -0
  77. package/dist/mcp/tools/run.d.ts.map +1 -0
  78. package/dist/mcp/tools/run.js +66 -0
  79. package/dist/mcp/tools/run.js.map +1 -0
  80. package/dist/mcp/tools/spec.d.ts +2 -0
  81. package/dist/mcp/tools/spec.d.ts.map +1 -0
  82. package/dist/mcp/tools/spec.js +32 -0
  83. package/dist/mcp/tools/spec.js.map +1 -0
  84. package/dist/mcp/tools/sprint.d.ts +2 -0
  85. package/dist/mcp/tools/sprint.d.ts.map +1 -0
  86. package/dist/mcp/tools/sprint.js +243 -0
  87. package/dist/mcp/tools/sprint.js.map +1 -0
  88. package/dist/mcp/tools/status.d.ts +2 -0
  89. package/dist/mcp/tools/status.d.ts.map +1 -0
  90. package/dist/mcp/tools/status.js +76 -0
  91. package/dist/mcp/tools/status.js.map +1 -0
  92. package/dist/orchestrator/agentic-loop.d.ts +7 -6
  93. package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
  94. package/dist/orchestrator/agentic-loop.js +33 -40
  95. package/dist/orchestrator/agentic-loop.js.map +1 -1
  96. package/dist/orchestrator/context-handoff.d.ts +20 -20
  97. package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
  98. package/dist/orchestrator/evaluator-agent.js +2 -2
  99. package/dist/orchestrator/evaluator-agent.js.map +1 -1
  100. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  101. package/dist/orchestrator/generator-agent.js +2 -2
  102. package/dist/orchestrator/generator-agent.js.map +1 -1
  103. package/dist/orchestrator/model-resolver.d.ts +35 -4
  104. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  105. package/dist/orchestrator/model-resolver.js +68 -15
  106. package/dist/orchestrator/model-resolver.js.map +1 -1
  107. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  108. package/dist/orchestrator/planner-agent.js +2 -2
  109. package/dist/orchestrator/planner-agent.js.map +1 -1
  110. package/dist/orchestrator/tools/index.d.ts +3 -4
  111. package/dist/orchestrator/tools/index.d.ts.map +1 -1
  112. package/dist/orchestrator/tools/index.js.map +1 -1
  113. package/dist/orchestrator/tools/schemas.d.ts +11 -12
  114. package/dist/orchestrator/tools/schemas.d.ts.map +1 -1
  115. package/dist/orchestrator/tools/schemas.js +3 -2
  116. package/dist/orchestrator/tools/schemas.js.map +1 -1
  117. package/dist/providers/anthropic.d.ts +15 -0
  118. package/dist/providers/anthropic.d.ts.map +1 -0
  119. package/dist/providers/anthropic.js +133 -0
  120. package/dist/providers/anthropic.js.map +1 -0
  121. package/dist/providers/factory.d.ts +37 -0
  122. package/dist/providers/factory.d.ts.map +1 -0
  123. package/dist/providers/factory.js +119 -0
  124. package/dist/providers/factory.js.map +1 -0
  125. package/dist/providers/google.d.ts +39 -0
  126. package/dist/providers/google.d.ts.map +1 -0
  127. package/dist/providers/google.js +195 -0
  128. package/dist/providers/google.js.map +1 -0
  129. package/dist/providers/index.d.ts +7 -0
  130. package/dist/providers/index.d.ts.map +1 -0
  131. package/dist/providers/index.js +6 -0
  132. package/dist/providers/index.js.map +1 -0
  133. package/dist/providers/openai-compat.d.ts +39 -0
  134. package/dist/providers/openai-compat.d.ts.map +1 -0
  135. package/dist/providers/openai-compat.js +42 -0
  136. package/dist/providers/openai-compat.js.map +1 -0
  137. package/dist/providers/openai.d.ts +41 -0
  138. package/dist/providers/openai.d.ts.map +1 -0
  139. package/dist/providers/openai.js +205 -0
  140. package/dist/providers/openai.js.map +1 -0
  141. package/dist/providers/types.d.ts +144 -0
  142. package/dist/providers/types.d.ts.map +1 -0
  143. package/dist/providers/types.js +8 -0
  144. package/dist/providers/types.js.map +1 -0
  145. package/package.json +21 -3
@@ -28,12 +28,12 @@ export declare const FileChangeSchema: z.ZodObject<{
28
28
  action: z.ZodEnum<["create", "modify", "delete"]>;
29
29
  description: z.ZodString;
30
30
  }, "strip", z.ZodTypeAny, {
31
- description: string;
32
31
  path: string;
32
+ description: string;
33
33
  action: "create" | "modify" | "delete";
34
34
  }, {
35
- description: string;
36
35
  path: string;
36
+ description: string;
37
37
  action: "create" | "modify" | "delete";
38
38
  }>;
39
39
  export type FileChange = z.infer<typeof FileChangeSchema>;
@@ -65,12 +65,12 @@ export declare const SprintContractSchema: z.ZodObject<{
65
65
  action: z.ZodEnum<["create", "modify", "delete"]>;
66
66
  description: z.ZodString;
67
67
  }, "strip", z.ZodTypeAny, {
68
- description: string;
69
68
  path: string;
69
+ description: string;
70
70
  action: "create" | "modify" | "delete";
71
71
  }, {
72
- description: string;
73
72
  path: string;
73
+ description: string;
74
74
  action: "create" | "modify" | "delete";
75
75
  }>, "many">;
76
76
  dependsOn: z.ZodArray<z.ZodString, "many">;
@@ -81,8 +81,8 @@ export declare const SprintContractSchema: z.ZodObject<{
81
81
  startedAt: z.ZodOptional<z.ZodString>;
82
82
  completedAt: z.ZodOptional<z.ZodString>;
83
83
  }, "strip", z.ZodTypeAny, {
84
- description: string;
85
84
  status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
85
+ description: string;
86
86
  id: string;
87
87
  feature: string;
88
88
  successCriteria: {
@@ -93,8 +93,8 @@ export declare const SprintContractSchema: z.ZodObject<{
93
93
  notes?: string | undefined;
94
94
  }[];
95
95
  expectedChanges: {
96
- description: string;
97
96
  path: string;
97
+ description: string;
98
98
  action: "create" | "modify" | "delete";
99
99
  }[];
100
100
  dependsOn: string[];
@@ -104,8 +104,8 @@ export declare const SprintContractSchema: z.ZodObject<{
104
104
  startedAt?: string | undefined;
105
105
  completedAt?: string | undefined;
106
106
  }, {
107
- description: string;
108
107
  status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
108
+ description: string;
109
109
  id: string;
110
110
  feature: string;
111
111
  successCriteria: {
@@ -116,8 +116,8 @@ export declare const SprintContractSchema: z.ZodObject<{
116
116
  notes?: string | undefined;
117
117
  }[];
118
118
  expectedChanges: {
119
- description: string;
120
119
  path: string;
120
+ description: string;
121
121
  action: "create" | "modify" | "delete";
122
122
  }[];
123
123
  dependsOn: string[];
package/dist/index.d.ts CHANGED
@@ -16,6 +16,14 @@ export { runAgenticLoop, type AgenticLoopParams, type AgenticLoopResult, } from
16
16
  export { EvaluatorRegistry, createDefaultRegistry, runEvaluation, type EvaluationRunResult, } from "./evaluators/registry.js";
17
17
  export type { EvaluatorPlugin, EvaluatorFactory, EvalContext, } from "./evaluators/plugin-interface.js";
18
18
  export { ensureBoberDir, saveContract, loadContract, listContracts, updateContract, saveSpec, loadSpec, loadLatestSpec, listSpecs, appendHistory, loadHistory, } from "./state/index.js";
19
+ export type { JsonSchemaProperty, JsonSchemaObject, ToolDef, ToolCall, ToolResult, TextMessage, AssistantMessage, ToolResultMessage, Message, ChatParams, ChatResponse, StopReason, LLMClient, } from "./providers/types.js";
20
+ export { AnthropicAdapter } from "./providers/anthropic.js";
21
+ export { OpenAIAdapter } from "./providers/openai.js";
22
+ export { GoogleAdapter } from "./providers/google.js";
23
+ export { OpenAICompatAdapter } from "./providers/openai-compat.js";
24
+ export { createClient, validateApiKey, type ProviderName } from "./providers/factory.js";
19
25
  export { logger, Logger } from "./utils/logger.js";
20
26
  export { findProjectRoot } from "./utils/fs.js";
27
+ export { createBoberMCPServer } from "./mcp/index.js";
28
+ export { RunManager } from "./mcp/run-manager.js";
21
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAInE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,cAAc,EACd,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,IAAI,wBAAwB,EACjD,gBAAgB,EAChB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,aAAa,EACb,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EACL,YAAY,EACZ,KAAK,eAAe,GACrB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EACL,WAAW,EACX,KAAK,cAAc,GACpB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,EACZ,KAAK,OAAO,EACZ,KAAK,SAAS,GACf,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,KAAK,mBAAmB,GACzB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,kCAAkC,CAAC;AAI1C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -20,7 +20,15 @@ export { runAgenticLoop, } from "./orchestrator/agentic-loop.js";
20
20
  export { EvaluatorRegistry, createDefaultRegistry, runEvaluation, } from "./evaluators/registry.js";
21
21
  // ── State ──────────────────────────────────────────────────────────
22
22
  export { ensureBoberDir, saveContract, loadContract, listContracts, updateContract, saveSpec, loadSpec, loadLatestSpec, listSpecs, appendHistory, loadHistory, } from "./state/index.js";
23
+ export { AnthropicAdapter } from "./providers/anthropic.js";
24
+ export { OpenAIAdapter } from "./providers/openai.js";
25
+ export { GoogleAdapter } from "./providers/google.js";
26
+ export { OpenAICompatAdapter } from "./providers/openai-compat.js";
27
+ export { createClient, validateApiKey } from "./providers/factory.js";
23
28
  // ── Utils ──────────────────────────────────────────────────────────
24
29
  export { logger, Logger } from "./utils/logger.js";
25
30
  export { findProjectRoot } from "./utils/fs.js";
31
+ // ── MCP Server ──────────────────────────────────────────────────────
32
+ export { createBoberMCPServer } from "./mcp/index.js";
33
+ export { RunManager } from "./mcp/run-manager.js";
26
34
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAOL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEnE,sEAAsE;AAEtE,OAAO,EAIL,cAAc,EACd,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAGL,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAOL,gBAAgB,EAChB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAEpC,sEAAsE;AAEtE,OAAO,EAIL,aAAa,EACb,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EACL,YAAY,GAEb,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EACL,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,eAAe,GAEhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,GAGb,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,GAGf,MAAM,gCAAgC,CAAC;AAExC,sEAAsE;AAEtE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GAEd,MAAM,0BAA0B,CAAC;AAQlC,sEAAsE;AAEtE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,sEAAsE;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAOL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEnE,sEAAsE;AAEtE,OAAO,EAIL,cAAc,EACd,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAGL,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAOL,gBAAgB,EAChB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAEpC,sEAAsE;AAEtE,OAAO,EAIL,aAAa,EACb,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EACL,YAAY,GAEb,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EACL,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,eAAe,GAEhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,GAGb,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,GAGf,MAAM,gCAAgC,CAAC;AAExC,sEAAsE;AAEtE,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GAEd,MAAM,0BAA0B,CAAC;AAQlC,sEAAsE;AAEtE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAoB1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAqB,MAAM,wBAAwB,CAAC;AAEzF,sEAAsE;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,uEAAuE;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createBoberMCPServer } from "./server.js";
2
+ export { registerTool, getAllTools, getTool, registerAllTools, } from "./tools/index.js";
3
+ export type { BoberToolDefinition, JsonSchemaObject, JsonSchemaProperty, } from "./tools/index.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,OAAO,EACP,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // ── MCP barrel exports ──────────────────────────────────────────────
2
+ export { createBoberMCPServer } from "./server.js";
3
+ export { registerTool, getAllTools, getTool, registerAllTools, } from "./tools/index.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,OAAO,EACP,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { BoberConfig } from "../config/schema.js";
2
+ import type { PipelineResult } from "../orchestrator/pipeline.js";
3
+ export interface RunProgress {
4
+ completed: number;
5
+ total: number;
6
+ currentSprint?: string;
7
+ iteration?: number;
8
+ }
9
+ export interface RunResult {
10
+ success: boolean;
11
+ completedSprints: number;
12
+ failedSprints: number;
13
+ duration: number;
14
+ }
15
+ export interface RunState {
16
+ runId: string;
17
+ task: string;
18
+ status: "running" | "completed" | "failed";
19
+ startedAt: string;
20
+ completedAt?: string;
21
+ progress: RunProgress;
22
+ result?: RunResult;
23
+ error?: string;
24
+ }
25
+ export declare class RunManager {
26
+ private activeRun;
27
+ /**
28
+ * Check whether a pipeline is currently running.
29
+ */
30
+ isRunning(): boolean;
31
+ /**
32
+ * Return the current RunState, or null if no run has ever been started.
33
+ */
34
+ getStatus(): RunState | null;
35
+ /**
36
+ * Start a new pipeline run as a fire-and-forget promise.
37
+ *
38
+ * Throws if a run is already active (callers should check isRunning first).
39
+ * Returns the new runId immediately.
40
+ *
41
+ * The optional `pipelineFn` parameter exists for testing only. In production
42
+ * it defaults to the real `runPipeline` function.
43
+ */
44
+ startRun(task: string, projectRoot: string, config: BoberConfig, pipelineFn?: (task: string, projectRoot: string, config: BoberConfig) => Promise<PipelineResult>): string;
45
+ }
46
+ export declare const runManager: RunManager;
47
+ //# sourceMappingURL=run-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-manager.d.ts","sourceRoot":"","sources":["../../src/mcp/run-manager.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAIlE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAyB;IAE1C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI,QAAQ,GAAG,IAAI;IAI5B;;;;;;;;OAQG;IACH,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,UAAU,GAAE,CACV,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,cAAc,CAAe,GACzC,MAAM;CAoDV;AAID,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -0,0 +1,79 @@
1
+ // ── RunManager ───────────────────────────────────────────────────────
2
+ //
3
+ // Tracks the single active pipeline run in memory.
4
+ // bober_run starts a fire-and-forget pipeline; bober_status queries state.
5
+ import { randomUUID } from "node:crypto";
6
+ import { runPipeline } from "../orchestrator/pipeline.js";
7
+ // ── RunManager ───────────────────────────────────────────────────────
8
+ export class RunManager {
9
+ activeRun = null;
10
+ /**
11
+ * Check whether a pipeline is currently running.
12
+ */
13
+ isRunning() {
14
+ return this.activeRun !== null && this.activeRun.status === "running";
15
+ }
16
+ /**
17
+ * Return the current RunState, or null if no run has ever been started.
18
+ */
19
+ getStatus() {
20
+ return this.activeRun;
21
+ }
22
+ /**
23
+ * Start a new pipeline run as a fire-and-forget promise.
24
+ *
25
+ * Throws if a run is already active (callers should check isRunning first).
26
+ * Returns the new runId immediately.
27
+ *
28
+ * The optional `pipelineFn` parameter exists for testing only. In production
29
+ * it defaults to the real `runPipeline` function.
30
+ */
31
+ startRun(task, projectRoot, config, pipelineFn = runPipeline) {
32
+ if (this.isRunning()) {
33
+ throw new Error(`A pipeline is already running (runId: ${this.activeRun.runId}). Use bober_status to check progress.`);
34
+ }
35
+ const runId = randomUUID();
36
+ const now = new Date().toISOString();
37
+ this.activeRun = {
38
+ runId,
39
+ task,
40
+ status: "running",
41
+ startedAt: now,
42
+ progress: {
43
+ completed: 0,
44
+ total: 0,
45
+ },
46
+ };
47
+ // Fire-and-forget: do NOT await this promise
48
+ const promise = pipelineFn(task, projectRoot, config);
49
+ promise
50
+ .then((result) => {
51
+ if (this.activeRun && this.activeRun.runId === runId) {
52
+ this.activeRun.status = "completed";
53
+ this.activeRun.completedAt = new Date().toISOString();
54
+ this.activeRun.result = {
55
+ success: result.success,
56
+ completedSprints: result.completedSprints.length,
57
+ failedSprints: result.failedSprints.length,
58
+ duration: result.duration,
59
+ };
60
+ this.activeRun.progress = {
61
+ completed: result.completedSprints.length,
62
+ total: result.completedSprints.length + result.failedSprints.length,
63
+ };
64
+ }
65
+ })
66
+ .catch((err) => {
67
+ if (this.activeRun && this.activeRun.runId === runId) {
68
+ this.activeRun.status = "failed";
69
+ this.activeRun.completedAt = new Date().toISOString();
70
+ this.activeRun.error =
71
+ err instanceof Error ? err.message : String(err);
72
+ }
73
+ });
74
+ return runId;
75
+ }
76
+ }
77
+ // ── Module-scoped singleton ──────────────────────────────────────────
78
+ export const runManager = new RunManager();
79
+ //# sourceMappingURL=run-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-manager.js","sourceRoot":"","sources":["../../src/mcp/run-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server";
2
+ /**
3
+ * Creates, configures, and connects the agent-bober MCP server.
4
+ *
5
+ * The server uses StdioServerTransport so it communicates over the
6
+ * current process's stdin/stdout. Callers must NOT write anything to
7
+ * stdout after this function is called — that channel belongs to the
8
+ * MCP JSON-RPC protocol.
9
+ *
10
+ * @param projectRoot - Absolute path to the project being served.
11
+ * Passed to tool handlers so they can operate on the right directory.
12
+ * @returns The connected Server instance.
13
+ */
14
+ export declare function createBoberMCPServer(projectRoot: string): Promise<Server>;
15
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AA6B1D;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAqFjB"}
@@ -0,0 +1,107 @@
1
+ // ── MCP Server ──────────────────────────────────────────────────────
2
+ //
3
+ // Creates and configures the agent-bober MCP server using
4
+ // @modelcontextprotocol/sdk with stdio transport.
5
+ //
6
+ // IMPORTANT: stdout is reserved for MCP JSON-RPC protocol messages.
7
+ // All diagnostic output must go to process.stderr.
8
+ import { readFile } from "node:fs/promises";
9
+ import { join, dirname } from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+ import { Server } from "@modelcontextprotocol/sdk/server";
12
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
13
+ import { ListToolsRequestSchema, CallToolRequestSchema, McpError, ErrorCode, } from "@modelcontextprotocol/sdk/types.js";
14
+ import { registerAllTools, getAllTools, getTool } from "./tools/index.js";
15
+ // ── Package version loader ──────────────────────────────────────────
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ async function loadVersion() {
18
+ try {
19
+ // dist/mcp/ → up 2 levels to repo root
20
+ const pkgPath = join(__dirname, "..", "..", "package.json");
21
+ const raw = await readFile(pkgPath, "utf-8");
22
+ const pkg = JSON.parse(raw);
23
+ return pkg.version ?? "0.0.0";
24
+ }
25
+ catch {
26
+ return "0.0.0";
27
+ }
28
+ }
29
+ // ── Server factory ──────────────────────────────────────────────────
30
+ /**
31
+ * Creates, configures, and connects the agent-bober MCP server.
32
+ *
33
+ * The server uses StdioServerTransport so it communicates over the
34
+ * current process's stdin/stdout. Callers must NOT write anything to
35
+ * stdout after this function is called — that channel belongs to the
36
+ * MCP JSON-RPC protocol.
37
+ *
38
+ * @param projectRoot - Absolute path to the project being served.
39
+ * Passed to tool handlers so they can operate on the right directory.
40
+ * @returns The connected Server instance.
41
+ */
42
+ export async function createBoberMCPServer(projectRoot) {
43
+ const version = await loadVersion();
44
+ // ── Register all tools before creating the server ────────────────
45
+ registerAllTools();
46
+ // ── Create the server ────────────────────────────────────────────
47
+ const server = new Server({
48
+ name: "agent-bober",
49
+ version,
50
+ }, {
51
+ capabilities: {
52
+ tools: {},
53
+ },
54
+ });
55
+ // ── tools/list handler ───────────────────────────────────────────
56
+ server.setRequestHandler(ListToolsRequestSchema, () => {
57
+ const tools = getAllTools().map((t) => ({
58
+ name: t.name,
59
+ description: t.description,
60
+ inputSchema: t.inputSchema,
61
+ }));
62
+ return { tools };
63
+ });
64
+ // ── tools/call handler ───────────────────────────────────────────
65
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
66
+ const { name, arguments: args } = request.params;
67
+ const tool = getTool(name);
68
+ if (!tool) {
69
+ throw new McpError(ErrorCode.MethodNotFound, `Tool not found: ${name}`);
70
+ }
71
+ try {
72
+ const result = await tool.handler(args ?? {});
73
+ return {
74
+ content: [
75
+ {
76
+ type: "text",
77
+ text: result,
78
+ },
79
+ ],
80
+ };
81
+ }
82
+ catch (err) {
83
+ // Re-throw McpError as-is so the client gets the intended error code/message
84
+ if (err instanceof McpError) {
85
+ throw err;
86
+ }
87
+ const message = err instanceof Error ? err.message : String(err);
88
+ throw new McpError(ErrorCode.InternalError, `Tool execution failed: ${message}`);
89
+ }
90
+ });
91
+ // ── Connect stdio transport ───────────────────────────────────────
92
+ const transport = new StdioServerTransport();
93
+ await server.connect(transport);
94
+ process.stderr.write(`[agent-bober mcp] Server v${version} started (project: ${projectRoot})\n`);
95
+ // ── Graceful shutdown ────────────────────────────────────────────
96
+ const shutdown = () => {
97
+ process.stderr.write("[agent-bober mcp] Shutting down...\n");
98
+ server.close().catch(() => {
99
+ // Ignore close errors during shutdown
100
+ });
101
+ process.exit(0);
102
+ };
103
+ process.on("SIGINT", shutdown);
104
+ process.on("SIGTERM", shutdown);
105
+ return server;
106
+ }
107
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,0DAA0D;AAC1D,kDAAkD;AAClD,EAAE;AACF,oEAAoE;AACpE,mDAAmD;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,EACR,SAAS,GACV,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE1E,uEAAuE;AAEvE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACpD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,uEAAuE;AAEvE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;IAEpC,oEAAoE;IACpE,gBAAgB,EAAE,CAAC;IAEnB,oEAAoE;IACpE,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,aAAa;QACnB,OAAO;KACR,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,oEAAoE;IACpE,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,cAAc,EACxB,mBAAmB,IAAI,EAAE,CAC1B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC9B,IAAgC,IAAI,EAAE,CACxC,CAAC;YACF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,MAAM;qBACb;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,6EAA6E;YAC7E,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,0BAA0B,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6BAA6B,OAAO,sBAAsB,WAAW,KAAK,CAC3E,CAAC;IAEF,oEAAoE;IACpE,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YACxB,sCAAsC;QACxC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function registerConfigTool(): void;
2
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/config.ts"],"names":[],"mappings":"AA0EA,wBAAgB,kBAAkB,IAAI,IAAI,CA4IzC"}
@@ -0,0 +1,153 @@
1
+ // ── bober_config tool ─────────────────────────────────────────────────
2
+ //
3
+ // No args -> read and return bober.config.json as-is.
4
+ // With { key, value } -> update a specific dot-path field and write back.
5
+ // e.g. key="generator.model", value="opus"
6
+ import { readFile, writeFile, access } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ import { constants } from "node:fs";
9
+ import { cwd } from "node:process";
10
+ import { registerTool } from "./registry.js";
11
+ // ── Helpers ───────────────────────────────────────────────────────────
12
+ const CONFIG_CANDIDATES = ["bober.config.json", ".bober/config.json"];
13
+ async function findConfigPath(projectRoot) {
14
+ for (const candidate of CONFIG_CANDIDATES) {
15
+ const fullPath = join(projectRoot, candidate);
16
+ try {
17
+ await access(fullPath, constants.R_OK);
18
+ return fullPath;
19
+ }
20
+ catch {
21
+ // not found, try next
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ /**
27
+ * Set a value at a dot-separated path inside a plain object.
28
+ * Creates intermediate objects as needed.
29
+ * Returns the mutated object (same reference).
30
+ */
31
+ function setNestedValue(obj, dotPath, value) {
32
+ const parts = dotPath.split(".");
33
+ let cursor = obj;
34
+ for (let i = 0; i < parts.length - 1; i++) {
35
+ const part = parts[i];
36
+ if (cursor[part] === undefined ||
37
+ cursor[part] === null ||
38
+ typeof cursor[part] !== "object" ||
39
+ Array.isArray(cursor[part])) {
40
+ cursor[part] = {};
41
+ }
42
+ cursor = cursor[part];
43
+ }
44
+ const lastPart = parts[parts.length - 1];
45
+ cursor[lastPart] = value;
46
+ }
47
+ /**
48
+ * Attempt to coerce a string value to a more appropriate JSON type.
49
+ * "true"/"false" -> boolean, numeric strings -> number, else keep as string.
50
+ */
51
+ function coerceValue(raw) {
52
+ if (raw === "true")
53
+ return true;
54
+ if (raw === "false")
55
+ return false;
56
+ const n = Number(raw);
57
+ if (!isNaN(n) && raw.trim() !== "")
58
+ return n;
59
+ return raw;
60
+ }
61
+ // ── Registration ─────────────────────────────────────────────────────
62
+ export function registerConfigTool() {
63
+ registerTool({
64
+ name: "bober_config",
65
+ description: "Read or update the Bober project configuration (bober.config.json). " +
66
+ "Without arguments returns the full config as JSON. " +
67
+ "With key and value, updates a specific config field using dot-notation " +
68
+ "(e.g. key='generator.model', value='opus'). " +
69
+ "Numeric and boolean values are coerced automatically.",
70
+ inputSchema: {
71
+ type: "object",
72
+ properties: {
73
+ key: {
74
+ type: "string",
75
+ description: "Dot-separated config path to update (e.g. generator.model, evaluator.maxIterations).",
76
+ },
77
+ value: {
78
+ type: "string",
79
+ description: "New value for the key. Numbers and booleans are coerced automatically.",
80
+ },
81
+ },
82
+ additionalProperties: false,
83
+ },
84
+ handler: async (args) => {
85
+ const projectRoot = cwd();
86
+ const configPath = await findConfigPath(projectRoot);
87
+ if (!configPath) {
88
+ return JSON.stringify({
89
+ error: "No bober.config.json found. Run bober_init first.",
90
+ }, null, 2);
91
+ }
92
+ // Parse the existing config file
93
+ let rawContent;
94
+ try {
95
+ rawContent = await readFile(configPath, "utf-8");
96
+ }
97
+ catch (err) {
98
+ return JSON.stringify({
99
+ error: `Failed to read config: ${err instanceof Error ? err.message : String(err)}`,
100
+ }, null, 2);
101
+ }
102
+ let parsed;
103
+ try {
104
+ parsed = JSON.parse(rawContent);
105
+ }
106
+ catch (err) {
107
+ return JSON.stringify({
108
+ error: `Invalid JSON in config file: ${err instanceof Error ? err.message : String(err)}`,
109
+ }, null, 2);
110
+ }
111
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
112
+ return JSON.stringify({ error: "Config file does not contain a JSON object." }, null, 2);
113
+ }
114
+ const configObj = parsed;
115
+ const key = typeof args.key === "string" && args.key.trim()
116
+ ? args.key.trim()
117
+ : undefined;
118
+ const value = typeof args.value === "string" ? args.value : undefined;
119
+ // Read mode (no key provided)
120
+ if (key === undefined) {
121
+ return JSON.stringify({
122
+ path: configPath,
123
+ config: configObj,
124
+ }, null, 2);
125
+ }
126
+ // Update mode requires both key and value
127
+ if (value === undefined) {
128
+ return JSON.stringify({
129
+ error: "Both key and value must be provided to update the config.",
130
+ }, null, 2);
131
+ }
132
+ const coerced = coerceValue(value);
133
+ setNestedValue(configObj, key, coerced);
134
+ try {
135
+ await writeFile(configPath, JSON.stringify(configObj, null, 2) + "\n", "utf-8");
136
+ }
137
+ catch (err) {
138
+ return JSON.stringify({
139
+ error: `Failed to write config: ${err instanceof Error ? err.message : String(err)}`,
140
+ }, null, 2);
141
+ }
142
+ process.stderr.write(`[bober_config] Updated ${key} = ${JSON.stringify(coerced)} in ${configPath}\n`);
143
+ return JSON.stringify({
144
+ status: "updated",
145
+ path: configPath,
146
+ key,
147
+ value: coerced,
148
+ config: configObj,
149
+ }, null, 2);
150
+ },
151
+ });
152
+ }
153
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/mcp/tools/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerContractsTool(): void;
2
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/contracts.ts"],"names":[],"mappings":"AAYA,wBAAgB,qBAAqB,IAAI,IAAI,CAmE5C"}