@medalsocial/pilot 0.1.0

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 (149) hide show
  1. package/dist/bin/pilot.d.ts +3 -0
  2. package/dist/bin/pilot.d.ts.map +1 -0
  3. package/dist/bin/pilot.js +64 -0
  4. package/dist/bin/pilot.js.map +1 -0
  5. package/dist/colors.d.ts +12 -0
  6. package/dist/colors.d.ts.map +1 -0
  7. package/dist/colors.js +12 -0
  8. package/dist/colors.js.map +1 -0
  9. package/dist/commands/crew.d.ts +2 -0
  10. package/dist/commands/crew.d.ts.map +1 -0
  11. package/dist/commands/crew.js +7 -0
  12. package/dist/commands/crew.js.map +1 -0
  13. package/dist/commands/help.d.ts +2 -0
  14. package/dist/commands/help.d.ts.map +1 -0
  15. package/dist/commands/help.js +7 -0
  16. package/dist/commands/help.js.map +1 -0
  17. package/dist/commands/plugins.d.ts +2 -0
  18. package/dist/commands/plugins.d.ts.map +1 -0
  19. package/dist/commands/plugins.js +17 -0
  20. package/dist/commands/plugins.js.map +1 -0
  21. package/dist/commands/repl.d.ts +2 -0
  22. package/dist/commands/repl.d.ts.map +1 -0
  23. package/dist/commands/repl.js +7 -0
  24. package/dist/commands/repl.js.map +1 -0
  25. package/dist/commands/status.d.ts +2 -0
  26. package/dist/commands/status.d.ts.map +1 -0
  27. package/dist/commands/status.js +7 -0
  28. package/dist/commands/status.js.map +1 -0
  29. package/dist/commands/training.d.ts +2 -0
  30. package/dist/commands/training.d.ts.map +1 -0
  31. package/dist/commands/training.js +7 -0
  32. package/dist/commands/training.js.map +1 -0
  33. package/dist/commands/up.d.ts +2 -0
  34. package/dist/commands/up.d.ts.map +1 -0
  35. package/dist/commands/up.js +7 -0
  36. package/dist/commands/up.js.map +1 -0
  37. package/dist/commands/update.d.ts +2 -0
  38. package/dist/commands/update.d.ts.map +1 -0
  39. package/dist/commands/update.js +10 -0
  40. package/dist/commands/update.js.map +1 -0
  41. package/dist/components/Header.d.ts +7 -0
  42. package/dist/components/Header.d.ts.map +1 -0
  43. package/dist/components/Header.js +8 -0
  44. package/dist/components/Header.js.map +1 -0
  45. package/dist/components/Modal.d.ts +9 -0
  46. package/dist/components/Modal.d.ts.map +1 -0
  47. package/dist/components/Modal.js +7 -0
  48. package/dist/components/Modal.js.map +1 -0
  49. package/dist/components/ProgressBar.d.ts +8 -0
  50. package/dist/components/ProgressBar.d.ts.map +1 -0
  51. package/dist/components/ProgressBar.js +10 -0
  52. package/dist/components/ProgressBar.js.map +1 -0
  53. package/dist/components/SplitPanel.d.ts +9 -0
  54. package/dist/components/SplitPanel.d.ts.map +1 -0
  55. package/dist/components/SplitPanel.js +7 -0
  56. package/dist/components/SplitPanel.js.map +1 -0
  57. package/dist/components/StatusBar.d.ts +9 -0
  58. package/dist/components/StatusBar.d.ts.map +1 -0
  59. package/dist/components/StatusBar.js +7 -0
  60. package/dist/components/StatusBar.js.map +1 -0
  61. package/dist/components/Step.d.ts +9 -0
  62. package/dist/components/Step.d.ts.map +1 -0
  63. package/dist/components/Step.js +14 -0
  64. package/dist/components/Step.js.map +1 -0
  65. package/dist/components/TabBar.d.ts +9 -0
  66. package/dist/components/TabBar.d.ts.map +1 -0
  67. package/dist/components/TabBar.js +7 -0
  68. package/dist/components/TabBar.js.map +1 -0
  69. package/dist/components/ThinkingRow.d.ts +6 -0
  70. package/dist/components/ThinkingRow.d.ts.map +1 -0
  71. package/dist/components/ThinkingRow.js +7 -0
  72. package/dist/components/ThinkingRow.js.map +1 -0
  73. package/dist/components/index.d.ts +9 -0
  74. package/dist/components/index.d.ts.map +1 -0
  75. package/dist/components/index.js +9 -0
  76. package/dist/components/index.js.map +1 -0
  77. package/dist/crew/members.d.ts +3 -0
  78. package/dist/crew/members.d.ts.map +1 -0
  79. package/dist/crew/members.js +33 -0
  80. package/dist/crew/members.js.map +1 -0
  81. package/dist/hooks/useListNav.d.ts +12 -0
  82. package/dist/hooks/useListNav.d.ts.map +1 -0
  83. package/dist/hooks/useListNav.js +27 -0
  84. package/dist/hooks/useListNav.js.map +1 -0
  85. package/dist/index.d.ts +2 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +2 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/plugins/bundled.d.ts +3 -0
  90. package/dist/plugins/bundled.d.ts.map +1 -0
  91. package/dist/plugins/bundled.js +42 -0
  92. package/dist/plugins/bundled.js.map +1 -0
  93. package/dist/plugins/discover.d.ts +10 -0
  94. package/dist/plugins/discover.d.ts.map +1 -0
  95. package/dist/plugins/discover.js +48 -0
  96. package/dist/plugins/discover.js.map +1 -0
  97. package/dist/plugins/loader.d.ts +3 -0
  98. package/dist/plugins/loader.d.ts.map +1 -0
  99. package/dist/plugins/loader.js +28 -0
  100. package/dist/plugins/loader.js.map +1 -0
  101. package/dist/plugins/manifest.d.ts +76 -0
  102. package/dist/plugins/manifest.d.ts.map +1 -0
  103. package/dist/plugins/manifest.js +27 -0
  104. package/dist/plugins/manifest.js.map +1 -0
  105. package/dist/plugins/types.d.ts +16 -0
  106. package/dist/plugins/types.d.ts.map +1 -0
  107. package/dist/plugins/types.js +2 -0
  108. package/dist/plugins/types.js.map +1 -0
  109. package/dist/screens/Home.d.ts +2 -0
  110. package/dist/screens/Home.d.ts.map +1 -0
  111. package/dist/screens/Home.js +12 -0
  112. package/dist/screens/Home.js.map +1 -0
  113. package/dist/screens/Plugins.d.ts +7 -0
  114. package/dist/screens/Plugins.d.ts.map +1 -0
  115. package/dist/screens/Plugins.js +58 -0
  116. package/dist/screens/Plugins.js.map +1 -0
  117. package/dist/screens/Repl.d.ts +2 -0
  118. package/dist/screens/Repl.d.ts.map +1 -0
  119. package/dist/screens/Repl.js +17 -0
  120. package/dist/screens/Repl.js.map +1 -0
  121. package/dist/screens/Training.d.ts +2 -0
  122. package/dist/screens/Training.d.ts.map +1 -0
  123. package/dist/screens/Training.js +52 -0
  124. package/dist/screens/Training.js.map +1 -0
  125. package/dist/screens/Update.d.ts +6 -0
  126. package/dist/screens/Update.d.ts.map +1 -0
  127. package/dist/screens/Update.js +57 -0
  128. package/dist/screens/Update.js.map +1 -0
  129. package/dist/screens/Welcome.d.ts +6 -0
  130. package/dist/screens/Welcome.d.ts.map +1 -0
  131. package/dist/screens/Welcome.js +13 -0
  132. package/dist/screens/Welcome.js.map +1 -0
  133. package/dist/settings.d.ts +11 -0
  134. package/dist/settings.d.ts.map +1 -0
  135. package/dist/settings.js +27 -0
  136. package/dist/settings.js.map +1 -0
  137. package/dist/training/types.d.ts +20 -0
  138. package/dist/training/types.d.ts.map +1 -0
  139. package/dist/training/types.js +2 -0
  140. package/dist/training/types.js.map +1 -0
  141. package/dist/types.d.ts +31 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +2 -0
  144. package/dist/types.js.map +1 -0
  145. package/dist/update/checker.d.ts +12 -0
  146. package/dist/update/checker.d.ts.map +1 -0
  147. package/dist/update/checker.js +48 -0
  148. package/dist/update/checker.js.map +1 -0
  149. package/package.json +43 -0
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import { Step } from '../components/Step.js';
5
+ import { ProgressBar } from '../components/ProgressBar.js';
6
+ import { colors } from '../colors.js';
7
+ import { checkForUpdates, applyUpdate } from '../update/checker.js';
8
+ export function Update({ currentVersion }) {
9
+ const [phase, setPhase] = useState('checking');
10
+ const [checkResult, setCheckResult] = useState(null);
11
+ const [updateError, setUpdateError] = useState(null);
12
+ useEffect(() => {
13
+ if (phase !== 'checking')
14
+ return;
15
+ let cancelled = false;
16
+ checkForUpdates(currentVersion).then((result) => {
17
+ if (cancelled)
18
+ return;
19
+ setCheckResult(result);
20
+ if (result.error) {
21
+ setUpdateError(result.error);
22
+ setPhase('error');
23
+ }
24
+ else if (result.hasUpdate) {
25
+ setPhase('confirm');
26
+ }
27
+ else {
28
+ setPhase('up-to-date');
29
+ }
30
+ });
31
+ return () => { cancelled = true; };
32
+ }, [phase, currentVersion]);
33
+ useInput((input, key) => {
34
+ if (phase === 'confirm') {
35
+ if (input === 'y' || input === 'Y' || key.return) {
36
+ setPhase('updating');
37
+ }
38
+ else if (input === 'n' || input === 'N') {
39
+ setPhase('up-to-date');
40
+ }
41
+ }
42
+ });
43
+ useEffect(() => {
44
+ if (phase !== 'updating')
45
+ return;
46
+ const result = applyUpdate();
47
+ if (result.success) {
48
+ setPhase('complete');
49
+ }
50
+ else {
51
+ setUpdateError(result.error ?? 'Update failed');
52
+ setPhase('error');
53
+ }
54
+ }, [phase]);
55
+ return (_jsxs(Box, { flexDirection: "column", padding: 2, gap: 1, children: [_jsx(Text, { color: colors.muted, children: "$ pilot update" }), phase === 'checking' && (_jsx(Step, { label: "Checking for updates...", status: "active" })), phase === 'up-to-date' && (_jsxs(_Fragment, { children: [_jsx(Step, { label: "Version check complete", status: "done" }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: colors.success, bold: true, children: ["\u2708 Flight systems are current (", currentVersion, ")"] }) })] })), phase === 'confirm' && checkResult && (_jsxs(_Fragment, { children: [_jsx(Step, { label: "Update available", status: "done" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", gap: 1, children: [_jsxs(Text, { color: colors.text, children: [_jsx(Text, { bold: true, children: checkResult.current }), _jsx(Text, { color: colors.muted, children: " \u2192 " }), _jsx(Text, { bold: true, color: colors.success, children: checkResult.latest })] }), _jsx(Text, { color: colors.text, children: "Apply update? [Y/n]" })] })] })), phase === 'updating' && (_jsxs(_Fragment, { children: [_jsx(Step, { label: "Downloading update", status: "active" }), _jsx(ProgressBar, { progress: 0.5, label: "Installing..." })] })), phase === 'complete' && checkResult && (_jsxs(_Fragment, { children: [_jsx(Step, { label: "Update downloaded", status: "done" }), _jsx(Step, { label: "Update installed", status: "done" }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: colors.success, bold: true, children: ["\u2708 Flight systems upgraded to ", checkResult.latest, "!"] }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.muted, children: "Restart pilot to use new features" }) })] })), phase === 'error' && (_jsxs(_Fragment, { children: [_jsx(Step, { label: "Update failed", status: "error" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", gap: 1, children: [_jsx(Text, { color: colors.error, children: updateError }), _jsx(Text, { color: colors.muted, children: "Try manually: npm install -g @medalsocial/pilot@latest" })] })] }))] }));
56
+ }
57
+ //# sourceMappingURL=Update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Update.js","sourceRoot":"","sources":["../../src/screens/Update.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface WelcomeProps {
2
+ onContinue: () => void;
3
+ }
4
+ export declare function Welcome({ onContinue }: WelcomeProps): import("react/jsx-runtime").JSX.Element;
5
+ export {};
6
+ //# sourceMappingURL=Welcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Welcome.d.ts","sourceRoot":"","sources":["../../src/screens/Welcome.tsx"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,YAAY,2CAgCnD"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import { Header } from '../components/Header.js';
4
+ import { colors } from '../colors.js';
5
+ import { defaultCrew } from '../crew/members.js';
6
+ export function Welcome({ onContinue }) {
7
+ useInput((_input, key) => {
8
+ if (key.return)
9
+ onContinue();
10
+ });
11
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", gap: 1, padding: 2, children: [_jsx(Header, { size: "large" }), _jsx(Text, { bold: true, color: colors.text, children: "Welcome aboard, Captain." }), _jsx(Text, { color: colors.muted, children: "You have a full AI crew ready to work. Here's who's on board:" }), _jsx(Box, { flexDirection: "column", gap: 0, marginTop: 1, children: defaultCrew.map((member) => (_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: member.color, children: "\u25CF" }), _jsx(Text, { bold: true, color: colors.text, children: member.role }), _jsxs(Text, { color: colors.muted, children: ["\u2014 ", member.description] })] }, member.role))) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: colors.muted, children: ["Press ", _jsx(Text, { bold: true, color: colors.text, children: "Enter" }), " to start flying"] }) })] }));
12
+ }
13
+ //# sourceMappingURL=Welcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Welcome.js","sourceRoot":"","sources":["../../src/screens/Welcome.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMjD,MAAM,UAAU,OAAO,CAAC,EAAE,UAAU,EAAgB;IAClD,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM;YAAE,UAAU,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,aAChE,KAAC,MAAM,IAAC,IAAI,EAAC,OAAO,GAAG,EACvB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,IAAI,yCAEtB,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,8EAElB,EACP,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,YAC7C,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC3B,MAAC,GAAG,IAAmB,GAAG,EAAE,CAAC,aAC3B,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,uBAAU,EACnC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,IAAI,YAC1B,MAAM,CAAC,IAAI,GACP,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,wBAAK,MAAM,CAAC,WAAW,IAAQ,KALhD,MAAM,CAAC,IAAI,CAMf,CACP,CAAC,GACE,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,uBACjB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,IAAI,sBAAc,wBAC5C,GACH,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface PilotSettings {
2
+ onboarded: boolean;
3
+ lastRun?: string;
4
+ plugins: Record<string, {
5
+ enabled: boolean;
6
+ }>;
7
+ }
8
+ export declare function loadSettings(): PilotSettings;
9
+ export declare function saveSettings(settings: PilotSettings): void;
10
+ export declare function markOnboarded(): void;
11
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC/C;AAOD,wBAAgB,YAAY,IAAI,aAAa,CAM5C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAG1D;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
@@ -0,0 +1,27 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ const PILOT_DIR = join(homedir(), '.pilot');
5
+ const SETTINGS_FILE = join(PILOT_DIR, 'settings.json');
6
+ const DEFAULT_SETTINGS = {
7
+ onboarded: false,
8
+ plugins: {},
9
+ };
10
+ export function loadSettings() {
11
+ if (!existsSync(SETTINGS_FILE)) {
12
+ return { ...DEFAULT_SETTINGS };
13
+ }
14
+ const raw = JSON.parse(readFileSync(SETTINGS_FILE, 'utf-8'));
15
+ return { ...DEFAULT_SETTINGS, ...raw };
16
+ }
17
+ export function saveSettings(settings) {
18
+ mkdirSync(PILOT_DIR, { recursive: true });
19
+ writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2));
20
+ }
21
+ export function markOnboarded() {
22
+ const settings = loadSettings();
23
+ settings.onboarded = true;
24
+ settings.lastRun = new Date().toISOString();
25
+ saveSettings(settings);
26
+ }
27
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAQvD,MAAM,gBAAgB,GAAkB;IACtC,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACjC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,OAAO,EAAE,GAAG,gBAAgB,EAAE,GAAG,GAAG,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAuB;IAClD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface KnowledgeSource {
2
+ id: string;
3
+ type: 'sanity' | 'slack' | 'manual';
4
+ name: string;
5
+ description: string;
6
+ connected: boolean;
7
+ lastSync?: string;
8
+ documentCount?: number;
9
+ }
10
+ export interface TrainingRun {
11
+ id: number;
12
+ status: 'running' | 'complete' | 'failed';
13
+ steps: Array<{
14
+ label: string;
15
+ status: 'done' | 'active' | 'waiting';
16
+ }>;
17
+ sourcesIncluded: string[];
18
+ outputFiles: string[];
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/training/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;KACvC,CAAC,CAAC;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/training/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ export type StepStatus = 'done' | 'active' | 'waiting' | 'error';
2
+ export interface StepItem {
3
+ label: string;
4
+ detail?: string;
5
+ status: StepStatus;
6
+ }
7
+ export interface CrewMember {
8
+ role: string;
9
+ description: string;
10
+ skills: string[];
11
+ color: string;
12
+ }
13
+ export interface PluginManifest {
14
+ name: string;
15
+ namespace: string;
16
+ description: string;
17
+ provides: {
18
+ commands?: string[];
19
+ mcpServers?: string[];
20
+ };
21
+ permissions?: {
22
+ network?: string[];
23
+ };
24
+ roleBindings?: Record<string, string>;
25
+ }
26
+ export type TabId = string;
27
+ export interface Tab {
28
+ id: TabId;
29
+ label: string;
30
+ }
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export interface UpdateCheckResult {
2
+ current: string;
3
+ latest: string;
4
+ hasUpdate: boolean;
5
+ error?: string;
6
+ }
7
+ export declare function checkForUpdates(currentVersion: string): Promise<UpdateCheckResult>;
8
+ export declare function applyUpdate(): {
9
+ success: boolean;
10
+ error?: string;
11
+ };
12
+ //# sourceMappingURL=checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../src/update/checker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8BxF;AAED,wBAAgB,WAAW,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAalE"}
@@ -0,0 +1,48 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ export async function checkForUpdates(currentVersion) {
3
+ try {
4
+ const output = execFileSync('npm', ['view', '@medalsocial/pilot', 'version'], {
5
+ encoding: 'utf-8',
6
+ timeout: 10000,
7
+ });
8
+ const latest = String(output).trim();
9
+ return {
10
+ current: currentVersion,
11
+ latest,
12
+ hasUpdate: latest !== currentVersion,
13
+ };
14
+ }
15
+ catch (err) {
16
+ const message = err instanceof Error ? err.message : 'Unknown error';
17
+ // npm 404 means package isn't published yet — not an error
18
+ if (message.includes('404') || message.includes('Not Found')) {
19
+ return {
20
+ current: currentVersion,
21
+ latest: currentVersion,
22
+ hasUpdate: false,
23
+ };
24
+ }
25
+ return {
26
+ current: currentVersion,
27
+ latest: currentVersion,
28
+ hasUpdate: false,
29
+ error: message,
30
+ };
31
+ }
32
+ }
33
+ export function applyUpdate() {
34
+ try {
35
+ execFileSync('npm', ['install', '-g', '@medalsocial/pilot@latest'], {
36
+ encoding: 'utf-8',
37
+ timeout: 120000,
38
+ });
39
+ return { success: true };
40
+ }
41
+ catch (err) {
42
+ return {
43
+ success: false,
44
+ error: err instanceof Error ? err.message : 'Unknown error',
45
+ };
46
+ }
47
+ }
48
+ //# sourceMappingURL=checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.js","sourceRoot":"","sources":["../../src/update/checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,cAAsB;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,CAAC,EAAE;YAC5E,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAErC,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,MAAM;YACN,SAAS,EAAE,MAAM,KAAK,cAAc;SACrC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACrE,2DAA2D;QAC3D,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7D,OAAO;gBACL,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE,cAAc;gBACtB,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,cAAc;YACtB,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,OAAO;SACf,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,YAAY,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,2BAA2B,CAAC,EAAE;YAClE,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAC5D,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@medalsocial/pilot",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Your AI crew, ready to fly. Medal Social's AI-powered CLI platform.",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Medal-Social/pilot.git",
10
+ "directory": "packages/cli"
11
+ },
12
+ "bin": {
13
+ "pilot": "dist/bin/pilot.js"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "!dist/**/*.test.*"
18
+ ],
19
+ "publishConfig": {
20
+ "access": "public",
21
+ "provenance": false
22
+ },
23
+ "scripts": {
24
+ "dev": "tsx watch src/bin/pilot.ts",
25
+ "build": "tsc",
26
+ "test": "vitest",
27
+ "prepublishOnly": "tsc"
28
+ },
29
+ "dependencies": {
30
+ "commander": "^13.0.0",
31
+ "ink": "^5.1.0",
32
+ "ink-text-input": "^6.0.0",
33
+ "react": "^18.3.0",
34
+ "smol-toml": "^1.6.1",
35
+ "zod": "^3.24.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^25.6.0",
39
+ "@types/react": "^18.3.0",
40
+ "ink-testing-library": "^4.0.0",
41
+ "tsx": "^4.19.0"
42
+ }
43
+ }