@traqr/cli 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 (42) hide show
  1. package/README.md +84 -0
  2. package/dist/bin/traqr.d.ts +20 -0
  3. package/dist/bin/traqr.d.ts.map +1 -0
  4. package/dist/bin/traqr.js +104 -0
  5. package/dist/bin/traqr.js.map +1 -0
  6. package/dist/commands/init.d.ts +8 -0
  7. package/dist/commands/init.d.ts.map +1 -0
  8. package/dist/commands/init.js +772 -0
  9. package/dist/commands/init.js.map +1 -0
  10. package/dist/commands/projects.d.ts +9 -0
  11. package/dist/commands/projects.d.ts.map +1 -0
  12. package/dist/commands/projects.js +78 -0
  13. package/dist/commands/projects.js.map +1 -0
  14. package/dist/commands/render.d.ts +12 -0
  15. package/dist/commands/render.d.ts.map +1 -0
  16. package/dist/commands/render.js +49 -0
  17. package/dist/commands/render.js.map +1 -0
  18. package/dist/commands/setup.d.ts +8 -0
  19. package/dist/commands/setup.d.ts.map +1 -0
  20. package/dist/commands/setup.js +343 -0
  21. package/dist/commands/setup.js.map +1 -0
  22. package/dist/commands/status.d.ts +8 -0
  23. package/dist/commands/status.d.ts.map +1 -0
  24. package/dist/commands/status.js +46 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/index.d.ts +8 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +8 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lib/checks.d.ts +8 -0
  31. package/dist/lib/checks.d.ts.map +1 -0
  32. package/dist/lib/checks.js +45 -0
  33. package/dist/lib/checks.js.map +1 -0
  34. package/dist/lib/prompts.d.ts +24 -0
  35. package/dist/lib/prompts.d.ts.map +1 -0
  36. package/dist/lib/prompts.js +76 -0
  37. package/dist/lib/prompts.js.map +1 -0
  38. package/dist/lib/writer.d.ts +22 -0
  39. package/dist/lib/writer.d.ts.map +1 -0
  40. package/dist/lib/writer.js +43 -0
  41. package/dist/lib/writer.js.map +1 -0
  42. package/package.json +52 -0
@@ -0,0 +1,46 @@
1
+ /**
2
+ * traqr status — Show config summary + health
3
+ *
4
+ * Loads .traqr/config.json and prints a summary.
5
+ * Optionally pings daemon/memory endpoints if running.
6
+ */
7
+ import { loadProjectConfig, resolveConfig, printConfigSummary, calculateAutomationScore, } from '@traqr/core';
8
+ async function pingEndpoint(url, label) {
9
+ try {
10
+ const res = await fetch(url, { signal: AbortSignal.timeout(2000) });
11
+ if (res.ok)
12
+ return `${label}: UP`;
13
+ return `${label}: DOWN (${res.status})`;
14
+ }
15
+ catch (err) {
16
+ const msg = err instanceof Error ? err.message : 'unknown error';
17
+ return `${label}: DOWN (${msg})`;
18
+ }
19
+ }
20
+ async function run() {
21
+ const { config, path: configPath } = loadProjectConfig();
22
+ if (!config) {
23
+ console.log('No .traqr/config.json found.');
24
+ console.log('Run "traqr init" to create a project config.');
25
+ process.exit(0);
26
+ }
27
+ const resolved = resolveConfig();
28
+ const score = config.automationScore ?? calculateAutomationScore(config);
29
+ console.log(`Project: ${config.project.displayName}`);
30
+ console.log(`Config: ${configPath}`);
31
+ console.log(`Tier: ${config.tier} (${config.starterPack || 'custom'})`);
32
+ console.log(`Score: ${score}/100`);
33
+ console.log('');
34
+ console.log(printConfigSummary(resolved));
35
+ // Ping services
36
+ console.log('');
37
+ const pings = await Promise.all([
38
+ pingEndpoint('http://localhost:4200/health', 'Daemon'),
39
+ pingEndpoint('http://localhost:4100/health', 'Memory'),
40
+ ]);
41
+ for (const p of pings) {
42
+ console.log(` ${p}`);
43
+ }
44
+ }
45
+ void run();
46
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,aAAa,CAAA;AAEpB,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,KAAa;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnE,IAAI,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,KAAK,MAAM,CAAA;QACjC,OAAO,GAAG,KAAK,WAAW,GAAG,CAAC,MAAM,GAAG,CAAA;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;QAChE,OAAO,GAAG,KAAK,WAAW,GAAG,GAAG,CAAA;IAClC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,iBAAiB,EAAE,CAAA;IAExD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,EAAoB,CAAA;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAA;IAExE,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,EAAE,CAAC,CAAA;IACrC,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,IAAI,QAAQ,GAAG,CAAC,CAAA;IAC1E,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,MAAM,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEzC,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9B,YAAY,CAAC,8BAA8B,EAAE,QAAQ,CAAC;QACtD,YAAY,CAAC,8BAA8B,EAAE,QAAQ,CAAC;KACvD,CAAC,CAAA;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;AACH,CAAC;AAED,KAAK,GAAG,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @traqr/cli — Public API
3
+ *
4
+ * Re-exports the file writer for programmatic use.
5
+ * CLI commands are accessed via the traqr binary, not this module.
6
+ */
7
+ export { writeFiles, type WriteOptions, type WriteResult } from './lib/writer.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @traqr/cli — Public API
3
+ *
4
+ * Re-exports the file writer for programmatic use.
5
+ * CLI commands are accessed via the traqr binary, not this module.
6
+ */
7
+ export { writeFiles } from './lib/writer.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAuC,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared prerequisites checks for CLI commands.
3
+ * Plain English errors with install commands.
4
+ */
5
+ export declare function checkPrerequisites(): void;
6
+ /** Check if a CLI tool is available */
7
+ export declare function hasCommand(cmd: string): boolean;
8
+ //# sourceMappingURL=checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../src/lib/checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,wBAAgB,kBAAkB,IAAI,IAAI,CAmBzC;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Shared prerequisites checks for CLI commands.
3
+ * Plain English errors with install commands.
4
+ */
5
+ import { execSync } from 'child_process';
6
+ export function checkPrerequisites() {
7
+ const missing = [];
8
+ try {
9
+ execSync('git --version', { stdio: 'pipe' });
10
+ }
11
+ catch {
12
+ missing.push('git');
13
+ }
14
+ try {
15
+ execSync('node --version', { stdio: 'pipe' });
16
+ }
17
+ catch {
18
+ missing.push('node');
19
+ }
20
+ if (missing.length === 0)
21
+ return;
22
+ console.error(`\n Missing required tools: ${missing.join(', ')}\n`);
23
+ if (missing.includes('git')) {
24
+ console.error(' Git — version control (required)');
25
+ console.error(' Mac: brew install git');
26
+ console.error(' Linux: sudo apt install git');
27
+ console.error(' Windows: https://git-scm.com/downloads\n');
28
+ }
29
+ if (missing.includes('node')) {
30
+ console.error(' Node.js — JavaScript runtime (required)');
31
+ console.error(' Install: https://nodejs.org/\n');
32
+ }
33
+ process.exit(1);
34
+ }
35
+ /** Check if a CLI tool is available */
36
+ export function hasCommand(cmd) {
37
+ try {
38
+ execSync(`which ${cmd}`, { stdio: 'pipe' });
39
+ return true;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/lib/checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,CAAC;QAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAAC,CAAC;IAClF,IAAI,CAAC;QAAC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAAC,CAAC;IAEpF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAEhC,OAAO,CAAC,KAAK,CAAC,+BAA+B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACnD,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAC9C,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QAClD,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC1D,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC;QAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Simple CLI prompt helpers using Node.js built-in readline.
3
+ * No external deps — can upgrade to @inquirer/prompts later if needed.
4
+ */
5
+ export declare function closePrompts(): void;
6
+ /** Ask a question with an optional default value. */
7
+ export declare function ask(question: string, defaultValue?: string): Promise<string>;
8
+ /** Ask a yes/no question. */
9
+ export declare function confirm(question: string, defaultYes?: boolean): Promise<boolean>;
10
+ /** Ask the user to select from a numbered list. */
11
+ /** Print contextual guidance text (indented, stands out from prompts). */
12
+ export declare function info(text: string): void;
13
+ /** Ask with validation + auto-correct re-ask. */
14
+ export declare function askValidated(question: string, defaultValue: string | undefined, validate: (input: string) => {
15
+ valid: boolean;
16
+ message?: string;
17
+ suggestion?: string;
18
+ }): Promise<string>;
19
+ export declare function select<T extends string>(question: string, options: Array<{
20
+ label: string;
21
+ value: T;
22
+ description?: string;
23
+ }>, defaultIndex?: number): Promise<T>;
24
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH,wBAAgB,YAAY,IAAI,IAAI,CAKnC;AAED,qDAAqD;AACrD,wBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO5E;AAED,6BAA6B;AAC7B,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAKnF;AAED,mDAAmD;AACnD,0EAA0E;AAC1E,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIvC;AAED,iDAAiD;AACjD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAsB,MAAM,CAAC,CAAC,SAAS,MAAM,EAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACjE,YAAY,SAAI,GACf,OAAO,CAAC,CAAC,CAAC,CAcZ"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Simple CLI prompt helpers using Node.js built-in readline.
3
+ * No external deps — can upgrade to @inquirer/prompts later if needed.
4
+ */
5
+ import readline from 'readline';
6
+ // Handle Ctrl+C gracefully — close readline and exit
7
+ process.on('SIGINT', () => {
8
+ closePrompts();
9
+ console.log('\nAborted.');
10
+ process.exit(130);
11
+ });
12
+ let rl = null;
13
+ function getRL() {
14
+ if (!rl) {
15
+ rl = readline.createInterface({
16
+ input: process.stdin,
17
+ output: process.stdout,
18
+ });
19
+ }
20
+ return rl;
21
+ }
22
+ export function closePrompts() {
23
+ if (rl) {
24
+ rl.close();
25
+ rl = null;
26
+ }
27
+ }
28
+ /** Ask a question with an optional default value. */
29
+ export function ask(question, defaultValue) {
30
+ const suffix = defaultValue ? ` (${defaultValue})` : '';
31
+ return new Promise((resolve) => {
32
+ getRL().question(`${question}${suffix}: `, (answer) => {
33
+ resolve(answer.trim() || defaultValue || '');
34
+ });
35
+ });
36
+ }
37
+ /** Ask a yes/no question. */
38
+ export async function confirm(question, defaultYes = true) {
39
+ const hint = defaultYes ? 'Y/n' : 'y/N';
40
+ const answer = await ask(`${question} [${hint}]`);
41
+ if (!answer)
42
+ return defaultYes;
43
+ return answer.toLowerCase().startsWith('y');
44
+ }
45
+ /** Ask the user to select from a numbered list. */
46
+ /** Print contextual guidance text (indented, stands out from prompts). */
47
+ export function info(text) {
48
+ for (const line of text.split('\n')) {
49
+ console.log(` ${line}`);
50
+ }
51
+ }
52
+ /** Ask with validation + auto-correct re-ask. */
53
+ export async function askValidated(question, defaultValue, validate) {
54
+ const answer = await ask(question, defaultValue);
55
+ const result = validate(answer);
56
+ if (result.valid)
57
+ return answer;
58
+ if (result.message)
59
+ console.log(` ${result.message}`);
60
+ return ask(question, result.suggestion || defaultValue);
61
+ }
62
+ export async function select(question, options, defaultIndex = 0) {
63
+ console.log(`\n${question}`);
64
+ for (let i = 0; i < options.length; i++) {
65
+ const marker = i === defaultIndex ? '*' : ' ';
66
+ const desc = options[i].description ? ` — ${options[i].description}` : '';
67
+ console.log(` ${marker} ${i + 1}. ${options[i].label}${desc}`);
68
+ }
69
+ const answer = await ask(`Choice`, String(defaultIndex + 1));
70
+ const idx = parseInt(answer, 10) - 1;
71
+ if (idx >= 0 && idx < options.length) {
72
+ return options[idx].value;
73
+ }
74
+ return options[defaultIndex].value;
75
+ }
76
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * File writer with directory creation and dry-run support.
3
+ */
4
+ export interface WriteOptions {
5
+ /** Print files instead of writing them */
6
+ dryRun?: boolean;
7
+ /** Overwrite existing files */
8
+ force?: boolean;
9
+ }
10
+ export interface WriteResult {
11
+ written: string[];
12
+ skipped: string[];
13
+ }
14
+ /**
15
+ * Write rendered files to disk.
16
+ *
17
+ * @param files - Map of relative output path -> content
18
+ * @param baseDir - Base directory to write files into
19
+ * @param options - dry-run and force flags
20
+ */
21
+ export declare function writeFiles(files: Record<string, string>, baseDir: string, options?: WriteOptions): Promise<WriteResult>;
22
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/lib/writer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,CAiCtB"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * File writer with directory creation and dry-run support.
3
+ */
4
+ import fs from 'fs/promises';
5
+ import path from 'path';
6
+ /**
7
+ * Write rendered files to disk.
8
+ *
9
+ * @param files - Map of relative output path -> content
10
+ * @param baseDir - Base directory to write files into
11
+ * @param options - dry-run and force flags
12
+ */
13
+ export async function writeFiles(files, baseDir, options) {
14
+ const written = [];
15
+ const skipped = [];
16
+ for (const [relativePath, content] of Object.entries(files)) {
17
+ const fullPath = path.join(baseDir, relativePath);
18
+ if (options?.dryRun) {
19
+ console.log(`--- ${relativePath} ---`);
20
+ console.log(content);
21
+ console.log('');
22
+ written.push(relativePath);
23
+ continue;
24
+ }
25
+ // Check if file exists
26
+ try {
27
+ await fs.access(fullPath);
28
+ if (!options?.force) {
29
+ skipped.push(relativePath);
30
+ continue;
31
+ }
32
+ }
33
+ catch {
34
+ // File doesn't exist — proceed with write
35
+ }
36
+ // Create parent directories
37
+ await fs.mkdir(path.dirname(fullPath), { recursive: true });
38
+ await fs.writeFile(fullPath, content, 'utf-8');
39
+ written.push(relativePath);
40
+ }
41
+ return { written, skipped };
42
+ }
43
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/lib/writer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AAcvB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAA6B,EAC7B,OAAe,EACf,OAAsB;IAEtB,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAEjD,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,MAAM,CAAC,CAAA;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC1B,SAAQ;QACV,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACzB,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBAC1B,SAAQ;YACV,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;QAED,4BAA4B;QAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAC9C,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC7B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@traqr/cli",
3
+ "version": "0.1.0",
4
+ "description": "AI that remembers you. Open-source CLI for Claude Code — memory system, autonomous CI/CD, worktree slots, skill templates.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "traqr": "./dist/bin/traqr.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "default": "./dist/index.js"
16
+ }
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsc --watch"
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "dependencies": {
26
+ "@traqr/core": "0.1.0"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/jiggycapital/traqr-oss.git",
31
+ "directory": "packages/cli"
32
+ },
33
+ "homepage": "https://traqr.dev",
34
+ "bugs": "https://github.com/jiggycapital/traqr-oss/issues",
35
+ "keywords": [
36
+ "claude-code",
37
+ "ai",
38
+ "developer-tools",
39
+ "cli",
40
+ "memory",
41
+ "mcp",
42
+ "automation",
43
+ "monorepo",
44
+ "worktree",
45
+ "traqr",
46
+ "guardian",
47
+ "npx"
48
+ ],
49
+ "author": "Traqr Enterprises LLC <sean@traqr.dev>",
50
+ "engines": { "node": ">=18.0.0" },
51
+ "license": "MIT"
52
+ }