autodev-cli 1.4.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/README.md +174 -0
- package/bin/autodev-ping.js +83 -0
- package/bin/autodev-watch.js +138 -0
- package/bin/autodev.js +11 -0
- package/out/cli.js +119 -0
- package/out/cli.js.map +1 -0
- package/out/commands/config.js +124 -0
- package/out/commands/config.js.map +1 -0
- package/out/commands/connect.js +66 -0
- package/out/commands/connect.js.map +1 -0
- package/out/commands/init.js +195 -0
- package/out/commands/init.js.map +1 -0
- package/out/commands/start.js +86 -0
- package/out/commands/start.js.map +1 -0
- package/out/commands/status.js +103 -0
- package/out/commands/status.js.map +1 -0
- package/out/commands/tailOutput.js +102 -0
- package/out/commands/tailOutput.js.map +1 -0
- package/out/commands/up.js +82 -0
- package/out/commands/up.js.map +1 -0
- package/out/connect.js +169 -0
- package/out/connect.js.map +1 -0
- package/out/launchIde.js +218 -0
- package/out/launchIde.js.map +1 -0
- package/out/logger.js +47 -0
- package/out/logger.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.connectCommand = connectCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const logger_1 = require("../logger");
|
|
39
|
+
const connect_1 = require("../connect");
|
|
40
|
+
function connectCommand(program) {
|
|
41
|
+
program
|
|
42
|
+
.command('connect [path]')
|
|
43
|
+
.description('Bind this workspace to a pixel-office WebSocket endpoint')
|
|
44
|
+
.option('--url <wsurl>', 'Full ws://… or wss://… URL (with ?token=&endpoint=)')
|
|
45
|
+
.option('--setup-url <url>', 'Signed pixel-office setup URL — credentials are fetched from it')
|
|
46
|
+
.action(async (workspacePath, opts) => {
|
|
47
|
+
const cwd = workspacePath ? path.resolve(workspacePath) : process.cwd();
|
|
48
|
+
try {
|
|
49
|
+
if (opts.setupUrl) {
|
|
50
|
+
await (0, connect_1.applySetupUrl)(cwd, opts.setupUrl);
|
|
51
|
+
}
|
|
52
|
+
else if (opts.url) {
|
|
53
|
+
(0, connect_1.applyWsUrl)(cwd, opts.url);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
logger_1.log.error('Pass either --setup-url=<url> or --url=<wsurl>.');
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
logger_1.log.error(err.message);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,wCAsBC;AAhCD,2CAA6B;AAE7B,sCAAgC;AAChC,wCAAuD;AAOvD,SAAgB,cAAc,CAAC,OAAgB;IAC7C,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,eAAe,EAAE,qDAAqD,CAAC;SAC9E,MAAM,CAAC,mBAAmB,EAAE,iEAAiE,CAAC;SAC9F,MAAM,CAAC,KAAK,EAAE,aAAiC,EAAE,IAAiB,EAAE,EAAE;QACrE,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACxE,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,IAAA,uBAAa,EAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACpB,IAAA,oBAAU,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,YAAG,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAG,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runInit = runInit;
|
|
37
|
+
exports.initCommand = initCommand;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const logger_1 = require("../logger");
|
|
41
|
+
const settings_1 = require("autoaidev/settings");
|
|
42
|
+
const hooks_1 = require("autoaidev/hooks");
|
|
43
|
+
const launchIde_1 = require("../launchIde");
|
|
44
|
+
const TODO_TEMPLATE = `# TODO
|
|
45
|
+
|
|
46
|
+
## Tasks
|
|
47
|
+
|
|
48
|
+
- [ ] Example task — replace with your real task
|
|
49
|
+
|
|
50
|
+
`;
|
|
51
|
+
function runInit(workspacePath, opts) {
|
|
52
|
+
const cwd = workspacePath ? path.resolve(workspacePath) : process.cwd();
|
|
53
|
+
if (!fs.existsSync(cwd)) {
|
|
54
|
+
fs.mkdirSync(cwd, { recursive: true });
|
|
55
|
+
logger_1.log.info(`Created workspace directory: ${cwd}`);
|
|
56
|
+
}
|
|
57
|
+
logger_1.log.section('🛠 AutoAIDev — Init');
|
|
58
|
+
logger_1.log.info(`Workspace: ${cwd}`);
|
|
59
|
+
// Create TODO.md
|
|
60
|
+
const todoPath = path.join(cwd, 'TODO.md');
|
|
61
|
+
if (fs.existsSync(todoPath) && !opts.force) {
|
|
62
|
+
logger_1.log.warn(`TODO.md already exists (use --force to overwrite)`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
fs.writeFileSync(todoPath, TODO_TEMPLATE, 'utf8');
|
|
66
|
+
logger_1.log.success(`Created ${todoPath}`);
|
|
67
|
+
}
|
|
68
|
+
// Create .autodev/settings.json (canonical path; legacy .vscode/autodev.json
|
|
69
|
+
// is still read transparently for back-compat).
|
|
70
|
+
const autodevDir = path.join(cwd, '.autodev');
|
|
71
|
+
const configPath = path.join(autodevDir, 'settings.json');
|
|
72
|
+
const legacyConfig = path.join(cwd, '.vscode', 'autodev.json');
|
|
73
|
+
const settingsExists = fs.existsSync(configPath);
|
|
74
|
+
if (settingsExists && !opts.force) {
|
|
75
|
+
logger_1.log.warn(`.autodev/settings.json already exists (use --force to overwrite)`);
|
|
76
|
+
// Even when not overwriting, patch in any explicit customization toggles.
|
|
77
|
+
if (opts.git === true || opts.fileBrowser === true || opts.profile) {
|
|
78
|
+
try {
|
|
79
|
+
const cur = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
80
|
+
if (opts.git === true) {
|
|
81
|
+
cur.gitEnabled = true;
|
|
82
|
+
}
|
|
83
|
+
if (opts.fileBrowser === true) {
|
|
84
|
+
cur.enableFileBrowser = true;
|
|
85
|
+
}
|
|
86
|
+
if (opts.profile) {
|
|
87
|
+
cur.profilePath = opts.profile;
|
|
88
|
+
}
|
|
89
|
+
fs.writeFileSync(configPath, JSON.stringify(cur, null, 2), 'utf8');
|
|
90
|
+
logger_1.log.gray(`Patched ${configPath} with customization toggles`);
|
|
91
|
+
}
|
|
92
|
+
catch { /* ignore */ }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
if (!fs.existsSync(autodevDir)) {
|
|
97
|
+
fs.mkdirSync(autodevDir, { recursive: true });
|
|
98
|
+
}
|
|
99
|
+
let settings = {
|
|
100
|
+
...settings_1.SETTINGS_DEFAULTS,
|
|
101
|
+
provider: opts.provider,
|
|
102
|
+
// hooks default ON for new workspaces — without them, pixel-office never
|
|
103
|
+
// sees tool_start/tool_end/etc. and the office UI looks empty.
|
|
104
|
+
hooksEnabled: true,
|
|
105
|
+
hooksScope: 'project',
|
|
106
|
+
};
|
|
107
|
+
// If a legacy file exists, port its values forward so users keep their config.
|
|
108
|
+
if (fs.existsSync(legacyConfig)) {
|
|
109
|
+
try {
|
|
110
|
+
const legacy = JSON.parse(fs.readFileSync(legacyConfig, 'utf8'));
|
|
111
|
+
settings = { ...settings, ...legacy };
|
|
112
|
+
logger_1.log.gray(`Imported config from legacy ${legacyConfig}`);
|
|
113
|
+
}
|
|
114
|
+
catch { /* ignore parse errors */ }
|
|
115
|
+
}
|
|
116
|
+
// Apply customization toggles last so they win over legacy values.
|
|
117
|
+
if (opts.git === true) {
|
|
118
|
+
settings.gitEnabled = true;
|
|
119
|
+
}
|
|
120
|
+
if (opts.fileBrowser === true) {
|
|
121
|
+
settings.enableFileBrowser = true;
|
|
122
|
+
}
|
|
123
|
+
if (opts.profile) {
|
|
124
|
+
settings.profilePath = opts.profile;
|
|
125
|
+
}
|
|
126
|
+
fs.writeFileSync(configPath, JSON.stringify(settings, null, 2), 'utf8');
|
|
127
|
+
logger_1.log.success(`Created ${configPath}`);
|
|
128
|
+
}
|
|
129
|
+
// Install Claude/Copilot hook scripts so pixel-office sees per-tool events
|
|
130
|
+
// for this workspace. Skipped with --no-hooks, or if already installed.
|
|
131
|
+
if (opts.hooks !== false) {
|
|
132
|
+
try {
|
|
133
|
+
if (!(0, hooks_1.areHooksInstalled)('project', cwd)) {
|
|
134
|
+
(0, hooks_1.installHooks)('project', cwd);
|
|
135
|
+
logger_1.log.success('Installed agent hooks (Claude + Copilot) under .claude/.github/copilot');
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
logger_1.log.gray('Agent hooks already installed.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
logger_1.log.warn(`Hooks install skipped: ${err.message}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Add .autodev/ to .gitignore (covers settings + runtime state).
|
|
146
|
+
const gitignorePath = path.join(cwd, '.gitignore');
|
|
147
|
+
const entry = '.autodev/';
|
|
148
|
+
try {
|
|
149
|
+
let content = fs.existsSync(gitignorePath) ? fs.readFileSync(gitignorePath, 'utf8') : '';
|
|
150
|
+
if (!content.split('\n').map(l => l.trim()).includes(entry)) {
|
|
151
|
+
if (content.length > 0 && !content.endsWith('\n')) {
|
|
152
|
+
content += '\n';
|
|
153
|
+
}
|
|
154
|
+
fs.writeFileSync(gitignorePath, content + `${entry}\n`, 'utf8');
|
|
155
|
+
logger_1.log.success(`Added ${entry} to .gitignore`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch { /* ignore */ }
|
|
159
|
+
// Optional IDE launch
|
|
160
|
+
if (opts.ide) {
|
|
161
|
+
if (!(0, launchIde_1.isIdeId)(opts.ide)) {
|
|
162
|
+
logger_1.log.error(`Unknown --ide value "${opts.ide}". Valid: vscode | cursor`);
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
const ide = opts.ide;
|
|
166
|
+
if (opts.extension !== false && !(0, launchIde_1.isAutodevExtensionInstalled)(ide)) {
|
|
167
|
+
const vsix = (0, launchIde_1.findBundledVsix)();
|
|
168
|
+
(0, launchIde_1.installAutodevExtension)(ide, vsix ?? undefined);
|
|
169
|
+
}
|
|
170
|
+
if (opts.launch !== false) {
|
|
171
|
+
(0, launchIde_1.launchIde)(ide, cwd);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
logger_1.log.plain('');
|
|
175
|
+
logger_1.log.success('Done! Edit TODO.md then run:');
|
|
176
|
+
logger_1.log.info(` autodev start ${workspacePath ?? '.'}`);
|
|
177
|
+
}
|
|
178
|
+
function initCommand(program) {
|
|
179
|
+
program
|
|
180
|
+
.command('init [path]')
|
|
181
|
+
.description('Initialise a workspace: create TODO.md and .autodev/settings.json')
|
|
182
|
+
.option('-p, --provider <provider>', 'Default AI provider', 'claude-cli')
|
|
183
|
+
.option('--ide <ide>', 'Launch IDE after init: vscode | cursor')
|
|
184
|
+
.option('--no-launch', 'Do not actually launch the IDE (only install extension)')
|
|
185
|
+
.option('--no-extension', 'Skip auto-installing the autoaidev extension')
|
|
186
|
+
.option('--no-hooks', 'Skip auto-installing agent hooks')
|
|
187
|
+
.option('--git', 'Enable git auto-commit (sets gitEnabled=true)')
|
|
188
|
+
.option('--file-browser', 'Enable file browser tab (sets enableFileBrowser=true)')
|
|
189
|
+
.option('--profile <path>', 'Use this AUTODEV.md profile (sets profilePath)')
|
|
190
|
+
.option('--force', 'Overwrite existing files')
|
|
191
|
+
.action((workspacePath, opts) => {
|
|
192
|
+
runInit(workspacePath, opts);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.startCommand = startCommand;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const logger_1 = require("../logger");
|
|
40
|
+
const sdk_1 = require("autoaidev/sdk");
|
|
41
|
+
const PROVIDERS = ['claude-cli', 'copilot-cli', 'opencode-cli'];
|
|
42
|
+
function startCommand(program) {
|
|
43
|
+
program
|
|
44
|
+
.command('start [path]')
|
|
45
|
+
.description('Start the autonomous task loop in a workspace directory')
|
|
46
|
+
.option('-p, --provider <provider>', `AI provider: ${PROVIDERS.join(' | ')}`, 'claude-cli')
|
|
47
|
+
.option('--todo <file>', 'Path to TODO.md (relative to workspace)', 'TODO.md')
|
|
48
|
+
.action(async (workspacePath, opts) => {
|
|
49
|
+
const cwd = workspacePath ? path.resolve(workspacePath) : process.cwd();
|
|
50
|
+
const todoFile = path.resolve(cwd, opts.todo);
|
|
51
|
+
if (!PROVIDERS.includes(opts.provider)) {
|
|
52
|
+
logger_1.log.error(`Unknown provider "${opts.provider}". Valid: ${PROVIDERS.join(', ')}`);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
if (!fs.existsSync(todoFile)) {
|
|
56
|
+
logger_1.log.error(`No TODO.md found at ${todoFile}`);
|
|
57
|
+
logger_1.log.info('Run `autodev init` to create a starter TODO.md');
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
logger_1.log.section('🤖 AutoAIDev — Autonomous Task Loop');
|
|
61
|
+
logger_1.log.info(`Workspace : ${cwd}`);
|
|
62
|
+
logger_1.log.info(`Provider : ${opts.provider}`);
|
|
63
|
+
logger_1.log.info(`TODO.md : ${todoFile}`);
|
|
64
|
+
logger_1.log.plain('');
|
|
65
|
+
logger_1.log.gray('Press Ctrl+C to stop the loop gracefully.\n');
|
|
66
|
+
// Graceful shutdown on Ctrl+C
|
|
67
|
+
process.on('SIGINT', () => {
|
|
68
|
+
logger_1.log.warn('\n⏹ Stopping task loop…');
|
|
69
|
+
sdk_1.AutoDev.loop.stop();
|
|
70
|
+
});
|
|
71
|
+
try {
|
|
72
|
+
const options = {
|
|
73
|
+
cwd,
|
|
74
|
+
provider: opts.provider,
|
|
75
|
+
log: logger_1.log.auto,
|
|
76
|
+
};
|
|
77
|
+
await sdk_1.AutoDev.loop.start(options);
|
|
78
|
+
logger_1.log.success('\n✅ Task loop finished.');
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
logger_1.log.error(`Loop error: ${err.message}`);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,oCAmDC;AA3DD,uCAAyB;AACzB,2CAA6B;AAE7B,sCAAgC;AAChC,uCAA0D;AAE1D,MAAM,SAAS,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAU,CAAC;AAEzE,SAAgB,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CACL,2BAA2B,EAC3B,gBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EACvC,YAAY,CACb;SACA,MAAM,CAAC,eAAe,EAAE,yCAAyC,EAAE,SAAS,CAAC;SAC7E,MAAM,CAAC,KAAK,EAAE,aAAiC,EAAE,IAAwC,EAAE,EAAE;QAC5F,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAoC,CAAC,EAAE,CAAC;YACnE,YAAG,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,QAAQ,aAAa,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,YAAG,CAAC,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;YAC7C,YAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,YAAG,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACnD,YAAG,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;QAC/B,YAAG,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,YAAG,CAAC,IAAI,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;QACpC,YAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACd,YAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAExD,8BAA8B;QAC9B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,YAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACrC,aAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,OAAO,GAAqB;gBAChC,GAAG;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAwC;gBACvD,GAAG,EAAE,YAAG,CAAC,IAAI;aACd,CAAC;YACF,MAAM,aAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClC,YAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,YAAG,CAAC,KAAK,CAAC,eAAgB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.statusCommand = statusCommand;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const logger_1 = require("../logger");
|
|
40
|
+
const todo_1 = require("autoaidev/todo");
|
|
41
|
+
const settings_1 = require("autoaidev/settings");
|
|
42
|
+
function statusCommand(program) {
|
|
43
|
+
program
|
|
44
|
+
.command('status [path]')
|
|
45
|
+
.description('Show TODO.md task summary for a workspace')
|
|
46
|
+
.option('--all', 'Also list completed tasks')
|
|
47
|
+
.action((workspacePath, opts) => {
|
|
48
|
+
const cwd = workspacePath ? path.resolve(workspacePath) : process.cwd();
|
|
49
|
+
const settings = (0, settings_1.loadSettingsForRoot)(cwd);
|
|
50
|
+
const todoFile = settings.todoPath
|
|
51
|
+
? path.resolve(cwd, settings.todoPath)
|
|
52
|
+
: path.join(cwd, 'TODO.md');
|
|
53
|
+
if (!fs.existsSync(todoFile)) {
|
|
54
|
+
logger_1.log.error(`No TODO.md found at ${todoFile}`);
|
|
55
|
+
logger_1.log.info('Run `autodev init` to create one.');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const tasks = (0, todo_1.parseTodo)(todoFile);
|
|
59
|
+
const todo = tasks.filter(t => t.status === 'todo');
|
|
60
|
+
const active = tasks.filter(t => t.status === 'in-progress');
|
|
61
|
+
const done = tasks.filter(t => t.status === 'done');
|
|
62
|
+
const remaining = (0, todo_1.countRemaining)(tasks);
|
|
63
|
+
logger_1.log.section('📋 AutoDev Status');
|
|
64
|
+
logger_1.log.info(`Workspace : ${cwd}`);
|
|
65
|
+
logger_1.log.info(`TODO.md : ${todoFile}`);
|
|
66
|
+
logger_1.log.info(`Provider : ${settings.provider}`);
|
|
67
|
+
logger_1.log.plain('');
|
|
68
|
+
logger_1.log.plain(` Remaining : ${remaining}`);
|
|
69
|
+
logger_1.log.plain(` Todo : ${todo.length}`);
|
|
70
|
+
logger_1.log.plain(` Active : ${active.length}`);
|
|
71
|
+
logger_1.log.plain(` Done : ${done.length}`);
|
|
72
|
+
logger_1.log.plain('');
|
|
73
|
+
if (active.length > 0) {
|
|
74
|
+
logger_1.log.warn('⏳ In progress:');
|
|
75
|
+
for (const t of active) {
|
|
76
|
+
logger_1.log.warn(` [~] ${t.text}`);
|
|
77
|
+
}
|
|
78
|
+
logger_1.log.plain('');
|
|
79
|
+
}
|
|
80
|
+
if (todo.length > 0) {
|
|
81
|
+
logger_1.log.info('📌 Next tasks:');
|
|
82
|
+
for (const t of todo.slice(0, 10)) {
|
|
83
|
+
logger_1.log.plain(` [ ] ${t.text}`);
|
|
84
|
+
}
|
|
85
|
+
if (todo.length > 10) {
|
|
86
|
+
logger_1.log.gray(` … and ${todo.length - 10} more`);
|
|
87
|
+
}
|
|
88
|
+
logger_1.log.plain('');
|
|
89
|
+
}
|
|
90
|
+
if (opts.all && done.length > 0) {
|
|
91
|
+
logger_1.log.success('✅ Completed:');
|
|
92
|
+
for (const t of done) {
|
|
93
|
+
const date = t.completedDate ? ` (${t.completedDate})` : '';
|
|
94
|
+
logger_1.log.gray(` [x] ${t.text}${date}`);
|
|
95
|
+
}
|
|
96
|
+
logger_1.log.plain('');
|
|
97
|
+
}
|
|
98
|
+
if (remaining === 0) {
|
|
99
|
+
logger_1.log.success('✅ All tasks complete!');
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.tailOutputCommand = tailOutputCommand;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const logger_1 = require("../logger");
|
|
40
|
+
/**
|
|
41
|
+
* Print the most recent CLI output for an agent in the workspace.
|
|
42
|
+
*
|
|
43
|
+
* Each task dispatched by the loop tees Claude/Copilot/OpenCode's stdout into
|
|
44
|
+
* <root>/.autodev/output/<provider>/<messageId>.txt
|
|
45
|
+
* The pointer file <provider>.latest holds the current messageId. Reading
|
|
46
|
+
* that file gives us the final message Claude wrote when it finished the
|
|
47
|
+
* task — useful for surfacing the agent's own summary instead of just the
|
|
48
|
+
* loop's "Task done" log line.
|
|
49
|
+
*/
|
|
50
|
+
function tailOutputCommand(program) {
|
|
51
|
+
program
|
|
52
|
+
.command('tail-output [path]')
|
|
53
|
+
.description('Print the agent CLI\'s most recent stdout (final message)')
|
|
54
|
+
.option('--raw', 'Print raw bytes (no BOM stripping)')
|
|
55
|
+
.action((workspacePath, opts) => {
|
|
56
|
+
const cwd = workspacePath ? path.resolve(workspacePath) : process.cwd();
|
|
57
|
+
const outputDir = path.join(cwd, '.autodev', 'output');
|
|
58
|
+
if (!fs.existsSync(outputDir)) {
|
|
59
|
+
logger_1.log.error(`No .autodev/output directory in ${cwd}`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
const pointers = fs.readdirSync(outputDir)
|
|
63
|
+
.filter(f => f.endsWith('.latest'))
|
|
64
|
+
.map(f => ({
|
|
65
|
+
provider: f.replace(/\.latest$/, ''),
|
|
66
|
+
file: path.join(outputDir, f),
|
|
67
|
+
mtime: fs.statSync(path.join(outputDir, f)).mtimeMs,
|
|
68
|
+
}))
|
|
69
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
70
|
+
if (pointers.length === 0) {
|
|
71
|
+
logger_1.log.error('No .latest pointer found - has the loop run yet?');
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const ptr = pointers[0];
|
|
75
|
+
const messageId = fs.readFileSync(ptr.file, 'utf8').trim();
|
|
76
|
+
const txtFile = path.join(outputDir, ptr.provider, `${messageId}.txt`);
|
|
77
|
+
if (!fs.existsSync(txtFile)) {
|
|
78
|
+
logger_1.log.error(`Output file missing: ${txtFile}`);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
logger_1.log.info(`provider: ${ptr.provider}`);
|
|
82
|
+
logger_1.log.info(`messageId: ${messageId}`);
|
|
83
|
+
logger_1.log.info(`file: ${txtFile}`);
|
|
84
|
+
logger_1.log.plain('');
|
|
85
|
+
const buf = fs.readFileSync(txtFile);
|
|
86
|
+
let text;
|
|
87
|
+
if (!opts.raw && buf.length >= 2 && buf[0] === 0xff && buf[1] === 0xfe) {
|
|
88
|
+
text = buf.slice(2).toString('utf16le');
|
|
89
|
+
}
|
|
90
|
+
else if (!opts.raw && buf.length >= 2 && buf[0] === 0xfe && buf[1] === 0xff) {
|
|
91
|
+
text = buf.slice(2).swap16().toString('utf16le');
|
|
92
|
+
}
|
|
93
|
+
else if (!opts.raw && buf.length >= 3 && buf[0] === 0xef && buf[1] === 0xbb && buf[2] === 0xbf) {
|
|
94
|
+
text = buf.slice(3).toString('utf8');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
text = buf.toString('utf8');
|
|
98
|
+
}
|
|
99
|
+
console.log(text.trim() || '(empty - task may still be running)');
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=tailOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailOutput.js","sourceRoot":"","sources":["../../src/commands/tailOutput.ts"],"names":[],"mappings":"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"}
|