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.
@@ -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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"}