sylas-ai 0.2.21

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.

Potentially problematic release.


This version of sylas-ai might be problematic. Click here for more details.

Files changed (126) hide show
  1. package/README.md +52 -0
  2. package/dist/Application.d.ts +75 -0
  3. package/dist/Application.d.ts.map +1 -0
  4. package/dist/Application.js +289 -0
  5. package/dist/Application.js.map +1 -0
  6. package/dist/app.d.ts +3 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +93 -0
  9. package/dist/app.js.map +1 -0
  10. package/dist/commands/AuthCommand.d.ts +8 -0
  11. package/dist/commands/AuthCommand.d.ts.map +1 -0
  12. package/dist/commands/AuthCommand.js +70 -0
  13. package/dist/commands/AuthCommand.js.map +1 -0
  14. package/dist/commands/CheckTokensCommand.d.ts +8 -0
  15. package/dist/commands/CheckTokensCommand.d.ts.map +1 -0
  16. package/dist/commands/CheckTokensCommand.js +53 -0
  17. package/dist/commands/CheckTokensCommand.js.map +1 -0
  18. package/dist/commands/ICommand.d.ts +38 -0
  19. package/dist/commands/ICommand.d.ts.map +1 -0
  20. package/dist/commands/ICommand.js +37 -0
  21. package/dist/commands/ICommand.js.map +1 -0
  22. package/dist/commands/RefreshTokenCommand.d.ts +8 -0
  23. package/dist/commands/RefreshTokenCommand.d.ts.map +1 -0
  24. package/dist/commands/RefreshTokenCommand.js +152 -0
  25. package/dist/commands/RefreshTokenCommand.js.map +1 -0
  26. package/dist/commands/SelfAddRepoCommand.d.ts +17 -0
  27. package/dist/commands/SelfAddRepoCommand.d.ts.map +1 -0
  28. package/dist/commands/SelfAddRepoCommand.js +164 -0
  29. package/dist/commands/SelfAddRepoCommand.js.map +1 -0
  30. package/dist/commands/SelfAuthCommand.d.ts +16 -0
  31. package/dist/commands/SelfAuthCommand.d.ts.map +1 -0
  32. package/dist/commands/SelfAuthCommand.js +213 -0
  33. package/dist/commands/SelfAuthCommand.js.map +1 -0
  34. package/dist/commands/StartCommand.d.ts +8 -0
  35. package/dist/commands/StartCommand.d.ts.map +1 -0
  36. package/dist/commands/StartCommand.js +76 -0
  37. package/dist/commands/StartCommand.js.map +1 -0
  38. package/dist/config/constants.d.ts +12 -0
  39. package/dist/config/constants.d.ts.map +1 -0
  40. package/dist/config/constants.js +19 -0
  41. package/dist/config/constants.js.map +1 -0
  42. package/dist/config/types.d.ts +21 -0
  43. package/dist/config/types.d.ts.map +1 -0
  44. package/dist/config/types.js +2 -0
  45. package/dist/config/types.js.map +1 -0
  46. package/dist/services/ConfigService.d.ts +37 -0
  47. package/dist/services/ConfigService.d.ts.map +1 -0
  48. package/dist/services/ConfigService.js +121 -0
  49. package/dist/services/ConfigService.js.map +1 -0
  50. package/dist/services/Logger.d.ts +77 -0
  51. package/dist/services/Logger.d.ts.map +1 -0
  52. package/dist/services/Logger.js +100 -0
  53. package/dist/services/Logger.js.map +1 -0
  54. package/dist/services/WorkerService.d.ts +59 -0
  55. package/dist/services/WorkerService.d.ts.map +1 -0
  56. package/dist/services/WorkerService.js +220 -0
  57. package/dist/services/WorkerService.js.map +1 -0
  58. package/dist/src/Application.d.ts +75 -0
  59. package/dist/src/Application.d.ts.map +1 -0
  60. package/dist/src/Application.js +289 -0
  61. package/dist/src/Application.js.map +1 -0
  62. package/dist/src/app.d.ts +3 -0
  63. package/dist/src/app.d.ts.map +1 -0
  64. package/dist/src/app.js +93 -0
  65. package/dist/src/app.js.map +1 -0
  66. package/dist/src/commands/AuthCommand.d.ts +8 -0
  67. package/dist/src/commands/AuthCommand.d.ts.map +1 -0
  68. package/dist/src/commands/AuthCommand.js +70 -0
  69. package/dist/src/commands/AuthCommand.js.map +1 -0
  70. package/dist/src/commands/CheckTokensCommand.d.ts +8 -0
  71. package/dist/src/commands/CheckTokensCommand.d.ts.map +1 -0
  72. package/dist/src/commands/CheckTokensCommand.js +53 -0
  73. package/dist/src/commands/CheckTokensCommand.js.map +1 -0
  74. package/dist/src/commands/ICommand.d.ts +38 -0
  75. package/dist/src/commands/ICommand.d.ts.map +1 -0
  76. package/dist/src/commands/ICommand.js +37 -0
  77. package/dist/src/commands/ICommand.js.map +1 -0
  78. package/dist/src/commands/RefreshTokenCommand.d.ts +8 -0
  79. package/dist/src/commands/RefreshTokenCommand.d.ts.map +1 -0
  80. package/dist/src/commands/RefreshTokenCommand.js +152 -0
  81. package/dist/src/commands/RefreshTokenCommand.js.map +1 -0
  82. package/dist/src/commands/SelfAddRepoCommand.d.ts +17 -0
  83. package/dist/src/commands/SelfAddRepoCommand.d.ts.map +1 -0
  84. package/dist/src/commands/SelfAddRepoCommand.js +164 -0
  85. package/dist/src/commands/SelfAddRepoCommand.js.map +1 -0
  86. package/dist/src/commands/SelfAuthCommand.d.ts +16 -0
  87. package/dist/src/commands/SelfAuthCommand.d.ts.map +1 -0
  88. package/dist/src/commands/SelfAuthCommand.js +213 -0
  89. package/dist/src/commands/SelfAuthCommand.js.map +1 -0
  90. package/dist/src/commands/StartCommand.d.ts +8 -0
  91. package/dist/src/commands/StartCommand.d.ts.map +1 -0
  92. package/dist/src/commands/StartCommand.js +76 -0
  93. package/dist/src/commands/StartCommand.js.map +1 -0
  94. package/dist/src/config/constants.d.ts +12 -0
  95. package/dist/src/config/constants.d.ts.map +1 -0
  96. package/dist/src/config/constants.js +19 -0
  97. package/dist/src/config/constants.js.map +1 -0
  98. package/dist/src/config/types.d.ts +21 -0
  99. package/dist/src/config/types.d.ts.map +1 -0
  100. package/dist/src/config/types.js +2 -0
  101. package/dist/src/config/types.js.map +1 -0
  102. package/dist/src/services/ConfigService.d.ts +37 -0
  103. package/dist/src/services/ConfigService.d.ts.map +1 -0
  104. package/dist/src/services/ConfigService.js +121 -0
  105. package/dist/src/services/ConfigService.js.map +1 -0
  106. package/dist/src/services/Logger.d.ts +77 -0
  107. package/dist/src/services/Logger.d.ts.map +1 -0
  108. package/dist/src/services/Logger.js +100 -0
  109. package/dist/src/services/Logger.js.map +1 -0
  110. package/dist/src/services/WorkerService.d.ts +59 -0
  111. package/dist/src/services/WorkerService.d.ts.map +1 -0
  112. package/dist/src/services/WorkerService.js +220 -0
  113. package/dist/src/services/WorkerService.js.map +1 -0
  114. package/dist/src/ui/CLIPrompts.d.ts +18 -0
  115. package/dist/src/ui/CLIPrompts.d.ts.map +1 -0
  116. package/dist/src/ui/CLIPrompts.js +53 -0
  117. package/dist/src/ui/CLIPrompts.js.map +1 -0
  118. package/dist/ui/CLIPrompts.d.ts +18 -0
  119. package/dist/ui/CLIPrompts.d.ts.map +1 -0
  120. package/dist/ui/CLIPrompts.js +53 -0
  121. package/dist/ui/CLIPrompts.js.map +1 -0
  122. package/dist/vitest.config.d.ts +3 -0
  123. package/dist/vitest.config.d.ts.map +1 -0
  124. package/dist/vitest.config.js +13 -0
  125. package/dist/vitest.config.js.map +1 -0
  126. package/package.json +63 -0
@@ -0,0 +1,100 @@
1
+ import { createLogger, } from "sylas-core";
2
+ // Re-export LogLevel from sylas-core so existing consumers don't break
3
+ export { LogLevel } from "sylas-core";
4
+ /**
5
+ * CLI-specific logger that wraps the core ILogger.
6
+ *
7
+ * Provides CLI-presentation features (emoji formatting, raw output,
8
+ * dividers, child loggers) on top of the standard core logging interface.
9
+ *
10
+ * Implements ILogger so it can be passed to packages that expect the core interface.
11
+ */
12
+ export class Logger {
13
+ coreLogger;
14
+ prefix;
15
+ timestamps;
16
+ constructor(options = {}) {
17
+ this.prefix = options.prefix ?? "";
18
+ this.timestamps = options.timestamps ?? false;
19
+ this.coreLogger = createLogger({
20
+ component: this.prefix || "CLI",
21
+ level: options.level,
22
+ });
23
+ }
24
+ /**
25
+ * Debug log (lowest priority)
26
+ */
27
+ debug(message, ...args) {
28
+ this.coreLogger.debug(message, ...args);
29
+ }
30
+ /**
31
+ * Info log (normal priority)
32
+ */
33
+ info(message, ...args) {
34
+ this.coreLogger.info(message, ...args);
35
+ }
36
+ /**
37
+ * Success log - maps to info level with check mark prefix
38
+ */
39
+ success(message, ...args) {
40
+ this.coreLogger.info(message, ...args);
41
+ }
42
+ /**
43
+ * Warning log
44
+ */
45
+ warn(message, ...args) {
46
+ this.coreLogger.warn(message, ...args);
47
+ }
48
+ /**
49
+ * Error log (highest priority)
50
+ */
51
+ error(message, ...args) {
52
+ this.coreLogger.error(message, ...args);
53
+ }
54
+ /**
55
+ * Raw output without formatting (always outputs regardless of level)
56
+ */
57
+ raw(message, ...args) {
58
+ console.log(message, ...args);
59
+ }
60
+ /**
61
+ * Create a child logger with a prefix
62
+ */
63
+ child(prefix) {
64
+ return new Logger({
65
+ level: this.coreLogger.getLevel(),
66
+ prefix: this.prefix ? `${this.prefix}:${prefix}` : prefix,
67
+ timestamps: this.timestamps,
68
+ });
69
+ }
70
+ /**
71
+ * Print a divider line
72
+ */
73
+ divider(length = 70) {
74
+ this.raw("\u2500".repeat(length));
75
+ }
76
+ /**
77
+ * Create a new logger with additional context.
78
+ * Delegates to the core logger's withContext.
79
+ */
80
+ withContext(context) {
81
+ return this.coreLogger.withContext(context);
82
+ }
83
+ /**
84
+ * Set log level dynamically
85
+ */
86
+ setLevel(level) {
87
+ this.coreLogger.setLevel(level);
88
+ }
89
+ /**
90
+ * Get current log level
91
+ */
92
+ getLevel() {
93
+ return this.coreLogger.getLevel();
94
+ }
95
+ }
96
+ /**
97
+ * Default logger instance
98
+ */
99
+ export const logger = new Logger();
100
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/services/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,GAIZ,MAAM,YAAY,CAAC;AAEpB,uEAAuE;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AActC;;;;;;;GAOG;AACH,MAAM,OAAO,MAAM;IACV,UAAU,CAAU;IACpB,MAAM,CAAS;IACf,UAAU,CAAU;IAE5B,YAAY,UAAyB,EAAE;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC;YAC9B,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC/B,KAAK,EAAE,OAAO,CAAC,KAAK;SACpB,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAe,EAAE,GAAG,IAAW;QACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,OAAe,EAAE,GAAG,IAAW;QAClC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAc;QACnB,OAAO,IAAI,MAAM,CAAC;YACjB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM;YACzD,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,MAAM,GAAG,EAAE;QAClB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,OAAmB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAe;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,QAAQ;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;CACD;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { RepositoryConfig } from "sylas-core";
2
+ import type { GitService } from "sylas-edge-worker";
3
+ import { EdgeWorker } from "sylas-edge-worker";
4
+ import type { ConfigService } from "./ConfigService.js";
5
+ import type { Logger } from "./Logger.js";
6
+ /**
7
+ * Service responsible for EdgeWorker and Cloudflare tunnel management
8
+ */
9
+ export declare class WorkerService {
10
+ private configService;
11
+ private gitService;
12
+ private sylasHome;
13
+ private logger;
14
+ private version?;
15
+ private edgeWorker;
16
+ private setupWaitingServer;
17
+ private isShuttingDown;
18
+ constructor(configService: ConfigService, gitService: GitService, sylasHome: string, logger: Logger, version?: string | undefined);
19
+ /**
20
+ * Get the EdgeWorker instance
21
+ */
22
+ getEdgeWorker(): EdgeWorker | null;
23
+ /**
24
+ * Get the server port from EdgeWorker
25
+ */
26
+ getServerPort(): number;
27
+ /**
28
+ * Start setup waiting mode - server infrastructure only, no EdgeWorker
29
+ * Used after initial authentication while waiting for server configuration
30
+ */
31
+ startSetupWaitingMode(): Promise<void>;
32
+ /**
33
+ * Start idle mode - server infrastructure only, no EdgeWorker
34
+ * Used after onboarding when no repositories are configured
35
+ */
36
+ startIdleMode(): Promise<void>;
37
+ /**
38
+ * Stop the setup waiting mode or idle mode server
39
+ * Must be called before starting EdgeWorker to avoid port conflicts
40
+ */
41
+ stopWaitingServer(): Promise<void>;
42
+ /**
43
+ * Start the EdgeWorker with given configuration
44
+ */
45
+ startEdgeWorker(params: {
46
+ repositories: RepositoryConfig[];
47
+ ngrokAuthToken?: string;
48
+ onOAuthCallback?: (token: string, workspaceId: string, workspaceName: string) => Promise<void>;
49
+ }): Promise<void>;
50
+ /**
51
+ * Set up event handlers for EdgeWorker
52
+ */
53
+ private setupEventHandlers;
54
+ /**
55
+ * Stop the EdgeWorker
56
+ */
57
+ stop(): Promise<void>;
58
+ }
59
+ //# sourceMappingURL=WorkerService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerService.d.ts","sourceRoot":"","sources":["../../src/services/WorkerService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA2B,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,qBAAa,aAAa;IAMxB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO,CAAC;IATjB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,cAAc,CAAS;gBAGtB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,YAAA;IAGzB;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuD5C;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAwDpC;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IASxC;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE;QAC7B,YAAY,EAAE,gBAAgB,EAAE,CAAC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,CACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6EjB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2C1B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAmB3B"}
@@ -0,0 +1,220 @@
1
+ import { getSylasAppUrl } from "sylas-cloudflare-tunnel-client";
2
+ import { EdgeWorker } from "sylas-edge-worker";
3
+ import { DEFAULT_SERVER_PORT, parsePort } from "../config/constants.js";
4
+ /**
5
+ * Service responsible for EdgeWorker and Cloudflare tunnel management
6
+ */
7
+ export class WorkerService {
8
+ configService;
9
+ gitService;
10
+ sylasHome;
11
+ logger;
12
+ version;
13
+ edgeWorker = null;
14
+ setupWaitingServer = null; // SharedApplicationServer instance during setup waiting mode
15
+ isShuttingDown = false;
16
+ constructor(configService, gitService, sylasHome, logger, version) {
17
+ this.configService = configService;
18
+ this.gitService = gitService;
19
+ this.sylasHome = sylasHome;
20
+ this.logger = logger;
21
+ this.version = version;
22
+ }
23
+ /**
24
+ * Get the EdgeWorker instance
25
+ */
26
+ getEdgeWorker() {
27
+ return this.edgeWorker;
28
+ }
29
+ /**
30
+ * Get the server port from EdgeWorker
31
+ */
32
+ getServerPort() {
33
+ return this.edgeWorker?.getServerPort() || DEFAULT_SERVER_PORT;
34
+ }
35
+ /**
36
+ * Start setup waiting mode - server infrastructure only, no EdgeWorker
37
+ * Used after initial authentication while waiting for server configuration
38
+ */
39
+ async startSetupWaitingMode() {
40
+ const { SharedApplicationServer } = await import("sylas-edge-worker");
41
+ const { ConfigUpdater } = await import("sylas-config-updater");
42
+ // Determine server configuration
43
+ const isExternalHost = process.env.SYLAS_HOST_EXTERNAL?.toLowerCase().trim() === "true";
44
+ const serverPort = parsePort(process.env.SYLAS_SERVER_PORT, DEFAULT_SERVER_PORT);
45
+ const serverHost = isExternalHost ? "0.0.0.0" : "localhost";
46
+ // Create and start SharedApplicationServer
47
+ this.setupWaitingServer = new SharedApplicationServer(serverPort, serverHost);
48
+ this.setupWaitingServer.initializeFastify();
49
+ // Register ConfigUpdater routes
50
+ const configUpdater = new ConfigUpdater(this.setupWaitingServer.getFastifyInstance(), this.sylasHome, process.env.SYLAS_API_KEY || "");
51
+ configUpdater.register();
52
+ this.logger.info("✅ Config updater registered");
53
+ this.logger.info(" Routes: /api/update/sylas-config, /api/update/sylas-env,");
54
+ this.logger.info(" /api/update/repository, /api/test-mcp, /api/configure-mcp");
55
+ // Start the server (this also starts Cloudflare tunnel if CLOUDFLARE_TOKEN is set)
56
+ await this.setupWaitingServer.start();
57
+ this.logger.raw("");
58
+ this.logger.divider(70);
59
+ this.logger.info("⏳ Waiting for configuration from server...");
60
+ this.logger.info(`🔗 Server running on port ${serverPort}`);
61
+ if (process.env.CLOUDFLARE_TOKEN) {
62
+ this.logger.info("🌩️ Cloudflare tunnel: Active");
63
+ }
64
+ this.logger.info("📡 Config updater: Ready");
65
+ this.logger.raw("");
66
+ this.logger.info("Your Sylas instance is ready to receive configuration.");
67
+ this.logger.info(`Complete setup at: ${getSylasAppUrl()}/onboarding`);
68
+ this.logger.divider(70);
69
+ }
70
+ /**
71
+ * Start idle mode - server infrastructure only, no EdgeWorker
72
+ * Used after onboarding when no repositories are configured
73
+ */
74
+ async startIdleMode() {
75
+ const { SharedApplicationServer } = await import("sylas-edge-worker");
76
+ const { ConfigUpdater } = await import("sylas-config-updater");
77
+ // Determine server configuration
78
+ const isExternalHost = process.env.SYLAS_HOST_EXTERNAL?.toLowerCase().trim() === "true";
79
+ const serverPort = parsePort(process.env.SYLAS_SERVER_PORT, DEFAULT_SERVER_PORT);
80
+ const serverHost = isExternalHost ? "0.0.0.0" : "localhost";
81
+ // Create and start SharedApplicationServer
82
+ this.setupWaitingServer = new SharedApplicationServer(serverPort, serverHost);
83
+ this.setupWaitingServer.initializeFastify();
84
+ // Register ConfigUpdater routes
85
+ const configUpdater = new ConfigUpdater(this.setupWaitingServer.getFastifyInstance(), this.sylasHome, process.env.SYLAS_API_KEY || "");
86
+ configUpdater.register();
87
+ this.logger.info("✅ Config updater registered");
88
+ this.logger.info(" Routes: /api/update/sylas-config, /api/update/sylas-env,");
89
+ this.logger.info(" /api/update/repository, /api/test-mcp, /api/configure-mcp");
90
+ // Start the server (this also starts Cloudflare tunnel if CLOUDFLARE_TOKEN is set)
91
+ await this.setupWaitingServer.start();
92
+ this.logger.raw("");
93
+ this.logger.divider(70);
94
+ this.logger.info("⏸️ No repositories configured");
95
+ this.logger.info(`🔗 Server running on port ${serverPort}`);
96
+ if (process.env.CLOUDFLARE_TOKEN) {
97
+ this.logger.info("🌩️ Cloudflare tunnel: Active");
98
+ }
99
+ this.logger.info("📡 Config updater: Ready");
100
+ this.logger.raw("");
101
+ const appUrl = getSylasAppUrl();
102
+ this.logger.info(`Waiting for repository configuration from ${appUrl}`);
103
+ this.logger.info(`Add repositories at: ${appUrl}/repos`);
104
+ this.logger.divider(70);
105
+ }
106
+ /**
107
+ * Stop the setup waiting mode or idle mode server
108
+ * Must be called before starting EdgeWorker to avoid port conflicts
109
+ */
110
+ async stopWaitingServer() {
111
+ if (this.setupWaitingServer) {
112
+ this.logger.info("🛑 Stopping waiting server...");
113
+ await this.setupWaitingServer.stop();
114
+ this.setupWaitingServer = null;
115
+ this.logger.info("✅ Waiting server stopped");
116
+ }
117
+ }
118
+ /**
119
+ * Start the EdgeWorker with given configuration
120
+ */
121
+ async startEdgeWorker(params) {
122
+ const { repositories, ngrokAuthToken, onOAuthCallback } = params;
123
+ // Determine if using external host
124
+ const isExternalHost = process.env.SYLAS_HOST_EXTERNAL?.toLowerCase().trim() === "true";
125
+ // Load config once for model defaults
126
+ const edgeConfig = this.configService.load();
127
+ // Create EdgeWorker configuration
128
+ const config = {
129
+ version: this.version,
130
+ repositories,
131
+ sylasHome: this.sylasHome,
132
+ defaultAllowedTools: process.env.ALLOWED_TOOLS?.split(",").map((t) => t.trim()) || [],
133
+ defaultDisallowedTools: process.env.DISALLOWED_TOOLS?.split(",").map((t) => t.trim()) ||
134
+ undefined,
135
+ // Model configuration: environment variables take precedence over config file.
136
+ // Legacy env vars/keys are still accepted for backwards compatibility.
137
+ claudeDefaultModel: process.env.SYLAS_CLAUDE_DEFAULT_MODEL ||
138
+ process.env.SYLAS_DEFAULT_MODEL ||
139
+ edgeConfig.claudeDefaultModel ||
140
+ edgeConfig.defaultModel,
141
+ claudeDefaultFallbackModel: process.env.SYLAS_CLAUDE_DEFAULT_FALLBACK_MODEL ||
142
+ process.env.SYLAS_DEFAULT_FALLBACK_MODEL ||
143
+ edgeConfig.claudeDefaultFallbackModel ||
144
+ edgeConfig.defaultFallbackModel,
145
+ geminiDefaultModel: process.env.SYLAS_GEMINI_DEFAULT_MODEL || edgeConfig.geminiDefaultModel,
146
+ codexDefaultModel: process.env.SYLAS_CODEX_DEFAULT_MODEL || edgeConfig.codexDefaultModel,
147
+ webhookBaseUrl: process.env.SYLAS_BASE_URL,
148
+ serverPort: parsePort(process.env.SYLAS_SERVER_PORT, DEFAULT_SERVER_PORT),
149
+ serverHost: isExternalHost ? "0.0.0.0" : "localhost",
150
+ ngrokAuthToken,
151
+ // User access control configuration
152
+ userAccessControl: edgeConfig.userAccessControl,
153
+ handlers: {
154
+ createWorkspace: async (issue, repository) => {
155
+ return this.gitService.createGitWorktree(issue, repository, edgeConfig.global_setup_script);
156
+ },
157
+ onOAuthCallback,
158
+ },
159
+ };
160
+ // Create and start EdgeWorker
161
+ this.edgeWorker = new EdgeWorker(config);
162
+ // Set config path for dynamic reloading
163
+ const configPath = this.configService.getConfigPath();
164
+ this.edgeWorker.setConfigPath(configPath);
165
+ // Set up event handlers
166
+ this.setupEventHandlers();
167
+ // Start the worker
168
+ await this.edgeWorker.start();
169
+ this.logger.success("Edge worker started successfully");
170
+ this.logger.info(`Managing ${repositories.length} repositories:`);
171
+ repositories.forEach((repo) => {
172
+ this.logger.info(` - ${repo.name} (${repo.repositoryPath})`);
173
+ });
174
+ }
175
+ /**
176
+ * Set up event handlers for EdgeWorker
177
+ */
178
+ setupEventHandlers() {
179
+ if (!this.edgeWorker)
180
+ return;
181
+ // Session events
182
+ this.edgeWorker.on("session:started", (issueId, _issue, repositoryId) => {
183
+ this.logger.info(`Started session for issue ${issueId} in repository ${repositoryId}`);
184
+ });
185
+ this.edgeWorker.on("session:ended", (issueId, exitCode, repositoryId) => {
186
+ this.logger.info(`Session for issue ${issueId} ended with exit code ${exitCode} in repository ${repositoryId}`);
187
+ });
188
+ // Connection events
189
+ this.edgeWorker.on("connected", (token) => {
190
+ this.logger.success(`Connected to proxy with token ending in ...${token.slice(-4)}`);
191
+ });
192
+ this.edgeWorker.on("disconnected", (token, reason) => {
193
+ this.logger.error(`Disconnected from proxy (token ...${token.slice(-4)}): ${reason || "Unknown reason"}`);
194
+ });
195
+ // Error events
196
+ this.edgeWorker.on("error", (error) => {
197
+ this.logger.error(`EdgeWorker error: ${error.message}`);
198
+ });
199
+ }
200
+ /**
201
+ * Stop the EdgeWorker
202
+ */
203
+ async stop() {
204
+ if (this.isShuttingDown)
205
+ return;
206
+ this.isShuttingDown = true;
207
+ this.logger.info("\nShutting down edge worker...");
208
+ // Stop setup waiting mode server if still running
209
+ if (this.setupWaitingServer) {
210
+ await this.setupWaitingServer.stop();
211
+ this.setupWaitingServer = null;
212
+ }
213
+ // Stop edge worker (includes stopping shared application server and Cloudflare tunnel)
214
+ if (this.edgeWorker) {
215
+ await this.edgeWorker.stop();
216
+ }
217
+ this.logger.info("Shutdown complete");
218
+ }
219
+ }
220
+ //# sourceMappingURL=WorkerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerService.js","sourceRoot":"","sources":["../../src/services/WorkerService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { GitService, SharedApplicationServer } from "sylas-edge-worker";
2
+ import { ConfigService } from "./services/ConfigService.js";
3
+ import { Logger } from "./services/Logger.js";
4
+ import { WorkerService } from "./services/WorkerService.js";
5
+ /**
6
+ * Main application context providing access to services
7
+ */
8
+ export declare class Application {
9
+ readonly sylasHome: string;
10
+ readonly config: ConfigService;
11
+ readonly git: GitService;
12
+ readonly worker: WorkerService;
13
+ readonly logger: Logger;
14
+ readonly version: string;
15
+ private envWatcher?;
16
+ private configWatcher?;
17
+ private isInSetupWaitingMode;
18
+ private isInIdleMode;
19
+ private readonly envFilePath;
20
+ constructor(sylasHome: string, customEnvPath?: string, version?: string);
21
+ /**
22
+ * Load environment variables from the configured env file path
23
+ */
24
+ private loadEnvFile;
25
+ /**
26
+ * Setup file watcher for .env file to reload on changes
27
+ */
28
+ private setupEnvFileWatcher;
29
+ /**
30
+ * Ensure required Sylas directories exist
31
+ * Creates: ~/.sylas/repos, ~/.sylas/worktrees, ~/.sylas/mcp-configs
32
+ */
33
+ private ensureRequiredDirectories;
34
+ /**
35
+ * Get proxy URL from environment or use default
36
+ */
37
+ getProxyUrl(): string;
38
+ /**
39
+ * Check if using default proxy
40
+ */
41
+ isUsingDefaultProxy(): boolean;
42
+ /**
43
+ * Create a temporary SharedApplicationServer for OAuth
44
+ */
45
+ createTempServer(): Promise<SharedApplicationServer>;
46
+ /**
47
+ * Enable setup waiting mode and start watching config.json for repositories
48
+ */
49
+ enableSetupWaitingMode(): void;
50
+ /**
51
+ * Enable idle mode (post-onboarding, no repositories) and start watching config.json
52
+ */
53
+ enableIdleMode(): void;
54
+ /**
55
+ * Setup file watcher for config.json to detect when repositories are added
56
+ */
57
+ private startConfigWatcher;
58
+ /**
59
+ * Remove SYLAS_SETUP_PENDING flag from .env file
60
+ */
61
+ private removeSetupPendingFlag;
62
+ /**
63
+ * Transition from setup waiting mode to normal operation
64
+ */
65
+ private transitionToNormalMode;
66
+ /**
67
+ * Handle graceful shutdown
68
+ */
69
+ shutdown(): Promise<void>;
70
+ /**
71
+ * Setup process signal handlers
72
+ */
73
+ setupSignalHandlers(): void;
74
+ }
75
+ //# sourceMappingURL=Application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../src/Application.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;GAEG;AACH,qBAAa,WAAW;aAaN,SAAS,EAAE,MAAM;IAZlC,SAAgB,MAAM,EAAE,aAAa,CAAC;IACtC,SAAgB,GAAG,EAAE,UAAU,CAAC;IAChC,SAAgB,MAAM,EAAE,aAAa,CAAC;IACtC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,UAAU,CAAC,CAA2B;IAC9C,OAAO,CAAC,aAAa,CAAC,CAA2B;IACjD,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAGpB,SAAS,EAAE,MAAM,EACjC,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM;IAgCjB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAmBjC;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAQ1D;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAK9B;;OAEG;IACH,cAAc,IAAI,IAAI;IAKtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;OAEG;YACW,sBAAsB;IA2BpC;;OAEG;YACW,sBAAsB;IA6CpC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAe/B;;OAEG;IACH,mBAAmB,IAAI,IAAI;CA2C3B"}