aspectcode 0.2.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 (54) hide show
  1. package/bin/aspectcode.js +4 -0
  2. package/dist/cli.d.ts +102 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +46 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/deps.d.ts +3 -0
  7. package/dist/commands/deps.d.ts.map +1 -0
  8. package/dist/commands/deps.js +39 -0
  9. package/dist/commands/deps.js.map +1 -0
  10. package/dist/commands/generate.d.ts +8 -0
  11. package/dist/commands/generate.d.ts.map +1 -0
  12. package/dist/commands/generate.js +176 -0
  13. package/dist/commands/generate.js.map +1 -0
  14. package/dist/commands/impact.d.ts +9 -0
  15. package/dist/commands/impact.d.ts.map +1 -0
  16. package/dist/commands/impact.js +162 -0
  17. package/dist/commands/impact.js.map +1 -0
  18. package/dist/commands/init.d.ts +11 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +204 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/settings.d.ts +13 -0
  23. package/dist/commands/settings.d.ts.map +1 -0
  24. package/dist/commands/settings.js +196 -0
  25. package/dist/commands/settings.js.map +1 -0
  26. package/dist/commands/watch.d.ts +6 -0
  27. package/dist/commands/watch.d.ts.map +1 -0
  28. package/dist/commands/watch.js +181 -0
  29. package/dist/commands/watch.js.map +1 -0
  30. package/dist/config.d.ts +38 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +119 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/connections.d.ts +24 -0
  35. package/dist/connections.d.ts.map +1 -0
  36. package/dist/connections.js +89 -0
  37. package/dist/connections.js.map +1 -0
  38. package/dist/logger.d.ts +45 -0
  39. package/dist/logger.d.ts.map +1 -0
  40. package/dist/logger.js +116 -0
  41. package/dist/logger.js.map +1 -0
  42. package/dist/main.d.ts +12 -0
  43. package/dist/main.d.ts.map +1 -0
  44. package/dist/main.js +275 -0
  45. package/dist/main.js.map +1 -0
  46. package/dist/version.d.ts +8 -0
  47. package/dist/version.d.ts.map +1 -0
  48. package/dist/version.js +55 -0
  49. package/dist/version.js.map +1 -0
  50. package/dist/workspace.d.ts +34 -0
  51. package/dist/workspace.d.ts.map +1 -0
  52. package/dist/workspace.js +94 -0
  53. package/dist/workspace.js.map +1 -0
  54. package/package.json +53 -0
package/dist/main.js ADDED
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+ /**
3
+ * aspectcode CLI — main entry point.
4
+ *
5
+ * Hand-rolled argv parser (no external deps). Routes to command handlers.
6
+ * Flag definitions live in cli.ts (FLAG_DEFS) — parseArgs and printHelp
7
+ * derive from that single source of truth.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.parseArgs = parseArgs;
44
+ exports.run = run;
45
+ const path = __importStar(require("path"));
46
+ const cli_1 = require("./cli");
47
+ const config_1 = require("./config");
48
+ const logger_1 = require("./logger");
49
+ const version_1 = require("./version");
50
+ const init_1 = require("./commands/init");
51
+ const generate_1 = require("./commands/generate");
52
+ const deps_1 = require("./commands/deps");
53
+ const watch_1 = require("./commands/watch");
54
+ const impact_1 = require("./commands/impact");
55
+ const settings_1 = require("./commands/settings");
56
+ // ── Build lookup tables from FLAG_DEFS ───────────────────────
57
+ /** Map --long-name → FlagDef */
58
+ const longMap = new Map(cli_1.FLAG_DEFS.map((d) => [`--${d.name}`, d]));
59
+ /** Map -x → FlagDef */
60
+ const shortMap = new Map(cli_1.FLAG_DEFS.filter((d) => d.short).map((d) => [`-${d.short}`, d]));
61
+ // ── Argv parsing ─────────────────────────────────────────────
62
+ function parseArgs(argv) {
63
+ const flags = {
64
+ help: false,
65
+ version: false,
66
+ verbose: false,
67
+ quiet: false,
68
+ listConnections: false,
69
+ json: false,
70
+ force: false,
71
+ kbOnly: false,
72
+ copilot: false,
73
+ cursor: false,
74
+ claude: false,
75
+ other: false,
76
+ noColor: false,
77
+ };
78
+ const positionals = [];
79
+ let command = '';
80
+ const args = argv.slice(2); // skip node + script
81
+ let i = 0;
82
+ while (i < args.length) {
83
+ const arg = args[i];
84
+ // Try --long-name or -x lookup
85
+ const eqIdx = arg.indexOf('=');
86
+ const key = eqIdx > 0 ? arg.slice(0, eqIdx) : arg;
87
+ const def = longMap.get(key) ?? shortMap.get(key);
88
+ if (def) {
89
+ const prop = (0, cli_1.flagPropName)(def);
90
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
91
+ const record = flags;
92
+ if (def.type === 'boolean') {
93
+ record[prop] = true;
94
+ }
95
+ else if (def.type === 'string') {
96
+ const val = eqIdx > 0 ? arg.slice(eqIdx + 1) : args[++i];
97
+ record[prop] = val;
98
+ }
99
+ else if (def.type === 'enum' && def.values) {
100
+ const val = eqIdx > 0 ? arg.slice(eqIdx + 1) : args[++i];
101
+ if (def.values.includes(val)) {
102
+ record[prop] = val;
103
+ }
104
+ }
105
+ }
106
+ else if (arg.startsWith('--') && eqIdx > 0) {
107
+ // Unknown --flag=value — try lookup by prefix before '='
108
+ const stderr = process.stderr;
109
+ if (stderr && typeof stderr.write === 'function') {
110
+ stderr.write(`Warning: unknown flag ${key}\n`);
111
+ }
112
+ }
113
+ else if (arg.startsWith('-')) {
114
+ // Unknown flag — warn but keep going for forward compat
115
+ const stderr = process.stderr;
116
+ if (stderr && typeof stderr.write === 'function') {
117
+ stderr.write(`Warning: unknown flag ${arg}\n`);
118
+ }
119
+ }
120
+ else if (!command) {
121
+ command = arg;
122
+ }
123
+ else {
124
+ positionals.push(arg);
125
+ }
126
+ i++;
127
+ }
128
+ return { command, flags, positionals };
129
+ }
130
+ // ── Help text ────────────────────────────────────────────────
131
+ function printHelp() {
132
+ const optionLines = [];
133
+ for (const def of cli_1.FLAG_DEFS) {
134
+ const shortPart = def.short ? `-${def.short}, ` : ' ';
135
+ const longPart = `--${def.name}`;
136
+ const valuePart = def.type === 'string' ? ' <value>' :
137
+ def.type === 'enum' ? ` <${(def.values ?? []).join('|')}>` : '';
138
+ const left = ` ${shortPart}${longPart}${valuePart}`;
139
+ const pad = Math.max(2, 30 - left.length);
140
+ optionLines.push(`${left}${' '.repeat(pad)}${def.description}`);
141
+ }
142
+ console.log(`
143
+ ${logger_1.fmt.bold('aspectcode')} — generate AI-assistant knowledge bases from your codebase
144
+
145
+ ${logger_1.fmt.bold('USAGE')}
146
+ aspectcode <command> [options]
147
+
148
+ ${logger_1.fmt.bold('COMMANDS')}
149
+ init Create an ${logger_1.fmt.cyan('aspectcode.json')} config file
150
+ generate ${logger_1.fmt.dim('(gen, g)')} Discover, analyze, and emit KB artifacts
151
+ watch Watch source files and regenerate on changes
152
+ impact Compute impact analysis for a file
153
+ deps list List dependency connections
154
+ show-config Show current ${logger_1.fmt.cyan('aspectcode.json')} values
155
+ set-update-rate <mode> Set updateRate to manual|onChange|idle
156
+ set-out-dir <path> Set outDir
157
+ clear-out-dir Remove outDir
158
+ add-exclude <path> Add an exclude path
159
+ remove-exclude <path> Remove an exclude path
160
+
161
+ ${logger_1.fmt.bold('OPTIONS')}
162
+ ${optionLines.join('\n')}
163
+
164
+ ${logger_1.fmt.bold('EXAMPLES')}
165
+ aspectcode init
166
+ aspectcode generate
167
+ aspectcode gen --copilot --cursor
168
+ aspectcode g --json
169
+ aspectcode impact --file src/app.ts
170
+ aspectcode deps list --file src/app.ts
171
+ aspectcode watch --mode idle
172
+ `.trimStart());
173
+ }
174
+ // ── Main ─────────────────────────────────────────────────────
175
+ async function main() {
176
+ const parsed = parseArgs(process.argv);
177
+ const { command, flags } = parsed;
178
+ // Global flags that exit early
179
+ if (flags.version) {
180
+ console.log((0, version_1.getVersion)());
181
+ process.exitCode = cli_1.ExitCode.OK;
182
+ return;
183
+ }
184
+ if (flags.help) {
185
+ printHelp();
186
+ process.exitCode = cli_1.ExitCode.OK;
187
+ return;
188
+ }
189
+ if (!command) {
190
+ printHelp();
191
+ process.exitCode = cli_1.ExitCode.USAGE;
192
+ return;
193
+ }
194
+ // Apply --no-color before any output
195
+ if (flags.noColor) {
196
+ (0, logger_1.disableColor)();
197
+ }
198
+ const log = (0, logger_1.createLogger)({ verbose: flags.verbose, quiet: flags.quiet });
199
+ const root = path.resolve(flags.root ?? process.cwd());
200
+ // Build shared context — loadConfig returns undefined when no aspectcode.json exists
201
+ const config = (0, config_1.loadConfig)(root);
202
+ const ctx = {
203
+ root,
204
+ flags,
205
+ config,
206
+ log,
207
+ positionals: parsed.positionals,
208
+ };
209
+ let result;
210
+ switch (command) {
211
+ case 'init':
212
+ result = await (0, init_1.runInit)(ctx);
213
+ break;
214
+ case 'generate':
215
+ case 'gen':
216
+ case 'g':
217
+ result = await (0, generate_1.runGenerate)(ctx);
218
+ break;
219
+ case 'deps': {
220
+ const sub = parsed.positionals[0] ?? 'list';
221
+ if (sub !== 'list') {
222
+ log.error(`Unknown deps subcommand: ${logger_1.fmt.bold(sub)}`);
223
+ result = { exitCode: cli_1.ExitCode.USAGE };
224
+ break;
225
+ }
226
+ result = await (0, deps_1.runDepsList)(ctx);
227
+ break;
228
+ }
229
+ case 'watch':
230
+ result = await (0, watch_1.runWatch)(ctx);
231
+ break;
232
+ case 'impact':
233
+ result = await (0, impact_1.runImpact)(ctx);
234
+ break;
235
+ case 'show-config':
236
+ result = await (0, settings_1.runShowConfig)(ctx);
237
+ break;
238
+ case 'set-update-rate': {
239
+ const value = parsed.positionals[0] ?? '';
240
+ result = await (0, settings_1.runSetUpdateRate)(ctx, value);
241
+ break;
242
+ }
243
+ case 'set-out-dir': {
244
+ const value = parsed.positionals[0] ?? '';
245
+ result = await (0, settings_1.runSetOutDir)(ctx, value);
246
+ break;
247
+ }
248
+ case 'clear-out-dir':
249
+ result = await (0, settings_1.runClearOutDir)(ctx);
250
+ break;
251
+ case 'add-exclude': {
252
+ const value = parsed.positionals[0] ?? '';
253
+ result = await (0, settings_1.runAddExclude)(ctx, value);
254
+ break;
255
+ }
256
+ case 'remove-exclude': {
257
+ const value = parsed.positionals[0] ?? '';
258
+ result = await (0, settings_1.runRemoveExclude)(ctx, value);
259
+ break;
260
+ }
261
+ default:
262
+ log.error(`Unknown command: ${logger_1.fmt.bold(command)}`);
263
+ log.info(`Run ${logger_1.fmt.bold('aspectcode --help')} for usage.`);
264
+ result = { exitCode: cli_1.ExitCode.USAGE };
265
+ }
266
+ process.exitCode = result.exitCode;
267
+ }
268
+ /** Entry point — called from bin/aspectcode.js. */
269
+ function run() {
270
+ main().catch((err) => {
271
+ console.error(err.message);
272
+ process.exitCode = cli_1.ExitCode.ERROR;
273
+ });
274
+ }
275
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * aspectcode CLI — version helper.
3
+ *
4
+ * Reads the version from cli/package.json at runtime, so it stays in sync
5
+ * without a build step.
6
+ */
7
+ export declare function getVersion(): string;
8
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,wBAAgB,UAAU,IAAI,MAAM,CAQnC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * aspectcode CLI — version helper.
4
+ *
5
+ * Reads the version from cli/package.json at runtime, so it stays in sync
6
+ * without a build step.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.getVersion = getVersion;
43
+ const path = __importStar(require("path"));
44
+ const fs = __importStar(require("fs"));
45
+ let _cached;
46
+ function getVersion() {
47
+ if (_cached)
48
+ return _cached;
49
+ const pkgPath = path.resolve(__dirname, '..', 'package.json');
50
+ const raw = fs.readFileSync(pkgPath, 'utf-8');
51
+ const pkg = JSON.parse(raw);
52
+ _cached = pkg.version;
53
+ return _cached;
54
+ }
55
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOH,gCAQC;AAbD,2CAA6B;AAC7B,uCAAyB;AAEzB,IAAI,OAA2B,CAAC;AAEhC,SAAgB,UAAU;IACxB,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;IACnD,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared workspace file-loading utilities for CLI commands.
3
+ *
4
+ * Encapsulates the discover → read → Map pipeline that deps, impact,
5
+ * and generate all need, eliminating repeated boilerplate.
6
+ */
7
+ import { type CoreHost } from '@aspectcode/core';
8
+ import type { AspectCodeConfig } from './config';
9
+ import type { Logger } from './logger';
10
+ export interface WorkspaceFiles {
11
+ /** Map of relative (posix) path → file content */
12
+ relativeFiles: Map<string, string>;
13
+ /** Map of absolute path → file content */
14
+ absoluteFiles: Map<string, string>;
15
+ /** Absolute paths returned by discoverFiles */
16
+ discoveredPaths: string[];
17
+ /** Pre-built host for the workspace (undefined when WASM dir cannot be resolved) */
18
+ host: CoreHost | undefined;
19
+ }
20
+ /**
21
+ * Discover and read all source files in the workspace.
22
+ *
23
+ * Returns both relative-keyed and absolute-keyed maps (the former for
24
+ * `analyzeRepo`, the latter for `DependencyAnalyzer`).
25
+ *
26
+ * @param root Absolute workspace root
27
+ * @param config Loaded config (used for exclude patterns)
28
+ * @param log Logger for debug output
29
+ * @param opts Options: quiet suppresses spinners
30
+ */
31
+ export declare function loadWorkspaceFiles(root: string, config: AspectCodeConfig | undefined, log: Logger, opts?: {
32
+ quiet?: boolean;
33
+ }): Promise<WorkspaceFiles>;
34
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,0CAA0C;IAC1C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,+CAA+C;IAC/C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,oFAAoF;IACpF,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACzB,OAAO,CAAC,cAAc,CAAC,CAqCzB"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * Shared workspace file-loading utilities for CLI commands.
4
+ *
5
+ * Encapsulates the discover → read → Map pipeline that deps, impact,
6
+ * and generate all need, eliminating repeated boilerplate.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.loadWorkspaceFiles = loadWorkspaceFiles;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const core_1 = require("@aspectcode/core");
46
+ const logger_1 = require("./logger");
47
+ /**
48
+ * Discover and read all source files in the workspace.
49
+ *
50
+ * Returns both relative-keyed and absolute-keyed maps (the former for
51
+ * `analyzeRepo`, the latter for `DependencyAnalyzer`).
52
+ *
53
+ * @param root Absolute workspace root
54
+ * @param config Loaded config (used for exclude patterns)
55
+ * @param log Logger for debug output
56
+ * @param opts Options: quiet suppresses spinners
57
+ */
58
+ async function loadWorkspaceFiles(root, config, log, opts) {
59
+ const exclude = config?.exclude;
60
+ const spin = (0, logger_1.createSpinner)('Discovering files…', { quiet: opts?.quiet });
61
+ const discoveredPaths = await (0, core_1.discoverFiles)(root, exclude ? { exclude } : undefined);
62
+ if (discoveredPaths.length === 0) {
63
+ spin.stop('No files found');
64
+ return {
65
+ relativeFiles: new Map(),
66
+ absoluteFiles: new Map(),
67
+ discoveredPaths: [],
68
+ host: (0, core_1.createNodeHostForWorkspace)(root),
69
+ };
70
+ }
71
+ spin.stop(`Discovered ${discoveredPaths.length} files`);
72
+ const spinRead = (0, logger_1.createSpinner)(`Reading ${discoveredPaths.length} files…`, { quiet: opts?.quiet });
73
+ const relativeFiles = new Map();
74
+ const absoluteFiles = new Map();
75
+ for (const abs of discoveredPaths) {
76
+ const rel = path.relative(root, abs).replace(/\\/g, '/');
77
+ try {
78
+ const content = fs.readFileSync(abs, 'utf-8');
79
+ relativeFiles.set(rel, content);
80
+ absoluteFiles.set(abs, content);
81
+ }
82
+ catch {
83
+ log.debug(` skip (unreadable): ${rel}`);
84
+ }
85
+ }
86
+ spinRead.stop(`Read ${relativeFiles.size} files`);
87
+ return {
88
+ relativeFiles,
89
+ absoluteFiles,
90
+ discoveredPaths,
91
+ host: (0, core_1.createNodeHostForWorkspace)(root),
92
+ };
93
+ }
94
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCH,gDA0CC;AA3ED,uCAAyB;AACzB,2CAA6B;AAC7B,2CAI0B;AAG1B,qCAAyC;AAazC;;;;;;;;;;GAUG;AACI,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,MAAoC,EACpC,GAAW,EACX,IAA0B;IAE1B,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAEhC,MAAM,IAAI,GAAG,IAAA,sBAAa,EAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,MAAM,IAAA,oBAAa,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5B,OAAO;YACL,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,aAAa,EAAE,IAAI,GAAG,EAAE;YACxB,eAAe,EAAE,EAAE;YACnB,IAAI,EAAE,IAAA,iCAA0B,EAAC,IAAI,CAAC;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,cAAc,eAAe,CAAC,MAAM,QAAQ,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,IAAA,sBAAa,EAAC,WAAW,eAAe,CAAC,MAAM,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnG,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC9C,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAChC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,aAAa,CAAC,IAAI,QAAQ,CAAC,CAAC;IAElD,OAAO;QACL,aAAa;QACb,aAAa;QACb,eAAe;QACf,IAAI,EAAE,IAAA,iCAA0B,EAAC,IAAI,CAAC;KACvC,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "aspectcode",
3
+ "version": "0.2.0",
4
+ "description": "CLI for Aspect Code — generate knowledge-base artifacts from the command line",
5
+ "license": "MIT",
6
+ "main": "dist/main.js",
7
+ "types": "dist/main.d.ts",
8
+ "bin": {
9
+ "aspectcode": "bin/aspectcode.js",
10
+ "aspect": "bin/aspectcode.js"
11
+ },
12
+ "files": [
13
+ "bin",
14
+ "dist"
15
+ ],
16
+ "engines": {
17
+ "node": ">=18"
18
+ },
19
+ "keywords": [
20
+ "aspectcode",
21
+ "knowledge-base",
22
+ "ai",
23
+ "copilot",
24
+ "cursor",
25
+ "claude",
26
+ "code-analysis",
27
+ "static-analysis",
28
+ "dependency-graph"
29
+ ],
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/asashepard/aspectcode.git",
33
+ "directory": "packages/cli"
34
+ },
35
+ "scripts": {
36
+ "build": "tsc",
37
+ "typecheck": "tsc --noEmit",
38
+ "prepublishOnly": "npm run build",
39
+ "test": "mocha --require ts-node/register 'test/**/*.test.ts'"
40
+ },
41
+ "dependencies": {
42
+ "@aspectcode/core": "0.2.0",
43
+ "@aspectcode/emitters": "0.2.0",
44
+ "chokidar": "^4.0.3"
45
+ },
46
+ "devDependencies": {
47
+ "@types/mocha": "^10.0.0",
48
+ "@types/node": "^22.0.0",
49
+ "mocha": "^10.4.0",
50
+ "ts-node": "^10.9.2",
51
+ "typescript": "^5.5.4"
52
+ }
53
+ }