dev3000 0.0.185 → 0.0.187

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.
Files changed (237) hide show
  1. package/README.md +102 -13
  2. package/bin/dev3000 +1 -2
  3. package/dist/cdp-monitor.d.ts +7 -12
  4. package/dist/cdp-monitor.d.ts.map +1 -1
  5. package/dist/cdp-monitor.js +86 -170
  6. package/dist/cdp-monitor.js.map +1 -1
  7. package/dist/cli.d.ts +1 -2
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +1 -1369
  10. package/dist/cli.js.map +1 -1
  11. package/dist/index.d.ts +1 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +0 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/portless.d.ts +10 -0
  16. package/dist/portless.d.ts.map +1 -1
  17. package/dist/portless.js +44 -1
  18. package/dist/portless.js.map +1 -1
  19. package/dist/runtime/bridge.d.ts +26 -0
  20. package/dist/runtime/bridge.d.ts.map +1 -0
  21. package/dist/runtime/bridge.js +340 -0
  22. package/dist/runtime/bridge.js.map +1 -0
  23. package/dist/runtime/chrome-isolation.d.ts +16 -0
  24. package/dist/runtime/chrome-isolation.d.ts.map +1 -0
  25. package/dist/runtime/chrome-isolation.js +97 -0
  26. package/dist/runtime/chrome-isolation.js.map +1 -0
  27. package/dist/runtime/cli.js +116 -26
  28. package/dist/runtime/cli.js.map +1 -1
  29. package/dist/runtime/event-views.d.ts +21 -0
  30. package/dist/runtime/event-views.d.ts.map +1 -0
  31. package/dist/runtime/event-views.js +53 -0
  32. package/dist/runtime/event-views.js.map +1 -0
  33. package/dist/runtime/harness.d.ts +16 -0
  34. package/dist/runtime/harness.d.ts.map +1 -0
  35. package/dist/runtime/harness.js +68 -0
  36. package/dist/runtime/harness.js.map +1 -0
  37. package/dist/runtime/local-proxy.d.ts +12 -0
  38. package/dist/runtime/local-proxy.d.ts.map +1 -0
  39. package/dist/runtime/local-proxy.js +114 -0
  40. package/dist/runtime/local-proxy.js.map +1 -0
  41. package/dist/runtime/runtime.d.ts +14 -0
  42. package/dist/runtime/runtime.d.ts.map +1 -1
  43. package/dist/runtime/runtime.js +82 -21
  44. package/dist/runtime/runtime.js.map +1 -1
  45. package/dist/runtime/sandbox-agent.d.ts +6 -0
  46. package/dist/runtime/sandbox-agent.d.ts.map +1 -0
  47. package/dist/runtime/sandbox-agent.js +35 -0
  48. package/dist/runtime/sandbox-agent.js.map +1 -0
  49. package/dist/runtime/sandbox-command.d.ts +9 -0
  50. package/dist/runtime/sandbox-command.d.ts.map +1 -0
  51. package/dist/runtime/sandbox-command.js +101 -0
  52. package/dist/runtime/sandbox-command.js.map +1 -0
  53. package/dist/runtime/sandbox-proxy.d.ts +11 -0
  54. package/dist/runtime/sandbox-proxy.d.ts.map +1 -0
  55. package/dist/runtime/sandbox-proxy.js +123 -0
  56. package/dist/runtime/sandbox-proxy.js.map +1 -0
  57. package/dist/runtime/sandbox-sessions.d.ts +31 -0
  58. package/dist/runtime/sandbox-sessions.d.ts.map +1 -0
  59. package/dist/runtime/sandbox-sessions.js +102 -0
  60. package/dist/runtime/sandbox-sessions.js.map +1 -0
  61. package/dist/runtime/sandbox.d.ts +21 -0
  62. package/dist/runtime/sandbox.d.ts.map +1 -0
  63. package/dist/runtime/sandbox.js +481 -0
  64. package/dist/runtime/sandbox.js.map +1 -0
  65. package/dist/utils/agent-browser.d.ts +2 -120
  66. package/dist/utils/agent-browser.d.ts.map +1 -1
  67. package/dist/utils/agent-browser.js +13 -376
  68. package/dist/utils/agent-browser.js.map +1 -1
  69. package/dist/utils/project-name.d.ts +11 -1
  70. package/dist/utils/project-name.d.ts.map +1 -1
  71. package/dist/utils/project-name.js +14 -1
  72. package/dist/utils/project-name.js.map +1 -1
  73. package/package.json +13 -22
  74. package/skills/d3k/SKILL.md +23 -1
  75. package/dist/commands/crawl.d.ts +0 -12
  76. package/dist/commands/crawl.d.ts.map +0 -1
  77. package/dist/commands/crawl.js +0 -101
  78. package/dist/commands/crawl.js.map +0 -1
  79. package/dist/commands/errors.d.ts +0 -14
  80. package/dist/commands/errors.d.ts.map +0 -1
  81. package/dist/commands/errors.js +0 -246
  82. package/dist/commands/errors.js.map +0 -1
  83. package/dist/commands/fix.d.ts +0 -13
  84. package/dist/commands/fix.d.ts.map +0 -1
  85. package/dist/commands/fix.js +0 -219
  86. package/dist/commands/fix.js.map +0 -1
  87. package/dist/commands/logs.d.ts +0 -13
  88. package/dist/commands/logs.d.ts.map +0 -1
  89. package/dist/commands/logs.js +0 -146
  90. package/dist/commands/logs.js.map +0 -1
  91. package/dist/commands/resume.d.ts +0 -11
  92. package/dist/commands/resume.d.ts.map +0 -1
  93. package/dist/commands/resume.js +0 -75
  94. package/dist/commands/resume.js.map +0 -1
  95. package/dist/commands/status.d.ts +0 -21
  96. package/dist/commands/status.d.ts.map +0 -1
  97. package/dist/commands/status.js +0 -44
  98. package/dist/commands/status.js.map +0 -1
  99. package/dist/components/AgentSelector.d.ts +0 -12
  100. package/dist/components/AgentSelector.d.ts.map +0 -1
  101. package/dist/components/AgentSelector.js +0 -99
  102. package/dist/components/AgentSelector.js.map +0 -1
  103. package/dist/components/PackageSelector.d.ts +0 -13
  104. package/dist/components/PackageSelector.d.ts.map +0 -1
  105. package/dist/components/PackageSelector.js +0 -79
  106. package/dist/components/PackageSelector.js.map +0 -1
  107. package/dist/constants/log-colors.d.ts +0 -43
  108. package/dist/constants/log-colors.d.ts.map +0 -1
  109. package/dist/constants/log-colors.js +0 -59
  110. package/dist/constants/log-colors.js.map +0 -1
  111. package/dist/dev-environment.d.ts +0 -187
  112. package/dist/dev-environment.d.ts.map +0 -1
  113. package/dist/dev-environment.js +0 -2248
  114. package/dist/dev-environment.js.map +0 -1
  115. package/dist/screencast-manager.d.ts +0 -78
  116. package/dist/screencast-manager.d.ts.map +0 -1
  117. package/dist/screencast-manager.js +0 -529
  118. package/dist/screencast-manager.js.map +0 -1
  119. package/dist/services/parsers/error-detectors/base.d.ts +0 -24
  120. package/dist/services/parsers/error-detectors/base.d.ts.map +0 -1
  121. package/dist/services/parsers/error-detectors/base.js +0 -44
  122. package/dist/services/parsers/error-detectors/base.js.map +0 -1
  123. package/dist/services/parsers/error-detectors/index.d.ts +0 -6
  124. package/dist/services/parsers/error-detectors/index.d.ts.map +0 -1
  125. package/dist/services/parsers/error-detectors/index.js +0 -6
  126. package/dist/services/parsers/error-detectors/index.js.map +0 -1
  127. package/dist/services/parsers/error-detectors/nextjs.d.ts +0 -9
  128. package/dist/services/parsers/error-detectors/nextjs.d.ts.map +0 -1
  129. package/dist/services/parsers/error-detectors/nextjs.js +0 -52
  130. package/dist/services/parsers/error-detectors/nextjs.js.map +0 -1
  131. package/dist/services/parsers/index.d.ts +0 -9
  132. package/dist/services/parsers/index.d.ts.map +0 -1
  133. package/dist/services/parsers/index.js +0 -10
  134. package/dist/services/parsers/index.js.map +0 -1
  135. package/dist/services/parsers/log-parsers/base.d.ts +0 -26
  136. package/dist/services/parsers/log-parsers/base.d.ts.map +0 -1
  137. package/dist/services/parsers/log-parsers/base.js +0 -6
  138. package/dist/services/parsers/log-parsers/base.js.map +0 -1
  139. package/dist/services/parsers/log-parsers/index.d.ts +0 -6
  140. package/dist/services/parsers/log-parsers/index.d.ts.map +0 -1
  141. package/dist/services/parsers/log-parsers/index.js +0 -5
  142. package/dist/services/parsers/log-parsers/index.js.map +0 -1
  143. package/dist/services/parsers/log-parsers/standard.d.ts +0 -9
  144. package/dist/services/parsers/log-parsers/standard.d.ts.map +0 -1
  145. package/dist/services/parsers/log-parsers/standard.js +0 -17
  146. package/dist/services/parsers/log-parsers/standard.js.map +0 -1
  147. package/dist/services/parsers/output-processor.d.ts +0 -39
  148. package/dist/services/parsers/output-processor.d.ts.map +0 -1
  149. package/dist/services/parsers/output-processor.js +0 -54
  150. package/dist/services/parsers/output-processor.js.map +0 -1
  151. package/dist/skills/d3k/internal-skill.md +0 -32
  152. package/dist/skills/index.d.ts +0 -54
  153. package/dist/skills/index.d.ts.map +0 -1
  154. package/dist/skills/index.js +0 -214
  155. package/dist/skills/index.js.map +0 -1
  156. package/dist/src/tui-interface-impl.tsx +0 -644
  157. package/dist/tui-interface-impl.d.ts +0 -30
  158. package/dist/tui-interface-impl.d.ts.map +0 -1
  159. package/dist/tui-interface-impl.js +0 -403
  160. package/dist/tui-interface-impl.js.map +0 -1
  161. package/dist/tui-interface-opentui.d.ts +0 -33
  162. package/dist/tui-interface-opentui.d.ts.map +0 -1
  163. package/dist/tui-interface-opentui.js +0 -1128
  164. package/dist/tui-interface-opentui.js.map +0 -1
  165. package/dist/tui-interface.d.ts +0 -38
  166. package/dist/tui-interface.d.ts.map +0 -1
  167. package/dist/tui-interface.js +0 -84
  168. package/dist/tui-interface.js.map +0 -1
  169. package/dist/utils/agent-detection.d.ts +0 -17
  170. package/dist/utils/agent-detection.d.ts.map +0 -1
  171. package/dist/utils/agent-detection.js +0 -81
  172. package/dist/utils/agent-detection.js.map +0 -1
  173. package/dist/utils/agent-selection.d.ts +0 -25
  174. package/dist/utils/agent-selection.d.ts.map +0 -1
  175. package/dist/utils/agent-selection.js +0 -73
  176. package/dist/utils/agent-selection.js.map +0 -1
  177. package/dist/utils/browser-command-argv.d.ts +0 -19
  178. package/dist/utils/browser-command-argv.d.ts.map +0 -1
  179. package/dist/utils/browser-command-argv.js +0 -149
  180. package/dist/utils/browser-command-argv.js.map +0 -1
  181. package/dist/utils/build-version.d.ts +0 -2
  182. package/dist/utils/build-version.d.ts.map +0 -1
  183. package/dist/utils/build-version.js +0 -8
  184. package/dist/utils/build-version.js.map +0 -1
  185. package/dist/utils/cli-options.d.ts +0 -5
  186. package/dist/utils/cli-options.d.ts.map +0 -1
  187. package/dist/utils/cli-options.js +0 -36
  188. package/dist/utils/cli-options.js.map +0 -1
  189. package/dist/utils/d3k-dir.d.ts +0 -3
  190. package/dist/utils/d3k-dir.d.ts.map +0 -1
  191. package/dist/utils/d3k-dir.js +0 -12
  192. package/dist/utils/d3k-dir.js.map +0 -1
  193. package/dist/utils/d3k-skill-installer.d.ts +0 -4
  194. package/dist/utils/d3k-skill-installer.d.ts.map +0 -1
  195. package/dist/utils/d3k-skill-installer.js +0 -30
  196. package/dist/utils/d3k-skill-installer.js.map +0 -1
  197. package/dist/utils/log-filename.d.ts +0 -30
  198. package/dist/utils/log-filename.d.ts.map +0 -1
  199. package/dist/utils/log-filename.js +0 -60
  200. package/dist/utils/log-filename.js.map +0 -1
  201. package/dist/utils/project-detector.d.ts +0 -25
  202. package/dist/utils/project-detector.d.ts.map +0 -1
  203. package/dist/utils/project-detector.js +0 -153
  204. package/dist/utils/project-detector.js.map +0 -1
  205. package/dist/utils/project-metadata.d.ts +0 -4
  206. package/dist/utils/project-metadata.d.ts.map +0 -1
  207. package/dist/utils/project-metadata.js +0 -48
  208. package/dist/utils/project-metadata.js.map +0 -1
  209. package/dist/utils/repo-validate.d.ts +0 -2
  210. package/dist/utils/repo-validate.d.ts.map +0 -1
  211. package/dist/utils/repo-validate.js +0 -10
  212. package/dist/utils/repo-validate.js.map +0 -1
  213. package/dist/utils/session.d.ts +0 -19
  214. package/dist/utils/session.d.ts.map +0 -1
  215. package/dist/utils/session.js +0 -65
  216. package/dist/utils/session.js.map +0 -1
  217. package/dist/utils/skill-installer.d.ts +0 -65
  218. package/dist/utils/skill-installer.d.ts.map +0 -1
  219. package/dist/utils/skill-installer.js +0 -265
  220. package/dist/utils/skill-installer.js.map +0 -1
  221. package/dist/utils/timestamp.d.ts +0 -20
  222. package/dist/utils/timestamp.d.ts.map +0 -1
  223. package/dist/utils/timestamp.js +0 -57
  224. package/dist/utils/timestamp.js.map +0 -1
  225. package/dist/utils/tmux-helpers.d.ts +0 -36
  226. package/dist/utils/tmux-helpers.d.ts.map +0 -1
  227. package/dist/utils/tmux-helpers.js +0 -118
  228. package/dist/utils/tmux-helpers.js.map +0 -1
  229. package/dist/utils/user-config.d.ts +0 -12
  230. package/dist/utils/user-config.d.ts.map +0 -1
  231. package/dist/utils/user-config.js +0 -46
  232. package/dist/utils/user-config.js.map +0 -1
  233. package/dist/utils/version-check.d.ts +0 -52
  234. package/dist/utils/version-check.d.ts.map +0 -1
  235. package/dist/utils/version-check.js +0 -304
  236. package/dist/utils/version-check.js.map +0 -1
  237. package/src/tui-interface-impl.tsx +0 -644
@@ -1,65 +0,0 @@
1
- export type InstallLocation = "project" | "global";
2
- export type ProjectType = "nextjs" | "react" | "other";
3
- export interface SkillPackage {
4
- repo: string;
5
- displayName: string;
6
- description: string;
7
- projectTypes: ProjectType[];
8
- /** Skill folder names to check for installation */
9
- skillFolders: string[];
10
- }
11
- export type SkillsAgentId = string;
12
- /**
13
- * Skill packages offered based on project type.
14
- * These are installed via `npx skills add <repo> --all`
15
- */
16
- export declare const SKILL_PACKAGES: SkillPackage[];
17
- /**
18
- * Detect the project type based on config files and package.json dependencies.
19
- */
20
- export declare function detectProjectType(): ProjectType;
21
- /**
22
- * Get skill packages applicable to the current project type.
23
- */
24
- export declare function getApplicablePackages(): SkillPackage[];
25
- /**
26
- * Check if a skill package is already installed by checking for its skill folders.
27
- * A package is considered installed if ANY of its skill folders exist.
28
- * Only checks .agents/skills since that's where `npx skills` installs to.
29
- */
30
- export declare function isPackageInstalled(pkg: SkillPackage, agentId: SkillsAgentId): boolean;
31
- export declare function getSkillsPathForLocation(agentId: SkillsAgentId, location: InstallLocation): {
32
- path: string;
33
- isGlobal: boolean;
34
- } | null;
35
- /**
36
- * Install a skill package using the skills CLI.
37
- * Installs all skills from the package to the specified location.
38
- */
39
- export declare function installSkillPackage(pkg: SkillPackage, location?: InstallLocation, agentId?: SkillsAgentId): Promise<{
40
- success: boolean;
41
- error?: string;
42
- }>;
43
- /**
44
- * Check for skill updates using the skills CLI.
45
- */
46
- export declare function checkForSkillUpdates(): Promise<{
47
- hasUpdates: boolean;
48
- output: string;
49
- }>;
50
- /**
51
- * Update all skills using the skills CLI.
52
- */
53
- export declare function updateSkills(): Promise<{
54
- success: boolean;
55
- output: string;
56
- }>;
57
- /**
58
- * Get packages that are applicable but not yet installed.
59
- */
60
- export declare function getUninstalledPackages(): SkillPackage[];
61
- /**
62
- * Get packages that are applicable and installed (for showing update info).
63
- */
64
- export declare function getInstalledPackages(): SkillPackage[];
65
- //# sourceMappingURL=skill-installer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-installer.d.ts","sourceRoot":"","sources":["../../src/utils/skill-installer.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAA;AAClD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,mDAAmD;IACnD,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAA;AAmClC;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAY,EAiBxC,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CA6B/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,EAAE,CAGtD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAerF;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,eAAe,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAS5C;AA4DD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,YAAY,EACjB,QAAQ,GAAE,eAA2B,EACrC,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+C/C;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB7F;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAUlF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,EAAE,CAEvD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,YAAY,EAAE,CAErD"}
@@ -1,265 +0,0 @@
1
- import { spawnSync } from "child_process";
2
- import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
3
- import { homedir } from "os";
4
- import path from "path";
5
- const AGENT_SKILLS_PATHS = {
6
- "claude-code": {
7
- project: [".claude", "skills"],
8
- global: [".claude", "skills"]
9
- },
10
- codex: {
11
- project: [".agents", "skills"],
12
- global: [".agents", "skills"]
13
- },
14
- cursor: {
15
- project: [".cursor", "skills"],
16
- global: [".cursor", "skills"]
17
- },
18
- cline: {
19
- project: [".cline", "skills"],
20
- global: [".cline", "skills"]
21
- },
22
- "gemini-cli": {
23
- project: [".gemini", "skills"],
24
- global: [".gemini", "skills"]
25
- },
26
- opencode: {
27
- project: [".opencode", "skills"],
28
- global: [".config", "opencode", "skills"]
29
- }
30
- };
31
- /**
32
- * Skill packages offered based on project type.
33
- * These are installed via `npx skills add <repo> --all`
34
- */
35
- export const SKILL_PACKAGES = [
36
- {
37
- repo: "vercel-labs/next-skills",
38
- displayName: "Next.js Skills",
39
- description: "Best practices, debugging, hydration fixes, metadata, and upgrade guides",
40
- projectTypes: ["nextjs"],
41
- // Folder names as installed by `npx skills add vercel-labs/next-skills`
42
- skillFolders: ["next-best-practices", "next-cache-components", "next-upgrade"]
43
- },
44
- {
45
- repo: "vercel-labs/agent-skills",
46
- displayName: "React & Web Skills",
47
- description: "React performance, design guidelines, and web development best practices",
48
- projectTypes: ["nextjs", "react"],
49
- // Folder names as installed by `npx skills add vercel-labs/agent-skills`
50
- skillFolders: ["vercel-react-best-practices", "vercel-composition-patterns", "web-design-guidelines"]
51
- }
52
- ];
53
- /**
54
- * Detect the project type based on config files and package.json dependencies.
55
- */
56
- export function detectProjectType() {
57
- // Check for Next.js config files first (most specific indicator)
58
- const nextConfigFiles = ["next.config.js", "next.config.ts", "next.config.mjs", "next.config.cjs"];
59
- if (nextConfigFiles.some((file) => existsSync(path.join(process.cwd(), file)))) {
60
- return "nextjs";
61
- }
62
- // Check package.json dependencies
63
- const packageJsonPath = path.join(process.cwd(), "package.json");
64
- if (existsSync(packageJsonPath)) {
65
- try {
66
- const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
67
- const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
68
- // Check for Next.js in dependencies
69
- if (deps.next) {
70
- return "nextjs";
71
- }
72
- // Check for React in dependencies
73
- if (deps.react || deps["react-dom"]) {
74
- return "react";
75
- }
76
- }
77
- catch {
78
- // Ignore parse errors
79
- }
80
- }
81
- return "other";
82
- }
83
- /**
84
- * Get skill packages applicable to the current project type.
85
- */
86
- export function getApplicablePackages() {
87
- const projectType = detectProjectType();
88
- return SKILL_PACKAGES.filter((pkg) => pkg.projectTypes.includes(projectType));
89
- }
90
- /**
91
- * Check if a skill package is already installed by checking for its skill folders.
92
- * A package is considered installed if ANY of its skill folders exist.
93
- * Only checks .agents/skills since that's where `npx skills` installs to.
94
- */
95
- export function isPackageInstalled(pkg, agentId) {
96
- const searchDirs = getSkillsDirs(agentId);
97
- if (searchDirs.length === 0) {
98
- return false;
99
- }
100
- for (const skillsDir of searchDirs) {
101
- for (const folder of pkg.skillFolders) {
102
- if (existsSync(path.join(skillsDir, folder))) {
103
- return true;
104
- }
105
- }
106
- }
107
- return false;
108
- }
109
- export function getSkillsPathForLocation(agentId, location) {
110
- const paths = AGENT_SKILLS_PATHS[agentId];
111
- if (!paths) {
112
- return null;
113
- }
114
- const pathParts = location === "global" ? paths.global : paths.project;
115
- const base = location === "global" ? homedir() : process.cwd();
116
- return { path: path.join(base, ...pathParts), isGlobal: location === "global" };
117
- }
118
- /**
119
- * Get skills directories to check based on agent ID.
120
- */
121
- function getSkillsDirs(agentId) {
122
- const paths = AGENT_SKILLS_PATHS[agentId];
123
- if (!paths) {
124
- return [];
125
- }
126
- const dirs = [path.join(process.cwd(), ...paths.project), path.join(homedir(), ...paths.global)];
127
- const legacyDirs = [
128
- path.join(process.cwd(), ".agents", "skills"),
129
- path.join(homedir(), ".agents", "skills"),
130
- path.join(process.cwd(), ".claude", "skills"),
131
- path.join(homedir(), ".claude", "skills")
132
- ];
133
- for (const dir of legacyDirs) {
134
- if (!dirs.includes(dir)) {
135
- dirs.push(dir);
136
- }
137
- }
138
- return dirs;
139
- }
140
- function copySkillFolders(sourceDir, targetDir, folders) {
141
- let copied = false;
142
- for (const folder of folders) {
143
- const sourcePath = path.join(sourceDir, folder);
144
- if (!existsSync(sourcePath)) {
145
- continue;
146
- }
147
- mkdirSync(targetDir, { recursive: true });
148
- const targetPath = path.join(targetDir, folder);
149
- cpSync(sourcePath, targetPath, { recursive: true, force: true });
150
- copied = true;
151
- }
152
- return copied;
153
- }
154
- function hasAllSkillFolders(targetDir, folders) {
155
- return folders.every((folder) => existsSync(path.join(targetDir, folder)));
156
- }
157
- function getProjectSkillsRoot(agentId) {
158
- const paths = AGENT_SKILLS_PATHS[agentId];
159
- if (!paths || paths.project.length === 0) {
160
- return null;
161
- }
162
- return path.join(process.cwd(), paths.project[0]);
163
- }
164
- /**
165
- * Install a skill package using the skills CLI.
166
- * Installs all skills from the package to the specified location.
167
- */
168
- export async function installSkillPackage(pkg, location = "project", agentId) {
169
- if (!agentId) {
170
- return { success: false, error: "No agent specified" };
171
- }
172
- const projectSkillsRoot = location === "project" ? getProjectSkillsRoot(agentId) : null;
173
- const hadProjectSkillsRoot = projectSkillsRoot ? existsSync(projectSkillsRoot) : false;
174
- // --skill '*' installs all skills for the specified agent only.
175
- const args = ["add", pkg.repo, "--agent", agentId, "-y", "--skill", "*"];
176
- if (location === "global") {
177
- args.push("-g");
178
- }
179
- const result = spawnSync("npx", ["--yes", "skills@latest", ...args], {
180
- stdio: "inherit",
181
- timeout: 120000, // 2 minute timeout for full package
182
- cwd: process.cwd()
183
- });
184
- if (result.status !== 0) {
185
- return { success: false, error: "Installation failed" };
186
- }
187
- const targetPath = getSkillsPathForLocation(agentId, location);
188
- if (targetPath && !hasAllSkillFolders(targetPath.path, pkg.skillFolders)) {
189
- const sourceCandidates = location === "global"
190
- ? [path.join(homedir(), ".agents", "skills"), path.join(homedir(), ".claude", "skills")]
191
- : [path.join(process.cwd(), ".agents", "skills"), path.join(process.cwd(), ".claude", "skills")];
192
- for (const sourceDir of sourceCandidates) {
193
- if (!existsSync(sourceDir)) {
194
- continue;
195
- }
196
- if (copySkillFolders(sourceDir, targetPath.path, pkg.skillFolders)) {
197
- break;
198
- }
199
- }
200
- }
201
- if (location === "project" && projectSkillsRoot && !hadProjectSkillsRoot && existsSync(projectSkillsRoot)) {
202
- ensureAgentDirGitignored(projectSkillsRoot);
203
- }
204
- return { success: true };
205
- }
206
- /**
207
- * Check for skill updates using the skills CLI.
208
- */
209
- export async function checkForSkillUpdates() {
210
- const result = spawnSync("npx", ["--yes", "skills@latest", "check"], {
211
- stdio: "pipe",
212
- timeout: 30000
213
- });
214
- const output = result.stdout?.toString() || "";
215
- const lowerOutput = output.toLowerCase();
216
- // Check for specific phrases that indicate updates are available
217
- // Avoid false positives from "Checking for skill updates..." message
218
- const hasUpdates = (lowerOutput.includes("update available") || lowerOutput.includes("updates available")) &&
219
- !lowerOutput.includes("no skills tracked") &&
220
- !lowerOutput.includes("no skills to check");
221
- return { hasUpdates, output };
222
- }
223
- /**
224
- * Update all skills using the skills CLI.
225
- */
226
- export async function updateSkills() {
227
- const result = spawnSync("npx", ["--yes", "skills@latest", "update", "-y"], {
228
- stdio: "pipe",
229
- timeout: 120000
230
- });
231
- return {
232
- success: result.status === 0,
233
- output: result.stdout?.toString() || result.stderr?.toString() || ""
234
- };
235
- }
236
- /**
237
- * Get packages that are applicable but not yet installed.
238
- */
239
- export function getUninstalledPackages() {
240
- return getApplicablePackages();
241
- }
242
- /**
243
- * Get packages that are applicable and installed (for showing update info).
244
- */
245
- export function getInstalledPackages() {
246
- return getApplicablePackages();
247
- }
248
- function ensureAgentDirGitignored(projectSkillsRoot) {
249
- const entryBase = path.basename(projectSkillsRoot);
250
- if (!entryBase.startsWith(".")) {
251
- return;
252
- }
253
- const entry = `${entryBase}/`;
254
- const gitignorePath = path.join(process.cwd(), ".gitignore");
255
- let contents = "";
256
- if (existsSync(gitignorePath)) {
257
- contents = readFileSync(gitignorePath, "utf-8");
258
- if (contents.split(/\r?\n/).some((line) => line.trim() === entry)) {
259
- return;
260
- }
261
- }
262
- const suffix = contents.endsWith("\n") || contents.length === 0 ? "" : "\n";
263
- writeFileSync(gitignorePath, `${contents}${suffix}${entry}\n`, "utf-8");
264
- }
265
- //# sourceMappingURL=skill-installer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../src/utils/skill-installer.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Format timestamp based on user preference
3
- * @param date Date object to format
4
- * @param format "local" for local time (default) or "utc" for ISO string
5
- * @returns Formatted timestamp string
6
- */
7
- export declare function formatTimestamp(date: Date, format?: "local" | "utc"): string;
8
- /**
9
- * Parse a timestamp string like "12:34:56.789" into milliseconds from midnight
10
- * @param timestamp Timestamp string in HH:mm:ss.SSS or HH:mm:ss format
11
- * @returns Milliseconds from midnight, or null if parsing fails
12
- */
13
- export declare function parseTimestampToMs(timestamp: string): number | null;
14
- /**
15
- * Format a time delta in milliseconds to a human-readable string
16
- * @param deltaMs Delta in milliseconds (can be negative)
17
- * @returns Formatted string like "+0.011s", "-1.049s", "+5.2s", "+1m23.4s"
18
- */
19
- export declare function formatTimeDelta(deltaMs: number): string;
20
- //# sourceMappingURL=timestamp.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timestamp.d.ts","sourceRoot":"","sources":["../../src/utils/timestamp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAE,OAAO,GAAG,KAAe,GAAG,MAAM,CAYrF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWnE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBvD"}
@@ -1,57 +0,0 @@
1
- /**
2
- * Format timestamp based on user preference
3
- * @param date Date object to format
4
- * @param format "local" for local time (default) or "utc" for ISO string
5
- * @returns Formatted timestamp string
6
- */
7
- export function formatTimestamp(date, format = "local") {
8
- if (format === "utc") {
9
- return date.toISOString();
10
- }
11
- // Local format: HH:mm:ss.SSS
12
- const hours = date.getHours().toString().padStart(2, "0");
13
- const minutes = date.getMinutes().toString().padStart(2, "0");
14
- const seconds = date.getSeconds().toString().padStart(2, "0");
15
- const milliseconds = date.getMilliseconds().toString().padStart(3, "0");
16
- return `${hours}:${minutes}:${seconds}.${milliseconds}`;
17
- }
18
- /**
19
- * Parse a timestamp string like "12:34:56.789" into milliseconds from midnight
20
- * @param timestamp Timestamp string in HH:mm:ss.SSS or HH:mm:ss format
21
- * @returns Milliseconds from midnight, or null if parsing fails
22
- */
23
- export function parseTimestampToMs(timestamp) {
24
- // Match formats like "12:34:56.789" or "12:34:56"
25
- const match = timestamp.match(/^(\d{1,2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?/);
26
- if (!match)
27
- return null;
28
- const hours = parseInt(match[1], 10);
29
- const minutes = parseInt(match[2], 10);
30
- const seconds = parseInt(match[3], 10);
31
- const milliseconds = match[4] ? parseInt(match[4].padEnd(3, "0"), 10) : 0;
32
- return hours * 3600000 + minutes * 60000 + seconds * 1000 + milliseconds;
33
- }
34
- /**
35
- * Format a time delta in milliseconds to a human-readable string
36
- * @param deltaMs Delta in milliseconds (can be negative)
37
- * @returns Formatted string like "+0.011s", "-1.049s", "+5.2s", "+1m23.4s"
38
- */
39
- export function formatTimeDelta(deltaMs) {
40
- const sign = deltaMs >= 0 ? "+" : "-";
41
- const absMs = Math.abs(deltaMs);
42
- if (absMs < 10000) {
43
- // Under 10 seconds: show 3 decimal places (e.g., "+0.011s")
44
- return `${sign}${(absMs / 1000).toFixed(3)}s`;
45
- }
46
- else if (absMs < 60000) {
47
- // Under 1 minute: show 1 decimal place (e.g., "+15.2s")
48
- return `${sign}${(absMs / 1000).toFixed(1)}s`;
49
- }
50
- else {
51
- // 1 minute or more: show minutes and seconds (e.g., "+1m23.4s")
52
- const minutes = Math.floor(absMs / 60000);
53
- const seconds = (absMs % 60000) / 1000;
54
- return `${sign}${minutes}m${seconds.toFixed(1)}s`;
55
- }
56
- }
57
- //# sourceMappingURL=timestamp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timestamp.js","sourceRoot":"","sources":["../../src/utils/timestamp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,MAAM,GAAoB,OAAO;IAC3E,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3B,CAAC;IAED,6BAA6B;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAEvE,OAAO,GAAG,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,YAAY,EAAE,CAAA;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,kDAAkD;IAClD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEzE,OAAO,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,GAAG,YAAY,CAAA;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAE/B,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAClB,4DAA4D;QAC5D,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IAC/C,CAAC;SAAM,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QACzB,wDAAwD;QACxD,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IAC/C,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAA;QACzC,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,CAAA;QACtC,OAAO,GAAG,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IACnD,CAAC;AACH,CAAC"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Helper functions for tmux split-screen mode with --with-agent flag.
3
- * Extracted for testability.
4
- */
5
- export interface TmuxSessionConfig {
6
- sessionName: string;
7
- d3kCommand: string;
8
- agentCommand: string;
9
- paneWidthPercent: number;
10
- d3kLogPath?: string;
11
- agentLogPath?: string;
12
- }
13
- /**
14
- * Generate tmux commands for setting up split-screen mode.
15
- */
16
- export declare function generateTmuxCommands(config: TmuxSessionConfig): string[];
17
- /**
18
- * Generate a unique session name for tmux.
19
- */
20
- export declare function generateSessionName(): string;
21
- /**
22
- * Check if tmux is installed by looking for the binary.
23
- * Uses file existence checks instead of execSync to avoid SIGINT interruption issues.
24
- */
25
- export declare function isTmuxInstalled(): Promise<boolean>;
26
- /**
27
- * Get installation instructions for tmux based on platform.
28
- */
29
- export declare function getTmuxInstallInstructions(): string[];
30
- /**
31
- * Default configuration for tmux split-screen.
32
- */
33
- export declare const DEFAULT_TMUX_CONFIG: {
34
- paneWidthPercent: number;
35
- };
36
- //# sourceMappingURL=tmux-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/tmux-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAqBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,EAAE,CA8DxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAyBxD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B,gBAAgB;CACjB,CAAA"}
@@ -1,118 +0,0 @@
1
- /**
2
- * Helper functions for tmux split-screen mode with --with-agent flag.
3
- * Extracted for testability.
4
- */
5
- /**
6
- * Safely quote a value as a single shell argument using POSIX single-quote escaping.
7
- */
8
- function shellQuote(value) {
9
- return `'${value.replace(/'/g, `'\\''`)}'`;
10
- }
11
- /**
12
- * Wrap a command to show error and wait for user input on failure.
13
- * This prevents the pane from immediately closing on crash, letting users see the error.
14
- */
15
- function wrapCommandWithErrorHandling(cmd, name, pauseOnAnyExit = false) {
16
- // Use bash -c to run the command and capture its exit code.
17
- // Quote the script safely so user commands with spaces/quotes don't break tmux startup.
18
- const shouldPauseCondition = pauseOnAnyExit ? "true" : "[ $EXIT_CODE -ne 0 ]";
19
- const script = `${cmd}; EXIT_CODE=$?; if ${shouldPauseCondition}; then echo; if [ $EXIT_CODE -ne 0 ]; then echo ❌ ${name} exited with code $EXIT_CODE; else echo ℹ️ ${name} exited with code $EXIT_CODE; fi; echo Press Enter to close...; read; fi; exit $EXIT_CODE`;
20
- return `bash -c ${shellQuote(script)}`;
21
- }
22
- /**
23
- * Generate tmux commands for setting up split-screen mode.
24
- */
25
- export function generateTmuxCommands(config) {
26
- const { sessionName, d3kCommand, agentCommand, paneWidthPercent, d3kLogPath, agentLogPath } = config;
27
- // Wrap commands with error handling so users can see crash output
28
- const d3kWithErrorHandling = wrapCommandWithErrorHandling(d3kCommand, "d3k", false);
29
- // Always pause when the agent pane exits so users can see why split-screen closed.
30
- // This catches both failures and fast-exit cases (e.g. missing auth/session).
31
- const agentWithErrorHandling = wrapCommandWithErrorHandling(agentCommand, "agent", true);
32
- const commands = [
33
- // Create new session with d3k in the first pane (will be right side)
34
- `tmux new-session -d -s "${sessionName}" ${shellQuote(d3kWithErrorHandling)}`,
35
- // Increase scrollback buffer for more history
36
- `tmux set-option -t "${sessionName}" history-limit 10000`,
37
- // Hide the tmux status bar for a cleaner look
38
- `tmux set-option -t "${sessionName}" status off`,
39
- // Enable mouse support for scrolling, clicking to switch panes, and resizing
40
- `tmux set-option -t "${sessionName}" mouse on`,
41
- // Enable focus events (required for pane-focus-in hook to work)
42
- `tmux set-option -g focus-events on`,
43
- // When terminal is resized, maintain the pane width ratio
44
- `tmux set-hook -t "${sessionName}" client-resized "resize-pane -t :.0 -x ${paneWidthPercent}%"`,
45
- // Make inactive pane borders subtle gray, active pane border purple to show focus
46
- `tmux set-option -t "${sessionName}" pane-border-style "fg=#333333"`,
47
- `tmux set-option -t "${sessionName}" pane-active-border-style "fg=#A18CE5"`,
48
- // Split horizontally and run agent in the new pane (left side)
49
- // -b puts the new pane before (left of) the current one
50
- // -l sets the size of the NEW pane (agent)
51
- `tmux split-window -h -b -l ${paneWidthPercent}% -t "${sessionName}" ${shellQuote(agentWithErrorHandling)}`,
52
- // Mirror pane output to log files without breaking TTY semantics for interactive CLIs.
53
- // Pane 0 is agent (left), pane 1 is d3k (right) after split-window -b.
54
- ...(agentLogPath ? [`tmux pipe-pane -o -t "${sessionName}:0.0" "cat >> ${shellQuote(agentLogPath)}"`] : []),
55
- ...(d3kLogPath ? [`tmux pipe-pane -o -t "${sessionName}:0.1" "cat >> ${shellQuote(d3kLogPath)}"`] : []),
56
- // When focus changes (via mouse click or keyboard), resize focused pane to 75%
57
- // Note: pane-focus-in is a window-level hook, requires -w flag
58
- `tmux set-hook -w -t "${sessionName}" pane-focus-in 'resize-pane -x ${paneWidthPercent}%'`,
59
- // Bind Ctrl+B Left to focus agent pane (left/pane 0) AND resize it
60
- // Use single quotes to prevent shell from interpreting the semicolon
61
- `tmux bind-key -T prefix Left 'select-pane -t :.0 ; resize-pane -t :.0 -x ${paneWidthPercent}%'`,
62
- // Bind Ctrl+B Right to focus d3k pane (right/pane 1) AND resize it
63
- `tmux bind-key -T prefix Right 'select-pane -t :.1 ; resize-pane -t :.1 -x ${paneWidthPercent}%'`,
64
- // When any pane exits, kill the entire session (so Ctrl-C in either pane exits both).
65
- // Important: install this after split/bind setup to avoid a race if the agent exits quickly.
66
- `tmux set-hook -t "${sessionName}" pane-exited "kill-session -t ${sessionName}"`,
67
- // Focus on the agent pane (left side, pane 0 after split with -b)
68
- `tmux select-pane -t "${sessionName}:0.0"`
69
- ];
70
- return commands;
71
- }
72
- /**
73
- * Generate a unique session name for tmux.
74
- */
75
- export function generateSessionName() {
76
- return `d3k-${Date.now()}`;
77
- }
78
- /**
79
- * Check if tmux is installed by looking for the binary.
80
- * Uses file existence checks instead of execSync to avoid SIGINT interruption issues.
81
- */
82
- export async function isTmuxInstalled() {
83
- const { existsSync } = await import("fs");
84
- // Check common tmux binary paths (avoids execSync which can be interrupted by SIGINT)
85
- const commonPaths = [
86
- "/opt/homebrew/bin/tmux", // macOS Homebrew (Apple Silicon)
87
- "/usr/local/bin/tmux", // macOS Homebrew (Intel) or manual install
88
- "/usr/bin/tmux", // Linux (apt, dnf, etc.)
89
- "/bin/tmux" // Some Linux distros
90
- ];
91
- for (const path of commonPaths) {
92
- if (existsSync(path)) {
93
- return true;
94
- }
95
- }
96
- // Fallback to which command if not found in common paths
97
- const { execSync } = await import("child_process");
98
- try {
99
- execSync("which tmux", { stdio: "ignore" });
100
- return true;
101
- }
102
- catch {
103
- return false;
104
- }
105
- }
106
- /**
107
- * Get installation instructions for tmux based on platform.
108
- */
109
- export function getTmuxInstallInstructions() {
110
- return ["macOS: brew install tmux", "Ubuntu: sudo apt install tmux", "Fedora: sudo dnf install tmux"];
111
- }
112
- /**
113
- * Default configuration for tmux split-screen.
114
- */
115
- export const DEFAULT_TMUX_CONFIG = {
116
- paneWidthPercent: 75 // Agent gets 75% of width
117
- };
118
- //# sourceMappingURL=tmux-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-helpers.js","sourceRoot":"","sources":["../../src/utils/tmux-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export interface AgentConfig {
2
- name: string;
3
- command: string;
4
- }
5
- export interface UserConfig {
6
- defaultAgent?: AgentConfig;
7
- browser?: string;
8
- }
9
- export declare function getUserConfigPath(): string;
10
- export declare function loadUserConfig(): UserConfig;
11
- export declare function saveUserConfig(updates: Partial<UserConfig>): void;
12
- //# sourceMappingURL=user-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,cAAc,IAAI,UAAU,CAwB3C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAkBjE"}