@ekkos/cli 0.2.8 → 0.2.10

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 (36) hide show
  1. package/dist/cache/LocalSessionStore.d.ts +34 -21
  2. package/dist/cache/LocalSessionStore.js +169 -53
  3. package/dist/cache/capture.d.ts +19 -11
  4. package/dist/cache/capture.js +243 -76
  5. package/dist/cache/types.d.ts +14 -1
  6. package/dist/commands/doctor.d.ts +10 -0
  7. package/dist/commands/doctor.js +148 -73
  8. package/dist/commands/hooks.d.ts +109 -0
  9. package/dist/commands/hooks.js +668 -0
  10. package/dist/commands/run.d.ts +1 -0
  11. package/dist/commands/run.js +69 -21
  12. package/dist/index.js +42 -1
  13. package/dist/restore/RestoreOrchestrator.d.ts +17 -3
  14. package/dist/restore/RestoreOrchestrator.js +64 -22
  15. package/dist/utils/paths.d.ts +125 -0
  16. package/dist/utils/paths.js +283 -0
  17. package/dist/utils/session-words.json +30 -111
  18. package/package.json +1 -1
  19. package/templates/ekkos-manifest.json +223 -0
  20. package/templates/helpers/json-parse.cjs +101 -0
  21. package/templates/hooks/assistant-response.ps1 +256 -0
  22. package/templates/hooks/assistant-response.sh +124 -64
  23. package/templates/hooks/session-start.ps1 +107 -2
  24. package/templates/hooks/session-start.sh +201 -166
  25. package/templates/hooks/stop.ps1 +124 -3
  26. package/templates/hooks/stop.sh +470 -843
  27. package/templates/hooks/user-prompt-submit.ps1 +107 -22
  28. package/templates/hooks/user-prompt-submit.sh +403 -393
  29. package/templates/project-stubs/session-start.ps1 +63 -0
  30. package/templates/project-stubs/session-start.sh +55 -0
  31. package/templates/project-stubs/stop.ps1 +63 -0
  32. package/templates/project-stubs/stop.sh +55 -0
  33. package/templates/project-stubs/user-prompt-submit.ps1 +63 -0
  34. package/templates/project-stubs/user-prompt-submit.sh +55 -0
  35. package/templates/shared/hooks-enabled.json +22 -0
  36. package/templates/shared/session-words.json +45 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * ekkOS Path Utilities - Instance-Aware Path Resolution
3
+ *
4
+ * Per ekkOS Onboarding Spec v1.2 FINAL + ADDENDUM:
5
+ * - All Tier 0 cache paths MUST be: ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.jsonl
6
+ * - All persisted records MUST include: instanceId, sessionId, sessionName
7
+ *
8
+ * This module provides canonical path helpers for the entire CLI.
9
+ */
10
+ export declare const DEFAULT_INSTANCE_ID = "default";
11
+ /**
12
+ * Normalize instanceId - use 'default' if empty/undefined
13
+ */
14
+ export declare function normalizeInstanceId(instanceId?: string | null): string;
15
+ /**
16
+ * Get the base ekkOS config directory
17
+ * ~/.ekkos on Unix, %USERPROFILE%\.ekkos on Windows
18
+ */
19
+ export declare function getConfigDir(): string;
20
+ /**
21
+ * Get the cache directory
22
+ * ~/.ekkos/cache
23
+ */
24
+ export declare function getCacheDir(): string;
25
+ /**
26
+ * Get the sessions cache directory
27
+ * ~/.ekkos/cache/sessions
28
+ */
29
+ export declare function getSessionsDir(): string;
30
+ /**
31
+ * Get the instance-scoped sessions directory
32
+ * ~/.ekkos/cache/sessions/{instanceId}
33
+ */
34
+ export declare function getInstanceSessionsDir(instanceId?: string | null): string;
35
+ /**
36
+ * Get the path to a session's turns JSONL file (instance-scoped)
37
+ * ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.jsonl
38
+ */
39
+ export declare function getTurnsPath(instanceId: string | null | undefined, sessionId: string): string;
40
+ /**
41
+ * Get the path to a session's metadata file (instance-scoped)
42
+ * ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.meta.json
43
+ */
44
+ export declare function getMetaPath(instanceId: string | null | undefined, sessionId: string): string;
45
+ /**
46
+ * Get the path to a session's stream log file (instance-scoped)
47
+ * ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.stream.jsonl
48
+ */
49
+ export declare function getStreamLogPath(instanceId: string | null | undefined, sessionId: string): string;
50
+ /**
51
+ * Get the path to a session's state file (instance-scoped)
52
+ * ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.state.json
53
+ */
54
+ export declare function getStreamStatePath(instanceId: string | null | undefined, sessionId: string): string;
55
+ /**
56
+ * Get the path to the session index file (instance-scoped)
57
+ * ~/.ekkos/cache/sessions/{instanceId}/index.json
58
+ */
59
+ export declare function getIndexPath(instanceId?: string | null): string;
60
+ /**
61
+ * Get the instances directory
62
+ * ~/.ekkos/instances
63
+ */
64
+ export declare function getInstancesDir(): string;
65
+ /**
66
+ * Get the path to an instance file
67
+ * ~/.ekkos/instances/{instanceId}.json
68
+ */
69
+ export declare function getInstanceFilePath(instanceId: string): string;
70
+ /**
71
+ * Legacy path for backward compatibility (read-only fallback)
72
+ * ~/.ekkos/cache/sessions/{sessionId}.jsonl
73
+ */
74
+ export declare function getLegacyTurnsPath(sessionId: string): string;
75
+ /**
76
+ * Legacy metadata path for backward compatibility (read-only fallback)
77
+ * ~/.ekkos/cache/sessions/{sessionId}.meta.json
78
+ */
79
+ export declare function getLegacyMetaPath(sessionId: string): string;
80
+ /**
81
+ * Legacy stream log path for backward compatibility (read-only fallback)
82
+ * ~/.ekkos/cache/sessions/{sessionId}.stream.jsonl
83
+ */
84
+ export declare function getLegacyStreamLogPath(sessionId: string): string;
85
+ /**
86
+ * Ensure a directory exists (mkdirp)
87
+ */
88
+ export declare function ensureDir(dirPath: string): void;
89
+ /**
90
+ * Ensure the instance sessions directory exists
91
+ */
92
+ export declare function ensureInstanceDir(instanceId?: string | null): string;
93
+ /**
94
+ * Ensure the base ekkOS directories exist
95
+ */
96
+ export declare function ensureBaseDirs(): void;
97
+ /**
98
+ * List all instance directories under sessions cache
99
+ * Returns array of instanceIds
100
+ */
101
+ export declare function listInstanceIds(): string[];
102
+ /**
103
+ * Check if a file exists at the instance-scoped path
104
+ * If not, check legacy path and return which one exists (if any)
105
+ */
106
+ export declare function findTurnsFile(instanceId: string | null | undefined, sessionId: string): {
107
+ path: string;
108
+ isLegacy: boolean;
109
+ } | null;
110
+ /**
111
+ * Check if a meta file exists at the instance-scoped path
112
+ * If not, check legacy path and return which one exists (if any)
113
+ */
114
+ export declare function findMetaFile(instanceId: string | null | undefined, sessionId: string): {
115
+ path: string;
116
+ isLegacy: boolean;
117
+ } | null;
118
+ /**
119
+ * Check if a stream log exists at the instance-scoped path
120
+ * If not, check legacy path and return which one exists (if any)
121
+ */
122
+ export declare function findStreamLogFile(instanceId: string | null | undefined, sessionId: string): {
123
+ path: string;
124
+ isLegacy: boolean;
125
+ } | null;
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+ /**
3
+ * ekkOS Path Utilities - Instance-Aware Path Resolution
4
+ *
5
+ * Per ekkOS Onboarding Spec v1.2 FINAL + ADDENDUM:
6
+ * - All Tier 0 cache paths MUST be: ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.jsonl
7
+ * - All persisted records MUST include: instanceId, sessionId, sessionName
8
+ *
9
+ * This module provides canonical path helpers for the entire CLI.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.DEFAULT_INSTANCE_ID = void 0;
46
+ exports.normalizeInstanceId = normalizeInstanceId;
47
+ exports.getConfigDir = getConfigDir;
48
+ exports.getCacheDir = getCacheDir;
49
+ exports.getSessionsDir = getSessionsDir;
50
+ exports.getInstanceSessionsDir = getInstanceSessionsDir;
51
+ exports.getTurnsPath = getTurnsPath;
52
+ exports.getMetaPath = getMetaPath;
53
+ exports.getStreamLogPath = getStreamLogPath;
54
+ exports.getStreamStatePath = getStreamStatePath;
55
+ exports.getIndexPath = getIndexPath;
56
+ exports.getInstancesDir = getInstancesDir;
57
+ exports.getInstanceFilePath = getInstanceFilePath;
58
+ exports.getLegacyTurnsPath = getLegacyTurnsPath;
59
+ exports.getLegacyMetaPath = getLegacyMetaPath;
60
+ exports.getLegacyStreamLogPath = getLegacyStreamLogPath;
61
+ exports.ensureDir = ensureDir;
62
+ exports.ensureInstanceDir = ensureInstanceDir;
63
+ exports.ensureBaseDirs = ensureBaseDirs;
64
+ exports.listInstanceIds = listInstanceIds;
65
+ exports.findTurnsFile = findTurnsFile;
66
+ exports.findMetaFile = findMetaFile;
67
+ exports.findStreamLogFile = findStreamLogFile;
68
+ const path = __importStar(require("path"));
69
+ const os = __importStar(require("os"));
70
+ const fs = __importStar(require("fs"));
71
+ // Base directories
72
+ const HOME = os.homedir();
73
+ const EKKOS_DIR = path.join(HOME, '.ekkos');
74
+ const CACHE_DIR = path.join(EKKOS_DIR, 'cache');
75
+ const SESSIONS_DIR = path.join(CACHE_DIR, 'sessions');
76
+ const INSTANCES_DIR = path.join(EKKOS_DIR, 'instances');
77
+ // Default instanceId when none provided (backward compatibility)
78
+ exports.DEFAULT_INSTANCE_ID = 'default';
79
+ /**
80
+ * Normalize instanceId - use 'default' if empty/undefined
81
+ */
82
+ function normalizeInstanceId(instanceId) {
83
+ if (!instanceId || instanceId.trim() === '') {
84
+ return exports.DEFAULT_INSTANCE_ID;
85
+ }
86
+ return instanceId.trim();
87
+ }
88
+ /**
89
+ * Get the base ekkOS config directory
90
+ * ~/.ekkos on Unix, %USERPROFILE%\.ekkos on Windows
91
+ */
92
+ function getConfigDir() {
93
+ return EKKOS_DIR;
94
+ }
95
+ /**
96
+ * Get the cache directory
97
+ * ~/.ekkos/cache
98
+ */
99
+ function getCacheDir() {
100
+ return CACHE_DIR;
101
+ }
102
+ /**
103
+ * Get the sessions cache directory
104
+ * ~/.ekkos/cache/sessions
105
+ */
106
+ function getSessionsDir() {
107
+ return SESSIONS_DIR;
108
+ }
109
+ /**
110
+ * Get the instance-scoped sessions directory
111
+ * ~/.ekkos/cache/sessions/{instanceId}
112
+ */
113
+ function getInstanceSessionsDir(instanceId) {
114
+ const normalizedId = normalizeInstanceId(instanceId);
115
+ return path.join(SESSIONS_DIR, normalizedId);
116
+ }
117
+ /**
118
+ * Get the path to a session's turns JSONL file (instance-scoped)
119
+ * ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.jsonl
120
+ */
121
+ function getTurnsPath(instanceId, sessionId) {
122
+ const instanceDir = getInstanceSessionsDir(instanceId);
123
+ return path.join(instanceDir, `${sessionId}.jsonl`);
124
+ }
125
+ /**
126
+ * Get the path to a session's metadata file (instance-scoped)
127
+ * ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.meta.json
128
+ */
129
+ function getMetaPath(instanceId, sessionId) {
130
+ const instanceDir = getInstanceSessionsDir(instanceId);
131
+ return path.join(instanceDir, `${sessionId}.meta.json`);
132
+ }
133
+ /**
134
+ * Get the path to a session's stream log file (instance-scoped)
135
+ * ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.stream.jsonl
136
+ */
137
+ function getStreamLogPath(instanceId, sessionId) {
138
+ const instanceDir = getInstanceSessionsDir(instanceId);
139
+ return path.join(instanceDir, `${sessionId}.stream.jsonl`);
140
+ }
141
+ /**
142
+ * Get the path to a session's state file (instance-scoped)
143
+ * ~/.ekkos/cache/sessions/{instanceId}/{sessionId}.state.json
144
+ */
145
+ function getStreamStatePath(instanceId, sessionId) {
146
+ const instanceDir = getInstanceSessionsDir(instanceId);
147
+ return path.join(instanceDir, `${sessionId}.state.json`);
148
+ }
149
+ /**
150
+ * Get the path to the session index file (instance-scoped)
151
+ * ~/.ekkos/cache/sessions/{instanceId}/index.json
152
+ */
153
+ function getIndexPath(instanceId) {
154
+ const instanceDir = getInstanceSessionsDir(instanceId);
155
+ return path.join(instanceDir, 'index.json');
156
+ }
157
+ /**
158
+ * Get the instances directory
159
+ * ~/.ekkos/instances
160
+ */
161
+ function getInstancesDir() {
162
+ return INSTANCES_DIR;
163
+ }
164
+ /**
165
+ * Get the path to an instance file
166
+ * ~/.ekkos/instances/{instanceId}.json
167
+ */
168
+ function getInstanceFilePath(instanceId) {
169
+ return path.join(INSTANCES_DIR, `${instanceId}.json`);
170
+ }
171
+ /**
172
+ * Legacy path for backward compatibility (read-only fallback)
173
+ * ~/.ekkos/cache/sessions/{sessionId}.jsonl
174
+ */
175
+ function getLegacyTurnsPath(sessionId) {
176
+ return path.join(SESSIONS_DIR, `${sessionId}.jsonl`);
177
+ }
178
+ /**
179
+ * Legacy metadata path for backward compatibility (read-only fallback)
180
+ * ~/.ekkos/cache/sessions/{sessionId}.meta.json
181
+ */
182
+ function getLegacyMetaPath(sessionId) {
183
+ return path.join(SESSIONS_DIR, `${sessionId}.meta.json`);
184
+ }
185
+ /**
186
+ * Legacy stream log path for backward compatibility (read-only fallback)
187
+ * ~/.ekkos/cache/sessions/{sessionId}.stream.jsonl
188
+ */
189
+ function getLegacyStreamLogPath(sessionId) {
190
+ return path.join(SESSIONS_DIR, `${sessionId}.stream.jsonl`);
191
+ }
192
+ /**
193
+ * Ensure a directory exists (mkdirp)
194
+ */
195
+ function ensureDir(dirPath) {
196
+ if (!fs.existsSync(dirPath)) {
197
+ fs.mkdirSync(dirPath, { recursive: true });
198
+ }
199
+ }
200
+ /**
201
+ * Ensure the instance sessions directory exists
202
+ */
203
+ function ensureInstanceDir(instanceId) {
204
+ const instanceDir = getInstanceSessionsDir(instanceId);
205
+ ensureDir(instanceDir);
206
+ return instanceDir;
207
+ }
208
+ /**
209
+ * Ensure the base ekkOS directories exist
210
+ */
211
+ function ensureBaseDirs() {
212
+ ensureDir(EKKOS_DIR);
213
+ ensureDir(CACHE_DIR);
214
+ ensureDir(SESSIONS_DIR);
215
+ ensureDir(INSTANCES_DIR);
216
+ }
217
+ /**
218
+ * List all instance directories under sessions cache
219
+ * Returns array of instanceIds
220
+ */
221
+ function listInstanceIds() {
222
+ ensureDir(SESSIONS_DIR);
223
+ try {
224
+ const entries = fs.readdirSync(SESSIONS_DIR, { withFileTypes: true });
225
+ return entries
226
+ .filter(e => e.isDirectory())
227
+ .map(e => e.name);
228
+ }
229
+ catch {
230
+ return [];
231
+ }
232
+ }
233
+ /**
234
+ * Check if a file exists at the instance-scoped path
235
+ * If not, check legacy path and return which one exists (if any)
236
+ */
237
+ function findTurnsFile(instanceId, sessionId) {
238
+ // Try instance-scoped path first
239
+ const instancePath = getTurnsPath(instanceId, sessionId);
240
+ if (fs.existsSync(instancePath)) {
241
+ return { path: instancePath, isLegacy: false };
242
+ }
243
+ // Try legacy path as fallback (read-only)
244
+ const legacyPath = getLegacyTurnsPath(sessionId);
245
+ if (fs.existsSync(legacyPath)) {
246
+ return { path: legacyPath, isLegacy: true };
247
+ }
248
+ return null;
249
+ }
250
+ /**
251
+ * Check if a meta file exists at the instance-scoped path
252
+ * If not, check legacy path and return which one exists (if any)
253
+ */
254
+ function findMetaFile(instanceId, sessionId) {
255
+ // Try instance-scoped path first
256
+ const instancePath = getMetaPath(instanceId, sessionId);
257
+ if (fs.existsSync(instancePath)) {
258
+ return { path: instancePath, isLegacy: false };
259
+ }
260
+ // Try legacy path as fallback (read-only)
261
+ const legacyPath = getLegacyMetaPath(sessionId);
262
+ if (fs.existsSync(legacyPath)) {
263
+ return { path: legacyPath, isLegacy: true };
264
+ }
265
+ return null;
266
+ }
267
+ /**
268
+ * Check if a stream log exists at the instance-scoped path
269
+ * If not, check legacy path and return which one exists (if any)
270
+ */
271
+ function findStreamLogFile(instanceId, sessionId) {
272
+ // Try instance-scoped path first
273
+ const instancePath = getStreamLogPath(instanceId, sessionId);
274
+ if (fs.existsSync(instancePath)) {
275
+ return { path: instancePath, isLegacy: false };
276
+ }
277
+ // Try legacy path as fallback (read-only)
278
+ const legacyPath = getLegacyStreamLogPath(sessionId);
279
+ if (fs.existsSync(legacyPath)) {
280
+ return { path: legacyPath, isLegacy: true };
281
+ }
282
+ return null;
283
+ }
@@ -1,119 +1,38 @@
1
1
  {
2
2
  "adjectives": [
3
- "turbo", "mega", "hyper", "ultra", "super", "cosmic", "atomic", "quantum",
4
- "stellar", "epic", "mighty", "zippy", "rapid", "swift", "brisk",
5
- "hasty", "quick", "snappy", "speedy", "vivid",
6
- "happy", "jolly", "merry", "cheerful", "bright", "sunny", "golden", "shiny",
7
- "gleaming", "radiant", "glowing", "beaming", "sparkling", "dazzling", "brilliant",
8
- "vibrant", "lively", "perky", "peppy", "bouncy",
9
- "groovy", "jazzy", "funky", "zesty", "spicy", "crispy", "fluffy", "bubbly",
10
- "fizzy", "sparkly", "chunky", "sassy", "quirky", "wacky", "zany",
11
- "silly", "goofy", "witty", "clever", "punchy",
12
- "slick", "sleek", "smooth", "polished", "refined", "elegant", "fancy", "dapper",
13
- "stylish", "chic", "classy", "posh", "swanky", "ritzy", "plush",
14
- "luxe", "deluxe", "premium", "elite", "prime",
15
- "cyber", "digital", "binary", "pixel", "vector", "matrix", "neural", "quantum",
16
- "crypto", "techno", "electric", "ionic", "plasma", "laser", "photon",
17
- "nano", "micro", "giga", "mega", "tera",
18
- "solar", "lunar", "cosmic", "stellar", "nebula", "aurora", "crystal", "prism",
19
- "frost", "icy", "frozen", "arctic", "polar", "alpine", "misty",
20
- "foggy", "hazy", "cloudy", "stormy", "windy",
21
- "crimson", "scarlet", "ruby", "amber", "golden", "lime", "jade", "teal",
22
- "azure", "cobalt", "violet", "purple", "magenta", "coral", "peach",
23
- "bronze", "silver", "chrome", "onyx", "pearl",
24
- "bold", "brave", "keen", "noble", "royal", "regal", "majestic", "grand",
25
- "proud", "fierce", "wild", "free", "pure", "true", "real",
26
- "honest", "loyal", "trusty", "sturdy", "solid",
27
- "tiny", "mini", "micro", "petite", "small", "compact", "cozy", "snug",
28
- "large", "huge", "giant", "massive", "grand", "vast", "broad",
29
- "wide", "tall", "long", "big", "great",
30
- "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta",
31
- "iota", "kappa", "lambda", "omega", "sigma", "tau", "phi",
32
- "chi", "psi", "rho", "nu", "xi",
33
- "metal", "steel", "iron", "copper", "bronze", "brass", "titanium", "platinum",
34
- "diamond", "crystal", "glass", "marble", "granite", "stone", "wood",
35
- "oak", "pine", "cedar", "bamboo", "silk", "velvet", "cotton", "wool",
36
- "leather", "rubber", "plastic", "ceramic", "porcelain", "clay", "adobe",
37
- "striped", "dotted", "spotted", "checked", "plaid", "solid", "gradient", "faded",
38
- "mottled", "marbled", "speckled", "flecked", "dappled", "tinted", "shaded",
39
- "frosted", "glazed", "painted", "carved", "etched"
3
+ "ace", "big", "blu", "coy", "dex",
4
+ "eco", "fab", "gem", "hex", "ice",
5
+ "jet", "key", "lux", "max", "neo",
6
+ "oak", "pop", "rad", "sky", "top",
7
+ "uno", "vex", "wax", "xen", "zen",
8
+ "hot", "red", "nox", "sol", "vim",
9
+ "ash", "dew", "fog", "glo", "ink",
10
+ "joy", "koi", "lit", "mox", "nix",
11
+ "orb", "pix", "qix", "rox", "sly",
12
+ "tek", "ulu", "vox", "wiz", "zap"
40
13
  ],
41
14
  "nouns": [
42
- "penguin", "panda", "otter", "narwhal", "alpaca", "llama", "badger", "walrus",
43
- "koala", "dolphin", "eagle", "falcon", "hawk", "raven", "owl",
44
- "fox", "wolf", "bear", "tiger", "lion", "leopard", "panther",
45
- "ferret", "gopher", "bobcat", "lynx", "cougar", "jaguar", "cheetah",
46
- "elephant", "rhino", "hippo", "giraffe", "zebra", "bison", "moose",
47
- "deer", "elk", "caribou", "antelope",
48
- "waffle", "pickle", "noodle", "pretzel", "muffin", "taco", "nugget", "biscuit",
49
- "donut", "bagel", "croissant", "scone", "danish", "turnover", "strudel",
50
- "pizza", "burger", "hotdog", "sandwich", "wrap", "burrito", "quesadilla",
51
- "nachos", "taco", "falafel", "gyro", "kebab", "samosa", "dumpling",
52
- "ramen", "sushi", "tempura", "teriyaki", "miso", "udon", "soba",
53
- "pasta", "ravioli", "gnocchi", "risotto",
54
- "rocket", "comet", "nebula", "quasar", "meteor", "photon", "pulsar", "nova",
55
- "supernova", "galaxy", "cosmos", "universe", "orbit", "asteroid", "planet",
56
- "star", "moon", "sun", "eclipse", "solstice", "equinox", "aurora",
57
- "constellation", "satellite", "probe", "shuttle", "capsule", "lander", "rover",
58
- "beacon", "signal", "transmission", "relay", "array", "dish", "antenna",
59
- "spectrum", "frequency", "wavelength", "radiation",
60
- "ninja", "pirate", "wizard", "robot", "cyborg", "android", "knight", "warrior",
61
- "samurai", "ronin", "monk", "sage", "oracle", "prophet", "seer",
62
- "mage", "sorcerer", "warlock", "witch", "druid", "shaman", "mystic",
63
- "hero", "champion", "legend", "titan", "colossus", "golem", "giant",
64
- "sprite", "fairy", "pixie", "elf", "dwarf", "gnome", "goblin",
65
- "dragon", "phoenix", "griffin", "sphinx",
66
- "thunder", "lightning", "blizzard", "tornado", "hurricane", "cyclone", "typhoon", "monsoon",
67
- "tempest", "storm", "gale", "breeze", "wind", "gust", "draft",
68
- "rain", "drizzle", "shower", "downpour", "deluge", "flood", "torrent",
69
- "snow", "sleet", "hail", "frost", "ice", "icicle", "glacier",
70
- "fog", "mist", "haze", "cloud", "vapor", "steam", "smoke",
71
- "dew", "droplet", "bubble", "sparkle",
72
- "server", "laptop", "tablet", "phone", "screen", "keyboard", "mouse", "chip",
73
- "processor", "memory", "drive", "disk", "cache", "buffer", "stack",
74
- "queue", "thread", "process", "daemon", "kernel", "module", "plugin",
75
- "widget", "gadget", "device", "sensor", "scanner", "printer", "router", "modem",
76
- "guitar", "piano", "drums", "flute", "violin", "trumpet", "saxophone", "clarinet",
77
- "trombone", "harp", "banjo", "ukulele", "cello", "viola", "bass",
78
- "synthesizer", "organ", "accordion", "harmonica", "xylophone"
15
+ "ant", "bat", "cat", "dog", "elk",
16
+ "fox", "gnu", "hen", "imp", "jay",
17
+ "kit", "lex", "moo", "nub", "owl",
18
+ "pug", "ram", "sun", "tux", "urn",
19
+ "van", "web", "yak", "zed", "ape",
20
+ "bee", "cod", "doe", "eel", "fin",
21
+ "gup", "hog", "ion", "jab", "keg",
22
+ "log", "mud", "net", "oat", "pod",
23
+ "rye", "sap", "tar", "vat", "wok",
24
+ "box", "cub", "dip", "gem", "hub"
79
25
  ],
80
26
  "verbs": [
81
- "runs", "walks", "jumps", "hops", "skips", "leaps", "bounds", "dashes",
82
- "races", "sprints", "zooms", "zips", "flies", "soars", "glides",
83
- "floats", "drifts", "swims", "dives", "surfs", "rides", "sails",
84
- "climbs", "scales", "ascends", "descends", "slides", "slips", "rolls",
85
- "spins", "twirls", "whirls", "rotates", "orbits", "circles", "loops",
86
- "bounces", "springs", "vaults", "launches",
87
- "builds", "creates", "makes", "crafts", "forges", "shapes", "molds", "forms",
88
- "designs", "draws", "paints", "sketches", "writes", "codes", "types",
89
- "clicks", "taps", "swipes", "scrolls", "drags", "drops", "picks",
90
- "grabs", "holds", "carries", "lifts", "throws", "catches", "tosses",
91
- "pushes", "pulls", "moves", "shifts", "slides", "turns", "flips",
92
- "spins", "rotates", "twists", "bends",
93
- "talks", "speaks", "says", "tells", "asks", "answers", "replies", "responds",
94
- "shouts", "yells", "screams", "whispers", "murmurs", "mutters", "hums",
95
- "sings", "chants", "calls", "cries", "laughs", "giggles", "chuckles",
96
- "smiles", "grins", "beams", "glows", "shines", "sparkles", "glitters",
97
- "blinks", "winks", "nods", "waves", "signals", "points", "gestures",
98
- "shows", "reveals", "displays", "presents",
99
- "thinks", "ponders", "wonders", "considers", "reflects", "meditates", "contemplates", "muses",
100
- "dreams", "imagines", "envisions", "pictures", "visualizes", "sees", "views",
101
- "watches", "observes", "notices", "spots", "finds", "discovers", "detects",
102
- "learns", "studies", "reads", "explores", "investigates", "examines", "analyzes",
103
- "solves", "figures", "calculates", "computes", "measures", "counts", "tallies",
104
- "remembers", "recalls", "recollects", "recognizes",
105
- "wins", "succeeds", "achieves", "accomplishes", "completes", "finishes", "conquers", "triumphs",
106
- "celebrates", "cheers", "rejoices", "delights", "enjoys", "loves", "adores",
107
- "helps", "aids", "assists", "supports", "guides", "leads", "directs",
108
- "protects", "guards", "defends", "shields", "saves", "rescues", "recovers",
109
- "heals", "fixes", "repairs", "restores", "renews", "refreshes", "revives",
110
- "thrives", "grows", "blooms", "flourishes",
111
- "compiles", "deploys", "merges", "commits", "pushes", "pulls", "clones", "forks",
112
- "branches", "tags", "releases", "patches", "updates", "upgrades", "installs",
113
- "uninstalls", "configures", "optimizes", "debugs", "tests", "validates", "verifies",
114
- "authenticates", "authorizes", "encrypts", "decrypts", "compresses", "decompresses", "archives", "extracts",
115
- "invents", "innovates", "improvises", "experiments", "discovers", "pioneers", "explores", "ventures",
116
- "adapts", "evolves", "transforms", "revolutionizes", "reimagines", "redefines", "reinvents",
117
- "generates", "synthesizes", "composes", "orchestrates", "choreographs"
27
+ "ask", "bet", "cut", "dig", "eat",
28
+ "fix", "get", "hit", "jab", "key",
29
+ "let", "mix", "nap", "opt", "pop",
30
+ "run", "set", "tap", "use", "vet",
31
+ "win", "zip", "zap", "add", "bid",
32
+ "dub", "end", "fly", "gig", "hum",
33
+ "jog", "lob", "map", "net", "orb",
34
+ "pay", "rip", "sip", "tag", "vow",
35
+ "wag", "yap", "bow", "cue", "dip",
36
+ "fan", "hop", "jam", "nod", "tug"
118
37
  ]
119
38
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ekkos/cli",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
4
4
  "description": "Setup ekkOS memory for AI coding assistants (Claude Code, Cursor, Windsurf)",
5
5
  "main": "dist/index.js",
6
6
  "bin": {