codingbuddy 5.1.1 → 5.1.3
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.
- package/dist/src/checklist/checklist.types.d.ts +1 -1
- package/dist/src/checklist/checklist.types.js +1 -0
- package/dist/src/checklist/checklist.types.js.map +1 -1
- package/dist/src/cli/run-tui.js +16 -0
- package/dist/src/cli/run-tui.js.map +1 -1
- package/dist/src/config/config.schema.d.ts +9 -0
- package/dist/src/config/config.schema.js +10 -0
- package/dist/src/config/config.schema.js.map +1 -1
- package/dist/src/keyword/keyword.service.d.ts +2 -0
- package/dist/src/keyword/keyword.service.js +24 -0
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/mcp/handlers/index.d.ts +2 -0
- package/dist/src/mcp/handlers/index.js +5 -1
- package/dist/src/mcp/handlers/index.js.map +1 -1
- package/dist/src/mcp/handlers/plugin-validation.handler.d.ts +12 -0
- package/dist/src/mcp/handlers/plugin-validation.handler.js +148 -0
- package/dist/src/mcp/handlers/plugin-validation.handler.js.map +1 -0
- package/dist/src/mcp/handlers/release-check.handler.d.ts +16 -0
- package/dist/src/mcp/handlers/release-check.handler.js +247 -0
- package/dist/src/mcp/handlers/release-check.handler.js.map +1 -0
- package/dist/src/mcp/mcp.module.js +2 -0
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/shared/version.d.ts +1 -1
- package/dist/src/shared/version.js +1 -1
- package/dist/src/tui/events/hud-file-bridge.d.ts +21 -0
- package/dist/src/tui/events/hud-file-bridge.js +112 -0
- package/dist/src/tui/events/hud-file-bridge.js.map +1 -0
- package/dist/src/tui/events/index.d.ts +1 -0
- package/dist/src/tui/events/index.js +3 -1
- package/dist/src/tui/events/index.js.map +1 -1
- package/dist/src/tui-bundle.mjs +55 -33
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
package/dist/src/tui-bundle.mjs
CHANGED
|
@@ -595,21 +595,21 @@ var require_eventemitter2 = __commonJS({
|
|
|
595
595
|
function collectTreeEvents(tree, events, root, asArray) {
|
|
596
596
|
var branches = ownKeys(tree);
|
|
597
597
|
var i = branches.length;
|
|
598
|
-
var branch, branchName,
|
|
598
|
+
var branch, branchName, path10;
|
|
599
599
|
var hasListeners = tree["_listeners"];
|
|
600
600
|
var isArrayPath;
|
|
601
601
|
while (i-- > 0) {
|
|
602
602
|
branchName = branches[i];
|
|
603
603
|
branch = tree[branchName];
|
|
604
604
|
if (branchName === "_listeners") {
|
|
605
|
-
|
|
605
|
+
path10 = root;
|
|
606
606
|
} else {
|
|
607
|
-
|
|
607
|
+
path10 = root ? root.concat(branchName) : [branchName];
|
|
608
608
|
}
|
|
609
609
|
isArrayPath = asArray || typeof branchName === "symbol";
|
|
610
|
-
hasListeners && events.push(isArrayPath ?
|
|
610
|
+
hasListeners && events.push(isArrayPath ? path10 : path10.join(this.delimiter));
|
|
611
611
|
if (typeof branch === "object") {
|
|
612
|
-
collectTreeEvents.call(this, branch, events,
|
|
612
|
+
collectTreeEvents.call(this, branch, events, path10, isArrayPath);
|
|
613
613
|
}
|
|
614
614
|
}
|
|
615
615
|
return events;
|
|
@@ -2366,7 +2366,7 @@ function getReadFile(deps) {
|
|
|
2366
2366
|
function getReaddir(deps) {
|
|
2367
2367
|
return deps?.readdir ?? defaultReaddir;
|
|
2368
2368
|
}
|
|
2369
|
-
function resolveRulesDir(
|
|
2369
|
+
function resolveRulesDir(dirname3, options) {
|
|
2370
2370
|
if (options?.envRulesDir) {
|
|
2371
2371
|
return options.envRulesDir;
|
|
2372
2372
|
}
|
|
@@ -2374,15 +2374,15 @@ function resolveRulesDir(dirname2, options) {
|
|
|
2374
2374
|
return options.packageRulesPath;
|
|
2375
2375
|
}
|
|
2376
2376
|
const candidates = [
|
|
2377
|
-
path2.resolve(
|
|
2378
|
-
path2.resolve(
|
|
2379
|
-
path2.resolve(
|
|
2380
|
-
path2.resolve(
|
|
2377
|
+
path2.resolve(dirname3, "../../../../packages/rules/.ai-rules"),
|
|
2378
|
+
path2.resolve(dirname3, "../../../packages/rules/.ai-rules"),
|
|
2379
|
+
path2.resolve(dirname3, "../../../../.ai-rules"),
|
|
2380
|
+
path2.resolve(dirname3, "../../../.ai-rules")
|
|
2381
2381
|
];
|
|
2382
|
-
const
|
|
2383
|
-
if (
|
|
2382
|
+
const existsSync7 = options?.existsSync;
|
|
2383
|
+
if (existsSync7) {
|
|
2384
2384
|
for (const candidate of candidates) {
|
|
2385
|
-
if (
|
|
2385
|
+
if (existsSync7(candidate)) {
|
|
2386
2386
|
return candidate;
|
|
2387
2387
|
}
|
|
2388
2388
|
}
|
|
@@ -3035,6 +3035,22 @@ var AIConfigSchema = z3.object({
|
|
|
3035
3035
|
var AutoConfigSchema = z3.object({
|
|
3036
3036
|
maxIterations: z3.number().int().min(1).max(10).default(3)
|
|
3037
3037
|
});
|
|
3038
|
+
var ReleaseConfigSchema = z3.object({
|
|
3039
|
+
/** Files that contain the project version (checked for consistency) */
|
|
3040
|
+
versionFiles: z3.array(z3.string()).optional(),
|
|
3041
|
+
/** Lockfile path to verify sync (auto-detected if omitted) */
|
|
3042
|
+
lockfile: z3.string().optional(),
|
|
3043
|
+
/** Commands to run before release (e.g., ['lint', 'typecheck', 'test:coverage', 'build']) */
|
|
3044
|
+
preReleaseChecks: z3.array(z3.string()).optional(),
|
|
3045
|
+
/** Run security audit before release. Default: true */
|
|
3046
|
+
securityAudit: z3.boolean().default(true).optional(),
|
|
3047
|
+
/** Minimum test coverage percentage required */
|
|
3048
|
+
coverageThreshold: z3.number().min(0).max(100).optional(),
|
|
3049
|
+
/** Plugin manifest validation (auto-detected if .claude-plugin/ exists). Default: true */
|
|
3050
|
+
validatePlugin: z3.boolean().default(true).optional(),
|
|
3051
|
+
/** Version bump script path (e.g., 'scripts/bump-version.sh') */
|
|
3052
|
+
bumpScript: z3.string().optional()
|
|
3053
|
+
});
|
|
3038
3054
|
var ContextConfigSchema = z3.object({
|
|
3039
3055
|
/** Maximum items per array (decisions, notes, etc.). Default: 100 */
|
|
3040
3056
|
maxArrayItems: z3.number().int().min(10).max(1e3).default(100),
|
|
@@ -3060,6 +3076,8 @@ var CodingBuddyConfigSchema = z3.object({
|
|
|
3060
3076
|
ai: AIConfigSchema.optional(),
|
|
3061
3077
|
// AUTO mode settings
|
|
3062
3078
|
auto: AutoConfigSchema.optional(),
|
|
3079
|
+
// Release configuration
|
|
3080
|
+
release: ReleaseConfigSchema.optional(),
|
|
3063
3081
|
// Context document limits (DoS prevention)
|
|
3064
3082
|
context: ContextConfigSchema.optional(),
|
|
3065
3083
|
// Upstream Repository Mapping (for cross-repo issue creation)
|
|
@@ -4123,6 +4141,10 @@ TuiEventsModule = __decorateClass([
|
|
|
4123
4141
|
})
|
|
4124
4142
|
], TuiEventsModule);
|
|
4125
4143
|
|
|
4144
|
+
// src/tui/events/hud-file-bridge.ts
|
|
4145
|
+
import * as fs4 from "node:fs";
|
|
4146
|
+
import * as path8 from "node:path";
|
|
4147
|
+
|
|
4126
4148
|
// src/tui/hooks/use-focus-agent.ts
|
|
4127
4149
|
function selectFocusedAgent(agents, currentFocusId) {
|
|
4128
4150
|
if (agents.size === 0) return null;
|
|
@@ -5411,57 +5433,57 @@ var ColorBuffer = class {
|
|
|
5411
5433
|
|
|
5412
5434
|
// src/tui/utils/edge-router.ts
|
|
5413
5435
|
function computeEdgePath(from, to) {
|
|
5414
|
-
const
|
|
5436
|
+
const path10 = [];
|
|
5415
5437
|
const midX = Math.floor((from.x + to.x) / 2);
|
|
5416
5438
|
if (from.y === to.y) {
|
|
5417
5439
|
const dir = to.x > from.x ? 1 : -1;
|
|
5418
5440
|
for (let x = from.x; x !== to.x; x += dir) {
|
|
5419
|
-
|
|
5441
|
+
path10.push({ x, y: from.y, char: "\u2500" });
|
|
5420
5442
|
}
|
|
5421
|
-
|
|
5443
|
+
path10.push({ x: to.x, y: to.y, char: dir > 0 ? "\u25B8" : "\u25C2" });
|
|
5422
5444
|
} else if (from.x === to.x) {
|
|
5423
5445
|
const dir = to.y > from.y ? 1 : -1;
|
|
5424
5446
|
for (let y = from.y; y !== to.y; y += dir) {
|
|
5425
|
-
|
|
5447
|
+
path10.push({ x: from.x, y, char: "\u2502" });
|
|
5426
5448
|
}
|
|
5427
|
-
|
|
5449
|
+
path10.push({ x: to.x, y: to.y, char: dir > 0 ? "\u25BE" : "\u25B4" });
|
|
5428
5450
|
} else {
|
|
5429
5451
|
const dirX = midX > from.x ? 1 : midX < from.x ? -1 : 0;
|
|
5430
5452
|
if (dirX !== 0) {
|
|
5431
5453
|
for (let x = from.x; x !== midX; x += dirX) {
|
|
5432
|
-
|
|
5454
|
+
path10.push({ x, y: from.y, char: "\u2500" });
|
|
5433
5455
|
}
|
|
5434
5456
|
}
|
|
5435
5457
|
const dirY = to.y > from.y ? 1 : -1;
|
|
5436
|
-
|
|
5458
|
+
path10.push({
|
|
5437
5459
|
x: midX,
|
|
5438
5460
|
y: from.y,
|
|
5439
5461
|
char: dirX >= 0 ? dirY > 0 ? "\u256E" : "\u256F" : dirY > 0 ? "\u256D" : "\u2570"
|
|
5440
5462
|
});
|
|
5441
5463
|
for (let y = from.y + dirY; y !== to.y; y += dirY) {
|
|
5442
|
-
|
|
5464
|
+
path10.push({ x: midX, y, char: "\u2502" });
|
|
5443
5465
|
}
|
|
5444
5466
|
const dirX2 = to.x > midX ? 1 : to.x < midX ? -1 : 0;
|
|
5445
|
-
|
|
5467
|
+
path10.push({
|
|
5446
5468
|
x: midX,
|
|
5447
5469
|
y: to.y,
|
|
5448
5470
|
char: dirY > 0 ? dirX2 >= 0 ? "\u2570" : "\u256F" : dirX2 >= 0 ? "\u256D" : "\u256E"
|
|
5449
5471
|
});
|
|
5450
5472
|
if (dirX2 !== 0) {
|
|
5451
5473
|
for (let x = midX + dirX2; x !== to.x; x += dirX2) {
|
|
5452
|
-
|
|
5474
|
+
path10.push({ x, y: to.y, char: "\u2500" });
|
|
5453
5475
|
}
|
|
5454
5476
|
}
|
|
5455
5477
|
if (to.x !== midX) {
|
|
5456
|
-
|
|
5478
|
+
path10.push({ x: to.x, y: to.y, char: dirX2 >= 0 ? "\u25B8" : "\u25C2" });
|
|
5457
5479
|
} else {
|
|
5458
|
-
|
|
5480
|
+
path10[path10.length - 1].char = dirY > 0 ? "\u25BE" : "\u25B4";
|
|
5459
5481
|
}
|
|
5460
5482
|
}
|
|
5461
|
-
return
|
|
5483
|
+
return path10;
|
|
5462
5484
|
}
|
|
5463
|
-
function computeLabelPosition(
|
|
5464
|
-
const hSegments =
|
|
5485
|
+
function computeLabelPosition(path10, label) {
|
|
5486
|
+
const hSegments = path10.filter((p) => p.char === "\u2500");
|
|
5465
5487
|
if (hSegments.length < label.length + 2) return null;
|
|
5466
5488
|
const startIdx = Math.floor((hSegments.length - label.length) / 2);
|
|
5467
5489
|
return { x: hSegments[startIdx].x, y: hSegments[startIdx].y };
|
|
@@ -5732,14 +5754,14 @@ function renderFlowMap(agents, edges, width, height, activeStage = null) {
|
|
|
5732
5754
|
x: toPos.x - 1,
|
|
5733
5755
|
y: toPos.y + Math.floor(toPos.height / 2)
|
|
5734
5756
|
};
|
|
5735
|
-
const
|
|
5757
|
+
const path10 = computeEdgePath(fromPoint, toPoint);
|
|
5736
5758
|
const edgeDimmed = inactiveIds.has(edge.from) && inactiveIds.has(edge.to);
|
|
5737
|
-
for (const seg of
|
|
5759
|
+
for (const seg of path10) {
|
|
5738
5760
|
const isArrow = seg.char === "\u25B8" || seg.char === "\u25C2" || seg.char === "\u25BE" || seg.char === "\u25B4";
|
|
5739
5761
|
const segStyle = edgeDimmed ? DIMMED_STYLE : isArrow ? EDGE_STYLES.arrow : EDGE_STYLES.path;
|
|
5740
5762
|
buf.setChar(seg.x, seg.y, seg.char, segStyle);
|
|
5741
5763
|
}
|
|
5742
|
-
const labelPos = computeLabelPosition(
|
|
5764
|
+
const labelPos = computeLabelPosition(path10, edge.label);
|
|
5743
5765
|
if (labelPos) {
|
|
5744
5766
|
buf.writeText(
|
|
5745
5767
|
labelPos.x,
|
|
@@ -6729,7 +6751,7 @@ function DashboardApp({
|
|
|
6729
6751
|
// src/tui/multi-session-app.tsx
|
|
6730
6752
|
import React15, { useMemo as useMemo8, useCallback as useCallback2 } from "react";
|
|
6731
6753
|
import { Box as Box15, useInput } from "ink";
|
|
6732
|
-
import * as
|
|
6754
|
+
import * as path9 from "path";
|
|
6733
6755
|
|
|
6734
6756
|
// src/tui/hooks/use-multi-session-state.ts
|
|
6735
6757
|
import { useState as useState3, useCallback, useEffect as useEffect4, useRef } from "react";
|
|
@@ -6954,7 +6976,7 @@ function MultiSessionApp({ manager }) {
|
|
|
6954
6976
|
result.push({
|
|
6955
6977
|
pid,
|
|
6956
6978
|
index,
|
|
6957
|
-
projectName:
|
|
6979
|
+
projectName: path9.basename(sessionState.projectRoot),
|
|
6958
6980
|
globalState: sessionState.dashboardState.globalState,
|
|
6959
6981
|
isActive: pid === activeSessionPid
|
|
6960
6982
|
});
|