@gowelle/stint-agent 1.2.42 → 1.2.44
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/{StatusDashboard-A4AGVOHI.js → StatusDashboard-LG4VC32Y.js} +2 -2
- package/dist/api-A5W4VYEH.js +7 -0
- package/dist/{chunk-TCRZ7UWW.js → chunk-4IAVYCEN.js} +1 -1
- package/dist/{chunk-CTT3PVE2.js → chunk-7B4YYEBR.js} +273 -24
- package/dist/{chunk-XJKYVUDT.js → chunk-UBU6PUVO.js} +9 -4
- package/dist/{chunk-GOT6DVWZ.js → chunk-X2Z4ILIY.js} +1 -1
- package/dist/daemon/runner.js +8 -5
- package/dist/index.js +15 -7
- package/package.json +1 -1
- package/dist/api-3OZXM443.js +0 -7
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
gitService,
|
|
3
3
|
projectService,
|
|
4
4
|
validatePidFile
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-4IAVYCEN.js";
|
|
6
6
|
import {
|
|
7
7
|
authService
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-X2Z4ILIY.js";
|
|
9
9
|
|
|
10
10
|
// src/components/StatusDashboard.tsx
|
|
11
11
|
import { useState, useEffect } from "react";
|
|
@@ -1,23 +1,241 @@
|
|
|
1
1
|
import {
|
|
2
2
|
apiService
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UBU6PUVO.js";
|
|
4
4
|
import {
|
|
5
5
|
gitService,
|
|
6
6
|
projectService
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-4IAVYCEN.js";
|
|
8
8
|
import {
|
|
9
9
|
authService,
|
|
10
10
|
config,
|
|
11
11
|
logger
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-X2Z4ILIY.js";
|
|
13
|
+
|
|
14
|
+
// src/services/package-detector.ts
|
|
15
|
+
import fs from "fs";
|
|
16
|
+
import path from "path";
|
|
17
|
+
var PackageDetectorService = class {
|
|
18
|
+
/**
|
|
19
|
+
* Detect all package types in a project directory
|
|
20
|
+
*/
|
|
21
|
+
async detectAll(projectPath) {
|
|
22
|
+
const packages = [];
|
|
23
|
+
try {
|
|
24
|
+
const npmInfo = await this.detectNpm(projectPath);
|
|
25
|
+
if (npmInfo) packages.push(npmInfo);
|
|
26
|
+
const composerInfo = await this.detectComposer(projectPath);
|
|
27
|
+
if (composerInfo) packages.push(composerInfo);
|
|
28
|
+
const cargoInfo = await this.detectCargo(projectPath);
|
|
29
|
+
if (cargoInfo) packages.push(cargoInfo);
|
|
30
|
+
const pipInfo = await this.detectPip(projectPath);
|
|
31
|
+
if (pipInfo) packages.push(pipInfo);
|
|
32
|
+
const goInfo = await this.detectGo(projectPath);
|
|
33
|
+
if (goInfo) packages.push(goInfo);
|
|
34
|
+
const gemInfo = await this.detectGem(projectPath);
|
|
35
|
+
if (gemInfo) packages.push(gemInfo);
|
|
36
|
+
if (packages.length > 0) {
|
|
37
|
+
logger.info(
|
|
38
|
+
"package-detector",
|
|
39
|
+
`Detected ${packages.length} package type(s): ${packages.map((p) => p.type).join(", ")}`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
return packages;
|
|
43
|
+
} catch (error) {
|
|
44
|
+
logger.error(
|
|
45
|
+
"package-detector",
|
|
46
|
+
"Error detecting packages",
|
|
47
|
+
error
|
|
48
|
+
);
|
|
49
|
+
return packages;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Detect npm package (package.json)
|
|
54
|
+
*/
|
|
55
|
+
async detectNpm(projectPath) {
|
|
56
|
+
const manifestPath = path.join(projectPath, "package.json");
|
|
57
|
+
if (!fs.existsSync(manifestPath)) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const content = fs.readFileSync(manifestPath, "utf8");
|
|
62
|
+
const pkg = JSON.parse(content);
|
|
63
|
+
const scripts = pkg.scripts ? Object.keys(pkg.scripts) : [];
|
|
64
|
+
return {
|
|
65
|
+
type: "npm",
|
|
66
|
+
name: pkg.name || "unknown",
|
|
67
|
+
version: pkg.version || "0.0.0",
|
|
68
|
+
manifestPath,
|
|
69
|
+
scripts,
|
|
70
|
+
hasPublishConfig: !!pkg.publishConfig
|
|
71
|
+
};
|
|
72
|
+
} catch (error) {
|
|
73
|
+
logger.debug(
|
|
74
|
+
"package-detector",
|
|
75
|
+
`Failed to parse package.json: ${error.message}`
|
|
76
|
+
);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Detect composer package (composer.json)
|
|
82
|
+
*/
|
|
83
|
+
async detectComposer(projectPath) {
|
|
84
|
+
const manifestPath = path.join(projectPath, "composer.json");
|
|
85
|
+
if (!fs.existsSync(manifestPath)) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const content = fs.readFileSync(manifestPath, "utf8");
|
|
90
|
+
const pkg = JSON.parse(content);
|
|
91
|
+
return {
|
|
92
|
+
type: "composer",
|
|
93
|
+
name: pkg.name || "unknown",
|
|
94
|
+
version: pkg.version || "0.0.0",
|
|
95
|
+
manifestPath
|
|
96
|
+
};
|
|
97
|
+
} catch (error) {
|
|
98
|
+
logger.debug(
|
|
99
|
+
"package-detector",
|
|
100
|
+
`Failed to parse composer.json: ${error.message}`
|
|
101
|
+
);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Detect cargo package (Cargo.toml)
|
|
107
|
+
*/
|
|
108
|
+
async detectCargo(projectPath) {
|
|
109
|
+
const manifestPath = path.join(projectPath, "Cargo.toml");
|
|
110
|
+
if (!fs.existsSync(manifestPath)) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const content = fs.readFileSync(manifestPath, "utf8");
|
|
115
|
+
const nameMatch = content.match(/^\s*name\s*=\s*["']([^"']+)["']/m);
|
|
116
|
+
const versionMatch = content.match(/^\s*version\s*=\s*["']([^"']+)["']/m);
|
|
117
|
+
return {
|
|
118
|
+
type: "cargo",
|
|
119
|
+
name: nameMatch ? nameMatch[1] : "unknown",
|
|
120
|
+
version: versionMatch ? versionMatch[1] : "0.0.0",
|
|
121
|
+
manifestPath
|
|
122
|
+
};
|
|
123
|
+
} catch (error) {
|
|
124
|
+
logger.debug(
|
|
125
|
+
"package-detector",
|
|
126
|
+
`Failed to parse Cargo.toml: ${error.message}`
|
|
127
|
+
);
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Detect pip package (pyproject.toml or setup.py)
|
|
133
|
+
*/
|
|
134
|
+
async detectPip(projectPath) {
|
|
135
|
+
const pyprojectPath = path.join(projectPath, "pyproject.toml");
|
|
136
|
+
if (fs.existsSync(pyprojectPath)) {
|
|
137
|
+
try {
|
|
138
|
+
const content = fs.readFileSync(pyprojectPath, "utf8");
|
|
139
|
+
const nameMatch = content.match(
|
|
140
|
+
/\[project\][\s\S]*?name\s*=\s*["']([^"']+)["']/
|
|
141
|
+
);
|
|
142
|
+
const versionMatch = content.match(
|
|
143
|
+
/\[project\][\s\S]*?version\s*=\s*["']([^"']+)["']/
|
|
144
|
+
);
|
|
145
|
+
const poetryNameMatch = content.match(
|
|
146
|
+
/\[tool\.poetry\][\s\S]*?name\s*=\s*["']([^"']+)["']/
|
|
147
|
+
);
|
|
148
|
+
const poetryVersionMatch = content.match(
|
|
149
|
+
/\[tool\.poetry\][\s\S]*?version\s*=\s*["']([^"']+)["']/
|
|
150
|
+
);
|
|
151
|
+
return {
|
|
152
|
+
type: "pip",
|
|
153
|
+
name: nameMatch?.[1] || poetryNameMatch?.[1] || "unknown",
|
|
154
|
+
version: versionMatch?.[1] || poetryVersionMatch?.[1] || "0.0.0",
|
|
155
|
+
manifestPath: pyprojectPath
|
|
156
|
+
};
|
|
157
|
+
} catch (error) {
|
|
158
|
+
logger.debug(
|
|
159
|
+
"package-detector",
|
|
160
|
+
`Failed to parse pyproject.toml: ${error.message}`
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const setupPyPath = path.join(projectPath, "setup.py");
|
|
165
|
+
if (fs.existsSync(setupPyPath)) {
|
|
166
|
+
return {
|
|
167
|
+
type: "pip",
|
|
168
|
+
name: "unknown",
|
|
169
|
+
version: "0.0.0",
|
|
170
|
+
manifestPath: setupPyPath
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Detect go module (go.mod)
|
|
177
|
+
*/
|
|
178
|
+
async detectGo(projectPath) {
|
|
179
|
+
const manifestPath = path.join(projectPath, "go.mod");
|
|
180
|
+
if (!fs.existsSync(manifestPath)) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
const content = fs.readFileSync(manifestPath, "utf8");
|
|
185
|
+
const moduleMatch = content.match(/^module\s+(\S+)/m);
|
|
186
|
+
return {
|
|
187
|
+
type: "go",
|
|
188
|
+
name: moduleMatch ? moduleMatch[1] : "unknown",
|
|
189
|
+
version: "0.0.0",
|
|
190
|
+
// Go modules use git tags for versioning
|
|
191
|
+
manifestPath
|
|
192
|
+
};
|
|
193
|
+
} catch (error) {
|
|
194
|
+
logger.debug(
|
|
195
|
+
"package-detector",
|
|
196
|
+
`Failed to parse go.mod: ${error.message}`
|
|
197
|
+
);
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Detect gem package (*.gemspec)
|
|
203
|
+
*/
|
|
204
|
+
async detectGem(projectPath) {
|
|
205
|
+
try {
|
|
206
|
+
const files = fs.readdirSync(projectPath);
|
|
207
|
+
const gemspecFile = files.find((f) => f.endsWith(".gemspec"));
|
|
208
|
+
if (!gemspecFile) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
const manifestPath = path.join(projectPath, gemspecFile);
|
|
212
|
+
const content = fs.readFileSync(manifestPath, "utf8");
|
|
213
|
+
const nameMatch = content.match(/\.name\s*=\s*["']([^"']+)["']/);
|
|
214
|
+
const versionMatch = content.match(/\.version\s*=\s*["']([^"']+)["']/);
|
|
215
|
+
return {
|
|
216
|
+
type: "gem",
|
|
217
|
+
name: nameMatch ? nameMatch[1] : gemspecFile.replace(".gemspec", ""),
|
|
218
|
+
version: versionMatch ? versionMatch[1] : "0.0.0",
|
|
219
|
+
manifestPath
|
|
220
|
+
};
|
|
221
|
+
} catch (error) {
|
|
222
|
+
logger.debug(
|
|
223
|
+
"package-detector",
|
|
224
|
+
`Failed to detect gemspec: ${error.message}`
|
|
225
|
+
);
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
var packageDetector = new PackageDetectorService();
|
|
13
231
|
|
|
14
232
|
// src/utils/notify.ts
|
|
15
233
|
import notifier from "node-notifier";
|
|
16
|
-
import
|
|
234
|
+
import path2 from "path";
|
|
17
235
|
import { fileURLToPath } from "url";
|
|
18
236
|
var __filename = fileURLToPath(import.meta.url);
|
|
19
|
-
var __dirname =
|
|
20
|
-
var DEFAULT_ICON =
|
|
237
|
+
var __dirname = path2.dirname(__filename);
|
|
238
|
+
var DEFAULT_ICON = path2.resolve(__dirname, "../assets/logo.png");
|
|
21
239
|
function notify(options) {
|
|
22
240
|
if (!config.areNotificationsEnabled()) {
|
|
23
241
|
logger.debug("notify", "Notifications disabled, skipping notification");
|
|
@@ -344,7 +562,14 @@ var CommitQueueProcessor = class {
|
|
|
344
562
|
if (!isRepo) {
|
|
345
563
|
throw new Error(`Directory ${projectPath} is not a git repository`);
|
|
346
564
|
}
|
|
565
|
+
let hookModifiedFiles = [];
|
|
347
566
|
if (project.commitSettings?.hooks?.length) {
|
|
567
|
+
const statusBeforeHooks = await gitService.getStatus(projectPath);
|
|
568
|
+
const filesBeforeHooks = /* @__PURE__ */ new Set([
|
|
569
|
+
...statusBeforeHooks.staged,
|
|
570
|
+
...statusBeforeHooks.unstaged,
|
|
571
|
+
...statusBeforeHooks.untracked
|
|
572
|
+
]);
|
|
348
573
|
onProgress?.("Running pre-commit hooks...");
|
|
349
574
|
logger.info("queue", "Executing pre-commit hooks...");
|
|
350
575
|
streamer.append("\n> Executing pre-commit hooks...\n");
|
|
@@ -384,6 +609,22 @@ ${failedBlockingHook.output}`);
|
|
|
384
609
|
streamer.append(
|
|
385
610
|
`
|
|
386
611
|
Warning: ${failedNonBlockingHooks.length} non-blocking hooks failed.
|
|
612
|
+
`
|
|
613
|
+
);
|
|
614
|
+
}
|
|
615
|
+
const statusAfterHooks = await gitService.getStatus(projectPath);
|
|
616
|
+
hookModifiedFiles = [
|
|
617
|
+
...statusAfterHooks.unstaged,
|
|
618
|
+
...statusAfterHooks.untracked
|
|
619
|
+
].filter((f) => !filesBeforeHooks.has(f));
|
|
620
|
+
if (hookModifiedFiles.length > 0) {
|
|
621
|
+
logger.info(
|
|
622
|
+
"queue",
|
|
623
|
+
`Hooks modified ${hookModifiedFiles.length} additional files: ${hookModifiedFiles.join(", ")}`
|
|
624
|
+
);
|
|
625
|
+
streamer.append(
|
|
626
|
+
`
|
|
627
|
+
> Hooks modified ${hookModifiedFiles.length} additional files: ${hookModifiedFiles.join(", ")}
|
|
387
628
|
`
|
|
388
629
|
);
|
|
389
630
|
}
|
|
@@ -391,13 +632,20 @@ Warning: ${failedNonBlockingHooks.length} non-blocking hooks failed.
|
|
|
391
632
|
onProgress?.("Checking repository status...");
|
|
392
633
|
let status = await gitService.getStatus(projectPath);
|
|
393
634
|
if (commit.files && commit.files.length > 0) {
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
635
|
+
const filesToStage = [
|
|
636
|
+
.../* @__PURE__ */ new Set([...commit.files, ...hookModifiedFiles])
|
|
637
|
+
];
|
|
638
|
+
const extraFiles = filesToStage.length - commit.files.length;
|
|
639
|
+
const extraMsg = extraFiles > 0 ? ` (+${extraFiles} from hooks)` : "";
|
|
640
|
+
onProgress?.(`Staging ${filesToStage.length} files${extraMsg}...`);
|
|
641
|
+
streamer.append(
|
|
642
|
+
`
|
|
643
|
+
> Staging ${filesToStage.length} files${extraMsg}...
|
|
644
|
+
`
|
|
645
|
+
);
|
|
646
|
+
await gitService.stageFiles(projectPath, filesToStage, streamOutput);
|
|
399
647
|
status = await gitService.getStatus(projectPath);
|
|
400
|
-
logger.info("queue", `Auto-staged files: ${
|
|
648
|
+
logger.info("queue", `Auto-staged files: ${filesToStage.join(", ")}`);
|
|
401
649
|
} else if (status.staged.length === 0) {
|
|
402
650
|
const hasChanges = status.unstaged.length > 0 || status.untracked.length > 0;
|
|
403
651
|
if (hasChanges) {
|
|
@@ -557,9 +805,9 @@ Run "git pull --rebase" to resolve.`,
|
|
|
557
805
|
*/
|
|
558
806
|
findProjectPath(projectId) {
|
|
559
807
|
const allProjects = projectService.getAllLinkedProjects();
|
|
560
|
-
for (const [
|
|
808
|
+
for (const [path4, linkedProject] of Object.entries(allProjects)) {
|
|
561
809
|
if (linkedProject.projectId === projectId) {
|
|
562
|
-
return
|
|
810
|
+
return path4;
|
|
563
811
|
}
|
|
564
812
|
}
|
|
565
813
|
return null;
|
|
@@ -582,10 +830,10 @@ var commitQueue = new CommitQueueProcessor();
|
|
|
582
830
|
// src/services/websocket.ts
|
|
583
831
|
import Echo from "laravel-echo";
|
|
584
832
|
import Pusher from "pusher-js";
|
|
585
|
-
import
|
|
833
|
+
import fs2 from "fs";
|
|
586
834
|
import os from "os";
|
|
587
|
-
import
|
|
588
|
-
var STATUS_FILE_PATH =
|
|
835
|
+
import path3 from "path";
|
|
836
|
+
var STATUS_FILE_PATH = path3.join(
|
|
589
837
|
os.homedir(),
|
|
590
838
|
".config",
|
|
591
839
|
"stint",
|
|
@@ -593,19 +841,19 @@ var STATUS_FILE_PATH = path2.join(
|
|
|
593
841
|
);
|
|
594
842
|
function writeStatus(update) {
|
|
595
843
|
try {
|
|
596
|
-
const dir =
|
|
597
|
-
if (!
|
|
598
|
-
|
|
844
|
+
const dir = path3.dirname(STATUS_FILE_PATH);
|
|
845
|
+
if (!fs2.existsSync(dir)) {
|
|
846
|
+
fs2.mkdirSync(dir, { recursive: true });
|
|
599
847
|
}
|
|
600
848
|
let status = { websocket: { connected: false } };
|
|
601
|
-
if (
|
|
849
|
+
if (fs2.existsSync(STATUS_FILE_PATH)) {
|
|
602
850
|
try {
|
|
603
|
-
status = JSON.parse(
|
|
851
|
+
status = JSON.parse(fs2.readFileSync(STATUS_FILE_PATH, "utf8"));
|
|
604
852
|
} catch {
|
|
605
853
|
}
|
|
606
854
|
}
|
|
607
855
|
status.websocket = { ...status.websocket, ...update };
|
|
608
|
-
|
|
856
|
+
fs2.writeFileSync(STATUS_FILE_PATH, JSON.stringify(status, null, 2));
|
|
609
857
|
} catch {
|
|
610
858
|
}
|
|
611
859
|
}
|
|
@@ -911,7 +1159,7 @@ var WebSocketServiceImpl = class {
|
|
|
911
1159
|
"websocket",
|
|
912
1160
|
`Commit ${commit.id} marked as large, fetching full details...`
|
|
913
1161
|
);
|
|
914
|
-
const { apiService: apiService2 } = await import("./api-
|
|
1162
|
+
const { apiService: apiService2 } = await import("./api-A5W4VYEH.js");
|
|
915
1163
|
const fullCommit = await apiService2.getCommit(commit.id);
|
|
916
1164
|
commit = {
|
|
917
1165
|
...commit,
|
|
@@ -1117,6 +1365,7 @@ var WebSocketServiceImpl = class {
|
|
|
1117
1365
|
var websocketService = new WebSocketServiceImpl();
|
|
1118
1366
|
|
|
1119
1367
|
export {
|
|
1368
|
+
packageDetector,
|
|
1120
1369
|
notify,
|
|
1121
1370
|
commitQueue,
|
|
1122
1371
|
websocketService
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
authService,
|
|
3
3
|
config,
|
|
4
4
|
logger
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-X2Z4ILIY.js";
|
|
6
6
|
|
|
7
7
|
// src/utils/circuit-breaker.ts
|
|
8
8
|
var CircuitBreaker = class {
|
|
@@ -100,7 +100,7 @@ var CircuitBreaker = class {
|
|
|
100
100
|
};
|
|
101
101
|
|
|
102
102
|
// src/services/api.ts
|
|
103
|
-
var AGENT_VERSION = "1.2.
|
|
103
|
+
var AGENT_VERSION = "1.2.44";
|
|
104
104
|
var ApiServiceImpl = class {
|
|
105
105
|
sessionId = null;
|
|
106
106
|
circuitBreaker = new CircuitBreaker({
|
|
@@ -411,8 +411,9 @@ var ApiServiceImpl = class {
|
|
|
411
411
|
* @param projectId - Project ID
|
|
412
412
|
* @param data - Repository information (path, remote URL, branches)
|
|
413
413
|
* @param changedFiles - Optional array of changed files for commit file selection
|
|
414
|
+
* @param packageInfo - Optional array of detected package types
|
|
414
415
|
*/
|
|
415
|
-
async syncProject(projectId, data, changedFiles) {
|
|
416
|
+
async syncProject(projectId, data, changedFiles, packageInfo) {
|
|
416
417
|
logger.info("api", `Syncing project ${projectId}`);
|
|
417
418
|
return this.withRetry(async () => {
|
|
418
419
|
const payload = {
|
|
@@ -425,13 +426,17 @@ var ApiServiceImpl = class {
|
|
|
425
426
|
if (changedFiles && changedFiles.length > 0) {
|
|
426
427
|
payload.changed_files = changedFiles;
|
|
427
428
|
}
|
|
429
|
+
if (packageInfo && packageInfo.length > 0) {
|
|
430
|
+
payload.package_info = packageInfo;
|
|
431
|
+
}
|
|
428
432
|
const response = await this.request(`/api/agent/projects/${projectId}/sync`, {
|
|
429
433
|
method: "POST",
|
|
430
434
|
body: JSON.stringify(payload)
|
|
431
435
|
});
|
|
436
|
+
const packageTypes = packageInfo?.map((p) => p.type).join(", ") || "none";
|
|
432
437
|
logger.success(
|
|
433
438
|
"api",
|
|
434
|
-
`Project ${projectId} synced (${changedFiles?.length ?? 0}
|
|
439
|
+
`Project ${projectId} synced (${changedFiles?.length ?? 0} files, packages: ${packageTypes})`
|
|
435
440
|
);
|
|
436
441
|
return {
|
|
437
442
|
auto_sync: response.auto_sync
|
|
@@ -346,7 +346,7 @@ var AuthServiceImpl = class {
|
|
|
346
346
|
return null;
|
|
347
347
|
}
|
|
348
348
|
try {
|
|
349
|
-
const { apiService } = await import("./api-
|
|
349
|
+
const { apiService } = await import("./api-A5W4VYEH.js");
|
|
350
350
|
const user = await apiService.getCurrentUser();
|
|
351
351
|
logger.info("auth", `Token validated for user: ${user.email}`);
|
|
352
352
|
return user;
|
package/dist/daemon/runner.js
CHANGED
|
@@ -2,21 +2,22 @@
|
|
|
2
2
|
import {
|
|
3
3
|
commitQueue,
|
|
4
4
|
notify,
|
|
5
|
+
packageDetector,
|
|
5
6
|
websocketService
|
|
6
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-7B4YYEBR.js";
|
|
7
8
|
import {
|
|
8
9
|
apiService
|
|
9
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-UBU6PUVO.js";
|
|
10
11
|
import {
|
|
11
12
|
gitService,
|
|
12
13
|
projectService,
|
|
13
14
|
removePidFile,
|
|
14
15
|
writePidFile
|
|
15
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-4IAVYCEN.js";
|
|
16
17
|
import {
|
|
17
18
|
authService,
|
|
18
19
|
logger
|
|
19
|
-
} from "../chunk-
|
|
20
|
+
} from "../chunk-X2Z4ILIY.js";
|
|
20
21
|
|
|
21
22
|
// src/daemon/runner.ts
|
|
22
23
|
import "dotenv/config";
|
|
@@ -190,10 +191,12 @@ var FileWatcher = class {
|
|
|
190
191
|
}
|
|
191
192
|
const repoInfo = await gitService.getRepoInfo(projectPath);
|
|
192
193
|
const changedFiles = await gitService.getChangedFiles(projectPath);
|
|
194
|
+
const packageInfo = await packageDetector.detectAll(projectPath);
|
|
193
195
|
const response = await apiService.syncProject(
|
|
194
196
|
projectId,
|
|
195
197
|
repoInfo,
|
|
196
|
-
changedFiles
|
|
198
|
+
changedFiles,
|
|
199
|
+
packageInfo
|
|
197
200
|
);
|
|
198
201
|
if (response.auto_sync) {
|
|
199
202
|
this.updateProjectSettings(projectId, response.auto_sync);
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
commitQueue,
|
|
4
|
+
packageDetector,
|
|
4
5
|
websocketService
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7B4YYEBR.js";
|
|
6
7
|
import {
|
|
7
8
|
apiService
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UBU6PUVO.js";
|
|
9
10
|
import {
|
|
10
11
|
getPidFilePath,
|
|
11
12
|
gitService,
|
|
@@ -14,14 +15,14 @@ import {
|
|
|
14
15
|
projectService,
|
|
15
16
|
spawnDetached,
|
|
16
17
|
validatePidFile
|
|
17
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-4IAVYCEN.js";
|
|
18
19
|
import {
|
|
19
20
|
__commonJS,
|
|
20
21
|
__toESM,
|
|
21
22
|
authService,
|
|
22
23
|
config,
|
|
23
24
|
logger
|
|
24
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-X2Z4ILIY.js";
|
|
25
26
|
|
|
26
27
|
// node_modules/semver/internal/constants.js
|
|
27
28
|
var require_constants = __commonJS({
|
|
@@ -2657,7 +2658,7 @@ function registerStatusCommand(program2) {
|
|
|
2657
2658
|
try {
|
|
2658
2659
|
const { render } = await import("ink");
|
|
2659
2660
|
const { createElement } = await import("react");
|
|
2660
|
-
const { StatusDashboard } = await import("./StatusDashboard-
|
|
2661
|
+
const { StatusDashboard } = await import("./StatusDashboard-LG4VC32Y.js");
|
|
2661
2662
|
render(createElement(StatusDashboard, { cwd }));
|
|
2662
2663
|
return;
|
|
2663
2664
|
} catch (error) {
|
|
@@ -2883,13 +2884,16 @@ function registerSyncCommand(program2) {
|
|
|
2883
2884
|
const repoInfo = await gitService.getRepoInfo(cwd);
|
|
2884
2885
|
spinner.text = "Getting changed files...";
|
|
2885
2886
|
const changedFiles = await gitService.getChangedFiles(cwd);
|
|
2887
|
+
spinner.text = "Detecting package types...";
|
|
2888
|
+
const packageInfo = await packageDetector.detectAll(cwd);
|
|
2886
2889
|
spinner.text = "Preparing sync payload...";
|
|
2887
2890
|
const syncSpinner = ora7("Connecting to server...").start();
|
|
2888
2891
|
try {
|
|
2889
2892
|
await apiService.syncProject(
|
|
2890
2893
|
linkedProject.projectId,
|
|
2891
2894
|
repoInfo,
|
|
2892
|
-
changedFiles
|
|
2895
|
+
changedFiles,
|
|
2896
|
+
packageInfo
|
|
2893
2897
|
);
|
|
2894
2898
|
syncSpinner.succeed("Server sync completed");
|
|
2895
2899
|
} catch (error) {
|
|
@@ -2904,6 +2908,10 @@ function registerSyncCommand(program2) {
|
|
|
2904
2908
|
console.log(
|
|
2905
2909
|
`${chalk7.bold("Changed:")} ${changedFiles.length} files synced for commit selection`
|
|
2906
2910
|
);
|
|
2911
|
+
if (packageInfo.length > 0) {
|
|
2912
|
+
const pkgTypes = packageInfo.map((p) => `${p.type} (${p.name}@${p.version})`).join(", ");
|
|
2913
|
+
console.log(`${chalk7.bold("Packages:")} ${pkgTypes}`);
|
|
2914
|
+
}
|
|
2907
2915
|
console.log(`${chalk7.bold("Project ID:")} ${linkedProject.projectId}`);
|
|
2908
2916
|
console.log(`${chalk7.bold("Branch:")} ${repoInfo.currentBranch}`);
|
|
2909
2917
|
console.log(
|
|
@@ -4928,7 +4936,7 @@ Tasks for project ${chalk15.cyan(linkedProject.projectId)}`
|
|
|
4928
4936
|
});
|
|
4929
4937
|
|
|
4930
4938
|
// src/index.ts
|
|
4931
|
-
var AGENT_VERSION = "1.2.
|
|
4939
|
+
var AGENT_VERSION = "1.2.44";
|
|
4932
4940
|
var program = new Command2();
|
|
4933
4941
|
program.name("stint").description("Stint Agent - Local daemon for Stint Project Assistant").version(AGENT_VERSION, "-v, --version", "output the current version").addHelpText(
|
|
4934
4942
|
"after",
|
package/package.json
CHANGED