devworkspace 0.0.0-stage → 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.
- package/CHANGELOG.md +24 -0
- package/LICENSE +21 -0
- package/README.md +127 -3
- package/dist/agents/claude/adapter.d.ts +10 -0
- package/dist/agents/claude/adapter.js +97 -0
- package/dist/agents/claude/adapter.js.map +1 -0
- package/dist/agents/claude/content.d.ts +7 -0
- package/dist/agents/claude/content.js +136 -0
- package/dist/agents/claude/content.js.map +1 -0
- package/dist/agents/types.d.ts +26 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli/args.d.ts +194 -0
- package/dist/cli/args.js +93 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/help.d.ts +10 -0
- package/dist/cli/help.js +169 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +19 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/render.d.ts +39 -0
- package/dist/cli/render.js +211 -0
- package/dist/cli/render.js.map +1 -0
- package/dist/cli/run.d.ts +10 -0
- package/dist/cli/run.js +329 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/config/schemas.d.ts +76 -0
- package/dist/config/schemas.js +83 -0
- package/dist/config/schemas.js.map +1 -0
- package/dist/config/validate.d.ts +22 -0
- package/dist/config/validate.js +76 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/core/migrations.d.ts +15 -0
- package/dist/core/migrations.js +34 -0
- package/dist/core/migrations.js.map +1 -0
- package/dist/core/version.d.ts +2 -0
- package/dist/core/version.js +12 -0
- package/dist/core/version.js.map +1 -0
- package/dist/core/versioned.d.ts +13 -0
- package/dist/core/versioned.js +16 -0
- package/dist/core/versioned.js.map +1 -0
- package/dist/core/workspace.d.ts +34 -0
- package/dist/core/workspace.js +92 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/decisions/decision.d.ts +31 -0
- package/dist/decisions/decision.js +123 -0
- package/dist/decisions/decision.js.map +1 -0
- package/dist/discovery/commands.d.ts +12 -0
- package/dist/discovery/commands.js +92 -0
- package/dist/discovery/commands.js.map +1 -0
- package/dist/discovery/detect.d.ts +72 -0
- package/dist/discovery/detect.js +421 -0
- package/dist/discovery/detect.js.map +1 -0
- package/dist/discovery/ignore.d.ts +6 -0
- package/dist/discovery/ignore.js +76 -0
- package/dist/discovery/ignore.js.map +1 -0
- package/dist/discovery/scan.d.ts +24 -0
- package/dist/discovery/scan.js +132 -0
- package/dist/discovery/scan.js.map +1 -0
- package/dist/errors/index.d.ts +25 -0
- package/dist/errors/index.js +39 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/git/git.d.ts +27 -0
- package/dist/git/git.js +97 -0
- package/dist/git/git.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/agent-skills.d.ts +10 -0
- package/dist/integrations/agent-skills.js +45 -0
- package/dist/integrations/agent-skills.js.map +1 -0
- package/dist/integrations/graphify.d.ts +7 -0
- package/dist/integrations/graphify.js +54 -0
- package/dist/integrations/graphify.js.map +1 -0
- package/dist/integrations/index.d.ts +6 -0
- package/dist/integrations/index.js +30 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/omniroute.d.ts +7 -0
- package/dist/integrations/omniroute.js +24 -0
- package/dist/integrations/omniroute.js.map +1 -0
- package/dist/integrations/ponytail.d.ts +10 -0
- package/dist/integrations/ponytail.js +58 -0
- package/dist/integrations/ponytail.js.map +1 -0
- package/dist/integrations/probe.d.ts +6 -0
- package/dist/integrations/probe.js +41 -0
- package/dist/integrations/probe.js.map +1 -0
- package/dist/integrations/types.d.ts +25 -0
- package/dist/integrations/types.js +2 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/knowledge/facts.d.ts +43 -0
- package/dist/knowledge/facts.js +195 -0
- package/dist/knowledge/facts.js.map +1 -0
- package/dist/portability/bundle.d.ts +22 -0
- package/dist/portability/bundle.js +102 -0
- package/dist/portability/bundle.js.map +1 -0
- package/dist/prompts/onboarding.d.ts +19 -0
- package/dist/prompts/onboarding.js +53 -0
- package/dist/prompts/onboarding.js.map +1 -0
- package/dist/prompts/refresh.d.ts +15 -0
- package/dist/prompts/refresh.js +33 -0
- package/dist/prompts/refresh.js.map +1 -0
- package/dist/prompts/requirements.d.ts +9 -0
- package/dist/prompts/requirements.js +34 -0
- package/dist/prompts/requirements.js.map +1 -0
- package/dist/security/files.d.ts +5 -0
- package/dist/security/files.js +44 -0
- package/dist/security/files.js.map +1 -0
- package/dist/security/redact.d.ts +13 -0
- package/dist/security/redact.js +43 -0
- package/dist/security/redact.js.map +1 -0
- package/dist/services/agent.d.ts +11 -0
- package/dist/services/agent.js +42 -0
- package/dist/services/agent.js.map +1 -0
- package/dist/services/analysis.d.ts +45 -0
- package/dist/services/analysis.js +151 -0
- package/dist/services/analysis.js.map +1 -0
- package/dist/services/common.d.ts +18 -0
- package/dist/services/common.js +18 -0
- package/dist/services/common.js.map +1 -0
- package/dist/services/doctor.d.ts +27 -0
- package/dist/services/doctor.js +223 -0
- package/dist/services/doctor.js.map +1 -0
- package/dist/services/init.d.ts +18 -0
- package/dist/services/init.js +135 -0
- package/dist/services/init.js.map +1 -0
- package/dist/services/knowledge.d.ts +40 -0
- package/dist/services/knowledge.js +72 -0
- package/dist/services/knowledge.js.map +1 -0
- package/dist/services/migrate.d.ts +16 -0
- package/dist/services/migrate.js +54 -0
- package/dist/services/migrate.js.map +1 -0
- package/dist/services/portability.d.ts +27 -0
- package/dist/services/portability.js +155 -0
- package/dist/services/portability.js.map +1 -0
- package/dist/services/records.d.ts +8 -0
- package/dist/services/records.js +26 -0
- package/dist/services/records.js.map +1 -0
- package/dist/services/refresh.d.ts +22 -0
- package/dist/services/refresh.js +64 -0
- package/dist/services/refresh.js.map +1 -0
- package/dist/services/status.d.ts +57 -0
- package/dist/services/status.js +111 -0
- package/dist/services/status.js.map +1 -0
- package/dist/services/tasks.d.ts +44 -0
- package/dist/services/tasks.js +136 -0
- package/dist/services/tasks.js.map +1 -0
- package/dist/sessions/session.d.ts +19 -0
- package/dist/sessions/session.js +53 -0
- package/dist/sessions/session.js.map +1 -0
- package/dist/tasks/routing.d.ts +27 -0
- package/dist/tasks/routing.js +206 -0
- package/dist/tasks/routing.js.map +1 -0
- package/dist/tasks/task.d.ts +90 -0
- package/dist/tasks/task.js +275 -0
- package/dist/tasks/task.js.map +1 -0
- package/dist/utils/cleanup.d.ts +3 -0
- package/dist/utils/cleanup.js +18 -0
- package/dist/utils/cleanup.js.map +1 -0
- package/dist/utils/fs.d.ts +17 -0
- package/dist/utils/fs.js +164 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/lock.d.ts +6 -0
- package/dist/utils/lock.js +77 -0
- package/dist/utils/lock.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.js +18 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +18 -0
- package/dist/utils/paths.js +95 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/proc.d.ts +22 -0
- package/dist/utils/proc.js +74 -0
- package/dist/utils/proc.js.map +1 -0
- package/docs/architecture.md +53 -0
- package/docs/benchmarking.md +33 -0
- package/docs/claude.md +46 -0
- package/docs/contributing.md +64 -0
- package/docs/getting-started.md +68 -0
- package/docs/integrations.md +51 -0
- package/docs/knowledge.md +66 -0
- package/docs/portability.md +40 -0
- package/docs/routing.md +51 -0
- package/docs/security.md +44 -0
- package/docs/testing.md +58 -0
- package/docs/troubleshooting.md +26 -0
- package/package.json +68 -4
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/** Every flag the CLI understands. Unknown flags are rejected so typos never silently do nothing. */
|
|
2
|
+
export declare const OPTIONS: {
|
|
3
|
+
readonly help: {
|
|
4
|
+
readonly type: "boolean";
|
|
5
|
+
readonly short: "h";
|
|
6
|
+
};
|
|
7
|
+
readonly version: {
|
|
8
|
+
readonly type: "boolean";
|
|
9
|
+
readonly short: "v";
|
|
10
|
+
};
|
|
11
|
+
readonly json: {
|
|
12
|
+
readonly type: "boolean";
|
|
13
|
+
};
|
|
14
|
+
readonly debug: {
|
|
15
|
+
readonly type: "boolean";
|
|
16
|
+
};
|
|
17
|
+
readonly 'no-color': {
|
|
18
|
+
readonly type: "boolean";
|
|
19
|
+
};
|
|
20
|
+
readonly ascii: {
|
|
21
|
+
readonly type: "boolean";
|
|
22
|
+
};
|
|
23
|
+
readonly 'dry-run': {
|
|
24
|
+
readonly type: "boolean";
|
|
25
|
+
};
|
|
26
|
+
readonly yes: {
|
|
27
|
+
readonly type: "boolean";
|
|
28
|
+
readonly short: "y";
|
|
29
|
+
};
|
|
30
|
+
readonly cwd: {
|
|
31
|
+
readonly type: "string";
|
|
32
|
+
};
|
|
33
|
+
readonly root: {
|
|
34
|
+
readonly type: "string";
|
|
35
|
+
};
|
|
36
|
+
readonly fix: {
|
|
37
|
+
readonly type: "boolean";
|
|
38
|
+
};
|
|
39
|
+
readonly strict: {
|
|
40
|
+
readonly type: "boolean";
|
|
41
|
+
};
|
|
42
|
+
readonly out: {
|
|
43
|
+
readonly type: "string";
|
|
44
|
+
readonly short: "o";
|
|
45
|
+
};
|
|
46
|
+
readonly overwrite: {
|
|
47
|
+
readonly type: "boolean";
|
|
48
|
+
};
|
|
49
|
+
readonly 'allow-different-project': {
|
|
50
|
+
readonly type: "boolean";
|
|
51
|
+
};
|
|
52
|
+
readonly topic: {
|
|
53
|
+
readonly type: "string";
|
|
54
|
+
};
|
|
55
|
+
readonly full: {
|
|
56
|
+
readonly type: "boolean";
|
|
57
|
+
};
|
|
58
|
+
readonly all: {
|
|
59
|
+
readonly type: "boolean";
|
|
60
|
+
};
|
|
61
|
+
readonly agent: {
|
|
62
|
+
readonly type: "string";
|
|
63
|
+
};
|
|
64
|
+
readonly type: {
|
|
65
|
+
readonly type: "string";
|
|
66
|
+
};
|
|
67
|
+
readonly title: {
|
|
68
|
+
readonly type: "string";
|
|
69
|
+
};
|
|
70
|
+
readonly key: {
|
|
71
|
+
readonly type: "string";
|
|
72
|
+
};
|
|
73
|
+
readonly value: {
|
|
74
|
+
readonly type: "string";
|
|
75
|
+
};
|
|
76
|
+
readonly source: {
|
|
77
|
+
readonly type: "string";
|
|
78
|
+
};
|
|
79
|
+
readonly 'source-type': {
|
|
80
|
+
readonly type: "string";
|
|
81
|
+
};
|
|
82
|
+
readonly file: {
|
|
83
|
+
readonly type: "string";
|
|
84
|
+
readonly multiple: true;
|
|
85
|
+
};
|
|
86
|
+
readonly confidence: {
|
|
87
|
+
readonly type: "string";
|
|
88
|
+
};
|
|
89
|
+
readonly status: {
|
|
90
|
+
readonly type: "string";
|
|
91
|
+
};
|
|
92
|
+
readonly reason: {
|
|
93
|
+
readonly type: "string";
|
|
94
|
+
};
|
|
95
|
+
readonly detail: {
|
|
96
|
+
readonly type: "string";
|
|
97
|
+
};
|
|
98
|
+
readonly note: {
|
|
99
|
+
readonly type: "string";
|
|
100
|
+
};
|
|
101
|
+
readonly phase: {
|
|
102
|
+
readonly type: "string";
|
|
103
|
+
};
|
|
104
|
+
readonly passed: {
|
|
105
|
+
readonly type: "string";
|
|
106
|
+
};
|
|
107
|
+
readonly failed: {
|
|
108
|
+
readonly type: "string";
|
|
109
|
+
};
|
|
110
|
+
readonly criteria: {
|
|
111
|
+
readonly type: "string";
|
|
112
|
+
readonly multiple: true;
|
|
113
|
+
};
|
|
114
|
+
readonly plan: {
|
|
115
|
+
readonly type: "string";
|
|
116
|
+
readonly multiple: true;
|
|
117
|
+
};
|
|
118
|
+
readonly area: {
|
|
119
|
+
readonly type: "string";
|
|
120
|
+
readonly multiple: true;
|
|
121
|
+
};
|
|
122
|
+
readonly 'decision-note': {
|
|
123
|
+
readonly type: "string";
|
|
124
|
+
readonly multiple: true;
|
|
125
|
+
};
|
|
126
|
+
readonly summary: {
|
|
127
|
+
readonly type: "string";
|
|
128
|
+
};
|
|
129
|
+
readonly blocker: {
|
|
130
|
+
readonly type: "string";
|
|
131
|
+
readonly multiple: true;
|
|
132
|
+
};
|
|
133
|
+
readonly 'clear-blockers': {
|
|
134
|
+
readonly type: "boolean";
|
|
135
|
+
};
|
|
136
|
+
readonly require: {
|
|
137
|
+
readonly type: "string";
|
|
138
|
+
readonly multiple: true;
|
|
139
|
+
};
|
|
140
|
+
readonly 'user-work-intact': {
|
|
141
|
+
readonly type: "boolean";
|
|
142
|
+
};
|
|
143
|
+
readonly 'knowledge-reviewed': {
|
|
144
|
+
readonly type: "boolean";
|
|
145
|
+
};
|
|
146
|
+
readonly 'final-state-inspected': {
|
|
147
|
+
readonly type: "boolean";
|
|
148
|
+
};
|
|
149
|
+
readonly context: {
|
|
150
|
+
readonly type: "string";
|
|
151
|
+
};
|
|
152
|
+
readonly decision: {
|
|
153
|
+
readonly type: "string";
|
|
154
|
+
};
|
|
155
|
+
readonly consequences: {
|
|
156
|
+
readonly type: "string";
|
|
157
|
+
};
|
|
158
|
+
readonly supersedes: {
|
|
159
|
+
readonly type: "string";
|
|
160
|
+
};
|
|
161
|
+
readonly goal: {
|
|
162
|
+
readonly type: "string";
|
|
163
|
+
};
|
|
164
|
+
readonly done: {
|
|
165
|
+
readonly type: "string";
|
|
166
|
+
readonly multiple: true;
|
|
167
|
+
};
|
|
168
|
+
readonly 'tests-run': {
|
|
169
|
+
readonly type: "string";
|
|
170
|
+
readonly multiple: true;
|
|
171
|
+
};
|
|
172
|
+
readonly remaining: {
|
|
173
|
+
readonly type: "string";
|
|
174
|
+
readonly multiple: true;
|
|
175
|
+
};
|
|
176
|
+
readonly next: {
|
|
177
|
+
readonly type: "string";
|
|
178
|
+
};
|
|
179
|
+
readonly task: {
|
|
180
|
+
readonly type: "string";
|
|
181
|
+
};
|
|
182
|
+
readonly limit: {
|
|
183
|
+
readonly type: "string";
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
export interface ParsedArgs {
|
|
187
|
+
positionals: string[];
|
|
188
|
+
values: Record<string, string | boolean | string[] | undefined>;
|
|
189
|
+
}
|
|
190
|
+
export declare function parseCli(argv: string[]): ParsedArgs;
|
|
191
|
+
export declare function str(v: ParsedArgs['values'], k: string): string | undefined;
|
|
192
|
+
export declare function bool(v: ParsedArgs['values'], k: string): boolean;
|
|
193
|
+
export declare function list(v: ParsedArgs['values'], k: string): string[];
|
|
194
|
+
export declare function int(v: ParsedArgs['values'], k: string): number | undefined;
|
package/dist/cli/args.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { parseArgs } from 'node:util';
|
|
2
|
+
import { DevWorkspaceError } from '../errors/index.js';
|
|
3
|
+
/** Every flag the CLI understands. Unknown flags are rejected so typos never silently do nothing. */
|
|
4
|
+
export const OPTIONS = {
|
|
5
|
+
help: { type: 'boolean', short: 'h' },
|
|
6
|
+
version: { type: 'boolean', short: 'v' },
|
|
7
|
+
json: { type: 'boolean' },
|
|
8
|
+
debug: { type: 'boolean' },
|
|
9
|
+
'no-color': { type: 'boolean' },
|
|
10
|
+
ascii: { type: 'boolean' },
|
|
11
|
+
'dry-run': { type: 'boolean' },
|
|
12
|
+
yes: { type: 'boolean', short: 'y' },
|
|
13
|
+
cwd: { type: 'string' },
|
|
14
|
+
root: { type: 'string' },
|
|
15
|
+
fix: { type: 'boolean' },
|
|
16
|
+
strict: { type: 'boolean' },
|
|
17
|
+
out: { type: 'string', short: 'o' },
|
|
18
|
+
overwrite: { type: 'boolean' },
|
|
19
|
+
'allow-different-project': { type: 'boolean' },
|
|
20
|
+
topic: { type: 'string' },
|
|
21
|
+
full: { type: 'boolean' },
|
|
22
|
+
all: { type: 'boolean' },
|
|
23
|
+
agent: { type: 'string' },
|
|
24
|
+
type: { type: 'string' },
|
|
25
|
+
title: { type: 'string' },
|
|
26
|
+
key: { type: 'string' },
|
|
27
|
+
value: { type: 'string' },
|
|
28
|
+
source: { type: 'string' },
|
|
29
|
+
'source-type': { type: 'string' },
|
|
30
|
+
file: { type: 'string', multiple: true },
|
|
31
|
+
confidence: { type: 'string' },
|
|
32
|
+
status: { type: 'string' },
|
|
33
|
+
reason: { type: 'string' },
|
|
34
|
+
detail: { type: 'string' },
|
|
35
|
+
note: { type: 'string' },
|
|
36
|
+
phase: { type: 'string' },
|
|
37
|
+
passed: { type: 'string' },
|
|
38
|
+
failed: { type: 'string' },
|
|
39
|
+
criteria: { type: 'string', multiple: true },
|
|
40
|
+
plan: { type: 'string', multiple: true },
|
|
41
|
+
area: { type: 'string', multiple: true },
|
|
42
|
+
'decision-note': { type: 'string', multiple: true },
|
|
43
|
+
summary: { type: 'string' },
|
|
44
|
+
blocker: { type: 'string', multiple: true },
|
|
45
|
+
'clear-blockers': { type: 'boolean' },
|
|
46
|
+
require: { type: 'string', multiple: true },
|
|
47
|
+
'user-work-intact': { type: 'boolean' },
|
|
48
|
+
'knowledge-reviewed': { type: 'boolean' },
|
|
49
|
+
'final-state-inspected': { type: 'boolean' },
|
|
50
|
+
context: { type: 'string' },
|
|
51
|
+
decision: { type: 'string' },
|
|
52
|
+
consequences: { type: 'string' },
|
|
53
|
+
supersedes: { type: 'string' },
|
|
54
|
+
goal: { type: 'string' },
|
|
55
|
+
done: { type: 'string', multiple: true },
|
|
56
|
+
'tests-run': { type: 'string', multiple: true },
|
|
57
|
+
remaining: { type: 'string', multiple: true },
|
|
58
|
+
next: { type: 'string' },
|
|
59
|
+
task: { type: 'string' },
|
|
60
|
+
limit: { type: 'string' },
|
|
61
|
+
};
|
|
62
|
+
export function parseCli(argv) {
|
|
63
|
+
try {
|
|
64
|
+
const { values, positionals } = parseArgs({ args: argv, options: OPTIONS, allowPositionals: true, strict: true });
|
|
65
|
+
return { positionals, values: values };
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
throw new DevWorkspaceError('USAGE', e.message.replace(/^Unknown option/, 'Unknown option'), {
|
|
69
|
+
hint: 'Run "devworkspace --help" or "devworkspace <command> --help".',
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export function str(v, k) {
|
|
74
|
+
const x = v[k];
|
|
75
|
+
return typeof x === 'string' ? x : undefined;
|
|
76
|
+
}
|
|
77
|
+
export function bool(v, k) {
|
|
78
|
+
return v[k] === true;
|
|
79
|
+
}
|
|
80
|
+
export function list(v, k) {
|
|
81
|
+
const x = v[k];
|
|
82
|
+
return Array.isArray(x) ? x : [];
|
|
83
|
+
}
|
|
84
|
+
export function int(v, k) {
|
|
85
|
+
const s = str(v, k);
|
|
86
|
+
if (s === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
const n = Number(s);
|
|
89
|
+
if (!Number.isInteger(n))
|
|
90
|
+
throw new DevWorkspaceError('USAGE', `--${k} must be an integer (got "${s}").`);
|
|
91
|
+
return n;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseArgs } from 'node:util';\nimport { DevWorkspaceError } from '../errors/index.js';\n\ntype OptionSpec = { type: 'boolean' | 'string'; short?: string; multiple?: boolean };\n\n/** Every flag the CLI understands. Unknown flags are rejected so typos never silently do nothing. */\nexport const OPTIONS = {\n help: { type: 'boolean', short: 'h' },\n version: { type: 'boolean', short: 'v' },\n json: { type: 'boolean' },\n debug: { type: 'boolean' },\n 'no-color': { type: 'boolean' },\n ascii: { type: 'boolean' },\n 'dry-run': { type: 'boolean' },\n yes: { type: 'boolean', short: 'y' },\n cwd: { type: 'string' },\n root: { type: 'string' },\n fix: { type: 'boolean' },\n strict: { type: 'boolean' },\n out: { type: 'string', short: 'o' },\n overwrite: { type: 'boolean' },\n 'allow-different-project': { type: 'boolean' },\n topic: { type: 'string' },\n full: { type: 'boolean' },\n all: { type: 'boolean' },\n agent: { type: 'string' },\n type: { type: 'string' },\n title: { type: 'string' },\n key: { type: 'string' },\n value: { type: 'string' },\n source: { type: 'string' },\n 'source-type': { type: 'string' },\n file: { type: 'string', multiple: true },\n confidence: { type: 'string' },\n status: { type: 'string' },\n reason: { type: 'string' },\n detail: { type: 'string' },\n note: { type: 'string' },\n phase: { type: 'string' },\n passed: { type: 'string' },\n failed: { type: 'string' },\n criteria: { type: 'string', multiple: true },\n plan: { type: 'string', multiple: true },\n area: { type: 'string', multiple: true },\n 'decision-note': { type: 'string', multiple: true },\n summary: { type: 'string' },\n blocker: { type: 'string', multiple: true },\n 'clear-blockers': { type: 'boolean' },\n require: { type: 'string', multiple: true },\n 'user-work-intact': { type: 'boolean' },\n 'knowledge-reviewed': { type: 'boolean' },\n 'final-state-inspected': { type: 'boolean' },\n context: { type: 'string' },\n decision: { type: 'string' },\n consequences: { type: 'string' },\n supersedes: { type: 'string' },\n goal: { type: 'string' },\n done: { type: 'string', multiple: true },\n 'tests-run': { type: 'string', multiple: true },\n remaining: { type: 'string', multiple: true },\n next: { type: 'string' },\n task: { type: 'string' },\n limit: { type: 'string' },\n} as const satisfies Record<string, OptionSpec>;\n\nexport interface ParsedArgs {\n positionals: string[];\n values: Record<string, string | boolean | string[] | undefined>;\n}\n\nexport function parseCli(argv: string[]): ParsedArgs {\n try {\n const { values, positionals } = parseArgs({ args: argv, options: OPTIONS, allowPositionals: true, strict: true });\n return { positionals, values: values as ParsedArgs['values'] };\n } catch (e) {\n throw new DevWorkspaceError('USAGE', (e as Error).message.replace(/^Unknown option/, 'Unknown option'), {\n hint: 'Run \"devworkspace --help\" or \"devworkspace <command> --help\".',\n });\n }\n}\n\nexport function str(v: ParsedArgs['values'], k: string): string | undefined {\n const x = v[k];\n return typeof x === 'string' ? x : undefined;\n}\n\nexport function bool(v: ParsedArgs['values'], k: string): boolean {\n return v[k] === true;\n}\n\nexport function list(v: ParsedArgs['values'], k: string): string[] {\n const x = v[k];\n return Array.isArray(x) ? x : [];\n}\n\nexport function int(v: ParsedArgs['values'], k: string): number | undefined {\n const s = str(v, k);\n if (s === undefined) return undefined;\n const n = Number(s);\n if (!Number.isInteger(n)) throw new DevWorkspaceError('USAGE', `--${k} must be an integer (got \"${s}\").`);\n return n;\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface CommandHelp {
|
|
2
|
+
name: string;
|
|
3
|
+
summary: string;
|
|
4
|
+
usage: string[];
|
|
5
|
+
options: [string, string][];
|
|
6
|
+
examples: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare const COMMANDS: CommandHelp[];
|
|
9
|
+
export declare function topHelp(version: string): string;
|
|
10
|
+
export declare function commandHelp(c: CommandHelp): string;
|
package/dist/cli/help.js
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
const COMMON = [
|
|
2
|
+
['--json', 'machine-readable output'],
|
|
3
|
+
['--cwd <dir>', 'run as if started in <dir>'],
|
|
4
|
+
['--debug', 'show stack traces and debug logs'],
|
|
5
|
+
];
|
|
6
|
+
export const COMMANDS = [
|
|
7
|
+
{
|
|
8
|
+
name: 'init',
|
|
9
|
+
summary: 'Create .devworkspace/ in the current project (safe to re-run)',
|
|
10
|
+
usage: ['devworkspace init [--root <dir>] [--dry-run]'],
|
|
11
|
+
options: [['--root <dir>', 'project root (default: Git top-level or current directory)'], ['--dry-run', 'show what would be created'], ...COMMON],
|
|
12
|
+
examples: ['npx devworkspace init'],
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'analyze',
|
|
16
|
+
summary: 'Deterministic repository discovery + generate the Claude onboarding prompt',
|
|
17
|
+
usage: ['devworkspace analyze [--dry-run]'],
|
|
18
|
+
options: [['--dry-run', 'discover and report without writing files'], ...COMMON],
|
|
19
|
+
examples: ['devworkspace analyze', 'devworkspace analyze --json'],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: 'status',
|
|
23
|
+
summary: 'Concise overview: health, Git, knowledge, tasks, integrations, verification',
|
|
24
|
+
usage: ['devworkspace status [--strict]'],
|
|
25
|
+
options: [['--strict', 'exit 3 when anything needs attention'], ...COMMON],
|
|
26
|
+
examples: ['devworkspace status', 'devworkspace status --json'],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'doctor',
|
|
30
|
+
summary: 'Check the workspace, integrations, security and portability',
|
|
31
|
+
usage: ['devworkspace doctor [--fix] [--strict]'],
|
|
32
|
+
options: [['--fix', 'safely create missing folders/ignore rules (never deletes)'], ['--strict', 'exit 3 when there are warnings'], ...COMMON],
|
|
33
|
+
examples: ['devworkspace doctor', 'devworkspace doctor --json --strict'],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'refresh',
|
|
37
|
+
summary: 'Re-derive deterministic facts and mark knowledge stale when its evidence changed',
|
|
38
|
+
usage: ['devworkspace refresh [--dry-run]'],
|
|
39
|
+
options: [['--dry-run', 'report stale knowledge without writing'], ...COMMON],
|
|
40
|
+
examples: ['devworkspace refresh'],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'context',
|
|
44
|
+
summary: 'Show what DevWorkspace believes about the project',
|
|
45
|
+
usage: ['devworkspace context [--topic <prefix>] [--full]'],
|
|
46
|
+
options: [['--topic <text>', 'only facts whose key contains <text>'], ['--full', 'also print .devworkspace/context/*.md'], ...COMMON],
|
|
47
|
+
examples: ['devworkspace context --topic auth'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'fact',
|
|
51
|
+
summary: 'Record, verify or remove a piece of project knowledge',
|
|
52
|
+
usage: [
|
|
53
|
+
'devworkspace fact add --key <key> --value <text> --source <desc> [--file <rel path>]... [--source-type ai|user|file|git] [--confidence HIGH|MEDIUM|LOW] [--status VERIFIED|INFERRED|UNKNOWN]',
|
|
54
|
+
'devworkspace fact verify <key>',
|
|
55
|
+
'devworkspace fact remove <key>',
|
|
56
|
+
'devworkspace fact list',
|
|
57
|
+
],
|
|
58
|
+
options: [
|
|
59
|
+
['--key', 'lowercase dotted key, e.g. auth.session-store'],
|
|
60
|
+
['--value', 'one concise sentence (no secrets, no absolute paths)'],
|
|
61
|
+
['--file <path>', 'repository file that evidences the fact (repeatable); used for staleness'],
|
|
62
|
+
...COMMON,
|
|
63
|
+
],
|
|
64
|
+
examples: ['devworkspace fact add --key auth.sessions --value "Sessions live in Redis" --source "src/auth/session.ts" --file src/auth/session.ts --source-type ai --confidence HIGH --status VERIFIED'],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'task',
|
|
68
|
+
summary: 'Track engineering tasks with a completion gate',
|
|
69
|
+
usage: [
|
|
70
|
+
'devworkspace task new "<request>" [--type BUG|FEATURE|...]',
|
|
71
|
+
'devworkspace task list [--all] (alias: devworkspace tasks)',
|
|
72
|
+
'devworkspace task show <id>',
|
|
73
|
+
'devworkspace task status <id> <STATUS> [--note <text>]',
|
|
74
|
+
'devworkspace task update <id> [--title ..] [--criteria ..]... [--plan ..]... [--area ..]... [--blocker ..]... [--require <check>]... [--summary ..]',
|
|
75
|
+
'devworkspace task verify <id> <check> pass|fail|skip|pending [--reason user-override] [--detail <text>]',
|
|
76
|
+
'devworkspace task tests <id> --phase baseline|after --passed <n> --failed <n>',
|
|
77
|
+
'devworkspace task attest <id> [--user-work-intact] [--knowledge-reviewed] [--final-state-inspected]',
|
|
78
|
+
],
|
|
79
|
+
options: [['--all', 'include completed tasks'], ...COMMON],
|
|
80
|
+
examples: ['devworkspace task new "Fix the quotation email bug"', 'devworkspace task status T-20260101-ab12 COMPLETED'],
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'decision',
|
|
84
|
+
summary: 'Record architectural/project decisions (append-only, human-readable)',
|
|
85
|
+
usage: [
|
|
86
|
+
'devworkspace decision add --title <t> --context <c> --decision <d> --consequences <q> [--supersedes <n>]',
|
|
87
|
+
'devworkspace decision list',
|
|
88
|
+
'devworkspace decision show <n>',
|
|
89
|
+
],
|
|
90
|
+
options: COMMON,
|
|
91
|
+
examples: ['devworkspace decision list'],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'session',
|
|
95
|
+
summary: 'Save or list short session summaries (never transcripts)',
|
|
96
|
+
usage: [
|
|
97
|
+
'devworkspace session save --goal <g> [--done <x>]... [--area <a>]... [--tests-run <t>]... [--decision-note <d>]... [--remaining <r>]... [--next <n>] [--task <id>]',
|
|
98
|
+
'devworkspace session list',
|
|
99
|
+
],
|
|
100
|
+
options: COMMON,
|
|
101
|
+
examples: ['devworkspace session save --goal "Fix login bug" --done "Added regression test" --next "Run e2e"'],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'agent',
|
|
105
|
+
summary: 'Install DevWorkspace instructions for a coding agent (default: claude)',
|
|
106
|
+
usage: ['devworkspace agent install [--agent claude] [--dry-run]'],
|
|
107
|
+
options: [['--agent <id>', 'agent adapter (default: claude)'], ['--dry-run', 'preview the files that would change'], ...COMMON],
|
|
108
|
+
examples: ['devworkspace agent install --dry-run'],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'export',
|
|
112
|
+
summary: 'Export portable project knowledge to a JSON bundle',
|
|
113
|
+
usage: ['devworkspace export [--out <file>] [--dry-run]'],
|
|
114
|
+
options: [['--out <file>', 'output path (default: devworkspace-export-<date>.json)'], ...COMMON],
|
|
115
|
+
examples: ['devworkspace export --out knowledge.json'],
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'import',
|
|
119
|
+
summary: 'Safely import an export bundle (validated; never silently overwrites)',
|
|
120
|
+
usage: ['devworkspace import <file> [--dry-run] [--overwrite] [--allow-different-project]'],
|
|
121
|
+
options: [['--overwrite', 'replace differing local files (backups are kept)'], ['--dry-run', 'show what would change'], ...COMMON],
|
|
122
|
+
examples: ['devworkspace import knowledge.json --dry-run'],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'migrate',
|
|
126
|
+
summary: 'Upgrade workspace files to the current schema (with backups)',
|
|
127
|
+
usage: ['devworkspace migrate [--dry-run]'],
|
|
128
|
+
options: [['--dry-run', 'list what would be migrated'], ...COMMON],
|
|
129
|
+
examples: ['devworkspace migrate'],
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
export function topHelp(version) {
|
|
133
|
+
const w = Math.max(...COMMANDS.map((c) => c.name.length));
|
|
134
|
+
return [
|
|
135
|
+
`devworkspace ${version} - project-local AI engineering workspace`,
|
|
136
|
+
'',
|
|
137
|
+
'Usage: devworkspace <command> [options]',
|
|
138
|
+
'',
|
|
139
|
+
'Commands:',
|
|
140
|
+
...COMMANDS.map((c) => ` ${c.name.padEnd(w + 2)}${c.summary}`),
|
|
141
|
+
'',
|
|
142
|
+
'Quick start:',
|
|
143
|
+
' cd my-project',
|
|
144
|
+
' npx devworkspace init',
|
|
145
|
+
' npx devworkspace analyze',
|
|
146
|
+
' # paste .devworkspace/analysis/onboarding-prompt.md into Claude Code',
|
|
147
|
+
'',
|
|
148
|
+
'Global options: --json --cwd <dir> --debug --no-color --ascii --yes --help --version',
|
|
149
|
+
'(DevWorkspace never prompts interactively, so --yes is accepted as a no-op for script compatibility.)',
|
|
150
|
+
'Exit codes: 0 ok · 1 failure · 2 usage error · 3 warnings (only with --strict) · 130 interrupted',
|
|
151
|
+
'Run "devworkspace <command> --help" for details.',
|
|
152
|
+
].join('\n');
|
|
153
|
+
}
|
|
154
|
+
export function commandHelp(c) {
|
|
155
|
+
const w = Math.max(...c.options.map(([o]) => o.length));
|
|
156
|
+
return [
|
|
157
|
+
`devworkspace ${c.name} - ${c.summary}`,
|
|
158
|
+
'',
|
|
159
|
+
'Usage:',
|
|
160
|
+
...c.usage.map((u) => ` ${u}`),
|
|
161
|
+
'',
|
|
162
|
+
'Options:',
|
|
163
|
+
...c.options.map(([o, d]) => ` ${o.padEnd(w + 2)}${d}`),
|
|
164
|
+
'',
|
|
165
|
+
'Examples:',
|
|
166
|
+
...c.examples.map((e) => ` ${e}`),
|
|
167
|
+
].join('\n');
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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","sourcesContent":["export interface CommandHelp {\n name: string;\n summary: string;\n usage: string[];\n options: [string, string][];\n examples: string[];\n}\n\nconst COMMON: [string, string][] = [\n ['--json', 'machine-readable output'],\n ['--cwd <dir>', 'run as if started in <dir>'],\n ['--debug', 'show stack traces and debug logs'],\n];\n\nexport const COMMANDS: CommandHelp[] = [\n {\n name: 'init',\n summary: 'Create .devworkspace/ in the current project (safe to re-run)',\n usage: ['devworkspace init [--root <dir>] [--dry-run]'],\n options: [['--root <dir>', 'project root (default: Git top-level or current directory)'], ['--dry-run', 'show what would be created'], ...COMMON],\n examples: ['npx devworkspace init'],\n },\n {\n name: 'analyze',\n summary: 'Deterministic repository discovery + generate the Claude onboarding prompt',\n usage: ['devworkspace analyze [--dry-run]'],\n options: [['--dry-run', 'discover and report without writing files'], ...COMMON],\n examples: ['devworkspace analyze', 'devworkspace analyze --json'],\n },\n {\n name: 'status',\n summary: 'Concise overview: health, Git, knowledge, tasks, integrations, verification',\n usage: ['devworkspace status [--strict]'],\n options: [['--strict', 'exit 3 when anything needs attention'], ...COMMON],\n examples: ['devworkspace status', 'devworkspace status --json'],\n },\n {\n name: 'doctor',\n summary: 'Check the workspace, integrations, security and portability',\n usage: ['devworkspace doctor [--fix] [--strict]'],\n options: [['--fix', 'safely create missing folders/ignore rules (never deletes)'], ['--strict', 'exit 3 when there are warnings'], ...COMMON],\n examples: ['devworkspace doctor', 'devworkspace doctor --json --strict'],\n },\n {\n name: 'refresh',\n summary: 'Re-derive deterministic facts and mark knowledge stale when its evidence changed',\n usage: ['devworkspace refresh [--dry-run]'],\n options: [['--dry-run', 'report stale knowledge without writing'], ...COMMON],\n examples: ['devworkspace refresh'],\n },\n {\n name: 'context',\n summary: 'Show what DevWorkspace believes about the project',\n usage: ['devworkspace context [--topic <prefix>] [--full]'],\n options: [['--topic <text>', 'only facts whose key contains <text>'], ['--full', 'also print .devworkspace/context/*.md'], ...COMMON],\n examples: ['devworkspace context --topic auth'],\n },\n {\n name: 'fact',\n summary: 'Record, verify or remove a piece of project knowledge',\n usage: [\n 'devworkspace fact add --key <key> --value <text> --source <desc> [--file <rel path>]... [--source-type ai|user|file|git] [--confidence HIGH|MEDIUM|LOW] [--status VERIFIED|INFERRED|UNKNOWN]',\n 'devworkspace fact verify <key>',\n 'devworkspace fact remove <key>',\n 'devworkspace fact list',\n ],\n options: [\n ['--key', 'lowercase dotted key, e.g. auth.session-store'],\n ['--value', 'one concise sentence (no secrets, no absolute paths)'],\n ['--file <path>', 'repository file that evidences the fact (repeatable); used for staleness'],\n ...COMMON,\n ],\n examples: ['devworkspace fact add --key auth.sessions --value \"Sessions live in Redis\" --source \"src/auth/session.ts\" --file src/auth/session.ts --source-type ai --confidence HIGH --status VERIFIED'],\n },\n {\n name: 'task',\n summary: 'Track engineering tasks with a completion gate',\n usage: [\n 'devworkspace task new \"<request>\" [--type BUG|FEATURE|...]',\n 'devworkspace task list [--all] (alias: devworkspace tasks)',\n 'devworkspace task show <id>',\n 'devworkspace task status <id> <STATUS> [--note <text>]',\n 'devworkspace task update <id> [--title ..] [--criteria ..]... [--plan ..]... [--area ..]... [--blocker ..]... [--require <check>]... [--summary ..]',\n 'devworkspace task verify <id> <check> pass|fail|skip|pending [--reason user-override] [--detail <text>]',\n 'devworkspace task tests <id> --phase baseline|after --passed <n> --failed <n>',\n 'devworkspace task attest <id> [--user-work-intact] [--knowledge-reviewed] [--final-state-inspected]',\n ],\n options: [['--all', 'include completed tasks'], ...COMMON],\n examples: ['devworkspace task new \"Fix the quotation email bug\"', 'devworkspace task status T-20260101-ab12 COMPLETED'],\n },\n {\n name: 'decision',\n summary: 'Record architectural/project decisions (append-only, human-readable)',\n usage: [\n 'devworkspace decision add --title <t> --context <c> --decision <d> --consequences <q> [--supersedes <n>]',\n 'devworkspace decision list',\n 'devworkspace decision show <n>',\n ],\n options: COMMON,\n examples: ['devworkspace decision list'],\n },\n {\n name: 'session',\n summary: 'Save or list short session summaries (never transcripts)',\n usage: [\n 'devworkspace session save --goal <g> [--done <x>]... [--area <a>]... [--tests-run <t>]... [--decision-note <d>]... [--remaining <r>]... [--next <n>] [--task <id>]',\n 'devworkspace session list',\n ],\n options: COMMON,\n examples: ['devworkspace session save --goal \"Fix login bug\" --done \"Added regression test\" --next \"Run e2e\"'],\n },\n {\n name: 'agent',\n summary: 'Install DevWorkspace instructions for a coding agent (default: claude)',\n usage: ['devworkspace agent install [--agent claude] [--dry-run]'],\n options: [['--agent <id>', 'agent adapter (default: claude)'], ['--dry-run', 'preview the files that would change'], ...COMMON],\n examples: ['devworkspace agent install --dry-run'],\n },\n {\n name: 'export',\n summary: 'Export portable project knowledge to a JSON bundle',\n usage: ['devworkspace export [--out <file>] [--dry-run]'],\n options: [['--out <file>', 'output path (default: devworkspace-export-<date>.json)'], ...COMMON],\n examples: ['devworkspace export --out knowledge.json'],\n },\n {\n name: 'import',\n summary: 'Safely import an export bundle (validated; never silently overwrites)',\n usage: ['devworkspace import <file> [--dry-run] [--overwrite] [--allow-different-project]'],\n options: [['--overwrite', 'replace differing local files (backups are kept)'], ['--dry-run', 'show what would change'], ...COMMON],\n examples: ['devworkspace import knowledge.json --dry-run'],\n },\n {\n name: 'migrate',\n summary: 'Upgrade workspace files to the current schema (with backups)',\n usage: ['devworkspace migrate [--dry-run]'],\n options: [['--dry-run', 'list what would be migrated'], ...COMMON],\n examples: ['devworkspace migrate'],\n },\n];\n\nexport function topHelp(version: string): string {\n const w = Math.max(...COMMANDS.map((c) => c.name.length));\n return [\n `devworkspace ${version} - project-local AI engineering workspace`,\n '',\n 'Usage: devworkspace <command> [options]',\n '',\n 'Commands:',\n ...COMMANDS.map((c) => ` ${c.name.padEnd(w + 2)}${c.summary}`),\n '',\n 'Quick start:',\n ' cd my-project',\n ' npx devworkspace init',\n ' npx devworkspace analyze',\n ' # paste .devworkspace/analysis/onboarding-prompt.md into Claude Code',\n '',\n 'Global options: --json --cwd <dir> --debug --no-color --ascii --yes --help --version',\n '(DevWorkspace never prompts interactively, so --yes is accepted as a no-op for script compatibility.)',\n 'Exit codes: 0 ok · 1 failure · 2 usage error · 3 warnings (only with --strict) · 130 interrupted',\n 'Run \"devworkspace <command> --help\" for details.',\n ].join('\\n');\n}\n\nexport function commandHelp(c: CommandHelp): string {\n const w = Math.max(...c.options.map(([o]) => o.length));\n return [\n `devworkspace ${c.name} - ${c.summary}`,\n '',\n 'Usage:',\n ...c.usage.map((u) => ` ${u}`),\n '',\n 'Options:',\n ...c.options.map(([o, d]) => ` ${o.padEnd(w + 2)}${d}`),\n '',\n 'Examples:',\n ...c.examples.map((e) => ` ${e}`),\n ].join('\\n');\n}\n"]}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { EXIT } from '../errors/index.js';
|
|
3
|
+
import { runCleanups } from '../utils/cleanup.js';
|
|
4
|
+
import { run } from './run.js';
|
|
5
|
+
// Release locks and exit with the conventional 128+signal code. Atomic writes mean no file is ever left half-written.
|
|
6
|
+
for (const [sig, code] of [['SIGINT', EXIT.SIGINT], ['SIGTERM', EXIT.SIGTERM]]) {
|
|
7
|
+
process.on(sig, () => {
|
|
8
|
+
runCleanups();
|
|
9
|
+
process.stderr.write(`\nInterrupted (${sig}). Workspace files are written atomically, so no partial state was left behind.\n`);
|
|
10
|
+
process.exit(code);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
run(process.argv.slice(2)).then((code) => {
|
|
14
|
+
process.exitCode = code;
|
|
15
|
+
}, (e) => {
|
|
16
|
+
process.stderr.write(`✗ Fatal: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
17
|
+
process.exitCode = EXIT.FAILURE;
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,sHAAsH;AACtH,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAU,EAAE,CAAC;IACxF,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;QACnB,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,mFAAmF,CAAC,CAAC;QAC/H,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC7B,CAAC,IAAI,EAAE,EAAE;IACP,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,EACD,CAAC,CAAU,EAAE,EAAE;IACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjF,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;AAClC,CAAC,CACF,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { EXIT } from '../errors/index.js';\nimport { runCleanups } from '../utils/cleanup.js';\nimport { run } from './run.js';\n\n// Release locks and exit with the conventional 128+signal code. Atomic writes mean no file is ever left half-written.\nfor (const [sig, code] of [['SIGINT', EXIT.SIGINT], ['SIGTERM', EXIT.SIGTERM]] as const) {\n process.on(sig, () => {\n runCleanups();\n process.stderr.write(`\\nInterrupted (${sig}). Workspace files are written atomically, so no partial state was left behind.\\n`);\n process.exit(code);\n });\n}\n\nrun(process.argv.slice(2)).then(\n (code) => {\n process.exitCode = code;\n },\n (e: unknown) => {\n process.stderr.write(`✗ Fatal: ${e instanceof Error ? e.message : String(e)}\\n`);\n process.exitCode = EXIT.FAILURE;\n },\n);\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { DoctorResult } from '../services/doctor.js';
|
|
2
|
+
import type { StatusResult } from '../services/status.js';
|
|
3
|
+
import type { InitResult } from '../services/init.js';
|
|
4
|
+
import type { AnalyzeResult } from '../services/analysis.js';
|
|
5
|
+
import type { RefreshResult } from '../services/refresh.js';
|
|
6
|
+
import type { ContextResult } from '../services/knowledge.js';
|
|
7
|
+
import type { Task, GateResult } from '../tasks/task.js';
|
|
8
|
+
import type { AgentInstallResult } from '../services/agent.js';
|
|
9
|
+
import type { ImportResult, ExportResult } from '../services/portability.js';
|
|
10
|
+
import type { MigrateResult } from '../services/migrate.js';
|
|
11
|
+
export interface Style {
|
|
12
|
+
ok(s: string): string;
|
|
13
|
+
warn(s: string): string;
|
|
14
|
+
fail(s: string): string;
|
|
15
|
+
dim(s: string): string;
|
|
16
|
+
bold(s: string): string;
|
|
17
|
+
sym: {
|
|
18
|
+
ok: string;
|
|
19
|
+
warn: string;
|
|
20
|
+
fail: string;
|
|
21
|
+
info: string;
|
|
22
|
+
arrow: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare function makeStyle(opts: {
|
|
26
|
+
color: boolean;
|
|
27
|
+
ascii: boolean;
|
|
28
|
+
}): Style;
|
|
29
|
+
export declare function renderStatus(s: Style, r: StatusResult): string;
|
|
30
|
+
export declare function renderDoctor(s: Style, r: DoctorResult): string;
|
|
31
|
+
export declare function renderInit(s: Style, r: InitResult): string;
|
|
32
|
+
export declare function renderAnalyze(s: Style, r: AnalyzeResult): string;
|
|
33
|
+
export declare function renderRefresh(s: Style, r: RefreshResult): string;
|
|
34
|
+
export declare function renderContext(s: Style, r: ContextResult): string;
|
|
35
|
+
export declare function renderTask(s: Style, t: Task, gate?: GateResult): string;
|
|
36
|
+
export declare function renderAgentInstall(s: Style, r: AgentInstallResult): string;
|
|
37
|
+
export declare function renderExport(s: Style, r: ExportResult): string;
|
|
38
|
+
export declare function renderImport(s: Style, r: ImportResult): string;
|
|
39
|
+
export declare function renderMigrate(s: Style, r: MigrateResult): string;
|