@traqr/cli 0.1.2 → 0.1.4
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.
- package/README.md +23 -51
- package/dist/bin/traqr.js +8 -0
- package/dist/bin/traqr.js.map +1 -1
- package/dist/commands/link.d.ts +17 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +191 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/scaffold.d.ts +13 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/scaffold.js +168 -0
- package/dist/commands/scaffold.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,77 +1,45 @@
|
|
|
1
1
|
# @traqr/cli
|
|
2
2
|
|
|
3
|
-
CLI
|
|
3
|
+
CLI for the TraqrOS developer platform. Project initialization, template rendering, and service health checks.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Most users don't need to run CLI commands directly — Claude reads the [@traqr/core](https://www.npmjs.com/package/@traqr/core) README and sets up your project automatically. The CLI is a manual fallback for users without AI assistants.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
# Initialize a new project
|
|
9
|
-
npx traqr init
|
|
7
|
+
## Commands
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
npx traqr render
|
|
9
|
+
### `traqr render` (AI-First Path)
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
Non-interactive template generation from `.traqr/config.json`. This is what Claude runs after writing your config.
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx traqr render # Generate all files (skip existing)
|
|
15
|
+
npx traqr render --dry-run # Preview without writing
|
|
16
|
+
npx traqr render --force # Overwrite existing files
|
|
16
17
|
```
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
### `traqr init` (Interactive Fallback)
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
Interactive project setup wizard for manual configuration:
|
|
21
22
|
|
|
22
|
-
Interactive project setup wizard:
|
|
23
23
|
1. Detects git remote, package manager, framework
|
|
24
|
-
2. Prompts for project name, description,
|
|
24
|
+
2. Prompts for project name, description, org/repo
|
|
25
25
|
3. Choose a starter pack (solo/smart/production/full)
|
|
26
26
|
4. Renders all templates and writes to disk
|
|
27
27
|
5. Creates `.traqr/config.json`
|
|
28
28
|
|
|
29
|
-
### `traqr render`
|
|
30
|
-
|
|
31
|
-
Non-interactive template render from `.traqr/config.json`.
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
traqr render # Write files (skip existing)
|
|
35
|
-
traqr render --dry-run # Print to stdout
|
|
36
|
-
traqr render --force # Overwrite existing files
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### `traqr daemon`
|
|
40
|
-
|
|
41
|
-
Start the daemon orchestrator server.
|
|
42
|
-
|
|
43
29
|
```bash
|
|
44
|
-
traqr
|
|
45
|
-
traqr daemon --port 4201 # Custom port
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### `traqr memory`
|
|
49
|
-
|
|
50
|
-
Start the memory vector DB server.
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
traqr memory # Default port 4100
|
|
54
|
-
traqr memory --port 4101 # Custom port
|
|
30
|
+
npx traqr init
|
|
55
31
|
```
|
|
56
32
|
|
|
57
|
-
Requires: `SUPABASE_URL`, `SUPABASE_SERVICE_ROLE_KEY`, `OPENAI_API_KEY`
|
|
58
|
-
|
|
59
|
-
### `traqr guardian`
|
|
60
|
-
|
|
61
|
-
Stub — Guardian requires dependency injection. Use `GuardianPlugin` as a library via `@traqr/daemon`.
|
|
62
|
-
|
|
63
33
|
### `traqr status`
|
|
64
34
|
|
|
65
|
-
Show project config summary and
|
|
35
|
+
Show project config summary and check running services.
|
|
66
36
|
|
|
67
37
|
```bash
|
|
68
|
-
traqr status
|
|
69
|
-
# Project:
|
|
38
|
+
npx traqr status
|
|
39
|
+
# Project: My Project
|
|
70
40
|
# Config: /path/to/.traqr/config.json
|
|
71
|
-
# Tier:
|
|
72
|
-
# Score:
|
|
73
|
-
# Daemon: UP
|
|
74
|
-
# Memory: UP
|
|
41
|
+
# Tier: 2 (smart)
|
|
42
|
+
# Score: 65/100
|
|
75
43
|
```
|
|
76
44
|
|
|
77
45
|
## Programmatic API
|
|
@@ -82,3 +50,7 @@ import { writeFiles } from '@traqr/cli'
|
|
|
82
50
|
const result = await writeFiles(files, baseDir, { dryRun: false, force: true })
|
|
83
51
|
console.log(`Written: ${result.written.length}, Skipped: ${result.skipped.length}`)
|
|
84
52
|
```
|
|
53
|
+
|
|
54
|
+
## License
|
|
55
|
+
|
|
56
|
+
[Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0)
|
package/dist/bin/traqr.js
CHANGED
|
@@ -32,6 +32,12 @@ async function main() {
|
|
|
32
32
|
case 'render':
|
|
33
33
|
await import('../commands/render.js');
|
|
34
34
|
break;
|
|
35
|
+
case 'link':
|
|
36
|
+
await import('../commands/link.js');
|
|
37
|
+
break;
|
|
38
|
+
case 'scaffold':
|
|
39
|
+
await import('../commands/scaffold.js');
|
|
40
|
+
break;
|
|
35
41
|
case 'status':
|
|
36
42
|
await import('../commands/status.js');
|
|
37
43
|
break;
|
|
@@ -79,6 +85,8 @@ function printUsage() {
|
|
|
79
85
|
Commands:
|
|
80
86
|
init Interactive project setup wizard
|
|
81
87
|
new Alias for init (scaffold a new project)
|
|
88
|
+
scaffold Create a new DevOS monorepo from scratch
|
|
89
|
+
link Connect cloud services (VCS, memory, Slack, etc.)
|
|
82
90
|
setup Create or update global profile (~/.traqr/config.json)
|
|
83
91
|
projects List and manage registered projects
|
|
84
92
|
render Render templates from .traqr/config.json
|
package/dist/bin/traqr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traqr.js","sourceRoot":"","sources":["../../src/bin/traqr.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAE/B,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YACnC,MAAK;QACP,KAAK,UAAU;YACb,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvC,MAAK;QACP,KAAK,OAAO;YACV,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACpC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,UAAU,EAAE,CAAA;YACZ,MAAK;QACP,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;gBACrD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;gBAClC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOrB,CAAC,CAAA;oBACQ,MAAK;gBACP,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;YAClD,UAAU,EAAE,CAAA;YACZ,MAAK;QACP,CAAC;QACD,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,MAAK;QACP;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAA;YAC5C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACjB,UAAU,EAAE,CAAA;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"traqr.js","sourceRoot":"","sources":["../../src/bin/traqr.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAE/B,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YACnC,MAAK;QACP,KAAK,UAAU;YACb,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvC,MAAK;QACP,KAAK,OAAO;YACV,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;YACpC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,MAAM;YACT,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;YACnC,MAAK;QACP,KAAK,UAAU;YACb,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACvC,MAAK;QACP,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,UAAU,EAAE,CAAA;YACZ,MAAK;QACP,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;gBACrD,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAA;gBAClC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOrB,CAAC,CAAA;oBACQ,MAAK;gBACP,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;YAClD,UAAU,EAAE,CAAA;YACZ,MAAK;QACP,CAAC;QACD,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpB,MAAK;QACP;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAA;YAC5C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACjB,UAAU,EAAE,CAAA;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBb,CAAC,CAAA;AACF,CAAC;AAED,qCAAqC;AACrC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;IACvC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,KAAK,IAAI,EAAE,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* traqr link — Connect cloud services to a Traqr project
|
|
3
|
+
*
|
|
4
|
+
* Non-interactive-first design: every service accepts CLI flags
|
|
5
|
+
* so Claude can call it programmatically. Interactive prompts
|
|
6
|
+
* are the human fallback, not the primary path.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* traqr link vcs --provider=gitlab --token=glpat-xxx --url=https://gitlab.example.com --project-id=123
|
|
10
|
+
* traqr link memory --provider=supabase --url=https://xxx.supabase.co --key=xxx
|
|
11
|
+
* traqr link obsidian --path=/Users/me/Documents/Obsidian\ Vault
|
|
12
|
+
* traqr link slack --webhook=https://hooks.slack.com/xxx
|
|
13
|
+
* traqr link issues --provider=linear --key=lin_api_xxx
|
|
14
|
+
* traqr link --test # test all configured services
|
|
15
|
+
*/
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* traqr link — Connect cloud services to a Traqr project
|
|
3
|
+
*
|
|
4
|
+
* Non-interactive-first design: every service accepts CLI flags
|
|
5
|
+
* so Claude can call it programmatically. Interactive prompts
|
|
6
|
+
* are the human fallback, not the primary path.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* traqr link vcs --provider=gitlab --token=glpat-xxx --url=https://gitlab.example.com --project-id=123
|
|
10
|
+
* traqr link memory --provider=supabase --url=https://xxx.supabase.co --key=xxx
|
|
11
|
+
* traqr link obsidian --path=/Users/me/Documents/Obsidian\ Vault
|
|
12
|
+
* traqr link slack --webhook=https://hooks.slack.com/xxx
|
|
13
|
+
* traqr link issues --provider=linear --key=lin_api_xxx
|
|
14
|
+
* traqr link --test # test all configured services
|
|
15
|
+
*/
|
|
16
|
+
import fs from 'fs/promises';
|
|
17
|
+
import path from 'path';
|
|
18
|
+
import { existsSync } from 'fs';
|
|
19
|
+
import { loadProjectConfig, deepMerge } from '@traqr/core';
|
|
20
|
+
import { ask, closePrompts } from '../lib/prompts.js';
|
|
21
|
+
const args = process.argv.slice(3);
|
|
22
|
+
const service = args[0];
|
|
23
|
+
const flags = parseFlags(args.slice(1));
|
|
24
|
+
function parseFlags(raw) {
|
|
25
|
+
const result = {};
|
|
26
|
+
for (const arg of raw) {
|
|
27
|
+
const match = arg.match(/^--(\w[\w-]*)=(.+)$/);
|
|
28
|
+
if (match)
|
|
29
|
+
result[match[1]] = match[2];
|
|
30
|
+
else if (arg.startsWith('--'))
|
|
31
|
+
result[arg.slice(2)] = 'true';
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
async function run() {
|
|
36
|
+
const { config, path: configPath } = loadProjectConfig();
|
|
37
|
+
if (!config) {
|
|
38
|
+
console.error('No .traqr/config.json found. Run "traqr init" first.');
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const configDir = path.dirname(configPath);
|
|
42
|
+
switch (service) {
|
|
43
|
+
case 'vcs':
|
|
44
|
+
await linkVcs(config, configDir);
|
|
45
|
+
break;
|
|
46
|
+
case 'memory':
|
|
47
|
+
await linkMemory(config, configDir);
|
|
48
|
+
break;
|
|
49
|
+
case 'obsidian':
|
|
50
|
+
await linkObsidian(config, configDir);
|
|
51
|
+
break;
|
|
52
|
+
case 'slack':
|
|
53
|
+
await linkSlack(config, configDir);
|
|
54
|
+
break;
|
|
55
|
+
case 'issues':
|
|
56
|
+
await linkIssues(config, configDir);
|
|
57
|
+
break;
|
|
58
|
+
case '--test':
|
|
59
|
+
await testAll(config);
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
console.log(`
|
|
63
|
+
traqr link — Connect cloud services
|
|
64
|
+
|
|
65
|
+
Usage: traqr link <service> [options]
|
|
66
|
+
|
|
67
|
+
Services:
|
|
68
|
+
vcs Git hosting (GitHub, GitLab)
|
|
69
|
+
memory Memory database (Supabase)
|
|
70
|
+
obsidian Obsidian vault path
|
|
71
|
+
slack Slack notifications
|
|
72
|
+
issues Issue tracker (Linear, GitLab)
|
|
73
|
+
|
|
74
|
+
Options:
|
|
75
|
+
--test Test connectivity for all configured services
|
|
76
|
+
|
|
77
|
+
Examples:
|
|
78
|
+
traqr link vcs --provider=gitlab --url=https://gitlab.example.com
|
|
79
|
+
traqr link obsidian --path="~/Documents/Obsidian Vault"
|
|
80
|
+
traqr link --test
|
|
81
|
+
`);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
closePrompts();
|
|
85
|
+
}
|
|
86
|
+
// ============================================================
|
|
87
|
+
// Service Linkers
|
|
88
|
+
// ============================================================
|
|
89
|
+
async function linkVcs(config, configDir) {
|
|
90
|
+
const provider = flags.provider || await ask('VCS provider (github/gitlab)');
|
|
91
|
+
const delta = {
|
|
92
|
+
vcs: {
|
|
93
|
+
provider: provider,
|
|
94
|
+
...(flags.url && { baseUrl: flags.url }),
|
|
95
|
+
...(flags['project-id'] && { projectId: flags['project-id'] }),
|
|
96
|
+
...(provider === 'gitlab' && { autoMerge: true, primedSession: true, removeSourceBranch: true }),
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
await writeConfigDelta(config, delta, configDir);
|
|
100
|
+
console.log(` VCS linked: ${provider}${flags.url ? ` at ${flags.url}` : ''}`);
|
|
101
|
+
if (provider === 'gitlab') {
|
|
102
|
+
console.log(' Tip: export GITLAB_TOKEN=glpat-xxx in your shell profile');
|
|
103
|
+
}
|
|
104
|
+
suggestRender();
|
|
105
|
+
}
|
|
106
|
+
async function linkMemory(config, configDir) {
|
|
107
|
+
const provider = flags.provider || await ask('Memory provider (supabase/local/none)');
|
|
108
|
+
const delta = {
|
|
109
|
+
memory: {
|
|
110
|
+
provider: provider,
|
|
111
|
+
...(flags.url && { apiBase: flags.url }),
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
await writeConfigDelta(config, delta, configDir);
|
|
115
|
+
console.log(` Memory linked: ${provider}`);
|
|
116
|
+
suggestRender();
|
|
117
|
+
}
|
|
118
|
+
async function linkObsidian(config, configDir) {
|
|
119
|
+
const vaultPath = flags.path || await ask('Obsidian vault path');
|
|
120
|
+
const resolved = path.resolve(vaultPath.replace(/^~/, process.env.HOME || ''));
|
|
121
|
+
const delta = {
|
|
122
|
+
vault: { path: resolved },
|
|
123
|
+
};
|
|
124
|
+
await writeConfigDelta(config, delta, configDir);
|
|
125
|
+
console.log(` Obsidian linked: ${resolved}`);
|
|
126
|
+
console.log(' Run "traqr vault init" to create the research folder structure.');
|
|
127
|
+
suggestRender();
|
|
128
|
+
}
|
|
129
|
+
async function linkSlack(config, configDir) {
|
|
130
|
+
const level = (flags.level || 'standard');
|
|
131
|
+
const delta = {
|
|
132
|
+
notifications: {
|
|
133
|
+
slackLevel: level,
|
|
134
|
+
...(flags.webhook && { slackWebhook: flags.webhook }),
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
await writeConfigDelta(config, delta, configDir);
|
|
138
|
+
console.log(` Slack linked: level=${level}`);
|
|
139
|
+
suggestRender();
|
|
140
|
+
}
|
|
141
|
+
async function linkIssues(config, configDir) {
|
|
142
|
+
const provider = flags.provider || await ask('Issue tracker (linear/gitlab/github/none)');
|
|
143
|
+
const delta = {
|
|
144
|
+
issues: {
|
|
145
|
+
provider: provider,
|
|
146
|
+
...(provider === 'linear' && flags['team-id'] && { linearTeamId: flags['team-id'] }),
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
await writeConfigDelta(config, delta, configDir);
|
|
150
|
+
console.log(` Issues linked: ${provider}`);
|
|
151
|
+
suggestRender();
|
|
152
|
+
}
|
|
153
|
+
// ============================================================
|
|
154
|
+
// Utilities
|
|
155
|
+
// ============================================================
|
|
156
|
+
async function writeConfigDelta(config, delta, configDir) {
|
|
157
|
+
const merged = deepMerge(config, delta);
|
|
158
|
+
const configPath = path.join(configDir, 'config.json');
|
|
159
|
+
await fs.writeFile(configPath, JSON.stringify(merged, null, 2) + '\n', 'utf-8');
|
|
160
|
+
}
|
|
161
|
+
async function testAll(config) {
|
|
162
|
+
console.log(' Testing configured services...\n');
|
|
163
|
+
// VCS
|
|
164
|
+
const vcs = config.vcs?.provider || 'github';
|
|
165
|
+
console.log(` VCS (${vcs}): ${config.vcs?.baseUrl || 'default'}`);
|
|
166
|
+
console.log(` ${config.vcs?.projectId ? 'project-id: ' + config.vcs.projectId : 'no project-id set'}`);
|
|
167
|
+
// Memory
|
|
168
|
+
const mem = config.memory?.provider || 'none';
|
|
169
|
+
console.log(` Memory (${mem}): ${config.memory?.apiBase || 'not configured'}`);
|
|
170
|
+
// Vault
|
|
171
|
+
const vault = config.vault?.path;
|
|
172
|
+
if (vault) {
|
|
173
|
+
const exists = existsSync(vault);
|
|
174
|
+
console.log(` Obsidian: ${vault} ${exists ? '(exists)' : '(NOT FOUND)'}`);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
console.log(' Obsidian: not configured');
|
|
178
|
+
}
|
|
179
|
+
// Issues
|
|
180
|
+
const issues = config.issues?.provider || 'none';
|
|
181
|
+
console.log(` Issues (${issues}): ${issues === 'linear' ? 'team ' + (config.issues?.linearTeamId || 'not set') : 'configured'}`);
|
|
182
|
+
// Slack
|
|
183
|
+
const slack = config.notifications?.slackLevel || 'none';
|
|
184
|
+
console.log(` Slack: ${slack}`);
|
|
185
|
+
console.log('\n For full connectivity tests, run the specific service commands with --test.');
|
|
186
|
+
}
|
|
187
|
+
function suggestRender() {
|
|
188
|
+
console.log('\n Run "npx traqr render" to regenerate skills with updated config.');
|
|
189
|
+
}
|
|
190
|
+
void run();
|
|
191
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAA;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAA;AAC5E,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACvB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AAEvC,SAAS,UAAU,CAAC,GAAa;IAC/B,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QAC9C,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;aACjC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;IAC9D,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,iBAAiB,EAAE,CAAA;IACxD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAA;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAW,CAAC,CAAA;IAE3C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK;YAAM,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAAC,MAAK;QACvD,KAAK,QAAQ;YAAG,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAAC,MAAK;QAC1D,KAAK,UAAU;YAAE,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAAC,MAAK;QAC7D,KAAK,OAAO;YAAI,MAAM,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAAC,MAAK;QACzD,KAAK,QAAQ;YAAG,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAAC,MAAK;QAC1D,KAAK,QAAQ;YAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YAAC,MAAK;QAC5C;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;CAmBjB,CAAC,CAAA;YACI,MAAK;IACT,CAAC;IAED,YAAY,EAAE,CAAA;AAChB,CAAC;AAED,+DAA+D;AAC/D,kBAAkB;AAClB,+DAA+D;AAE/D,KAAK,UAAU,OAAO,CAAC,MAAmB,EAAE,SAAiB;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,GAAG,CAAC,8BAA8B,CAAC,CAAA;IAC5E,MAAM,KAAK,GAAyB;QAClC,GAAG,EAAE;YACH,QAAQ,EAAE,QAA+B;YACzC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;YACxC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;SACjG;KACF,CAAA;IACD,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC9E,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;IAC3E,CAAC;IACD,aAAa,EAAE,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,SAAiB;IAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,GAAG,CAAC,uCAAuC,CAAC,CAAA;IACrF,MAAM,KAAK,GAAyB;QAClC,MAAM,EAAE;YACN,QAAQ,EAAE,QAAyC;YACnD,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;SACzC;KACF,CAAA;IACD,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAA;IAC3C,aAAa,EAAE,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAmB,EAAE,SAAiB;IAChE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,qBAAqB,CAAC,CAAA;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9E,MAAM,KAAK,GAAyB;QAClC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC1B,CAAA;IACD,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAA;IAChF,aAAa,EAAE,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAmB,EAAE,SAAiB;IAC7D,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,UAAU,CAA2C,CAAA;IACnF,MAAM,KAAK,GAAyB;QAClC,aAAa,EAAE;YACb,UAAU,EAAE,KAAK;YACjB,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;SACtD;KACF,CAAA;IACD,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAA;IAC7C,aAAa,EAAE,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,SAAiB;IAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,GAAG,CAAC,2CAA2C,CAAC,CAAA;IACzF,MAAM,KAAK,GAAyB;QAClC,MAAM,EAAE;YACN,QAAQ,EAAE,QAAmD;YAC7D,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;SACrF;KACF,CAAA;IACD,MAAM,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAA;IAC3C,aAAa,EAAE,CAAA;AACjB,CAAC;AAED,+DAA+D;AAC/D,YAAY;AACZ,+DAA+D;AAE/D,KAAK,UAAU,gBAAgB,CAAC,MAAmB,EAAE,KAA2B,EAAE,SAAiB;IACjG,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAgB,CAAA;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACtD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;AACjF,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAmB;IACxC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;IAEjD,MAAM;IACN,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,IAAI,QAAQ,CAAA;IAC5C,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,SAAS,EAAE,CAAC,CAAA;IAClE,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAEzG,SAAS;IACT,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC,CAAA;IAE/E,QAAQ;IACR,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAA;IAChC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QAChC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAA;IAC5E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IAC3C,CAAC;IAED,SAAS;IACT,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,MAAM,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAA;IAEjI,QAAQ;IACR,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,UAAU,IAAI,MAAM,CAAA;IACxD,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,CAAA;IAEhC,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAA;AAChG,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAA;AACrF,CAAC;AAED,KAAK,GAAG,EAAE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* traqr scaffold — Create a new DevOS monorepo from scratch
|
|
3
|
+
*
|
|
4
|
+
* Non-interactive-first: Claude writes config.json and runs this.
|
|
5
|
+
* Interactive prompts are the human fallback.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* traqr scaffold --preset=gitlab-team --name=my-project
|
|
9
|
+
* traqr scaffold --preset=github-pro --name=my-saas --dir=~/Projects
|
|
10
|
+
* traqr scaffold # interactive mode
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* traqr scaffold — Create a new DevOS monorepo from scratch
|
|
3
|
+
*
|
|
4
|
+
* Non-interactive-first: Claude writes config.json and runs this.
|
|
5
|
+
* Interactive prompts are the human fallback.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* traqr scaffold --preset=gitlab-team --name=my-project
|
|
9
|
+
* traqr scaffold --preset=github-pro --name=my-saas --dir=~/Projects
|
|
10
|
+
* traqr scaffold # interactive mode
|
|
11
|
+
*/
|
|
12
|
+
import fs from 'fs/promises';
|
|
13
|
+
import path from 'path';
|
|
14
|
+
import { execSync } from 'child_process';
|
|
15
|
+
import { STARTER_PACK_DEFAULTS, GOLDEN_PATH_DEFAULTS, deepMerge, renderAllTemplates, calculateAutomationScore, } from '@traqr/core';
|
|
16
|
+
import { writeFiles } from '../lib/writer.js';
|
|
17
|
+
import { ask, select, closePrompts } from '../lib/prompts.js';
|
|
18
|
+
const RAQR_SCAFFOLD = `
|
|
19
|
+
╭─────────────────────────────────────────────────────────────╮
|
|
20
|
+
│ /\\___/\\ │
|
|
21
|
+
│ ( o o ) Let's build your DevOS. │
|
|
22
|
+
│ ( =^= ) This takes about 30 seconds. │
|
|
23
|
+
│ (______) │
|
|
24
|
+
╰─────────────────────────────────────────────────────────────╯
|
|
25
|
+
`;
|
|
26
|
+
const args = process.argv.slice(3);
|
|
27
|
+
const flags = parseFlags(args);
|
|
28
|
+
function parseFlags(raw) {
|
|
29
|
+
const result = {};
|
|
30
|
+
for (const arg of raw) {
|
|
31
|
+
const match = arg.match(/^--(\w[\w-]*)=(.+)$/);
|
|
32
|
+
if (match)
|
|
33
|
+
result[match[1]] = match[2];
|
|
34
|
+
else if (arg.startsWith('--'))
|
|
35
|
+
result[arg.slice(2)] = 'true';
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
async function run() {
|
|
40
|
+
console.log(RAQR_SCAFFOLD);
|
|
41
|
+
// Resolve options from flags or interactive prompts
|
|
42
|
+
const preset = (flags.preset || await selectPreset());
|
|
43
|
+
const name = flags.name || await ask('Project name');
|
|
44
|
+
const parentDir = path.resolve((flags.dir || process.cwd()).replace(/^~/, process.env.HOME || ''));
|
|
45
|
+
const projectDir = path.join(parentDir, name);
|
|
46
|
+
// Guard: don't overwrite existing directory
|
|
47
|
+
try {
|
|
48
|
+
await fs.access(projectDir);
|
|
49
|
+
console.error(` Directory already exists: ${projectDir}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
catch { /* good — doesn't exist */ }
|
|
53
|
+
console.log(` Project: ${name}`);
|
|
54
|
+
console.log(` Preset: ${preset}`);
|
|
55
|
+
console.log(` Path: ${projectDir}`);
|
|
56
|
+
console.log('');
|
|
57
|
+
// 1. Create directory structure
|
|
58
|
+
const dirs = [
|
|
59
|
+
'apps',
|
|
60
|
+
'packages',
|
|
61
|
+
'.traqr',
|
|
62
|
+
'.worktrees',
|
|
63
|
+
'scripts',
|
|
64
|
+
'docs/claude',
|
|
65
|
+
'.claude/commands',
|
|
66
|
+
];
|
|
67
|
+
for (const dir of dirs) {
|
|
68
|
+
await fs.mkdir(path.join(projectDir, dir), { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
console.log(' Created directory structure');
|
|
71
|
+
// 2. Build config from Golden Path + Starter Pack
|
|
72
|
+
const golden = GOLDEN_PATH_DEFAULTS[preset];
|
|
73
|
+
const starter = STARTER_PACK_DEFAULTS[golden.starterPack];
|
|
74
|
+
const withVcs = deepMerge(starter, golden.vcsOverrides);
|
|
75
|
+
const config = deepMerge(withVcs, {
|
|
76
|
+
project: {
|
|
77
|
+
name,
|
|
78
|
+
displayName: name.charAt(0).toUpperCase() + name.slice(1),
|
|
79
|
+
repoPath: projectDir,
|
|
80
|
+
ghOrgRepo: '',
|
|
81
|
+
},
|
|
82
|
+
prefix: name.toUpperCase().replace(/[^A-Z]/g, '').slice(0, 8) || 'TRQ',
|
|
83
|
+
shipEnvVar: `${name.toUpperCase().replace(/[^A-Z]/g, '')}_SHIP_AUTHORIZED`,
|
|
84
|
+
sessionPrefix: name.toLowerCase().replace(/[^a-z0-9]/g, ''),
|
|
85
|
+
coAuthor: 'Claude Opus 4.6',
|
|
86
|
+
ports: { main: 3000 },
|
|
87
|
+
monorepo: { enabled: true, apps: {} },
|
|
88
|
+
});
|
|
89
|
+
// Calculate automation score
|
|
90
|
+
config.automationScore = calculateAutomationScore(config);
|
|
91
|
+
// 3. Write .traqr/config.json
|
|
92
|
+
const configPath = path.join(projectDir, '.traqr', 'config.json');
|
|
93
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
94
|
+
console.log(' Wrote .traqr/config.json');
|
|
95
|
+
// 4. Render all templates
|
|
96
|
+
const result = await renderAllTemplates(config);
|
|
97
|
+
const writeResult = await writeFiles(result.files, projectDir, { force: true });
|
|
98
|
+
console.log(` Rendered ${writeResult.written.length} template files`);
|
|
99
|
+
// Write global skills too (into project .claude/commands/ for now)
|
|
100
|
+
const globalWriteResult = await writeFiles(Object.fromEntries(Object.entries(result.globalFiles).map(([k, v]) => [
|
|
101
|
+
k.replace(/^~\/.claude\/commands\//, '.claude/commands/'), v
|
|
102
|
+
])), projectDir, { force: true });
|
|
103
|
+
console.log(` Rendered ${globalWriteResult.written.length} skill files`);
|
|
104
|
+
// 5. Create minimal package.json + turbo.json
|
|
105
|
+
const packageJson = {
|
|
106
|
+
name,
|
|
107
|
+
private: true,
|
|
108
|
+
workspaces: ['apps/*', 'packages/*'],
|
|
109
|
+
scripts: {
|
|
110
|
+
'build': 'turbo build',
|
|
111
|
+
'build:packages': 'turbo build --filter=./packages/*',
|
|
112
|
+
'dev': 'turbo dev',
|
|
113
|
+
},
|
|
114
|
+
devDependencies: {
|
|
115
|
+
'turbo': '^2',
|
|
116
|
+
'typescript': '^5',
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
await fs.writeFile(path.join(projectDir, 'package.json'), JSON.stringify(packageJson, null, 2) + '\n', 'utf-8');
|
|
120
|
+
const turboJson = {
|
|
121
|
+
$schema: 'https://turbo.build/schema.json',
|
|
122
|
+
tasks: {
|
|
123
|
+
build: { dependsOn: ['^build'], outputs: ['dist/**'] },
|
|
124
|
+
dev: { cache: false, persistent: true },
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
await fs.writeFile(path.join(projectDir, 'turbo.json'), JSON.stringify(turboJson, null, 2) + '\n', 'utf-8');
|
|
128
|
+
console.log(' Wrote package.json + turbo.json');
|
|
129
|
+
// 6. Git init + initial commit
|
|
130
|
+
try {
|
|
131
|
+
execSync('git init', { cwd: projectDir, stdio: 'pipe' });
|
|
132
|
+
execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });
|
|
133
|
+
execSync('git commit -m "chore: scaffold DevOS monorepo via traqr scaffold"', {
|
|
134
|
+
cwd: projectDir, stdio: 'pipe'
|
|
135
|
+
});
|
|
136
|
+
console.log(' Initialized git repository');
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
console.log(' Git init skipped (git not available or already initialized)');
|
|
140
|
+
}
|
|
141
|
+
// 7. Success output
|
|
142
|
+
console.log(`
|
|
143
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
144
|
+
|
|
145
|
+
Your DevOS is ready: ${projectDir}
|
|
146
|
+
|
|
147
|
+
What to do next:
|
|
148
|
+
cd ${projectDir}
|
|
149
|
+
npm install
|
|
150
|
+
npx traqr link vcs --provider=${config.vcs?.provider || 'github'}
|
|
151
|
+
npx traqr render --force # regenerate after linking
|
|
152
|
+
|
|
153
|
+
Or just tell Claude: "Set up Traqr for my project"
|
|
154
|
+
Claude reads the config, links services, and renders everything.
|
|
155
|
+
|
|
156
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
157
|
+
`);
|
|
158
|
+
closePrompts();
|
|
159
|
+
}
|
|
160
|
+
async function selectPreset() {
|
|
161
|
+
return await select('Which environment?', [
|
|
162
|
+
{ label: 'GitHub Pro', value: 'github-pro', description: 'GitHub + Linear + Slack (production)' },
|
|
163
|
+
{ label: 'GitLab Team', value: 'gitlab-team', description: 'GitLab + GitLab Issues + auto-merge (corporate)' },
|
|
164
|
+
{ label: 'GitLab Minimal', value: 'gitlab-minimal', description: 'GitLab only, no integrations (solo)' },
|
|
165
|
+
]);
|
|
166
|
+
}
|
|
167
|
+
void run();
|
|
168
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@traqr/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "CLI for Claude Code — persistent memory, worktree slots, autonomous CI/CD, skill templates.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"engines": {
|
|
51
51
|
"node": ">=18.0.0"
|
|
52
52
|
},
|
|
53
|
-
"license": "
|
|
53
|
+
"license": "Apache-2.0"
|
|
54
54
|
}
|