@jamesaphoenix/tx-cli 0.4.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/cli-exit.d.ts +15 -0
- package/dist/cli-exit.d.ts.map +1 -0
- package/dist/cli-exit.js +18 -0
- package/dist/cli-exit.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +349 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/attempt.d.ts +9 -0
- package/dist/commands/attempt.d.ts.map +1 -0
- package/dist/commands/attempt.js +93 -0
- package/dist/commands/attempt.js.map +1 -0
- package/dist/commands/bulk.d.ts +8 -0
- package/dist/commands/bulk.d.ts.map +1 -0
- package/dist/commands/bulk.js +168 -0
- package/dist/commands/bulk.js.map +1 -0
- package/dist/commands/claim.d.ts +39 -0
- package/dist/commands/claim.d.ts.map +1 -0
- package/dist/commands/claim.js +96 -0
- package/dist/commands/claim.js.map +1 -0
- package/dist/commands/compact.d.ts +17 -0
- package/dist/commands/compact.d.ts.map +1 -0
- package/dist/commands/compact.js +167 -0
- package/dist/commands/compact.js.map +1 -0
- package/dist/commands/coordinator.d.ts +12 -0
- package/dist/commands/coordinator.d.ts.map +1 -0
- package/dist/commands/coordinator.js +124 -0
- package/dist/commands/coordinator.js.map +1 -0
- package/dist/commands/cycle.d.ts +12 -0
- package/dist/commands/cycle.d.ts.map +1 -0
- package/dist/commands/cycle.js +109 -0
- package/dist/commands/cycle.js.map +1 -0
- package/dist/commands/daemon.d.ts +16 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +635 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/dashboard.d.ts +12 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +105 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/dashboard.test.d.ts +2 -0
- package/dist/commands/dashboard.test.d.ts.map +1 -0
- package/dist/commands/dashboard.test.js +99 -0
- package/dist/commands/dashboard.test.js.map +1 -0
- package/dist/commands/dep.d.ts +9 -0
- package/dist/commands/dep.d.ts.map +1 -0
- package/dist/commands/dep.js +50 -0
- package/dist/commands/dep.js.map +1 -0
- package/dist/commands/doc.d.ts +10 -0
- package/dist/commands/doc.d.ts.map +1 -0
- package/dist/commands/doc.js +397 -0
- package/dist/commands/doc.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +168 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/graph.d.ts +58 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +441 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/hierarchy.d.ts +9 -0
- package/dist/commands/hierarchy.d.ts.map +1 -0
- package/dist/commands/hierarchy.js +68 -0
- package/dist/commands/hierarchy.js.map +1 -0
- package/dist/commands/hooks.d.ts +56 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +365 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/invariant.d.ts +9 -0
- package/dist/commands/invariant.d.ts.map +1 -0
- package/dist/commands/invariant.js +126 -0
- package/dist/commands/invariant.js.map +1 -0
- package/dist/commands/learning.d.ts +16 -0
- package/dist/commands/learning.d.ts.map +1 -0
- package/dist/commands/learning.js +362 -0
- package/dist/commands/learning.js.map +1 -0
- package/dist/commands/migrate.d.ts +9 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +56 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/orchestrator.d.ts +11 -0
- package/dist/commands/orchestrator.d.ts.map +1 -0
- package/dist/commands/orchestrator.js +129 -0
- package/dist/commands/orchestrator.js.map +1 -0
- package/dist/commands/stats.d.ts +8 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +128 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sync-platform.d.ts +12 -0
- package/dist/commands/sync-platform.d.ts.map +1 -0
- package/dist/commands/sync-platform.js +74 -0
- package/dist/commands/sync-platform.js.map +1 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +128 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/task.d.ts +15 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +233 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/test.d.ts +16 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +112 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/trace.d.ts +39 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +620 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/validate.d.ts +9 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +94 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/worker.d.ts +10 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +204 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/help.d.ts +3 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +1366 -0
- package/dist/help.js.map +1 -0
- package/dist/output.d.ts +12 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +76 -0
- package/dist/output.js.map +1 -0
- package/dist/tx +0 -0
- package/dist/utils/parse.d.ts +45 -0
- package/dist/utils/parse.d.ts.map +1 -0
- package/dist/utils/parse.js +79 -0
- package/dist/utils/parse.js.map +1 -0
- package/dist/utils/parse.test.d.ts +2 -0
- package/dist/utils/parse.test.d.ts.map +1 -0
- package/dist/utils/parse.test.js +140 -0
- package/dist/utils/parse.test.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coordinator commands: start, stop, status, reconcile
|
|
3
|
+
*
|
|
4
|
+
* CLI commands for managing the worker coordination system (PRD-018).
|
|
5
|
+
* Named "coordinator" to emphasize tx provides coordination primitives,
|
|
6
|
+
* not an orchestration framework - you own the orchestration loop.
|
|
7
|
+
*/
|
|
8
|
+
import { Effect } from "effect";
|
|
9
|
+
import { OrchestratorService } from "@jamesaphoenix/tx-core";
|
|
10
|
+
import { toJson } from "../output.js";
|
|
11
|
+
import { commandHelp } from "../help.js";
|
|
12
|
+
import { flag, parseIntOpt } from "../utils/parse.js";
|
|
13
|
+
export const coordinator = (pos, flags) => Effect.gen(function* () {
|
|
14
|
+
const subcommand = pos[0];
|
|
15
|
+
if (!subcommand || subcommand === "help") {
|
|
16
|
+
console.log(commandHelp["coordinator"]);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Check for --help on subcommand
|
|
20
|
+
if (flag(flags, "help", "h")) {
|
|
21
|
+
const helpKey = `coordinator ${subcommand}`;
|
|
22
|
+
if (commandHelp[helpKey]) {
|
|
23
|
+
console.log(commandHelp[helpKey]);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const svc = yield* OrchestratorService;
|
|
28
|
+
if (subcommand === "start") {
|
|
29
|
+
// Parse options
|
|
30
|
+
const workers = parseIntOpt(flags, "workers", "workers", "w");
|
|
31
|
+
if (workers !== undefined && workers < 1) {
|
|
32
|
+
console.error(`Invalid workers value: '${workers}'. Must be a positive integer.`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
const isDaemon = flag(flags, "daemon", "d");
|
|
36
|
+
// Build config
|
|
37
|
+
const config = workers !== undefined
|
|
38
|
+
? { workerPoolSize: workers }
|
|
39
|
+
: {};
|
|
40
|
+
// Start coordinator
|
|
41
|
+
yield* svc.start(config);
|
|
42
|
+
// Get updated status
|
|
43
|
+
const state = yield* svc.status();
|
|
44
|
+
if (flag(flags, "json")) {
|
|
45
|
+
console.log(toJson({
|
|
46
|
+
action: "started",
|
|
47
|
+
status: state.status,
|
|
48
|
+
pid: state.pid,
|
|
49
|
+
workerPoolSize: state.workerPoolSize,
|
|
50
|
+
daemon: isDaemon
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log("Coordinator started");
|
|
55
|
+
console.log(` Status: ${state.status}`);
|
|
56
|
+
console.log(` PID: ${state.pid}`);
|
|
57
|
+
console.log(` Worker pool size: ${state.workerPoolSize}`);
|
|
58
|
+
if (isDaemon) {
|
|
59
|
+
console.log(" Mode: daemon (background)");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (subcommand === "stop") {
|
|
64
|
+
const graceful = flag(flags, "graceful", "g");
|
|
65
|
+
yield* svc.stop(graceful);
|
|
66
|
+
const state = yield* svc.status();
|
|
67
|
+
if (flag(flags, "json")) {
|
|
68
|
+
console.log(toJson({
|
|
69
|
+
action: "stopped",
|
|
70
|
+
status: state.status,
|
|
71
|
+
graceful
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log("Coordinator stopped");
|
|
76
|
+
if (graceful) {
|
|
77
|
+
console.log(" Mode: graceful (waited for workers to finish)");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else if (subcommand === "status") {
|
|
82
|
+
const state = yield* svc.status();
|
|
83
|
+
if (flag(flags, "json")) {
|
|
84
|
+
console.log(toJson(state));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log("Coordinator Status:");
|
|
88
|
+
console.log(` Status: ${state.status}`);
|
|
89
|
+
if (state.pid) {
|
|
90
|
+
console.log(` PID: ${state.pid}`);
|
|
91
|
+
}
|
|
92
|
+
if (state.startedAt) {
|
|
93
|
+
console.log(` Started: ${state.startedAt.toISOString()}`);
|
|
94
|
+
}
|
|
95
|
+
console.log(` Worker pool size: ${state.workerPoolSize}`);
|
|
96
|
+
console.log(` Heartbeat interval: ${state.heartbeatIntervalSeconds}s`);
|
|
97
|
+
console.log(` Lease duration: ${state.leaseDurationMinutes}m`);
|
|
98
|
+
console.log(` Reconcile interval: ${state.reconcileIntervalSeconds}s`);
|
|
99
|
+
if (state.lastReconcileAt) {
|
|
100
|
+
console.log(` Last reconcile: ${state.lastReconcileAt.toISOString()}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (subcommand === "reconcile") {
|
|
105
|
+
const result = yield* svc.reconcile();
|
|
106
|
+
if (flag(flags, "json")) {
|
|
107
|
+
console.log(toJson(result));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.log("Reconciliation completed");
|
|
111
|
+
console.log(` Dead workers found: ${result.deadWorkersFound}`);
|
|
112
|
+
console.log(` Expired claims released: ${result.expiredClaimsReleased}`);
|
|
113
|
+
console.log(` Orphaned tasks recovered: ${result.orphanedTasksRecovered}`);
|
|
114
|
+
console.log(` Stale states fixed: ${result.staleStatesFixed}`);
|
|
115
|
+
console.log(` Time: ${result.reconcileTime}ms`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.error(`Unknown coordinator subcommand: ${subcommand}`);
|
|
120
|
+
console.error(`Run 'tx coordinator --help' for usage information`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=coordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/commands/coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cycle commands: tx cycle
|
|
3
|
+
*
|
|
4
|
+
* Dispatches sub-agent swarms to scan for codebase issues, deduplicates
|
|
5
|
+
* findings against known issues, and optionally fixes them.
|
|
6
|
+
*/
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
import { CycleScanService } from "@jamesaphoenix/tx-core";
|
|
9
|
+
import { type Flags } from "../utils/parse.js";
|
|
10
|
+
/** Dispatch cycle command. */
|
|
11
|
+
export declare const cycle: (_pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").CycleScanError, CycleScanService>;
|
|
12
|
+
//# sourceMappingURL=cycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cycle.d.ts","sourceRoot":"","sources":["../../src/commands/cycle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,OAAO,EAAE,KAAK,KAAK,EAA0B,MAAM,mBAAmB,CAAA;AAEtE,8BAA8B;AAC9B,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,EAAE,OAAO,KAAK,2FAsGjD,CAAA"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cycle commands: tx cycle
|
|
3
|
+
*
|
|
4
|
+
* Dispatches sub-agent swarms to scan for codebase issues, deduplicates
|
|
5
|
+
* findings against known issues, and optionally fixes them.
|
|
6
|
+
*/
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
import { CycleScanService } from "@jamesaphoenix/tx-core";
|
|
9
|
+
import { toJson } from "../output.js";
|
|
10
|
+
import { flag, opt, parseIntOpt } from "../utils/parse.js";
|
|
11
|
+
/** Dispatch cycle command. */
|
|
12
|
+
export const cycle = (_pos, flags) => {
|
|
13
|
+
const taskPrompt = opt(flags, "task-prompt");
|
|
14
|
+
if (!taskPrompt) {
|
|
15
|
+
return Effect.sync(() => {
|
|
16
|
+
console.error("Error: --task-prompt is required");
|
|
17
|
+
console.error();
|
|
18
|
+
console.error("Usage:");
|
|
19
|
+
console.error(' tx cycle --task-prompt "Review core services" --scan-prompt "Find bugs"');
|
|
20
|
+
console.error();
|
|
21
|
+
console.error("Options:");
|
|
22
|
+
console.error(" --task-prompt <text|file> Area/work being reviewed (required)");
|
|
23
|
+
console.error(" --scan-prompt <text|file> What sub-agents look for (optional)");
|
|
24
|
+
console.error(" --name <text> Cycle name (shown in dashboard)");
|
|
25
|
+
console.error(" --description <text> Cycle description");
|
|
26
|
+
console.error(" --cycles <N> Number of cycles (default: 1)");
|
|
27
|
+
console.error(" --max-rounds <N> Max rounds per cycle (default: 10)");
|
|
28
|
+
console.error(" --agents <N> Parallel scan agents per round (default: 3)");
|
|
29
|
+
console.error(" --model <model> LLM model (default: claude-opus-4-6)");
|
|
30
|
+
console.error(" --fix Enable fix agent between scan rounds");
|
|
31
|
+
console.error(" --scan-only Skip fix phase (explicit default)");
|
|
32
|
+
console.error(" --dry-run Report only, no DB writes");
|
|
33
|
+
console.error(" --score <N> Base score for new tasks (default: 500)");
|
|
34
|
+
console.error(" --json Output as JSON");
|
|
35
|
+
process.exit(1);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return Effect.gen(function* () {
|
|
39
|
+
const svc = yield* CycleScanService;
|
|
40
|
+
const cycles = parseIntOpt(flags, "cycles", "cycles") ?? 1;
|
|
41
|
+
const maxRounds = parseIntOpt(flags, "max-rounds", "max-rounds") ?? 10;
|
|
42
|
+
const agents = parseIntOpt(flags, "agents", "agents") ?? 3;
|
|
43
|
+
const score = parseIntOpt(flags, "score", "score") ?? 500;
|
|
44
|
+
const scanPrompt = opt(flags, "scan-prompt") ?? "Find bugs, anti-patterns, missing error handling, security vulnerabilities, and untested code paths.";
|
|
45
|
+
const name = opt(flags, "name");
|
|
46
|
+
const description = opt(flags, "description");
|
|
47
|
+
const model = opt(flags, "model") ?? "claude-opus-4-6";
|
|
48
|
+
const doFix = flag(flags, "fix");
|
|
49
|
+
const scanOnly = flag(flags, "scan-only");
|
|
50
|
+
const dryRun = flag(flags, "dry-run");
|
|
51
|
+
const jsonOutput = flag(flags, "json");
|
|
52
|
+
const effectiveMaxRounds = (scanOnly || (!doFix && !dryRun)) ? 1 : maxRounds;
|
|
53
|
+
if (!jsonOutput) {
|
|
54
|
+
console.log("Cycle Scan — Cycle-Based Issue Discovery");
|
|
55
|
+
console.log(` Task: ${taskPrompt.slice(0, 80)}${taskPrompt.length > 80 ? "..." : ""}`);
|
|
56
|
+
if (scanPrompt) {
|
|
57
|
+
console.log(` Scan: ${scanPrompt.slice(0, 80)}${scanPrompt.length > 80 ? "..." : ""}`);
|
|
58
|
+
}
|
|
59
|
+
console.log(` Cycles: ${cycles}, Max rounds: ${effectiveMaxRounds}${effectiveMaxRounds !== maxRounds ? ` (capped from ${maxRounds} — no fix agent)` : ""}, Agents: ${agents}`);
|
|
60
|
+
console.log(` Model: ${model}, Fix: ${doFix}, Scan-only: ${scanOnly}, Dry-run: ${dryRun}`);
|
|
61
|
+
console.log();
|
|
62
|
+
}
|
|
63
|
+
const onProgress = jsonOutput ? undefined : (event) => {
|
|
64
|
+
switch (event.type) {
|
|
65
|
+
case "cycle_start":
|
|
66
|
+
console.log(`=== Cycle ${event.cycle}/${event.totalCycles}: "${event.name}" ===`);
|
|
67
|
+
break;
|
|
68
|
+
case "scan_complete":
|
|
69
|
+
console.log(` Round ${event.round}: Found ${event.findings} findings in ${(event.durationMs / 1000).toFixed(1)}s`);
|
|
70
|
+
break;
|
|
71
|
+
case "dedup_complete":
|
|
72
|
+
console.log(` Round ${event.round}: Dedup: ${event.newIssues} new, ${event.duplicates} duplicates`);
|
|
73
|
+
break;
|
|
74
|
+
case "round_loss":
|
|
75
|
+
console.log(` Round ${event.round}: Loss = ${event.loss} (${event.high}H x3 + ${event.medium}M x2 + ${event.low}L x1)`);
|
|
76
|
+
break;
|
|
77
|
+
case "converged":
|
|
78
|
+
console.log(` Round ${event.round}: Converged!`);
|
|
79
|
+
break;
|
|
80
|
+
case "cycle_complete": {
|
|
81
|
+
const r = event.result;
|
|
82
|
+
console.log(`\n Cycle ${r.cycle} complete: ${r.rounds} rounds, ${r.totalNewIssues} new issues, final loss ${r.finalLoss}${r.converged ? " -- CONVERGED" : ""}`);
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const results = yield* svc.runCycles({
|
|
88
|
+
taskPrompt,
|
|
89
|
+
scanPrompt,
|
|
90
|
+
name,
|
|
91
|
+
description,
|
|
92
|
+
cycles,
|
|
93
|
+
maxRounds,
|
|
94
|
+
agents,
|
|
95
|
+
model,
|
|
96
|
+
fix: doFix,
|
|
97
|
+
scanOnly,
|
|
98
|
+
dryRun,
|
|
99
|
+
score,
|
|
100
|
+
}, onProgress);
|
|
101
|
+
if (jsonOutput) {
|
|
102
|
+
console.log(toJson(results));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
console.log("\nDone.");
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=cycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cycle.js","sourceRoot":"","sources":["../../src/commands/cycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon commands: start, stop, status, process, review, promote, reject, track, untrack, list
|
|
3
|
+
*/
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
import { CandidateRepository, CandidateExtractorService, DaemonService, DeduplicationService, PromotionService, TrackedProjectRepository } from "@jamesaphoenix/tx-core";
|
|
6
|
+
import { type Flags } from "../utils/parse.js";
|
|
7
|
+
export declare const daemon: (pos: string[], flags: Flags) => Effect.Effect<void, import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").BatchProcessingError<{
|
|
8
|
+
readonly filePath: string;
|
|
9
|
+
readonly totalLines: number;
|
|
10
|
+
readonly newLines: number;
|
|
11
|
+
readonly skippedLines: number;
|
|
12
|
+
readonly startLine: number;
|
|
13
|
+
readonly endLine: number;
|
|
14
|
+
readonly duration: number;
|
|
15
|
+
}>, DaemonService | TrackedProjectRepository | CandidateRepository | CandidateExtractorService | DeduplicationService | PromotionService>;
|
|
16
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EAEzB,MAAM,wBAAwB,CAAA;AAI/B,OAAO,EAAE,KAAK,KAAK,EAA0B,MAAM,mBAAmB,CAAA;AAqHtE,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,EAAE,OAAO,KAAK;;;;;;;;yIAohB9C,CAAA"}
|