takt 0.1.7 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -43
- package/dist/agents/runner.d.ts +3 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +15 -0
- package/dist/agents/runner.js.map +1 -1
- package/dist/claude/client.d.ts +3 -1
- package/dist/claude/client.d.ts.map +1 -1
- package/dist/claude/client.js +17 -0
- package/dist/claude/client.js.map +1 -1
- package/dist/cli.d.ts +9 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +73 -18
- package/dist/cli.js.map +1 -1
- package/dist/commands/addTask.d.ts +15 -0
- package/dist/commands/addTask.d.ts.map +1 -0
- package/dist/commands/addTask.js +119 -0
- package/dist/commands/addTask.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +18 -5
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/refreshBuiltin.d.ts +11 -0
- package/dist/commands/refreshBuiltin.d.ts.map +1 -0
- package/dist/commands/refreshBuiltin.js +37 -0
- package/dist/commands/refreshBuiltin.js.map +1 -0
- package/dist/commands/reviewTasks.d.ts +32 -0
- package/dist/commands/reviewTasks.d.ts.map +1 -0
- package/dist/commands/reviewTasks.js +198 -0
- package/dist/commands/reviewTasks.js.map +1 -0
- package/dist/commands/taskExecution.d.ts +24 -1
- package/dist/commands/taskExecution.d.ts.map +1 -1
- package/dist/commands/taskExecution.js +100 -36
- package/dist/commands/taskExecution.js.map +1 -1
- package/dist/commands/watchTasks.d.ts +12 -0
- package/dist/commands/watchTasks.d.ts.map +1 -0
- package/dist/commands/watchTasks.js +68 -0
- package/dist/commands/watchTasks.js.map +1 -0
- package/dist/commands/workflowExecution.d.ts +5 -1
- package/dist/commands/workflowExecution.d.ts.map +1 -1
- package/dist/commands/workflowExecution.js +35 -12
- package/dist/commands/workflowExecution.js.map +1 -1
- package/dist/config/initialization.d.ts +2 -0
- package/dist/config/initialization.d.ts.map +1 -1
- package/dist/config/initialization.js +12 -2
- package/dist/config/initialization.js.map +1 -1
- package/dist/config/paths.d.ts +1 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +1 -1
- package/dist/config/paths.js.map +1 -1
- package/dist/config/sessionStore.d.ts +5 -0
- package/dist/config/sessionStore.d.ts.map +1 -1
- package/dist/config/sessionStore.js +1 -1
- package/dist/config/sessionStore.js.map +1 -1
- package/dist/config/workflowLoader.d.ts.map +1 -1
- package/dist/config/workflowLoader.js +1 -0
- package/dist/config/workflowLoader.js.map +1 -1
- package/dist/models/schemas.d.ts +22 -0
- package/dist/models/schemas.d.ts.map +1 -1
- package/dist/models/schemas.js +8 -0
- package/dist/models/schemas.js.map +1 -1
- package/dist/models/types.d.ts +8 -2
- package/dist/models/types.d.ts.map +1 -1
- package/dist/prompt/index.d.ts +60 -11
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +246 -72
- package/dist/prompt/index.js.map +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +2 -0
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +33 -9
- package/dist/resources/index.js.map +1 -1
- package/dist/task/autoCommit.d.ts +28 -0
- package/dist/task/autoCommit.d.ts.map +1 -0
- package/dist/task/autoCommit.js +68 -0
- package/dist/task/autoCommit.js.map +1 -0
- package/dist/task/display.d.ts.map +1 -1
- package/dist/task/display.js +19 -1
- package/dist/task/display.js.map +1 -1
- package/dist/task/index.d.ts +5 -0
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +5 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/parser.d.ts +33 -0
- package/dist/task/parser.d.ts.map +1 -0
- package/dist/task/parser.js +86 -0
- package/dist/task/parser.js.map +1 -0
- package/dist/task/runner.d.ts +6 -0
- package/dist/task/runner.d.ts.map +1 -1
- package/dist/task/runner.js +33 -42
- package/dist/task/runner.js.map +1 -1
- package/dist/task/schema.d.ts +32 -0
- package/dist/task/schema.d.ts.map +1 -0
- package/dist/task/schema.js +31 -0
- package/dist/task/schema.js.map +1 -0
- package/dist/task/watcher.d.ts +33 -0
- package/dist/task/watcher.d.ts.map +1 -0
- package/dist/task/watcher.js +69 -0
- package/dist/task/watcher.js.map +1 -0
- package/dist/task/worktree.d.ts +70 -0
- package/dist/task/worktree.d.ts.map +1 -0
- package/dist/task/worktree.js +221 -0
- package/dist/task/worktree.js.map +1 -0
- package/dist/utils/debug.d.ts +6 -1
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +30 -24
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +20 -0
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +32 -3
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/slug.d.ts +12 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +18 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/text.d.ts +22 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +54 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/workflow/engine.d.ts +5 -6
- package/dist/workflow/engine.d.ts.map +1 -1
- package/dist/workflow/engine.js +32 -12
- package/dist/workflow/engine.js.map +1 -1
- package/dist/workflow/index.d.ts +2 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/instruction-builder.d.ts +31 -2
- package/dist/workflow/instruction-builder.d.ts.map +1 -1
- package/dist/workflow/instruction-builder.js +69 -1
- package/dist/workflow/instruction-builder.js.map +1 -1
- package/dist/workflow/transitions.d.ts.map +1 -1
- package/dist/workflow/transitions.js +1 -0
- package/dist/workflow/transitions.js.map +1 -1
- package/dist/workflow/types.d.ts +5 -1
- package/dist/workflow/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/resources/global/en/workflows/default.yaml +22 -1
- package/resources/global/en/workflows/simple.yaml +18 -1
- package/resources/global/ja/agents/default/ai-reviewer.md +24 -1
- package/resources/global/ja/agents/default/architect.md +157 -4
- package/resources/global/ja/agents/default/coder.md +1 -0
- package/resources/global/ja/workflows/default.yaml +38 -1
- package/resources/global/ja/workflows/expert-review.yaml +169 -10
- package/resources/global/ja/workflows/simple.yaml +18 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/task/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc;;;;;iBAKzB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task YAML schema definition
|
|
3
|
+
*
|
|
4
|
+
* Zod schema for structured task files (.yaml/.yml)
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod/v4';
|
|
7
|
+
/**
|
|
8
|
+
* YAML task file schema
|
|
9
|
+
*
|
|
10
|
+
* Examples:
|
|
11
|
+
* task: "認証機能を追加する"
|
|
12
|
+
* worktree: true # .takt/worktrees/{timestamp}-{task-slug}/ に作成
|
|
13
|
+
* branch: "feat/add-auth" # オプション(省略時は自動生成)
|
|
14
|
+
* workflow: "default" # オプション(省略時はcurrent workflow)
|
|
15
|
+
*
|
|
16
|
+
* worktree patterns:
|
|
17
|
+
* - true: create at .takt/worktrees/{timestamp}-{task-slug}/
|
|
18
|
+
* - "/path/to/dir": create at specified path
|
|
19
|
+
* - omitted: no worktree (run in cwd)
|
|
20
|
+
*
|
|
21
|
+
* branch patterns:
|
|
22
|
+
* - "feat/xxx": use specified branch name
|
|
23
|
+
* - omitted: auto-generate as takt/{timestamp}-{task-slug}
|
|
24
|
+
*/
|
|
25
|
+
export const TaskFileSchema = z.object({
|
|
26
|
+
task: z.string().min(1),
|
|
27
|
+
worktree: z.union([z.boolean(), z.string()]).optional(),
|
|
28
|
+
branch: z.string().optional(),
|
|
29
|
+
workflow: z.string().optional(),
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/task/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task directory watcher
|
|
3
|
+
*
|
|
4
|
+
* Polls .takt/tasks/ for new task files and invokes a callback when found.
|
|
5
|
+
* Uses polling (not fs.watch) for cross-platform reliability.
|
|
6
|
+
*/
|
|
7
|
+
import { type TaskInfo } from './runner.js';
|
|
8
|
+
export interface TaskWatcherOptions {
|
|
9
|
+
/** Polling interval in milliseconds (default: 2000) */
|
|
10
|
+
pollInterval?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class TaskWatcher {
|
|
13
|
+
private runner;
|
|
14
|
+
private pollInterval;
|
|
15
|
+
private running;
|
|
16
|
+
private abortController;
|
|
17
|
+
constructor(projectDir: string, options?: TaskWatcherOptions);
|
|
18
|
+
/**
|
|
19
|
+
* Start watching for tasks.
|
|
20
|
+
* Resolves only when stop() is called.
|
|
21
|
+
*/
|
|
22
|
+
watch(onTask: (task: TaskInfo) => Promise<void>): Promise<void>;
|
|
23
|
+
/** Stop watching */
|
|
24
|
+
stop(): void;
|
|
25
|
+
/** Whether the watcher is currently active */
|
|
26
|
+
isRunning(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Sleep with abort support.
|
|
29
|
+
* Resolves early if stop() is called.
|
|
30
|
+
*/
|
|
31
|
+
private sleep;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/task/watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIxD,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAgC;gBAE3C,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAK5D;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrE,oBAAoB;IACpB,IAAI,IAAI,IAAI;IAKZ,8CAA8C;IAC9C,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,OAAO,CAAC,KAAK;CAiBd"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task directory watcher
|
|
3
|
+
*
|
|
4
|
+
* Polls .takt/tasks/ for new task files and invokes a callback when found.
|
|
5
|
+
* Uses polling (not fs.watch) for cross-platform reliability.
|
|
6
|
+
*/
|
|
7
|
+
import { createLogger } from '../utils/debug.js';
|
|
8
|
+
import { TaskRunner } from './runner.js';
|
|
9
|
+
const log = createLogger('watcher');
|
|
10
|
+
const DEFAULT_POLL_INTERVAL = 2000;
|
|
11
|
+
export class TaskWatcher {
|
|
12
|
+
runner;
|
|
13
|
+
pollInterval;
|
|
14
|
+
running = false;
|
|
15
|
+
abortController = null;
|
|
16
|
+
constructor(projectDir, options) {
|
|
17
|
+
this.runner = new TaskRunner(projectDir);
|
|
18
|
+
this.pollInterval = options?.pollInterval ?? DEFAULT_POLL_INTERVAL;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Start watching for tasks.
|
|
22
|
+
* Resolves only when stop() is called.
|
|
23
|
+
*/
|
|
24
|
+
async watch(onTask) {
|
|
25
|
+
this.running = true;
|
|
26
|
+
this.abortController = new AbortController();
|
|
27
|
+
log.info('Watch started', { pollInterval: this.pollInterval });
|
|
28
|
+
while (this.running) {
|
|
29
|
+
const task = this.runner.getNextTask();
|
|
30
|
+
if (task) {
|
|
31
|
+
log.info('Task found', { name: task.name });
|
|
32
|
+
await onTask(task);
|
|
33
|
+
// After task execution, immediately check for next task (no sleep)
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
// No tasks: wait before next poll
|
|
37
|
+
await this.sleep(this.pollInterval);
|
|
38
|
+
}
|
|
39
|
+
log.info('Watch stopped');
|
|
40
|
+
}
|
|
41
|
+
/** Stop watching */
|
|
42
|
+
stop() {
|
|
43
|
+
this.running = false;
|
|
44
|
+
this.abortController?.abort();
|
|
45
|
+
}
|
|
46
|
+
/** Whether the watcher is currently active */
|
|
47
|
+
isRunning() {
|
|
48
|
+
return this.running;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sleep with abort support.
|
|
52
|
+
* Resolves early if stop() is called.
|
|
53
|
+
*/
|
|
54
|
+
sleep(ms) {
|
|
55
|
+
return new Promise((resolve) => {
|
|
56
|
+
const signal = this.abortController?.signal;
|
|
57
|
+
if (signal?.aborted) {
|
|
58
|
+
resolve();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const timer = setTimeout(resolve, ms);
|
|
62
|
+
signal?.addEventListener('abort', () => {
|
|
63
|
+
clearTimeout(timer);
|
|
64
|
+
resolve();
|
|
65
|
+
}, { once: true });
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/task/watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAExD,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAOpC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,MAAM,OAAO,WAAW;IACd,MAAM,CAAa;IACnB,YAAY,CAAS;IACrB,OAAO,GAAG,KAAK,CAAC;IAChB,eAAe,GAA2B,IAAI,CAAC;IAEvD,YAAY,UAAkB,EAAE,OAA4B;QAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,qBAAqB,CAAC;IACrE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,MAAyC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE7C,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAEvC,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnB,mEAAmE;gBACnE,SAAS;YACX,CAAC;YAED,kCAAkC;YAClC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,CAAC;IAED,oBAAoB;IACpB,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,8CAA8C;IAC9C,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;YAE5C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAEtC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git worktree management
|
|
3
|
+
*
|
|
4
|
+
* Creates and removes git worktrees for task isolation.
|
|
5
|
+
*/
|
|
6
|
+
export interface WorktreeOptions {
|
|
7
|
+
/** worktree setting: true = auto path, string = custom path */
|
|
8
|
+
worktree: boolean | string;
|
|
9
|
+
/** Branch name (optional, auto-generated if omitted) */
|
|
10
|
+
branch?: string;
|
|
11
|
+
/** Task slug for auto-generated paths/branches */
|
|
12
|
+
taskSlug: string;
|
|
13
|
+
}
|
|
14
|
+
export interface WorktreeResult {
|
|
15
|
+
/** Absolute path to the worktree */
|
|
16
|
+
path: string;
|
|
17
|
+
/** Branch name used */
|
|
18
|
+
branch: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a git worktree for a task
|
|
22
|
+
*
|
|
23
|
+
* @returns WorktreeResult with path and branch
|
|
24
|
+
* @throws Error if git worktree creation fails
|
|
25
|
+
*/
|
|
26
|
+
export declare function createWorktree(projectDir: string, options: WorktreeOptions): WorktreeResult;
|
|
27
|
+
/**
|
|
28
|
+
* Remove a git worktree
|
|
29
|
+
*/
|
|
30
|
+
export declare function removeWorktree(projectDir: string, worktreePath: string): void;
|
|
31
|
+
/** Parsed worktree entry from git worktree list */
|
|
32
|
+
export interface WorktreeInfo {
|
|
33
|
+
path: string;
|
|
34
|
+
branch: string;
|
|
35
|
+
commit: string;
|
|
36
|
+
}
|
|
37
|
+
/** Worktree with review metadata */
|
|
38
|
+
export interface WorktreeReviewItem {
|
|
39
|
+
info: WorktreeInfo;
|
|
40
|
+
filesChanged: number;
|
|
41
|
+
taskSlug: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Detect the default branch name (main or master).
|
|
45
|
+
* Falls back to 'main'.
|
|
46
|
+
*/
|
|
47
|
+
export declare function detectDefaultBranch(cwd: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Parse `git worktree list --porcelain` output into WorktreeInfo entries.
|
|
50
|
+
* Only includes worktrees on branches with the takt/ prefix.
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseTaktWorktrees(porcelainOutput: string): WorktreeInfo[];
|
|
53
|
+
/**
|
|
54
|
+
* List all takt-managed worktrees.
|
|
55
|
+
*/
|
|
56
|
+
export declare function listTaktWorktrees(projectDir: string): WorktreeInfo[];
|
|
57
|
+
/**
|
|
58
|
+
* Get the number of files changed between the default branch and a given branch.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getFilesChanged(cwd: string, defaultBranch: string, branch: string): number;
|
|
61
|
+
/**
|
|
62
|
+
* Extract a human-readable task slug from a takt branch name.
|
|
63
|
+
* e.g. "takt/20260128T032800-fix-auth" → "fix-auth"
|
|
64
|
+
*/
|
|
65
|
+
export declare function extractTaskSlug(branch: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* Build review items from worktree list, enriching with diff stats.
|
|
68
|
+
*/
|
|
69
|
+
export declare function buildReviewItems(projectDir: string, worktrees: WorktreeInfo[], defaultBranch: string): WorktreeReviewItem[];
|
|
70
|
+
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/task/worktree.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAgED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,cAAc,CAyB3F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAY7E;AAMD,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oCAAoC;AACpC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2BvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY,EAAE,CA2B1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE,CAWpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU1F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,YAAY,EAAE,EACzB,aAAa,EAAE,MAAM,GACpB,kBAAkB,EAAE,CAMtB"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git worktree management
|
|
3
|
+
*
|
|
4
|
+
* Creates and removes git worktrees for task isolation.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { execFileSync } from 'node:child_process';
|
|
9
|
+
import { createLogger } from '../utils/debug.js';
|
|
10
|
+
import { slugify } from '../utils/slug.js';
|
|
11
|
+
import { isPathSafe } from '../config/paths.js';
|
|
12
|
+
const log = createLogger('worktree');
|
|
13
|
+
/**
|
|
14
|
+
* Generate a timestamp string for paths/branches
|
|
15
|
+
*/
|
|
16
|
+
function generateTimestamp() {
|
|
17
|
+
return new Date().toISOString().replace(/[:.]/g, '').slice(0, 15);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the worktree path based on options.
|
|
21
|
+
* Validates that custom paths stay within the project directory.
|
|
22
|
+
*
|
|
23
|
+
* @throws Error if a custom path escapes projectDir (path traversal)
|
|
24
|
+
*/
|
|
25
|
+
function resolveWorktreePath(projectDir, options) {
|
|
26
|
+
if (typeof options.worktree === 'string') {
|
|
27
|
+
const resolved = path.isAbsolute(options.worktree)
|
|
28
|
+
? options.worktree
|
|
29
|
+
: path.resolve(projectDir, options.worktree);
|
|
30
|
+
if (!isPathSafe(projectDir, resolved)) {
|
|
31
|
+
throw new Error(`Worktree path escapes project directory: ${options.worktree}`);
|
|
32
|
+
}
|
|
33
|
+
return resolved;
|
|
34
|
+
}
|
|
35
|
+
// worktree: true → .takt/worktrees/{timestamp}-{task-slug}/
|
|
36
|
+
const timestamp = generateTimestamp();
|
|
37
|
+
const slug = slugify(options.taskSlug);
|
|
38
|
+
const dirName = slug ? `${timestamp}-${slug}` : timestamp;
|
|
39
|
+
return path.join(projectDir, '.takt', 'worktrees', dirName);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve the branch name based on options
|
|
43
|
+
*/
|
|
44
|
+
function resolveBranchName(options) {
|
|
45
|
+
if (options.branch) {
|
|
46
|
+
return options.branch;
|
|
47
|
+
}
|
|
48
|
+
// Auto-generate: takt/{timestamp}-{task-slug}
|
|
49
|
+
const timestamp = generateTimestamp();
|
|
50
|
+
const slug = slugify(options.taskSlug);
|
|
51
|
+
return slug ? `takt/${timestamp}-${slug}` : `takt/${timestamp}`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if a git branch exists
|
|
55
|
+
*/
|
|
56
|
+
function branchExists(projectDir, branch) {
|
|
57
|
+
try {
|
|
58
|
+
execFileSync('git', ['rev-parse', '--verify', branch], {
|
|
59
|
+
cwd: projectDir,
|
|
60
|
+
stdio: 'pipe',
|
|
61
|
+
});
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create a git worktree for a task
|
|
70
|
+
*
|
|
71
|
+
* @returns WorktreeResult with path and branch
|
|
72
|
+
* @throws Error if git worktree creation fails
|
|
73
|
+
*/
|
|
74
|
+
export function createWorktree(projectDir, options) {
|
|
75
|
+
const worktreePath = resolveWorktreePath(projectDir, options);
|
|
76
|
+
const branch = resolveBranchName(options);
|
|
77
|
+
log.info('Creating worktree', { path: worktreePath, branch });
|
|
78
|
+
// Ensure parent directory exists
|
|
79
|
+
fs.mkdirSync(path.dirname(worktreePath), { recursive: true });
|
|
80
|
+
// Create worktree (use execFileSync to avoid shell injection)
|
|
81
|
+
if (branchExists(projectDir, branch)) {
|
|
82
|
+
execFileSync('git', ['worktree', 'add', worktreePath, branch], {
|
|
83
|
+
cwd: projectDir,
|
|
84
|
+
stdio: 'pipe',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
execFileSync('git', ['worktree', 'add', '-b', branch, worktreePath], {
|
|
89
|
+
cwd: projectDir,
|
|
90
|
+
stdio: 'pipe',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
log.info('Worktree created', { path: worktreePath, branch });
|
|
94
|
+
return { path: worktreePath, branch };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Remove a git worktree
|
|
98
|
+
*/
|
|
99
|
+
export function removeWorktree(projectDir, worktreePath) {
|
|
100
|
+
log.info('Removing worktree', { path: worktreePath });
|
|
101
|
+
try {
|
|
102
|
+
execFileSync('git', ['worktree', 'remove', worktreePath, '--force'], {
|
|
103
|
+
cwd: projectDir,
|
|
104
|
+
stdio: 'pipe',
|
|
105
|
+
});
|
|
106
|
+
log.info('Worktree removed', { path: worktreePath });
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
log.error('Failed to remove worktree', { path: worktreePath, error: String(err) });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// --- Review-related types and helpers ---
|
|
113
|
+
const TAKT_BRANCH_PREFIX = 'takt/';
|
|
114
|
+
/**
|
|
115
|
+
* Detect the default branch name (main or master).
|
|
116
|
+
* Falls back to 'main'.
|
|
117
|
+
*/
|
|
118
|
+
export function detectDefaultBranch(cwd) {
|
|
119
|
+
try {
|
|
120
|
+
const ref = execFileSync('git', ['symbolic-ref', 'refs/remotes/origin/HEAD'], { cwd, encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
121
|
+
// ref is like "refs/remotes/origin/main"
|
|
122
|
+
const parts = ref.split('/');
|
|
123
|
+
return parts[parts.length - 1] || 'main';
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Fallback: check if 'main' or 'master' exists
|
|
127
|
+
try {
|
|
128
|
+
execFileSync('git', ['rev-parse', '--verify', 'main'], {
|
|
129
|
+
cwd, encoding: 'utf-8', stdio: 'pipe',
|
|
130
|
+
});
|
|
131
|
+
return 'main';
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
try {
|
|
135
|
+
execFileSync('git', ['rev-parse', '--verify', 'master'], {
|
|
136
|
+
cwd, encoding: 'utf-8', stdio: 'pipe',
|
|
137
|
+
});
|
|
138
|
+
return 'master';
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return 'main';
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Parse `git worktree list --porcelain` output into WorktreeInfo entries.
|
|
148
|
+
* Only includes worktrees on branches with the takt/ prefix.
|
|
149
|
+
*/
|
|
150
|
+
export function parseTaktWorktrees(porcelainOutput) {
|
|
151
|
+
const entries = [];
|
|
152
|
+
const blocks = porcelainOutput.trim().split('\n\n');
|
|
153
|
+
for (const block of blocks) {
|
|
154
|
+
const lines = block.split('\n');
|
|
155
|
+
let wtPath = '';
|
|
156
|
+
let commit = '';
|
|
157
|
+
let branch = '';
|
|
158
|
+
for (const line of lines) {
|
|
159
|
+
if (line.startsWith('worktree ')) {
|
|
160
|
+
wtPath = line.slice('worktree '.length);
|
|
161
|
+
}
|
|
162
|
+
else if (line.startsWith('HEAD ')) {
|
|
163
|
+
commit = line.slice('HEAD '.length);
|
|
164
|
+
}
|
|
165
|
+
else if (line.startsWith('branch ')) {
|
|
166
|
+
const ref = line.slice('branch '.length);
|
|
167
|
+
branch = ref.replace('refs/heads/', '');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (wtPath && branch.startsWith(TAKT_BRANCH_PREFIX)) {
|
|
171
|
+
entries.push({ path: wtPath, branch, commit });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return entries;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* List all takt-managed worktrees.
|
|
178
|
+
*/
|
|
179
|
+
export function listTaktWorktrees(projectDir) {
|
|
180
|
+
try {
|
|
181
|
+
const output = execFileSync('git', ['worktree', 'list', '--porcelain'], { cwd: projectDir, encoding: 'utf-8', stdio: 'pipe' });
|
|
182
|
+
return parseTaktWorktrees(output);
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
log.error('Failed to list worktrees', { error: String(err) });
|
|
186
|
+
return [];
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get the number of files changed between the default branch and a given branch.
|
|
191
|
+
*/
|
|
192
|
+
export function getFilesChanged(cwd, defaultBranch, branch) {
|
|
193
|
+
try {
|
|
194
|
+
const output = execFileSync('git', ['diff', '--numstat', `${defaultBranch}...${branch}`], { cwd, encoding: 'utf-8', stdio: 'pipe' });
|
|
195
|
+
return output.trim().split('\n').filter(l => l.length > 0).length;
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return 0;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Extract a human-readable task slug from a takt branch name.
|
|
203
|
+
* e.g. "takt/20260128T032800-fix-auth" → "fix-auth"
|
|
204
|
+
*/
|
|
205
|
+
export function extractTaskSlug(branch) {
|
|
206
|
+
const name = branch.replace(TAKT_BRANCH_PREFIX, '');
|
|
207
|
+
// Remove timestamp prefix (format: YYYYMMDDTHHmmss- or similar)
|
|
208
|
+
const withoutTimestamp = name.replace(/^\d{8,}T?\d{0,6}-?/, '');
|
|
209
|
+
return withoutTimestamp || name;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Build review items from worktree list, enriching with diff stats.
|
|
213
|
+
*/
|
|
214
|
+
export function buildReviewItems(projectDir, worktrees, defaultBranch) {
|
|
215
|
+
return worktrees.map(wt => ({
|
|
216
|
+
info: wt,
|
|
217
|
+
filesChanged: getFilesChanged(projectDir, defaultBranch, wt.branch),
|
|
218
|
+
taskSlug: extractTaskSlug(wt.branch),
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/task/worktree.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/debug.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Debug logging utilities for takt
|
|
3
|
-
* Writes debug logs to file when enabled in config
|
|
3
|
+
* Writes debug logs to file when enabled in config.
|
|
4
|
+
* When verbose console is enabled, also outputs to stderr.
|
|
4
5
|
*/
|
|
5
6
|
import type { DebugConfig } from '../models/types.js';
|
|
6
7
|
/** Initialize debug logger from config */
|
|
7
8
|
export declare function initDebugLogger(config?: DebugConfig, projectDir?: string): void;
|
|
8
9
|
/** Reset debug logger (for testing) */
|
|
9
10
|
export declare function resetDebugLogger(): void;
|
|
11
|
+
/** Enable or disable verbose console output */
|
|
12
|
+
export declare function setVerboseConsole(enabled: boolean): void;
|
|
13
|
+
/** Check if verbose console is enabled */
|
|
14
|
+
export declare function isVerboseConsole(): boolean;
|
|
10
15
|
/** Check if debug is enabled */
|
|
11
16
|
export declare function isDebugEnabled(): boolean;
|
|
12
17
|
/** Get current debug log file path */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAgBtD,0CAA0C;AAC1C,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAkC/E;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC;AAED,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAExD;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,gCAAgC;AAChC,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,sCAAsC;AACtC,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AA8CD,8BAA8B;AAC9B,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAEjF;AAED,8BAA8B;AAC9B,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAEhF;AAED,+BAA+B;AAC/B,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAEjF;AAED,wCAAwC;AACxC,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEpG;AAED,oCAAoC;AACpC,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAErF;AAED,6CAA6C;AAC7C,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM;qBAEzB,MAAM,SAAS,OAAO;oBACvB,MAAM,SAAS,OAAO;qBACrB,MAAM,SAAS,OAAO;sBACrB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBACvC,MAAM,WAAW,OAAO;EAE5C"}
|
package/dist/utils/debug.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Debug logging utilities for takt
|
|
3
|
-
* Writes debug logs to file when enabled in config
|
|
3
|
+
* Writes debug logs to file when enabled in config.
|
|
4
|
+
* When verbose console is enabled, also outputs to stderr.
|
|
4
5
|
*/
|
|
5
6
|
import { existsSync, appendFileSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
6
7
|
import { dirname, join } from 'node:path';
|
|
@@ -9,6 +10,8 @@ import { homedir } from 'node:os';
|
|
|
9
10
|
let debugEnabled = false;
|
|
10
11
|
let debugLogFile = null;
|
|
11
12
|
let initialized = false;
|
|
13
|
+
/** Verbose console output state */
|
|
14
|
+
let verboseConsoleEnabled = false;
|
|
12
15
|
/** Get default debug log file path */
|
|
13
16
|
function getDefaultLogFile() {
|
|
14
17
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
@@ -50,6 +53,15 @@ export function resetDebugLogger() {
|
|
|
50
53
|
debugEnabled = false;
|
|
51
54
|
debugLogFile = null;
|
|
52
55
|
initialized = false;
|
|
56
|
+
verboseConsoleEnabled = false;
|
|
57
|
+
}
|
|
58
|
+
/** Enable or disable verbose console output */
|
|
59
|
+
export function setVerboseConsole(enabled) {
|
|
60
|
+
verboseConsoleEnabled = enabled;
|
|
61
|
+
}
|
|
62
|
+
/** Check if verbose console is enabled */
|
|
63
|
+
export function isVerboseConsole() {
|
|
64
|
+
return verboseConsoleEnabled;
|
|
53
65
|
}
|
|
54
66
|
/** Check if debug is enabled */
|
|
55
67
|
export function isDebugEnabled() {
|
|
@@ -75,12 +87,20 @@ function formatLogMessage(level, component, message, data) {
|
|
|
75
87
|
}
|
|
76
88
|
return logLine;
|
|
77
89
|
}
|
|
78
|
-
/**
|
|
79
|
-
|
|
90
|
+
/** Format a compact console log line */
|
|
91
|
+
function formatConsoleMessage(level, component, message) {
|
|
92
|
+
const timestamp = new Date().toISOString().slice(11, 23); // HH:mm:ss.SSS
|
|
93
|
+
return `[${timestamp}] [${level}] [${component}] ${message}`;
|
|
94
|
+
}
|
|
95
|
+
/** Write a log entry to verbose console (stderr) and/or file */
|
|
96
|
+
function writeLog(level, component, message, data) {
|
|
97
|
+
if (verboseConsoleEnabled) {
|
|
98
|
+
process.stderr.write(formatConsoleMessage(level, component, message) + '\n');
|
|
99
|
+
}
|
|
80
100
|
if (!debugEnabled || !debugLogFile) {
|
|
81
101
|
return;
|
|
82
102
|
}
|
|
83
|
-
const logLine = formatLogMessage(
|
|
103
|
+
const logLine = formatLogMessage(level, component, message, data);
|
|
84
104
|
try {
|
|
85
105
|
appendFileSync(debugLogFile, logLine + '\n', 'utf-8');
|
|
86
106
|
}
|
|
@@ -88,31 +108,17 @@ export function debugLog(component, message, data) {
|
|
|
88
108
|
// Silently fail - logging errors should not interrupt main flow
|
|
89
109
|
}
|
|
90
110
|
}
|
|
111
|
+
/** Write a debug log entry */
|
|
112
|
+
export function debugLog(component, message, data) {
|
|
113
|
+
writeLog('DEBUG', component, message, data);
|
|
114
|
+
}
|
|
91
115
|
/** Write an info log entry */
|
|
92
116
|
export function infoLog(component, message, data) {
|
|
93
|
-
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const logLine = formatLogMessage('INFO', component, message, data);
|
|
97
|
-
try {
|
|
98
|
-
appendFileSync(debugLogFile, logLine + '\n', 'utf-8');
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
// Silently fail
|
|
102
|
-
}
|
|
117
|
+
writeLog('INFO', component, message, data);
|
|
103
118
|
}
|
|
104
119
|
/** Write an error log entry */
|
|
105
120
|
export function errorLog(component, message, data) {
|
|
106
|
-
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
const logLine = formatLogMessage('ERROR', component, message, data);
|
|
110
|
-
try {
|
|
111
|
-
appendFileSync(debugLogFile, logLine + '\n', 'utf-8');
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
// Silently fail
|
|
115
|
-
}
|
|
121
|
+
writeLog('ERROR', component, message, data);
|
|
116
122
|
}
|
|
117
123
|
/** Log function entry with arguments */
|
|
118
124
|
export function traceEnter(component, funcName, args) {
|
package/dist/utils/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
package/dist/utils/index.js
CHANGED
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|