suzi-cli 0.1.13 → 0.1.15

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 (77) hide show
  1. package/CODEX_CLAUDE_ONBOARDING_DRAFT.md +318 -0
  2. package/dist/commands/accounts.d.ts.map +1 -1
  3. package/dist/commands/accounts.js +27 -7
  4. package/dist/commands/accounts.js.map +1 -1
  5. package/dist/commands/agent.d.ts +45 -0
  6. package/dist/commands/agent.d.ts.map +1 -0
  7. package/dist/commands/agent.js +1000 -0
  8. package/dist/commands/agent.js.map +1 -0
  9. package/dist/commands/create.d.ts +4 -0
  10. package/dist/commands/create.d.ts.map +1 -1
  11. package/dist/commands/create.js +379 -3
  12. package/dist/commands/create.js.map +1 -1
  13. package/dist/commands/debug.d.ts.map +1 -1
  14. package/dist/commands/debug.js +124 -41
  15. package/dist/commands/debug.js.map +1 -1
  16. package/dist/commands/list-actions.d.ts.map +1 -1
  17. package/dist/commands/list-actions.js +35 -4
  18. package/dist/commands/list-actions.js.map +1 -1
  19. package/dist/commands/list-triggers.d.ts.map +1 -1
  20. package/dist/commands/list-triggers.js +38 -10
  21. package/dist/commands/list-triggers.js.map +1 -1
  22. package/dist/commands/portfolio.d.ts.map +1 -1
  23. package/dist/commands/portfolio.js +113 -14
  24. package/dist/commands/portfolio.js.map +1 -1
  25. package/dist/commands/preferences.d.ts.map +1 -1
  26. package/dist/commands/preferences.js +119 -26
  27. package/dist/commands/preferences.js.map +1 -1
  28. package/dist/commands/transactions.d.ts.map +1 -1
  29. package/dist/commands/transactions.js +18 -4
  30. package/dist/commands/transactions.js.map +1 -1
  31. package/dist/commands/update.d.ts +3 -0
  32. package/dist/commands/update.d.ts.map +1 -0
  33. package/dist/commands/update.js +265 -0
  34. package/dist/commands/update.js.map +1 -0
  35. package/dist/index.js +35 -27
  36. package/dist/index.js.map +1 -1
  37. package/dist/lib/config.d.ts +13 -0
  38. package/dist/lib/config.d.ts.map +1 -1
  39. package/dist/lib/config.js +25 -0
  40. package/dist/lib/config.js.map +1 -1
  41. package/dist/lib/session-registry.d.ts +57 -0
  42. package/dist/lib/session-registry.d.ts.map +1 -0
  43. package/dist/lib/session-registry.js +192 -0
  44. package/dist/lib/session-registry.js.map +1 -0
  45. package/dist/lib/tooling-preflight.d.ts +17 -0
  46. package/dist/lib/tooling-preflight.d.ts.map +1 -0
  47. package/dist/lib/tooling-preflight.js +519 -0
  48. package/dist/lib/tooling-preflight.js.map +1 -0
  49. package/dist/utils/agent-picker.d.ts +16 -0
  50. package/dist/utils/agent-picker.d.ts.map +1 -0
  51. package/dist/utils/agent-picker.js +83 -0
  52. package/dist/utils/agent-picker.js.map +1 -0
  53. package/dist/utils/resolver.d.ts +35 -0
  54. package/dist/utils/resolver.d.ts.map +1 -0
  55. package/dist/utils/resolver.js +157 -0
  56. package/dist/utils/resolver.js.map +1 -0
  57. package/dist/utils/tty.d.ts +26 -0
  58. package/dist/utils/tty.d.ts.map +1 -0
  59. package/dist/utils/tty.js +50 -0
  60. package/dist/utils/tty.js.map +1 -0
  61. package/dist/utils/ui.d.ts +4 -0
  62. package/dist/utils/ui.d.ts.map +1 -1
  63. package/dist/utils/ui.js +9 -0
  64. package/dist/utils/ui.js.map +1 -1
  65. package/package.json +1 -1
  66. package/dist/commands/agents.d.ts +0 -3
  67. package/dist/commands/agents.d.ts.map +0 -1
  68. package/dist/commands/agents.js +0 -309
  69. package/dist/commands/agents.js.map +0 -1
  70. package/dist/commands/deploy.d.ts +0 -3
  71. package/dist/commands/deploy.d.ts.map +0 -1
  72. package/dist/commands/deploy.js +0 -174
  73. package/dist/commands/deploy.js.map +0 -1
  74. package/dist/commands/validate.d.ts +0 -3
  75. package/dist/commands/validate.d.ts.map +0 -1
  76. package/dist/commands/validate.js +0 -165
  77. package/dist/commands/validate.js.map +0 -1
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.recordSessionStart = recordSessionStart;
7
+ exports.recordDeployment = recordDeployment;
8
+ exports.getSessionById = getSessionById;
9
+ exports.getRecentSessions = getRecentSessions;
10
+ exports.getAllSessions = getAllSessions;
11
+ exports.cleanOldSessions = cleanOldSessions;
12
+ exports.getLatestSessionForProject = getLatestSessionForProject;
13
+ exports.archiveSession = archiveSession;
14
+ const node_fs_1 = __importDefault(require("node:fs"));
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const SUZI_HOME = node_path_1.default.join(process.env.HOME || '~', '.suzi');
17
+ const REGISTRY_PATH = node_path_1.default.join(SUZI_HOME, 'sessions.json');
18
+ const MAX_SESSIONS = 200;
19
+ /**
20
+ * Read the session registry from disk.
21
+ * Returns empty registry if file doesn't exist or is corrupted.
22
+ */
23
+ function readRegistry() {
24
+ try {
25
+ if (node_fs_1.default.existsSync(REGISTRY_PATH)) {
26
+ const raw = node_fs_1.default.readFileSync(REGISTRY_PATH, 'utf-8');
27
+ return JSON.parse(raw);
28
+ }
29
+ }
30
+ catch {
31
+ // Corrupted or invalid - return empty
32
+ }
33
+ return { version: '1.0.0', sessions: [] };
34
+ }
35
+ /**
36
+ * Write the session registry to disk.
37
+ * Silently fails if write operation fails.
38
+ */
39
+ function writeRegistry(registry) {
40
+ try {
41
+ node_fs_1.default.mkdirSync(SUZI_HOME, { recursive: true });
42
+ node_fs_1.default.writeFileSync(REGISTRY_PATH, JSON.stringify(registry, null, 2));
43
+ }
44
+ catch {
45
+ // Silent failure - don't crash CLI
46
+ }
47
+ }
48
+ /**
49
+ * Trim sessions to keep only the most recent MAX_SESSIONS entries.
50
+ */
51
+ function trimSessions(sessions) {
52
+ if (sessions.length <= MAX_SESSIONS) {
53
+ return sessions;
54
+ }
55
+ // Keep the most recent sessions
56
+ return sessions
57
+ .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
58
+ .slice(0, MAX_SESSIONS);
59
+ }
60
+ /**
61
+ * Record a new session start.
62
+ * Appends a new session entry to the registry.
63
+ */
64
+ function recordSessionStart(sessionId, projectPath, projectName, aiProvider, model = 'claude-opus-4-6') {
65
+ try {
66
+ const registry = readRegistry();
67
+ const newSession = {
68
+ sessionId,
69
+ createdAt: new Date().toISOString(),
70
+ projectPath,
71
+ projectName,
72
+ aiProvider,
73
+ model,
74
+ deployments: [],
75
+ };
76
+ registry.sessions.push(newSession);
77
+ registry.sessions = trimSessions(registry.sessions);
78
+ writeRegistry(registry);
79
+ }
80
+ catch {
81
+ // Silent failure
82
+ }
83
+ }
84
+ /**
85
+ * Record a deployment for a session.
86
+ * Updates the session's deployments array.
87
+ */
88
+ function recordDeployment(sessionId, agentId, title) {
89
+ try {
90
+ const registry = readRegistry();
91
+ // Find the session by ID
92
+ const session = registry.sessions.find(s => s.sessionId === sessionId);
93
+ if (!session) {
94
+ return; // Session not found - skip
95
+ }
96
+ // Add deployment
97
+ session.deployments.push({
98
+ agentId,
99
+ deployedAt: new Date().toISOString(),
100
+ title,
101
+ });
102
+ writeRegistry(registry);
103
+ }
104
+ catch {
105
+ // Silent failure
106
+ }
107
+ }
108
+ /**
109
+ * Get a session by ID.
110
+ * Returns undefined if not found.
111
+ */
112
+ function getSessionById(sessionId) {
113
+ try {
114
+ const registry = readRegistry();
115
+ return registry.sessions.find(s => s.sessionId === sessionId);
116
+ }
117
+ catch {
118
+ return undefined;
119
+ }
120
+ }
121
+ /**
122
+ * Get the N most recent sessions.
123
+ * Returns sessions sorted by creation date (most recent first).
124
+ */
125
+ function getRecentSessions(limit = 50) {
126
+ try {
127
+ const registry = readRegistry();
128
+ return registry.sessions
129
+ .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
130
+ .slice(0, limit);
131
+ }
132
+ catch {
133
+ return [];
134
+ }
135
+ }
136
+ /**
137
+ * Get all sessions.
138
+ * Returns sessions sorted by creation date (most recent first).
139
+ */
140
+ function getAllSessions() {
141
+ try {
142
+ const registry = readRegistry();
143
+ return registry.sessions.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
144
+ }
145
+ catch {
146
+ return [];
147
+ }
148
+ }
149
+ /**
150
+ * Clean sessions older than the specified retention period.
151
+ * @param retentionDays Number of days to retain sessions
152
+ */
153
+ function cleanOldSessions(retentionDays = 90) {
154
+ try {
155
+ const registry = readRegistry();
156
+ const cutoffDate = new Date();
157
+ cutoffDate.setDate(cutoffDate.getDate() - retentionDays);
158
+ registry.sessions = registry.sessions.filter(s => new Date(s.createdAt) >= cutoffDate);
159
+ writeRegistry(registry);
160
+ }
161
+ catch {
162
+ // Silent failure
163
+ }
164
+ }
165
+ /**
166
+ * Find the most recent session for a given project path and AI provider.
167
+ * Returns undefined if no matching session exists.
168
+ */
169
+ function getLatestSessionForProject(projectPath, aiProvider) {
170
+ try {
171
+ const registry = readRegistry();
172
+ const matches = registry.sessions.filter(s => s.projectPath === projectPath && s.aiProvider === aiProvider);
173
+ if (matches.length === 0)
174
+ return undefined;
175
+ // Return most recent
176
+ return matches.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())[0];
177
+ }
178
+ catch {
179
+ return undefined;
180
+ }
181
+ }
182
+ /**
183
+ * Archive a session (keep it for history but mark as superseded).
184
+ * NOTE: We don't delete sessions to preserve audit trail.
185
+ * Future enhancement: add 'archived' or 'superseded' field to SessionEntry.
186
+ */
187
+ function archiveSession(sessionId) {
188
+ // For now, we'll keep sessions as-is (no deletion)
189
+ // This preserves the audit trail for "which session created which agent"
190
+ // Future: add metadata like { archived: true, supersededBy: 'new-session-id' }
191
+ }
192
+ //# sourceMappingURL=session-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../src/lib/session-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type ToolingStepStatus = 'installed' | 'missing' | 'installing' | 'failed' | 'skipped' | 'deferred';
2
+ export interface ToolingPreflightResult {
3
+ ran: boolean;
4
+ codexBinary: ToolingStepStatus;
5
+ codexLogin: ToolingStepStatus;
6
+ claudeCodexMcp: ToolingStepStatus;
7
+ }
8
+ export interface ToolingDetectionState {
9
+ codexBinaryInstalled: boolean;
10
+ codexLoginCompleted: boolean;
11
+ claudeCodexMcpInstalled: boolean;
12
+ }
13
+ export declare function detectToolingStateForPreflight(): Promise<ToolingDetectionState>;
14
+ export declare function runToolingPreflightForStart(options?: {
15
+ preDetectedState?: ToolingDetectionState;
16
+ }): Promise<ToolingPreflightResult>;
17
+ //# sourceMappingURL=tooling-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooling-preflight.d.ts","sourceRoot":"","sources":["../../src/lib/tooling-preflight.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3G,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,iBAAiB,CAAC;IAC/B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,cAAc,EAAE,iBAAiB,CAAC;CACnC;AAYD,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAoOD,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAgBrF;AAuQD,wBAAsB,2BAA2B,CAAC,OAAO,CAAC,EAAE;IAC1D,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAgFlC"}